From 85195e2ccfcba41f1d0a4c8a6e1db6b3b6cc9691 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 9 Sep 2013 12:30:53 -0400 Subject: [PATCH] cmd/gc: more detail in import conflict error message Cannot happen when using the go command, but help people running commands by hand or with other tools. Fixes #5888. R=ken2 CC=golang-dev https://golang.org/cl/13324048 --- src/cmd/gc/export.c | 6 ++++-- src/cmd/gc/go.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cmd/gc/export.c b/src/cmd/gc/export.c index ece02bc3bd..31bcdf8e77 100644 --- a/src/cmd/gc/export.c +++ b/src/cmd/gc/export.c @@ -481,9 +481,10 @@ importvar(Sym *s, Type *t) if(s->def != N && s->def->op == ONAME) { if(eqtype(t, s->def->type)) return; - yyerror("inconsistent definition for var %S during import\n\t%T\n\t%T", s, s->def->type, t); + yyerror("inconsistent definition for var %S during import\n\t%T (in \"%Z\")\n\t%T (in \"%Z\")", s, s->def->type, s->importdef->path, t, importpkg->path); } n = newname(s); + s->importdef = importpkg; n->type = t; declare(n, PEXTERN); @@ -509,11 +510,12 @@ importtype(Type *pt, Type *t) n = pt->nod; copytype(pt->nod, t); pt->nod = n; // unzero nod + pt->sym->importdef = importpkg; pt->sym->lastlineno = parserline(); declare(n, PEXTERN); checkwidth(pt); } else if(!eqtype(pt->orig, t)) - yyerror("inconsistent definition for type %S during import\n\t%lT\n\t%lT", pt->sym, pt, t); + yyerror("inconsistent definition for type %S during import\n\t%lT (in \"%Z\")\n\t%lT (in \"%Z\")", pt->sym, pt, pt->sym->importdef->path, t, importpkg->path); if(debug['E']) print("import type %T %lT\n", pt, t); diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h index 8f0c2dfcf9..51f8fe67f8 100644 --- a/src/cmd/gc/go.h +++ b/src/cmd/gc/go.h @@ -380,6 +380,7 @@ struct Sym Sym* link; int32 npkg; // number of imported packages with this name uint32 uniqgen; + Pkg* importdef; // where imported definition was found // saved and restored by dcopy Pkg* pkg; -- 2.48.1