1 FileCheck - Flexible pattern matching file verifier
2 ===================================================
9 :program:`FileCheck` *match-filename* [*--check-prefix=XXX*] [*--strict-whitespace*]
14 :program:`FileCheck` reads two files (one from standard input, and one
15 specified on the command line) and uses one to verify the other. This
16 behavior is particularly useful for the testsuite, which wants to verify that
17 the output of some tool (e.g. :program:`llc`) contains the expected information
18 (for example, a movsd from esp or whatever is interesting). This is similar to
19 using :program:`grep`, but it is optimized for matching multiple different
20 inputs in one file in a specific order.
22 The ``match-filename`` file specifies the file that contains the patterns to
23 match. The file to verify is read from standard input unless the
24 :option:`--input-file` option is used.
29 Options are parsed from the environment variable ``FILECHECK_OPTS``
30 and from the command line.
34 Print a summary of command line options.
36 .. option:: --check-prefix prefix
38 FileCheck searches the contents of ``match-filename`` for patterns to
39 match. By default, these patterns are prefixed with "``CHECK:``".
40 If you'd like to use a different prefix (e.g. because the same input
41 file is checking multiple different tool or options), the
42 :option:`--check-prefix` argument allows you to specify (without the trailing
43 "``:``") one or more prefixes to match. Multiple prefixes are useful for tests
44 which might change for different run options, but most lines remain the same.
46 FileCheck does not permit duplicate prefixes, even if one is a check prefix
47 and one is a comment prefix (see :option:`--comment-prefixes` below).
49 .. option:: --check-prefixes prefix1,prefix2,...
51 An alias of :option:`--check-prefix` that allows multiple prefixes to be
52 specified as a comma separated list.
54 .. option:: --comment-prefixes prefix1,prefix2,...
56 By default, FileCheck ignores any occurrence in ``match-filename`` of any check
57 prefix if it is preceded on the same line by "``COM:``" or "``RUN:``". See the
58 section `The "COM:" directive`_ for usage details.
60 These default comment prefixes can be overridden by
61 :option:`--comment-prefixes` if they are not appropriate for your testing
62 environment. However, doing so is not recommended in LLVM's LIT-based test
63 suites, which should be easier to maintain if they all follow a consistent
64 comment style. In that case, consider proposing a change to the default
65 comment prefixes instead.
67 .. option:: --allow-unused-prefixes
69 This option controls the behavior when using more than one prefix as specified
70 by :option:`--check-prefix` or :option:`--check-prefixes`, and some of these
71 prefixes are missing in the test file. If true, this is allowed, if false,
72 FileCheck will report an error, listing the missing prefixes.
74 It is currently, temporarily, true by default, and will be subsequently
77 .. option:: --input-file filename
79 File to check (defaults to stdin).
81 .. option:: --match-full-lines
83 By default, FileCheck allows matches of anywhere on a line. This
84 option will require all positive matches to cover an entire
85 line. Leading and trailing whitespace is ignored, unless
86 :option:`--strict-whitespace` is also specified. (Note: negative
87 matches from ``CHECK-NOT`` are not affected by this option!)
89 Passing this option is equivalent to inserting ``{{^ *}}`` or
90 ``{{^}}`` before, and ``{{ *$}}`` or ``{{$}}`` after every positive
93 .. option:: --strict-whitespace
95 By default, FileCheck canonicalizes input horizontal whitespace (spaces and
96 tabs) which causes it to ignore these differences (a space will match a tab).
97 The :option:`--strict-whitespace` argument disables this behavior. End-of-line
98 sequences are canonicalized to UNIX-style ``\n`` in all modes.
100 .. option:: --ignore-case
102 By default, FileCheck uses case-sensitive matching. This option causes
103 FileCheck to use case-insensitive matching.
105 .. option:: --implicit-check-not check-pattern
107 Adds implicit negative checks for the specified patterns between positive
108 checks. The option allows writing stricter tests without stuffing them with
111 For example, "``--implicit-check-not warning:``" can be useful when testing
112 diagnostic messages from tools that don't have an option similar to ``clang
113 -verify``. With this option FileCheck will verify that input does not contain
114 warnings not covered by any ``CHECK:`` patterns.
116 .. option:: --dump-input <value>
118 Dump input to stderr, adding annotations representing currently enabled
119 diagnostics. When there are multiple occurrences of this option, the
120 ``<value>`` that appears earliest in the list below has precedence. The
123 * ``help`` - Explain input dump and quit
124 * ``always`` - Always dump input
125 * ``fail`` - Dump input on failure
126 * ``never`` - Never dump input
128 .. option:: --dump-input-context <N>
130 In the dump requested by ``--dump-input``, print ``<N>`` input lines before
131 and ``<N>`` input lines after any lines specified by ``--dump-input-filter``.
132 When there are multiple occurrences of this option, the largest specified
133 ``<N>`` has precedence. The default is 5.
135 .. option:: --dump-input-filter <value>
137 In the dump requested by ``--dump-input``, print only input lines of kind
138 ``<value>`` plus any context specified by ``--dump-input-context``. When
139 there are multiple occurrences of this option, the ``<value>`` that appears
140 earliest in the list below has precedence. The default is ``error`` when
141 ``--dump-input=fail``, and it's ``all`` when ``--dump-input=always``.
143 * ``all`` - All input lines
144 * ``annotation-full`` - Input lines with annotations
145 * ``annotation`` - Input lines with starting points of annotations
146 * ``error`` - Input lines with starting points of error annotations
148 .. option:: --enable-var-scope
150 Enables scope for regex variables.
152 Variables with names that start with ``$`` are considered global and
153 remain set throughout the file.
155 All other variables get undefined after each encountered ``CHECK-LABEL``.
157 .. option:: -D<VAR=VALUE>
159 Sets a filecheck pattern variable ``VAR`` with value ``VALUE`` that can be
160 used in ``CHECK:`` lines.
162 .. option:: -D#<FMT>,<NUMVAR>=<NUMERIC EXPRESSION>
164 Sets a filecheck numeric variable ``NUMVAR`` of matching format ``FMT`` to
165 the result of evaluating ``<NUMERIC EXPRESSION>`` that can be used in
166 ``CHECK:`` lines. See section
167 ``FileCheck Numeric Variables and Expressions`` for details on supported
172 Show the version number of this program.
176 Print good directive pattern matches. However, if ``-dump-input=fail`` or
177 ``-dump-input=always``, add those matches as input annotations instead.
181 Print information helpful in diagnosing internal FileCheck issues, such as
182 discarded overlapping ``CHECK-DAG:`` matches, implicit EOF pattern matches,
183 and ``CHECK-NOT:`` patterns that do not have matches. Implies ``-v``.
184 However, if ``-dump-input=fail`` or ``-dump-input=always``, just add that
185 information as input annotations instead.
187 .. option:: --allow-deprecated-dag-overlap
189 Enable overlapping among matches in a group of consecutive ``CHECK-DAG:``
190 directives. This option is deprecated and is only provided for convenience
191 as old tests are migrated to the new non-overlapping ``CHECK-DAG:``
194 .. option:: --allow-empty
196 Allow checking empty input. By default, empty input is rejected.
200 Use colors in output (autodetected by default).
205 If :program:`FileCheck` verifies that the file matches the expected contents,
206 it exits with 0. Otherwise, if not, or if an error occurs, it will exit with a
212 FileCheck is typically used from LLVM regression tests, being invoked on the RUN
213 line of the test. A simple example of using FileCheck from a RUN line looks
218 ; RUN: llvm-as < %s | llc -march=x86-64 | FileCheck %s
220 This syntax says to pipe the current file ("``%s``") into ``llvm-as``, pipe
221 that into ``llc``, then pipe the output of ``llc`` into ``FileCheck``. This
222 means that FileCheck will be verifying its standard input (the llc output)
223 against the filename argument specified (the original ``.ll`` file specified by
224 "``%s``"). To see how this works, let's look at the rest of the ``.ll`` file
225 (after the RUN line):
229 define void @sub1(i32* %p, i32 %v) {
233 %0 = tail call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
237 define void @inc4(i64* %p) {
241 %0 = tail call i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
245 Here you can see some "``CHECK:``" lines specified in comments. Now you can
246 see how the file is piped into ``llvm-as``, then ``llc``, and the machine code
247 output is what we are verifying. FileCheck checks the machine code output to
248 verify that it matches what the "``CHECK:``" lines specify.
250 The syntax of the "``CHECK:``" lines is very simple: they are fixed strings that
251 must occur in order. FileCheck defaults to ignoring horizontal whitespace
252 differences (e.g. a space is allowed to match a tab) but otherwise, the contents
253 of the "``CHECK:``" line is required to match some thing in the test file exactly.
255 One nice thing about FileCheck (compared to grep) is that it allows merging
256 test cases together into logical groups. For example, because the test above
257 is checking for the "``sub1:``" and "``inc4:``" labels, it will not match
258 unless there is a "``subl``" in between those labels. If it existed somewhere
259 else in the file, that would not count: "``grep subl``" matches if "``subl``"
260 exists anywhere in the file.
262 The FileCheck -check-prefix option
263 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
265 The FileCheck `-check-prefix` option allows multiple test
266 configurations to be driven from one `.ll` file. This is useful in many
267 circumstances, for example, testing different architectural variants with
268 :program:`llc`. Here's a simple example:
272 ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \
273 ; RUN: | FileCheck %s -check-prefix=X32
274 ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
275 ; RUN: | FileCheck %s -check-prefix=X64
277 define <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind {
278 %tmp1 = insertelement <4 x i32>; %tmp, i32 %s, i32 1
281 ; X32: pinsrd $1, 4(%esp), %xmm0
284 ; X64: pinsrd $1, %edi, %xmm0
287 In this case, we're testing that we get the expected code generation with
288 both 32-bit and 64-bit code generation.
293 Sometimes you want to disable a FileCheck directive without removing it
294 entirely, or you want to write comments that mention a directive by name. The
295 "``COM:``" directive makes it easy to do this. For example, you might have:
300 ; X32: pinsrd $1, 4(%esp), %xmm0
302 ; COM: FIXME: X64 isn't working correctly yet for this part of codegen, but
303 ; COM: X64 will have something similar to X32:
305 ; COM: X64: pinsrd_1:
306 ; COM: X64: pinsrd $1, %edi, %xmm0
308 Without "``COM:``", you would need to use some combination of rewording and
309 directive syntax mangling to prevent FileCheck from recognizing the commented
310 occurrences of "``X32:``" and "``X64:``" above as directives. Moreover,
311 FileCheck diagnostics have been proposed that might complain about the above
312 occurrences of "``X64``" that don't have the trailing "``:``" because they look
313 like directive typos. Dodging all these problems can be tedious for a test
314 author, and directive syntax mangling can make the purpose of test code unclear.
315 "``COM:``" avoids all these problems.
317 A few important usage notes:
319 * "``COM:``" within another directive's pattern does *not* comment out the
320 remainder of the pattern. For example:
324 ; X32: pinsrd $1, 4(%esp), %xmm0 COM: This is part of the X32 pattern!
326 If you need to temporarily comment out part of a directive's pattern, move it
327 to another line. The reason is that FileCheck parses "``COM:``" in the same
328 manner as any other directive: only the first directive on the line is
329 recognized as a directive.
331 * For the sake of LIT, FileCheck treats "``RUN:``" just like "``COM:``". If this
332 is not suitable for your test environment, see :option:`--comment-prefixes`.
334 * FileCheck does not recognize "``COM``", "``RUN``", or any user-defined comment
335 prefix as a comment directive if it's combined with one of the usual check
336 directive suffixes, such as "``-NEXT:``" or "``-NOT:``", discussed below.
337 FileCheck treats such a combination as plain text instead. If it needs to act
338 as a comment directive for your test environment, define it as such with
339 :option:`--comment-prefixes`.
341 The "CHECK-NEXT:" directive
342 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
344 Sometimes you want to match lines and would like to verify that matches
345 happen on exactly consecutive lines with no other lines in between them. In
346 this case, you can use "``CHECK:``" and "``CHECK-NEXT:``" directives to specify
347 this. If you specified a custom check prefix, just use "``<PREFIX>-NEXT:``".
348 For example, something like this works as you'd expect:
352 define void @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
353 %tmp3 = load <2 x double>* %A, align 16
354 %tmp7 = insertelement <2 x double> undef, double %B, i32 0
355 %tmp9 = shufflevector <2 x double> %tmp3,
357 <2 x i32> < i32 0, i32 2 >
358 store <2 x double> %tmp9, <2 x double>* %r, align 16
362 ; CHECK: movl 8(%esp), %eax
363 ; CHECK-NEXT: movapd (%eax), %xmm0
364 ; CHECK-NEXT: movhpd 12(%esp), %xmm0
365 ; CHECK-NEXT: movl 4(%esp), %eax
366 ; CHECK-NEXT: movapd %xmm0, (%eax)
370 "``CHECK-NEXT:``" directives reject the input unless there is exactly one
371 newline between it and the previous directive. A "``CHECK-NEXT:``" cannot be
372 the first directive in a file.
374 The "CHECK-SAME:" directive
375 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
377 Sometimes you want to match lines and would like to verify that matches happen
378 on the same line as the previous match. In this case, you can use "``CHECK:``"
379 and "``CHECK-SAME:``" directives to specify this. If you specified a custom
380 check prefix, just use "``<PREFIX>-SAME:``".
382 "``CHECK-SAME:``" is particularly powerful in conjunction with "``CHECK-NOT:``"
385 For example, the following works like you'd expect:
389 !0 = !DILocation(line: 5, scope: !1, inlinedAt: !2)
391 ; CHECK: !DILocation(line: 5,
393 ; CHECK-SAME: scope: ![[SCOPE:[0-9]+]]
395 "``CHECK-SAME:``" directives reject the input if there are any newlines between
396 it and the previous directive.
398 "``CHECK-SAME:``" is also useful to avoid writing matchers for irrelevant
399 fields. For example, suppose you're writing a test which parses a tool that
400 generates output like this:
422 To write a test that verifies ``foo`` has the value ``1``, you might first
430 However, this would be a bad test: if the value for ``foo`` changes, the test
431 would still pass because the "``CHECK: Value: 1``" line would match the value
432 from ``baz``. To fix this, you could add ``CHECK-NEXT`` matchers for every
433 ``FieldN:`` line, but that would be verbose, and need to be updated when
434 ``Field4`` is added. A more succint way to write the test using the
435 "``CHECK-SAME:``" matcher would be as follows:
443 This verifies that the *next* time "``Value:``" appears in the output, it has
446 Note: a "``CHECK-SAME:``" cannot be the first directive in a file.
448 The "CHECK-EMPTY:" directive
449 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
451 If you need to check that the next line has nothing on it, not even whitespace,
452 you can use the "``CHECK-EMPTY:``" directive.
463 Just like "``CHECK-NEXT:``" the directive will fail if there is more than one
464 newline before it finds the next blank line, and it cannot be the first
467 The "CHECK-NOT:" directive
468 ~~~~~~~~~~~~~~~~~~~~~~~~~~
470 The "``CHECK-NOT:``" directive is used to verify that a string doesn't occur
471 between two matches (or before the first match, or after the last match). For
472 example, to verify that a load is removed by a transformation, a test like this
477 define i8 @coerce_offset0(i32 %V, i32* %P) {
478 store i32 %V, i32* %P
480 %P2 = bitcast i32* %P to i8*
481 %P3 = getelementptr i8* %P2, i32 2
485 ; CHECK: @coerce_offset0
490 The "CHECK-COUNT:" directive
491 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
493 If you need to match multiple lines with the same pattern over and over again
494 you can repeat a plain ``CHECK:`` as many times as needed. If that looks too
495 boring you can instead use a counted check "``CHECK-COUNT-<num>:``", where
496 ``<num>`` is a positive decimal number. It will match the pattern exactly
497 ``<num>`` times, no more and no less. If you specified a custom check prefix,
498 just use "``<PREFIX>-COUNT-<num>:``" for the same effect.
499 Here is a simple example:
510 ; CHECK-COUNT-6: Loop at depth {{[0-9]+}}
511 ; CHECK-NOT: Loop at depth {{[0-9]+}}
513 The "CHECK-DAG:" directive
514 ~~~~~~~~~~~~~~~~~~~~~~~~~~
516 If it's necessary to match strings that don't occur in a strictly sequential
517 order, "``CHECK-DAG:``" could be used to verify them between two matches (or
518 before the first match, or after the last match). For example, clang emits
519 vtable globals in reverse order. Using ``CHECK-DAG:``, we can keep the checks
520 in the natural order:
524 // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
526 struct Foo { virtual void method(); };
527 Foo f; // emit vtable
528 // CHECK-DAG: @_ZTV3Foo =
530 struct Bar { virtual void method(); };
532 // CHECK-DAG: @_ZTV3Bar =
534 ``CHECK-NOT:`` directives could be mixed with ``CHECK-DAG:`` directives to
535 exclude strings between the surrounding ``CHECK-DAG:`` directives. As a result,
536 the surrounding ``CHECK-DAG:`` directives cannot be reordered, i.e. all
537 occurrences matching ``CHECK-DAG:`` before ``CHECK-NOT:`` must not fall behind
538 occurrences matching ``CHECK-DAG:`` after ``CHECK-NOT:``. For example,
546 This case will reject input strings where ``BEFORE`` occurs after ``AFTER``.
548 With captured variables, ``CHECK-DAG:`` is able to match valid topological
549 orderings of a DAG with edges from the definition of a variable to its use.
550 It's useful, e.g., when your test cases need to match different output
551 sequences from the instruction scheduler. For example,
555 ; CHECK-DAG: add [[REG1:r[0-9]+]], r1, r2
556 ; CHECK-DAG: add [[REG2:r[0-9]+]], r3, r4
557 ; CHECK: mul r5, [[REG1]], [[REG2]]
559 In this case, any order of that two ``add`` instructions will be allowed.
561 If you are defining `and` using variables in the same ``CHECK-DAG:`` block,
562 be aware that the definition rule can match `after` its use.
564 So, for instance, the code below will pass:
568 ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
569 ; CHECK-DAG: vmov.32 [[REG2]][1]
573 While this other code, will not:
577 ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
578 ; CHECK-DAG: vmov.32 [[REG2]][1]
582 While this can be very useful, it's also dangerous, because in the case of
583 register sequence, you must have a strong order (read before write, copy before
584 use, etc). If the definition your test is looking for doesn't match (because
585 of a bug in the compiler), it may match further away from the use, and mask
588 In those cases, to enforce the order, use a non-DAG directive between DAG-blocks.
590 A ``CHECK-DAG:`` directive skips matches that overlap the matches of any
591 preceding ``CHECK-DAG:`` directives in the same ``CHECK-DAG:`` block. Not only
592 is this non-overlapping behavior consistent with other directives, but it's
593 also necessary to handle sets of non-unique strings or patterns. For example,
594 the following directives look for unordered log entries for two tasks in a
595 parallel program, such as the OpenMP runtime:
599 // CHECK-DAG: [[THREAD_ID:[0-9]+]]: task_begin
600 // CHECK-DAG: [[THREAD_ID]]: task_end
602 // CHECK-DAG: [[THREAD_ID:[0-9]+]]: task_begin
603 // CHECK-DAG: [[THREAD_ID]]: task_end
605 The second pair of directives is guaranteed not to match the same log entries
606 as the first pair even though the patterns are identical and even if the text
607 of the log entries is identical because the thread ID manages to be reused.
609 The "CHECK-LABEL:" directive
610 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
612 Sometimes in a file containing multiple tests divided into logical blocks, one
613 or more ``CHECK:`` directives may inadvertently succeed by matching lines in a
614 later block. While an error will usually eventually be generated, the check
615 flagged as causing the error may not actually bear any relationship to the
616 actual source of the problem.
618 In order to produce better error messages in these cases, the "``CHECK-LABEL:``"
619 directive can be used. It is treated identically to a normal ``CHECK``
620 directive except that FileCheck makes an additional assumption that a line
621 matched by the directive cannot also be matched by any other check present in
622 ``match-filename``; this is intended to be used for lines containing labels or
623 other unique identifiers. Conceptually, the presence of ``CHECK-LABEL`` divides
624 the input stream into separate blocks, each of which is processed independently,
625 preventing a ``CHECK:`` directive in one block matching a line in another block.
626 If ``--enable-var-scope`` is in effect, all local variables are cleared at the
627 beginning of the block.
633 define %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
635 ; CHECK-LABEL: C_ctor_base:
636 ; CHECK: mov [[SAVETHIS:r[0-9]+]], r0
637 ; CHECK: bl A_ctor_base
638 ; CHECK: mov r0, [[SAVETHIS]]
639 %0 = bitcast %struct.C* %this to %struct.A*
640 %call = tail call %struct.A* @A_ctor_base(%struct.A* %0)
641 %1 = bitcast %struct.C* %this to %struct.B*
642 %call2 = tail call %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
646 define %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
648 ; CHECK-LABEL: D_ctor_base:
650 The use of ``CHECK-LABEL:`` directives in this case ensures that the three
651 ``CHECK:`` directives only accept lines corresponding to the body of the
652 ``@C_ctor_base`` function, even if the patterns match lines found later in
653 the file. Furthermore, if one of these three ``CHECK:`` directives fail,
654 FileCheck will recover by continuing to the next block, allowing multiple test
655 failures to be detected in a single invocation.
657 There is no requirement that ``CHECK-LABEL:`` directives contain strings that
658 correspond to actual syntactic labels in a source or output language: they must
659 simply uniquely match a single line in the file being verified.
661 ``CHECK-LABEL:`` directives cannot contain variable definitions or uses.
666 A directive modifier can be append to a directive by following the directive
667 with ``{<modifier>}`` where the only supported value for ``<modifier>`` is
670 The ``LITERAL`` directive modifier can be used to perform a literal match. The
671 modifier results in the directive not recognizing any syntax to perform regex
672 matching, variable capture or any substitutions. This is useful when the text
673 to match would require excessive escaping otherwise. For example, the
674 following will perform literal matches rather than considering these as
679 Input: [[[10, 20]], [[30, 40]]]
680 Output %r10: [[10, 20]]
681 Output %r10: [[30, 40]]
683 ; CHECK{LITERAL}: [[[10, 20]], [[30, 40]]]
684 ; CHECK-DAG{LITERAL}: [[30, 40]]
685 ; CHECK-DAG{LITERAL}: [[10, 20]]
687 FileCheck Regex Matching Syntax
688 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
690 All FileCheck directives take a pattern to match.
691 For most uses of FileCheck, fixed string matching is perfectly sufficient. For
692 some things, a more flexible form of matching is desired. To support this,
693 FileCheck allows you to specify regular expressions in matching strings,
694 surrounded by double braces: ``{{yourregex}}``. FileCheck implements a POSIX
695 regular expression matcher; it supports Extended POSIX regular expressions
696 (ERE). Because we want to use fixed string matching for a majority of what we
697 do, FileCheck has been designed to support mixing and matching fixed string
698 matching with regular expressions. This allows you to write things like this:
702 ; CHECK: movhpd {{[0-9]+}}(%esp), {{%xmm[0-7]}}
704 In this case, any offset from the ESP register will be allowed, and any xmm
705 register will be allowed.
707 Because regular expressions are enclosed with double braces, they are
708 visually distinct, and you don't need to use escape characters within the double
709 braces like you would in C. In the rare case that you want to match double
710 braces explicitly from the input, you can use something ugly like
711 ``{{[}][}]}}`` as your pattern. Or if you are using the repetition count
712 syntax, for example ``[[:xdigit:]]{8}`` to match exactly 8 hex digits, you
713 would need to add parentheses like this ``{{([[:xdigit:]]{8})}}`` to avoid
714 confusion with FileCheck's closing double-brace.
716 FileCheck String Substitution Blocks
717 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
719 It is often useful to match a pattern and then verify that it occurs again
720 later in the file. For codegen tests, this can be useful to allow any
721 register, but verify that that register is used consistently later. To do
722 this, :program:`FileCheck` supports string substitution blocks that allow
723 string variables to be defined and substituted into patterns. Here is a simple
729 ; CHECK: notw [[REGISTER:%[a-z]+]]
730 ; CHECK: andw {{.*}}[[REGISTER]]
732 The first check line matches a regex ``%[a-z]+`` and captures it into the
733 string variable ``REGISTER``. The second line verifies that whatever is in
734 ``REGISTER`` occurs later in the file after an "``andw``". :program:`FileCheck`
735 string substitution blocks are always contained in ``[[ ]]`` pairs, and string
736 variable names can be formed with the regex ``[a-zA-Z_][a-zA-Z0-9_]*``. If a
737 colon follows the name, then it is a definition of the variable; otherwise, it
740 :program:`FileCheck` variables can be defined multiple times, and substitutions
741 always get the latest value. Variables can also be substituted later on the
742 same line they were defined on. For example:
746 ; CHECK: op [[REG:r[0-9]+]], [[REG]]
748 Can be useful if you want the operands of ``op`` to be the same register,
749 and don't care exactly which register it is.
751 If ``--enable-var-scope`` is in effect, variables with names that
752 start with ``$`` are considered to be global. All others variables are
753 local. All local variables get undefined at the beginning of each
754 CHECK-LABEL block. Global variables are not affected by CHECK-LABEL.
755 This makes it easier to ensure that individual tests are not affected
756 by variables set in preceding tests.
758 FileCheck Numeric Substitution Blocks
759 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
761 :program:`FileCheck` also supports numeric substitution blocks that allow
762 defining numeric variables and checking for numeric values that satisfy a
763 numeric expression constraint based on those variables via a numeric
764 substitution. This allows ``CHECK:`` directives to verify a numeric relation
765 between two numbers, such as the need for consecutive registers to be used.
767 The syntax to capture a numeric value is
768 ``[[#%<fmtspec>,<NUMVAR>:]]`` where:
770 * ``%<fmtspec>,`` is an optional format specifier to indicate what number
771 format to match and the minimum number of digits to expect.
773 * ``<NUMVAR>:`` is an optional definition of variable ``<NUMVAR>`` from the
776 The syntax of ``<fmtspec>`` is: ``#.<precision><conversion specifier>`` where:
778 * ``#`` is an optional flag available for hex values (see
779 ``<conversion specifier>`` below) which requires the value matched to be
781 * ``.<precision>`` is an optional printf-style precision specifier in which
782 ``<precision>`` indicates the minimum number of digits that the value matched
783 must have, expecting leading zeros if needed.
785 * ``<conversion specifier>`` is an optional scanf-style conversion specifier
786 to indicate what number format to match (e.g. hex number). Currently
787 accepted format specifiers are ``%u``, ``%d``, ``%x`` and ``%X``. If absent,
788 the format specifier defaults to ``%u``.
795 ; CHECK: mov r[[#REG:]], 0x[[#%.8X,ADDR:]]
797 would match ``mov r5, 0x0000FEFE`` and set ``REG`` to the value ``5`` and
798 ``ADDR`` to the value ``0xFEFE``. Note that due to the precision it would fail
799 to match ``mov r5, 0xFEFE``.
801 As a result of the numeric variable definition being optional, it is possible
802 to only check that a numeric value is present in a given format. This can be
803 useful when the value itself is not useful, for instance:
807 ; CHECK-NOT: mov r0, r[[#]]
809 to check that a value is synthesized rather than moved around.
812 The syntax of a numeric substitution is
813 ``[[#%<fmtspec>, <constraint> <expr>]]`` where:
815 * ``<fmtspec>`` is the same format specifier as for defining a variable but
816 in this context indicating how a numeric expression value should be matched
817 against. If absent, both components of the format specifier are inferred from
818 the matching format of the numeric variable(s) used by the expression
819 constraint if any, and defaults to ``%u`` if no numeric variable is used,
820 denoting that the value should be unsigned with no leading zeros. In case of
821 conflict between format specifiers of several numeric variables, the
822 conversion specifier becomes mandatory but the precision specifier remains
825 * ``<constraint>`` is the constraint describing how the value to match must
826 relate to the value of the numeric expression. The only currently accepted
827 constraint is ``==`` for an exact match and is the default if
828 ``<constraint>`` is not provided. No matching constraint must be specified
829 when the ``<expr>`` is empty.
831 * ``<expr>`` is an expression. An expression is in turn recursively defined
834 * a numeric operand, or
835 * an expression followed by an operator and a numeric operand.
837 A numeric operand is a previously defined numeric variable, an integer
838 literal, or a function. Spaces are accepted before, after and between any of
839 these elements. Numeric operands have 64-bit precision. Overflow and underflow
840 are rejected. There is no support for operator precedence, but parentheses
841 can be used to change the evaluation order.
843 The supported operators are:
845 * ``+`` - Returns the sum of its two operands.
846 * ``-`` - Returns the difference of its two operands.
848 The syntax of a function call is ``<name>(<arguments>)`` where:
850 * ``name`` is a predefined string literal. Accepted values are:
852 * add - Returns the sum of its two operands.
853 * div - Returns the quotient of its two operands.
854 * max - Returns the largest of its two operands.
855 * min - Returns the smallest of its two operands.
856 * mul - Returns the product of its two operands.
857 * sub - Returns the difference of its two operands.
859 * ``<arguments>`` is a comma separated list of expressions.
865 ; CHECK: load r[[#REG:]], [r0]
866 ; CHECK: load r[[#REG+1]], [r1]
867 ; CHECK: Loading from 0x[[#%x,ADDR:]]
868 ; CHECK-SAME: to 0x[[#ADDR + 7]]
870 The above example would match the text:
876 Loading from 0xa0463440 to 0xa0463447
878 but would not match the text:
884 Loading from 0xa0463440 to 0xa0463443
886 Due to ``7`` being unequal to ``5 + 1`` and ``a0463443`` being unequal to
890 A numeric variable can also be defined to the result of a numeric expression,
891 in which case the numeric expression constraint is checked and if verified the
892 variable is assigned to the value. The unified syntax for both checking a
893 numeric expression and capturing its value into a numeric variable is thus
894 ``[[#%<fmtspec>,<NUMVAR>: <constraint> <expr>]]`` with each element as
895 described previously. One can use this syntax to make a testcase more
896 self-describing by using variables instead of values:
900 ; CHECK: mov r[[#REG_OFFSET:]], 0x[[#%X,FIELD_OFFSET:12]]
901 ; CHECK-NEXT: load r[[#]], [r[[#REG_BASE:]], r[[#REG_OFFSET]]]
910 The ``--enable-var-scope`` option has the same effect on numeric variables as
913 Important note: In its current implementation, an expression cannot use a
914 numeric variable defined earlier in the same CHECK directive.
916 FileCheck Pseudo Numeric Variables
917 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
919 Sometimes there's a need to verify output that contains line numbers of the
920 match file, e.g. when testing compiler diagnostics. This introduces a certain
921 fragility of the match file structure, as "``CHECK:``" lines contain absolute
922 line numbers in the same file, which have to be updated whenever line numbers
923 change due to text addition or deletion.
925 To support this case, FileCheck expressions understand the ``@LINE`` pseudo
926 numeric variable which evaluates to the line number of the CHECK pattern where
929 This way match patterns can be put near the relevant test lines and include
930 relative line number references, for example:
934 // CHECK: test.cpp:[[# @LINE + 4]]:6: error: expected ';' after top level declarator
935 // CHECK-NEXT: {{^int a}}
936 // CHECK-NEXT: {{^ \^}}
937 // CHECK-NEXT: {{^ ;}}
940 To support legacy uses of ``@LINE`` as a special string variable,
941 :program:`FileCheck` also accepts the following uses of ``@LINE`` with string
942 substitution block syntax: ``[[@LINE]]``, ``[[@LINE+<offset>]]`` and
943 ``[[@LINE-<offset>]]`` without any spaces inside the brackets and where
944 ``offset`` is an integer.
946 Matching Newline Characters
947 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
949 To match newline characters in regular expressions the character class
950 ``[[:space:]]`` can be used. For example, the following pattern:
954 // CHECK: DW_AT_location [DW_FORM_sec_offset] ([[DLOC:0x[0-9a-f]+]]){{[[:space:]].*}}"intd"
956 matches output of the form (from llvm-dwarfdump):
960 DW_AT_location [DW_FORM_sec_offset] (0x00000233)
961 DW_AT_name [DW_FORM_strp] ( .debug_str[0x000000c9] = "intd")
963 letting us set the :program:`FileCheck` variable ``DLOC`` to the desired value
964 ``0x00000233``, extracted from the line immediately preceding "``intd``".