From 76fa840d0990314d1d1c160803ba9d014a6c01a9 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Thu, 15 Apr 2010 06:09:03 +0000 Subject: Driver/Frontend: Add support for -mllvm, which forwards options to the LLVM option parser. - Note that this is a behavior change, previously -mllvm at the driver level forwarded to clang -cc1. The driver does a little magic to make sure that '-mllvm -disable-llvm-optzns' works correctly, but other users will need to be updated to use -Xclang. llvm-svn: 101354 --- clang/lib/Driver/Tools.cpp | 12 +++++++++++- clang/lib/Frontend/CompilerInvocation.cpp | 5 +++++ 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'clang/lib') diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 77456faa1e2..afcf26fee12 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1325,8 +1325,18 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Args.AddLastArg(CmdArgs, options::OPT_dM); Args.AddLastArg(CmdArgs, options::OPT_dD); + // Forward -Xclang arguments to -cc1, and -mllvm arguments to the LLVM option + // parser. Args.AddAllArgValues(CmdArgs, options::OPT_Xclang); - Args.AddAllArgValues(CmdArgs, options::OPT_mllvm); + for (arg_iterator it = Args.filtered_begin(options::OPT_mllvm), + ie = Args.filtered_end(); it != ie; ++it) { + // We translate this by hand to the -cc1 argument, since nightly test uses + // it and developers have been trained to spell it with -mllvm. + if (llvm::StringRef(it->getValue(Args, 0)) == "-disable-llvm-optzns") + CmdArgs.push_back("-disable-llvm-optzns"); + else + it->render(Args, CmdArgs); + } if (Output.getType() == types::TY_Dependencies) { // Handled with other dependency code. diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 990371b2149..f51bad285db 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -383,6 +383,10 @@ static void FrontendOptsToArgs(const FrontendOptions &Opts, Res.push_back("-ast-merge"); Res.push_back(Opts.ASTMergeFiles[i]); } + for (unsigned i = 0, e = Opts.LLVMArgs.size(); i != e; ++i) { + Res.push_back("-mllvm"); + Res.push_back(Opts.LLVMArgs[i]); + } } static void HeaderSearchOptsToArgs(const HeaderSearchOptions &Opts, @@ -955,6 +959,7 @@ ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args, Diagnostic &Diags) { Opts.ShowVersion = Args.hasArg(OPT_version); Opts.ViewClassInheritance = getLastArgValue(Args, OPT_cxx_inheritance_view); Opts.ASTMergeFiles = getAllArgValues(Args, OPT_ast_merge); + Opts.LLVMArgs = getAllArgValues(Args, OPT_mllvm); FrontendOptions::InputKind DashX = FrontendOptions::IK_None; if (const Arg *A = Args.getLastArg(OPT_x)) { -- cgit v1.2.3