ldc -O leads to wrong results
Dude via digitalmars-d-ldc
digitalmars-d-ldc at puremagic.com
Sat Mar 14 00:02:50 PDT 2015
On Tuesday, 10 March 2015 at 05:35:59 UTC, Dan Olson wrote:
> "salsa" <salsa at salsa.com> writes:
>> Recently I got stuck with this:
>> compiling following code with ldc -O generates code that
>> doesn't do
>> what I expect it to do. Compiling it without optimizations
>> fine. Does somebody have any idea what the problem might be? To
>> reproduce the bug just compile and run once with 'ldc *.d' and
>> with 'ldc -O *.d'...
>> x[ 4] ^= rotl((x[ 0]+x), 7);
>> final static T rotl(T)(T x, T y) pure nothrow @nogc
>> return (x << y) | (x >>> -y);
> Hi salsa.
> y is 7 so (x >>> -7) yields an unspecified value because shift
> negative (see TDPL 2.3.10 Shift Expression). I think results
> are only
> defined when shifting 0 to nbits-1.
Maybe this should be explicitly said in documentation:
Btw. why this is not compile error on the first place?
More information about the digitalmars-d-ldc