Skip site navigation (1)Skip section navigation (2)
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>