Backport of
a5823872283be23731f1bcde7e19a926c44b31a4
This test in Configure tries to probe for undefined behaviour in
getenv (), but provokes undefined behaviour in C/C++ by falling off
the end of a function with a non-void return type.
Without optimization clang++ generated a ud2 instruction here on
amd64 producing an illegal instruction exception. With optimization
the test case fell off the end and started re-executing main (),
eventually producing a SIGBUS.
Simply dropping the value of getenv () here and returning NULL wasn't
useful, under -O2 the compiler optimized away the getenv () call,
voiding the whole point of the test.
void *
thread_start(void * arg)
{
void *
thread_start(void * arg)
{
- (void *) getenv("HOME");
+ return (void *) getenv("HOME");
- exit(! strcmp(main_buffer, save_main_buffer) == 0);
+ exit(! (strcmp(main_buffer, save_main_buffer) == 0));