[cfe-dev] recent change broke -fcatch-undefined-behavior

Jean-Daniel Dupas devlists at shadowlab.org
Mon Oct 15 14:32:22 PDT 2012


Le 15 oct. 2012 à 21:31, "Sean McBride" <sean at rogue-research.com> a écrit :

> On Mon, 15 Oct 2012 12:21:17 -0700, David Blaikie said:
> 
>>>>> I see that there have been recent changes wrt -fcatch-undefined-
>>>> behavior, and within the last week or so something changed such that my
>>>> own build of clang (built with CMake on OS X) is unable to build simple
>>>> programs that use -fcatch-undefined-behavior, I get link errors like:
>>>>> 
>>>>> "___ubsan_handle_divrem_overflow", referenced from:
>>>>>     _main in test-OSZvjm.o
>>>>> "___ubsan_handle_type_mismatch", referenced from:
>>>>>     _main in test-OSZvjm.o
>>>>> 
>>>>> Any ideas why?
>>>>> 
>>>> 
>>>> This is a new feature. Instead of generating traps, -fcatch-undefined-
>>>> behavior generates library calls that make it easier to find what is
>>>> wrong (each undefined behavior calls a different function).
>>>> 
>>>> This functions are provided by the ubsan library that is part of
>>>> compiler-rt. But I'm not sure the integration to the Makefile build
>>>> system is done yet.
>>> 
>>> You mean with the CMake build system?
>> 
>> Generally "Makefile build system" describes the configure+make build
>> system (at least when it's discussed here).
>> 
>>> Perhaps if I build using autotools it will work?  Or do you mean it
>> works nowhere yet?
>> 
>> I believe the implication is that it works with the CMake build
>> system. But you will need to checkout the compiler-rt LLVM project
>> into llvm/projects to build it along with clang. (& I assume you'll
>> need to install compiler-rt alongside clang as well, but hopefully the
>> install target does that)
> 
> As I said in my original post, I am using CMake (not autotools aka configure+make).  I do have llvm/projects.
> 
> My full little 'build everything' script is:
> 
> ------------
> (cd ~/llvm/llvm/; svn up)
> (cd ~/llvm/llvm/tools/clang; svn up)
> (cd ~/llvm/llvm/projects/compiler-rt; svn up)
> 
> mkdir -p ~/llvm/llvm-rel-bin
> rm -rf ~/llvm/llvm-rel-bin/*
> 
> mkdir -p ~/llvm/llvm-rel-install
> rm -rf ~/llvm/llvm-rel-install/*
> 
> cd ~/llvm/llvm-rel-bin
> CC="$(xcrun --find cc)" CXX="$(xcrun --find c++)" cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=OFF -DCMAKE_INSTALL_PREFIX=~/llvm/llvm-rel-install ../llvm
> make -j16 install

Yep, it looks like the driver integration for the darwin toolchain is missing too.

The ubsan library should probably be append to the link flags somewhere in Toolchains.cpp:DarwinClang::AddLinkRuntimeLibArgs(), but I don't see it anywhere.


-- Jean-Daniel








More information about the cfe-dev mailing list