FileCheck: Add CHECK-SAME
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Thu, 26 Feb 2015 04:53:00 +0000 (04:53 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Thu, 26 Feb 2015 04:53:00 +0000 (04:53 +0000)
commit9379c3152099726edc7d9aad7538c8a8ea0b736b
tree8d3c0b5777f81c0bbe4b6130104eca8d21f038f8
parent94a0f51a3f661c0e15889db07a4958e8f7a4f300
FileCheck: Add CHECK-SAME

Add `CHECK-SAME`, which requires that the pattern matches on the *same*
line as the previous `CHECK`/`CHECK-NEXT` -- in other words, no newline
is allowed in the skipped region.  This is similar to `CHECK-NEXT`,
which requires exactly 1 newline in the skipped region.

My motivation is to simplify checking the long lines of LLVM assembly
for the new debug info hierarchy.  This allows CHECK sequences like the
following:

    CHECK:      ![[REF]] = !SomeMDNode(
    CHECK-SAME: file: ![[FILE:[0-9]+]]
    CHECK-SAME: otherField: 93{{[,)]}}

which is equivalent to:

    CHECK: ![[REF]] = !SomeMDNode({{.*}}file: ![[FILE:[0-9]+]]{{.*}}otherField: 93{{[,)]}}

While this example just has two fields, many nodes in debug info have
more than that.  `CHECK-SAME` will keep the logic easy to follow.

Morever, it enables interleaving `CHECK-NOT`s without allowing newlines.
Consider the following:

    CHECK:      ![[REF]] = !SomeMDNode(
    CHECK-SAME: file: ![[FILE:[0-9]+]]
    CHECK-NOT:  unexpectedField:
    CHECK-SAME: otherField: 93{{[,)]}}
    CHECK-NOT:  otherUnexpectedField:
    CHECK-SAME: )

which doesn't seem to have an equivalent `CHECK` line.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230612 91177308-0d34-0410-b5e6-96231b3b80d8
test/FileCheck/same.txt [new file with mode: 0644]
utils/FileCheck/FileCheck.cpp