mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
tree-optimization/110043 - avoid overflow in pointer-query
pointer-query is built around using offset_int to avoid needing to deal with overflow. This falls apart when trying to analyze array accesses indexed by __int128. So don't. PR tree-optimization/110043 * pointer-query.cc (get_offset_range): Fail for integer types with precision larger than ptrdiff_type_node. * gcc.dg/torture/pr110043.c: New testcase.
This commit is contained in:
committed by
Richard Biener
parent
11ef3c2e4f
commit
7fdb0e1b18
@@ -74,7 +74,12 @@ get_offset_range (tree x, gimple *stmt, offset_int r[2], range_query *rvals)
|
||||
x = TREE_OPERAND (x, 0);
|
||||
|
||||
tree type = TREE_TYPE (x);
|
||||
if (!INTEGRAL_TYPE_P (type) && !POINTER_TYPE_P (type))
|
||||
if ((!INTEGRAL_TYPE_P (type)
|
||||
/* ??? We get along without caring about overflow by using
|
||||
offset_int, but that falls apart when indexes are bigger
|
||||
than pointer differences. */
|
||||
|| TYPE_PRECISION (type) > TYPE_PRECISION (ptrdiff_type_node))
|
||||
&& !POINTER_TYPE_P (type))
|
||||
return false;
|
||||
|
||||
if (TREE_CODE (x) != INTEGER_CST
|
||||
|
||||
9
gcc/testsuite/gcc.dg/torture/pr110043.c
Normal file
9
gcc/testsuite/gcc.dg/torture/pr110043.c
Normal file
@@ -0,0 +1,9 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target int128 } */
|
||||
|
||||
__int128 g_116_1;
|
||||
extern char g_521[][8];
|
||||
void func_24() {
|
||||
for (; g_116_1 >= 0;)
|
||||
g_521[g_116_1][g_116_1] &= 0;
|
||||
}
|
||||
Reference in New Issue
Block a user