aboutsummaryrefslogtreecommitdiff
path: root/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Driver/Tools.cpp')
-rw-r--r--lib/Driver/Tools.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index 7866ad67bc..6d66af50c5 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -104,10 +104,20 @@ static void AddLinkerInputs(const ToolChain &TC,
<< TC.getTripleString();
}
- if (II.isFilename())
+ // Add filenames immediately.
+ if (II.isFilename()) {
CmdArgs.push_back(II.getFilename());
- else
- II.getInputArg().renderAsInput(Args, CmdArgs);
+ continue;
+ }
+
+ // Otherwise, this is a linker input argument.
+ const Arg &A = II.getInputArg();
+
+ // Handle reserved library options.
+ if (A.getOption().matches(options::OPT_Z_reserved_lib_stdcxx)) {
+ TC.AddClangCXXStdlibLibArgs(Args, CmdArgs);
+ } else
+ A.renderAsInput(Args, CmdArgs);
}
}
@@ -3242,7 +3252,8 @@ void visualstudio::Link::ConstructJob(Compilation &C, const JobAction &JA,
ArgStringList CmdArgs;
if (Output.isFilename()) {
- CmdArgs.push_back(Args.MakeArgString(std::string("-out:") + Output.getFilename()));
+ CmdArgs.push_back(Args.MakeArgString(std::string("-out:") +
+ Output.getFilename()));
} else {
assert(Output.isNothing() && "Invalid output.");
}