From 02f56bfb5c16cf51983f8d487124b34b080e5492 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 16 Dec 2014 14:54:20 -0800 Subject: [PATCH] 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 Reviewed-by: Minux Ma --- test/fixedbugs/bug492.dir/a.go | 16 ++++++++++++++++ test/fixedbugs/bug492.dir/b.go | 11 +++++++++++ test/fixedbugs/bug492.go | 9 +++++++++ 3 files changed, 36 insertions(+) create mode 100644 test/fixedbugs/bug492.dir/a.go create mode 100644 test/fixedbugs/bug492.dir/b.go create mode 100644 test/fixedbugs/bug492.go diff --git a/test/fixedbugs/bug492.dir/a.go b/test/fixedbugs/bug492.dir/a.go new file mode 100644 index 00000000000..90917e55e83 --- /dev/null +++ b/test/fixedbugs/bug492.dir/a.go @@ -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{""} +} diff --git a/test/fixedbugs/bug492.dir/b.go b/test/fixedbugs/bug492.dir/b.go new file mode 100644 index 00000000000..5b8c4f2a533 --- /dev/null +++ b/test/fixedbugs/bug492.dir/b.go @@ -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()) +} diff --git a/test/fixedbugs/bug492.go b/test/fixedbugs/bug492.go new file mode 100644 index 00000000000..050a9e5ee20 --- /dev/null +++ b/test/fixedbugs/bug492.go @@ -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