1//===-- BuiltinTypeNodes.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//===- Language-specific types --------------------------------------------===//
137
138// This is the type of C++0x 'nullptr'.
139BUILTIN_TYPE(NullPtr, NullPtrTy)
140
141// The primitive Objective C 'id' type.  The user-visible 'id'
142// type is a typedef of an ObjCObjectPointerType to an
143// ObjCObjectType with this as its base.  In fact, this only ever
144// shows up in an AST as the base type of an ObjCObjectType.
145BUILTIN_TYPE(ObjCId, ObjCBuiltinIdTy)
146
147// The primitive Objective C 'Class' type.  The user-visible
148// 'Class' type is a typedef of an ObjCObjectPointerType to an
149// ObjCObjectType with this as its base.  In fact, this only ever
150// shows up in an AST as the base type of an ObjCObjectType.
151BUILTIN_TYPE(ObjCClass, ObjCBuiltinClassTy)
152
153// The primitive Objective C 'SEL' type.  The user-visible 'SEL'
154// type is a typedef of a PointerType to this.
155BUILTIN_TYPE(ObjCSel, ObjCBuiltinSelTy)
156
157// OpenCL image types.
158BUILTIN_TYPE(OCLImage1d, OCLImage1dTy)
159BUILTIN_TYPE(OCLImage1dArray, OCLImage1dArrayTy)
160BUILTIN_TYPE(OCLImage1dBuffer, OCLImage1dBufferTy)
161BUILTIN_TYPE(OCLImage2d, OCLImage2dTy)
162BUILTIN_TYPE(OCLImage2dArray, OCLImage2dArrayTy)
163BUILTIN_TYPE(OCLImage2dDepth, OCLImage2dDepthTy)
164BUILTIN_TYPE(OCLImage2dArrayDepth, OCLImage2dArrayDepthTy)
165BUILTIN_TYPE(OCLImage2dMSAA, OCLImage2dMSAATy)
166BUILTIN_TYPE(OCLImage2dArrayMSAA, OCLImage2dArrayMSAATy)
167BUILTIN_TYPE(OCLImage2dMSAADepth, OCLImage2dMSAADepthTy)
168BUILTIN_TYPE(OCLImage2dArrayMSAADepth, OCLImage2dArrayMSAADepthTy)
169BUILTIN_TYPE(OCLImage3d, OCLImage3dTy)
170
171// OpenCL sampler_t.
172BUILTIN_TYPE(OCLSampler, OCLSamplerTy)
173
174// OpenCL event_t.
175BUILTIN_TYPE(OCLEvent, OCLEventTy)
176
177// OpenCL clk_event_t.
178BUILTIN_TYPE(OCLClkEvent, OCLClkEventTy)
179
180// OpenCL queue_t.
181BUILTIN_TYPE(OCLQueue, OCLQueueTy)
182
183// OpenCL ndrange_t.
184BUILTIN_TYPE(OCLNDRange, OCLNDRangeTy)
185
186// OpenCL reserve_id_t.
187BUILTIN_TYPE(OCLReserveID, OCLReserveIDTy)
188
189// This represents the type of an expression whose type is
190// totally unknown, e.g. 'T::foo'.  It is permitted for this to
191// appear in situations where the structure of the type is
192// theoretically deducible.
193BUILTIN_TYPE(Dependent, DependentTy)
194
195// The type of an unresolved overload set.  A placeholder type.
196// Expressions with this type have one of the following basic
197// forms, with parentheses generally permitted:
198//   foo          # possibly qualified, not if an implicit access
199//   foo          # possibly qualified, not if an implicit access
200//   &foo         # possibly qualified, not if an implicit access
201//   x->foo       # only if might be a static member function
202//   &x->foo      # only if might be a static member function
203//   &Class::foo  # when a pointer-to-member; sub-expr also has this type
204// OverloadExpr::find can be used to analyze the expression.
205//
206// Overload should be the first placeholder type, or else change
207// BuiltinType::isNonOverloadPlaceholderType()
208PLACEHOLDER_TYPE(Overload, OverloadTy)
209
210// The type of a bound C++ non-static member function.
211// A placeholder type.  Expressions with this type have one of the
212// following basic forms:
213//   foo          # if an implicit access
214//   x->foo       # if only contains non-static members
215PLACEHOLDER_TYPE(BoundMember, BoundMemberTy)
216
217// The type of an expression which refers to a pseudo-object,
218// such as those introduced by Objective C's @property or
219// VS.NET's __property declarations.  A placeholder type.  The
220// pseudo-object is actually accessed by emitting a call to
221// some sort of function or method;  typically there is a pair
222// of a setter and a getter, with the setter used if the
223// pseudo-object reference is used syntactically as the
224// left-hand-side of an assignment operator.
225//
226// A pseudo-object reference naming an Objective-C @property is
227// always a dot access with a base of object-pointer type,
228// e.g. 'x.foo'.
229//
230// In VS.NET, a __property declaration creates an implicit
231// member with an associated name, which can then be named
232// in any of the normal ways an ordinary member could be.
233PLACEHOLDER_TYPE(PseudoObject, PseudoObjectTy)
234
235// __builtin_any_type.  A placeholder type.  Useful for clients
236// like debuggers that don't know what type to give something.
237// Only a small number of operations are valid on expressions of
238// unknown type, most notably explicit casts.
239PLACEHOLDER_TYPE(UnknownAny, UnknownAnyTy)
240
241PLACEHOLDER_TYPE(BuiltinFn, BuiltinFnTy)
242
243// The type of a cast which, in ARC, would normally require a
244// __bridge, but which might be okay depending on the immediate
245// context.
246PLACEHOLDER_TYPE(ARCUnbridgedCast, ARCUnbridgedCastTy)
247
248// A placeholder type for OpenMP array sections.
249PLACEHOLDER_TYPE(OMPArraySection, OMPArraySectionTy)
250
251#ifdef LAST_BUILTIN_TYPE
252LAST_BUILTIN_TYPE(OMPArraySection)
253#undef LAST_BUILTIN_TYPE
254#endif
255
256#undef SHARED_SINGLETON_TYPE
257#undef PLACEHOLDER_TYPE
258#undef FLOATING_TYPE
259#undef SIGNED_TYPE
260#undef UNSIGNED_TYPE
261#undef BUILTIN_TYPE
262