remove strict ansi check from __u64 in asm/types.h
PATCH 1/1 remove strict ansi check from __u64 in asm/types.h
Up to now SuSE used its own version if /usr/include/{asm,linux}, which provided 64bit types for applications.
Recently we switched to a tree generated by make headers_install_all. This lead to a few fixable compile errors in applications, and reduced diskspace requirements by the linux-kernel-headers.noarch.rpm
KDE is compiled with -ansi for some reason. All KDE apps get this flag via the KDE build system.
Kaffeine includes /usr/include/linux/dvb/dmx.h. This header uses __u64. Kaffeine fails to compile because __u64 is not available.
Remove the __STRICT_ANSI__ check from the __u64/__s64 declaration on 32bit targets.
Here is the reason why we think the check should be relaxed:
....
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
One thing for example is the -ansi flag in KDE. From what I heard, this disables all 64bit types on 32bit targets because ANSI has no long long.
This is wrong. long long is supported with -ansi just fine.
So is the
__STRICT_ANSI__check inasm/types.hwrong and should be removed?
Well, GCC can be made to warn about usage of long long types with ISO C90 (-ansi), but only with -pedantic. You can write this in a way that even then it doesn't cause warnings, namely by:
#ifdef __GNUC____extension__ typedef __signed__ long long __s64;__extension__ typedef unsigned long long __u64;
#endif
The __extension__ keyword in front of this switches off any pedantic warnings for this expression.
....
sparc does not wrap __u64 defines for some reason.
(Currently) untested patch below.
--- include/asm-arm/types.h | 6 +++--- include/asm-avr32/types.h | 6 +++--- include/asm-blackfin/types.h | 6 +++--- include/asm-cris/types.h | 6 +++--- include/asm-frv/types.h | 6 +++--- include/asm-h8300/types.h | 6 +++--- include/asm-i386/types.h | 6 +++--- include/asm-m32r/types.h | 6 +++--- include/asm-m68k/types.h | 6 +++--- include/asm-mips/types.h | 6 +++--- include/asm-parisc/types.h | 6 +++--- include/asm-powerpc/types.h | 6 +++--- include/asm-s390/types.h | 6 +++--- include/asm-sh/types.h | 6 +++--- include/asm-sh64/types.h | 6 +++--- include/asm-v850/types.h | 6 +++--- include/asm-xtensa/types.h | 6 +++--- 17 files changed, 51 insertions(+), 51 deletions(-)
include/asm-arm/types.h +3 -3
@@ -19,9 +19,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-avr32/types.h +3 -3
@@ -25,9 +25,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-blackfin/types.h +3 -3
@@ -27,9 +27,9 @@ typedef __signed__ int __s32;typedef unsigned int __u32 ;/* HK0617 -- Changes to unsigned long temporarily */ -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-cris/types.h +3 -3
@@ -19,9 +19,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-frv/types.h +3 -3
@@ -30,9 +30,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-h8300/types.h +3 -3
@@ -27,9 +27,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif /*
include/asm-i386/types.h +3 -3
@@ -19,9 +19,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-m32r/types.h +3 -3
@@ -19,9 +19,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-m68k/types.h +3 -3
@@ -27,9 +27,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-mips/types.h +3 -3
@@ -34,9 +34,9 @@ typedef unsigned long __u64;#else -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif
include/asm-parisc/types.h +3 -3
@@ -19,9 +19,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-powerpc/types.h +3 -3
@@ -40,9 +40,9 @@ typedef unsigned int __u32;typedef __signed__ long __s64 ;typedef unsigned long __u64 ;#else -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __powerpc64__ */
include/asm-s390/types.h +3 -3
@@ -28,9 +28,9 @@ typedef __signed__ int __s32;typedef unsigned int __u32 ;#ifndef __s390x__ -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #else /* __s390x__ */ typedef __signed__ long __s64 ;
include/asm-sh/types.h +3 -3
@@ -19,9 +19,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-sh64/types.h +3 -3
@@ -30,9 +30,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* __ASSEMBLY__ */
include/asm-v850/types.h +3 -3
@@ -27,9 +27,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif #endif /* !__ASSEMBLY__ */
include/asm-xtensa/types.h +3 -3
@@ -29,9 +29,9 @@ typedef unsigned short __u16; typedef __signed__ int __s32;typedef unsigned int __u32 ; -#if defined(__GNUC__) && !defined(__STRICT_ANSI__) -typedef __signed__ long long __s64 ; -typedef unsigned long long __u64 ; +#if defined(__GNUC__) +__extension__typedef __signed__ long long __s64 ; +__extension__typedef unsigned long long __u64 ;#endif /*
Quoted 6 lines · Olaf Hering
Remove the
__STRICT_ANSI__check from the __u64/__s64 declaration on 32bit targets.Here is the reason why we think the check should be relaxed:
I think the fact that "long long" was made official C in C99 is good enough. Flagging them as __extension__ is okay, I guess, but something like this should definitely go in.
-hpa
Quoted 10 lines · H. Peter Anvin
Quoted 5 lines · Olaf Hering
Remove the
__STRICT_ANSI__check from the __u64/__s64 declaration on 32bit targets.Here is the reason why we think the check should be relaxed:
I think the fact that "long long" was made official C in C99 is good enough. Flagging them as
__extension__is okay, I guess, but something like this should definitely go in.
the patch we (Gentoo) tried posting a while ago never saw any response:
http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo/src/patchsets/gentoo-headers/2.6.22/35_all_c99-types.patch?rev=1.2
-mike
Hi,
Quoted 6 lines · Mike Frysinger
Quoted 5 lines · H. Peter Anvin
Quoted 4 lines · Olaf Hering
Remove the
__STRICT_ANSI__check from the __u64/__s64 declaration on 32bit targets.
Quoted 8 lines
Quoted 5 lines
Quoted 1 line
Here is the reason why we think the check should be relaxed:
I think the fact that "long long" was made official C in C99 is good enough. Flagging them as
__extension__is okay, I guess, but something like this should definitely go in.the patch we (Gentoo) tried posting a while ago never saw any response:
http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo/src/patchsets/gentoo-headers/2.6.22/35_all_c99-types.patch?rev=1.2
That would still make it not work with programs compiled with just -ansi or -std=c90 (both being equivalent) with -pedantic added. There still are such. Only for that case is the __extension__ prefix necessary.
Ciao,
Michael.
Quoted 3 lines · Michael Matz
That would still make it not work with programs compiled with just -ansi or -std=c90 (both being equivalent) with -pedantic added. There still are such. Only for that case is the
__extension__prefix necessary.
i thought the point was it's supposed to fail with just -ansi and the default standard (c89)
at any rate, as long as your changes account for all the files in the patch i posted, that's fine by me
-mike
Quoted 4 lines · Olaf Hering
Remove the
__STRICT_ANSI__check from the __u64/__s64 declaration on 32bit targets.(Currently) untested patch below.
We tested this now, and it did not cause failures.
Andrew, will you pick this up?
Quoted 10 lines · On Fri, 10 Aug 2007 10:27:26 +0200 Olaf Hering <[email protected]> wrote:
Quoted 4 lines · Olaf Hering
Remove the
__STRICT_ANSI__check from the __u64/__s64 declaration on 32bit targets.(Currently) untested patch below.
We tested this now, and it did not cause failures.
Andrew, will you pick this up?
can take a look, sure. Can you send a version with a less scruffy-looking changelog please?