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.

Reply via email to