aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp901
1 files changed, 97 insertions, 804 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 30d61bf..f9bce6a 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -152,8 +152,8 @@ static Optional<bool> normalizeSimpleNegativeFlag(OptSpecifier Opt, unsigned,
/// argument.
static void denormalizeSimpleFlag(SmallVectorImpl<const char *> &Args,
const char *Spelling,
- CompilerInvocation::StringAllocator, unsigned,
- /*T*/...) {
+ CompilerInvocation::StringAllocator,
+ Option::OptionClass, unsigned, /*T*/...) {
Args.push_back(Spelling);
}
@@ -193,12 +193,41 @@ static auto makeBooleanOptionNormalizer(bool Value, bool OtherValue,
static auto makeBooleanOptionDenormalizer(bool Value) {
return [Value](SmallVectorImpl<const char *> &Args, const char *Spelling,
- CompilerInvocation::StringAllocator, unsigned, bool KeyPath) {
+ CompilerInvocation::StringAllocator, Option::OptionClass,
+ unsigned, bool KeyPath) {
if (KeyPath == Value)
Args.push_back(Spelling);
};
}
+static void denormalizeStringImpl(SmallVectorImpl<const char *> &Args,
+ const char *Spelling,
+ CompilerInvocation::StringAllocator SA,
+ Option::OptionClass OptClass, unsigned,
+ Twine Value) {
+ switch (OptClass) {
+ case Option::SeparateClass:
+ case Option::JoinedOrSeparateClass:
+ Args.push_back(Spelling);
+ Args.push_back(SA(Value));
+ break;
+ case Option::JoinedClass:
+ Args.push_back(SA(Twine(Spelling) + Value));
+ break;
+ default:
+ llvm_unreachable("Cannot denormalize an option with option class "
+ "incompatible with string denormalization.");
+ }
+}
+
+template <typename T>
+static void
+denormalizeString(SmallVectorImpl<const char *> &Args, const char *Spelling,
+ CompilerInvocation::StringAllocator SA,
+ Option::OptionClass OptClass, unsigned TableIndex, T Value) {
+ denormalizeStringImpl(Args, Spelling, SA, OptClass, TableIndex, Twine(Value));
+}
+
static Optional<SimpleEnumValue>
findValueTableByName(const SimpleEnumValueTable &Table, StringRef Name) {
for (int I = 0, E = Table.Size; I != E; ++I)
@@ -240,12 +269,13 @@ static llvm::Optional<unsigned> normalizeSimpleEnum(OptSpecifier Opt,
static void denormalizeSimpleEnumImpl(SmallVectorImpl<const char *> &Args,
const char *Spelling,
CompilerInvocation::StringAllocator SA,
+ Option::OptionClass OptClass,
unsigned TableIndex, unsigned Value) {
assert(TableIndex < SimpleEnumValueTablesSize);
const SimpleEnumValueTable &Table = SimpleEnumValueTables[TableIndex];
if (auto MaybeEnumVal = findValueTableByValue(Table, Value)) {
- Args.push_back(Spelling);
- Args.push_back(MaybeEnumVal->Name);
+ denormalizeString(Args, Spelling, SA, OptClass, TableIndex,
+ MaybeEnumVal->Name);
} else {
llvm_unreachable("The simple enum value was not correctly defined in "
"the tablegen option description");
@@ -256,24 +286,12 @@ template <typename T>
static void denormalizeSimpleEnum(SmallVectorImpl<const char *> &Args,
const char *Spelling,
CompilerInvocation::StringAllocator SA,
+ Option::OptionClass OptClass,
unsigned TableIndex, T Value) {
- return denormalizeSimpleEnumImpl(Args, Spelling, SA, TableIndex,
+ return denormalizeSimpleEnumImpl(Args, Spelling, SA, OptClass, TableIndex,
static_cast<unsigned>(Value));
}
-static void denormalizeSimpleEnumJoined(SmallVectorImpl<const char *> &Args,
- const char *Spelling,
- CompilerInvocation::StringAllocator SA,
- unsigned TableIndex, unsigned Value) {
- assert(TableIndex < SimpleEnumValueTablesSize);
- const SimpleEnumValueTable &Table = SimpleEnumValueTables[TableIndex];
- if (auto MaybeEnumVal = findValueTableByValue(Table, Value))
- Args.push_back(SA(Twine(Spelling) + MaybeEnumVal->Name));
- else
- llvm_unreachable("The simple enum value was not correctly defined in "
- "the tablegen option description");
-}
-
static Optional<std::string> normalizeString(OptSpecifier Opt, int TableIndex,
const ArgList &Args,
DiagnosticsEngine &Diags) {
@@ -283,25 +301,6 @@ static Optional<std::string> normalizeString(OptSpecifier Opt, int TableIndex,
return std::string(Arg->getValue());
}
-static void denormalizeString(SmallVectorImpl<const char *> &Args,
- const char *Spelling,
- CompilerInvocation::StringAllocator SA, unsigned,
- Twine Value) {
- Args.push_back(Spelling);
- Args.push_back(SA(Value));
-}
-
-template <typename T,
- std::enable_if_t<!std::is_convertible<T, Twine>::value &&
- std::is_constructible<Twine, T>::value,
- bool> = false>
-static void denormalizeString(SmallVectorImpl<const char *> &Args,
- const char *Spelling,
- CompilerInvocation::StringAllocator SA,
- unsigned TableIndex, T Value) {
- denormalizeString(Args, Spelling, SA, TableIndex, Twine(Value));
-}
-
template <typename IntTy>
static Optional<IntTy> normalizeStringIntegral(OptSpecifier Opt, int,
const ArgList &Args,
@@ -317,6 +316,23 @@ static Optional<IntTy> normalizeStringIntegral(OptSpecifier Opt, int,
return Res;
}
+static Optional<std::vector<std::string>>
+normalizeStringVector(OptSpecifier Opt, int, const ArgList &Args,
+ DiagnosticsEngine &) {
+ return Args.getAllArgValues(Opt);
+}
+
+static void denormalizeStringVector(SmallVectorImpl<const char *> &Args,
+ const char *Spelling,
+ CompilerInvocation::StringAllocator SA,
+ Option::OptionClass OptClass,
+ unsigned TableIndex,
+ const std::vector<std::string> &Values) {
+ for (const std::string &Value : Values) {
+ denormalizeString(Args, Spelling, SA, OptClass, TableIndex, Value);
+ }
+}
+
static Optional<std::string> normalizeTriple(OptSpecifier Opt, int TableIndex,
const ArgList &Args,
DiagnosticsEngine &Diags) {
@@ -345,7 +361,8 @@ static T extractMaskValue(T KeyPath) {
}
static void FixupInvocation(CompilerInvocation &Invocation,
- DiagnosticsEngine &Diags) {
+ DiagnosticsEngine &Diags,
+ const InputArgList &Args) {
LangOptions &LangOpts = *Invocation.getLangOpts();
DiagnosticOptions &DiagOpts = Invocation.getDiagnosticOpts();
CodeGenOptions &CodeGenOpts = Invocation.getCodeGenOpts();
@@ -354,16 +371,52 @@ static void FixupInvocation(CompilerInvocation &Invocation,
CodeGenOpts.XRayInstrumentFunctions = LangOpts.XRayInstrument;
CodeGenOpts.XRayAlwaysEmitCustomEvents = LangOpts.XRayAlwaysEmitCustomEvents;
CodeGenOpts.XRayAlwaysEmitTypedEvents = LangOpts.XRayAlwaysEmitTypedEvents;
+ CodeGenOpts.DisableFree = FrontendOpts.DisableFree;
FrontendOpts.GenerateGlobalModuleIndex = FrontendOpts.UseGlobalModuleIndex;
+ LangOpts.ForceEmitVTables = CodeGenOpts.ForceEmitVTables;
+ LangOpts.SpeculativeLoadHardening = CodeGenOpts.SpeculativeLoadHardening;
+ LangOpts.CurrentModule = LangOpts.ModuleName;
+
llvm::sys::Process::UseANSIEscapeCodes(DiagOpts.UseANSIEscapeCodes);
llvm::Triple T(TargetOpts.Triple);
+ llvm::Triple::ArchType Arch = T.getArch();
if (LangOpts.getExceptionHandling() != llvm::ExceptionHandling::None &&
T.isWindowsMSVCEnvironment())
Diags.Report(diag::err_fe_invalid_exception_model)
<< static_cast<unsigned>(LangOpts.getExceptionHandling()) << T.str();
+
+ if (LangOpts.AppleKext && !LangOpts.CPlusPlus)
+ Diags.Report(diag::warn_c_kext);
+
+ if (LangOpts.NewAlignOverride &&
+ !llvm::isPowerOf2_32(LangOpts.NewAlignOverride)) {
+ Arg *A = Args.getLastArg(OPT_fnew_alignment_EQ);
+ Diags.Report(diag::err_fe_invalid_alignment)
+ << A->getAsString(Args) << A->getValue();
+ LangOpts.NewAlignOverride = 0;
+ }
+
+ if (Arg *A = Args.getLastArg(OPT_fdefault_calling_conv_EQ)) {
+ auto DefaultCC = LangOpts.getDefaultCallingConv();
+
+ bool emitError = (DefaultCC == LangOptions::DCC_FastCall ||
+ DefaultCC == LangOptions::DCC_StdCall) &&
+ Arch != llvm::Triple::x86;
+ emitError |= (DefaultCC == LangOptions::DCC_VectorCall ||
+ DefaultCC == LangOptions::DCC_RegCall) &&
+ !T.isX86();
+ if (emitError)
+ Diags.Report(diag::err_drv_argument_not_allowed_with)
+ << A->getSpelling() << T.getTriple();
+ }
+
+ if (!CodeGenOpts.ProfileRemappingFile.empty() && CodeGenOpts.LegacyPassManager)
+ Diags.Report(diag::err_drv_argument_only_allowed_with)
+ << Args.getLastArg(OPT_fprofile_remapping_file_EQ)->getAsString(Args)
+ << "-fno-legacy-pass-manager";
}
//===----------------------------------------------------------------------===//
@@ -806,28 +859,6 @@ static void parseXRayInstrumentationBundle(StringRef FlagName, StringRef Bundle,
}
}
-// Set the profile kind for fprofile-instrument.
-static void setPGOInstrumentor(CodeGenOptions &Opts, ArgList &Args,
- DiagnosticsEngine &Diags) {
- Arg *A = Args.getLastArg(OPT_fprofile_instrument_EQ);
- if (A == nullptr)
- return;
- StringRef S = A->getValue();
- unsigned I = llvm::StringSwitch<unsigned>(S)
- .Case("none", CodeGenOptions::ProfileNone)
- .Case("clang", CodeGenOptions::ProfileClangInstr)
- .Case("llvm", CodeGenOptions::ProfileIRInstr)
- .Case("csllvm", CodeGenOptions::ProfileCSIRInstr)
- .Default(~0U);
- if (I == ~0U) {
- Diags.Report(diag::err_drv_invalid_pgo_instrumentor) << A->getAsString(Args)
- << S;
- return;
- }
- auto Instrumentor = static_cast<CodeGenOptions::ProfileInstrKind>(I);
- Opts.setProfileInstr(Instrumentor);
-}
-
// Set the profile kind using fprofile-instrument-use-path.
static void setPGOUseInstrumentor(CodeGenOptions &Opts,
const Twine &ProfileName) {
@@ -889,87 +920,18 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
}
}
- if (Arg *A = Args.getLastArg(OPT_fveclib)) {
- StringRef Name = A->getValue();
- if (Name == "Accelerate")
- Opts.setVecLib(CodeGenOptions::Accelerate);
- else if (Name == "libmvec")
- Opts.setVecLib(CodeGenOptions::LIBMVEC);
- else if (Name == "MASSV")
- Opts.setVecLib(CodeGenOptions::MASSV);
- else if (Name == "SVML")
- Opts.setVecLib(CodeGenOptions::SVML);
- else if (Name == "none")
- Opts.setVecLib(CodeGenOptions::NoLibrary);
- else
- Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;
- }
-
- if (Arg *A = Args.getLastArg(OPT_debug_info_kind_EQ)) {
- unsigned Val =
- llvm::StringSwitch<unsigned>(A->getValue())
- .Case("line-tables-only", codegenoptions::DebugLineTablesOnly)
- .Case("line-directives-only", codegenoptions::DebugDirectivesOnly)
- .Case("constructor", codegenoptions::DebugInfoConstructor)
- .Case("limited", codegenoptions::LimitedDebugInfo)
- .Case("standalone", codegenoptions::FullDebugInfo)
- .Case("unused-types", codegenoptions::UnusedTypeInfo)
- .Default(~0U);
- if (Val == ~0U)
- Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args)
- << A->getValue();
- else
- Opts.setDebugInfo(static_cast<codegenoptions::DebugInfoKind>(Val));
- }
// If -fuse-ctor-homing is set and limited debug info is already on, then use
// constructor homing.
if (Args.getLastArg(OPT_fuse_ctor_homing))
if (Opts.getDebugInfo() == codegenoptions::LimitedDebugInfo)
Opts.setDebugInfo(codegenoptions::DebugInfoConstructor);
- if (Arg *A = Args.getLastArg(OPT_debugger_tuning_EQ)) {
- unsigned Val = llvm::StringSwitch<unsigned>(A->getValue())
- .Case("gdb", unsigned(llvm::DebuggerKind::GDB))
- .Case("lldb", unsigned(llvm::DebuggerKind::LLDB))
- .Case("sce", unsigned(llvm::DebuggerKind::SCE))
- .Default(~0U);
- if (Val == ~0U)
- Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args)
- << A->getValue();
- else
- Opts.setDebuggerTuning(static_cast<llvm::DebuggerKind>(Val));
- }
- Opts.DwarfVersion = getLastArgIntValue(Args, OPT_dwarf_version_EQ, 0, Diags);
- Opts.DebugColumnInfo = !Args.hasArg(OPT_gno_column_info);
- Opts.EmitCodeView = Args.hasArg(OPT_gcodeview);
- Opts.MacroDebugInfo = Args.hasArg(OPT_debug_info_macro);
- Opts.WholeProgramVTables = Args.hasArg(OPT_fwhole_program_vtables);
- Opts.VirtualFunctionElimination =
- Args.hasArg(OPT_fvirtual_function_elimination);
- Opts.LTOVisibilityPublicStd = Args.hasArg(OPT_flto_visibility_public_std);
- Opts.SplitDwarfFile = std::string(Args.getLastArgValue(OPT_split_dwarf_file));
- Opts.SplitDwarfOutput =
- std::string(Args.getLastArgValue(OPT_split_dwarf_output));
- Opts.SplitDwarfInlining = !Args.hasArg(OPT_fno_split_dwarf_inlining);
- Opts.DebugTypeExtRefs = Args.hasArg(OPT_dwarf_ext_refs);
- Opts.DebugExplicitImport = Args.hasArg(OPT_dwarf_explicit_import);
- Opts.DebugFwdTemplateParams = Args.hasArg(OPT_debug_forward_template_params);
- Opts.EmbedSource = Args.hasArg(OPT_gembed_source);
- Opts.ForceDwarfFrameSection = Args.hasArg(OPT_fforce_dwarf_frame);
-
for (const auto &Arg : Args.getAllArgValues(OPT_fdebug_prefix_map_EQ)) {
auto Split = StringRef(Arg).split('=');
Opts.DebugPrefixMap.insert(
{std::string(Split.first), std::string(Split.second)});
}
- if (const Arg *A =
- Args.getLastArg(OPT_emit_llvm_uselists, OPT_no_emit_llvm_uselists))
- Opts.EmitLLVMUseLists = A->getOption().getID() == OPT_emit_llvm_uselists;
-
- Opts.DisableLLVMPasses = Args.hasArg(OPT_disable_llvm_passes);
- Opts.DisableLifetimeMarkers = Args.hasArg(OPT_disable_lifetimemarkers);
-
const llvm::Triple::ArchType DebugEntryValueArchs[] = {
llvm::Triple::x86, llvm::Triple::x86_64, llvm::Triple::aarch64,
llvm::Triple::arm, llvm::Triple::armeb, llvm::Triple::mips,
@@ -980,29 +942,8 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
llvm::is_contained(DebugEntryValueArchs, T.getArch()))
Opts.EmitCallSiteInfo = true;
- Opts.ValueTrackingVariableLocations =
- Args.hasArg(OPT_fexperimental_debug_variable_locations);
-
- Opts.DisableO0ImplyOptNone = Args.hasArg(OPT_disable_O0_optnone);
- Opts.DisableRedZone = Args.hasArg(OPT_disable_red_zone);
- Opts.IndirectTlsSegRefs = Args.hasArg(OPT_mno_tls_direct_seg_refs);
- Opts.ForbidGuardVariables = Args.hasArg(OPT_fforbid_guard_variables);
- Opts.UseRegisterSizedBitfieldAccess = Args.hasArg(
- OPT_fuse_register_sized_bitfield_access);
- Opts.RelaxedAliasing = Args.hasArg(OPT_relaxed_aliasing);
- Opts.StructPathTBAA = !Args.hasArg(OPT_no_struct_path_tbaa);
Opts.NewStructPathTBAA = !Args.hasArg(OPT_no_struct_path_tbaa) &&
Args.hasArg(OPT_new_struct_path_tbaa);
- Opts.FineGrainedBitfieldAccesses =
- Args.hasFlag(OPT_ffine_grained_bitfield_accesses,
- OPT_fno_fine_grained_bitfield_accesses, false);
- Opts.DwarfDebugFlags =
- std::string(Args.getLastArgValue(OPT_dwarf_debug_flags));
- Opts.RecordCommandLine =
- std::string(Args.getLastArgValue(OPT_record_command_line));
- Opts.MergeAllConstants = Args.hasArg(OPT_fmerge_all_constants);
- Opts.NoCommon = !Args.hasArg(OPT_fcommon);
- Opts.NoImplicitFloat = Args.hasArg(OPT_no_implicit_float);
Opts.OptimizeSize = getOptimizationLevelSize(Args);
Opts.SimplifyLibCalls = !(Args.hasArg(OPT_fno_builtin) ||
Args.hasArg(OPT_ffreestanding));
@@ -1011,73 +952,18 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
Opts.UnrollLoops =
Args.hasFlag(OPT_funroll_loops, OPT_fno_unroll_loops,
(Opts.OptimizationLevel > 1));
- Opts.RerollLoops = Args.hasArg(OPT_freroll_loops);
-
- Opts.DisableIntegratedAS = Args.hasArg(OPT_fno_integrated_as);
- Opts.SampleProfileFile =
- std::string(Args.getLastArgValue(OPT_fprofile_sample_use_EQ));
- Opts.DebugInfoForProfiling = Args.hasFlag(
- OPT_fdebug_info_for_profiling, OPT_fno_debug_info_for_profiling, false);
- Opts.PseudoProbeForProfiling =
- Args.hasFlag(OPT_fpseudo_probe_for_profiling,
- OPT_fno_pseudo_probe_for_profiling, false);
+
Opts.DebugNameTable = static_cast<unsigned>(
Args.hasArg(OPT_ggnu_pubnames)
? llvm::DICompileUnit::DebugNameTableKind::GNU
: Args.hasArg(OPT_gpubnames)
? llvm::DICompileUnit::DebugNameTableKind::Default
: llvm::DICompileUnit::DebugNameTableKind::None);
- Opts.DebugRangesBaseAddress = Args.hasArg(OPT_fdebug_ranges_base_address);
-
- setPGOInstrumentor(Opts, Args, Diags);
- Opts.AtomicProfileUpdate = Args.hasArg(OPT_fprofile_update_EQ);
- Opts.InstrProfileOutput =
- std::string(Args.getLastArgValue(OPT_fprofile_instrument_path_EQ));
- Opts.ProfileInstrumentUsePath =
- std::string(Args.getLastArgValue(OPT_fprofile_instrument_use_path_EQ));
+
if (!Opts.ProfileInstrumentUsePath.empty())
setPGOUseInstrumentor(Opts, Opts.ProfileInstrumentUsePath);
- Opts.ProfileRemappingFile =
- std::string(Args.getLastArgValue(OPT_fprofile_remapping_file_EQ));
- if (!Opts.ProfileRemappingFile.empty() && Opts.LegacyPassManager) {
- Diags.Report(diag::err_drv_argument_only_allowed_with)
- << Args.getLastArg(OPT_fprofile_remapping_file_EQ)->getAsString(Args)
- << "-fno-legacy-pass-manager";
- }
- Opts.CoverageMapping =
- Args.hasFlag(OPT_fcoverage_mapping, OPT_fno_coverage_mapping, false);
- Opts.DumpCoverageMapping = Args.hasArg(OPT_dump_coverage_mapping);
- Opts.AsmVerbose = !Args.hasArg(OPT_fno_verbose_asm);
- Opts.PreserveAsmComments = !Args.hasArg(OPT_fno_preserve_as_comments);
- Opts.AssumeSaneOperatorNew = !Args.hasArg(OPT_fno_assume_sane_operator_new);
- Opts.ObjCAutoRefCountExceptions = Args.hasArg(OPT_fobjc_arc_exceptions);
- Opts.CXAAtExit = !Args.hasArg(OPT_fno_use_cxa_atexit);
- Opts.RegisterGlobalDtorsWithAtExit =
- Args.hasArg(OPT_fregister_global_dtors_with_atexit);
- Opts.CXXCtorDtorAliases = Args.hasArg(OPT_mconstructor_aliases);
Opts.CodeModel = TargetOpts.CodeModel;
- Opts.DebugPass = std::string(Args.getLastArgValue(OPT_mdebug_pass));
-
- // Handle -mframe-pointer option.
- if (Arg *A = Args.getLastArg(OPT_mframe_pointer_EQ)) {
- CodeGenOptions::FramePointerKind FP;
- StringRef Name = A->getValue();
- bool ValidFP = true;
- if (Name == "none")
- FP = CodeGenOptions::FramePointerKind::None;
- else if (Name == "non-leaf")
- FP = CodeGenOptions::FramePointerKind::NonLeaf;
- else if (Name == "all")
- FP = CodeGenOptions::FramePointerKind::All;
- else {
- Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;
- Success = false;
- ValidFP = false;
- }
- if (ValidFP)
- Opts.setFramePointer(FP);
- }
if (const Arg *A = Args.getLastArg(OPT_ftime_report, OPT_ftime_report_EQ)) {
Opts.TimePasses = true;
@@ -1099,69 +985,13 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
}
}
- Opts.DisableFree = Args.hasArg(OPT_disable_free);
- Opts.DiscardValueNames = Args.hasArg(OPT_discard_value_names);
- Opts.DisableTailCalls = Args.hasArg(OPT_mdisable_tail_calls);
- Opts.NoEscapingBlockTailCalls =
- Args.hasArg(OPT_fno_escaping_block_tail_calls);
- Opts.FloatABI = std::string(Args.getLastArgValue(OPT_mfloat_abi));
- Opts.LimitFloatPrecision =
- std::string(Args.getLastArgValue(OPT_mlimit_float_precision));
Opts.Reciprocals = Args.getAllArgValues(OPT_mrecip_EQ);
- Opts.StrictFloatCastOverflow =
- !Args.hasArg(OPT_fno_strict_float_cast_overflow);
-
- Opts.NoZeroInitializedInBSS = Args.hasArg(OPT_fno_zero_initialized_in_bss);
- Opts.NumRegisterParameters = getLastArgIntValue(Args, OPT_mregparm, 0, Diags);
- Opts.NoExecStack = Args.hasArg(OPT_mno_exec_stack);
- Opts.SmallDataLimit =
- getLastArgIntValue(Args, OPT_msmall_data_limit, 0, Diags);
- Opts.FatalWarnings = Args.hasArg(OPT_massembler_fatal_warnings);
- Opts.NoWarn = Args.hasArg(OPT_massembler_no_warn);
- Opts.EnableSegmentedStacks = Args.hasArg(OPT_split_stacks);
- Opts.RelaxAll = Args.hasArg(OPT_mrelax_all);
- Opts.IncrementalLinkerCompatible =
- Args.hasArg(OPT_mincremental_linker_compatible);
- Opts.PIECopyRelocations =
- Args.hasArg(OPT_mpie_copy_relocations);
- Opts.NoPLT = Args.hasArg(OPT_fno_plt);
- Opts.SaveTempLabels = Args.hasArg(OPT_msave_temp_labels);
- Opts.NoDwarfDirectoryAsm = Args.hasArg(OPT_fno_dwarf_directory_asm);
- Opts.SoftFloat = Args.hasArg(OPT_msoft_float);
- Opts.StrictEnums = Args.hasArg(OPT_fstrict_enums);
- Opts.StrictReturn = !Args.hasArg(OPT_fno_strict_return);
- Opts.StrictVTablePointers = Args.hasArg(OPT_fstrict_vtable_pointers);
- Opts.ForceEmitVTables = Args.hasArg(OPT_fforce_emit_vtables);
- Opts.UnwindTables = Args.hasArg(OPT_munwind_tables);
- Opts.TrapFuncName = std::string(Args.getLastArgValue(OPT_ftrap_function_EQ));
- Opts.UseInitArray = !Args.hasArg(OPT_fno_use_init_array);
-
- Opts.BBSections =
- std::string(Args.getLastArgValue(OPT_fbasic_block_sections_EQ, "none"));
// Basic Block Sections implies Function Sections.
Opts.FunctionSections =
Args.hasArg(OPT_ffunction_sections) ||
(Opts.BBSections != "none" && Opts.BBSections != "labels");
- Opts.DataSections = Args.hasArg(OPT_fdata_sections);
- Opts.StackSizeSection = Args.hasArg(OPT_fstack_size_section);
- Opts.UniqueSectionNames = !Args.hasArg(OPT_fno_unique_section_names);
- Opts.UniqueBasicBlockSectionNames =
- Args.hasArg(OPT_funique_basic_block_section_names);
- Opts.UniqueInternalLinkageNames =
- Args.hasArg(OPT_funique_internal_linkage_names);
-
- Opts.SplitMachineFunctions = Args.hasArg(OPT_fsplit_machine_functions);
-
- Opts.MergeFunctions = Args.hasArg(OPT_fmerge_functions);
-
- Opts.NoUseJumpTables = Args.hasArg(OPT_fno_jump_tables);
-
- Opts.NullPointerIsValid = Args.hasArg(OPT_fno_delete_null_pointer_checks);
-
- Opts.ProfileSampleAccurate = Args.hasArg(OPT_fprofile_sample_accurate);
-
Opts.PrepareForLTO = Args.hasArg(OPT_flto, OPT_flto_EQ);
Opts.PrepareForThinLTO = false;
if (Arg *A = Args.getLastArg(OPT_flto_EQ)) {
@@ -1171,8 +1001,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
else if (S != "full")
Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << S;
}
- Opts.LTOUnit = Args.hasFlag(OPT_flto_unit, OPT_fno_lto_unit, false);
- Opts.EnableSplitLTOUnit = Args.hasArg(OPT_fsplit_lto_unit);
if (Arg *A = Args.getLastArg(OPT_fthinlto_index_EQ)) {
if (IK.getLanguage() != Language::LLVM_IR)
Diags.Report(diag::err_drv_argument_only_allowed_with)
@@ -1186,9 +1014,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
.Case("obj", FrontendOpts.OutputFile)
.Default(llvm::sys::path::filename(FrontendOpts.OutputFile).str());
- Opts.ThinLinkBitcodeFile =
- std::string(Args.getLastArgValue(OPT_fthin_link_bitcode_EQ));
-
// The memory profile runtime appends the pid to make this name more unique.
const char *MemProfileBasename = "memprof.profraw";
if (Args.hasArg(OPT_fmemory_profile_EQ)) {
@@ -1199,22 +1024,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
} else if (Args.hasArg(OPT_fmemory_profile))
Opts.MemoryProfileOutput = MemProfileBasename;
- Opts.MSVolatile = Args.hasArg(OPT_fms_volatile);
-
- Opts.VectorizeLoop = Args.hasArg(OPT_vectorize_loops);
- Opts.VectorizeSLP = Args.hasArg(OPT_vectorize_slp);
-
- Opts.PreferVectorWidth =
- std::string(Args.getLastArgValue(OPT_mprefer_vector_width_EQ));
-
- Opts.MainFileName = std::string(Args.getLastArgValue(OPT_main_file_name));
- Opts.VerifyModule = !Args.hasArg(OPT_disable_llvm_verifier);
-
- Opts.ControlFlowGuardNoChecks = Args.hasArg(OPT_cfguard_no_checks);
- Opts.ControlFlowGuard = Args.hasArg(OPT_cfguard);
-
- Opts.EmitGcovNotes = Args.hasArg(OPT_ftest_coverage);
- Opts.EmitGcovArcs = Args.hasArg(OPT_fprofile_arcs);
if (Opts.EmitGcovArcs || Opts.EmitGcovNotes) {
Opts.CoverageDataFile =
std::string(Args.getLastArgValue(OPT_coverage_data_file));
@@ -1235,22 +1044,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
}
}
}
- // Handle -fembed-bitcode option.
- if (Arg *A = Args.getLastArg(OPT_fembed_bitcode_EQ)) {
- StringRef Name = A->getValue();
- unsigned Model = llvm::StringSwitch<unsigned>(Name)
- .Case("off", CodeGenOptions::Embed_Off)
- .Case("all", CodeGenOptions::Embed_All)
- .Case("bitcode", CodeGenOptions::Embed_Bitcode)
- .Case("marker", CodeGenOptions::Embed_Marker)
- .Default(~0U);
- if (Model == ~0U) {
- Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;
- Success = false;
- } else
- Opts.setEmbedBitcode(
- static_cast<CodeGenOptions::EmbedBitcodeKind>(Model));
- }
// FIXME: For backend options that are not yet recorded as function
// attributes in the IR, keep track of them so we can embed them in a
// separate data section and use them when building the bitcode.
@@ -1272,15 +1065,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
}
}
- Opts.PreserveVec3Type = Args.hasArg(OPT_fpreserve_vec3_type);
- Opts.InstrumentFunctions = Args.hasArg(OPT_finstrument_functions);
- Opts.InstrumentFunctionsAfterInlining =
- Args.hasArg(OPT_finstrument_functions_after_inlining);
- Opts.InstrumentFunctionEntryBare =
- Args.hasArg(OPT_finstrument_function_entry_bare);
-
- Opts.XRayInstructionThreshold =
- getLastArgIntValue(Args, OPT_fxray_instruction_threshold_EQ, 200, Diags);
Opts.XRayTotalFunctionGroups =
getLastArgIntValue(Args, OPT_fxray_function_groups, 1, Diags);
Opts.XRaySelectedFunctionGroup =
@@ -1295,16 +1079,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
parseXRayInstrumentationBundle("-fxray-instrumentation-bundle=", A, Args,
Diags, Opts.XRayInstrumentationBundle);
- Opts.PatchableFunctionEntryCount =
- getLastArgIntValue(Args, OPT_fpatchable_function_entry_EQ, 0, Diags);
- Opts.PatchableFunctionEntryOffset = getLastArgIntValue(
- Args, OPT_fpatchable_function_entry_offset_EQ, 0, Diags);
- Opts.InstrumentForProfiling = Args.hasArg(OPT_pg);
- Opts.CallFEntry = Args.hasArg(OPT_mfentry);
- Opts.MNopMCount = Args.hasArg(OPT_mnop_mcount);
- Opts.RecordMCount = Args.hasArg(OPT_mrecord_mcount);
- Opts.PackedStack = Args.hasArg(OPT_mpacked_stack);
-
if (const Arg *A = Args.getLastArg(OPT_fcf_protection_EQ)) {
StringRef Name = A->getValue();
if (Name == "full") {
@@ -1329,9 +1103,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
Opts.setCompressDebugSections(DCT);
}
- Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations);
- Opts.DebugCompilationDir =
- std::string(Args.getLastArgValue(OPT_fdebug_compilation_dir));
for (auto *A :
Args.filtered(OPT_mlink_bitcode_file, OPT_mlink_builtin_bitcode)) {
CodeGenOptions::BitcodeFileToLink F;
@@ -1345,63 +1116,10 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
}
Opts.LinkBitcodeFiles.push_back(F);
}
- Opts.SanitizeCoverageType =
- getLastArgIntValue(Args, OPT_fsanitize_coverage_type, 0, Diags);
- Opts.SanitizeCoverageIndirectCalls =
- Args.hasArg(OPT_fsanitize_coverage_indirect_calls);
- Opts.SanitizeCoverageTraceBB = Args.hasArg(OPT_fsanitize_coverage_trace_bb);
- Opts.SanitizeCoverageTraceCmp = Args.hasArg(OPT_fsanitize_coverage_trace_cmp);
- Opts.SanitizeCoverageTraceDiv = Args.hasArg(OPT_fsanitize_coverage_trace_div);
- Opts.SanitizeCoverageTraceGep = Args.hasArg(OPT_fsanitize_coverage_trace_gep);
- Opts.SanitizeCoverage8bitCounters =
- Args.hasArg(OPT_fsanitize_coverage_8bit_counters);
- Opts.SanitizeCoverageTracePC = Args.hasArg(OPT_fsanitize_coverage_trace_pc);
- Opts.SanitizeCoverageTracePCGuard =
- Args.hasArg(OPT_fsanitize_coverage_trace_pc_guard);
- Opts.SanitizeCoverageNoPrune = Args.hasArg(OPT_fsanitize_coverage_no_prune);
- Opts.SanitizeCoverageInline8bitCounters =
- Args.hasArg(OPT_fsanitize_coverage_inline_8bit_counters);
- Opts.SanitizeCoverageInlineBoolFlag =
- Args.hasArg(OPT_fsanitize_coverage_inline_bool_flag);
- Opts.SanitizeCoveragePCTable = Args.hasArg(OPT_fsanitize_coverage_pc_table);
- Opts.SanitizeCoverageStackDepth =
- Args.hasArg(OPT_fsanitize_coverage_stack_depth);
Opts.SanitizeCoverageAllowlistFiles =
Args.getAllArgValues(OPT_fsanitize_coverage_allowlist);
Opts.SanitizeCoverageBlocklistFiles =
Args.getAllArgValues(OPT_fsanitize_coverage_blocklist);
- Opts.SanitizeMemoryTrackOrigins =
- getLastArgIntValue(Args, OPT_fsanitize_memory_track_origins_EQ, 0, Diags);
- Opts.SanitizeMemoryUseAfterDtor =
- Args.hasFlag(OPT_fsanitize_memory_use_after_dtor,
- OPT_fno_sanitize_memory_use_after_dtor,
- false);
- Opts.SanitizeMinimalRuntime = Args.hasArg(OPT_fsanitize_minimal_runtime);
- Opts.SanitizeCfiCrossDso = Args.hasArg(OPT_fsanitize_cfi_cross_dso);
- Opts.SanitizeCfiICallGeneralizePointers =
- Args.hasArg(OPT_fsanitize_cfi_icall_generalize_pointers);
- Opts.SanitizeCfiCanonicalJumpTables =
- Args.hasArg(OPT_fsanitize_cfi_canonical_jump_tables);
- Opts.SanitizeStats = Args.hasArg(OPT_fsanitize_stats);
- if (Arg *A = Args.getLastArg(
- OPT_fsanitize_address_poison_custom_array_cookie,
- OPT_fno_sanitize_address_poison_custom_array_cookie)) {
- Opts.SanitizeAddressPoisonCustomArrayCookie =
- A->getOption().getID() ==
- OPT_fsanitize_address_poison_custom_array_cookie;
- }
- if (Arg *A = Args.getLastArg(OPT_fsanitize_address_use_after_scope,
- OPT_fno_sanitize_address_use_after_scope)) {
- Opts.SanitizeAddressUseAfterScope =
- A->getOption().getID() == OPT_fsanitize_address_use_after_scope;
- }
- Opts.SanitizeAddressGlobalsDeadStripping =
- Args.hasArg(OPT_fsanitize_address_globals_dead_stripping);
- if (Arg *A = Args.getLastArg(OPT_fsanitize_address_use_odr_indicator,
- OPT_fno_sanitize_address_use_odr_indicator)) {
- Opts.SanitizeAddressUseOdrIndicator =
- A->getOption().getID() == OPT_fsanitize_address_use_odr_indicator;
- }
Opts.SSPBufferSize =
getLastArgIntValue(Args, OPT_stack_protector_buffer_size, 8, Diags);
@@ -1419,44 +1137,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
std::string(Args.getLastArgValue(OPT_mstack_protector_guard_reg_EQ,
"none"));
- Opts.StackRealignment = Args.hasArg(OPT_mstackrealign);
- if (Arg *A = Args.getLastArg(OPT_mstack_alignment)) {
- StringRef Val = A->getValue();
- unsigned StackAlignment = Opts.StackAlignment;
- Val.getAsInteger(10, StackAlignment);
- Opts.StackAlignment = StackAlignment;
- }
-
- if (Arg *A = Args.getLastArg(OPT_mstack_probe_size)) {
- StringRef Val = A->getValue();
- unsigned StackProbeSize = Opts.StackProbeSize;
- Val.getAsInteger(0, StackProbeSize);
- Opts.StackProbeSize = StackProbeSize;
- }
-
- Opts.NoStackArgProbe = Args.hasArg(OPT_mno_stack_arg_probe);
-
- Opts.StackClashProtector = Args.hasArg(OPT_fstack_clash_protection);
-
- if (Arg *A = Args.getLastArg(OPT_fobjc_dispatch_method_EQ)) {
- StringRef Name = A->getValue();
- unsigned Method = llvm::StringSwitch<unsigned>(Name)
- .Case("legacy", CodeGenOptions::Legacy)
- .Case("non-legacy", CodeGenOptions::NonLegacy)
- .Case("mixed", CodeGenOptions::Mixed)
- .Default(~0U);
- if (Method == ~0U) {
- Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;
- Success = false;
- } else {
- Opts.setObjCDispatchMethod(
- static_cast<CodeGenOptions::ObjCDispatchMethodKind>(Method));
- }
- }
-
-
- if (Args.hasArg(OPT_fno_objc_convert_messages_to_runtime_calls))
- Opts.ObjCConvertMessagesToRuntimeCalls = 0;
if (Args.getLastArg(OPT_femulated_tls) ||
Args.getLastArg(OPT_fno_emulated_tls)) {
@@ -1465,24 +1145,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
Args.hasFlag(OPT_femulated_tls, OPT_fno_emulated_tls, false);
}
- if (Arg *A = Args.getLastArg(OPT_ftlsmodel_EQ)) {
- StringRef Name = A->getValue();
- unsigned Model = llvm::StringSwitch<unsigned>(Name)
- .Case("global-dynamic", CodeGenOptions::GeneralDynamicTLSModel)
- .Case("local-dynamic", CodeGenOptions::LocalDynamicTLSModel)
- .Case("initial-exec", CodeGenOptions::InitialExecTLSModel)
- .Case("local-exec", CodeGenOptions::LocalExecTLSModel)
- .Default(~0U);
- if (Model == ~0U) {
- Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;
- Success = false;
- } else {
- Opts.setDefaultTLSModel(static_cast<CodeGenOptions::TLSModel>(Model));
- }
- }
-
- Opts.TLSSize = getLastArgIntValue(Args, OPT_mtls_size_EQ, 0, Diags);
-
if (Arg *A = Args.getLastArg(OPT_fdenormal_fp_math_EQ)) {
StringRef Val = A->getValue();
Opts.FPDenormalMode = llvm::parseDenormalFPAttribute(Val);
@@ -1543,7 +1205,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
Opts.LinkerOptions = Args.getAllArgValues(OPT_linker_option);
bool NeedLocTracking = false;
- Opts.OptRecordFile = std::string(Args.getLastArgValue(OPT_opt_record_file));
if (!Opts.OptRecordFile.empty())
NeedLocTracking = true;
@@ -1575,8 +1236,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
NeedLocTracking = true;
}
- Opts.DiagnosticsWithHotness =
- Args.hasArg(options::OPT_fdiagnostics_show_hotness);
bool UsingSampleProfile = !Opts.SampleProfileFile.empty();
bool UsingProfile = UsingSampleProfile ||
(Opts.getProfileUse() != CodeGenOptions::ProfileNone);
@@ -1628,35 +1287,12 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
Args.getAllArgValues(OPT_fsanitize_trap_EQ), Diags,
Opts.SanitizeTrap);
- Opts.CudaGpuBinaryFileName =
- std::string(Args.getLastArgValue(OPT_fcuda_include_gpubinary));
-
- Opts.Backchain = Args.hasArg(OPT_mbackchain);
-
- Opts.EmitCheckPathComponentsToStrip = getLastArgIntValue(
- Args, OPT_fsanitize_undefined_strip_path_components_EQ, 0, Diags);
-
Opts.EmitVersionIdentMetadata = Args.hasFlag(OPT_Qy, OPT_Qn, true);
- Opts.Addrsig = Args.hasArg(OPT_faddrsig);
-
- Opts.KeepStaticConsts = Args.hasArg(OPT_fkeep_static_consts);
-
- Opts.SpeculativeLoadHardening = Args.hasArg(OPT_mspeculative_load_hardening);
-
Opts.DefaultFunctionAttrs = Args.getAllArgValues(OPT_default_function_attr);
Opts.PassPlugins = Args.getAllArgValues(OPT_fpass_plugin_EQ);
- Opts.SymbolPartition =
- std::string(Args.getLastArgValue(OPT_fsymbol_partition_EQ));
-
- Opts.ForceAAPCSBitfieldLoad = Args.hasArg(OPT_ForceAAPCSBitfieldLoad);
- Opts.AAPCSBitfieldWidth =
- Args.hasFlag(OPT_AAPCSBitfieldWidth, OPT_ForceNoAAPCSBitfieldWidth, true);
-
- Opts.PassByValueIsNoAlias = Args.hasArg(OPT_fpass_by_value_is_noalias);
-
return Success;
}
@@ -2089,7 +1725,6 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
Opts.LLVMArgs = Args.getAllArgValues(OPT_mllvm);
Opts.ASTDumpDecls = Args.hasArg(OPT_ast_dump, OPT_ast_dump_EQ);
Opts.ASTDumpAll = Args.hasArg(OPT_ast_dump_all, OPT_ast_dump_all_EQ);
- Opts.ModuleMapFiles = Args.getAllArgValues(OPT_fmodule_map_file);
// Only the -fmodule-file=<file> form.
for (const auto *A : Args.filtered(OPT_fmodule_file)) {
StringRef Val = A->getValue();
@@ -2618,9 +2253,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
}
}
- if (Args.hasArg(OPT_fno_dllexport_inlines))
- Opts.DllExportInlines = false;
-
if (const Arg *A = Args.getLastArg(OPT_fcf_protection_EQ)) {
StringRef Name = A->getValue();
if (Name == "full" || Name == "branch") {
@@ -2649,7 +2281,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
LangStd = OpenCLLangStd;
}
- Opts.SYCL = Args.hasArg(options::OPT_fsycl);
Opts.SYCLIsDevice = Opts.SYCL && Args.hasArg(options::OPT_fsycl_is_device);
if (Opts.SYCL) {
// -sycl-std applies to any SYCL source, not only those containing kernels,
@@ -2669,9 +2300,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
}
}
- Opts.IncludeDefaultHeader = Args.hasArg(OPT_finclude_default_header);
- Opts.DeclareOpenCLBuiltins = Args.hasArg(OPT_fdeclare_opencl_builtins);
-
llvm::Triple T(TargetOpts.Triple);
CompilerInvocation::setLangDefaults(Opts, IK, T, PPOpts, LangStd);
@@ -2698,25 +2326,9 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
if (Args.hasArg(OPT_fno_operator_names))
Opts.CXXOperatorNames = 0;
- if (Args.hasArg(OPT_fcuda_is_device))
- Opts.CUDAIsDevice = 1;
-
- if (Args.hasArg(OPT_fcuda_allow_variadic_functions))
- Opts.CUDAAllowVariadicFunctions = 1;
-
- if (Args.hasArg(OPT_fno_cuda_host_device_constexpr))
- Opts.CUDAHostDeviceConstexpr = 0;
-
- if (Args.hasArg(OPT_fgpu_exclude_wrong_side_overloads))
- Opts.GPUExcludeWrongSideOverloads = 1;
-
- if (Args.hasArg(OPT_fgpu_defer_diag))
- Opts.GPUDeferDiag = 1;
-
if (Opts.CUDAIsDevice && Args.hasArg(OPT_fcuda_approx_transcendentals))
Opts.CUDADeviceApproxTranscendentals = 1;
- Opts.GPURelocatableDeviceCode = Args.hasArg(OPT_fgpu_rdc);
if (Args.hasArg(OPT_fgpu_allow_device_init)) {
if (Opts.HIP)
Opts.GPUAllowDeviceInit = 1;
@@ -2724,7 +2336,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Diags.Report(diag::warn_ignored_hip_only_option)
<< Args.getLastArg(OPT_fgpu_allow_device_init)->getAsString(Args);
}
- Opts.HIPUseNewLaunchAPI = Args.hasArg(OPT_fhip_new_launch_api);
if (Opts.HIP)
Opts.GPUMaxThreadsPerBlock = getLastArgIntValue(
Args, OPT_gpu_max_threads_per_block_EQ, Opts.GPUMaxThreadsPerBlock);
@@ -2774,9 +2385,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Opts.ObjCWeak = Opts.ObjCWeakRuntime;
}
- if (Args.hasArg(OPT_fno_objc_infer_related_result_type))
- Opts.ObjCInferRelatedResultType = 0;
-
if (Args.hasArg(OPT_fobjc_subscripting_legacy_runtime))
Opts.ObjCSubscriptingLegacyRuntime =
(Opts.ObjCRuntime.getKind() == ObjCRuntime::FragileMacOSX);
@@ -2805,42 +2413,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Opts.GNUInline = 1;
}
- if (Args.hasArg(OPT_fapple_kext)) {
- if (!Opts.CPlusPlus)
- Diags.Report(diag::warn_c_kext);
- else
- Opts.AppleKext = 1;
- }
-
- if (Args.hasArg(OPT_print_ivar_layout))
- Opts.ObjCGCBitmapPrint = 1;
-
- if (Args.hasArg(OPT_fno_constant_cfstrings))
- Opts.NoConstantCFStrings = 1;
- if (const auto *A = Args.getLastArg(OPT_fcf_runtime_abi_EQ))
- Opts.CFRuntime =
- llvm::StringSwitch<LangOptions::CoreFoundationABI>(A->getValue())
- .Cases("unspecified", "standalone", "objc",
- LangOptions::CoreFoundationABI::ObjectiveC)
- .Cases("swift", "swift-5.0",
- LangOptions::CoreFoundationABI::Swift5_0)
- .Case("swift-4.2", LangOptions::CoreFoundationABI::Swift4_2)
- .Case("swift-4.1", LangOptions::CoreFoundationABI::Swift4_1)
- .Default(LangOptions::CoreFoundationABI::ObjectiveC);
-
- if (Args.hasArg(OPT_fzvector))
- Opts.ZVector = 1;
-
- if (Args.hasArg(OPT_pthread))
- Opts.POSIXThreads = 1;
-
- // The value-visibility mode defaults to "default".
- if (Arg *visOpt = Args.getLastArg(OPT_fvisibility)) {
- Opts.setValueVisibilityMode(parseVisibility(visOpt, Args, Diags));
- } else {
- Opts.setValueVisibilityMode(DefaultVisibility);
- }
-
// The type-visibility mode defaults to the value-visibility mode.
if (Arg *typeVisOpt = Args.getLastArg(OPT_ftype_visibility)) {
Opts.setTypeVisibilityMode(parseVisibility(typeVisOpt, Args, Diags));
@@ -2848,18 +2420,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Opts.setTypeVisibilityMode(Opts.getValueVisibilityMode());
}
- if (Args.hasArg(OPT_fvisibility_inlines_hidden))
- Opts.InlineVisibilityHidden = 1;
-
- if (Args.hasArg(OPT_fvisibility_inlines_hidden_static_local_var))
- Opts.VisibilityInlinesHiddenStaticLocalVar = 1;
-
- if (Args.hasArg(OPT_fvisibility_global_new_delete_hidden))
- Opts.GlobalAllocationFunctionVisibilityHidden = 1;
-
- if (Args.hasArg(OPT_fapply_global_visibility_to_externs))
- Opts.SetVisibilityForExternDecls = 1;
-
if (Args.hasArg(OPT_fvisibility_from_dllstorageclass)) {
Opts.VisibilityFromDLLStorageClass = 1;
@@ -2901,7 +2461,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
else if (Args.hasArg(OPT_fwrapv))
Opts.setSignedOverflowBehavior(LangOptions::SOB_Defined);
- Opts.MSVCCompat = Args.hasArg(OPT_fms_compatibility);
Opts.MicrosoftExt = Opts.MSVCCompat || Args.hasArg(OPT_fms_extensions);
Opts.AsmBlocks = Args.hasArg(OPT_fasm_blocks) || Opts.MicrosoftExt;
Opts.MSCompatibilityVersion = 0;
@@ -2927,31 +2486,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Opts.DollarIdents = Args.hasFlag(OPT_fdollars_in_identifiers,
OPT_fno_dollars_in_identifiers,
Opts.DollarIdents);
- Opts.PascalStrings = Args.hasArg(OPT_fpascal_strings);
- Opts.setVtorDispMode(
- MSVtorDispMode(getLastArgIntValue(Args, OPT_vtordisp_mode_EQ, 1, Diags)));
- Opts.Borland = Args.hasArg(OPT_fborland_extensions);
- Opts.WritableStrings = Args.hasArg(OPT_fwritable_strings);
- Opts.ConstStrings = Args.hasFlag(OPT_fconst_strings, OPT_fno_const_strings,
- Opts.ConstStrings);
- if (Arg *A = Args.getLastArg(OPT_flax_vector_conversions_EQ)) {
- using LaxKind = LangOptions::LaxVectorConversionKind;
- if (auto Kind = llvm::StringSwitch<Optional<LaxKind>>(A->getValue())
- .Case("none", LaxKind::None)
- .Case("integer", LaxKind::Integer)
- .Case("all", LaxKind::All)
- .Default(llvm::None))
- Opts.setLaxVectorConversions(*Kind);
- else
- Diags.Report(diag::err_drv_invalid_value)
- << A->getAsString(Args) << A->getValue();
- }
- if (Args.hasArg(OPT_fno_threadsafe_statics))
- Opts.ThreadsafeStatics = 0;
- Opts.Exceptions = Args.hasArg(OPT_fexceptions);
- Opts.IgnoreExceptions = Args.hasArg(OPT_fignore_exceptions);
- Opts.ObjCExceptions = Args.hasArg(OPT_fobjc_exceptions);
- Opts.CXXExceptions = Args.hasArg(OPT_fcxx_exceptions);
// -ffixed-point
Opts.FixedPoint =
@@ -2963,14 +2497,10 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
/*Default=*/false) &&
Opts.FixedPoint;
- Opts.ExternCNoUnwind = Args.hasArg(OPT_fexternc_nounwind);
- Opts.TraditionalCPP = Args.hasArg(OPT_traditional_cpp);
-
Opts.RTTI = Opts.CPlusPlus && !Args.hasArg(OPT_fno_rtti);
Opts.RTTIData = Opts.RTTI && !Args.hasArg(OPT_fno_rtti_data);
Opts.Blocks = Args.hasArg(OPT_fblocks) || (Opts.OpenCL
&& Opts.OpenCLVersion == 200);
- Opts.BlocksRuntimeOptional = Args.hasArg(OPT_fblocks_runtime_optional);
Opts.Coroutines = Opts.CPlusPlus20 || Args.hasArg(OPT_fcoroutines_ts);
Opts.ConvergentFunctions = Opts.OpenCL || (Opts.CUDA && Opts.CUDAIsDevice) ||
@@ -2983,10 +2513,8 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Opts.DoubleSquareBracketAttributes);
Opts.CPlusPlusModules = Opts.CPlusPlus20;
- Opts.ModulesTS = Args.hasArg(OPT_fmodules_ts);
Opts.Modules =
Args.hasArg(OPT_fmodules) || Opts.ModulesTS || Opts.CPlusPlusModules;
- Opts.ModulesStrictDeclUse = Args.hasArg(OPT_fmodules_strict_decluse);
Opts.ModulesDeclUse =
Args.hasArg(OPT_fmodules_decluse) || Opts.ModulesStrictDeclUse;
// FIXME: We only need this in C++ modules / Modules TS if we might textually
@@ -2994,113 +2522,32 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Opts.ModulesLocalVisibility =
Args.hasArg(OPT_fmodules_local_submodule_visibility) || Opts.ModulesTS ||
Opts.CPlusPlusModules;
- Opts.ModulesCodegen = Args.hasArg(OPT_fmodules_codegen);
- Opts.ModulesDebugInfo = Args.hasArg(OPT_fmodules_debuginfo);
Opts.ModulesSearchAll = Opts.Modules &&
!Args.hasArg(OPT_fno_modules_search_all) &&
Args.hasArg(OPT_fmodules_search_all);
- Opts.ModulesErrorRecovery = !Args.hasArg(OPT_fno_modules_error_recovery);
- Opts.ImplicitModules = !Args.hasArg(OPT_fno_implicit_modules);
Opts.CharIsSigned = Opts.OpenCL || !Args.hasArg(OPT_fno_signed_char);
Opts.WChar = Opts.CPlusPlus && !Args.hasArg(OPT_fno_wchar);
Opts.Char8 = Args.hasFlag(OPT_fchar8__t, OPT_fno_char8__t, Opts.CPlusPlus20);
- if (const Arg *A = Args.getLastArg(OPT_fwchar_type_EQ)) {
- Opts.WCharSize = llvm::StringSwitch<unsigned>(A->getValue())
- .Case("char", 1)
- .Case("short", 2)
- .Case("int", 4)
- .Default(0);
- if (Opts.WCharSize == 0)
- Diags.Report(diag::err_fe_invalid_wchar_type) << A->getValue();
- }
- Opts.WCharIsSigned = Args.hasFlag(OPT_fsigned_wchar, OPT_fno_signed_wchar, true);
- Opts.ShortEnums = Args.hasArg(OPT_fshort_enums);
- Opts.Freestanding = Args.hasArg(OPT_ffreestanding);
Opts.NoBuiltin = Args.hasArg(OPT_fno_builtin) || Opts.Freestanding;
if (!Opts.NoBuiltin)
getAllNoBuiltinFuncValues(Args, Opts.NoBuiltinFuncs);
- Opts.NoMathBuiltin = Args.hasArg(OPT_fno_math_builtin);
- Opts.RelaxedTemplateTemplateArgs =
- Args.hasArg(OPT_frelaxed_template_template_args);
- Opts.SizedDeallocation = Args.hasArg(OPT_fsized_deallocation);
Opts.AlignedAllocation =
Args.hasFlag(OPT_faligned_allocation, OPT_fno_aligned_allocation,
Opts.AlignedAllocation);
Opts.AlignedAllocationUnavailable =
Opts.AlignedAllocation && Args.hasArg(OPT_aligned_alloc_unavailable);
- Opts.NewAlignOverride =
- getLastArgIntValue(Args, OPT_fnew_alignment_EQ, 0, Diags);
- if (Opts.NewAlignOverride && !llvm::isPowerOf2_32(Opts.NewAlignOverride)) {
- Arg *A = Args.getLastArg(OPT_fnew_alignment_EQ);
- Diags.Report(diag::err_fe_invalid_alignment) << A->getAsString(Args)
- << A->getValue();
- Opts.NewAlignOverride = 0;
- }
- Opts.ConceptSatisfactionCaching =
- !Args.hasArg(OPT_fno_concept_satisfaction_caching);
if (Args.hasArg(OPT_fconcepts_ts))
Diags.Report(diag::warn_fe_concepts_ts_flag);
- Opts.RecoveryAST = Args.hasFlag(OPT_frecovery_ast, OPT_fno_recovery_ast);
- Opts.RecoveryASTType =
- Args.hasFlag(OPT_frecovery_ast_type, OPT_fno_recovery_ast_type);
- Opts.HeinousExtensions = Args.hasArg(OPT_fheinous_gnu_extensions);
- Opts.AccessControl = !Args.hasArg(OPT_fno_access_control);
- Opts.ElideConstructors = !Args.hasArg(OPT_fno_elide_constructors);
Opts.MathErrno = !Opts.OpenCL && Args.hasArg(OPT_fmath_errno);
- Opts.InstantiationDepth =
- getLastArgIntValue(Args, OPT_ftemplate_depth, 1024, Diags);
- Opts.ArrowDepth =
- getLastArgIntValue(Args, OPT_foperator_arrow_depth, 256, Diags);
- Opts.ConstexprCallDepth =
- getLastArgIntValue(Args, OPT_fconstexpr_depth, 512, Diags);
- Opts.ConstexprStepLimit =
- getLastArgIntValue(Args, OPT_fconstexpr_steps, 1048576, Diags);
- Opts.EnableNewConstInterp =
- Args.hasArg(OPT_fexperimental_new_constant_interpreter);
- Opts.BracketDepth = getLastArgIntValue(Args, OPT_fbracket_depth, 256, Diags);
- Opts.DelayedTemplateParsing = Args.hasArg(OPT_fdelayed_template_parsing);
- Opts.NumLargeByValueCopy =
- getLastArgIntValue(Args, OPT_Wlarge_by_value_copy_EQ, 0, Diags);
- Opts.MSBitfields = Args.hasArg(OPT_mms_bitfields);
- Opts.ObjCConstantStringClass =
- std::string(Args.getLastArgValue(OPT_fconstant_string_class));
- Opts.ObjCDefaultSynthProperties =
- !Args.hasArg(OPT_disable_objc_default_synthesize_properties);
- Opts.EncodeExtendedBlockSig =
- Args.hasArg(OPT_fencode_extended_block_signature);
- Opts.EmitAllDecls = Args.hasArg(OPT_femit_all_decls);
- Opts.PackStruct = getLastArgIntValue(Args, OPT_fpack_struct_EQ, 0, Diags);
- Opts.MaxTypeAlign = getLastArgIntValue(Args, OPT_fmax_type_align_EQ, 0, Diags);
- Opts.AlignDouble = Args.hasArg(OPT_malign_double);
- Opts.DoubleSize = getLastArgIntValue(Args, OPT_mdouble_EQ, 0, Diags);
Opts.LongDoubleSize = Args.hasArg(OPT_mlong_double_128)
? 128
: Args.hasArg(OPT_mlong_double_64) ? 64 : 0;
- Opts.PPCIEEELongDouble = Args.hasArg(OPT_mabi_EQ_ieeelongdouble);
Opts.EnableAIXExtendedAltivecABI = Args.hasArg(OPT_mabi_EQ_vec_extabi);
Opts.PICLevel = getLastArgIntValue(Args, OPT_pic_level, 0, Diags);
- Opts.ROPI = Args.hasArg(OPT_fropi);
- Opts.RWPI = Args.hasArg(OPT_frwpi);
- Opts.PIE = Args.hasArg(OPT_pic_is_pie);
- Opts.Static = Args.hasArg(OPT_static_define);
- Opts.DumpRecordLayoutsSimple = Args.hasArg(OPT_fdump_record_layouts_simple);
Opts.DumpRecordLayouts = Opts.DumpRecordLayoutsSimple
|| Args.hasArg(OPT_fdump_record_layouts);
- Opts.DumpVTableLayouts = Args.hasArg(OPT_fdump_vtable_layouts);
- Opts.SpellChecking = !Args.hasArg(OPT_fno_spell_checking);
- Opts.NoBitFieldTypeAlign = Args.hasArg(OPT_fno_bitfield_type_align);
if (Opts.FastRelaxedMath)
Opts.setDefaultFPContractMode(LangOptions::FPM_Fast);
- Opts.HexagonQdsp6Compat = Args.hasArg(OPT_mqdsp6_compat);
- Opts.FakeAddressSpaceMap = Args.hasArg(OPT_ffake_address_space_map);
- Opts.ParseUnknownAnytype = Args.hasArg(OPT_funknown_anytype);
- Opts.DebuggerSupport = Args.hasArg(OPT_fdebugger_support);
- Opts.DebuggerCastResultToId = Args.hasArg(OPT_fdebugger_cast_result_to_id);
- Opts.DebuggerObjCLiteral = Args.hasArg(OPT_fdebugger_objc_literal);
- Opts.ApplePragmaPack = Args.hasArg(OPT_fapple_pragma_pack);
- Opts.ModuleName = std::string(Args.getLastArgValue(OPT_fmodule_name_EQ));
- Opts.CurrentModule = Opts.ModuleName;
- Opts.AppExt = Args.hasArg(OPT_fapplication_extension);
Opts.ModuleFeatures = Args.getAllArgValues(OPT_fmodule_feature);
llvm::sort(Opts.ModuleFeatures);
Opts.NativeHalfType |= Args.hasArg(OPT_fnative_half_type);
@@ -3109,8 +2556,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
// is enabled.
Opts.HalfArgsAndReturns = Args.hasArg(OPT_fallow_half_arguments_and_returns)
| Opts.NativeHalfArgsAndReturns;
- Opts.GNUAsm = !Args.hasArg(OPT_fno_gnu_inline_asm);
- Opts.Cmse = Args.hasArg(OPT_mcmse); // Armv8-M Security Extensions
Opts.ArmSveVectorBits =
getLastArgIntValue(Args, options::OPT_msve_vector_bits_EQ, 0, Diags);
@@ -3127,79 +2572,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Args.hasFlag(OPT_fdeclspec, OPT_fno_declspec,
(Opts.MicrosoftExt || Opts.Borland || Opts.CUDA));
- if (Arg *A = Args.getLastArg(OPT_faddress_space_map_mangling_EQ)) {
- switch (llvm::StringSwitch<unsigned>(A->getValue())
- .Case("target", LangOptions::ASMM_Target)
- .Case("no", LangOptions::ASMM_Off)
- .Case("yes", LangOptions::ASMM_On)
- .Default(255)) {
- default:
- Diags.Report(diag::err_drv_invalid_value)
- << "-faddress-space-map-mangling=" << A->getValue();
- break;
- case LangOptions::ASMM_Target:
- Opts.setAddressSpaceMapMangling(LangOptions::ASMM_Target);
- break;
- case LangOptions::ASMM_On:
- Opts.setAddressSpaceMapMangling(LangOptions::ASMM_On);
- break;
- case LangOptions::ASMM_Off:
- Opts.setAddressSpaceMapMangling(LangOptions::ASMM_Off);
- break;
- }
- }
-
- if (Arg *A = Args.getLastArg(OPT_fms_memptr_rep_EQ)) {
- LangOptions::PragmaMSPointersToMembersKind InheritanceModel =
- llvm::StringSwitch<LangOptions::PragmaMSPointersToMembersKind>(
- A->getValue())
- .Case("single",
- LangOptions::PPTMK_FullGeneralitySingleInheritance)
- .Case("multiple",
- LangOptions::PPTMK_FullGeneralityMultipleInheritance)
- .Case("virtual",
- LangOptions::PPTMK_FullGeneralityVirtualInheritance)
- .Default(LangOptions::PPTMK_BestCase);
- if (InheritanceModel == LangOptions::PPTMK_BestCase)
- Diags.Report(diag::err_drv_invalid_value)
- << "-fms-memptr-rep=" << A->getValue();
-
- Opts.setMSPointerToMemberRepresentationMethod(InheritanceModel);
- }
-
- // Check for MS default calling conventions being specified.
- if (Arg *A = Args.getLastArg(OPT_fdefault_calling_conv_EQ)) {
- LangOptions::DefaultCallingConvention DefaultCC =
- llvm::StringSwitch<LangOptions::DefaultCallingConvention>(A->getValue())
- .Case("cdecl", LangOptions::DCC_CDecl)
- .Case("fastcall", LangOptions::DCC_FastCall)
- .Case("stdcall", LangOptions::DCC_StdCall)
- .Case("vectorcall", LangOptions::DCC_VectorCall)
- .Case("regcall", LangOptions::DCC_RegCall)
- .Default(LangOptions::DCC_None);
- if (DefaultCC == LangOptions::DCC_None)
- Diags.Report(diag::err_drv_invalid_value)
- << "-fdefault-calling-conv=" << A->getValue();
-
- llvm::Triple T(TargetOpts.Triple);
- llvm::Triple::ArchType Arch = T.getArch();
- bool emitError = (DefaultCC == LangOptions::DCC_FastCall ||
- DefaultCC == LangOptions::DCC_StdCall) &&
- Arch != llvm::Triple::x86;
- emitError |= (DefaultCC == LangOptions::DCC_VectorCall ||
- DefaultCC == LangOptions::DCC_RegCall) &&
- !T.isX86();
- if (emitError)
- Diags.Report(diag::err_drv_argument_not_allowed_with)
- << A->getSpelling() << T.getTriple();
- else
- Opts.setDefaultCallingConv(DefaultCC);
- }
-
- Opts.SemanticInterposition = Args.hasArg(OPT_fsemantic_interposition);
- Opts.HalfNoSemanticInterposition =
- Args.hasArg(OPT_fhalf_no_semantic_interposition);
-
// -mrtd option
if (Arg *A = Args.getLastArg(OPT_mrtd)) {
if (Opts.getDefaultCallingConv() != LangOptions::DCC_None)
@@ -3215,8 +2587,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
}
}
- // Check if -fopenmp is specified and set default version to 5.0.
- Opts.OpenMP = Args.hasArg(options::OPT_fopenmp) ? 50 : 0;
// Check if -fopenmp-simd is specified.
bool IsSimdSpecified =
Args.hasFlag(options::OPT_fopenmp_simd, options::OPT_fno_openmp_simd,
@@ -3271,11 +2641,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Opts.OpenMPCUDAReductionBufNum, Diags);
}
- // Prevent auto-widening the representation of loop counters during an
- // OpenMP collapse clause.
- Opts.OpenMPOptimisticCollapse =
- Args.hasArg(options::OPT_fopenmp_optimistic_collapse) ? 1 : 0;
-
// Get the OpenMP target triples if any.
if (Arg *A = Args.getLastArg(options::OPT_fopenmp_targets_EQ)) {
enum ArchPtrSize { Arch16Bit, Arch32Bit, Arch64Bit };
@@ -3366,12 +2731,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Val;
}
- auto FPRM = llvm::RoundingMode::NearestTiesToEven;
- if (Args.hasArg(OPT_frounding_math)) {
- FPRM = llvm::RoundingMode::Dynamic;
- }
- Opts.setFPRoundingMode(FPRM);
-
if (Args.hasArg(OPT_ftrapping_math)) {
Opts.setFPExceptionMode(LangOptions::FPE_Strict);
}
@@ -3394,45 +2753,9 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
}
Opts.setFPExceptionMode(FPEB);
- Opts.RetainCommentsFromSystemHeaders =
- Args.hasArg(OPT_fretain_comments_from_system_headers);
-
- unsigned SSP = getLastArgIntValue(Args, OPT_stack_protector, 0, Diags);
- switch (SSP) {
- default:
- Diags.Report(diag::err_drv_invalid_value)
- << Args.getLastArg(OPT_stack_protector)->getAsString(Args) << SSP;
- break;
- case 0: Opts.setStackProtector(LangOptions::SSPOff); break;
- case 1: Opts.setStackProtector(LangOptions::SSPOn); break;
- case 2: Opts.setStackProtector(LangOptions::SSPStrong); break;
- case 3: Opts.setStackProtector(LangOptions::SSPReq); break;
- }
-
- if (Arg *A = Args.getLastArg(OPT_ftrivial_auto_var_init)) {
- StringRef Val = A->getValue();
- if (Val == "uninitialized")
- Opts.setTrivialAutoVarInit(
- LangOptions::TrivialAutoVarInitKind::Uninitialized);
- else if (Val == "zero")
- Opts.setTrivialAutoVarInit(LangOptions::TrivialAutoVarInitKind::Zero);
- else if (Val == "pattern")
- Opts.setTrivialAutoVarInit(LangOptions::TrivialAutoVarInitKind::Pattern);
- else
- Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Val;
- }
-
- if (Arg *A = Args.getLastArg(OPT_ftrivial_auto_var_init_stop_after)) {
- int Val = std::stoi(A->getValue());
- Opts.TrivialAutoVarInitStopAfter = Val;
- }
-
// Parse -fsanitize= arguments.
parseSanitizerKinds("-fsanitize=", Args.getAllArgValues(OPT_fsanitize_EQ),
Diags, Opts.Sanitize);
- // -fsanitize-address-field-padding=N has to be a LangOpt, parse it here.
- Opts.SanitizeAddressFieldPadding =
- getLastArgIntValue(Args, OPT_fsanitize_address_field_padding, 0, Diags);
Opts.SanitizerBlacklistFiles = Args.getAllArgValues(OPT_fsanitize_blacklist);
std::vector<std::string> systemBlacklists =
Args.getAllArgValues(OPT_fsanitize_system_blacklist);
@@ -3447,14 +2770,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Args.getAllArgValues(OPT_fxray_never_instrument);
Opts.XRayAttrListFiles = Args.getAllArgValues(OPT_fxray_attr_list);
- // -fforce-emit-vtables
- Opts.ForceEmitVTables = Args.hasArg(OPT_fforce_emit_vtables);
-
- // -fallow-editor-placeholders
- Opts.AllowEditorPlaceholders = Args.hasArg(OPT_fallow_editor_placeholders);
-
- Opts.RegisterStaticDestructors = !Args.hasArg(OPT_fno_cxx_static_destructors);
-
if (Arg *A = Args.getLastArg(OPT_fclang_abi_compat_EQ)) {
Opts.setClangABICompat(LangOptions::ClangABI::Latest);
@@ -3490,14 +2805,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
}
}
- Opts.CompleteMemberPointers = Args.hasArg(OPT_fcomplete_member_pointers);
- Opts.BuildingPCHWithObjectFile = Args.hasArg(OPT_building_pch_with_obj);
- Opts.PCHInstantiateTemplates = Args.hasArg(OPT_fpch_instantiate_templates);
-
- Opts.MatrixTypes = Args.hasArg(OPT_fenable_matrix);
-
- Opts.MaxTokens = getLastArgIntValue(Args, OPT_fmax_tokens_EQ, 0, Diags);
-
if (Arg *A = Args.getLastArg(OPT_msign_return_address_EQ)) {
StringRef SignScope = A->getValue();
@@ -3530,17 +2837,6 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
}
}
- Opts.BranchTargetEnforcement = Args.hasArg(OPT_mbranch_target_enforce);
- Opts.SpeculativeLoadHardening = Args.hasArg(OPT_mspeculative_load_hardening);
-
- Opts.CompatibilityQualifiedIdBlockParamTypeChecking =
- Args.hasArg(OPT_fcompatibility_qualified_id_block_param_type_checking);
-
- Opts.RelativeCXXABIVTables =
- Args.hasFlag(OPT_fexperimental_relative_cxx_abi_vtables,
- OPT_fno_experimental_relative_cxx_abi_vtables,
- /*default=*/false);
-
std::string ThreadModel =
std::string(Args.getLastArgValue(OPT_mthread_model, "posix"));
if (ThreadModel != "posix" && ThreadModel != "single")
@@ -3788,7 +3084,6 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
// PIClevel and PIELevel are needed during code generation and this should be
// set regardless of the input type.
LangOpts.PICLevel = getLastArgIntValue(Args, OPT_pic_level, 0, Diags);
- LangOpts.PIE = Args.hasArg(OPT_pic_is_pie);
parseSanitizerKinds("-fsanitize=", Args.getAllArgValues(OPT_fsanitize_EQ),
Diags, LangOpts.Sanitize);
} else {
@@ -3806,9 +3101,6 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
}
}
- LangOpts.FunctionAlignment =
- getLastArgIntValue(Args, OPT_function_alignment, 0, Diags);
-
if (LangOpts.CUDA) {
// During CUDA device-side compilation, the aux triple is the
// triple used for host compilation.
@@ -3849,7 +3141,7 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
Res.getCodeGenOpts().Argv0 = Argv0;
Res.getCodeGenOpts().CommandLineArgs = CommandLineArgs;
- FixupInvocation(Res, Diags);
+ FixupInvocation(Res, Diags, Args);
return Success;
}
@@ -3982,7 +3274,8 @@ void CompilerInvocation::generateCC1CommandLine(
(Extracted != \
static_cast<decltype(this->KEYPATH)>( \
(IMPLIED_CHECK) ? (IMPLIED_VALUE) : (DEFAULT_VALUE)))) \
- DENORMALIZER(Args, SPELLING, SA, TABLE_INDEX, Extracted); \
+ DENORMALIZER(Args, SPELLING, SA, Option::KIND##Class, TABLE_INDEX, \
+ Extracted); \
}(EXTRACTOR(this->KEYPATH)); \
}