mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
393fb2cc2e
Summary: Commit r366897 introduced the possibility to set a variable from an expression, such as [[#VAR2:VAR1+3]]. While introducing this feature, it introduced extra logic to allow using such a variable on the same line later on. Unfortunately that extra logic is flawed as it relies on a mapping from variable to expression defining it when the mapping is from variable definition to expression. This flaw causes among other issues PR42896. This commit avoids the problem by forbidding all use of a variable defined on the same line, and removes the now useless logic. Redesign will be done in a later commit because it will require some amount of refactoring first for the solution to be clean. One example is the need for some sort of transaction mechanism to set a variable temporarily and from an expression and rollback if the CHECK pattern does not match so that diagnostics show the right variable values. Reviewers: jhenderson, chandlerc, jdenny, probinson, grimar, arichardson, rnk Subscribers: JonChesterfield, rogfer01, hfinkel, kristina, rnk, tra, arichardson, grimar, dblaikie, probinson, llvm-commits, hiraditya Tags: #llvm Differential Revision: https://reviews.llvm.org/D66141 llvm-svn: 370663
216 lines
7.9 KiB
Plaintext
216 lines
7.9 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 without spaces.
|
|
DEF NO SPC
|
|
10
|
|
CHECK-LABEL: DEF NO SPC
|
|
CHECK-NEXT: [[#VAR1:]]
|
|
|
|
; Numeric variable definition with different spacing.
|
|
DEF SPC
|
|
11
|
|
11
|
|
11
|
|
CHECK-LABEL: DEF SPC
|
|
CHECK-NEXT: [[# VAR1a:]]
|
|
CHECK-NEXT: [[# VAR1b :]]
|
|
CHECK-NEXT: [[# VAR1c : ]]
|
|
|
|
; Numeric variable redefinition.
|
|
REDEF NO SPC
|
|
11
|
|
CHECK-LABEL: REDEF
|
|
CHECK-NEXT: [[#VAR1:]]
|
|
|
|
; Numeric expressions using variables defined on other lines without spaces.
|
|
USE NO SPC
|
|
11
|
|
12
|
|
10
|
|
11
|
|
11
|
|
11
|
|
CHECK-LABEL: USE
|
|
CHECK-NEXT: [[#VAR1]]
|
|
CHECK-NEXT: [[#VAR1+1]]
|
|
CHECK-NEXT: [[#VAR1-1]]
|
|
CHECK-NEXT: [[#VAR1a]]
|
|
CHECK-NEXT: [[#VAR1b]]
|
|
CHECK-NEXT: [[#VAR1c]]
|
|
|
|
; Numeric expressions using variables defined on other lines with different
|
|
; spacing.
|
|
USE SPC
|
|
11
|
|
11
|
|
12
|
|
12
|
|
12
|
|
12
|
|
10
|
|
10
|
|
10
|
|
10
|
|
CHECK-LABEL: USE SPC
|
|
CHECK-NEXT: [[# VAR1]]
|
|
CHECK-NEXT: [[# VAR1 ]]
|
|
CHECK-NEXT: [[# VAR1+1]]
|
|
CHECK-NEXT: [[# VAR1 +1]]
|
|
CHECK-NEXT: [[# VAR1 + 1]]
|
|
CHECK-NEXT: [[# VAR1 + 1 ]]
|
|
CHECK-NEXT: [[# VAR1-1]]
|
|
CHECK-NEXT: [[# VAR1 -1]]
|
|
CHECK-NEXT: [[# VAR1 - 1]]
|
|
CHECK-NEXT: [[# VAR1 - 1 ]]
|
|
|
|
; Numeric expressions using variables defined on other lines and an immediate
|
|
; interpreted as an unsigned value.
|
|
; Note: 9223372036854775819 = 0x8000000000000000 + 11
|
|
; 9223372036854775808 = 0x8000000000000000
|
|
USE UNSIGNED IMM
|
|
9223372036854775819
|
|
CHECK-LABEL: USE UNSIGNED IMM
|
|
CHECK-NEXT: [[#VAR1+9223372036854775808]]
|
|
|
|
; Numeric expressions using more than one variable defined on other lines.
|
|
USE MULTI VAR
|
|
31
|
|
42
|
|
CHECK-LABEL: USE MULTI VAR
|
|
CHECK-NEXT: [[#VAR2:]]
|
|
CHECK-NEXT: [[#VAR1+VAR2]]
|
|
|
|
; Numeric expression using a variable defined from a numeric expression.
|
|
DEF EXPR GOOD MATCH
|
|
42
|
|
41
|
|
; CHECK-LABEL: DEF EXPR GOOD MATCH
|
|
; CHECK-NEXT: [[# VAR42:VAR1+31]]
|
|
; CHECK-NEXT: [[# VAR42-1]]
|
|
|
|
; Empty numeric expression.
|
|
EMPTY NUM EXPR
|
|
foo 104 bar
|
|
; CHECK-LABEL: EMPTY NUM EXPR
|
|
; CHECK-NEXT: foo [[#]] bar
|
|
|
|
; Numeric expression using undefined variables.
|
|
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]]:17: error: {{U}}NDEF-USE-NEXT: expected string not found in input
|
|
UNDEF-USE-MSG-NEXT: {{U}}NDEF-USE-NEXT: UNDEFVAR: {{\[\[#UNDEFVAR1\+UNDEFVAR2\]\]}}
|
|
UNDEF-USE-MSG-NEXT: {{^}} ^{{$}}
|
|
UNDEF-USE-MSG-NEXT: numeric-expression.txt:[[#@LINE-6]]:1: note: scanning from here
|
|
UNDEF-USE-MSG-NEXT: UNDEFVAR: 11
|
|
UNDEF-USE-MSG-NEXT: {{^}}^{{$}}
|
|
UNDEF-USE-MSG-NEXT: numeric-expression.txt:[[#@LINE-9]]:1: note: uses undefined variable(s): "UNDEFVAR1" "UNDEFVAR2"
|
|
UNDEF-USE-MSG-NEXT: UNDEFVAR: 11
|
|
UNDEF-USE-MSG-NEXT: {{^}}^{{$}}
|
|
|
|
; Numeric expression with unsupported operator.
|
|
RUN: not FileCheck -D#NUMVAR=10 --check-prefix INVAL-OP --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: not FileCheck --check-prefixes CONFLICT,CONFLICT1,CONFLICT2 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s
|
|
RUN: not FileCheck -D#NUMVAR=42 --check-prefixes CONFLICT,CONFLICT2 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix INPUT-STR-CONFLICT %s
|
|
RUN: not FileCheck -D#NUMVAR=42 -DNUMVAR=foobar --check-prefix CONFLICT --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix CLI-STR-CONFLICT %s
|
|
RUN: not FileCheck --check-prefixes CONFLICT,CONFLICT3,CONFLICT4 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s
|
|
RUN: not FileCheck -DSTRVAR=foobar --check-prefixes CONFLICT,CONFLICT4 --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix INPUT-NUM-CONFLICT %s
|
|
RUN: not FileCheck -DSTRVAR=foobar -D#STRVAR=42 --check-prefix CONFLICT --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 too big value.
|
|
RUN: not FileCheck --check-prefix BIGVAL --input-file %s %s 2>&1 \
|
|
RUN: | FileCheck --strict-whitespace --check-prefix BIGVAL-MSG %s
|
|
|
|
BIG VALUE
|
|
NUMVAR: 10000000000000000000000
|
|
BIGVAL-LABEL: BIG VALUE
|
|
BIGVAL-NEXT: NUMVAR: [[#NUMVAR:]]
|
|
BIGVAL-MSG: numeric-expression.txt:[[#@LINE-3]]:9: error: Unable to represent numeric value
|
|
BIGVAL-MSG-NEXT: {{N}}UMVAR: 10000000000000000000000
|
|
BIGVAL-MSG-NEXT: {{^}} ^{{$}}
|
|
|
|
; Verify that when a variable is set to an expression the expression is still
|
|
; checked.
|
|
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: 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: 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: [[#VAR1:]] [[#VAR1+1]]
|
|
SAME-LINE-USE-MSG1: numeric-expression.txt:[[#@LINE-1]]:36: error: numeric variable 'VAR1' defined earlier in the same CHECK directive
|
|
SAME-LINE-USE-MSG1-NEXT: {{S}}AME-LINE-USE1-NEXT: {{\[\[#VAR1:\]\] \[\[#VAR1\+1\]\]}}
|
|
SAME-LINE-USE-MSG1-NEXT: {{^}} ^{{$}}
|
|
|
|
SAME-LINE-USE2-LABEL: SAME LINE USE
|
|
SAME-LINE-USE2-NEXT: [[#VAR1:]]
|
|
SAME-LINE-USE2-NEXT: [[#VAR2:VAR1+1]] [[#VAR2+1]]
|
|
SAME-LINE-USE-MSG2: numeric-expression.txt:[[#@LINE-1]]:42: error: numeric variable 'VAR2' defined earlier in the same CHECK directive
|
|
SAME-LINE-USE-MSG2-NEXT: {{S}}AME-LINE-USE2-NEXT: {{\[\[#VAR2:VAR1\+1\]\] \[\[#VAR2\+1\]\]}}
|
|
SAME-LINE-USE-MSG2-NEXT: {{^}} ^{{$}}
|