AW: AW: Re: RELEASE STOPPER? nonportable int64 constant s in pg_crc.c - Mailing list pgsql-hackers

From Zeugswetter Andreas SB
Subject AW: AW: Re: RELEASE STOPPER? nonportable int64 constant s in pg_crc.c
Date
Msg-id 11C1E6749A55D411A9670001FA68796336825A@sdexcsrv1.f000.d0188.sd.spardat.at
Whole thread Raw
Responses Re: AW: AW: Re: RELEASE STOPPER? nonportable int64 constant s in pg_crc.c  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
> >> 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


pgsql-hackers by date:

Previous
From: Matthew
Date:
Subject: RE: 7.0.3 _bt_restscan: my bits moved right off the end of the world!
Next
From: bpalmer
Date:
Subject: Re: Re: Call for platforms