[gcc(refs/users/guojiufu/heads/guojiufu-branch)] cmd/go: update -DGOPKGPATH to use current pkgpath encoding

Jiu Fu Guo guojiufu@gcc.gnu.org
Wed Mar 11 02:05:55 GMT 2020


https://gcc.gnu.org/g:855b4aaeabdcddce04ff9295c4b0e6c7aa6db96b

commit 855b4aaeabdcddce04ff9295c4b0e6c7aa6db96b
Author: Ian Lance Taylor <iant@golang.org>
Date:   Mon Feb 17 18:16:41 2020 -0800

    cmd/go: update -DGOPKGPATH to use current pkgpath encoding
    
    This will need to be done in the gc version too, probably more cleverly.
    This version will ensure that the next GCC release works correctly
    when using the GCC version of the go tool.
    
    Updates golang/go#37272
    
    Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/219817

Diff:
---
 gcc/go/gofrontend/MERGE                |  2 +-
 libgo/go/cmd/go/internal/work/gccgo.go | 26 ++++++++++++++++++++------
 2 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 47dd5fbb908..ce10ee1d8d4 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-8505defaa91ecc5b42afd02eb335981e8b02b288
+d5d00d310ec33aeb18f33f807956ec0c4eeea6bb
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
diff --git a/libgo/go/cmd/go/internal/work/gccgo.go b/libgo/go/cmd/go/internal/work/gccgo.go
index f6fa17da85c..63d5c624f79 100644
--- a/libgo/go/cmd/go/internal/work/gccgo.go
+++ b/libgo/go/cmd/go/internal/work/gccgo.go
@@ -596,14 +596,28 @@ func gccgoPkgpath(p *load.Package) string {
 	return p.ImportPath
 }
 
+// gccgoCleanPkgpath returns the form of p's pkgpath that gccgo uses
+// for symbol names. This is like gccgoPkgpathToSymbolNew in cmd/cgo/out.go.
 func gccgoCleanPkgpath(p *load.Package) string {
-	clean := func(r rune) rune {
+	ppath := gccgoPkgpath(p)
+	bsl := []byte{}
+	changed := false
+	for _, c := range []byte(ppath) {
 		switch {
-		case 'A' <= r && r <= 'Z', 'a' <= r && r <= 'z',
-			'0' <= r && r <= '9':
-			return r
+		case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z',
+			'0' <= c && c <= '9', c == '_':
+			bsl = append(bsl, c)
+		case c == '.':
+			bsl = append(bsl, ".x2e"...)
+			changed = true
+		default:
+			encbytes := []byte(fmt.Sprintf("..z%02x", c))
+			bsl = append(bsl, encbytes...)
+			changed = true
 		}
-		return '_'
 	}
-	return strings.Map(clean, gccgoPkgpath(p))
+	if !changed {
+		return ppath
+	}
+	return string(bsl)
 }


More information about the Gcc-cvs mailing list