Browse Source

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.
Brad King 15 years ago
parent
commit
c3389d4ce2
1 changed files with 5 additions and 0 deletions
  1. 5 0
      Source/kwsys/testProcess.c

+ 5 - 0
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;