]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: fix LEAQ $0, SI bug
authorRuss Cox <rsc@golang.org>
Thu, 7 Jun 2012 15:59:18 +0000 (11:59 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 7 Jun 2012 15:59:18 +0000 (11:59 -0400)
Cannot take effective address of constant.

Fixes #3670.

R=ken2
CC=golang-dev
https://golang.org/cl/6299055

src/cmd/gc/gen.c
test/fixedbugs/bug444.go [new file with mode: 0644]

index 98066002773e85188df77d48b0e090df4d3be43f..569bf461738966594652e594f28452c6bab510d9 100644 (file)
@@ -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 (file)
index 0000000..0bbd16f
--- /dev/null
@@ -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
+}