delorie.com/archives/browse.cgi | search |
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-workers-bounces using -f |
X-Recipient: | djgpp-workers AT delorie DOT com |
Message-ID: | <504CD18B.1060207@iki.fi> |
Date: | Sun, 09 Sep 2012 20:27:39 +0300 |
From: | Andris Pavenis <andris DOT pavenis AT iki DOT fi> |
User-Agent: | Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120828 Thunderbird/15.0 |
MIME-Version: | 1.0 |
To: | djgpp-workers AT delorie DOT com |
Subject: | Invalid tests for __STDC_VERSION__ in DJGPP header files |
Reply-To: | djgpp-workers AT delorie DOT com |
-_STDC_VERSION__ is not defined in many cases any recent GCC version. It is only seems to be defined in several cases depending on the command line parameter -std and for C language only Some examples: [andris AT ap ~]$ i586-pc-msdosdjgpp-gcc -dD -E -std=c99 -x c /dev/null | grep STDC #define __STDC__ 1 #define __STDC_VERSION__ 199901L #define __STDC_HOSTED__ 1 #define __GNUC_STDC_INLINE__ 1 [andris AT ap ~]$ i586-pc-msdosdjgpp-gcc -dD -E -std=c90 -x c /dev/null | grep STDC #define __STDC__ 1 #define __STDC_HOSTED__ 1 [andris AT ap ~]$ i586-pc-msdosdjgpp-gcc -dD -E -std=c89 -x c /dev/null | grep STDC #define __STDC__ 1 #define __STDC_HOSTED__ 1 [andris AT ap ~]$ i586-pc-msdosdjgpp-gcc -dD -E -std=c9x -x c /dev/null | grep STDC #define __STDC__ 1 #define __STDC_VERSION__ 199901L #define __STDC_HOSTED__ 1 #define __GNUC_STDC_INLINE__ 1 [andris AT ap ~]$ i586-pc-msdosdjgpp-gcc -dD -E -std=c11 -x c /dev/null | grep STDC #define __STDC__ 1 #define __STDC_VERSION__ 201112L #define __STDC_UTF_16__ 1 #define __STDC_UTF_32__ 1 #define __STDC_HOSTED__ 1 #define __GNUC_STDC_INLINE__ 1 As the result tests used in header files like #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \ || !defined(__STRICT_ANSI__) are invalid. I see several possibilities 1) assume that the version is new enough when __STDC_VERSION__ is not defined #if !defined(__STDC_VERSION__) || __STDC_VERSION__ >= 199901L) \ || !defined(__STRICT_ANSI__) 2) remove tests for version 199001 or later at all (one may need tests for newer versions though) 3) require __STDC_VERSION__ to be defined for very old GCC versions (as far as I tested gcc-3.4.4 is considered not very old) Use of the broken test for __STDC_VERSION__ prevents libstdc++-v3 (GCC-4.8.0 development versions from some last weeks) building OK due to actual contents of stdint.h being compiled out. Variant 1 is verified to fix the build (only tested cross-native build from Linux) Andris
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |