
Use APInt to represent numeric variables and expressions, therefore removing overflow concerns. Only remains underflow when the format of an expression is unsigned (incl. hex values) but the result is negative. Note that this can only happen when substituting an expression, not when capturing since the regex used to capture unsigned value will not include minus sign, hence all the code removal for match propagation testing. This is what this patch implement. Reviewed By: arichardson Differential Revision: https://reviews.llvm.org/D150880
618 lines
31 KiB
Plaintext
618 lines
31 KiB
Plaintext
RUN: FileCheck --input-file %s %s
|
|
|
|
; We use CHECK-NEXT directives to force a match on all lines with digits.
|
|
|
|
; Numeric variable definition with default matching format without spaces.
|
|
DEF DEFAULT FMT NO SPC // CHECK-LABEL: DEF DEFAULT FMT NO SPC
|
|
10 // CHECK-NEXT: {{^}}[[#UNSI:]]
|
|
|
|
; Numeric variable definition with default matching format with different
|
|
; spacing.
|
|
DEF DEFAULT FMT SPC // CHECK-LABEL: DEF DEFAULT FMT SPC
|
|
11 // CHECK-NEXT: {{^}}[[# UNSIa:]]
|
|
11 // CHECK-NEXT: {{^}}[[# UNSIb :]]
|
|
11 // CHECK-NEXT: {{^}}[[# UNSIc : ]]
|
|
|
|
; Numeric variable redefinition.
|
|
REDEF NO SPC // CHECK-LABEL: REDEF
|
|
11 // CHECK-NEXT: {{^}}[[#UNSI:]]
|
|
|
|
; Numeric variable definition with explicit matching format.
|
|
DEF FMT // CHECK-LABEL: DEF FMT
|
|
c // CHECK-NEXT: {{^}}[[#%x,LHEX:]]
|
|
D // CHECK-NEXT: {{^}}[[#%X,UHEX:]]
|
|
-30 // CHECK-NEXT: {{^}}[[#%d,SIGN:]]
|
|
|
|
; Numeric variable definition with explicit matching format with different
|
|
; spacing.
|
|
DEF FMT SPC // CHECK-LABEL: DEF FMT SPC
|
|
c // CHECK-NEXT: {{^}}[[# %x , LHEXa : ]]
|
|
|
|
; Numeric variable definition with unsupported matching format.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefixes ERR,INVALID-FMT-SPEC1 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --check-prefix INVALID-FMT-SPEC-MSG1 --strict-whitespace %s
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefixes ERR,INVALID-FMT-SPEC2 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --check-prefix INVALID-FMT-SPEC-MSG2 --strict-whitespace %s
|
|
|
|
DEF INVALID FMT
|
|
INVVAR1=a
|
|
INVVAR2=11
|
|
ERR-LABEL: DEF INVALID FMT
|
|
INVALID-FMT-SPEC1-NEXT: INVVAR1=[[#%c,INVVAR1:]]
|
|
INVALID-FMT-SPEC2-NEXT: INVVAR2=[[#%hhd,INVVAR2:]]
|
|
INVALID-FMT-SPEC-MSG1: numeric-expression.txt:[[#@LINE-2]]:37: error: invalid format specifier in expression
|
|
INVALID-FMT-SPEC-MSG1-NEXT: {{I}}NVALID-FMT-SPEC1-NEXT: INVVAR1={{\[\[#%c,INVVAR1:\]\]}}
|
|
INVALID-FMT-SPEC-MSG1-NEXT: {{^}} ^{{$}}
|
|
INVALID-FMT-SPEC-MSG2: numeric-expression.txt:[[#@LINE-4]]:37: error: invalid format specifier in expression
|
|
INVALID-FMT-SPEC-MSG2-NEXT: {{I}}NVALID-FMT-SPEC2-NEXT: INVVAR2={{\[\[#%hhd,INVVAR2:\]\]}}
|
|
INVALID-FMT-SPEC-MSG2-NEXT: {{^}} ^{{$}}
|
|
|
|
; Numeric variable definition of hex value with 0x prefix.
|
|
DEF ALT FORM // CHECK-LABEL: DEF ALT FORM
|
|
0xf // CHECK-NEXT: {{^}}[[#%#x,PREFIXED_LHEX:]]
|
|
0xE // CHECK-NEXT: {{^}}[[#%#X,PREFIXED_UHEX:]]
|
|
|
|
; Invalid numeric variable definition of non-hex value with 0x prefix.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefixes INVALID-ALT-FORM,INVALID-ALT-FORM1 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --check-prefix INVALID-ALT-FORM-MSG1 --strict-whitespace %s
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefixes INVALID-ALT-FORM,INVALID-ALT-FORM2 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --check-prefix INVALID-ALT-FORM-MSG2 --strict-whitespace %s
|
|
DEF INVALID ALT FORM
|
|
PREFIXED_DEC=0x3
|
|
INVALID-ALT-FORM-LABEL: DEF INVALID ALT FORM
|
|
INVALID-ALT-FORM1-NEXT: PREFIXED_DEC=[[#%#u,PREFIXED_UNSI:]]
|
|
INVALID-ALT-FORM2-NEXT: PREFIXED_DEC=[[#%#d,PREFIXED_SIGN:]]
|
|
INVALID-ALT-FORM-MSG1: numeric-expression.txt:[[#@LINE-2]]:42: error: alternate form only supported for hex values
|
|
INVALID-ALT-FORM-MSG1-NEXT: {{I}}NVALID-ALT-FORM1-NEXT: PREFIXED_DEC={{\[\[#%#u,PREFIXED_UNSI:\]\]}}
|
|
INVALID-ALT-FORM-MSG1-NEXT: {{^}} ^{{$}}
|
|
INVALID-ALT-FORM-MSG2: numeric-expression.txt:[[#@LINE-4]]:42: error: alternate form only supported for hex values
|
|
INVALID-ALT-FORM-MSG2-NEXT: {{I}}NVALID-ALT-FORM2-NEXT: PREFIXED_DEC={{\[\[#%#d,PREFIXED_SIGN:\]\]}}
|
|
INVALID-ALT-FORM-MSG2-NEXT: {{^}} ^{{$}}
|
|
|
|
; Numeric variable definition of hex value with missing 0x prefix.
|
|
RUN: FileCheck --check-prefix INVALID-HEX-PREFIX-DEF --input-file %s %s
|
|
|
|
FAIL DEF ALT FORM // INVALID-HEX-PREFIX-DEF-LABEL: FAIL DEF ALT FORM
|
|
INVALID_PREFIXED_LHEX: xf // INVALID-HEX-PREFIX-DEF-NOT: {{^}}INVALID_PREFIXED_LHEX: [[#%#x,INVALID_PREFIXED_LHEX:]]
|
|
INVALID_PREFIXED_UHEX: 0E // INVALID-HEX-PREFIX-DEF-NOT: {{^}}INVALID_PREFIXED_UHEX: [[#%#X,INVALID_PREFIXED_UHEX:]]
|
|
|
|
; Numeric variable definition with precision specifier.
|
|
DEF PREC FMT // CHECK-LABEL: DEF PREC FMT
|
|
00000022 // CHECK-NEXT: {{^}}[[#%.8,PADDED_UNSI:]]
|
|
323232323 // CHECK-NEXT: {{^}}[[#%.8,PADDED_UNSI2:]]
|
|
00000018 // CHECK-NEXT: {{^}}[[#%.8u,PADDED_UNSI3:]]
|
|
181818181 // CHECK-NEXT: {{^}}[[#%.8u,PADDED_UNSI4:]]
|
|
0000000f // CHECK-NEXT: {{^}}[[#%.8x,PADDED_LHEX:]]
|
|
fffffffff // CHECK-NEXT: {{^}}[[#%.8x,PADDED_LHEX2:]]
|
|
0000000E // CHECK-NEXT: {{^}}[[#%.8X,PADDED_UHEX:]]
|
|
EEEEEEEEE // CHECK-NEXT: {{^}}[[#%.8X,PADDED_UHEX2:]]
|
|
-00000055 // CHECK-NEXT: {{^}}[[#%.8d,PADDED_SIGN:]]
|
|
-555555555 // CHECK-NEXT: {{^}}[[#%.8d,PADDED_SIGN2:]]
|
|
|
|
; Numeric variable definition with precision specifier with value not padded
|
|
; enough.
|
|
RUN: FileCheck --check-prefix INVALID-PADDING-DEF --input-file %s %s
|
|
|
|
FAIL DEF PREC FMT // INVALID-PADDING-DEF-LABEL: FAIL DEF PREC FMT
|
|
INVALID_PADDED_UNSI: 0000022 // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_UNSI: [[#%.8,INVALID_PADDED_UNSI:]]
|
|
INVALID_PADDED_UNSI2: 0000018 // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_UNSI2: [[#%.8u,INVALID_PADDED_UNSI2:]]
|
|
INVALID_PADDED_LHEX: 000000f // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_LHEX: [[#%.8x,INVALID_PADDED_LHEX:]]
|
|
INVALID_PADDED_UHEX: 000000E // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_UHEX: [[#%.8X,INVALID_PADDED_UHEX:]]
|
|
INVALID_PADDED_SIGN: -0000055 // INVALID-PADDING-DEF-NOT: {{^}}INVALID_PADDED_SIGN: [[#%.8d,INVALID_PADDED_SIGN:]]
|
|
|
|
; Numeric expressions with explicit matching format and default matching rule
|
|
; using variables defined on other lines without spaces.
|
|
USE EXPL FMT IMPL MATCH // CHECK-LABEL: USE EXPL FMT IMPL MATCH
|
|
11 // CHECK-NEXT: {{^}}[[#%u,UNSI]]
|
|
12 // CHECK-NEXT: {{^}}[[#%u,UNSI+1]]
|
|
10 // CHECK-NEXT: {{^}}[[#%u,UNSI-1]]
|
|
15 // CHECK-NEXT: {{^}}[[#%u,add(UNSI,4)]]
|
|
11 // CHECK-NEXT: {{^}}[[#%u,max(UNSI,7)]]
|
|
99 // CHECK-NEXT: {{^}}[[#%u,max(UNSI,99)]]
|
|
7 // CHECK-NEXT: {{^}}[[#%u,min(UNSI,7)]]
|
|
11 // CHECK-NEXT: {{^}}[[#%u,min(UNSI,99)]]
|
|
8 // CHECK-NEXT: {{^}}[[#%u,sub(UNSI,3)]]
|
|
c // CHECK-NEXT: {{^}}[[#%x,LHEX]]
|
|
d // CHECK-NEXT: {{^}}[[#%x,LHEX+1]]
|
|
b // CHECK-NEXT: {{^}}[[#%x,LHEX-1]]
|
|
1a // CHECK-NEXT: {{^}}[[#%x,LHEX+0xe]]
|
|
1a // CHECK-NEXT: {{^}}[[#%x,LHEX+0xE]]
|
|
e // CHECK-NEXT: {{^}}[[#%x,add(LHEX,2)]]
|
|
ff // CHECK-NEXT: {{^}}[[#%x,max(LHEX,0xff)]]
|
|
a // CHECK-NEXT: {{^}}[[#%x,min(LHEX,0xa)]]
|
|
a // CHECK-NEXT: {{^}}[[#%x,sub(LHEX,2)]]
|
|
D // CHECK-NEXT: {{^}}[[#%X,UHEX]]
|
|
E // CHECK-NEXT: {{^}}[[#%X,UHEX+1]]
|
|
C // CHECK-NEXT: {{^}}[[#%X,UHEX-1]]
|
|
1B // CHECK-NEXT: {{^}}[[#%X,UHEX+0xe]]
|
|
1B // CHECK-NEXT: {{^}}[[#%X,UHEX+0xE]]
|
|
F // CHECK-NEXT: {{^}}[[#%X,add(UHEX,2)]]
|
|
FF // CHECK-NEXT: {{^}}[[#%X,max(UHEX,0xff)]]
|
|
A // CHECK-NEXT: {{^}}[[#%X,min(UHEX,0xa)]]
|
|
B // CHECK-NEXT: {{^}}[[#%X,sub(UHEX,2)]]
|
|
-30 // CHECK-NEXT: {{^}}[[#%d,SIGN]]
|
|
-29 // CHECK-NEXT: {{^}}[[#%d,SIGN+1]]
|
|
-31 // CHECK-NEXT: {{^}}[[#%d,SIGN-1]]
|
|
42 // CHECK-NEXT: {{^}}[[#%d,SIGN+72]]
|
|
-29 // CHECK-NEXT: {{^}}[[#%d,add(SIGN,1)]]
|
|
-17 // CHECK-NEXT: {{^}}[[#%d,max(SIGN,-17)]]
|
|
-30 // CHECK-NEXT: {{^}}[[#%d,min(SIGN,-17)]]
|
|
-31 // CHECK-NEXT: {{^}}[[#%d,sub(SIGN,1)]]
|
|
11 // CHECK-NEXT: {{^}}[[#%u,UNSIa]]
|
|
11 // CHECK-NEXT: {{^}}[[#%u,UNSIb]]
|
|
11 // CHECK-NEXT: {{^}}[[#%u,UNSIc]]
|
|
c // CHECK-NEXT: {{^}}[[#%x,LHEXa]]
|
|
|
|
; Numeric expressions with explicit matching format and default matching rule
|
|
; using variables defined on other lines with different spacing.
|
|
USE EXPL FMT IMPL MATCH SPC // CHECK-LABEL: USE EXPL FMT IMPL MATCH SPC
|
|
11 // CHECK-NEXT: {{^}}[[#%u, UNSI]]
|
|
11 // CHECK-NEXT: {{^}}[[# %u, UNSI]]
|
|
11 // CHECK-NEXT: {{^}}[[# %u, UNSI ]]
|
|
12 // CHECK-NEXT: {{^}}[[#%u, UNSI+1]]
|
|
12 // CHECK-NEXT: {{^}}[[# %u, UNSI+1]]
|
|
12 // CHECK-NEXT: {{^}}[[# %u , UNSI+1]]
|
|
12 // CHECK-NEXT: {{^}}[[# %u , UNSI +1]]
|
|
12 // CHECK-NEXT: {{^}}[[# %u , UNSI + 1]]
|
|
12 // CHECK-NEXT: {{^}}[[# %u , UNSI + 1 ]]
|
|
10 // CHECK-NEXT: {{^}}[[#%u, UNSI-1]]
|
|
10 // CHECK-NEXT: {{^}}[[# %u, UNSI-1]]
|
|
10 // CHECK-NEXT: {{^}}[[# %u , UNSI-1]]
|
|
10 // CHECK-NEXT: {{^}}[[# %u , UNSI -1]]
|
|
10 // CHECK-NEXT: {{^}}[[# %u , UNSI - 1]]
|
|
10 // CHECK-NEXT: {{^}}[[# %u , UNSI - 1 ]]
|
|
13 // CHECK-NEXT: {{^}}[[#%u, add(UNSI,2)]]
|
|
13 // CHECK-NEXT: {{^}}[[# %u, add(UNSI,2)]]
|
|
13 // CHECK-NEXT: {{^}}[[# %u , add(UNSI,2)]]
|
|
13 // CHECK-NEXT: {{^}}[[# %u , add(UNSI, 2)]]
|
|
13 // CHECK-NEXT: {{^}}[[# %u , add( UNSI, 2)]]
|
|
13 // CHECK-NEXT: {{^}}[[# %u , add( UNSI,2)]]
|
|
13 // CHECK-NEXT: {{^}}[[# %u , add(UNSI,2) ]]
|
|
13 // CHECK-NEXT: {{^}}[[# %u , add (UNSI,2)]]
|
|
104 // CHECK-NEXT: {{^}}[[# %u , UNSI + sub( add (100 , UNSI+ 1 ), 20) +1 ]]
|
|
|
|
; Numeric expressions with explicit matching format, precision, form and
|
|
; default matching rule using variables defined on other lines without spaces.
|
|
USE EXPL FMT WITH PREC IMPL MATCH // CHECK-LABEL: USE EXPL FMT WITH PREC IMPL MATCH
|
|
11 // CHECK-NEXT: {{^}}[[#%.1u,UNSI]]
|
|
00000011 // CHECK-NEXT: {{^}}[[#%.8u,UNSI]]
|
|
1c // CHECK-NEXT: {{^}}[[#%.1x,LHEX+16]]
|
|
0x1c // CHECK-NEXT: {{^}}[[#%#.1x,LHEX+16]]
|
|
0000000c // CHECK-NEXT: {{^}}[[#%.8x,LHEX]]
|
|
0x0000000c // CHECK-NEXT: {{^}}[[#%#.8x,LHEX]]
|
|
1D // CHECK-NEXT: {{^}}[[#%.1X,UHEX+16]]
|
|
0x1D // CHECK-NEXT: {{^}}[[#%#.1X,UHEX+16]]
|
|
0000000D // CHECK-NEXT: {{^}}[[#%.8X,UHEX]]
|
|
0x0000000D // CHECK-NEXT: {{^}}[[#%#.8X,UHEX]]
|
|
-30 // CHECK-NEXT: {{^}}[[#%.1d,SIGN]]
|
|
-00000030 // CHECK-NEXT: {{^}}[[#%.8d,SIGN]]
|
|
|
|
; Numeric expressions with explicit matching format, precision and wrong
|
|
; padding, and default matching rule using variables defined on other lines
|
|
; without spaces.
|
|
RUN: FileCheck --check-prefixes CHECK,INVALID-PADDING-EXPL-USE --input-file %s %s
|
|
|
|
FAIL USE IMPL FMT WITH PREC EXPL MATCH // INVALID-PADDING-EXPL-USE-LABEL: FAIL USE IMPL FMT WITH PREC IMPL MATCH
|
|
INVALID UNSI+1: 0000012 // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UNSI+1: [[#%.8u,UNSI+1]]
|
|
INVALID UNSI-1: 000000010 // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UNSI-1: [[#%.8u,UNSI-1]]
|
|
INVALID LHEX+1: 000000d // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID LHEX+1: [[#%.8x,LHEX+1]]
|
|
INVALID LHEX-1: 00000000b // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID LHEX-1: [[#%.8x,LHEX-1]]
|
|
INVALID UHEX+1: 000000E // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UHEX+1: [[#%.8X,UHEX+1]]
|
|
INVALID UHEX-1: 00000000C // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID UHEX-1: [[#%.8X,UHEX-1]]
|
|
INVALID SIGN+1: -0000029 // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID SIGN+1: [[#%.8d,SIGN+1]]
|
|
INVALID SIGN-1: -000000031 // INVALID-PADDING-EXPL-USE-NOT: {{^}}INVALID SIGN-1: [[#%.8d,SIGN-1]]
|
|
|
|
; Numeric expressions with implicit matching format and default matching rule
|
|
; using variables defined on other lines.
|
|
USE IMPL FMT IMPL MATCH // CHECK-LABEL: USE IMPL FMT IMPL MATCH
|
|
11 // CHECK-NEXT: {{^}}[[#UNSI]]
|
|
12 // CHECK-NEXT: {{^}}[[#UNSI+1]]
|
|
10 // CHECK-NEXT: {{^}}[[#UNSI-1]]
|
|
99 // CHECK-NEXT: {{^}}[[#max(UNSI,99)]]
|
|
7 // CHECK-NEXT: {{^}}[[#min(UNSI,7)]]
|
|
c // CHECK-NEXT: {{^}}[[#LHEX]]
|
|
d // CHECK-NEXT: {{^}}[[#LHEX+1]]
|
|
b // CHECK-NEXT: {{^}}[[#LHEX-1]]
|
|
1a // CHECK-NEXT: {{^}}[[#LHEX+0xe]]
|
|
1a // CHECK-NEXT: {{^}}[[#LHEX+0xE]]
|
|
ff // CHECK-NEXT: {{^}}[[#max(LHEX,255)]]
|
|
a // CHECK-NEXT: {{^}}[[#min(LHEX,10)]]
|
|
D // CHECK-NEXT: {{^}}[[#UHEX]]
|
|
E // CHECK-NEXT: {{^}}[[#UHEX+1]]
|
|
C // CHECK-NEXT: {{^}}[[#UHEX-1]]
|
|
1B // CHECK-NEXT: {{^}}[[#UHEX+0xe]]
|
|
1B // CHECK-NEXT: {{^}}[[#UHEX+0xE]]
|
|
FF // CHECK-NEXT: {{^}}[[#max(UHEX,255)]]
|
|
A // CHECK-NEXT: {{^}}[[#min(UHEX,10)]]
|
|
-30 // CHECK-NEXT: {{^}}[[#SIGN]]
|
|
-29 // CHECK-NEXT: {{^}}[[#SIGN+1]]
|
|
-31 // CHECK-NEXT: {{^}}[[#SIGN-1]]
|
|
|
|
; Numeric expressions with implicit matching format, precision, and default
|
|
; matching rule using variables defined on other lines.
|
|
USE IMPL FMT WITH PREC IMPL MATCH // CHECK-LABEL: USE IMPL FMT WITH PREC IMPL MATCH
|
|
00000023 // CHECK-NEXT: {{^}}[[#PADDED_UNSI+1]]
|
|
323232324 // CHECK-NEXT: {{^}}[[#PADDED_UNSI2+1]]
|
|
00000019 // CHECK-NEXT: {{^}}[[#PADDED_UNSI3+1]]
|
|
181818182 // CHECK-NEXT: {{^}}[[#PADDED_UNSI4+1]]
|
|
00000010 // CHECK-NEXT: {{^}}[[#PADDED_LHEX+1]]
|
|
1000000000 // CHECK-NEXT: {{^}}[[#PADDED_LHEX2+1]]
|
|
0000000F // CHECK-NEXT: {{^}}[[#PADDED_UHEX+1]]
|
|
EEEEEEEEF // CHECK-NEXT: {{^}}[[#PADDED_UHEX2+1]]
|
|
-00000054 // CHECK-NEXT: {{^}}[[#PADDED_SIGN+1]]
|
|
-555555554 // CHECK-NEXT: {{^}}[[#PADDED_SIGN2+1]]
|
|
|
|
; Numeric expression with implicit matching format, precision and wrong amount
|
|
; of padding, and default matching rule using variables defined on other lines.
|
|
RUN: FileCheck --check-prefixes CHECK,INVALID-PADDING-IMPL-USE --input-file %s %s
|
|
|
|
FAIL USE IMPL FMT WITH PREC IMPL MATCH // INVALID-PADDING-IMPL-USE-LABEL: FAIL USE IMPL FMT WITH PREC IMPL MATCH
|
|
INVALID PADDED_UNSI+1: 0000023 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI+1: [[#PADDED_UNSI+1]]
|
|
INVALID PADDED_UNSI-1: 000000021 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI-1: [[#PADDED_UNSI-1]]
|
|
INVALID PADDED_UNSI3+1: 0000019 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI3+1: [[#PADDED_UNSI3+1]]
|
|
INVALID PADDED_UNSI3-1: 000000017 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UNSI3-1: [[#PADDED_UNSI3-1]]
|
|
INVALID PADDED_LHEX+1: 0000010 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_LHEX+1: [[#PADDED_LHEX+1]]
|
|
INVALID PADDED_LHEX-1: 00000000e // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_LHEX-1: [[#PADDED_LHEX-1]]
|
|
INVALID PADDED_UHEX+1: 000000F // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UHEX+1: [[#PADDED_UHEX+1]]
|
|
INVALID PADDED_UHEX-1: 00000000D // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_UHEX-1: [[#PADDED_UHEX-1]]
|
|
INVALID PADDED_SIGN+1: -0000054 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_SIGN+1: [[#PADDED_SIGN+1]]
|
|
INVALID PADDED_SIGN-1: -000000056 // INVALID-PADDING-IMPL-USE-NOT: {{^}}INVALID PADDED_SIGN-1: [[#PADDED_SIGN-1]]
|
|
|
|
; Numeric expressions using variables defined on other lines and an immediate
|
|
; interpreted as an unsigned value.
|
|
; Note: 9223372036854775819 = 0x8000000000000000 + 11
|
|
USE IMPL FMT IMPL MATCH UNSIGNED IMM
|
|
9223372036854775819
|
|
CHECK-LABEL: USE IMPL FMT IMPL MATCH UNSIGNED IMM
|
|
CHECK-NEXT: [[#UNSI+0x8000000000000000]]
|
|
|
|
; Numeric expressions in default matching format and explicit matching rule using
|
|
; variables defined on other lines.
|
|
USE DEF FMT EXPL MATCH // CHECK-LABEL: USE DEF FMT EXPL MATCH
|
|
11 // CHECK-NEXT: {{^}}[[#==UNSI]]
|
|
11 // CHECK-NEXT: {{^}}[[# == UNSI]]
|
|
12 // CHECK-NEXT: {{^}}[[#UNSI2: == UNSI + 1]]
|
|
12 // CHECK-NEXT: {{^}}[[#==UNSI2]]
|
|
|
|
; Numeric expressions in default matching format and explicit matching rule using
|
|
; variable defined on other lines with match failure.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefix NUMEXPR-CONSTRAINT-NOMATCH --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --check-prefix NUMEXPR-CONSTRAINT-NOMATCH-MSG --strict-whitespace %s
|
|
|
|
USE DEF FMT EXPL NO MATCH
|
|
UNSI=11
|
|
UNSI: 12
|
|
NUMEXPR-CONSTRAINT-NOMATCH-LABEL: USE DEF FMT EXPL NO MATCH
|
|
NUMEXPR-CONSTRAINT-NOMATCH-NEXT: UNSI=[[#UNSI:]]
|
|
NUMEXPR-CONSTRAINT-NOMATCH-NEXT: UNSI: [[#==UNSI]]
|
|
NUMEXPR-CONSTRAINT-NOMATCH-MSG: numeric-expression.txt:[[#@LINE-1]]:34: error: {{N}}UMEXPR-CONSTRAINT-NOMATCH-NEXT: expected string not found in input
|
|
NUMEXPR-CONSTRAINT-NOMATCH-MSG-NEXT: {{N}}UMEXPR-CONSTRAINT-NOMATCH-NEXT: UNSI: {{\[\[#==UNSI\]\]}}
|
|
NUMEXPR-CONSTRAINT-NOMATCH-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
; Empty numeric expression with matching constraint.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefix EMPTY-NUMEXPR-CONSTRAINT --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --check-prefix EMPTY-NUMEXPR-CONSTRAINT-MSG --strict-whitespace %s
|
|
|
|
EMPTY NUMEXPR USE WITH CONSTRAINT
|
|
18
|
|
EMPTY-NUMEXPR-CONSTRAINT-LABEL: EMPTY NUMEXPR USE WITH CONSTRAINT
|
|
EMPTY-NUMEXPR-CONSTRAINT-NEXT: [[# ==]]
|
|
EMPTY-NUMEXPR-CONSTRAINT-MSG: numeric-expression.txt:[[#@LINE-1]]:38: error: empty numeric expression should not have a constraint
|
|
EMPTY-NUMEXPR-CONSTRAINT-MSG-NEXT: {{E}}MPTY-NUMEXPR-CONSTRAINT-NEXT: {{\[\[# ==\]\]}}
|
|
EMPTY-NUMEXPR-CONSTRAINT-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
; Definition from empty numeric expression with matching constraint.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefix EMPTY-NUMDEF-CONSTRAINT --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --check-prefix EMPTY-NUMDEF-CONSTRAINT-MSG %s
|
|
|
|
EMPTY NUMEXPR DEF WITH CONSTRAINT
|
|
18
|
|
EMPTY-NUMDEF-CONSTRAINT-LABEL: EMPTY NUMEXPR CONSTRAINT
|
|
EMPTY-NUMDEF-CONSTRAINT-NEXT: [[#VARDEF: ==]]
|
|
EMPTY-NUMDEF-CONSTRAINT-MSG: numeric-expression.txt:[[#@LINE-1]]:44: error: empty numeric expression should not have a constraint
|
|
EMPTY-NUMDEF-CONSTRAINT-MSG-NEXT: {{E}}MPTY-NUMDEF-CONSTRAINT-NEXT: {{\[\[#VARDEF: ==\]\]}}
|
|
EMPTY-NUMDEF-CONSTRAINT-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
; Numeric expressions with matching format overriding the implicit format of
|
|
; variables defined on other lines.
|
|
USE CONV FMT IMPL MATCH // CHECK-LABEL: USE CONV FMT IMPL MATCH
|
|
b // CHECK-NEXT: {{^}}[[# %x, UNSI]]
|
|
B // CHECK-NEXT: {{^}}[[# %X, UNSI]]
|
|
-1 // CHECK-NEXT: {{^}}[[# %d, UNSI-12]]
|
|
12 // CHECK-NEXT: {{^}}[[# %u, LHEX]]
|
|
C // CHECK-NEXT: {{^}}[[# %X, LHEX]]
|
|
-2 // CHECK-NEXT: {{^}}[[# %d, LHEX-14]]
|
|
13 // CHECK-NEXT: {{^}}[[# %u, UHEX]]
|
|
d // CHECK-NEXT: {{^}}[[# %x, UHEX]]
|
|
-5 // CHECK-NEXT: {{^}}[[# %d, UHEX-18]]
|
|
15 // CHECK-NEXT: {{^}}[[# %u, SIGN+45]]
|
|
f // CHECK-NEXT: {{^}}[[# %x, SIGN+45]]
|
|
F // CHECK-NEXT: {{^}}[[# %X, SIGN+45]]
|
|
|
|
; Conflicting implicit format.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefixes CHECK,FMT-CONFLICT1 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix FMT-CONFLICT1-MSG %s
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefixes CHECK,FMT-CONFLICT2 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix FMT-CONFLICT2-MSG %s
|
|
|
|
VAR USE IMPL FMT CONFLICT
|
|
23
|
|
FMT-CONFLICT1-LABEL: VAR USE IMPL FMT CONFLICT
|
|
FMT-CONFLICT1-NEXT: [[#UNSI + LHEX]]
|
|
FMT-CONFLICT1-MSG: numeric-expression.txt:[[#@LINE-1]]:24: error: implicit format conflict between 'UNSI' (%u) and 'LHEX' (%x), need an explicit format specifier
|
|
FMT-CONFLICT1-MSG-NEXT: {{F}}MT-CONFLICT1-NEXT: {{\[\[#UNSI \+ LHEX\]\]}}
|
|
FMT-CONFLICT1-MSG-NEXT: {{^ \^$}}
|
|
|
|
VAR USE IMPL FMT CONFLICT COMPLEX
|
|
34
|
|
FMT-CONFLICT2-LABEL: VAR USE IMPL FMT CONFLICT
|
|
FMT-CONFLICT2-NEXT: [[#UNSI + UNSIa + LHEX]]
|
|
FMT-CONFLICT2-MSG: numeric-expression.txt:[[#@LINE-1]]:24: error: implicit format conflict between 'UNSI + UNSIa' (%u) and 'LHEX' (%x), need an explicit format specifier
|
|
FMT-CONFLICT2-MSG-NEXT: {{F}}MT-CONFLICT2-NEXT: {{\[\[#UNSI \+ UNSIa \+ LHEX\]\]}}
|
|
FMT-CONFLICT2-MSG-NEXT: {{^ \^$}}
|
|
|
|
; Explicitly specified format can override conflicting implicit formats.
|
|
VAR USE IMPL OVERRIDE FMT CONFLICT // CHECK-LABEL: VAR USE IMPL OVERRIDE FMT CONFLICT
|
|
23 // CHECK-NEXT: {{^}}[[# %u, UNSI + LHEX]]
|
|
|
|
; Numeric expressions using more than one variable defined on other lines.
|
|
USE MULTI VAR // CHECK-LABEL: USE MULTI VAR
|
|
22 // CHECK-NEXT: {{^}}[[#UNSI+UNSIa]]
|
|
|
|
; Numeric expression using a variable defined from a numeric expression.
|
|
DEF EXPR GOOD MATCH // CHECK-LABEL: DEF EXPR GOOD MATCH
|
|
42 // CHECK-NEXT: {{^}}[[# VAR42:UNSI+31]]
|
|
41 // CHECK-NEXT: {{^}}[[# VAR42-1]]
|
|
|
|
; Empty numeric expression.
|
|
EMPTY NUM EXPR // CHECK-LABEL: EMPTY NUM EXPR
|
|
foo 104 bar // CHECK-NEXT: {{^}}foo [[#]] bar
|
|
|
|
; Numeric expressions using parentheses.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck -D#NUMVAR=10 --check-prefix PAREN-OP \
|
|
RUN: --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix PAREN-OP-MSG %s
|
|
|
|
PAREN EXPRESSIONS // PAREN-OP-LABEL: PAREN EXPRESSIONS
|
|
11 // PAREN-OP-NEXT: [[#(NUMVAR+2)-1]]
|
|
11 // PAREN-OP-NEXT: [[#NUMVAR+(2-1)]]
|
|
11 // PAREN-OP-NEXT: [[#NUMVAR+(2-1]]
|
|
PAREN-OP-MSG: numeric-expression.txt:[[#@LINE-1]]:36: error: missing ')' at end of nested expression
|
|
PAREN-OP-MSG-NEXT: {{P}}AREN-OP-NEXT: {{\[\[#NUMVAR\+\(2\-1]\]}}
|
|
PAREN-OP-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
; Numeric expression using undefined variables.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefix UNDEF-USE --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix UNDEF-USE-MSG %s
|
|
|
|
UNDEF VAR USE
|
|
UNDEFVAR: 11
|
|
UNDEF-USE-LABEL: UNDEF VAR USE
|
|
UNDEF-USE-NEXT: UNDEFVAR: [[#UNDEFVAR1+UNDEFVAR2]]
|
|
UNDEF-USE-MSG: numeric-expression.txt:[[#@LINE-1]]:30: error: undefined variable: UNDEFVAR1
|
|
UNDEF-USE-MSG-NEXT: {{U}}NDEF-USE-NEXT: {{U}}NDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}}
|
|
UNDEF-USE-MSG-NEXT: {{^}} ^{{$}}
|
|
UNDEF-USE-MSG-NEXT: numeric-expression.txt:[[#@LINE-4]]:40: error: undefined variable: UNDEFVAR2
|
|
UNDEF-USE-MSG-NEXT: {{U}}NDEF-USE-NEXT: {{U}}NDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}}
|
|
UNDEF-USE-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
; Numeric expression in negative directive using undefined variables.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefix UNDEF-USE2 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix UNDEF-USE-MSG2 %s
|
|
|
|
CHECK NOT UNDEF VAR USE
|
|
END MARKER
|
|
UNDEF-USE2-LABEL: CHECK NOT UNDEF VAR USE
|
|
UNDEF-USE2-NOT: UNDEFVAR: [[#UNDEFVAR1+UNDEFVAR2]]
|
|
UNDEF-USE2: END MARKER
|
|
UNDEF-USE-MSG2: numeric-expression.txt:[[#@LINE-2]]:30: error: undefined variable: UNDEFVAR1
|
|
UNDEF-USE-MSG2-NEXT: {{U}}NDEF-USE2-NOT: {{U}}NDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}}
|
|
UNDEF-USE-MSG2-NEXT: {{^}} ^{{$}}
|
|
UNDEF-USE-MSG2-NEXT: numeric-expression.txt:[[#@LINE-5]]:40: error: undefined variable: UNDEFVAR2
|
|
UNDEF-USE-MSG2-NEXT: {{U}}NDEF-USE2-NOT: {{U}}NDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}}
|
|
UNDEF-USE-MSG2-NEXT: {{^}} ^{{$}}
|
|
|
|
; Numeric expression with unsupported operator.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck -D#NUMVAR=10 --check-prefix INVAL-OP \
|
|
RUN: --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix INVAL-OP-MSG %s
|
|
|
|
INVALID OPERATOR
|
|
NUMVAR*2: 22
|
|
INVAL-OP-LABEL: INVALID OPERATOR
|
|
INVAL-OP-NEXT: NUMVAR*2: [[#NUMVAR*2]]
|
|
INVAL-OP-MSG: numeric-expression.txt:[[#@LINE-1]]:35: error: unsupported operation '*'
|
|
INVAL-OP-MSG-NEXT: {{I}}NVAL-OP-NEXT: NUMVAR*2: {{\[\[#NUMVAR\*2\]\]}}
|
|
INVAL-OP-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
; Name conflict between Numeric variable definition and string variable
|
|
; definition whether from the command-line or input text.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT1,CONFLICT2 \
|
|
RUN: --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck -D#NUMVAR=42 --check-prefixes CONFLICT,CONFLICT2 \
|
|
RUN: --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck -D#NUMVAR=42 -DNUMVAR=foobar --check-prefix CONFLICT \
|
|
RUN: --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix CLI-STR-CONFLICT %s
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT3,CONFLICT4 \
|
|
RUN: --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck -DSTRVAR=foobar --check-prefixes CONFLICT,CONFLICT4 \
|
|
RUN: --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck -DSTRVAR=foobar -D#STRVAR=42 --check-prefix CONFLICT \
|
|
RUN: --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix CLI-NUM-CONFLICT %s
|
|
|
|
STRVAR NUMVAR CONFLICT
|
|
redef1 42
|
|
foobar
|
|
redef2 42
|
|
CONFLICT-LABEL: STRVAR NUMVAR CONFLICT
|
|
CONFLICT1-NEXT: redef1 [[#NUMVAR:]]
|
|
CONFLICT2: [[NUMVAR:foo.*]]
|
|
CONFLICT3: [[STRVAR:foo.*]]
|
|
CONFLICT4: redef2 [[#STRVAR:]]
|
|
INPUT-STR-CONFLICT: numeric-expression.txt:[[#@LINE-3]]:14: error: numeric variable with name 'NUMVAR' already exists
|
|
INPUT-STR-CONFLICT-NEXT: {{C}}ONFLICT2: {{\[\[NUMVAR:foo\.\*\]\]}}
|
|
INPUT-STR-CONFLICT-NEXT: {{^}} ^{{$}}
|
|
CLI-STR-CONFLICT: Global defines:2:19: error: numeric variable with name 'NUMVAR' already exists
|
|
CLI-STR-CONFLICT-NEXT: Global define #2: NUMVAR=foobar
|
|
CLI-STR-CONFLICT-NEXT: {{^}} ^{{$}}
|
|
INPUT-NUM-CONFLICT: numeric-expression.txt:[[#@LINE-7]]:22: error: string variable with name 'STRVAR' already exists
|
|
INPUT-NUM-CONFLICT-NEXT: CONFLICT4: redef2 {{\[\[#STRVAR:\]\]}}
|
|
INPUT-NUM-CONFLICT-NEXT: {{^}} ^{{$}}
|
|
CLI-NUM-CONFLICT: Global defines:2:45: error: string variable with name 'STRVAR' already exists
|
|
CLI-NUM-CONFLICT-NEXT: Global define #2: #STRVAR=42 (parsed as: {{\[\[#STRVAR:42\]\]}})
|
|
CLI-NUM-CONFLICT-NEXT: {{^}} ^{{$}}
|
|
|
|
; Numeric variable definition with big value.
|
|
RUN: FileCheck --check-prefix BIGVAL --input-file %s %s
|
|
|
|
BIG VALUE
|
|
NUMVAR: 10000000000000000000000
|
|
BIGVAL-LABEL: BIG VALUE
|
|
BIGVAL-NEXT: NUMVAR: [[#NUMVAR:]]
|
|
|
|
; Verify that when a variable is set to an expression the expression is still
|
|
; checked.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefix DEF-EXPR-FAIL --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix DEF-EXPR-FAIL-MSG %s
|
|
|
|
DEF EXPR WRONG MATCH
|
|
20
|
|
43
|
|
DEF-EXPR-FAIL-LABEL: DEF EXPR WRONG MATCH
|
|
DEF-EXPR-FAIL-NEXT: [[# VAR20:]]
|
|
DEF-EXPR-FAIL-NEXT: [[# VAR42: VAR20+22]]
|
|
DEF-EXPR-FAIL-MSG: numeric-expression.txt:[[#@LINE-1]]:21: error: {{D}}EF-EXPR-FAIL-NEXT: is not on the line after the previous match
|
|
DEF-EXPR-FAIL-MSG-NEXT: {{D}}EF-EXPR-FAIL-NEXT: {{\[\[# VAR42: VAR20\+22\]\]}}
|
|
DEF-EXPR-FAIL-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
; Verify that using a numeric variable defined on the same line (whether from
|
|
; input or from an expression) is rejected.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefix SAME-LINE-USE1 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix SAME-LINE-USE-MSG1 %s
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefix SAME-LINE-USE2 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix SAME-LINE-USE-MSG2 %s
|
|
|
|
SAME LINE USE
|
|
3
|
|
4 5
|
|
SAME-LINE-USE1-LABEL: SAME LINE USE
|
|
SAME-LINE-USE1-NEXT: [[#]]
|
|
SAME-LINE-USE1-NEXT: [[#UNSI:]] [[#UNSI+1]]
|
|
SAME-LINE-USE-MSG1: numeric-expression.txt:[[#@LINE-1]]:36: error: numeric variable 'UNSI' defined earlier in the same CHECK directive
|
|
SAME-LINE-USE-MSG1-NEXT: {{S}}AME-LINE-USE1-NEXT: {{\[\[#UNSI:\]\] \[\[#UNSI\+1\]\]}}
|
|
SAME-LINE-USE-MSG1-NEXT: {{^}} ^{{$}}
|
|
|
|
SAME-LINE-USE2-LABEL: SAME LINE USE
|
|
SAME-LINE-USE2-NEXT: [[#UNSI:]]
|
|
SAME-LINE-USE2-NEXT: [[#UNSI2:UNSI+1]] [[#UNSI2+1]]
|
|
SAME-LINE-USE-MSG2: numeric-expression.txt:[[#@LINE-1]]:43: error: numeric variable 'UNSI2' defined earlier in the same CHECK directive
|
|
SAME-LINE-USE-MSG2-NEXT: {{S}}AME-LINE-USE2-NEXT: {{\[\[#UNSI2:UNSI\+1\]\] \[\[#UNSI2\+1\]\]}}
|
|
SAME-LINE-USE-MSG2-NEXT: {{^}} ^{{$}}
|
|
|
|
; Invalid change of format in variable redefinition.
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck --check-prefix REDEF-NEW-FMT --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix REDEF-NEW-FMT-MSG %s
|
|
|
|
VAR REDEF FMT CHANGE
|
|
22
|
|
DC
|
|
REDEF-NEW-FMT-LABEL: VAR REDEF FMT CHANGE
|
|
REDEF-NEW-FMT-NEXT: [[#UNSI:]]
|
|
REDEF-NEW-FMT-NEXT: [[#%X,UNSI:]]
|
|
REDEF-NEW-FMT-MSG: numeric-expression.txt:[[#@LINE-1]]:31: error: format different from previous variable definition
|
|
REDEF-NEW-FMT-MSG-NEXT: {{R}}EDEF-NEW-FMT-NEXT: {{\[\[#%X,UNSI:\]\]}}
|
|
REDEF-NEW-FMT-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
; Numeric expression with big resulting value.
|
|
RUN: FileCheck --check-prefix OVERFLOW --input-file %s %s
|
|
|
|
OVERFLOW EXPRESSION
|
|
BIGVAL: 10000000000000000
|
|
OVERFLOW-LABEL: OVERFLOW EXPRESSION
|
|
OVERFLOW-NEXT: BIGVAL: [[#%X,0x8000000000000000+0x8000000000000000]]
|
|
|
|
; Numeric expression with big negative resulting value.
|
|
RUN: FileCheck --check-prefix UNDERFLOW --input-file %s %s
|
|
|
|
UNDERFLOW EXPRESSION
|
|
TINYVAR: -18446744073709551616 # -0x10000000000000000
|
|
UNDERFLOW-LABEL: UNDERFLOW EXPRESSION
|
|
UNDERFLOW-NEXT: TINYVAR: [[#%d,-0x8000000000000000-0x8000000000000000]]
|
|
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-MISSING-CLOSING-BRACKET --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix CALL-MISSING-CLOSING-BRACKET-MSG %s
|
|
|
|
CALL MISSING CLOSING BRACKET
|
|
30
|
|
CALL-MISSING-CLOSING-BRACKET-LABEL: CALL MISSING CLOSING BRACKET
|
|
CALL-MISSING-CLOSING-BRACKET-NEXT: [[#add(NUMVAR,3]]
|
|
CALL-MISSING-CLOSING-BRACKET-MSG: numeric-expression.txt:[[#@LINE-1]]:51: error: missing ')' at end of call expression
|
|
CALL-MISSING-CLOSING-BRACKET-MSG-NEXT: {{C}}ALL-MISSING-CLOSING-BRACKET-NEXT: {{\[\[#add\(NUMVAR,3\]\]}}
|
|
CALL-MISSING-CLOSING-BRACKET-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-MISSING-ARGUMENT --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix CALL-MISSING-ARGUMENT-MSG %s
|
|
|
|
CALL MISSING ARGUMENT
|
|
30
|
|
CALL-MISSING-ARGUMENT-LABEL: CALL MISSING ARGUMENT
|
|
CALL-MISSING-ARGUMENT-NEXT: [[#add(NUMVAR,)]]
|
|
CALL-MISSING-ARGUMENT-MSG: numeric-expression.txt:[[#@LINE-1]]:43: error: missing argument
|
|
CALL-MISSING-ARGUMENT-MSG-NEXT: {{C}}ALL-MISSING-ARGUMENT-NEXT: {{\[\[#add\(NUMVAR,\)\]\]}}
|
|
CALL-MISSING-ARGUMENT-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-WRONG-ARGUMENT-COUNT --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix CALL-WRONG-ARGUMENT-COUNT-MSG %s
|
|
|
|
CALL WRONG ARGUMENT COUNT
|
|
30
|
|
CALL-WRONG-ARGUMENT-COUNT-LABEL: CALL WRONG ARGUMENT COUNT
|
|
CALL-WRONG-ARGUMENT-COUNT-NEXT: [[#add(NUMVAR)]]
|
|
CALL-WRONG-ARGUMENT-COUNT-MSG: numeric-expression.txt:[[#@LINE-1]]:36: error: function 'add' takes 2 arguments but 1 given
|
|
CALL-WRONG-ARGUMENT-COUNT-MSG-NEXT: {{C}}ALL-WRONG-ARGUMENT-COUNT-NEXT: {{\[\[#add\(NUMVAR\)\]\]}}
|
|
CALL-WRONG-ARGUMENT-COUNT-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
RUN: %ProtectFileCheckOutput \
|
|
RUN: not FileCheck -D#NUMVAR=10 --check-prefix CALL-UNDEFINED-FUNCTION --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix CALL-UNDEFINED-FUNCTION-MSG %s
|
|
|
|
CALL UNDEFINED FUNCTION
|
|
30
|
|
CALL-UNDEFINED-FUNCTION-LABEL: CALL UNDEFINED FUNCTION
|
|
CALL-UNDEFINED-FUNCTION-NEXT: [[#bogus_function(NUMVAR)]]
|
|
CALL-UNDEFINED-FUNCTION-MSG: numeric-expression.txt:[[#@LINE-1]]:34: error: call to undefined function 'bogus_function'
|
|
CALL-UNDEFINED-FUNCTION-MSG-NEXT: {{C}}ALL-UNDEFINED-FUNCTION-NEXT: {{\[\[#bogus_function\(NUMVAR\)\]\]}}
|
|
CALL-UNDEFINED-FUNCTION-MSG-NEXT: {{^}} ^{{$}}
|