1//===--- LangOptions.def - Language option database -------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This file defines the language options. Users of this file must 10// define the LANGOPT macro to make use of this information. The arguments to 11// the macro are: 12// LANGOPT(Name, Bits, DefaultValue, Description) 13// Note that the DefaultValue must be a constant value (literal or enumeration); 14// it cannot depend on the value of another language option. 15// 16// Optionally, the user may also define: 17// 18// BENIGN_LANGOPT: for options that don't affect the construction of the AST in 19// any way (that is, the value can be different between an implicit module 20// and the user of that module). 21// 22// COMPATIBLE_LANGOPT: for options that affect the construction of the AST in 23// a way that doesn't prevent interoperability (that is, the value can be 24// different between an explicit module and the user of that module). 25// 26// ENUM_LANGOPT: for options that have enumeration, rather than unsigned, type. 27// 28// VALUE_LANGOPT: for options that describe a value rather than a flag. 29// 30// BENIGN_ENUM_LANGOPT, COMPATIBLE_ENUM_LANGOPT, 31// BENIGN_VALUE_LANGOPT, COMPATIBLE_VALUE_LANGOPT: combinations of the above. 32// 33// FIXME: Clients should be able to more easily select whether they want 34// different levels of compatibility versus how to handle different kinds 35// of option. 36// 37// The Description field should be a noun phrase, for instance "frobbing all 38// widgets" or "C's implicit blintz feature". 39//===----------------------------------------------------------------------===// 40 41#ifndef LANGOPT 42# error Define the LANGOPT macro to handle language options 43#endif 44 45#ifndef COMPATIBLE_LANGOPT 46# define COMPATIBLE_LANGOPT(Name, Bits, Default, Description) \ 47 LANGOPT(Name, Bits, Default, Description) 48#endif 49 50#ifndef BENIGN_LANGOPT 51# define BENIGN_LANGOPT(Name, Bits, Default, Description) \ 52 COMPATIBLE_LANGOPT(Name, Bits, Default, Description) 53#endif 54 55#ifndef ENUM_LANGOPT 56# define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \ 57 LANGOPT(Name, Bits, Default, Description) 58#endif 59 60#ifndef COMPATIBLE_ENUM_LANGOPT 61# define COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description) \ 62 ENUM_LANGOPT(Name, Type, Bits, Default, Description) 63#endif 64 65#ifndef BENIGN_ENUM_LANGOPT 66# define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description) \ 67 COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description) 68#endif 69 70#ifndef VALUE_LANGOPT 71# define VALUE_LANGOPT(Name, Bits, Default, Description) \ 72 LANGOPT(Name, Bits, Default, Description) 73#endif 74 75#ifndef COMPATIBLE_VALUE_LANGOPT 76# define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \ 77 VALUE_LANGOPT(Name, Bits, Default, Description) 78#endif 79 80#ifndef BENIGN_VALUE_LANGOPT 81# define BENIGN_VALUE_LANGOPT(Name, Bits, Default, Description) \ 82 COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) 83#endif 84 85// FIXME: A lot of the BENIGN_ options should be COMPATIBLE_ instead. 86LANGOPT(C99 , 1, 0, "C99") 87LANGOPT(C11 , 1, 0, "C11") 88LANGOPT(C17 , 1, 0, "C17") 89LANGOPT(C23 , 1, 0, "C23") 90LANGOPT(C2y , 1, 0, "C2y") 91LANGOPT(MSVCCompat , 1, 0, "Microsoft Visual C++ full compatibility mode") 92LANGOPT(Kernel , 1, 0, "Kernel mode") 93LANGOPT(MicrosoftExt , 1, 0, "Microsoft C++ extensions") 94LANGOPT(AsmBlocks , 1, 0, "Microsoft inline asm blocks") 95LANGOPT(Borland , 1, 0, "Borland extensions") 96LANGOPT(CPlusPlus , 1, 0, "C++") 97LANGOPT(CPlusPlus11 , 1, 0, "C++11") 98LANGOPT(CPlusPlus14 , 1, 0, "C++14") 99LANGOPT(CPlusPlus17 , 1, 0, "C++17") 100LANGOPT(CPlusPlus20 , 1, 0, "C++20") 101LANGOPT(CPlusPlus23 , 1, 0, "C++23") 102LANGOPT(CPlusPlus26 , 1, 0, "C++26") 103LANGOPT(ObjC , 1, 0, "Objective-C") 104BENIGN_LANGOPT(ObjCDefaultSynthProperties , 1, 0, 105 "Objective-C auto-synthesized properties") 106BENIGN_LANGOPT(EncodeExtendedBlockSig , 1, 0, 107 "Encoding extended block type signature") 108BENIGN_LANGOPT(EncodeCXXClassTemplateSpec , 1, 0, 109 "Fully encode c++ class template specialization") 110BENIGN_LANGOPT(ObjCInferRelatedResultType , 1, 1, 111 "Objective-C related result type inference") 112LANGOPT(AppExt , 1, 0, "Objective-C App Extension") 113LANGOPT(Trigraphs , 1, 0,"trigraphs") 114LANGOPT(LineComment , 1, 0, "'//' comments") 115LANGOPT(Bool , 1, 0, "bool, true, and false keywords") 116LANGOPT(Half , 1, 0, "half keyword") 117LANGOPT(WChar , 1, 0, "wchar_t keyword") 118LANGOPT(Char8 , 1, 0, "char8_t keyword") 119LANGOPT(IEEE128 , 1, 0, "__ieee128 keyword") 120LANGOPT(DeclSpecKeyword , 1, 0, "__declspec keyword") 121BENIGN_LANGOPT(DollarIdents , 1, 1, "'$' in identifiers") 122BENIGN_LANGOPT(AsmPreprocessor, 1, 0, "preprocessor in asm mode") 123LANGOPT(GNUMode , 1, 1, "GNU extensions") 124LANGOPT(GNUKeywords , 1, 1, "GNU keywords") 125VALUE_LANGOPT(GNUCVersion , 32, 0, "GNU C compatibility version") 126LANGOPT(DisableKNRFunctions, 1, 0, "require function types to have a prototype") 127LANGOPT(Digraphs , 1, 0, "digraphs") 128BENIGN_LANGOPT(HexFloats , 1, 0, "C99 hexadecimal float constants") 129LANGOPT(CXXOperatorNames , 1, 0, "C++ operator name keywords") 130LANGOPT(AppleKext , 1, 0, "Apple kext support") 131BENIGN_LANGOPT(PascalStrings, 1, 0, "Pascal string support") 132LANGOPT(WritableStrings , 1, 0, "writable string support") 133LANGOPT(ConstStrings , 1, 0, "const-qualified string support") 134ENUM_LANGOPT(LaxVectorConversions, LaxVectorConversionKind, 2, 135 LaxVectorConversionKind::All, "lax vector conversions") 136ENUM_LANGOPT(AltivecSrcCompat, AltivecSrcCompatKind, 2, 137 AltivecSrcCompatKind::Default, "Altivec source compatibility") 138LANGOPT(ConvergentFunctions, 1, 1, "Assume convergent functions") 139LANGOPT(AltiVec , 1, 0, "AltiVec-style vector initializers") 140LANGOPT(ZVector , 1, 0, "System z vector extensions") 141LANGOPT(Exceptions , 1, 0, "exception handling") 142LANGOPT(ObjCExceptions , 1, 0, "Objective-C exceptions") 143LANGOPT(CXXExceptions , 1, 0, "C++ exceptions") 144LANGOPT(EHAsynch , 1, 0, "C/C++ EH Asynch exceptions") 145ENUM_LANGOPT(ExceptionHandling, ExceptionHandlingKind, 3, 146 ExceptionHandlingKind::None, "exception handling") 147LANGOPT(IgnoreExceptions , 1, 0, "ignore exceptions") 148LANGOPT(ExternCNoUnwind , 1, 0, "Assume extern C functions don't unwind") 149LANGOPT(AssumeNothrowExceptionDtor , 1, 0, "Assume exception object's destructor is nothrow") 150LANGOPT(TraditionalCPP , 1, 0, "traditional CPP emulation") 151LANGOPT(RTTI , 1, 1, "run-time type information") 152LANGOPT(RTTIData , 1, 1, "emit run-time type information data") 153LANGOPT(MSBitfields , 1, 0, "Microsoft-compatible structure layout") 154LANGOPT(MSVolatile , 1, 0, "Microsoft-compatible volatile loads and stores") 155LANGOPT(Freestanding, 1, 0, "freestanding implementation") 156LANGOPT(NoBuiltin , 1, 0, "disable builtin functions") 157LANGOPT(NoMathBuiltin , 1, 0, "disable math builtin functions") 158LANGOPT(GNUAsm , 1, 1, "GNU-style inline assembly") 159LANGOPT(Coroutines , 1, 0, "C++20 coroutines") 160LANGOPT(CoroAlignedAllocation, 1, 0, "prefer Aligned Allocation according to P2014 Option 2") 161LANGOPT(DllExportInlines , 1, 1, "dllexported classes dllexport inline methods") 162LANGOPT(RelaxedTemplateTemplateArgs, 1, 1, "C++17 relaxed matching of template template arguments") 163LANGOPT(ExperimentalLibrary, 1, 0, "enable unstable and experimental library features") 164 165LANGOPT(PointerAuthIntrinsics, 1, 0, "pointer authentication intrinsics") 166LANGOPT(PointerAuthCalls , 1, 0, "function pointer authentication") 167LANGOPT(PointerAuthReturns, 1, 0, "return pointer authentication") 168LANGOPT(PointerAuthIndirectGotos, 1, 0, "indirect gotos pointer authentication") 169LANGOPT(PointerAuthAuthTraps, 1, 0, "pointer authentication failure traps") 170LANGOPT(PointerAuthVTPtrAddressDiscrimination, 1, 0, "incorporate address discrimination in authenticated vtable pointers") 171LANGOPT(PointerAuthVTPtrTypeDiscrimination, 1, 0, "incorporate type discrimination in authenticated vtable pointers") 172LANGOPT(PointerAuthTypeInfoVTPtrDiscrimination, 1, 0, "incorporate type and address discrimination in authenticated vtable pointers for std::type_info") 173LANGOPT(PointerAuthInitFini, 1, 0, "sign function pointers in init/fini arrays") 174BENIGN_LANGOPT(PointerAuthFunctionTypeDiscrimination, 1, 0, 175 "Use type discrimination when signing function pointers") 176 177LANGOPT(DoubleSquareBracketAttributes, 1, 0, "'[[]]' attributes extension for all language standard modes") 178LANGOPT(ExperimentalLateParseAttributes, 1, 0, "experimental late parsing of attributes") 179 180COMPATIBLE_LANGOPT(RecoveryAST, 1, 1, "Preserve expressions in AST when encountering errors") 181COMPATIBLE_LANGOPT(RecoveryASTType, 1, 1, "Preserve the type in recovery expressions") 182 183BENIGN_LANGOPT(ThreadsafeStatics , 1, 1, "thread-safe static initializers") 184LANGOPT(POSIXThreads , 1, 0, "POSIX thread support") 185LANGOPT(Blocks , 1, 0, "blocks extension to C") 186BENIGN_LANGOPT(EmitAllDecls , 1, 0, "emitting all declarations") 187LANGOPT(MathErrno , 1, 1, "errno in math functions") 188BENIGN_LANGOPT(HeinousExtensions , 1, 0, "extensions that we really don't like and may be ripped out at any time") 189LANGOPT(Modules , 1, 0, "modules semantics") 190COMPATIBLE_LANGOPT(CPlusPlusModules, 1, 0, "C++ modules syntax") 191LANGOPT(SkipODRCheckInGMF, 1, 0, "Skip ODR checks for decls in the global module fragment") 192LANGOPT(BuiltinHeadersInSystemModules, 1, 0, "builtin headers belong to system modules, and _Builtin_ modules are ignored for cstdlib headers") 193BENIGN_ENUM_LANGOPT(CompilingModule, CompilingModuleKind, 3, CMK_None, 194 "compiling a module interface") 195BENIGN_LANGOPT(CompilingPCH, 1, 0, "building a pch") 196BENIGN_LANGOPT(BuildingPCHWithObjectFile, 1, 0, "building a pch which has a corresponding object file") 197BENIGN_LANGOPT(CacheGeneratedPCH, 1, 0, "cache generated PCH files in memory") 198BENIGN_LANGOPT(PCHInstantiateTemplates, 1, 0, "instantiate templates while building a PCH") 199COMPATIBLE_LANGOPT(ModulesDeclUse , 1, 0, "require declaration of module uses") 200BENIGN_LANGOPT(ModulesSearchAll , 1, 1, "searching even non-imported modules to find unresolved references") 201COMPATIBLE_LANGOPT(ModulesStrictDeclUse, 1, 0, "requiring declaration of module uses and all headers to be in modules") 202COMPATIBLE_LANGOPT(ModulesValidateTextualHeaderIncludes, 1, 1, "validation of textual header includes") 203BENIGN_LANGOPT(ModulesErrorRecovery, 1, 1, "automatically importing modules as needed when performing error recovery") 204BENIGN_LANGOPT(ImplicitModules, 1, 1, "building modules that are not specified via -fmodule-file") 205COMPATIBLE_LANGOPT(ModulesLocalVisibility, 1, 0, "local submodule visibility") 206COMPATIBLE_LANGOPT(Optimize , 1, 0, "__OPTIMIZE__ predefined macro") 207COMPATIBLE_LANGOPT(OptimizeSize , 1, 0, "__OPTIMIZE_SIZE__ predefined macro") 208COMPATIBLE_LANGOPT(Static , 1, 0, "__STATIC__ predefined macro (as opposed to __DYNAMIC__)") 209VALUE_LANGOPT(PackStruct , 32, 0, 210 "default struct packing maximum alignment") 211VALUE_LANGOPT(MaxTypeAlign , 32, 0, 212 "default maximum alignment for types") 213VALUE_LANGOPT(AlignDouble , 1, 0, "Controls if doubles should be aligned to 8 bytes (x86 only)") 214VALUE_LANGOPT(DoubleSize , 32, 0, "width of double") 215VALUE_LANGOPT(LongDoubleSize , 32, 0, "width of long double") 216LANGOPT(PPCIEEELongDouble , 1, 0, "use IEEE 754 quadruple-precision for long double") 217LANGOPT(EnableAIXExtendedAltivecABI , 1, 0, "__EXTABI__ predefined macro") 218LANGOPT(EnableAIXQuadwordAtomicsABI , 1, 0, "Use 16-byte atomic lock free semantics") 219COMPATIBLE_VALUE_LANGOPT(PICLevel , 2, 0, "__PIC__ level") 220COMPATIBLE_VALUE_LANGOPT(PIE , 1, 0, "is pie") 221LANGOPT(ROPI , 1, 0, "Read-only position independence") 222LANGOPT(RWPI , 1, 0, "Read-write position independence") 223COMPATIBLE_LANGOPT(GNUInline , 1, 0, "GNU inline semantics") 224COMPATIBLE_LANGOPT(NoInlineDefine , 1, 0, "__NO_INLINE__ predefined macro") 225COMPATIBLE_LANGOPT(Deprecated , 1, 0, "__DEPRECATED predefined macro") 226COMPATIBLE_LANGOPT(FastMath , 1, 0, "fast FP math optimizations, and __FAST_MATH__ predefined macro") 227COMPATIBLE_LANGOPT(FiniteMathOnly , 1, 0, "__FINITE_MATH_ONLY__ predefined macro") 228COMPATIBLE_LANGOPT(UnsafeFPMath , 1, 0, "Unsafe Floating Point Math") 229COMPATIBLE_LANGOPT(ProtectParens , 1, 0, "optimizer honors parentheses " 230 "when floating-point expressions are evaluated") 231BENIGN_LANGOPT(AllowFPReassoc , 1, 0, "Permit Floating Point reassociation") 232BENIGN_LANGOPT(NoHonorNaNs , 1, 0, "Permit Floating Point optimization without regard to NaN") 233BENIGN_LANGOPT(NoHonorInfs , 1, 0, "Permit Floating Point optimization without regard to infinities") 234BENIGN_LANGOPT(NoSignedZero , 1, 0, "Permit Floating Point optimization without regard to signed zeros") 235BENIGN_LANGOPT(AllowRecip , 1, 0, "Permit Floating Point reciprocal") 236BENIGN_LANGOPT(ApproxFunc , 1, 0, "Permit Floating Point approximation") 237 238ENUM_LANGOPT(ComplexRange, ComplexRangeKind, 2, CX_None, "Enable use of range reduction for complex arithmetics.") 239 240BENIGN_LANGOPT(ObjCGCBitmapPrint , 1, 0, "printing of GC's bitmap layout for __weak/__strong ivars") 241 242BENIGN_LANGOPT(AccessControl , 1, 1, "C++ access control") 243LANGOPT(CharIsSigned , 1, 1, "signed char") 244LANGOPT(WCharSize , 4, 0, "width of wchar_t") 245LANGOPT(WCharIsSigned , 1, 0, "signed or unsigned wchar_t") 246ENUM_LANGOPT(MSPointerToMemberRepresentationMethod, PragmaMSPointersToMembersKind, 2, PPTMK_BestCase, "member-pointer representation method") 247ENUM_LANGOPT(DefaultCallingConv, DefaultCallingConvention, 3, DCC_None, "default calling convention") 248 249LANGOPT(ShortEnums , 1, 0, "short enum types") 250 251LANGOPT(OpenCL , 1, 0, "OpenCL") 252LANGOPT(OpenCLVersion , 32, 0, "OpenCL C version") 253LANGOPT(OpenCLCPlusPlus , 1, 0, "C++ for OpenCL") 254LANGOPT(OpenCLCPlusPlusVersion , 32, 0, "C++ for OpenCL version") 255LANGOPT(OpenCLGenericAddressSpace, 1, 0, "OpenCL generic keyword") 256LANGOPT(OpenCLPipes , 1, 0, "OpenCL pipes language constructs and built-ins") 257LANGOPT(NativeHalfType , 1, 0, "Native half type support") 258LANGOPT(NativeHalfArgsAndReturns, 1, 0, "Native half args and returns") 259LANGOPT(CUDA , 1, 0, "CUDA") 260LANGOPT(HIP , 1, 0, "HIP") 261LANGOPT(OpenMP , 32, 0, "OpenMP support and version of OpenMP (31, 40 or 45)") 262LANGOPT(OpenMPExtensions , 1, 1, "Enable all Clang extensions for OpenMP directives and clauses") 263LANGOPT(OpenMPSimd , 1, 0, "Use SIMD only OpenMP support.") 264LANGOPT(OpenMPUseTLS , 1, 0, "Use TLS for threadprivates or runtime calls") 265LANGOPT(OpenMPIsTargetDevice , 1, 0, "Generate code only for OpenMP target device") 266LANGOPT(OpenMPCUDAMode , 1, 0, "Generate code for OpenMP pragmas in SIMT/SPMD mode") 267LANGOPT(OpenMPIRBuilder , 1, 0, "Use the experimental OpenMP-IR-Builder codegen path.") 268LANGOPT(OpenMPCUDANumSMs , 32, 0, "Number of SMs for CUDA devices.") 269LANGOPT(OpenMPCUDABlocksPerSM , 32, 0, "Number of blocks per SM for CUDA devices.") 270LANGOPT(OpenMPCUDAReductionBufNum , 32, 1024, "Number of the reduction records in the intermediate reduction buffer used for the teams reductions.") 271LANGOPT(OpenMPTargetDebug , 32, 0, "Enable debugging in the OpenMP offloading device RTL") 272LANGOPT(OpenMPOptimisticCollapse , 1, 0, "Use at most 32 bits to represent the collapsed loop nest counter.") 273LANGOPT(OpenMPThreadSubscription , 1, 0, "Assume work-shared loops do not have more iterations than participating threads.") 274LANGOPT(OpenMPTeamSubscription , 1, 0, "Assume distributed loops do not have more iterations than participating teams.") 275LANGOPT(OpenMPNoThreadState , 1, 0, "Assume that no thread in a parallel region will modify an ICV.") 276LANGOPT(OpenMPNoNestedParallelism , 1, 0, "Assume that no thread in a parallel region will encounter a parallel region") 277LANGOPT(OpenMPOffloadMandatory , 1, 0, "Assert that offloading is mandatory and do not create a host fallback.") 278LANGOPT(OpenMPForceUSM , 1, 0, "Enable OpenMP unified shared memory mode via compiler.") 279LANGOPT(NoGPULib , 1, 0, "Indicate a build without the standard GPU libraries.") 280LANGOPT(RenderScript , 1, 0, "RenderScript") 281 282LANGOPT(HLSL, 1, 0, "HLSL") 283ENUM_LANGOPT(HLSLVersion, HLSLLangStd, 16, HLSL_Unset, "HLSL Version") 284LANGOPT(HLSLStrictAvailability, 1, 0, 285 "Strict availability diagnostic mode for HLSL built-in functions.") 286 287LANGOPT(CUDAIsDevice , 1, 0, "compiling for CUDA device") 288LANGOPT(CUDAAllowVariadicFunctions, 1, 0, "allowing variadic functions in CUDA device code") 289LANGOPT(CUDAHostDeviceConstexpr, 1, 1, "treating unattributed constexpr functions as __host__ __device__") 290LANGOPT(GPUDeviceApproxTranscendentals, 1, 0, "using approximate transcendental functions") 291LANGOPT(GPURelocatableDeviceCode, 1, 0, "generate relocatable device code") 292LANGOPT(OffloadImplicitHostDeviceTemplates, 1, 0, "assume template functions to be implicitly host device by default for CUDA/HIP") 293LANGOPT(GPUAllowDeviceInit, 1, 0, "allowing device side global init functions for HIP") 294LANGOPT(GPUMaxThreadsPerBlock, 32, 1024, "default max threads per block for kernel launch bounds for HIP") 295LANGOPT(GPUDeferDiag, 1, 0, "defer host/device related diagnostic messages for CUDA/HIP") 296LANGOPT(GPUExcludeWrongSideOverloads, 1, 0, "always exclude wrong side overloads in overloading resolution for CUDA/HIP") 297LANGOPT(OffloadingNewDriver, 1, 0, "use the new driver for generating offloading code.") 298 299LANGOPT(SYCLIsDevice , 1, 0, "Generate code for SYCL device") 300LANGOPT(SYCLIsHost , 1, 0, "SYCL host compilation") 301ENUM_LANGOPT(SYCLVersion , SYCLMajorVersion, 2, SYCL_None, "Version of the SYCL standard used") 302 303LANGOPT(HIPUseNewLaunchAPI, 1, 0, "Use new kernel launching API for HIP") 304LANGOPT(OffloadUniformBlock, 1, 0, "Assume that kernels are launched with uniform block sizes (default true for CUDA/HIP and false otherwise)") 305LANGOPT(HIPStdPar, 1, 0, "Enable Standard Parallel Algorithm Acceleration for HIP (experimental)") 306LANGOPT(HIPStdParInterposeAlloc, 1, 0, "Replace allocations / deallocations with HIP RT calls when Standard Parallel Algorithm Acceleration for HIP is enabled (Experimental)") 307 308LANGOPT(OpenACC , 1, 0, "OpenACC Enabled") 309 310LANGOPT(MSVCEnableStdcMacro , 1, 0, "Define __STDC__ with '-fms-compatibility'") 311LANGOPT(SizedDeallocation , 1, 0, "sized deallocation") 312LANGOPT(AlignedAllocation , 1, 0, "aligned allocation") 313LANGOPT(AlignedAllocationUnavailable, 1, 0, "aligned allocation functions are unavailable") 314LANGOPT(NewAlignOverride , 32, 0, "maximum alignment guaranteed by '::operator new(size_t)'") 315BENIGN_LANGOPT(ModulesCodegen , 1, 0, "Modules code generation") 316BENIGN_LANGOPT(ModulesDebugInfo , 1, 0, "Modules debug info") 317BENIGN_LANGOPT(ElideConstructors , 1, 1, "C++ copy constructor elision") 318BENIGN_LANGOPT(DumpRecordLayouts , 1, 0, "dumping the layout of IRgen'd records") 319BENIGN_LANGOPT(DumpRecordLayoutsSimple , 1, 0, "dumping the layout of IRgen'd records in a simple form") 320BENIGN_LANGOPT(DumpRecordLayoutsCanonical , 1, 0, "dumping the AST layout of records using canonical field types") 321BENIGN_LANGOPT(DumpRecordLayoutsComplete , 1, 0, "dumping the AST layout of all complete records") 322BENIGN_LANGOPT(DumpVTableLayouts , 1, 0, "dumping the layouts of emitted vtables") 323LANGOPT(NoConstantCFStrings , 1, 0, "no constant CoreFoundation strings") 324BENIGN_LANGOPT(InlineVisibilityHidden , 1, 0, "hidden visibility for inline C++ methods") 325BENIGN_ENUM_LANGOPT(DefaultVisibilityExportMapping, DefaultVisiblityExportMapping, 2, DefaultVisiblityExportMapping::None, "controls mapping of default visibility to dllexport") 326BENIGN_LANGOPT(IgnoreXCOFFVisibility, 1, 0, "All the visibility attributes that are specified in the source code are ignored in aix XCOFF.") 327BENIGN_LANGOPT(VisibilityInlinesHiddenStaticLocalVar, 1, 0, 328 "hidden visibility for static local variables in inline C++ " 329 "methods when -fvisibility-inlines hidden is enabled") 330ENUM_LANGOPT(GlobalAllocationFunctionVisibility, VisibilityForcedKinds, 3, VisibilityForcedKinds::ForceDefault, 331 "How to apply visibility to global operator new and delete declarations") 332LANGOPT(NewInfallible , 1, 0, "Treats throwing global C++ operator new as always returning valid memory (annotates with __attribute__((returns_nonnull)) and throw()). This is detectable in source.") 333BENIGN_LANGOPT(ParseUnknownAnytype, 1, 0, "__unknown_anytype") 334BENIGN_LANGOPT(DebuggerSupport , 1, 0, "debugger support") 335BENIGN_LANGOPT(DebuggerCastResultToId, 1, 0, "for 'po' in the debugger, cast the result to id if it is of unknown type") 336BENIGN_LANGOPT(DebuggerObjCLiteral , 1, 0, "debugger Objective-C literals and subscripting support") 337 338BENIGN_LANGOPT(SpellChecking , 1, 1, "spell-checking") 339LANGOPT(SinglePrecisionConstants , 1, 0, "treating double-precision floating point constants as single precision constants") 340LANGOPT(FastRelaxedMath , 1, 0, "OpenCL fast relaxed math") 341BENIGN_LANGOPT(CLNoSignedZero , 1, 0, "Permit Floating Point optimization without regard to signed zeros") 342COMPATIBLE_LANGOPT(CLUnsafeMath , 1, 0, "Unsafe Floating Point Math") 343COMPATIBLE_LANGOPT(CLFiniteMathOnly , 1, 0, "__FINITE_MATH_ONLY__ predefined macro") 344/// FP_CONTRACT mode (on/off/fast). 345BENIGN_ENUM_LANGOPT(DefaultFPContractMode, FPModeKind, 2, FPM_Off, "FP contraction type") 346COMPATIBLE_LANGOPT(ExpStrictFP, 1, false, "Enable experimental strict floating point") 347BENIGN_LANGOPT(RoundingMath, 1, false, "Do not assume default floating-point rounding behavior") 348BENIGN_ENUM_LANGOPT(FPExceptionMode, FPExceptionModeKind, 2, FPE_Default, "FP Exception Behavior Mode type") 349BENIGN_ENUM_LANGOPT(FPEvalMethod, FPEvalMethodKind, 2, FEM_UnsetOnCommandLine, "FP type used for floating point arithmetic") 350ENUM_LANGOPT(Float16ExcessPrecision, ExcessPrecisionKind, 2, FPP_Standard, "Intermediate truncation behavior for Float16 arithmetic") 351ENUM_LANGOPT(BFloat16ExcessPrecision, ExcessPrecisionKind, 2, FPP_Standard, "Intermediate truncation behavior for BFloat16 arithmetic") 352LANGOPT(NoBitFieldTypeAlign , 1, 0, "bit-field type alignment") 353LANGOPT(HexagonQdsp6Compat , 1, 0, "hexagon-qdsp6 backward compatibility") 354LANGOPT(ObjCAutoRefCount , 1, 0, "Objective-C automated reference counting") 355LANGOPT(ObjCWeakRuntime , 1, 0, "__weak support in the ARC runtime") 356LANGOPT(ObjCWeak , 1, 0, "Objective-C __weak in ARC and MRC files") 357LANGOPT(ObjCSubscriptingLegacyRuntime , 1, 0, "Subscripting support in legacy ObjectiveC runtime") 358BENIGN_LANGOPT(CompatibilityQualifiedIdBlockParamTypeChecking, 1, 0, 359 "compatibility mode for type checking block parameters " 360 "involving qualified id types") 361LANGOPT(ObjCDisableDirectMethodsForTesting, 1, 0, 362 "Disable recognition of objc_direct methods") 363LANGOPT(CFProtectionBranch , 1, 0, "Control-Flow Branch Protection enabled") 364LANGOPT(FakeAddressSpaceMap , 1, 0, "OpenCL fake address space map") 365ENUM_LANGOPT(AddressSpaceMapMangling , AddrSpaceMapMangling, 2, ASMM_Target, "OpenCL address space map mangling mode") 366LANGOPT(IncludeDefaultHeader, 1, 0, "Include default header file for OpenCL") 367LANGOPT(DeclareOpenCLBuiltins, 1, 0, "Declare OpenCL builtin functions") 368BENIGN_LANGOPT(DelayedTemplateParsing , 1, 0, "delayed template parsing") 369LANGOPT(BlocksRuntimeOptional , 1, 0, "optional blocks runtime") 370LANGOPT( 371 CompleteMemberPointers, 1, 0, 372 "Require member pointer base types to be complete at the point where the " 373 "type's inheritance model would be determined under the Microsoft ABI") 374 375ENUM_LANGOPT(GC, GCMode, 2, NonGC, "Objective-C Garbage Collection mode") 376BENIGN_ENUM_LANGOPT(ValueVisibilityMode, Visibility, 3, DefaultVisibility, 377 "default visibility for functions and variables [-fvisibility]") 378BENIGN_ENUM_LANGOPT(TypeVisibilityMode, Visibility, 3, DefaultVisibility, 379 "default visibility for types [-ftype-visibility]") 380LANGOPT(SetVisibilityForExternDecls, 1, 0, 381 "apply global symbol visibility to external declarations without an explicit visibility") 382BENIGN_LANGOPT(VisibilityFromDLLStorageClass, 1, 0, 383 "override the visibility of globals based on their final DLL storage class [-fvisibility-from-dllstorageclass]") 384BENIGN_ENUM_LANGOPT(DLLExportVisibility, VisibilityFromDLLStorageClassKinds, 3, VisibilityFromDLLStorageClassKinds::Default, 385 "how to adjust the visibility for functions and variables with dllexport annotations [-fvisibility-dllexport]") 386BENIGN_ENUM_LANGOPT(NoDLLStorageClassVisibility, VisibilityFromDLLStorageClassKinds, 3, VisibilityFromDLLStorageClassKinds::Hidden, 387 "how to adjust the visibility for functions and variables without an explicit DLL storage class [-fvisibility-nodllstorageclass]") 388BENIGN_ENUM_LANGOPT(ExternDeclDLLImportVisibility, VisibilityFromDLLStorageClassKinds, 3, VisibilityFromDLLStorageClassKinds::Default, 389 "how to adjust the visibility for external declarations with dllimport annotations [-fvisibility-externs-dllimport]") 390BENIGN_ENUM_LANGOPT(ExternDeclNoDLLStorageClassVisibility, VisibilityFromDLLStorageClassKinds, 3, VisibilityFromDLLStorageClassKinds::Hidden, 391 "how to adjust the visibility for external declarations without an explicit DLL storage class [-fvisibility-externs-nodllstorageclass]") 392BENIGN_LANGOPT(SemanticInterposition , 1, 0, "semantic interposition") 393BENIGN_LANGOPT(HalfNoSemanticInterposition, 1, 0, 394 "Like -fno-semantic-interposition but don't use local aliases") 395ENUM_LANGOPT(StackProtector, StackProtectorMode, 2, SSPOff, 396 "stack protector mode") 397ENUM_LANGOPT(TrivialAutoVarInit, TrivialAutoVarInitKind, 2, TrivialAutoVarInitKind::Uninitialized, 398 "trivial automatic variable initialization") 399VALUE_LANGOPT(TrivialAutoVarInitStopAfter, 32, 0, 400 "stop trivial automatic variable initialization after the specified number of instances. Must be greater than 0.") 401VALUE_LANGOPT(TrivialAutoVarInitMaxSize, 32, 0, 402 "stop trivial automatic variable initialization if var size exceeds the specified size (in bytes). Must be greater than 0.") 403ENUM_LANGOPT(SignedOverflowBehavior, SignedOverflowBehaviorTy, 2, SOB_Undefined, 404 "signed integer overflow handling") 405ENUM_LANGOPT(ThreadModel , ThreadModelKind, 2, ThreadModelKind::POSIX, "Thread Model") 406 407BENIGN_LANGOPT(ArrowDepth, 32, 256, 408 "maximum number of operator->s to follow") 409BENIGN_LANGOPT(InstantiationDepth, 32, 1024, 410 "maximum template instantiation depth") 411BENIGN_LANGOPT(ConstexprCallDepth, 32, 512, 412 "maximum constexpr call depth") 413BENIGN_LANGOPT(ConstexprStepLimit, 32, 1048576, 414 "maximum constexpr evaluation steps") 415BENIGN_LANGOPT(EnableNewConstInterp, 1, 0, 416 "enable the experimental new constant interpreter") 417BENIGN_LANGOPT(BracketDepth, 32, 256, 418 "maximum bracket nesting depth") 419BENIGN_LANGOPT(NumLargeByValueCopy, 32, 0, 420 "if non-zero, warn about parameter or return Warn if parameter/return value is larger in bytes than this setting. 0 is no check.") 421VALUE_LANGOPT(MSCompatibilityVersion, 32, 0, "Microsoft Visual C/C++ Version") 422ENUM_LANGOPT(VtorDispMode, MSVtorDispMode, 2, MSVtorDispMode::ForVBaseOverride, 423 "How many vtordisps to insert") 424 425LANGOPT(ApplePragmaPack, 1, 0, "Apple gcc-compatible #pragma pack handling") 426 427LANGOPT(XLPragmaPack, 1, 0, "IBM XL #pragma pack handling") 428 429LANGOPT(RetainCommentsFromSystemHeaders, 1, 0, "retain documentation comments from system headers in the AST") 430 431LANGOPT(APINotes, 1, 0, "use external API notes") 432LANGOPT(APINotesModules, 1, 0, "use module-based external API notes") 433 434LANGOPT(SanitizeAddressFieldPadding, 2, 0, "controls how aggressive is ASan " 435 "field padding (0: none, 1:least " 436 "aggressive, 2: more aggressive)") 437 438LANGOPT(Cmse, 1, 0, "ARM Security extensions support") 439 440LANGOPT(XRayInstrument, 1, 0, "controls whether to do XRay instrumentation") 441LANGOPT(XRayAlwaysEmitCustomEvents, 1, 0, 442 "controls whether to always emit intrinsic calls to " 443 "__xray_customevent(...) builtin.") 444LANGOPT(XRayAlwaysEmitTypedEvents, 1, 0, 445 "controls whether to always emit intrinsic calls to " 446 "__xray_typedevent(...) builtin.") 447 448LANGOPT(ForceEmitVTables, 1, 0, "whether to emit all vtables") 449 450BENIGN_LANGOPT(AllowEditorPlaceholders, 1, 0, 451 "allow editor placeholders in source") 452 453ENUM_LANGOPT(ClangABICompat, ClangABI, 4, ClangABI::Latest, 454 "version of Clang that we should attempt to be ABI-compatible " 455 "with") 456 457COMPATIBLE_VALUE_LANGOPT(FunctionAlignment, 5, 0, "Default alignment for functions") 458COMPATIBLE_VALUE_LANGOPT(LoopAlignment, 32, 0, "Default alignment for loops") 459 460LANGOPT(FixedPoint, 1, 0, "fixed point types") 461LANGOPT(PaddingOnUnsignedFixedPoint, 1, 0, 462 "unsigned fixed point types having one extra padding bit") 463 464LANGOPT(RegisterStaticDestructors, 1, 1, "Register C++ static destructors") 465 466LANGOPT(RegCall4, 1, 0, "Set __regcall4 as a default calling convention to respect __regcall ABI v.4") 467 468LANGOPT(MatrixTypes, 1, 0, "Enable or disable the builtin matrix type") 469 470LANGOPT(CXXAssumptions, 1, 1, "Enable or disable codegen and compile-time checks for C++23's [[assume]] attribute") 471 472LANGOPT(RawStringLiterals, 1, 1, "Enable or disable raw string literals") 473 474ENUM_LANGOPT(StrictFlexArraysLevel, StrictFlexArraysLevelKind, 2, 475 StrictFlexArraysLevelKind::Default, 476 "Rely on strict definition of flexible arrays") 477 478COMPATIBLE_VALUE_LANGOPT(MaxTokens, 32, 0, "Max number of tokens per TU or 0") 479 480ENUM_LANGOPT(SignReturnAddressScope, SignReturnAddressScopeKind, 2, SignReturnAddressScopeKind::None, 481 "Scope of return address signing") 482ENUM_LANGOPT(SignReturnAddressKey, SignReturnAddressKeyKind, 1, SignReturnAddressKeyKind::AKey, 483 "Key used for return address signing") 484LANGOPT(BranchTargetEnforcement, 1, 0, "Branch-target enforcement enabled") 485LANGOPT(BranchProtectionPAuthLR, 1, 0, "Use PC as a diversifier using PAuthLR NOP instructions.") 486LANGOPT(GuardedControlStack, 1, 0, "Guarded control stack enabled") 487 488LANGOPT(SpeculativeLoadHardening, 1, 0, "Speculative load hardening enabled") 489 490LANGOPT(RelativeCXXABIVTables, 1, 0, 491 "Use an ABI-incompatible v-table layout that uses relative references") 492 493LANGOPT(OmitVTableRTTI, 1, 0, 494 "Use an ABI-incompatible v-table layout that omits the RTTI component") 495 496LANGOPT(VScaleMin, 32, 0, "Minimum vscale value") 497LANGOPT(VScaleMax, 32, 0, "Maximum vscale value") 498 499ENUM_LANGOPT(ExtendIntArgs, ExtendArgsKind, 1, ExtendArgsKind::ExtendTo32, 500 "Controls how scalar integer arguments are extended in calls " 501 "to unprototyped and varargs functions") 502 503VALUE_LANGOPT(FuchsiaAPILevel, 32, 0, "Fuchsia API level") 504 505// This option will be removed in the future once the backend 506// supports all operations (like division or float-to-integer conversion) 507// on large _BitInts. 508BENIGN_VALUE_LANGOPT(MaxBitIntWidth, 32, 128, "Maximum width of a _BitInt") 509 510COMPATIBLE_LANGOPT(IncrementalExtensions, 1, 0, " True if we want to process statements" 511 "on the global scope, ignore EOF token and continue later on (thus " 512 "avoid tearing the Lexer and etc. down). Controlled by " 513 "-fincremental-extensions.") 514 515BENIGN_LANGOPT(CheckNew, 1, 0, "Do not assume C++ operator new may not return NULL") 516 517// FIXME: It would be better for us to find a way to encode the state of this 518// diagnostic in tablegen so that we can specify a particular diagnostic option 519// is disabled or enabled based on other language options or made it easier to 520// do this from the compiler invocation without hitting option round-tripping 521// issues. 522BENIGN_LANGOPT(CheckConstexprFunctionBodies, 1, 1, 523 "Emit diagnostics for a constexpr function body that can never " 524 "be used in a constant expression.") 525 526LANGOPT(BoundsSafety, 1, 0, "Bounds safety extension for C") 527 528#undef LANGOPT 529#undef COMPATIBLE_LANGOPT 530#undef BENIGN_LANGOPT 531#undef ENUM_LANGOPT 532#undef COMPATIBLE_ENUM_LANGOPT 533#undef BENIGN_ENUM_LANGOPT 534#undef VALUE_LANGOPT 535#undef COMPATIBLE_VALUE_LANGOPT 536#undef BENIGN_VALUE_LANGOPT 537