diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -696,7 +696,7 @@ def Ofast : Joined<["-"], "Ofast">, Group, Flags<[CC1Option]>; def P : Flag<["-"], "P">, Flags<[CC1Option]>, Group, HelpText<"Disable linemarker output in -E mode">, - MarshallingInfoFlag<"PreprocessorOutputOpts.ShowLineMarkers", "true">, IsNegative; + MarshallingInfoNegativeFlag<"PreprocessorOutputOpts.ShowLineMarkers">; def Qy : Flag<["-"], "Qy">, Flags<[CC1Option]>, HelpText<"Emit metadata containing compiler name and version">; def Qn : Flag<["-"], "Qn">, Flags<[CC1Option]>, @@ -1212,7 +1212,7 @@ def : Flag<["-"], "fno-record-gcc-switches">, Alias; def fcommon : Flag<["-"], "fcommon">, Group, Flags<[CoreOption, CC1Option]>, HelpText<"Place uninitialized global variables in a common block">, - MarshallingInfoFlag<"CodeGenOpts.NoCommon", "true">, IsNegative; + MarshallingInfoNegativeFlag<"CodeGenOpts.NoCommon">; def fcompile_resource_EQ : Joined<["-"], "fcompile-resource=">, Group; defm complete_member_pointers : BoolOption<"complete-member-pointers", "LangOpts->CompleteMemberPointers", DefaultsToFalse, @@ -1856,7 +1856,7 @@ def fmodules_disable_diagnostic_validation : Flag<["-"], "fmodules-disable-diagnostic-validation">, Group, Flags<[CC1Option]>, HelpText<"Disable validation of the diagnostic options when loading the module">, - MarshallingInfoFlag<"HeaderSearchOpts->ModulesValidateDiagnosticOptions", "true">, IsNegative; + MarshallingInfoNegativeFlag<"HeaderSearchOpts->ModulesValidateDiagnosticOptions">; defm modules_validate_system_headers : BoolOption<"modules-validate-system-headers", "HeaderSearchOpts->ModulesValidateSystemHeaders", DefaultsToFalse, ChangedBy, @@ -1944,7 +1944,7 @@ def fno_asynchronous_unwind_tables : Flag<["-"], "fno-asynchronous-unwind-tables">, Group; 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]>, MarshallingInfoFlag<"CodeGenOpts.AssumeSaneOperatorNew", "true">, IsNegative; + Flags<[CC1Option]>, MarshallingInfoNegativeFlag<"CodeGenOpts.AssumeSaneOperatorNew">; 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]>, @@ -2022,7 +2022,7 @@ def fno_temp_file : Flag<["-"], "fno-temp-file">, Group, Flags<[CC1Option, CoreOption]>, HelpText< "Directly create compilation output files. This may lead to incorrect incremental builds if the compiler crashes">, - MarshallingInfoFlag<"FrontendOpts.UseTemporary", "true">, IsNegative; + MarshallingInfoNegativeFlag<"FrontendOpts.UseTemporary">; defm use_cxa_atexit : BoolFOption<"use-cxa-atexit", "CodeGenOpts.CXAAtExit", DefaultsToTrue, ChangedBy, @@ -2030,7 +2030,7 @@ def fno_unit_at_a_time : Flag<["-"], "fno-unit-at-a-time">, Group; def fno_unwind_tables : Flag<["-"], "fno-unwind-tables">, Group; def fno_verbose_asm : Flag<["-"], "fno-verbose-asm">, Group, Flags<[CC1Option]>, - MarshallingInfoFlag<"CodeGenOpts.AsmVerbose", "true">, IsNegative; + MarshallingInfoNegativeFlag<"CodeGenOpts.AsmVerbose">; def fno_working_directory : Flag<["-"], "fno-working-directory">, Group; def fno_wrapv : Flag<["-"], "fno-wrapv">, Group; def fobjc_arc : Flag<["-"], "fobjc-arc">, Group, Flags<[CC1Option]>, @@ -3313,7 +3313,7 @@ def no__dead__strip__inits__and__terms : Flag<["-"], "no_dead_strip_inits_and_terms">; def nobuiltininc : Flag<["-"], "nobuiltininc">, Flags<[CC1Option, CoreOption]>, HelpText<"Disable builtin #include directories">, - MarshallingInfoFlag<"HeaderSearchOpts->UseBuiltinIncludes", "true">, IsNegative; + MarshallingInfoNegativeFlag<"HeaderSearchOpts->UseBuiltinIncludes">; def nogpuinc : Flag<["-"], "nogpuinc">, HelpText<"Do not add include paths for CUDA/HIP and" " do not include the default CUDA/HIP wrapper headers">; def : Flag<["-"], "nocudainc">, Alias; @@ -3334,7 +3334,7 @@ def nostdlibinc : Flag<["-"], "nostdlibinc">; def nostdincxx : Flag<["-"], "nostdinc++">, Flags<[CC1Option]>, HelpText<"Disable standard #include directories for the C++ standard library">, - MarshallingInfoFlag<"HeaderSearchOpts->UseStandardCXXIncludes", "true">, IsNegative; + MarshallingInfoNegativeFlag<"HeaderSearchOpts->UseStandardCXXIncludes">; def nostdlib : Flag<["-"], "nostdlib">, Group; def nostdlibxx : Flag<["-"], "nostdlib++">; def object : Flag<["-"], "object">; @@ -3499,7 +3499,7 @@ def undefined : JoinedOrSeparate<["-"], "undefined">, Group; def undef : Flag<["-"], "undef">, Group, Flags<[CC1Option]>, HelpText<"undef all system defines">, - MarshallingInfoFlag<"PreprocessorOpts->UsePredefines", "true">, IsNegative; + MarshallingInfoNegativeFlag<"PreprocessorOpts->UsePredefines">; def unexported__symbols__list : Separate<["-"], "unexported_symbols_list">; def u : JoinedOrSeparate<["-"], "u">, Group; def v : Flag<["-"], "v">, Flags<[CC1Option, CoreOption]>, @@ -4370,7 +4370,7 @@ def disable_llvm_verifier : Flag<["-"], "disable-llvm-verifier">, HelpText<"Don't run the LLVM IR verifier pass">, - MarshallingInfoFlag<"CodeGenOpts.VerifyModule", "true">, IsNegative; + MarshallingInfoNegativeFlag<"CodeGenOpts.VerifyModule">; def disable_llvm_passes : Flag<["-"], "disable-llvm-passes">, HelpText<"Use together with -emit-llvm to get pristine LLVM IR from the " "frontend by not running any LLVM passes at all">, @@ -4432,7 +4432,7 @@ MarshallingInfoFlag<"CodeGenOpts.RelaxedAliasing">; def no_struct_path_tbaa : Flag<["-"], "no-struct-path-tbaa">, HelpText<"Turn off struct-path aware Type Based Alias Analysis">, - MarshallingInfoFlag<"CodeGenOpts.StructPathTBAA", "true">, IsNegative; + MarshallingInfoNegativeFlag<"CodeGenOpts.StructPathTBAA">; def new_struct_path_tbaa : Flag<["-"], "new-struct-path-tbaa">, HelpText<"Enable enhanced struct-path aware Type Based Alias Analysis">; def mdebug_pass : Separate<["-"], "mdebug-pass">, @@ -4595,7 +4595,7 @@ def mbranch_target_enforce : Flag<["-"], "mbranch-target-enforce">, MarshallingInfoFlag<"LangOpts->BranchTargetEnforcement">; def fno_dllexport_inlines : Flag<["-"], "fno-dllexport-inlines">, - MarshallingInfoFlag<"LangOpts->DllExportInlines", "true">, IsNegative; + MarshallingInfoNegativeFlag<"LangOpts->DllExportInlines">; def cfguard_no_checks : Flag<["-"], "cfguard-no-checks">, HelpText<"Emit Windows Control Flow Guard tables only (no checks)">, MarshallingInfoFlag<"CodeGenOpts.ControlFlowGuardNoChecks">; @@ -4701,10 +4701,10 @@ MarshallingInfoFlag<"FrontendOpts.CodeCompleteOpts.IncludeCodePatterns">; def no_code_completion_globals : Flag<["-"], "no-code-completion-globals">, HelpText<"Do not include global declarations in code-completion results.">, - MarshallingInfoFlag<"FrontendOpts.CodeCompleteOpts.IncludeGlobals", "true">, IsNegative; + MarshallingInfoNegativeFlag<"FrontendOpts.CodeCompleteOpts.IncludeGlobals">; def no_code_completion_ns_level_decls : Flag<["-"], "no-code-completion-ns-level-decls">, HelpText<"Do not include declarations inside namespaces (incl. global namespace) in the code-completion results.">, - MarshallingInfoFlag<"FrontendOpts.CodeCompleteOpts.IncludeNamespaceLevelDecls", "true">, IsNegative; + MarshallingInfoNegativeFlag<"FrontendOpts.CodeCompleteOpts.IncludeNamespaceLevelDecls">; def code_completion_brief_comments : Flag<["-"], "code-completion-brief-comments">, HelpText<"Include brief documentation comments in code-completion results.">, MarshallingInfoFlag<"FrontendOpts.CodeCompleteOpts.IncludeBriefComments">; @@ -4734,10 +4734,10 @@ MarshallingInfoString<"FrontendOpts.ASTDumpFilter">; def fno_modules_global_index : Flag<["-"], "fno-modules-global-index">, HelpText<"Do not automatically generate or update the global module index">, - MarshallingInfoFlag<"FrontendOpts.UseGlobalModuleIndex", "true">, IsNegative; + MarshallingInfoNegativeFlag<"FrontendOpts.UseGlobalModuleIndex">; def fno_modules_error_recovery : Flag<["-"], "fno-modules-error-recovery">, HelpText<"Do not automatically import modules for error recovery">, - MarshallingInfoFlag<"LangOpts->ModulesErrorRecovery", "true">, IsNegative; + MarshallingInfoNegativeFlag<"LangOpts->ModulesErrorRecovery">; def fmodule_map_file_home_is_cwd : Flag<["-"], "fmodule-map-file-home-is-cwd">, HelpText<"Use the current working directory as the home directory of " "module maps specified by -fmodule-map-file=">, @@ -4780,7 +4780,7 @@ def fno_concept_satisfaction_caching : Flag<["-"], "fno-concept-satisfaction-caching">, HelpText<"Disable satisfaction caching for C++2a Concepts.">, - MarshallingInfoFlag<"LangOpts->ConceptSatisfactionCaching", "true">, IsNegative; + MarshallingInfoNegativeFlag<"LangOpts->ConceptSatisfactionCaching">; defm recovery_ast : BoolOption<"recovery-ast", "LangOpts->RecoveryAST", DefaultsToTrue, @@ -4930,7 +4930,7 @@ HelpText<"When using a PCH, skip tokens until after a #pragma hdrstop.">; def fno_pch_timestamp : Flag<["-"], "fno-pch-timestamp">, HelpText<"Disable inclusion of timestamp in precompiled headers">, - MarshallingInfoFlag<"FrontendOpts.IncludeTimestamps", "true">, IsNegative; + MarshallingInfoNegativeFlag<"FrontendOpts.IncludeTimestamps">; def building_pch_with_obj : Flag<["-"], "building-pch-with-obj">, HelpText<"This compilation is part of building a PCH with corresponding object file.">, MarshallingInfoFlag<"LangOpts->BuildingPCHWithObjectFile">; @@ -4983,7 +4983,7 @@ MarshallingInfoString<"CodeGenOpts.ObjCDispatchMethod", "Legacy">, AutoNormalizeEnum; def disable_objc_default_synthesize_properties : Flag<["-"], "disable-objc-default-synthesize-properties">, HelpText<"disable the default synthesis of Objective-C properties">, - MarshallingInfoFlag<"LangOpts->ObjCDefaultSynthProperties", "true">, IsNegative; + MarshallingInfoNegativeFlag<"LangOpts->ObjCDefaultSynthProperties">; def fencode_extended_block_signature : Flag<["-"], "fencode-extended-block-signature">, HelpText<"enable extended encoding of block type signature">, MarshallingInfoFlag<"LangOpts->EncodeExtendedBlockSig">; @@ -5132,7 +5132,7 @@ def nostdsysteminc : Flag<["-"], "nostdsysteminc">, HelpText<"Disable standard system #include directories">, - MarshallingInfoFlag<"HeaderSearchOpts->UseStandardSystemIncludes", "true">, IsNegative; + MarshallingInfoNegativeFlag<"HeaderSearchOpts->UseStandardSystemIncludes">; def fdisable_module_hash : Flag<["-"], "fdisable-module-hash">, HelpText<"Disable the module hash">, MarshallingInfoFlag<"HeaderSearchOpts->DisableModuleHash">; @@ -5204,7 +5204,7 @@ MarshallingInfoFlag<"LangOpts->CUDAAllowVariadicFunctions">; def fno_cuda_host_device_constexpr : Flag<["-"], "fno-cuda-host-device-constexpr">, HelpText<"Don't treat unattributed constexpr functions as __host__ __device__.">, - MarshallingInfoFlag<"LangOpts->CUDAHostDeviceConstexpr", "true">, IsNegative; + MarshallingInfoNegativeFlag<"LangOpts->CUDAHostDeviceConstexpr">; //===----------------------------------------------------------------------===// // OpenMP Options diff --git a/llvm/include/llvm/Option/OptParser.td b/llvm/include/llvm/Option/OptParser.td --- a/llvm/include/llvm/Option/OptParser.td +++ b/llvm/include/llvm/Option/OptParser.td @@ -173,6 +173,12 @@ code Denormalizer = "denormalizeSimpleFlag"; } +class MarshallingInfoNegativeFlag + : MarshallingInfo { + code Normalizer = "normalizeSimpleNegativeFlag"; + code Denormalizer = "denormalizeSimpleFlag"; +} + class MarshallingInfoBitfieldFlag : MarshallingInfoFlag { code Normalizer = "makeFlagToValueNormalizer("#value#")"; @@ -190,9 +196,6 @@ // Mixins for additional marshalling attributes. -class IsNegative { - code Normalizer = "normalizeSimpleNegativeFlag"; -} class AlwaysEmit { bit ShouldAlwaysEmit = true; } class Normalizer { code Normalizer = normalizer; } class Denormalizer { code Denormalizer = denormalizer; }