[cfe-dev] Refs are assumed not-null. How to disable?

Óscar Fuentes ofv at wanadoo.es
Fri May 30 12:49:48 PDT 2014


David, Nick,

Nick Lewycky <nlewycky at google.com> writes:

>> > With optmizations on, the `return' on this code:
>> >
>> > bool foo(int &k) {
>> >   return &k != nullptr;
>> > }
>> >
>> > is reduced to `return true;'.
>> >
>> > Is there an option for disabling this optimization?
>>
>> Nope, this was committed in
>> http://llvm.org/viewvc/llvm-project?rev=209723&view=rev and doesn't
>> look like it has any flag control.
>>
>> This code has Undefined Behavior (by binding a dereferenced null
>> pointer to a reference).
>>
>
> There isn't a warning for this. There should be a tautological comparison
> warning here.

I've found code that crashes (in the best case) because of this
optimization. That code "works" on g++, MSVC, Intel C++ and Clang (until
recently).

Speaking as a compiler user, a warning (active by default) would be
highly appreciated.

I filed http://llvm.org/bugs/show_bug.cgi?id=19899 suggesting to
implement that warning.

Thanks.




More information about the cfe-dev mailing list