fold-const: Return corresponding integral type for OFFSET_TYPE in range_check_type [PR101162]
Andrew's recent r12-1608-g2f1686ff70b25fceb04ca2ffc0a450fb682913ef change to fail verification on various unary and binary operations with OFFSET_TYPE revealed that e.g. switchconv happily performs multiplications and additions in OFFSET_TYPE. 2021-06-22 Jakub Jelinek <jakub@redhat.com> Andrew Pinski <apinski@marvell.com> PR tree-optimization/101162 * fold-const.c (range_check_type): Handle OFFSET_TYPE like pointer types. * g++.dg/opt/pr101162.C: New test.
This commit is contained in:
parent
ca1f9f2285
commit
92d9c9e705
@ -5360,7 +5360,7 @@ range_check_type (tree etype)
|
||||
else
|
||||
return NULL_TREE;
|
||||
}
|
||||
else if (POINTER_TYPE_P (etype))
|
||||
else if (POINTER_TYPE_P (etype) || TREE_CODE (etype) == OFFSET_TYPE)
|
||||
etype = unsigned_type_for (etype);
|
||||
return etype;
|
||||
}
|
||||
|
21
gcc/testsuite/g++.dg/opt/pr101162.C
Normal file
21
gcc/testsuite/g++.dg/opt/pr101162.C
Normal file
@ -0,0 +1,21 @@
|
||||
// PR tree-optimization/101162
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2" }
|
||||
|
||||
struct A { int i1, i2, i3, i4, i5, i6; };
|
||||
|
||||
int A::*
|
||||
foo (int i)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 1: return &A::i1;
|
||||
case 2: return &A::i2;
|
||||
case 3: return &A::i3;
|
||||
case 4: return &A::i4;
|
||||
case 5: return &A::i5;
|
||||
case 6: return &A::i6;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user