From 2f28686ca04c3e079a95d7ff24827d05d4357ab3 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Thu, 23 Oct 2014 20:42:07 +0000 Subject: [PATCH] [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 --- lld/include/lld/ReaderWriter/PECOFFLinkingContext.h | 12 ++++++++++-- lld/unittests/DriverTests/WinLinkDriverTest.cpp | 9 +++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lld/include/lld/ReaderWriter/PECOFFLinkingContext.h b/lld/include/lld/ReaderWriter/PECOFFLinkingContext.h index 70c6887..f521161 100644 --- a/lld/include/lld/ReaderWriter/PECOFFLinkingContext.h +++ b/lld/include/lld/ReaderWriter/PECOFFLinkingContext.h @@ -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; } diff --git a/lld/unittests/DriverTests/WinLinkDriverTest.cpp b/lld/unittests/DriverTests/WinLinkDriverTest.cpp index c83f568..b69194e 100644 --- a/lld/unittests/DriverTests/WinLinkDriverTest.cpp +++ b/lld/unittests/DriverTests/WinLinkDriverTest.cpp @@ -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)); -- 2.7.4