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