GJDuck / EffectiveSan

Runtime type and bounds-error checking for C/C++

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Clang sometimes crashes with EffectiveSan enabled

GJDuck opened this issue · comments

For example:

$ clang++ -fsanitize=effective -std=c++11 -c crash.cpp
fatal error: error in backend: Cannot select: 0x593c230: i64 = X86ISD::WrapperRIP 
TargetGlobalTLSAddress:i64<i8** @_ZSt15__once_callable> 0 [TF=10]
    0x5875d20: i64 = TargetGlobalTLSAddress<i8** @_ZSt15__once_callable> 0 [TF=10]
 In function: ...

This is a bug inherited from LLVM that affects any program compiled using the "large" code model. See LowFat issue #12 for more information.

The work-around is to disable global instrumentation using the following compiler options:

-mllvm -effective-no-globals -mcmodel=small

However, this means that errors relating to global objects will not be detected.