From: Mauri de Souza Meneguzzo Date: Wed, 13 Dec 2023 19:58:23 +0000 (+0000) Subject: cmd/cgo/internal/testsanitizers: fix msan test failing with clang >= 16 X-Git-Tag: go1.22rc1~2^2~11 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=2acbdd086d4660ae5e4adc429858df4758d675e3;p=gostls13.git 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: 60bd64a8fb24a552fce23fb2b43a75e92443e039 GitHub-Pull-Request: golang/go#64691 Reviewed-on: https://go-review.googlesource.com/c/go/+/549297 Auto-Submit: Bryan Mills Reviewed-by: Bryan Mills LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh --- diff --git a/src/cmd/cgo/internal/testsanitizers/msan_test.go b/src/cmd/cgo/internal/testsanitizers/msan_test.go index 83d66f6660..c534b72442 100644 --- a/src/cmd/cgo/internal/testsanitizers/msan_test.go +++ b/src/cmd/cgo/internal/testsanitizers/msan_test.go @@ -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 { diff --git a/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go b/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go index 1cb5c5677f..e79d343cc7 100644 --- a/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go +++ b/src/cmd/cgo/internal/testsanitizers/testdata/msan8.go @@ -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 #include #include