aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder
diff options
context:
space:
mode:
authorCuong Manh Le <cuong.manhle.vn@gmail.com>2021-10-13 17:11:16 +0700
committerCuong Manh Le <cuong.manhle.vn@gmail.com>2021-10-15 01:35:56 +0000
commit0c45ed05612bb315c949229f7b484b4b573af4b0 (patch)
tree79d910f57c65a1f0f6eab61b5fe0c28656b3e4a9 /src/cmd/compile/internal/noder
parent9e8ed86813dd49c4160dd4813901e2ac03de5abd (diff)
downloadgo-0c45ed05612bb315c949229f7b484b4b573af4b0.tar.xz
cmd/compile: fix irgen reports wrong error message for misuse of //go:embed
Fixes #48230 Change-Id: Ic6490e065e7e79793faa0d0201dc94f5fcea694a Reviewed-on: https://go-review.googlesource.com/c/go/+/355529 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Trust: Dan Scales <danscales@google.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Dan Scales <danscales@google.com>
Diffstat (limited to 'src/cmd/compile/internal/noder')
-rw-r--r--src/cmd/compile/internal/noder/decl.go11
-rw-r--r--src/cmd/compile/internal/noder/irgen.go8
2 files changed, 16 insertions, 3 deletions
diff --git a/src/cmd/compile/internal/noder/decl.go b/src/cmd/compile/internal/noder/decl.go
index f2dad9c302..82455f7d4a 100644
--- a/src/cmd/compile/internal/noder/decl.go
+++ b/src/cmd/compile/internal/noder/decl.go
@@ -132,7 +132,11 @@ func (g *irgen) funcDecl(out *ir.Nodes, decl *syntax.FuncDecl) {
g.target.Inits = append(g.target.Inits, fn)
}
+ haveEmbed := g.haveEmbed
g.later(func() {
+ defer func(b bool) { g.haveEmbed = b }(g.haveEmbed)
+
+ g.haveEmbed = haveEmbed
if fn.Type().HasTParam() {
g.topFuncIsGeneric = true
}
@@ -241,12 +245,15 @@ func (g *irgen) varDecl(out *ir.Nodes, decl *syntax.VarDecl) {
if decl.Pragma != nil {
pragma := decl.Pragma.(*pragmas)
- // TODO(mdempsky): Plumb noder.importedEmbed through to here.
- varEmbed(g.makeXPos, names[0], decl, pragma, true)
+ varEmbed(g.makeXPos, names[0], decl, pragma, g.haveEmbed)
g.reportUnused(pragma)
}
+ haveEmbed := g.haveEmbed
do := func() {
+ defer func(b bool) { g.haveEmbed = b }(g.haveEmbed)
+
+ g.haveEmbed = haveEmbed
values := g.exprList(decl.Values)
var as2 *ir.AssignListStmt
diff --git a/src/cmd/compile/internal/noder/irgen.go b/src/cmd/compile/internal/noder/irgen.go
index a3501fb90b..982e811f5f 100644
--- a/src/cmd/compile/internal/noder/irgen.go
+++ b/src/cmd/compile/internal/noder/irgen.go
@@ -147,6 +147,9 @@ type irgen struct {
// laterFuncs records tasks that need to run after all declarations
// are processed.
laterFuncs []func()
+ // haveEmbed indicates whether the current node belongs to file that
+ // imports "embed" package.
+ haveEmbed bool
// exprStmtOK indicates whether it's safe to generate expressions or
// statements yet.
@@ -254,8 +257,11 @@ Outer:
types.ResumeCheckSize()
// 3. Process all remaining declarations.
- for _, declList := range declLists {
+ for i, declList := range declLists {
+ old := g.haveEmbed
+ g.haveEmbed = noders[i].importedEmbed
g.decls((*ir.Nodes)(&g.target.Decls), declList)
+ g.haveEmbed = old
}
g.exprStmtOK = true