[cfe-dev] constant propagation produces undef

Alireza.Moshtaghi at microchip.com Alireza.Moshtaghi at microchip.com
Fri Jan 22 20:57:20 PST 2010


Thanks,
I fixed it in the backend.

A.

-----Original Message-----
From: Chris Lattner [mailto:clattner at apple.com] 
Sent: Friday, January 22, 2010 11:11 AM
To: Alireza Moshtaghi - C13012
Cc: eli.friedman at gmail.com; cfe-dev at cs.uiuc.edu
Subject: Re: [cfe-dev] constant propagation produces undef


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