1FileCheck - Flexible pattern matching file verifier
2===================================================
3
4SYNOPSIS
5--------
6
7:program:`FileCheck` *match-filename* [*--check-prefix=XXX*] [*--strict-whitespace*]
8
9DESCRIPTION
10-----------
11
12:program:`FileCheck` reads two files (one from standard input, and one
13specified on the command line) and uses one to verify the other.  This
14behavior is particularly useful for the testsuite, which wants to verify that
15the output of some tool (e.g. :program:`llc`) contains the expected information
16(for example, a movsd from esp or whatever is interesting).  This is similar to
17using :program:`grep`, but it is optimized for matching multiple different
18inputs in one file in a specific order.
19
20The ``match-filename`` file specifies the file that contains the patterns to
21match.  The file to verify is read from standard input unless the
22:option:`--input-file` option is used.
23
24OPTIONS
25-------
26
27Options are parsed from the environment variable ``FILECHECK_OPTS``
28and from the command line.
29
30.. option:: -help
31
32 Print a summary of command line options.
33
34.. option:: --check-prefix prefix
35
36 FileCheck searches the contents of ``match-filename`` for patterns to
37 match.  By default, these patterns are prefixed with "``CHECK:``".
38 If you'd like to use a different prefix (e.g. because the same input
39 file is checking multiple different tool or options), the
40 :option:`--check-prefix` argument allows you to specify one or more
41 prefixes to match. Multiple prefixes are useful for tests which might
42 change for different run options, but most lines remain the same.
43
44.. option:: --check-prefixes prefix1,prefix2,...
45
46 An alias of :option:`--check-prefix` that allows multiple prefixes to be
47 specified as a comma separated list.
48
49.. option:: --input-file filename
50
51  File to check (defaults to stdin).
52
53.. option:: --match-full-lines
54
55 By default, FileCheck allows matches of anywhere on a line. This
56 option will require all positive matches to cover an entire
57 line. Leading and trailing whitespace is ignored, unless
58 :option:`--strict-whitespace` is also specified. (Note: negative
59 matches from ``CHECK-NOT`` are not affected by this option!)
60
61 Passing this option is equivalent to inserting ``{{^ *}}`` or
62 ``{{^}}`` before, and ``{{ *$}}`` or ``{{$}}`` after every positive
63 check pattern.
64
65.. option:: --strict-whitespace
66
67 By default, FileCheck canonicalizes input horizontal whitespace (spaces and
68 tabs) which causes it to ignore these differences (a space will match a tab).
69 The :option:`--strict-whitespace` argument disables this behavior. End-of-line
70 sequences are canonicalized to UNIX-style ``\n`` in all modes.
71
72.. option:: --implicit-check-not check-pattern
73
74  Adds implicit negative checks for the specified patterns between positive
75  checks. The option allows writing stricter tests without stuffing them with
76  ``CHECK-NOT``\ s.
77
78  For example, "``--implicit-check-not warning:``" can be useful when testing
79  diagnostic messages from tools that don't have an option similar to ``clang
80  -verify``. With this option FileCheck will verify that input does not contain
81  warnings not covered by any ``CHECK:`` patterns.
82
83.. option:: --dump-input <mode>
84
85  Dump input to stderr, adding annotations representing currently enabled
86  diagnostics.  Do this either 'always', on 'fail', or 'never'.  Specify 'help'
87  to explain the dump format and quit.
88
89.. option:: --dump-input-on-failure
90
91  When the check fails, dump all of the original input.  This option is
92  deprecated in favor of `--dump-input=fail`.
93
94.. option:: --enable-var-scope
95
96  Enables scope for regex variables.
97
98  Variables with names that start with ``$`` are considered global and
99  remain set throughout the file.
100
101  All other variables get undefined after each encountered ``CHECK-LABEL``.
102
103.. option:: -D<VAR=VALUE>
104
105  Sets a filecheck pattern variable ``VAR`` with value ``VALUE`` that can be
106  used in ``CHECK:`` lines.
107
108.. option:: -D#<NUMVAR>=<VALUE>
109
110  Sets a filecheck numeric variable ``NUMVAR`` to ``<VALUE>`` that can be used
111  in ``CHECK:`` lines.
112
113.. option:: -version
114
115 Show the version number of this program.
116
117.. option:: -v
118
119  Print good directive pattern matches.  However, if ``-input-dump=fail`` or
120  ``-input-dump=always``, add those matches as input annotations instead.
121
122.. option:: -vv
123
124  Print information helpful in diagnosing internal FileCheck issues, such as
125  discarded overlapping ``CHECK-DAG:`` matches, implicit EOF pattern matches,
126  and ``CHECK-NOT:`` patterns that do not have matches.  Implies ``-v``.
127  However, if ``-input-dump=fail`` or ``-input-dump=always``, just add that
128  information as input annotations instead.
129
130.. option:: --allow-deprecated-dag-overlap
131
132  Enable overlapping among matches in a group of consecutive ``CHECK-DAG:``
133  directives.  This option is deprecated and is only provided for convenience
134  as old tests are migrated to the new non-overlapping ``CHECK-DAG:``
135  implementation.
136
137.. option:: --color
138
139  Use colors in output (autodetected by default).
140
141EXIT STATUS
142-----------
143
144If :program:`FileCheck` verifies that the file matches the expected contents,
145it exits with 0.  Otherwise, if not, or if an error occurs, it will exit with a
146non-zero value.
147
148TUTORIAL
149--------
150
151FileCheck is typically used from LLVM regression tests, being invoked on the RUN
152line of the test.  A simple example of using FileCheck from a RUN line looks
153like this:
154
155.. code-block:: llvm
156
157   ; RUN: llvm-as < %s | llc -march=x86-64 | FileCheck %s
158
159This syntax says to pipe the current file ("``%s``") into ``llvm-as``, pipe
160that into ``llc``, then pipe the output of ``llc`` into ``FileCheck``.  This
161means that FileCheck will be verifying its standard input (the llc output)
162against the filename argument specified (the original ``.ll`` file specified by
163"``%s``").  To see how this works, let's look at the rest of the ``.ll`` file
164(after the RUN line):
165
166.. code-block:: llvm
167
168   define void @sub1(i32* %p, i32 %v) {
169   entry:
170   ; CHECK: sub1:
171   ; CHECK: subl
172           %0 = tail call i32 @llvm.atomic.load.sub.i32.p0i32(i32* %p, i32 %v)
173           ret void
174   }
175
176   define void @inc4(i64* %p) {
177   entry:
178   ; CHECK: inc4:
179   ; CHECK: incq
180           %0 = tail call i64 @llvm.atomic.load.add.i64.p0i64(i64* %p, i64 1)
181           ret void
182   }
183
184Here you can see some "``CHECK:``" lines specified in comments.  Now you can
185see how the file is piped into ``llvm-as``, then ``llc``, and the machine code
186output is what we are verifying.  FileCheck checks the machine code output to
187verify that it matches what the "``CHECK:``" lines specify.
188
189The syntax of the "``CHECK:``" lines is very simple: they are fixed strings that
190must occur in order.  FileCheck defaults to ignoring horizontal whitespace
191differences (e.g. a space is allowed to match a tab) but otherwise, the contents
192of the "``CHECK:``" line is required to match some thing in the test file exactly.
193
194One nice thing about FileCheck (compared to grep) is that it allows merging
195test cases together into logical groups.  For example, because the test above
196is checking for the "``sub1:``" and "``inc4:``" labels, it will not match
197unless there is a "``subl``" in between those labels.  If it existed somewhere
198else in the file, that would not count: "``grep subl``" matches if "``subl``"
199exists anywhere in the file.
200
201The FileCheck -check-prefix option
202~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
203
204The FileCheck `-check-prefix` option allows multiple test
205configurations to be driven from one `.ll` file.  This is useful in many
206circumstances, for example, testing different architectural variants with
207:program:`llc`.  Here's a simple example:
208
209.. code-block:: llvm
210
211   ; RUN: llvm-as < %s | llc -mtriple=i686-apple-darwin9 -mattr=sse41 \
212   ; RUN:              | FileCheck %s -check-prefix=X32
213   ; RUN: llvm-as < %s | llc -mtriple=x86_64-apple-darwin9 -mattr=sse41 \
214   ; RUN:              | FileCheck %s -check-prefix=X64
215
216   define <4 x i32> @pinsrd_1(i32 %s, <4 x i32> %tmp) nounwind {
217           %tmp1 = insertelement <4 x i32>; %tmp, i32 %s, i32 1
218           ret <4 x i32> %tmp1
219   ; X32: pinsrd_1:
220   ; X32:    pinsrd $1, 4(%esp), %xmm0
221
222   ; X64: pinsrd_1:
223   ; X64:    pinsrd $1, %edi, %xmm0
224   }
225
226In this case, we're testing that we get the expected code generation with
227both 32-bit and 64-bit code generation.
228
229The "CHECK-NEXT:" directive
230~~~~~~~~~~~~~~~~~~~~~~~~~~~
231
232Sometimes you want to match lines and would like to verify that matches
233happen on exactly consecutive lines with no other lines in between them.  In
234this case, you can use "``CHECK:``" and "``CHECK-NEXT:``" directives to specify
235this.  If you specified a custom check prefix, just use "``<PREFIX>-NEXT:``".
236For example, something like this works as you'd expect:
237
238.. code-block:: llvm
239
240   define void @t2(<2 x double>* %r, <2 x double>* %A, double %B) {
241 	%tmp3 = load <2 x double>* %A, align 16
242 	%tmp7 = insertelement <2 x double> undef, double %B, i32 0
243 	%tmp9 = shufflevector <2 x double> %tmp3,
244                               <2 x double> %tmp7,
245                               <2 x i32> < i32 0, i32 2 >
246 	store <2 x double> %tmp9, <2 x double>* %r, align 16
247 	ret void
248
249   ; CHECK:          t2:
250   ; CHECK: 	        movl	8(%esp), %eax
251   ; CHECK-NEXT: 	movapd	(%eax), %xmm0
252   ; CHECK-NEXT: 	movhpd	12(%esp), %xmm0
253   ; CHECK-NEXT: 	movl	4(%esp), %eax
254   ; CHECK-NEXT: 	movapd	%xmm0, (%eax)
255   ; CHECK-NEXT: 	ret
256   }
257
258"``CHECK-NEXT:``" directives reject the input unless there is exactly one
259newline between it and the previous directive.  A "``CHECK-NEXT:``" cannot be
260the first directive in a file.
261
262The "CHECK-SAME:" directive
263~~~~~~~~~~~~~~~~~~~~~~~~~~~
264
265Sometimes you want to match lines and would like to verify that matches happen
266on the same line as the previous match.  In this case, you can use "``CHECK:``"
267and "``CHECK-SAME:``" directives to specify this.  If you specified a custom
268check prefix, just use "``<PREFIX>-SAME:``".
269
270"``CHECK-SAME:``" is particularly powerful in conjunction with "``CHECK-NOT:``"
271(described below).
272
273For example, the following works like you'd expect:
274
275.. code-block:: llvm
276
277   !0 = !DILocation(line: 5, scope: !1, inlinedAt: !2)
278
279   ; CHECK:       !DILocation(line: 5,
280   ; CHECK-NOT:               column:
281   ; CHECK-SAME:              scope: ![[SCOPE:[0-9]+]]
282
283"``CHECK-SAME:``" directives reject the input if there are any newlines between
284it and the previous directive.  A "``CHECK-SAME:``" cannot be the first
285directive in a file.
286
287The "CHECK-EMPTY:" directive
288~~~~~~~~~~~~~~~~~~~~~~~~~~~~
289
290If you need to check that the next line has nothing on it, not even whitespace,
291you can use the "``CHECK-EMPTY:``" directive.
292
293.. code-block:: llvm
294
295   declare void @foo()
296
297   declare void @bar()
298   ; CHECK: foo
299   ; CHECK-EMPTY:
300   ; CHECK-NEXT: bar
301
302Just like "``CHECK-NEXT:``" the directive will fail if there is more than one
303newline before it finds the next blank line, and it cannot be the first
304directive in a file.
305
306The "CHECK-NOT:" directive
307~~~~~~~~~~~~~~~~~~~~~~~~~~
308
309The "``CHECK-NOT:``" directive is used to verify that a string doesn't occur
310between two matches (or before the first match, or after the last match).  For
311example, to verify that a load is removed by a transformation, a test like this
312can be used:
313
314.. code-block:: llvm
315
316   define i8 @coerce_offset0(i32 %V, i32* %P) {
317     store i32 %V, i32* %P
318
319     %P2 = bitcast i32* %P to i8*
320     %P3 = getelementptr i8* %P2, i32 2
321
322     %A = load i8* %P3
323     ret i8 %A
324   ; CHECK: @coerce_offset0
325   ; CHECK-NOT: load
326   ; CHECK: ret i8
327   }
328
329The "CHECK-COUNT:" directive
330~~~~~~~~~~~~~~~~~~~~~~~~~~~~
331
332If you need to match multiple lines with the same pattern over and over again
333you can repeat a plain ``CHECK:`` as many times as needed. If that looks too
334boring you can instead use a counted check "``CHECK-COUNT-<num>:``", where
335``<num>`` is a positive decimal number. It will match the pattern exactly
336``<num>`` times, no more and no less. If you specified a custom check prefix,
337just use "``<PREFIX>-COUNT-<num>:``" for the same effect.
338Here is a simple example:
339
340.. code-block:: text
341
342   Loop at depth 1
343   Loop at depth 1
344   Loop at depth 1
345   Loop at depth 1
346     Loop at depth 2
347       Loop at depth 3
348
349   ; CHECK-COUNT-6: Loop at depth {{[0-9]+}}
350   ; CHECK-NOT:     Loop at depth {{[0-9]+}}
351
352The "CHECK-DAG:" directive
353~~~~~~~~~~~~~~~~~~~~~~~~~~
354
355If it's necessary to match strings that don't occur in a strictly sequential
356order, "``CHECK-DAG:``" could be used to verify them between two matches (or
357before the first match, or after the last match). For example, clang emits
358vtable globals in reverse order. Using ``CHECK-DAG:``, we can keep the checks
359in the natural order:
360
361.. code-block:: c++
362
363    // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
364
365    struct Foo { virtual void method(); };
366    Foo f;  // emit vtable
367    // CHECK-DAG: @_ZTV3Foo =
368
369    struct Bar { virtual void method(); };
370    Bar b;
371    // CHECK-DAG: @_ZTV3Bar =
372
373``CHECK-NOT:`` directives could be mixed with ``CHECK-DAG:`` directives to
374exclude strings between the surrounding ``CHECK-DAG:`` directives. As a result,
375the surrounding ``CHECK-DAG:`` directives cannot be reordered, i.e. all
376occurrences matching ``CHECK-DAG:`` before ``CHECK-NOT:`` must not fall behind
377occurrences matching ``CHECK-DAG:`` after ``CHECK-NOT:``. For example,
378
379.. code-block:: llvm
380
381   ; CHECK-DAG: BEFORE
382   ; CHECK-NOT: NOT
383   ; CHECK-DAG: AFTER
384
385This case will reject input strings where ``BEFORE`` occurs after ``AFTER``.
386
387With captured variables, ``CHECK-DAG:`` is able to match valid topological
388orderings of a DAG with edges from the definition of a variable to its use.
389It's useful, e.g., when your test cases need to match different output
390sequences from the instruction scheduler. For example,
391
392.. code-block:: llvm
393
394   ; CHECK-DAG: add [[REG1:r[0-9]+]], r1, r2
395   ; CHECK-DAG: add [[REG2:r[0-9]+]], r3, r4
396   ; CHECK:     mul r5, [[REG1]], [[REG2]]
397
398In this case, any order of that two ``add`` instructions will be allowed.
399
400If you are defining `and` using variables in the same ``CHECK-DAG:`` block,
401be aware that the definition rule can match `after` its use.
402
403So, for instance, the code below will pass:
404
405.. code-block:: text
406
407  ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
408  ; CHECK-DAG: vmov.32 [[REG2]][1]
409  vmov.32 d0[1]
410  vmov.32 d0[0]
411
412While this other code, will not:
413
414.. code-block:: text
415
416  ; CHECK-DAG: vmov.32 [[REG2:d[0-9]+]][0]
417  ; CHECK-DAG: vmov.32 [[REG2]][1]
418  vmov.32 d1[1]
419  vmov.32 d0[0]
420
421While this can be very useful, it's also dangerous, because in the case of
422register sequence, you must have a strong order (read before write, copy before
423use, etc). If the definition your test is looking for doesn't match (because
424of a bug in the compiler), it may match further away from the use, and mask
425real bugs away.
426
427In those cases, to enforce the order, use a non-DAG directive between DAG-blocks.
428
429A ``CHECK-DAG:`` directive skips matches that overlap the matches of any
430preceding ``CHECK-DAG:`` directives in the same ``CHECK-DAG:`` block.  Not only
431is this non-overlapping behavior consistent with other directives, but it's
432also necessary to handle sets of non-unique strings or patterns.  For example,
433the following directives look for unordered log entries for two tasks in a
434parallel program, such as the OpenMP runtime:
435
436.. code-block:: text
437
438    // CHECK-DAG: [[THREAD_ID:[0-9]+]]: task_begin
439    // CHECK-DAG: [[THREAD_ID]]: task_end
440    //
441    // CHECK-DAG: [[THREAD_ID:[0-9]+]]: task_begin
442    // CHECK-DAG: [[THREAD_ID]]: task_end
443
444The second pair of directives is guaranteed not to match the same log entries
445as the first pair even though the patterns are identical and even if the text
446of the log entries is identical because the thread ID manages to be reused.
447
448The "CHECK-LABEL:" directive
449~~~~~~~~~~~~~~~~~~~~~~~~~~~~
450
451Sometimes in a file containing multiple tests divided into logical blocks, one
452or more ``CHECK:`` directives may inadvertently succeed by matching lines in a
453later block. While an error will usually eventually be generated, the check
454flagged as causing the error may not actually bear any relationship to the
455actual source of the problem.
456
457In order to produce better error messages in these cases, the "``CHECK-LABEL:``"
458directive can be used. It is treated identically to a normal ``CHECK``
459directive except that FileCheck makes an additional assumption that a line
460matched by the directive cannot also be matched by any other check present in
461``match-filename``; this is intended to be used for lines containing labels or
462other unique identifiers. Conceptually, the presence of ``CHECK-LABEL`` divides
463the input stream into separate blocks, each of which is processed independently,
464preventing a ``CHECK:`` directive in one block matching a line in another block.
465If ``--enable-var-scope`` is in effect, all local variables are cleared at the
466beginning of the block.
467
468For example,
469
470.. code-block:: llvm
471
472  define %struct.C* @C_ctor_base(%struct.C* %this, i32 %x) {
473  entry:
474  ; CHECK-LABEL: C_ctor_base:
475  ; CHECK: mov [[SAVETHIS:r[0-9]+]], r0
476  ; CHECK: bl A_ctor_base
477  ; CHECK: mov r0, [[SAVETHIS]]
478    %0 = bitcast %struct.C* %this to %struct.A*
479    %call = tail call %struct.A* @A_ctor_base(%struct.A* %0)
480    %1 = bitcast %struct.C* %this to %struct.B*
481    %call2 = tail call %struct.B* @B_ctor_base(%struct.B* %1, i32 %x)
482    ret %struct.C* %this
483  }
484
485  define %struct.D* @D_ctor_base(%struct.D* %this, i32 %x) {
486  entry:
487  ; CHECK-LABEL: D_ctor_base:
488
489The use of ``CHECK-LABEL:`` directives in this case ensures that the three
490``CHECK:`` directives only accept lines corresponding to the body of the
491``@C_ctor_base`` function, even if the patterns match lines found later in
492the file. Furthermore, if one of these three ``CHECK:`` directives fail,
493FileCheck will recover by continuing to the next block, allowing multiple test
494failures to be detected in a single invocation.
495
496There is no requirement that ``CHECK-LABEL:`` directives contain strings that
497correspond to actual syntactic labels in a source or output language: they must
498simply uniquely match a single line in the file being verified.
499
500``CHECK-LABEL:`` directives cannot contain variable definitions or uses.
501
502FileCheck Regex Matching Syntax
503~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
504
505All FileCheck directives take a pattern to match.
506For most uses of FileCheck, fixed string matching is perfectly sufficient.  For
507some things, a more flexible form of matching is desired.  To support this,
508FileCheck allows you to specify regular expressions in matching strings,
509surrounded by double braces: ``{{yourregex}}``. FileCheck implements a POSIX
510regular expression matcher; it supports Extended POSIX regular expressions
511(ERE). Because we want to use fixed string matching for a majority of what we
512do, FileCheck has been designed to support mixing and matching fixed string
513matching with regular expressions.  This allows you to write things like this:
514
515.. code-block:: llvm
516
517   ; CHECK: movhpd	{{[0-9]+}}(%esp), {{%xmm[0-7]}}
518
519In this case, any offset from the ESP register will be allowed, and any xmm
520register will be allowed.
521
522Because regular expressions are enclosed with double braces, they are
523visually distinct, and you don't need to use escape characters within the double
524braces like you would in C.  In the rare case that you want to match double
525braces explicitly from the input, you can use something ugly like
526``{{[{][{]}}`` as your pattern.
527
528FileCheck String Substitution Blocks
529~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
530
531It is often useful to match a pattern and then verify that it occurs again
532later in the file.  For codegen tests, this can be useful to allow any
533register, but verify that that register is used consistently later.  To do
534this, :program:`FileCheck` supports string substitution blocks that allow
535string variables to be defined and substituted into patterns.  Here is a simple
536example:
537
538.. code-block:: llvm
539
540   ; CHECK: test5:
541   ; CHECK:    notw	[[REGISTER:%[a-z]+]]
542   ; CHECK:    andw	{{.*}}[[REGISTER]]
543
544The first check line matches a regex ``%[a-z]+`` and captures it into the
545string variable ``REGISTER``.  The second line verifies that whatever is in
546``REGISTER`` occurs later in the file after an "``andw``". :program:`FileCheck`
547string substitution blocks are always contained in ``[[ ]]`` pairs, and string
548variable names can be formed with the regex ``[a-zA-Z_][a-zA-Z0-9_]*``.  If a
549colon follows the name, then it is a definition of the variable; otherwise, it
550is a substitution.
551
552:program:`FileCheck` variables can be defined multiple times, and substitutions
553always get the latest value.  Variables can also be substituted later on the
554same line they were defined on. For example:
555
556.. code-block:: llvm
557
558    ; CHECK: op [[REG:r[0-9]+]], [[REG]]
559
560Can be useful if you want the operands of ``op`` to be the same register,
561and don't care exactly which register it is.
562
563If ``--enable-var-scope`` is in effect, variables with names that
564start with ``$`` are considered to be global. All others variables are
565local.  All local variables get undefined at the beginning of each
566CHECK-LABEL block. Global variables are not affected by CHECK-LABEL.
567This makes it easier to ensure that individual tests are not affected
568by variables set in preceding tests.
569
570FileCheck Numeric Substitution Blocks
571~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
572
573:program:`FileCheck` also supports numeric substitution blocks that allow
574checking for numeric values that satisfy a numeric expression constraint based
575on numeric variables. This allows ``CHECK:`` directives to verify a numeric
576relation between two numbers, such as the need for consecutive registers to be
577used.
578
579The syntax of a numeric substitution block is ``[[#<NUMVAR><op><offset>]]``
580where:
581
582* ``<NUMVAR>`` is the name of a numeric variable defined on the command line.
583
584* ``<op>`` is an optional numeric operation to perform on the value of
585  ``<NUMVAR>``. Currently supported numeric operations are ``+`` and ``-``.
586
587* ``<offset>`` is the immediate value that constitutes the second operand of
588  the numeric operation <op>. It must be present if ``<op>`` is present,
589  absent otherwise.
590
591Spaces are accepted before, after and between any of these elements.
592
593Unlike string substitution blocks, numeric substitution blocks only introduce
594numeric substitutions which substitute a numeric expression for its value.
595For example:
596
597.. code-block:: llvm
598
599    ; CHECK: add r[[#REG]], r[[#REG]], r[[#REG+1]]
600
601The above example would match the line:
602
603.. code-block:: gas
604
605    add r5, r5, r6
606
607but would not match the line:
608
609.. code-block:: gas
610
611    add r5, r5, r7
612
613due to ``7`` being unequal to ``5 + 1``.
614
615The ``--enable-var-scope`` option has the same effect on numeric variables as
616on string variables.
617
618FileCheck Pseudo Numeric Variables
619~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
620
621Sometimes there's a need to verify output that contains line numbers of the
622match file, e.g. when testing compiler diagnostics.  This introduces a certain
623fragility of the match file structure, as "``CHECK:``" lines contain absolute
624line numbers in the same file, which have to be updated whenever line numbers
625change due to text addition or deletion.
626
627To support this case, FileCheck understands the ``@LINE`` pseudo numeric
628variable which evaluates to the line number of the CHECK pattern where it is
629found.
630
631This way match patterns can be put near the relevant test lines and include
632relative line number references, for example:
633
634.. code-block:: c++
635
636   // CHECK: test.cpp:[[# @LINE + 4]]:6: error: expected ';' after top level declarator
637   // CHECK-NEXT: {{^int a}}
638   // CHECK-NEXT: {{^     \^}}
639   // CHECK-NEXT: {{^     ;}}
640   int a
641
642To support legacy uses of ``@LINE`` as a special string variable,
643:program:`FileCheck` also accepts the following uses of ``@LINE`` with string
644substitution block syntax: ``[[@LINE]]``, ``[[@LINE+<offset>]]`` and
645``[[@LINE-<offset>]]`` without any spaces inside the brackets and where
646``offset`` is an integer.
647
648Matching Newline Characters
649~~~~~~~~~~~~~~~~~~~~~~~~~~~
650
651To match newline characters in regular expressions the character class
652``[[:space:]]`` can be used. For example, the following pattern:
653
654.. code-block:: c++
655
656   // CHECK: DW_AT_location [DW_FORM_sec_offset] ([[DLOC:0x[0-9a-f]+]]){{[[:space:]].*}}"intd"
657
658matches output of the form (from llvm-dwarfdump):
659
660.. code-block:: text
661
662       DW_AT_location [DW_FORM_sec_offset]   (0x00000233)
663       DW_AT_name [DW_FORM_strp]  ( .debug_str[0x000000c9] = "intd")
664
665letting us set the :program:`FileCheck` variable ``DLOC`` to the desired value
666``0x00000233``, extracted from the line immediately preceding "``intd``".
667