diff --git a/clang/include/clang/Driver/Options.h b/clang/include/clang/Driver/Options.h index fb0e536d972cb..50366d2829ab8 100644 --- a/clang/include/clang/Driver/Options.h +++ b/clang/include/clang/Driver/Options.h @@ -10,6 +10,7 @@ #define LLVM_CLANG_DRIVER_OPTIONS_H #include "llvm/Option/OptTable.h" +#include "llvm/Option/Option.h" namespace clang { namespace driver { @@ -37,6 +38,13 @@ enum ClangFlags { TargetSpecific = (1 << 20), }; +// Flags specifically for clang option visibility. We alias DefaultVis to +// ClangOption, because "DefaultVis" is confusing in Options.td, which is used +// for multiple drivers (clang, cl, flang, etc). +enum ClangVisibility { + ClangOption = llvm::opt::DefaultVis, +}; + enum ID { OPT_INVALID = 0, // This is not an option ID. #define OPTION(...) LLVM_MAKE_OPT_ID(__VA_ARGS__), diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 86d2bafa6b612..2e0ac65bb2c2e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -79,6 +79,23 @@ def FC1Option : OptionFlag; // target will lead to an err_drv_unsupported_opt_for_target error. def TargetSpecific : OptionFlag; +// Indicates that this warning is ignored, but accepted with a warning for +// GCC compatibility. +class IgnoredGCCCompat : Flags<[HelpHidden]> {} + +class TargetSpecific : Flags<[TargetSpecific]> {} + +///////// +// Visibility + +// We prefer the name "ClangOption" here rather than "Default" to make +// it clear that these options will be visible in the clang driver (as +// opposed to clang -cc1, the CL driver, or the flang driver). +defvar ClangOption = DefaultVis; + +///////// +// Docs + // A short name to show in documentation. The name will be interpreted as rST. class DocName { string DocName = name; } @@ -89,12 +106,6 @@ class DocBrief { code DocBrief = descr; } // documentation. class DocFlatten { bit DocFlatten = 1; } -// Indicates that this warning is ignored, but accepted with a warning for -// GCC compatibility. -class IgnoredGCCCompat : Flags<[HelpHidden]> {} - -class TargetSpecific : Flags<[TargetSpecific]> {} - ///////// // Groups @@ -381,7 +392,8 @@ def SetFalse : Set {} // Definition of single command line flag. This is an implementation detail, use // SetTrueBy or SetFalseBy instead. -class FlagDef option_flags, +class FlagDef option_flags, list option_vis, string help, list implied_by_expressions = []> { // The polarity. Besides spelling, this also decides whether the TableGen // record will be prefixed with "no_". @@ -390,9 +402,12 @@ class FlagDef option_flags, // The value assigned to key path when the flag is present on command line. bit Value = value; - // OptionFlags that control visibility of the flag in different tools. + // OptionFlags in different tools. list OptionFlags = option_flags; + // OptionVisibility flags for different tools. + list OptionVisibility = option_vis; + // The help text associated with the flag. string Help = help; @@ -401,8 +416,11 @@ class FlagDef option_flags, } // Additional information to be appended to both positive and negative flag. -class BothFlags option_flags, string help = ""> { +class BothFlags option_flags, + list option_vis = [ClangOption], + string help = ""> { list OptionFlags = option_flags; + list OptionVisibility = option_vis; string Help = help; } @@ -411,23 +429,26 @@ class ApplySuffix { FlagDef Result = FlagDef; } // Definition of the command line flag with positive spelling, e.g. "-ffoo". -class PosFlag flags = [], string help = "", - list implied_by_expressions = []> - : FlagDef {} +class PosFlag flags = [], list vis = [], + string help = "", list implied_by_expressions = []> + : FlagDef {} // Definition of the command line flag with negative spelling, e.g. "-fno-foo". -class NegFlag flags = [], string help = "", - list implied_by_expressions = []> - : FlagDef {} +class NegFlag flags = [], list vis = [], + string help = "", list implied_by_expressions = []> + : FlagDef {} // Expanded FlagDef that's convenient for creation of TableGen records. class FlagDefExpanded - : FlagDef { + : FlagDef { // Name of the TableGen record. string RecordName = prefix # !if(flag.Polarity, "", "no_") # name; @@ -445,7 +466,8 @@ class FlagDefExpanded class MarshalledFlagRec - : Flag<["-"], flag.Spelling>, Flags, HelpText, + : Flag<["-"], flag.Spelling>, Flags, + Visibility, HelpText, MarshallingInfoBooleanFlag, ImpliedByAnyOf {} @@ -459,7 +481,7 @@ class MarshalledFlagRec> { + BothFlags suffix = BothFlags<[]>> { defvar flag1 = FlagDefExpanded.Result, prefix, NAME, spelling_base>; @@ -490,7 +512,7 @@ multiclass BoolOption> { + BothFlags both = BothFlags<[]>> { defm NAME : BoolOption<"f", flag_base, kpm, default, flag1, flag2, both>, Group; } @@ -501,7 +523,7 @@ multiclass BoolFOption> { + BothFlags both = BothFlags<[]>> { defm NAME : BoolOption<"g", flag_base, kpm, default, flag1, flag2, both>, Group; } @@ -509,7 +531,7 @@ multiclass BoolGOption> { + BothFlags suffix = BothFlags<[]>> { defvar flag1 = FlagDefExpanded.Result, prefix, NAME, spelling_base>; @@ -531,10 +553,12 @@ multiclass BoolOptionWithoutMarshalling, Flags, + Visibility, HelpText, ImpliedByAnyOf {} def flag2.RecordName : Flag<["-"], flag2.Spelling>, Flags, + Visibility, HelpText, ImpliedByAnyOf {} @@ -916,8 +940,9 @@ def b : JoinedOrSeparate<["-"], "b">, Flags<[LinkerInput]>, defm offload_uniform_block : BoolFOption<"offload-uniform-block", LangOpts<"OffloadUniformBlock">, Default<"LangOpts->CUDA">, - PosFlag, NegFlag, - BothFlags<[], " that kernels are launched with uniform block sizes (default true for CUDA/HIP and false otherwise)">>; + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " that kernels are launched with uniform block sizes (default true for CUDA/HIP and false otherwise)">>; // OpenCL-only Options def cl_opt_disable : Flag<["-"], "cl-opt-disable">, Group, Flags<[CC1Option]>, @@ -985,8 +1010,8 @@ def c : Flag<["-"], "c">, Flags<[NoXarchOption, FlangOption]>, Group; defm convergent_functions : BoolFOption<"convergent-functions", LangOpts<"ConvergentFunctions">, DefaultFalse, - NegFlag, - PosFlag>; + NegFlag, + PosFlag>; // Common offloading options let Group = offload_Group in { @@ -1021,7 +1046,7 @@ def nvptx_arch_tool_EQ : Joined<["--"], "nvptx-arch-tool=">, defm gpu_rdc : BoolFOption<"gpu-rdc", LangOpts<"GPURelocatableDeviceCode">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fgpu_default_stream_EQ : Joined<["-"], "fgpu-default-stream=">, @@ -1038,14 +1063,15 @@ def fno_gpu_flush_denormals_to_zero : Flag<["-"], "fno-gpu-flush-denormals-to-ze defm gpu_defer_diag : BoolFOption<"gpu-defer-diag", LangOpts<"GPUDeferDiag">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " host/device related diagnostic messages for CUDA/HIP">>; + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " host/device related diagnostic messages for CUDA/HIP">>; defm gpu_exclude_wrong_side_overloads : BoolFOption<"gpu-exclude-wrong-side-overloads", LangOpts<"GPUExcludeWrongSideOverloads">, DefaultFalse, - PosFlag, - NegFlag, - BothFlags<[HelpHidden], " in overloading resolution for CUDA/HIP">>; + PosFlag, + NegFlag, + BothFlags<[HelpHidden], [ClangOption], " in overloading resolution for CUDA/HIP">>; def cuid_EQ : Joined<["-"], "cuid=">, Flags<[CC1Option]>, HelpText<"An ID for compilation unit, which should be the same for the same " @@ -1110,7 +1136,7 @@ def : Flag<["-"], "fcuda-rdc">, Alias; def : Flag<["-"], "fno-cuda-rdc">, Alias; defm cuda_short_ptr : BoolFOption<"cuda-short-ptr", TargetOpts<"NVPTXUseShortPointers">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; } @@ -1150,28 +1176,30 @@ def fhip_dump_offload_linker_script : Flag<["-"], "fhip-dump-offload-linker-scri Group, Flags<[NoArgumentUnused, HelpHidden]>; defm hip_new_launch_api : BoolFOption<"hip-new-launch-api", LangOpts<"HIPUseNewLaunchAPI">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " new kernel launching API for HIP">>; + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " new kernel launching API for HIP">>; defm hip_fp32_correctly_rounded_divide_sqrt : BoolFOption<"hip-fp32-correctly-rounded-divide-sqrt", CodeGenOpts<"HIPCorrectlyRoundedDivSqrt">, DefaultTrue, - PosFlag, - NegFlag, - BothFlags<[], " that single precision floating-point divide and sqrt used in " + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " that single precision floating-point divide and sqrt used in " "the program source are correctly rounded (HIP device compilation only)">>, ShouldParseIf; defm hip_kernel_arg_name : BoolFOption<"hip-kernel-arg-name", CodeGenOpts<"HIPSaveKernelArgName">, DefaultFalse, - PosFlag, - NegFlag, - BothFlags<[], " that kernel argument names are preserved (HIP only)">>, + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " that kernel argument names are preserved (HIP only)">>, ShouldParseIf; def hipspv_pass_plugin_EQ : Joined<["--"], "hipspv-pass-plugin=">, Group, MetaVarName<"">, HelpText<"path to a pass plugin for HIP to SPIR-V passes.">; defm gpu_allow_device_init : BoolFOption<"gpu-allow-device-init", LangOpts<"GPUAllowDeviceInit">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " device side init function in HIP (experimental)">>, + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " device side init function in HIP (experimental)">>, ShouldParseIf; def gpu_max_threads_per_block_EQ : Joined<["--"], "gpu-max-threads-per-block=">, Flags<[CC1Option]>, @@ -1264,7 +1292,7 @@ def fPIE : Flag<["-"], "fPIE">, Group; def fno_PIE : Flag<["-"], "fno-PIE">, Group; defm access_control : BoolFOption<"access-control", LangOpts<"AccessControl">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; def falign_functions : Flag<["-"], "falign-functions">, Group; def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group; @@ -1274,7 +1302,7 @@ def falign_loops_EQ : Joined<["-"], "falign-loops=">, Group, Flags<[CC1 def fno_align_functions: Flag<["-"], "fno-align-functions">, Group; defm allow_editor_placeholders : BoolFOption<"allow-editor-placeholders", LangOpts<"AllowEditorPlaceholders">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fallow_unsupported : Flag<["-"], "fallow-unsupported">, Group; def fapple_kext : Flag<["-"], "fapple-kext">, Group, Flags<[CC1Option]>, @@ -1290,11 +1318,11 @@ def fstrict_flex_arrays_EQ : Joined<["-"], "fstrict-flex-arrays=">, Group, "Default">; defm apple_pragma_pack : BoolFOption<"apple-pragma-pack", LangOpts<"ApplePragmaPack">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; defm xl_pragma_pack : BoolFOption<"xl-pragma-pack", LangOpts<"XLPragmaPack">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def shared_libsan : Flag<["-"], "shared-libsan">, HelpText<"Dynamically link the sanitizer runtime">; @@ -1306,7 +1334,7 @@ def fasm : Flag<["-"], "fasm">, Group; defm assume_unique_vtables : BoolFOption<"assume-unique-vtables", CodeGenOpts<"AssumeUniqueVTables">, DefaultTrue, PosFlag, - NegFlag, BothFlags<[CoreOption]>>; @@ -1317,11 +1345,12 @@ def fast : Flag<["-"], "fast">, Group; def fasynchronous_unwind_tables : Flag<["-"], "fasynchronous-unwind-tables">, Group; defm double_square_bracket_attributes : BoolFOption<"double-square-bracket-attributes", - LangOpts<"DoubleSquareBracketAttributes">, DefaultTrue, PosFlag, NegFlag>; + LangOpts<"DoubleSquareBracketAttributes">, DefaultTrue, PosFlag, + NegFlag>; defm autolink : BoolFOption<"autolink", CodeGenOpts<"Autolink">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; // In the future this option will be supported by other offloading @@ -1333,17 +1362,17 @@ def offload_EQ : CommaJoined<["--"], "offload=">, Flags<[NoXarchOption]>, // C++ Coroutines defm coroutines : BoolFOption<"coroutines", LangOpts<"Coroutines">, Default, - PosFlag, + PosFlag, NegFlag>; defm coro_aligned_allocation : BoolFOption<"coro-aligned-allocation", LangOpts<"CoroAlignedAllocation">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; defm experimental_library : BoolFOption<"experimental-library", LangOpts<"ExperimentalLibrary">, DefaultFalse, - PosFlag, HelpText<"Embed placeholder LLVM IR data as a marker">; defm gnu_inline_asm : BoolFOption<"gnu-inline-asm", LangOpts<"GNUAsm">, DefaultTrue, - NegFlag, PosFlag>; + NegFlag, + PosFlag>; def fprofile_sample_use : Flag<["-"], "fprofile-sample-use">, Group, Flags<[CoreOption]>; @@ -1421,7 +1451,7 @@ def ffile_compilation_dir_EQ : Joined<["-"], "ffile-compilation-dir=">, Group; defm debug_info_for_profiling : BoolFOption<"debug-info-for-profiling", CodeGenOpts<"DebugInfoForProfiling">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fprofile_instr_generate : Flag<["-"], "fprofile-instr-generate">, Group, Flags<[CoreOption]>, @@ -1440,8 +1470,8 @@ def fprofile_remapping_file_EQ : Joined<["-"], "fprofile-remapping-file=">, MarshallingInfoString>; defm coverage_mapping : BoolFOption<"coverage-mapping", CodeGenOpts<"CoverageMapping">, DefaultFalse, - PosFlag, - NegFlag, BothFlags<[CoreOption]>>; + PosFlag, + NegFlag, BothFlags<[CoreOption]>>; def fprofile_generate : Flag<["-"], "fprofile-generate">, Group, Flags<[CoreOption]>, HelpText<"Generate instrumented code to collect execution counts into default.profraw (overridden by LLVM_PROFILE_FILE env var)">; @@ -1491,8 +1521,9 @@ def fprofile_update_EQ : Joined<["-"], "fprofile-update=">, MarshallingInfoFlag>; defm pseudo_probe_for_profiling : BoolFOption<"pseudo-probe-for-profiling", CodeGenOpts<"PseudoProbeForProfiling">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[NoXarchOption, CC1Option], " pseudo probes for sample profiling">>; + PosFlag, + NegFlag, + BothFlags<[NoXarchOption, CC1Option], [ClangOption], " pseudo probes for sample profiling">>; def forder_file_instrumentation : Flag<["-"], "forder-file-instrumentation">, Group, Flags<[CC1Option, CoreOption]>, HelpText<"Generate instrumented code to collect order file into default.profraw file (overridden by '=' form of option or LLVM_PROFILE_FILE env var)">; @@ -1520,20 +1551,22 @@ def fswift_async_fp_EQ : Joined<["-"], "fswift-async-fp=">, defm addrsig : BoolFOption<"addrsig", CodeGenOpts<"Addrsig">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[CoreOption], " an address-significance table">>; + PosFlag, + NegFlag, + BothFlags<[CoreOption], [ClangOption], " an address-significance table">>; defm blocks : OptInCC1FFlag<"blocks", "Enable the 'blocks' language feature", "", "", [CoreOption]>; def fbootclasspath_EQ : Joined<["-"], "fbootclasspath=">, Group; defm borland_extensions : BoolFOption<"borland-extensions", LangOpts<"Borland">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fbuiltin : Flag<["-"], "fbuiltin">, Group, Flags<[CoreOption]>; def fbuiltin_module_map : Flag <["-"], "fbuiltin-module-map">, Group, Flags<[NoXarchOption]>, HelpText<"Load the clang builtins module map file.">; defm caret_diagnostics : BoolFOption<"caret-diagnostics", DiagnosticOpts<"ShowCarets">, DefaultTrue, - NegFlag, PosFlag>; + NegFlag, + PosFlag>; def fclang_abi_compat_EQ : Joined<["-"], "fclang-abi-compat=">, Group, Flags<[CC1Option]>, MetaVarName<"">, Values<".,latest">, HelpText<"Attempt to match the ABI of Clang ">; @@ -1576,8 +1609,9 @@ zero-initialized definitions (default -fno-common).}]>; def fcompile_resource_EQ : Joined<["-"], "fcompile-resource=">, Group; defm complete_member_pointers : BoolOption<"f", "complete-member-pointers", LangOpts<"CompleteMemberPointers">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[CoreOption], " member pointer base types to be complete if they" + PosFlag, + NegFlag, + BothFlags<[CoreOption], [ClangOption], " member pointer base types to be complete if they" " would be significant under the Microsoft ABI">>, Group; def fcf_runtime_abi_EQ : Joined<["-"], "fcf-runtime-abi=">, Group, @@ -1587,7 +1621,7 @@ def fcf_runtime_abi_EQ : Joined<["-"], "fcf-runtime-abi=">, Group, MarshallingInfoEnum, "ObjectiveC">; defm constant_cfstrings : BoolFOption<"constant-cfstrings", LangOpts<"NoConstantCFStrings">, DefaultFalse, - NegFlag, + NegFlag, PosFlag>; def fconstant_string_class_EQ : Joined<["-"], "fconstant-string-class=">, Group; def fconstexpr_depth_EQ : Joined<["-"], "fconstexpr-depth=">, Group, Flags<[CC1Option]>, @@ -1615,14 +1649,17 @@ def fcrash_diagnostics_dir : Joined<["-"], "fcrash-diagnostics-dir=">, def fcreate_profile : Flag<["-"], "fcreate-profile">, Group; defm cxx_exceptions: BoolFOption<"cxx-exceptions", LangOpts<"CXXExceptions">, DefaultFalse, - PosFlag, NegFlag>; + PosFlag, + NegFlag>; defm async_exceptions: BoolFOption<"async-exceptions", LangOpts<"EHAsynch">, DefaultFalse, - PosFlag, NegFlag>; + PosFlag, + NegFlag>; defm cxx_modules : BoolFOption<"cxx-modules", LangOpts<"CPlusPlusModules">, Default, - NegFlag, PosFlag, - BothFlags<[NoXarchOption], " modules for C++">>, + NegFlag, + PosFlag, + BothFlags<[NoXarchOption], [ClangOption], " modules for C++">>, ShouldParseIf; def fdebug_pass_arguments : Flag<["-"], "fdebug-pass-arguments">, Group; def fdebug_pass_structure : Flag<["-"], "fdebug-pass-structure">, Group; @@ -1641,7 +1678,7 @@ def fdiagnostics_print_source_range_info : Flag<["-"], "fdiagnostics-print-sourc MarshallingInfoFlag>; defm diagnostics_show_hotness : BoolFOption<"diagnostics-show-hotness", CodeGenOpts<"DiagnosticsWithHotness">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fdiagnostics_hotness_threshold_EQ : Joined<["-"], "fdiagnostics-hotness-threshold=">, Group, Flags<[CC1Option]>, MetaVarName<"">, @@ -1652,10 +1689,11 @@ def fdiagnostics_misexpect_tolerance_EQ : Joined<["-"], "fdiagnostics-misexpect- HelpText<"Prevent misexpect diagnostics from being output if the profile counts are within N% of the expected. ">; defm diagnostics_show_option : BoolFOption<"diagnostics-show-option", DiagnosticOpts<"ShowOptionNames">, DefaultTrue, - NegFlag, PosFlag>; + NegFlag, + PosFlag>; defm diagnostics_show_note_include_stack : BoolFOption<"diagnostics-show-note-include-stack", DiagnosticOpts<"ShowNoteIncludeStack">, DefaultFalse, - PosFlag, + PosFlag, NegFlag, BothFlags<[CC1Option]>>; def fdiagnostics_format_EQ : Joined<["-"], "fdiagnostics-format=">, Group; def fdiagnostics_show_category_EQ : Joined<["-"], "fdiagnostics-show-category=">, Group; @@ -1665,7 +1703,7 @@ def fdiagnostics_show_template_tree : Flag<["-"], "fdiagnostics-show-template-tr MarshallingInfoFlag>; defm safe_buffer_usage_suggestions : BoolFOption<"safe-buffer-usage-suggestions", DiagnosticOpts<"ShowSafeBufferUsageSuggestions">, DefaultFalse, - PosFlag, NegFlag>; def fdiscard_value_names : Flag<["-"], "fdiscard-value-names">, Group, @@ -1674,16 +1712,18 @@ def fno_discard_value_names : Flag<["-"], "fno-discard-value-names">, Group, Flags<[NoXarchOption]>; defm dollars_in_identifiers : BoolFOption<"dollars-in-identifiers", LangOpts<"DollarIdents">, Default, - PosFlag, NegFlag, - BothFlags<[CC1Option], " '$' in identifiers">>; + PosFlag, + NegFlag, + BothFlags<[CC1Option], [ClangOption], " '$' in identifiers">>; def fdwarf2_cfi_asm : Flag<["-"], "fdwarf2-cfi-asm">, Group; def fno_dwarf2_cfi_asm : Flag<["-"], "fno-dwarf2-cfi-asm">, Group; defm dwarf_directory_asm : BoolFOption<"dwarf-directory-asm", CodeGenOpts<"NoDwarfDirectoryAsm">, DefaultFalse, - NegFlag, PosFlag>; + NegFlag, + PosFlag>; defm elide_constructors : BoolFOption<"elide-constructors", LangOpts<"ElideConstructors">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; def fno_elide_type : Flag<["-"], "fno-elide-type">, Group, Flags<[CC1Option]>, @@ -1697,14 +1737,15 @@ def femit_all_decls : Flag<["-"], "femit-all-decls">, Group, Flags<[CC1 MarshallingInfoFlag>; defm emulated_tls : BoolFOption<"emulated-tls", CodeGenOpts<"EmulatedTLS">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fencoding_EQ : Joined<["-"], "fencoding=">, Group; def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group, Flags<[CoreOption]>; defm exceptions : BoolFOption<"exceptions", LangOpts<"Exceptions">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " support for exception handling">>; + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " support for exception handling">>; def fdwarf_exceptions : Flag<["-"], "fdwarf-exceptions">, Group, HelpText<"Use DWARF style exceptions">; def fsjlj_exceptions : Flag<["-"], "fsjlj-exceptions">, Group, @@ -1781,12 +1822,12 @@ def ffp_exception_behavior_EQ : Joined<["-"], "ffp-exception-behavior=">, Group< MarshallingInfoEnum, "FPE_Default">; defm fast_math : BoolFOption<"fast-math", LangOpts<"FastMath">, DefaultFalse, - PosFlag, NegFlag>; defm math_errno : BoolFOption<"math-errno", LangOpts<"MathErrno">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>, ShouldParseIf; def fextend_args_EQ : Joined<["-"], "fextend-arguments=">, Group, @@ -1802,27 +1843,32 @@ def fsignaling_math : Flag<["-"], "fsignaling-math">, Group; def fno_signaling_math : Flag<["-"], "fno-signaling-math">, Group; defm jump_tables : BoolFOption<"jump-tables", CodeGenOpts<"NoUseJumpTables">, DefaultFalse, - NegFlag, PosFlag, - BothFlags<[], " jump tables for lowering switches">>; + NegFlag, + PosFlag, + BothFlags<[], [ClangOption], " jump tables for lowering switches">>; defm force_enable_int128 : BoolFOption<"force-enable-int128", TargetOpts<"ForceEnableInt128">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " support for int128_t type">>; + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " support for int128_t type">>; defm keep_static_consts : BoolFOption<"keep-static-consts", CodeGenOpts<"KeepStaticConsts">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[NoXarchOption], " static const variables even if unused">>; + PosFlag, + NegFlag, + BothFlags<[NoXarchOption], [ClangOption], " static const variables even if unused">>; defm keep_persistent_storage_variables : BoolFOption<"keep-persistent-storage-variables", CodeGenOpts<"KeepPersistentStorageVariables">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[NoXarchOption], " keeping all variables that have a persistent storage duration, including global, static and thread-local variables, to guarantee that they can be directly addressed">>; + PosFlag, + NegFlag, + BothFlags<[NoXarchOption], [ClangOption], " keeping all variables that have a persistent storage duration, including global, static and thread-local variables, to guarantee that they can be directly addressed">>; defm fixed_point : BoolFOption<"fixed-point", LangOpts<"FixedPoint">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " fixed point types">>, ShouldParseIf; + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " fixed point types">>, ShouldParseIf; defm cxx_static_destructors : BoolFOption<"c++-static-destructors", LangOpts<"RegisterStaticDestructors">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; def fsymbol_partition_EQ : Joined<["-"], "fsymbol-partition=">, Group, Flags<[CC1Option]>, MarshallingInfoString>; @@ -1924,8 +1970,9 @@ def fno_sanitize_hwaddress_experimental_aliasing HelpText<"Disable aliasing mode in HWAddressSanitizer">; defm sanitize_memory_use_after_dtor : BoolOption<"f", "sanitize-memory-use-after-dtor", CodeGenOpts<"SanitizeMemoryUseAfterDtor">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " use-after-destroy detection in MemorySanitizer">>, + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " use-after-destroy detection in MemorySanitizer">>, Group; def fsanitize_address_field_padding : Joined<["-"], "fsanitize-address-field-padding=">, Group, @@ -1933,8 +1980,9 @@ def fsanitize_address_field_padding : Joined<["-"], "fsanitize-address-field-pad MarshallingInfoInt>; defm sanitize_address_use_after_scope : BoolOption<"f", "sanitize-address-use-after-scope", CodeGenOpts<"SanitizeAddressUseAfterScope">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " use-after-scope detection in AddressSanitizer">>, + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " use-after-scope detection in AddressSanitizer">>, Group; def sanitize_address_use_after_return_EQ : Joined<["-"], "fsanitize-address-use-after-return=">, @@ -1948,8 +1996,9 @@ def sanitize_address_use_after_return_EQ MarshallingInfoEnum, "Runtime">; defm sanitize_address_poison_custom_array_cookie : BoolOption<"f", "sanitize-address-poison-custom-array-cookie", CodeGenOpts<"SanitizeAddressPoisonCustomArrayCookie">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " poisoning array cookies when using custom operator new[] in AddressSanitizer">>, + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " poisoning array cookies when using custom operator new[] in AddressSanitizer">>, DocBrief<[{Enable "poisoning" array cookies when allocating arrays with a custom operator new\[\] in Address Sanitizer, preventing accesses to the cookies from user code. An array cookie is a small implementation-defined @@ -1964,14 +2013,14 @@ functions are always poisoned.}]>, Group; defm sanitize_address_globals_dead_stripping : BoolOption<"f", "sanitize-address-globals-dead-stripping", CodeGenOpts<"SanitizeAddressGlobalsDeadStripping">, DefaultFalse, - PosFlag, - NegFlag>, + PosFlag, + NegFlag>, Group; defm sanitize_address_use_odr_indicator : BoolOption<"f", "sanitize-address-use-odr-indicator", CodeGenOpts<"SanitizeAddressUseOdrIndicator">, DefaultTrue, - PosFlag, - NegFlag>, + NegFlag>, Group; def sanitize_address_destructor_EQ : Joined<["-"], "fsanitize-address-destructor=">, @@ -1989,8 +2038,9 @@ defm sanitize_memory_param_retval : BoolFOption<"sanitize-memory-param-retval", CodeGenOpts<"SanitizeMemoryParamRetval">, DefaultTrue, - PosFlag, NegFlag, - BothFlags<[], " detection of uninitialized parameters and return values">>; + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " detection of uninitialized parameters and return values">>; //// Note: This flag was introduced when it was necessary to distinguish between // ABI for correct codegen. This is no longer needed, but the flag is // not removed since targeting either ABI will behave the same. @@ -2032,7 +2082,8 @@ def fno_sanitize_undefined_trap_on_error Alias, AliasArgs<["undefined"]>; defm sanitize_minimal_runtime : BoolOption<"f", "sanitize-minimal-runtime", CodeGenOpts<"SanitizeMinimalRuntime">, DefaultFalse, - PosFlag, NegFlag>, + PosFlag, + NegFlag>, Group; def fsanitize_link_runtime : Flag<["-"], "fsanitize-link-runtime">, Group; @@ -2044,8 +2095,9 @@ def fno_sanitize_link_cxx_runtime : Flag<["-"], "fno-sanitize-link-c++-runtime"> Group; defm sanitize_cfi_cross_dso : BoolOption<"f", "sanitize-cfi-cross-dso", CodeGenOpts<"SanitizeCfiCrossDso">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " control flow integrity (CFI) checks for cross-DSO calls.">>, + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " control flow integrity (CFI) checks for cross-DSO calls.">>, Group; def fsanitize_cfi_icall_generalize_pointers : Flag<["-"], "fsanitize-cfi-icall-generalize-pointers">, Group, @@ -2057,13 +2109,15 @@ def fsanitize_cfi_icall_normalize_integers : Flag<["-"], "fsanitize-cfi-icall-ex MarshallingInfoFlag>; defm sanitize_cfi_canonical_jump_tables : BoolOption<"f", "sanitize-cfi-canonical-jump-tables", CodeGenOpts<"SanitizeCfiCanonicalJumpTables">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " the jump table addresses canonical in the symbol table">>, + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " the jump table addresses canonical in the symbol table">>, Group; defm sanitize_stats : BoolOption<"f", "sanitize-stats", CodeGenOpts<"SanitizeStats">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " sanitizer statistics gathering.">>, + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " sanitizer statistics gathering.">>, Group; def fsanitize_thread_memory_access : Flag<["-"], "fsanitize-thread-memory-access">, Group, @@ -2105,24 +2159,24 @@ def fassociative_math : Flag<["-"], "fassociative-math">, Group; def fno_associative_math : Flag<["-"], "fno-associative-math">, Group; defm reciprocal_math : BoolFOption<"reciprocal-math", LangOpts<"AllowRecip">, DefaultFalse, - PosFlag, NegFlag>; defm approx_func : BoolFOption<"approx-func", LangOpts<"ApproxFunc">, DefaultFalse, - PosFlag, NegFlag>; defm finite_math_only : BoolFOption<"finite-math-only", LangOpts<"FiniteMathOnly">, DefaultFalse, - PosFlag, NegFlag>; defm signed_zeros : BoolFOption<"signed-zeros", LangOpts<"NoSignedZero">, DefaultFalse, - NegFlag, PosFlag>; def fhonor_nans : Flag<["-"], "fhonor-nans">, Group, @@ -2156,13 +2210,13 @@ def ffp_contract : Joined<["-"], "ffp-contract=">, Group, defm strict_float_cast_overflow : BoolFOption<"strict-float-cast-overflow", CodeGenOpts<"StrictFloatCastOverflow">, DefaultTrue, - NegFlag, - PosFlag>; + PosFlag>; defm protect_parens : BoolFOption<"protect-parens", LangOpts<"ProtectParens">, DefaultFalse, - PosFlag, NegFlag>; @@ -2172,17 +2226,19 @@ def fno_for_scope : Flag<["-"], "fno-for-scope">, Group; defm rewrite_imports : BoolFOption<"rewrite-imports", PreprocessorOutputOpts<"RewriteImports">, DefaultFalse, - PosFlag, NegFlag>; + PosFlag, + NegFlag>; defm rewrite_includes : BoolFOption<"rewrite-includes", PreprocessorOutputOpts<"RewriteIncludes">, DefaultFalse, - PosFlag, NegFlag>; + PosFlag, + NegFlag>; defm directives_only : OptInCC1FFlag<"directives-only", "">; defm delete_null_pointer_checks : BoolFOption<"delete-null-pointer-checks", CodeGenOpts<"NullPointerIsValid">, DefaultFalse, - NegFlag, - PosFlag, + NegFlag, + PosFlag, BothFlags<[CoreOption]>>, DocBrief<[{When enabled, treat null pointer dereference, creation of a reference to null, or passing a null pointer to a function parameter annotated with the "nonnull" @@ -2192,10 +2248,11 @@ branches accordingly.) On by default.}]>; defm use_line_directives : BoolFOption<"use-line-directives", PreprocessorOutputOpts<"UseLineDirectives">, DefaultFalse, - PosFlag, NegFlag>; + PosFlag, + NegFlag>; defm minimize_whitespace : BoolFOption<"minimize-whitespace", PreprocessorOutputOpts<"MinimizeWhitespace">, DefaultFalse, - PosFlag, Default, - PosFlag, + PosFlag, NegFlag, BothFlags<[CC1Option]>>; defm gnu89_inline : BoolFOption<"gnu89-inline", LangOpts<"GNUInline">, Default, - PosFlag, + PosFlag, NegFlag>, ShouldParseIf; def fgnu_runtime : Flag<["-"], "fgnu-runtime">, Group, HelpText<"Generate output compatible with the standard GNU Objective-C runtime">; @@ -2241,7 +2298,7 @@ def finline_max_stacksize_EQ MarshallingInfoInt, "UINT_MAX">; defm jmc : BoolFOption<"jmc", CodeGenOpts<"JMCInstrument">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fglobal_isel : Flag<["-"], "fglobal-isel">, Group, HelpText<"Enables the global instruction selector">; @@ -2282,7 +2339,7 @@ def mindirect_branch_cs_prefix : Flag<["-"], "mindirect-branch-cs-prefix">, defm xray_instrument : BoolFOption<"xray-instrument", LangOpts<"XRayInstrument">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fxray_instruction_threshold_EQ : @@ -2313,26 +2370,26 @@ def fxray_modes : defm xray_always_emit_customevents : BoolFOption<"xray-always-emit-customevents", LangOpts<"XRayAlwaysEmitCustomEvents">, DefaultFalse, - PosFlag, NegFlag>; defm xray_always_emit_typedevents : BoolFOption<"xray-always-emit-typedevents", LangOpts<"XRayAlwaysEmitTypedEvents">, DefaultFalse, - PosFlag, NegFlag>; defm xray_ignore_loops : BoolFOption<"xray-ignore-loops", CodeGenOpts<"XRayIgnoreLoops">, DefaultFalse, - PosFlag, NegFlag>; defm xray_function_index : BoolFOption<"xray-function-index", CodeGenOpts<"XRayFunctionIndex">, DefaultTrue, - PosFlag, - NegFlag, + NegFlag>; def fxray_link_deps : Flag<["-"], "fxray-link-deps">, Group, @@ -2359,8 +2416,8 @@ def fxray_selected_function_group : defm fine_grained_bitfield_accesses : BoolOption<"f", "fine-grained-bitfield-accesses", CodeGenOpts<"FineGrainedBitfieldAccesses">, DefaultFalse, - PosFlag, - NegFlag, + PosFlag, + NegFlag, BothFlags<[CC1Option]>>, Group; @@ -2402,9 +2459,9 @@ def flto : Flag<["-"], "flto">, Flags<[CoreOption, CC1Option, FC1Option, FlangOp Alias, AliasArgs<["full"]>, HelpText<"Enable LTO in 'full' mode">; defm unified_lto : BoolFOption<"unified-lto", CodeGenOpts<"UnifiedLTO">, DefaultFalse, - PosFlag, - NegFlag, - BothFlags<[CC1Option], "">>; + PosFlag, + NegFlag, + BothFlags<[CC1Option], [ClangOption], "">>; def fno_lto : Flag<["-"], "fno-lto">, Flags<[CoreOption, CC1Option]>, Group, HelpText<"Disable LTO mode (default)">; def foffload_lto_EQ : Joined<["-"], "foffload-lto=">, Flags<[CoreOption]>, Group, @@ -2427,9 +2484,9 @@ def fthin_link_bitcode_EQ : Joined<["-"], "fthin-link-bitcode=">, MarshallingInfoString>; defm fat_lto_objects : BoolFOption<"fat-lto-objects", CodeGenOpts<"FatLTO">, DefaultFalse, - PosFlag, - NegFlag, - BothFlags<[CC1Option], " fat LTO object support">>; + PosFlag, + NegFlag, + BothFlags<[CC1Option], [ClangOption], " fat LTO object support">>; def fmacro_backtrace_limit_EQ : Joined<["-"], "fmacro-backtrace-limit=">, Group, Flags<[NoXarchOption, CC1Option, CoreOption]>, HelpText<"Set the maximum number of entries to print in a macro expansion backtrace (0 = no limit)">, @@ -2441,8 +2498,9 @@ def fcaret_diagnostics_max_lines_EQ : MarshallingInfoInt, "DiagnosticOptions::DefaultSnippetLineLimit">; defm merge_all_constants : BoolFOption<"merge-all-constants", CodeGenOpts<"MergeAllConstants">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " merging of constants">>; + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " merging of constants">>; def fmessage_length_EQ : Joined<["-"], "fmessage-length=">, Group, Flags<[CC1Option]>, HelpText<"Format message diagnostics so that they fit within N columns">, MarshallingInfoInt>; @@ -2460,7 +2518,8 @@ def fms_extensions : Flag<["-"], "fms-extensions">, Group, Flags<[CC1Op MarshallingInfoFlag>, ImpliedByAnyOf<[fms_compatibility.KeyPath]>; defm asm_blocks : BoolFOption<"asm-blocks", LangOpts<"AsmBlocks">, Default, - PosFlag, NegFlag>; + PosFlag, + NegFlag>; def fms_volatile : Flag<["-"], "fms-volatile">, Group, Flags<[CC1Option]>, MarshallingInfoFlag>; def fmsc_version : Joined<["-"], "fmsc-version=">, Group, Flags<[NoXarchOption, CoreOption]>, @@ -2484,8 +2543,8 @@ def fms_omit_default_lib : Joined<["-"], "fms-omit-default-lib">, Group, Flags<[NoXarchOption, CoreOption]>; defm delayed_template_parsing : BoolFOption<"delayed-template-parsing", LangOpts<"DelayedTemplateParsing">, DefaultFalse, - PosFlag, - NegFlag, + PosFlag, + NegFlag, BothFlags<[CoreOption]>>; def fms_memptr_rep_EQ : Joined<["-"], "fms-memptr-rep=">, Group, Flags<[CC1Option]>, Values<"single,multiple,virtual">, NormalizedValuesScope<"LangOptions">, @@ -2504,9 +2563,9 @@ def fms_kernel : Flag<["-"], "fms-kernel">, Group, Flags<[CC1Option, No // term here. defm declspec : BoolOption<"f", "declspec", LangOpts<"DeclSpecKeyword">, DefaultFalse, - PosFlag, - NegFlag, - BothFlags<[CC1Option], " __declspec as a keyword">>, Group; + PosFlag, + NegFlag, + BothFlags<[CC1Option], [ClangOption], " __declspec as a keyword">>, Group; def fmodules_cache_path : Joined<["-"], "fmodules-cache-path=">, Group, Flags<[NoXarchOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the module cache path">; @@ -2519,7 +2578,7 @@ def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", HeaderSearchOpts<"EnablePrebuiltImplicitModules">, DefaultFalse, - PosFlag, + PosFlag, NegFlag, BothFlags<[NoXarchOption, CC1Option]>>; def fmodule_output_EQ : Joined<["-"], "fmodule-output=">, Flags<[NoXarchOption, CC1Option]>, @@ -2553,8 +2612,8 @@ def fmodules_disable_diagnostic_validation : Flag<["-"], "fmodules-disable-diagn MarshallingInfoNegativeFlag>; defm modules_validate_system_headers : BoolOption<"f", "modules-validate-system-headers", HeaderSearchOpts<"ModulesValidateSystemHeaders">, DefaultFalse, - PosFlag, - NegFlag>, Group; + PosFlag, + NegFlag>, Group; def fno_modules_validate_textual_header_includes : Flag<["-"], "fno-modules-validate-textual-header-includes">, Group, Flags<[CC1Option, NoXarchOption]>, @@ -2592,7 +2651,7 @@ def fno_pch_validate_input_files_content: Group, Flags<[NoXarchOption]>; defm pch_instantiate_templates : BoolFOption<"pch-instantiate-templates", LangOpts<"PCHInstantiateTemplates">, DefaultFalse, - PosFlag, + PosFlag, NegFlag, BothFlags<[CC1Option, CoreOption]>>; defm pch_codegen: OptInCC1FFlag<"pch-codegen", "Generate ", "Do not generate ", "code for uses of this PCH that assumes an explicit object file will be built for the PCH">; @@ -2605,7 +2664,7 @@ def fimplicit_module_maps : Flag <["-"], "fimplicit-module-maps">, Group>; defm modules : BoolFOption<"modules", LangOpts<"Modules">, Default, - PosFlag, + PosFlag, NegFlag, BothFlags<[NoXarchOption, CoreOption]>>; def fmodule_maps : Flag <["-"], "fmodule-maps">, Flags<[CoreOption]>, Alias; def fmodule_name_EQ : Joined<["-"], "fmodule-name=">, Group, @@ -2633,16 +2692,17 @@ def fmodules_strict_decluse : Flag <["-"], "fmodules-strict-decluse">, Group>; defm modules_decluse : BoolFOption<"modules-decluse", LangOpts<"ModulesDeclUse">, Default, - PosFlag, + PosFlag, NegFlag, BothFlags<[NoXarchOption,CoreOption]>>; defm modules_search_all : BoolFOption<"modules-search-all", LangOpts<"ModulesSearchAll">, DefaultFalse, - PosFlag, + PosFlag, NegFlag, BothFlags<[NoXarchOption, CC1Option,CoreOption]>>, ShouldParseIf; defm implicit_modules : BoolFOption<"implicit-modules", LangOpts<"ImplicitModules">, DefaultTrue, - NegFlag, PosFlag, BothFlags<[NoXarchOption,CoreOption]>>; + NegFlag, + PosFlag, BothFlags<[NoXarchOption,CoreOption]>>; def fno_modules_check_relocated : Joined<["-"], "fno-modules-check-relocated">, Group, Flags<[CC1Option]>, HelpText<"Skip checks for relocated modules when loading PCM files">, @@ -2677,8 +2737,8 @@ def fno_common : Flag<["-"], "fno-common">, Group, Flags<[CC1Option]>, HelpText<"Compile common globals like normal definitions">; defm digraphs : BoolFOption<"digraphs", LangOpts<"Digraphs">, Default, - PosFlag', '<%', '%>', '%:', '%:%:' (default)">, - NegFlag', '<%', '%>', '%:', '%:%:'">, + PosFlag', '<%', '%>', '%:', '%:%:' (default)">, + NegFlag', '<%', '%>', '%:', '%:%:'">, BothFlags<[CC1Option]>>; def fno_eliminate_unused_debug_symbols : Flag<["-"], "fno-eliminate-unused-debug-symbols">, Group; def fno_inline_functions : Flag<["-"], "fno-inline-functions">, Group, Flags<[CC1Option]>; @@ -2714,14 +2774,14 @@ def fno_objc_weak : Flag<["-"], "fno-objc-weak">, Group, Flags<[CC1Opti def fno_omit_frame_pointer : Flag<["-"], "fno-omit-frame-pointer">, Group; defm operator_names : BoolFOption<"operator-names", LangOpts<"CXXOperatorNames">, Default, - NegFlag, + NegFlag, PosFlag>; def fdiagnostics_absolute_paths : Flag<["-"], "fdiagnostics-absolute-paths">, Group, Flags<[CC1Option, CoreOption]>, HelpText<"Print absolute paths in diagnostics">, MarshallingInfoFlag>; defm diagnostics_show_line_numbers : BoolFOption<"diagnostics-show-line-numbers", DiagnosticOpts<"ShowLineNumbers">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; def fno_stack_protector : Flag<["-"], "fno-stack-protector">, Group, HelpText<"Disable the use of stack protectors">; @@ -2737,7 +2797,7 @@ def fno_temp_file : Flag<["-"], "fno-temp-file">, Group, MarshallingInfoNegativeFlag>; defm use_cxa_atexit : BoolFOption<"use-cxa-atexit", CodeGenOpts<"CXAAtExit">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; def fno_unwind_tables : Flag<["-"], "fno-unwind-tables">, Group; def fno_verbose_asm : Flag<["-"], "fno-verbose-asm">, Group, Flags<[CC1Option]>, @@ -2749,35 +2809,37 @@ def fobjc_arc : Flag<["-"], "fobjc-arc">, Group, Flags<[CC1Option]>, def fno_objc_arc : Flag<["-"], "fno-objc-arc">, Group; defm objc_encode_cxx_class_template_spec : BoolFOption<"objc-encode-cxx-class-template-spec", LangOpts<"EncodeCXXClassTemplateSpec">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; defm objc_convert_messages_to_runtime_calls : BoolFOption<"objc-convert-messages-to-runtime-calls", CodeGenOpts<"ObjCConvertMessagesToRuntimeCalls">, DefaultTrue, - NegFlag, PosFlag>; + NegFlag, + PosFlag>; defm objc_arc_exceptions : BoolFOption<"objc-arc-exceptions", CodeGenOpts<"ObjCAutoRefCountExceptions">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fobjc_atdefs : Flag<["-"], "fobjc-atdefs">, Group; def fobjc_call_cxx_cdtors : Flag<["-"], "fobjc-call-cxx-cdtors">, Group; defm objc_exceptions : BoolFOption<"objc-exceptions", LangOpts<"ObjCExceptions">, DefaultFalse, - PosFlag, NegFlag>; + PosFlag, + NegFlag>; defm application_extension : BoolFOption<"application-extension", LangOpts<"AppExt">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; defm relaxed_template_template_args : BoolFOption<"relaxed-template-template-args", LangOpts<"RelaxedTemplateTemplateArgs">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; defm sized_deallocation : BoolFOption<"sized-deallocation", LangOpts<"SizedDeallocation">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; defm aligned_allocation : BoolFOption<"aligned-allocation", LangOpts<"AlignedAllocation">, Default, - PosFlag, + PosFlag, NegFlag, BothFlags<[CC1Option]>>; def fnew_alignment_EQ : Joined<["-"], "fnew-alignment=">, HelpText<"Specifies the largest alignment guaranteed by '::operator new(size_t)'">, @@ -2792,7 +2854,7 @@ def fobjc_legacy_dispatch : Flag<["-"], "fobjc-legacy-dispatch">, Group def fobjc_new_property : Flag<["-"], "fobjc-new-property">, Group; defm objc_infer_related_result_type : BoolFOption<"objc-infer-related-result-type", LangOpts<"ObjCInferRelatedResultType">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; def fobjc_link_runtime: Flag<["-"], "fobjc-link-runtime">, Group; def fobjc_weak : Flag<["-"], "fobjc-weak">, Group, Flags<[CC1Option]>, @@ -2814,9 +2876,9 @@ def fobjc_disable_direct_methods_for_testing : MarshallingInfoFlag>; defm objc_avoid_heapify_local_blocks : BoolFOption<"objc-avoid-heapify-local-blocks", CodeGenOpts<"ObjCAvoidHeapifyLocalBlocks">, DefaultFalse, - PosFlag, - NegFlag, - BothFlags<[CC1Option, NoDriverOption], " to avoid heapifying local blocks">>; + PosFlag, + NegFlag, + BothFlags<[CC1Option, NoDriverOption], [ClangOption], " to avoid heapifying local blocks">>; def fomit_frame_pointer : Flag<["-"], "fomit-frame-pointer">, Group, HelpText<"Omit the frame pointer from functions that don't need it. " @@ -2830,9 +2892,9 @@ def fopenmp_version_EQ : Joined<["-"], "fopenmp-version=">, Group, Flag HelpText<"Set OpenMP version (e.g. 45 for OpenMP 4.5, 50 for OpenMP 5.0). Default value is 50 for Clang and 11 for Flang">; defm openmp_extensions: BoolFOption<"openmp-extensions", LangOpts<"OpenMPExtensions">, DefaultTrue, - PosFlag, - NegFlag>; def fopenmp_EQ : Joined<["-"], "fopenmp=">, Group; def fopenmp_use_tls : Flag<["-"], "fopenmp-use-tls">, Group, @@ -2928,7 +2990,8 @@ def fno_openmp_target_new_runtime : Flag<["-"], "fno-openmp-target-new-runtime"> Group, Flags<[CC1Option, HelpHidden]>; defm openmp_optimistic_collapse : BoolFOption<"openmp-optimistic-collapse", LangOpts<"OpenMPOptimisticCollapse">, DefaultFalse, - PosFlag, NegFlag, BothFlags<[NoArgumentUnused, HelpHidden]>>; + PosFlag, + NegFlag, BothFlags<[NoArgumentUnused, HelpHidden]>>; def static_openmp: Flag<["-"], "static-openmp">, HelpText<"Use the static host OpenMP runtime while linking.">; def fopenmp_new_driver : Flag<["-"], "fopenmp-new-driver">, Flags<[HelpHidden]>, @@ -2941,7 +3004,8 @@ def fno_optimize_sibling_calls : Flag<["-"], "fno-optimize-sibling-calls">, Grou def foptimize_sibling_calls : Flag<["-"], "foptimize-sibling-calls">, Group; defm escaping_block_tail_calls : BoolFOption<"escaping-block-tail-calls", CodeGenOpts<"NoEscapingBlockTailCalls">, DefaultFalse, - NegFlag, PosFlag>; + NegFlag, + PosFlag>; def force__cpusubtype__ALL : Flag<["-"], "force_cpusubtype_ALL">; def force__flat__namespace : Flag<["-"], "force_flat_namespace">; def force__load : Separate<["-"], "force_load">; @@ -2958,7 +3022,7 @@ def fmax_type_align_EQ : Joined<["-"], "fmax-type-align=">, Group, Flag def fno_max_type_align : Flag<["-"], "fno-max-type-align">, Group; defm pascal_strings : BoolFOption<"pascal-strings", LangOpts<"PascalStrings">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; // Note: This flag has different semantics in the driver and in -cc1. The driver accepts -fpatchable-function-entry=M,N // and forwards it to -cc1 as -fpatchable-function-entry=M and -fpatchable-function-entry-offset=N. In -cc1, both flags @@ -2984,15 +3048,15 @@ def fno_direct_access_external_data : Flag<["-"], "fno-direct-access-external-da HelpText<"Use GOT indirection to reference external data symbols">; defm plt : BoolFOption<"plt", CodeGenOpts<"NoPLT">, DefaultFalse, - NegFlag, + NegFlag, PosFlag>; defm ropi : BoolFOption<"ropi", LangOpts<"ROPI">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; defm rwpi : BoolFOption<"rwpi", LangOpts<"RWPI">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fplugin_EQ : Joined<["-"], "fplugin=">, Group, Flags<[NoXarchOption]>, MetaVarName<"">, HelpText<"Load the named plugin (dynamic shared object)">; @@ -3005,7 +3069,7 @@ def fpass_plugin_EQ : Joined<["-"], "fpass-plugin=">, MarshallingInfoStringVector>; defm preserve_as_comments : BoolFOption<"preserve-as-comments", CodeGenOpts<"PreserveAsmComments">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; def framework : Separate<["-"], "framework">, Flags<[LinkerInput]>; def frandom_seed_EQ : Joined<["-"], "frandom-seed=">, Group; @@ -3013,22 +3077,23 @@ def freg_struct_return : Flag<["-"], "freg-struct-return">, Group, Flag HelpText<"Override the default ABI to return small structs in registers">; defm rtti : BoolFOption<"rtti", LangOpts<"RTTI">, Default, - NegFlag, + NegFlag, PosFlag>, ShouldParseIf; defm rtti_data : BoolFOption<"rtti-data", LangOpts<"RTTIData">, Default, - NegFlag, + NegFlag, PosFlag>, ShouldParseIf; def : Flag<["-"], "fsched-interblock">, Group; defm short_enums : BoolFOption<"short-enums", LangOpts<"ShortEnums">, DefaultFalse, - PosFlag, NegFlag>; defm char8__t : BoolFOption<"char8_t", LangOpts<"Char8">, Default, - PosFlag, NegFlag, - BothFlags<[CC1Option], " C++ builtin type char8_t">>; + PosFlag, + NegFlag, + BothFlags<[CC1Option], [ClangOption], " C++ builtin type char8_t">>; def fshort_wchar : Flag<["-"], "fshort-wchar">, Group, HelpText<"Force wchar_t to be a short unsigned int">; def fno_short_wchar : Flag<["-"], "fno-short-wchar">, Group, @@ -3040,33 +3105,36 @@ def fshow_overloads_EQ : Joined<["-"], "fshow-overloads=">, Group, Flag MarshallingInfoEnum, "Ovl_All">; defm show_column : BoolFOption<"show-column", DiagnosticOpts<"ShowColumn">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; defm show_source_location : BoolFOption<"show-source-location", DiagnosticOpts<"ShowLocation">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; defm spell_checking : BoolFOption<"spell-checking", LangOpts<"SpellChecking">, DefaultTrue, - NegFlag, PosFlag>; + NegFlag, + PosFlag>; def fspell_checking_limit_EQ : Joined<["-"], "fspell-checking-limit=">, Group, Flags<[CC1Option]>, HelpText<"Set the maximum number of times to perform spell checking on unrecognized identifiers (0 = no limit)">, MarshallingInfoInt, "DiagnosticOptions::DefaultSpellCheckingLimit">; def fsigned_bitfields : Flag<["-"], "fsigned-bitfields">, Group; defm signed_char : BoolFOption<"signed-char", LangOpts<"CharIsSigned">, DefaultTrue, - NegFlag, PosFlag>, + NegFlag, + PosFlag>, ShouldParseIf; defm split_stack : BoolFOption<"split-stack", CodeGenOpts<"EnableSegmentedStacks">, DefaultFalse, - NegFlag, - PosFlag>; + NegFlag, + PosFlag>; def fstack_protector_all : Flag<["-"], "fstack-protector-all">, Group, HelpText<"Enable stack protectors for all functions">; defm stack_clash_protection : BoolFOption<"stack-clash-protection", CodeGenOpts<"StackClashProtector">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " stack clash protection">>, + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " stack clash protection">>, DocBrief<"Instrument stack allocation to prevent stack clash attacks">; def fstack_protector_strong : Flag<["-"], "fstack-protector-strong">, Group, HelpText<"Enable stack protectors for some functions vulnerable to stack smashing. " @@ -3111,7 +3179,7 @@ def fstrict_enums : Flag<["-"], "fstrict-enums">, Group, Flags<[CC1Opti MarshallingInfoFlag>; defm strict_vtable_pointers : BoolFOption<"strict-vtable-pointers", CodeGenOpts<"StrictVTablePointers">, DefaultFalse, - PosFlag, NegFlag>; def fstrict_overflow : Flag<["-"], "fstrict-overflow">, Group; @@ -3178,7 +3246,7 @@ def Wframe_larger_than : Flag<["-"], "Wframe-larger-than">, Alias, Alias; defm threadsafe_statics : BoolFOption<"threadsafe-statics", LangOpts<"ThreadsafeStatics">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; def ftime_report : Flag<["-"], "ftime-report">, Group, Flags<[CC1Option]>, MarshallingInfoFlag>; @@ -3226,7 +3294,8 @@ def fno_unroll_loops : Flag<["-"], "fno-unroll-loops">, Group, HelpText<"Turn off loop unroller">, Flags<[CC1Option]>; defm reroll_loops : BoolFOption<"reroll-loops", CodeGenOpts<"RerollLoops">, DefaultFalse, - PosFlag, NegFlag>; + PosFlag, + NegFlag>; def ffinite_loops: Flag<["-"], "ffinite-loops">, Group, HelpText<"Assume all loops are finite.">, Flags<[CC1Option]>; def fno_finite_loops: Flag<["-"], "fno-finite-loops">, Group, @@ -3242,11 +3311,12 @@ def fno_unsigned_char : Flag<["-"], "fno-unsigned-char">; def funwind_tables : Flag<["-"], "funwind-tables">, Group; defm register_global_dtors_with_atexit : BoolFOption<"register-global-dtors-with-atexit", CodeGenOpts<"RegisterGlobalDtorsWithAtExit">, DefaultFalse, - PosFlag, NegFlag, - BothFlags<[], " atexit or __cxa_atexit to register global destructors">>; + PosFlag, + NegFlag, + BothFlags<[], [ClangOption], " atexit or __cxa_atexit to register global destructors">>; defm use_init_array : BoolFOption<"use-init-array", CodeGenOpts<"UseInitArray">, DefaultTrue, - NegFlag, + NegFlag, PosFlag>; def fno_var_tracking : Flag<["-"], "fno-var-tracking">, Group; def fverbose_asm : Flag<["-"], "fverbose-asm">, Group, @@ -3254,7 +3324,7 @@ def fverbose_asm : Flag<["-"], "fverbose-asm">, Group, def dA : Flag<["-"], "dA">, Alias; defm visibility_from_dllstorageclass : BoolFOption<"visibility-from-dllstorageclass", LangOpts<"VisibilityFromDLLStorageClass">, DefaultFalse, - PosFlag, + PosFlag, NegFlag>; def fvisibility_dllexport_EQ : Joined<["-"], "fvisibility-dllexport=">, Group, Flags<[CC1Option]>, HelpText<"The visibility for dllexport definitions [-fvisibility-from-dllstorageclass]">, @@ -3277,13 +3347,13 @@ def fvisibility_EQ : Joined<["-"], "fvisibility=">, Group, Flags<[CC1Op MarshallingInfoVisibility, "DefaultVisibility">; defm visibility_inlines_hidden : BoolFOption<"visibility-inlines-hidden", LangOpts<"InlineVisibilityHidden">, DefaultFalse, - PosFlag