mirror of
https://github.com/golang/go
synced 2024-11-11 21:40:21 -07:00
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 OCONVNOP:
|
||||
case ODOTTYPE:
|
||||
case ODOTTYPE2:
|
||||
case OSTRUCTLIT:
|
||||
case OPTRLIT:
|
||||
t = n->type;
|
||||
|
20
test/fixedbugs/issue4370.dir/p1.go
Normal file
20
test/fixedbugs/issue4370.dir/p1.go
Normal file
@ -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)
|
||||
}
|
16
test/fixedbugs/issue4370.dir/p2.go
Normal file
16
test/fixedbugs/issue4370.dir/p2.go
Normal file
@ -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)
|
||||
}
|
13
test/fixedbugs/issue4370.dir/p3.go
Normal file
13
test/fixedbugs/issue4370.dir/p3.go
Normal file
@ -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())
|
||||
}
|
9
test/fixedbugs/issue4370.go
Normal file
9
test/fixedbugs/issue4370.go
Normal file
@ -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
Block a user