Re: CSTD=c99 breaks package creation

From: Tim Robbins <tjr_at_FreeBSD.ORG>
Date: Thu, 12 Jun 2003 14:14:19 +1000
On Wed, Jun 11, 2003 at 07:37:01PM -0700, Kris Kennaway wrote:

> It's possible that there's either a bug in gcc or there is C code in
> the system that has a different meaning when interpreted to C99
> standards.

I think I may have found the problem, and I think it's in GNU tar.

GNU tar does this:

#ifndef __attribute__
/* This feature is available in gcc versions 2.5 and later.  */
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
#  define __attribute__(Spec) /* empty */
# endif
#endif

machine/_types.h does this:

typedef int __attribute__((__mode__(__DI__)))           __int64_t;
typedef unsigned int __attribute__((__mode__(__DI__)))  __uint64_t;

If __attribute__ is empty, __int64_t becomes a synonym for int. Bad.

Attached is a test program. Compile it w/o a -std option and see that the
output, which is sizeof(int64_t), is 8 as expected. Compile with -std=c99 and
see that sizeof(int64_t) is 4.


Tim

Received on Wed Jun 11 2003 - 19:21:14 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:11 UTC