From 20137eb4b9cdb2d71264e502333b1353f29a7e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Oudompheng?= Date: Tue, 21 Jan 2014 22:55:50 -0500 Subject: [PATCH] cmd/gc: preserve qualified names of unexported methods in imports. Fixes #6295. LGTM=rsc R=golang-codereviews, rsc CC=golang-codereviews https://golang.org/cl/20850043 --- src/cmd/gc/dcl.c | 2 -- test/fixedbugs/issue6295.dir/p0.go | 13 +++++++++++++ test/fixedbugs/issue6295.dir/p1.go | 26 ++++++++++++++++++++++++++ test/fixedbugs/issue6295.dir/p2.go | 19 +++++++++++++++++++ test/fixedbugs/issue6295.go | 10 ++++++++++ 5 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 test/fixedbugs/issue6295.dir/p0.go create mode 100644 test/fixedbugs/issue6295.dir/p1.go create mode 100644 test/fixedbugs/issue6295.dir/p2.go create mode 100644 test/fixedbugs/issue6295.go diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c index 6a4516668f0..7df1d97a8c6 100644 --- a/src/cmd/gc/dcl.c +++ b/src/cmd/gc/dcl.c @@ -941,8 +941,6 @@ interfacefield(Node *n) f->nname = n->left; f->embedded = n->embedded; f->sym = f->nname->sym; - if(importpkg && !exportname(f->sym->name)) - f->sym = pkglookup(f->sym->name, structpkg); } } else { diff --git a/test/fixedbugs/issue6295.dir/p0.go b/test/fixedbugs/issue6295.dir/p0.go new file mode 100644 index 00000000000..cf86fbcb56b --- /dev/null +++ b/test/fixedbugs/issue6295.dir/p0.go @@ -0,0 +1,13 @@ +// Copyright 2013 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 p0 + +type T0 interface { + m0() +} + +type S0 struct{} + +func (S0) m0() {} diff --git a/test/fixedbugs/issue6295.dir/p1.go b/test/fixedbugs/issue6295.dir/p1.go new file mode 100644 index 00000000000..974d02fb03b --- /dev/null +++ b/test/fixedbugs/issue6295.dir/p1.go @@ -0,0 +1,26 @@ +// Copyright 2013 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 + +import "./p0" + +type T1 interface { + p0.T0 + m1() +} + +type S1 struct { + p0.S0 +} + +func (S1) m1() {} + +func NewT0() p0.T0 { + return S1{} +} + +func NewT1() T1 { + return S1{} +} diff --git a/test/fixedbugs/issue6295.dir/p2.go b/test/fixedbugs/issue6295.dir/p2.go new file mode 100644 index 00000000000..4703ec03563 --- /dev/null +++ b/test/fixedbugs/issue6295.dir/p2.go @@ -0,0 +1,19 @@ +// Copyright 2013 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 ( + "./p0" + "./p1" +) + +var ( + _ p0.T0 = p0.S0{} + _ p0.T0 = p1.S1{} + _ p0.T0 = p1.NewT0() + _ p0.T0 = p1.NewT1() // same as p1.S1{} +) + +func main() {} diff --git a/test/fixedbugs/issue6295.go b/test/fixedbugs/issue6295.go new file mode 100644 index 00000000000..b8da21272ea --- /dev/null +++ b/test/fixedbugs/issue6295.go @@ -0,0 +1,10 @@ +// compiledir + +// Copyright 2013 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. + +// Issue 6295: qualified name of unexported methods +// is corrupted during import. + +package ignored