From 883d68f885750806ca9a244ed1c19db58a971ab7 Mon Sep 17 00:00:00 2001 From: Robert Hencke Date: Mon, 25 Apr 2011 12:02:54 -0400 Subject: [PATCH] gc: allow complex types to be receiver types Fixes #1716. R=golang-dev, rsc1, rsc CC=golang-dev https://golang.org/cl/4439068 --- src/cmd/gc/align.c | 2 +- src/cmd/gc/subr.c | 2 +- test/fixedbugs/bug334.go | 31 +++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 test/fixedbugs/bug334.go diff --git a/src/cmd/gc/align.c b/src/cmd/gc/align.c index 4303bbd0f18..a8454bf1306 100644 --- a/src/cmd/gc/align.c +++ b/src/cmd/gc/align.c @@ -468,7 +468,7 @@ typeinit(void) okforadd[i] = 1; okforarith[i] = 1; okforconst[i] = 1; -// issimple[i] = 1; + issimple[i] = 1; } } diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c index 884bb439d85..bb250569406 100644 --- a/src/cmd/gc/subr.c +++ b/src/cmd/gc/subr.c @@ -488,7 +488,7 @@ algtype(Type *t) { int a; - if(issimple[t->etype] || isptr[t->etype] || iscomplex[t->etype] || + if(issimple[t->etype] || isptr[t->etype] || t->etype == TCHAN || t->etype == TFUNC || t->etype == TMAP) { if(t->width == widthptr) a = AMEMWORD; diff --git a/test/fixedbugs/bug334.go b/test/fixedbugs/bug334.go new file mode 100644 index 00000000000..870c9ae24fb --- /dev/null +++ b/test/fixedbugs/bug334.go @@ -0,0 +1,31 @@ +// $G $D/$F.go || echo BUG: bug334 + +// Copyright 2011 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. + +// Issue 1716 + +package main + +type ( + cplx64 complex64 + cplx128 complex128 +) + +func (c cplx64) Foo() {} +func (c cplx128) Foo() {} + +func main() { + var c64 cplx128 + var c128 cplx64 + c64.Foo() + c128.Foo() +} + +/* +bug334.go:16: invalid receiver type cplx64 +bug334.go:17: invalid receiver type cplx128 +bug334.go:22: c64.Foo undefined (type cplx128 has no field or method Foo) +bug334.go:23: c128.Foo undefined (type cplx64 has no field or method Foo) +*/