From: Thomas Preud'homme Date: Wed, 19 Aug 2020 14:47:42 +0000 (+0100) Subject: Test all CHECK-NOT in a block even if one fails X-Git-Tag: llvmorg-13-init~13913 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2c9131665d00c83a13c90db26c4fafaccbc27822;p=platform%2Fupstream%2Fllvm.git 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 --- diff --git a/llvm/lib/Support/FileCheck.cpp b/llvm/lib/Support/FileCheck.cpp index 137eea0..59d8b6b 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 &NotStrings, const FileCheckRequest &Req, std::vector *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 0000000..3b7b465 --- /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