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 expressions in explicit matching format and default matching rule using 53; variables defined on other lines without spaces. 54USE EXPL FMT IMPL MATCH // CHECK-LABEL: USE EXPL FMT IMPL MATCH 5511 // CHECK-NEXT: {{^}}[[#%u,UNSI]] 5612 // CHECK-NEXT: {{^}}[[#%u,UNSI+1]] 5710 // CHECK-NEXT: {{^}}[[#%u,UNSI-1]] 5815 // CHECK-NEXT: {{^}}[[#%u,add(UNSI,4)]] 5911 // CHECK-NEXT: {{^}}[[#%u,max(UNSI,7)]] 6099 // CHECK-NEXT: {{^}}[[#%u,max(UNSI,99)]] 617 // CHECK-NEXT: {{^}}[[#%u,min(UNSI,7)]] 6211 // CHECK-NEXT: {{^}}[[#%u,min(UNSI,99)]] 638 // CHECK-NEXT: {{^}}[[#%u,sub(UNSI,3)]] 64c // CHECK-NEXT: {{^}}[[#%x,LHEX]] 65d // CHECK-NEXT: {{^}}[[#%x,LHEX+1]] 66b // CHECK-NEXT: {{^}}[[#%x,LHEX-1]] 671a // CHECK-NEXT: {{^}}[[#%x,LHEX+0xe]] 681a // CHECK-NEXT: {{^}}[[#%x,LHEX+0xE]] 69e // CHECK-NEXT: {{^}}[[#%x,add(LHEX,2)]] 70ff // CHECK-NEXT: {{^}}[[#%x,max(LHEX,0xff)]] 71a // CHECK-NEXT: {{^}}[[#%x,min(LHEX,0xa)]] 72a // CHECK-NEXT: {{^}}[[#%x,sub(LHEX,2)]] 73D // CHECK-NEXT: {{^}}[[#%X,UHEX]] 74E // CHECK-NEXT: {{^}}[[#%X,UHEX+1]] 75C // CHECK-NEXT: {{^}}[[#%X,UHEX-1]] 761B // CHECK-NEXT: {{^}}[[#%X,UHEX+0xe]] 771B // CHECK-NEXT: {{^}}[[#%X,UHEX+0xE]] 78F // CHECK-NEXT: {{^}}[[#%X,add(UHEX,2)]] 79FF // CHECK-NEXT: {{^}}[[#%X,max(UHEX,0xff)]] 80A // CHECK-NEXT: {{^}}[[#%X,min(UHEX,0xa)]] 81B // CHECK-NEXT: {{^}}[[#%X,sub(UHEX,2)]] 82-30 // CHECK-NEXT: {{^}}[[#%d,SIGN]] 83-29 // CHECK-NEXT: {{^}}[[#%d,SIGN+1]] 84-31 // CHECK-NEXT: {{^}}[[#%d,SIGN-1]] 8542 // CHECK-NEXT: {{^}}[[#%d,SIGN+72]] 86-29 // CHECK-NEXT: {{^}}[[#%d,add(SIGN,1)]] 87-17 // CHECK-NEXT: {{^}}[[#%d,max(SIGN,-17)]] 88-30 // CHECK-NEXT: {{^}}[[#%d,min(SIGN,-17)]] 89-31 // CHECK-NEXT: {{^}}[[#%d,sub(SIGN,1)]] 9011 // CHECK-NEXT: {{^}}[[#%u,UNSIa]] 9111 // CHECK-NEXT: {{^}}[[#%u,UNSIb]] 9211 // CHECK-NEXT: {{^}}[[#%u,UNSIc]] 93c // CHECK-NEXT: {{^}}[[#%x,LHEXa]] 94 95; Numeric expressions in explicit matching format and default matching rule using 96; variables defined on other lines with different spacing. 97USE EXPL FMT IMPL MATCH SPC // CHECK-LABEL: USE EXPL FMT IMPL MATCH SPC 9811 // CHECK-NEXT: {{^}}[[#%u, UNSI]] 9911 // CHECK-NEXT: {{^}}[[# %u, UNSI]] 10011 // CHECK-NEXT: {{^}}[[# %u, UNSI ]] 10112 // CHECK-NEXT: {{^}}[[#%u, UNSI+1]] 10212 // CHECK-NEXT: {{^}}[[# %u, UNSI+1]] 10312 // CHECK-NEXT: {{^}}[[# %u , UNSI+1]] 10412 // CHECK-NEXT: {{^}}[[# %u , UNSI +1]] 10512 // CHECK-NEXT: {{^}}[[# %u , UNSI + 1]] 10612 // CHECK-NEXT: {{^}}[[# %u , UNSI + 1 ]] 10710 // CHECK-NEXT: {{^}}[[#%u, UNSI-1]] 10810 // CHECK-NEXT: {{^}}[[# %u, UNSI-1]] 10910 // CHECK-NEXT: {{^}}[[# %u , UNSI-1]] 11010 // CHECK-NEXT: {{^}}[[# %u , UNSI -1]] 11110 // CHECK-NEXT: {{^}}[[# %u , UNSI - 1]] 11210 // CHECK-NEXT: {{^}}[[# %u , UNSI - 1 ]] 11313 // CHECK-NEXT: {{^}}[[#%u, add(UNSI,2)]] 11413 // CHECK-NEXT: {{^}}[[# %u, add(UNSI,2)]] 11513 // CHECK-NEXT: {{^}}[[# %u , add(UNSI,2)]] 11613 // CHECK-NEXT: {{^}}[[# %u , add(UNSI, 2)]] 11713 // CHECK-NEXT: {{^}}[[# %u , add( UNSI, 2)]] 11813 // CHECK-NEXT: {{^}}[[# %u , add( UNSI,2)]] 11913 // CHECK-NEXT: {{^}}[[# %u , add(UNSI,2) ]] 12013 // CHECK-NEXT: {{^}}[[# %u , add (UNSI,2)]] 121104 // CHECK-NEXT: {{^}}[[# %u , UNSI + sub( add (100 , UNSI+ 1 ), 20) +1 ]] 122 123; Numeric expressions in implicit matching format and default matching rule using 124; variables defined on other lines. 125USE IMPL FMT IMPL MATCH // CHECK-LABEL: USE IMPL FMT IMPL MATCH 12611 // CHECK-NEXT: {{^}}[[#UNSI]] 12712 // CHECK-NEXT: {{^}}[[#UNSI+1]] 12810 // CHECK-NEXT: {{^}}[[#UNSI-1]] 12999 // CHECK-NEXT: {{^}}[[#max(UNSI,99)]] 1307 // CHECK-NEXT: {{^}}[[#min(UNSI,7)]] 131c // CHECK-NEXT: {{^}}[[#LHEX]] 132d // CHECK-NEXT: {{^}}[[#LHEX+1]] 133b // CHECK-NEXT: {{^}}[[#LHEX-1]] 1341a // CHECK-NEXT: {{^}}[[#LHEX+0xe]] 1351a // CHECK-NEXT: {{^}}[[#LHEX+0xE]] 136ff // CHECK-NEXT: {{^}}[[#max(LHEX,255)]] 137a // CHECK-NEXT: {{^}}[[#min(LHEX,10)]] 138D // CHECK-NEXT: {{^}}[[#UHEX]] 139E // CHECK-NEXT: {{^}}[[#UHEX+1]] 140C // CHECK-NEXT: {{^}}[[#UHEX-1]] 1411B // CHECK-NEXT: {{^}}[[#UHEX+0xe]] 1421B // CHECK-NEXT: {{^}}[[#UHEX+0xE]] 143FF // CHECK-NEXT: {{^}}[[#max(UHEX,255)]] 144A // CHECK-NEXT: {{^}}[[#min(UHEX,10)]] 145-30 // CHECK-NEXT: {{^}}[[#SIGN]] 146-29 // CHECK-NEXT: {{^}}[[#SIGN+1]] 147-31 // CHECK-NEXT: {{^}}[[#SIGN-1]] 148 149; Numeric expressions using variables defined on other lines and an immediate 150; interpreted as an unsigned value. 151; Note: 9223372036854775819 = 0x8000000000000000 + 11 152USE IMPL FMT IMPL MATCH UNSIGNED IMM 1539223372036854775819 154CHECK-LABEL: USE IMPL FMT IMPL MATCH UNSIGNED IMM 155CHECK-NEXT: [[#UNSI+0x8000000000000000]] 156 157; Numeric expressions in default matching format and explicit matching rule using 158; variables defined on other lines. 159USE DEF FMT EXPL MATCH // CHECK-LABEL: USE DEF FMT EXPL MATCH 16011 // CHECK-NEXT: {{^}}[[#==UNSI]] 16111 // CHECK-NEXT: {{^}}[[# == UNSI]] 16212 // CHECK-NEXT: {{^}}[[#UNSI2: == UNSI + 1]] 16312 // CHECK-NEXT: {{^}}[[#==UNSI2]] 164 165; Numeric expressions in default matching format and explicit matching rule using 166; variable defined on other lines with match failure. 167RUN: %ProtectFileCheckOutput \ 168RUN: not FileCheck --check-prefix NUMEXPR-CONSTRAINT-NOMATCH --input-file %s %s 2>&1 \ 169RUN: | FileCheck --check-prefix NUMEXPR-CONSTRAINT-NOMATCH-MSG --strict-whitespace %s 170 171USE DEF FMT EXPL NO MATCH 17212 173NUMEXPR-CONSTRAINT-NOMATCH-LABEL: USE DEF FMT EXPL NO MATCH 174NUMEXPR-CONSTRAINT-NOMATCH-NEXT: [[#==UNSI]] 175NUMEXPR-CONSTRAINT-NOMATCH-MSG: numeric-expression.txt:[[#@LINE-1]]:34: error: {{N}}UMEXPR-CONSTRAINT-NOMATCH-NEXT: expected string not found in input 176NUMEXPR-CONSTRAINT-NOMATCH-MSG-NEXT: {{N}}UMEXPR-CONSTRAINT-NOMATCH-NEXT: {{\[\[#==UNSI\]\]}} 177NUMEXPR-CONSTRAINT-NOMATCH-MSG-NEXT: {{^}} ^{{$}} 178 179; Empty numeric expression with matching constraint. 180RUN: %ProtectFileCheckOutput \ 181RUN: not FileCheck --check-prefix EMPTY-NUMEXPR-CONSTRAINT --input-file %s %s 2>&1 \ 182RUN: | FileCheck --check-prefix EMPTY-NUMEXPR-CONSTRAINT-MSG --strict-whitespace %s 183 184EMPTY NUMEXPR USE WITH CONSTRAINT 18518 186EMPTY-NUMEXPR-CONSTRAINT-LABEL: EMPTY NUMEXPR USE WITH CONSTRAINT 187EMPTY-NUMEXPR-CONSTRAINT-NEXT: [[# ==]] 188EMPTY-NUMEXPR-CONSTRAINT-MSG: numeric-expression.txt:[[#@LINE-1]]:38: error: empty numeric expression should not have a constraint 189EMPTY-NUMEXPR-CONSTRAINT-MSG-NEXT: {{E}}MPTY-NUMEXPR-CONSTRAINT-NEXT: {{\[\[# ==\]\]}} 190EMPTY-NUMEXPR-CONSTRAINT-MSG-NEXT: {{^}} ^{{$}} 191 192; Definition from empty numeric expression with matching constraint. 193RUN: %ProtectFileCheckOutput \ 194RUN: not FileCheck --check-prefix EMPTY-NUMDEF-CONSTRAINT --input-file %s %s 2>&1 \ 195RUN: | FileCheck --check-prefix EMPTY-NUMDEF-CONSTRAINT-MSG %s 196 197EMPTY NUMEXPR DEF WITH CONSTRAINT 19818 199EMPTY-NUMDEF-CONSTRAINT-LABEL: EMPTY NUMEXPR CONSTRAINT 200EMPTY-NUMDEF-CONSTRAINT-NEXT: [[#VARDEF: ==]] 201EMPTY-NUMDEF-CONSTRAINT-MSG: numeric-expression.txt:[[#@LINE-1]]:44: error: empty numeric expression should not have a constraint 202EMPTY-NUMDEF-CONSTRAINT-MSG-NEXT: {{E}}MPTY-NUMDEF-CONSTRAINT-NEXT: {{\[\[#VARDEF: ==\]\]}} 203EMPTY-NUMDEF-CONSTRAINT-MSG-NEXT: {{^}} ^{{$}} 204 205; Numeric expressions with matching format overriding the implicit format of 206; variables defined on other lines. 207USE CONV FMT IMPL MATCH // CHECK-LABEL: USE CONV FMT IMPL MATCH 208b // CHECK-NEXT: {{^}}[[# %x, UNSI]] 209B // CHECK-NEXT: {{^}}[[# %X, UNSI]] 210-1 // CHECK-NEXT: {{^}}[[# %d, UNSI-12]] 21112 // CHECK-NEXT: {{^}}[[# %u, LHEX]] 212C // CHECK-NEXT: {{^}}[[# %X, LHEX]] 213-2 // CHECK-NEXT: {{^}}[[# %d, LHEX-14]] 21413 // CHECK-NEXT: {{^}}[[# %u, UHEX]] 215d // CHECK-NEXT: {{^}}[[# %x, UHEX]] 216-5 // CHECK-NEXT: {{^}}[[# %d, UHEX-18]] 21715 // CHECK-NEXT: {{^}}[[# %u, SIGN+45]] 218f // CHECK-NEXT: {{^}}[[# %x, SIGN+45]] 219F // CHECK-NEXT: {{^}}[[# %X, SIGN+45]] 220 221; Conflicting implicit format. 222RUN: %ProtectFileCheckOutput \ 223RUN: not FileCheck --check-prefixes CHECK,FMT-CONFLICT1 --input-file %s %s 2>&1 \ 224RUN: | FileCheck --strict-whitespace --check-prefix FMT-CONFLICT1-MSG %s 225RUN: %ProtectFileCheckOutput \ 226RUN: not FileCheck --check-prefixes CHECK,FMT-CONFLICT2 --input-file %s %s 2>&1 \ 227RUN: | FileCheck --strict-whitespace --check-prefix FMT-CONFLICT2-MSG %s 228 229VAR USE IMPL FMT CONFLICT 23023 231FMT-CONFLICT1-LABEL: VAR USE IMPL FMT CONFLICT 232FMT-CONFLICT1-NEXT: [[#UNSI + LHEX]] 233FMT-CONFLICT1-MSG: numeric-expression.txt:[[#@LINE-1]]:24: error: implicit format conflict between 'UNSI' (%u) and 'LHEX' (%x), need an explicit format specifier 234FMT-CONFLICT1-MSG-NEXT: {{F}}MT-CONFLICT1-NEXT: {{\[\[#UNSI \+ LHEX\]\]}} 235FMT-CONFLICT1-MSG-NEXT: {{^ \^$}} 236 237VAR USE IMPL FMT CONFLICT COMPLEX 23834 239FMT-CONFLICT2-LABEL: VAR USE IMPL FMT CONFLICT 240FMT-CONFLICT2-NEXT: [[#UNSI + UNSIa + LHEX]] 241FMT-CONFLICT2-MSG: numeric-expression.txt:[[#@LINE-1]]:24: error: implicit format conflict between 'UNSI + UNSIa' (%u) and 'LHEX' (%x), need an explicit format specifier 242FMT-CONFLICT2-MSG-NEXT: {{F}}MT-CONFLICT2-NEXT: {{\[\[#UNSI \+ UNSIa \+ LHEX\]\]}} 243FMT-CONFLICT2-MSG-NEXT: {{^ \^$}} 244 245; Explicitly specified format can override conflicting implicit formats. 246VAR USE IMPL OVERRIDE FMT CONFLICT // CHECK-LABEL: VAR USE IMPL OVERRIDE FMT CONFLICT 24723 // CHECK-NEXT: {{^}}[[# %u, UNSI + LHEX]] 248 249; Numeric expressions using more than one variable defined on other lines. 250USE MULTI VAR // CHECK-LABEL: USE MULTI VAR 25122 // CHECK-NEXT: {{^}}[[#UNSI+UNSIa]] 252 253; Numeric expression using a variable defined from a numeric expression. 254DEF EXPR GOOD MATCH // CHECK-LABEL: DEF EXPR GOOD MATCH 25542 // CHECK-NEXT: {{^}}[[# VAR42:UNSI+31]] 25641 // CHECK-NEXT: {{^}}[[# VAR42-1]] 257 258; Empty numeric expression. 259EMPTY NUM EXPR // CHECK-LABEL: EMPTY NUM EXPR 260foo 104 bar // CHECK-NEXT: {{^}}foo [[#]] bar 261 262; Numeric expressions using parentheses. 263RUN: %ProtectFileCheckOutput \ 264RUN: not FileCheck -D#NUMVAR=10 --check-prefix PAREN-OP \ 265RUN: --input-file %s %s 2>&1 \ 266RUN: | FileCheck --strict-whitespace --check-prefix PAREN-OP-MSG %s 267 268PAREN EXPRESSIONS // PAREN-OP-LABEL: PAREN EXPRESSIONS 26911 // PAREN-OP-NEXT: [[#(NUMVAR+2)-1]] 27011 // PAREN-OP-NEXT: [[#NUMVAR+(2-1)]] 27111 // PAREN-OP-NEXT: [[#NUMVAR+(2-1]] 272PAREN-OP-MSG: numeric-expression.txt:[[#@LINE-1]]:36: error: missing ')' at end of nested expression 273PAREN-OP-MSG-NEXT: {{P}}AREN-OP-NEXT: {{\[\[#NUMVAR\+\(2\-1]\]}} 274PAREN-OP-MSG-NEXT: {{^}} ^{{$}} 275 276; Numeric expression using undefined variables. 277RUN: %ProtectFileCheckOutput \ 278RUN: not FileCheck --check-prefix UNDEF-USE --input-file %s %s 2>&1 \ 279RUN: | FileCheck --strict-whitespace --check-prefix UNDEF-USE-MSG %s 280 281UNDEF VAR USE 282UNDEFVAR: 11 283UNDEF-USE-LABEL: UNDEF VAR USE 284UNDEF-USE-NEXT: UNDEFVAR: [[#UNDEFVAR1+UNDEFVAR2]] 285UNDEF-USE-MSG: numeric-expression.txt:[[#@LINE-1]]:17: error: {{U}}NDEF-USE-NEXT: expected string not found in input 286UNDEF-USE-MSG-NEXT: {{U}}NDEF-USE-NEXT: UNDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}} 287UNDEF-USE-MSG-NEXT: {{^}} ^{{$}} 288UNDEF-USE-MSG-NEXT: numeric-expression.txt:[[#@LINE-6]]:1: note: scanning from here 289UNDEF-USE-MSG-NEXT: UNDEFVAR: 11 290UNDEF-USE-MSG-NEXT: {{^}}^{{$}} 291UNDEF-USE-MSG-NEXT: numeric-expression.txt:[[#@LINE-9]]:1: note: uses undefined variable(s): "UNDEFVAR1" "UNDEFVAR2" 292UNDEF-USE-MSG-NEXT: UNDEFVAR: 11 293UNDEF-USE-MSG-NEXT: {{^}}^{{$}} 294 295; Numeric expression with unsupported operator. 296RUN: %ProtectFileCheckOutput \ 297RUN: not FileCheck -D#NUMVAR=10 --check-prefix INVAL-OP \ 298RUN: --input-file %s %s 2>&1 \ 299RUN: | FileCheck --strict-whitespace --check-prefix INVAL-OP-MSG %s 300 301INVALID OPERATOR 302NUMVAR*2: 22 303INVAL-OP-LABEL: INVALID OPERATOR 304INVAL-OP-NEXT: NUMVAR*2: [[#NUMVAR*2]] 305INVAL-OP-MSG: numeric-expression.txt:[[#@LINE-1]]:35: error: unsupported operation '*' 306INVAL-OP-MSG-NEXT: {{I}}NVAL-OP-NEXT: NUMVAR*2: {{\[\[#NUMVAR\*2\]\]}} 307INVAL-OP-MSG-NEXT: {{^}} ^{{$}} 308 309; Name conflict between Numeric variable definition and string variable 310; definition whether from the command-line or input text. 311RUN: %ProtectFileCheckOutput \ 312RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT1,CONFLICT2 \ 313RUN: --input-file %s %s 2>&1 \ 314RUN: | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s 315RUN: %ProtectFileCheckOutput \ 316RUN: not FileCheck -D#NUMVAR=42 --check-prefixes CONFLICT,CONFLICT2 \ 317RUN: --input-file %s %s 2>&1 \ 318RUN: | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s 319RUN: %ProtectFileCheckOutput \ 320RUN: not FileCheck -D#NUMVAR=42 -DNUMVAR=foobar --check-prefix CONFLICT \ 321RUN: --input-file %s %s 2>&1 \ 322RUN: | FileCheck --strict-whitespace --check-prefix CLI-STR-CONFLICT %s 323RUN: %ProtectFileCheckOutput \ 324RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT3,CONFLICT4 \ 325RUN: --input-file %s %s 2>&1 \ 326RUN: | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s 327RUN: %ProtectFileCheckOutput \ 328RUN: not FileCheck -DSTRVAR=foobar --check-prefixes CONFLICT,CONFLICT4 \ 329RUN: --input-file %s %s 2>&1 \ 330RUN: | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s 331RUN: %ProtectFileCheckOutput \ 332RUN: not FileCheck -DSTRVAR=foobar -D#STRVAR=42 --check-prefix CONFLICT \ 333RUN: --input-file %s %s 2>&1 \ 334RUN: | FileCheck --strict-whitespace --check-prefix CLI-NUM-CONFLICT %s 335 336STRVAR NUMVAR CONFLICT 337redef1 42 338foobar 339redef2 42 340CONFLICT-LABEL: STRVAR NUMVAR CONFLICT 341CONFLICT1-NEXT: redef1 [[#NUMVAR:]] 342CONFLICT2: [[NUMVAR:foo.*]] 343CONFLICT3: [[STRVAR:foo.*]] 344CONFLICT4: redef2 [[#STRVAR:]] 345INPUT-STR-CONFLICT: numeric-expression.txt:[[#@LINE-3]]:14: error: numeric variable with name 'NUMVAR' already exists 346INPUT-STR-CONFLICT-NEXT: {{C}}ONFLICT2: {{\[\[NUMVAR:foo\.\*\]\]}} 347INPUT-STR-CONFLICT-NEXT: {{^}} ^{{$}} 348CLI-STR-CONFLICT: Global defines:2:19: error: numeric variable with name 'NUMVAR' already exists 349CLI-STR-CONFLICT-NEXT: Global define #2: NUMVAR=foobar 350CLI-STR-CONFLICT-NEXT: {{^}} ^{{$}} 351INPUT-NUM-CONFLICT: numeric-expression.txt:[[#@LINE-7]]:22: error: string variable with name 'STRVAR' already exists 352 INPUT-NUM-CONFLICT-NEXT: CONFLICT4: redef2 {{\[\[#STRVAR:\]\]}} 353INPUT-NUM-CONFLICT-NEXT: {{^}} ^{{$}} 354CLI-NUM-CONFLICT: Global defines:2:45: error: string variable with name 'STRVAR' already exists 355 CLI-NUM-CONFLICT-NEXT: Global define #2: #STRVAR=42 (parsed as: {{\[\[#STRVAR:42\]\]}}) 356CLI-NUM-CONFLICT-NEXT: {{^}} ^{{$}} 357 358; Numeric variable definition with too big value. 359RUN: %ProtectFileCheckOutput \ 360RUN: not FileCheck --check-prefix BIGVAL --input-file %s %s 2>&1 \ 361RUN: | FileCheck --strict-whitespace --check-prefix BIGVAL-MSG %s 362 363BIG VALUE 364NUMVAR: 10000000000000000000000 365BIGVAL-LABEL: BIG VALUE 366BIGVAL-NEXT: NUMVAR: [[#NUMVAR:]] 367BIGVAL-MSG: numeric-expression.txt:[[#@LINE-3]]:9: error: unable to represent numeric value 368 BIGVAL-MSG-NEXT: {{N}}UMVAR: 10000000000000000000000 369BIGVAL-MSG-NEXT: {{^}} ^{{$}} 370 371; Verify that when a variable is set to an expression the expression is still 372; checked. 373RUN: %ProtectFileCheckOutput \ 374RUN: not FileCheck --check-prefix DEF-EXPR-FAIL --input-file %s %s 2>&1 \ 375RUN: | FileCheck --strict-whitespace --check-prefix DEF-EXPR-FAIL-MSG %s 376 377DEF EXPR WRONG MATCH 37820 37943 380DEF-EXPR-FAIL-LABEL: DEF EXPR WRONG MATCH 381DEF-EXPR-FAIL-NEXT: [[# VAR20:]] 382DEF-EXPR-FAIL-NEXT: [[# VAR42: VAR20+22]] 383DEF-EXPR-FAIL-MSG: numeric-expression.txt:[[#@LINE-1]]:21: error: {{D}}EF-EXPR-FAIL-NEXT: is not on the line after the previous match 384DEF-EXPR-FAIL-MSG-NEXT: {{D}}EF-EXPR-FAIL-NEXT: {{\[\[# VAR42: VAR20\+22\]\]}} 385DEF-EXPR-FAIL-MSG-NEXT: {{^}} ^{{$}} 386 387; Verify that using a numeric variable defined on the same line (whether from 388; input or from an expression) is rejected. 389RUN: %ProtectFileCheckOutput \ 390RUN: not FileCheck --check-prefix SAME-LINE-USE1 --input-file %s %s 2>&1 \ 391RUN: | FileCheck --strict-whitespace --check-prefix SAME-LINE-USE-MSG1 %s 392RUN: %ProtectFileCheckOutput \ 393RUN: not FileCheck --check-prefix SAME-LINE-USE2 --input-file %s %s 2>&1 \ 394RUN: | FileCheck --strict-whitespace --check-prefix SAME-LINE-USE-MSG2 %s 395 396SAME LINE USE 3973 3984 5 399SAME-LINE-USE1-LABEL: SAME LINE USE 400SAME-LINE-USE1-NEXT: [[#]] 401SAME-LINE-USE1-NEXT: [[#UNSI:]] [[#UNSI+1]] 402SAME-LINE-USE-MSG1: numeric-expression.txt:[[#@LINE-1]]:36: error: numeric variable 'UNSI' defined earlier in the same CHECK directive 403SAME-LINE-USE-MSG1-NEXT: {{S}}AME-LINE-USE1-NEXT: {{\[\[#UNSI:\]\] \[\[#UNSI\+1\]\]}} 404SAME-LINE-USE-MSG1-NEXT: {{^}} ^{{$}} 405 406SAME-LINE-USE2-LABEL: SAME LINE USE 407SAME-LINE-USE2-NEXT: [[#UNSI:]] 408SAME-LINE-USE2-NEXT: [[#UNSI2:UNSI+1]] [[#UNSI2+1]] 409SAME-LINE-USE-MSG2: numeric-expression.txt:[[#@LINE-1]]:43: error: numeric variable 'UNSI2' defined earlier in the same CHECK directive 410SAME-LINE-USE-MSG2-NEXT: {{S}}AME-LINE-USE2-NEXT: {{\[\[#UNSI2:UNSI\+1\]\] \[\[#UNSI2\+1\]\]}} 411SAME-LINE-USE-MSG2-NEXT: {{^}} ^{{$}} 412 413; Invalid change of format in variable redefinition. 414RUN: %ProtectFileCheckOutput \ 415RUN: not FileCheck --check-prefix REDEF-NEW-FMT --input-file %s %s 2>&1 \ 416RUN: | FileCheck --strict-whitespace --check-prefix REDEF-NEW-FMT-MSG %s 417 418VAR REDEF FMT CHANGE 41922 420DC 421REDEF-NEW-FMT-LABEL: VAR REDEF FMT CHANGE 422REDEF-NEW-FMT-NEXT: [[#UNSI:]] 423REDEF-NEW-FMT-NEXT: [[#%X,UNSI:]] 424REDEF-NEW-FMT-MSG: numeric-expression.txt:[[#@LINE-1]]:31: error: format different from previous variable definition 425REDEF-NEW-FMT-MSG-NEXT: {{R}}EDEF-NEW-FMT-NEXT: {{\[\[#%X,UNSI:\]\]}} 426REDEF-NEW-FMT-MSG-NEXT: {{^}} ^{{$}} 427 428; Numeric expression with overflow. 429RUN: %ProtectFileCheckOutput \ 430RUN: not FileCheck --check-prefix OVERFLOW --input-file %s %s 2>&1 \ 431RUN: | FileCheck --check-prefix OVERFLOW-MSG --strict-whitespace %s 432 433OVERFLOW 434BIGVAR=10000000000000000 435OVERFLOW-LABEL: OVERFLOW 436OVERFLOW-NEXT: BIGVAR: [[#BIGVAR:0x8000000000000000+0x8000000000000000]] 437OVERFLOW-MSG: numeric-expression.txt:[[#@LINE-1]]:27: error: unable to substitute variable or numeric expression 438OVERFLOW-MSG-NEXT: {{O}}VERFLOW-NEXT: BIGVAR: {{\[\[#BIGVAR:0x8000000000000000\+0x8000000000000000\]\]}} 439OVERFLOW-MSG-NEXT: {{^}} ^{{$}} 440 441; Numeric expression with underflow. 442RUN: %ProtectFileCheckOutput \ 443RUN: not FileCheck --check-prefix UNDERFLOW --input-file %s %s 2>&1 \ 444RUN: | FileCheck --check-prefix UNDERFLOW-MSG --strict-whitespace %s 445 446UNDERFLOW 447TINYVAR=-10000000000000000 448UNDERFLOW-LABEL: UNDERFLOW 449UNDERFLOW-NEXT: TINYVAR: [[#%d,TINYVAR:-0x8000000000000000-0x8000000000000000]] 450UNDERFLOW-MSG: numeric-expression.txt:[[#@LINE-1]]:29: error: unable to substitute variable or numeric expression 451UNDERFLOW-MSG-NEXT: {{U}}NDERFLOW-NEXT: TINYVAR: {{\[\[#%d,TINYVAR:-0x8000000000000000-0x8000000000000000\]\]}} 452UNDERFLOW-MSG-NEXT: {{^}} ^{{$}} 453 454RUN: %ProtectFileCheckOutput \ 455RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-MISSING-CLOSING-BRACKET --input-file %s %s 2>&1 \ 456RUN: | FileCheck --strict-whitespace --check-prefix CALL-MISSING-CLOSING-BRACKET-MSG %s 457 458CALL MISSING CLOSING BRACKET 45930 460CALL-MISSING-CLOSING-BRACKET-LABEL: CALL MISSING CLOSING BRACKET 461CALL-MISSING-CLOSING-BRACKET-NEXT: [[#add(NUMVAR,3]] 462CALL-MISSING-CLOSING-BRACKET-MSG: numeric-expression.txt:[[#@LINE-1]]:51: error: missing ')' at end of call expression 463CALL-MISSING-CLOSING-BRACKET-MSG-NEXT: {{C}}ALL-MISSING-CLOSING-BRACKET-NEXT: {{\[\[#add\(NUMVAR,3\]\]}} 464CALL-MISSING-CLOSING-BRACKET-MSG-NEXT: {{^}} ^{{$}} 465 466RUN: %ProtectFileCheckOutput \ 467RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-MISSING-ARGUMENT --input-file %s %s 2>&1 \ 468RUN: | FileCheck --strict-whitespace --check-prefix CALL-MISSING-ARGUMENT-MSG %s 469 470CALL MISSING ARGUMENT 47130 472CALL-MISSING-ARGUMENT-LABEL: CALL MISSING ARGUMENT 473CALL-MISSING-ARGUMENT-NEXT: [[#add(NUMVAR,)]] 474CALL-MISSING-ARGUMENT-MSG: numeric-expression.txt:[[#@LINE-1]]:43: error: missing argument 475CALL-MISSING-ARGUMENT-MSG-NEXT: {{C}}ALL-MISSING-ARGUMENT-NEXT: {{\[\[#add\(NUMVAR,\)\]\]}} 476CALL-MISSING-ARGUMENT-MSG-NEXT: {{^}} ^{{$}} 477 478RUN: %ProtectFileCheckOutput \ 479RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-WRONG-ARGUMENT-COUNT --input-file %s %s 2>&1 \ 480RUN: | FileCheck --strict-whitespace --check-prefix CALL-WRONG-ARGUMENT-COUNT-MSG %s 481 482CALL WRONG ARGUMENT COUNT 48330 484CALL-WRONG-ARGUMENT-COUNT-LABEL: CALL WRONG ARGUMENT COUNT 485CALL-WRONG-ARGUMENT-COUNT-NEXT: [[#add(NUMVAR)]] 486CALL-WRONG-ARGUMENT-COUNT-MSG: numeric-expression.txt:[[#@LINE-1]]:36: error: function 'add' takes 2 arguments but 1 given 487CALL-WRONG-ARGUMENT-COUNT-MSG-NEXT: {{C}}ALL-WRONG-ARGUMENT-COUNT-NEXT: {{\[\[#add\(NUMVAR\)\]\]}} 488CALL-WRONG-ARGUMENT-COUNT-MSG-NEXT: {{^}} ^{{$}} 489 490RUN: %ProtectFileCheckOutput \ 491RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-UNDEFINED-FUNCTION --input-file %s %s 2>&1 \ 492RUN: | FileCheck --strict-whitespace --check-prefix CALL-UNDEFINED-FUNCTION-MSG %s 493 494CALL UNDEFINED FUNCTION 49530 496CALL-UNDEFINED-FUNCTION-LABEL: CALL UNDEFINED FUNCTION 497CALL-UNDEFINED-FUNCTION-NEXT: [[#bogus_function(NUMVAR)]] 498CALL-UNDEFINED-FUNCTION-MSG: numeric-expression.txt:[[#@LINE-1]]:34: error: call to undefined function 'bogus_function' 499CALL-UNDEFINED-FUNCTION-MSG-NEXT: {{C}}ALL-UNDEFINED-FUNCTION-NEXT: {{\[\[#bogus_function\(NUMVAR\)\]\]}} 500CALL-UNDEFINED-FUNCTION-MSG-NEXT: {{^}} ^{{$}} 501