diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-04-16 13:22:40 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-04-16 13:22:40 +0200 |
commit | a57f99ba1c8f5ece013b9a2cae954338a492764a (patch) | |
tree | 3a4e46438b46f5e88a516a6dc46faeb407517198 /libgcc | |
parent | c814ac9e69218ffd68b042c77829ea590ba6049a (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libgcc/config/i386/cpuinfo.c | 9 |
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); |