[PATCH] [llgo] Use the object's package to mangle method names, rather than the receiver's package
Peter Collingbourne
peter at pcc.me.uk
Tue Dec 16 12:05:53 PST 2014
REPOSITORY
rL LLVM
http://reviews.llvm.org/D6673
Files:
llgo/trunk/irgen/typemap.go
llgo/trunk/test/irgen/Inputs/mangling-synthetic-p.go
llgo/trunk/test/irgen/mangling-dot.go
llgo/trunk/test/irgen/mangling-synthetic.go
llgo/trunk/test/irgen/mangling.go
Index: llgo/trunk/test/irgen/mangling.go
===================================================================
--- llgo/trunk/test/irgen/mangling.go
+++ llgo/trunk/test/irgen/mangling.go
@@ -1,7 +0,0 @@
-// RUN: llgo -fgo-pkgpath=llvm.org/llvm -S -emit-llvm -o - %s | FileCheck %s
-
-package llvm
-
-// CHECK: @llvm_org_llvm.F
-func F() {
-}
Index: llgo/trunk/test/irgen/Inputs/mangling-synthetic-p.go
===================================================================
--- llgo/trunk/test/irgen/Inputs/mangling-synthetic-p.go
+++ llgo/trunk/test/irgen/Inputs/mangling-synthetic-p.go
@@ -0,0 +1,4 @@
+package p
+
+type U struct{}
+func (U) f()
Index: llgo/trunk/test/irgen/mangling-dot.go
===================================================================
--- llgo/trunk/test/irgen/mangling-dot.go
+++ llgo/trunk/test/irgen/mangling-dot.go
@@ -0,0 +1,7 @@
+// RUN: llgo -fgo-pkgpath=llvm.org/llvm -S -emit-llvm -o - %s | FileCheck %s
+
+package llvm
+
+// CHECK: @llvm_org_llvm.F
+func F() {
+}
Index: llgo/trunk/test/irgen/mangling-synthetic.go
===================================================================
--- llgo/trunk/test/irgen/mangling-synthetic.go
+++ llgo/trunk/test/irgen/mangling-synthetic.go
@@ -0,0 +1,14 @@
+// RUN: llgo -fgo-pkgpath=p -c -o %T/p.o %S/Inputs/mangling-synthetic-p.go
+// RUN: llgo -fgo-pkgpath=q -I %T -S -emit-llvm -o - %s | FileCheck %s
+
+package q
+
+import "p"
+
+// CHECK-DAG: define linkonce_odr void @p.f.N3_q.T(i8*)
+// CHECK-DAG: define linkonce_odr void @p.f.pN3_q.T(i8*)
+type T struct { p.U }
+
+// CHECK-DAG: declare void @q.f.N3_q.T(i8*)
+// CHECK-DAG: define linkonce_odr void @q.f.pN3_q.T(i8*)
+func (T) f()
Index: llgo/trunk/irgen/typemap.go
===================================================================
--- llgo/trunk/irgen/typemap.go
+++ llgo/trunk/irgen/typemap.go
@@ -659,21 +659,25 @@
return b.String()
}
- pkg := f.Pkg
- var pkgobj *types.Package
- if pkg != nil {
- pkgobj = pkg.Object
- } else if f.Signature.Recv() != nil {
- pkgobj = f.Signature.Recv().Pkg()
- } else {
+ // Synthetic bound and thunk functions are special cases; they can only be
+ // distinguished using private data that is only exposed via String().
+ if strings.HasSuffix(f.Name(), "$bound") || strings.HasSuffix(f.Name(), "$thunk") {
b.WriteString(f.String())
return b.String()
}
+ var pkg *types.Package
+ if f.Pkg != nil {
+ pkg = f.Pkg.Object
+ } else if !f.Object().Exported() {
+ pkg = f.Object().Pkg()
+ }
+
if pkg != nil {
- ctx.manglePackagePath(pkgobj.Path(), &b)
+ ctx.manglePackagePath(pkg.Path(), &b)
b.WriteRune('.')
}
+
if f.Signature.Recv() == nil && f.Name() == "init" {
b.WriteString(".import")
} else {
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D6673.17352.patch
Type: text/x-patch
Size: 2699 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141216/ed2e527c/attachment.bin>
More information about the llvm-commits
mailing list