cmd/cgo/internal/testsanitizers: fix msan test failing with clang >= 16

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: 60bd64a8fb
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>
This commit is contained in:
Mauri de Souza Meneguzzo 2023-12-13 19:58:23 +00:00 committed by Gopher Robot
parent a7097243e4
commit 2acbdd086d
2 changed files with 11 additions and 1 deletions

View 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 {

View 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>