After commit 51b85dfeb19652bf3e0aaec08828ba7cee1e641c, when the pointer offset is a variable in the loop, the object size of point may also need to be reexamined. Which make gcc_assert in the check_for_plus_in_loops failed.
gcc/ChangeLog:
tree-object-size.cc (check_for_plus_in_loops): Skip check for
the variable offset
Signed-off-by: Linsen Zhou <[email protected]>
---
Related Alpine Linux issues:
https://gitlab.alpinelinux.org/alpine/aports/-/issues/17416
https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/87912
gcc/tree-object-size.cc | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/gcc/tree-object-size.cc b/gcc/tree-object-size.cc
index 8545eff61a3..413e67a8125 100644
--- a/gcc/tree-object-size.cc
+++ b/gcc/tree-object-size.cc
@@ -2147,10 +2147,9 @@ check_for_plus_in_loops (struct object_size_info *osi,
tree var)
tree basevar = gimple_assign_rhs1 (stmt);
tree cst = gimple_assign_rhs2 (stmt);
- gcc_assert (TREE_CODE (cst) == INTEGER_CST);
-
/* Skip non-positive offsets. */
- if (integer_zerop (cst) || compare_tree_int (cst, offset_limit) > 0)
+ if (TREE_CODE (cst) != INTEGER_CST
+ || integer_zerop (cst) || compare_tree_int (cst, offset_limit) > 0)
return;
osi->depths[SSA_NAME_VERSION (basevar)] = 1;
--
2.51.0
--
Lindsay Zhou
https://lin.moe
signature.asc
Description: PGP signature
