]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/include/clang/Basic/LangOptions.def
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / include / clang / Basic / LangOptions.def
1 //===--- LangOptions.def - Language option database -------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the language options. Users of this file must
11 // define the LANGOPT macro to make use of this information.
12 //
13 // Optionally, the user may also define:
14 //
15 // BENIGN_LANGOPT: for options that don't affect the construction of the AST in
16 //     any way (that is, the value can be different between an implicit module
17 //     and the user of that module).
18 //
19 // COMPATIBLE_LANGOPT: for options that affect the construction of the AST in
20 //     a way that doesn't prevent interoperability (that is, the value can be
21 //     different between an explicit module and the user of that module).
22 //
23 // ENUM_LANGOPT: for options that have enumeration, rather than unsigned, type.
24 //
25 // VALUE_LANGOPT: for options that describe a value rather than a flag.
26 //
27 // BENIGN_ENUM_LANGOPT, COMPATIBLE_ENUM_LANGOPT,
28 // BENIGN_VALUE_LANGOPT, COMPATIBLE_VALUE_LANGOPT: combinations of the above.
29 //
30 // FIXME: Clients should be able to more easily select whether they want
31 // different levels of compatibility versus how to handle different kinds
32 // of option.
33 //
34 // The Description field should be a noun phrase, for instance "frobbing all
35 // widgets" or "C's implicit blintz feature".
36 //===----------------------------------------------------------------------===//
37
38 #ifndef LANGOPT
39 #  error Define the LANGOPT macro to handle language options
40 #endif
41
42 #ifndef COMPATIBLE_LANGOPT
43 #  define COMPATIBLE_LANGOPT(Name, Bits, Default, Description) \
44      LANGOPT(Name, Bits, Default, Description)
45 #endif
46
47 #ifndef BENIGN_LANGOPT
48 #  define BENIGN_LANGOPT(Name, Bits, Default, Description) \
49      COMPATIBLE_LANGOPT(Name, Bits, Default, Description)
50 #endif
51
52 #ifndef ENUM_LANGOPT
53 #  define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
54      LANGOPT(Name, Bits, Default, Description)
55 #endif
56
57 #ifndef COMPATIBLE_ENUM_LANGOPT
58 #  define COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
59      ENUM_LANGOPT(Name, Type, Bits, Default, Description)
60 #endif
61
62 #ifndef BENIGN_ENUM_LANGOPT
63 #  define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
64      COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
65 #endif
66
67 #ifndef VALUE_LANGOPT
68 #  define VALUE_LANGOPT(Name, Bits, Default, Description) \
69      LANGOPT(Name, Bits, Default, Description)
70 #endif
71
72 #ifndef COMPATIBLE_VALUE_LANGOPT
73 #  define COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description) \
74      VALUE_LANGOPT(Name, Bits, Default, Description)
75 #endif
76
77 #ifndef BENIGN_VALUE_LANGOPT
78 #  define BENIGN_VALUE_LANGOPT(Name, Bits, Default, Description) \
79      COMPATIBLE_VALUE_LANGOPT(Name, Bits, Default, Description)
80 #endif
81
82 // FIXME: A lot of the BENIGN_ options should be COMPATIBLE_ instead.
83 LANGOPT(C99               , 1, 0, "C99")
84 LANGOPT(C11               , 1, 0, "C11")
85 LANGOPT(C17               , 1, 0, "C17")
86 LANGOPT(MSVCCompat        , 1, 0, "Microsoft Visual C++ full compatibility mode")
87 LANGOPT(MicrosoftExt      , 1, 0, "Microsoft C++ extensions")
88 LANGOPT(AsmBlocks         , 1, 0, "Microsoft inline asm blocks")
89 LANGOPT(Borland           , 1, 0, "Borland extensions")
90 LANGOPT(CPlusPlus         , 1, 0, "C++")
91 LANGOPT(CPlusPlus11       , 1, 0, "C++11")
92 LANGOPT(CPlusPlus14       , 1, 0, "C++14")
93 LANGOPT(CPlusPlus17       , 1, 0, "C++17")
94 LANGOPT(CPlusPlus2a       , 1, 0, "C++2a")
95 LANGOPT(ObjC              , 1, 0, "Objective-C")
96 BENIGN_LANGOPT(ObjCDefaultSynthProperties , 1, 0,
97                "Objective-C auto-synthesized properties")
98 BENIGN_LANGOPT(EncodeExtendedBlockSig , 1, 0,
99                "Encoding extended block type signature")
100 BENIGN_LANGOPT(ObjCInferRelatedResultType , 1, 1,
101                "Objective-C related result type inference")
102 LANGOPT(AppExt , 1, 0, "Objective-C App Extension")
103 LANGOPT(Trigraphs         , 1, 0,"trigraphs")
104 LANGOPT(LineComment       , 1, 0, "'//' comments")
105 LANGOPT(Bool              , 1, 0, "bool, true, and false keywords")
106 LANGOPT(Half              , 1, 0, "half keyword")
107 LANGOPT(WChar             , 1, CPlusPlus, "wchar_t keyword")
108 LANGOPT(Char8             , 1, 0, "char8_t keyword")
109 LANGOPT(DeclSpecKeyword   , 1, 0, "__declspec keyword")
110 BENIGN_LANGOPT(DollarIdents   , 1, 1, "'$' in identifiers")
111 BENIGN_LANGOPT(AsmPreprocessor, 1, 0, "preprocessor in asm mode")
112 LANGOPT(GNUMode           , 1, 1, "GNU extensions")
113 LANGOPT(GNUKeywords       , 1, 1, "GNU keywords")
114 BENIGN_LANGOPT(ImplicitInt, 1, !C99 && !CPlusPlus, "C89 implicit 'int'")
115 LANGOPT(Digraphs          , 1, 0, "digraphs")
116 BENIGN_LANGOPT(HexFloats  , 1, C99, "C99 hexadecimal float constants")
117 LANGOPT(CXXOperatorNames  , 1, 0, "C++ operator name keywords")
118 LANGOPT(AppleKext         , 1, 0, "Apple kext support")
119 BENIGN_LANGOPT(PascalStrings, 1, 0, "Pascal string support")
120 LANGOPT(WritableStrings   , 1, 0, "writable string support")
121 LANGOPT(ConstStrings      , 1, 0, "const-qualified string support")
122 LANGOPT(LaxVectorConversions , 1, 1, "lax vector conversions")
123 LANGOPT(AltiVec           , 1, 0, "AltiVec-style vector initializers")
124 LANGOPT(ZVector           , 1, 0, "System z vector extensions")
125 LANGOPT(Exceptions        , 1, 0, "exception handling")
126 LANGOPT(ObjCExceptions    , 1, 0, "Objective-C exceptions")
127 LANGOPT(CXXExceptions     , 1, 0, "C++ exceptions")
128 LANGOPT(DWARFExceptions   , 1, 0, "dwarf exception handling")
129 LANGOPT(SjLjExceptions    , 1, 0, "setjmp-longjump exception handling")
130 LANGOPT(SEHExceptions     , 1, 0, "SEH .xdata exception handling")
131 LANGOPT(ExternCNoUnwind   , 1, 0, "Assume extern C functions don't unwind")
132 LANGOPT(TraditionalCPP    , 1, 0, "traditional CPP emulation")
133 LANGOPT(RTTI              , 1, 1, "run-time type information")
134 LANGOPT(RTTIData          , 1, 1, "emit run-time type information data")
135 LANGOPT(MSBitfields       , 1, 0, "Microsoft-compatible structure layout")
136 LANGOPT(Freestanding, 1, 0, "freestanding implementation")
137 LANGOPT(NoBuiltin         , 1, 0, "disable builtin functions")
138 LANGOPT(NoMathBuiltin     , 1, 0, "disable math builtin functions")
139 LANGOPT(GNUAsm            , 1, 1, "GNU-style inline assembly")
140 LANGOPT(CoroutinesTS      , 1, 0, "C++ coroutines TS")
141 LANGOPT(DllExportInlines  , 1, 1, "dllexported classes dllexport inline methods")
142 LANGOPT(RelaxedTemplateTemplateArgs, 1, 0, "C++17 relaxed matching of template template arguments")
143
144 LANGOPT(DoubleSquareBracketAttributes, 1, 0, "'[[]]' attributes extension for all language standard modes")
145
146 BENIGN_LANGOPT(ThreadsafeStatics , 1, 1, "thread-safe static initializers")
147 LANGOPT(POSIXThreads      , 1, 0, "POSIX thread support")
148 LANGOPT(Blocks            , 1, 0, "blocks extension to C")
149 BENIGN_LANGOPT(EmitAllDecls      , 1, 0, "emitting all declarations")
150 LANGOPT(MathErrno         , 1, 1, "errno in math functions")
151 BENIGN_LANGOPT(HeinousExtensions , 1, 0, "extensions that we really don't like and may be ripped out at any time")
152 LANGOPT(Modules           , 1, 0, "modules extension to C")
153 COMPATIBLE_LANGOPT(ModulesTS  , 1, 0, "C++ Modules TS")
154 BENIGN_ENUM_LANGOPT(CompilingModule, CompilingModuleKind, 2, CMK_None,
155                     "compiling a module interface")
156 BENIGN_LANGOPT(CompilingPCH, 1, 0, "building a pch")
157 BENIGN_LANGOPT(BuildingPCHWithObjectFile, 1, 0, "building a pch which has a corresponding object file")
158 COMPATIBLE_LANGOPT(ModulesDeclUse    , 1, 0, "require declaration of module uses")
159 BENIGN_LANGOPT(ModulesSearchAll  , 1, 1, "searching even non-imported modules to find unresolved references")
160 COMPATIBLE_LANGOPT(ModulesStrictDeclUse, 1, 0, "requiring declaration of module uses and all headers to be in modules")
161 BENIGN_LANGOPT(ModulesErrorRecovery, 1, 1, "automatically importing modules as needed when performing error recovery")
162 BENIGN_LANGOPT(ImplicitModules, 1, 1, "building modules that are not specified via -fmodule-file")
163 COMPATIBLE_LANGOPT(ModulesLocalVisibility, 1, 0, "local submodule visibility")
164 COMPATIBLE_LANGOPT(Optimize          , 1, 0, "__OPTIMIZE__ predefined macro")
165 COMPATIBLE_LANGOPT(OptimizeSize      , 1, 0, "__OPTIMIZE_SIZE__ predefined macro")
166 COMPATIBLE_LANGOPT(Static            , 1, 0, "__STATIC__ predefined macro (as opposed to __DYNAMIC__)")
167 VALUE_LANGOPT(PackStruct  , 32, 0,
168               "default struct packing maximum alignment")
169 VALUE_LANGOPT(MaxTypeAlign  , 32, 0,
170               "default maximum alignment for types")
171 VALUE_LANGOPT(AlignDouble            , 1, 0, "Controls if doubles should be aligned to 8 bytes (x86 only)")
172 COMPATIBLE_VALUE_LANGOPT(PICLevel    , 2, 0, "__PIC__ level")
173 COMPATIBLE_VALUE_LANGOPT(PIE         , 1, 0, "is pie")
174 COMPATIBLE_LANGOPT(GNUInline         , 1, 0, "GNU inline semantics")
175 COMPATIBLE_LANGOPT(NoInlineDefine    , 1, 0, "__NO_INLINE__ predefined macro")
176 COMPATIBLE_LANGOPT(Deprecated        , 1, 0, "__DEPRECATED predefined macro")
177 COMPATIBLE_LANGOPT(FastMath          , 1, 0, "fast FP math optimizations, and __FAST_MATH__ predefined macro")
178 COMPATIBLE_LANGOPT(FiniteMathOnly    , 1, 0, "__FINITE_MATH_ONLY__ predefined macro")
179 COMPATIBLE_LANGOPT(UnsafeFPMath      , 1, 0, "Unsafe Floating Point Math")
180
181 BENIGN_LANGOPT(ObjCGCBitmapPrint , 1, 0, "printing of GC's bitmap layout for __weak/__strong ivars")
182
183 BENIGN_LANGOPT(AccessControl     , 1, 1, "C++ access control")
184 LANGOPT(CharIsSigned      , 1, 1, "signed char")
185 LANGOPT(WCharSize         , 4, 0, "width of wchar_t")
186 LANGOPT(WCharIsSigned        , 1, 0, "signed or unsigned wchar_t")
187 ENUM_LANGOPT(MSPointerToMemberRepresentationMethod, PragmaMSPointersToMembersKind, 2, PPTMK_BestCase, "member-pointer representation method")
188 ENUM_LANGOPT(DefaultCallingConv, DefaultCallingConvention, 3, DCC_None, "default calling convention")
189
190 LANGOPT(ShortEnums        , 1, 0, "short enum types")
191
192 LANGOPT(OpenCL            , 1, 0, "OpenCL")
193 LANGOPT(OpenCLVersion     , 32, 0, "OpenCL C version")
194 LANGOPT(OpenCLCPlusPlus   , 1, 0, "OpenCL C++")
195 LANGOPT(OpenCLCPlusPlusVersion     , 32, 0, "OpenCL C++ version")
196 LANGOPT(NativeHalfType    , 1, 0, "Native half type support")
197 LANGOPT(NativeHalfArgsAndReturns, 1, 0, "Native half args and returns")
198 LANGOPT(HalfArgsAndReturns, 1, 0, "half args and returns")
199 LANGOPT(CUDA              , 1, 0, "CUDA")
200 LANGOPT(HIP               , 1, 0, "HIP")
201 LANGOPT(OpenMP            , 32, 0, "OpenMP support and version of OpenMP (31, 40 or 45)")
202 LANGOPT(OpenMPSimd        , 1, 0, "Use SIMD only OpenMP support.")
203 LANGOPT(OpenMPUseTLS      , 1, 0, "Use TLS for threadprivates or runtime calls")
204 LANGOPT(OpenMPIsDevice    , 1, 0, "Generate code only for OpenMP target device")
205 LANGOPT(OpenMPCUDAMode    , 1, 0, "Generate code for OpenMP pragmas in SIMT/SPMD mode")
206 LANGOPT(OpenMPCUDAForceFullRuntime , 1, 0, "Force to use full runtime in all constructs when offloading to CUDA devices")
207 LANGOPT(OpenMPHostCXXExceptions    , 1, 0, "C++ exceptions handling in the host code.")
208 LANGOPT(OpenMPCUDANumSMs  , 32, 0, "Number of SMs for CUDA devices.")
209 LANGOPT(OpenMPCUDABlocksPerSM  , 32, 0, "Number of blocks per SM for CUDA devices.")
210 LANGOPT(OpenMPOptimisticCollapse  , 1, 0, "Use at most 32 bits to represent the collapsed loop nest counter.")
211 LANGOPT(RenderScript      , 1, 0, "RenderScript")
212
213 LANGOPT(CUDAIsDevice      , 1, 0, "compiling for CUDA device")
214 LANGOPT(CUDAAllowVariadicFunctions, 1, 0, "allowing variadic functions in CUDA device code")
215 LANGOPT(CUDAHostDeviceConstexpr, 1, 1, "treating unattributed constexpr functions as __host__ __device__")
216 LANGOPT(CUDADeviceApproxTranscendentals, 1, 0, "using approximate transcendental functions")
217 LANGOPT(GPURelocatableDeviceCode, 1, 0, "generate relocatable device code")
218
219 LANGOPT(SizedDeallocation , 1, 0, "sized deallocation")
220 LANGOPT(AlignedAllocation , 1, 0, "aligned allocation")
221 LANGOPT(AlignedAllocationUnavailable, 1, 0, "aligned allocation functions are unavailable")
222 LANGOPT(NewAlignOverride  , 32, 0, "maximum alignment guaranteed by '::operator new(size_t)'")
223 LANGOPT(ConceptsTS , 1, 0, "enable C++ Extensions for Concepts")
224 BENIGN_LANGOPT(ModulesCodegen , 1, 0, "Modules code generation")
225 BENIGN_LANGOPT(ModulesDebugInfo , 1, 0, "Modules debug info")
226 BENIGN_LANGOPT(ElideConstructors , 1, 1, "C++ copy constructor elision")
227 BENIGN_LANGOPT(DumpRecordLayouts , 1, 0, "dumping the layout of IRgen'd records")
228 BENIGN_LANGOPT(DumpRecordLayoutsSimple , 1, 0, "dumping the layout of IRgen'd records in a simple form")
229 BENIGN_LANGOPT(DumpVTableLayouts , 1, 0, "dumping the layouts of emitted vtables")
230 LANGOPT(NoConstantCFStrings , 1, 0, "no constant CoreFoundation strings")
231 BENIGN_LANGOPT(InlineVisibilityHidden , 1, 0, "hidden visibility for inline C++ methods")
232 LANGOPT(GlobalAllocationFunctionVisibilityHidden , 1, 0, "hidden visibility for global operator new and delete declaration")
233 BENIGN_LANGOPT(ParseUnknownAnytype, 1, 0, "__unknown_anytype")
234 BENIGN_LANGOPT(DebuggerSupport , 1, 0, "debugger support")
235 BENIGN_LANGOPT(DebuggerCastResultToId, 1, 0, "for 'po' in the debugger, cast the result to id if it is of unknown type")
236 BENIGN_LANGOPT(DebuggerObjCLiteral , 1, 0, "debugger Objective-C literals and subscripting support")
237
238 BENIGN_LANGOPT(SpellChecking , 1, 1, "spell-checking")
239 LANGOPT(SinglePrecisionConstants , 1, 0, "treating double-precision floating point constants as single precision constants")
240 LANGOPT(FastRelaxedMath , 1, 0, "OpenCL fast relaxed math")
241 /// FP_CONTRACT mode (on/off/fast).
242 ENUM_LANGOPT(DefaultFPContractMode, FPContractModeKind, 2, FPC_Off, "FP contraction type")
243 LANGOPT(NoBitFieldTypeAlign , 1, 0, "bit-field type alignment")
244 LANGOPT(HexagonQdsp6Compat , 1, 0, "hexagon-qdsp6 backward compatibility")
245 LANGOPT(ObjCAutoRefCount , 1, 0, "Objective-C automated reference counting")
246 LANGOPT(ObjCWeakRuntime     , 1, 0, "__weak support in the ARC runtime")
247 LANGOPT(ObjCWeak            , 1, 0, "Objective-C __weak in ARC and MRC files")
248 LANGOPT(ObjCSubscriptingLegacyRuntime         , 1, 0, "Subscripting support in legacy ObjectiveC runtime")
249 LANGOPT(CFProtectionBranch , 1, 0, "Control-Flow Branch Protection enabled")
250 LANGOPT(FakeAddressSpaceMap , 1, 0, "OpenCL fake address space map")
251 ENUM_LANGOPT(AddressSpaceMapMangling , AddrSpaceMapMangling, 2, ASMM_Target, "OpenCL address space map mangling mode")
252 LANGOPT(IncludeDefaultHeader, 1, 0, "Include default header file for OpenCL")
253 BENIGN_LANGOPT(DelayedTemplateParsing , 1, 0, "delayed template parsing")
254 LANGOPT(BlocksRuntimeOptional , 1, 0, "optional blocks runtime")
255 LANGOPT(
256     CompleteMemberPointers, 1, 0,
257     "Require member pointer base types to be complete at the point where the "
258     "type's inheritance model would be determined under the Microsoft ABI")
259
260 ENUM_LANGOPT(GC, GCMode, 2, NonGC, "Objective-C Garbage Collection mode")
261 ENUM_LANGOPT(ValueVisibilityMode, Visibility, 3, DefaultVisibility,
262              "value symbol visibility")
263 ENUM_LANGOPT(TypeVisibilityMode, Visibility, 3, DefaultVisibility,
264              "type symbol visibility")
265 ENUM_LANGOPT(StackProtector, StackProtectorMode, 2, SSPOff,
266              "stack protector mode")
267 ENUM_LANGOPT(TrivialAutoVarInit, TrivialAutoVarInitKind, 2, TrivialAutoVarInitKind::Uninitialized,
268              "trivial automatic variable initialization")
269 ENUM_LANGOPT(SignedOverflowBehavior, SignedOverflowBehaviorTy, 2, SOB_Undefined,
270              "signed integer overflow handling")
271
272 BENIGN_LANGOPT(ArrowDepth, 32, 256,
273                "maximum number of operator->s to follow")
274 BENIGN_LANGOPT(InstantiationDepth, 32, 1024,
275                "maximum template instantiation depth")
276 BENIGN_LANGOPT(ConstexprCallDepth, 32, 512,
277                "maximum constexpr call depth")
278 BENIGN_LANGOPT(ConstexprStepLimit, 32, 1048576,
279                "maximum constexpr evaluation steps")
280 BENIGN_LANGOPT(BracketDepth, 32, 256,
281                "maximum bracket nesting depth")
282 BENIGN_LANGOPT(NumLargeByValueCopy, 32, 0,
283         "if non-zero, warn about parameter or return Warn if parameter/return value is larger in bytes than this setting. 0 is no check.")
284 VALUE_LANGOPT(MSCompatibilityVersion, 32, 0, "Microsoft Visual C/C++ Version")
285 VALUE_LANGOPT(VtorDispMode, 2, 1, "How many vtordisps to insert")
286
287 LANGOPT(ApplePragmaPack, 1, 0, "Apple gcc-compatible #pragma pack handling")
288
289 LANGOPT(RetainCommentsFromSystemHeaders, 1, 0, "retain documentation comments from system headers in the AST")
290
291 LANGOPT(SanitizeAddressFieldPadding, 2, 0, "controls how aggressive is ASan "
292                                            "field padding (0: none, 1:least "
293                                            "aggressive, 2: more aggressive)")
294
295 LANGOPT(XRayInstrument, 1, 0, "controls whether to do XRay instrumentation")
296 LANGOPT(XRayAlwaysEmitCustomEvents, 1, 0,
297         "controls whether to always emit intrinsic calls to "
298         "__xray_customevent(...) builtin.")
299 LANGOPT(XRayAlwaysEmitTypedEvents, 1, 0,
300         "controls whether to always emit intrinsic calls to "
301         "__xray_typedevent(...) builtin.")
302
303 LANGOPT(ForceEmitVTables, 1, 0, "whether to emit all vtables")
304
305 BENIGN_LANGOPT(AllowEditorPlaceholders, 1, 0,
306                "allow editor placeholders in source")
307
308 ENUM_LANGOPT(ClangABICompat, ClangABI, 4, ClangABI::Latest,
309              "version of Clang that we should attempt to be ABI-compatible "
310              "with")
311
312 COMPATIBLE_VALUE_LANGOPT(FunctionAlignment, 5, 0, "Default alignment for functions")
313
314 LANGOPT(FixedPoint, 1, 0, "fixed point types")
315 LANGOPT(PaddingOnUnsignedFixedPoint, 1, 0,
316         "unsigned fixed point types having one extra padding bit")
317
318 LANGOPT(RegisterStaticDestructors, 1, 1, "Register C++ static destructors")
319
320 #undef LANGOPT
321 #undef COMPATIBLE_LANGOPT
322 #undef BENIGN_LANGOPT
323 #undef ENUM_LANGOPT
324 #undef COMPATIBLE_ENUM_LANGOPT
325 #undef BENIGN_ENUM_LANGOPT
326 #undef VALUE_LANGOPT
327 #undef COMPATIBLE_VALUE_LANGOPT
328 #undef BENIGN_VALUE_LANGOPT