Commit a57f99ba by Jakub Jelinek Committed by Jakub Jelinek

re PR target/84945 (UBSAN: gcc/config/i386/i386.c:33312:22: runtime error: shift…

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
parent c814ac9e
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.
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment