]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/cmd/compile/internal/base/link.go
all: use ":" for compiler generated symbols
[gostls13.git] / src / cmd / compile / internal / base / link.go
index 49fe4352b2f65793e83a48372392c7d6649b792a..d8aa5a7dccd209c4e17f758442a1427e1dd3d8b6 100644 (file)
@@ -8,6 +8,19 @@ import (
        "cmd/internal/obj"
 )
 
+// ReservedImports are import paths used internally for generated
+// symbols by the compiler.
+//
+// The linker uses the magic symbol prefixes "go:" and "type:".
+// Avoid potential confusion between import paths and symbols
+// by rejecting these reserved imports for now. Also, people
+// "can do weird things in GOPATH and we'd prefer they didn't
+// do _that_ weird thing" (per rsc). See also #4257.
+var ReservedImports = map[string]bool{
+       "go":   true,
+       "type": true,
+}
+
 var Ctxt *obj.Link
 
 // TODO(mdempsky): These should probably be obj.Link methods.
@@ -20,7 +33,11 @@ func PkgLinksym(prefix, name string, abi obj.ABI) *obj.LSym {
                // TODO(mdempsky): Cleanup callers and Fatalf instead.
                return linksym(prefix, "_", abi)
        }
-       return linksym(prefix, prefix+"."+name, abi)
+       sep := "."
+       if ReservedImports[prefix] {
+               sep = ":"
+       }
+       return linksym(prefix, prefix+sep+name, abi)
 }
 
 // Linkname returns the linker symbol for the given name as it might