function literals
go/test: passes 86% (297/343)
R=rsc
APPROVED=rsc
DELTA=14 (10 added, 1 deleted, 3 changed)
OCL=35881
CL=35884
diff --git a/src/cmd/5g/gsubr.c b/src/cmd/5g/gsubr.c
index ae85798..4a4c21b 100644
--- a/src/cmd/5g/gsubr.c
+++ b/src/cmd/5g/gsubr.c
@@ -189,7 +189,7 @@
void
afunclit(Addr *a)
{
- if(a->type == D_ADDR && a->name == D_EXTERN || a->type == D_REG) {
+ if(a->type == D_CONST && a->name == D_EXTERN || a->type == D_REG) {
a->type = D_OREG;
}
}
@@ -1099,6 +1099,7 @@
break;
case PFUNC:
a->name = D_EXTERN;
+ a->type = D_CONST;
break;
}
break;
@@ -1147,13 +1148,18 @@
case OADDR:
naddr(n->left, a);
- if(a->type == D_OREG) {
+ switch(a->type) {
+ case D_OREG:
a->type = D_CONST;
break;
- } else if (a->type == D_REG) {
+
+ case D_REG:
+ case D_CONST:
break;
+
+ default:
+ fatal("naddr: OADDR %d\n", a->type);
}
- fatal("naddr: OADDR %d\n", a->type);
}
}
diff --git a/test/arm-pass.txt b/test/arm-pass.txt
index 4953c32..6260510 100644
--- a/test/arm-pass.txt
+++ b/test/arm-pass.txt
@@ -72,6 +72,7 @@
fixedbugs/bug052.go
fixedbugs/bug053.go
fixedbugs/bug054.go
+fixedbugs/bug055.go
fixedbugs/bug056.go
fixedbugs/bug057.go
fixedbugs/bug058.go
@@ -253,6 +254,7 @@
ken/intervar.go
ken/label.go
ken/mfunc.go
+ken/ptrfun.go
ken/ptrvar.go
ken/range.go
ken/rob1.go
@@ -281,6 +283,7 @@
printbig.go
rename.go
rename1.go
+runtime.go
sieve.go
sigchld.go
simassign.go