diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-11-23 23:41:17 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-11-23 23:41:17 +0000 |
commit | 8a9fa3af6911f61fe71df752aaba6d6f292563ae (patch) | |
tree | db3ae562ce053c29b038ef7d27d82c96fe6270df /clang/lib/Driver | |
parent | f2ad57144363decdd185dbcc6da16c9a6440dfb0 (diff) | |
download | bcm5719-llvm-8a9fa3af6911f61fe71df752aaba6d6f292563ae.tar.gz bcm5719-llvm-8a9fa3af6911f61fe71df752aaba6d6f292563ae.zip |
Add clang -cc1 parsing of diagnostic options.
llvm-svn: 89716
Diffstat (limited to 'clang/lib/Driver')
-rw-r--r-- | clang/lib/Driver/CC1Options.cpp | 97 |
1 files changed, 59 insertions, 38 deletions
diff --git a/clang/lib/Driver/CC1Options.cpp b/clang/lib/Driver/CC1Options.cpp index f49c641c199..c8c617e9f01 100644 --- a/clang/lib/Driver/CC1Options.cpp +++ b/clang/lib/Driver/CC1Options.cpp @@ -81,13 +81,14 @@ getAllArgValues(ArgList &Args, cc1options::ID ID) { // static void ParseAnalyzerArgs(AnalyzerOptions &Opts, ArgList &Args) { + using namespace cc1options; + Opts.AnalysisList.clear(); #define ANALYSIS(NAME, CMDFLAG, DESC, SCOPE) \ - if (Args.hasArg(cc1options::OPT_analysis_##NAME)) \ - Opts.AnalysisList.push_back(NAME); + if (Args.hasArg(OPT_analysis_##NAME)) Opts.AnalysisList.push_back(NAME); #include "clang/Frontend/Analyses.def" - if (Arg *A = Args.getLastArg(cc1options::OPT_analyzer_store)) { + if (Arg *A = Args.getLastArg(OPT_analyzer_store)) { llvm::StringRef Name = A->getValue(Args); AnalysisStores Value = llvm::StringSwitch<AnalysisStores>(Name) #define ANALYSIS_STORE(NAME, CMDFLAG, DESC, CREATFN) \ @@ -101,7 +102,7 @@ static void ParseAnalyzerArgs(AnalyzerOptions &Opts, ArgList &Args) { Opts.AnalysisStoreOpt = Value; } - if (Arg *A = Args.getLastArg(cc1options::OPT_analyzer_constraints)) { + if (Arg *A = Args.getLastArg(OPT_analyzer_constraints)) { llvm::StringRef Name = A->getValue(Args); AnalysisConstraints Value = llvm::StringSwitch<AnalysisConstraints>(Name) #define ANALYSIS_CONSTRAINTS(NAME, CMDFLAG, DESC, CREATFN) \ @@ -115,7 +116,7 @@ static void ParseAnalyzerArgs(AnalyzerOptions &Opts, ArgList &Args) { Opts.AnalysisConstraintsOpt = Value; } - if (Arg *A = Args.getLastArg(cc1options::OPT_analyzer_output)) { + if (Arg *A = Args.getLastArg(OPT_analyzer_output)) { llvm::StringRef Name = A->getValue(Args); AnalysisDiagClients Value = llvm::StringSwitch<AnalysisDiagClients>(Name) #define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATFN, AUTOCREAT) \ @@ -129,30 +130,26 @@ static void ParseAnalyzerArgs(AnalyzerOptions &Opts, ArgList &Args) { Opts.AnalysisDiagOpt = Value; } - Opts.VisualizeEGDot = - Args.hasArg(cc1options::OPT_analyzer_viz_egraph_graphviz); - Opts.VisualizeEGUbi = - Args.hasArg(cc1options::OPT_analyzer_viz_egraph_ubigraph); - Opts.AnalyzeAll = Args.hasArg(cc1options::OPT_analyzer_opt_analyze_headers); - Opts.AnalyzerDisplayProgress = - Args.hasArg(cc1options::OPT_analyzer_display_progress); - Opts.PurgeDead = !Args.hasArg(cc1options::OPT_analyzer_no_purge_dead); - Opts.EagerlyAssume = Args.hasArg(cc1options::OPT_analyzer_eagerly_assume); - Opts.AnalyzeSpecificFunction = - getLastArgValue(Args, cc1options::OPT_analyze_function); - Opts.EnableExperimentalChecks = - Args.hasArg(cc1options::OPT_analyzer_experimental_checks); + Opts.VisualizeEGDot = Args.hasArg(OPT_analyzer_viz_egraph_graphviz); + Opts.VisualizeEGUbi = Args.hasArg(OPT_analyzer_viz_egraph_ubigraph); + Opts.AnalyzeAll = Args.hasArg(OPT_analyzer_opt_analyze_headers); + Opts.AnalyzerDisplayProgress = Args.hasArg(OPT_analyzer_display_progress); + Opts.PurgeDead = !Args.hasArg(OPT_analyzer_no_purge_dead); + Opts.EagerlyAssume = Args.hasArg(OPT_analyzer_eagerly_assume); + Opts.AnalyzeSpecificFunction = getLastArgValue(Args, OPT_analyze_function); + Opts.EnableExperimentalChecks = Args.hasArg(OPT_analyzer_experimental_checks); Opts.EnableExperimentalInternalChecks = - Args.hasArg(cc1options::OPT_analyzer_experimental_internal_checks); - Opts.TrimGraph = Args.hasArg(cc1options::OPT_trim_egraph); + Args.hasArg(OPT_analyzer_experimental_internal_checks); + Opts.TrimGraph = Args.hasArg(OPT_trim_egraph); } static void ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args) { + using namespace cc1options; // -Os implies -O2 - if (Args.hasArg(cc1options::OPT_Os)) + if (Args.hasArg(OPT_Os)) Opts.OptimizationLevel = 2; else - Opts.OptimizationLevel = getLastArgIntValue(Args, cc1options::OPT_O); + Opts.OptimizationLevel = getLastArgIntValue(Args, OPT_O); // FIXME: What to do about argument parsing errors? if (Opts.OptimizationLevel > 3) { @@ -165,13 +162,13 @@ static void ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args) { Opts.Inlining = (Opts.OptimizationLevel > 1) ? CodeGenOptions::NormalInlining : CodeGenOptions::OnlyAlwaysInlining; - Opts.DebugInfo = Args.hasArg(cc1options::OPT_g); - Opts.DisableLLVMOpts = Args.hasArg(cc1options::OPT_disable_llvm_optzns); - Opts.DisableRedZone = Args.hasArg(cc1options::OPT_disable_red_zone); - Opts.MergeAllConstants = !Args.hasArg(cc1options::OPT_fno_merge_all_constants); - Opts.NoCommon = Args.hasArg(cc1options::OPT_fno_common); - Opts.NoImplicitFloat = Args.hasArg(cc1options::OPT_no_implicit_float); - Opts.OptimizeSize = Args.hasArg(cc1options::OPT_Os); + Opts.DebugInfo = Args.hasArg(OPT_g); + Opts.DisableLLVMOpts = Args.hasArg(OPT_disable_llvm_optzns); + Opts.DisableRedZone = Args.hasArg(OPT_disable_red_zone); + Opts.MergeAllConstants = !Args.hasArg(OPT_fno_merge_all_constants); + Opts.NoCommon = Args.hasArg(OPT_fno_common); + Opts.NoImplicitFloat = Args.hasArg(OPT_no_implicit_float); + Opts.OptimizeSize = Args.hasArg(OPT_Os); Opts.SimplifyLibCalls = 1; Opts.UnrollLoops = (Opts.OptimizationLevel > 1 && !Opts.OptimizeSize); @@ -186,22 +183,45 @@ static void ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args) { // FIXME: Put elsewhere? #ifdef NDEBUG Opts.VerifyModule = 0; +#else + Opts.VerifyModule = 1; #endif } static void ParseDependencyOutputArgs(DependencyOutputOptions &Opts, - ArgList &Args) { - Opts.OutputFile = getLastArgValue(Args, cc1options::OPT_dependency_file); - Opts.Targets = getAllArgValues(Args, cc1options::OPT_MT); - Opts.IncludeSystemHeaders = Args.hasArg(cc1options::OPT_sys_header_deps); - Opts.UsePhonyTargets = Args.hasArg(cc1options::OPT_MP); + ArgList &Args) { + using namespace cc1options; + Opts.OutputFile = getLastArgValue(Args, OPT_dependency_file); + Opts.Targets = getAllArgValues(Args, OPT_MT); + Opts.IncludeSystemHeaders = Args.hasArg(OPT_sys_header_deps); + Opts.UsePhonyTargets = Args.hasArg(OPT_MP); +} + +static void ParseDiagnosticArgs(DiagnosticOptions &Opts, ArgList &Args) { + using namespace cc1options; + Opts.IgnoreWarnings = Args.hasArg(OPT_w); + Opts.NoRewriteMacros = Args.hasArg(OPT_Wno_rewrite_macros); + Opts.Pedantic = Args.hasArg(OPT_pedantic); + Opts.PedanticErrors = Args.hasArg(OPT_pedantic_errors); + Opts.ShowCarets = !Args.hasArg(OPT_fno_caret_diagnostics); + Opts.ShowColors = Args.hasArg(OPT_fcolor_diagnostics); + Opts.ShowColumn = !Args.hasArg(OPT_fno_show_column); + Opts.ShowFixits = !Args.hasArg(OPT_fno_diagnostics_fixit_info); + Opts.ShowLocation = !Args.hasArg(OPT_fno_show_source_location); + Opts.ShowOptionNames = Args.hasArg(OPT_fdiagnostics_show_option); + Opts.ShowSourceRanges = Args.hasArg(OPT_fdiagnostics_print_source_range_info); + Opts.VerifyDiagnostics = Args.hasArg(OPT_verify); + Opts.MessageLength = getLastArgIntValue(Args, OPT_fmessage_length); + Opts.DumpBuildInformation = getLastArgValue(Args, OPT_dump_build_information); + Opts.Warnings = getAllArgValues(Args, OPT_W); } static void ParseTargetArgs(TargetOptions &Opts, ArgList &Args) { - Opts.ABI = getLastArgValue(Args, cc1options::OPT_target_abi); - Opts.CPU = getLastArgValue(Args, cc1options::OPT_mcpu); - Opts.Triple = getLastArgValue(Args, cc1options::OPT_triple); - Opts.Features = getAllArgValues(Args, cc1options::OPT_target_feature); + using namespace cc1options; + Opts.ABI = getLastArgValue(Args, OPT_target_abi); + Opts.CPU = getLastArgValue(Args, OPT_mcpu); + Opts.Triple = getLastArgValue(Args, OPT_triple); + Opts.Features = getAllArgValues(Args, OPT_target_feature); // Use the host triple if unspecified. if (Opts.Triple.empty()) @@ -231,5 +251,6 @@ void CompilerInvocation::CreateFromArgs(CompilerInvocation &Res, ParseAnalyzerArgs(Res.getAnalyzerOpts(), *InputArgs); ParseCodeGenArgs(Res.getCodeGenOpts(), *InputArgs); ParseDependencyOutputArgs(Res.getDependencyOutputOpts(), *InputArgs); + ParseDiagnosticArgs(Res.getDiagnosticOpts(), *InputArgs); ParseTargetArgs(Res.getTargetOpts(), *InputArgs); } |