]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: allow -buildmode=pie with -race on darwin
authorAndy Pan <panjf2000@gmail.com>
Mon, 28 Aug 2023 12:40:51 +0000 (20:40 +0800)
committerGopher Robot <gobot@golang.org>
Mon, 28 Aug 2023 19:13:34 +0000 (19:13 +0000)
Fixes #62318

Change-Id: I6f1b22c9a4523461aa4c7fcd12e72dbc4430812d
Reviewed-on: https://go-review.googlesource.com/c/go/+/523475
Run-TryBot: Andy Pan <panjf2000@gmail.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/cmd/go/internal/work/init.go
src/cmd/go/testdata/script/build_pie_race.txt [new file with mode: 0644]

index 29116cb90ceb490e7d115bce086f5edbdbe361b8..7d0921f0cc900b5463574d2de2590fd078cb9f5b 100644 (file)
@@ -246,8 +246,8 @@ func buildModeInit() {
                        pkgsFilter = oneMainPkg
                }
        case "pie":
-               if cfg.BuildRace {
-                       base.Fatalf("-buildmode=pie not supported when -race is enabled")
+               if cfg.BuildRace && !platform.DefaultPIE(cfg.Goos, cfg.Goarch, cfg.BuildRace) {
+                       base.Fatalf("-buildmode=pie not supported when -race is enabled on %s/%s", cfg.Goos, cfg.Goarch)
                }
                if gccgo {
                        codegenArg = "-fPIE"
diff --git a/src/cmd/go/testdata/script/build_pie_race.txt b/src/cmd/go/testdata/script/build_pie_race.txt
new file mode 100644 (file)
index 0000000..39bea05
--- /dev/null
@@ -0,0 +1,30 @@
+# go build -buildmode=pie -race main.go on Darwin should work without errors
+
+[!race] skip 'test requires race detector support'
+
+[!GOOS:darwin] ! go build -buildmode=pie -race
+[!GOOS:darwin] stderr '^-buildmode=pie not supported when -race is enabled on '$GOOS'/'$GOARCH'$'
+[!GOOS:darwin] stop 'not testing -buildmode=pie -race on platform that does not support it'
+
+go build -buildmode=pie -race bytes
+! stderr .
+
+[short] stop 'not linking a binary in -short mode'
+
+go build -buildmode=pie -race main.go
+! stderr .
+exec ./main
+stdout 'Hello, 世界'
+
+-- go.mod --
+module m
+
+go 1.21
+-- main.go --
+package main
+
+import "fmt"
+
+func main() {
+       fmt.Println("Hello, 世界")
+}