mirror of https://github.com/golang/go.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
This commit is contained in:
parent
5451708d5b
commit
761830f481
|
|
@ -152,6 +152,7 @@ reexportdep(Node *n)
|
||||||
case OCONVIFACE:
|
case OCONVIFACE:
|
||||||
case OCONVNOP:
|
case OCONVNOP:
|
||||||
case ODOTTYPE:
|
case ODOTTYPE:
|
||||||
|
case ODOTTYPE2:
|
||||||
case OSTRUCTLIT:
|
case OSTRUCTLIT:
|
||||||
case OPTRLIT:
|
case OPTRLIT:
|
||||||
t = n->type;
|
t = n->type;
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
|
|
@ -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())
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
Loading…
Reference in New Issue