diff options
author | Russ Cox <rsc@golang.org> | 2012-06-13 16:24:52 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2012-06-13 16:24:52 -0400 |
commit | a2f13c8cf2656759742751f83e790010d49a2f6b (patch) | |
tree | 785b3d175898eedcbccb52341478547499f293ae | |
parent | 0d5061ac952257fd3d9608cb1ca1d4a1534d5ed3 (diff) | |
download | go-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.c | 3 | ||||
-rw-r--r-- | test/fixedbugs/bug444.go | 19 |
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 +} |