(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
pr44715.c
       1  /* PR c/44715 */
       2  /* { dg-do run } */
       3  /* { dg-options "" } */
       4  
       5  void
       6  foo (int x, int y)
       7  {
       8    int z;
       9    switch (x)
      10      {
      11      case 0:
      12        while (({ if (y) break; 0; }))
      13  	;
      14        __builtin_abort ();
      15        break;
      16      case 1:
      17        do
      18  	;
      19        while (({ if (y) break; 0; }));
      20        __builtin_abort ();
      21        break;
      22      case 2:
      23        for (z = ({ if (y) break; 0; }); z < 5; z++)
      24  	;
      25        __builtin_abort ();
      26        break;
      27      case 3:
      28        for (z = 0; z < ({ if (y) break; 5; }); z++)
      29  	;
      30        __builtin_abort ();
      31        break;
      32      case 4:
      33        for (z = 0; z < 5; z += ({ if (y) break; 1; }))
      34  	;
      35        __builtin_abort ();
      36        break;
      37      case 5:
      38        switch (({ if (y) break; 1; }))
      39  	{
      40  	default: break;
      41  	}
      42        __builtin_abort ();
      43        break;
      44      default:
      45        __builtin_abort ();
      46        break;
      47      }
      48  }
      49  
      50  void
      51  bar (int x, int y)
      52  {
      53    int z;
      54    while (x >= 0)
      55      {
      56        if (x == 0)
      57  	{
      58  	  while (({ if (y) break; 0; }))
      59  	    ;
      60  	  __builtin_abort ();
      61  	}
      62        if (x == 1)
      63  	{
      64  	  do
      65  	    ;
      66  	  while (({ if (y) break; 0; }));
      67  	  __builtin_abort ();
      68  	}
      69        if (x == 2)
      70  	{
      71  	  for (z = ({ if (y) break; 0; }); z < 5; z++)
      72  	    ;
      73  	  __builtin_abort ();
      74  	}
      75        if (x == 3)
      76  	{
      77  	  for (z = 0; z < ({ if (y) break; 5; }); z++)
      78  	    ;
      79  	  __builtin_abort ();
      80  	}
      81        if (x == 4)
      82  	{
      83  	  for (z = 0; z < 5; z += ({ if (y) break; 1; }))
      84  	    ;
      85  	  __builtin_abort ();
      86  	}
      87        if (x == 5)
      88  	{
      89  	  switch (({ if (y) break; 1; }))
      90  	    {
      91  	    default: break;
      92  	    }
      93  	  __builtin_abort ();
      94  	}
      95      }
      96  }
      97  
      98  void
      99  baz (int x, int y)
     100  {
     101    int z;
     102    while (x >= 0)
     103      {
     104        if (++y == 2)
     105  	return;
     106        if (x == 0)
     107  	{
     108  	  while (({ if (y) continue; 0; }))
     109  	    ;
     110  	  __builtin_abort ();
     111  	}
     112        if (x == 1)
     113  	{
     114  	  do
     115  	    ;
     116  	  while (({ if (y) continue; 0; }));
     117  	  __builtin_abort ();
     118  	}
     119        if (x == 2)
     120  	{
     121  	  for (z = ({ if (y) continue; 0; }); z < 5; z++)
     122  	    ;
     123  	  __builtin_abort ();
     124  	}
     125        if (x == 3)
     126  	{
     127  	  for (z = 0; z < ({ if (y) continue; 5; }); z++)
     128  	    ;
     129  	  __builtin_abort ();
     130  	}
     131        if (x == 4)
     132  	{
     133  	  for (z = 0; z < 5; z += ({ if (y) continue; 1; }))
     134  	    ;
     135  	  __builtin_abort ();
     136  	}
     137        if (x == 5)
     138  	{
     139  	  switch (({ if (y) continue; 1; }))
     140  	    {
     141  	    default: break;
     142  	    }
     143  	  __builtin_abort ();
     144  	}
     145      }
     146    __builtin_abort ();
     147  }
     148  
     149  int
     150  main ()
     151  {
     152    foo (0, 1);
     153    foo (1, 1);
     154    foo (2, 1);
     155    foo (3, 1);
     156    foo (4, 1);
     157    foo (5, 1);
     158    bar (0, 1);
     159    bar (1, 1);
     160    bar (2, 1);
     161    bar (3, 1);
     162    bar (4, 1);
     163    bar (5, 1);
     164    baz (0, 0);
     165    baz (1, 0);
     166    baz (2, 0);
     167    baz (3, 0);
     168    baz (4, 0);
     169    baz (5, 0);
     170    return 0;
     171  }