]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: disallow combining nosplit and systemstack
authorAustin Clements <austin@google.com>
Thu, 9 Feb 2017 22:08:27 +0000 (17:08 -0500)
committerAustin Clements <austin@google.com>
Thu, 9 Feb 2017 22:27:17 +0000 (22:27 +0000)
go:systemstack works by tweaking the stack check prologue to check
against a different bound, while go:nosplit removes the stack check
prologue entirely. Hence, they can't be used together. Make the build
fail if they are.

Change-Id: I2d180c4b1d31ff49ec193291ecdd42921d253359
Reviewed-on: https://go-review.googlesource.com/36710
Run-TryBot: Austin Clements <austin@google.com>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/gc/pgen.go

index 5ec253667ba898d71c9ffc1840f3c8a4eabfa841..1acbbf3b1e41367c0740523d059edc161351cb31 100644 (file)
@@ -397,6 +397,9 @@ 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.