Re: [PATCH] Use more gcc extensions in the Linux headers
On Sun, 11 Mar 2007 13:50:37 +1100, Rusty Russell said: > Well, this is what I sent to Linus and Andrew (many thanks to those who > made appropriately whimsical *or* useful comments): Ahh.. much better - it's now a form that even I can get my brain wrapped around :) pgpkbTo4rWBle.pgp Description: PGP signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 09 Mar 2007 20:24:42 PST, Randy Dunlap said: > On Fri, 09 Mar 2007 23:03:05 -0500 [EMAIL PROTECTED] wrote: > > -/* GCC is awesome. */ > > +/* GCC leaves me speechless. */ > > "awesome" can mean "inspiring awe or admiration or wonder" (amazing) > or it can mean "awful" (as in terrifying). 8) And as those who know me well will attest, it takes something well down the road of either definition to render me actually speechless.. :) pgpjKsvzaltOk.pgp Description: PGP signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 09 Mar 2007 20:24:42 PST, Randy Dunlap said: On Fri, 09 Mar 2007 23:03:05 -0500 [EMAIL PROTECTED] wrote: -/* GCC is awesome. */ +/* GCC leaves me speechless. */ awesome can mean inspiring awe or admiration or wonder (amazing) or it can mean awful (as in terrifying). 8) And as those who know me well will attest, it takes something well down the road of either definition to render me actually speechless.. :) pgpjKsvzaltOk.pgp Description: PGP signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sun, 11 Mar 2007 13:50:37 +1100, Rusty Russell said: Well, this is what I sent to Linus and Andrew (many thanks to those who made appropriately whimsical *or* useful comments): Ahh.. much better - it's now a form that even I can get my brain wrapped around :) pgpkbTo4rWBle.pgp Description: PGP signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sun, 2007-03-11 at 03:58 +0100, Jan Engelhardt wrote: > >-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) > >+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + > >__must_be_array(arr)) > >+ > 80 cols *cough* :) I think your cough added a column? Rusty. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Mar 11 2007 13:50, Rusty Russell wrote: >On Sat, 2007-03-10 at 02:04 +0100, Jan Engelhardt wrote: >> Getting back at the macro, how would you like to have it merged? > >Well, this is what I sent to Linus and Andrew (many thanks to those who >made appropriately whimsical *or* useful comments): > >diff -r 1ccdf46b0f41 include/linux/compiler-gcc.h >--- a/include/linux/compiler-gcc.h Sat Mar 10 09:55:29 2007 +1100 >+++ b/include/linux/compiler-gcc.h Sat Mar 10 11:06:35 2007 +1100 >@@ -22,6 +22,9 @@ > __asm__ ("" : "=r"(__ptr) : "0"(ptr));\ > (typeof(ptr)) (__ptr + (off)); }) > >+/* [0] degrades to a pointer: a different type from an array */ >+#define __must_be_array(a) \ >+ BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(typeof(a), typeof([0]))) This looks _much_ nicer! (And BUILD_BUG_ON is also appropriately commented.) > > #define inlineinline __attribute__((always_inline)) > #define __inline____inline__ __attribute__((always_inline)) >diff -r 1ccdf46b0f41 include/linux/compiler-intel.h >--- a/include/linux/compiler-intel.h Sat Mar 10 09:55:29 2007 +1100 >+++ b/include/linux/compiler-intel.h Sat Mar 10 11:06:25 2007 +1100 >@@ -21,4 +21,7 @@ > __ptr = (unsigned long) (ptr); \ > (typeof(ptr)) (__ptr + (off)); }) > >+/* Intel ECC compiler doesn't support __builtin_types_compatible_p() */ >+#define __must_be_array(a) 0 >+ > #endif >diff -r 1ccdf46b0f41 include/linux/kernel.h >--- a/include/linux/kernel.h Sat Mar 10 09:55:29 2007 +1100 >+++ b/include/linux/kernel.h Sat Mar 10 11:06:16 2007 +1100 >@@ -35,7 +35,8 @@ extern const char linux_proc_banner[]; > #define ALIGN(x,a)__ALIGN_MASK(x,(typeof(x))(a)-1) > #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) > >-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) >+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + >__must_be_array(arr)) >+ > #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) > #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) > #define roundup(x, y) x) + ((y) - 1)) / (y)) * (y)) 80 cols *cough* :) Jan -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sat, 2007-03-10 at 02:04 +0100, Jan Engelhardt wrote: > Getting back at the macro, how would you like to have it merged? Well, this is what I sent to Linus and Andrew (many thanks to those who made appropriately whimsical *or* useful comments): diff -r 1ccdf46b0f41 include/linux/compiler-gcc.h --- a/include/linux/compiler-gcc.h Sat Mar 10 09:55:29 2007 +1100 +++ b/include/linux/compiler-gcc.h Sat Mar 10 11:06:35 2007 +1100 @@ -22,6 +22,9 @@ __asm__ ("" : "=r"(__ptr) : "0"(ptr)); \ (typeof(ptr)) (__ptr + (off)); }) +/* [0] degrades to a pointer: a different type from an array */ +#define __must_be_array(a) \ + BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(typeof(a), typeof([0]))) #define inline inline __attribute__((always_inline)) #define __inline__ __inline__ __attribute__((always_inline)) diff -r 1ccdf46b0f41 include/linux/compiler-intel.h --- a/include/linux/compiler-intel.hSat Mar 10 09:55:29 2007 +1100 +++ b/include/linux/compiler-intel.hSat Mar 10 11:06:25 2007 +1100 @@ -21,4 +21,7 @@ __ptr = (unsigned long) (ptr);\ (typeof(ptr)) (__ptr + (off)); }) +/* Intel ECC compiler doesn't support __builtin_types_compatible_p() */ +#define __must_be_array(a) 0 + #endif diff -r 1ccdf46b0f41 include/linux/kernel.h --- a/include/linux/kernel.hSat Mar 10 09:55:29 2007 +1100 +++ b/include/linux/kernel.hSat Mar 10 11:06:16 2007 +1100 @@ -35,7 +35,8 @@ extern const char linux_proc_banner[]; #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) + #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) #define roundup(x, y) x) + ((y) - 1)) / (y)) * (y)) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 9 Mar 2007, Linus Torvalds wrote: > On Fri, 9 Mar 2007, Christoph Hellwig wrote: > Well, since Rusty's macro was hoddible *anyway*, I don't think I'd apply > it as-is. Breaking icc for something that ugly and not-very-important > simply makes no sense. > > There are better ways to do this. > > For one, you could (and should!) abstract these kinds of things out, > rather than put them in another macro that really does something totally > different. Then, the macro could have become > > #define ARRAY_SIZE (sizeof_expression + 0*error_if_not_array) /* Error if X is a pointer, 0 otherwise */ #define ERROR_IF_POINTER(x) \ sizeof(int[-__builtin_types_compatible_p(typeof(x), typeof([0]))]) /* Warning (div by zero) if x is a pointer, 0 otherwise */ #define WARN_IF_POINTER(x) \ (0/!__builtin_types_compatible_p(typeof(x), typeof([0]))) The gcc docs say __builtin_types_compatible_p returns 1 or 0, so the !! isn't necessary. And my gcc at least returns 0 for sizeof(int[0]). - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Mar 10 2007 16:18, Andreas Schwab wrote: >Jan Engelhardt <[EMAIL PROTECTED]> writes: > >> So in case they _ARE_ compatible, we get the compile error, as far as I >> can see it. There's a ! too much in the !!_builtin line. > >The error case is when the types are compatible. That means that >the argument is in fact _not_ an array. That one should go in as a comment for that macro. Jan -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
Jan Engelhardt <[EMAIL PROTECTED]> writes: > So in case they _ARE_ compatible, we get the compile error, as far as I > can see it. There's a ! too much in the !!_builtin line. The error case is when the types are compatible. That means that the argument is in fact _not_ an array. Andreas. -- Andreas Schwab, SuSE Labs, [EMAIL PROTECTED] SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Mar 10 2007 16:19, Nigel Cunningham wrote: >On Fri, 2007-03-09 at 23:03 -0500, [EMAIL PROTECTED] wrote: >> On Sat, 10 Mar 2007 09:57:32 +1100, Rusty Russell said: >> >> > +/* GCC is awesome. */ >> > #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) >> > \ >> >+ sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ >> > typeof([0]))]))*0) >> >> -/* GCC is awesome. */ >> +/* GCC leaves me speechless. */ > >A speechless Rusty would be horrible. That said, it would be nice if the >comment was something more like the normal Rusty pearl of wisdom. I >understand the first part, but have no idea was + sizeof(typeof(int[ >does... IOCCC entry candidate. Simple. !!__builtin_types_compatible_p, as it sounds, will return 1 if both types are compatible. If they are, then '1-2*!!_builtin..' will produce -1, then - surprisingly - sizeof(typeof(int[-1])) seems strange to me and should throw the error. If the types are not compatible, compat_p returns 0. !! will turn it into 0. 2* will turn it into 0. 1-0 is 1. sizeof(typeof(int[1])) is valid, and *0 will compile it away. So in case they _ARE_ compatible, we get the compile error, as far as I can see it. There's a ! too much in the !!_builtin line. Now we know why such patches are dangerous. What's more, a test program does not even fail when the types are incompatible. (Or it's also wrong): #include struct foo { int x, y, z; }; struct bar { const char *fol; }; #define c(x, y) \ sizeof(typeof(int[1 - \ 2*!!__builtin_types_compatible_p(typeof(x), typeof(y))])) int main(void) { printf("%d\n", c(struct foo *, struct bar *)); printf("%d\n", c(int*, int*)); } Both printf()s throw a compile time error. Jan -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Mar 10 2007 16:19, Nigel Cunningham wrote: On Fri, 2007-03-09 at 23:03 -0500, [EMAIL PROTECTED] wrote: On Sat, 10 Mar 2007 09:57:32 +1100, Rusty Russell said: +/* GCC is awesome. */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ typeof(arr[0]))]))*0) -/* GCC is awesome. */ +/* GCC leaves me speechless. */ A speechless Rusty would be horrible. That said, it would be nice if the comment was something more like the normal Rusty pearl of wisdom. I understand the first part, but have no idea was + sizeof(typeof(int[ does... IOCCC entry candidate. Simple. !!__builtin_types_compatible_p, as it sounds, will return 1 if both types are compatible. If they are, then '1-2*!!_builtin..' will produce -1, then - surprisingly - sizeof(typeof(int[-1])) seems strange to me and should throw the error. If the types are not compatible, compat_p returns 0. !! will turn it into 0. 2* will turn it into 0. 1-0 is 1. sizeof(typeof(int[1])) is valid, and *0 will compile it away. So in case they _ARE_ compatible, we get the compile error, as far as I can see it. There's a ! too much in the !!_builtin line. Now we know why such patches are dangerous. What's more, a test program does not even fail when the types are incompatible. (Or it's also wrong): #include stdio.h struct foo { int x, y, z; }; struct bar { const char *fol; }; #define c(x, y) \ sizeof(typeof(int[1 - \ 2*!!__builtin_types_compatible_p(typeof(x), typeof(y))])) int main(void) { printf(%d\n, c(struct foo *, struct bar *)); printf(%d\n, c(int*, int*)); } Both printf()s throw a compile time error. Jan -- - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
Jan Engelhardt [EMAIL PROTECTED] writes: So in case they _ARE_ compatible, we get the compile error, as far as I can see it. There's a ! too much in the !!_builtin line. The error case is when the types are compatible. That means that the argument is in fact _not_ an array. Andreas. -- Andreas Schwab, SuSE Labs, [EMAIL PROTECTED] SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany PGP key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 And now for something completely different. - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Mar 10 2007 16:18, Andreas Schwab wrote: Jan Engelhardt [EMAIL PROTECTED] writes: So in case they _ARE_ compatible, we get the compile error, as far as I can see it. There's a ! too much in the !!_builtin line. The error case is when the types are compatible. That means that the argument is in fact _not_ an array. That one should go in as a comment for that macro. Jan -- - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 9 Mar 2007, Linus Torvalds wrote: On Fri, 9 Mar 2007, Christoph Hellwig wrote: Well, since Rusty's macro was hoddible *anyway*, I don't think I'd apply it as-is. Breaking icc for something that ugly and not-very-important simply makes no sense. There are better ways to do this. For one, you could (and should!) abstract these kinds of things out, rather than put them in another macro that really does something totally different. Then, the macro could have become #define ARRAY_SIZE (sizeof_expression + 0*error_if_not_array) /* Error if X is a pointer, 0 otherwise */ #define ERROR_IF_POINTER(x) \ sizeof(int[-__builtin_types_compatible_p(typeof(x), typeof(x[0]))]) /* Warning (div by zero) if x is a pointer, 0 otherwise */ #define WARN_IF_POINTER(x) \ (0/!__builtin_types_compatible_p(typeof(x), typeof(x[0]))) The gcc docs say __builtin_types_compatible_p returns 1 or 0, so the !! isn't necessary. And my gcc at least returns 0 for sizeof(int[0]). - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sat, 2007-03-10 at 02:04 +0100, Jan Engelhardt wrote: Getting back at the macro, how would you like to have it merged? Well, this is what I sent to Linus and Andrew (many thanks to those who made appropriately whimsical *or* useful comments): diff -r 1ccdf46b0f41 include/linux/compiler-gcc.h --- a/include/linux/compiler-gcc.h Sat Mar 10 09:55:29 2007 +1100 +++ b/include/linux/compiler-gcc.h Sat Mar 10 11:06:35 2007 +1100 @@ -22,6 +22,9 @@ __asm__ ( : =r(__ptr) : 0(ptr)); \ (typeof(ptr)) (__ptr + (off)); }) +/* a[0] degrades to a pointer: a different type from an array */ +#define __must_be_array(a) \ + BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(typeof(a), typeof(a[0]))) #define inline inline __attribute__((always_inline)) #define __inline__ __inline__ __attribute__((always_inline)) diff -r 1ccdf46b0f41 include/linux/compiler-intel.h --- a/include/linux/compiler-intel.hSat Mar 10 09:55:29 2007 +1100 +++ b/include/linux/compiler-intel.hSat Mar 10 11:06:25 2007 +1100 @@ -21,4 +21,7 @@ __ptr = (unsigned long) (ptr);\ (typeof(ptr)) (__ptr + (off)); }) +/* Intel ECC compiler doesn't support __builtin_types_compatible_p() */ +#define __must_be_array(a) 0 + #endif diff -r 1ccdf46b0f41 include/linux/kernel.h --- a/include/linux/kernel.hSat Mar 10 09:55:29 2007 +1100 +++ b/include/linux/kernel.hSat Mar 10 11:06:16 2007 +1100 @@ -35,7 +35,8 @@ extern const char linux_proc_banner[]; #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))~(mask)) -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) + #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)-f)) #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) #define roundup(x, y) x) + ((y) - 1)) / (y)) * (y)) - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Mar 11 2007 13:50, Rusty Russell wrote: On Sat, 2007-03-10 at 02:04 +0100, Jan Engelhardt wrote: Getting back at the macro, how would you like to have it merged? Well, this is what I sent to Linus and Andrew (many thanks to those who made appropriately whimsical *or* useful comments): diff -r 1ccdf46b0f41 include/linux/compiler-gcc.h --- a/include/linux/compiler-gcc.h Sat Mar 10 09:55:29 2007 +1100 +++ b/include/linux/compiler-gcc.h Sat Mar 10 11:06:35 2007 +1100 @@ -22,6 +22,9 @@ __asm__ ( : =r(__ptr) : 0(ptr));\ (typeof(ptr)) (__ptr + (off)); }) +/* a[0] degrades to a pointer: a different type from an array */ +#define __must_be_array(a) \ + BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(typeof(a), typeof(a[0]))) This looks _much_ nicer! (And BUILD_BUG_ON is also appropriately commented.) #define inlineinline __attribute__((always_inline)) #define __inline____inline__ __attribute__((always_inline)) diff -r 1ccdf46b0f41 include/linux/compiler-intel.h --- a/include/linux/compiler-intel.h Sat Mar 10 09:55:29 2007 +1100 +++ b/include/linux/compiler-intel.h Sat Mar 10 11:06:25 2007 +1100 @@ -21,4 +21,7 @@ __ptr = (unsigned long) (ptr); \ (typeof(ptr)) (__ptr + (off)); }) +/* Intel ECC compiler doesn't support __builtin_types_compatible_p() */ +#define __must_be_array(a) 0 + #endif diff -r 1ccdf46b0f41 include/linux/kernel.h --- a/include/linux/kernel.h Sat Mar 10 09:55:29 2007 +1100 +++ b/include/linux/kernel.h Sat Mar 10 11:06:16 2007 +1100 @@ -35,7 +35,8 @@ extern const char linux_proc_banner[]; #define ALIGN(x,a)__ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))~(mask)) -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) + #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)-f)) #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) #define roundup(x, y) x) + ((y) - 1)) / (y)) * (y)) 80 cols *cough* :) Jan -- - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sun, 2007-03-11 at 03:58 +0100, Jan Engelhardt wrote: -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) + 80 cols *cough* :) I think your cough added a column? Rusty. - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
Hi. On Fri, 2007-03-09 at 23:03 -0500, [EMAIL PROTECTED] wrote: > On Sat, 10 Mar 2007 09:57:32 +1100, Rusty Russell said: > > > +/* GCC is awesome. */ > > #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) > > \ > > + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ > > typeof([0]))]))*0) > > -/* GCC is awesome. */ > +/* GCC leaves me speechless. */ A speechless Rusty would be horrible. That said, it would be nice if the comment was something more like the normal Rusty pearl of wisdom. I understand the first part, but have no idea was + sizeof(typeof(int[ does... - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 09 Mar 2007 23:03:05 -0500 [EMAIL PROTECTED] wrote: > On Sat, 10 Mar 2007 09:57:32 +1100, Rusty Russell said: > > > +/* GCC is awesome. */ > > #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) > > \ > > + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ > > typeof([0]))]))*0) > > -/* GCC is awesome. */ > +/* GCC leaves me speechless. */ "awesome" can mean "inspiring awe or admiration or wonder" (amazing) or it can mean "awful" (as in terrifying). 8) --- ~Randy *** Remember to use Documentation/SubmitChecklist when testing your code *** - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sat, 10 Mar 2007 09:57:32 +1100, Rusty Russell said: > +/* GCC is awesome. */ > #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) > \ > + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ >typeof([0]))]))*0) -/* GCC is awesome. */ +/* GCC leaves me speechless. */ pgpYI648COpfb.pgp Description: PGP signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Mar 10 2007 09:57, Rusty Russell wrote: >On Fri, 2007-03-09 at 16:56 +1100, Rusty Russell wrote: >> __builtin_types_compatible_p() has been around since gcc 2.95, and we >> don't use it anywhere. This patch quietly fixes that. > >OK, many people complained that it needed a comment. Good point! >== >Add comment to ARRAY_SIZE macro. > >Signed-off-by: Rusty Russell <[EMAIL PROTECTED]> > >diff -r 933e410f204f include/linux/kernel.h >--- a/include/linux/kernel.h Sat Mar 10 09:55:31 2007 +1100 >+++ b/include/linux/kernel.h Sat Mar 10 09:55:53 2007 +1100 >@@ -35,6 +35,7 @@ extern const char linux_proc_banner[]; > #define ALIGN(x,a)__ALIGN_MASK(x,(typeof(x))(a)-1) > #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) > >+/* GCC is awesome. */ > #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) > \ > + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ >typeof([0]))]))*0) Getting back at the macro, how would you like to have it merged? Jan -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sat, 10 Mar 2007, Rusty Russell wrote: > On Fri, 2007-03-09 at 16:56 +1100, Rusty Russell wrote: > > __builtin_types_compatible_p() has been around since gcc 2.95, and we > > don't use it anywhere. This patch quietly fixes that. > > OK, many people complained that it needed a comment. Good point! > == > Add comment to ARRAY_SIZE macro. > > Signed-off-by: Rusty Russell <[EMAIL PROTECTED]> > > diff -r 933e410f204f include/linux/kernel.h > --- a/include/linux/kernel.h Sat Mar 10 09:55:31 2007 +1100 > +++ b/include/linux/kernel.h Sat Mar 10 09:55:53 2007 +1100 > @@ -35,6 +35,7 @@ extern const char linux_proc_banner[]; > #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) > #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) > > +/* GCC is awesome. */ > #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) > \ > + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ >typeof([0]))]))*0) ah, but is that "universe" kind of awesome, or the "hot dogs" kind of awesome? http://youtube.com/watch?v=0rYT0YvQ3hs rday -- Robert P. J. Day Linux Consulting, Training and Annoying Kernel Pedantry Waterloo, Ontario, CANADA http://fsdev.net/wiki/index.php?title=Main_Page - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
Perhaps this patch can go into Wesnoth for testing for a while before we merge it into the kernel? - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sat, 10 Mar 2007 09:57:32 +1100 Rusty Russell wrote: > On Fri, 2007-03-09 at 16:56 +1100, Rusty Russell wrote: > > __builtin_types_compatible_p() has been around since gcc 2.95, and we > > don't use it anywhere. This patch quietly fixes that. Bah. Just because gcc has a "feature" doesn't mean we should use it (in this form). > OK, many people complained that it needed a comment. Good point! > == > Add comment to ARRAY_SIZE macro. > > Signed-off-by: Rusty Russell <[EMAIL PROTECTED]> > > diff -r 933e410f204f include/linux/kernel.h > --- a/include/linux/kernel.h Sat Mar 10 09:55:31 2007 +1100 > +++ b/include/linux/kernel.h Sat Mar 10 09:55:53 2007 +1100 > @@ -35,6 +35,7 @@ extern const char linux_proc_banner[]; > #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) > #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) > > +/* GCC is awesome. */ > #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) > \ > + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ >typeof([0]))]))*0) --- ~Randy *** Remember to use Documentation/SubmitChecklist when testing your code *** - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 2007-03-09 at 16:56 +1100, Rusty Russell wrote: > __builtin_types_compatible_p() has been around since gcc 2.95, and we > don't use it anywhere. This patch quietly fixes that. OK, many people complained that it needed a comment. Good point! == Add comment to ARRAY_SIZE macro. Signed-off-by: Rusty Russell <[EMAIL PROTECTED]> diff -r 933e410f204f include/linux/kernel.h --- a/include/linux/kernel.hSat Mar 10 09:55:31 2007 +1100 +++ b/include/linux/kernel.hSat Mar 10 09:55:53 2007 +1100 @@ -35,6 +35,7 @@ extern const char linux_proc_banner[]; #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) +/* GCC is awesome. */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ typeof([0]))]))*0) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 9 Mar 2007, Christoph Hellwig wrote: > > It was only put in under the premise that they'll fix whatever breaks, > we're not going to put any maintaince border on us to hack around > broken propritary compilers. Well, since Rusty's macro was hoddible *anyway*, I don't think I'd apply it as-is. Breaking icc for something that ugly and not-very-important simply makes no sense. There are better ways to do this. For one, you could (and should!) abstract these kinds of things out, rather than put them in another macro that really does something totally different. Then, the macro could have become #define ARRAY_SIZE (sizeof_expression + 0*error_if_not_array) which would already be a hell of a lot more readable. But more importantly, it's also now suddenly much easiler to abstract out for different compilers. We *already* support different compilers through , and there just isn't any reason for bad code just for bad codes sake! Linus - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
Rusty Russell <[EMAIL PROTECTED]> writes: > __builtin_types_compatible_p() has been around since gcc 2.95, and we > don't use it anywhere. This patch quietly fixes that. Using BUILD_BUG_ON_ZERO() would have been somewhat cleaner. -Andi - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, Mar 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: > __builtin_types_compatible_p() has been around since gcc 2.95, and we > don't use it anywhere. This patch quietly fixes that. > > Signed-off-by: Rusty Russell <[EMAIL PROTECTED]> Is your clock set correctly? Looks like this mail was sent 23 days early. :-) - Ted - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, Mar 09, 2007 at 12:02:19PM +0300, Andrey Panin wrote: > Kernel compilation with Intel compiler is (was ?) supported. > This patch will break it. It was only put in under the premise that they'll fix whatever breaks, we're not going to put any maintaince border on us to hack around broken propritary compilers. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On 068, 03 09, 2007 at 07:53:08AM +, Christoph Hellwig wrote: > On Fri, Mar 09, 2007 at 09:50:56AM +0300, Andrey Panin wrote: > > On 068, 03 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: > > > __builtin_types_compatible_p() has been around since gcc 2.95, > > > > but it's not available in Intel C compiler IIRC :( > > So what? Kernel compilation with Intel compiler is (was ?) supported. This patch will break it. -- Andrey Panin| Linux and UNIX system administrator [EMAIL PROTECTED] | PGP key: wwwkeys.pgp.net signature.asc Description: Digital signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On 09-03-2007 08:52, Christoph Hellwig wrote: > On Fri, Mar 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: ... >> +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) >> \ >> ++ sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ >> + typeof([0]))]))*0) > > This needs a comment explaning why we're doing this, and maybe a little > explanation of the combination of gcc magic and C trickery used to implement > it to the brave non-uberhacker people trying to understand linux headers. ...and to deprive them of all the pleasure of contemplating... Jarek P. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On 09-03-2007 08:52, Christoph Hellwig wrote: On Fri, Mar 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: ... +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ ++ sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ + typeof(arr[0]))]))*0) This needs a comment explaning why we're doing this, and maybe a little explanation of the combination of gcc magic and C trickery used to implement it to the brave non-uberhacker people trying to understand linux headers. ...and to deprive them of all the pleasure of contemplating... Jarek P. - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On 068, 03 09, 2007 at 07:53:08AM +, Christoph Hellwig wrote: On Fri, Mar 09, 2007 at 09:50:56AM +0300, Andrey Panin wrote: On 068, 03 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: __builtin_types_compatible_p() has been around since gcc 2.95, but it's not available in Intel C compiler IIRC :( So what? Kernel compilation with Intel compiler is (was ?) supported. This patch will break it. -- Andrey Panin| Linux and UNIX system administrator [EMAIL PROTECTED] | PGP key: wwwkeys.pgp.net signature.asc Description: Digital signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, Mar 09, 2007 at 12:02:19PM +0300, Andrey Panin wrote: Kernel compilation with Intel compiler is (was ?) supported. This patch will break it. It was only put in under the premise that they'll fix whatever breaks, we're not going to put any maintaince border on us to hack around broken propritary compilers. - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, Mar 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: __builtin_types_compatible_p() has been around since gcc 2.95, and we don't use it anywhere. This patch quietly fixes that. Signed-off-by: Rusty Russell [EMAIL PROTECTED] Is your clock set correctly? Looks like this mail was sent 23 days early. :-) - Ted - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
Rusty Russell [EMAIL PROTECTED] writes: __builtin_types_compatible_p() has been around since gcc 2.95, and we don't use it anywhere. This patch quietly fixes that. Using BUILD_BUG_ON_ZERO() would have been somewhat cleaner. -Andi - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 9 Mar 2007, Christoph Hellwig wrote: It was only put in under the premise that they'll fix whatever breaks, we're not going to put any maintaince border on us to hack around broken propritary compilers. Well, since Rusty's macro was hoddible *anyway*, I don't think I'd apply it as-is. Breaking icc for something that ugly and not-very-important simply makes no sense. There are better ways to do this. For one, you could (and should!) abstract these kinds of things out, rather than put them in another macro that really does something totally different. Then, the macro could have become #define ARRAY_SIZE (sizeof_expression + 0*error_if_not_array) which would already be a hell of a lot more readable. But more importantly, it's also now suddenly much easiler to abstract out for different compilers. We *already* support different compilers through linux/compiler.h, and there just isn't any reason for bad code just for bad codes sake! Linus - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 2007-03-09 at 16:56 +1100, Rusty Russell wrote: __builtin_types_compatible_p() has been around since gcc 2.95, and we don't use it anywhere. This patch quietly fixes that. OK, many people complained that it needed a comment. Good point! == Add comment to ARRAY_SIZE macro. Signed-off-by: Rusty Russell [EMAIL PROTECTED] diff -r 933e410f204f include/linux/kernel.h --- a/include/linux/kernel.hSat Mar 10 09:55:31 2007 +1100 +++ b/include/linux/kernel.hSat Mar 10 09:55:53 2007 +1100 @@ -35,6 +35,7 @@ extern const char linux_proc_banner[]; #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))~(mask)) +/* GCC is awesome. */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ typeof(arr[0]))]))*0) - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sat, 10 Mar 2007 09:57:32 +1100 Rusty Russell wrote: On Fri, 2007-03-09 at 16:56 +1100, Rusty Russell wrote: __builtin_types_compatible_p() has been around since gcc 2.95, and we don't use it anywhere. This patch quietly fixes that. Bah. Just because gcc has a feature doesn't mean we should use it (in this form). OK, many people complained that it needed a comment. Good point! == Add comment to ARRAY_SIZE macro. Signed-off-by: Rusty Russell [EMAIL PROTECTED] diff -r 933e410f204f include/linux/kernel.h --- a/include/linux/kernel.h Sat Mar 10 09:55:31 2007 +1100 +++ b/include/linux/kernel.h Sat Mar 10 09:55:53 2007 +1100 @@ -35,6 +35,7 @@ extern const char linux_proc_banner[]; #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))~(mask)) +/* GCC is awesome. */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ typeof(arr[0]))]))*0) --- ~Randy *** Remember to use Documentation/SubmitChecklist when testing your code *** - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
Perhaps this patch can go into Wesnoth for testing for a while before we merge it into the kernel? - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sat, 10 Mar 2007, Rusty Russell wrote: On Fri, 2007-03-09 at 16:56 +1100, Rusty Russell wrote: __builtin_types_compatible_p() has been around since gcc 2.95, and we don't use it anywhere. This patch quietly fixes that. OK, many people complained that it needed a comment. Good point! == Add comment to ARRAY_SIZE macro. Signed-off-by: Rusty Russell [EMAIL PROTECTED] diff -r 933e410f204f include/linux/kernel.h --- a/include/linux/kernel.h Sat Mar 10 09:55:31 2007 +1100 +++ b/include/linux/kernel.h Sat Mar 10 09:55:53 2007 +1100 @@ -35,6 +35,7 @@ extern const char linux_proc_banner[]; #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))~(mask)) +/* GCC is awesome. */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ typeof(arr[0]))]))*0) ah, but is that universe kind of awesome, or the hot dogs kind of awesome? http://youtube.com/watch?v=0rYT0YvQ3hs rday -- Robert P. J. Day Linux Consulting, Training and Annoying Kernel Pedantry Waterloo, Ontario, CANADA http://fsdev.net/wiki/index.php?title=Main_Page - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Mar 10 2007 09:57, Rusty Russell wrote: On Fri, 2007-03-09 at 16:56 +1100, Rusty Russell wrote: __builtin_types_compatible_p() has been around since gcc 2.95, and we don't use it anywhere. This patch quietly fixes that. OK, many people complained that it needed a comment. Good point! == Add comment to ARRAY_SIZE macro. Signed-off-by: Rusty Russell [EMAIL PROTECTED] diff -r 933e410f204f include/linux/kernel.h --- a/include/linux/kernel.h Sat Mar 10 09:55:31 2007 +1100 +++ b/include/linux/kernel.h Sat Mar 10 09:55:53 2007 +1100 @@ -35,6 +35,7 @@ extern const char linux_proc_banner[]; #define ALIGN(x,a)__ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))~(mask)) +/* GCC is awesome. */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ typeof(arr[0]))]))*0) Getting back at the macro, how would you like to have it merged? Jan -- - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Sat, 10 Mar 2007 09:57:32 +1100, Rusty Russell said: +/* GCC is awesome. */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ typeof(arr[0]))]))*0) -/* GCC is awesome. */ +/* GCC leaves me speechless. */ pgpYI648COpfb.pgp Description: PGP signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 09 Mar 2007 23:03:05 -0500 [EMAIL PROTECTED] wrote: On Sat, 10 Mar 2007 09:57:32 +1100, Rusty Russell said: +/* GCC is awesome. */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ typeof(arr[0]))]))*0) -/* GCC is awesome. */ +/* GCC leaves me speechless. */ awesome can mean inspiring awe or admiration or wonder (amazing) or it can mean awful (as in terrifying). 8) --- ~Randy *** Remember to use Documentation/SubmitChecklist when testing your code *** - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
Hi. On Fri, 2007-03-09 at 23:03 -0500, [EMAIL PROTECTED] wrote: On Sat, 10 Mar 2007 09:57:32 +1100, Rusty Russell said: +/* GCC is awesome. */ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ typeof(arr[0]))]))*0) -/* GCC is awesome. */ +/* GCC leaves me speechless. */ A speechless Rusty would be horrible. That said, it would be nice if the comment was something more like the normal Rusty pearl of wisdom. I understand the first part, but have no idea was + sizeof(typeof(int[ does... - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, Mar 09, 2007 at 09:50:56AM +0300, Andrey Panin wrote: > On 068, 03 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: > > __builtin_types_compatible_p() has been around since gcc 2.95, > > but it's not available in Intel C compiler IIRC :( So what? - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, Mar 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: > __builtin_types_compatible_p() has been around since gcc 2.95, and we > don't use it anywhere. This patch quietly fixes that. > > Signed-off-by: Rusty Russell <[EMAIL PROTECTED]> > > diff -r f0ff8138f993 include/linux/kernel.h > --- a/include/linux/kernel.h Fri Mar 09 16:40:25 2007 +1100 > +++ b/include/linux/kernel.h Fri Mar 09 16:44:04 2007 +1100 > @@ -35,7 +35,9 @@ extern const char linux_proc_banner[]; > #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) > #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) > > -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) > +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) > \ > + + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ > + typeof([0]))]))*0) This needs a comment explaning why we're doing this, and maybe a little explanation of the combination of gcc magic and C trickery used to implement it to the brave non-uberhacker people trying to understand linux headers. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On 068, 03 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: > __builtin_types_compatible_p() has been around since gcc 2.95, but it's not available in Intel C compiler IIRC :( > and we don't use it anywhere. This patch quietly fixes that. > > Signed-off-by: Rusty Russell <[EMAIL PROTECTED]> > > diff -r f0ff8138f993 include/linux/kernel.h > --- a/include/linux/kernel.h Fri Mar 09 16:40:25 2007 +1100 > +++ b/include/linux/kernel.h Fri Mar 09 16:44:04 2007 +1100 > @@ -35,7 +35,9 @@ extern const char linux_proc_banner[]; > #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) > #define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask)) > > -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) > +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) > \ > + + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ > + typeof([0]))]))*0) > #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) > #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) > #define roundup(x, y) x) + ((y) - 1)) / (y)) * (y)) > > > - > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to [EMAIL PROTECTED] > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > -- Andrey Panin| Linux and UNIX system administrator [EMAIL PROTECTED] | PGP key: wwwkeys.pgp.net signature.asc Description: Digital signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 9 Mar 2007, Rusty Russell wrote: > > __builtin_types_compatible_p() has been around since gcc 2.95, and we > don't use it anywhere. This patch quietly fixes that. Whee. Rusty, that's a work of art. However, I would suggest that you never show it to anybody ever again. I'm sure that in fifty years, it will be worth much more. So please keep it tightly under wraps, to keep people from gouging their eyes out^W^W^W^W^W^W^W make a killing in the art market. Please. Linus - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 09 Mar 2007 16:56:32 +1100 Rusty Russell <[EMAIL PROTECTED]> wrote: > > __builtin_types_compatible_p() has been around since gcc 2.95, and we > don't use it anywhere. This patch quietly fixes that. After staring at this for about 2 minutes, how about a commit message like: Make ARRAY_SIZE complain strangely if passed a pointer instead of an array. :-) -- Cheers, Stephen Rothwell[EMAIL PROTECTED] http://www.canb.auug.org.au/~sfr/ pgpbCZVxyFXZc.pgp Description: PGP signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 09 Mar 2007 16:56:32 +1100 Rusty Russell [EMAIL PROTECTED] wrote: __builtin_types_compatible_p() has been around since gcc 2.95, and we don't use it anywhere. This patch quietly fixes that. After staring at this for about 2 minutes, how about a commit message like: Make ARRAY_SIZE complain strangely if passed a pointer instead of an array. :-) -- Cheers, Stephen Rothwell[EMAIL PROTECTED] http://www.canb.auug.org.au/~sfr/ pgpbCZVxyFXZc.pgp Description: PGP signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, 9 Mar 2007, Rusty Russell wrote: __builtin_types_compatible_p() has been around since gcc 2.95, and we don't use it anywhere. This patch quietly fixes that. Whee. Rusty, that's a work of art. However, I would suggest that you never show it to anybody ever again. I'm sure that in fifty years, it will be worth much more. So please keep it tightly under wraps, to keep people from gouging their eyes out^W^W^W^W^W^W^W make a killing in the art market. Please. Linus - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On 068, 03 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: __builtin_types_compatible_p() has been around since gcc 2.95, but it's not available in Intel C compiler IIRC :( and we don't use it anywhere. This patch quietly fixes that. Signed-off-by: Rusty Russell [EMAIL PROTECTED] diff -r f0ff8138f993 include/linux/kernel.h --- a/include/linux/kernel.h Fri Mar 09 16:40:25 2007 +1100 +++ b/include/linux/kernel.h Fri Mar 09 16:44:04 2007 +1100 @@ -35,7 +35,9 @@ extern const char linux_proc_banner[]; #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))~(mask)) -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ + typeof(arr[0]))]))*0) #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)-f)) #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) #define roundup(x, y) x) + ((y) - 1)) / (y)) * (y)) - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ -- Andrey Panin| Linux and UNIX system administrator [EMAIL PROTECTED] | PGP key: wwwkeys.pgp.net signature.asc Description: Digital signature
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, Mar 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: __builtin_types_compatible_p() has been around since gcc 2.95, and we don't use it anywhere. This patch quietly fixes that. Signed-off-by: Rusty Russell [EMAIL PROTECTED] diff -r f0ff8138f993 include/linux/kernel.h --- a/include/linux/kernel.h Fri Mar 09 16:40:25 2007 +1100 +++ b/include/linux/kernel.h Fri Mar 09 16:44:04 2007 +1100 @@ -35,7 +35,9 @@ extern const char linux_proc_banner[]; #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1) #define __ALIGN_MASK(x,mask) (((x)+(mask))~(mask)) -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) \ + + sizeof(typeof(int[1 - 2*!!__builtin_types_compatible_p(typeof(arr), \ + typeof(arr[0]))]))*0) This needs a comment explaning why we're doing this, and maybe a little explanation of the combination of gcc magic and C trickery used to implement it to the brave non-uberhacker people trying to understand linux headers. - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] Use more gcc extensions in the Linux headers
On Fri, Mar 09, 2007 at 09:50:56AM +0300, Andrey Panin wrote: On 068, 03 09, 2007 at 04:56:32PM +1100, Rusty Russell wrote: __builtin_types_compatible_p() has been around since gcc 2.95, but it's not available in Intel C compiler IIRC :( So what? - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/