]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/include/clang/Basic/LangOptions.def
Update clang to trunk r256945.
[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: combinations of the above.
28 //
29 // FIXME: Clients should be able to more easily select whether they want
30 // different levels of compatibility versus how to handle different kinds
31 // of option.
32 //===----------------------------------------------------------------------===//
33
34 #ifndef LANGOPT
35 #  error Define the LANGOPT macro to handle language options
36 #endif
37
38 #ifndef COMPATIBLE_LANGOPT
39 #  define COMPATIBLE_LANGOPT(Name, Bits, Default, Description) \
40      LANGOPT(Name, Bits, Default, Description)
41 #endif
42
43 #ifndef BENIGN_LANGOPT
44 #  define BENIGN_LANGOPT(Name, Bits, Default, Description) \
45      COMPATIBLE_LANGOPT(Name, Bits, Default, Description)
46 #endif
47
48 #ifndef ENUM_LANGOPT
49 #  define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
50      LANGOPT(Name, Bits, Default, Description)
51 #endif
52
53 #ifndef COMPATIBLE_ENUM_LANGOPT
54 #  define COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
55      ENUM_LANGOPT(Name, Type, Bits, Default, Description)
56 #endif
57
58 #ifndef BENIGN_ENUM_LANGOPT
59 #  define BENIGN_ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
60      COMPATIBLE_ENUM_LANGOPT(Name, Type, Bits, Default, Description)
61 #endif
62
63 #ifndef VALUE_LANGOPT
64 #  define VALUE_LANGOPT(Name, Bits, Default, Description) \
65      LANGOPT(Name, Bits, Default, Description)
66 #endif
67
68 // FIXME: A lot of the BENIGN_ options should be COMPATIBLE_ instead.
69 LANGOPT(C99               , 1, 0, "C99")
70 LANGOPT(C11               , 1, 0, "C11")
71 LANGOPT(MSVCCompat        , 1, 0, "Microsoft Visual C++ full compatibility mode")
72 LANGOPT(MicrosoftExt      , 1, 0, "Microsoft C++ extensions")
73 LANGOPT(AsmBlocks         , 1, 0, "Microsoft inline asm blocks")
74 LANGOPT(Borland           , 1, 0, "Borland extensions")
75 LANGOPT(CPlusPlus         , 1, 0, "C++")
76 LANGOPT(CPlusPlus11       , 1, 0, "C++11")
77 LANGOPT(CPlusPlus14       , 1, 0, "C++14")
78 LANGOPT(CPlusPlus1z       , 1, 0, "C++1z")
79 LANGOPT(ObjC1             , 1, 0, "Objective-C 1")
80 LANGOPT(ObjC2             , 1, 0, "Objective-C 2")
81 BENIGN_LANGOPT(ObjCDefaultSynthProperties , 1, 0,
82                "Objective-C auto-synthesized properties")
83 BENIGN_LANGOPT(EncodeExtendedBlockSig , 1, 0,
84                "Encoding extended block type signature")
85 BENIGN_LANGOPT(ObjCInferRelatedResultType , 1, 1,
86                "Objective-C related result type inference")
87 LANGOPT(AppExt , 1, 0, "Objective-C App Extension")
88 LANGOPT(Trigraphs         , 1, 0,"trigraphs")
89 LANGOPT(LineComment       , 1, 0, "'//' comments")
90 LANGOPT(Bool              , 1, 0, "bool, true, and false keywords")
91 LANGOPT(Half              , 1, 0, "half keyword")
92 LANGOPT(WChar             , 1, CPlusPlus, "wchar_t keyword")
93 LANGOPT(DeclSpecKeyword   , 1, 0, "__declspec keyword")
94 BENIGN_LANGOPT(DollarIdents   , 1, 1, "'$' in identifiers")
95 BENIGN_LANGOPT(AsmPreprocessor, 1, 0, "preprocessor in asm mode")
96 BENIGN_LANGOPT(GNUMode        , 1, 1, "GNU extensions")
97 LANGOPT(GNUKeywords       , 1, 1, "GNU keywords")
98 BENIGN_LANGOPT(ImplicitInt, 1, !C99 && !CPlusPlus, "C89 implicit 'int'")
99 LANGOPT(Digraphs          , 1, 0, "digraphs")
100 BENIGN_LANGOPT(HexFloats  , 1, C99, "C99 hexadecimal float constants")
101 LANGOPT(CXXOperatorNames  , 1, 0, "C++ operator name keywords")
102 LANGOPT(AppleKext         , 1, 0, "Apple kext support")
103 BENIGN_LANGOPT(PascalStrings, 1, 0, "Pascal string support")
104 LANGOPT(WritableStrings   , 1, 0, "writable string support")
105 LANGOPT(ConstStrings      , 1, 0, "const-qualified string support")
106 LANGOPT(LaxVectorConversions , 1, 1, "lax vector conversions")
107 LANGOPT(AltiVec           , 1, 0, "AltiVec-style vector initializers")
108 LANGOPT(ZVector           , 1, 0, "System z vector extensions")
109 LANGOPT(Exceptions        , 1, 0, "exception handling")
110 LANGOPT(ObjCExceptions    , 1, 0, "Objective-C exceptions")
111 LANGOPT(CXXExceptions     , 1, 0, "C++ exceptions")
112 LANGOPT(SjLjExceptions    , 1, 0, "setjmp-longjump exception handling")
113 LANGOPT(TraditionalCPP    , 1, 0, "traditional CPP emulation")
114 LANGOPT(RTTI              , 1, 1, "run-time type information")
115 LANGOPT(RTTIData          , 1, 1, "emit run-time type information data")
116 LANGOPT(MSBitfields       , 1, 0, "Microsoft-compatible structure layout")
117 LANGOPT(Freestanding, 1, 0, "freestanding implementation")
118 LANGOPT(NoBuiltin         , 1, 0, "disable builtin functions")
119 LANGOPT(NoMathBuiltin     , 1, 0, "disable math builtin functions")
120 LANGOPT(GNUAsm            , 1, 1, "GNU-style inline assembly")
121 LANGOPT(Coroutines        , 1, 0, "C++ coroutines")
122
123 BENIGN_LANGOPT(ThreadsafeStatics , 1, 1, "thread-safe static initializers")
124 LANGOPT(POSIXThreads      , 1, 0, "POSIX thread support")
125 LANGOPT(Blocks            , 1, 0, "blocks extension to C")
126 BENIGN_LANGOPT(EmitAllDecls      , 1, 0, "support for emitting all declarations")
127 LANGOPT(MathErrno         , 1, 1, "errno support for math functions")
128 BENIGN_LANGOPT(HeinousExtensions , 1, 0, "Extensions that we really don't like and may be ripped out at any time")
129 LANGOPT(Modules           , 1, 0, "modules extension to C")
130 COMPATIBLE_LANGOPT(ModulesDeclUse    , 1, 0, "require declaration of module uses")
131 LANGOPT(ModulesSearchAll  , 1, 1, "search even non-imported modules to find unresolved references")
132 COMPATIBLE_LANGOPT(ModulesStrictDeclUse, 1, 0, "require declaration of module uses and all headers to be in modules")
133 BENIGN_LANGOPT(ModulesErrorRecovery, 1, 1, "automatically import modules as needed when performing error recovery")
134 BENIGN_LANGOPT(ImplicitModules, 1, 1, "build modules that are not specified via -fmodule-file")
135 COMPATIBLE_LANGOPT(ModulesLocalVisibility, 1, 0, "local submodule visibility")
136 COMPATIBLE_LANGOPT(Optimize          , 1, 0, "__OPTIMIZE__ predefined macro")
137 COMPATIBLE_LANGOPT(OptimizeSize      , 1, 0, "__OPTIMIZE_SIZE__ predefined macro")
138 LANGOPT(Static            , 1, 0, "__STATIC__ predefined macro (as opposed to __DYNAMIC__)")
139 VALUE_LANGOPT(PackStruct  , 32, 0,
140               "default struct packing maximum alignment")
141 VALUE_LANGOPT(MaxTypeAlign  , 32, 0,
142               "default maximum alignment for types")
143 VALUE_LANGOPT(PICLevel    , 2, 0, "__PIC__ level")
144 VALUE_LANGOPT(PIELevel    , 2, 0, "__PIE__ level")
145 LANGOPT(GNUInline         , 1, 0, "GNU inline semantics")
146 COMPATIBLE_LANGOPT(NoInlineDefine    , 1, 0, "__NO_INLINE__ predefined macro")
147 COMPATIBLE_LANGOPT(Deprecated        , 1, 0, "__DEPRECATED predefined macro")
148 LANGOPT(FastMath          , 1, 0, "__FAST_MATH__ predefined macro")
149 LANGOPT(FiniteMathOnly    , 1, 0, "__FINITE_MATH_ONLY__ predefined macro")
150 LANGOPT(UnsafeFPMath      , 1, 0, "Unsafe Floating Point Math")
151
152 BENIGN_LANGOPT(ObjCGCBitmapPrint , 1, 0, "printing of GC's bitmap layout for __weak/__strong ivars")
153
154 BENIGN_LANGOPT(AccessControl     , 1, 1, "C++ access control")
155 LANGOPT(CharIsSigned      , 1, 1, "signed char")
156 LANGOPT(ShortWChar        , 1, 0, "unsigned short wchar_t")
157 ENUM_LANGOPT(MSPointerToMemberRepresentationMethod, PragmaMSPointersToMembersKind, 2, PPTMK_BestCase, "member-pointer representation method")
158
159 LANGOPT(ShortEnums        , 1, 0, "short enum types")
160
161 LANGOPT(OpenCL            , 1, 0, "OpenCL")
162 LANGOPT(OpenCLVersion     , 32, 0, "OpenCL version")
163 LANGOPT(NativeHalfType    , 1, 0, "Native half type support")
164 LANGOPT(HalfArgsAndReturns, 1, 0, "half args and returns")
165 LANGOPT(CUDA              , 1, 0, "CUDA")
166 LANGOPT(OpenMP            , 1, 0, "OpenMP support")
167 LANGOPT(OpenMPUseTLS      , 1, 0, "Use TLS for threadprivates or runtime calls")
168 LANGOPT(OpenMPIsDevice    , 1, 0, "Generate code only for OpenMP target device")
169
170 LANGOPT(CUDAIsDevice      , 1, 0, "Compiling for CUDA device")
171 LANGOPT(CUDAAllowHostCallsFromHostDevice, 1, 0, "Allow host device functions to call host functions")
172 LANGOPT(CUDADisableTargetCallChecks, 1, 0, "Disable checks for call targets (host, device, etc.)")
173 LANGOPT(CUDATargetOverloads, 1, 0, "Enable function overloads based on CUDA target attributes")
174
175 LANGOPT(AssumeSaneOperatorNew , 1, 1, "implicit __attribute__((malloc)) for C++'s new operators")
176 LANGOPT(SizedDeallocation , 1, 0, "enable sized deallocation functions")
177 LANGOPT(ConceptsTS , 1, 0, "enable C++ Extensions for Concepts")
178 BENIGN_LANGOPT(ElideConstructors , 1, 1, "C++ copy constructor elision")
179 BENIGN_LANGOPT(DumpRecordLayouts , 1, 0, "dumping the layout of IRgen'd records")
180 BENIGN_LANGOPT(DumpRecordLayoutsSimple , 1, 0, "dumping the layout of IRgen'd records in a simple form")
181 BENIGN_LANGOPT(DumpVTableLayouts , 1, 0, "dumping the layouts of emitted vtables")
182 LANGOPT(NoConstantCFStrings , 1, 0, "no constant CoreFoundation strings")
183 BENIGN_LANGOPT(InlineVisibilityHidden , 1, 0, "hidden default visibility for inline C++ methods")
184 BENIGN_LANGOPT(ParseUnknownAnytype, 1, 0, "__unknown_anytype")
185 BENIGN_LANGOPT(DebuggerSupport , 1, 0, "debugger support")
186 BENIGN_LANGOPT(DebuggerCastResultToId, 1, 0, "for 'po' in the debugger, cast the result to id if it is of unknown type")
187 BENIGN_LANGOPT(DebuggerObjCLiteral , 1, 0, "debugger Objective-C literals and subscripting support")
188
189 BENIGN_LANGOPT(SpellChecking , 1, 1, "spell-checking")
190 LANGOPT(SinglePrecisionConstants , 1, 0, "treating double-precision floating point constants as single precision constants")
191 LANGOPT(FastRelaxedMath , 1, 0, "OpenCL fast relaxed math")
192 LANGOPT(DefaultFPContract , 1, 0, "FP_CONTRACT")
193 LANGOPT(NoBitFieldTypeAlign , 1, 0, "bit-field type alignment")
194 LANGOPT(HexagonQdsp6Compat , 1, 0, "hexagon-qdsp6 backward compatibility")
195 LANGOPT(ObjCAutoRefCount , 1, 0, "Objective-C automated reference counting")
196 LANGOPT(ObjCWeakRuntime     , 1, 0, "__weak support in the ARC runtime")
197 LANGOPT(ObjCWeak            , 1, 0, "Objective-C __weak in ARC and MRC files")
198 LANGOPT(ObjCSubscriptingLegacyRuntime         , 1, 0, "Subscripting support in legacy ObjectiveC runtime")
199 LANGOPT(FakeAddressSpaceMap , 1, 0, "OpenCL fake address space map")
200 ENUM_LANGOPT(AddressSpaceMapMangling , AddrSpaceMapMangling, 2, ASMM_Target, "OpenCL address space map mangling mode")
201
202 LANGOPT(MRTD , 1, 0, "-mrtd calling convention")
203 BENIGN_LANGOPT(DelayedTemplateParsing , 1, 0, "delayed template parsing")
204 LANGOPT(BlocksRuntimeOptional , 1, 0, "optional blocks runtime")
205
206 ENUM_LANGOPT(GC, GCMode, 2, NonGC, "Objective-C Garbage Collection mode")
207 ENUM_LANGOPT(ValueVisibilityMode, Visibility, 3, DefaultVisibility,
208              "value symbol visibility")
209 ENUM_LANGOPT(TypeVisibilityMode, Visibility, 3, DefaultVisibility,
210              "type symbol visibility")
211 ENUM_LANGOPT(StackProtector, StackProtectorMode, 2, SSPOff,
212              "stack protector mode")
213 ENUM_LANGOPT(SignedOverflowBehavior, SignedOverflowBehaviorTy, 2, SOB_Undefined,
214              "signed integer overflow handling")
215
216 BENIGN_LANGOPT(ArrowDepth, 32, 256,
217                "maximum number of operator->s to follow")
218 BENIGN_LANGOPT(InstantiationDepth, 32, 256,
219                "maximum template instantiation depth")
220 BENIGN_LANGOPT(ConstexprCallDepth, 32, 512,
221                "maximum constexpr call depth")
222 BENIGN_LANGOPT(ConstexprStepLimit, 32, 1048576,
223                "maximum constexpr evaluation steps")
224 BENIGN_LANGOPT(BracketDepth, 32, 256,
225                "maximum bracket nesting depth")
226 BENIGN_LANGOPT(NumLargeByValueCopy, 32, 0,
227         "if non-zero, warn about parameter or return Warn if parameter/return value is larger in bytes than this setting. 0 is no check.")
228 VALUE_LANGOPT(MSCompatibilityVersion, 32, 0, "Microsoft Visual C/C++ Version")
229 VALUE_LANGOPT(VtorDispMode, 2, 1, "How many vtordisps to insert")
230
231 LANGOPT(ApplePragmaPack, 1, 0, "Apple gcc-compatible #pragma pack handling")
232
233 LANGOPT(RetainCommentsFromSystemHeaders, 1, 0, "retain documentation comments from system headers in the AST")
234
235 LANGOPT(SanitizeAddressFieldPadding, 2, 0, "controls how aggressive is ASan "
236                                            "field padding (0: none, 1:least "
237                                            "aggressive, 2: more aggressive)")
238
239 #undef LANGOPT
240 #undef COMPATIBLE_LANGOPT
241 #undef BENIGN_LANGOPT
242 #undef ENUM_LANGOPT
243 #undef COMPATIBLE_ENUM_LANGOPT
244 #undef BENIGN_ENUM_LANGOPT
245 #undef VALUE_LANGOPT
246