1  /*  PR 61692  */
       2  /* { dg-do compile } */
       3  
       4  /* Check for ice when exceededing the max #
       5     of parameters to inline asm. */
       6  
       7  int Labels()
       8  {
       9      label01: label02: label03: label04: label05:
      10      label06: label07: label08: label09: label10:
      11      label11: label12: label13: label14: label15:
      12      label16: label17: label18: label19: label20:
      13      label21: label22: label23: label24: label25:
      14      label26: label27: label28: label29: label30:
      15      label31:
      16  
      17      __asm__ goto ("" /* Works. */
      18          : /* no outputs */ 
      19          : /* no inputs */ 
      20          : /* no clobbers */
      21          : label01, label02, label03, label04, label05, 
      22            label06, label07, label08, label09, label10, 
      23            label11, label12, label13, label14, label15, 
      24            label16, label17, label18, label19, label20, 
      25            label21, label22, label23, label24, label25, 
      26            label26, label27, label28, label29, label30);
      27  
      28      __asm__ goto ("" /* { dg-error "more than 30 operands" } */
      29          : /* no outputs */ 
      30          : /* no inputs */ 
      31          : /* no clobbers */
      32          : label01, label02, label03, label04, label05, 
      33            label06, label07, label08, label09, label10, 
      34            label11, label12, label13, label14, label15, 
      35            label16, label17, label18, label19, label20, 
      36            label21, label22, label23, label24, label25, 
      37            label26, label27, label28, label29, label30, 
      38            label31);
      39  
      40      return 0;
      41  }
      42  
      43  int Labels_and_Inputs()
      44  {
      45      int b01, b02, b03, b04, b05, b06, b07, b08, b09, b10;
      46      int b11, b12, b13, b14, b15, b16, b17, b18, b19, b20;
      47      int b21, b22, b23, b24, b25, b26, b27, b28, b29, b30;
      48      int b31;
      49  
      50      label01: label02: label03: label04: label05:
      51      label06: label07: label08: label09: label10:
      52      label11: label12: label13: label14: label15:
      53      label16: label17: label18: label19: label20:
      54      label21: label22: label23: label24: label25:
      55      label26: label27: label28: label29: label30:
      56      label31:
      57  
      58      b01 = b02 = b03 = b04 = b05 = b06 = b07 = b08 = b09 = b10 = 0;
      59      b11 = b12 = b13 = b14 = b15 = b16 = b17 = b18 = b19 = b20 = 0;
      60      b21 = b22 = b23 = b24 = b25 = b26 = b27 = b28 = b29 = b30 = 0;
      61      b31 = 0;
      62  
      63      __asm__ goto ("" /* Works. */
      64        : /* no outputs */
      65        : "m" (b01), "m" (b02), "m" (b03), "m" (b04), "m" (b05), 
      66          "m" (b06), "m" (b07), "m" (b08), "m" (b09), "m" (b10), 
      67          "m" (b11), "m" (b12), "m" (b13), "m" (b14), "m" (b15),
      68          "m" (b16), "m" (b17), "m" (b18), "m" (b19), "m" (b20), 
      69          "m" (b21), "m" (b22), "m" (b23), "m" (b24), "m" (b25),
      70          "m" (b26), "m" (b27), "m" (b28), "m" (b29)
      71        : /* no clobbers */
      72        : label01);
      73  
      74      __asm__ goto ("" /* { dg-error "more than 30 operands" } */
      75        : /* no outputs */
      76        : "m" (b01), "m" (b02), "m" (b03), "m" (b04), "m" (b05), 
      77          "m" (b06), "m" (b07), "m" (b08), "m" (b09), "m" (b10), 
      78          "m" (b11), "m" (b12), "m" (b13), "m" (b14), "m" (b15),
      79          "m" (b16), "m" (b17), "m" (b18), "m" (b19), "m" (b20), 
      80          "m" (b21), "m" (b22), "m" (b23), "m" (b24), "m" (b25),
      81          "m" (b26), "m" (b27), "m" (b28), "m" (b29), "m" (b30)
      82        : /* no clobbers */
      83        : label01);
      84  
      85        return 0;
      86  }
      87  
      88  int Outputs()
      89  {
      90      int b01, b02, b03, b04, b05, b06, b07, b08, b09, b10;
      91      int b11, b12, b13, b14, b15, b16, b17, b18, b19, b20;
      92      int b21, b22, b23, b24, b25, b26, b27, b28, b29, b30;
      93      int b31;
      94  
      95      /* Outputs. */
      96      __asm__ volatile ("" /* Works. */
      97           : "=m" (b01),  "=m" (b02),  "=m" (b03),  "=m" (b04), "=m" (b05),
      98             "=m" (b06),  "=m" (b07),  "=m" (b08),  "=m" (b09), "=m" (b10),
      99             "=m" (b11),  "=m" (b12),  "=m" (b13),  "=m" (b14), "=m" (b15),
     100             "=m" (b16),  "=m" (b17),  "=m" (b18),  "=m" (b19), "=m" (b20), 
     101             "=m" (b21),  "=m" (b22),  "=m" (b23),  "=m" (b24), "=m" (b25),
     102             "=m" (b26),  "=m" (b27),  "=m" (b28),  "=m" (b29), "=m" (b30));
     103  
     104      __asm__ volatile ("" /* { dg-error "more than 30 operands" } */
     105           : "=m" (b01),  "=m" (b02),  "=m" (b03),  "=m" (b04), "=m" (b05),
     106             "=m" (b06),  "=m" (b07),  "=m" (b08),  "=m" (b09), "=m" (b10),
     107             "=m" (b11),  "=m" (b12),  "=m" (b13),  "=m" (b14), "=m" (b15),
     108             "=m" (b16),  "=m" (b17),  "=m" (b18),  "=m" (b19), "=m" (b20), 
     109             "=m" (b21),  "=m" (b22),  "=m" (b23),  "=m" (b24), "=m" (b25),
     110             "=m" (b26),  "=m" (b27),  "=m" (b28),  "=m" (b29), "=m" (b30),
     111             "=m" (b31));
     112  
     113      return 0;
     114  }
     115  
     116  int Inputs()
     117  {
     118      int b01, b02, b03, b04, b05, b06, b07, b08, b09, b10;
     119      int b11, b12, b13, b14, b15, b16, b17, b18, b19, b20;
     120      int b21, b22, b23, b24, b25, b26, b27, b28, b29, b30;
     121      int b31;
     122  
     123      b01 = b02 = b03 = b04 = b05 = b06 = b07 = b08 = b09 = b10 = 0;
     124      b11 = b12 = b13 = b14 = b15 = b16 = b17 = b18 = b19 = b20 = 0;
     125      b21 = b22 = b23 = b24 = b25 = b26 = b27 = b28 = b29 = b30 = 0;
     126      b31 = 0;
     127  
     128      __asm__ volatile ("" /* Works. */
     129        : /* no outputs */
     130        : "m" (b01), "m" (b02), "m" (b03), "m" (b04), "m" (b05), 
     131          "m" (b06), "m" (b07), "m" (b08), "m" (b09), "m" (b10), 
     132          "m" (b11), "m" (b12), "m" (b13), "m" (b14), "m" (b15),
     133          "m" (b16), "m" (b17), "m" (b18), "m" (b19), "m" (b20), 
     134          "m" (b21), "m" (b22), "m" (b23), "m" (b24), "m" (b25),
     135          "m" (b26), "m" (b27), "m" (b28), "m" (b29), "m" (b30));
     136  
     137      __asm__ volatile ("" /* { dg-error "more than 30 operands" } */
     138        : /* no outputs */
     139        : "m" (b01), "m" (b02), "m" (b03), "m" (b04), "m" (b05), 
     140          "m" (b06), "m" (b07), "m" (b08), "m" (b09), "m" (b10), 
     141          "m" (b11), "m" (b12), "m" (b13), "m" (b14), "m" (b15),
     142          "m" (b16), "m" (b17), "m" (b18), "m" (b19), "m" (b20), 
     143          "m" (b21), "m" (b22), "m" (b23), "m" (b24), "m" (b25),
     144          "m" (b26), "m" (b27), "m" (b28), "m" (b29), "m" (b30),
     145          "m" (b31));
     146  
     147      return 0;
     148  }
     149  
     150  int Input_Output()
     151  {
     152      int b01, b02, b03, b04, b05, b06, b07, b08, b09, b10;
     153      int b11, b12, b13, b14, b15, b16, b17, b18, b19, b20;
     154      int b21, b22, b23, b24, b25, b26, b27, b28, b29, b30;
     155      int b31;
     156  
     157      b01 = b02 = b03 = b04 = b05 = b06 = b07 = b08 = b09 = b10 = 0;
     158      b11 = b12 = b13 = b14 = b15 = b16 = b17 = b18 = b19 = b20 = 0;
     159      b21 = b22 = b23 = b24 = b25 = b26 = b27 = b28 = b29 = b30 = 0;
     160      b31 = 0;
     161  
     162      __asm__ volatile ("" /* Works. */
     163           : "+m" (b01),  "+m" (b02),  "+m" (b03),  "+m" (b04), "+m" (b05),
     164             "+m" (b06),  "+m" (b07),  "+m" (b08),  "+m" (b09), "+m" (b10),
     165             "+m" (b11),  "+m" (b12),  "+m" (b13),  "+m" (b14), "+m" (b15));
     166  
     167      __asm__ volatile ("" /* { dg-error "more than 30 operands" } */
     168           : "+m" (b01),  "+m" (b02),  "+m" (b03),  "+m" (b04), "+m" (b05),
     169             "+m" (b06),  "+m" (b07),  "+m" (b08),  "+m" (b09), "+m" (b10),
     170             "+m" (b11),  "+m" (b12),  "+m" (b13),  "+m" (b14), "+m" (b15),
     171             "+m" (b16));
     172  
     173      return 0;
     174  }