Result of shift when operand == type size

Kai Harrekilde-Petersen kai.harrekilde-petersen@exbit.dk
Tue Apr 25 01:28:00 GMT 2000


According to K&R (2ed), pg 206, the result of a shift,
is undefined "if right operand is negative, or greater than or
equal to the number of bits in the left expression's type"
(A7.8 Shift Operators).

GCC follows this a bit too faithfully, IMHO. Specifically,
~(~0ULL<<64) != ~0ULL. This complicates writing bitmask macros.

Is it possible to change the current behaviour?
(preferably, I'd like to see the C standard changed, but that
would be asking for the moon, I guess).

(Below is info, code + .i file as requested per the BUGS section.
I was writing a bugs report when I noted the A7.8 section)

Regards,

Kai Harrekilde-Petersen

GCC version: egcc-2.91.66
System: Debian GNU/Linux v2.1r4
  Architecture: IA-32 (AMD Athlon-700 CPU, actually)
  Kernel: 2.2.14
  Lic: glibc v2.1.2
GCC command line: egcc -v --save-temps -o tmp tmp.c

Source code (tmp.c):
#include <stdio.h>

#if 0
#define MASKSZ(N) ((N==64) ? ~0ULL : (~(~0ULL << N)))
#else
#define MASKSZ(N) (~(~0ULL << N))
#endif


int main(int argc, char **argv)
{
  int i;

  for(i=0; i<65; i++) {
    printf("MASKSZ(%2d) = %016llx\n", i, MASKSZ(i));
  }
  printf("\nMASKSZ(64) = %016llx\n", MASKSZ(64));

  return 0;
}

Preprocessed output (.i):

begin 664 tmp.i.bz2
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
`
end

-- 
Kai Harrekilde-Petersen
Exbit Technology A/S



More information about the Gcc-bugs mailing list