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 with precision specifier. 53DEF PREC FMT // CHECK-LABEL: DEF PREC FMT 5400000022 // CHECK-NEXT: {{^}}[[#%.8,PADDED_UNSI:]] 55323232323 // CHECK-NEXT: {{^}}[[#%.8,PADDED_UNSI2:]] 5600000018 // CHECK-NEXT: {{^}}[[#%.8u,PADDED_UNSI3:]] 57181818181 // CHECK-NEXT: {{^}}[[#%.8u,PADDED_UNSI4:]] 580000000f // CHECK-NEXT: {{^}}[[#%.8x,PADDED_LHEX:]] 59fffffffff // CHECK-NEXT: {{^}}[[#%.8x,PADDED_LHEX2:]] 600000000E // CHECK-NEXT: {{^}}[[#%.8X,PADDED_UHEX:]] 61EEEEEEEEE // CHECK-NEXT: {{^}}[[#%.8X,PADDED_UHEX2:]] 62-00000055 // CHECK-NEXT: {{^}}[[#%.8d,PADDED_SIGN:]] 63-555555555 // CHECK-NEXT: {{^}}[[#%.8d,PADDED_SIGN2:]] 64 65; Numeric variable definition with precision specifier with value not padded 66; enough. 67RUN: FileCheck --check-prefix INVALID-PADDING-DEF --input-file %s %s 68 69FAIL DEF PREC FMT // INVALID-PADDING-DEF-LABEL: FAIL DEF PREC FMT 70INVALID_PADDED_UNSI: 0000022 // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_UNSI: [[#%.8,INVALID_PADDED_UNSI:]] 71INVALID_PADDED_UNSI2: 0000018 // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_UNSI2: [[#%.8u,INVALID_PADDED_UNSI2:]] 72INVALID_PADDED_LHEX: 000000f // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_LHEX: [[#%.8x,INVALID_PADDED_LHEX:]] 73INVALID_PADDED_UHEX: 000000E // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_UHEX: [[#%.8X,INVALID_PADDED_UHEX:]] 74INVALID_PADDED_SIGN: -0000055 // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_SIGN: [[#%.8d,INVALID_PADDED_SIGN:]] 75 76; Numeric expressions with explicit matching format and default matching rule 77; using variables defined on other lines without spaces. 78USE EXPL FMT IMPL MATCH // CHECK-LABEL: USE EXPL FMT IMPL MATCH 7911 // CHECK-NEXT: {{^}}[[#%u,UNSI]] 8012 // CHECK-NEXT: {{^}}[[#%u,UNSI+1]] 8110 // CHECK-NEXT: {{^}}[[#%u,UNSI-1]] 8215 // CHECK-NEXT: {{^}}[[#%u,add(UNSI,4)]] 8311 // CHECK-NEXT: {{^}}[[#%u,max(UNSI,7)]] 8499 // CHECK-NEXT: {{^}}[[#%u,max(UNSI,99)]] 857 // CHECK-NEXT: {{^}}[[#%u,min(UNSI,7)]] 8611 // CHECK-NEXT: {{^}}[[#%u,min(UNSI,99)]] 878 // CHECK-NEXT: {{^}}[[#%u,sub(UNSI,3)]] 88c // CHECK-NEXT: {{^}}[[#%x,LHEX]] 89d // CHECK-NEXT: {{^}}[[#%x,LHEX+1]] 90b // CHECK-NEXT: {{^}}[[#%x,LHEX-1]] 911a // CHECK-NEXT: {{^}}[[#%x,LHEX+0xe]] 921a // CHECK-NEXT: {{^}}[[#%x,LHEX+0xE]] 93e // CHECK-NEXT: {{^}}[[#%x,add(LHEX,2)]] 94ff // CHECK-NEXT: {{^}}[[#%x,max(LHEX,0xff)]] 95a // CHECK-NEXT: {{^}}[[#%x,min(LHEX,0xa)]] 96a // CHECK-NEXT: {{^}}[[#%x,sub(LHEX,2)]] 97D // CHECK-NEXT: {{^}}[[#%X,UHEX]] 98E // CHECK-NEXT: {{^}}[[#%X,UHEX+1]] 99C // CHECK-NEXT: {{^}}[[#%X,UHEX-1]] 1001B // CHECK-NEXT: {{^}}[[#%X,UHEX+0xe]] 1011B // CHECK-NEXT: {{^}}[[#%X,UHEX+0xE]] 102F // CHECK-NEXT: {{^}}[[#%X,add(UHEX,2)]] 103FF // CHECK-NEXT: {{^}}[[#%X,max(UHEX,0xff)]] 104A // CHECK-NEXT: {{^}}[[#%X,min(UHEX,0xa)]] 105B // CHECK-NEXT: {{^}}[[#%X,sub(UHEX,2)]] 106-30 // CHECK-NEXT: {{^}}[[#%d,SIGN]] 107-29 // CHECK-NEXT: {{^}}[[#%d,SIGN+1]] 108-31 // CHECK-NEXT: {{^}}[[#%d,SIGN-1]] 10942 // CHECK-NEXT: {{^}}[[#%d,SIGN+72]] 110-29 // CHECK-NEXT: {{^}}[[#%d,add(SIGN,1)]] 111-17 // CHECK-NEXT: {{^}}[[#%d,max(SIGN,-17)]] 112-30 // CHECK-NEXT: {{^}}[[#%d,min(SIGN,-17)]] 113-31 // CHECK-NEXT: {{^}}[[#%d,sub(SIGN,1)]] 11411 // CHECK-NEXT: {{^}}[[#%u,UNSIa]] 11511 // CHECK-NEXT: {{^}}[[#%u,UNSIb]] 11611 // CHECK-NEXT: {{^}}[[#%u,UNSIc]] 117c // CHECK-NEXT: {{^}}[[#%x,LHEXa]] 118 119; Numeric expressions with explicit matching format and default matching rule 120; using variables defined on other lines with different spacing. 121USE EXPL FMT IMPL MATCH SPC // CHECK-LABEL: USE EXPL FMT IMPL MATCH SPC 12211 // CHECK-NEXT: {{^}}[[#%u, UNSI]] 12311 // CHECK-NEXT: {{^}}[[# %u, UNSI]] 12411 // CHECK-NEXT: {{^}}[[# %u, UNSI ]] 12512 // CHECK-NEXT: {{^}}[[#%u, UNSI+1]] 12612 // CHECK-NEXT: {{^}}[[# %u, UNSI+1]] 12712 // CHECK-NEXT: {{^}}[[# %u , UNSI+1]] 12812 // CHECK-NEXT: {{^}}[[# %u , UNSI +1]] 12912 // CHECK-NEXT: {{^}}[[# %u , UNSI + 1]] 13012 // CHECK-NEXT: {{^}}[[# %u , UNSI + 1 ]] 13110 // CHECK-NEXT: {{^}}[[#%u, UNSI-1]] 13210 // CHECK-NEXT: {{^}}[[# %u, UNSI-1]] 13310 // CHECK-NEXT: {{^}}[[# %u , UNSI-1]] 13410 // CHECK-NEXT: {{^}}[[# %u , UNSI -1]] 13510 // CHECK-NEXT: {{^}}[[# %u , UNSI - 1]] 13610 // CHECK-NEXT: {{^}}[[# %u , UNSI - 1 ]] 13713 // CHECK-NEXT: {{^}}[[#%u, add(UNSI,2)]] 13813 // CHECK-NEXT: {{^}}[[# %u, add(UNSI,2)]] 13913 // CHECK-NEXT: {{^}}[[# %u , add(UNSI,2)]] 14013 // CHECK-NEXT: {{^}}[[# %u , add(UNSI, 2)]] 14113 // CHECK-NEXT: {{^}}[[# %u , add( UNSI, 2)]] 14213 // CHECK-NEXT: {{^}}[[# %u , add( UNSI,2)]] 14313 // CHECK-NEXT: {{^}}[[# %u , add(UNSI,2) ]] 14413 // CHECK-NEXT: {{^}}[[# %u , add (UNSI,2)]] 145104 // CHECK-NEXT: {{^}}[[# %u , UNSI + sub( add (100 , UNSI+ 1 ), 20) +1 ]] 146 147; Numeric expressions with explicit matching format, precision, and default 148; matching rule using variables defined on other lines without spaces. 149USE EXPL FMT WITH PREC IMPL MATCH // CHECK-LABEL: USE EXPL FMT WITH PREC IMPL MATCH 15011 // CHECK-NEXT: {{^}}[[#%.1u,UNSI]] 15100000011 // CHECK-NEXT: {{^}}[[#%.8u,UNSI]] 1521c // CHECK-NEXT: {{^}}[[#%.1x,LHEX+16]] 1530000000c // CHECK-NEXT: {{^}}[[#%.8x,LHEX]] 1541D // CHECK-NEXT: {{^}}[[#%.1X,UHEX+16]] 1550000000D // CHECK-NEXT: {{^}}[[#%.8X,UHEX]] 156-30 // CHECK-NEXT: {{^}}[[#%.1d,SIGN]] 157-00000030 // CHECK-NEXT: {{^}}[[#%.8d,SIGN]] 158 159; Numeric expressions with explicit matching format, precision and wrong 160; padding, and default matching rule using variables defined on other lines 161; without spaces. 162RUN: FileCheck --check-prefixes CHECK,INVALID-PADDING-EXPL-USE --input-file %s %s 163 164FAIL USE IMPL FMT WITH PREC EXPL MATCH // INVALID-PADDING-EXPL-USE-LABEL: FAIL USE IMPL FMT WITH PREC IMPL MATCH 165INVALID UNSI+1: 0000012 // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UNSI+1: [[#%.8u,UNSI+1]] 166INVALID UNSI-1: 000000010 // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UNSI-1: [[#%.8u,UNSI-1]] 167INVALID LHEX+1: 000000d // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID LHEX+1: [[#%.8x,LHEX+1]] 168INVALID LHEX-1: 00000000b // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID LHEX-1: [[#%.8x,LHEX-1]] 169INVALID UHEX+1: 000000E // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UHEX+1: [[#%.8X,UHEX+1]] 170INVALID UHEX-1: 00000000C // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UHEX-1: [[#%.8X,UHEX-1]] 171INVALID SIGN+1: -0000029 // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID SIGN+1: [[#%.8d,SIGN+1]] 172INVALID SIGN-1: -000000031 // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID SIGN-1: [[#%.8d,SIGN-1]] 173 174; Numeric expressions with implicit matching format and default matching rule 175; using variables defined on other lines. 176USE IMPL FMT IMPL MATCH // CHECK-LABEL: USE IMPL FMT IMPL MATCH 17711 // CHECK-NEXT: {{^}}[[#UNSI]] 17812 // CHECK-NEXT: {{^}}[[#UNSI+1]] 17910 // CHECK-NEXT: {{^}}[[#UNSI-1]] 18099 // CHECK-NEXT: {{^}}[[#max(UNSI,99)]] 1817 // CHECK-NEXT: {{^}}[[#min(UNSI,7)]] 182c // CHECK-NEXT: {{^}}[[#LHEX]] 183d // CHECK-NEXT: {{^}}[[#LHEX+1]] 184b // CHECK-NEXT: {{^}}[[#LHEX-1]] 1851a // CHECK-NEXT: {{^}}[[#LHEX+0xe]] 1861a // CHECK-NEXT: {{^}}[[#LHEX+0xE]] 187ff // CHECK-NEXT: {{^}}[[#max(LHEX,255)]] 188a // CHECK-NEXT: {{^}}[[#min(LHEX,10)]] 189D // CHECK-NEXT: {{^}}[[#UHEX]] 190E // CHECK-NEXT: {{^}}[[#UHEX+1]] 191C // CHECK-NEXT: {{^}}[[#UHEX-1]] 1921B // CHECK-NEXT: {{^}}[[#UHEX+0xe]] 1931B // CHECK-NEXT: {{^}}[[#UHEX+0xE]] 194FF // CHECK-NEXT: {{^}}[[#max(UHEX,255)]] 195A // CHECK-NEXT: {{^}}[[#min(UHEX,10)]] 196-30 // CHECK-NEXT: {{^}}[[#SIGN]] 197-29 // CHECK-NEXT: {{^}}[[#SIGN+1]] 198-31 // CHECK-NEXT: {{^}}[[#SIGN-1]] 199 200; Numeric expressions with implicit matching format, precision, and default 201; matching rule using variables defined on other lines. 202USE IMPL FMT WITH PREC IMPL MATCH // CHECK-LABEL: USE IMPL FMT WITH PREC IMPL MATCH 20300000023 // CHECK-NEXT: {{^}}[[#PADDED_UNSI+1]] 204323232324 // CHECK-NEXT: {{^}}[[#PADDED_UNSI2+1]] 20500000019 // CHECK-NEXT: {{^}}[[#PADDED_UNSI3+1]] 206181818182 // CHECK-NEXT: {{^}}[[#PADDED_UNSI4+1]] 20700000010 // CHECK-NEXT: {{^}}[[#PADDED_LHEX+1]] 2081000000000 // CHECK-NEXT: {{^}}[[#PADDED_LHEX2+1]] 2090000000F // CHECK-NEXT: {{^}}[[#PADDED_UHEX+1]] 210EEEEEEEEF // CHECK-NEXT: {{^}}[[#PADDED_UHEX2+1]] 211-00000054 // CHECK-NEXT: {{^}}[[#PADDED_SIGN+1]] 212-555555554 // CHECK-NEXT: {{^}}[[#PADDED_SIGN2+1]] 213 214; Numeric expression with implicit matching format, precision and wrong amount 215; of padding, and default matching rule using variables defined on other lines. 216RUN: FileCheck --check-prefixes CHECK,INVALID-PADDING-IMPL-USE --input-file %s %s 217 218FAIL USE IMPL FMT WITH PREC IMPL MATCH // INVALID-PADDING-IMPL-USE-LABEL: FAIL USE IMPL FMT WITH PREC IMPL MATCH 219INVALID PADDED_UNSI+1: 0000023 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI+1: [[#PADDED_UNSI+1]] 220INVALID PADDED_UNSI-1: 000000021 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI-1: [[#PADDED_UNSI-1]] 221INVALID PADDED_UNSI3+1: 0000019 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI3+1: [[#PADDED_UNSI3+1]] 222INVALID PADDED_UNSI3-1: 000000017 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI3-1: [[#PADDED_UNSI3-1]] 223INVALID PADDED_LHEX+1: 0000010 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_LHEX+1: [[#PADDED_LHEX+1]] 224INVALID PADDED_LHEX-1: 00000000e // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_LHEX-1: [[#PADDED_LHEX-1]] 225INVALID PADDED_UHEX+1: 000000F // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UHEX+1: [[#PADDED_UHEX+1]] 226INVALID PADDED_UHEX-1: 00000000D // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UHEX-1: [[#PADDED_UHEX-1]] 227INVALID PADDED_SIGN+1: -0000054 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_SIGN+1: [[#PADDED_SIGN+1]] 228INVALID PADDED_SIGN-1: -000000056 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_SIGN-1: [[#PADDED_SIGN-1]] 229 230; Numeric expressions using variables defined on other lines and an immediate 231; interpreted as an unsigned value. 232; Note: 9223372036854775819 = 0x8000000000000000 + 11 233USE IMPL FMT IMPL MATCH UNSIGNED IMM 2349223372036854775819 235CHECK-LABEL: USE IMPL FMT IMPL MATCH UNSIGNED IMM 236CHECK-NEXT: [[#UNSI+0x8000000000000000]] 237 238; Numeric expressions in default matching format and explicit matching rule using 239; variables defined on other lines. 240USE DEF FMT EXPL MATCH // CHECK-LABEL: USE DEF FMT EXPL MATCH 24111 // CHECK-NEXT: {{^}}[[#==UNSI]] 24211 // CHECK-NEXT: {{^}}[[# == UNSI]] 24312 // CHECK-NEXT: {{^}}[[#UNSI2: == UNSI + 1]] 24412 // CHECK-NEXT: {{^}}[[#==UNSI2]] 245 246; Numeric expressions in default matching format and explicit matching rule using 247; variable defined on other lines with match failure. 248RUN: %ProtectFileCheckOutput \ 249RUN: not FileCheck --check-prefix NUMEXPR-CONSTRAINT-NOMATCH --input-file %s %s 2>&1 \ 250RUN: | FileCheck --check-prefix NUMEXPR-CONSTRAINT-NOMATCH-MSG --strict-whitespace %s 251 252USE DEF FMT EXPL NO MATCH 253UNSI=11 254UNSI: 12 255NUMEXPR-CONSTRAINT-NOMATCH-LABEL: USE DEF FMT EXPL NO MATCH 256NUMEXPR-CONSTRAINT-NOMATCH-NEXT: UNSI=[[#UNSI:]] 257NUMEXPR-CONSTRAINT-NOMATCH-NEXT: UNSI: [[#==UNSI]] 258NUMEXPR-CONSTRAINT-NOMATCH-MSG: numeric-expression.txt:[[#@LINE-1]]:34: error: {{N}}UMEXPR-CONSTRAINT-NOMATCH-NEXT: expected string not found in input 259NUMEXPR-CONSTRAINT-NOMATCH-MSG-NEXT: {{N}}UMEXPR-CONSTRAINT-NOMATCH-NEXT: UNSI: {{\[\[#==UNSI\]\]}} 260NUMEXPR-CONSTRAINT-NOMATCH-MSG-NEXT: {{^}} ^{{$}} 261 262; Empty numeric expression with matching constraint. 263RUN: %ProtectFileCheckOutput \ 264RUN: not FileCheck --check-prefix EMPTY-NUMEXPR-CONSTRAINT --input-file %s %s 2>&1 \ 265RUN: | FileCheck --check-prefix EMPTY-NUMEXPR-CONSTRAINT-MSG --strict-whitespace %s 266 267EMPTY NUMEXPR USE WITH CONSTRAINT 26818 269EMPTY-NUMEXPR-CONSTRAINT-LABEL: EMPTY NUMEXPR USE WITH CONSTRAINT 270EMPTY-NUMEXPR-CONSTRAINT-NEXT: [[# ==]] 271EMPTY-NUMEXPR-CONSTRAINT-MSG: numeric-expression.txt:[[#@LINE-1]]:38: error: empty numeric expression should not have a constraint 272EMPTY-NUMEXPR-CONSTRAINT-MSG-NEXT: {{E}}MPTY-NUMEXPR-CONSTRAINT-NEXT: {{\[\[# ==\]\]}} 273EMPTY-NUMEXPR-CONSTRAINT-MSG-NEXT: {{^}} ^{{$}} 274 275; Definition from empty numeric expression with matching constraint. 276RUN: %ProtectFileCheckOutput \ 277RUN: not FileCheck --check-prefix EMPTY-NUMDEF-CONSTRAINT --input-file %s %s 2>&1 \ 278RUN: | FileCheck --check-prefix EMPTY-NUMDEF-CONSTRAINT-MSG %s 279 280EMPTY NUMEXPR DEF WITH CONSTRAINT 28118 282EMPTY-NUMDEF-CONSTRAINT-LABEL: EMPTY NUMEXPR CONSTRAINT 283EMPTY-NUMDEF-CONSTRAINT-NEXT: [[#VARDEF: ==]] 284EMPTY-NUMDEF-CONSTRAINT-MSG: numeric-expression.txt:[[#@LINE-1]]:44: error: empty numeric expression should not have a constraint 285EMPTY-NUMDEF-CONSTRAINT-MSG-NEXT: {{E}}MPTY-NUMDEF-CONSTRAINT-NEXT: {{\[\[#VARDEF: ==\]\]}} 286EMPTY-NUMDEF-CONSTRAINT-MSG-NEXT: {{^}} ^{{$}} 287 288; Numeric expressions with matching format overriding the implicit format of 289; variables defined on other lines. 290USE CONV FMT IMPL MATCH // CHECK-LABEL: USE CONV FMT IMPL MATCH 291b // CHECK-NEXT: {{^}}[[# %x, UNSI]] 292B // CHECK-NEXT: {{^}}[[# %X, UNSI]] 293-1 // CHECK-NEXT: {{^}}[[# %d, UNSI-12]] 29412 // CHECK-NEXT: {{^}}[[# %u, LHEX]] 295C // CHECK-NEXT: {{^}}[[# %X, LHEX]] 296-2 // CHECK-NEXT: {{^}}[[# %d, LHEX-14]] 29713 // CHECK-NEXT: {{^}}[[# %u, UHEX]] 298d // CHECK-NEXT: {{^}}[[# %x, UHEX]] 299-5 // CHECK-NEXT: {{^}}[[# %d, UHEX-18]] 30015 // CHECK-NEXT: {{^}}[[# %u, SIGN+45]] 301f // CHECK-NEXT: {{^}}[[# %x, SIGN+45]] 302F // CHECK-NEXT: {{^}}[[# %X, SIGN+45]] 303 304; Conflicting implicit format. 305RUN: %ProtectFileCheckOutput \ 306RUN: not FileCheck --check-prefixes CHECK,FMT-CONFLICT1 --input-file %s %s 2>&1 \ 307RUN: | FileCheck --strict-whitespace --check-prefix FMT-CONFLICT1-MSG %s 308RUN: %ProtectFileCheckOutput \ 309RUN: not FileCheck --check-prefixes CHECK,FMT-CONFLICT2 --input-file %s %s 2>&1 \ 310RUN: | FileCheck --strict-whitespace --check-prefix FMT-CONFLICT2-MSG %s 311 312VAR USE IMPL FMT CONFLICT 31323 314FMT-CONFLICT1-LABEL: VAR USE IMPL FMT CONFLICT 315FMT-CONFLICT1-NEXT: [[#UNSI + LHEX]] 316FMT-CONFLICT1-MSG: numeric-expression.txt:[[#@LINE-1]]:24: error: implicit format conflict between 'UNSI' (%u) and 'LHEX' (%x), need an explicit format specifier 317FMT-CONFLICT1-MSG-NEXT: {{F}}MT-CONFLICT1-NEXT: {{\[\[#UNSI \+ LHEX\]\]}} 318FMT-CONFLICT1-MSG-NEXT: {{^ \^$}} 319 320VAR USE IMPL FMT CONFLICT COMPLEX 32134 322FMT-CONFLICT2-LABEL: VAR USE IMPL FMT CONFLICT 323FMT-CONFLICT2-NEXT: [[#UNSI + UNSIa + LHEX]] 324FMT-CONFLICT2-MSG: numeric-expression.txt:[[#@LINE-1]]:24: error: implicit format conflict between 'UNSI + UNSIa' (%u) and 'LHEX' (%x), need an explicit format specifier 325FMT-CONFLICT2-MSG-NEXT: {{F}}MT-CONFLICT2-NEXT: {{\[\[#UNSI \+ UNSIa \+ LHEX\]\]}} 326FMT-CONFLICT2-MSG-NEXT: {{^ \^$}} 327 328; Explicitly specified format can override conflicting implicit formats. 329VAR USE IMPL OVERRIDE FMT CONFLICT // CHECK-LABEL: VAR USE IMPL OVERRIDE FMT CONFLICT 33023 // CHECK-NEXT: {{^}}[[# %u, UNSI + LHEX]] 331 332; Numeric expressions using more than one variable defined on other lines. 333USE MULTI VAR // CHECK-LABEL: USE MULTI VAR 33422 // CHECK-NEXT: {{^}}[[#UNSI+UNSIa]] 335 336; Numeric expression using a variable defined from a numeric expression. 337DEF EXPR GOOD MATCH // CHECK-LABEL: DEF EXPR GOOD MATCH 33842 // CHECK-NEXT: {{^}}[[# VAR42:UNSI+31]] 33941 // CHECK-NEXT: {{^}}[[# VAR42-1]] 340 341; Empty numeric expression. 342EMPTY NUM EXPR // CHECK-LABEL: EMPTY NUM EXPR 343foo 104 bar // CHECK-NEXT: {{^}}foo [[#]] bar 344 345; Numeric expressions using parentheses. 346RUN: %ProtectFileCheckOutput \ 347RUN: not FileCheck -D#NUMVAR=10 --check-prefix PAREN-OP \ 348RUN: --input-file %s %s 2>&1 \ 349RUN: | FileCheck --strict-whitespace --check-prefix PAREN-OP-MSG %s 350 351PAREN EXPRESSIONS // PAREN-OP-LABEL: PAREN EXPRESSIONS 35211 // PAREN-OP-NEXT: [[#(NUMVAR+2)-1]] 35311 // PAREN-OP-NEXT: [[#NUMVAR+(2-1)]] 35411 // PAREN-OP-NEXT: [[#NUMVAR+(2-1]] 355PAREN-OP-MSG: numeric-expression.txt:[[#@LINE-1]]:36: error: missing ')' at end of nested expression 356PAREN-OP-MSG-NEXT: {{P}}AREN-OP-NEXT: {{\[\[#NUMVAR\+\(2\-1]\]}} 357PAREN-OP-MSG-NEXT: {{^}} ^{{$}} 358 359; Numeric expression using undefined variables. 360RUN: %ProtectFileCheckOutput \ 361RUN: not FileCheck --check-prefix UNDEF-USE --input-file %s %s 2>&1 \ 362RUN: | FileCheck --strict-whitespace --check-prefix UNDEF-USE-MSG %s 363 364UNDEF VAR USE 365UNDEFVAR: 11 366UNDEF-USE-LABEL: UNDEF VAR USE 367UNDEF-USE-NEXT: UNDEFVAR: [[#UNDEFVAR1+UNDEFVAR2]] 368UNDEF-USE-MSG: numeric-expression.txt:[[#@LINE-1]]:17: error: {{U}}NDEF-USE-NEXT: expected string not found in input 369UNDEF-USE-MSG-NEXT: {{U}}NDEF-USE-NEXT: UNDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}} 370UNDEF-USE-MSG-NEXT: {{^}} ^{{$}} 371UNDEF-USE-MSG-NEXT: numeric-expression.txt:[[#@LINE-7]]:14: note: scanning from here 372UNDEF-USE-MSG-NEXT: UNDEF VAR USE 373UNDEF-USE-MSG-NEXT: {{^}} ^{{$}} 374UNDEF-USE-MSG-NEXT: numeric-expression.txt:[[#@LINE-10]]:14: note: uses undefined variable(s): "UNDEFVAR1" "UNDEFVAR2" 375UNDEF-USE-MSG-NEXT: UNDEF VAR USE 376UNDEF-USE-MSG-NEXT: {{^}} ^{{$}} 377 378; Numeric expression with unsupported operator. 379RUN: %ProtectFileCheckOutput \ 380RUN: not FileCheck -D#NUMVAR=10 --check-prefix INVAL-OP \ 381RUN: --input-file %s %s 2>&1 \ 382RUN: | FileCheck --strict-whitespace --check-prefix INVAL-OP-MSG %s 383 384INVALID OPERATOR 385NUMVAR*2: 22 386INVAL-OP-LABEL: INVALID OPERATOR 387INVAL-OP-NEXT: NUMVAR*2: [[#NUMVAR*2]] 388INVAL-OP-MSG: numeric-expression.txt:[[#@LINE-1]]:35: error: unsupported operation '*' 389INVAL-OP-MSG-NEXT: {{I}}NVAL-OP-NEXT: NUMVAR*2: {{\[\[#NUMVAR\*2\]\]}} 390INVAL-OP-MSG-NEXT: {{^}} ^{{$}} 391 392; Name conflict between Numeric variable definition and string variable 393; definition whether from the command-line or input text. 394RUN: %ProtectFileCheckOutput \ 395RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT1,CONFLICT2 \ 396RUN: --input-file %s %s 2>&1 \ 397RUN: | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s 398RUN: %ProtectFileCheckOutput \ 399RUN: not FileCheck -D#NUMVAR=42 --check-prefixes CONFLICT,CONFLICT2 \ 400RUN: --input-file %s %s 2>&1 \ 401RUN: | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s 402RUN: %ProtectFileCheckOutput \ 403RUN: not FileCheck -D#NUMVAR=42 -DNUMVAR=foobar --check-prefix CONFLICT \ 404RUN: --input-file %s %s 2>&1 \ 405RUN: | FileCheck --strict-whitespace --check-prefix CLI-STR-CONFLICT %s 406RUN: %ProtectFileCheckOutput \ 407RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT3,CONFLICT4 \ 408RUN: --input-file %s %s 2>&1 \ 409RUN: | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s 410RUN: %ProtectFileCheckOutput \ 411RUN: not FileCheck -DSTRVAR=foobar --check-prefixes CONFLICT,CONFLICT4 \ 412RUN: --input-file %s %s 2>&1 \ 413RUN: | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s 414RUN: %ProtectFileCheckOutput \ 415RUN: not FileCheck -DSTRVAR=foobar -D#STRVAR=42 --check-prefix CONFLICT \ 416RUN: --input-file %s %s 2>&1 \ 417RUN: | FileCheck --strict-whitespace --check-prefix CLI-NUM-CONFLICT %s 418 419STRVAR NUMVAR CONFLICT 420redef1 42 421foobar 422redef2 42 423CONFLICT-LABEL: STRVAR NUMVAR CONFLICT 424CONFLICT1-NEXT: redef1 [[#NUMVAR:]] 425CONFLICT2: [[NUMVAR:foo.*]] 426CONFLICT3: [[STRVAR:foo.*]] 427CONFLICT4: redef2 [[#STRVAR:]] 428INPUT-STR-CONFLICT: numeric-expression.txt:[[#@LINE-3]]:14: error: numeric variable with name 'NUMVAR' already exists 429INPUT-STR-CONFLICT-NEXT: {{C}}ONFLICT2: {{\[\[NUMVAR:foo\.\*\]\]}} 430INPUT-STR-CONFLICT-NEXT: {{^}} ^{{$}} 431CLI-STR-CONFLICT: Global defines:2:19: error: numeric variable with name 'NUMVAR' already exists 432CLI-STR-CONFLICT-NEXT: Global define #2: NUMVAR=foobar 433CLI-STR-CONFLICT-NEXT: {{^}} ^{{$}} 434INPUT-NUM-CONFLICT: numeric-expression.txt:[[#@LINE-7]]:22: error: string variable with name 'STRVAR' already exists 435 INPUT-NUM-CONFLICT-NEXT: CONFLICT4: redef2 {{\[\[#STRVAR:\]\]}} 436INPUT-NUM-CONFLICT-NEXT: {{^}} ^{{$}} 437CLI-NUM-CONFLICT: Global defines:2:45: error: string variable with name 'STRVAR' already exists 438 CLI-NUM-CONFLICT-NEXT: Global define #2: #STRVAR=42 (parsed as: {{\[\[#STRVAR:42\]\]}}) 439CLI-NUM-CONFLICT-NEXT: {{^}} ^{{$}} 440 441; Numeric variable definition with too big value. 442RUN: %ProtectFileCheckOutput \ 443RUN: not FileCheck --check-prefix BIGVAL --input-file %s %s 2>&1 \ 444RUN: | FileCheck --strict-whitespace --check-prefix BIGVAL-MSG %s 445 446BIG VALUE 447NUMVAR: 10000000000000000000000 448BIGVAL-LABEL: BIG VALUE 449BIGVAL-NEXT: NUMVAR: [[#NUMVAR:]] 450BIGVAL-MSG: numeric-expression.txt:[[#@LINE-3]]:9: error: unable to represent numeric value 451 BIGVAL-MSG-NEXT: {{N}}UMVAR: 10000000000000000000000 452BIGVAL-MSG-NEXT: {{^}} ^{{$}} 453 454; Verify that when a variable is set to an expression the expression is still 455; checked. 456RUN: %ProtectFileCheckOutput \ 457RUN: not FileCheck --check-prefix DEF-EXPR-FAIL --input-file %s %s 2>&1 \ 458RUN: | FileCheck --strict-whitespace --check-prefix DEF-EXPR-FAIL-MSG %s 459 460DEF EXPR WRONG MATCH 46120 46243 463DEF-EXPR-FAIL-LABEL: DEF EXPR WRONG MATCH 464DEF-EXPR-FAIL-NEXT: [[# VAR20:]] 465DEF-EXPR-FAIL-NEXT: [[# VAR42: VAR20+22]] 466DEF-EXPR-FAIL-MSG: numeric-expression.txt:[[#@LINE-1]]:21: error: {{D}}EF-EXPR-FAIL-NEXT: is not on the line after the previous match 467DEF-EXPR-FAIL-MSG-NEXT: {{D}}EF-EXPR-FAIL-NEXT: {{\[\[# VAR42: VAR20\+22\]\]}} 468DEF-EXPR-FAIL-MSG-NEXT: {{^}} ^{{$}} 469 470; Verify that using a numeric variable defined on the same line (whether from 471; input or from an expression) is rejected. 472RUN: %ProtectFileCheckOutput \ 473RUN: not FileCheck --check-prefix SAME-LINE-USE1 --input-file %s %s 2>&1 \ 474RUN: | FileCheck --strict-whitespace --check-prefix SAME-LINE-USE-MSG1 %s 475RUN: %ProtectFileCheckOutput \ 476RUN: not FileCheck --check-prefix SAME-LINE-USE2 --input-file %s %s 2>&1 \ 477RUN: | FileCheck --strict-whitespace --check-prefix SAME-LINE-USE-MSG2 %s 478 479SAME LINE USE 4803 4814 5 482SAME-LINE-USE1-LABEL: SAME LINE USE 483SAME-LINE-USE1-NEXT: [[#]] 484SAME-LINE-USE1-NEXT: [[#UNSI:]] [[#UNSI+1]] 485SAME-LINE-USE-MSG1: numeric-expression.txt:[[#@LINE-1]]:36: error: numeric variable 'UNSI' defined earlier in the same CHECK directive 486SAME-LINE-USE-MSG1-NEXT: {{S}}AME-LINE-USE1-NEXT: {{\[\[#UNSI:\]\] \[\[#UNSI\+1\]\]}} 487SAME-LINE-USE-MSG1-NEXT: {{^}} ^{{$}} 488 489SAME-LINE-USE2-LABEL: SAME LINE USE 490SAME-LINE-USE2-NEXT: [[#UNSI:]] 491SAME-LINE-USE2-NEXT: [[#UNSI2:UNSI+1]] [[#UNSI2+1]] 492SAME-LINE-USE-MSG2: numeric-expression.txt:[[#@LINE-1]]:43: error: numeric variable 'UNSI2' defined earlier in the same CHECK directive 493SAME-LINE-USE-MSG2-NEXT: {{S}}AME-LINE-USE2-NEXT: {{\[\[#UNSI2:UNSI\+1\]\] \[\[#UNSI2\+1\]\]}} 494SAME-LINE-USE-MSG2-NEXT: {{^}} ^{{$}} 495 496; Invalid change of format in variable redefinition. 497RUN: %ProtectFileCheckOutput \ 498RUN: not FileCheck --check-prefix REDEF-NEW-FMT --input-file %s %s 2>&1 \ 499RUN: | FileCheck --strict-whitespace --check-prefix REDEF-NEW-FMT-MSG %s 500 501VAR REDEF FMT CHANGE 50222 503DC 504REDEF-NEW-FMT-LABEL: VAR REDEF FMT CHANGE 505REDEF-NEW-FMT-NEXT: [[#UNSI:]] 506REDEF-NEW-FMT-NEXT: [[#%X,UNSI:]] 507REDEF-NEW-FMT-MSG: numeric-expression.txt:[[#@LINE-1]]:31: error: format different from previous variable definition 508REDEF-NEW-FMT-MSG-NEXT: {{R}}EDEF-NEW-FMT-NEXT: {{\[\[#%X,UNSI:\]\]}} 509REDEF-NEW-FMT-MSG-NEXT: {{^}} ^{{$}} 510 511; Numeric expression with overflow. 512RUN: %ProtectFileCheckOutput \ 513RUN: not FileCheck --check-prefix OVERFLOW --input-file %s %s 2>&1 \ 514RUN: | FileCheck --check-prefix OVERFLOW-MSG --strict-whitespace %s 515 516OVERFLOW 517BIGVAR=10000000000000000 518OVERFLOW-LABEL: OVERFLOW 519OVERFLOW-NEXT: BIGVAR: [[#BIGVAR:0x8000000000000000+0x8000000000000000]] 520OVERFLOW-MSG: numeric-expression.txt:[[#@LINE-1]]:27: error: unable to substitute variable or numeric expression 521OVERFLOW-MSG-NEXT: {{O}}VERFLOW-NEXT: BIGVAR: {{\[\[#BIGVAR:0x8000000000000000\+0x8000000000000000\]\]}} 522OVERFLOW-MSG-NEXT: {{^}} ^{{$}} 523 524; Numeric expression with underflow. 525RUN: %ProtectFileCheckOutput \ 526RUN: not FileCheck --check-prefix UNDERFLOW --input-file %s %s 2>&1 \ 527RUN: | FileCheck --check-prefix UNDERFLOW-MSG --strict-whitespace %s 528 529UNDERFLOW 530TINYVAR=-10000000000000000 531UNDERFLOW-LABEL: UNDERFLOW 532UNDERFLOW-NEXT: TINYVAR: [[#%d,TINYVAR:-0x8000000000000000-0x8000000000000000]] 533UNDERFLOW-MSG: numeric-expression.txt:[[#@LINE-1]]:29: error: unable to substitute variable or numeric expression 534UNDERFLOW-MSG-NEXT: {{U}}NDERFLOW-NEXT: TINYVAR: {{\[\[#%d,TINYVAR:-0x8000000000000000-0x8000000000000000\]\]}} 535UNDERFLOW-MSG-NEXT: {{^}} ^{{$}} 536 537RUN: %ProtectFileCheckOutput \ 538RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-MISSING-CLOSING-BRACKET --input-file %s %s 2>&1 \ 539RUN: | FileCheck --strict-whitespace --check-prefix CALL-MISSING-CLOSING-BRACKET-MSG %s 540 541CALL MISSING CLOSING BRACKET 54230 543CALL-MISSING-CLOSING-BRACKET-LABEL: CALL MISSING CLOSING BRACKET 544CALL-MISSING-CLOSING-BRACKET-NEXT: [[#add(NUMVAR,3]] 545CALL-MISSING-CLOSING-BRACKET-MSG: numeric-expression.txt:[[#@LINE-1]]:51: error: missing ')' at end of call expression 546CALL-MISSING-CLOSING-BRACKET-MSG-NEXT: {{C}}ALL-MISSING-CLOSING-BRACKET-NEXT: {{\[\[#add\(NUMVAR,3\]\]}} 547CALL-MISSING-CLOSING-BRACKET-MSG-NEXT: {{^}} ^{{$}} 548 549RUN: %ProtectFileCheckOutput \ 550RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-MISSING-ARGUMENT --input-file %s %s 2>&1 \ 551RUN: | FileCheck --strict-whitespace --check-prefix CALL-MISSING-ARGUMENT-MSG %s 552 553CALL MISSING ARGUMENT 55430 555CALL-MISSING-ARGUMENT-LABEL: CALL MISSING ARGUMENT 556CALL-MISSING-ARGUMENT-NEXT: [[#add(NUMVAR,)]] 557CALL-MISSING-ARGUMENT-MSG: numeric-expression.txt:[[#@LINE-1]]:43: error: missing argument 558CALL-MISSING-ARGUMENT-MSG-NEXT: {{C}}ALL-MISSING-ARGUMENT-NEXT: {{\[\[#add\(NUMVAR,\)\]\]}} 559CALL-MISSING-ARGUMENT-MSG-NEXT: {{^}} ^{{$}} 560 561RUN: %ProtectFileCheckOutput \ 562RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-WRONG-ARGUMENT-COUNT --input-file %s %s 2>&1 \ 563RUN: | FileCheck --strict-whitespace --check-prefix CALL-WRONG-ARGUMENT-COUNT-MSG %s 564 565CALL WRONG ARGUMENT COUNT 56630 567CALL-WRONG-ARGUMENT-COUNT-LABEL: CALL WRONG ARGUMENT COUNT 568CALL-WRONG-ARGUMENT-COUNT-NEXT: [[#add(NUMVAR)]] 569CALL-WRONG-ARGUMENT-COUNT-MSG: numeric-expression.txt:[[#@LINE-1]]:36: error: function 'add' takes 2 arguments but 1 given 570CALL-WRONG-ARGUMENT-COUNT-MSG-NEXT: {{C}}ALL-WRONG-ARGUMENT-COUNT-NEXT: {{\[\[#add\(NUMVAR\)\]\]}} 571CALL-WRONG-ARGUMENT-COUNT-MSG-NEXT: {{^}} ^{{$}} 572 573RUN: %ProtectFileCheckOutput \ 574RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-UNDEFINED-FUNCTION --input-file %s %s 2>&1 \ 575RUN: | FileCheck --strict-whitespace --check-prefix CALL-UNDEFINED-FUNCTION-MSG %s 576 577CALL UNDEFINED FUNCTION 57830 579CALL-UNDEFINED-FUNCTION-LABEL: CALL UNDEFINED FUNCTION 580CALL-UNDEFINED-FUNCTION-NEXT: [[#bogus_function(NUMVAR)]] 581CALL-UNDEFINED-FUNCTION-MSG: numeric-expression.txt:[[#@LINE-1]]:34: error: call to undefined function 'bogus_function' 582CALL-UNDEFINED-FUNCTION-MSG-NEXT: {{C}}ALL-UNDEFINED-FUNCTION-NEXT: {{\[\[#bogus_function\(NUMVAR\)\]\]}} 583CALL-UNDEFINED-FUNCTION-MSG-NEXT: {{^}} ^{{$}} 584