From 2a9410c19c681f663aee1606289110881c62d640 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 7 Jun 2012 11:59:18 -0400 Subject: [PATCH] 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 98066002773..569bf461738 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 +}