From: Russ Cox Date: Wed, 13 Jun 2012 20:24:52 +0000 (-0400) Subject: [release-branch.go1] cmd/gc: fix LEAQ $0, SI bug X-Git-Tag: go1.0.2~15 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=a2f13c8cf2656759742751f83e790010d49a2f6b;p=gostls13.git [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 »»» --- 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 +}