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