gcc-cp-fe.def revision 1.1.1.6 1 1.1 christos /* Interface between GCC C++ FE and GDB -*- c -*-
2 1.1 christos
3 1.1.1.6 christos Copyright (C) 2014-2026 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos This file is part of GCC.
6 1.1 christos
7 1.1 christos This program is free software; you can redistribute it and/or modify
8 1.1 christos it under the terms of the GNU General Public License as published by
9 1.1 christos the Free Software Foundation; either version 3 of the License, or
10 1.1 christos (at your option) any later version.
11 1.1 christos
12 1.1 christos This program is distributed in the hope that it will be useful,
13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 1.1 christos GNU General Public License for more details.
16 1.1 christos
17 1.1 christos You should have received a copy of the GNU General Public License
18 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 1.1 christos
20 1.1 christos
21 1.1 christos
22 1.1 christos /* Push namespace NAME as the current binding level, to which
23 1.1 christos newly-introduced decls will be bound. An empty string identifies
24 1.1 christos the global namespace, whereas NULL identifies an anonymous
25 1.1 christos namespace. A namespace named NAME is created in the current scope,
26 1.1 christos if needed.
27 1.1 christos
28 1.1 christos If the newly-created namespace is to be an inline namespace, see
29 1.1 christos make_namespace_inline. */
30 1.1 christos
31 1.1 christos GCC_METHOD1 (int /* bool */, push_namespace,
32 1.1 christos const char *) /* Argument NAME. */
33 1.1 christos
34 1.1 christos /* Push TYPE as the current binding level, making its members visible
35 1.1 christos for name lookup. The current scope before the call must be the
36 1.1 christos scope in which the class was declared. This should be used if the
37 1.1 christos definition of a class is already finished, but one wishes to define
38 1.1 christos a nested class, or to enter the scope of one of its member
39 1.1 christos functions. */
40 1.1 christos
41 1.1 christos GCC_METHOD1 (int /* bool */, push_class,
42 1.1 christos gcc_type) /* Argument TYPE. */
43 1.1 christos
44 1.1 christos /* Push FUNCTION_DECL as the current (empty) binding level (see
45 1.1 christos reactivate_decl). The current enclosing scope before the call must
46 1.1 christos be the scope in which the function was declared. */
47 1.1 christos
48 1.1 christos GCC_METHOD1 (int /* bool */, push_function,
49 1.1 christos gcc_decl) /* Argument FUNCTION_DECL. */
50 1.1 christos
51 1.1 christos /* Make DECL visible (again?) within SCOPE. When SCOPE is NULL, it
52 1.1 christos means the current scope; if it is not NULL, it must name a function
53 1.1 christos that is currently active, even if not at the top of the binding
54 1.1 christos chain.
55 1.1 christos
56 1.1 christos This function can be used to make e.g. a global function or
57 1.1 christos variable visible in a namespace or local scope (overriding another
58 1.1 christos enclosing definition of the same name), but its most common
59 1.1 christos expected use of this primitive, that gives it its name, is to make
60 1.1 christos declarations visible again after reentering a function scope,
61 1.1 christos because when a function is entered with push_function, that does
62 1.1 christos NOT make any of the declarations nested in it visible for name
63 1.1 christos lookup.
64 1.1 christos
65 1.1 christos There is a reason/excuse for that: unlike namespaces and classes,
66 1.1 christos G++ doesn't ever have to reenter function scopes, so its name
67 1.1 christos resolution infrastructure is not prepared to do that. But wait,
68 1.1 christos there is also a good use for this apparent limitation: a function
69 1.1 christos may contain multiple scopes (blocks), and the name may be bound to
70 1.1 christos different symbols in each of these scopes. With this interface, as
71 1.1 christos we reenter a function scope, we may choose which symbols to make
72 1.1 christos visible for the code snippet, or, if there could be template
73 1.1 christos functions in local scopes, for unresolved names in nested template
74 1.1 christos class default arguments, or in nested template function signatures.
75 1.1 christos
76 1.1 christos As for making a local declaration visible for the code snippet,
77 1.1 christos there are two possibilities: a) introduce it upfront, while
78 1.1 christos entering the scope for the user expression (see the enter_scope
79 1.1 christos callback, called by g++ when encountering the push_user_expression
80 1.1 christos pragma), which might save some scope switching and reactivate_decl
81 1.1 christos (though this can't be helped if some declarations have to be
82 1.1 christos introduced and discarded, because of multiple definitions of the
83 1.1 christos same name in different scopes within a function: they have to be
84 1.1 christos defined in discriminator order); or b) introduce it when its name
85 1.1 christos is looked up, entering the scope, introducing the declaration,
86 1.1 christos leaving the scope, and then reactivating the declaration in its
87 1.1 christos local scope.
88 1.1 christos
89 1.1 christos Here's some more detail on how reactivate_decl works. Say there's
90 1.1 christos a function foo whose body looks like this:
91 1.1 christos
92 1.1 christos {
93 1.1 christos {
94 1.1 christos // point 1
95 1.1 christos class c {} o __attribute__ ((__used__)); // c , o
96 1.1 christos }
97 1.1 christos struct c {
98 1.1 christos void f() {
99 1.1 christos // point 2
100 1.1 christos }
101 1.1 christos } o __attribute__ ((__used__)); // c_0, o_0
102 1.1 christos {
103 1.1 christos class c {} p __attribute__ ((__used__)); // c_1, p
104 1.1 christos // point 3
105 1.1 christos o.f();
106 1.1 christos }
107 1.1 christos }
108 1.1 christos
109 1.1 christos When we are about to define class c at point 1, we enter the
110 1.1 christos function foo scope, and since no symbols are visible at point 1, we
111 1.1 christos proceed to declare class c. We may then define the class right
112 1.1 christos away, or, if we leave the function scope, and we later wish to
113 1.1 christos define it, or to define object o, we can reenter the scope and just
114 1.1 christos use the previously-obtained gcc_decl to define the class, without
115 1.1 christos having to reactivate the declaration.
116 1.1 christos
117 1.1 christos Now, if we are to set up the binding context for point 2, we have
118 1.1 christos to define c_0::f, and in order to do so, we have to declare and
119 1.1 christos define c_0. Before we can declare c_0, we MUST at least declare c.
120 1.1 christos
121 1.1 christos As a general rule, before we can declare or define any local name
122 1.1 christos with a discriminator, we have to at least declare any other
123 1.1 christos occurrences of the same name in the same enclosing entity with
124 1.1 christos lower or absent discriminator.
125 1.1 christos
126 1.1 christos So, we declare c, then we leave the function scope and reenter it
127 1.1 christos so as to declare c_0 (also with name "c", which is why we have to
128 1.1 christos leave and reenter the function scope, otherwise we would get an
129 1.1 christos error because of the duplicate definition; g++ will assign a
130 1.1 christos discriminator because it still remembers there was an earlier
131 1.1 christos declaration of c_0 within the function, it's just no longer in
132 1.1 christos scope), then we can define c_0, including its member function f.
133 1.1 christos
134 1.1 christos Likewise, if we wish to define o_0, we have to define o first. If
135 1.1 christos we wish to declare (and maybe then define) c_1, we have to at least
136 1.1 christos declare (c and then) c_0 first.
137 1.1 christos
138 1.1 christos Then, as we set up the binding context to compile a code snippet at
139 1.1 christos point 3, we may choose to activate c_1, o_0 and p upfront,
140 1.1 christos declaring and discarding c, c_0 and o, and then reentering the
141 1.1 christos funciton scope to declare c_1, o_0 and p; or we can wait for oracle
142 1.1 christos lookups of c, o or p. If c is looked up, and the debugger resolves
143 1.1 christos c in the scope to c_1, it is expected to enter the function scope
144 1.1 christos from the top level, declare c, leave it, reenter it, declare c_0,
145 1.1 christos leave it, reenter it, declare c_1, leave it, and then reactivate
146 1.1 christos c_1 in the function scope. If c_1 is needed as a complete type,
147 1.1 christos the definition may be given right after the declaration, or the
148 1.1 christos scope will have to be reentered in order to define the class.
149 1.1 christos
150 1.1 christos . If the code snippet is at point 2, we don't need to (re)activate
151 1.1 christos any declaration: nothing from any local scope is visible. Just
152 1.1 christos entering the scope of the class containing member function f
153 1.1 christos reactivates the names of its members, including the class name
154 1.1 christos itself. */
155 1.1 christos
156 1.1 christos GCC_METHOD2 (int /* bool */, reactivate_decl,
157 1.1 christos gcc_decl, /* Argument DECL. */
158 1.1 christos gcc_decl) /* Argument SCOPE. */
159 1.1 christos
160 1.1 christos /* Pop the namespace last entered with push_namespace, or class last
161 1.1 christos entered with push_class, or function last entered with
162 1.1 christos push_function, restoring the binding level in effect before the
163 1.1 christos matching push_* call. */
164 1.1 christos
165 1.1 christos GCC_METHOD0 (int /* bool */, pop_binding_level)
166 1.1 christos
167 1.1 christos /* Return the NAMESPACE_DECL, TYPE_DECL or FUNCTION_DECL of the
168 1.1 christos binding level that would be popped by pop_scope. */
169 1.1 christos
170 1.1 christos GCC_METHOD0 (gcc_decl, get_current_binding_level_decl)
171 1.1 christos
172 1.1 christos /* Make the current binding level an inline namespace. It must be a
173 1.1 christos namespace to begin with. It is safe to call this more than once
174 1.1 christos for the same namespace, but after the first call, subsequent ones
175 1.1 christos will not return a success status. */
176 1.1 christos
177 1.1 christos GCC_METHOD0 (int /* bool */, make_namespace_inline)
178 1.1 christos
179 1.1 christos /* Add USED_NS to the namespaces used by the current binding level.
180 1.1 christos Use get_current_binding_level_decl to obtain USED_NS's
181 1.1 christos gcc_decl. */
182 1.1 christos
183 1.1 christos GCC_METHOD1 (int /* bool */, add_using_namespace,
184 1.1 christos gcc_decl) /* Argument USED_NS. */
185 1.1 christos
186 1.1 christos /* Introduce a namespace alias declaration, as in:
187 1.1 christos
188 1.1 christos namespace foo = [... ::] bar;
189 1.1 christos
190 1.1 christos After this call, namespace TARGET will be visible as ALIAS within
191 1.1 christos the current namespace. Get the declaration for TARGET by calling
192 1.1 christos get_current_binding_level_decl after pushing into it. */
193 1.1 christos
194 1.1 christos GCC_METHOD2 (int /* bool */, add_namespace_alias,
195 1.1 christos const char *, /* Argument ALIAS. */
196 1.1 christos gcc_decl) /* Argument TARGET. */
197 1.1 christos
198 1.1 christos /* Introduce a using declaration, as in:
199 1.1 christos
200 1.1 christos using foo::bar;
201 1.1 christos
202 1.1 christos The TARGET decl names the qualifying scope (foo:: above) and the
203 1.1 christos identifier (bar), but that does not mean that only TARGET will be
204 1.1 christos brought into the current scope: all bindings of TARGET's identifier
205 1.1 christos in the qualifying scope will be brought in.
206 1.1 christos
207 1.1 christos FLAGS should specify GCC_CP_SYMBOL_USING. If the current scope is
208 1.1 christos a class scope, visibility flags must be supplied.
209 1.1 christos
210 1.1 christos Even when TARGET is template dependent, we don't need to specify
211 1.1 christos whether or not it is a typename: the supplied declaration (that
212 1.1 christos could be a template-dependent type converted to declaration by
213 1.1 christos get_type_decl) indicates so. */
214 1.1 christos
215 1.1 christos GCC_METHOD2 (int /* bool */, add_using_decl,
216 1.1 christos enum gcc_cp_symbol_kind, /* Argument FLAGS. */
217 1.1 christos gcc_decl) /* Argument TARGET. */
218 1.1 christos
219 1.1 christos /* Create a new "decl" in GCC, and bind it in the current binding
220 1.1 christos level. A decl is a declaration, basically a kind of symbol.
221 1.1 christos
222 1.1 christos NAME is the name of the new symbol. SYM_KIND is the kind of
223 1.1 christos symbol being requested. SYM_TYPE is the new symbol's C++ type;
224 1.1 christos except for labels, where this is not meaningful and should be
225 1.1 christos zero. If SUBSTITUTION_NAME is not NULL, then a reference to this
226 1.1 christos decl in the source will later be substituted with a dereference
227 1.1 christos of a variable of the given name. Otherwise, for symbols having
228 1.1 christos an address (e.g., functions), ADDRESS is the address. FILENAME
229 1.1 christos and LINE_NUMBER refer to the symbol's source location. If this
230 1.1 christos is not known, FILENAME can be NULL and LINE_NUMBER can be 0.
231 1.1 christos This function returns the new decl.
232 1.1 christos
233 1.1 christos Use this function to register typedefs, functions and variables to
234 1.1 christos namespace and local binding levels, and typedefs, member functions
235 1.1 christos (static or not), and static data members to class binding levels.
236 1.1 christos Class members must have their access controls specified with
237 1.1 christos GCC_CP_ACCESS_* flags in SYM_KIND.
238 1.1 christos
239 1.1 christos Note that, since access controls are disabled, we have no means to
240 1.1 christos express private, protected and public.
241 1.1 christos
242 1.1 christos There are various flags that can be set in SYM_KIND to specify
243 1.1 christos additional semantics. Look for GCC_CP_FLAGs in the definition of
244 1.1 christos enum gcc_cp_symbol_kind in gcc-cp-interface.h.
245 1.1 christos
246 1.1 christos In order to define member functions, pass GCC_CP_SYMBOL_FUNCTION in
247 1.1 christos SYM_KIND, and a function_type for static member functions or a
248 1.1 christos method type for non-static member functions, including constructors
249 1.1 christos and destructors. Use build_function_type to create a function
250 1.1 christos type; for a method type, start by creating a function type without
251 1.1 christos any compiler-introduced artificial arguments (the implicit this
252 1.1 christos pointer, and the __in_chrg added to constructors and destructors,
253 1.1 christos and __vtt_parm added to the former), and then use build_method_type
254 1.1 christos to create the method type out of the class type and the function
255 1.1 christos type.
256 1.1 christos
257 1.1 christos For operator functions, set GCC_CP_FLAG_SPECIAL_FUNCTION in
258 1.1 christos SYM_KIND, in addition to any other applicable flags, and pass as
259 1.1 christos NAME a string starting with the two-character mangling for operator
260 1.1 christos name: "ps" for unary plus, "mL" for multiply and assign, *=; etc.
261 1.1 christos Use "cv" for type converstion operators (the target type portion
262 1.1 christos may be omitted, as it is taken from the return type in SYM_TYPE).
263 1.1 christos For operator"", use "li" followed by the identifier (the mangled
264 1.1 christos name mandates digits specifying the length of the identifier; if
265 1.1 christos present, they determine the end of the identifier, otherwise, the
266 1.1 christos identifier extents to the end of the string, so that "li3_Kme" and
267 1.1 christos "li_Km" are equivalent).
268 1.1 christos
269 1.1 christos Constructors and destructors need special care, because for each
270 1.1 christos constructor and destructor there may be multiple clones defined
271 1.1 christos internally by the compiler. With build_decl, you can introduce the
272 1.1 christos base declaration of a constructor or a destructor, setting
273 1.1 christos GCC_CP_FLAG_SPECIAL_FUNCTION the flag and using names starting with
274 1.1 christos capital "C" or "D", respectively, followed by a digit (see below),
275 1.1 christos a blank, or NUL ('\0'). DO NOT supply an ADDRESS or a
276 1.1 christos SUBSTITUTION_NAME to build_decl, it would be meaningless (and
277 1.1 christos rejected) for the base declaration; use define_cdtor_clone to
278 1.1 christos introduce the address of each clone. For constructor templates,
279 1.1 christos declare the template with build_decl, and then, for each
280 1.1 christos specialization, introduce it with
281 1.1 christos build_function_template_specialization, and then define the
282 1.1 christos addresses of each of its clones with define_cdtor_clone.
283 1.1 christos
284 1.1 christos NAMEs for GCC_CP_FLAG_SPECIAL_FUNCTION:
285 1.1 christos
286 1.1 christos NAME meaning
287 1.1 christos C? constructor base declaration (? may be 1, 2, 4, blank or NUL)
288 1.1 christos D? destructor base declaration (? may be 0, 1, 2, 4, blank or NUL)
289 1.1 christos nw operator new
290 1.1 christos na operator new[]
291 1.1 christos dl operator delete
292 1.1 christos da operator delete[]
293 1.1 christos ps operator + (unary)
294 1.1 christos ng operator - (unary)
295 1.1 christos ad operator & (unary)
296 1.1 christos de operator * (unary)
297 1.1 christos co operator ~
298 1.1 christos pl operator +
299 1.1 christos mi operator -
300 1.1 christos ml operator *
301 1.1 christos dv operator /
302 1.1 christos rm operator %
303 1.1 christos an operator &
304 1.1 christos or operator |
305 1.1 christos eo operator ^
306 1.1 christos aS operator =
307 1.1 christos pL operator +=
308 1.1 christos mI operator -=
309 1.1 christos mL operator *=
310 1.1 christos dV operator /=
311 1.1 christos rM operator %=
312 1.1 christos aN operator &=
313 1.1 christos oR operator |=
314 1.1 christos eO operator ^=
315 1.1 christos ls operator <<
316 1.1 christos rs operator >>
317 1.1 christos lS operator <<=
318 1.1 christos rS operator >>=
319 1.1 christos eq operator ==
320 1.1 christos ne operator !=
321 1.1 christos lt operator <
322 1.1 christos gt operator >
323 1.1 christos le operator <=
324 1.1 christos ge operator >=
325 1.1 christos nt operator !
326 1.1 christos aa operator &&
327 1.1 christos oo operator ||
328 1.1 christos pp operator ++
329 1.1 christos mm operator --
330 1.1 christos cm operator ,
331 1.1 christos pm operator ->*
332 1.1 christos pt operator ->
333 1.1 christos cl operator ()
334 1.1 christos ix operator []
335 1.1 christos qu operator ?
336 1.1 christos cv operator <T> (conversion operator)
337 1.1 christos li<id> operator "" <id>
338 1.1 christos
339 1.1 christos FIXME: How about attributes? */
340 1.1 christos
341 1.1 christos GCC_METHOD7 (gcc_decl, build_decl,
342 1.1 christos const char *, /* Argument NAME. */
343 1.1 christos enum gcc_cp_symbol_kind, /* Argument SYM_KIND. */
344 1.1 christos gcc_type, /* Argument SYM_TYPE. */
345 1.1 christos const char *, /* Argument SUBSTITUTION_NAME. */
346 1.1 christos gcc_address, /* Argument ADDRESS. */
347 1.1 christos const char *, /* Argument FILENAME. */
348 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
349 1.1 christos
350 1.1 christos /* Supply the ADDRESS of one of the multiple clones of constructor or
351 1.1 christos destructor CDTOR. The clone is specified by NAME, using the
352 1.1 christos following name mangling conventions:
353 1.1 christos
354 1.1 christos C1 in-charge constructor
355 1.1 christos C2 not-in-charge constructor
356 1.1 christos C4 unified constructor
357 1.1 christos D0 deleting destructor
358 1.1 christos D1 in-charge destructor
359 1.1 christos D2 not-in-charge destructor
360 1.1 christos D4 unified destructor
361 1.1 christos
362 1.1 christos The following information is not necessary to use the API.
363 1.1 christos
364 1.1 christos C1 initializes an instance of the class (rather than of derived
365 1.1 christos classes), including virtual base classes, whereas C2 initializes a
366 1.1 christos sub-object (of the given class type) of an instance of some derived
367 1.1 christos class (or a full object that doesn't have any virtual base
368 1.1 christos classes).
369 1.1 christos
370 1.1 christos D0 and D1 destruct an instance of the class, including virtual base
371 1.1 christos classes, but only the former calls operator delete to release the
372 1.1 christos object's storage at the end; D2 destructs a sub-object (of the
373 1.1 christos given class type) of an instance of a derived class (or a full
374 1.1 christos object that doesn't have any virtual base classes).
375 1.1 christos
376 1.1 christos The [CD]4 manglings (and symbol definitions) are non-standard, but
377 1.1 christos GCC uses them in some cases: rather than assuming they are
378 1.1 christos in-charge or not-in-charge, they test the implicit argument that
379 1.1 christos the others ignore to tell how to behave. These are used instead of
380 1.1 christos cloning when we just can't use aliases. */
381 1.1 christos
382 1.1 christos GCC_METHOD3 (gcc_decl, define_cdtor_clone,
383 1.1 christos const char *, /* Argument NAME. */
384 1.1 christos gcc_decl, /* Argument CDTOR. */
385 1.1 christos gcc_address) /* Argument ADDRESS. */
386 1.1 christos
387 1.1 christos /* Return the type associated with the given declaration. This is
388 1.1 christos most useful to obtain the type associated with a forward-declared
389 1.1 christos class, because it is the gcc_type, rather than the gcc_decl, that
390 1.1 christos has to be used to build other types, but build_decl returns a
391 1.1 christos gcc_decl rather than a gcc_type. This call can in theory be used
392 1.1 christos to obtain the type from any other declaration; it is supposed to
393 1.1 christos return the same type that was supplied when the declaration was
394 1.1 christos created. */
395 1.1 christos
396 1.1 christos GCC_METHOD1 (gcc_type, get_decl_type,
397 1.1 christos gcc_decl) /* Argument DECL. */
398 1.1 christos
399 1.1 christos /* Return the declaration for a type. */
400 1.1 christos
401 1.1 christos GCC_METHOD1 (gcc_decl, get_type_decl,
402 1.1 christos gcc_type) /* Argument TYPE. */
403 1.1 christos
404 1.1 christos /* Declare DECL as a friend of the current class scope, if TYPE is
405 1.1 christos NULL, or of TYPE itself otherwise. DECL may be a function or a
406 1.1 christos class, be they template generics, template specializations or not
407 1.1 christos templates. TYPE must be a class type (not a template generic).
408 1.1 christos
409 1.1 christos The add_friend call cannot introduce a declaration; even if the
410 1.1 christos friend is first declared as a friend in the source code, the
411 1.1 christos declaration belongs in the enclosing namespace, so it must be
412 1.1 christos introduced in that namespace, and the resulting declaration can
413 1.1 christos then be made a friend.
414 1.1 christos
415 1.1 christos DECL cannot, however, be a member of a template class generic,
416 1.1 christos because we have no means to introduce their declarations. This
417 1.1 christos interface has no notion of definitions for template generics. As a
418 1.1 christos consequence, users of this interface must introduce each friend
419 1.1 christos template member specialization separately, i.e., instead of:
420 1.1 christos
421 1.1 christos template <typename T> friend struct X<T>::M;
422 1.1 christos
423 1.1 christos they must be declared as if they were:
424 1.1 christos
425 1.1 christos friend struct X<onetype>::M;
426 1.1 christos friend struct X<anothertype>::M;
427 1.1 christos ... for each specialization of X.
428 1.1 christos
429 1.1 christos
430 1.1 christos Specializations of a template can have each others' members as
431 1.1 christos friends:
432 1.1 christos
433 1.1 christos template <typename T> class foo {
434 1.1 christos int f();
435 1.1 christos template <typename U> friend int foo<U>::f();
436 1.1 christos };
437 1.1 christos
438 1.1 christos It wouldn't always be possible to define all specializations of a
439 1.1 christos template class before introducing the friend declarations in their
440 1.1 christos expanded, per-specialization form.
441 1.1 christos
442 1.1 christos In order to simplify such friend declarations, and to enable
443 1.1 christos incremental friend declarations as template specializations are
444 1.1 christos introduced, add_friend can be called after the befriending class is
445 1.1 christos fully defined, passing it a non-NULL TYPE argument naming the
446 1.1 christos befriending class type. */
447 1.1 christos
448 1.1 christos GCC_METHOD2 (int /* bool */, add_friend,
449 1.1 christos gcc_decl, /* Argument DECL. */
450 1.1 christos gcc_type) /* Argument TYPE. */
451 1.1 christos
452 1.1 christos /* Return the type of a pointer to a given base type. */
453 1.1 christos
454 1.1 christos GCC_METHOD1 (gcc_type, build_pointer_type,
455 1.1 christos gcc_type) /* Argument BASE_TYPE. */
456 1.1 christos
457 1.1 christos /* Return the type of a reference to a given base type. */
458 1.1 christos
459 1.1 christos GCC_METHOD2 (gcc_type, build_reference_type,
460 1.1 christos gcc_type, /* Argument BASE_TYPE. */
461 1.1 christos enum gcc_cp_ref_qualifiers) /* Argument RQUALS. */
462 1.1 christos
463 1.1 christos /* Create a new pointer-to-member type. MEMBER_TYPE is the data
464 1.1 christos member type, while CLASS_TYPE is the class type containing the data
465 1.1 christos member. For pointers to member functions, MEMBER_TYPE must be a
466 1.1 christos method type, and CLASS_TYPE must be specified even though it might
467 1.1 christos be possible to extract it from the method type. */
468 1.1 christos
469 1.1 christos GCC_METHOD2 (gcc_type, build_pointer_to_member_type,
470 1.1 christos gcc_type, /* Argument CLASS_TYPE. */
471 1.1 christos gcc_type) /* Argument MEMBER_TYPE. */
472 1.1 christos
473 1.1 christos /* Start a template parameter list scope and enters it, so that
474 1.1 christos subsequent build_type_template_parameter and
475 1.1 christos build_value_template_parameter calls create template parameters in
476 1.1 christos the list. The list is closed by a build_decl call with
477 1.1 christos GCC_CP_SYMBOL_FUNCTION or GCC_CP_SYMBOL_CLASS, that, when the scope
478 1.1 christos is a template parameter list, declares a template function or a
479 1.1 christos template class with the then-closed parameter list. The scope in
480 1.1 christos which the new declaration is to be introduced by build_decl must be
481 1.1 christos entered before calling start_template_decl, and build_decl returns
482 1.1 christos to that scope, from the template parameter list scope, before
483 1.1 christos introducing the declaration. */
484 1.1 christos
485 1.1 christos GCC_METHOD0 (int /* bool */, start_template_decl)
486 1.1 christos
487 1.1 christos /* Build a typename template-parameter (e.g., the T in template
488 1.1 christos <typename T = X>). Either PACK_P should be nonzero, to indicate an
489 1.1 christos argument pack (the last argument in a variadic template argument
490 1.1 christos list, as in template <typename... T>), or DEFAULT_TYPE may be
491 1.1 christos non-NULL to set the default type argument (e.g. X) for the template
492 1.1 christos parameter. FILENAME and LINE_NUMBER may specify the source
493 1.1 christos location in which the template parameter was declared. */
494 1.1 christos
495 1.1 christos GCC_METHOD5 (gcc_type, build_type_template_parameter,
496 1.1 christos const char *, /* Argument ID. */
497 1.1 christos int /* bool */, /* Argument PACK_P. */
498 1.1 christos gcc_type, /* Argument DEFAULT_TYPE. */
499 1.1 christos const char *, /* Argument FILENAME. */
500 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
501 1.1 christos
502 1.1 christos /* Build a template template-parameter (e.g., the T in template
503 1.1 christos <template <[...]> class T = X>). DEFAULT_TEMPL may be non-NULL to
504 1.1 christos set the default type-template argument (e.g. X) for the template
505 1.1 christos template parameter. FILENAME and LINE_NUMBER may specify the
506 1.1 christos source location in which the template parameter was declared. */
507 1.1 christos
508 1.1 christos GCC_METHOD5 (gcc_utempl, build_template_template_parameter,
509 1.1 christos const char *, /* Argument ID. */
510 1.1 christos int /* bool */, /* Argument PACK_P. */
511 1.1 christos gcc_utempl, /* Argument DEFAULT_TEMPL. */
512 1.1 christos const char *, /* Argument FILENAME. */
513 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
514 1.1 christos
515 1.1 christos /* Build a value template-parameter (e.g., the V in template <typename
516 1.1 christos T, T V> or in template <int V = X>). DEFAULT_VALUE may be non-NULL
517 1.1 christos to set the default value argument for the template parameter (e.g.,
518 1.1 christos X). FILENAME and LINE_NUMBER may specify the source location in
519 1.1 christos which the template parameter was declared. */
520 1.1 christos
521 1.1 christos GCC_METHOD5 (gcc_decl, build_value_template_parameter,
522 1.1 christos gcc_type, /* Argument TYPE. */
523 1.1 christos const char *, /* Argument ID. */
524 1.1 christos gcc_expr, /* Argument DEFAULT_VALUE. */
525 1.1 christos const char *, /* Argument FILENAME. */
526 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
527 1.1 christos
528 1.1 christos /* Build a template-dependent typename (e.g., typename T::bar or
529 1.1 christos typename T::template bart<X>). ENCLOSING_TYPE should be the
530 1.1 christos template-dependent nested name specifier (e.g., T), ID should be
531 1.1 christos the name of the member of the ENCLOSING_TYPE (e.g., bar or bart),
532 1.1 christos and TARGS should be non-NULL and specify the template arguments
533 1.1 christos (e.g. <X>) iff ID is to name a class template.
534 1.1 christos
535 1.1 christos In this and other calls, a template-dependent nested name specifier
536 1.1 christos may be a template class parameter (build_type_template_parameter),
537 1.1 christos a specialization (returned by build_dependent_type_template_id) of
538 1.1 christos a template template parameter (returned by
539 1.1 christos build_template_template_parameter) or a member type thereof
540 1.1 christos (returned by build_dependent_typename itself). */
541 1.1 christos
542 1.1 christos GCC_METHOD3 (gcc_type, build_dependent_typename,
543 1.1 christos gcc_type, /* Argument ENCLOSING_TYPE. */
544 1.1 christos const char *, /* Argument ID. */
545 1.1 christos const struct gcc_cp_template_args *) /* Argument TARGS. */
546 1.1 christos
547 1.1 christos /* Build a template-dependent class template (e.g., T::template bart).
548 1.1 christos ENCLOSING_TYPE should be the template-dependent nested name
549 1.1 christos specifier (e.g., T), ID should be the name of the class template
550 1.1 christos member of the ENCLOSING_TYPE (e.g., bart). */
551 1.1 christos
552 1.1 christos GCC_METHOD2 (gcc_utempl, build_dependent_class_template,
553 1.1 christos gcc_type, /* Argument ENCLOSING_TYPE. */
554 1.1 christos const char *) /* Argument ID. */
555 1.1 christos
556 1.1 christos /* Build a template-dependent type template-id (e.g., T<A>).
557 1.1 christos TEMPLATE_DECL should be a template template parameter (e.g., the T
558 1.1 christos in template <template <[...]> class T = X>), and TARGS should
559 1.1 christos specify the template arguments (e.g. <A>). */
560 1.1 christos
561 1.1 christos GCC_METHOD2 (gcc_type, build_dependent_type_template_id,
562 1.1 christos gcc_utempl, /* Argument TEMPLATE_DECL. */
563 1.1 christos const struct gcc_cp_template_args *) /* Argument TARGS. */
564 1.1 christos
565 1.1 christos /* Build a template-dependent expression (e.g., S::val or S::template
566 1.1 christos mtf<X>, or unqualified f or template tf<X>).
567 1.1 christos
568 1.1 christos ENCLOSING_SCOPE should be a template-dependent nested name
569 1.1 christos specifier (e.g., T), a resolved namespace or class decl, or NULL
570 1.1 christos for unqualified names; ID should be the name of the member of the
571 1.1 christos ENCLOSING_SCOPE (e.g., val or mtf) or unqualified overloaded
572 1.1 christos function; and TARGS should list template arguments (e.g. <X>) when
573 1.1 christos mtf or tf are to name a template function, or be NULL otherwise.
574 1.1 christos
575 1.1 christos Unqualified names and namespace- or class-qualified names can only
576 1.1 christos resolve to overloaded functions, to be used in contexts that
577 1.1 christos involve overload resolution that cannot be resolved because of
578 1.1 christos template-dependent argument or return types, such as call
579 1.1 christos expressions with template-dependent arguments, conversion
580 1.1 christos expressions to function types with template-dependent argument
581 1.1 christos types or the like. Other cases of unqualified or
582 1.1 christos non-template-dependent-qualified names should NOT use this
583 1.1 christos function, and use decl_expr to convert the appropriate function or
584 1.1 christos object declaration to an expression.
585 1.1 christos
586 1.1 christos If ID is the name of a special member function, FLAGS should be
587 1.1 christos GCC_CP_SYMBOL_FUNCTION|GCC_CP_FLAG_SPECIAL_FUNCTION, and ID should
588 1.1 christos be one of the encodings for special member functions documented in
589 1.1 christos build_decl. Otherwise, FLAGS should be GCC_CP_SYMBOL_MASK, which
590 1.1 christos suggests the symbol kind is not known (though we know it is not a
591 1.1 christos type).
592 1.1 christos
593 1.1 christos If ID denotes a conversion operator, CONV_TYPE should name the
594 1.1 christos target type of the conversion. Otherwise, CONV_TYPE must be
595 1.1 christos NULL. */
596 1.1 christos
597 1.1 christos GCC_METHOD5 (gcc_expr, build_dependent_expr,
598 1.1 christos gcc_decl, /* Argument ENCLOSING_SCOPE. */
599 1.1 christos enum gcc_cp_symbol_kind, /* Argument FLAGS. */
600 1.1 christos const char *, /* Argument NAME. */
601 1.1 christos gcc_type, /* Argument CONV_TYPE. */
602 1.1 christos const struct gcc_cp_template_args *) /* Argument TARGS. */
603 1.1 christos
604 1.1 christos /* Build a gcc_expr for the value VALUE in type TYPE. */
605 1.1 christos
606 1.1 christos GCC_METHOD2 (gcc_expr, build_literal_expr,
607 1.1 christos gcc_type, /* Argument TYPE. */
608 1.1 christos unsigned long) /* Argument VALUE. */
609 1.1 christos
610 1.1 christos /* Build a gcc_expr that denotes DECL, the declaration of a variable
611 1.1 christos or function in namespace scope, or of a static member variable or
612 1.1 christos function. Use QUALIFIED_P to build the operand of unary & so as to
613 1.1 christos compute a pointer-to-member, rather than a regular pointer. */
614 1.1 christos
615 1.1 christos GCC_METHOD2 (gcc_expr, build_decl_expr,
616 1.1 christos gcc_decl, /* Argument DECL. */
617 1.1 christos int /* bool */) /* Argument QUALIFIED_P. */
618 1.1 christos
619 1.1 christos /* Build a gcc_expr that denotes the unary operation UNARY_OP applied
620 1.1 christos to the gcc_expr OPERAND. For non-expr operands, see
621 1.1 christos unary_type_expr. Besides the UNARY_OP encodings used for operator
622 1.1 christos names, we support "pp_" for preincrement, and "mm_" for
623 1.1 christos predecrement, "nx" for noexcept, "tw" for throw, "tr" for rethrow
624 1.1 christos (pass NULL as the operand), "te" for typeid, "sz" for sizeof, "az"
625 1.1 christos for alignof, "dl" for delete, "gsdl" for ::delete, "da" for
626 1.1 christos delete[], "gsda" for ::delete[], "sp" for pack expansion, "sZ" for
627 1.1 christos sizeof...(function argument pack). */
628 1.1 christos
629 1.1 christos GCC_METHOD2 (gcc_expr, build_unary_expr,
630 1.1 christos const char *, /* Argument UNARY_OP. */
631 1.1 christos gcc_expr) /* Argument OPERAND. */
632 1.1 christos
633 1.1 christos /* Build a gcc_expr that denotes the binary operation BINARY_OP
634 1.1 christos applied to gcc_exprs OPERAND1 and OPERAND2. Besides the BINARY_OP
635 1.1 christos encodings used for operator names, we support "ds" for the operator
636 1.1 christos token ".*" and "dt" for the operator token ".". When using
637 1.1 christos operators that take a name as their second operand ("." and "->")
638 1.1 christos use decl_expr to convert the gcc_decl of the member name to a
639 1.1 christos gcc_expr, if the member name wasn't created with
640 1.1 christos e.g. build_dependent_expr. */
641 1.1 christos
642 1.1 christos GCC_METHOD3 (gcc_expr, build_binary_expr,
643 1.1 christos const char *, /* Argument BINARY_OP. */
644 1.1 christos gcc_expr, /* Argument OPERAND1. */
645 1.1 christos gcc_expr) /* Argument OPERAND2. */
646 1.1 christos
647 1.1 christos /* Build a gcc_expr that denotes the ternary operation TERNARY_OP
648 1.1 christos applied to gcc_exprs OPERAND1, OPERAND2 and OPERAND3. The only
649 1.1 christos supported TERNARY_OP is "qu", for the "?:" operator. */
650 1.1 christos
651 1.1 christos GCC_METHOD4 (gcc_expr, build_ternary_expr,
652 1.1 christos const char *, /* Argument TERNARY_OP. */
653 1.1 christos gcc_expr, /* Argument OPERAND1. */
654 1.1 christos gcc_expr, /* Argument OPERAND2. */
655 1.1 christos gcc_expr) /* Argument OPERAND3. */
656 1.1 christos
657 1.1 christos /* Build a gcc_expr that denotes the unary operation UNARY_OP applied
658 1.1 christos to the gcc_type OPERAND. Supported unary operations taking types
659 1.1 christos are "ti" for typeid, "st" for sizeof, "at" for alignof, and "sZ"
660 1.1 christos for sizeof...(template argument pack). */
661 1.1 christos
662 1.1 christos GCC_METHOD2 (gcc_expr, build_unary_type_expr,
663 1.1 christos const char *, /* Argument UNARY_OP. */
664 1.1 christos gcc_type) /* Argument OPERAND. */
665 1.1 christos
666 1.1 christos /* Build a gcc_expr that denotes the binary operation BINARY_OP
667 1.1 christos applied to gcc_type OPERAND1 and gcc_expr OPERAND2. Use this for
668 1.1 christos all kinds of (single-argument) type casts ("dc", "sc", "cc", "rc"
669 1.1 christos for dynamic, static, const and reinterpret casts, respectively;
670 1.1 christos "cv" for functional or C-style casts). */
671 1.1 christos
672 1.1 christos GCC_METHOD3 (gcc_expr, build_cast_expr,
673 1.1 christos const char *, /* Argument BINARY_OP. */
674 1.1 christos gcc_type, /* Argument OPERAND1. */
675 1.1 christos gcc_expr) /* Argument OPERAND2. */
676 1.1 christos
677 1.1 christos /* Build a gcc_expr that denotes the conversion of an expression list
678 1.1 christos VALUES to TYPE, with ("tl") or without ("cv") braces, or a braced
679 1.1 christos initializer list of unspecified type (e.g., a component of another
680 1.1 christos braced initializer list; pass "il" for CONV_OP, and NULL for
681 1.1 christos TYPE). */
682 1.1 christos
683 1.1 christos GCC_METHOD3 (gcc_expr, build_expression_list_expr,
684 1.1 christos const char *, /* Argument CONV_OP. */
685 1.1 christos gcc_type, /* Argument TYPE. */
686 1.1 christos const struct gcc_cp_function_args *) /* Argument VALUES. */
687 1.1 christos
688 1.1 christos /* Build a gcc_expr that denotes a new ("nw") or new[] ("na")
689 1.1 christos expression of TYPE, with or without a GLOBAL_NS qualifier (prefix
690 1.1 christos the NEW_OP with "gs"), with or without PLACEMENT, with or without
691 1.1 christos INITIALIZER. If it's not a placement new, PLACEMENT must be NULL
692 1.1 christos (rather than a zero-length placement arg list). If there's no
693 1.1 christos specified initializer, INITIALIZER must be NULL; a zero-length arg
694 1.1 christos list stands for a default initializer. */
695 1.1 christos
696 1.1 christos GCC_METHOD4 (gcc_expr, build_new_expr,
697 1.1 christos const char *, /* Argument NEW_OP. */
698 1.1 christos const struct gcc_cp_function_args *, /* Argument PLACEMENT. */
699 1.1 christos gcc_type, /* Argument TYPE. */
700 1.1 christos const struct gcc_cp_function_args *) /* Argument INITIALIZER. */
701 1.1 christos
702 1.1 christos /* Return a call expression that calls CALLABLE with arguments ARGS.
703 1.1 christos CALLABLE may be a function, a callable object, a pointer to
704 1.1 christos function, an unresolved expression, an unresolved overload set, an
705 1.1 christos object expression combined with a member function overload set or a
706 1.1 christos pointer-to-member. If QUALIFIED_P, CALLABLE will be interpreted as
707 1.1 christos a qualified name, preventing virtual function dispatch. */
708 1.1 christos
709 1.1 christos GCC_METHOD3 (gcc_expr, build_call_expr,
710 1.1 christos gcc_expr, /* Argument CALLABLE. */
711 1.1 christos int /* bool */, /* Argument QUALIFIED_P. */
712 1.1 christos const struct gcc_cp_function_args *) /* Argument ARGS. */
713 1.1 christos
714 1.1 christos /* Return the type of the gcc_expr OPERAND.
715 1.1 christos Use this for decltype.
716 1.1 christos For decltype (auto), pass a NULL OPERAND.
717 1.1 christos
718 1.1 christos Note: for template-dependent expressions, the result is NULL,
719 1.1 christos because the type is only computed when template argument
720 1.1 christos substitution is performed. */
721 1.1 christos
722 1.1 christos GCC_METHOD1 (gcc_type, get_expr_type,
723 1.1 christos gcc_expr) /* Argument OPERAND. */
724 1.1 christos
725 1.1 christos /* Introduce a specialization of a template function.
726 1.1 christos
727 1.1 christos TEMPLATE_DECL is the template function, and TARGS are the arguments
728 1.1 christos for the specialization. ADDRESS is the address of the
729 1.1 christos specialization. FILENAME and LINE_NUMBER specify the source
730 1.1 christos location associated with the template function specialization. */
731 1.1 christos
732 1.1 christos GCC_METHOD5 (gcc_decl, build_function_template_specialization,
733 1.1 christos gcc_decl, /* Argument TEMPLATE_DECL. */
734 1.1 christos const struct gcc_cp_template_args *, /* Argument TARGS. */
735 1.1 christos gcc_address, /* Argument ADDRESS. */
736 1.1 christos const char *, /* Argument FILENAME. */
737 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
738 1.1 christos
739 1.1 christos /* Specialize a template class as an incomplete type. A definition
740 1.1 christos can be supplied later, with start_class_type.
741 1.1 christos
742 1.1 christos TEMPLATE_DECL is the template class, and TARGS are the arguments
743 1.1 christos for the specialization. FILENAME and LINE_NUMBER specify the
744 1.1 christos source location associated with the template class
745 1.1 christos specialization. */
746 1.1 christos
747 1.1 christos GCC_METHOD4 (gcc_decl, build_class_template_specialization,
748 1.1 christos gcc_decl, /* Argument TEMPLATE_DECL. */
749 1.1 christos const struct gcc_cp_template_args *, /* Argument TARGS. */
750 1.1 christos const char *, /* Argument FILENAME. */
751 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
752 1.1 christos
753 1.1 christos /* Start defining a 'class', 'struct' or 'union' type, entering its
754 1.1 christos own binding level. Initially it has no fields.
755 1.1 christos
756 1.1 christos TYPEDECL is the forward-declaration of the type, returned by
757 1.1 christos build_decl. BASE_CLASSES indicate the base classes of class NAME.
758 1.1 christos FILENAME and LINE_NUMBER specify the source location associated
759 1.1 christos with the class definition, should they be different from those of
760 1.1 christos the forward declaration. */
761 1.1 christos
762 1.1 christos GCC_METHOD4 (gcc_type, start_class_type,
763 1.1 christos gcc_decl, /* Argument TYPEDECL. */
764 1.1 christos const struct gcc_vbase_array *,/* Argument BASE_CLASSES. */
765 1.1 christos const char *, /* Argument FILENAME. */
766 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
767 1.1 christos
768 1.1 christos /* Create a new closure class type, record it as the
769 1.1 christos DISCRIMINATOR-numbered closure type in the current scope (or
770 1.1 christos associated with EXTRA_SCOPE, if non-NULL), and enter the closure
771 1.1 christos type's own binding level. This primitive would sort of combine
772 1.1 christos build_decl and start_class_type, if they could be used to introduce
773 1.1 christos a closure type. Initially it has no fields.
774 1.1 christos
775 1.1 christos FILENAME and LINE_NUMBER specify the source location associated
776 1.1 christos with the class. EXTRA_SCOPE, if non-NULL, must be a PARM_DECL of
777 1.1 christos the current function, or a FIELD_DECL of the current class. If it
778 1.1 christos is NULL, the current scope must be a function. */
779 1.1 christos
780 1.1 christos GCC_METHOD5 (gcc_type, start_closure_class_type,
781 1.1 christos int, /* Argument DISCRIMINATOR. */
782 1.1 christos gcc_decl, /* Argument EXTRA_SCOPE. */
783 1.1 christos enum gcc_cp_symbol_kind, /* Argument FLAGS. */
784 1.1 christos const char *, /* Argument FILENAME. */
785 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
786 1.1 christos
787 1.1 christos /* Add a non-static data member to the most-recently-started
788 1.1 christos unfinished struct or union type. FIELD_NAME is the field's name.
789 1.1 christos FIELD_TYPE is the type of the field. BITSIZE and BITPOS indicate
790 1.1 christos where in the struct the field occurs. */
791 1.1 christos
792 1.1 christos GCC_METHOD5 (gcc_decl, build_field,
793 1.1 christos const char *, /* Argument FIELD_NAME. */
794 1.1 christos gcc_type, /* Argument FIELD_TYPE. */
795 1.1 christos enum gcc_cp_symbol_kind, /* Argument FIELD_FLAGS. */
796 1.1 christos unsigned long, /* Argument BITSIZE. */
797 1.1 christos unsigned long) /* Argument BITPOS. */
798 1.1 christos
799 1.1 christos /* After all the fields have been added to a struct, class or union,
800 1.1 christos the struct or union type must be "finished". This does some final
801 1.1 christos cleanups in GCC, and pops to the binding level that was in effect
802 1.1 christos before the matching start_class_type or
803 1.1 christos start_closure_class_type. */
804 1.1 christos
805 1.1 christos GCC_METHOD1 (int /* bool */, finish_class_type,
806 1.1 christos unsigned long) /* Argument SIZE_IN_BYTES. */
807 1.1 christos
808 1.1 christos /* Create a new 'enum' type, and record it in the current binding
809 1.1 christos level. The new type initially has no associated constants.
810 1.1 christos
811 1.1 christos NAME is the enum name. FILENAME and LINE_NUMBER specify its source
812 1.1 christos location. */
813 1.1 christos
814 1.1 christos GCC_METHOD5 (gcc_type, start_enum_type,
815 1.1 christos const char *, /* Argument NAME. */
816 1.1 christos gcc_type, /* Argument UNDERLYING_INT_TYPE. */
817 1.1 christos enum gcc_cp_symbol_kind, /* Argument FLAGS. */
818 1.1 christos const char *, /* Argument FILENAME. */
819 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
820 1.1 christos
821 1.1 christos /* Add a new constant to an enum type. NAME is the constant's name
822 1.1 christos and VALUE is its value. Returns a gcc_decl for the constant. */
823 1.1 christos
824 1.1 christos GCC_METHOD3 (gcc_decl, build_enum_constant,
825 1.1 christos gcc_type, /* Argument ENUM_TYPE. */
826 1.1 christos const char *, /* Argument NAME. */
827 1.1 christos unsigned long) /* Argument VALUE. */
828 1.1 christos
829 1.1 christos /* After all the constants have been added to an enum, the type must
830 1.1 christos be "finished". This does some final cleanups in GCC. */
831 1.1 christos
832 1.1 christos GCC_METHOD1 (int /* bool */, finish_enum_type,
833 1.1 christos gcc_type) /* Argument ENUM_TYPE. */
834 1.1 christos
835 1.1 christos /* Create a new function type. RETURN_TYPE is the type returned by
836 1.1 christos the function, and ARGUMENT_TYPES is a vector, of length NARGS, of
837 1.1 christos the argument types. IS_VARARGS is true if the function is
838 1.1 christos varargs. */
839 1.1 christos
840 1.1 christos GCC_METHOD3 (gcc_type, build_function_type,
841 1.1 christos gcc_type, /* Argument RETURN_TYPE. */
842 1.1 christos const struct gcc_type_array *,/* Argument ARGUMENT_TYPES. */
843 1.1 christos int /* bool */) /* Argument IS_VARARGS. */
844 1.1 christos
845 1.1 christos /* Create a variant of a function type with an exception
846 1.1 christos specification. FUNCTION_TYPE is a function or method type.
847 1.1 christos EXCEPT_TYPES is an array with the list of exception types. Zero as
848 1.1 christos the array length implies throw() AKA noexcept(true); NULL as the
849 1.1 christos pointer to gcc_type_array implies noexcept(false), which is almost
850 1.1 christos equivalent (but distinguishable by the compiler) to an unspecified
851 1.1 christos exception list. */
852 1.1 christos
853 1.1 christos GCC_METHOD2 (gcc_type, build_exception_spec_variant,
854 1.1 christos gcc_type, /* Argument FUNCTION_TYPE. */
855 1.1 christos const struct gcc_type_array *)/* Argument EXCEPT_TYPES. */
856 1.1 christos
857 1.1 christos /* Create a new non-static member function type. FUNC_TYPE is the
858 1.1 christos method prototype, without the implicit THIS pointer, added as a
859 1.1 christos pointer to the QUALS-qualified CLASS_TYPE. If CLASS_TYPE is NULL,
860 1.1 christos this creates a cv-qualified (member) function type not associated
861 1.1 christos with any specific class, as needed to support "typedef void f(int)
862 1.1 christos const;", which can later be used to declare member functions and
863 1.1 christos pointers to member functions. */
864 1.1 christos
865 1.1 christos GCC_METHOD4 (gcc_type, build_method_type,
866 1.1 christos gcc_type, /* Argument CLASS_TYPE. */
867 1.1 christos gcc_type, /* Argument FUNC_TYPE. */
868 1.1 christos enum gcc_cp_qualifiers, /* Argument QUALS. */
869 1.1 christos enum gcc_cp_ref_qualifiers) /* Argument RQUALS. */
870 1.1 christos
871 1.1 christos /* Return a declaration for the (INDEX - 1)th argument of
872 1.1 christos FUNCTION_DECL, i.e., for the first argument, use zero as the index.
873 1.1 christos If FUNCTION_DECL is a non-static member function, use -1 to get the
874 1.1 christos implicit THIS parameter. */
875 1.1 christos
876 1.1 christos GCC_METHOD2 (gcc_decl, get_function_parameter_decl,
877 1.1 christos gcc_decl, /* Argument FUNCTION_DECL. */
878 1.1 christos int) /* Argument INDEX. */
879 1.1 christos
880 1.1 christos /* Return a lambda expr that constructs an instance of CLOSURE_TYPE.
881 1.1 christos Only lambda exprs without any captures can be correctly created
882 1.1 christos through these mechanisms; that's all we need to support lambdas
883 1.1 christos expressions in default parameters, the only kind that may have to
884 1.1 christos be introduced through this interface. */
885 1.1 christos
886 1.1 christos GCC_METHOD1 (gcc_expr, build_lambda_expr,
887 1.1 christos gcc_type) /* Argument CLOSURE_TYPE. */
888 1.1 christos
889 1.1 christos /* Return an integer type with the given properties. If BUILTIN_NAME
890 1.1 christos is non-NULL, it must name a builtin integral type with the given
891 1.1 christos signedness and size, and that is the type that will be returned. */
892 1.1 christos
893 1.1 christos GCC_METHOD3 (gcc_type, get_int_type,
894 1.1 christos int /* bool */, /* Argument IS_UNSIGNED. */
895 1.1 christos unsigned long, /* Argument SIZE_IN_BYTES. */
896 1.1 christos const char *) /* Argument BUILTIN_NAME. */
897 1.1 christos
898 1.1 christos /* Return the 'char' type, a distinct type from both 'signed char' and
899 1.1 christos 'unsigned char' returned by int_type. */
900 1.1 christos
901 1.1 christos GCC_METHOD0 (gcc_type, get_char_type)
902 1.1 christos
903 1.1 christos /* Return a floating point type with the given properties. If BUILTIN_NAME
904 1.1 christos is non-NULL, it must name a builtin integral type with the given
905 1.1 christos signedness and size, and that is the type that will be returned. */
906 1.1 christos
907 1.1 christos GCC_METHOD2 (gcc_type, get_float_type,
908 1.1 christos unsigned long, /* Argument SIZE_IN_BYTES. */
909 1.1 christos const char *) /* Argument BUILTIN_NAME. */
910 1.1 christos
911 1.1 christos /* Return the 'void' type. */
912 1.1 christos
913 1.1 christos GCC_METHOD0 (gcc_type, get_void_type)
914 1.1 christos
915 1.1 christos /* Return the 'bool' type. */
916 1.1 christos
917 1.1 christos GCC_METHOD0 (gcc_type, get_bool_type)
918 1.1 christos
919 1.1 christos /* Return the std::nullptr_t type. */
920 1.1 christos
921 1.1 christos GCC_METHOD0 (gcc_type, get_nullptr_type)
922 1.1 christos
923 1.1 christos /* Return the nullptr constant. */
924 1.1 christos
925 1.1 christos GCC_METHOD0 (gcc_expr, get_nullptr_constant)
926 1.1 christos
927 1.1 christos /* Create a new array type. If NUM_ELEMENTS is -1, then the array
928 1.1 christos is assumed to have an unknown length. */
929 1.1 christos
930 1.1 christos GCC_METHOD2 (gcc_type, build_array_type,
931 1.1 christos gcc_type, /* Argument ELEMENT_TYPE. */
932 1.1 christos int) /* Argument NUM_ELEMENTS. */
933 1.1 christos
934 1.1 christos /* Create a new array type. NUM_ELEMENTS is a template-dependent
935 1.1 christos expression. */
936 1.1 christos
937 1.1 christos GCC_METHOD2 (gcc_type, build_dependent_array_type,
938 1.1 christos gcc_type, /* Argument ELEMENT_TYPE. */
939 1.1 christos gcc_expr) /* Argument NUM_ELEMENTS. */
940 1.1 christos
941 1.1 christos /* Create a new variably-sized array type. UPPER_BOUND_NAME is the
942 1.1 christos name of a local variable that holds the upper bound of the array;
943 1.1 christos it is one less than the array size. */
944 1.1 christos
945 1.1 christos GCC_METHOD2 (gcc_type, build_vla_array_type,
946 1.1 christos gcc_type, /* Argument ELEMENT_TYPE. */
947 1.1 christos const char *) /* Argument UPPER_BOUND_NAME. */
948 1.1 christos
949 1.1 christos /* Return a qualified variant of a given base type. QUALIFIERS says
950 1.1 christos which qualifiers to use; it is composed of or'd together
951 1.1 christos constants from 'enum gcc_cp_qualifiers'. */
952 1.1 christos
953 1.1 christos GCC_METHOD2 (gcc_type, build_qualified_type,
954 1.1 christos gcc_type, /* Argument UNQUALIFIED_TYPE. */
955 1.1 christos enum gcc_cp_qualifiers) /* Argument QUALIFIERS. */
956 1.1 christos
957 1.1 christos /* Build a complex type given its element type. */
958 1.1 christos
959 1.1 christos GCC_METHOD1 (gcc_type, build_complex_type,
960 1.1 christos gcc_type) /* Argument ELEMENT_TYPE. */
961 1.1 christos
962 1.1 christos /* Build a vector type given its element type and number of
963 1.1 christos elements. */
964 1.1 christos
965 1.1 christos GCC_METHOD2 (gcc_type, build_vector_type,
966 1.1 christos gcc_type, /* Argument ELEMENT_TYPE. */
967 1.1 christos int) /* Argument NUM_ELEMENTS. */
968 1.1 christos
969 1.1 christos /* Build a constant. NAME is the constant's name and VALUE is its
970 1.1 christos value. FILENAME and LINE_NUMBER refer to the type's source
971 1.1 christos location. If this is not known, FILENAME can be NULL and
972 1.1 christos LINE_NUMBER can be 0. */
973 1.1 christos
974 1.1 christos GCC_METHOD5 (int /* bool */, build_constant,
975 1.1 christos gcc_type, /* Argument TYPE. */
976 1.1 christos const char *, /* Argument NAME. */
977 1.1 christos unsigned long, /* Argument VALUE. */
978 1.1 christos const char *, /* Argument FILENAME. */
979 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
980 1.1 christos
981 1.1 christos /* Emit an error and return an error type object. */
982 1.1 christos
983 1.1 christos GCC_METHOD1 (gcc_type, error,
984 1.1 christos const char *) /* Argument MESSAGE. */
985 1.1 christos
986 1.1 christos /* Declare a static_assert with the given CONDITION and ERRORMSG at
987 1.1 christos FILENAME:LINE_NUMBER. */
988 1.1 christos
989 1.1 christos GCC_METHOD4 (int /* bool */, add_static_assert,
990 1.1 christos gcc_expr, /* Argument CONDITION. */
991 1.1 christos const char *, /* Argument ERRORMSG. */
992 1.1 christos const char *, /* Argument FILENAME. */
993 1.1 christos unsigned int) /* Argument LINE_NUMBER. */
994 1.1 christos
995 1.1 christos #if 0
996 1.1 christos
997 1.1 christos /* FIXME: We don't want to expose the internal implementation detail
998 1.1 christos that default parms are stored in function types, and it's not clear
999 1.1 christos how this or other approaches would interact with the type sharing
1000 1.1 christos of e.g. ctor clones, so we're leaving this out, since default args
1001 1.1 christos are not even present in debug information anyway. Besides, the set
1002 1.1 christos of default args for a function may grow within its scope, and vary
1003 1.1 christos independently in other scopes. */
1004 1.1 christos
1005 1.1 christos /* Create a modified version of a function type that has default
1006 1.1 christos values for some of its arguments. The returned type should ONLY be
1007 1.1 christos used to define functions or methods, never to declare parameters,
1008 1.1 christos variables, types or the like.
1009 1.1 christos
1010 1.1 christos DEFAULTS must have at most as many N_ELEMENTS as there are
1011 1.1 christos arguments without default values in FUNCTION_TYPE. Say, if
1012 1.1 christos FUNCTION_TYPE has an argument list such as (T1, T2, T3, T4 = V0)
1013 1.1 christos and DEFAULTS has 2 elements (V1, V2), the returned type will have
1014 1.1 christos the following argument list: (T1, T2 = V1, T3 = V2, T4 = V0).
1015 1.1 christos
1016 1.1 christos Any NULL expressions in DEFAULTS will be marked as deferred, and
1017 1.1 christos they should be filled in with set_deferred_function_default_args. */
1018 1.1 christos
1019 1.1 christos GCC_METHOD2 (gcc_type, add_function_default_args,
1020 1.1 christos gcc_type, /* Argument FUNCTION_TYPE. */
1021 1.1 christos const struct gcc_cp_function_args *) /* Argument DEFAULTS. */
1022 1.1 christos
1023 1.1 christos /* Fill in the first deferred default args in FUNCTION_DECL with the
1024 1.1 christos expressions given in DEFAULTS. This can be used when the
1025 1.1 christos declaration of a parameter is needed to create a default
1026 1.1 christos expression, such as taking the size of an earlier parameter, or
1027 1.1 christos building a lambda expression in the parameter's context. */
1028 1.1 christos
1029 1.1 christos GCC_METHOD2 (int /* bool */, set_deferred_function_default_args,
1030 1.1 christos gcc_decl, /* Argument FUNCTION_DECL. */
1031 1.1 christos const struct gcc_cp_function_args *) /* Argument DEFAULTS. */
1032 1.1 christos
1033 1.1 christos #endif
1034 1.1 christos
1035 1.1 christos
1036 1.1 christos /* When you add entry points, add them at the end, so that the new API
1037 1.1 christos version remains compatible with the old version.
1038 1.1 christos
1039 1.1 christos The following conventions have been observed as to naming entry points:
1040 1.1 christos
1041 1.1 christos - build_* creates (and maybe records) something and returns it;
1042 1.1 christos - add_* creates and records something, but doesn't return it;
1043 1.1 christos - get_* obtains something without creating it;
1044 1.1 christos - start_* marks the beginning of a compound (type, list, ...);
1045 1.1 christos - finish_* completes the compound when needed.
1046 1.1 christos
1047 1.1 christos Entry points that return an int (bool) and don't have a return value
1048 1.1 christos specification return nonzero (true) on success and zero (false) on
1049 1.1 christos failure. This is in line with libcc1's conventions of returning a
1050 1.1 christos zero-initialized value in case of e.g. a transport error. */
1051