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.
This commit is contained in:
Brad King 2010-07-02 13:57:19 -04:00
parent 9f3524f469
commit c3389d4ce2
1 changed files with 5 additions and 0 deletions

View File

@ -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;