From: Robert Griesemer Date: Fri, 20 May 2016 18:19:19 +0000 (-0700) Subject: cmd/compile: read safemode bit from package header X-Git-Tag: go1.7beta1~134 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=054a721dcac9b30610af0898b3ed8bf3ffa9f8b1;p=gostls13.git cmd/compile: read safemode bit from package header 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 Reviewed-by: Matthew Dempsky --- diff --git a/src/cmd/compile/internal/gc/bimport.go b/src/cmd/compile/internal/gc/bimport.go index 5184753896..e1885981e0 100644 --- a/src/cmd/compile/internal/gc/bimport.go +++ b/src/cmd/compile/internal/gc/bimport.go @@ -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 diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go index 713ff13d85..8ad3300dbe 100644 --- a/src/cmd/compile/internal/gc/main.go +++ b/src/cmd/compile/internal/gc/main.go @@ -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 diff --git a/src/cmd/compile/internal/gc/parser.go b/src/cmd/compile/internal/gc/parser.go index 55f352590b..7ffd42f83c 100644 --- a/src/cmd/compile/internal/gc/parser.go +++ b/src/cmd/compile/internal/gc/parser.go @@ -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()