]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: don't let -race override explicit -d=checkptr=0
authorIan Lance Taylor <iant@golang.org>
Tue, 23 Mar 2021 22:24:27 +0000 (15:24 -0700)
committerIan Lance Taylor <iant@golang.org>
Tue, 23 Mar 2021 23:09:33 +0000 (23:09 +0000)
Change-Id: Icfa204761045b72a8ea173fd55eddf1f0e58d819
Reviewed-on: https://go-review.googlesource.com/c/go/+/304253
Trust: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/base/flag.go
test/fixedbugs/bug513.go [new file with mode: 0644]

index eb46ed99afe5b69124c6f738e9482a0b41bc0dc3..33c2c862b0c44fea62c4db887e10e7913b3ea3a5 100644 (file)
@@ -161,6 +161,8 @@ func ParseFlags() {
        Flag.WB = true
        Debug.InlFuncsWithClosures = 1
 
+       Debug.Checkptr = -1 // so we can tell whether it is set explicitly
+
        Flag.Cfg.ImportMap = make(map[string]string)
 
        objabi.AddVersionFlag() // -V
@@ -216,7 +218,9 @@ func ParseFlags() {
        }
        if Flag.Race || Flag.MSan {
                // -race and -msan imply -d=checkptr for now.
-               Debug.Checkptr = 1
+               if Debug.Checkptr == -1 { // if not set explicitly
+                       Debug.Checkptr = 1
+               }
        }
 
        if Flag.CompilingRuntime && Flag.N != 0 {
@@ -237,6 +241,10 @@ func ParseFlags() {
                Debug.Libfuzzer = 0
        }
 
+       if Debug.Checkptr == -1 { // if not set explicitly
+               Debug.Checkptr = 0
+       }
+
        // set via a -d flag
        Ctxt.Debugpcln = Debug.PCTab
 }
diff --git a/test/fixedbugs/bug513.go b/test/fixedbugs/bug513.go
new file mode 100644 (file)
index 0000000..f7604f6
--- /dev/null
@@ -0,0 +1,20 @@
+// run -race -gcflags=all=-d=checkptr=0
+// +build linux,amd64 linux,ppc64le darwin,amd64 freebsd,amd64 netbsd,amd64 windows,amd64
+
+// Copyright 2021 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.
+
+// Although -race turns on -d=checkptr, the explicit -d=checkptr=0
+// should override it.
+
+package main
+
+import "unsafe"
+
+var v1 = new([2]int16)
+var v2 *[3]int64
+
+func main() {
+       v2 = (*[3]int64)(unsafe.Pointer(uintptr(unsafe.Pointer(&(*v1)[0]))))
+}