Message ID | 1348874411-28288-4-git-send-email-daniel.santos@pobox.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Fri, Sep 28, 2012 at 06:20:04PM -0500, Daniel Santos wrote: > Throughout compiler*.h, many version checks are made. These can be > simplified by using the macro that gcc's documentation recommends. > However, my primary reason for adding this is that I need bug-check > macros that are enabled at certain gcc versions and it's cleaner to use > this macro than the tradition method: > > if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ => 2) > > If you add patch level, it gets this ugly: > > if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 2 || \ > __GNUC_MINOR__ == 2 __GNUC_PATCHLEVEL__ >= 1)) > > As opposed to: > > if GCC_VERSION >= 40201 > > While having separate headers for gcc 3 & 4 eliminates some of this > verbosity, they can still be cleaned up by this. Yes, very fine readability improvement. Acked-by: Borislav Petkov <bp@alien8.de>
So in light of feedback I've been getting on this patch set, it leaves me with this question. > +#define GCC_VERSION (__GNUC__ * 10000 \ > + + __GNUC_MINOR__ * 100 \ > + + __GNUC_PATCHLEVEL__) This macro presumes you are using gcc 3.0 or later, which introduced the __GNUC_PATCHLEVEL__ predefined macro. Should you be using a version of gcc prior to 3.0 (where the macro is undefined), you would get an error that __GNUC_PATCHLEVEL__ is undefined prior to getting the error trying to include "linux/compiler-gcc2.h". So it presumes the compiler is 3.0+, when another part of the code may allow it from a future change. Should it be modified to do account for this or would that be overkill? #ifdef __GNUC_PATCHLEVEL__ # define GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) #else # define GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100) #endif Daniel -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sun, Sep 30, 2012 at 06:11:01PM -0500, Daniel Santos wrote: > So in light of feedback I've been getting on this patch set, it leaves > me with > this question. > > +#define GCC_VERSION (__GNUC__ * 10000 \ > > + + __GNUC_MINOR__ * 100 \ > > + + __GNUC_PATCHLEVEL__) > This macro presumes you are using gcc 3.0 or later, which introduced the > __GNUC_PATCHLEVEL__ predefined macro. Should you be using a version of gcc > prior to 3.0 (where the macro is undefined), you would get an error that > __GNUC_PATCHLEVEL__ is undefined prior to getting the error trying to > include > "linux/compiler-gcc2.h". So it presumes the compiler is 3.0+, when another > part of the code may allow it from a future change. Should it be > modified to > do account for this or would that be overkill? Overkill, since Linux requires GCC 3.2 or newer. From compiler-gcc3.h: #if __GNUC_MINOR__ < 2 # error Sorry, your compiler is too old - please upgrade it. #endif - Josh Triplett -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, 28 Sep 2012, Daniel Santos wrote: > Throughout compiler*.h, many version checks are made. These can be > simplified by using the macro that gcc's documentation recommends. > However, my primary reason for adding this is that I need bug-check > macros that are enabled at certain gcc versions and it's cleaner to use > this macro than the tradition method: > > if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ => 2) > > If you add patch level, it gets this ugly: > > if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 2 || \ > __GNUC_MINOR__ == 2 __GNUC_PATCHLEVEL__ >= 1)) > > As opposed to: > > if GCC_VERSION >= 40201 > > While having separate headers for gcc 3 & 4 eliminates some of this > verbosity, they can still be cleaned up by this. > > See also: > http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html > > Signed-off-by: Daniel Santos <daniel.santos@pobox.com> Acked-by: David Rientjes <rientjes@google.com> -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index 6a6d7ae..24545cd 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h @@ -5,6 +5,9 @@ /* * Common definitions for all gcc versions go here. */ +#define GCC_VERSION (__GNUC__ * 10000 \ + + __GNUC_MINOR__ * 100 \ + + __GNUC_PATCHLEVEL__) /* Optimization barrier */
Throughout compiler*.h, many version checks are made. These can be simplified by using the macro that gcc's documentation recommends. However, my primary reason for adding this is that I need bug-check macros that are enabled at certain gcc versions and it's cleaner to use this macro than the tradition method: if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ => 2) If you add patch level, it gets this ugly: if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 2 || \ __GNUC_MINOR__ == 2 __GNUC_PATCHLEVEL__ >= 1)) As opposed to: if GCC_VERSION >= 40201 While having separate headers for gcc 3 & 4 eliminates some of this verbosity, they can still be cleaned up by this. See also: http://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html Signed-off-by: Daniel Santos <daniel.santos@pobox.com> --- include/linux/compiler-gcc.h | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-)