Commit 5f5d882f authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder

cmd/compile: catch bad pragma combination earlier

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: default avatarMatthew Dempsky <mdempsky@google.com>
parent 0d87f6a6
......@@ -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
......
......@@ -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.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment