gc: remove type elision in struct literals
R=ken2
CC=golang-dev
https://golang.org/cl/5437136
diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c
index 802d6dc..eb6e84e 100644
--- a/src/cmd/gc/typecheck.c
+++ b/src/cmd/gc/typecheck.c
@@ -2183,7 +2183,7 @@
s = f->sym;
fielddup(newname(s), hash, nhash);
r = l->right;
- pushtype(r, f->type);
+ // No pushtype allowed here. Tried and rejected.
typecheck(&r, Erv);
l->right = assignconv(r, f->type, "field value");
}
diff --git a/test/complit.go b/test/complit.go
index c9de616..8dfc71d 100644
--- a/test/complit.go
+++ b/test/complit.go
@@ -58,7 +58,7 @@
var tp *T
tp = &T{0, 7.2, "hi", &t}
- tl := &T{i: 0, next: {i: 1, next: {i: 2, next: {i: 3, next: {i: 4}}}}}
+ tl := &T{i: 0, next: &T{i: 1, next: &T{i: 2, next: &T{i: 3, next: &T{i: 4}}}}}
teq(tl, 5)
a1 := []int{1, 2, 3}
diff --git a/test/complit1.go b/test/complit1.go
index f4f7311..aaf701f 100644
--- a/test/complit1.go
+++ b/test/complit1.go
@@ -34,6 +34,6 @@
var (
_ = &T{0, 0, "", nil} // ok
- _ = &T{i: 0, f: 0, s: "", next: {}} // ok
+ _ = &T{i: 0, f: 0, s: "", next: {}} // ERROR "missing type in composite literal"
_ = &T{0, 0, "", {}} // ERROR "missing type in composite literal"
)