summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-09-14 14:27:19 -0700
committerRuss Cox <rsc@golang.org>2009-09-14 14:27:19 -0700
commit05c42432e82ed9984de9975303fed40bc0cc09d7 (patch)
treef8ba8781fbb6fd3d4f3bea34a12e7a7974a5ef14 /src
parent5572bbc2daf854d1202a23531508388f8f41e667 (diff)
downloadgolang-05c42432e82ed9984de9975303fed40bc0cc09d7.tar.gz
make 5g, 8g build again by disabling init code.
R=ken OCL=34604 CL=34604
Diffstat (limited to 'src')
-rw-r--r--src/cmd/5g/cgen.c4
-rw-r--r--src/cmd/5g/gg.h1
-rw-r--r--src/cmd/5g/ggen.c113
-rw-r--r--src/cmd/8g/cgen.c4
-rw-r--r--src/cmd/8g/ggen.c130
5 files changed, 2 insertions, 250 deletions
diff --git a/src/cmd/5g/cgen.c b/src/cmd/5g/cgen.c
index b99350c31..d9876adf9 100644
--- a/src/cmd/5g/cgen.c
+++ b/src/cmd/5g/cgen.c
@@ -60,10 +60,6 @@ cgen(Node *n, Node *res)
while(n->op == OCONVNOP)
n = n->left;
- // static initializations
- if(initflag && gen_as_init(n, res))
- goto ret;
-
if(n->ullman >= UINF) {
if(n->op == OINDREG)
fatal("cgen: this is going to misscompile");
diff --git a/src/cmd/5g/gg.h b/src/cmd/5g/gg.h
index ded072f34..34b330e55 100644
--- a/src/cmd/5g/gg.h
+++ b/src/cmd/5g/gg.h
@@ -82,7 +82,6 @@ void genconv(Type*, Type*);
void allocparams(void);
void checklabels();
void ginscall(Node*, int);
-int gen_as_init(Node*, Node*);
/*
* cgen
diff --git a/src/cmd/5g/ggen.c b/src/cmd/5g/ggen.c
index a3306b44f..abd44e51b 100644
--- a/src/cmd/5g/ggen.c
+++ b/src/cmd/5g/ggen.c
@@ -536,118 +536,7 @@ no:
}
int
-gen_as_init(Node *nr, Node *nl)
+gen_as_init(Node *n)
{
- Node nam, nod1;
- Prog *p;
-
- if(!initflag)
- goto no;
-
- if(nr == N) {
- if(!stataddr(&nam, nl))
- goto no;
- if(nam.class != PEXTERN)
- goto no;
- return 1;
- }
-
- if(nr->op == OCOMPSLICE) {
- // create a slice pointing to an array
- if(!stataddr(&nam, nl)) {
- dump("stataddr", nl);
- goto no;
- }
-
- p = gins(ADATA, &nam, nr->left);
- p->reg = types[tptr]->width;
- p->to.type = D_CONST;
-//print("%P\n", p);
-
- nodconst(&nod1, types[TINT32], nr->left->type->bound);
- p = gins(ADATA, &nam, &nod1);
- p->reg = types[TINT32]->width;
- p->from.offset += types[tptr]->width;
-//print("%P\n", p);
-
- p = gins(ADATA, &nam, &nod1);
- p->reg = types[TINT32]->width;
- p->from.offset += types[tptr]->width+types[TINT32]->width;
-
- goto yes;
- }
-
- if(nr->op == OCOMPMAP) {
- goto yes;
- }
-
- if(nr->type == T ||
- !eqtype(nl->type, nr->type))
- goto no;
-
- if(!stataddr(&nam, nl))
- goto no;
- if(nam.class != PEXTERN)
- goto no;
-
- switch(nr->op) {
- default:
- goto no;
-
- case OLITERAL:
- goto lit;
- }
-
-no:
return 0;
-
-lit:
- switch(nr->type->etype) {
- default:
- goto no;
-
- case TBOOL:
- if(memcmp(nam.sym->name, "initdoneĀ·", 9) == 0)
- goto no;
- case TINT8:
- case TUINT8:
- case TINT16:
- case TUINT16:
- case TINT32:
- case TUINT32:
- case TINT64:
- case TUINT64:
- case TINT:
- case TUINT:
- case TFLOAT32:
- case TFLOAT64:
- case TFLOAT:
- p = gins(ADATA, &nam, nr);
- p->reg = nr->type->width;
- break;
-
- case TSTRING:
- p = gins(ADATA, &nam, N);
- datastring(nr->val.u.sval->s, nr->val.u.sval->len, &p->to);
- p->reg = types[tptr]->width;
- p->to.type = D_CONST;
-//print("%P\n", p);
-
- nodconst(&nod1, types[TINT32], nr->val.u.sval->len);
- p = gins(ADATA, &nam, &nod1);
- p->reg = types[TINT32]->width;
- p->from.offset += types[tptr]->width;
-//print("%P\n", p);
-
- p = gins(ADATA, &nam, &nod1);
- p->reg = types[TINT32]->width;
- p->from.offset += types[tptr]->width+types[TINT32]->width;
- break;
- }
-
-yes:
-//dump("\ngen_as_init", nl);
-//dump("", nr);
-//print("%P\n", p);
- return 1;
}
diff --git a/src/cmd/8g/cgen.c b/src/cmd/8g/cgen.c
index 94627f50b..6e22c5489 100644
--- a/src/cmd/8g/cgen.c
+++ b/src/cmd/8g/cgen.c
@@ -64,10 +64,6 @@ cgen(Node *n, Node *res)
while(n->op == OCONVNOP)
n = n->left;
- // static initializations
- if(initflag && gen_as_init(n, res))
- return;
-
// function calls on both sides? introduce temporary
if(n->ullman >= UINF && res->ullman >= UINF) {
tempalloc(&n1, n->type);
diff --git a/src/cmd/8g/ggen.c b/src/cmd/8g/ggen.c
index 7c4dfdbc2..c6abe174e 100644
--- a/src/cmd/8g/ggen.c
+++ b/src/cmd/8g/ggen.c
@@ -785,135 +785,7 @@ no:
}
int
-gen_as_init(Node *nr, Node *nl)
+gen_as_init(Node *n)
{
- Node nam, nod1, nhi, nlo;
- Prog *p;
- Addr a;
-
- if(!initflag)
- goto no;
-
- if(nr == N) {
- if(!stataddr(&nam, nl))
- goto no;
- if(nam.class != PEXTERN)
- goto no;
- return 1;
- }
-
- if(nr->op == OCOMPSLICE) {
- // create a slice pointing to an array
- if(!stataddr(&nam, nl)) {
- dump("stataddr", nl);
- goto no;
- }
-
- data();
- p = gins(ADATA, &nam, nr->left);
- p->from.scale = types[tptr]->width;
- p->to.index = p->to.type;
- p->to.type = D_ADDR;
-//print("%P\n", p);
-
- nodconst(&nod1, types[TINT32], nr->left->type->bound);
- p = gins(ADATA, &nam, &nod1);
- p->from.scale = types[TINT32]->width;
- p->from.offset += types[tptr]->width;
-//print("%P\n", p);
-
- p = gins(ADATA, &nam, &nod1);
- p->from.scale = types[TINT32]->width;
- p->from.offset += types[tptr]->width+types[TINT32]->width;
- text();
-
- goto yes;
- }
-
- if(nr->op == OCOMPMAP) {
- goto yes;
- }
-
- if(nr->type == T ||
- !eqtype(nl->type, nr->type))
- goto no;
-
- if(!stataddr(&nam, nl))
- goto no;
- if(nam.class != PEXTERN)
- goto no;
-
- switch(nr->op) {
- default:
- goto no;
-
- case OLITERAL:
- goto lit;
- }
-
-no:
return 0;
-
-lit:
- switch(nr->type->etype) {
- default:
- goto no;
-
- case TBOOL:
- if(memcmp(nam.sym->name, "initdoneĀ·", 9) == 0)
- goto no;
- case TINT8:
- case TUINT8:
- case TINT16:
- case TUINT16:
- case TINT32:
- case TUINT32:
- case TINT:
- case TUINT:
- case TFLOAT32:
- case TFLOAT64:
- case TFLOAT:
- data();
- p = gins(ADATA, &nam, nr);
- p->from.scale = nr->type->width;
- text();
- break;
-
- case TINT64:
- case TUINT64:
- data();
- split64(nr, &nlo, &nhi);
- p = gins(ADATA, &nam, &nlo);
- p->from.scale = 4;
- p = gins(ADATA, &nam, &nhi);
- p->from.scale = 4;
- p->from.offset += 4;
- splitclean();
- text();
- break;
-
- case TSTRING:
- datastring(nr->val.u.sval->s, nr->val.u.sval->len, &a);
- data();
- p = gins(ADATA, &nam, N);
- p->from.scale = types[tptr]->width;
- p->to = a;
- p->to.index = p->to.type;
- p->to.type = D_ADDR;
-//print("%P\n", p);
-
- nodconst(&nod1, types[TINT32], nr->val.u.sval->len);
- p = gins(ADATA, &nam, &nod1);
- p->from.scale = types[TINT32]->width;
- p->from.offset += types[tptr]->width;
-//print("%P\n", p);
- text();
- break;
- }
-
-yes:
-//dump("\ngen_as_init", nl);
-//dump("", nr);
-//print("%P\n", p);
- return 1;
}