diff options
author | Mike Frysinger <vapier@gentoo.org> | 2016-01-13 15:31:43 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2016-01-13 15:31:43 +0000 |
commit | 7e94e9eaf290d5d3d9c5ebc4f41ff5438413ad56 (patch) | |
tree | 775c8a16e95fdd14a4806cee39a85366c23f02a0 /4.2.4 | |
parent | stop enabling -D_FORTIFY_SOURCE by default in older versions for compatibilit... (diff) | |
download | gcc-patches-7e94e9eaf290d5d3d9c5ebc4f41ff5438413ad56.tar.gz gcc-patches-7e94e9eaf290d5d3d9c5ebc4f41ff5438413ad56.tar.bz2 gcc-patches-7e94e9eaf290d5d3d9c5ebc4f41ff5438413ad56.zip |
backport static inline fix to fix building w/newer compilers
Diffstat (limited to '4.2.4')
-rw-r--r-- | 4.2.4/gentoo/44_all_gcc-log2-static-inline.patch | 127 | ||||
-rw-r--r-- | 4.2.4/gentoo/README.history | 3 |
2 files changed, 129 insertions, 1 deletions
diff --git a/4.2.4/gentoo/44_all_gcc-log2-static-inline.patch b/4.2.4/gentoo/44_all_gcc-log2-static-inline.patch new file mode 100644 index 0000000..5ccfe63 --- /dev/null +++ b/4.2.4/gentoo/44_all_gcc-log2-static-inline.patch @@ -0,0 +1,127 @@ +https://gcc.gnu.org/ml/gcc-patches/2009-06/msg01234.html + +From 4345dfaa7260253cb0d3b10b4b466f586e9d28dc Mon Sep 17 00:00:00 2001 +From: Ian Lance Taylor <iant@google.com> +Date: Tue, 16 Jun 2009 16:55:41 +0000 +Subject: [PATCH] Make exact_log2 and floor_log2 static inline + +The functions exact_log2 and floor_log2 are defined in toplev.h and +toplev.c as GNU89 extern inline functions. This does not work right +with C++ or with C99. For C99 we could use the gnu_inline attribute, +but there is really no advantage to doing so. This patch changes +floor_log2 and exact_log2 to be static inline. The definitions in +toplev.c are only provided if the static inline functions are not +defined, which is to say when compiling with a non-gcc compiler or +with gcc pre 3.4. This simplifies the code overall. + +Bootstrapped and tested on x86_64-unknown-linux-gnu. Committed. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@148540 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + gcc/ChangeLog | 9 +++++++++ + gcc/toplev.c | 18 +++++------------- + gcc/toplev.h | 12 ++++++++---- + 3 files changed, 22 insertions(+), 17 deletions(-) + +diff --git a/gcc/toplev.c b/gcc/toplev.c +index 267df59..4836238 100644 +--- a/gcc/toplev.c ++++ b/gcc/toplev.c +@@ -532,11 +532,11 @@ read_integral_parameter (const char *p, const char *pname, const int defval) + return atoi (p); + } + +-/* When compiling with a recent enough GCC, we use the GNU C "extern inline" +- for floor_log2 and exact_log2; see toplev.h. That construct, however, +- conflicts with the ISO C++ One Definition Rule. */ ++#if GCC_VERSION < 3004 + +-#if GCC_VERSION < 3004 || !defined (__cplusplus) ++/* The functions floor_log2 and exact_log2 are defined as inline ++ functions in toplev.h if GCC_VERSION >= 3004. The definitions here ++ are used for older versions of gcc. */ + + /* Given X, an unsigned number, return the largest int Y such that 2**Y <= X. + If X is 0, return -1. */ +@@ -549,9 +549,6 @@ floor_log2 (unsigned HOST_WIDE_INT x) + if (x == 0) + return -1; + +-#ifdef CLZ_HWI +- t = HOST_BITS_PER_WIDE_INT - 1 - (int) CLZ_HWI (x); +-#else + if (HOST_BITS_PER_WIDE_INT > 64) + if (x >= (unsigned HOST_WIDE_INT) 1 << (t + 64)) + t += 64; +@@ -568,7 +565,6 @@ floor_log2 (unsigned HOST_WIDE_INT x) + t += 2; + if (x >= ((unsigned HOST_WIDE_INT) 1) << (t + 1)) + t += 1; +-#endif + + return t; + } +@@ -581,14 +577,10 @@ exact_log2 (unsigned HOST_WIDE_INT x) + { + if (x != (x & -x)) + return -1; +-#ifdef CTZ_HWI +- return x ? CTZ_HWI (x) : -1; +-#else + return floor_log2 (x); +-#endif + } + +-#endif /* GCC_VERSION < 3004 || !defined (__cplusplus) */ ++#endif /* GCC_VERSION < 3004 */ + + /* Handler for fatal signals, such as SIGSEGV. These are transformed + into ICE messages, which is much more user friendly. In case the +diff --git a/gcc/toplev.h b/gcc/toplev.h +index e62aa727..cca6867 100644 +--- a/gcc/toplev.h ++++ b/gcc/toplev.h +@@ -169,14 +169,17 @@ extern void decode_d_option (const char *); + extern bool fast_math_flags_set_p (void); + extern bool fast_math_flags_struct_set_p (struct cl_optimization *); + ++/* Inline versions of the above for speed. */ ++#if GCC_VERSION < 3004 ++ + /* Return log2, or -1 if not exact. */ + extern int exact_log2 (unsigned HOST_WIDE_INT); + + /* Return floor of log2, with -1 for zero. */ + extern int floor_log2 (unsigned HOST_WIDE_INT); + +-/* Inline versions of the above for speed. */ +-#if GCC_VERSION >= 3004 ++#else /* GCC_VERSION >= 3004 */ ++ + # if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG + # define CLZ_HWI __builtin_clzl + # define CTZ_HWI __builtin_ctzl +@@ -188,17 +191,18 @@ extern int floor_log2 (unsigned HOST_WIDE_INT); + # define CTZ_HWI __builtin_ctz + # endif + +-extern inline int ++static inline int + floor_log2 (unsigned HOST_WIDE_INT x) + { + return x ? HOST_BITS_PER_WIDE_INT - 1 - (int) CLZ_HWI (x) : -1; + } + +-extern inline int ++static inline int + exact_log2 (unsigned HOST_WIDE_INT x) + { + return x == (x & -x) && x ? (int) CTZ_HWI (x) : -1; + } ++ + #endif /* GCC_VERSION >= 3004 */ + + /* Functions used to get and set GCC's notion of in what directory +-- +2.6.2 + diff --git a/4.2.4/gentoo/README.history b/4.2.4/gentoo/README.history index 6ade77c..620a9d5 100644 --- a/4.2.4/gentoo/README.history +++ b/4.2.4/gentoo/README.history @@ -1,5 +1,6 @@ -1.4 [pending] +1.4 13 Jan 2016 - 00_all_gcc-trampolinewarn.patch + + 44_all_gcc-log2-static-inline.patch 1.3 27 Dec 2013 + 27_all_gcj-glibc-2.15-pr50888.patch |