From 054a721dcac9b30610af0898b3ed8bf3ffa9f8b1 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Fri, 20 May 2016 11:19:19 -0700 Subject: [PATCH] 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 --- src/cmd/compile/internal/gc/bimport.go | 4 +++- src/cmd/compile/internal/gc/main.go | 15 +++++++++++++++ src/cmd/compile/internal/gc/parser.go | 6 +----- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/cmd/compile/internal/gc/bimport.go b/src/cmd/compile/internal/gc/bimport.go index 51847538961ee..e1885981e0469 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 713ff13d8547d..8ad3300dbed3e 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 55f352590bb35..7ffd42f83cba5 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()