[cfe-dev] constant propagation produces undef

Chris Lattner clattner at apple.com
Fri Jan 22 10:10:44 PST 2010


On Jan 22, 2010, at 9:24 AM, Alireza.Moshtaghi at microchip.com wrote:

> For us all undefined values are zero, I tried it on ARM and X86 also  
> and
> clang generates zero, and not an undefined.

That is because on x86 and arm, int -> i32.  This produces undef on x86:

int test() {
int x = 1;
return x << 32;
}


> Maybe the better question would be "how can I tell clang to replace  
> all
> undefined values with zero constant?"

You can't, that's not how C works.  If you build with the -fcatch- 
undefined-behavior option, it should catch this error at runtime.

-Chris



More information about the cfe-dev mailing list