mirror of
https://github.com/golang/go
synced 2024-11-11 19:31:37 -07:00
test: add test case that gccgo failed to link
Gccgo creates a struct to hold the arguments for the deferred function. In this example the struct holds a type defined in a different package. The bug was that gccgo tried to create an equality function for this struct, and it implemented that function by calling the equality function for the type defined in the other package. Since that type is not exported, the reference to the equality function failed at link time. Normally it is impossible for a struct to directly contain a member that is an unexported type from another package, but in this specific case it was possible. Fixed in gccgo with https://codereview.appspot.com/183500043 . Change-Id: I8ec3a33631225b9ac2a4ac060cb4d10b4635e60b Reviewed-on: https://go-review.googlesource.com/1690 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Minux Ma <minux@golang.org>
This commit is contained in:
parent
7e424ecdc1
commit
02f56bfb5c
16
test/fixedbugs/bug492.dir/a.go
Normal file
16
test/fixedbugs/bug492.dir/a.go
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright 2014 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 a
|
||||
|
||||
type s struct {
|
||||
s string
|
||||
}
|
||||
|
||||
func F1(s s) {
|
||||
}
|
||||
|
||||
func F2() s {
|
||||
return s{""}
|
||||
}
|
11
test/fixedbugs/bug492.dir/b.go
Normal file
11
test/fixedbugs/bug492.dir/b.go
Normal file
@ -0,0 +1,11 @@
|
||||
// Copyright 2014 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 main
|
||||
|
||||
import "./a"
|
||||
|
||||
func main() {
|
||||
defer a.F1(a.F2())
|
||||
}
|
9
test/fixedbugs/bug492.go
Normal file
9
test/fixedbugs/bug492.go
Normal file
@ -0,0 +1,9 @@
|
||||
// rundir
|
||||
|
||||
// Copyright 2014 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.
|
||||
|
||||
// Test case that gccgo failed to link.
|
||||
|
||||
package ignored
|
Loading…
Reference in New Issue
Block a user