aboutsummaryrefslogtreecommitdiff
path: root/libgcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-04-16 13:22:40 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-04-16 13:22:40 +0200
commita57f99ba1c8f5ece013b9a2cae954338a492764a (patch)
tree3a4e46438b46f5e88a516a6dc46faeb407517198 /libgcc
parentc814ac9e69218ffd68b042c77829ea590ba6049a (diff)
downloadgcc-a57f99ba1c8f5ece013b9a2cae954338a492764a.zip
gcc-a57f99ba1c8f5ece013b9a2cae954338a492764a.tar.gz
gcc-a57f99ba1c8f5ece013b9a2cae954338a492764a.tar.bz2
re PR target/84945 (UBSAN: gcc/config/i386/i386.c:33312:22: runtime error: shift exponent 32 is too large for 32-bit type 'int')
PR target/84945 * config/i386/cpuinfo.c (set_feature): Wrap into do while (0) to avoid -Wdangling-else warnings. Mask shift counts to avoid -Wshift-count-negative and -Wshift-count-overflow false positives. From-SVN: r259398
Diffstat (limited to 'libgcc')
-rw-r--r--libgcc/ChangeLog7
-rw-r--r--libgcc/config/i386/cpuinfo.c9
2 files changed, 15 insertions, 1 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index a715f0b..aeaa653 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,10 @@
+2018-04-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/84945
+ * config/i386/cpuinfo.c (set_feature): Wrap into do while (0) to avoid
+ -Wdangling-else warnings. Mask shift counts to avoid
+ -Wshift-count-negative and -Wshift-count-overflow false positives.
+
2018-04-06 Ruslan Bukin <br@bsdpad.com>
* config.host (riscv*-*-freebsd*): Add RISC-V FreeBSD support.
diff --git a/libgcc/config/i386/cpuinfo.c b/libgcc/config/i386/cpuinfo.c
index 1dac110..86953db 100644
--- a/libgcc/config/i386/cpuinfo.c
+++ b/libgcc/config/i386/cpuinfo.c
@@ -275,7 +275,14 @@ get_available_features (unsigned int ecx, unsigned int edx,
}
#define set_feature(f) \
- if (f < 32) features |= (1U << f); else features2 |= (1U << (f - 32))
+ do \
+ { \
+ if (f < 32) \
+ features |= (1U << (f & 31)); \
+ else \
+ features2 |= (1U << ((f - 32) & 31)); \
+ } \
+ while (0)
if (edx & bit_CMOV)
set_feature (FEATURE_CMOV);