18
18
19
19
#include < string>
20
20
#include < vector>
21
- #include < unordered_set>
22
21
23
22
#include " swift/AST/DiagnosticsFrontend.h"
24
23
#include " swift/Frontend/Frontend.h"
@@ -113,7 +112,6 @@ class AutolinkExtractInvocation {
113
112
// / Return 'true' if there was an error, and 'false' otherwise.
114
113
static bool
115
114
extractLinkerFlagsFromObjectFile (const llvm::object::ObjectFile *ObjectFile,
116
- std::unordered_set<std::string> &SeenLinkerLibraryFlags,
117
115
std::vector<std::string> &LinkerFlags,
118
116
CompilerInstance &Instance) {
119
117
// Search for the section we hold autolink entries in
@@ -142,15 +140,8 @@ extractLinkerFlagsFromObjectFile(const llvm::object::ObjectFile *ObjectFile,
142
140
llvm::SmallVector<llvm::StringRef, 4 > SplitFlags;
143
141
SectionData->split (SplitFlags, llvm::StringRef (" \0 " , 1 ), -1 ,
144
142
/* 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 ());
154
145
}
155
146
}
156
147
return false ;
@@ -161,7 +152,6 @@ extractLinkerFlagsFromObjectFile(const llvm::object::ObjectFile *ObjectFile,
161
152
// / 'true' if there was an error, and 'false' otherwise.
162
153
static bool
163
154
extractLinkerFlagsFromObjectFile (const llvm::object::WasmObjectFile *ObjectFile,
164
- std::unordered_set<std::string> &SeenLinkerLibraryFlags,
165
155
std::vector<std::string> &LinkerFlags,
166
156
CompilerInstance &Instance) {
167
157
// Search for the data segment we hold autolink entries in
@@ -174,15 +164,8 @@ extractLinkerFlagsFromObjectFile(const llvm::object::WasmObjectFile *ObjectFile,
174
164
llvm::SmallVector<llvm::StringRef, 4 > SplitFlags;
175
165
SegmentData.split (SplitFlags, llvm::StringRef (" \0 " , 1 ), -1 ,
176
166
/* 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 ());
186
169
}
187
170
}
188
171
return false ;
@@ -195,13 +178,12 @@ extractLinkerFlagsFromObjectFile(const llvm::object::WasmObjectFile *ObjectFile,
195
178
static bool extractLinkerFlags (const llvm::object::Binary *Bin,
196
179
CompilerInstance &Instance,
197
180
StringRef BinaryFileName,
198
- std::unordered_set<std::string> &SeenLinkerLibraryFlags,
199
181
std::vector<std::string> &LinkerFlags) {
200
182
if (auto *ObjectFile = llvm::dyn_cast<llvm::object::ELFObjectFileBase>(Bin)) {
201
- return extractLinkerFlagsFromObjectFile (ObjectFile, SeenLinkerLibraryFlags, LinkerFlags, Instance);
183
+ return extractLinkerFlagsFromObjectFile (ObjectFile, LinkerFlags, Instance);
202
184
} else if (auto *ObjectFile =
203
185
llvm::dyn_cast<llvm::object::WasmObjectFile>(Bin)) {
204
- return extractLinkerFlagsFromObjectFile (ObjectFile, SeenLinkerLibraryFlags, LinkerFlags, Instance);
186
+ return extractLinkerFlagsFromObjectFile (ObjectFile, LinkerFlags, Instance);
205
187
} else if (auto *Archive = llvm::dyn_cast<llvm::object::Archive>(Bin)) {
206
188
llvm::Error Error = llvm::Error::success ();
207
189
for (const auto &Child : Archive->children (Error)) {
@@ -215,7 +197,7 @@ static bool extractLinkerFlags(const llvm::object::Binary *Bin,
215
197
return true ;
216
198
}
217
199
if (extractLinkerFlags (ChildBinary->get (), Instance, BinaryFileName,
218
- SeenLinkerLibraryFlags, LinkerFlags)) {
200
+ LinkerFlags)) {
219
201
return true ;
220
202
}
221
203
}
@@ -246,8 +228,6 @@ int autolink_extract_main(ArrayRef<const char *> Args, const char *Argv0,
246
228
}
247
229
248
230
std::vector<std::string> LinkerFlags;
249
- // Flags of the form '-lxxx' seen so far
250
- std::unordered_set<std::string> SeenLinkerLibraryFlags;
251
231
252
232
// Extract the linker flags from the objects.
253
233
for (const auto &BinaryFileName : Invocation.getInputFilenames ()) {
@@ -265,7 +245,7 @@ int autolink_extract_main(ArrayRef<const char *> Args, const char *Argv0,
265
245
}
266
246
267
247
if (extractLinkerFlags (BinaryOwner->getBinary (), Instance, BinaryFileName,
268
- SeenLinkerLibraryFlags, LinkerFlags)) {
248
+ LinkerFlags)) {
269
249
return 1 ;
270
250
}
271
251
}
0 commit comments