[llvm] r304900 - [FileCheck] Don't scan past the closing CHECK-DAG for CHECK-NOT inside CHECK-DAG

Benjamin Kramer via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 7 05:06:45 PDT 2017


Author: d0k
Date: Wed Jun  7 07:06:45 2017
New Revision: 304900

URL: http://llvm.org/viewvc/llvm-project?rev=304900&view=rev
Log:
[FileCheck] Don't scan past the closing CHECK-DAG for CHECK-NOT inside CHECK-DAG

If there's enough data in fron of it the skipped region would just
become arbitrarily large, and we scan for the CHECK-NOT everywhere.

Modified:
    llvm/trunk/test/FileCheck/check-dag.txt
    llvm/trunk/utils/FileCheck/FileCheck.cpp

Modified: llvm/trunk/test/FileCheck/check-dag.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/FileCheck/check-dag.txt?rev=304900&r1=304899&r2=304900&view=diff
==============================================================================
--- llvm/trunk/test/FileCheck/check-dag.txt (original)
+++ llvm/trunk/test/FileCheck/check-dag.txt Wed Jun  7 07:06:45 2017
@@ -12,6 +12,10 @@ add r11, r3, r4
 add r10, r1, r2
 mul r5, r10, r11
 
+# begin
+# end
+xor
+
 ; CHECK-DAG: add [[REG1:r[0-9]+]], r1, r2
 ; CHECK-DAG: add [[REG2:r[0-9]+]], r3, r4
 ; CHECK: mul r5, [[REG1]], [[REG2]]
@@ -24,3 +28,8 @@ mul r5, r10, r11
 ; CHECK-DAG: add [[REG2:r[0-9]+]], r3, r4
 ; CHECK-NOT: xor
 ; CHECK-DAG: mul r5, [[REG1]], [[REG2]]
+
+; CHECK-DAG: begin
+; CHECK-NOT: xor
+; CHECK-DAG: end
+; CHECK: xor

Modified: llvm/trunk/utils/FileCheck/FileCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/FileCheck/FileCheck.cpp?rev=304900&r1=304899&r2=304900&view=diff
==============================================================================
--- llvm/trunk/utils/FileCheck/FileCheck.cpp (original)
+++ llvm/trunk/utils/FileCheck/FileCheck.cpp Wed Jun  7 07:06:45 2017
@@ -1203,7 +1203,7 @@ size_t CheckString::CheckDag(const Sourc
       // If there's CHECK-NOTs between two CHECK-DAGs or from CHECK to
       // CHECK-DAG, verify that there's no 'not' strings occurred in that
       // region.
-      StringRef SkippedRegion = Buffer.substr(LastPos, MatchPos);
+      StringRef SkippedRegion = Buffer.slice(LastPos, MatchPos);
       if (CheckNot(SM, SkippedRegion, NotStrings, VariableTable))
         return StringRef::npos;
       // Clear "not strings".




More information about the llvm-commits mailing list