]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: file line number for //go:xxx directives
authorRobert Griesemer <gri@golang.org>
Thu, 29 Dec 2016 01:29:25 +0000 (17:29 -0800)
committerRobert Griesemer <gri@golang.org>
Mon, 9 Jan 2017 19:39:56 +0000 (19:39 +0000)
Minimally invasive; fixes a regression from 1.7.

Fixes #18459.

Change-Id: I93b3b5c05706eaff8ae97a237f770838c1f8778c
Reviewed-on: https://go-review.googlesource.com/34721
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/compile/internal/gc/noder.go
src/go/types/stdlib_test.go
test/fixedbugs/issue18459.go [new file with mode: 0644]

index a501cb67b6f7fc4111d8559492b2008786d597d3..ca99adea27caa1959e558b01c9a01c917a330037 100644 (file)
@@ -1055,6 +1055,7 @@ func (p *noder) pragma(pos, line int, text string) syntax.Pragma {
                lookup(f[1]).Linkname = f[2]
 
        case strings.HasPrefix(text, "go:cgo_"):
+               lineno = p.baseline + int32(line) - 1 // pragcgo may call yyerror
                pragcgobuf += pragcgo(text)
                fallthrough // because of //go:cgo_unsafe_args
        default:
@@ -1062,6 +1063,7 @@ func (p *noder) pragma(pos, line int, text string) syntax.Pragma {
                if i := strings.Index(text, " "); i >= 0 {
                        verb = verb[:i]
                }
+               lineno = p.baseline + int32(line) - 1 // pragmaValue may call yyerror
                return syntax.Pragma(pragmaValue(verb))
        }
 
index 1c6d7b5299309738d7a9e523ca4278a08151006e..06d2c93dda3edff3945ddd25a2abb3ab06896eb8 100644 (file)
@@ -157,6 +157,7 @@ func TestStdFixed(t *testing.T) {
                "issue11362.go", // canonical import path check
                "issue15002.go", // uses Mmap; testTestDir should consult build tags
                "issue16369.go", // go/types handles this correctly - not an issue
+               "issue18459.go", // go/types doesn't check validity of //go:xxx directives
        )
 }
 
diff --git a/test/fixedbugs/issue18459.go b/test/fixedbugs/issue18459.go
new file mode 100644 (file)
index 0000000..ac07661
--- /dev/null
@@ -0,0 +1,13 @@
+// errorcheck
+
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Verify that we have a line number for this error.
+
+package main
+
+//go:nowritebarrier // ERROR "go:nowritebarrier only allowed in runtime"
+func main() {
+}