mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Introduce factory methods for SpecialCaseList
Summary: Doing work in constructors is bad: this change suggests to call SpecialCaseList::create(Path, Error) instead of "new SpecialCaseList(Path)". Currently the latter may crash with report_fatal_error, which is undesirable - sometimes we want to report the error to user gracefully - for example, if he provides an incorrect file as an argument of Clang's -fsanitize-blacklist flag. Reviewers: pcc Reviewed By: pcc CC: llvm-commits Differential Revision: http://llvm-reviews.chandlerc.com/D1327 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188156 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -34,9 +34,17 @@ protected:
|
||||
M, ST, false, GlobalValue::ExternalLinkage, 0, Name);
|
||||
}
|
||||
|
||||
SpecialCaseList *makeSpecialCaseList(StringRef List) {
|
||||
SpecialCaseList *makeSpecialCaseList(StringRef List, std::string &Error) {
|
||||
OwningPtr<MemoryBuffer> MB(MemoryBuffer::getMemBuffer(List));
|
||||
return new SpecialCaseList(MB.get());
|
||||
return SpecialCaseList::create(MB.get(), Error);
|
||||
}
|
||||
|
||||
SpecialCaseList *makeSpecialCaseList(StringRef List) {
|
||||
std::string Error;
|
||||
SpecialCaseList *SCL = makeSpecialCaseList(List, Error);
|
||||
assert(SCL);
|
||||
assert(Error == "");
|
||||
return SCL;
|
||||
}
|
||||
|
||||
LLVMContext Ctx;
|
||||
@@ -155,4 +163,26 @@ TEST_F(SpecialCaseListTest, Substring) {
|
||||
EXPECT_TRUE(SCL->isIn(*F));
|
||||
}
|
||||
|
||||
TEST_F(SpecialCaseListTest, InvalidSpecialCaseList) {
|
||||
std::string Error;
|
||||
EXPECT_EQ(0, makeSpecialCaseList("badline", Error));
|
||||
EXPECT_EQ("Malformed line 1: 'badline'", Error);
|
||||
EXPECT_EQ(0, makeSpecialCaseList("src:bad[a-", Error));
|
||||
EXPECT_EQ("Malformed regex in line 1: 'bad[a-': invalid character range",
|
||||
Error);
|
||||
EXPECT_EQ(0, makeSpecialCaseList("src:a.c\n"
|
||||
"fun:fun(a\n",
|
||||
Error));
|
||||
EXPECT_EQ("Malformed regex in line 2: 'fun(a': parentheses not balanced",
|
||||
Error);
|
||||
EXPECT_EQ(0, SpecialCaseList::create("unexisting", Error));
|
||||
EXPECT_EQ("Can't open file 'unexisting': No such file or directory", Error);
|
||||
}
|
||||
|
||||
TEST_F(SpecialCaseListTest, EmptySpecialCaseList) {
|
||||
OwningPtr<SpecialCaseList> SCL(makeSpecialCaseList(""));
|
||||
Module M("foo", Ctx);
|
||||
EXPECT_FALSE(SCL->isIn(M));
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user