]> granicus.if.org Git - clang/commitdiff
Add clang -cc1 parsing of diagnostic options.
authorDaniel Dunbar <daniel@zuster.org>
Mon, 23 Nov 2009 23:41:17 +0000 (23:41 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Mon, 23 Nov 2009 23:41:17 +0000 (23:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89716 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/CC1Options.td
lib/Driver/CC1Options.cpp
lib/Frontend/CompilerInvocation.cpp

index 9ff5c223ea3b0fffd83111beebf64cb75389110f..2ecc17bedd4410b5f10343d14d11d929892d868f 100644 (file)
@@ -113,3 +113,50 @@ def sys_header_deps : Flag<"-sys-header-deps">,
 def MT : Separate<"-MT">, HelpText<"Specify target for dependency">;
 def MP : Flag<"-MP">,
   HelpText<"Create phony target for each dependency (other than main file)">;
+
+// Diagnostic Options
+
+def dump_build_information : Separate<"-dump-build-information">,
+  MetaVarName<"filename">,
+  HelpText<"output a dump of some build information to a file">;
+
+def fno_show_column : Flag<"-fno-show-column">,
+  HelpText<"Do not include column number on diagnostics">;
+
+def fno_show_source_location : Flag<"-fno-show-source-location">,
+  HelpText<"Do not include source location information with diagnostics">;
+
+def fno_caret_diagnostics : Flag<"-fno-caret-diagnostics">,
+  HelpText<"Do not include source line and caret with diagnostics">;
+
+def fno_diagnostics_fixit_info : Flag<"-fno-diagnostics-fixit-info">,
+  HelpText<"Do not include fixit information in diagnostics">;
+
+def w : Flag<"w">, HelpText<"Suppress all warnings">;
+
+def pedantic : Flag<"-pedantic">;
+
+def pedantic_errors : Flag<"-pedantic-errors">;
+
+// This gets all -W options, including -Werror, -W[no-]system-headers, etc.  The
+// driver has stripped off -Wa,foo etc.  The driver has also translated -W to
+// -Wextra, so we don't need to worry about it.
+def W : Joined<"-W">;
+
+def fdiagnostics_print_source_range_info : Flag<"-fdiagnostics-print-source-range-info">,
+  HelpText<"Print source range spans in numeric form">;
+
+def fdiagnostics_show_option : Flag<"-fdiagnostics-show-option">,
+  HelpText<"Print diagnostic name with mappable diagnostics">;
+
+def fmessage_length : Separate<"-fmessage-length">, MetaVarName<"N">,
+  HelpText<"Format message diagnostics so that they fit within N columns or fewer, when possible.">;
+
+def fcolor_diagnostics : Flag<"-fcolor-diagnostics">,
+  HelpText<"Use colors in diagnostics">;
+
+def Wno_rewrite_macros : Flag<"-Wno-rewrite-macros">,
+  HelpText<"Silence ObjC rewriting warnings">;
+
+def verify : Flag<"-verify">,
+  HelpText<"Verify emitted diagnostics and warnings">;
index f49c641c1997dbdf9624455bdb53de0bfd7c13ba..c8c617e9f01d031e646b561ef62d4f2b38fbf969 100644 (file)
@@ -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);
 }
index f55922dd8314865c2de76558d57c211e10409ada..9d55a8e90eb8eff1dbb547961cd9ea9ec06b5dcc 100644 (file)
@@ -518,7 +518,7 @@ static void TargetOptsToArgs(const TargetOptions &Opts,
   Res.push_back("-triple");
   Res.push_back(Opts.Triple);
   if (!Opts.CPU.empty()) {
-    Res.push_back("-target-cpu");
+    Res.push_back("-mcpu");
     Res.push_back(Opts.CPU);
   }
   if (!Opts.ABI.empty()) {