[llvm] 2c91316 - Test all CHECK-NOT in a block even if one fails

Thomas Preud'homme via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 24 07:44:55 PDT 2020


Author: Thomas Preud'homme
Date: 2020-08-24T15:45:05+01:00
New Revision: 2c9131665d00c83a13c90db26c4fafaccbc27822

URL: https://github.com/llvm/llvm-project/commit/2c9131665d00c83a13c90db26c4fafaccbc27822
DIFF: https://github.com/llvm/llvm-project/commit/2c9131665d00c83a13c90db26c4fafaccbc27822.diff

LOG: Test all CHECK-NOT in a block even if one fails

This commit makes FileCheck print all CHECK-NOT directive failure in a
CHECK-NOT block even if one fails. Prior to that, it would stop trying
to match CHECK-NOT directive as soon as one in the block fails.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D86315

Added: 
    llvm/test/FileCheck/multiple-check-not-failures.txt

Modified: 
    llvm/lib/Support/FileCheck.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Support/FileCheck.cpp b/llvm/lib/Support/FileCheck.cpp
index 137eea0a65a6..59d8b6bbc217 100644
--- a/llvm/lib/Support/FileCheck.cpp
+++ b/llvm/lib/Support/FileCheck.cpp
@@ -2197,6 +2197,7 @@ bool FileCheckString::CheckNot(const SourceMgr &SM, StringRef Buffer,
                                const std::vector<const Pattern *> &NotStrings,
                                const FileCheckRequest &Req,
                                std::vector<FileCheckDiag> *Diags) const {
+  bool DirectiveFail = false;
   for (const Pattern *Pat : NotStrings) {
     assert((Pat->getCheckTy() == Check::CheckNot) && "Expect CHECK-NOT!");
 
@@ -2212,11 +2213,11 @@ bool FileCheckString::CheckNot(const SourceMgr &SM, StringRef Buffer,
 
     PrintMatch(false, SM, Prefix, Pat->getLoc(), *Pat, 1, Buffer, Pos, MatchLen,
                Req, Diags);
-
-    return true;
+    DirectiveFail = true;
+    continue;
   }
 
-  return false;
+  return DirectiveFail;
 }
 
 size_t FileCheckString::CheckDag(const SourceMgr &SM, StringRef Buffer,

diff  --git a/llvm/test/FileCheck/multiple-check-not-failures.txt b/llvm/test/FileCheck/multiple-check-not-failures.txt
new file mode 100644
index 000000000000..3b7b465719a0
--- /dev/null
+++ b/llvm/test/FileCheck/multiple-check-not-failures.txt
@@ -0,0 +1,32 @@
+; Check that all errors in a CHECK-NOT blocks are reported, but that FileCheck
+; does not check past the block.
+RUN: %ProtectFileCheckOutput \
+RUN: not FileCheck --dump-input=never --input-file %s %s 2>&1 | \
+RUN:   FileCheck --strict-whitespace --check-prefix CHECK-ERRORS %s
+
+foo
+bar
+
+barrier
+
+baz
+
+CHECK-NOT: bar
+CHECK-NOT: foo
+CHECK: barrier
+CHECK-NOT: baz
+
+CHECK-ERRORS: multiple-check-not-failures.txt:[[#@LINE-5]]:12: error: {{C}}HECK-NOT: excluded string found in input
+CHECK-ERRORS-NEXT:      {{C}}HECK-NOT: bar
+CHECK-ERRORS-NEXT:     {{^}}           ^{{$}}
+CHECK-ERRORS-NEXT:      multiple-check-not-failures.txt:[[#@LINE-14]]:1: note: found here
+CHECK-ERRORS-NEXT:      bar
+CHECK-ERRORS-NEXT: {{^}}^~~{{$}}
+CHECK-ERRORS-NEXT:      multiple-check-not-failures.txt:[[#@LINE-10]]:12: error: {{C}}HECK-NOT: excluded string found in input
+CHECK-ERRORS-NEXT:      {{C}}HECK-NOT: foo
+CHECK-ERRORS-NEXT:     {{^}}           ^{{$}}
+CHECK-ERRORS-NEXT:      multiple-check-not-failures.txt:[[#@LINE-21]]:1: note: found here
+CHECK-ERRORS-NEXT:      foo
+CHECK-ERRORS-NEXT: {{^}}^~~{{$}}
+CHECK-ERRORS-NOT: error:
+CHECK-ERRORS-NOT:      {{C}}HECK-NOT: baz


        


More information about the llvm-commits mailing list