]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/cp-tree.def
re PR target/17822 ([3.4 only] avr: Hard-coded XXX_FOR_TARGET)
[gcc.git] / gcc / cp / cp-tree.def
CommitLineData
8d08fdba
MS
1/* This file contains the definitions and documentation for the
2 additional tree codes used in the GNU C++ compiler (see tree.def
3 for the standard codes).
fb4d77b3 4 Copyright (C) 1987, 1988, 1990, 1993, 1997, 1998, 2003, 2004, 2005,
3d938426 5 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
8d08fdba
MS
6 Hacked by Michael Tiemann (tiemann@cygnus.com)
7
b599b135 8This file is part of GCC.
8d08fdba 9
b599b135 10GCC is free software; you can redistribute it and/or modify
8d08fdba
MS
11it under the terms of the GNU General Public License as published by
12the Free Software Foundation; either version 2, or (at your option)
13any later version.
14
b599b135 15GCC is distributed in the hope that it will be useful,
8d08fdba
MS
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18GNU General Public License for more details.
19
20You should have received a copy of the GNU General Public License
b599b135 21along with GCC; see the file COPYING. If not, write to
e9fa0c7c 22the Free Software Foundation, 59 Temple Place - Suite 330,
9efb75d6 23Boston, MA 02111-1307, USA. */
8d08fdba
MS
24
25
4ba126e4
MM
26/* An OFFSET_REF is used in two situations:
27
28 1. An expression of the form `A::m' where `A' is a class and `m' is
d6b4ea85
MM
29 a non-static member. In this case, operand 0 will be a TYPE
30 (corresponding to `A') and operand 1 will be a FIELD_DECL,
31 BASELINK, or TEMPLATE_ID_EXPR (corresponding to `m').
4ba126e4
MM
32
33 The expression is a pointer-to-member if its address is taken,
34 but simply denotes a member of the object if its address isnot
35 taken. In the latter case, resolve_offset_ref is used to
36 convert it to a representation of the member referred to by the
37 OFFSET_REF.
d6b4ea85
MM
38
39 This form is only used during the parsing phase; once semantic
40 analysis has taken place they are eliminated.
4ba126e4
MM
41
42 2. An expression of the form `x.*p'. In this case, operand 0 will
43 be an expression corresponding to `x' and operand 1 will be an
d6b4ea85 44 expression with pointer-to-member type. */
6615c446 45DEFTREECODE (OFFSET_REF, "offset_ref", tcc_reference, 2)
8d08fdba 46
61a127b3
MM
47/* A pointer-to-member constant. For a pointer-to-member constant
48 `X::Y' The PTRMEM_CST_CLASS is the RECORD_TYPE for `X' and the
49 PTRMEM_CST_MEMBER is the _DECL for `Y'. */
6615c446 50DEFTREECODE (PTRMEM_CST, "ptrmem_cst", tcc_constant, 0)
61a127b3 51
02531345
JM
52/* For NEW_EXPR, operand 0 is the placement list.
53 Operand 1 is the new-declarator.
058b15c1
MM
54 Operand 2 is the number of elements in the array.
55 Operand 3 is the initializer. */
6615c446
JO
56DEFTREECODE (NEW_EXPR, "nw_expr", tcc_expression, 4)
57DEFTREECODE (VEC_NEW_EXPR, "vec_nw_expr", tcc_expression, 3)
02531345 58
8d08fdba
MS
59/* For DELETE_EXPR, operand 0 is the store to be destroyed.
60 Operand 1 is the value to pass to the destroying function
61 saying whether the store should be deallocated as well. */
6615c446
JO
62DEFTREECODE (DELETE_EXPR, "dl_expr", tcc_expression, 2)
63DEFTREECODE (VEC_DELETE_EXPR, "vec_dl_expr", tcc_expression, 2)
8d08fdba
MS
64
65/* Value is reference to particular overloaded class method.
c8a209ca 66 Operand 0 is the class, operand 1 is the field
8d08fdba 67 The COMPLEXITY field holds the class level (usually 0). */
6615c446 68DEFTREECODE (SCOPE_REF, "scope_ref", tcc_reference, 2)
8d08fdba
MS
69
70/* When composing an object with a member, this is the result.
71 Operand 0 is the object. Operand 1 is the member (usually
72 a dereferenced pointer to member). */
6615c446 73DEFTREECODE (MEMBER_REF, "member_ref", tcc_reference, 2)
8d08fdba
MS
74
75/* Type conversion operator in C++. TREE_TYPE is type that this
76 operator converts to. Operand is expression to be converted. */
6615c446 77DEFTREECODE (TYPE_EXPR, "type_expr", tcc_expression, 1)
8d08fdba 78
02531345 79/* For AGGR_INIT_EXPR, operand 0 is function which performs initialization,
8d08fdba
MS
80 operand 1 is argument list to initialization function,
81 and operand 2 is the slot which was allocated for this expression. */
6615c446 82DEFTREECODE (AGGR_INIT_EXPR, "aggr_init_expr", tcc_expression, 3)
8d08fdba 83
8d2733ca
MS
84/* A throw expression. operand 0 is the expression, if there was one,
85 else it is NULL_TREE. */
6615c446 86DEFTREECODE (THROW_EXPR, "throw_expr", tcc_expression, 1)
8d08fdba 87
699ed0ce
MM
88/* An empty class object. The TREE_TYPE gives the class type. We use
89 these to avoid actually creating instances of the empty classes. */
6615c446 90DEFTREECODE (EMPTY_CLASS_EXPR, "empty_class_expr", tcc_expression, 0)
699ed0ce 91
0ca7178c
JM
92/* A DECL which is really just a placeholder for an expression. Used to
93 implement non-class scope anonymous unions. */
6615c446 94DEFTREECODE (ALIAS_DECL, "alias_decl", tcc_declaration, 0)
0ca7178c 95
50ad9642
MM
96/* A reference to a member function or member functions from a base
97 class. BASELINK_FUNCTIONS gives the FUNCTION_DECL,
98 TEMPLATE_DECL, OVERLOAD, or TEMPLATE_ID_EXPR corresponding to the
99 functions. BASELINK_BINFO gives the base from which the functions
100 come, i.e., the base to which the `this' pointer must be converted
101 before the functions are called. BASELINK_ACCESS_BINFO gives the
102 base used to name the functions.
103
104 A BASELINK is an expression; the TREE_TYPE of the BASELINK gives
105 the type of the expression. This type is either a FUNCTION_TYPE,
106 METHOD_TYPE, or `unknown_type_node' indicating that the function is
324f9dfb 107 overloaded. */
6615c446 108DEFTREECODE (BASELINK, "baselink", tcc_exceptional, 0)
50ad9642 109
8d08fdba
MS
110/* Template definition. The following fields have the specified uses,
111 although there are other macros in cp-tree.h that should be used for
112 accessing this data.
113 DECL_ARGUMENTS template parm vector
114 DECL_TEMPLATE_INFO template text &c
115 DECL_VINDEX list of instantiations already produced;
116 only done for functions so far
117 For class template:
118 DECL_INITIAL associated templates (methods &c)
c80106a4 119 DECL_TEMPLATE_RESULT null
8d08fdba
MS
120 For non-class templates:
121 TREE_TYPE type of object to be constructed
c80106a4 122 DECL_TEMPLATE_RESULT decl for object to be created
8d08fdba
MS
123 (e.g., FUNCTION_DECL with tmpl parms used)
124 */
6615c446 125DEFTREECODE (TEMPLATE_DECL, "template_decl", tcc_declaration, 0)
8d08fdba 126
f84b4be9
JM
127/* Index into a template parameter list. The TEMPLATE_PARM_IDX gives
128 the index (from 0) of the parameter, while the TEMPLATE_PARM_LEVEL
129 gives the level (from 1) of the parameter.
130
131 Here's an example:
132
133 template <class T> // Index 0, Level 1.
134 struct S
135 {
136 template <class U, // Index 0, Level 2.
137 class V> // Index 1, Level 2.
138 void f();
139 };
140
141 The DESCENDANTS will be a chain of TEMPLATE_PARM_INDEXs descended
142 from this one. The first descendant will have the same IDX, but
143 its LEVEL will be one less. The TREE_CHAIN field is used to chain
144 together the descendants. The TEMPLATE_PARM_DECL is the
145 declaration of this parameter, either a TYPE_DECL or CONST_DECL.
146 The TEMPLATE_PARM_ORIG_LEVEL is the LEVEL of the most distant
147 parent, i.e., the LEVEL that the parameter originally had when it
148 was declared. For example, if we instantiate S<int>, we will have:
149
150 struct S<int>
151 {
152 template <class U, // Index 0, Level 1, Orig Level 2
153 class V> // Index 1, Level 1, Orig Level 2
154 void f();
155 };
156
157 The LEVEL is the level of the parameter when we are worrying about
158 the types of things; the ORIG_LEVEL is the level when we are
159 worrying about instantiating things. */
6615c446 160DEFTREECODE (TEMPLATE_PARM_INDEX, "template_parm_index", tcc_exceptional, 0)
f84b4be9 161
1899c3a4
KL
162/* Index into a template parameter list for template template parameters.
163 This parameter must be a type. The TYPE_FIELDS value will be a
164 TEMPLATE_PARM_INDEX.
165
a1281f45 166 It is used without template arguments like TT in C<TT>,
1899c3a4 167 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO is NULL_TREE
a1281f45 168 and TYPE_NAME is a TEMPLATE_DECL. */
6615c446 169DEFTREECODE (TEMPLATE_TEMPLATE_PARM, "template_template_parm", tcc_type, 0)
1899c3a4 170
38b3627d
NS
171/* The ordering of the following codes is optimized for the checking
172 macros in tree.h. Changing the order will degrade the speed of the
173 compiler. TEMPLATE_TYPE_PARM, TYPENAME_TYPE, TYPEOF_TYPE,
174 BOUND_TEMPLATE_TEMPLATE_PARM. */
175
176/* Index into a template parameter list. This parameter must be a type.
177 The type.value field will be a TEMPLATE_PARM_INDEX. */
178DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", tcc_type, 0)
73b0fce8 179
45869a6c 180/* A type designated by `typename T::t'. TYPE_CONTEXT is `T',
78638e24
MM
181 TYPE_NAME is an IDENTIFIER_NODE for `t'. If the type was named via
182 template-id, TYPENAME_TYPE_FULLNAME will hold the TEMPLATE_ID_EXPR.
fc6a28d7 183 TREE_TYPE is always NULL. */
6615c446 184DEFTREECODE (TYPENAME_TYPE, "typename_type", tcc_type, 0)
5566b478 185
38b3627d
NS
186/* A type designated by `__typeof (expr)'. TYPEOF_TYPE_EXPR is the
187 expression in question. */
188DEFTREECODE (TYPEOF_TYPE, "typeof_type", tcc_type, 0)
189
190/* Like TEMPLATE_TEMPLATE_PARM it is used with bound template arguments
191 like TT<int>.
192 In this case, TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO contains the
193 template name and its bound arguments. TYPE_NAME is a TYPE_DECL. */
194DEFTREECODE (BOUND_TEMPLATE_TEMPLATE_PARM, "bound_template_template_parm",
195 tcc_type, 0)
196
b8c6534b
KL
197/* For template template argument of the form `T::template C'.
198 TYPE_CONTEXT is `T', the template parameter dependent object.
199 TYPE_NAME is an IDENTIFIER_NODE for `C', the member class template. */
6615c446 200DEFTREECODE (UNBOUND_CLASS_TEMPLATE, "unbound_class_template", tcc_type, 0)
b8c6534b 201
cffa8729 202/* A using declaration. DECL_INITIAL contains the specified scope.
fd9aef9d
NS
203 This is not an alias, but is later expanded into multiple aliases.
204 The decl will have a NULL_TYPE iff the scope is a dependent scope,
324f9dfb 205 otherwise it will have a void type. */
6615c446 206DEFTREECODE (USING_DECL, "using_decl", tcc_declaration, 0)
5566b478 207
324f9dfb 208/* A using directive. The operand is USING_STMT_NAMESPACE. */
6615c446 209DEFTREECODE (USING_STMT, "using_directive", tcc_expression, 1)
9da99f7d 210
42976354 211/* An un-parsed default argument. Looks like an IDENTIFIER_NODE. */
6615c446 212DEFTREECODE (DEFAULT_ARG, "default_arg", tcc_exceptional, 0)
42976354 213
8f032717 214/* A template-id, like foo<int>. The first operand is the template.
bf12d54d
NS
215 The second is NULL if there are no explicit arguments, or a
216 TREE_VEC of arguments. The template will be a FUNCTION_DECL,
217 TEMPLATE_DECL, or an OVERLOAD. If the template-id refers to a
218 member template, the template may be an IDENTIFIER_NODE. */
6615c446 219DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", tcc_expression, 2)
386b8a85 220
2c73f9f5
ML
221/* A list-like node for chaining overloading candidates. TREE_TYPE is
222 the original name, and the parameter is the FUNCTION_DECL. */
6615c446 223DEFTREECODE (OVERLOAD, "overload", tcc_exceptional, 0)
2c73f9f5 224
9f4faeae
MM
225/* A pseudo-destructor, of the form "OBJECT.~DESTRUCTOR" or
226 "OBJECT.SCOPE::~DESTRUCTOR. The first operand is the OBJECT. The
227 second operand (if non-NULL) is the SCOPE. The third operand is
228 the TYPE node corresponding to the DESTRUCTOR. The type of the
229 first operand will always be a scalar type.
230
231 The type of a PSEUDO_DTOR_EXPR is always "void", even though it can
232 be used as if it were a zero-argument function. We handle the
233 function-call case specially, and giving it "void" type prevents it
234 being used in expressions in ways that are not permitted. */
235DEFTREECODE (PSEUDO_DTOR_EXPR, "pseudo_dtor_expr", tcc_expression, 3)
236
42976354
BK
237/* A whole bunch of tree codes for the initial, superficial parsing of
238 templates. */
6615c446
JO
239DEFTREECODE (MODOP_EXPR, "modop_expr", tcc_expression, 3)
240DEFTREECODE (CAST_EXPR, "cast_expr", tcc_unary, 1)
241DEFTREECODE (REINTERPRET_CAST_EXPR, "reinterpret_cast_expr", tcc_unary, 1)
242DEFTREECODE (CONST_CAST_EXPR, "const_cast_expr", tcc_unary, 1)
243DEFTREECODE (STATIC_CAST_EXPR, "static_cast_expr", tcc_unary, 1)
244DEFTREECODE (DYNAMIC_CAST_EXPR, "dynamic_cast_expr", tcc_unary, 1)
245DEFTREECODE (DOTSTAR_EXPR, "dotstar_expr", tcc_expression, 2)
246DEFTREECODE (TYPEID_EXPR, "typeid_expr", tcc_expression, 1)
0a6969ad 247
d17811fd
MM
248/* A placeholder for an expression that is not type-dependent, but
249 does occur in a template. When an expression that is not
250 type-dependent appears in a larger expression, we must compute the
251 type of that larger expression. That computation would normally
252 modify the original expression, which would change the mangling of
253 that expression if it appeared in a template argument list. In
254 that situation, we create a NON_DEPENDENT_EXPR to take the place of
018a5803 255 the original expression. The expression is the only operand -- it
324f9dfb 256 is only needed for diagnostics. */
6615c446 257DEFTREECODE (NON_DEPENDENT_EXPR, "non_dependent_expr", tcc_expression, 1)
d17811fd 258
ade3dc07
JM
259/* CTOR_INITIALIZER is a placeholder in template code for a call to
260 setup_vtbl_pointer (and appears in all functions, not just ctors). */
6615c446 261DEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", tcc_expression, 1)
5a508662 262
6615c446 263DEFTREECODE (TRY_BLOCK, "try_block", tcc_expression, 2)
5a508662 264
6615c446 265DEFTREECODE (EH_SPEC_BLOCK, "eh_spec_block", tcc_expression, 2)
5a508662 266
1a6025b4
JM
267/* A HANDLER wraps a catch handler for the HANDLER_TYPE. If this is
268 CATCH_ALL_TYPE, then the handler catches all types. The declaration of
269 the catch variable is in HANDLER_PARMS, and the body block in
270 HANDLER_BODY. */
6615c446 271DEFTREECODE (HANDLER, "handler", tcc_expression, 2)
0a6969ad 272
52a11cbf
RH
273/* A MUST_NOT_THROW_EXPR wraps an expression that may not
274 throw, and must call terminate if it does. */
6615c446 275DEFTREECODE (MUST_NOT_THROW_EXPR, "must_not_throw_expr", tcc_expression, 1)
52a11cbf 276
5a508662
RH
277/* A CLEANUP_STMT marks the point at which a declaration is fully
278 constructed. The CLEANUP_EXPR is run on behalf of CLEANUP_DECL
279 when CLEANUP_BODY completes. */
6615c446 280DEFTREECODE (CLEANUP_STMT, "cleanup_stmt", tcc_expression, 3)
5a508662
RH
281
282/* Represents an 'if' statement. The operands are IF_COND,
283 THEN_CLAUSE, and ELSE_CLAUSE, respectively. */
284/* ??? It is currently still necessary to distinguish between IF_STMT
285 and COND_EXPR for the benefit of templates. */
6615c446 286DEFTREECODE (IF_STMT, "if_stmt", tcc_expression, 3)
5a508662 287
6615c446 288DEFTREECODE (TAG_DEFN, "tag_defn", tcc_expression, 0)
5ffe581d 289
6de9cd9a
DN
290/* Template instantiation level node.
291
406d77a4
SB
292 TINST_DECL contains the original DECL node.
293 TINST_LOCATION contains the location where the template is instantiated.
6de9cd9a
DN
294
295 A stack of template instantiation nodes is kept through the TREE_CHAIN
296 fields of these nodes. */
297
6615c446 298DEFTREECODE (TINST_LEVEL, "TINST_LEVEL", tcc_exceptional, 0)
6de9cd9a 299
42c244d8 300/* Represents an 'offsetof' expression during template expansion. */
6615c446 301DEFTREECODE (OFFSETOF_EXPR, "offsetof_expr", tcc_expression, 1)
42c244d8 302
f84b4be9
JM
303/*
304Local variables:
305mode:c
306End:
307*/
This page took 1.657529 seconds and 5 git commands to generate.