diff --git a/lld/include/lld/ReaderWriter/PECOFFLinkingContext.h b/lld/include/lld/ReaderWriter/PECOFFLinkingContext.h index 70c68876b378..f521161a5933 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 c83f5685cf93..b69194e96934 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));