618 lines · plain
1RUN: FileCheck --input-file %s %s2 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 SPC710 // CHECK-NEXT: {{^}}[[#UNSI:]]8 9; Numeric variable definition with default matching format with different10; spacing.11DEF DEFAULT FMT SPC // CHECK-LABEL: DEF DEFAULT FMT SPC1211 // CHECK-NEXT: {{^}}[[# UNSIa:]]1311 // CHECK-NEXT: {{^}}[[# UNSIb :]]1411 // CHECK-NEXT: {{^}}[[# UNSIc : ]]15 16; Numeric variable redefinition.17REDEF NO SPC // CHECK-LABEL: REDEF1811 // CHECK-NEXT: {{^}}[[#UNSI:]]19 20; Numeric variable definition with explicit matching format.21DEF FMT // CHECK-LABEL: DEF FMT22c // 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 different27; spacing.28DEF FMT SPC // CHECK-LABEL: DEF FMT SPC29c // 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 %s35RUN: %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 %s38 39DEF INVALID FMT40INVVAR1=a41INVVAR2=1142ERR-LABEL: DEF INVALID FMT43INVALID-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 expression46INVALID-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 expression49INVALID-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 FORM540xf // 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 %s61RUN: %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 %s64DEF INVALID ALT FORM65PREFIXED_DEC=0x366INVALID-ALT-FORM-LABEL: DEF INVALID ALT FORM67INVALID-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 values70INVALID-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 values73INVALID-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 %s78 79FAIL DEF ALT FORM // INVALID-HEX-PREFIX-DEF-LABEL: FAIL DEF ALT FORM80INVALID_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 FMT8500000022 // 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 padded97; enough.98RUN: FileCheck --check-prefix INVALID-PADDING-DEF --input-file %s %s99 100FAIL DEF PREC FMT // INVALID-PADDING-DEF-LABEL: FAIL DEF PREC FMT101INVALID_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 rule108; using variables defined on other lines without spaces.109USE EXPL FMT IMPL MATCH // CHECK-LABEL: USE EXPL FMT IMPL MATCH11011 // 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 rule151; using variables defined on other lines with different spacing.152USE EXPL FMT IMPL MATCH SPC // CHECK-LABEL: USE EXPL FMT IMPL MATCH SPC15311 // 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 and179; 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 MATCH18111 // 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 wrong195; padding, and default matching rule using variables defined on other lines196; without spaces.197RUN: FileCheck --check-prefixes CHECK,INVALID-PADDING-EXPL-USE --input-file %s %s198 199FAIL USE IMPL FMT WITH PREC EXPL MATCH // INVALID-PADDING-EXPL-USE-LABEL: FAIL USE IMPL FMT WITH PREC IMPL MATCH200INVALID 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 rule210; using variables defined on other lines.211USE IMPL FMT IMPL MATCH // CHECK-LABEL: USE IMPL FMT IMPL MATCH21211 // 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 default236; matching rule using variables defined on other lines.237USE IMPL FMT WITH PREC IMPL MATCH // CHECK-LABEL: USE IMPL FMT WITH PREC IMPL MATCH23800000023 // 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 amount250; of padding, and default matching rule using variables defined on other lines.251RUN: FileCheck --check-prefixes CHECK,INVALID-PADDING-IMPL-USE --input-file %s %s252 253FAIL USE IMPL FMT WITH PREC IMPL MATCH // INVALID-PADDING-IMPL-USE-LABEL: FAIL USE IMPL FMT WITH PREC IMPL MATCH254INVALID 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 immediate266; interpreted as an unsigned value.267; Note: 9223372036854775819 = 0x8000000000000000 + 11268USE IMPL FMT IMPL MATCH UNSIGNED IMM2699223372036854775819270CHECK-LABEL: USE IMPL FMT IMPL MATCH UNSIGNED IMM271CHECK-NEXT: [[#UNSI+0x8000000000000000]]272 273; Numeric expressions in default matching format and explicit matching rule using274; variables defined on other lines.275USE DEF FMT EXPL MATCH // CHECK-LABEL: USE DEF FMT EXPL MATCH27611 // 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 using282; 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 %s286 287USE DEF FMT EXPL NO MATCH288UNSI=11289UNSI: 12290NUMEXPR-CONSTRAINT-NOMATCH-LABEL: USE DEF FMT EXPL NO MATCH291NUMEXPR-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 input294NUMEXPR-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 %s301 302EMPTY NUMEXPR USE WITH CONSTRAINT30318304EMPTY-NUMEXPR-CONSTRAINT-LABEL: EMPTY NUMEXPR USE WITH CONSTRAINT305EMPTY-NUMEXPR-CONSTRAINT-NEXT: [[# ==]]306EMPTY-NUMEXPR-CONSTRAINT-MSG: numeric-expression.txt:[[#@LINE-1]]:38: error: empty numeric expression should not have a constraint307EMPTY-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 %s314 315EMPTY NUMEXPR DEF WITH CONSTRAINT31618317EMPTY-NUMDEF-CONSTRAINT-LABEL: EMPTY NUMEXPR CONSTRAINT318EMPTY-NUMDEF-CONSTRAINT-NEXT: [[#VARDEF: ==]]319EMPTY-NUMDEF-CONSTRAINT-MSG: numeric-expression.txt:[[#@LINE-1]]:44: error: empty numeric expression should not have a constraint320EMPTY-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 of324; variables defined on other lines.325USE CONV FMT IMPL MATCH // CHECK-LABEL: USE CONV FMT IMPL MATCH326b // 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 %s343RUN: %ProtectFileCheckOutput \344RUN: not FileCheck --check-prefixes CHECK,FMT-CONFLICT2 --input-file %s %s 2>&1 \345RUN: | FileCheck --strict-whitespace --check-prefix FMT-CONFLICT2-MSG %s346 347VAR USE IMPL FMT CONFLICT34823349FMT-CONFLICT1-LABEL: VAR USE IMPL FMT CONFLICT350FMT-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 specifier352FMT-CONFLICT1-MSG-NEXT: {{F}}MT-CONFLICT1-NEXT: {{\[\[#UNSI \+ LHEX\]\]}}353FMT-CONFLICT1-MSG-NEXT: {{^ \^$}}354 355VAR USE IMPL FMT CONFLICT COMPLEX35634357FMT-CONFLICT2-LABEL: VAR USE IMPL FMT CONFLICT358FMT-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 specifier360FMT-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 CONFLICT36523 // 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 VAR36922 // 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 MATCH37342 // CHECK-NEXT: {{^}}[[# VAR42:UNSI+31]]37441 // CHECK-NEXT: {{^}}[[# VAR42-1]]375 376; Empty numeric expression.377EMPTY NUM EXPR // CHECK-LABEL: EMPTY NUM EXPR378foo 104 bar // CHECK-NEXT: {{^}}foo [[#]] bar379 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 %s385 386PAREN EXPRESSIONS // PAREN-OP-LABEL: PAREN EXPRESSIONS38711 // 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 expression391PAREN-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 %s398 399UNDEF VAR USE400UNDEFVAR: 11401UNDEF-USE-LABEL: UNDEF VAR USE402UNDEF-USE-NEXT: UNDEFVAR: [[#UNDEFVAR1+UNDEFVAR2]]403UNDEF-USE-MSG: numeric-expression.txt:[[#@LINE-1]]:30: error: undefined variable: UNDEFVAR1404UNDEF-USE-MSG-NEXT: {{U}}NDEF-USE-NEXT: {{U}}NDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}}405UNDEF-USE-MSG-NEXT: {{^}} ^{{$}}406UNDEF-USE-MSG-NEXT: numeric-expression.txt:[[#@LINE-4]]:40: error: undefined variable: UNDEFVAR2407UNDEF-USE-MSG-NEXT: {{U}}NDEF-USE-NEXT: {{U}}NDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}}408UNDEF-USE-MSG-NEXT: {{^}} ^{{$}}409 410; Numeric expression in negative directive using undefined variables.411RUN: %ProtectFileCheckOutput \412RUN: not FileCheck --check-prefix UNDEF-USE2 --input-file %s %s 2>&1 \413RUN: | FileCheck --strict-whitespace --check-prefix UNDEF-USE-MSG2 %s414 415CHECK NOT UNDEF VAR USE416END MARKER417UNDEF-USE2-LABEL: CHECK NOT UNDEF VAR USE418UNDEF-USE2-NOT: UNDEFVAR: [[#UNDEFVAR1+UNDEFVAR2]]419UNDEF-USE2: END MARKER420UNDEF-USE-MSG2: numeric-expression.txt:[[#@LINE-2]]:30: error: undefined variable: UNDEFVAR1421UNDEF-USE-MSG2-NEXT: {{U}}NDEF-USE2-NOT: {{U}}NDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}}422UNDEF-USE-MSG2-NEXT: {{^}} ^{{$}}423UNDEF-USE-MSG2-NEXT: numeric-expression.txt:[[#@LINE-5]]:40: error: undefined variable: UNDEFVAR2424UNDEF-USE-MSG2-NEXT: {{U}}NDEF-USE2-NOT: {{U}}NDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}}425UNDEF-USE-MSG2-NEXT: {{^}} ^{{$}}426 427; Numeric expression with unsupported operator.428RUN: %ProtectFileCheckOutput \429RUN: not FileCheck -D#NUMVAR=10 --check-prefix INVAL-OP \430RUN: --input-file %s %s 2>&1 \431RUN: | FileCheck --strict-whitespace --check-prefix INVAL-OP-MSG %s432 433INVALID OPERATOR434NUMVAR*2: 22435INVAL-OP-LABEL: INVALID OPERATOR436INVAL-OP-NEXT: NUMVAR*2: [[#NUMVAR*2]]437INVAL-OP-MSG: numeric-expression.txt:[[#@LINE-1]]:35: error: unsupported operation '*'438INVAL-OP-MSG-NEXT: {{I}}NVAL-OP-NEXT: NUMVAR*2: {{\[\[#NUMVAR\*2\]\]}}439INVAL-OP-MSG-NEXT: {{^}} ^{{$}}440 441; Name conflict between Numeric variable definition and string variable442; definition whether from the command-line or input text.443RUN: %ProtectFileCheckOutput \444RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT1,CONFLICT2 \445RUN: --input-file %s %s 2>&1 \446RUN: | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s447RUN: %ProtectFileCheckOutput \448RUN: not FileCheck -D#NUMVAR=42 --check-prefixes CONFLICT,CONFLICT2 \449RUN: --input-file %s %s 2>&1 \450RUN: | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s451RUN: %ProtectFileCheckOutput \452RUN: not FileCheck -D#NUMVAR=42 -DNUMVAR=foobar --check-prefix CONFLICT \453RUN: --input-file %s %s 2>&1 \454RUN: | FileCheck --strict-whitespace --check-prefix CLI-STR-CONFLICT %s455RUN: %ProtectFileCheckOutput \456RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT3,CONFLICT4 \457RUN: --input-file %s %s 2>&1 \458RUN: | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s459RUN: %ProtectFileCheckOutput \460RUN: not FileCheck -DSTRVAR=foobar --check-prefixes CONFLICT,CONFLICT4 \461RUN: --input-file %s %s 2>&1 \462RUN: | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s463RUN: %ProtectFileCheckOutput \464RUN: not FileCheck -DSTRVAR=foobar -D#STRVAR=42 --check-prefix CONFLICT \465RUN: --input-file %s %s 2>&1 \466RUN: | FileCheck --strict-whitespace --check-prefix CLI-NUM-CONFLICT %s467 468STRVAR NUMVAR CONFLICT469redef1 42470foobar471redef2 42472CONFLICT-LABEL: STRVAR NUMVAR CONFLICT473CONFLICT1-NEXT: redef1 [[#NUMVAR:]]474CONFLICT2: [[NUMVAR:foo.*]]475CONFLICT3: [[STRVAR:foo.*]]476CONFLICT4: redef2 [[#STRVAR:]]477INPUT-STR-CONFLICT: numeric-expression.txt:[[#@LINE-3]]:14: error: numeric variable with name 'NUMVAR' already exists478INPUT-STR-CONFLICT-NEXT: {{C}}ONFLICT2: {{\[\[NUMVAR:foo\.\*\]\]}}479INPUT-STR-CONFLICT-NEXT: {{^}} ^{{$}}480CLI-STR-CONFLICT: Global defines:2:19: error: numeric variable with name 'NUMVAR' already exists481CLI-STR-CONFLICT-NEXT: Global define #2: NUMVAR=foobar482CLI-STR-CONFLICT-NEXT: {{^}} ^{{$}}483INPUT-NUM-CONFLICT: numeric-expression.txt:[[#@LINE-7]]:22: error: string variable with name 'STRVAR' already exists484 INPUT-NUM-CONFLICT-NEXT: CONFLICT4: redef2 {{\[\[#STRVAR:\]\]}}485INPUT-NUM-CONFLICT-NEXT: {{^}} ^{{$}}486CLI-NUM-CONFLICT: Global defines:2:45: error: string variable with name 'STRVAR' already exists487 CLI-NUM-CONFLICT-NEXT: Global define #2: #STRVAR=42 (parsed as: {{\[\[#STRVAR:42\]\]}})488CLI-NUM-CONFLICT-NEXT: {{^}} ^{{$}}489 490; Numeric variable definition with big value.491RUN: FileCheck --check-prefix BIGVAL --input-file %s %s492 493BIG VALUE494NUMVAR: 10000000000000000000000495BIGVAL-LABEL: BIG VALUE496BIGVAL-NEXT: NUMVAR: [[#NUMVAR:]]497 498; Verify that when a variable is set to an expression the expression is still499; checked.500RUN: %ProtectFileCheckOutput \501RUN: not FileCheck --check-prefix DEF-EXPR-FAIL --input-file %s %s 2>&1 \502RUN: | FileCheck --strict-whitespace --check-prefix DEF-EXPR-FAIL-MSG %s503 504DEF EXPR WRONG MATCH5052050643507DEF-EXPR-FAIL-LABEL: DEF EXPR WRONG MATCH508DEF-EXPR-FAIL-NEXT: [[# VAR20:]]509DEF-EXPR-FAIL-NEXT: [[# VAR42: VAR20+22]]510DEF-EXPR-FAIL-MSG: numeric-expression.txt:[[#@LINE-1]]:21: error: {{D}}EF-EXPR-FAIL-NEXT: is not on the line after the previous match511DEF-EXPR-FAIL-MSG-NEXT: {{D}}EF-EXPR-FAIL-NEXT: {{\[\[# VAR42: VAR20\+22\]\]}}512DEF-EXPR-FAIL-MSG-NEXT: {{^}} ^{{$}}513 514; Verify that using a numeric variable defined on the same line (whether from515; input or from an expression) is rejected.516RUN: %ProtectFileCheckOutput \517RUN: not FileCheck --check-prefix SAME-LINE-USE1 --input-file %s %s 2>&1 \518RUN: | FileCheck --strict-whitespace --check-prefix SAME-LINE-USE-MSG1 %s519RUN: %ProtectFileCheckOutput \520RUN: not FileCheck --check-prefix SAME-LINE-USE2 --input-file %s %s 2>&1 \521RUN: | FileCheck --strict-whitespace --check-prefix SAME-LINE-USE-MSG2 %s522 523SAME LINE USE52435254 5526SAME-LINE-USE1-LABEL: SAME LINE USE527SAME-LINE-USE1-NEXT: [[#]]528SAME-LINE-USE1-NEXT: [[#UNSI:]] [[#UNSI+1]]529SAME-LINE-USE-MSG1: numeric-expression.txt:[[#@LINE-1]]:36: error: numeric variable 'UNSI' defined earlier in the same CHECK directive530SAME-LINE-USE-MSG1-NEXT: {{S}}AME-LINE-USE1-NEXT: {{\[\[#UNSI:\]\] \[\[#UNSI\+1\]\]}}531SAME-LINE-USE-MSG1-NEXT: {{^}} ^{{$}}532 533SAME-LINE-USE2-LABEL: SAME LINE USE534SAME-LINE-USE2-NEXT: [[#UNSI:]]535SAME-LINE-USE2-NEXT: [[#UNSI2:UNSI+1]] [[#UNSI2+1]]536SAME-LINE-USE-MSG2: numeric-expression.txt:[[#@LINE-1]]:43: error: numeric variable 'UNSI2' defined earlier in the same CHECK directive537SAME-LINE-USE-MSG2-NEXT: {{S}}AME-LINE-USE2-NEXT: {{\[\[#UNSI2:UNSI\+1\]\] \[\[#UNSI2\+1\]\]}}538SAME-LINE-USE-MSG2-NEXT: {{^}} ^{{$}}539 540; Invalid change of format in variable redefinition.541RUN: %ProtectFileCheckOutput \542RUN: not FileCheck --check-prefix REDEF-NEW-FMT --input-file %s %s 2>&1 \543RUN: | FileCheck --strict-whitespace --check-prefix REDEF-NEW-FMT-MSG %s544 545VAR REDEF FMT CHANGE54622547DC548REDEF-NEW-FMT-LABEL: VAR REDEF FMT CHANGE549REDEF-NEW-FMT-NEXT: [[#UNSI:]]550REDEF-NEW-FMT-NEXT: [[#%X,UNSI:]]551REDEF-NEW-FMT-MSG: numeric-expression.txt:[[#@LINE-1]]:31: error: format different from previous variable definition552REDEF-NEW-FMT-MSG-NEXT: {{R}}EDEF-NEW-FMT-NEXT: {{\[\[#%X,UNSI:\]\]}}553REDEF-NEW-FMT-MSG-NEXT: {{^}} ^{{$}}554 555; Numeric expression with big resulting value.556RUN: FileCheck --check-prefix OVERFLOW --input-file %s %s557 558OVERFLOW EXPRESSION559BIGVAL: 10000000000000000560OVERFLOW-LABEL: OVERFLOW EXPRESSION561OVERFLOW-NEXT: BIGVAL: [[#%X,0x8000000000000000+0x8000000000000000]]562 563; Numeric expression with big negative resulting value.564RUN: FileCheck --check-prefix UNDERFLOW --input-file %s %s565 566UNDERFLOW EXPRESSION567TINYVAR: -18446744073709551616 # -0x10000000000000000568UNDERFLOW-LABEL: UNDERFLOW EXPRESSION569UNDERFLOW-NEXT: TINYVAR: [[#%d,-0x8000000000000000-0x8000000000000000]]570 571RUN: %ProtectFileCheckOutput \572RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-MISSING-CLOSING-BRACKET --input-file %s %s 2>&1 \573RUN: | FileCheck --strict-whitespace --check-prefix CALL-MISSING-CLOSING-BRACKET-MSG %s574 575CALL MISSING CLOSING BRACKET57630577CALL-MISSING-CLOSING-BRACKET-LABEL: CALL MISSING CLOSING BRACKET578CALL-MISSING-CLOSING-BRACKET-NEXT: [[#add(NUMVAR,3]]579CALL-MISSING-CLOSING-BRACKET-MSG: numeric-expression.txt:[[#@LINE-1]]:51: error: missing ')' at end of call expression580CALL-MISSING-CLOSING-BRACKET-MSG-NEXT: {{C}}ALL-MISSING-CLOSING-BRACKET-NEXT: {{\[\[#add\(NUMVAR,3\]\]}}581CALL-MISSING-CLOSING-BRACKET-MSG-NEXT: {{^}} ^{{$}}582 583RUN: %ProtectFileCheckOutput \584RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-MISSING-ARGUMENT --input-file %s %s 2>&1 \585RUN: | FileCheck --strict-whitespace --check-prefix CALL-MISSING-ARGUMENT-MSG %s586 587CALL MISSING ARGUMENT58830589CALL-MISSING-ARGUMENT-LABEL: CALL MISSING ARGUMENT590CALL-MISSING-ARGUMENT-NEXT: [[#add(NUMVAR,)]]591CALL-MISSING-ARGUMENT-MSG: numeric-expression.txt:[[#@LINE-1]]:43: error: missing argument592CALL-MISSING-ARGUMENT-MSG-NEXT: {{C}}ALL-MISSING-ARGUMENT-NEXT: {{\[\[#add\(NUMVAR,\)\]\]}}593CALL-MISSING-ARGUMENT-MSG-NEXT: {{^}} ^{{$}}594 595RUN: %ProtectFileCheckOutput \596RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-WRONG-ARGUMENT-COUNT --input-file %s %s 2>&1 \597RUN: | FileCheck --strict-whitespace --check-prefix CALL-WRONG-ARGUMENT-COUNT-MSG %s598 599CALL WRONG ARGUMENT COUNT60030601CALL-WRONG-ARGUMENT-COUNT-LABEL: CALL WRONG ARGUMENT COUNT602CALL-WRONG-ARGUMENT-COUNT-NEXT: [[#add(NUMVAR)]]603CALL-WRONG-ARGUMENT-COUNT-MSG: numeric-expression.txt:[[#@LINE-1]]:36: error: function 'add' takes 2 arguments but 1 given604CALL-WRONG-ARGUMENT-COUNT-MSG-NEXT: {{C}}ALL-WRONG-ARGUMENT-COUNT-NEXT: {{\[\[#add\(NUMVAR\)\]\]}}605CALL-WRONG-ARGUMENT-COUNT-MSG-NEXT: {{^}} ^{{$}}606 607RUN: %ProtectFileCheckOutput \608RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-UNDEFINED-FUNCTION --input-file %s %s 2>&1 \609RUN: | FileCheck --strict-whitespace --check-prefix CALL-UNDEFINED-FUNCTION-MSG %s610 611CALL UNDEFINED FUNCTION61230613CALL-UNDEFINED-FUNCTION-LABEL: CALL UNDEFINED FUNCTION614CALL-UNDEFINED-FUNCTION-NEXT: [[#bogus_function(NUMVAR)]]615CALL-UNDEFINED-FUNCTION-MSG: numeric-expression.txt:[[#@LINE-1]]:34: error: call to undefined function 'bogus_function'616CALL-UNDEFINED-FUNCTION-MSG-NEXT: {{C}}ALL-UNDEFINED-FUNCTION-NEXT: {{\[\[#bogus_function\(NUMVAR\)\]\]}}617CALL-UNDEFINED-FUNCTION-MSG-NEXT: {{^}} ^{{$}}618