[llvm-dev] Regression with fno-exceptions handling

Adhemerval Zanella via llvm-dev llvm-dev at lists.llvm.org
Mon Sep 14 14:37:30 PDT 2015


While investigating why aarch64 bot is showing a failure for tsan 'malloc_hook.cc'
I noted that clang now is showing an unexpected result with -fno-expection flag:

--
$ cat test.cc
typedef unsigned long int uptr;

#ifdef __cplusplus
extern "C" {
#endif
__attribute__((visibility("default"))) __attribute__((weak))
                   void __sanitizer_malloc_hook(void *ptr, uptr size);
#ifdef __cplusplus
}  // extern "C"
#endif

extern "C" void __attribute__((weak)) __sanitizer_malloc_hook(void *ptr, uptr size) {
  (void)ptr;
  (void)size;
}

void invoke_malloc_hook(void *ptr, uptr size) {
  //ThreadState *thr = cur_thread();
  //if (ctx == 0 || !ctx->initialized || thr->ignore_interceptors)
  //  return;
  __sanitizer_malloc_hook(ptr, size);
}
$ ./bin/clang test.cc -O3 -S -emit-llvm -S -o - | grep -i 'call' | grep __sanitizer_malloc_hook 
  tail call void @__sanitizer_malloc_hook(i8* %ptr, i64 %size)
$ ./bin/clang test.cc -fno-exceptions -O3 -S -emit-llvm -S -o - | grep -i 'call' | grep __sanitizer_malloc_hook 
$ 

The weak symbol is not being called with -fno-exceptions and thus any user supplied
hook won't work.  Does it ring a bell to someone? I am bissecting to find out which
commit change it, but if someone could point out it may save me a lot of time =)


More information about the llvm-dev mailing list