]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: catch bad pragma combination earlier
authorJosh Bleecher Snyder <josharian@gmail.com>
Tue, 14 Mar 2017 16:29:23 +0000 (09:29 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 14 Mar 2017 18:33:26 +0000 (18:33 +0000)
Bad pragmas should never make it to the backend.
I've confirmed manually that the error position is unchanged.

Updates #15756
Updates #19250

Change-Id: If14f7ce868334f809e337edc270a49680b26f48e
Reviewed-on: https://go-review.googlesource.com/38152
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/noder.go
src/cmd/compile/internal/gc/pgen.go

index df17b6ec21f0e6a2e16ec215b75235a6c8531daa..80edeee710abd3a4af2b885ee735e92be5fe63fa 100644 (file)
@@ -321,6 +321,9 @@ func (p *noder) funcDecl(fun *syntax.FuncDecl) *Node {
        if f.Noescape() && len(body) != 0 {
                yyerror("can only use //go:noescape with external func implementations")
        }
+       if pragma&Systemstack != 0 && pragma&Nosplit != 0 {
+               yyerror("go:nosplit and go:systemstack cannot be combined")
+       }
        f.Func.Pragma = pragma
        lineno = makePos(fun.Pos().Base(), fun.EndLine, 0)
        f.Func.Endlineno = lineno
index 4596086c7f04f4ebc8f3d7149c79bc61314d8af6..9d4003f35a1e2de62b034dab54b023973db91df8 100644 (file)
@@ -393,9 +393,6 @@ func compile(fn *Node) {
        }
        if fn.Func.Pragma&Systemstack != 0 {
                ptxt.From.Sym.Set(obj.AttrCFunc, true)
-               if fn.Func.Pragma&Nosplit != 0 {
-                       yyerror("go:nosplit and go:systemstack cannot be combined")
-               }
        }
 
        // Clumsy but important.