> >> I'm aware that some compilers will produce warnings about these
> >> constants, but there should not be any that fail completely, since
> >> (a) we won't be compiling this code unless we've proven that the
> >> compiler supports a 64-bit-int datatype, and
>
> > Unfortunately configure does not check the use of 64 bit integer
> > constants. A little check on AIX shows, that it indeed DOES
> NOT work !!!!!
>
> Grumble...
>
> >> (b) the C standard
> >> forbids a compiler from requiring width suffixes (cf.
> 6.4.4.1 in C99).
>
> > Maybe that standard is somewhat too recent to rely upon 100%.
>
> ANSI C says the same thing, although of course it only discusses int and
> long. But the spec has always been clear that the implied type of an
> integer constant is whatever it takes to hold it; you do not need an
> explicit "L" suffix to make a valid constant. AIX's compiler
> is broken.
Reading your above note I do not see, how you map this statement
to a long long int (64 bits) on a platform where int is 32 bits. On this platform
we are definitely not talking about an integer constant.
> > Do you want me to supply an AIX specific patch with #if defined (_AIX) ?
>
> I'll do something about it. Would you check to see whether a > macro like
> #define SIXTYFOUR(x) x##LL works?
Yes, that works. Unfortunately I will only be able to test on Monday.
Could you use something like the following in configure, to test it ?
#define SIXTYFOUR(x) x
if (sizeof(SIXTYFOUR(0x0)) == 8) printf ("0x0 is 64 bits\n");
else return(-1);
#define SIXTYFOUR(x) x##LL
if (sizeof(SIXTYFOUR(0x0)) == 8) printf ("0x0LL is 64 bits\n");
else return (-1);
Andreas