[PECOFF] Fix /nodefaultlib option.

/nodefaultlib argument is a path name, so that needs to be compared
case-insensitive way. Also the ".lib" extension should be ignored.

llvm-svn: 220508
This commit is contained in:
Rui Ueyama 2014-10-23 20:42:07 +00:00
parent 1d1f232041
commit 2f28686ca0
2 changed files with 19 additions and 2 deletions

View File

@ -248,9 +248,17 @@ public:
}
void setAlternateName(StringRef def, StringRef weak);
void addNoDefaultLib(StringRef path) { _noDefaultLibs.insert(path); }
void addNoDefaultLib(StringRef path) {
if (path.endswith_lower(".lib"))
_noDefaultLibs.insert(path.drop_back(4).lower());
else
_noDefaultLibs.insert(path.lower());
}
bool hasNoDefaultLib(StringRef path) const {
return _noDefaultLibs.count(path) == 1;
if (path.endswith_lower(".lib"))
return _noDefaultLibs.count(path.drop_back(4).lower()) > 0;
return _noDefaultLibs.count(path.lower()) > 0;
}
void setNoDefaultLibAll(bool val) { _noDefaultLibAll = val; }

View File

@ -416,6 +416,15 @@ TEST_F(WinLinkParserTest, NoDefaultLib) {
EXPECT_EQ("kernel32.lib", inputFile(2, 0));
}
TEST_F(WinLinkParserTest, NoDefaultLibCase) {
EXPECT_TRUE(parse("link.exe", "/defaultlib:user32",
"/defaultlib:kernel32", "/nodefaultlib:USER32.LIB", "a.obj",
nullptr));
EXPECT_EQ(3, inputFileCount());
EXPECT_EQ("a.obj", inputFile(0));
EXPECT_EQ("kernel32.lib", inputFile(2, 0));
}
TEST_F(WinLinkParserTest, NoDefaultLibAll) {
EXPECT_TRUE(parse("link.exe", "/defaultlib:user32.lib",
"/defaultlib:kernel32", "/nodefaultlib", "a.obj", nullptr));