1 | // RUN: %clang -target riscv32-unknown-elf -march=rv32i -### %s \ |
2 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
3 | // RUN: %clang -target riscv32-unknown-elf -march=rv32im -### %s \ |
4 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
5 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ima -### %s \ |
6 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
7 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imaf -### %s \ |
8 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
9 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imafd -### %s \ |
10 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
11 | |
12 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ic -### %s \ |
13 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
14 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imc -### %s \ |
15 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
16 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imac -### %s \ |
17 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
18 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imafc -### %s \ |
19 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
20 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imafdc -### %s \ |
21 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
22 | |
23 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ia -### %s \ |
24 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
25 | // RUN: %clang -target riscv32-unknown-elf -march=rv32iaf -### %s \ |
26 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
27 | // RUN: %clang -target riscv32-unknown-elf -march=rv32iafd -### %s \ |
28 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
29 | |
30 | // RUN: %clang -target riscv32-unknown-elf -march=rv32iac -### %s \ |
31 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
32 | // RUN: %clang -target riscv32-unknown-elf -march=rv32iafc -### %s \ |
33 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
34 | // RUN: %clang -target riscv32-unknown-elf -march=rv32iafdc -### %s \ |
35 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
36 | |
37 | // RUN: %clang -target riscv32-unknown-elf -march=rv32g -### %s \ |
38 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
39 | // RUN: %clang -target riscv32-unknown-elf -march=rv32gc -### %s \ |
40 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
41 | |
42 | // RUN: %clang -target riscv64-unknown-elf -march=rv64i -### %s \ |
43 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
44 | // RUN: %clang -target riscv64-unknown-elf -march=rv64im -### %s \ |
45 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
46 | // RUN: %clang -target riscv64-unknown-elf -march=rv64ima -### %s \ |
47 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
48 | // RUN: %clang -target riscv64-unknown-elf -march=rv64imaf -### %s \ |
49 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
50 | // RUN: %clang -target riscv64-unknown-elf -march=rv64imafd -### %s \ |
51 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
52 | |
53 | // RUN: %clang -target riscv64-unknown-elf -march=rv64ic -### %s \ |
54 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
55 | // RUN: %clang -target riscv64-unknown-elf -march=rv64imc -### %s \ |
56 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
57 | // RUN: %clang -target riscv64-unknown-elf -march=rv64imac -### %s \ |
58 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
59 | // RUN: %clang -target riscv64-unknown-elf -march=rv64imafc -### %s \ |
60 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
61 | // RUN: %clang -target riscv64-unknown-elf -march=rv64imafdc -### %s \ |
62 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
63 | |
64 | // RUN: %clang -target riscv64-unknown-elf -march=rv64ia -### %s \ |
65 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
66 | // RUN: %clang -target riscv64-unknown-elf -march=rv64iaf -### %s \ |
67 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
68 | // RUN: %clang -target riscv64-unknown-elf -march=rv64iafd -### %s \ |
69 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
70 | |
71 | // RUN: %clang -target riscv64-unknown-elf -march=rv64iac -### %s \ |
72 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
73 | // RUN: %clang -target riscv64-unknown-elf -march=rv64iafc -### %s \ |
74 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
75 | // RUN: %clang -target riscv64-unknown-elf -march=rv64iafdc -### %s \ |
76 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
77 | |
78 | // RUN: %clang -target riscv64-unknown-elf -march=rv64g -### %s \ |
79 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
80 | // RUN: %clang -target riscv64-unknown-elf -march=rv64gc -### %s \ |
81 | // RUN: -fsyntax-only 2>&1 | FileCheck %s |
82 | |
83 | // CHECK-NOT: error: invalid arch name ' |
84 | |
85 | // RUN: %clang -target riscv32-unknown-elf -march=rv32 -### %s \ |
86 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32 %s |
87 | // RV32: error: invalid arch name 'rv32' |
88 | |
89 | // RUN: %clang -target riscv32-unknown-elf -march=rv32m -### %s \ |
90 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32M %s |
91 | // RV32M: error: invalid arch name 'rv32m' |
92 | |
93 | // RUN: %clang -target riscv32-unknown-elf -march=rv32id -### %s \ |
94 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32ID %s |
95 | // RV32ID: error: invalid arch name 'rv32id' |
96 | |
97 | // RUN: %clang -target riscv32-unknown-elf -march=rv32l -### %s \ |
98 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32L %s |
99 | // RV32L: error: invalid arch name 'rv32l' |
100 | |
101 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imadf -### %s \ |
102 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32IMADF %s |
103 | // RV32IMADF: error: invalid arch name 'rv32imadf' |
104 | |
105 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imm -### %s \ |
106 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32IMM %s |
107 | // RV32IMM: error: invalid arch name 'rv32imm' |
108 | |
109 | // RUN: %clang -target riscv32-unknown-elf -march=RV32I -### %s \ |
110 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32I-UPPER %s |
111 | // RV32I-UPPER: error: invalid arch name 'RV32I' |
112 | |
113 | // RUN: %clang -target riscv64-unknown-elf -march=rv64 -### %s \ |
114 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64 %s |
115 | // RV64: error: invalid arch name 'rv64' |
116 | |
117 | // RUN: %clang -target riscv64-unknown-elf -march=rv64m -### %s \ |
118 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64M %s |
119 | // RV64M: error: invalid arch name 'rv64m' |
120 | |
121 | // RUN: %clang -target riscv64-unknown-elf -march=rv64id -### %s \ |
122 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64ID %s |
123 | // RV64ID: error: invalid arch name 'rv64id' |
124 | |
125 | // RUN: %clang -target riscv64-unknown-elf -march=rv64l -### %s \ |
126 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64L %s |
127 | // RV64L: error: invalid arch name 'rv64l' |
128 | |
129 | // RUN: %clang -target riscv64-unknown-elf -march=rv64imadf -### %s \ |
130 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64IMADF %s |
131 | // RV64IMADF: error: invalid arch name 'rv64imadf' |
132 | |
133 | // RUN: %clang -target riscv64-unknown-elf -march=rv64imm -### %s \ |
134 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64IMM %s |
135 | // RV64IMM: error: invalid arch name 'rv64imm' |
136 | |
137 | // RUN: %clang -target riscv64-unknown-elf -march=RV64I -### %s \ |
138 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64I-UPPER %s |
139 | // RV64I-UPPER: error: invalid arch name 'RV64I' |
140 | |
141 | |
142 | // Testing specific messages and unsupported extensions. |
143 | |
144 | // RUN: %clang -target riscv32-unknown-elf -march=rv32e -### %s \ |
145 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32E %s |
146 | // RV32E: error: invalid arch name 'rv32e', |
147 | // RV32E: standard user-level extension 'e' |
148 | |
149 | // RUN: %clang -target riscv64-unknown-elf -march=rv64e -### %s \ |
150 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV64E %s |
151 | // RV64E: error: invalid arch name 'rv64e', |
152 | // RV64E: standard user-level extension 'e' requires 'rv32' |
153 | |
154 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imC -### %s \ |
155 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-LOWER %s |
156 | // RV32-LOWER: error: invalid arch name 'rv32imC', |
157 | // RV32-LOWER: string must be lowercase |
158 | |
159 | // RUN: %clang -target riscv32-unknown-elf -march=rv32 -### %s \ |
160 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-STR %s |
161 | // RV32-STR: error: invalid arch name 'rv32', |
162 | // RV32-STR: string must begin with rv32{i,e,g} or rv64{i,g} |
163 | |
164 | // RUN: %clang -target riscv32-unknown-elf -march=rv32q -### %s \ |
165 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-LETTER %s |
166 | // RV32-LETTER: error: invalid arch name 'rv32q', |
167 | // RV32-LETTER: first letter should be 'e', 'i' or 'g' |
168 | |
169 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imcq -### %s \ |
170 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-ORDER %s |
171 | // RV32-ORDER: error: invalid arch name 'rv32imcq', |
172 | // RV32-ORDER: standard user-level extension not given in canonical order 'q' |
173 | |
174 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imw -### %s \ |
175 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-STD-INVAL %s |
176 | // RV32-STD-INVAL: error: invalid arch name 'rv32imw', |
177 | // RV32-STD-INVAL: invalid standard user-level extension 'w' |
178 | |
179 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imqc -### %s \ |
180 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-STD %s |
181 | // RV32-STD: error: invalid arch name 'rv32imqc', |
182 | // RV32-STD: unsupported standard user-level extension 'q' |
183 | |
184 | // RUN: %clang -target riscv32-unknown-elf -march=rv32xabc -### %s \ |
185 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32X %s |
186 | // RV32X: error: invalid arch name 'rv32xabc', |
187 | // RV32X: first letter should be 'e', 'i' or 'g' |
188 | |
189 | // RUN: %clang -target riscv32-unknown-elf -march=rv32sxabc -### %s \ |
190 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32SX %s |
191 | // RV32SX: error: invalid arch name 'rv32sxabc', |
192 | // RV32SX: first letter should be 'e', 'i' or 'g' |
193 | |
194 | // RUN: %clang -target riscv32-unknown-elf -march=rv32sabc -### %s \ |
195 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32S %s |
196 | // RV32S: error: invalid arch name 'rv32sabc', |
197 | // RV32S: first letter should be 'e', 'i' or 'g' |
198 | |
199 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ix -### %s \ |
200 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32X-NAME %s |
201 | // RV32X-NAME: error: invalid arch name 'rv32ix', |
202 | // RV32X-NAME: non-standard user-level extension name missing after 'x' |
203 | |
204 | // RUN: %clang -target riscv32-unknown-elf -march=rv32isx -### %s \ |
205 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32SX-NAME %s |
206 | // RV32SX-NAME: error: invalid arch name 'rv32isx', |
207 | // RV32SX-NAME: non-standard supervisor-level extension |
208 | // RV32SX-NAME: name missing after 'sx' |
209 | |
210 | // RUN: %clang -target riscv32-unknown-elf -march=rv32is -### %s \ |
211 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32S-NAME %s |
212 | // RV32S-NAME: error: invalid arch name 'rv32is', |
213 | // RV32S-NAME: standard supervisor-level extension |
214 | // RV32S-NAME: name missing after 's' |
215 | |
216 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ix_s_sx -### %s \ |
217 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32ALL-NAME %s |
218 | // RV32ALL-NAME: error: invalid arch name 'rv32ix_s_sx', |
219 | // RV32ALL-NAME: non-standard user-level extension |
220 | // RV32ALL-NAME: name missing after 'x' |
221 | |
222 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ixabc -### %s \ |
223 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32X-UNS %s |
224 | // RV32X-UNS: error: invalid arch name 'rv32ixabc', |
225 | // RV32X-UNS: unsupported non-standard user-level extension 'xabc' |
226 | |
227 | // RUN: %clang -target riscv32-unknown-elf -march=rv32isa -### %s \ |
228 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32S-UNS %s |
229 | // RV32S-UNS: error: invalid arch name 'rv32isa', |
230 | // RV32S-UNS: unsupported standard supervisor-level extension 'sa' |
231 | |
232 | // RUN: %clang -target riscv32-unknown-elf -march=rv32isxabc -### %s \ |
233 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32SX-UNS %s |
234 | // RV32SX-UNS: error: invalid arch name 'rv32isxabc', |
235 | // RV32SX-UNS: unsupported non-standard supervisor-level extension 'sxabc' |
236 | |
237 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ixabc_sp_sxlw -### %s \ |
238 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32ALL %s |
239 | // RV32ALL: error: invalid arch name 'rv32ixabc_sp_sxlw', |
240 | // RV32ALL: unsupported non-standard user-level extension 'xabc' |
241 | |
242 | // RUN: %clang -target riscv32-unknown-elf -march=rv32i20 -### %s \ |
243 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-IVER %s |
244 | // RV32-IVER: error: invalid arch name 'rv32i20', unsupported |
245 | // RV32-IVER: version number 20 for extension 'i' |
246 | |
247 | // RUN: %clang -target riscv32-unknown-elf -march=rv32imc5 -### %s \ |
248 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-CVER %s |
249 | // RV32-CVER: error: invalid arch name 'rv32imc5', unsupported |
250 | // RV32-CVER: version number 5 for extension 'c' |
251 | |
252 | // RUN: %clang -target riscv32-unknown-elf -march=rv32i2p -### %s \ |
253 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-IMINOR-MISS %s |
254 | // RV32-IMINOR-MISS: error: invalid arch name 'rv32i2p', |
255 | // RV32-IMINOR-MISS: minor version number missing after 'p' for extension 'i' |
256 | |
257 | // RUN: %clang -target riscv32-unknown-elf -march=rv32i2p0 -### %s \ |
258 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-IMINOR0 %s |
259 | // RV32-IMINOR0: error: invalid arch name 'rv32i2p0', |
260 | // RV32-IMINOR0: unsupported version number 2.0 for extension 'i' |
261 | |
262 | // RUN: %clang -target riscv32-unknown-elf -march=rv32i2p1 -### %s \ |
263 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-IMINOR1 %s |
264 | // RV32-IMINOR1: error: invalid arch name 'rv32i2p1', unsupported |
265 | // RV32-IMINOR1: version number 2.1 for extension 'i' |
266 | |
267 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ix2p -### %s \ |
268 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-XMINOR-MISS %s |
269 | // RV32-XMINOR-MISS: error: invalid arch name 'rv32ix2p', |
270 | // RV32-XMINOR-MISS: minor version number missing after 'p' for extension 'x2p' |
271 | |
272 | // RUN: %clang -target riscv32-unknown-elf -march=rv32is2p0 -### %s \ |
273 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-SMINOR0 %s |
274 | // RV32-SMINOR0: error: invalid arch name 'rv32is2p0', |
275 | // RV32-SMINOR0: unsupported version number 2.0 for extension 's2p0' |
276 | |
277 | // RUN: %clang -target riscv32-unknown-elf -march=rv32isx2p1 -### %s \ |
278 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-SXMINOR1 %s |
279 | // RV32-SXMINOR1: error: invalid arch name 'rv32isx2p1', unsupported |
280 | // RV32-SXMINOR1: version number 2.1 for extension 'sx2p1' |
281 | |
282 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ixabc_ -### %s \ |
283 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-XSEP %s |
284 | // RV32-XSEP: error: invalid arch name 'rv32ixabc_', |
285 | // RV32-XSEP: extension name missing after separator '_' |
286 | |
287 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ixabc_a -### %s \ |
288 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-PREFIX %s |
289 | // RV32-PREFIX: error: invalid arch name 'rv32ixabc_a', |
290 | // RV32-PREFIX: invalid extension prefix 'a' |
291 | |
292 | // RUN: %clang -target riscv32-unknown-elf -march=rv32isabc_xdef -### %s \ |
293 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-X-ORDER %s |
294 | // RV32-X-ORDER: error: invalid arch name 'rv32isabc_xdef', |
295 | // RV32-X-ORDER: non-standard user-level extension not given |
296 | // RV32-X-ORDER: in canonical order 'xdef' |
297 | |
298 | // RUN: %clang -target riscv32-unknown-elf -march=rv32isxabc_sdef -### %s \ |
299 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-S-ORDER %s |
300 | // RV32-S-ORDER: error: invalid arch name 'rv32isxabc_sdef', |
301 | // RV32-S-ORDER: standard supervisor-level extension not given |
302 | // RV32-S-ORDER: in canonical order 'sdef' |
303 | |
304 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ixabc_xabc -### %s \ |
305 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-XDUP %s |
306 | // RV32-XDUP: error: invalid arch name 'rv32ixabc_xabc', |
307 | // RV32-XDUP: duplicated non-standard user-level extension 'xabc' |
308 | |
309 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ixabc_xdef -### %s \ |
310 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-X-X-INVAL %s |
311 | // RV32-X-X-INVAL: error: invalid arch name 'rv32ixabc_xdef', unsupported |
312 | // RV32-X-X-INVAL: non-standard user-level extension 'xabc' |
313 | |
314 | // RUN: %clang -target riscv32-unknown-elf -march=rv32ixabc_sdef_sxghi -### %s \ |
315 | // RUN: -fsyntax-only 2>&1 | FileCheck -check-prefix=RV32-X-S-SX-INVAL %s |
316 | // RV32-X-S-SX-INVAL: error: invalid arch name 'rv32ixabc_sdef_sxghi', |
317 | // RV32-X-S-SX-INVAL: unsupported non-standard user-level extension 'xabc' |
318 | |