This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GCC 3.1.1


"Rob Taylor" <robt@flyingpig.com> writes:

> Andreas Schwab <schwab@suse.de> writes:
>> Jack Lloyd <lloyd@acm.jhu.edu> writes:
>>
>> |> Basically:
>> |>
>> |> unsigned long long x;
>> |> x = 1 << 32;
>> |>
>> |> results in x == 0 rather than 0x100000000 as the code expects.
>>
>> Actually this is already undefined by itself, and even x == 0 is not
>> guaranteed.
>
> why? x is an unsigned long long, surely << should be defined for values up to 63
> for this implementation?

But 1 is an int.  And the expression 1 << 32 is evaluated as int.  Try
1LL to get a long long constant...

Andreas
-- 
 Andreas Jaeger
  SuSE Labs aj@suse.de
   private aj@arthur.inka.de
    http://www.suse.de/~aj


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]