[LLVMdev] [patch] Change llvm_unreachable to use __builtin_unreachable() in -asserts

Sebastian Redl sebastian.redl at getdesigned.at
Sat Mar 12 02:47:24 PST 2011


On 12.03.2011, at 11:17, Duncan Sands wrote:

> Hi John,
> 
>> This patch implements the current consensus of PR8973:
>> http://llvm.org/bugs/show_bug.cgi?id=8973.
>> 
>> The macro llvm_unreachable is used in LLVM to indicate that
>> a particular place in a function is not supposed to be reachable
>> during execution. Like an assert macro, it takes a string
>> argument. In +Asserts builds, this string argument, together with
>> some location information, is passed to a function which prints
>> the information and calls abort(). In -Asserts builds, this string
>> argument is dropped (to minimize code size impact), and
>> instead a bunch of zero arguments are passed to the same
>> function.
> 
> I have to ask: what is the point of llvm_unreachable?  Why not just
> use assert?

assert completely disappears in release builds, often leading to compiler warnings when the compiler thinks a control path doesn't return a value.

Sebastian



More information about the llvm-dev mailing list