incorrect enum warning?

Narvi narvi at haldjas.folklore.ee
Thu May 1 08:37:41 PDT 2003


On Thu, 1 May 2003, Jacques A. Vidrine wrote:

> On Thu, May 01, 2003 at 04:51:40PM +0200, Dag-Erling Smorgrav wrote:
> > Why does the following code in OpenPAM headers:
> >
> > /*
> >  * XSSO 5.4
> >  */
> > enum {
> >         PAM_SILENT                      = 0x80000000,
> >         PAM_DISALLOW_NULL_AUTHTOK       = 0x1,
> >         PAM_ESTABLISH_CRED              = 0x1,
> >         PAM_DELETE_CRED                 = 0x2,
> >         PAM_REINITIALIZE_CRED           = 0x4,
> >         PAM_REFRESH_CRED                = 0x8,
> >         PAM_PRELIM_CHECK                = 0x1,
> >         PAM_UPDATE_AUTHTOK              = 0x2,
> >         PAM_CHANGE_EXPIRED_AUTHTOK      = 0x4
> > };
> >
> > cause the following warning when compiled with CSTD=c99:
> >
> > /usr/src/contrib/openpam/include/security/pam_constants.h:100: warning: ISO C restricts enumerator values to range of `int'
> >
> > when 0x80000000 is clearly within the range of 'int' on all platforms
> > we support?
>
> Guessing:
> C does not specify one's complement or two's complement representation
> of integers.  On a one's complement 32-bit platform, 0x80000000 is -0
> (negative zero), which cannot be an `int'.
>

-0 would be a valid int on a one's complement platform It would probably
compare equal to zero. Gcc only runs on 2-s complement platforms anyways.

> Cheers,
> --
> Jacques Vidrine   . NTT/Verio SME      . FreeBSD UNIX       . Heimdal
> nectar at celabo.org . jvidrine at verio.net . nectar at freebsd.org . nectar at kth.se
>



More information about the freebsd-hackers mailing list