summaryrefslogtreecommitdiffstats
path: root/Source/kwsys/testProcess.c
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2010-07-02 17:57:19 (GMT)
committerBrad King <brad.king@kitware.com>2010-07-02 18:00:04 (GMT)
commitc3389d4ce2a8d3ee0ec1d4824a64347ded5832a0 (patch)
tree9b5bdb97ebf042175e2e79fd0fdfab57057d3533 /Source/kwsys/testProcess.c
parent9f3524f4696f394e04077aed93b482ed72cda4ca (diff)
downloadCMake-c3389d4ce2a8d3ee0ec1d4824a64347ded5832a0.zip
CMake-c3389d4ce2a8d3ee0ec1d4824a64347ded5832a0.tar.gz
CMake-c3389d4ce2a8d3ee0ec1d4824a64347ded5832a0.tar.bz2
KWSys: Avoid Clang optimizer bug in testProcess-[45]
Clang's optimizer, as of clang version 2.8 (trunk 107463), produces the undefined instruction 'ud2' for the code "*(int*)0=0" on OS X x86_64. It causes our crash tests to fail because the child process exits with an invalid instruction instead of a segmentation fault. Work around the bug by using "*(int*)1=0" in this case.
Diffstat (limited to 'Source/kwsys/testProcess.c')
-rw-r--r--Source/kwsys/testProcess.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/Source/kwsys/testProcess.c b/Source/kwsys/testProcess.c
index 0060c4d..6044917 100644
--- a/Source/kwsys/testProcess.c
+++ b/Source/kwsys/testProcess.c
@@ -94,7 +94,12 @@ int test4(int argc, const char* argv[])
fprintf(stderr, "Output before crash on stderr from crash test.\n");
fflush(stdout);
fflush(stderr);
+#if defined(__APPLE__) && defined(__x86_64__) && defined(__OPTIMIZE__) \
+ && defined(__clang__)
+ *(int*)1 = 0; /* Clang's optimizer produces bad code for 0-ptr. */
+#else
*(int*)0 = 0;
+#endif
fprintf(stdout, "Output after crash on stdout from crash test.\n");
fprintf(stderr, "Output after crash on stderr from crash test.\n");
return 0;