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