1//===-- BuiltinTypes.def - Metadata about BuiltinTypes ----------*- 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 database about various builtin singleton types. 11// 12// BuiltinType::Id is the enumerator defining the type. 13// 14// Context.SingletonId is the global singleton of this type. Some global 15// singletons are shared by multiple types. 16// 17// BUILTIN_TYPE(Id, SingletonId) - A builtin type that has not been 18// covered by any other #define. Defining this macro covers all 19// the builtins. 20// 21// SIGNED_TYPE(Id, SingletonId) - A signed integral type. 22// 23// UNSIGNED_TYPE(Id, SingletonId) - An unsigned integral type. 24// 25// FLOATING_TYPE(Id, SingletonId) - A floating-point type. 26// 27// PLACEHOLDER_TYPE(Id, SingletonId) - A placeholder type. Placeholder 28// types are used to perform context-sensitive checking of specific 29// forms of expression. 30// 31// SHARED_SINGLETON_TYPE(Expansion) - The given expansion corresponds 32// to a builtin which uses a shared singleton type. 33// 34//===----------------------------------------------------------------------===// 35 36#ifndef SIGNED_TYPE 37#define SIGNED_TYPE(Id, SingletonId) BUILTIN_TYPE(Id, SingletonId) 38#endif 39 40#ifndef UNSIGNED_TYPE 41#define UNSIGNED_TYPE(Id, SingletonId) BUILTIN_TYPE(Id, SingletonId) 42#endif 43 44#ifndef FLOATING_TYPE 45#define FLOATING_TYPE(Id, SingletonId) BUILTIN_TYPE(Id, SingletonId) 46#endif 47 48#ifndef PLACEHOLDER_TYPE 49#define PLACEHOLDER_TYPE(Id, SingletonId) BUILTIN_TYPE(Id, SingletonId) 50#endif 51 52#ifndef SHARED_SINGLETON_TYPE 53#define SHARED_SINGLETON_TYPE(Expansion) Expansion 54#endif 55 56//===- Builtin Types ------------------------------------------------------===// 57 58// void 59BUILTIN_TYPE(Void, VoidTy) 60 61//===- Unsigned Types -----------------------------------------------------===// 62 63// 'bool' in C++, '_Bool' in C99 64UNSIGNED_TYPE(Bool, BoolTy) 65 66// 'char' for targets where it's unsigned 67SHARED_SINGLETON_TYPE(UNSIGNED_TYPE(Char_U, CharTy)) 68 69// 'unsigned char', explicitly qualified 70UNSIGNED_TYPE(UChar, UnsignedCharTy) 71 72// 'wchar_t' for targets where it's unsigned 73SHARED_SINGLETON_TYPE(UNSIGNED_TYPE(WChar_U, WCharTy)) 74 75// 'char16_t' in C++ 76UNSIGNED_TYPE(Char16, Char16Ty) 77 78// 'char32_t' in C++ 79UNSIGNED_TYPE(Char32, Char32Ty) 80 81// 'unsigned short' 82UNSIGNED_TYPE(UShort, UnsignedShortTy) 83 84// 'unsigned int' 85UNSIGNED_TYPE(UInt, UnsignedIntTy) 86 87// 'unsigned long' 88UNSIGNED_TYPE(ULong, UnsignedLongTy) 89 90// 'unsigned long long' 91UNSIGNED_TYPE(ULongLong, UnsignedLongLongTy) 92 93// '__uint128_t' 94UNSIGNED_TYPE(UInt128, UnsignedInt128Ty) 95 96//===- Signed Types -------------------------------------------------------===// 97 98// 'char' for targets where it's signed 99SHARED_SINGLETON_TYPE(SIGNED_TYPE(Char_S, CharTy)) 100 101// 'signed char', explicitly qualified 102SIGNED_TYPE(SChar, SignedCharTy) 103 104// 'wchar_t' for targets where it's signed 105SHARED_SINGLETON_TYPE(SIGNED_TYPE(WChar_S, WCharTy)) 106 107// 'short' or 'signed short' 108SIGNED_TYPE(Short, ShortTy) 109 110// 'int' or 'signed int' 111SIGNED_TYPE(Int, IntTy) 112 113// 'long' or 'signed long' 114SIGNED_TYPE(Long, LongTy) 115 116// 'long long' or 'signed long long' 117SIGNED_TYPE(LongLong, LongLongTy) 118 119// '__int128_t' 120SIGNED_TYPE(Int128, Int128Ty) 121 122//===- Floating point types -----------------------------------------------===// 123 124// 'half' in OpenCL, '__fp16' in ARM NEON. 125FLOATING_TYPE(Half, HalfTy) 126 127// 'float' 128FLOATING_TYPE(Float, FloatTy) 129 130// 'double' 131FLOATING_TYPE(Double, DoubleTy) 132 133// 'long double' 134FLOATING_TYPE(LongDouble, LongDoubleTy) 135 136// '__float128' 137FLOATING_TYPE(Float128, Float128Ty) 138 139//===- Language-specific types --------------------------------------------===// 140 141// This is the type of C++0x 'nullptr'. 142BUILTIN_TYPE(NullPtr, NullPtrTy) 143 144// The primitive Objective C 'id' type. The user-visible 'id' 145// type is a typedef of an ObjCObjectPointerType to an 146// ObjCObjectType with this as its base. In fact, this only ever 147// shows up in an AST as the base type of an ObjCObjectType. 148BUILTIN_TYPE(ObjCId, ObjCBuiltinIdTy) 149 150// The primitive Objective C 'Class' type. The user-visible 151// 'Class' type is a typedef of an ObjCObjectPointerType to an 152// ObjCObjectType with this as its base. In fact, this only ever 153// shows up in an AST as the base type of an ObjCObjectType. 154BUILTIN_TYPE(ObjCClass, ObjCBuiltinClassTy) 155 156// The primitive Objective C 'SEL' type. The user-visible 'SEL' 157// type is a typedef of a PointerType to this. 158BUILTIN_TYPE(ObjCSel, ObjCBuiltinSelTy) 159 160// OpenCL sampler_t. 161BUILTIN_TYPE(OCLSampler, OCLSamplerTy) 162 163// OpenCL event_t. 164BUILTIN_TYPE(OCLEvent, OCLEventTy) 165 166// OpenCL clk_event_t. 167BUILTIN_TYPE(OCLClkEvent, OCLClkEventTy) 168 169// OpenCL queue_t. 170BUILTIN_TYPE(OCLQueue, OCLQueueTy) 171 172// OpenCL ndrange_t. 173BUILTIN_TYPE(OCLNDRange, OCLNDRangeTy) 174 175// OpenCL reserve_id_t. 176BUILTIN_TYPE(OCLReserveID, OCLReserveIDTy) 177 178// This represents the type of an expression whose type is 179// totally unknown, e.g. 'T::foo'. It is permitted for this to 180// appear in situations where the structure of the type is 181// theoretically deducible. 182BUILTIN_TYPE(Dependent, DependentTy) 183 184// The type of an unresolved overload set. A placeholder type. 185// Expressions with this type have one of the following basic 186// forms, with parentheses generally permitted: 187// foo # possibly qualified, not if an implicit access 188// foo # possibly qualified, not if an implicit access 189// &foo # possibly qualified, not if an implicit access 190// x->foo # only if might be a static member function 191// &x->foo # only if might be a static member function 192// &Class::foo # when a pointer-to-member; sub-expr also has this type 193// OverloadExpr::find can be used to analyze the expression. 194// 195// Overload should be the first placeholder type, or else change 196// BuiltinType::isNonOverloadPlaceholderType() 197PLACEHOLDER_TYPE(Overload, OverloadTy) 198 199// The type of a bound C++ non-static member function. 200// A placeholder type. Expressions with this type have one of the 201// following basic forms: 202// foo # if an implicit access 203// x->foo # if only contains non-static members 204PLACEHOLDER_TYPE(BoundMember, BoundMemberTy) 205 206// The type of an expression which refers to a pseudo-object, 207// such as those introduced by Objective C's @property or 208// VS.NET's __property declarations. A placeholder type. The 209// pseudo-object is actually accessed by emitting a call to 210// some sort of function or method; typically there is a pair 211// of a setter and a getter, with the setter used if the 212// pseudo-object reference is used syntactically as the 213// left-hand-side of an assignment operator. 214// 215// A pseudo-object reference naming an Objective-C @property is 216// always a dot access with a base of object-pointer type, 217// e.g. 'x.foo'. 218// 219// In VS.NET, a __property declaration creates an implicit 220// member with an associated name, which can then be named 221// in any of the normal ways an ordinary member could be. 222PLACEHOLDER_TYPE(PseudoObject, PseudoObjectTy) 223 224// __builtin_any_type. A placeholder type. Useful for clients 225// like debuggers that don't know what type to give something. 226// Only a small number of operations are valid on expressions of 227// unknown type, most notably explicit casts. 228PLACEHOLDER_TYPE(UnknownAny, UnknownAnyTy) 229 230PLACEHOLDER_TYPE(BuiltinFn, BuiltinFnTy) 231 232// The type of a cast which, in ARC, would normally require a 233// __bridge, but which might be okay depending on the immediate 234// context. 235PLACEHOLDER_TYPE(ARCUnbridgedCast, ARCUnbridgedCastTy) 236 237// A placeholder type for OpenMP array sections. 238PLACEHOLDER_TYPE(OMPArraySection, OMPArraySectionTy) 239 240#ifdef LAST_BUILTIN_TYPE 241LAST_BUILTIN_TYPE(OMPArraySection) 242#undef LAST_BUILTIN_TYPE 243#endif 244 245#undef SHARED_SINGLETON_TYPE 246#undef PLACEHOLDER_TYPE 247#undef FLOATING_TYPE 248#undef SIGNED_TYPE 249#undef UNSIGNED_TYPE 250#undef BUILTIN_TYPE 251