aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2012-06-13 16:24:52 -0400
committerRuss Cox <rsc@golang.org>2012-06-13 16:24:52 -0400
commita2f13c8cf2656759742751f83e790010d49a2f6b (patch)
tree785b3d175898eedcbccb52341478547499f293ae
parent0d5061ac952257fd3d9608cb1ca1d4a1534d5ed3 (diff)
downloadgo-a2f13c8cf2656759742751f83e790010d49a2f6b.tar.gz
go-a2f13c8cf2656759742751f83e790010d49a2f6b.zip
[release-branch.go1] cmd/gc: fix LEAQ $0, SI bug
««« backport c4a344d25b87 cmd/gc: fix LEAQ $0, SI bug Cannot take effective address of constant. Fixes #3670. R=ken2 CC=golang-dev https://golang.org/cl/6299055 »»»
-rw-r--r--src/cmd/gc/gen.c3
-rw-r--r--test/fixedbugs/bug444.go19
2 files changed, 22 insertions, 0 deletions
diff --git a/src/cmd/gc/gen.c b/src/cmd/gc/gen.c
index 694a10ab5c..96e7b526c5 100644
--- a/src/cmd/gc/gen.c
+++ b/src/cmd/gc/gen.c
@@ -647,6 +647,9 @@ cgen_as(Node *nl, Node *nr)
dump("cgen_as = ", nr);
}
+ while(nr != N && nr->op == OCONVNOP)
+ nr = nr->left;
+
if(nl == N || isblank(nl)) {
cgen_discard(nr);
return;
diff --git a/test/fixedbugs/bug444.go b/test/fixedbugs/bug444.go
new file mode 100644
index 0000000000..0bbd16faed
--- /dev/null
+++ b/test/fixedbugs/bug444.go
@@ -0,0 +1,19 @@
+// run
+
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// The no-op conversion here used to confuse the compiler
+// into doing a load-effective-address of nil.
+
+package main
+
+import "reflect"
+
+type T interface {}
+
+func main() {
+ reflect.TypeOf(nil)
+ reflect.TypeOf(T(nil)) // used to fail
+}