From: Russ Cox Date: Thu, 8 Nov 2012 21:07:05 +0000 (-0500) Subject: cmd/gc: fix export of inlined function body with type guard X-Git-Tag: go1.1rc2~1915 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=761830f48196aa1170b5224c1da34f4e20053ebd;p=gostls13.git cmd/gc: fix export of inlined function body with type guard When exporting a body containing x, ok := v.(Type) the definition for Type was not being included, so when the body was actually used, it would cause an "unknown type" compiler error. Fixes #4370. R=ken2 CC=golang-dev https://golang.org/cl/6827064 --- diff --git a/src/cmd/gc/export.c b/src/cmd/gc/export.c index 50303afd80..ad0dc740d6 100644 --- a/src/cmd/gc/export.c +++ b/src/cmd/gc/export.c @@ -152,6 +152,7 @@ reexportdep(Node *n) case OCONVIFACE: case OCONVNOP: case ODOTTYPE: + case ODOTTYPE2: case OSTRUCTLIT: case OPTRLIT: t = n->type; diff --git a/test/fixedbugs/issue4370.dir/p1.go b/test/fixedbugs/issue4370.dir/p1.go new file mode 100644 index 0000000000..d732c8b363 --- /dev/null +++ b/test/fixedbugs/issue4370.dir/p1.go @@ -0,0 +1,20 @@ +// 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. + +package p1 + +type Magic int + +type T struct { + x interface{} +} + +func (t *T) M() bool { + _, ok := t.x.(Magic) + return ok +} + +func F(t *T) { + println(t) +} diff --git a/test/fixedbugs/issue4370.dir/p2.go b/test/fixedbugs/issue4370.dir/p2.go new file mode 100644 index 0000000000..33370d07a4 --- /dev/null +++ b/test/fixedbugs/issue4370.dir/p2.go @@ -0,0 +1,16 @@ +// 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. + +package p2 + +import "./p1" + +type T struct { + p1.T +} + +func F() { + var t T + p1.F(&t.T) +} diff --git a/test/fixedbugs/issue4370.dir/p3.go b/test/fixedbugs/issue4370.dir/p3.go new file mode 100644 index 0000000000..13c996bc22 --- /dev/null +++ b/test/fixedbugs/issue4370.dir/p3.go @@ -0,0 +1,13 @@ +// 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. + +package p3 + +import "./p2" + +func F() { + p2.F() + var t p2.T + println(t.T.M()) +} diff --git a/test/fixedbugs/issue4370.go b/test/fixedbugs/issue4370.go new file mode 100644 index 0000000000..76b47e1a6d --- /dev/null +++ b/test/fixedbugs/issue4370.go @@ -0,0 +1,9 @@ +// compiledir + +// 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. + +// Re-exporting inlined function bodies missed types in x, ok := v.(Type) + +package ignored