On Feb 4, 2012, at 1:16 PM, Sebastian Redl wrote:

> 
> On 04.02.2012, at 19:06, Howard Hinnant wrote:
> 
>> On Feb 4, 2012, at 12:52 PM, Howard Hinnant wrote:
>> 
>>> On Feb 4, 2012, at 12:04 PM, Eli Friedman wrote:
>>>> 
>>>> [expr.shift]p2: [...] if E1 has a signed type and non-negative value,
>>>> and E1×2E2 is representable in the result type, then that is the
>>>> resulting value; otherwise, the behavior is undefined.
>>>> 
>>>> -Eli
>>> 
>>> I see, you're point is that I've walked into undefined territory because I 
>>> set the sign bit on the long long?  Does changing 1LL to 1ULL make the 
>>> compiler happy?
>> 
>> Another question:  Is there a motivation for giving the compile time 
>> behavior of these operations a different behavior than they would have at 
>> run time?
> 
> The runtime behavior is undefined. Do you really want the compile time 
> behavior to be the same?
> 
> As a side note, I think the diagnostics here could still be improved.
> 
> Sebastian

It is undefined by the standards committee which has not had the willpower to 
abandon 1's complement hardware.  I believe it is well defined behavior on 
every platform we support (2's complement hardware).  I believe this compile 
time behavior is overly pedantic, does not reveal any programming error, and 
will only serve up busy work for clang's clients.

Howard


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to