aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2022-06-22 19:11:20 +0200
committerIain Buclaw <ibuclaw@gdcproject.org>2022-06-24 20:49:58 +0200
commitc0ad48527c314a1e9354b7c26718b56ed4abc92c (patch)
tree505100920ec9714013c52f1ee20dcb25ef6158e5
parentbb403de36aa29e5398119e78a2c96794bdd6bad8 (diff)
downloadgcc-c0ad48527c314a1e9354b7c26718b56ed4abc92c.zip
gcc-c0ad48527c314a1e9354b7c26718b56ed4abc92c.tar.gz
gcc-c0ad48527c314a1e9354b7c26718b56ed4abc92c.tar.bz2
tilegx: Fix infinite loop in gen-mul-tables generator
Since around GCC 10, the condition `j < (INTMAX_MAX / 10)' will get optimized into `j != 922337203685477580', which will result in an infinite loop for certain inputs of `j'. Copy the condition already used by the -DTILEPRO generator code, which doesn't fall into this trap. gcc/ChangeLog: * config/tilepro/gen-mul-tables.cc (tilegx_emit): Adjust loop condition to avoid overflow.
-rw-r--r--gcc/config/tilepro/gen-mul-tables.cc4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/config/tilepro/gen-mul-tables.cc b/gcc/config/tilepro/gen-mul-tables.cc
index 5218398..c125748 100644
--- a/gcc/config/tilepro/gen-mul-tables.cc
+++ b/gcc/config/tilepro/gen-mul-tables.cc
@@ -1192,11 +1192,11 @@ tilegx_emit (long long multiplier, int num_ops)
long long next_pow10;
while (((j * 10) < abs_multiplier)
- && (j < (INTMAX_MAX / 10)))
+ && (j < (j * 10)))
j = j * 10;
prev_pow10 = j;
- next_pow10 = (j > (INTMAX_MAX / 10)) ? 0 : j * 10;
+ next_pow10 = j * 10;
if ((abs_multiplier - prev_pow10 <= 100)
|| (next_pow10