summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd/gc/dcl.c2
-rw-r--r--src/cmd/gc/go.h1
-rw-r--r--src/cmd/gc/go.y20
-rw-r--r--test/fixedbugs/bug133.dir/bug0.go (renamed from test/bugs/bug133.dir/bug0.go)0
-rw-r--r--test/fixedbugs/bug133.dir/bug1.go (renamed from test/bugs/bug133.dir/bug1.go)0
-rw-r--r--test/fixedbugs/bug133.dir/bug2.go (renamed from test/bugs/bug133.dir/bug2.go)0
-rw-r--r--test/fixedbugs/bug133.go (renamed from test/bugs/bug133.go)0
-rw-r--r--test/golden.out8
8 files changed, 21 insertions, 10 deletions
diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c
index 12123b4a5..a60637c25 100644
--- a/src/cmd/gc/dcl.c
+++ b/src/cmd/gc/dcl.c
@@ -517,7 +517,7 @@ loop:
f->embedded = n->embedded;
f->sym = f->nname->sym;
if(pkgimportname != S && !exportname(f->sym->name))
- f->sym = pkglookup(f->sym->name, pkgimportname->name);
+ f->sym = pkglookup(f->sym->name, pkgcontext);
}
*t = f;
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index 6dc8393bd..e1f64b542 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -504,6 +504,7 @@ EXTERN Node* fskel;
EXTERN Node* addtop;
EXTERN char* context;
+EXTERN char* pkgcontext;
EXTERN int thechar;
EXTERN char* thestring;
EXTERN char* hunk;
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y
index 0a7cd0813..ac764b94d 100644
--- a/src/cmd/gc/go.y
+++ b/src/cmd/gc/go.y
@@ -80,7 +80,7 @@
%type <node> hidden_interfacedcl_list ohidden_interfacedcl_list hidden_interfacedcl_list_r
%type <node> hidden_interfacedcl
%type <node> hidden_funarg_list ohidden_funarg_list hidden_funarg_list_r
-%type <node> hidden_funres ohidden_funres hidden_importsym
+%type <node> hidden_funres ohidden_funres hidden_importsym hidden_pkg_importsym
%left LOROR
%left LANDAND
@@ -1730,23 +1730,23 @@ oliteral:
hidden_import:
LPACKAGE sym1
/* variables */
-| LVAR hidden_importsym hidden_type
+| LVAR hidden_pkg_importsym hidden_type
{
importvar($2, $3);
}
-| LCONST hidden_importsym '=' hidden_constant
+| LCONST hidden_pkg_importsym '=' hidden_constant
{
importconst($2, T, &$4);
}
-| LCONST hidden_importsym hidden_type '=' hidden_constant
+| LCONST hidden_pkg_importsym hidden_type '=' hidden_constant
{
importconst($2, $3, &$5);
}
-| LTYPE hidden_importsym hidden_type
+| LTYPE hidden_pkg_importsym hidden_type
{
importtype($2, $3);
}
-| LFUNC hidden_importsym '(' ohidden_funarg_list ')' ohidden_funres
+| LFUNC hidden_pkg_importsym '(' ohidden_funarg_list ')' ohidden_funres
{
importvar($2, functype(N, $4, $6));
}
@@ -1920,6 +1920,14 @@ hidden_importsym:
$$->sym = $3;
}
+hidden_pkg_importsym:
+ hidden_importsym
+ {
+ $$ = $1;
+ pkgcontext = $$->psym->name;
+ }
+
+
/*
* helpful error messages.
* THIS SECTION MUST BE AT THE END OF THE FILE.
diff --git a/test/bugs/bug133.dir/bug0.go b/test/fixedbugs/bug133.dir/bug0.go
index 48cd104c4..48cd104c4 100644
--- a/test/bugs/bug133.dir/bug0.go
+++ b/test/fixedbugs/bug133.dir/bug0.go
diff --git a/test/bugs/bug133.dir/bug1.go b/test/fixedbugs/bug133.dir/bug1.go
index 2ab5447e3..2ab5447e3 100644
--- a/test/bugs/bug133.dir/bug1.go
+++ b/test/fixedbugs/bug133.dir/bug1.go
diff --git a/test/bugs/bug133.dir/bug2.go b/test/fixedbugs/bug133.dir/bug2.go
index bf39f2f6f..bf39f2f6f 100644
--- a/test/bugs/bug133.dir/bug2.go
+++ b/test/fixedbugs/bug133.dir/bug2.go
diff --git a/test/bugs/bug133.go b/test/fixedbugs/bug133.go
index 2beeb074f..2beeb074f 100644
--- a/test/bugs/bug133.go
+++ b/test/fixedbugs/bug133.go
diff --git a/test/golden.out b/test/golden.out
index c52f21382..d70df181d 100644
--- a/test/golden.out
+++ b/test/golden.out
@@ -181,9 +181,6 @@ BUG: should not compile
=========== bugs/bug132.go
BUG: compilation succeeds incorrectly
-=========== bugs/bug133.go
-BUG: succeeds incorrectly
-
=========== fixedbugs/bug016.go
fixedbugs/bug016.go:7: overflow converting constant to uint
@@ -302,3 +299,8 @@ SIGSEGV: segmentation violation
Faulting address: 0x0
pc: xxx
+
+=========== fixedbugs/bug133.go
+fixedbugs/bug133.dir/bug2.go:11: undefined DOT i on bug0.T
+fixedbugs/bug133.dir/bug2.go:11: illegal types for operand: RETURN
+ int