Skip to contentSkip to conversation

remove strict ansi check from __u64 in asm/types.h

PATCH In review Olaf Hering 5 participants 7 messages Aug 6, 2007 – Aug 12, 2007

lore
Share & tools
lore
#0 lore raw

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 in asm/types.h wrong 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
 
 /*
#1 lore raw
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

#2 lore raw
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

#3 lore raw

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.

#4 lore raw
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

#5 lore raw
In reply to Olaf Hering
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?

#6 lore raw
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?