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