diff --git a/lib/DriverTool/autolink_extract_main.cpp b/lib/DriverTool/autolink_extract_main.cpp index 37e03d7d45f3b..8d00c791589cb 100644 --- a/lib/DriverTool/autolink_extract_main.cpp +++ b/lib/DriverTool/autolink_extract_main.cpp @@ -18,7 +18,6 @@ #include #include -#include #include "swift/AST/DiagnosticsFrontend.h" #include "swift/Frontend/Frontend.h" @@ -113,7 +112,6 @@ class AutolinkExtractInvocation { /// Return 'true' if there was an error, and 'false' otherwise. static bool extractLinkerFlagsFromObjectFile(const llvm::object::ObjectFile *ObjectFile, - std::unordered_set &SeenLinkerLibraryFlags, std::vector &LinkerFlags, CompilerInstance &Instance) { // Search for the section we hold autolink entries in @@ -142,15 +140,8 @@ extractLinkerFlagsFromObjectFile(const llvm::object::ObjectFile *ObjectFile, llvm::SmallVector SplitFlags; SectionData->split(SplitFlags, llvm::StringRef("\0", 1), -1, /*KeepEmpty=*/false); - for (const auto &Flag : SplitFlags) { - // If this is a library '-lxxx' flag, only add it if we have not seen it before - if (Flag.str().rfind("-l", 0) == 0) { - auto SeenFlagsInsertResult = SeenLinkerLibraryFlags.insert(Flag.str()); - if (SeenFlagsInsertResult.second == true) - LinkerFlags.push_back(Flag.str()); - } else - LinkerFlags.push_back(Flag.str()); - } + for (const auto &Flag : SplitFlags) + LinkerFlags.push_back(Flag.str()); } } return false; @@ -161,7 +152,6 @@ extractLinkerFlagsFromObjectFile(const llvm::object::ObjectFile *ObjectFile, /// 'true' if there was an error, and 'false' otherwise. static bool extractLinkerFlagsFromObjectFile(const llvm::object::WasmObjectFile *ObjectFile, - std::unordered_set &SeenLinkerLibraryFlags, std::vector &LinkerFlags, CompilerInstance &Instance) { // Search for the data segment we hold autolink entries in @@ -174,15 +164,8 @@ extractLinkerFlagsFromObjectFile(const llvm::object::WasmObjectFile *ObjectFile, llvm::SmallVector SplitFlags; SegmentData.split(SplitFlags, llvm::StringRef("\0", 1), -1, /*KeepEmpty=*/false); - for (const auto &Flag : SplitFlags) { - // If this is a library '-lxxx' flag, only add it if we have not seen it before - if (Flag.str().rfind("-l", 0) == 0) { - auto SeenFlagsInsertResult = SeenLinkerLibraryFlags.insert(Flag.str()); - if (SeenFlagsInsertResult.second == true) - LinkerFlags.push_back(Flag.str()); - } else - LinkerFlags.push_back(Flag.str()); - } + for (const auto &Flag : SplitFlags) + LinkerFlags.push_back(Flag.str()); } } return false; @@ -195,13 +178,12 @@ extractLinkerFlagsFromObjectFile(const llvm::object::WasmObjectFile *ObjectFile, static bool extractLinkerFlags(const llvm::object::Binary *Bin, CompilerInstance &Instance, StringRef BinaryFileName, - std::unordered_set &SeenLinkerLibraryFlags, std::vector &LinkerFlags) { if (auto *ObjectFile = llvm::dyn_cast(Bin)) { - return extractLinkerFlagsFromObjectFile(ObjectFile, SeenLinkerLibraryFlags, LinkerFlags, Instance); + return extractLinkerFlagsFromObjectFile(ObjectFile, LinkerFlags, Instance); } else if (auto *ObjectFile = llvm::dyn_cast(Bin)) { - return extractLinkerFlagsFromObjectFile(ObjectFile, SeenLinkerLibraryFlags, LinkerFlags, Instance); + return extractLinkerFlagsFromObjectFile(ObjectFile, LinkerFlags, Instance); } else if (auto *Archive = llvm::dyn_cast(Bin)) { llvm::Error Error = llvm::Error::success(); for (const auto &Child : Archive->children(Error)) { @@ -215,7 +197,7 @@ static bool extractLinkerFlags(const llvm::object::Binary *Bin, return true; } if (extractLinkerFlags(ChildBinary->get(), Instance, BinaryFileName, - SeenLinkerLibraryFlags, LinkerFlags)) { + LinkerFlags)) { return true; } } @@ -246,8 +228,6 @@ int autolink_extract_main(ArrayRef Args, const char *Argv0, } std::vector LinkerFlags; - // Flags of the form '-lxxx' seen so far - std::unordered_set SeenLinkerLibraryFlags; // Extract the linker flags from the objects. for (const auto &BinaryFileName : Invocation.getInputFilenames()) { @@ -265,7 +245,7 @@ int autolink_extract_main(ArrayRef Args, const char *Argv0, } if (extractLinkerFlags(BinaryOwner->getBinary(), Instance, BinaryFileName, - SeenLinkerLibraryFlags, LinkerFlags)) { + LinkerFlags)) { return 1; } } diff --git a/test/AutolinkExtract/import.swift b/test/AutolinkExtract/import.swift index 17966ba9b7446..ae8b929c7e132 100644 --- a/test/AutolinkExtract/import.swift +++ b/test/AutolinkExtract/import.swift @@ -1,16 +1,10 @@ // RUN: %empty-directory(%t) // RUN: %target-swiftc_driver -emit-module -emit-module-path %t/empty.swiftmodule -module-name empty -module-link-name empty %S/empty.swift // RUN: %target-swiftc_driver -c %s -I %t -o %t/import_experimental.o -// RUN: %target-swiftc_driver -c %s -I %t -o %t/import_experimental_again.o -// RUN: %target-swift-autolink-extract %t/import_experimental.o %t/import_experimental_again.o -o - | %FileCheck --check-prefix CHECK-%target-object-format %s - -// RUN: %target-swift-autolink-extract %t/import_experimental.o %t/import_experimental_again.o -o - | %FileCheck --check-prefix UNIQUE %s +// RUN: %target-swift-autolink-extract %t/import_experimental.o -o - | %FileCheck --check-prefix CHECK-%target-object-format %s // REQUIRES: autolink-extract -// UNIQUE-COUNT-1: -lempty -// UNIQUE-COUNT-1: -lswiftCore - // CHECK-elf-DAG: -lswiftCore // CHECK-elf-DAG: -lempty