[clang] 2be5698 - [clang][cli] Add ability to make fixups to CompilerInvocation after option parsing
Jan Svoboda via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 18 01:37:59 PST 2020
Author: Jan Svoboda
Date: 2020-11-18T10:35:38+01:00
New Revision: 2be569870486a2068667f4625723c0a7409f4c97
URL: https://github.com/llvm/llvm-project/commit/2be569870486a2068667f4625723c0a7409f4c97
DIFF: https://github.com/llvm/llvm-project/commit/2be569870486a2068667f4625723c0a7409f4c97.diff
LOG: [clang][cli] Add ability to make fixups to CompilerInvocation after option parsing
Depends on D83211
Reviewed By: Bigcheese
Original patch by Daniel Grumberg.
Differential Revision: https://reviews.llvm.org/D83298
Added:
Modified:
clang/include/clang/Driver/Options.td
clang/lib/Frontend/CompilerInvocation.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index feae81317047..b850f6466a34 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1347,7 +1347,7 @@ def fcf_protection : Flag<["-"], "fcf-protection">, Group<f_Group>, Flags<[CoreO
Alias<fcf_protection_EQ>, AliasArgs<["full"]>,
HelpText<"Enable cf-protection in 'full' mode">;
-defm xray_instrument : OptInFFlag<"xray-instrument", "Generate XRay instrumentation sleds on function entry and exit">;
+defm xray_instrument : OptInFFlag<"xray-instrument", "Generate XRay instrumentation sleds on function entry and exit", "", "", [], "LangOpts->XRayInstrument">;
def fxray_instruction_threshold_EQ :
JoinedOrSeparate<["-"], "fxray-instruction-threshold=">,
@@ -1375,15 +1375,15 @@ def fxray_modes :
HelpText<"List of modes to link in by default into XRay instrumented binaries.">;
defm xray_always_emit_customevents : OptInFFlag<"xray-always-emit-customevents",
- "Always emit __xray_customevent(...) calls even if the containing function is not always instrumented">;
+ "Always emit __xray_customevent(...) calls even if the containing function is not always instrumented", "", "", [], "LangOpts->XRayAlwaysEmitCustomEvents">;
defm xray_always_emit_typedevents : OptInFFlag<"xray-always-emit-typedevents",
- "Always emit __xray_typedevent(...) calls even if the containing function is not always instrumented">;
+ "Always emit __xray_typedevent(...) calls even if the containing function is not always instrumented", "", "", [], "LangOpts->XRayAlwaysEmitTypedEvents">;
defm xray_ignore_loops : OptInFFlag<"xray-ignore-loops",
- "Don't instrument functions with loops unless they also meet the minimum function size">;
+ "Don't instrument functions with loops unless they also meet the minimum function size", "", "", [], "CodeGenOpts.XRayIgnoreLoops">;
defm xray_function_index : OptOutFFlag<"xray-function-index", "",
- "Omit function index section at the expense of single-function patching performance">;
+ "Omit function index section at the expense of single-function patching performance", "", [], "CodeGenOpts.XRayOmitFunctionIndex">;
def fxray_link_deps : Flag<["-"], "fxray-link-deps">, Group<f_Group>,
Flags<[CC1Option]>,
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index a9bc48fd23a5..2ea1027e125d 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -245,6 +245,17 @@ static T extractMaskValue(T KeyPath) {
return KeyPath & Value;
}
+static void FixupInvocation(CompilerInvocation &Invocation) {
+ LangOptions &LangOpts = *Invocation.getLangOpts();
+ DiagnosticOptions &DiagOpts = Invocation.getDiagnosticOpts();
+ CodeGenOptions &CodeGenOpts = Invocation.getCodeGenOpts();
+ CodeGenOpts.XRayInstrumentFunctions = LangOpts.XRayInstrument;
+ CodeGenOpts.XRayAlwaysEmitCustomEvents = LangOpts.XRayAlwaysEmitCustomEvents;
+ CodeGenOpts.XRayAlwaysEmitTypedEvents = LangOpts.XRayAlwaysEmitTypedEvents;
+
+ llvm::sys::Process::UseANSIEscapeCodes(DiagOpts.UseANSIEscapeCodes);
+}
+
//===----------------------------------------------------------------------===//
// Deserialization (from args)
//===----------------------------------------------------------------------===//
@@ -1189,16 +1200,8 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
Opts.InstrumentFunctionEntryBare =
Args.hasArg(OPT_finstrument_function_entry_bare);
- Opts.XRayInstrumentFunctions =
- Args.hasArg(OPT_fxray_instrument);
- Opts.XRayAlwaysEmitCustomEvents =
- Args.hasArg(OPT_fxray_always_emit_customevents);
- Opts.XRayAlwaysEmitTypedEvents =
- Args.hasArg(OPT_fxray_always_emit_typedevents);
Opts.XRayInstructionThreshold =
getLastArgIntValue(Args, OPT_fxray_instruction_threshold_EQ, 200, Diags);
- Opts.XRayIgnoreLoops = Args.hasArg(OPT_fxray_ignore_loops);
- Opts.XRayOmitFunctionIndex = Args.hasArg(OPT_fno_xray_function_index);
Opts.XRayTotalFunctionGroups =
getLastArgIntValue(Args, OPT_fxray_function_groups, 1, Diags);
Opts.XRaySelectedFunctionGroup =
@@ -3447,13 +3450,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
systemBlacklists.begin(),
systemBlacklists.end());
- // -fxray-instrument
- Opts.XRayInstrument = Args.hasArg(OPT_fxray_instrument);
- Opts.XRayAlwaysEmitCustomEvents =
- Args.hasArg(OPT_fxray_always_emit_customevents);
- Opts.XRayAlwaysEmitTypedEvents =
- Args.hasArg(OPT_fxray_always_emit_typedevents);
-
// -fxray-{always,never}-instrument= filenames.
Opts.XRayAlwaysInstrumentFiles =
Args.getAllArgValues(OPT_fxray_always_instrument);
@@ -3827,9 +3823,7 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
}
Success &= Res.parseSimpleArgs(Args, Diags);
-
- llvm::sys::Process::UseANSIEscapeCodes(
- Res.DiagnosticOpts->UseANSIEscapeCodes);
+ FixupInvocation(Res);
Success &= ParseAnalyzerArgs(*Res.getAnalyzerOpts(), Args, Diags);
Success &= ParseMigratorArgs(Res.getMigratorOpts(), Args);
More information about the cfe-commits
mailing list