1RUN: FileCheck --input-file %s %s
2
3; We use CHECK-NEXT directives to force a match on all lines with digits.
4
5; Numeric variable definition with default matching format without spaces.
6DEF DEFAULT FMT NO SPC  // CHECK-LABEL: DEF DEFAULT FMT NO SPC
710  // CHECK-NEXT: {{^}}[[#UNSI:]]
8
9; Numeric variable definition with default matching format with different
10; spacing.
11DEF DEFAULT FMT SPC  // CHECK-LABEL: DEF DEFAULT FMT SPC
1211  // CHECK-NEXT: {{^}}[[# UNSIa:]]
1311  // CHECK-NEXT: {{^}}[[# UNSIb :]]
1411  // CHECK-NEXT: {{^}}[[# UNSIc : ]]
15
16; Numeric variable redefinition.
17REDEF NO SPC  // CHECK-LABEL: REDEF
1811  // CHECK-NEXT: {{^}}[[#UNSI:]]
19
20; Numeric variable definition with explicit matching format.
21DEF FMT  // CHECK-LABEL: DEF FMT
22c    // CHECK-NEXT: {{^}}[[#%x,LHEX:]]
23D    // CHECK-NEXT: {{^}}[[#%X,UHEX:]]
24-30  // CHECK-NEXT: {{^}}[[#%d,SIGN:]]
25
26; Numeric variable definition with explicit matching format with different
27; spacing.
28DEF FMT SPC  // CHECK-LABEL: DEF FMT SPC
29c  // CHECK-NEXT: {{^}}[[# %x , LHEXa : ]]
30
31; Numeric variable definition with unsupported matching format.
32RUN: %ProtectFileCheckOutput \
33RUN: not FileCheck --check-prefixes ERR,INVALID-FMT-SPEC1 --input-file %s %s 2>&1 \
34RUN:   | FileCheck --check-prefix INVALID-FMT-SPEC-MSG1 --strict-whitespace %s
35RUN: %ProtectFileCheckOutput \
36RUN: not FileCheck --check-prefixes ERR,INVALID-FMT-SPEC2 --input-file %s %s 2>&1 \
37RUN:   | FileCheck --check-prefix INVALID-FMT-SPEC-MSG2 --strict-whitespace %s
38
39DEF INVALID FMT
40INVVAR1=a
41INVVAR2=11
42ERR-LABEL: DEF INVALID FMT
43INVALID-FMT-SPEC1-NEXT: INVVAR1=[[#%c,INVVAR1:]]
44INVALID-FMT-SPEC2-NEXT: INVVAR2=[[#%hhd,INVVAR2:]]
45INVALID-FMT-SPEC-MSG1: numeric-expression.txt:[[#@LINE-2]]:37: error: invalid format specifier in expression
46INVALID-FMT-SPEC-MSG1-NEXT: {{I}}NVALID-FMT-SPEC1-NEXT: INVVAR1={{\[\[#%c,INVVAR1:\]\]}}
47INVALID-FMT-SPEC-MSG1-NEXT:    {{^}}                                    ^{{$}}
48INVALID-FMT-SPEC-MSG2: numeric-expression.txt:[[#@LINE-4]]:37: error: invalid format specifier in expression
49INVALID-FMT-SPEC-MSG2-NEXT: {{I}}NVALID-FMT-SPEC2-NEXT: INVVAR2={{\[\[#%hhd,INVVAR2:\]\]}}
50INVALID-FMT-SPEC-MSG2-NEXT:    {{^}}                                    ^{{$}}
51
52; Numeric variable definition of hex value with 0x prefix.
53DEF ALT FORM  // CHECK-LABEL: DEF ALT FORM
540xf  // CHECK-NEXT: {{^}}[[#%#x,PREFIXED_LHEX:]]
550xE  // CHECK-NEXT: {{^}}[[#%#X,PREFIXED_UHEX:]]
56
57; Invalid numeric variable definition of non-hex value with 0x prefix.
58RUN: %ProtectFileCheckOutput \
59RUN: not FileCheck --check-prefixes INVALID-ALT-FORM,INVALID-ALT-FORM1 --input-file %s %s 2>&1 \
60RUN:   | FileCheck --check-prefix INVALID-ALT-FORM-MSG1 --strict-whitespace %s
61RUN: %ProtectFileCheckOutput \
62RUN: not FileCheck --check-prefixes INVALID-ALT-FORM,INVALID-ALT-FORM2 --input-file %s %s 2>&1 \
63RUN:   | FileCheck --check-prefix INVALID-ALT-FORM-MSG2 --strict-whitespace %s
64DEF INVALID ALT FORM
65PREFIXED_DEC=0x3
66INVALID-ALT-FORM-LABEL: DEF INVALID ALT FORM
67INVALID-ALT-FORM1-NEXT: PREFIXED_DEC=[[#%#u,PREFIXED_UNSI:]]
68INVALID-ALT-FORM2-NEXT: PREFIXED_DEC=[[#%#d,PREFIXED_SIGN:]]
69INVALID-ALT-FORM-MSG1: numeric-expression.txt:[[#@LINE-2]]:42: error: alternate form only supported for hex values
70INVALID-ALT-FORM-MSG1-NEXT: {{I}}NVALID-ALT-FORM1-NEXT: PREFIXED_DEC={{\[\[#%#u,PREFIXED_UNSI:\]\]}}
71INVALID-ALT-FORM-MSG1-NEXT:    {{^}}                                         ^{{$}}
72INVALID-ALT-FORM-MSG2: numeric-expression.txt:[[#@LINE-4]]:42: error: alternate form only supported for hex values
73INVALID-ALT-FORM-MSG2-NEXT: {{I}}NVALID-ALT-FORM2-NEXT: PREFIXED_DEC={{\[\[#%#d,PREFIXED_SIGN:\]\]}}
74INVALID-ALT-FORM-MSG2-NEXT:    {{^}}                                         ^{{$}}
75
76; Numeric variable definition of hex value with missing 0x prefix.
77RUN: FileCheck --check-prefix INVALID-HEX-PREFIX-DEF --input-file %s %s
78
79FAIL DEF ALT FORM  // INVALID-HEX-PREFIX-DEF-LABEL: FAIL DEF ALT FORM
80INVALID_PREFIXED_LHEX: xf   // INVALID-HEX-PREFIX-DEF-NOT: {{^}}INVALID_PREFIXED_LHEX: [[#%#x,INVALID_PREFIXED_LHEX:]]
81INVALID_PREFIXED_UHEX: 0E   // INVALID-HEX-PREFIX-DEF-NOT: {{^}}INVALID_PREFIXED_UHEX: [[#%#X,INVALID_PREFIXED_UHEX:]]
82
83; Numeric variable definition with precision specifier.
84DEF PREC FMT  // CHECK-LABEL: DEF PREC FMT
8500000022    // CHECK-NEXT: {{^}}[[#%.8,PADDED_UNSI:]]
86323232323   // CHECK-NEXT: {{^}}[[#%.8,PADDED_UNSI2:]]
8700000018    // CHECK-NEXT: {{^}}[[#%.8u,PADDED_UNSI3:]]
88181818181   // CHECK-NEXT: {{^}}[[#%.8u,PADDED_UNSI4:]]
890000000f    // CHECK-NEXT: {{^}}[[#%.8x,PADDED_LHEX:]]
90fffffffff   // CHECK-NEXT: {{^}}[[#%.8x,PADDED_LHEX2:]]
910000000E    // CHECK-NEXT: {{^}}[[#%.8X,PADDED_UHEX:]]
92EEEEEEEEE   // CHECK-NEXT: {{^}}[[#%.8X,PADDED_UHEX2:]]
93-00000055   // CHECK-NEXT: {{^}}[[#%.8d,PADDED_SIGN:]]
94-555555555  // CHECK-NEXT: {{^}}[[#%.8d,PADDED_SIGN2:]]
95
96; Numeric variable definition with precision specifier with value not padded
97; enough.
98RUN: FileCheck --check-prefix INVALID-PADDING-DEF --input-file %s %s
99
100FAIL DEF PREC FMT  // INVALID-PADDING-DEF-LABEL: FAIL DEF PREC FMT
101INVALID_PADDED_UNSI: 0000022   // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_UNSI: [[#%.8,INVALID_PADDED_UNSI:]]
102INVALID_PADDED_UNSI2: 0000018  // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_UNSI2: [[#%.8u,INVALID_PADDED_UNSI2:]]
103INVALID_PADDED_LHEX: 000000f   // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_LHEX: [[#%.8x,INVALID_PADDED_LHEX:]]
104INVALID_PADDED_UHEX: 000000E   // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_UHEX: [[#%.8X,INVALID_PADDED_UHEX:]]
105INVALID_PADDED_SIGN: -0000055  // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_SIGN: [[#%.8d,INVALID_PADDED_SIGN:]]
106
107; Numeric expressions with explicit matching format and default matching rule
108; using variables defined on other lines without spaces.
109USE EXPL FMT IMPL MATCH  // CHECK-LABEL: USE EXPL FMT IMPL MATCH
11011  // CHECK-NEXT: {{^}}[[#%u,UNSI]]
11112  // CHECK-NEXT: {{^}}[[#%u,UNSI+1]]
11210  // CHECK-NEXT: {{^}}[[#%u,UNSI-1]]
11315  // CHECK-NEXT: {{^}}[[#%u,add(UNSI,4)]]
11411  // CHECK-NEXT: {{^}}[[#%u,max(UNSI,7)]]
11599  // CHECK-NEXT: {{^}}[[#%u,max(UNSI,99)]]
1167   // CHECK-NEXT: {{^}}[[#%u,min(UNSI,7)]]
11711  // CHECK-NEXT: {{^}}[[#%u,min(UNSI,99)]]
1188   // CHECK-NEXT: {{^}}[[#%u,sub(UNSI,3)]]
119c   // CHECK-NEXT: {{^}}[[#%x,LHEX]]
120d   // CHECK-NEXT: {{^}}[[#%x,LHEX+1]]
121b   // CHECK-NEXT: {{^}}[[#%x,LHEX-1]]
1221a  // CHECK-NEXT: {{^}}[[#%x,LHEX+0xe]]
1231a  // CHECK-NEXT: {{^}}[[#%x,LHEX+0xE]]
124e   // CHECK-NEXT: {{^}}[[#%x,add(LHEX,2)]]
125ff  // CHECK-NEXT: {{^}}[[#%x,max(LHEX,0xff)]]
126a   // CHECK-NEXT: {{^}}[[#%x,min(LHEX,0xa)]]
127a   // CHECK-NEXT: {{^}}[[#%x,sub(LHEX,2)]]
128D   // CHECK-NEXT: {{^}}[[#%X,UHEX]]
129E   // CHECK-NEXT: {{^}}[[#%X,UHEX+1]]
130C   // CHECK-NEXT: {{^}}[[#%X,UHEX-1]]
1311B  // CHECK-NEXT: {{^}}[[#%X,UHEX+0xe]]
1321B  // CHECK-NEXT: {{^}}[[#%X,UHEX+0xE]]
133F   // CHECK-NEXT: {{^}}[[#%X,add(UHEX,2)]]
134FF  // CHECK-NEXT: {{^}}[[#%X,max(UHEX,0xff)]]
135A   // CHECK-NEXT: {{^}}[[#%X,min(UHEX,0xa)]]
136B   // CHECK-NEXT: {{^}}[[#%X,sub(UHEX,2)]]
137-30 // CHECK-NEXT: {{^}}[[#%d,SIGN]]
138-29 // CHECK-NEXT: {{^}}[[#%d,SIGN+1]]
139-31 // CHECK-NEXT: {{^}}[[#%d,SIGN-1]]
14042  // CHECK-NEXT: {{^}}[[#%d,SIGN+72]]
141-29 // CHECK-NEXT: {{^}}[[#%d,add(SIGN,1)]]
142-17 // CHECK-NEXT: {{^}}[[#%d,max(SIGN,-17)]]
143-30 // CHECK-NEXT: {{^}}[[#%d,min(SIGN,-17)]]
144-31 // CHECK-NEXT: {{^}}[[#%d,sub(SIGN,1)]]
14511  // CHECK-NEXT: {{^}}[[#%u,UNSIa]]
14611  // CHECK-NEXT: {{^}}[[#%u,UNSIb]]
14711  // CHECK-NEXT: {{^}}[[#%u,UNSIc]]
148c   // CHECK-NEXT: {{^}}[[#%x,LHEXa]]
149
150; Numeric expressions with explicit matching format and default matching rule
151; using variables defined on other lines with different spacing.
152USE EXPL FMT IMPL MATCH SPC  // CHECK-LABEL: USE EXPL FMT IMPL MATCH SPC
15311  // CHECK-NEXT: {{^}}[[#%u, UNSI]]
15411  // CHECK-NEXT: {{^}}[[# %u, UNSI]]
15511  // CHECK-NEXT: {{^}}[[# %u, UNSI ]]
15612  // CHECK-NEXT: {{^}}[[#%u, UNSI+1]]
15712  // CHECK-NEXT: {{^}}[[# %u, UNSI+1]]
15812  // CHECK-NEXT: {{^}}[[# %u , UNSI+1]]
15912  // CHECK-NEXT: {{^}}[[# %u , UNSI +1]]
16012  // CHECK-NEXT: {{^}}[[# %u , UNSI + 1]]
16112  // CHECK-NEXT: {{^}}[[# %u , UNSI + 1 ]]
16210  // CHECK-NEXT: {{^}}[[#%u, UNSI-1]]
16310  // CHECK-NEXT: {{^}}[[# %u, UNSI-1]]
16410  // CHECK-NEXT: {{^}}[[# %u , UNSI-1]]
16510  // CHECK-NEXT: {{^}}[[# %u , UNSI -1]]
16610  // CHECK-NEXT: {{^}}[[# %u , UNSI - 1]]
16710  // CHECK-NEXT: {{^}}[[# %u , UNSI - 1 ]]
16813  // CHECK-NEXT: {{^}}[[#%u, add(UNSI,2)]]
16913  // CHECK-NEXT: {{^}}[[# %u, add(UNSI,2)]]
17013  // CHECK-NEXT: {{^}}[[# %u , add(UNSI,2)]]
17113  // CHECK-NEXT: {{^}}[[# %u , add(UNSI, 2)]]
17213  // CHECK-NEXT: {{^}}[[# %u , add( UNSI, 2)]]
17313  // CHECK-NEXT: {{^}}[[# %u , add( UNSI,2)]]
17413  // CHECK-NEXT: {{^}}[[# %u , add(UNSI,2) ]]
17513  // CHECK-NEXT: {{^}}[[# %u , add (UNSI,2)]]
176104 // CHECK-NEXT: {{^}}[[# %u , UNSI + sub( add (100 , UNSI+ 1 ), 20) +1 ]]
177
178; Numeric expressions with explicit matching format, precision, form and
179; default matching rule using variables defined on other lines without spaces.
180USE EXPL FMT WITH PREC IMPL MATCH  // CHECK-LABEL: USE EXPL FMT WITH PREC IMPL MATCH
18111          // CHECK-NEXT: {{^}}[[#%.1u,UNSI]]
18200000011    // CHECK-NEXT: {{^}}[[#%.8u,UNSI]]
1831c          // CHECK-NEXT: {{^}}[[#%.1x,LHEX+16]]
1840x1c        // CHECK-NEXT: {{^}}[[#%#.1x,LHEX+16]]
1850000000c    // CHECK-NEXT: {{^}}[[#%.8x,LHEX]]
1860x0000000c  // CHECK-NEXT: {{^}}[[#%#.8x,LHEX]]
1871D          // CHECK-NEXT: {{^}}[[#%.1X,UHEX+16]]
1880x1D        // CHECK-NEXT: {{^}}[[#%#.1X,UHEX+16]]
1890000000D    // CHECK-NEXT: {{^}}[[#%.8X,UHEX]]
1900x0000000D  // CHECK-NEXT: {{^}}[[#%#.8X,UHEX]]
191-30         // CHECK-NEXT: {{^}}[[#%.1d,SIGN]]
192-00000030   // CHECK-NEXT: {{^}}[[#%.8d,SIGN]]
193
194; Numeric expressions with explicit matching format, precision and wrong
195; padding, and default matching rule using variables defined on other lines
196; without spaces.
197RUN: FileCheck --check-prefixes CHECK,INVALID-PADDING-EXPL-USE --input-file %s %s
198
199FAIL USE IMPL FMT WITH PREC EXPL MATCH  // INVALID-PADDING-EXPL-USE-LABEL: FAIL USE IMPL FMT WITH PREC IMPL MATCH
200INVALID UNSI+1: 0000012     // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UNSI+1: [[#%.8u,UNSI+1]]
201INVALID UNSI-1: 000000010   // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UNSI-1: [[#%.8u,UNSI-1]]
202INVALID LHEX+1: 000000d     // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID LHEX+1: [[#%.8x,LHEX+1]]
203INVALID LHEX-1: 00000000b   // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID LHEX-1: [[#%.8x,LHEX-1]]
204INVALID UHEX+1: 000000E     // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UHEX+1: [[#%.8X,UHEX+1]]
205INVALID UHEX-1: 00000000C   // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UHEX-1: [[#%.8X,UHEX-1]]
206INVALID SIGN+1: -0000029    // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID SIGN+1: [[#%.8d,SIGN+1]]
207INVALID SIGN-1: -000000031  // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID SIGN-1: [[#%.8d,SIGN-1]]
208
209; Numeric expressions with implicit matching format and default matching rule
210; using variables defined on other lines.
211USE IMPL FMT IMPL MATCH  // CHECK-LABEL: USE IMPL FMT IMPL MATCH
21211  // CHECK-NEXT: {{^}}[[#UNSI]]
21312  // CHECK-NEXT: {{^}}[[#UNSI+1]]
21410  // CHECK-NEXT: {{^}}[[#UNSI-1]]
21599  // CHECK-NEXT: {{^}}[[#max(UNSI,99)]]
2167   // CHECK-NEXT: {{^}}[[#min(UNSI,7)]]
217c   // CHECK-NEXT: {{^}}[[#LHEX]]
218d   // CHECK-NEXT: {{^}}[[#LHEX+1]]
219b   // CHECK-NEXT: {{^}}[[#LHEX-1]]
2201a  // CHECK-NEXT: {{^}}[[#LHEX+0xe]]
2211a  // CHECK-NEXT: {{^}}[[#LHEX+0xE]]
222ff  // CHECK-NEXT: {{^}}[[#max(LHEX,255)]]
223a   // CHECK-NEXT: {{^}}[[#min(LHEX,10)]]
224D   // CHECK-NEXT: {{^}}[[#UHEX]]
225E   // CHECK-NEXT: {{^}}[[#UHEX+1]]
226C   // CHECK-NEXT: {{^}}[[#UHEX-1]]
2271B  // CHECK-NEXT: {{^}}[[#UHEX+0xe]]
2281B  // CHECK-NEXT: {{^}}[[#UHEX+0xE]]
229FF  // CHECK-NEXT: {{^}}[[#max(UHEX,255)]]
230A   // CHECK-NEXT: {{^}}[[#min(UHEX,10)]]
231-30 // CHECK-NEXT: {{^}}[[#SIGN]]
232-29 // CHECK-NEXT: {{^}}[[#SIGN+1]]
233-31 // CHECK-NEXT: {{^}}[[#SIGN-1]]
234
235; Numeric expressions with implicit matching format, precision, and default
236; matching rule using variables defined on other lines.
237USE IMPL FMT WITH PREC IMPL MATCH  // CHECK-LABEL: USE IMPL FMT WITH PREC IMPL MATCH
23800000023    // CHECK-NEXT: {{^}}[[#PADDED_UNSI+1]]
239323232324   // CHECK-NEXT: {{^}}[[#PADDED_UNSI2+1]]
24000000019    // CHECK-NEXT: {{^}}[[#PADDED_UNSI3+1]]
241181818182   // CHECK-NEXT: {{^}}[[#PADDED_UNSI4+1]]
24200000010    // CHECK-NEXT: {{^}}[[#PADDED_LHEX+1]]
2431000000000  // CHECK-NEXT: {{^}}[[#PADDED_LHEX2+1]]
2440000000F    // CHECK-NEXT: {{^}}[[#PADDED_UHEX+1]]
245EEEEEEEEF   // CHECK-NEXT: {{^}}[[#PADDED_UHEX2+1]]
246-00000054   // CHECK-NEXT: {{^}}[[#PADDED_SIGN+1]]
247-555555554  // CHECK-NEXT: {{^}}[[#PADDED_SIGN2+1]]
248
249; Numeric expression with implicit matching format, precision and wrong amount
250; of padding, and default matching rule using variables defined on other lines.
251RUN: FileCheck --check-prefixes CHECK,INVALID-PADDING-IMPL-USE --input-file %s %s
252
253FAIL USE IMPL FMT WITH PREC IMPL MATCH  // INVALID-PADDING-IMPL-USE-LABEL: FAIL USE IMPL FMT WITH PREC IMPL MATCH
254INVALID PADDED_UNSI+1: 0000023     // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI+1: [[#PADDED_UNSI+1]]
255INVALID PADDED_UNSI-1: 000000021   // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI-1: [[#PADDED_UNSI-1]]
256INVALID PADDED_UNSI3+1: 0000019    // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI3+1: [[#PADDED_UNSI3+1]]
257INVALID PADDED_UNSI3-1: 000000017  // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI3-1: [[#PADDED_UNSI3-1]]
258INVALID PADDED_LHEX+1: 0000010     // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_LHEX+1: [[#PADDED_LHEX+1]]
259INVALID PADDED_LHEX-1: 00000000e   // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_LHEX-1: [[#PADDED_LHEX-1]]
260INVALID PADDED_UHEX+1: 000000F     // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UHEX+1: [[#PADDED_UHEX+1]]
261INVALID PADDED_UHEX-1: 00000000D   // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UHEX-1: [[#PADDED_UHEX-1]]
262INVALID PADDED_SIGN+1: -0000054    // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_SIGN+1: [[#PADDED_SIGN+1]]
263INVALID PADDED_SIGN-1: -000000056  // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_SIGN-1: [[#PADDED_SIGN-1]]
264
265; Numeric expressions using variables defined on other lines and an immediate
266; interpreted as an unsigned value.
267; Note: 9223372036854775819 = 0x8000000000000000 + 11
268USE IMPL FMT IMPL MATCH UNSIGNED IMM
2699223372036854775819
270CHECK-LABEL: USE IMPL FMT IMPL MATCH UNSIGNED IMM
271CHECK-NEXT: [[#UNSI+0x8000000000000000]]
272
273; Numeric expressions in default matching format and explicit matching rule using
274; variables defined on other lines.
275USE DEF FMT EXPL MATCH  // CHECK-LABEL: USE DEF FMT EXPL MATCH
27611  // CHECK-NEXT: {{^}}[[#==UNSI]]
27711  // CHECK-NEXT: {{^}}[[# == UNSI]]
27812  // CHECK-NEXT: {{^}}[[#UNSI2: == UNSI + 1]]
27912  // CHECK-NEXT: {{^}}[[#==UNSI2]]
280
281; Numeric expressions in default matching format and explicit matching rule using
282; variable defined on other lines with match failure.
283RUN: %ProtectFileCheckOutput \
284RUN: not FileCheck --check-prefix NUMEXPR-CONSTRAINT-NOMATCH --input-file %s %s 2>&1 \
285RUN:   | FileCheck --check-prefix NUMEXPR-CONSTRAINT-NOMATCH-MSG --strict-whitespace %s
286
287USE DEF FMT EXPL NO MATCH
288UNSI=11
289UNSI: 12
290NUMEXPR-CONSTRAINT-NOMATCH-LABEL: USE DEF FMT EXPL NO MATCH
291NUMEXPR-CONSTRAINT-NOMATCH-NEXT: UNSI=[[#UNSI:]]
292NUMEXPR-CONSTRAINT-NOMATCH-NEXT: UNSI: [[#==UNSI]]
293NUMEXPR-CONSTRAINT-NOMATCH-MSG: numeric-expression.txt:[[#@LINE-1]]:34: error: {{N}}UMEXPR-CONSTRAINT-NOMATCH-NEXT: expected string not found in input
294NUMEXPR-CONSTRAINT-NOMATCH-MSG-NEXT:  {{N}}UMEXPR-CONSTRAINT-NOMATCH-NEXT: UNSI: {{\[\[#==UNSI\]\]}}
295NUMEXPR-CONSTRAINT-NOMATCH-MSG-NEXT: {{^}}                                 ^{{$}}
296
297; Empty numeric expression with matching constraint.
298RUN: %ProtectFileCheckOutput \
299RUN: not FileCheck --check-prefix EMPTY-NUMEXPR-CONSTRAINT --input-file %s %s 2>&1 \
300RUN:   | FileCheck --check-prefix EMPTY-NUMEXPR-CONSTRAINT-MSG --strict-whitespace %s
301
302EMPTY NUMEXPR USE WITH CONSTRAINT
30318
304EMPTY-NUMEXPR-CONSTRAINT-LABEL: EMPTY NUMEXPR USE WITH CONSTRAINT
305EMPTY-NUMEXPR-CONSTRAINT-NEXT: [[# ==]]
306EMPTY-NUMEXPR-CONSTRAINT-MSG: numeric-expression.txt:[[#@LINE-1]]:38: error: empty numeric expression should not have a constraint
307EMPTY-NUMEXPR-CONSTRAINT-MSG-NEXT: {{E}}MPTY-NUMEXPR-CONSTRAINT-NEXT: {{\[\[# ==\]\]}}
308EMPTY-NUMEXPR-CONSTRAINT-MSG-NEXT:     {{^}}                                     ^{{$}}
309
310; Definition from empty numeric expression with matching constraint.
311RUN: %ProtectFileCheckOutput \
312RUN: not FileCheck --check-prefix EMPTY-NUMDEF-CONSTRAINT --input-file %s %s 2>&1 \
313RUN:   | FileCheck --check-prefix EMPTY-NUMDEF-CONSTRAINT-MSG %s
314
315EMPTY NUMEXPR DEF WITH CONSTRAINT
31618
317EMPTY-NUMDEF-CONSTRAINT-LABEL: EMPTY NUMEXPR CONSTRAINT
318EMPTY-NUMDEF-CONSTRAINT-NEXT: [[#VARDEF: ==]]
319EMPTY-NUMDEF-CONSTRAINT-MSG: numeric-expression.txt:[[#@LINE-1]]:44: error: empty numeric expression should not have a constraint
320EMPTY-NUMDEF-CONSTRAINT-MSG-NEXT: {{E}}MPTY-NUMDEF-CONSTRAINT-NEXT: {{\[\[#VARDEF: ==\]\]}}
321EMPTY-NUMDEF-CONSTRAINT-MSG-NEXT:     {{^}}                                           ^{{$}}
322
323; Numeric expressions with matching format overriding the implicit format of
324; variables defined on other lines.
325USE CONV FMT IMPL MATCH  // CHECK-LABEL: USE CONV FMT IMPL MATCH
326b   // CHECK-NEXT: {{^}}[[# %x, UNSI]]
327B   // CHECK-NEXT: {{^}}[[# %X, UNSI]]
328-1  // CHECK-NEXT: {{^}}[[# %d, UNSI-12]]
32912  // CHECK-NEXT: {{^}}[[# %u, LHEX]]
330C   // CHECK-NEXT: {{^}}[[# %X, LHEX]]
331-2  // CHECK-NEXT: {{^}}[[# %d, LHEX-14]]
33213  // CHECK-NEXT: {{^}}[[# %u, UHEX]]
333d   // CHECK-NEXT: {{^}}[[# %x, UHEX]]
334-5  // CHECK-NEXT: {{^}}[[# %d, UHEX-18]]
33515  // CHECK-NEXT: {{^}}[[# %u, SIGN+45]]
336f   // CHECK-NEXT: {{^}}[[# %x, SIGN+45]]
337F   // CHECK-NEXT: {{^}}[[# %X, SIGN+45]]
338
339; Conflicting implicit format.
340RUN: %ProtectFileCheckOutput \
341RUN: not FileCheck --check-prefixes CHECK,FMT-CONFLICT1 --input-file %s %s 2>&1 \
342RUN:   | FileCheck --strict-whitespace --check-prefix FMT-CONFLICT1-MSG %s
343RUN: %ProtectFileCheckOutput \
344RUN: not FileCheck --check-prefixes CHECK,FMT-CONFLICT2 --input-file %s %s 2>&1 \
345RUN:   | FileCheck --strict-whitespace --check-prefix FMT-CONFLICT2-MSG %s
346
347VAR USE IMPL FMT CONFLICT
34823
349FMT-CONFLICT1-LABEL: VAR USE IMPL FMT CONFLICT
350FMT-CONFLICT1-NEXT: [[#UNSI + LHEX]]
351FMT-CONFLICT1-MSG: numeric-expression.txt:[[#@LINE-1]]:24: error: implicit format conflict between 'UNSI' (%u) and 'LHEX' (%x), need an explicit format specifier
352FMT-CONFLICT1-MSG-NEXT: {{F}}MT-CONFLICT1-NEXT: {{\[\[#UNSI \+ LHEX\]\]}}
353FMT-CONFLICT1-MSG-NEXT: {{^                       \^$}}
354
355VAR USE IMPL FMT CONFLICT COMPLEX
35634
357FMT-CONFLICT2-LABEL: VAR USE IMPL FMT CONFLICT
358FMT-CONFLICT2-NEXT: [[#UNSI + UNSIa + LHEX]]
359FMT-CONFLICT2-MSG: numeric-expression.txt:[[#@LINE-1]]:24: error: implicit format conflict between 'UNSI + UNSIa' (%u) and 'LHEX' (%x), need an explicit format specifier
360FMT-CONFLICT2-MSG-NEXT: {{F}}MT-CONFLICT2-NEXT: {{\[\[#UNSI \+ UNSIa \+ LHEX\]\]}}
361FMT-CONFLICT2-MSG-NEXT: {{^                       \^$}}
362
363; Explicitly specified format can override conflicting implicit formats.
364VAR USE IMPL OVERRIDE FMT CONFLICT  // CHECK-LABEL: VAR USE IMPL OVERRIDE FMT CONFLICT
36523  // CHECK-NEXT: {{^}}[[# %u, UNSI + LHEX]]
366
367; Numeric expressions using more than one variable defined on other lines.
368USE MULTI VAR  // CHECK-LABEL: USE MULTI VAR
36922  // CHECK-NEXT: {{^}}[[#UNSI+UNSIa]]
370
371; Numeric expression using a variable defined from a numeric expression.
372DEF EXPR GOOD MATCH  // CHECK-LABEL: DEF EXPR GOOD MATCH
37342  // CHECK-NEXT: {{^}}[[# VAR42:UNSI+31]]
37441  // CHECK-NEXT: {{^}}[[# VAR42-1]]
375
376; Empty numeric expression.
377EMPTY NUM EXPR  // CHECK-LABEL: EMPTY NUM EXPR
378foo 104 bar  // CHECK-NEXT: {{^}}foo [[#]] bar
379
380; Numeric expressions using parentheses.
381RUN: %ProtectFileCheckOutput \
382RUN: not FileCheck -D#NUMVAR=10 --check-prefix PAREN-OP \
383RUN:               --input-file %s %s 2>&1 \
384RUN:   | FileCheck --strict-whitespace --check-prefix PAREN-OP-MSG %s
385
386PAREN EXPRESSIONS // PAREN-OP-LABEL: PAREN EXPRESSIONS
38711  // PAREN-OP-NEXT: [[#(NUMVAR+2)-1]]
38811  // PAREN-OP-NEXT: [[#NUMVAR+(2-1)]]
38911  // PAREN-OP-NEXT: [[#NUMVAR+(2-1]]
390PAREN-OP-MSG: numeric-expression.txt:[[#@LINE-1]]:36: error: missing ')' at end of nested expression
391PAREN-OP-MSG-NEXT: {{P}}AREN-OP-NEXT: {{\[\[#NUMVAR\+\(2\-1]\]}}
392PAREN-OP-MSG-NEXT: {{^}}                                   ^{{$}}
393
394; Numeric expression using undefined variables.
395RUN: %ProtectFileCheckOutput \
396RUN: not FileCheck --check-prefix UNDEF-USE --input-file %s %s 2>&1 \
397RUN:   | FileCheck --strict-whitespace --check-prefix UNDEF-USE-MSG %s
398
399UNDEF VAR USE
400UNDEFVAR: 11
401UNDEF-USE-LABEL: UNDEF VAR USE
402UNDEF-USE-NEXT: UNDEFVAR: [[#UNDEFVAR1+UNDEFVAR2]]
403UNDEF-USE-MSG: numeric-expression.txt:[[#@LINE-1]]:17: error: {{U}}NDEF-USE-NEXT: expected string not found in input
404UNDEF-USE-MSG-NEXT:      {{U}}NDEF-USE-NEXT: UNDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}}
405UNDEF-USE-MSG-NEXT:     {{^}}                ^{{$}}
406UNDEF-USE-MSG-NEXT:      numeric-expression.txt:[[#@LINE-7]]:14: note: scanning from here
407UNDEF-USE-MSG-NEXT:      UNDEF VAR USE
408UNDEF-USE-MSG-NEXT: {{^}}             ^{{$}}
409UNDEF-USE-MSG-NEXT:      numeric-expression.txt:[[#@LINE-10]]:14: note: uses undefined variable(s): "UNDEFVAR1" "UNDEFVAR2"
410UNDEF-USE-MSG-NEXT:      UNDEF VAR USE
411UNDEF-USE-MSG-NEXT: {{^}}             ^{{$}}
412
413; Numeric expression with unsupported operator.
414RUN: %ProtectFileCheckOutput \
415RUN: not FileCheck -D#NUMVAR=10 --check-prefix INVAL-OP \
416RUN:               --input-file %s %s 2>&1 \
417RUN:   | FileCheck --strict-whitespace --check-prefix INVAL-OP-MSG %s
418
419INVALID OPERATOR
420NUMVAR*2: 22
421INVAL-OP-LABEL: INVALID OPERATOR
422INVAL-OP-NEXT: NUMVAR*2: [[#NUMVAR*2]]
423INVAL-OP-MSG: numeric-expression.txt:[[#@LINE-1]]:35: error: unsupported operation '*'
424INVAL-OP-MSG-NEXT: {{I}}NVAL-OP-NEXT: NUMVAR*2: {{\[\[#NUMVAR\*2\]\]}}
425INVAL-OP-MSG-NEXT:     {{^}}                                  ^{{$}}
426
427; Name conflict between Numeric variable definition and string variable
428; definition whether from the command-line or input text.
429RUN: %ProtectFileCheckOutput \
430RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT1,CONFLICT2 \
431RUN:               --input-file %s %s 2>&1 \
432RUN:   | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s
433RUN: %ProtectFileCheckOutput \
434RUN: not FileCheck -D#NUMVAR=42 --check-prefixes CONFLICT,CONFLICT2 \
435RUN:               --input-file %s %s 2>&1 \
436RUN:   | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s
437RUN: %ProtectFileCheckOutput \
438RUN: not FileCheck -D#NUMVAR=42 -DNUMVAR=foobar --check-prefix CONFLICT \
439RUN:               --input-file %s %s 2>&1 \
440RUN:   | FileCheck --strict-whitespace --check-prefix CLI-STR-CONFLICT %s
441RUN: %ProtectFileCheckOutput \
442RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT3,CONFLICT4 \
443RUN:               --input-file %s %s 2>&1 \
444RUN:   | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s
445RUN: %ProtectFileCheckOutput \
446RUN: not FileCheck -DSTRVAR=foobar --check-prefixes CONFLICT,CONFLICT4 \
447RUN:               --input-file %s %s 2>&1 \
448RUN:   | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s
449RUN: %ProtectFileCheckOutput \
450RUN: not FileCheck -DSTRVAR=foobar -D#STRVAR=42 --check-prefix CONFLICT \
451RUN:               --input-file %s %s 2>&1 \
452RUN:   | FileCheck --strict-whitespace --check-prefix CLI-NUM-CONFLICT %s
453
454STRVAR NUMVAR CONFLICT
455redef1 42
456foobar
457redef2 42
458CONFLICT-LABEL: STRVAR NUMVAR CONFLICT
459CONFLICT1-NEXT: redef1 [[#NUMVAR:]]
460CONFLICT2: [[NUMVAR:foo.*]]
461CONFLICT3: [[STRVAR:foo.*]]
462CONFLICT4: redef2 [[#STRVAR:]]
463INPUT-STR-CONFLICT: numeric-expression.txt:[[#@LINE-3]]:14: error: numeric variable with name 'NUMVAR' already exists
464INPUT-STR-CONFLICT-NEXT: {{C}}ONFLICT2: {{\[\[NUMVAR:foo\.\*\]\]}}
465INPUT-STR-CONFLICT-NEXT:    {{^}}             ^{{$}}
466CLI-STR-CONFLICT: Global defines:2:19: error: numeric variable with name 'NUMVAR' already exists
467CLI-STR-CONFLICT-NEXT:      Global define #2: NUMVAR=foobar
468CLI-STR-CONFLICT-NEXT: {{^}}                  ^{{$}}
469INPUT-NUM-CONFLICT: numeric-expression.txt:[[#@LINE-7]]:22: error: string variable with name 'STRVAR' already exists
470 INPUT-NUM-CONFLICT-NEXT: CONFLICT4: redef2 {{\[\[#STRVAR:\]\]}}
471INPUT-NUM-CONFLICT-NEXT: {{^}}                     ^{{$}}
472CLI-NUM-CONFLICT: Global defines:2:45: error: string variable with name 'STRVAR' already exists
473 CLI-NUM-CONFLICT-NEXT: Global define #2: #STRVAR=42 (parsed as: {{\[\[#STRVAR:42\]\]}})
474CLI-NUM-CONFLICT-NEXT: {{^}}                                            ^{{$}}
475
476; Numeric variable definition with too big value.
477RUN: %ProtectFileCheckOutput \
478RUN: not FileCheck --check-prefix BIGVAL --input-file %s %s 2>&1 \
479RUN:   | FileCheck --strict-whitespace --check-prefix BIGVAL-MSG %s
480
481BIG VALUE
482NUMVAR: 10000000000000000000000
483BIGVAL-LABEL: BIG VALUE
484BIGVAL-NEXT: NUMVAR: [[#NUMVAR:]]
485BIGVAL-MSG: numeric-expression.txt:[[#@LINE-3]]:9: error: unable to represent numeric value
486 BIGVAL-MSG-NEXT: {{N}}UMVAR: 10000000000000000000000
487BIGVAL-MSG-NEXT: {{^}}        ^{{$}}
488
489; Verify that when a variable is set to an expression the expression is still
490; checked.
491RUN: %ProtectFileCheckOutput \
492RUN: not FileCheck --check-prefix DEF-EXPR-FAIL --input-file %s %s 2>&1 \
493RUN:   | FileCheck --strict-whitespace --check-prefix DEF-EXPR-FAIL-MSG %s
494
495DEF EXPR WRONG MATCH
49620
49743
498DEF-EXPR-FAIL-LABEL: DEF EXPR WRONG MATCH
499DEF-EXPR-FAIL-NEXT: [[# VAR20:]]
500DEF-EXPR-FAIL-NEXT: [[# VAR42: VAR20+22]]
501DEF-EXPR-FAIL-MSG: numeric-expression.txt:[[#@LINE-1]]:21: error: {{D}}EF-EXPR-FAIL-NEXT: is not on the line after the previous match
502DEF-EXPR-FAIL-MSG-NEXT: {{D}}EF-EXPR-FAIL-NEXT: {{\[\[# VAR42: VAR20\+22\]\]}}
503DEF-EXPR-FAIL-MSG-NEXT:   {{^}}                    ^{{$}}
504
505; Verify that using a numeric variable defined on the same line (whether from
506; input or from an expression) is rejected.
507RUN: %ProtectFileCheckOutput \
508RUN: not FileCheck --check-prefix SAME-LINE-USE1 --input-file %s %s 2>&1 \
509RUN:   | FileCheck --strict-whitespace --check-prefix SAME-LINE-USE-MSG1 %s
510RUN: %ProtectFileCheckOutput \
511RUN: not FileCheck --check-prefix SAME-LINE-USE2 --input-file %s %s 2>&1 \
512RUN:   | FileCheck --strict-whitespace --check-prefix SAME-LINE-USE-MSG2 %s
513
514SAME LINE USE
5153
5164 5
517SAME-LINE-USE1-LABEL: SAME LINE USE
518SAME-LINE-USE1-NEXT: [[#]]
519SAME-LINE-USE1-NEXT: [[#UNSI:]] [[#UNSI+1]]
520SAME-LINE-USE-MSG1: numeric-expression.txt:[[#@LINE-1]]:36: error: numeric variable 'UNSI' defined earlier in the same CHECK directive
521SAME-LINE-USE-MSG1-NEXT: {{S}}AME-LINE-USE1-NEXT: {{\[\[#UNSI:\]\] \[\[#UNSI\+1\]\]}}
522SAME-LINE-USE-MSG1-NEXT:        {{^}}                                   ^{{$}}
523
524SAME-LINE-USE2-LABEL: SAME LINE USE
525SAME-LINE-USE2-NEXT: [[#UNSI:]]
526SAME-LINE-USE2-NEXT: [[#UNSI2:UNSI+1]] [[#UNSI2+1]]
527SAME-LINE-USE-MSG2: numeric-expression.txt:[[#@LINE-1]]:43: error: numeric variable 'UNSI2' defined earlier in the same CHECK directive
528SAME-LINE-USE-MSG2-NEXT: {{S}}AME-LINE-USE2-NEXT: {{\[\[#UNSI2:UNSI\+1\]\] \[\[#UNSI2\+1\]\]}}
529SAME-LINE-USE-MSG2-NEXT:        {{^}}                                          ^{{$}}
530
531; Invalid change of format in variable redefinition.
532RUN: %ProtectFileCheckOutput \
533RUN: not FileCheck --check-prefix REDEF-NEW-FMT --input-file %s %s 2>&1 \
534RUN:   | FileCheck --strict-whitespace --check-prefix REDEF-NEW-FMT-MSG %s
535
536VAR REDEF FMT CHANGE
53722
538DC
539REDEF-NEW-FMT-LABEL: VAR REDEF FMT CHANGE
540REDEF-NEW-FMT-NEXT: [[#UNSI:]]
541REDEF-NEW-FMT-NEXT: [[#%X,UNSI:]]
542REDEF-NEW-FMT-MSG: numeric-expression.txt:[[#@LINE-1]]:31: error: format different from previous variable definition
543REDEF-NEW-FMT-MSG-NEXT: {{R}}EDEF-NEW-FMT-NEXT: {{\[\[#%X,UNSI:\]\]}}
544REDEF-NEW-FMT-MSG-NEXT:    {{^}}                              ^{{$}}
545
546; Numeric expression with overflow.
547RUN: %ProtectFileCheckOutput \
548RUN: not FileCheck --check-prefix OVERFLOW --input-file %s %s 2>&1 \
549RUN:   | FileCheck --check-prefix OVERFLOW-MSG --strict-whitespace %s
550
551OVERFLOW
552BIGVAR=10000000000000000
553OVERFLOW-LABEL: OVERFLOW
554OVERFLOW-NEXT: BIGVAR: [[#BIGVAR:0x8000000000000000+0x8000000000000000]]
555OVERFLOW-MSG: numeric-expression.txt:[[#@LINE-1]]:27: error: unable to substitute variable or numeric expression
556OVERFLOW-MSG-NEXT: {{O}}VERFLOW-NEXT: BIGVAR: {{\[\[#BIGVAR:0x8000000000000000\+0x8000000000000000\]\]}}
557OVERFLOW-MSG-NEXT:    {{^}}                          ^{{$}}
558
559; Numeric expression with underflow.
560RUN: %ProtectFileCheckOutput \
561RUN: not FileCheck --check-prefix UNDERFLOW --input-file %s %s 2>&1 \
562RUN:   | FileCheck --check-prefix UNDERFLOW-MSG --strict-whitespace %s
563
564UNDERFLOW
565TINYVAR=-10000000000000000
566UNDERFLOW-LABEL: UNDERFLOW
567UNDERFLOW-NEXT: TINYVAR: [[#%d,TINYVAR:-0x8000000000000000-0x8000000000000000]]
568UNDERFLOW-MSG: numeric-expression.txt:[[#@LINE-1]]:29: error: unable to substitute variable or numeric expression
569UNDERFLOW-MSG-NEXT: {{U}}NDERFLOW-NEXT: TINYVAR: {{\[\[#%d,TINYVAR:-0x8000000000000000-0x8000000000000000\]\]}}
570UNDERFLOW-MSG-NEXT:    {{^}}                            ^{{$}}
571
572RUN: %ProtectFileCheckOutput \
573RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-MISSING-CLOSING-BRACKET --input-file %s %s 2>&1 \
574RUN:   | FileCheck --strict-whitespace --check-prefix CALL-MISSING-CLOSING-BRACKET-MSG %s
575
576CALL MISSING CLOSING BRACKET
57730
578CALL-MISSING-CLOSING-BRACKET-LABEL: CALL MISSING CLOSING BRACKET
579CALL-MISSING-CLOSING-BRACKET-NEXT: [[#add(NUMVAR,3]]
580CALL-MISSING-CLOSING-BRACKET-MSG: numeric-expression.txt:[[#@LINE-1]]:51: error: missing ')' at end of call expression
581CALL-MISSING-CLOSING-BRACKET-MSG-NEXT: {{C}}ALL-MISSING-CLOSING-BRACKET-NEXT: {{\[\[#add\(NUMVAR,3\]\]}}
582CALL-MISSING-CLOSING-BRACKET-MSG-NEXT:      {{^}}                                                  ^{{$}}
583
584RUN: %ProtectFileCheckOutput \
585RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-MISSING-ARGUMENT --input-file %s %s 2>&1 \
586RUN:   | FileCheck --strict-whitespace --check-prefix CALL-MISSING-ARGUMENT-MSG %s
587
588CALL MISSING ARGUMENT
58930
590CALL-MISSING-ARGUMENT-LABEL: CALL MISSING ARGUMENT
591CALL-MISSING-ARGUMENT-NEXT: [[#add(NUMVAR,)]]
592CALL-MISSING-ARGUMENT-MSG: numeric-expression.txt:[[#@LINE-1]]:43: error: missing argument
593CALL-MISSING-ARGUMENT-MSG-NEXT: {{C}}ALL-MISSING-ARGUMENT-NEXT: {{\[\[#add\(NUMVAR,\)\]\]}}
594CALL-MISSING-ARGUMENT-MSG-NEXT:      {{^}}                                          ^{{$}}
595
596RUN: %ProtectFileCheckOutput \
597RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-WRONG-ARGUMENT-COUNT --input-file %s %s 2>&1 \
598RUN:   | FileCheck --strict-whitespace --check-prefix CALL-WRONG-ARGUMENT-COUNT-MSG %s
599
600CALL WRONG ARGUMENT COUNT
60130
602CALL-WRONG-ARGUMENT-COUNT-LABEL: CALL WRONG ARGUMENT COUNT
603CALL-WRONG-ARGUMENT-COUNT-NEXT: [[#add(NUMVAR)]]
604CALL-WRONG-ARGUMENT-COUNT-MSG: numeric-expression.txt:[[#@LINE-1]]:36: error: function 'add' takes 2 arguments but 1 given
605CALL-WRONG-ARGUMENT-COUNT-MSG-NEXT: {{C}}ALL-WRONG-ARGUMENT-COUNT-NEXT: {{\[\[#add\(NUMVAR\)\]\]}}
606CALL-WRONG-ARGUMENT-COUNT-MSG-NEXT:    {{^}}                                   ^{{$}}
607
608RUN: %ProtectFileCheckOutput \
609RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-UNDEFINED-FUNCTION --input-file %s %s 2>&1 \
610RUN:   | FileCheck --strict-whitespace --check-prefix CALL-UNDEFINED-FUNCTION-MSG %s
611
612CALL UNDEFINED FUNCTION
61330
614CALL-UNDEFINED-FUNCTION-LABEL: CALL UNDEFINED FUNCTION
615CALL-UNDEFINED-FUNCTION-NEXT: [[#bogus_function(NUMVAR)]]
616CALL-UNDEFINED-FUNCTION-MSG: numeric-expression.txt:[[#@LINE-1]]:34: error: call to undefined function 'bogus_function'
617CALL-UNDEFINED-FUNCTION-MSG-NEXT: {{C}}ALL-UNDEFINED-FUNCTION-NEXT: {{\[\[#bogus_function\(NUMVAR\)\]\]}}
618CALL-UNDEFINED-FUNCTION-MSG-NEXT:    {{^}}                                 ^{{$}}
619