1 /*  PR 61692  */
2 /* { dg-do compile } */
3 
4 /* Check for ice when exceededing the max #
5    of parameters to inline asm. */
6 
Labels()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 
Labels_and_Inputs()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 
Outputs()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 
Inputs()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 
Input_Output()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 }
175