mirror of
https://github.com/intel/llvm.git
synced 2026-01-25 10:55:58 +08:00
Do not parse the same /export string more than once.
Differential Revision: https://reviews.llvm.org/D41607 llvm-svn: 321513
This commit is contained in:
@@ -245,6 +245,13 @@ void LinkerDriver::parseDirectives(StringRef S) {
|
||||
Config->Entry = addUndefined(mangle(Arg->getValue()));
|
||||
break;
|
||||
case OPT_export: {
|
||||
// If a common header file contains dllexported function
|
||||
// declarations, many object files may end up with having the
|
||||
// same /EXPORT options. In order to save cost of parsing them,
|
||||
// we dedup them first.
|
||||
if (!DirectivesExports.insert(Arg->getValue()).second)
|
||||
break;
|
||||
|
||||
Export E = parseExport(Arg->getValue());
|
||||
if (Config->Machine == I386 && Config->MinGW) {
|
||||
if (!isDecorated(E.Name))
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "lld/Common/Reproduce.h"
|
||||
#include "llvm/ADT/Optional.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/StringSet.h"
|
||||
#include "llvm/Object/Archive.h"
|
||||
#include "llvm/Object/COFF.h"
|
||||
#include "llvm/Option/Arg.h"
|
||||
@@ -127,6 +128,8 @@ private:
|
||||
std::list<std::function<void()>> TaskQueue;
|
||||
std::vector<StringRef> FilePaths;
|
||||
std::vector<MemoryBufferRef> Resources;
|
||||
|
||||
llvm::StringSet<> DirectivesExports;
|
||||
};
|
||||
|
||||
// Functions below this line are defined in DriverUtils.cpp.
|
||||
|
||||
Reference in New Issue
Block a user