]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/cgo/internal/testsanitizers: fix msan test failing with clang >= 16
authorMauri de Souza Meneguzzo <mauri870@gmail.com>
Wed, 13 Dec 2023 19:58:23 +0000 (19:58 +0000)
committerGopher Robot <gobot@golang.org>
Mon, 18 Dec 2023 19:22:04 +0000 (19:22 +0000)
Clang 16 introduced a more aggressive behavior regarding uninitialized
memory in the memory sanitizer.

The new option -fsanitize-memory-param-retval is enabled by default
and makes the test msan8 fail, since it uses an
uninitialized variable on purpose.

Disable this behavior if we are running with clang 16+.

Fixes #64616

Change-Id: If366f978bef984ea73f6ae958f24c8fce99b59fe
GitHub-Last-Rev: 60bd64a8fb24a552fce23fb2b43a75e92443e039
GitHub-Pull-Request: golang/go#64691
Reviewed-on: https://go-review.googlesource.com/c/go/+/549297
Auto-Submit: Bryan Mills <bcmills@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Than McIntosh <thanm@google.com>
src/cmd/cgo/internal/testsanitizers/msan_test.go
src/cmd/cgo/internal/testsanitizers/testdata/msan8.go

index 83d66f6660d7bfdfaf55c83c692bad006db8e753..c534b72442abb199708aa6297b1ec71f843fab1a 100644 (file)
@@ -71,7 +71,10 @@ func TestMSAN(t *testing.T) {
                        defer dir.RemoveAll(t)
 
                        outPath := dir.Join(name)
-                       mustRun(t, config.goCmdWithExperiments("build", []string{"-o", outPath, srcPath(tc.src)}, tc.experiments))
+                       buildcmd := config.goCmdWithExperiments("build", []string{"-o", outPath, srcPath(tc.src)}, tc.experiments)
+                       // allow tests to define -f flags in CGO_CFLAGS
+                       replaceEnv(buildcmd, "CGO_CFLAGS_ALLOW", "-f.*")
+                       mustRun(t, buildcmd)
 
                        cmd := hangProneCmd(outPath)
                        if tc.wantErr {
index 1cb5c5677fa758711ae44a6d04e3fdcccbe6c00e..e79d343cc7ae4bd365f900ea652b1aaa0271456a 100644 (file)
@@ -5,6 +5,13 @@
 package main
 
 /*
+// For clang >= 16, uninitialized memory is more aggressively reported.
+// Restore the old behavior for this particular test as it relies on
+// uninitialized variables. See #64616
+#if __clang_major__ >= 16
+#cgo CFLAGS: -fno-sanitize-memory-param-retval
+#endif
+
 #include <pthread.h>
 #include <signal.h>
 #include <stdint.h>