]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: read safemode bit from package header
authorRobert Griesemer <gri@golang.org>
Fri, 20 May 2016 18:19:19 +0000 (11:19 -0700)
committerRobert Griesemer <gri@golang.org>
Fri, 20 May 2016 21:41:50 +0000 (21:41 +0000)
Ignore respective bit in export data, but leave the info to
minimize format changes for 1.7. Scheduled to remove by 1.8.

For #15772.

Change-Id: Ifb3beea655367308a4e2d5dc8cb625915f904287
Reviewed-on: https://go-review.googlesource.com/23285
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/bimport.go
src/cmd/compile/internal/gc/main.go
src/cmd/compile/internal/gc/parser.go

index 51847538961eecc60b99a9b7aaa18b23a81b9a7e..e1885981e046998ab8b6ba8a05358f5568d29dbd 100644 (file)
@@ -103,7 +103,9 @@ func Import(in *bufio.Reader) {
        // --- compiler-specific export data ---
 
        // read compiler-specific flags
-       importpkg.Safe = p.bool()
+
+       // read but ignore safemode bit (see issue #15772)
+       p.bool() // formerly: importpkg.Safe = p.bool()
 
        // phase 2
        objcount = 0
index 713ff13d8547d8183dea539ed7c31f2d0639fba9..8ad3300dbed3e249f63f77c6e3cc5f10a329f37a 100644 (file)
@@ -784,6 +784,21 @@ func importfile(f *Val, indent []byte) {
                }
        }
 
+       // process header lines
+       for {
+               p, err = imp.ReadString('\n')
+               if err != nil {
+                       log.Fatalf("reading input: %v", err)
+               }
+               if p == "\n" {
+                       break // header ends with blank line
+               }
+               if strings.HasPrefix(p, "safe") {
+                       importpkg.Safe = true
+                       break // ok to ignore rest
+               }
+       }
+
        // assume files move (get installed)
        // so don't record the full path.
        linehistpragma(file[len(file)-len(path_)-2:]) // acts as #pragma lib
index 55f352590bb35100e3a3fc7fff4f674f421e20cf..7ffd42f83cba51f6667ebd51877df317c4fe01cf 100644 (file)
@@ -398,11 +398,8 @@ func (p *parser) import_package() {
                p.import_error()
        }
 
-       importsafe := false
+       // read but skip "safe" bit (see issue #15772)
        if p.tok == LNAME {
-               if p.sym_.Name == "safe" {
-                       importsafe = true
-               }
                p.next()
        }
        p.want(';')
@@ -413,7 +410,6 @@ func (p *parser) import_package() {
        } else if importpkg.Name != name {
                Yyerror("conflicting names %s and %s for package %q", importpkg.Name, name, importpkg.Path)
        }
-       importpkg.Safe = importsafe
 
        typecheckok = true
        defercheckwidth()