[prev in list] [next in list] [prev in thread] [next in thread]
List: gcc-bugs
Subject: [Bug tree-optimization/109350] FAIL: g++.dg/warn/Wstringop-overflow-4.C
From: amacleod at redhat dot com via Gcc-bugs <gcc-bugs () gcc ! gnu ! org>
Date: 2023-03-31 20:47:44
Message-ID: bug-109350-4-HcZpjZkeuU () http ! gcc ! gnu ! org/bugzilla/
[Download RAW message or body]
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109350
--- Comment #4 from Andrew Macleod <amacleod at redhat dot com> ---
Perhaps its clearer (HA!) if I turn the IL into a C program:
This is what the code sequence we are seeing effectively does:
int need_beer(int value);
int need_big_beer(unsigned long value);
int beer(int value)
{
unsigned long x = value;
unsigned long y = x + 0x80000000;
if (y < 0xFFFFFFFF)
{
int r = x;
int t = r + 1;
unsigned long z = t;
if (x > 0x3FFFFFFFFFFFFFFC)
{
need_beer (r);
if (z <= 0x3FFFFFFFFFFFFFFC)
need_big_beer (z);
}
}
}
and with relevant outgoing edges:
<bb 2> :
x_3 = (long unsigned int) value_2(D);
y_4 = x_3 + 2147483648;
if (y_4 != 4294967295)
goto <bb 3>; [INV]
else
goto <bb 6>; [INV]
x_3 : [irange] long unsigned int [0, 2147483647][18446744071562067968, +INF]
y_4 : [irange] long unsigned int [0, 4294967295] NONZERO 0xffffffff
2->3 (T) value_2(D) : [irange] int [-INF, 2147483646]
2->3 (T) x_3 : [irange] long unsigned int [0,
2147483646][18446744071562067968, +INF]
2->3 (T) y_4 : [irange] long unsigned int [0, 4294967294] NONZERO
0xffffffff
<bb 3> :
t_7 = value_2(D) + 1;
z_8 = (long unsigned int) t_7;
if (x_3 > 4611686018427387900)
goto <bb 4>; [INV]
else
goto <bb 6>; [INV]
t_7 : [irange] int [-2147483647, +INF]
z_8 : [irange] long unsigned int [0, 2147483647][18446744071562067969, +INF]
3->4 (T) value_2(D) : [irange] int [-INF, -1]
3->4 (T) x_3 : [irange] long unsigned int [18446744071562067968, +INF]
3->4 (T) t_7 : [irange] int [-2147483647, 0]
3->4 (T) z_8 : [irange] long unsigned int [0, 0][18446744071562067969,
+INF]
<bb 4> :
need_beer (value_2(D));
if (z_8 <= 4611686018427387900)
goto <bb 5>; [INV]
else
goto <bb 6>; [INV]
4->5 (T) value_2(D) : [irange] int [-1, -1]
4->5 (T) z_8 : [irange] long unsigned int [0, 0] NONZERO 0x0
<bb 5> :
need_big_beer (0);=
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic