From a2f13c8cf2656759742751f83e790010d49a2f6b Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 13 Jun 2012 16:24:52 -0400 Subject: [PATCH] [release-branch.go1] cmd/gc: fix LEAQ $0, SI bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ««« 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 »»» --- src/cmd/gc/gen.c | 3 +++ test/fixedbugs/bug444.go | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 test/fixedbugs/bug444.go diff --git a/src/cmd/gc/gen.c b/src/cmd/gc/gen.c index 694a10ab5cc..96e7b526c5e 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 00000000000..0bbd16faed3 --- /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 +}