Date: Sun, 9 Feb 2003 13:47:14 -0500 From: Mike Barcroft <mike@FreeBSD.org> To: Marcin Dalecki <mdcki@gmx.net> Cc: freebsd-current@freebsd.org Subject: Re: C conformance. Message-ID: <20030209134714.H88550@espresso.q9media.com> In-Reply-To: <3E46A15A.3090909@gmx.net>; from mdcki@gmx.net on Sun, Feb 09, 2003 at 07:43:38PM %2B0100 References: <3E46A15A.3090909@gmx.net>
next in thread | previous in thread | raw e-mail | index | archive | help
--E39vaYmALEf/7YXx Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Marcin Dalecki <mdcki@gmx.net> writes: > Trying to use a compiler different from GCC I have found the folowing error > > "/usr/include/sys/syslimits.h", line 42: Error: > [ISO 6.8]: Unknown preprocessing directive, '#warning'. > > I think that somthing like to above should not appear in system > headers. This is a bug in TenDRA. It looks in conditionals that don't apply for syntax errors. I use the attached workaround on my system to support TenDRA. Best regards, Mike Barcroft --E39vaYmALEf/7YXx Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="cdefs.diff" Index: cdefs.h =================================================================== RCS file: /work/repo/src/sys/sys/cdefs.h,v retrieving revision 1.68 diff -u -r1.68 cdefs.h --- cdefs.h 21 Oct 2002 20:50:30 -0000 1.68 +++ cdefs.h 14 Dec 2002 16:46:57 -0000 @@ -113,27 +113,27 @@ * in a different (wrong) way). If we do not provide an implementation * for a given compiler, let the compile fail if it is told to use * a feature that we cannot live without. + * + * XXX the check for lint here is incorrect, since either your lint supports + * GNUC or it doesn't. Some kernel source code is very GNUC-centric, so we + * need this hack here until those GNUCisms are fixed. In reality, having + * hacks like this usually extend the life of bugs. */ -#ifdef lint +#if defined(lint) #define __dead2 #define __pure2 #define __unused #define __packed #define __aligned(x) #define __section(x) -#else -#if __GNUC__ < 2 || __GNUC__ == 2 && __GNUC_MINOR__ < 5 -#define __dead2 -#define __pure2 -#define __unused -#endif -#if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7 +/* Older GCC versions default to NOP for everything. */ +#elif __GNUC__ == 2 && __GNUC_MINOR__ >= 5 && __GNUC_MINOR__ < 7 #define __dead2 __attribute__((__noreturn__)) #define __pure2 __attribute__((__const__)) -#define __unused +/* XXX __aligned() is too critical to working code to safely be defined away. */ +#define __aligned(x) /* XXX Find out what to do for __packed, __aligned and __section */ -#endif -#if __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ == 3 +#elif __GNUC__ == 2 && __GNUC_MINOR__ >= 7 || __GNUC__ == 3 #define __dead2 __attribute__((__noreturn__)) #define __pure2 __attribute__((__const__)) #define __unused __attribute__((__unused__)) @@ -141,6 +141,25 @@ #define __aligned(x) __attribute__((__aligned__(x))) #define __section(x) __attribute__((__section__(x))) #endif + +/* + * Default to NOP for compiler-dependent extentions. + * XXX missing __aligned(), since we can't safely define it away. + */ +#ifndef __dead2 +#define __dead2 +#endif +#ifndef __packed +#define __packed +#endif +#ifndef __pure2 +#define __pure2 +#endif +#ifndef __section +#define __section(x) +#endif +#ifndef __unused +#define __unused #endif /* XXX: should use `#if __STDC_VERSION__ < 199901'. */ @@ -226,6 +245,14 @@ * The alternative is: #define __IDSTRING(name,string) [nothing] */ #define __IDSTRING(name,string) static const char name[] __unused = string +#endif + +/* + * TenDRA looks inside conditionals that don't apply (ie. #if __GNUC__). + * #warning is the most likely cause of syntax errors, so work around this. + */ +#ifdef __TenDRA__ +#pragma TenDRA directive warning (ignore) allow #endif /* --E39vaYmALEf/7YXx-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030209134714.H88550>