https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114457
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #62368|0 |1
is obsolete| |
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 62375
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=62375&action=edit
gcc16-pr114457-wip.patch
Updated patch. This handles both forward and backward gotos as well as switch
to case/default label jumps, but still want to debug some details in there and
turn:
struct S { int a, b, c; };
int
foo (int x)
{
int r = 0;
if (x == 1)
goto l1;
S s1;
if (x == 2)
goto l1;
S s2;
{
S s10;
if (x == 12)
goto l1;
s10.a = 1;
r += s10.a;
int i1;
if (x == 13)
goto l1;
i1 = 2;
r += i1;
}
if (x == 3)
goto l2;
if (x == 4)
goto l1;
{
S s3;
if (x == 5)
goto l2;
S s4;
if (x == 6)
goto l1;
{
S s5;
if (x == 7)
goto l1;
s5.a = 5;
r += s5.a;
}
S s6;
{
S s7;
S s8;
if (x == 8)
goto l1;
S s9;
if (x == 9)
goto l2;
if (x == 10)
goto l2;
if (x == 11)
goto l2;
l1:
l2:
s1.a = 1;
s2.b = 2;
s3.c = 3;
s4.a = 4;
s6.b = 6;
s7.c = 7;
s8.a = 8;
s9.b = 9;
r += s1.a + s2.b + s3.c;
r += s4.a + s6.b + s7.c;
r += s8.a + s9.b;
if (x == 14)
goto l3;
S s11;
switch (x)
{
S s12;
case 15:
S s13;
// FALLTHRU
l3:
case 16:
case 17:
S s14;
s11.a = 1;
s12.b = 2;
s13.c = 3;
s14.a = 4;
r += s11.a + s12.b + s13.c;
r += s14.a;
return r;
case 18:
S s15;
s11.a = 1;
s12.b = 2;
s13.c = 3;
s14.a = 4;
s15.b = 5;
r += s11.a + s12.b + s13.c;
r += s14.a + s15.b;
return r;
default:
if (x != 19 && x != 20)
break;
S s16;
s11.a = 1;
s12.b = 2;
s13.c = 3;
s14.a = 4;
s15.b = 5;
s16.c = 6;
r += s11.a + s12.b + s13.c;
r += s14.a + s15.b + s16.c;
return r;
}
if (x == 21)
goto l3;
}
S s17;
if (x == 22)
goto l3;
if (x == 23)
goto l1;
if (x == 24)
goto l2;
s17.a = 1;
r += s17.a;
}
S s18;
if (x == 25)
{
S s19;
s19.c = 2;
r += s19.c;
if (x == 29)
l4:;
goto l3;
}
if (x == 26)
goto l1;
if (x == 27)
goto l2;
s18.b = 1;
r += s18.b;
if (x == 28)
goto l4;
{
S s20;
{
S s21;
if (x == 29)
goto l1;
S s22;
if (x == 30)
goto l2;
l5:
s20.a = 1;
s21.b = 2;
s22.c = 3;
r += s20.a + s21.b + s22.c;
switch (x)
{
case 31:
S s23;
// FALLTHRU
l6:
case 32:
case 33:
S s24;
s23.a = 1;
s24.b = 2;
r += s23.a + s24.b;
return r;
default:
if (x >= 34 && x <= 35)
return r;
break;
}
if (x == 34)
goto l5;
if (x == 35)
goto l6;
return r;
}
if (x == 36)
goto l5;
if (x == 37)
goto l6;
}
if (x == 38)
goto l5;
if (x == 39)
goto l6;
return r;
}
into a testsuite testcase with .DEFERRED_INIT call count checks for each of the
vars.