1818
1919#include < string>
2020#include < vector>
21- #include < unordered_set>
2221
2322#include " swift/AST/DiagnosticsFrontend.h"
2423#include " swift/Frontend/Frontend.h"
@@ -113,7 +112,6 @@ class AutolinkExtractInvocation {
113112// / Return 'true' if there was an error, and 'false' otherwise.
114113static bool
115114extractLinkerFlagsFromObjectFile (const llvm::object::ObjectFile *ObjectFile,
116- std::unordered_set<std::string> &SeenLinkerLibraryFlags,
117115 std::vector<std::string> &LinkerFlags,
118116 CompilerInstance &Instance) {
119117 // Search for the section we hold autolink entries in
@@ -142,15 +140,8 @@ extractLinkerFlagsFromObjectFile(const llvm::object::ObjectFile *ObjectFile,
142140 llvm::SmallVector<llvm::StringRef, 4 > SplitFlags;
143141 SectionData->split (SplitFlags, llvm::StringRef (" \0 " , 1 ), -1 ,
144142 /* KeepEmpty=*/ false );
145- for (const auto &Flag : SplitFlags) {
146- // If this is a library '-lxxx' flag, only add it if we have not seen it before
147- if (Flag.str ().rfind (" -l" , 0 ) == 0 ) {
148- auto SeenFlagsInsertResult = SeenLinkerLibraryFlags.insert (Flag.str ());
149- if (SeenFlagsInsertResult.second == true )
150- LinkerFlags.push_back (Flag.str ());
151- } else
152- LinkerFlags.push_back (Flag.str ());
153- }
143+ for (const auto &Flag : SplitFlags)
144+ LinkerFlags.push_back (Flag.str ());
154145 }
155146 }
156147 return false ;
@@ -161,7 +152,6 @@ extractLinkerFlagsFromObjectFile(const llvm::object::ObjectFile *ObjectFile,
161152// / 'true' if there was an error, and 'false' otherwise.
162153static bool
163154extractLinkerFlagsFromObjectFile (const llvm::object::WasmObjectFile *ObjectFile,
164- std::unordered_set<std::string> &SeenLinkerLibraryFlags,
165155 std::vector<std::string> &LinkerFlags,
166156 CompilerInstance &Instance) {
167157 // Search for the data segment we hold autolink entries in
@@ -174,15 +164,8 @@ extractLinkerFlagsFromObjectFile(const llvm::object::WasmObjectFile *ObjectFile,
174164 llvm::SmallVector<llvm::StringRef, 4 > SplitFlags;
175165 SegmentData.split (SplitFlags, llvm::StringRef (" \0 " , 1 ), -1 ,
176166 /* KeepEmpty=*/ false );
177- for (const auto &Flag : SplitFlags) {
178- // If this is a library '-lxxx' flag, only add it if we have not seen it before
179- if (Flag.str ().rfind (" -l" , 0 ) == 0 ) {
180- auto SeenFlagsInsertResult = SeenLinkerLibraryFlags.insert (Flag.str ());
181- if (SeenFlagsInsertResult.second == true )
182- LinkerFlags.push_back (Flag.str ());
183- } else
184- LinkerFlags.push_back (Flag.str ());
185- }
167+ for (const auto &Flag : SplitFlags)
168+ LinkerFlags.push_back (Flag.str ());
186169 }
187170 }
188171 return false ;
@@ -195,13 +178,12 @@ extractLinkerFlagsFromObjectFile(const llvm::object::WasmObjectFile *ObjectFile,
195178static bool extractLinkerFlags (const llvm::object::Binary *Bin,
196179 CompilerInstance &Instance,
197180 StringRef BinaryFileName,
198- std::unordered_set<std::string> &SeenLinkerLibraryFlags,
199181 std::vector<std::string> &LinkerFlags) {
200182 if (auto *ObjectFile = llvm::dyn_cast<llvm::object::ELFObjectFileBase>(Bin)) {
201- return extractLinkerFlagsFromObjectFile (ObjectFile, SeenLinkerLibraryFlags, LinkerFlags, Instance);
183+ return extractLinkerFlagsFromObjectFile (ObjectFile, LinkerFlags, Instance);
202184 } else if (auto *ObjectFile =
203185 llvm::dyn_cast<llvm::object::WasmObjectFile>(Bin)) {
204- return extractLinkerFlagsFromObjectFile (ObjectFile, SeenLinkerLibraryFlags, LinkerFlags, Instance);
186+ return extractLinkerFlagsFromObjectFile (ObjectFile, LinkerFlags, Instance);
205187 } else if (auto *Archive = llvm::dyn_cast<llvm::object::Archive>(Bin)) {
206188 llvm::Error Error = llvm::Error::success ();
207189 for (const auto &Child : Archive->children (Error)) {
@@ -215,7 +197,7 @@ static bool extractLinkerFlags(const llvm::object::Binary *Bin,
215197 return true ;
216198 }
217199 if (extractLinkerFlags (ChildBinary->get (), Instance, BinaryFileName,
218- SeenLinkerLibraryFlags, LinkerFlags)) {
200+ LinkerFlags)) {
219201 return true ;
220202 }
221203 }
@@ -246,8 +228,6 @@ int autolink_extract_main(ArrayRef<const char *> Args, const char *Argv0,
246228 }
247229
248230 std::vector<std::string> LinkerFlags;
249- // Flags of the form '-lxxx' seen so far
250- std::unordered_set<std::string> SeenLinkerLibraryFlags;
251231
252232 // Extract the linker flags from the objects.
253233 for (const auto &BinaryFileName : Invocation.getInputFilenames ()) {
@@ -265,7 +245,7 @@ int autolink_extract_main(ArrayRef<const char *> Args, const char *Argv0,
265245 }
266246
267247 if (extractLinkerFlags (BinaryOwner->getBinary (), Instance, BinaryFileName,
268- SeenLinkerLibraryFlags, LinkerFlags)) {
248+ LinkerFlags)) {
269249 return 1 ;
270250 }
271251 }
0 commit comments