513 lines
36 KiB
C++
513 lines
36 KiB
C++
//===--- LangOptions.def - Language option database -------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the language options. Users of this file must
|
|
// define the LANGOPT macro to make use of this information. The arguments to
|
|
// the macro are:
|
|
// LANGOPT(Name, Bits, DefaultValue, Compatibility, Description)
|
|
// Note that the DefaultValue must be a constant value (literal or enumeration);
|
|
// it cannot depend on the value of another language option.
|
|
//
|
|
// Optionally, the user may also define:
|
|
//
|
|
// ENUM_LANGOPT: for options that have enumeration, rather than unsigned, type.
|
|
//
|
|
// VALUE_LANGOPT: for options that describe a value rather than a flag.
|
|
//
|
|
// The Description field should be a noun phrase, for instance "frobbing all
|
|
// widgets" or "C's implicit blintz feature".
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LANGOPT
|
|
# error Define the LANGOPT macro to handle language options
|
|
#endif
|
|
|
|
#ifndef ENUM_LANGOPT
|
|
# define ENUM_LANGOPT(Name, Type, Bits, Default, Compatibility, Description) \
|
|
LANGOPT(Name, Bits, Default, Compatibility, Description)
|
|
#endif
|
|
|
|
#ifndef VALUE_LANGOPT
|
|
# define VALUE_LANGOPT(Name, Bits, Default, Compatibility, Description) \
|
|
LANGOPT(Name, Bits, Default, Compatibility, Description)
|
|
#endif
|
|
|
|
// FIXME: A lot of the Benign options should be Compatible instead.
|
|
LANGOPT(C99 , 1, 0, NotCompatible, "C99")
|
|
LANGOPT(C11 , 1, 0, NotCompatible, "C11")
|
|
LANGOPT(C17 , 1, 0, NotCompatible, "C17")
|
|
LANGOPT(C23 , 1, 0, NotCompatible, "C23")
|
|
LANGOPT(C2y , 1, 0, NotCompatible, "C2y")
|
|
LANGOPT(MSVCCompat , 1, 0, NotCompatible, "Microsoft Visual C++ full compatibility mode")
|
|
LANGOPT(Kernel , 1, 0, NotCompatible, "Kernel mode")
|
|
LANGOPT(MicrosoftExt , 1, 0, NotCompatible, "Microsoft C++ extensions")
|
|
LANGOPT(ZOSExt , 1, 0, NotCompatible, "z/OS extensions")
|
|
LANGOPT(AsmBlocks , 1, 0, NotCompatible, "Microsoft inline asm blocks")
|
|
LANGOPT(Borland , 1, 0, NotCompatible, "Borland extensions")
|
|
LANGOPT(CPlusPlus , 1, 0, NotCompatible, "C++")
|
|
LANGOPT(CPlusPlus11 , 1, 0, NotCompatible, "C++11")
|
|
LANGOPT(CPlusPlus14 , 1, 0, NotCompatible, "C++14")
|
|
LANGOPT(CPlusPlus17 , 1, 0, NotCompatible, "C++17")
|
|
LANGOPT(CPlusPlus20 , 1, 0, NotCompatible, "C++20")
|
|
LANGOPT(CPlusPlus23 , 1, 0, NotCompatible, "C++23")
|
|
LANGOPT(CPlusPlus26 , 1, 0, NotCompatible, "C++26")
|
|
LANGOPT(ObjC , 1, 0, NotCompatible, "Objective-C")
|
|
LANGOPT(ObjCDefaultSynthProperties , 1, 0, Benign,
|
|
"Objective-C auto-synthesized properties")
|
|
LANGOPT(EncodeExtendedBlockSig , 1, 0, Benign,
|
|
"Encoding extended block type signature")
|
|
LANGOPT(EncodeCXXClassTemplateSpec , 1, 0, Benign,
|
|
"Fully encode c++ class template specialization")
|
|
LANGOPT(ObjCInferRelatedResultType , 1, 1, Benign,
|
|
"Objective-C related result type inference")
|
|
LANGOPT(AppExt , 1, 0, NotCompatible, "Objective-C App Extension")
|
|
LANGOPT(Trigraphs , 1, 0, NotCompatible, "trigraphs")
|
|
LANGOPT(LineComment , 1, 0, NotCompatible, "'//' comments")
|
|
LANGOPT(Bool , 1, 0, NotCompatible, "bool, true, and false keywords")
|
|
LANGOPT(Half , 1, 0, NotCompatible, "half keyword")
|
|
LANGOPT(WChar , 1, 0, NotCompatible, "wchar_t keyword")
|
|
LANGOPT(Char8 , 1, 0, NotCompatible, "char8_t keyword")
|
|
LANGOPT(IEEE128 , 1, 0, NotCompatible, "__ieee128 keyword")
|
|
LANGOPT(DeclSpecKeyword , 1, 0, NotCompatible, "__declspec keyword")
|
|
LANGOPT(DollarIdents , 1, 1, Benign, "'$' in identifiers")
|
|
LANGOPT(AsmPreprocessor , 1, 0, Benign, "preprocessor in asm mode")
|
|
LANGOPT(GNUMode , 1, 1, NotCompatible, "GNU extensions")
|
|
LANGOPT(GNUKeywords , 1, 1, NotCompatible, "GNU keywords")
|
|
VALUE_LANGOPT(GNUCVersion , 32, 0, NotCompatible, "GNU C compatibility version")
|
|
LANGOPT(DisableKNRFunctions, 1, 0, NotCompatible, "require function types to have a prototype")
|
|
LANGOPT(Digraphs , 1, 0, NotCompatible, "digraphs")
|
|
LANGOPT(HexFloats , 1, 0, Benign, "C99 hexadecimal float constants")
|
|
LANGOPT(CXXOperatorNames , 1, 0, NotCompatible, "C++ operator name keywords")
|
|
LANGOPT(AppleKext , 1, 0, NotCompatible, "Apple kext support")
|
|
LANGOPT(PascalStrings , 1, 0, Benign, "Pascal string support")
|
|
LANGOPT(WritableStrings , 1, 0, NotCompatible, "writable string support")
|
|
LANGOPT(ConstStrings , 1, 0, NotCompatible, "const-qualified string support")
|
|
ENUM_LANGOPT(LaxVectorConversions, LaxVectorConversionKind, 2,
|
|
LaxVectorConversionKind::All, NotCompatible, "lax vector conversions")
|
|
ENUM_LANGOPT(AltivecSrcCompat, AltivecSrcCompatKind, 2,
|
|
AltivecSrcCompatKind::Default, NotCompatible, "Altivec source compatibility")
|
|
LANGOPT(ConvergentFunctions, 1, 1, NotCompatible, "Assume convergent functions")
|
|
LANGOPT(AltiVec , 1, 0, NotCompatible, "AltiVec-style vector initializers")
|
|
LANGOPT(ZVector , 1, 0, NotCompatible, "System z vector extensions")
|
|
LANGOPT(Exceptions , 1, 0, NotCompatible, "exception handling")
|
|
LANGOPT(ObjCExceptions , 1, 0, NotCompatible, "Objective-C exceptions")
|
|
LANGOPT(CXXExceptions , 1, 0, NotCompatible, "C++ exceptions")
|
|
LANGOPT(EHAsynch , 1, 0, NotCompatible, "C/C++ EH Asynch exceptions")
|
|
LANGOPT(IgnoreExceptions , 1, 0, NotCompatible, "ignore exceptions")
|
|
LANGOPT(ExternCNoUnwind , 1, 0, NotCompatible, "Assume extern C functions don't unwind")
|
|
LANGOPT(AssumeNothrowExceptionDtor , 1, 0, NotCompatible, "Assume exception object's destructor is nothrow")
|
|
LANGOPT(TraditionalCPP , 1, 0, NotCompatible, "traditional CPP emulation")
|
|
LANGOPT(RTTI , 1, 1, NotCompatible, "run-time type information")
|
|
LANGOPT(RTTIData , 1, 1, NotCompatible, "emit run-time type information data")
|
|
ENUM_LANGOPT(LayoutCompatibility, LayoutCompatibilityKind, 2,
|
|
LayoutCompatibilityKind::Default, NotCompatible,
|
|
"Microsoft-compatible structure layout")
|
|
LANGOPT(MSVolatile , 1, 0, NotCompatible, "Microsoft-compatible volatile loads and stores")
|
|
LANGOPT(Freestanding , 1, 0, NotCompatible, "freestanding implementation")
|
|
LANGOPT(NoBuiltin , 1, 0, NotCompatible, "disable builtin functions")
|
|
LANGOPT(NoMathBuiltin , 1, 0, NotCompatible, "disable math builtin functions")
|
|
LANGOPT(GNUAsm , 1, 1, NotCompatible, "GNU-style inline assembly")
|
|
LANGOPT(Coroutines , 1, 0, NotCompatible, "C++20 coroutines")
|
|
LANGOPT(CoroAlignedAllocation, 1, 0, NotCompatible, "prefer Aligned Allocation according to P2014 Option 2")
|
|
LANGOPT(DllExportInlines , 1, 1, NotCompatible, "dllexported classes dllexport inline methods")
|
|
LANGOPT(ExperimentalLibrary, 1, 0, NotCompatible, "enable unstable and experimental library features")
|
|
|
|
LANGOPT(PointerAuthIntrinsics, 1, 0, NotCompatible, "pointer authentication intrinsics")
|
|
LANGOPT(PointerAuthCalls , 1, 0, NotCompatible, "function pointer authentication")
|
|
LANGOPT(PointerAuthReturns, 1, 0, NotCompatible, "return pointer authentication")
|
|
LANGOPT(PointerAuthIndirectGotos, 1, 0, NotCompatible, "indirect gotos pointer authentication")
|
|
LANGOPT(PointerAuthAuthTraps, 1, 0, NotCompatible, "pointer authentication failure traps")
|
|
LANGOPT(PointerAuthVTPtrAddressDiscrimination, 1, 0, NotCompatible, "incorporate address discrimination in authenticated vtable pointers")
|
|
LANGOPT(PointerAuthVTPtrTypeDiscrimination, 1, 0, NotCompatible, "incorporate type discrimination in authenticated vtable pointers")
|
|
LANGOPT(PointerAuthTypeInfoVTPtrDiscrimination, 1, 0, NotCompatible, "incorporate type and address discrimination in authenticated vtable pointers for std::type_info")
|
|
LANGOPT(PointerAuthFunctionTypeDiscrimination, 1, 0, Benign,
|
|
"Use type discrimination when signing function pointers")
|
|
LANGOPT(PointerAuthInitFini, 1, 0, NotCompatible, "sign function pointers in init/fini arrays")
|
|
LANGOPT(PointerAuthInitFiniAddressDiscrimination, 1, 0, NotCompatible,
|
|
"incorporate address discrimination in authenticated function pointers in init/fini arrays")
|
|
LANGOPT(PointerAuthELFGOT, 1, 0, NotCompatible, "authenticate pointers from GOT")
|
|
LANGOPT(AArch64JumpTableHardening, 1, 0, NotCompatible, "use hardened lowering for jump-table dispatch")
|
|
|
|
LANGOPT(PointerAuthObjcIsa, 1, 0, NotCompatible, "authentication of isa and super pointers in ObjC instances")
|
|
LANGOPT(PointerAuthObjcInterfaceSel, 1, 0, NotCompatible, "authentication of SEL fields of ObjC interfaces")
|
|
LANGOPT(PointerAuthObjcInterfaceSelKey, 16, 0, NotCompatible, "authentication key for SEL fields of ObjC interfaces")
|
|
LANGOPT(PointerAuthObjcClassROPointers, 1, 0, Benign, "class_ro_t pointer authentication")
|
|
|
|
LANGOPT(PointerAuthBlockDescriptorPointers, 1, 0, NotCompatible, "enable signed block descriptors")
|
|
|
|
LANGOPT(DoubleSquareBracketAttributes, 1, 0, NotCompatible, "'[[]]' attributes extension for all language standard modes")
|
|
LANGOPT(ExperimentalLateParseAttributes, 1, 0, NotCompatible, "experimental late parsing of attributes")
|
|
|
|
LANGOPT(RecoveryAST, 1, 1, Compatible, "Preserve expressions in AST when encountering errors")
|
|
LANGOPT(RecoveryASTType, 1, 1, Compatible, "Preserve the type in recovery expressions")
|
|
|
|
LANGOPT(ThreadsafeStatics , 1, 1, Benign, "thread-safe static initializers")
|
|
LANGOPT(POSIXThreads , 1, 0, NotCompatible, "POSIX thread support")
|
|
LANGOPT(Blocks , 1, 0, NotCompatible, "blocks extension to C")
|
|
LANGOPT(EmitAllDecls , 1, 0, Benign, "emitting all declarations")
|
|
LANGOPT(MathErrno , 1, 1, NotCompatible, "errno in math functions")
|
|
LANGOPT(Modules , 1, 0, NotCompatible, "modules semantics")
|
|
LANGOPT(CPlusPlusModules , 1, 0, Compatible, "C++ modules syntax")
|
|
LANGOPT(SkipODRCheckInGMF , 1, 0, NotCompatible, "Skip ODR checks for decls in the global module fragment")
|
|
LANGOPT(BuiltinHeadersInSystemModules, 1, 0, NotCompatible, "builtin headers belong to system modules, and _Builtin_ modules are ignored for cstdlib headers")
|
|
ENUM_LANGOPT(CompilingModule, CompilingModuleKind, 3, CMK_None, Benign,
|
|
"compiling a module interface")
|
|
LANGOPT(CompilingPCH, 1, 0, Benign, "building a pch")
|
|
LANGOPT(BuildingPCHWithObjectFile, 1, 0, Benign, "building a pch which has a corresponding object file")
|
|
LANGOPT(CacheGeneratedPCH, 1, 0, Benign, "cache generated PCH files in memory")
|
|
LANGOPT(PCHInstantiateTemplates, 1, 0, Benign, "instantiate templates while building a PCH")
|
|
LANGOPT(ModulesDeclUse , 1, 0, Compatible, "require declaration of module uses")
|
|
LANGOPT(ModulesSearchAll , 1, 1, Benign, "searching even non-imported modules to find unresolved references")
|
|
LANGOPT(ModulesStrictDeclUse, 1, 0, Compatible, "requiring declaration of module uses and all headers to be in modules")
|
|
LANGOPT(ModulesValidateTextualHeaderIncludes, 1, 1, Compatible, "validation of textual header includes")
|
|
LANGOPT(ModulesErrorRecovery, 1, 1, Benign, "automatically importing modules as needed when performing error recovery")
|
|
LANGOPT(ImplicitModules, 1, 1, Benign, "building modules that are not specified via -fmodule-file")
|
|
LANGOPT(ModulesLocalVisibility, 1, 0, Compatible, "local submodule visibility")
|
|
LANGOPT(Static , 1, 0, Compatible, "__STATIC__ predefined macro (as opposed to __DYNAMIC__)")
|
|
VALUE_LANGOPT(PackStruct , 32, 0, NotCompatible,
|
|
"default struct packing maximum alignment")
|
|
VALUE_LANGOPT(MaxTypeAlign , 32, 0, NotCompatible,
|
|
"default maximum alignment for types")
|
|
VALUE_LANGOPT(AlignDouble , 1, 0, NotCompatible, "Controls if doubles should be aligned to 8 bytes (x86 only)")
|
|
VALUE_LANGOPT(DoubleSize , 32, 0, NotCompatible, "width of double")
|
|
VALUE_LANGOPT(LongDoubleSize , 32, 0, NotCompatible, "width of long double")
|
|
LANGOPT(PPCIEEELongDouble , 1, 0, NotCompatible, "use IEEE 754 quadruple-precision for long double")
|
|
LANGOPT(EnableAIXExtendedAltivecABI , 1, 0, NotCompatible, "__EXTABI__ predefined macro")
|
|
LANGOPT(EnableAIXQuadwordAtomicsABI , 1, 0, NotCompatible, "Use 16-byte atomic lock free semantics")
|
|
VALUE_LANGOPT(PICLevel , 2, 0, Compatible, "__PIC__ level")
|
|
VALUE_LANGOPT(PIE , 1, 0, Compatible, "is pie")
|
|
LANGOPT(ROPI , 1, 0, NotCompatible, "Read-only position independence")
|
|
LANGOPT(RWPI , 1, 0, NotCompatible, "Read-write position independence")
|
|
LANGOPT(GNUInline , 1, 0, Compatible, "GNU inline semantics")
|
|
LANGOPT(Deprecated , 1, 0, Compatible, "__DEPRECATED predefined macro")
|
|
LANGOPT(FastMath , 1, 0, Compatible, "fast FP math optimizations, and __FAST_MATH__ predefined macro")
|
|
LANGOPT(UnsafeFPMath , 1, 0, Compatible, "Unsafe Floating Point Math")
|
|
LANGOPT(ProtectParens , 1, 0, Compatible, "optimizer honors parentheses "
|
|
"when floating-point expressions are evaluated")
|
|
LANGOPT(AllowFPReassoc , 1, 0, Benign, "Permit Floating Point reassociation")
|
|
LANGOPT(NoHonorNaNs , 1, 0, Benign, "Permit Floating Point optimization without regard to NaN")
|
|
LANGOPT(NoHonorInfs , 1, 0, Benign, "Permit Floating Point optimization without regard to infinities")
|
|
LANGOPT(NoSignedZero , 1, 0, Benign, "Permit Floating Point optimization without regard to signed zeros")
|
|
LANGOPT(AllowRecip , 1, 0, Benign, "Permit Floating Point reciprocal")
|
|
LANGOPT(ApproxFunc , 1, 0, Benign, "Permit Floating Point approximation")
|
|
LANGOPT(NamedLoops , 1, 0, Benign, "Permit named break/continue")
|
|
LANGOPT(DeferTS , 1, 0, Benign, "C '_Defer' Technical Specification")
|
|
|
|
ENUM_LANGOPT(ComplexRange, ComplexRangeKind, 3, CX_None, NotCompatible, "Enable use of range reduction for complex arithmetics.")
|
|
|
|
LANGOPT(ObjCGCBitmapPrint , 1, 0, Benign, "printing of GC's bitmap layout for __weak/__strong ivars")
|
|
|
|
LANGOPT(AccessControl , 1, 1, Benign, "C++ access control")
|
|
LANGOPT(CharIsSigned , 1, 1, NotCompatible, "signed char")
|
|
LANGOPT(WCharSize , 4, 0, NotCompatible, "width of wchar_t")
|
|
LANGOPT(WCharIsSigned , 1, 0, NotCompatible, "signed or unsigned wchar_t")
|
|
ENUM_LANGOPT(MSPointerToMemberRepresentationMethod, PragmaMSPointersToMembersKind, 2, PPTMK_BestCase, NotCompatible, "member-pointer representation method")
|
|
ENUM_LANGOPT(DefaultCallingConv, DefaultCallingConvention, 3, DCC_None, NotCompatible, "default calling convention")
|
|
|
|
LANGOPT(ShortEnums , 1, 0, NotCompatible, "short enum types")
|
|
|
|
LANGOPT(OpenCL , 1, 0, NotCompatible, "OpenCL")
|
|
LANGOPT(OpenCLVersion , 32, 0, NotCompatible, "OpenCL C version")
|
|
LANGOPT(OpenCLCPlusPlus , 1, 0, NotCompatible, "C++ for OpenCL")
|
|
LANGOPT(OpenCLCPlusPlusVersion , 32, 0, NotCompatible, "C++ for OpenCL version")
|
|
LANGOPT(OpenCLGenericAddressSpace, 1, 0, NotCompatible, "OpenCL generic keyword")
|
|
LANGOPT(OpenCLPipes , 1, 0, NotCompatible, "OpenCL pipes language constructs and built-ins")
|
|
LANGOPT(NativeHalfType , 1, 0, NotCompatible, "Native half type support")
|
|
LANGOPT(NativeHalfArgsAndReturns, 1, 0, NotCompatible, "Native half args and returns")
|
|
LANGOPT(NativeInt16Type , 1, 1, NotCompatible, "Native int 16 type support")
|
|
LANGOPT(CUDA , 1, 0, NotCompatible, "CUDA")
|
|
LANGOPT(HIP , 1, 0, NotCompatible, "HIP")
|
|
LANGOPT(OpenMP , 32, 0, NotCompatible, "OpenMP support and version of OpenMP (31, 40 or 45)")
|
|
LANGOPT(OpenMPExtensions , 1, 1, NotCompatible, "Enable all Clang extensions for OpenMP directives and clauses")
|
|
LANGOPT(OpenMPSimd , 1, 0, NotCompatible, "Use SIMD only OpenMP support.")
|
|
LANGOPT(OpenMPUseTLS , 1, 0, NotCompatible, "Use TLS for threadprivates or runtime calls")
|
|
LANGOPT(OpenMPIsTargetDevice , 1, 0, NotCompatible, "Generate code only for OpenMP target device")
|
|
LANGOPT(OpenMPCUDAMode , 1, 0, NotCompatible, "Generate code for OpenMP pragmas in SIMT/SPMD mode")
|
|
LANGOPT(OpenMPIRBuilder , 1, 0, NotCompatible, "Use the experimental OpenMP-IR-Builder codegen path.")
|
|
LANGOPT(OpenMPCUDANumSMs , 32, 0, NotCompatible, "Number of SMs for CUDA devices.")
|
|
LANGOPT(OpenMPCUDABlocksPerSM , 32, 0, NotCompatible, "Number of blocks per SM for CUDA devices.")
|
|
LANGOPT(OpenMPCUDAReductionBufNum , 32, 1024, NotCompatible, "Number of the reduction records in the intermediate reduction buffer used for the teams reductions.")
|
|
LANGOPT(OpenMPTargetDebug , 32, 0, NotCompatible, "Enable debugging in the OpenMP offloading device RTL")
|
|
LANGOPT(OpenMPOptimisticCollapse , 1, 0, NotCompatible, "Use at most 32 bits to represent the collapsed loop nest counter.")
|
|
LANGOPT(OpenMPThreadSubscription , 1, 0, NotCompatible, "Assume work-shared loops do not have more iterations than participating threads.")
|
|
LANGOPT(OpenMPTeamSubscription , 1, 0, NotCompatible, "Assume distributed loops do not have more iterations than participating teams.")
|
|
LANGOPT(OpenMPNoThreadState , 1, 0, NotCompatible, "Assume that no thread in a parallel region will modify an ICV.")
|
|
LANGOPT(OpenMPNoNestedParallelism , 1, 0, NotCompatible, "Assume that no thread in a parallel region will encounter a parallel region")
|
|
LANGOPT(OpenMPOffloadMandatory , 1, 0, NotCompatible, "Assert that offloading is mandatory and do not create a host fallback.")
|
|
LANGOPT(OpenMPForceUSM , 1, 0, NotCompatible, "Enable OpenMP unified shared memory mode via compiler.")
|
|
LANGOPT(NoGPULib , 1, 0, NotCompatible, "Indicate a build without the standard GPU libraries.")
|
|
|
|
LANGOPT(HLSL, 1, 0, NotCompatible, "HLSL")
|
|
ENUM_LANGOPT(HLSLVersion, HLSLLangStd, 16, HLSL_Unset, NotCompatible, "HLSL Version")
|
|
LANGOPT(HLSLStrictAvailability, 1, 0, NotCompatible,
|
|
"Strict availability diagnostic mode for HLSL built-in functions.")
|
|
LANGOPT(HLSLSpvUseUnknownImageFormat, 1, 0, NotCompatible, "For storage images and texel buffers, sets the default format to 'Unknown' when not specified via the `vk::image_format` attribute. If this option is not used, the format is inferred from the resource's data type.")
|
|
LANGOPT(HLSLSpvEnableMaximalReconvergence, 1, 0, NotCompatible, "Enables the MaximallyReconvergesKHR execution mode for this module. This ensures that control flow reconverges at well-defined merge points as defined by the Vulkan spec.")
|
|
|
|
LANGOPT(CUDAIsDevice , 1, 0, NotCompatible, "compiling for CUDA device")
|
|
LANGOPT(CUDAHostDeviceConstexpr, 1, 1, NotCompatible, "treating unattributed constexpr functions as __host__ __device__")
|
|
LANGOPT(GPUDeviceApproxTranscendentals, 1, 0, NotCompatible, "using approximate transcendental functions")
|
|
LANGOPT(GPURelocatableDeviceCode, 1, 0, NotCompatible, "generate relocatable device code")
|
|
LANGOPT(OffloadImplicitHostDeviceTemplates, 1, 0, NotCompatible, "assume template functions to be implicitly host device by default for CUDA/HIP")
|
|
LANGOPT(GPUAllowDeviceInit, 1, 0, NotCompatible, "allowing device side global init functions for HIP")
|
|
LANGOPT(GPUMaxThreadsPerBlock, 32, 1024, NotCompatible, "default max threads per block for kernel launch bounds for HIP")
|
|
LANGOPT(GPUDeferDiag, 1, 0, NotCompatible, "defer host/device related diagnostic messages for CUDA/HIP")
|
|
LANGOPT(GPUExcludeWrongSideOverloads, 1, 0, NotCompatible, "always exclude wrong side overloads in overloading resolution for CUDA/HIP")
|
|
LANGOPT(OffloadingNewDriver, 1, 0, NotCompatible, "use the new driver for generating offloading code.")
|
|
LANGOPT(OffloadViaLLVM, 1, 0, NotCompatible, "target LLVM/Offload as portable offloading runtime.")
|
|
|
|
LANGOPT(SYCLIsDevice , 1, 0, NotCompatible, "Generate code for SYCL device")
|
|
LANGOPT(SYCLIsHost , 1, 0, NotCompatible, "SYCL host compilation")
|
|
ENUM_LANGOPT(SYCLVersion , SYCLMajorVersion, 2, SYCL_None, NotCompatible, "Version of the SYCL standard used")
|
|
|
|
LANGOPT(HIPUseNewLaunchAPI, 1, 0, NotCompatible, "Use new kernel launching API for HIP")
|
|
LANGOPT(OffloadUniformBlock, 1, 0, NotCompatible, "Assume that kernels are launched with uniform block sizes (default true for CUDA/HIP and false otherwise)")
|
|
LANGOPT(HIPStdPar, 1, 0, NotCompatible, "Enable Standard Parallel Algorithm Acceleration for HIP (experimental)")
|
|
LANGOPT(HIPStdParInterposeAlloc, 1, 0, NotCompatible, "Replace allocations / deallocations with HIP RT calls when Standard Parallel Algorithm Acceleration for HIP is enabled (Experimental)")
|
|
|
|
LANGOPT(OpenACC , 1, 0, NotCompatible, "OpenACC Enabled")
|
|
|
|
LANGOPT(MSVCEnableStdcMacro , 1, 0, NotCompatible, "Define __STDC__ with '-fms-compatibility'")
|
|
LANGOPT(SizedDeallocation , 1, 0, NotCompatible, "sized deallocation")
|
|
LANGOPT(AlignedAllocation , 1, 0, NotCompatible, "aligned allocation")
|
|
LANGOPT(AlignedAllocationUnavailable, 1, 0, NotCompatible, "aligned allocation functions are unavailable")
|
|
LANGOPT(NewAlignOverride , 32, 0, NotCompatible, "maximum alignment guaranteed by '::operator new(size_t)'")
|
|
LANGOPT(ModulesCodegen , 1, 0, Benign, "Modules code generation")
|
|
LANGOPT(ModulesDebugInfo , 1, 0, Benign, "Modules debug info")
|
|
LANGOPT(ElideConstructors , 1, 1, Benign, "C++ copy constructor elision")
|
|
LANGOPT(DumpRecordLayouts , 1, 0, Benign, "dumping the layout of IRgen'd records")
|
|
LANGOPT(DumpRecordLayoutsSimple , 1, 0, Benign, "dumping the layout of IRgen'd records in a simple form")
|
|
LANGOPT(DumpRecordLayoutsCanonical , 1, 0, Benign, "dumping the AST layout of records using canonical field types")
|
|
LANGOPT(DumpRecordLayoutsComplete , 1, 0, Benign, "dumping the AST layout of all complete records")
|
|
LANGOPT(DumpVTableLayouts , 1, 0, Benign, "dumping the layouts of emitted vtables")
|
|
LANGOPT(NoConstantCFStrings , 1, 0, NotCompatible, "no constant CoreFoundation strings")
|
|
LANGOPT(InlineVisibilityHidden , 1, 0, Benign, "hidden visibility for inline C++ methods")
|
|
ENUM_LANGOPT(DefaultVisibilityExportMapping, DefaultVisiblityExportMapping, 2, DefaultVisiblityExportMapping::None, Benign, "controls mapping of default visibility to dllexport")
|
|
LANGOPT(IgnoreXCOFFVisibility, 1, 0, Benign, "All the visibility attributes that are specified in the source code are ignored in aix XCOFF.")
|
|
LANGOPT(VisibilityInlinesHiddenStaticLocalVar, 1, 0, Benign,
|
|
"hidden visibility for static local variables in inline C++ "
|
|
"methods when -fvisibility-inlines hidden is enabled")
|
|
ENUM_LANGOPT(GlobalAllocationFunctionVisibility, VisibilityForcedKinds, 3, VisibilityForcedKinds::ForceDefault, NotCompatible,
|
|
"How to apply visibility to global operator new and delete declarations")
|
|
LANGOPT(NewInfallible , 1, 0, NotCompatible, "Treats throwing global C++ operator new as always returning valid memory (annotates with __attribute__((returns_nonnull)) and throw()). This is detectable in source.")
|
|
LANGOPT(ParseUnknownAnytype, 1, 0, Benign, "__unknown_anytype")
|
|
LANGOPT(DebuggerSupport , 1, 0, Benign, "debugger support")
|
|
LANGOPT(DebuggerCastResultToId, 1, 0, Benign, "for 'po' in the debugger, cast the result to id if it is of unknown type")
|
|
LANGOPT(DebuggerObjCLiteral , 1, 0, Benign, "debugger Objective-C literals and subscripting support")
|
|
|
|
LANGOPT(SpellChecking , 1, 1, Benign, "spell-checking")
|
|
LANGOPT(SinglePrecisionConstants , 1, 0, NotCompatible, "treating double-precision floating point constants as single precision constants")
|
|
LANGOPT(FastRelaxedMath , 1, 0, NotCompatible, "OpenCL fast relaxed math")
|
|
LANGOPT(CLNoSignedZero , 1, 0, Benign, "Permit Floating Point optimization without regard to signed zeros")
|
|
LANGOPT(CLUnsafeMath , 1, 0, Compatible, "Unsafe Floating Point Math")
|
|
/// FP_CONTRACT mode (on/off/fast).
|
|
ENUM_LANGOPT(DefaultFPContractMode, FPModeKind, 2, FPM_Off, Benign, "FP contraction type")
|
|
LANGOPT(ExpStrictFP, 1, false, Compatible, "Enable experimental strict floating point")
|
|
LANGOPT(RoundingMath, 1, false, Benign, "Do not assume default floating-point rounding behavior")
|
|
ENUM_LANGOPT(FPExceptionMode, FPExceptionModeKind, 2, FPE_Default, Benign, "FP Exception Behavior Mode type")
|
|
ENUM_LANGOPT(FPEvalMethod, FPEvalMethodKind, 2, FEM_UnsetOnCommandLine, Benign, "FP type used for floating point arithmetic")
|
|
ENUM_LANGOPT(Float16ExcessPrecision, ExcessPrecisionKind, 2, FPP_Standard, NotCompatible, "Intermediate truncation behavior for Float16 arithmetic")
|
|
ENUM_LANGOPT(BFloat16ExcessPrecision, ExcessPrecisionKind, 2, FPP_Standard, NotCompatible, "Intermediate truncation behavior for BFloat16 arithmetic")
|
|
LANGOPT(NoBitFieldTypeAlign , 1, 0, NotCompatible, "bit-field type alignment")
|
|
LANGOPT(HexagonQdsp6Compat , 1, 0, NotCompatible, "hexagon-qdsp6 backward compatibility")
|
|
LANGOPT(ObjCAutoRefCount , 1, 0, NotCompatible, "Objective-C automated reference counting")
|
|
LANGOPT(ObjCWeakRuntime , 1, 0, NotCompatible, "__weak support in the ARC runtime")
|
|
LANGOPT(ObjCWeak , 1, 0, NotCompatible, "Objective-C __weak in ARC and MRC files")
|
|
LANGOPT(ObjCSubscriptingLegacyRuntime , 1, 0, NotCompatible, "Subscripting support in legacy ObjectiveC runtime")
|
|
LANGOPT(CompatibilityQualifiedIdBlockParamTypeChecking, 1, 0, Benign,
|
|
"compatibility mode for type checking block parameters "
|
|
"involving qualified id types")
|
|
LANGOPT(ObjCDisableDirectMethodsForTesting, 1, 0, NotCompatible,
|
|
"Disable recognition of objc_direct methods")
|
|
LANGOPT(CFProtectionBranch , 1, 0, NotCompatible, "Control-Flow Branch Protection enabled")
|
|
ENUM_LANGOPT(CFBranchLabelScheme, CFBranchLabelSchemeKind, 2, CFBranchLabelSchemeKind::Default, NotCompatible,
|
|
"Control-Flow Branch Protection Label Scheme")
|
|
LANGOPT(CFProtectionReturn, 1, 0, NotCompatible, "Control-Flow Return Protection enabled")
|
|
LANGOPT(FakeAddressSpaceMap , 1, 0, NotCompatible, "OpenCL fake address space map")
|
|
ENUM_LANGOPT(AddressSpaceMapMangling , AddrSpaceMapMangling, 2, ASMM_Target, NotCompatible, "OpenCL address space map mangling mode")
|
|
LANGOPT(IncludeDefaultHeader, 1, 0, NotCompatible, "Include default header file for OpenCL")
|
|
LANGOPT(DeclareOpenCLBuiltins, 1, 0, NotCompatible, "Declare OpenCL builtin functions")
|
|
LANGOPT(DelayedTemplateParsing , 1, 0, Benign, "delayed template parsing")
|
|
LANGOPT(BlocksRuntimeOptional , 1, 0, NotCompatible, "optional blocks runtime")
|
|
LANGOPT(
|
|
CompleteMemberPointers, 1, 0, NotCompatible,
|
|
"Require member pointer base types to be complete at the point where the "
|
|
"type's inheritance model would be determined under the Microsoft ABI")
|
|
|
|
ENUM_LANGOPT(GC, GCMode, 2, NonGC, NotCompatible, "Objective-C Garbage Collection mode")
|
|
ENUM_LANGOPT(ValueVisibilityMode, Visibility, 3, DefaultVisibility, Benign,
|
|
"default visibility for functions and variables [-fvisibility]")
|
|
ENUM_LANGOPT(TypeVisibilityMode, Visibility, 3, DefaultVisibility, Benign,
|
|
"default visibility for types [-ftype-visibility]")
|
|
LANGOPT(SetVisibilityForExternDecls, 1, 0, NotCompatible,
|
|
"apply global symbol visibility to external declarations without an explicit visibility")
|
|
LANGOPT(VisibilityFromDLLStorageClass, 1, 0, Benign,
|
|
"override the visibility of globals based on their final DLL storage class [-fvisibility-from-dllstorageclass]")
|
|
ENUM_LANGOPT(DLLExportVisibility, VisibilityFromDLLStorageClassKinds, 3, VisibilityFromDLLStorageClassKinds::Default, Benign,
|
|
"how to adjust the visibility for functions and variables with dllexport annotations [-fvisibility-dllexport]")
|
|
ENUM_LANGOPT(NoDLLStorageClassVisibility, VisibilityFromDLLStorageClassKinds, 3, VisibilityFromDLLStorageClassKinds::Hidden, Benign,
|
|
"how to adjust the visibility for functions and variables without an explicit DLL storage class [-fvisibility-nodllstorageclass]")
|
|
ENUM_LANGOPT(ExternDeclDLLImportVisibility, VisibilityFromDLLStorageClassKinds, 3, VisibilityFromDLLStorageClassKinds::Default, Benign,
|
|
"how to adjust the visibility for external declarations with dllimport annotations [-fvisibility-externs-dllimport]")
|
|
ENUM_LANGOPT(ExternDeclNoDLLStorageClassVisibility, VisibilityFromDLLStorageClassKinds, 3, VisibilityFromDLLStorageClassKinds::Hidden, Benign,
|
|
"how to adjust the visibility for external declarations without an explicit DLL storage class [-fvisibility-externs-nodllstorageclass]")
|
|
LANGOPT(SemanticInterposition , 1, 0, Benign, "semantic interposition")
|
|
LANGOPT(HalfNoSemanticInterposition, 1, 0, Benign,
|
|
"Like -fno-semantic-interposition but don't use local aliases")
|
|
ENUM_LANGOPT(StackProtector, StackProtectorMode, 2, SSPOff, NotCompatible,
|
|
"stack protector mode")
|
|
ENUM_LANGOPT(TrivialAutoVarInit, TrivialAutoVarInitKind, 2, TrivialAutoVarInitKind::Uninitialized, Benign,
|
|
"trivial automatic variable initialization")
|
|
VALUE_LANGOPT(TrivialAutoVarInitStopAfter, 32, 0, Benign,
|
|
"stop trivial automatic variable initialization after the specified number of instances. Must be greater than 0.")
|
|
VALUE_LANGOPT(TrivialAutoVarInitMaxSize, 32, 0, Benign,
|
|
"stop trivial automatic variable initialization if var size exceeds the specified size (in bytes). Must be greater than 0.")
|
|
ENUM_LANGOPT(SignedOverflowBehavior, SignedOverflowBehaviorTy, 2, SOB_Undefined, NotCompatible,
|
|
"signed integer overflow handling")
|
|
LANGOPT(PointerOverflowDefined, 1, 0, NotCompatible, "make pointer overflow defined")
|
|
ENUM_LANGOPT(ThreadModel , ThreadModelKind, 2, ThreadModelKind::POSIX, NotCompatible, "Thread Model")
|
|
|
|
LANGOPT(ArrowDepth, 32, 256, Benign,
|
|
"maximum number of operator->s to follow")
|
|
LANGOPT(InstantiationDepth, 32, 1024, Benign,
|
|
"maximum template instantiation depth")
|
|
LANGOPT(ConstexprCallDepth, 32, 512, Benign,
|
|
"maximum constexpr call depth")
|
|
LANGOPT(ConstexprStepLimit, 32, 1048576, Benign,
|
|
"maximum constexpr evaluation steps")
|
|
LANGOPT(EnableNewConstInterp, 1, 0, Benign,
|
|
"enable the experimental new constant interpreter")
|
|
LANGOPT(BracketDepth, 32, 256, Benign,
|
|
"maximum bracket nesting depth")
|
|
LANGOPT(NumLargeByValueCopy, 32, 0, Benign,
|
|
"if non-zero, warn about parameter or return Warn if parameter/return value is larger in bytes than this setting. 0 is no check.")
|
|
VALUE_LANGOPT(MSCompatibilityVersion, 32, 0, NotCompatible, "Microsoft Visual C/C++ Version")
|
|
ENUM_LANGOPT(VtorDispMode, MSVtorDispMode, 2, MSVtorDispMode::ForVBaseOverride, NotCompatible,
|
|
"How many vtordisps to insert")
|
|
|
|
LANGOPT(ApplePragmaPack, 1, 0, NotCompatible, "Apple gcc-compatible #pragma pack handling")
|
|
|
|
LANGOPT(XLPragmaPack, 1, 0, NotCompatible, "IBM XL #pragma pack handling")
|
|
|
|
LANGOPT(RetainCommentsFromSystemHeaders, 1, 0, Compatible, "retain documentation comments from system headers in the AST")
|
|
|
|
LANGOPT(APINotes, 1, 0, NotCompatible, "use external API notes")
|
|
LANGOPT(APINotesModules, 1, 0, NotCompatible, "use module-based external API notes")
|
|
LANGOPT(SwiftVersionIndependentAPINotes, 1, 0, NotCompatible, "use external API notes capturing all versions")
|
|
|
|
LANGOPT(SanitizeAddressFieldPadding, 2, 0, NotCompatible, "controls how aggressive is ASan "
|
|
"field padding (0: none, 1:least "
|
|
"aggressive, 2: more aggressive)")
|
|
|
|
LANGOPT(Cmse, 1, 0, NotCompatible, "ARM Security extensions support")
|
|
|
|
LANGOPT(XRayInstrument, 1, 0, NotCompatible, "controls whether to do XRay instrumentation")
|
|
LANGOPT(XRayAlwaysEmitCustomEvents, 1, 0, NotCompatible,
|
|
"controls whether to always emit intrinsic calls to "
|
|
"__xray_customevent(...) builtin.")
|
|
LANGOPT(XRayAlwaysEmitTypedEvents, 1, 0, NotCompatible,
|
|
"controls whether to always emit intrinsic calls to "
|
|
"__xray_typedevent(...) builtin.")
|
|
|
|
LANGOPT(ForceEmitVTables, 1, 0, NotCompatible, "whether to emit all vtables")
|
|
|
|
LANGOPT(AllowEditorPlaceholders, 1, 0, Benign,
|
|
"allow editor placeholders in source")
|
|
|
|
ENUM_LANGOPT(ClangABICompat, ClangABI, 4, ClangABI::Latest, NotCompatible,
|
|
"version of Clang that we should attempt to be ABI-compatible "
|
|
"with")
|
|
|
|
VALUE_LANGOPT(FunctionAlignment, 5, 0, Compatible, "Default alignment for functions")
|
|
VALUE_LANGOPT(LoopAlignment, 32, 0, Compatible, "Default alignment for loops")
|
|
|
|
LANGOPT(FixedPoint, 1, 0, NotCompatible, "fixed point types")
|
|
LANGOPT(PaddingOnUnsignedFixedPoint, 1, 0, NotCompatible,
|
|
"unsigned fixed point types having one extra padding bit")
|
|
|
|
ENUM_LANGOPT(RegisterStaticDestructors, RegisterStaticDestructorsKind, 2,
|
|
RegisterStaticDestructorsKind::All, NotCompatible,
|
|
"Register C++ static destructors")
|
|
|
|
LANGOPT(RegCall4, 1, 0, NotCompatible, "Set __regcall4 as a default calling convention to respect __regcall ABI v.4")
|
|
|
|
LANGOPT(MatrixTypes, 1, 0, NotCompatible, "Enable or disable the builtin matrix type")
|
|
ENUM_LANGOPT(DefaultMatrixMemoryLayout, MatrixMemoryLayout, 1, MatrixMemoryLayout::MatrixColMajor, NotCompatible, "Defines the default memory Layout for matrices")
|
|
VALUE_LANGOPT(MaxMatrixDimension, 32, (1 << 20) - 1, NotCompatible, "maximum allowed matrix dimension")
|
|
|
|
LANGOPT(CXXAssumptions, 1, 1, NotCompatible, "Enable or disable codegen and compile-time checks for C++23's [[assume]] attribute")
|
|
|
|
LANGOPT(RawStringLiterals, 1, 1, NotCompatible, "Enable or disable raw string literals")
|
|
|
|
ENUM_LANGOPT(StrictFlexArraysLevel, StrictFlexArraysLevelKind, 2,
|
|
StrictFlexArraysLevelKind::Default, NotCompatible,
|
|
"Rely on strict definition of flexible arrays")
|
|
|
|
VALUE_LANGOPT(MaxTokens, 32, 0, Compatible, "Max number of tokens per TU or 0")
|
|
|
|
ENUM_LANGOPT(SignReturnAddressScope, SignReturnAddressScopeKind, 2, SignReturnAddressScopeKind::None, NotCompatible,
|
|
"Scope of return address signing")
|
|
ENUM_LANGOPT(SignReturnAddressKey, SignReturnAddressKeyKind, 1, SignReturnAddressKeyKind::AKey, NotCompatible,
|
|
"Key used for return address signing")
|
|
LANGOPT(BranchTargetEnforcement, 1, 0, NotCompatible, "Branch-target enforcement enabled")
|
|
LANGOPT(BranchProtectionPAuthLR, 1, 0, NotCompatible, "Use PC as a diversifier using PAuthLR NOP instructions.")
|
|
LANGOPT(GuardedControlStack, 1, 0, NotCompatible, "Guarded control stack enabled")
|
|
|
|
LANGOPT(SpeculativeLoadHardening, 1, 0, Benign, "Speculative load hardening enabled")
|
|
|
|
LANGOPT(RelativeCXXABIVTables, 1, 0, NotCompatible,
|
|
"Use an ABI-incompatible v-table layout that uses relative references")
|
|
|
|
LANGOPT(OmitVTableRTTI, 1, 0, NotCompatible,
|
|
"Use an ABI-incompatible v-table layout that omits the RTTI component")
|
|
|
|
LANGOPT(VScaleMin, 32, 0, NotCompatible, "Minimum vscale value")
|
|
LANGOPT(VScaleMax, 32, 0, NotCompatible, "Maximum vscale value")
|
|
|
|
LANGOPT(VScaleStreamingMin, 32, 0, NotCompatible, "Minimum streaming vscale value")
|
|
LANGOPT(VScaleStreamingMax, 32, 0, NotCompatible, "Maximum streaming vscale value")
|
|
|
|
ENUM_LANGOPT(ExtendIntArgs, ExtendArgsKind, 1, ExtendArgsKind::ExtendTo32, NotCompatible,
|
|
"Controls how scalar integer arguments are extended in calls "
|
|
"to unprototyped and varargs functions")
|
|
|
|
VALUE_LANGOPT(FuchsiaAPILevel, 32, 0, NotCompatible, "Fuchsia API level")
|
|
|
|
// This option will be removed in the future once the backend
|
|
// supports all operations (like division or float-to-integer conversion)
|
|
// on large _BitInts.
|
|
VALUE_LANGOPT(MaxBitIntWidth, 32, 128, Benign, "Maximum width of a _BitInt")
|
|
|
|
LANGOPT(IncrementalExtensions, 1, 0, Compatible, "True if we want to process statements "
|
|
"on the global scope, ignore EOF token and continue later on (thus "
|
|
"avoid tearing the Lexer and etc. down). Controlled by "
|
|
"-fincremental-extensions.")
|
|
|
|
LANGOPT(CheckNew, 1, 0, Benign, "Do not assume C++ operator new may not return NULL")
|
|
|
|
// FIXME: It would be better for us to find a way to encode the state of this
|
|
// diagnostic in tablegen so that we can specify a particular diagnostic option
|
|
// is disabled or enabled based on other language options or made it easier to
|
|
// do this from the compiler invocation without hitting option round-tripping
|
|
// issues.
|
|
LANGOPT(CheckConstexprFunctionBodies, 1, 1, Benign,
|
|
"Emit diagnostics for a constexpr function body that can never "
|
|
"be used in a constant expression.")
|
|
|
|
LANGOPT(BoundsSafety, 1, 0, NotCompatible, "Bounds safety extension for C")
|
|
|
|
LANGOPT(EnableLifetimeSafety, 1, 0, NotCompatible, "Experimental lifetime safety analysis for C++")
|
|
|
|
LANGOPT(EnableLifetimeSafetyInference, 1, 0, NotCompatible, "Experimental lifetime safety inference analysis for C++")
|
|
|
|
LANGOPT(PreserveVec3Type, 1, 0, NotCompatible, "Preserve 3-component vector type")
|
|
|
|
#undef LANGOPT
|
|
#undef ENUM_LANGOPT
|
|
#undef VALUE_LANGOPT
|