diff options
| author | David Blaikie <dblaikie@gmail.com> | 2015-06-22 22:07:27 +0000 |
|---|---|---|
| committer | David Blaikie <dblaikie@gmail.com> | 2015-06-22 22:07:27 +0000 |
| commit | 69a1d8c64674594ec3853f1bce3065d276241349 (patch) | |
| tree | 765b99d8620df03a45b110b5ce23b2ffebe4ce24 /clang/lib | |
| parent | 1f02f962f55e4991dc9f31f26cfdcd25e13762a1 (diff) | |
| download | bcm5719-llvm-69a1d8c64674594ec3853f1bce3065d276241349.tar.gz bcm5719-llvm-69a1d8c64674594ec3853f1bce3065d276241349.zip | |
Update for LLVM API change to return by InputArgList directly (rather than by pointer) from ParseArgs
llvm-svn: 240349
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Driver/Driver.cpp | 58 | ||||
| -rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 36 |
2 files changed, 48 insertions, 46 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 233dabd1da7..8286ac06404 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -106,7 +106,7 @@ void Driver::ParseDriverMode(ArrayRef<const char *> Args) { } } -InputArgList *Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings) { +InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings) { llvm::PrettyStackTraceString CrashInfo("Command line argument parsing"); unsigned IncludedFlagsBitmask; @@ -115,32 +115,31 @@ InputArgList *Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings) { getIncludeExcludeOptionFlagMasks(); unsigned MissingArgIndex, MissingArgCount; - InputArgList *Args = + InputArgList Args = getOpts().ParseArgs(ArgStrings, MissingArgIndex, MissingArgCount, IncludedFlagsBitmask, ExcludedFlagsBitmask); // Check for missing argument error. if (MissingArgCount) Diag(clang::diag::err_drv_missing_argument) - << Args->getArgString(MissingArgIndex) << MissingArgCount; + << Args.getArgString(MissingArgIndex) << MissingArgCount; // Check for unsupported options. - for (const Arg *A : *Args) { + for (const Arg *A : Args) { if (A->getOption().hasFlag(options::Unsupported)) { - Diag(clang::diag::err_drv_unsupported_opt) << A->getAsString(*Args); + Diag(clang::diag::err_drv_unsupported_opt) << A->getAsString(Args); continue; } // Warn about -mcpu= without an argument. if (A->getOption().matches(options::OPT_mcpu_EQ) && A->containsValue("")) { - Diag(clang::diag::warn_drv_empty_joined_argument) << - A->getAsString(*Args); + Diag(clang::diag::warn_drv_empty_joined_argument) << A->getAsString(Args); } } - for (const Arg *A : Args->filtered(options::OPT_UNKNOWN)) - Diags.Report(diag::err_drv_unknown_argument) << A->getAsString(*Args); + for (const Arg *A : Args.filtered(options::OPT_UNKNOWN)) + Diags.Report(diag::err_drv_unknown_argument) << A->getAsString(Args); return Args; } @@ -312,13 +311,13 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) { // FIXME: This stuff needs to go into the Compilation, not the driver. bool CCCPrintActions; - InputArgList *Args = ParseArgStrings(ArgList.slice(1)); + InputArgList Args = ParseArgStrings(ArgList.slice(1)); // -no-canonical-prefixes is used very early in main. - Args->ClaimAllArgs(options::OPT_no_canonical_prefixes); + Args.ClaimAllArgs(options::OPT_no_canonical_prefixes); // Ignore -pipe. - Args->ClaimAllArgs(options::OPT_pipe); + Args.ClaimAllArgs(options::OPT_pipe); // Extract -ccc args. // @@ -326,12 +325,12 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) { // should be outside in the client; the parts that aren't should have proper // options, either by introducing new ones or by overloading gcc ones like -V // or -b. - CCCPrintActions = Args->hasArg(options::OPT_ccc_print_phases); - CCCPrintBindings = Args->hasArg(options::OPT_ccc_print_bindings); - if (const Arg *A = Args->getLastArg(options::OPT_ccc_gcc_name)) + CCCPrintActions = Args.hasArg(options::OPT_ccc_print_phases); + CCCPrintBindings = Args.hasArg(options::OPT_ccc_print_bindings); + if (const Arg *A = Args.getLastArg(options::OPT_ccc_gcc_name)) CCCGenericGCCName = A->getValue(); - CCCUsePCH = Args->hasFlag(options::OPT_ccc_pch_is_pch, - options::OPT_ccc_pch_is_pth); + CCCUsePCH = + Args.hasFlag(options::OPT_ccc_pch_is_pch, options::OPT_ccc_pch_is_pth); // FIXME: DefaultTargetTriple is used by the target-prefixed calls to as/ld // and getToolChain is const. if (IsCLMode()) { @@ -341,39 +340,42 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) { T.setEnvironment(llvm::Triple::MSVC); DefaultTargetTriple = T.str(); } - if (const Arg *A = Args->getLastArg(options::OPT_target)) + if (const Arg *A = Args.getLastArg(options::OPT_target)) DefaultTargetTriple = A->getValue(); - if (const Arg *A = Args->getLastArg(options::OPT_ccc_install_dir)) + if (const Arg *A = Args.getLastArg(options::OPT_ccc_install_dir)) Dir = InstalledDir = A->getValue(); - for (const Arg *A : Args->filtered(options::OPT_B)) { + for (const Arg *A : Args.filtered(options::OPT_B)) { A->claim(); PrefixDirs.push_back(A->getValue(0)); } - if (const Arg *A = Args->getLastArg(options::OPT__sysroot_EQ)) + if (const Arg *A = Args.getLastArg(options::OPT__sysroot_EQ)) SysRoot = A->getValue(); - if (const Arg *A = Args->getLastArg(options::OPT__dyld_prefix_EQ)) + if (const Arg *A = Args.getLastArg(options::OPT__dyld_prefix_EQ)) DyldPrefix = A->getValue(); - if (Args->hasArg(options::OPT_nostdlib)) + if (Args.hasArg(options::OPT_nostdlib)) UseStdLib = false; - if (const Arg *A = Args->getLastArg(options::OPT_resource_dir)) + if (const Arg *A = Args.getLastArg(options::OPT_resource_dir)) ResourceDir = A->getValue(); - if (const Arg *A = Args->getLastArg(options::OPT_save_temps_EQ)) { + if (const Arg *A = Args.getLastArg(options::OPT_save_temps_EQ)) { SaveTemps = llvm::StringSwitch<SaveTempsMode>(A->getValue()) .Case("cwd", SaveTempsCwd) .Case("obj", SaveTempsObj) .Default(SaveTempsCwd); } + std::unique_ptr<llvm::opt::InputArgList> UArgs = + llvm::make_unique<InputArgList>(std::move(Args)); + // Perform the default argument translations. - DerivedArgList *TranslatedArgs = TranslateInputArgs(*Args); + DerivedArgList *TranslatedArgs = TranslateInputArgs(*UArgs); // Owned by the host. - const ToolChain &TC = getToolChain(*Args); + const ToolChain &TC = getToolChain(*UArgs); // The compilation takes ownership of Args. - Compilation *C = new Compilation(*this, TC, Args, TranslatedArgs); + Compilation *C = new Compilation(*this, TC, UArgs.release(), TranslatedArgs); if (!HandleImmediateArgs(*C)) return C; diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 2d26548db39..514484a47f8 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1849,37 +1849,37 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res, std::unique_ptr<OptTable> Opts(createDriverOptTable()); const unsigned IncludedFlagsBitmask = options::CC1Option; unsigned MissingArgIndex, MissingArgCount; - std::unique_ptr<InputArgList> Args( + InputArgList Args = Opts->ParseArgs(llvm::makeArrayRef(ArgBegin, ArgEnd), MissingArgIndex, - MissingArgCount, IncludedFlagsBitmask)); + MissingArgCount, IncludedFlagsBitmask); // Check for missing argument error. if (MissingArgCount) { Diags.Report(diag::err_drv_missing_argument) - << Args->getArgString(MissingArgIndex) << MissingArgCount; + << Args.getArgString(MissingArgIndex) << MissingArgCount; Success = false; } // Issue errors on unknown arguments. - for (const Arg *A : Args->filtered(OPT_UNKNOWN)) { - Diags.Report(diag::err_drv_unknown_argument) << A->getAsString(*Args); + for (const Arg *A : Args.filtered(OPT_UNKNOWN)) { + Diags.Report(diag::err_drv_unknown_argument) << A->getAsString(Args); Success = false; } - Success &= ParseAnalyzerArgs(*Res.getAnalyzerOpts(), *Args, Diags); - Success &= ParseMigratorArgs(Res.getMigratorOpts(), *Args); - ParseDependencyOutputArgs(Res.getDependencyOutputOpts(), *Args); - Success &= ParseDiagnosticArgs(Res.getDiagnosticOpts(), *Args, &Diags); - ParseCommentArgs(Res.getLangOpts()->CommentOpts, *Args); - ParseFileSystemArgs(Res.getFileSystemOpts(), *Args); + Success &= ParseAnalyzerArgs(*Res.getAnalyzerOpts(), Args, Diags); + Success &= ParseMigratorArgs(Res.getMigratorOpts(), Args); + ParseDependencyOutputArgs(Res.getDependencyOutputOpts(), Args); + Success &= ParseDiagnosticArgs(Res.getDiagnosticOpts(), Args, &Diags); + ParseCommentArgs(Res.getLangOpts()->CommentOpts, Args); + ParseFileSystemArgs(Res.getFileSystemOpts(), Args); // FIXME: We shouldn't have to pass the DashX option around here - InputKind DashX = ParseFrontendArgs(Res.getFrontendOpts(), *Args, Diags); - ParseTargetArgs(Res.getTargetOpts(), *Args); - Success &= ParseCodeGenArgs(Res.getCodeGenOpts(), *Args, DashX, Diags, + InputKind DashX = ParseFrontendArgs(Res.getFrontendOpts(), Args, Diags); + ParseTargetArgs(Res.getTargetOpts(), Args); + Success &= ParseCodeGenArgs(Res.getCodeGenOpts(), Args, DashX, Diags, Res.getTargetOpts()); - ParseHeaderSearchArgs(Res.getHeaderSearchOpts(), *Args); + ParseHeaderSearchArgs(Res.getHeaderSearchOpts(), Args); if (DashX != IK_AST && DashX != IK_LLVM_IR) { - ParseLangArgs(*Res.getLangOpts(), *Args, DashX, Diags); + ParseLangArgs(*Res.getLangOpts(), Args, DashX, Diags); if (Res.getFrontendOpts().ProgramAction == frontend::RewriteObjC) Res.getLangOpts()->ObjCExceptions = 1; } @@ -1888,8 +1888,8 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res, // ParsePreprocessorArgs and remove the FileManager // parameters from the function and the "FileManager.h" #include. FileManager FileMgr(Res.getFileSystemOpts()); - ParsePreprocessorArgs(Res.getPreprocessorOpts(), *Args, FileMgr, Diags); - ParsePreprocessorOutputArgs(Res.getPreprocessorOutputOpts(), *Args, + ParsePreprocessorArgs(Res.getPreprocessorOpts(), Args, FileMgr, Diags); + ParsePreprocessorOutputArgs(Res.getPreprocessorOutputOpts(), Args, Res.getFrontendOpts().ProgramAction); return Success; } |

