Make SpecialCaseList match full strings, as documented, using anchors.
authorPeter Collingbourne <peter@pcc.me.uk>
Tue, 16 Jul 2013 17:56:07 +0000 (17:56 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Tue, 16 Jul 2013 17:56:07 +0000 (17:56 +0000)
Differential Revision: http://llvm-reviews.chandlerc.com/D1149

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186431 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/SpecialCaseList.cpp
unittests/Transforms/Utils/SpecialCaseList.cpp

index a747230def2ae07502908b7a36c1b8222e0a3e73..ef8a7ac75b68090728a1d582af390d25609eb10c 100644 (file)
@@ -99,7 +99,7 @@ void SpecialCaseList::init(const MemoryBuffer *MB) {
     // Add this regexp into the proper group by its prefix.
     if (!Regexps[Prefix][Category].empty())
       Regexps[Prefix][Category] += "|";
-    Regexps[Prefix][Category] += Regexp;
+    Regexps[Prefix][Category] += "^" + Regexp + "$";
   }
 
   // Iterate through each of the prefixes, and create Regexs for them.
index d87dab00db96c42a79872543f8c87d151b60aa4f..9deee3c1e9d0b7a075848ff81aea4281a785b95f 100644 (file)
@@ -139,4 +139,20 @@ TEST_F(SpecialCaseListTest, GlobalIsIn) {
   EXPECT_TRUE(SCL->isIn(*Bar, "init"));
 }
 
+TEST_F(SpecialCaseListTest, Substring) {
+  Module M("othello", Ctx);
+  Function *F = makeFunction("tomfoolery", M);
+  GlobalVariable *GV = makeGlobal("bartender", "t", M);
+
+  OwningPtr<SpecialCaseList> SCL(makeSpecialCaseList("src:hello\n"
+                                                     "fun:foo\n"
+                                                     "global:bar\n"));
+  EXPECT_FALSE(SCL->isIn(M));
+  EXPECT_FALSE(SCL->isIn(*F));
+  EXPECT_FALSE(SCL->isIn(*GV));
+
+  SCL.reset(makeSpecialCaseList("fun:*foo*\n"));
+  EXPECT_TRUE(SCL->isIn(*F));
+}
+
 }