From c3389d4ce2a8d3ee0ec1d4824a64347ded5832a0 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 2 Jul 2010 13:57:19 -0400 Subject: [PATCH] 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. --- Source/kwsys/testProcess.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/kwsys/testProcess.c b/Source/kwsys/testProcess.c index 0060c4d1f..60449175b 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;