Created
December 16, 2014 22:44
-
-
Save minux/69994348b4f06b1c324b to your computer and use it in GitHub Desktop.
Issue 9355
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/cmd/6g/gsubr.c b/src/cmd/6g/gsubr.c | |
index 5bd9246..dae57af 100644 | |
--- a/src/cmd/6g/gsubr.c | |
+++ b/src/cmd/6g/gsubr.c | |
@@ -1115,6 +1115,8 @@ void | |
naddr(Node *n, Addr *a, int canemitcode) | |
{ | |
Sym *s; | |
+ Node *nn; | |
+ int64 oary[10]; | |
a->scale = 0; | |
a->index = D_NONE; | |
@@ -1279,6 +1281,14 @@ naddr(Node *n, Addr *a, int canemitcode) | |
break; | |
} | |
fatal("naddr: OADDR\n"); | |
+ | |
+ case ODOT: | |
+ if(dotoffset(n, oary, &nn) != 1) | |
+ fatal("naddr: ODOT\n"); | |
+ a->type = D_EXTERN; | |
+ a->sym = linksym(n->left->sym); | |
+ a->offset = oary[0]; | |
+ break; | |
case OITAB: | |
// itable of interface value | |
diff --git a/src/cmd/gc/sinit.c b/src/cmd/gc/sinit.c | |
index 8ad7ae7..de923e0 100644 | |
--- a/src/cmd/gc/sinit.c | |
+++ b/src/cmd/gc/sinit.c | |
@@ -374,12 +374,13 @@ staticcopy(Node *l, Node *r, NodeList **out) | |
static int | |
staticassign(Node *l, Node *r, NodeList **out) | |
{ | |
- Node *a, n1; | |
+ Node *a, n1, *nn; | |
Type *ta; | |
InitPlan *p; | |
InitEntry *e; | |
int i; | |
Strlit *sval; | |
+ int64 oary[10]; | |
switch(r->op) { | |
default: | |
@@ -406,6 +407,14 @@ staticassign(Node *l, Node *r, NodeList **out) | |
case ONAME: | |
gdata(l, r, l->type->width); | |
return 1; | |
+ | |
+ case ODOT: | |
+ // only handle the case where offset can be determined | |
+ // statically without following pointers | |
+ if(dotoffset(r->left, oary, &nn) != 1) | |
+ break; | |
+ gdata(l, r, l->type->width); | |
+ return 1; | |
} | |
case OPTRLIT: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment