diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 8a300cbd31bb..d3f0ccb09ef4 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -66,26 +66,6 @@ class DocFlatten { bit DocFlatten = 1; } // GCC compatibility. class IgnoredGCCCompat : Flags<[HelpHidden]> {} -// A boolean option which is opt-in in CC1. The positive option exists in CC1 and -// Args.hasArg(OPT_ffoo) is used to check that the flag is enabled. -// This is useful if the option is usually disabled. -multiclass OptInFFlag flags=[]> { - def f#NAME : Flag<["-"], "f"#name>, Flags, - HelpText; - def fno_#NAME : Flag<["-"], "fno-"#name>, Flags, - HelpText; -} - -// A boolean option which is opt-out in CC1. The negative option exists in CC1 and -// Args.hasArg(OPT_fno_foo) is used to check that the flag is disabled. -multiclass OptOutFFlag flags=[]> { - def f#NAME : Flag<["-"], "f"#name>, Flags, HelpText; - def fno_ #NAME : Flag<["-"], "fno-"#name>, Flags, - HelpText; -} - ///////// // Groups @@ -246,6 +226,27 @@ def mno_mpx : Flag<["-"], "mno-mpx">, Group; def clang_ignored_gcc_optimization_f_Group : OptionGroup< "">, Group, Flags<[Ignored]>; +// A boolean option which is opt-in in CC1. The positive option exists in CC1 and +// Args.hasArg(OPT_ffoo) is used to check that the flag is enabled. +// This is useful if the option is usually disabled. +multiclass OptInFFlag flags=[]> { + def f#NAME : Flag<["-"], "f"#name>, Flags, + Group, HelpText; + def fno_#NAME : Flag<["-"], "fno-"#name>, Flags, + Group, HelpText; +} + +// A boolean option which is opt-out in CC1. The negative option exists in CC1 and +// Args.hasArg(OPT_fno_foo) is used to check that the flag is disabled. +multiclass OptOutFFlag flags=[]> { + def f#NAME : Flag<["-"], "f"#name>, Flags, + Group, HelpText; + def fno_#NAME : Flag<["-"], "fno-"#name>, Flags, + Group, HelpText; +} + ///////// // Options @@ -639,9 +640,7 @@ def fhip_dump_offload_linker_script : Flag<["-"], "fhip-dump-offload-linker-scri Group, Flags<[NoArgumentUnused, HelpHidden]>; defm hip_new_launch_api : OptInFFlag<"hip-new-launch-api", "Use new kernel launching API for HIP">; -def fgpu_allow_device_init : Flag<["-"], "fgpu-allow-device-init">, - Flags<[CC1Option]>, HelpText<"Allow device side init function in HIP">; -def fno_gpu_allow_device_init : Flag<["-"], "fno-gpu-allow-device-init">; +defm gpu_allow_device_init : OptInFFlag<"gpu-allow-device-init", "Allow device side init function in HIP">; def gpu_max_threads_per_block_EQ : Joined<["--"], "gpu-max-threads-per-block=">, Flags<[CC1Option]>, HelpText<"Default max threads per block for kernel launch bounds for HIP">; @@ -692,6 +691,7 @@ defm access_control : OptOutFFlag<"no-access-control", "", "Disable C++ access c def falign_functions : Flag<["-"], "falign-functions">, Group; def falign_functions_EQ : Joined<["-"], "falign-functions=">, Group; def fno_align_functions: Flag<["-"], "fno-align-functions">, Group; +defm allow_editor_placeholders : OptInFFlag<"allow-editor-placeholders", "Treat editor placeholders as valid source code">; def fallow_unsupported : Flag<["-"], "fallow-unsupported">, Group; def fapple_kext : Flag<["-"], "fapple-kext">, Group, Flags<[CC1Option]>, HelpText<"Use Apple's kernel extensions ABI">; @@ -767,12 +767,8 @@ def fdebug_compilation_dir : Separate<["-"], "fdebug-compilation-dir">, def fdebug_compilation_dir_EQ : Joined<["-"], "fdebug-compilation-dir=">, Group, Flags<[CC1Option, CC1AsOption, CoreOption]>, Alias; -def fdebug_info_for_profiling : Flag<["-"], "fdebug-info-for-profiling">, - Group, Flags<[CC1Option]>, - HelpText<"Emit extra debug info to make sample profile more accurate.">; -def fno_debug_info_for_profiling : Flag<["-"], "fno-debug-info-for-profiling">, - Group, Flags<[DriverOption]>, - HelpText<"Do not emit extra debug info for sample profiler.">; +defm debug_info_for_profiling : OptInFFlag<"debug-info-for-profiling", + "Emit extra debug info to make sample profile more accurate">; def fprofile_instr_generate : Flag<["-"], "fprofile-instr-generate">, Group, Flags<[CoreOption]>, HelpText<"Generate instrumented code to collect execution counts into default.profraw file (overridden by '=' form of option or LLVM_PROFILE_FILE env var)">; @@ -831,8 +827,7 @@ def forder_file_instrumentation : Flag<["-"], "forder-file-instrumentation">, HelpText<"Generate instrumented code to collect order file into default.profraw file (overridden by '=' form of option or LLVM_PROFILE_FILE env var)">; defm addrsig : OptInFFlag<"addrsig", "Emit", "Don't emit", " an address-significance table", [CoreOption]>; -def fblocks : Flag<["-"], "fblocks">, Group, Flags<[CoreOption, CC1Option]>, - HelpText<"Enable the 'blocks' language feature">; +defm blocks : OptInFFlag<"blocks", "Enable the 'blocks' language feature", "", "", [CoreOption]>; def fbootclasspath_EQ : Joined<["-"], "fbootclasspath=">, Group; def fborland_extensions : Flag<["-"], "fborland-extensions">, Group, Flags<[CC1Option]>, HelpText<"Accept non-standard constructs supported by the Borland compiler">; @@ -844,8 +839,7 @@ def fclang_abi_compat_EQ : Joined<["-"], "fclang-abi-compat=">, Group, MetaVarName<"">, Values<".,latest">, HelpText<"Attempt to match the ABI of Clang ">; def fclasspath_EQ : Joined<["-"], "fclasspath=">, Group; -def fcolor_diagnostics : Flag<["-"], "fcolor-diagnostics">, Group, - Flags<[CoreOption, CC1Option]>, HelpText<"Use colors in diagnostics">; +defm color_diagnostics : OptInFFlag<"color-diagnostics", "Enable", "Disable", " colors in diagnostics", [CoreOption]>; def fdiagnostics_color : Flag<["-"], "fdiagnostics-color">, Group, Flags<[CoreOption, DriverOption]>; def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">, Group; @@ -884,8 +878,7 @@ def fno_crash_diagnostics : Flag<["-"], "fno-crash-diagnostics">, Group; def fcrash_diagnostics_dir : Joined<["-"], "fcrash-diagnostics-dir=">, Group, Flags<[NoArgumentUnused, CoreOption]>; def fcreate_profile : Flag<["-"], "fcreate-profile">, Group; -def fcxx_exceptions: Flag<["-"], "fcxx-exceptions">, Group, - HelpText<"Enable C++ exceptions">, Flags<[CC1Option]>; +defm cxx_exceptions: OptInFFlag<"cxx-exceptions", "Enable C++ exceptions">; def fcxx_modules : Flag <["-"], "fcxx-modules">, Group, Flags<[DriverOption]>; def fdebug_pass_arguments : Flag<["-"], "fdebug-pass-arguments">, Group; @@ -935,8 +928,7 @@ def femulated_tls : Flag<["-"], "femulated-tls">, Group, Flags<[CC1Opti def fno_emulated_tls : Flag<["-"], "fno-emulated-tls">, Group, Flags<[CC1Option]>; def fencoding_EQ : Joined<["-"], "fencoding=">, Group; def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group, Flags<[CoreOption]>; -def fexceptions : Flag<["-"], "fexceptions">, Group, Flags<[CC1Option]>, - HelpText<"Enable support for exception handling">; +defm exceptions : OptInFFlag<"exceptions", "Enable", "Disable", " support for exception handling">; def fdwarf_exceptions : Flag<["-"], "fdwarf-exceptions">, Group, Flags<[CC1Option]>, HelpText<"Use DWARF style exceptions">; def fsjlj_exceptions : Flag<["-"], "fsjlj-exceptions">, Group, @@ -1197,12 +1189,9 @@ defm strict_float_cast_overflow : OptOutFFlag<"strict-float-cast-overflow", def ffor_scope : Flag<["-"], "ffor-scope">, Group; def fno_for_scope : Flag<["-"], "fno-for-scope">, Group; +defm rewrite_imports : OptInFFlag<"rewrite-imports", "">; defm rewrite_includes : OptInFFlag<"rewrite-includes", "">; -def frewrite_imports : Flag<["-"], "frewrite-imports">, Group, - Flags<[CC1Option]>; -def fno_rewrite_imports : Flag<["-"], "fno-rewrite-imports">, Group; - defm delete_null_pointer_checks : OptOutFFlag<"delete-null-pointer-checks", "Treat usage of null pointers as undefined behavior (default)", "Do not treat usage of null pointers as undefined behavior">; @@ -1465,14 +1454,11 @@ def fno_asynchronous_unwind_tables : Flag<["-"], "fno-asynchronous-unwind-tables def fno_assume_sane_operator_new : Flag<["-"], "fno-assume-sane-operator-new">, Group, HelpText<"Don't assume that C++'s global operator new can't alias any pointer">, Flags<[CC1Option]>; -def fno_blocks : Flag<["-"], "fno-blocks">, Group, Flags<[CoreOption]>; def fno_borland_extensions : Flag<["-"], "fno-borland-extensions">, Group; def fno_builtin : Flag<["-"], "fno-builtin">, Group, Flags<[CC1Option, CoreOption]>, HelpText<"Disable implicit builtin knowledge of functions">; def fno_builtin_ : Joined<["-"], "fno-builtin-">, Group, Flags<[CC1Option, CoreOption]>, HelpText<"Disable implicit builtin knowledge of a specific function">; -def fno_color_diagnostics : Flag<["-"], "fno-color-diagnostics">, Group, - Flags<[CoreOption, CC1Option]>; def fno_diagnostics_color : Flag<["-"], "fno-diagnostics-color">, Group, Flags<[CoreOption, DriverOption]>; def fno_common : Flag<["-"], "fno-common">, Group, Flags<[CC1Option]>, @@ -1480,7 +1466,6 @@ def fno_common : Flag<["-"], "fno-common">, Group, Flags<[CC1Option]>, def fno_constant_cfstrings : Flag<["-"], "fno-constant-cfstrings">, Group, Flags<[CC1Option]>, HelpText<"Disable creation of CodeFoundation-type constant strings">; -def fno_cxx_exceptions: Flag<["-"], "fno-cxx-exceptions">, Group; def fno_cxx_modules : Flag <["-"], "fno-cxx-modules">, Group, Flags<[DriverOption]>; def fno_diagnostics_fixit_info : Flag<["-"], "fno-diagnostics-fixit-info">, Group, @@ -1500,7 +1485,6 @@ def fno_dollars_in_identifiers : Flag<["-"], "fno-dollars-in-identifiers">, Grou def fno_elide_constructors : Flag<["-"], "fno-elide-constructors">, Group, HelpText<"Disable C++ copy constructor elision">, Flags<[CC1Option]>; def fno_eliminate_unused_debug_symbols : Flag<["-"], "fno-eliminate-unused-debug-symbols">, Group; -def fno_exceptions : Flag<["-"], "fno-exceptions">, Group; def fno_gnu_keywords : Flag<["-"], "fno-gnu-keywords">, Group, Flags<[CC1Option]>; def fno_inline_functions : Flag<["-"], "fno-inline-functions">, Group, Flags<[CC1Option]>; def fno_inline : Flag<["-"], "fno-inline">, Group, Flags<[CC1Option]>; @@ -1746,9 +1730,7 @@ def fshow_source_location : Flag<["-"], "fshow-source-location">, Group def fspell_checking : Flag<["-"], "fspell-checking">, Group; def fspell_checking_limit_EQ : Joined<["-"], "fspell-checking-limit=">, Group; def fsigned_bitfields : Flag<["-"], "fsigned-bitfields">, Group; -def fsigned_char : Flag<["-"], "fsigned-char">, Group; -def fno_signed_char : Flag<["-"], "fno-signed-char">, Group, - Flags<[CC1Option]>, HelpText<"Char is unsigned">; +defm signed_char : OptOutFFlag<"signed-char", "char is signed", "char is unsigned">; def fsplit_stack : Flag<["-"], "fsplit-stack">, Group; def fstack_protector_all : Flag<["-"], "fstack-protector-all">, Group, HelpText<"Enable stack protectors for all functions">; @@ -1869,10 +1851,7 @@ def funroll_loops : Flag<["-"], "funroll-loops">, Group, HelpText<"Turn on loop unroller">, Flags<[CC1Option]>; def fno_unroll_loops : Flag<["-"], "fno-unroll-loops">, Group, HelpText<"Turn off loop unroller">, Flags<[CC1Option]>; -def freroll_loops : Flag<["-"], "freroll-loops">, Group, - HelpText<"Turn on loop reroller">, Flags<[CC1Option]>; -def fno_reroll_loops : Flag<["-"], "fno-reroll-loops">, Group, - HelpText<"Turn off loop reroller">; +defm reroll_loops : OptInFFlag<"reroll-loops", "Turn on loop reroller">; def ftrigraphs : Flag<["-"], "ftrigraphs">, Group, HelpText<"Process trigraph sequences">, Flags<[CC1Option]>; def fno_trigraphs : Flag<["-"], "fno-trigraphs">, Group, @@ -1913,63 +1892,35 @@ def fwrapv : Flag<["-"], "fwrapv">, Group, Flags<[CC1Option]>, def fwritable_strings : Flag<["-"], "fwritable-strings">, Group, Flags<[CC1Option]>, HelpText<"Store string literals as writable data">; def fzero_initialized_in_bss : Flag<["-"], "fzero-initialized-in-bss">, Group; -def ffunction_sections : Flag<["-"], "ffunction-sections">, Group, - Flags<[CC1Option]>, - HelpText<"Place each function in its own section">; -def fno_function_sections : Flag<["-"], "fno-function-sections">, Group; +defm function_sections : OptInFFlag<"function-sections", "Place each function in its own section">; def fbasic_block_sections_EQ : Joined<["-"], "fbasic-block-sections=">, Group, Flags<[CC1Option, CC1AsOption]>, HelpText<"Place each function's basic blocks in unique sections (ELF Only) : all | labels | none | list=">, DocBrief<[{Generate labels for each basic block or place each basic block or a subset of basic blocks in its own section.}]>, Values<"all,labels,none,list=">; -def fdata_sections : Flag <["-"], "fdata-sections">, Group, - Flags<[CC1Option]>, HelpText<"Place each data in its own section">; -def fno_data_sections : Flag <["-"], "fno-data-sections">, Group; -def fstack_size_section : Flag<["-"], "fstack-size-section">, Group, Flags<[CC1Option]>, - HelpText<"Emit section containing metadata on function stack sizes">; -def fno_stack_size_section : Flag<["-"], "fno-stack-size-section">, Group, - HelpText<"Don't emit section containing metadata on function stack sizes">; +defm data_sections : OptInFFlag<"data-sections", "Place each data in its own section">; +defm stack_size_section : OptInFFlag<"stack-size-section", "Emit section containing metadata on function stack sizes">; -def funique_section_names : Flag <["-"], "funique-section-names">, - Group, - HelpText<"Use unique names for text and data sections">; -def fno_unique_section_names : Flag <["-"], "fno-unique-section-names">, - Group, Flags<[CC1Option]>; +defm unique_basic_block_section_names : OptInFFlag<"unique-basic-block-section-names", + "Use unique names for basic block sections (ELF Only)">; +defm unique_internal_linkage_names : OptInFFlag<"unique-internal-linkage-names", + "Uniqueify Internal Linkage Symbol Names by appending the MD5 hash of the module path">; +defm unique_section_names : OptOutFFlag<"unique-section-names", + "", "Don't use unique names for text and data sections">; -def funique_basic_block_section_names : Flag <["-"], "funique-basic-block-section-names">, - Group, Flags<[CC1Option]>, - HelpText<"Use unique names for basic block sections (ELF Only)">; -def fno_unique_basic_block_section_names : Flag <["-"], "fno-unique-basic-block-section-names">, - Group; - -def funique_internal_linkage_names : Flag <["-"], "funique-internal-linkage-names">, - Group, Flags<[CC1Option]>, - HelpText<"Uniqueify Internal Linkage Symbol Names by appending the MD5 hash of the module path">; -def fno_unique_internal_linkage_names : Flag <["-"], "fno-unique-internal-linkage-names">, - Group; - -def fstrict_return : Flag<["-"], "fstrict-return">, Group, - HelpText<"Always treat control flow paths that fall off the end of a " - "non-void function as unreachable">; -def fno_strict_return : Flag<["-"], "fno-strict-return">, Group, - Flags<[CC1Option]>; +defm strict_return : OptOutFFlag<"strict-return", "", + "Don't treat control flow paths that fall off the end of a non-void function as unreachable">; def fenable_matrix : Flag<["-"], "fenable-matrix">, Group, Flags<[CC1Option]>, HelpText<"Enable matrix data type and related builtin functions">; -def fallow_editor_placeholders : Flag<["-"], "fallow-editor-placeholders">, - Group, Flags<[CC1Option]>, - HelpText<"Treat editor placeholders as valid source code">; -def fno_allow_editor_placeholders : Flag<["-"], - "fno-allow-editor-placeholders">, Group; def fdebug_types_section: Flag <["-"], "fdebug-types-section">, Group, HelpText<"Place debug types in their own section (ELF Only)">; def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group; -def fdebug_ranges_base_address: Flag <["-"], "fdebug-ranges-base-address">, Group, - Flags<[CC1Option]>, HelpText<"Use DWARF base address selection entries in debug_ranges">; -def fno_debug_ranges_base_address: Flag <["-"], "fno-debug-ranges-base-address">, Group; +defm debug_ranges_base_address : OptInFFlag<"debug-ranges-base-address", + "Use DWARF base address selection entries in .debug_ranges">; def fsplit_dwarf_inlining: Flag <["-"], "fsplit-dwarf-inlining">, Group, HelpText<"Provide minimal debug info in the object/executable to facilitate online symbolication/stack traces in the absence of .dwo/.dwp files when using Split DWARF">; def fno_split_dwarf_inlining: Flag<["-"], "fno-split-dwarf-inlining">, Group, @@ -2474,10 +2425,7 @@ def msvr4_struct_return : Flag<["-"], "msvr4-struct-return">, def mvx : Flag<["-"], "mvx">, Group; def mno_vx : Flag<["-"], "mno-vx">, Group; -def fzvector : Flag<["-"], "fzvector">, Group, Flags<[CC1Option]>, - HelpText<"Enable System z vector language extension">; -def fno_zvector : Flag<["-"], "fno-zvector">, Group, - Flags<[CC1Option]>; +defm zvector : OptInFFlag<"zvector", "Enable System z vector language extension">; def mzvector : Flag<["-"], "mzvector">, Alias; def mno_zvector : Flag<["-"], "mno-zvector">, Alias;