Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] Abandon gcc-2.95.x

There's one scsi driver which doesn't compile due to weird __VA_ARGS__ tricks
and the rather useful scsi/sd.c is currently getting an ICE. None of the new
SAS code compiles, due to extensive use of anonymous unions. The V4L guys are
very good at exploiting the gcc-2.95.x macro expansion bug (_why_ does each
driver need to implement its own debug macros?) and various people keep on
sneaking in anonymous unions, which are rather nice.

Plus anonymous unions are rather useful.

Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Andrew Morton and committed by
Linus Torvalds
fd285bb5 fe7d37d1

+1 -37
-29
include/linux/compiler-gcc2.h
··· 1 - /* Never include this file directly. Include <linux/compiler.h> instead. */ 2 - 3 - /* These definitions are for GCC v2.x. */ 4 - 5 - /* Somewhere in the middle of the GCC 2.96 development cycle, we implemented 6 - a mechanism by which the user can annotate likely branch directions and 7 - expect the blocks to be reordered appropriately. Define __builtin_expect 8 - to nothing for earlier compilers. */ 9 - #include <linux/compiler-gcc.h> 10 - 11 - #if __GNUC_MINOR__ < 96 12 - # define __builtin_expect(x, expected_value) (x) 13 - #endif 14 - 15 - #define __attribute_used__ __attribute__((__unused__)) 16 - 17 - /* 18 - * The attribute `pure' is not implemented in GCC versions earlier 19 - * than 2.96. 20 - */ 21 - #if __GNUC_MINOR__ >= 96 22 - # define __attribute_pure__ __attribute__((pure)) 23 - # define __attribute_const__ __attribute__((__const__)) 24 - #endif 25 - 26 - /* GCC 2.95.x/2.96 recognize __va_copy, but not va_copy. Actually later GCC's 27 - * define both va_copy and __va_copy, but the latter may go away, so limit this 28 - * to this header */ 29 - #define va_copy __va_copy
-2
include/linux/compiler.h
··· 42 42 # include <linux/compiler-gcc4.h> 43 43 #elif __GNUC__ == 3 44 44 # include <linux/compiler-gcc3.h> 45 - #elif __GNUC__ == 2 46 - # include <linux/compiler-gcc2.h> 47 45 #else 48 46 # error Sorry, your compiler is too old/not recognized. 49 47 #endif
+1 -6
init/main.c
··· 58 58 * This is one of the first .c files built. Error out early 59 59 * if we have compiler trouble.. 60 60 */ 61 - #if __GNUC__ == 2 && __GNUC_MINOR__ == 96 62 - #ifdef CONFIG_FRAME_POINTER 63 - #error This compiler cannot compile correctly with frame pointers enabled 64 - #endif 65 - #endif 66 61 67 62 #ifdef CONFIG_X86_LOCAL_APIC 68 63 #include <asm/smp.h> ··· 69 74 * To avoid associated bogus bug reports, we flatly refuse to compile 70 75 * with a gcc that is known to be too old from the very beginning. 71 76 */ 72 - #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 95) 77 + #if (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 2) 73 78 #error Sorry, your GCC is too old. It builds incorrect kernels. 74 79 #endif 75 80