]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/tree.c
In gcc/cp/: 2010-10-24 Nicola Pero <nicola.pero@meta-innovation.com>
[thirdparty/gcc.git] / gcc / cp / tree.c
CommitLineData
8d08fdba 1/* Language-dependent node constructors for parse phase of GNU compiler.
06ceef4e 2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
a7cbc517 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
e77f031d 4 Free Software Foundation, Inc.
8d08fdba
MS
5 Hacked by Michael Tiemann (tiemann@cygnus.com)
6
f5adbb8d 7This file is part of GCC.
8d08fdba 8
f5adbb8d 9GCC is free software; you can redistribute it and/or modify
8d08fdba 10it under the terms of the GNU General Public License as published by
e77f031d 11the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
12any later version.
13
f5adbb8d 14GCC is distributed in the hope that it will be useful,
8d08fdba
MS
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
e77f031d
NC
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
8d08fdba
MS
22
23#include "config.h"
8d052bc7 24#include "system.h"
4977bab6
ZW
25#include "coretypes.h"
26#include "tm.h"
8d08fdba
MS
27#include "tree.h"
28#include "cp-tree.h"
29#include "flags.h"
12027a89 30#include "toplev.h"
25af8512 31#include "tree-inline.h"
e58a9aa1 32#include "debug.h"
41990f96 33#include "convert.h"
87501227 34#include "cgraph.h"
245763e3 35#include "splay-tree.h"
6662d794 36#include "gimple.h" /* gimple_has_body_p */
12027a89 37
b57b79f7
NN
38static tree bot_manip (tree *, int *, void *);
39static tree bot_replace (tree *, int *, void *);
b57b79f7
NN
40static int list_hash_eq (const void *, const void *);
41static hashval_t list_hash_pieces (tree, tree, tree);
42static hashval_t list_hash (const void *);
b57b79f7
NN
43static tree build_target_expr (tree, tree);
44static tree count_trees_r (tree *, int *, void *);
45static tree verify_stmt_tree_r (tree *, int *, void *);
a6f86b51 46static tree build_local_temp (tree);
b57b79f7
NN
47
48static tree handle_java_interface_attribute (tree *, tree, tree, int, bool *);
49static tree handle_com_interface_attribute (tree *, tree, tree, int, bool *);
50static tree handle_init_priority_attribute (tree *, tree, tree, int, bool *);
91d231cb 51
27b8d0cd 52/* If REF is an lvalue, returns the kind of lvalue that REF is.
df5c89cb 53 Otherwise, returns clk_none. */
8d08fdba 54
4e9ca9b0
JM
55cp_lvalue_kind
56lvalue_kind (const_tree ref)
8ccc31eb 57{
27b8d0cd
MM
58 cp_lvalue_kind op1_lvalue_kind = clk_none;
59 cp_lvalue_kind op2_lvalue_kind = clk_none;
60
8af2fec4
RY
61 /* Expressions of reference type are sometimes wrapped in
62 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
63 representation, not part of the language, so we have to look
64 through them. */
65 if (TREE_CODE (ref) == INDIRECT_REF
66 && TREE_CODE (TREE_TYPE (TREE_OPERAND (ref, 0)))
67 == REFERENCE_TYPE)
4e9ca9b0 68 return lvalue_kind (TREE_OPERAND (ref, 0));
8af2fec4 69
8ccc31eb 70 if (TREE_CODE (TREE_TYPE (ref)) == REFERENCE_TYPE)
8af2fec4
RY
71 {
72 /* unnamed rvalue references are rvalues */
73 if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref))
74 && TREE_CODE (ref) != PARM_DECL
75 && TREE_CODE (ref) != VAR_DECL
76 && TREE_CODE (ref) != COMPONENT_REF)
df5c89cb 77 return clk_rvalueref;
8af2fec4 78
d732e98f 79 /* lvalue references and named rvalue references are lvalues. */
8af2fec4
RY
80 return clk_ordinary;
81 }
8ccc31eb 82
394fd776 83 if (ref == current_class_ptr)
27b8d0cd 84 return clk_none;
8ccc31eb
MS
85
86 switch (TREE_CODE (ref))
87 {
8f4361eb
AP
88 case SAVE_EXPR:
89 return clk_none;
8ccc31eb 90 /* preincrements and predecrements are valid lvals, provided
e92cc029 91 what they refer to are valid lvals. */
8ccc31eb
MS
92 case PREINCREMENT_EXPR:
93 case PREDECREMENT_EXPR:
c7ae64f2
JM
94 case TRY_CATCH_EXPR:
95 case WITH_CLEANUP_EXPR:
69851283
MM
96 case REALPART_EXPR:
97 case IMAGPART_EXPR:
4e9ca9b0 98 return lvalue_kind (TREE_OPERAND (ref, 0));
8ccc31eb 99
27b8d0cd 100 case COMPONENT_REF:
4e9ca9b0 101 op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
c8b2e872 102 /* Look at the member designator. */
4af9e878 103 if (!op1_lvalue_kind)
0cbd7506 104 ;
4af9e878
JM
105 else if (is_overloaded_fn (TREE_OPERAND (ref, 1)))
106 /* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
b7da27c2
JM
107 situations. If we're seeing a COMPONENT_REF, it's a non-static
108 member, so it isn't an lvalue. */
109 op1_lvalue_kind = clk_none;
110 else if (TREE_CODE (TREE_OPERAND (ref, 1)) != FIELD_DECL)
111 /* This can be IDENTIFIER_NODE in a template. */;
e0d1297c 112 else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref, 1)))
27b8d0cd
MM
113 {
114 /* Clear the ordinary bit. If this object was a class
115 rvalue we want to preserve that information. */
116 op1_lvalue_kind &= ~clk_ordinary;
cd0be382 117 /* The lvalue is for a bitfield. */
27b8d0cd
MM
118 op1_lvalue_kind |= clk_bitfield;
119 }
e0d1297c
NS
120 else if (DECL_PACKED (TREE_OPERAND (ref, 1)))
121 op1_lvalue_kind |= clk_packed;
9f63daea 122
27b8d0cd
MM
123 return op1_lvalue_kind;
124
8ccc31eb 125 case STRING_CST:
266b4890 126 case COMPOUND_LITERAL_EXPR:
27b8d0cd 127 return clk_ordinary;
8ccc31eb 128
e58a9aa1 129 case CONST_DECL:
4b8c1a92
JJ
130 /* CONST_DECL without TREE_STATIC are enumeration values and
131 thus not lvalues. With TREE_STATIC they are used by ObjC++
132 in objc_build_string_object and need to be considered as
133 lvalues. */
134 if (! TREE_STATIC (ref))
135 return clk_none;
8ccc31eb
MS
136 case VAR_DECL:
137 if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
138 && DECL_LANG_SPECIFIC (ref)
139 && DECL_IN_AGGR_P (ref))
27b8d0cd 140 return clk_none;
8ccc31eb
MS
141 case INDIRECT_REF:
142 case ARRAY_REF:
143 case PARM_DECL:
144 case RESULT_DECL:
59e76fc6 145 if (TREE_CODE (TREE_TYPE (ref)) != METHOD_TYPE)
27b8d0cd 146 return clk_ordinary;
8ccc31eb
MS
147 break;
148
8ccc31eb
MS
149 /* A currently unresolved scope ref. */
150 case SCOPE_REF:
315fb5db 151 gcc_unreachable ();
27b8d0cd
MM
152 case MAX_EXPR:
153 case MIN_EXPR:
d211a298
RS
154 /* Disallow <? and >? as lvalues if either argument side-effects. */
155 if (TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 0))
156 || TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 1)))
157 return clk_none;
4e9ca9b0
JM
158 op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
159 op2_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 1));
8ccc31eb
MS
160 break;
161
162 case COND_EXPR:
4e9ca9b0 163 op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 1)
42924ed7 164 ? TREE_OPERAND (ref, 1)
df5c89cb 165 : TREE_OPERAND (ref, 0));
4e9ca9b0 166 op2_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 2));
27b8d0cd 167 break;
8ccc31eb
MS
168
169 case MODIFY_EXPR:
27b8d0cd 170 return clk_ordinary;
8ccc31eb
MS
171
172 case COMPOUND_EXPR:
4e9ca9b0 173 return lvalue_kind (TREE_OPERAND (ref, 1));
69851283
MM
174
175 case TARGET_EXPR:
df5c89cb 176 return clk_class;
69851283 177
356955cf 178 case VA_ARG_EXPR:
df5c89cb 179 return (CLASS_TYPE_P (TREE_TYPE (ref)) ? clk_class : clk_none);
c0ad5a31
MM
180
181 case CALL_EXPR:
4e8dca1c
JM
182 /* Any class-valued call would be wrapped in a TARGET_EXPR. */
183 return clk_none;
69851283
MM
184
185 case FUNCTION_DECL:
186 /* All functions (except non-static-member functions) are
187 lvalues. */
9f63daea 188 return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
27b8d0cd 189 ? clk_none : clk_ordinary);
7f85441b 190
4af9e878
JM
191 case BASELINK:
192 /* We now represent a reference to a single static member function
193 with a BASELINK. */
1e4ae551
MLI
194 /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
195 its argument unmodified and we assign it to a const_tree. */
4e9ca9b0 196 return lvalue_kind (BASELINK_FUNCTIONS (CONST_CAST_TREE (ref)));
4af9e878 197
d17811fd
MM
198 case NON_DEPENDENT_EXPR:
199 /* We must consider NON_DEPENDENT_EXPRs to be lvalues so that
200 things like "&E" where "E" is an expression with a
201 non-dependent type work. It is safe to be lenient because an
202 error will be issued when the template is instantiated if "E"
203 is not an lvalue. */
204 return clk_ordinary;
205
7f85441b
KG
206 default:
207 break;
8ccc31eb
MS
208 }
209
27b8d0cd
MM
210 /* If one operand is not an lvalue at all, then this expression is
211 not an lvalue. */
212 if (!op1_lvalue_kind || !op2_lvalue_kind)
213 return clk_none;
214
215 /* Otherwise, it's an lvalue, and it has all the odd properties
216 contributed by either operand. */
217 op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
9771799c 218 /* It's not an ordinary lvalue if it involves any other kind. */
27b8d0cd
MM
219 if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
220 op1_lvalue_kind &= ~clk_ordinary;
9771799c
JM
221 /* It can't be both a pseudo-lvalue and a non-addressable lvalue.
222 A COND_EXPR of those should be wrapped in a TARGET_EXPR. */
223 if ((op1_lvalue_kind & (clk_rvalueref|clk_class))
224 && (op1_lvalue_kind & (clk_bitfield|clk_packed)))
225 op1_lvalue_kind = clk_none;
27b8d0cd 226 return op1_lvalue_kind;
8ccc31eb
MS
227}
228
aa6e8ed3
MM
229/* Returns the kind of lvalue that REF is, in the sense of
230 [basic.lval]. This function should really be named lvalue_p; it
231 computes the C++ definition of lvalue. */
232
233cp_lvalue_kind
4e9ca9b0 234real_lvalue_p (const_tree ref)
aa6e8ed3 235{
4e9ca9b0 236 cp_lvalue_kind kind = lvalue_kind (ref);
df5c89cb
JM
237 if (kind & (clk_rvalueref|clk_class))
238 return clk_none;
239 else
240 return kind;
aa6e8ed3
MM
241}
242
df5c89cb
JM
243/* This differs from real_lvalue_p in that class rvalues are considered
244 lvalues. */
69851283 245
1e4ae551
MLI
246bool
247lvalue_p (const_tree ref)
8d08fdba 248{
4e9ca9b0 249 return (lvalue_kind (ref) != clk_none);
df5c89cb
JM
250}
251
252/* This differs from real_lvalue_p in that rvalues formed by dereferencing
253 rvalue references are considered rvalues. */
254
255bool
256lvalue_or_rvalue_with_address_p (const_tree ref)
257{
4e9ca9b0 258 cp_lvalue_kind kind = lvalue_kind (ref);
df5c89cb
JM
259 if (kind & clk_class)
260 return false;
261 else
262 return (kind != clk_none);
6c6e776d
MA
263}
264
100d337a
MA
265/* Test whether DECL is a builtin that may appear in a
266 constant-expression. */
267
268bool
58f9752a 269builtin_valid_in_constant_expr_p (const_tree decl)
100d337a
MA
270{
271 /* At present BUILT_IN_CONSTANT_P is the only builtin we're allowing
272 in constant-expressions. We may want to add other builtins later. */
88a7beb7 273 return DECL_IS_BUILTIN_CONSTANT_P (decl);
100d337a
MA
274}
275
c506ca22
MM
276/* Build a TARGET_EXPR, initializing the DECL with the VALUE. */
277
278static tree
b57b79f7 279build_target_expr (tree decl, tree value)
c506ca22
MM
280{
281 tree t;
04941f76
AO
282
283#ifdef ENABLE_CHECKING
284 gcc_assert (VOID_TYPE_P (TREE_TYPE (value))
285 || TREE_TYPE (decl) == TREE_TYPE (value)
286 || useless_type_conversion_p (TREE_TYPE (decl),
287 TREE_TYPE (value)));
288#endif
c506ca22 289
f293ce4b
RS
290 t = build4 (TARGET_EXPR, TREE_TYPE (decl), decl, value,
291 cxx_maybe_build_cleanup (decl), NULL_TREE);
c506ca22
MM
292 /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
293 ignore the TARGET_EXPR. If there really turn out to be no
294 side-effects, then the optimizer should be able to get rid of
295 whatever code is generated anyhow. */
296 TREE_SIDE_EFFECTS (t) = 1;
297
298 return t;
299}
300
a6f86b51
JM
301/* Return an undeclared local temporary of type TYPE for use in building a
302 TARGET_EXPR. */
303
304static tree
305build_local_temp (tree type)
306{
c2255bc4
AH
307 tree slot = build_decl (input_location,
308 VAR_DECL, NULL_TREE, type);
a6f86b51 309 DECL_ARTIFICIAL (slot) = 1;
78e0d62b 310 DECL_IGNORED_P (slot) = 1;
a6f86b51
JM
311 DECL_CONTEXT (slot) = current_function_decl;
312 layout_decl (slot, 0);
313 return slot;
314}
315
5039610b
SL
316/* Set various status flags when building an AGGR_INIT_EXPR object T. */
317
318static void
319process_aggr_init_operands (tree t)
320{
321 bool side_effects;
322
323 side_effects = TREE_SIDE_EFFECTS (t);
324 if (!side_effects)
325 {
326 int i, n;
327 n = TREE_OPERAND_LENGTH (t);
328 for (i = 1; i < n; i++)
329 {
330 tree op = TREE_OPERAND (t, i);
331 if (op && TREE_SIDE_EFFECTS (op))
332 {
333 side_effects = 1;
334 break;
335 }
336 }
337 }
338 TREE_SIDE_EFFECTS (t) = side_effects;
339}
340
341/* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
342 FN, and SLOT. NARGS is the number of call arguments which are specified
343 as a tree array ARGS. */
344
345static tree
346build_aggr_init_array (tree return_type, tree fn, tree slot, int nargs,
347 tree *args)
348{
349 tree t;
350 int i;
351
352 t = build_vl_exp (AGGR_INIT_EXPR, nargs + 3);
353 TREE_TYPE (t) = return_type;
354 AGGR_INIT_EXPR_FN (t) = fn;
355 AGGR_INIT_EXPR_SLOT (t) = slot;
356 for (i = 0; i < nargs; i++)
357 AGGR_INIT_EXPR_ARG (t, i) = args[i];
358 process_aggr_init_operands (t);
359 return t;
360}
361
362/* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
844ae01d 363 target. TYPE is the type to be initialized.
8d08fdba 364
844ae01d
JM
365 Build an AGGR_INIT_EXPR to represent the initialization. This function
366 differs from build_cplus_new in that an AGGR_INIT_EXPR can only be used
367 to initialize another object, whereas a TARGET_EXPR can either
368 initialize another object or create its own temporary object, and as a
369 result building up a TARGET_EXPR requires that the type's destructor be
370 callable. */
e92cc029 371
8d08fdba 372tree
844ae01d 373build_aggr_init_expr (tree type, tree init)
8d08fdba 374{
e1376b00 375 tree fn;
e8abc66f
MS
376 tree slot;
377 tree rval;
4977bab6 378 int is_ctor;
e8abc66f 379
27b8d0cd
MM
380 /* Make sure that we're not trying to create an instance of an
381 abstract class. */
5bb2f1e7 382 abstract_virtuals_error (NULL_TREE, type);
27b8d0cd 383
5039610b
SL
384 if (TREE_CODE (init) == CALL_EXPR)
385 fn = CALL_EXPR_FN (init);
386 else if (TREE_CODE (init) == AGGR_INIT_EXPR)
387 fn = AGGR_INIT_EXPR_FN (init);
388 else
06126ca2 389 return convert (type, init);
c11b6f21 390
4977bab6
ZW
391 is_ctor = (TREE_CODE (fn) == ADDR_EXPR
392 && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
393 && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
394
e1376b00
MM
395 /* We split the CALL_EXPR into its function and its arguments here.
396 Then, in expand_expr, we put them back together. The reason for
397 this is that this expression might be a default argument
398 expression. In that case, we need a new temporary every time the
399 expression is used. That's what break_out_target_exprs does; it
400 replaces every AGGR_INIT_EXPR with a copy that uses a fresh
401 temporary slot. Then, expand_expr builds up a call-expression
402 using the new slot. */
4977bab6
ZW
403
404 /* If we don't need to use a constructor to create an object of this
405 type, don't mess with AGGR_INIT_EXPR. */
406 if (is_ctor || TREE_ADDRESSABLE (type))
407 {
844ae01d
JM
408 slot = build_local_temp (type);
409
5039610b
SL
410 if (TREE_CODE(init) == CALL_EXPR)
411 rval = build_aggr_init_array (void_type_node, fn, slot,
412 call_expr_nargs (init),
413 CALL_EXPR_ARGP (init));
414 else
415 rval = build_aggr_init_array (void_type_node, fn, slot,
416 aggr_init_expr_nargs (init),
417 AGGR_INIT_EXPR_ARGP (init));
4977bab6
ZW
418 TREE_SIDE_EFFECTS (rval) = 1;
419 AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
d8a0d13e 420 TREE_NOTHROW (rval) = TREE_NOTHROW (init);
4977bab6
ZW
421 }
422 else
423 rval = init;
424
844ae01d
JM
425 return rval;
426}
427
428/* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
429 target. TYPE is the type that this initialization should appear to
430 have.
431
432 Build an encapsulation of the initialization to perform
433 and return it so that it can be processed by language-independent
434 and language-specific expression expanders. */
435
436tree
437build_cplus_new (tree type, tree init)
438{
439 tree rval = build_aggr_init_expr (type, init);
440 tree slot;
441
442 if (TREE_CODE (rval) == AGGR_INIT_EXPR)
443 slot = AGGR_INIT_EXPR_SLOT (rval);
444 else if (TREE_CODE (rval) == CALL_EXPR)
445 slot = build_local_temp (type);
446 else
447 return rval;
448
9d85d30c 449 rval = build_target_expr (slot, rval);
c08cd4c1 450 TARGET_EXPR_IMPLICIT_P (rval) = 1;
8d08fdba 451
8d08fdba
MS
452 return rval;
453}
454
d5f4eddd
JM
455/* Return a TARGET_EXPR which expresses the direct-initialization of one
456 array from another. */
457
458tree
459build_array_copy (tree init)
460{
461 tree type = TREE_TYPE (init);
462 tree slot = build_local_temp (type);
463 init = build2 (VEC_INIT_EXPR, type, slot, init);
464 SET_EXPR_LOCATION (init, input_location);
465 init = build_target_expr (slot, init);
466 TARGET_EXPR_IMPLICIT_P (init) = 1;
467
468 return init;
469}
470
ab93b543 471/* Build a TARGET_EXPR using INIT to initialize a new temporary of the
c506ca22 472 indicated TYPE. */
aa36c081
JM
473
474tree
b57b79f7 475build_target_expr_with_type (tree init, tree type)
aa36c081 476{
50bc768d 477 gcc_assert (!VOID_TYPE_P (type));
59445d74 478
309714d4
JM
479 if (TREE_CODE (init) == TARGET_EXPR
480 || init == error_mark_node)
5062dbd5 481 return init;
d758e847 482 else if (CLASS_TYPE_P (type) && type_has_nontrivial_copy_init (type)
7efc22ea 483 && !VOID_TYPE_P (TREE_TYPE (init))
4b5aa881 484 && TREE_CODE (init) != COND_EXPR
662eceda
MM
485 && TREE_CODE (init) != CONSTRUCTOR
486 && TREE_CODE (init) != VA_ARG_EXPR)
7efc22ea
JM
487 /* We need to build up a copy constructor call. A void initializer
488 means we're being called from bot_manip. COND_EXPR is a special
182609b5 489 case because we already have copies on the arms and we don't want
4b5aa881 490 another one here. A CONSTRUCTOR is aggregate initialization, which
662eceda
MM
491 is handled separately. A VA_ARG_EXPR is magic creation of an
492 aggregate; there's no additional work to be done. */
182609b5 493 return force_rvalue (init);
5062dbd5 494
357d956e 495 return force_target_expr (type, init);
a6f86b51 496}
aa36c081 497
a6f86b51
JM
498/* Like the above function, but without the checking. This function should
499 only be used by code which is deliberately trying to subvert the type
d758e847
JM
500 system, such as call_builtin_trap. Or build_over_call, to avoid
501 infinite recursion. */
a6f86b51
JM
502
503tree
504force_target_expr (tree type, tree init)
505{
59445d74
RH
506 tree slot;
507
50bc768d 508 gcc_assert (!VOID_TYPE_P (type));
59445d74
RH
509
510 slot = build_local_temp (type);
a6f86b51 511 return build_target_expr (slot, init);
aa36c081
JM
512}
513
c506ca22
MM
514/* Like build_target_expr_with_type, but use the type of INIT. */
515
516tree
b57b79f7 517get_target_expr (tree init)
c506ca22 518{
450a927a
JM
519 if (TREE_CODE (init) == AGGR_INIT_EXPR)
520 return build_target_expr (AGGR_INIT_EXPR_SLOT (init), init);
521 else
522 return build_target_expr_with_type (init, TREE_TYPE (init));
c506ca22
MM
523}
524
e1039697
MM
525/* If EXPR is a bitfield reference, convert it to the declared type of
526 the bitfield, and return the resulting expression. Otherwise,
527 return EXPR itself. */
528
529tree
530convert_bitfield_to_declared_type (tree expr)
531{
532 tree bitfield_type;
533
534 bitfield_type = is_bitfield_expr_with_lowered_type (expr);
535 if (bitfield_type)
41990f96
MM
536 expr = convert_to_integer (TYPE_MAIN_VARIANT (bitfield_type),
537 expr);
e1039697
MM
538 return expr;
539}
540
5cc53d4e
MM
541/* EXPR is being used in an rvalue context. Return a version of EXPR
542 that is marked as an rvalue. */
543
544tree
545rvalue (tree expr)
546{
41990f96
MM
547 tree type;
548
549 if (error_operand_p (expr))
550 return expr;
551
03a904b5
JJ
552 expr = mark_rvalue_use (expr);
553
41990f96
MM
554 /* [basic.lval]
555
556 Non-class rvalues always have cv-unqualified types. */
557 type = TREE_TYPE (expr);
36c37128
JM
558 if (!CLASS_TYPE_P (type) && cv_qualified_p (type))
559 type = cv_unqualified (type);
41990f96 560
b9c6b842
JM
561 /* We need to do this for rvalue refs as well to get the right answer
562 from decltype; see c++/36628. */
563 if (!processing_template_decl && lvalue_or_rvalue_with_address_p (expr))
41990f96
MM
564 expr = build1 (NON_LVALUE_EXPR, type, expr);
565 else if (type != TREE_TYPE (expr))
566 expr = build_nop (type, expr);
567
5cc53d4e
MM
568 return expr;
569}
570
8d08fdba 571\f
06d40de8
DG
572/* Hash an ARRAY_TYPE. K is really of type `tree'. */
573
574static hashval_t
575cplus_array_hash (const void* k)
576{
577 hashval_t hash;
741ac903 578 const_tree const t = (const_tree) k;
06d40de8 579
eb9c434c
JJ
580 hash = TYPE_UID (TREE_TYPE (t));
581 if (TYPE_DOMAIN (t))
582 hash ^= TYPE_UID (TYPE_DOMAIN (t));
06d40de8
DG
583 return hash;
584}
585
586typedef struct cplus_array_info {
587 tree type;
588 tree domain;
589} cplus_array_info;
590
591/* Compare two ARRAY_TYPEs. K1 is really of type `tree', K2 is really
592 of type `cplus_array_info*'. */
593
594static int
595cplus_array_compare (const void * k1, const void * k2)
596{
741ac903
KG
597 const_tree const t1 = (const_tree) k1;
598 const cplus_array_info *const t2 = (const cplus_array_info*) k2;
06d40de8 599
714f2304 600 return (TREE_TYPE (t1) == t2->type && TYPE_DOMAIN (t1) == t2->domain);
06d40de8
DG
601}
602
38e40fcd
JM
603/* Hash table containing dependent array types, which are unsuitable for
604 the language-independent type hash table. */
06d40de8
DG
605static GTY ((param_is (union tree_node))) htab_t cplus_array_htab;
606
38e40fcd 607/* Like build_array_type, but handle special C++ semantics. */
06d40de8 608
38e40fcd
JM
609tree
610build_cplus_array_type (tree elt_type, tree index_type)
8d08fdba 611{
8d08fdba
MS
612 tree t;
613
adecb3f4
MM
614 if (elt_type == error_mark_node || index_type == error_mark_node)
615 return error_mark_node;
616
6da06848
JJ
617 if (processing_template_decl
618 && (dependent_type_p (elt_type)
619 || (index_type && !TREE_CONSTANT (TYPE_MAX_VALUE (index_type)))))
5566b478 620 {
06d40de8
DG
621 void **e;
622 cplus_array_info cai;
623 hashval_t hash;
714f2304 624
06d40de8
DG
625 if (cplus_array_htab == NULL)
626 cplus_array_htab = htab_create_ggc (61, &cplus_array_hash,
627 &cplus_array_compare, NULL);
628
eb9c434c
JJ
629 hash = TYPE_UID (elt_type);
630 if (index_type)
631 hash ^= TYPE_UID (index_type);
06d40de8
DG
632 cai.type = elt_type;
633 cai.domain = index_type;
634
635 e = htab_find_slot_with_hash (cplus_array_htab, &cai, hash, INSERT);
636 if (*e)
714f2304 637 /* We have found the type: we're done. */
06d40de8
DG
638 return (tree) *e;
639 else
640 {
714f2304 641 /* Build a new array type. */
7ecbca9d 642 t = cxx_make_type (ARRAY_TYPE);
06d40de8
DG
643 TREE_TYPE (t) = elt_type;
644 TYPE_DOMAIN (t) = index_type;
645
714f2304
DG
646 /* Store it in the hash table. */
647 *e = t;
648
649 /* Set the canonical type for this new node. */
06d40de8
DG
650 if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
651 || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
652 SET_TYPE_STRUCTURAL_EQUALITY (t);
653 else if (TYPE_CANONICAL (elt_type) != elt_type
654 || (index_type
655 && TYPE_CANONICAL (index_type) != index_type))
714f2304
DG
656 TYPE_CANONICAL (t)
657 = build_cplus_array_type
658 (TYPE_CANONICAL (elt_type),
6da06848 659 index_type ? TYPE_CANONICAL (index_type) : index_type);
714f2304
DG
660 else
661 TYPE_CANONICAL (t) = t;
06d40de8 662 }
5566b478
MS
663 }
664 else
80661759 665 t = build_array_type (elt_type, index_type);
8d08fdba 666
38e40fcd
JM
667 /* We want TYPE_MAIN_VARIANT of an array to strip cv-quals from the
668 element type as well, so fix it up if needed. */
669 if (elt_type != TYPE_MAIN_VARIANT (elt_type))
670 {
671 tree m = build_cplus_array_type (TYPE_MAIN_VARIANT (elt_type),
672 index_type);
673 if (TYPE_MAIN_VARIANT (t) != m)
674 {
675 TYPE_MAIN_VARIANT (t) = m;
676 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
677 TYPE_NEXT_VARIANT (m) = t;
678 }
679 }
680
8d08fdba
MS
681 /* Push these needs up so that initialization takes place
682 more easily. */
9f63daea 683 TYPE_NEEDS_CONSTRUCTING (t)
db3626d1 684 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type));
9f63daea 685 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
834c6dff 686 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type));
8d08fdba
MS
687 return t;
688}
e349ee73 689
09357846
JM
690/* Return an ARRAY_TYPE with element type ELT and length N. */
691
692tree
693build_array_of_n_type (tree elt, int n)
694{
695 return build_cplus_array_type (elt, build_index_type (size_int (n - 1)));
696}
697
8af2fec4
RY
698/* Return a reference type node referring to TO_TYPE. If RVAL is
699 true, return an rvalue reference type, otherwise return an lvalue
700 reference type. If a type node exists, reuse it, otherwise create
701 a new one. */
702tree
703cp_build_reference_type (tree to_type, bool rval)
704{
705 tree lvalue_ref, t;
706 lvalue_ref = build_reference_type (to_type);
707 if (!rval)
708 return lvalue_ref;
709
710 /* This code to create rvalue reference types is based on and tied
711 to the code creating lvalue reference types in the middle-end
712 functions build_reference_type_for_mode and build_reference_type.
713
714 It works by putting the rvalue reference type nodes after the
715 lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
716 they will effectively be ignored by the middle end. */
717
718 for (t = lvalue_ref; (t = TYPE_NEXT_REF_TO (t)); )
719 if (TYPE_REF_IS_RVALUE (t))
720 return t;
721
22521c89 722 t = build_distinct_type_copy (lvalue_ref);
8af2fec4
RY
723
724 TYPE_REF_IS_RVALUE (t) = true;
725 TYPE_NEXT_REF_TO (t) = TYPE_NEXT_REF_TO (lvalue_ref);
726 TYPE_NEXT_REF_TO (lvalue_ref) = t;
8af2fec4
RY
727
728 if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
729 SET_TYPE_STRUCTURAL_EQUALITY (t);
730 else if (TYPE_CANONICAL (to_type) != to_type)
731 TYPE_CANONICAL (t)
732 = cp_build_reference_type (TYPE_CANONICAL (to_type), rval);
733 else
734 TYPE_CANONICAL (t) = t;
735
736 layout_type (t);
737
738 return t;
739
740}
741
d5f4eddd
JM
742/* Returns EXPR cast to rvalue reference type, like std::move. */
743
744tree
745move (tree expr)
746{
747 tree type = TREE_TYPE (expr);
748 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
749 type = cp_build_reference_type (type, /*rval*/true);
750 return build_static_cast (type, expr, tf_warning_or_error);
751}
752
9ae165a0
DG
753/* Used by the C++ front end to build qualified array types. However,
754 the C version of this function does not properly maintain canonical
755 types (which are not used in C). */
756tree
757c_build_qualified_type (tree type, int type_quals)
758{
759 return cp_build_qualified_type (type, type_quals);
760}
8af2fec4 761
8d08fdba 762\f
adecb3f4
MM
763/* Make a variant of TYPE, qualified with the TYPE_QUALS. Handles
764 arrays correctly. In particular, if TYPE is an array of T's, and
c2ea3a40 765 TYPE_QUALS is non-empty, returns an array of qualified T's.
9f63daea 766
39a13be5 767 FLAGS determines how to deal with ill-formed qualifications. If
4f2b0fb2
NS
768 tf_ignore_bad_quals is set, then bad qualifications are dropped
769 (this is permitted if TYPE was introduced via a typedef or template
770 type parameter). If bad qualifications are dropped and tf_warning
771 is set, then a warning is issued for non-const qualifications. If
772 tf_ignore_bad_quals is not set and tf_error is not set, we
773 return error_mark_node. Otherwise, we issue an error, and ignore
774 the qualifications.
775
776 Qualification of a reference type is valid when the reference came
777 via a typedef or template type argument. [dcl.ref] No such
778 dispensation is provided for qualifying a function type. [dcl.fct]
779 DR 295 queries this and the proposed resolution brings it into line
34cd5ae7 780 with qualifying a reference. We implement the DR. We also behave
4f2b0fb2 781 in a similar manner for restricting non-pointer types. */
9f63daea 782
f376e137 783tree
9f63daea 784cp_build_qualified_type_real (tree type,
0cbd7506
MS
785 int type_quals,
786 tsubst_flags_t complain)
f376e137 787{
2adeacc9 788 tree result;
4f2b0fb2 789 int bad_quals = TYPE_UNQUALIFIED;
2adeacc9 790
e76a2646
MS
791 if (type == error_mark_node)
792 return type;
e271912d 793
89d684bb 794 if (type_quals == cp_type_quals (type))
e271912d
JM
795 return type;
796
4f2b0fb2 797 if (TREE_CODE (type) == ARRAY_TYPE)
f376e137 798 {
db3626d1
MM
799 /* In C++, the qualification really applies to the array element
800 type. Obtain the appropriately qualified element type. */
801 tree t;
9f63daea
EC
802 tree element_type
803 = cp_build_qualified_type_real (TREE_TYPE (type),
db3626d1
MM
804 type_quals,
805 complain);
806
807 if (element_type == error_mark_node)
adecb3f4 808 return error_mark_node;
f376e137 809
38e40fcd
JM
810 /* See if we already have an identically qualified type. Tests
811 should be equivalent to those in check_qualified_type. */
29fae15c 812 for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
ef765996 813 if (TREE_TYPE (t) == element_type
29fae15c 814 && TYPE_NAME (t) == TYPE_NAME (type)
38e40fcd
JM
815 && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
816 && attribute_list_equal (TYPE_ATTRIBUTES (t),
817 TYPE_ATTRIBUTES (type)))
29fae15c 818 break;
9f63daea 819
29fae15c 820 if (!t)
38e40fcd
JM
821 {
822 t = build_cplus_array_type (element_type, TYPE_DOMAIN (type));
823
824 /* Keep the typedef name. */
825 if (TYPE_NAME (t) != TYPE_NAME (type))
826 {
827 t = build_variant_type_copy (t);
828 TYPE_NAME (t) = TYPE_NAME (type);
829 }
830 }
f376e137 831
db3626d1 832 /* Even if we already had this variant, we update
834c6dff 833 TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
9f63daea
EC
834 they changed since the variant was originally created.
835
db3626d1
MM
836 This seems hokey; if there is some way to use a previous
837 variant *without* coming through here,
838 TYPE_NEEDS_CONSTRUCTING will never be updated. */
9f63daea 839 TYPE_NEEDS_CONSTRUCTING (t)
db3626d1 840 = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
9f63daea 841 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
834c6dff 842 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
db3626d1 843 return t;
f376e137 844 }
2adeacc9
MM
845 else if (TYPE_PTRMEMFUNC_P (type))
846 {
847 /* For a pointer-to-member type, we can't just return a
848 cv-qualified version of the RECORD_TYPE. If we do, we
4f2b0fb2 849 haven't changed the field that contains the actual pointer to
2adeacc9
MM
850 a method, and so TYPE_PTRMEMFUNC_FN_TYPE will be wrong. */
851 tree t;
852
853 t = TYPE_PTRMEMFUNC_FN_TYPE (type);
854 t = cp_build_qualified_type_real (t, type_quals, complain);
46cbda4a 855 return build_ptrmemfunc_type (t);
2adeacc9 856 }
9a3c2683
JJ
857 else if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
858 {
859 tree t = PACK_EXPANSION_PATTERN (type);
860
861 t = cp_build_qualified_type_real (t, type_quals, complain);
862 return make_pack_expansion (t);
863 }
9f63daea 864
39a13be5 865 /* A reference or method type shall not be cv-qualified.
93e1ddcf
JM
866 [dcl.ref], [dcl.fct]. This used to be an error, but as of DR 295
867 (in CD1) we always ignore extra cv-quals on functions. */
4b011bbf
JM
868 if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)
869 && (TREE_CODE (type) == REFERENCE_TYPE
2872152c 870 || TREE_CODE (type) == FUNCTION_TYPE
4b011bbf
JM
871 || TREE_CODE (type) == METHOD_TYPE))
872 {
93e1ddcf
JM
873 if (TREE_CODE (type) == REFERENCE_TYPE)
874 bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
4b011bbf
JM
875 type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
876 }
9f63daea 877
2872152c
JM
878 /* But preserve any function-cv-quals on a FUNCTION_TYPE. */
879 if (TREE_CODE (type) == FUNCTION_TYPE)
880 type_quals |= type_memfn_quals (type);
881
4b011bbf 882 /* A restrict-qualified type must be a pointer (or reference)
0d9c0892 883 to object or incomplete type. */
4b011bbf
JM
884 if ((type_quals & TYPE_QUAL_RESTRICT)
885 && TREE_CODE (type) != TEMPLATE_TYPE_PARM
886 && TREE_CODE (type) != TYPENAME_TYPE
887 && !POINTER_TYPE_P (type))
888 {
889 bad_quals |= TYPE_QUAL_RESTRICT;
890 type_quals &= ~TYPE_QUAL_RESTRICT;
891 }
892
93e1ddcf
JM
893 if (bad_quals == TYPE_UNQUALIFIED
894 || (complain & tf_ignore_bad_quals))
4b011bbf 895 /*OK*/;
93e1ddcf 896 else if (!(complain & tf_error))
4b011bbf 897 return error_mark_node;
4b011bbf
JM
898 else
899 {
93e1ddcf
JM
900 tree bad_type = build_qualified_type (ptr_type_node, bad_quals);
901 error ("%qV qualifiers cannot be applied to %qT",
902 bad_type, type);
4b011bbf 903 }
9f63daea 904
2adeacc9
MM
905 /* Retrieve (or create) the appropriately qualified variant. */
906 result = build_qualified_type (type, type_quals);
907
908 /* If this was a pointer-to-method type, and we just made a copy,
3cfab7ec
GK
909 then we need to unshare the record that holds the cached
910 pointer-to-member-function type, because these will be distinct
911 between the unqualified and qualified types. */
9f63daea 912 if (result != type
2adeacc9 913 && TREE_CODE (type) == POINTER_TYPE
0f67bdf1
JM
914 && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE
915 && TYPE_LANG_SPECIFIC (result) == TYPE_LANG_SPECIFIC (type))
3cfab7ec 916 TYPE_LANG_SPECIFIC (result) = NULL;
2adeacc9 917
7aa4a1df
DG
918 /* We may also have ended up building a new copy of the canonical
919 type of a pointer-to-method type, which could have the same
920 sharing problem described above. */
921 if (TYPE_CANONICAL (result) != TYPE_CANONICAL (type)
922 && TREE_CODE (type) == POINTER_TYPE
923 && TREE_CODE (TREE_TYPE (type)) == METHOD_TYPE
924 && (TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result))
925 == TYPE_LANG_SPECIFIC (TYPE_CANONICAL (type))))
926 TYPE_LANG_SPECIFIC (TYPE_CANONICAL (result)) = NULL;
7aa4a1df 927
2adeacc9 928 return result;
f376e137 929}
53929c47 930
164247b0
JM
931/* Return TYPE with const and volatile removed. */
932
933tree
934cv_unqualified (tree type)
935{
ea8b8aa0
JM
936 int quals;
937
938 if (type == error_mark_node)
939 return type;
940
a3360e77 941 quals = cp_type_quals (type);
164247b0
JM
942 quals &= ~(TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE);
943 return cp_build_qualified_type (type, quals);
944}
945
cd41d410
DS
946/* Builds a qualified variant of T that is not a typedef variant.
947 E.g. consider the following declarations:
948 typedef const int ConstInt;
949 typedef ConstInt* PtrConstInt;
950 If T is PtrConstInt, this function returns a type representing
951 const int*.
952 In other words, if T is a typedef, the function returns the underlying type.
953 The cv-qualification and attributes of the type returned match the
954 input type.
955 They will always be compatible types.
956 The returned type is built so that all of its subtypes
957 recursively have their typedefs stripped as well.
958
959 This is different from just returning TYPE_CANONICAL (T)
960 Because of several reasons:
961 * If T is a type that needs structural equality
962 its TYPE_CANONICAL (T) will be NULL.
963 * TYPE_CANONICAL (T) desn't carry type attributes
964 and looses template parameter names. */
53929c47
JM
965
966tree
cd41d410 967strip_typedefs (tree t)
53929c47 968{
cd41d410
DS
969 tree result = NULL, type = NULL, t0 = NULL;
970
971 if (!t || t == error_mark_node || t == TYPE_CANONICAL (t))
972 return t;
973
974 gcc_assert (TYPE_P (t));
975
976 switch (TREE_CODE (t))
977 {
978 case POINTER_TYPE:
979 type = strip_typedefs (TREE_TYPE (t));
980 result = build_pointer_type (type);
981 break;
982 case REFERENCE_TYPE:
983 type = strip_typedefs (TREE_TYPE (t));
984 result = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
985 break;
986 case OFFSET_TYPE:
987 t0 = strip_typedefs (TYPE_OFFSET_BASETYPE (t));
988 type = strip_typedefs (TREE_TYPE (t));
989 result = build_offset_type (t0, type);
990 break;
991 case RECORD_TYPE:
992 if (TYPE_PTRMEMFUNC_P (t))
993 {
994 t0 = strip_typedefs (TYPE_PTRMEMFUNC_FN_TYPE (t));
995 result = build_ptrmemfunc_type (t0);
996 }
997 break;
998 case ARRAY_TYPE:
999 type = strip_typedefs (TREE_TYPE (t));
1000 t0 = strip_typedefs (TYPE_DOMAIN (t));;
1001 result = build_cplus_array_type (type, t0);
1002 break;
1003 case FUNCTION_TYPE:
1004 case METHOD_TYPE:
1005 {
1006 tree arg_types = NULL, arg_node, arg_type;
1007 for (arg_node = TYPE_ARG_TYPES (t);
1008 arg_node;
1009 arg_node = TREE_CHAIN (arg_node))
1010 {
1011 if (arg_node == void_list_node)
1012 break;
1013 arg_type = strip_typedefs (TREE_VALUE (arg_node));
1014 gcc_assert (arg_type);
1015
1016 arg_types =
1017 tree_cons (TREE_PURPOSE (arg_node), arg_type, arg_types);
1018 }
1019
1020 if (arg_types)
1021 arg_types = nreverse (arg_types);
1022
1023 /* A list of parameters not ending with an ellipsis
1024 must end with void_list_node. */
1025 if (arg_node)
1026 arg_types = chainon (arg_types, void_list_node);
1027
1028 type = strip_typedefs (TREE_TYPE (t));
1029 if (TREE_CODE (t) == METHOD_TYPE)
1030 {
1031 tree class_type = TREE_TYPE (TREE_VALUE (arg_types));
1032 gcc_assert (class_type);
1033 result =
1034 build_method_type_directly (class_type, type,
1035 TREE_CHAIN (arg_types));
1036 }
1037 else
2872152c 1038 {
cd41d410
DS
1039 result = build_function_type (type,
1040 arg_types);
2872152c
JM
1041 result = apply_memfn_quals (result, type_memfn_quals (t));
1042 }
3c3905fc
JM
1043
1044 if (TYPE_RAISES_EXCEPTIONS (t))
1045 result = build_exception_variant (result,
1046 TYPE_RAISES_EXCEPTIONS (t));
cd41d410
DS
1047 }
1048 break;
e6c2fc5d
DS
1049 case TYPENAME_TYPE:
1050 result = make_typename_type (strip_typedefs (TYPE_CONTEXT (t)),
1051 TYPENAME_TYPE_FULLNAME (t),
1052 typename_type, tf_none);
1053 break;
cd41d410
DS
1054 default:
1055 break;
1056 }
1ad8aeeb 1057
cd41d410
DS
1058 if (!result)
1059 result = TYPE_MAIN_VARIANT (t);
3c3905fc
JM
1060 if (TYPE_ATTRIBUTES (t))
1061 result = cp_build_type_attribute_variant (result, TYPE_ATTRIBUTES (t));
cd41d410 1062 return cp_build_qualified_type (result, cp_type_quals (t));
53929c47 1063}
cd41d410 1064
9cf10655
DS
1065/* Setup a TYPE_DECL node as a typedef representation.
1066 See comments of set_underlying_type in c-common.c. */
1067
1068void
1069cp_set_underlying_type (tree t)
1070{
1071 set_underlying_type (t);
e96ce650
DS
1072 /* If T is a template type parm, make it require structural equality.
1073 This is useful when comparing two template type parms,
9cf10655 1074 because it forces the comparison of the template parameters of their
e96ce650
DS
1075 decls. */
1076 if (TREE_CODE (TREE_TYPE (t)) == TEMPLATE_TYPE_PARM)
9cf10655
DS
1077 SET_TYPE_STRUCTURAL_EQUALITY (TREE_TYPE (t));
1078}
1079
f376e137 1080\f
48b45647
NS
1081/* Makes a copy of BINFO and TYPE, which is to be inherited into a
1082 graph dominated by T. If BINFO is NULL, TYPE is a dependent base,
1083 and we do a shallow copy. If BINFO is non-NULL, we do a deep copy.
1084 VIRT indicates whether TYPE is inherited virtually or not.
1085 IGO_PREV points at the previous binfo of the inheritance graph
1086 order chain. The newly copied binfo's TREE_CHAIN forms this
1087 ordering.
1088
1089 The CLASSTYPE_VBASECLASSES vector of T is constructed in the
1090 correct order. That is in the order the bases themselves should be
1091 constructed in.
dbbf88d1
NS
1092
1093 The BINFO_INHERITANCE of a virtual base class points to the binfo
48b45647
NS
1094 of the most derived type. ??? We could probably change this so that
1095 BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
1096 remove a field. They currently can only differ for primary virtual
1097 virtual bases. */
dbbf88d1
NS
1098
1099tree
48b45647 1100copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
9a71c18b 1101{
48b45647 1102 tree new_binfo;
9a71c18b 1103
48b45647
NS
1104 if (virt)
1105 {
1106 /* See if we've already made this virtual base. */
1107 new_binfo = binfo_for_vbase (type, t);
1108 if (new_binfo)
1109 return new_binfo;
1110 }
9f63daea 1111
fa743e8c 1112 new_binfo = make_tree_binfo (binfo ? BINFO_N_BASE_BINFOS (binfo) : 0);
48b45647 1113 BINFO_TYPE (new_binfo) = type;
9a71c18b 1114
48b45647
NS
1115 /* Chain it into the inheritance graph. */
1116 TREE_CHAIN (*igo_prev) = new_binfo;
1117 *igo_prev = new_binfo;
9f63daea 1118
48b45647 1119 if (binfo)
dfbcd65a 1120 {
fa743e8c
NS
1121 int ix;
1122 tree base_binfo;
9f63daea 1123
50bc768d 1124 gcc_assert (!BINFO_DEPENDENT_BASE_P (binfo));
539ed333 1125 gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), type));
9f63daea 1126
48b45647
NS
1127 BINFO_OFFSET (new_binfo) = BINFO_OFFSET (binfo);
1128 BINFO_VIRTUALS (new_binfo) = BINFO_VIRTUALS (binfo);
9f63daea 1129
fa743e8c
NS
1130 /* We do not need to copy the accesses, as they are read only. */
1131 BINFO_BASE_ACCESSES (new_binfo) = BINFO_BASE_ACCESSES (binfo);
9f63daea 1132
48b45647 1133 /* Recursively copy base binfos of BINFO. */
fa743e8c 1134 for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
dbbf88d1 1135 {
48b45647 1136 tree new_base_binfo;
9f63daea 1137
50bc768d 1138 gcc_assert (!BINFO_DEPENDENT_BASE_P (base_binfo));
48b45647
NS
1139 new_base_binfo = copy_binfo (base_binfo, BINFO_TYPE (base_binfo),
1140 t, igo_prev,
1141 BINFO_VIRTUAL_P (base_binfo));
9f63daea 1142
48b45647
NS
1143 if (!BINFO_INHERITANCE_CHAIN (new_base_binfo))
1144 BINFO_INHERITANCE_CHAIN (new_base_binfo) = new_binfo;
fa743e8c 1145 BINFO_BASE_APPEND (new_binfo, new_base_binfo);
dbbf88d1 1146 }
9a71c18b 1147 }
48b45647
NS
1148 else
1149 BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
9f63daea 1150
48b45647
NS
1151 if (virt)
1152 {
1153 /* Push it onto the list after any virtual bases it contains
1154 will have been pushed. */
1155 VEC_quick_push (tree, CLASSTYPE_VBASECLASSES (t), new_binfo);
1156 BINFO_VIRTUAL_P (new_binfo) = 1;
1157 BINFO_INHERITANCE_CHAIN (new_binfo) = TYPE_BINFO (t);
1158 }
9f63daea 1159
48b45647 1160 return new_binfo;
9a71c18b 1161}
8d08fdba
MS
1162\f
1163/* Hashing of lists so that we don't make duplicates.
1164 The entry point is `list_hash_canon'. */
1165
8d08fdba
MS
1166/* Now here is the hash table. When recording a list, it is added
1167 to the slot whose index is the hash code mod the table size.
1168 Note that the hash table is used for several kinds of lists.
1169 While all these live in the same table, they are completely independent,
1170 and the hash code is computed differently for each of these. */
1171
e2500fed 1172static GTY ((param_is (union tree_node))) htab_t list_hash_table;
9ccb25d5 1173
9f63daea 1174struct list_proxy
9ccb25d5
MM
1175{
1176 tree purpose;
1177 tree value;
1178 tree chain;
1179};
1180
1181/* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
1182 for a node we are thinking about adding). */
1183
1184static int
b57b79f7 1185list_hash_eq (const void* entry, const void* data)
9ccb25d5 1186{
741ac903
KG
1187 const_tree const t = (const_tree) entry;
1188 const struct list_proxy *const proxy = (const struct list_proxy *) data;
9ccb25d5
MM
1189
1190 return (TREE_VALUE (t) == proxy->value
1191 && TREE_PURPOSE (t) == proxy->purpose
1192 && TREE_CHAIN (t) == proxy->chain);
1193}
8d08fdba
MS
1194
1195/* Compute a hash code for a list (chain of TREE_LIST nodes
1196 with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
1197 TREE_COMMON slots), by adding the hash codes of the individual entries. */
1198
9ccb25d5 1199static hashval_t
b57b79f7 1200list_hash_pieces (tree purpose, tree value, tree chain)
8d08fdba 1201{
9ccb25d5 1202 hashval_t hashcode = 0;
9f63daea 1203
37c46b43 1204 if (chain)
fd917e0d 1205 hashcode += TREE_HASH (chain);
9f63daea 1206
37c46b43 1207 if (value)
fd917e0d 1208 hashcode += TREE_HASH (value);
8d08fdba
MS
1209 else
1210 hashcode += 1007;
37c46b43 1211 if (purpose)
fd917e0d 1212 hashcode += TREE_HASH (purpose);
8d08fdba
MS
1213 else
1214 hashcode += 1009;
1215 return hashcode;
1216}
1217
9ccb25d5 1218/* Hash an already existing TREE_LIST. */
8d08fdba 1219
9ccb25d5 1220static hashval_t
b57b79f7 1221list_hash (const void* p)
8d08fdba 1222{
741ac903 1223 const_tree const t = (const_tree) p;
9f63daea
EC
1224 return list_hash_pieces (TREE_PURPOSE (t),
1225 TREE_VALUE (t),
9ccb25d5 1226 TREE_CHAIN (t));
8d08fdba
MS
1227}
1228
51632249
JM
1229/* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
1230 object for an identical list if one already exists. Otherwise, build a
1231 new one, and record it as the canonical object. */
8d08fdba 1232
8d08fdba 1233tree
b57b79f7 1234hash_tree_cons (tree purpose, tree value, tree chain)
8d08fdba 1235{
a703fb38 1236 int hashcode = 0;
fad205ff 1237 void **slot;
9ccb25d5
MM
1238 struct list_proxy proxy;
1239
1240 /* Hash the list node. */
1241 hashcode = list_hash_pieces (purpose, value, chain);
1242 /* Create a proxy for the TREE_LIST we would like to create. We
1243 don't actually create it so as to avoid creating garbage. */
1244 proxy.purpose = purpose;
1245 proxy.value = value;
1246 proxy.chain = chain;
1247 /* See if it is already in the table. */
1248 slot = htab_find_slot_with_hash (list_hash_table, &proxy, hashcode,
1249 INSERT);
1250 /* If not, create a new node. */
1251 if (!*slot)
fad205ff 1252 *slot = tree_cons (purpose, value, chain);
67f5655f 1253 return (tree) *slot;
8d08fdba
MS
1254}
1255
1256/* Constructor for hashed lists. */
e92cc029 1257
8d08fdba 1258tree
b57b79f7 1259hash_tree_chain (tree value, tree chain)
8d08fdba 1260{
51632249 1261 return hash_tree_cons (NULL_TREE, value, chain);
8d08fdba 1262}
8d08fdba 1263\f
8d08fdba 1264void
b57b79f7 1265debug_binfo (tree elem)
8d08fdba 1266{
fed3cef0 1267 HOST_WIDE_INT n;
8d08fdba
MS
1268 tree virtuals;
1269
90ff44cf
KG
1270 fprintf (stderr, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
1271 "\nvtable type:\n",
1272 TYPE_NAME_STRING (BINFO_TYPE (elem)),
fed3cef0 1273 TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
8d08fdba
MS
1274 debug_tree (BINFO_TYPE (elem));
1275 if (BINFO_VTABLE (elem))
fed3cef0 1276 fprintf (stderr, "vtable decl \"%s\"\n",
c35cce41 1277 IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
8d08fdba
MS
1278 else
1279 fprintf (stderr, "no vtable decl yet\n");
1280 fprintf (stderr, "virtuals:\n");
da3d4dfa 1281 virtuals = BINFO_VIRTUALS (elem);
1f84ec23 1282 n = 0;
f30432d7 1283
8d08fdba
MS
1284 while (virtuals)
1285 {
83f2ccf4 1286 tree fndecl = TREE_VALUE (virtuals);
71e89f27 1287 fprintf (stderr, "%s [%ld =? %ld]\n",
8d08fdba 1288 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
71e89f27 1289 (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
f30432d7 1290 ++n;
8d08fdba 1291 virtuals = TREE_CHAIN (virtuals);
8d08fdba
MS
1292 }
1293}
1294
02ed62dd
MM
1295/* Build a representation for the qualified name SCOPE::NAME. TYPE is
1296 the type of the result expression, if known, or NULL_TREE if the
1297 resulting expression is type-dependent. If TEMPLATE_P is true,
1298 NAME is known to be a template because the user explicitly used the
3db45ab5 1299 "template" keyword after the "::".
02ed62dd
MM
1300
1301 All SCOPE_REFs should be built by use of this function. */
1302
1303tree
1304build_qualified_name (tree type, tree scope, tree name, bool template_p)
1305{
1306 tree t;
36569397
MM
1307 if (type == error_mark_node
1308 || scope == error_mark_node
1309 || name == error_mark_node)
1310 return error_mark_node;
02ed62dd
MM
1311 t = build2 (SCOPE_REF, type, scope, name);
1312 QUALIFIED_NAME_IS_TEMPLATE (t) = template_p;
7097b3ac
JM
1313 if (type)
1314 t = convert_from_reference (t);
02ed62dd
MM
1315 return t;
1316}
1317
3b426391 1318/* Returns nonzero if X is an expression for a (possibly overloaded)
eff3a276
MM
1319 function. If "f" is a function or function template, "f", "c->f",
1320 "c.f", "C::f", and "f<int>" will all be considered possibly
1321 overloaded functions. Returns 2 if the function is actually
b9704fc5 1322 overloaded, i.e., if it is impossible to know the type of the
eff3a276
MM
1323 function without performing overload resolution. */
1324
8d08fdba 1325int
b57b79f7 1326is_overloaded_fn (tree x)
8d08fdba 1327{
4bb0968f 1328 /* A baselink is also considered an overloaded function. */
ccbe00a4
JM
1329 if (TREE_CODE (x) == OFFSET_REF
1330 || TREE_CODE (x) == COMPONENT_REF)
05e0b2f4 1331 x = TREE_OPERAND (x, 1);
4bb0968f 1332 if (BASELINK_P (x))
da15dae6 1333 x = BASELINK_FUNCTIONS (x);
d095e03c
JM
1334 if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
1335 x = TREE_OPERAND (x, 0);
1336 if (DECL_FUNCTION_TEMPLATE_P (OVL_CURRENT (x))
eff3a276
MM
1337 || (TREE_CODE (x) == OVERLOAD && OVL_CHAIN (x)))
1338 return 2;
1339 return (TREE_CODE (x) == FUNCTION_DECL
1340 || TREE_CODE (x) == OVERLOAD);
8d08fdba
MS
1341}
1342
eff3a276
MM
1343/* Returns true iff X is an expression for an overloaded function
1344 whose type cannot be known without performing overload
1345 resolution. */
1346
1347bool
b57b79f7 1348really_overloaded_fn (tree x)
9f63daea 1349{
eff3a276 1350 return is_overloaded_fn (x) == 2;
8926095f
MS
1351}
1352
8d08fdba 1353tree
294e855f 1354get_fns (tree from)
8d08fdba 1355{
50bc768d 1356 gcc_assert (is_overloaded_fn (from));
c6002625 1357 /* A baselink is also considered an overloaded function. */
7e361ae6
JM
1358 if (TREE_CODE (from) == OFFSET_REF
1359 || TREE_CODE (from) == COMPONENT_REF)
ccbe00a4 1360 from = TREE_OPERAND (from, 1);
4bb0968f 1361 if (BASELINK_P (from))
da15dae6 1362 from = BASELINK_FUNCTIONS (from);
d095e03c
JM
1363 if (TREE_CODE (from) == TEMPLATE_ID_EXPR)
1364 from = TREE_OPERAND (from, 0);
294e855f
JM
1365 return from;
1366}
1367
1368tree
1369get_first_fn (tree from)
1370{
1371 return OVL_CURRENT (get_fns (from));
2c73f9f5 1372}
8d08fdba 1373
c6002625 1374/* Return a new OVL node, concatenating it with the old one. */
2c73f9f5
ML
1375
1376tree
b57b79f7 1377ovl_cons (tree decl, tree chain)
2c73f9f5
ML
1378{
1379 tree result = make_node (OVERLOAD);
1380 TREE_TYPE (result) = unknown_type_node;
1381 OVL_FUNCTION (result) = decl;
1382 TREE_CHAIN (result) = chain;
9f63daea 1383
2c73f9f5
ML
1384 return result;
1385}
1386
2c73f9f5
ML
1387/* Build a new overloaded function. If this is the first one,
1388 just return it; otherwise, ovl_cons the _DECLs */
1389
1390tree
b57b79f7 1391build_overload (tree decl, tree chain)
2c73f9f5 1392{
161c12b0 1393 if (! chain && TREE_CODE (decl) != TEMPLATE_DECL)
2c73f9f5 1394 return decl;
161c12b0 1395 if (chain && TREE_CODE (chain) != OVERLOAD)
2c73f9f5
ML
1396 chain = ovl_cons (chain, NULL_TREE);
1397 return ovl_cons (decl, chain);
1398}
1399
8d08fdba
MS
1400\f
1401#define PRINT_RING_SIZE 4
1402
f41c4af3
JM
1403static const char *
1404cxx_printable_name_internal (tree decl, int v, bool translate)
8d08fdba 1405{
1bde0042 1406 static unsigned int uid_ring[PRINT_RING_SIZE];
8d08fdba 1407 static char *print_ring[PRINT_RING_SIZE];
f41c4af3 1408 static bool trans_ring[PRINT_RING_SIZE];
8d08fdba
MS
1409 static int ring_counter;
1410 int i;
1411
1412 /* Only cache functions. */
2ba25f50
MS
1413 if (v < 2
1414 || TREE_CODE (decl) != FUNCTION_DECL
8d08fdba 1415 || DECL_LANG_SPECIFIC (decl) == 0)
f41c4af3 1416 return lang_decl_name (decl, v, translate);
8d08fdba
MS
1417
1418 /* See if this print name is lying around. */
1419 for (i = 0; i < PRINT_RING_SIZE; i++)
f41c4af3 1420 if (uid_ring[i] == DECL_UID (decl) && translate == trans_ring[i])
8d08fdba
MS
1421 /* yes, so return it. */
1422 return print_ring[i];
1423
1424 if (++ring_counter == PRINT_RING_SIZE)
1425 ring_counter = 0;
1426
1427 if (current_function_decl != NULL_TREE)
1428 {
8fa6fa79
JM
1429 /* There may be both translated and untranslated versions of the
1430 name cached. */
1431 for (i = 0; i < 2; i++)
1432 {
1433 if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
1434 ring_counter += 1;
1435 if (ring_counter == PRINT_RING_SIZE)
1436 ring_counter = 0;
1437 }
1bde0042 1438 gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
8d08fdba
MS
1439 }
1440
1441 if (print_ring[ring_counter])
1442 free (print_ring[ring_counter]);
1443
f41c4af3 1444 print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v, translate));
1bde0042 1445 uid_ring[ring_counter] = DECL_UID (decl);
f41c4af3 1446 trans_ring[ring_counter] = translate;
8d08fdba
MS
1447 return print_ring[ring_counter];
1448}
f41c4af3
JM
1449
1450const char *
1451cxx_printable_name (tree decl, int v)
1452{
1453 return cxx_printable_name_internal (decl, v, false);
1454}
1455
1456const char *
1457cxx_printable_name_translate (tree decl, int v)
1458{
1459 return cxx_printable_name_internal (decl, v, true);
1460}
8d08fdba 1461\f
f30432d7 1462/* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
8d08fdba 1463 listed in RAISES. */
e92cc029 1464
8d08fdba 1465tree
b57b79f7 1466build_exception_variant (tree type, tree raises)
8d08fdba 1467{
3a55fb4c
JM
1468 tree v;
1469 int type_quals;
8d08fdba 1470
3a55fb4c
JM
1471 if (comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (type), ce_exact))
1472 return type;
1473
1474 type_quals = TYPE_QUALS (type);
1475 for (v = TYPE_MAIN_VARIANT (type); v; v = TYPE_NEXT_VARIANT (v))
896c3aa3 1476 if (check_qualified_type (v, type, type_quals)
3a55fb4c 1477 && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (v), ce_exact))
4cc1d462 1478 return v;
8d08fdba
MS
1479
1480 /* Need to build a new variant. */
8dd16ecc 1481 v = build_variant_type_copy (type);
8d08fdba
MS
1482 TYPE_RAISES_EXCEPTIONS (v) = raises;
1483 return v;
1484}
1485
dac65501
KL
1486/* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
1487 BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
1899c3a4 1488 arguments. */
73b0fce8
KL
1489
1490tree
b57b79f7 1491bind_template_template_parm (tree t, tree newargs)
73b0fce8 1492{
1899c3a4 1493 tree decl = TYPE_NAME (t);
6b9b6b15
JM
1494 tree t2;
1495
9e1e64ec 1496 t2 = cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM);
c2255bc4
AH
1497 decl = build_decl (input_location,
1498 TYPE_DECL, DECL_NAME (decl), NULL_TREE);
1899c3a4 1499
dac65501
KL
1500 /* These nodes have to be created to reflect new TYPE_DECL and template
1501 arguments. */
1502 TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
1503 TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
1504 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
aa373032 1505 = build_template_info (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t), newargs);
6b9b6b15 1506
1899c3a4
KL
1507 TREE_TYPE (decl) = t2;
1508 TYPE_NAME (t2) = decl;
1509 TYPE_STUB_DECL (t2) = decl;
dac65501 1510 TYPE_SIZE (t2) = 0;
06d40de8 1511 SET_TYPE_STRUCTURAL_EQUALITY (t2);
73b0fce8 1512
73b0fce8
KL
1513 return t2;
1514}
1515
bf3428d0 1516/* Called from count_trees via walk_tree. */
297a5329
JM
1517
1518static tree
44de5aeb 1519count_trees_r (tree *tp, int *walk_subtrees, void *data)
297a5329 1520{
44de5aeb
RK
1521 ++*((int *) data);
1522
1523 if (TYPE_P (*tp))
1524 *walk_subtrees = 0;
1525
297a5329
JM
1526 return NULL_TREE;
1527}
1528
1529/* Debugging function for measuring the rough complexity of a tree
1530 representation. */
1531
1532int
b57b79f7 1533count_trees (tree t)
297a5329 1534{
bf3428d0 1535 int n_trees = 0;
14588106 1536 cp_walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
297a5329 1537 return n_trees;
9f63daea 1538}
297a5329 1539
b2244c65
MM
1540/* Called from verify_stmt_tree via walk_tree. */
1541
1542static tree
9f63daea 1543verify_stmt_tree_r (tree* tp,
0cbd7506
MS
1544 int* walk_subtrees ATTRIBUTE_UNUSED ,
1545 void* data)
b2244c65
MM
1546{
1547 tree t = *tp;
1548 htab_t *statements = (htab_t *) data;
1549 void **slot;
1550
009ed910 1551 if (!STATEMENT_CODE_P (TREE_CODE (t)))
b2244c65
MM
1552 return NULL_TREE;
1553
1554 /* If this statement is already present in the hash table, then
1555 there is a circularity in the statement tree. */
315fb5db 1556 gcc_assert (!htab_find (*statements, t));
9f63daea 1557
b2244c65
MM
1558 slot = htab_find_slot (*statements, t, INSERT);
1559 *slot = t;
1560
1561 return NULL_TREE;
1562}
1563
1564/* Debugging function to check that the statement T has not been
1565 corrupted. For now, this function simply checks that T contains no
1566 circularities. */
1567
1568void
b57b79f7 1569verify_stmt_tree (tree t)
b2244c65
MM
1570{
1571 htab_t statements;
1572 statements = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
14588106 1573 cp_walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
b2244c65
MM
1574 htab_delete (statements);
1575}
1576
50a6dbd7 1577/* Check if the type T depends on a type with no linkage and if so, return
4684cd27 1578 it. If RELAXED_P then do not consider a class type declared within
ecc607fc 1579 a vague-linkage function to have no linkage. */
50a6dbd7
JM
1580
1581tree
4684cd27 1582no_linkage_check (tree t, bool relaxed_p)
50a6dbd7 1583{
caf43ca4
MM
1584 tree r;
1585
2adeacc9
MM
1586 /* There's no point in checking linkage on template functions; we
1587 can't know their complete types. */
1588 if (processing_template_decl)
1589 return NULL_TREE;
1590
caf43ca4
MM
1591 switch (TREE_CODE (t))
1592 {
1593 case RECORD_TYPE:
1594 if (TYPE_PTRMEMFUNC_P (t))
1595 goto ptrmem;
e6d92cec
JM
1596 /* Lambda types that don't have mangling scope have no linkage. We
1597 check CLASSTYPE_LAMBDA_EXPR here rather than LAMBDA_TYPE_P because
1598 when we get here from pushtag none of the lambda information is
1599 set up yet, so we want to assume that the lambda has linkage and
1600 fix it up later if not. */
1601 if (CLASSTYPE_LAMBDA_EXPR (t)
1602 && LAMBDA_TYPE_EXTRA_SCOPE (t) == NULL_TREE)
1603 return t;
caf43ca4
MM
1604 /* Fall through. */
1605 case UNION_TYPE:
1606 if (!CLASS_TYPE_P (t))
1607 return NULL_TREE;
1608 /* Fall through. */
1609 case ENUMERAL_TYPE:
ecc607fc 1610 /* Only treat anonymous types as having no linkage if they're at
2f59d9e0 1611 namespace scope. This is core issue 966. */
ecc607fc 1612 if (TYPE_ANONYMOUS_P (t) && TYPE_NAMESPACE_SCOPE_P (t))
caf43ca4 1613 return t;
ecc607fc 1614
e6d92cec 1615 for (r = CP_TYPE_CONTEXT (t); ; )
ecc607fc 1616 {
e6d92cec
JM
1617 /* If we're a nested type of a !TREE_PUBLIC class, we might not
1618 have linkage, or we might just be in an anonymous namespace.
1619 If we're in a TREE_PUBLIC class, we have linkage. */
1620 if (TYPE_P (r) && !TREE_PUBLIC (TYPE_NAME (r)))
1621 return no_linkage_check (TYPE_CONTEXT (t), relaxed_p);
1622 else if (TREE_CODE (r) == FUNCTION_DECL)
1623 {
d6dcdbd5 1624 if (!relaxed_p || !vague_linkage_p (r))
e6d92cec
JM
1625 return t;
1626 else
1627 r = CP_DECL_CONTEXT (r);
1628 }
ecc607fc 1629 else
e6d92cec 1630 break;
ecc607fc
JM
1631 }
1632
caf43ca4
MM
1633 return NULL_TREE;
1634
1635 case ARRAY_TYPE:
1636 case POINTER_TYPE:
1637 case REFERENCE_TYPE:
4684cd27 1638 return no_linkage_check (TREE_TYPE (t), relaxed_p);
caf43ca4
MM
1639
1640 case OFFSET_TYPE:
1641 ptrmem:
4684cd27
MM
1642 r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
1643 relaxed_p);
caf43ca4
MM
1644 if (r)
1645 return r;
4684cd27 1646 return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
caf43ca4
MM
1647
1648 case METHOD_TYPE:
4684cd27 1649 r = no_linkage_check (TYPE_METHOD_BASETYPE (t), relaxed_p);
caf43ca4
MM
1650 if (r)
1651 return r;
1652 /* Fall through. */
1653 case FUNCTION_TYPE:
1654 {
1655 tree parm;
9f63daea
EC
1656 for (parm = TYPE_ARG_TYPES (t);
1657 parm && parm != void_list_node;
caf43ca4
MM
1658 parm = TREE_CHAIN (parm))
1659 {
4684cd27 1660 r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
caf43ca4
MM
1661 if (r)
1662 return r;
1663 }
4684cd27 1664 return no_linkage_check (TREE_TYPE (t), relaxed_p);
caf43ca4
MM
1665 }
1666
1667 default:
1668 return NULL_TREE;
1669 }
50a6dbd7
JM
1670}
1671
5566b478
MS
1672#ifdef GATHER_STATISTICS
1673extern int depth_reached;
1674#endif
1675
8d08fdba 1676void
b57b79f7 1677cxx_print_statistics (void)
8d08fdba 1678{
8d08fdba
MS
1679 print_search_statistics ();
1680 print_class_statistics ();
7dcfe861 1681 print_template_statistics ();
5566b478
MS
1682#ifdef GATHER_STATISTICS
1683 fprintf (stderr, "maximum template instantiation depth reached: %d\n",
1684 depth_reached);
1685#endif
8d08fdba
MS
1686}
1687
e92cc029
MS
1688/* Return, as an INTEGER_CST node, the number of elements for TYPE
1689 (which is an ARRAY_TYPE). This counts only elements of the top
1690 array. */
8d08fdba
MS
1691
1692tree
b57b79f7 1693array_type_nelts_top (tree type)
8d08fdba 1694{
db3927fb
AH
1695 return fold_build2_loc (input_location,
1696 PLUS_EXPR, sizetype,
7866705a 1697 array_type_nelts (type),
701e903a 1698 size_one_node);
8d08fdba
MS
1699}
1700
e92cc029
MS
1701/* Return, as an INTEGER_CST node, the number of elements for TYPE
1702 (which is an ARRAY_TYPE). This one is a recursive count of all
1703 ARRAY_TYPEs that are clumped together. */
8d08fdba
MS
1704
1705tree
b57b79f7 1706array_type_nelts_total (tree type)
8d08fdba
MS
1707{
1708 tree sz = array_type_nelts_top (type);
1709 type = TREE_TYPE (type);
1710 while (TREE_CODE (type) == ARRAY_TYPE)
1711 {
1712 tree n = array_type_nelts_top (type);
db3927fb
AH
1713 sz = fold_build2_loc (input_location,
1714 MULT_EXPR, sizetype, sz, n);
8d08fdba
MS
1715 type = TREE_TYPE (type);
1716 }
1717 return sz;
1718}
878cd289 1719
b3ab27f3
MM
1720/* Called from break_out_target_exprs via mapcar. */
1721
1722static tree
b57b79f7 1723bot_manip (tree* tp, int* walk_subtrees, void* data)
878cd289 1724{
8dfaeb63
MM
1725 splay_tree target_remap = ((splay_tree) data);
1726 tree t = *tp;
1727
4f976745 1728 if (!TYPE_P (t) && TREE_CONSTANT (t))
8dfaeb63 1729 {
495d26d6 1730 /* There can't be any TARGET_EXPRs or their slot variables below
0cbd7506
MS
1731 this point. We used to check !TREE_SIDE_EFFECTS, but then we
1732 failed to copy an ADDR_EXPR of the slot VAR_DECL. */
8dfaeb63
MM
1733 *walk_subtrees = 0;
1734 return NULL_TREE;
1735 }
495d26d6 1736 if (TREE_CODE (t) == TARGET_EXPR)
73aad9b9 1737 {
b3ab27f3
MM
1738 tree u;
1739
02531345 1740 if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
7efc22ea 1741 u = build_cplus_new (TREE_TYPE (t), TREE_OPERAND (t, 1));
9f63daea 1742 else
7efc22ea 1743 u = build_target_expr_with_type (TREE_OPERAND (t, 1), TREE_TYPE (t));
b3ab27f3
MM
1744
1745 /* Map the old variable to the new one. */
9f63daea
EC
1746 splay_tree_insert (target_remap,
1747 (splay_tree_key) TREE_OPERAND (t, 0),
b3ab27f3 1748 (splay_tree_value) TREE_OPERAND (u, 0));
8dfaeb63 1749
7efc22ea
JM
1750 TREE_OPERAND (u, 1) = break_out_target_exprs (TREE_OPERAND (u, 1));
1751
8dfaeb63
MM
1752 /* Replace the old expression with the new version. */
1753 *tp = u;
1754 /* We don't have to go below this point; the recursive call to
1755 break_out_target_exprs will have handled anything below this
1756 point. */
1757 *walk_subtrees = 0;
1758 return NULL_TREE;
73aad9b9 1759 }
73aad9b9 1760
8dfaeb63
MM
1761 /* Make a copy of this node. */
1762 return copy_tree_r (tp, walk_subtrees, NULL);
878cd289 1763}
9f63daea 1764
8dfaeb63
MM
1765/* Replace all remapped VAR_DECLs in T with their new equivalents.
1766 DATA is really a splay-tree mapping old variables to new
1767 variables. */
b3ab27f3
MM
1768
1769static tree
9f63daea 1770bot_replace (tree* t,
0cbd7506
MS
1771 int* walk_subtrees ATTRIBUTE_UNUSED ,
1772 void* data)
b3ab27f3 1773{
8dfaeb63
MM
1774 splay_tree target_remap = ((splay_tree) data);
1775
b3ab27f3
MM
1776 if (TREE_CODE (*t) == VAR_DECL)
1777 {
1778 splay_tree_node n = splay_tree_lookup (target_remap,
1779 (splay_tree_key) *t);
1780 if (n)
1781 *t = (tree) n->value;
1782 }
1783
1784 return NULL_TREE;
1785}
9f63daea 1786
8dfaeb63
MM
1787/* When we parse a default argument expression, we may create
1788 temporary variables via TARGET_EXPRs. When we actually use the
1789 default-argument expression, we make a copy of the expression, but
1790 we must replace the temporaries with appropriate local versions. */
e92cc029 1791
878cd289 1792tree
b57b79f7 1793break_out_target_exprs (tree t)
878cd289 1794{
8dfaeb63
MM
1795 static int target_remap_count;
1796 static splay_tree target_remap;
1797
b3ab27f3 1798 if (!target_remap_count++)
9f63daea
EC
1799 target_remap = splay_tree_new (splay_tree_compare_pointers,
1800 /*splay_tree_delete_key_fn=*/NULL,
b3ab27f3 1801 /*splay_tree_delete_value_fn=*/NULL);
14588106
RG
1802 cp_walk_tree (&t, bot_manip, target_remap, NULL);
1803 cp_walk_tree (&t, bot_replace, target_remap, NULL);
b3ab27f3
MM
1804
1805 if (!--target_remap_count)
1806 {
1807 splay_tree_delete (target_remap);
1808 target_remap = NULL;
1809 }
1810
1811 return t;
878cd289 1812}
f30432d7 1813
8e1daa34
NS
1814/* Similar to `build_nt', but for template definitions of dependent
1815 expressions */
5566b478
MS
1816
1817tree
e34d07f2 1818build_min_nt (enum tree_code code, ...)
5566b478 1819{
926ce8bd
KH
1820 tree t;
1821 int length;
1822 int i;
e34d07f2 1823 va_list p;
5566b478 1824
5039610b
SL
1825 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1826
e34d07f2 1827 va_start (p, code);
5566b478 1828
5566b478 1829 t = make_node (code);
8d5e6e25 1830 length = TREE_CODE_LENGTH (code);
5566b478
MS
1831
1832 for (i = 0; i < length; i++)
1833 {
1834 tree x = va_arg (p, tree);
2a1e9fdd 1835 TREE_OPERAND (t, i) = x;
5566b478
MS
1836 }
1837
e34d07f2 1838 va_end (p);
5566b478
MS
1839 return t;
1840}
1841
5039610b 1842
8e1daa34 1843/* Similar to `build', but for template definitions. */
5566b478
MS
1844
1845tree
e34d07f2 1846build_min (enum tree_code code, tree tt, ...)
5566b478 1847{
926ce8bd
KH
1848 tree t;
1849 int length;
1850 int i;
e34d07f2 1851 va_list p;
5566b478 1852
5039610b
SL
1853 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1854
e34d07f2 1855 va_start (p, tt);
5566b478 1856
5566b478 1857 t = make_node (code);
8d5e6e25 1858 length = TREE_CODE_LENGTH (code);
2a1e9fdd 1859 TREE_TYPE (t) = tt;
5566b478
MS
1860
1861 for (i = 0; i < length; i++)
1862 {
1863 tree x = va_arg (p, tree);
2a1e9fdd 1864 TREE_OPERAND (t, i) = x;
4f976745 1865 if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
8e1daa34 1866 TREE_SIDE_EFFECTS (t) = 1;
5566b478
MS
1867 }
1868
e34d07f2 1869 va_end (p);
5566b478
MS
1870 return t;
1871}
1872
8e1daa34
NS
1873/* Similar to `build', but for template definitions of non-dependent
1874 expressions. NON_DEP is the non-dependent expression that has been
1875 built. */
1876
1877tree
1878build_min_non_dep (enum tree_code code, tree non_dep, ...)
1879{
926ce8bd
KH
1880 tree t;
1881 int length;
1882 int i;
8e1daa34
NS
1883 va_list p;
1884
5039610b
SL
1885 gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
1886
8e1daa34
NS
1887 va_start (p, non_dep);
1888
1889 t = make_node (code);
1890 length = TREE_CODE_LENGTH (code);
1891 TREE_TYPE (t) = TREE_TYPE (non_dep);
8e1daa34
NS
1892 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1893
1894 for (i = 0; i < length; i++)
1895 {
1896 tree x = va_arg (p, tree);
1897 TREE_OPERAND (t, i) = x;
1898 }
1899
1900 if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
1901 /* This should not be considered a COMPOUND_EXPR, because it
04c06002 1902 resolves to an overload. */
8e1daa34 1903 COMPOUND_EXPR_OVERLOADED (t) = 1;
9f63daea 1904
8e1daa34
NS
1905 va_end (p);
1906 return t;
1907}
1908
3fcb9d1b
NF
1909/* Similar to `build_nt_call_vec', but for template definitions of
1910 non-dependent expressions. NON_DEP is the non-dependent expression
1911 that has been built. */
5039610b
SL
1912
1913tree
c166b898 1914build_min_non_dep_call_vec (tree non_dep, tree fn, VEC(tree,gc) *argvec)
5039610b 1915{
c166b898 1916 tree t = build_nt_call_vec (fn, argvec);
5039610b
SL
1917 TREE_TYPE (t) = TREE_TYPE (non_dep);
1918 TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
1919 return t;
1920}
1921
5566b478 1922tree
b57b79f7 1923get_type_decl (tree t)
5566b478 1924{
5566b478
MS
1925 if (TREE_CODE (t) == TYPE_DECL)
1926 return t;
2f939d94 1927 if (TYPE_P (t))
5566b478 1928 return TYPE_STUB_DECL (t);
315fb5db
NS
1929 gcc_assert (t == error_mark_node);
1930 return t;
5566b478
MS
1931}
1932
700466c2
JM
1933/* Returns the namespace that contains DECL, whether directly or
1934 indirectly. */
1935
1936tree
b57b79f7 1937decl_namespace_context (tree decl)
700466c2
JM
1938{
1939 while (1)
1940 {
1941 if (TREE_CODE (decl) == NAMESPACE_DECL)
1942 return decl;
1943 else if (TYPE_P (decl))
1944 decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
1945 else
1946 decl = CP_DECL_CONTEXT (decl);
1947 }
1948}
1949
b9e75696
JM
1950/* Returns true if decl is within an anonymous namespace, however deeply
1951 nested, or false otherwise. */
1952
1953bool
58f9752a 1954decl_anon_ns_mem_p (const_tree decl)
b9e75696
JM
1955{
1956 while (1)
1957 {
653109bd 1958 if (decl == NULL_TREE || decl == error_mark_node)
b9e75696
JM
1959 return false;
1960 if (TREE_CODE (decl) == NAMESPACE_DECL
1961 && DECL_NAME (decl) == NULL_TREE)
1962 return true;
1963 /* Classes and namespaces inside anonymous namespaces have
1964 TREE_PUBLIC == 0, so we can shortcut the search. */
1965 else if (TYPE_P (decl))
1966 return (TREE_PUBLIC (TYPE_NAME (decl)) == 0);
1967 else if (TREE_CODE (decl) == NAMESPACE_DECL)
1968 return (TREE_PUBLIC (decl) == 0);
1969 else
1970 decl = DECL_CONTEXT (decl);
1971 }
1972}
1973
67d743fe 1974/* Return truthvalue of whether T1 is the same tree structure as T2.
c8a209ca 1975 Return 1 if they are the same. Return 0 if they are different. */
67d743fe 1976
c8a209ca 1977bool
b57b79f7 1978cp_tree_equal (tree t1, tree t2)
67d743fe 1979{
926ce8bd 1980 enum tree_code code1, code2;
67d743fe
MS
1981
1982 if (t1 == t2)
c8a209ca
NS
1983 return true;
1984 if (!t1 || !t2)
1985 return false;
1986
1987 for (code1 = TREE_CODE (t1);
1a87cf0c 1988 CONVERT_EXPR_CODE_P (code1)
c8a209ca
NS
1989 || code1 == NON_LVALUE_EXPR;
1990 code1 = TREE_CODE (t1))
1991 t1 = TREE_OPERAND (t1, 0);
1992 for (code2 = TREE_CODE (t2);
1a87cf0c 1993 CONVERT_EXPR_CODE_P (code2)
c8a209ca
NS
1994 || code1 == NON_LVALUE_EXPR;
1995 code2 = TREE_CODE (t2))
1996 t2 = TREE_OPERAND (t2, 0);
1997
1998 /* They might have become equal now. */
1999 if (t1 == t2)
2000 return true;
9f63daea 2001
67d743fe 2002 if (code1 != code2)
c8a209ca 2003 return false;
67d743fe
MS
2004
2005 switch (code1)
2006 {
2007 case INTEGER_CST:
2008 return TREE_INT_CST_LOW (t1) == TREE_INT_CST_LOW (t2)
2009 && TREE_INT_CST_HIGH (t1) == TREE_INT_CST_HIGH (t2);
2010
2011 case REAL_CST:
2012 return REAL_VALUES_EQUAL (TREE_REAL_CST (t1), TREE_REAL_CST (t2));
2013
2014 case STRING_CST:
2015 return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
da61dec9 2016 && !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
c8a209ca 2017 TREE_STRING_LENGTH (t1));
67d743fe 2018
d05739f8
JM
2019 case FIXED_CST:
2020 return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1),
2021 TREE_FIXED_CST (t2));
2022
2a2193e0
SM
2023 case COMPLEX_CST:
2024 return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
2025 && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
2026
67d743fe 2027 case CONSTRUCTOR:
7dd4bdf5
MM
2028 /* We need to do this when determining whether or not two
2029 non-type pointer to member function template arguments
2030 are the same. */
31d06664
JM
2031 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
2032 || CONSTRUCTOR_NELTS (t1) != CONSTRUCTOR_NELTS (t2))
c8a209ca 2033 return false;
31d06664
JM
2034 {
2035 tree field, value;
2036 unsigned int i;
2037 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1), i, field, value)
2038 {
2039 constructor_elt *elt2 = CONSTRUCTOR_ELT (t2, i);
2040 if (!cp_tree_equal (field, elt2->index)
2041 || !cp_tree_equal (value, elt2->value))
2042 return false;
2043 }
2044 }
2045 return true;
7dd4bdf5
MM
2046
2047 case TREE_LIST:
c8a209ca
NS
2048 if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
2049 return false;
2050 if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
2051 return false;
7dd4bdf5 2052 return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
67d743fe
MS
2053
2054 case SAVE_EXPR:
2055 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
2056
2057 case CALL_EXPR:
5039610b
SL
2058 {
2059 tree arg1, arg2;
2060 call_expr_arg_iterator iter1, iter2;
2061 if (!cp_tree_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
2062 return false;
2063 for (arg1 = first_call_expr_arg (t1, &iter1),
2064 arg2 = first_call_expr_arg (t2, &iter2);
2065 arg1 && arg2;
2066 arg1 = next_call_expr_arg (&iter1),
2067 arg2 = next_call_expr_arg (&iter2))
2068 if (!cp_tree_equal (arg1, arg2))
2069 return false;
96b4a0b5
JM
2070 if (arg1 || arg2)
2071 return false;
2072 return true;
5039610b 2073 }
67d743fe 2074
c8a209ca
NS
2075 case TARGET_EXPR:
2076 {
2077 tree o1 = TREE_OPERAND (t1, 0);
2078 tree o2 = TREE_OPERAND (t2, 0);
9f63daea 2079
c8a209ca
NS
2080 /* Special case: if either target is an unallocated VAR_DECL,
2081 it means that it's going to be unified with whatever the
2082 TARGET_EXPR is really supposed to initialize, so treat it
2083 as being equivalent to anything. */
2084 if (TREE_CODE (o1) == VAR_DECL && DECL_NAME (o1) == NULL_TREE
2085 && !DECL_RTL_SET_P (o1))
2086 /*Nop*/;
2087 else if (TREE_CODE (o2) == VAR_DECL && DECL_NAME (o2) == NULL_TREE
2088 && !DECL_RTL_SET_P (o2))
2089 /*Nop*/;
2090 else if (!cp_tree_equal (o1, o2))
2091 return false;
9f63daea 2092
c8a209ca
NS
2093 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
2094 }
9f63daea 2095
67d743fe 2096 case WITH_CLEANUP_EXPR:
c8a209ca
NS
2097 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2098 return false;
6ad7895a 2099 return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t1, 1));
67d743fe
MS
2100
2101 case COMPONENT_REF:
c8a209ca
NS
2102 if (TREE_OPERAND (t1, 1) != TREE_OPERAND (t2, 1))
2103 return false;
2104 return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
67d743fe 2105
67d743fe 2106 case PARM_DECL:
a77f94e2
JM
2107 /* For comparing uses of parameters in late-specified return types
2108 with an out-of-class definition of the function. */
448545cb 2109 if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
ad909c97 2110 && DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2))
a77f94e2
JM
2111 return true;
2112 else
2113 return false;
2114
2115 case VAR_DECL:
67d743fe
MS
2116 case CONST_DECL:
2117 case FUNCTION_DECL:
c8a209ca
NS
2118 case TEMPLATE_DECL:
2119 case IDENTIFIER_NODE:
47c0c7d7 2120 case SSA_NAME:
c8a209ca 2121 return false;
67d743fe 2122
17a27b4f
MM
2123 case BASELINK:
2124 return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
2125 && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
2126 && cp_tree_equal (BASELINK_FUNCTIONS (t1),
2127 BASELINK_FUNCTIONS (t2)));
2128
f84b4be9 2129 case TEMPLATE_PARM_INDEX:
31758337
NS
2130 return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
2131 && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
9524f710
LE
2132 && (TEMPLATE_PARM_PARAMETER_PACK (t1)
2133 == TEMPLATE_PARM_PARAMETER_PACK (t2))
31758337
NS
2134 && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
2135 TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
67d743fe 2136
bf12d54d
NS
2137 case TEMPLATE_ID_EXPR:
2138 {
2139 unsigned ix;
2140 tree vec1, vec2;
9f63daea 2141
bf12d54d
NS
2142 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2143 return false;
2144 vec1 = TREE_OPERAND (t1, 1);
2145 vec2 = TREE_OPERAND (t2, 1);
2146
2147 if (!vec1 || !vec2)
2148 return !vec1 && !vec2;
9f63daea 2149
bf12d54d
NS
2150 if (TREE_VEC_LENGTH (vec1) != TREE_VEC_LENGTH (vec2))
2151 return false;
2152
2153 for (ix = TREE_VEC_LENGTH (vec1); ix--;)
2154 if (!cp_tree_equal (TREE_VEC_ELT (vec1, ix),
2155 TREE_VEC_ELT (vec2, ix)))
2156 return false;
9f63daea 2157
bf12d54d
NS
2158 return true;
2159 }
9f63daea 2160
67d743fe 2161 case SIZEOF_EXPR:
abff8e06 2162 case ALIGNOF_EXPR:
c8a209ca
NS
2163 {
2164 tree o1 = TREE_OPERAND (t1, 0);
2165 tree o2 = TREE_OPERAND (t2, 0);
9f63daea 2166
c8a209ca
NS
2167 if (TREE_CODE (o1) != TREE_CODE (o2))
2168 return false;
2169 if (TYPE_P (o1))
2170 return same_type_p (o1, o2);
2171 else
2172 return cp_tree_equal (o1, o2);
2173 }
9f63daea 2174
6f9f76e3
SM
2175 case MODOP_EXPR:
2176 {
2177 tree t1_op1, t2_op1;
2178
2179 if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
2180 return false;
2181
2182 t1_op1 = TREE_OPERAND (t1, 1);
2183 t2_op1 = TREE_OPERAND (t2, 1);
2184 if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
2185 return false;
2186
2187 return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
2188 }
2189
61a127b3
MM
2190 case PTRMEM_CST:
2191 /* Two pointer-to-members are the same if they point to the same
2192 field or function in the same class. */
c8a209ca
NS
2193 if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
2194 return false;
2195
2196 return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
61a127b3 2197
943e3ede
MM
2198 case OVERLOAD:
2199 if (OVL_FUNCTION (t1) != OVL_FUNCTION (t2))
2200 return false;
2201 return cp_tree_equal (OVL_CHAIN (t1), OVL_CHAIN (t2));
2202
ea798d0f
PC
2203 case TRAIT_EXPR:
2204 if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
2205 return false;
2206 return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
2207 && same_type_p (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
2208
ab73eba8
JM
2209 case CAST_EXPR:
2210 case STATIC_CAST_EXPR:
2211 case REINTERPRET_CAST_EXPR:
2212 case CONST_CAST_EXPR:
2213 case DYNAMIC_CAST_EXPR:
2214 case NEW_EXPR:
2215 if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
2216 return false;
2217 /* Now compare operands as usual. */
2218 break;
2219
7f85441b
KG
2220 default:
2221 break;
67d743fe
MS
2222 }
2223
2224 switch (TREE_CODE_CLASS (code1))
2225 {
6615c446
JO
2226 case tcc_unary:
2227 case tcc_binary:
2228 case tcc_comparison:
2229 case tcc_expression:
5039610b 2230 case tcc_vl_exp:
6615c446
JO
2231 case tcc_reference:
2232 case tcc_statement:
aa1826e2 2233 {
5039610b
SL
2234 int i, n;
2235
2236 n = TREE_OPERAND_LENGTH (t1);
2237 if (TREE_CODE_CLASS (code1) == tcc_vl_exp
2238 && n != TREE_OPERAND_LENGTH (t2))
2239 return false;
9f63daea 2240
5039610b 2241 for (i = 0; i < n; ++i)
c8a209ca
NS
2242 if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
2243 return false;
9f63daea 2244
c8a209ca 2245 return true;
aa1826e2 2246 }
9f63daea 2247
6615c446 2248 case tcc_type:
c8a209ca 2249 return same_type_p (t1, t2);
6615c446
JO
2250 default:
2251 gcc_unreachable ();
67d743fe 2252 }
6615c446 2253 /* We can get here with --disable-checking. */
c8a209ca 2254 return false;
67d743fe 2255}
73aad9b9 2256
d11ad92e
MS
2257/* The type of ARG when used as an lvalue. */
2258
2259tree
b57b79f7 2260lvalue_type (tree arg)
d11ad92e 2261{
2c73f9f5 2262 tree type = TREE_TYPE (arg);
8cd4c175 2263 return type;
d11ad92e
MS
2264}
2265
2266/* The type of ARG for printing error messages; denote lvalues with
2267 reference types. */
2268
2269tree
b57b79f7 2270error_type (tree arg)
d11ad92e
MS
2271{
2272 tree type = TREE_TYPE (arg);
9f63daea 2273
d11ad92e
MS
2274 if (TREE_CODE (type) == ARRAY_TYPE)
2275 ;
08476342
NS
2276 else if (TREE_CODE (type) == ERROR_MARK)
2277 ;
d11ad92e
MS
2278 else if (real_lvalue_p (arg))
2279 type = build_reference_type (lvalue_type (arg));
9e1e64ec 2280 else if (MAYBE_CLASS_TYPE_P (type))
d11ad92e
MS
2281 type = lvalue_type (arg);
2282
2283 return type;
2284}
eb66be0e
MS
2285
2286/* Does FUNCTION use a variable-length argument list? */
2287
2288int
58f9752a 2289varargs_function_p (const_tree function)
eb66be0e 2290{
f38958e8 2291 return stdarg_p (TREE_TYPE (function));
eb66be0e 2292}
f94ae2f5
JM
2293
2294/* Returns 1 if decl is a member of a class. */
2295
2296int
58f9752a 2297member_p (const_tree decl)
f94ae2f5 2298{
58f9752a 2299 const_tree const ctx = DECL_CONTEXT (decl);
2f939d94 2300 return (ctx && TYPE_P (ctx));
f94ae2f5 2301}
51924768
JM
2302
2303/* Create a placeholder for member access where we don't actually have an
2304 object that the access is against. */
2305
2306tree
b57b79f7 2307build_dummy_object (tree type)
51924768 2308{
44689c12 2309 tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
dd865ef6 2310 return cp_build_indirect_ref (decl, RO_NULL, tf_warning_or_error);
51924768
JM
2311}
2312
2313/* We've gotten a reference to a member of TYPE. Return *this if appropriate,
2314 or a dummy object otherwise. If BINFOP is non-0, it is filled with the
2315 binfo path from current_class_type to TYPE, or 0. */
2316
2317tree
b57b79f7 2318maybe_dummy_object (tree type, tree* binfop)
51924768
JM
2319{
2320 tree decl, context;
2db1ab2d 2321 tree binfo;
a6846853 2322 tree current = current_nonlambda_class_type ();
9f63daea 2323
a6846853
JM
2324 if (current
2325 && (binfo = lookup_base (current, type, ba_any, NULL)))
2326 context = current;
51924768
JM
2327 else
2328 {
2329 /* Reference from a nested class member function. */
2330 context = type;
2db1ab2d 2331 binfo = TYPE_BINFO (type);
51924768
JM
2332 }
2333
2db1ab2d
NS
2334 if (binfop)
2335 *binfop = binfo;
9f63daea 2336
a29e1034 2337 if (current_class_ref && context == current_class_type
3ebf5204 2338 /* Kludge: Make sure that current_class_type is actually
0cbd7506
MS
2339 correct. It might not be if we're in the middle of
2340 tsubst_default_argument. */
a29e1034
JM
2341 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)),
2342 current_class_type))
51924768 2343 decl = current_class_ref;
a6846853
JM
2344 else if (current != current_class_type
2345 && context == nonlambda_method_basetype ())
2346 /* In a lambda, need to go through 'this' capture. */
2347 decl = (cp_build_indirect_ref
2348 ((lambda_expr_this_capture
2349 (CLASSTYPE_LAMBDA_EXPR (current_class_type))),
2350 RO_NULL, tf_warning_or_error));
51924768
JM
2351 else
2352 decl = build_dummy_object (context);
2353
2354 return decl;
2355}
2356
2357/* Returns 1 if OB is a placeholder object, or a pointer to one. */
2358
2359int
58f9752a 2360is_dummy_object (const_tree ob)
51924768
JM
2361{
2362 if (TREE_CODE (ob) == INDIRECT_REF)
2363 ob = TREE_OPERAND (ob, 0);
2364 return (TREE_CODE (ob) == NOP_EXPR
44689c12 2365 && TREE_OPERAND (ob, 0) == void_zero_node);
51924768 2366}
5524676d 2367
c32097d8
JM
2368/* Returns 1 iff type T is something we want to treat as a scalar type for
2369 the purpose of deciding whether it is trivial/POD/standard-layout. */
2370
2371static bool
2372scalarish_type_p (const_tree t)
2373{
2374 if (t == error_mark_node)
2375 return 1;
2376
2377 return (SCALAR_TYPE_P (t)
2378 || TREE_CODE (t) == VECTOR_TYPE);
2379}
2380
2381/* Returns true iff T requires non-trivial default initialization. */
2382
2383bool
2384type_has_nontrivial_default_init (const_tree t)
2385{
2386 t = strip_array_types (CONST_CAST_TREE (t));
2387
2388 if (CLASS_TYPE_P (t))
2389 return TYPE_HAS_COMPLEX_DFLT (t);
2390 else
2391 return 0;
2392}
2393
d758e847
JM
2394/* Returns true iff copying an object of type T (including via move
2395 constructor) is non-trivial. That is, T has no non-trivial copy
2396 constructors and no non-trivial move constructors. */
c32097d8
JM
2397
2398bool
2399type_has_nontrivial_copy_init (const_tree t)
2400{
2401 t = strip_array_types (CONST_CAST_TREE (t));
2402
2403 if (CLASS_TYPE_P (t))
d758e847
JM
2404 {
2405 gcc_assert (COMPLETE_TYPE_P (t));
2406 return ((TYPE_HAS_COPY_CTOR (t)
2407 && TYPE_HAS_COMPLEX_COPY_CTOR (t))
2408 || TYPE_HAS_COMPLEX_MOVE_CTOR (t));
2409 }
c32097d8
JM
2410 else
2411 return 0;
2412}
2413
46408846
JM
2414/* Returns 1 iff type T is a trivially copyable type, as defined in
2415 [basic.types] and [class]. */
c32097d8
JM
2416
2417bool
46408846 2418trivially_copyable_p (const_tree t)
c32097d8
JM
2419{
2420 t = strip_array_types (CONST_CAST_TREE (t));
2421
2422 if (CLASS_TYPE_P (t))
d758e847
JM
2423 return ((!TYPE_HAS_COPY_CTOR (t)
2424 || !TYPE_HAS_COMPLEX_COPY_CTOR (t))
2425 && !TYPE_HAS_COMPLEX_MOVE_CTOR (t)
2426 && (!TYPE_HAS_COPY_ASSIGN (t)
2427 || !TYPE_HAS_COMPLEX_COPY_ASSIGN (t))
2428 && !TYPE_HAS_COMPLEX_MOVE_ASSIGN (t)
334738b4 2429 && TYPE_HAS_TRIVIAL_DESTRUCTOR (t));
c32097d8
JM
2430 else
2431 return scalarish_type_p (t);
2432}
2433
46408846
JM
2434/* Returns 1 iff type T is a trivial type, as defined in [basic.types] and
2435 [class]. */
2436
2437bool
2438trivial_type_p (const_tree t)
2439{
2440 t = strip_array_types (CONST_CAST_TREE (t));
2441
2442 if (CLASS_TYPE_P (t))
2443 return (TYPE_HAS_TRIVIAL_DFLT (t)
2444 && trivially_copyable_p (t));
2445 else
2446 return scalarish_type_p (t);
2447}
2448
5524676d
JM
2449/* Returns 1 iff type T is a POD type, as defined in [basic.types]. */
2450
c32097d8 2451bool
58f9752a 2452pod_type_p (const_tree t)
5524676d 2453{
4e9b57fa 2454 /* This CONST_CAST is okay because strip_array_types returns its
75547801 2455 argument unmodified and we assign it to a const_tree. */
b1d5455a 2456 t = strip_array_types (CONST_CAST_TREE(t));
5524676d 2457
cc72bbaa
JM
2458 if (!CLASS_TYPE_P (t))
2459 return scalarish_type_p (t);
2460 else if (cxx_dialect > cxx98)
c32097d8
JM
2461 /* [class]/10: A POD struct is a class that is both a trivial class and a
2462 standard-layout class, and has no non-static data members of type
2463 non-POD struct, non-POD union (or array of such types).
2464
2465 We don't need to check individual members because if a member is
2466 non-std-layout or non-trivial, the class will be too. */
2467 return (std_layout_type_p (t) && trivial_type_p (t));
2468 else
cc72bbaa
JM
2469 /* The C++98 definition of POD is different. */
2470 return !CLASSTYPE_NON_LAYOUT_POD_P (t);
c32097d8
JM
2471}
2472
2473/* Returns true iff T is POD for the purpose of layout, as defined in the
2474 C++ ABI. */
2475
2476bool
2477layout_pod_type_p (const_tree t)
2478{
2479 t = strip_array_types (CONST_CAST_TREE (t));
2480
2481 if (CLASS_TYPE_P (t))
2482 return !CLASSTYPE_NON_LAYOUT_POD_P (t);
2483 else
2484 return scalarish_type_p (t);
2485}
2486
2487/* Returns true iff T is a standard-layout type, as defined in
2488 [basic.types]. */
2489
2490bool
2491std_layout_type_p (const_tree t)
2492{
2493 t = strip_array_types (CONST_CAST_TREE (t));
2494
2495 if (CLASS_TYPE_P (t))
2496 return !CLASSTYPE_NON_STD_LAYOUT (t);
2497 else
2498 return scalarish_type_p (t);
5524676d 2499}
e5dc5fb2 2500
39ef6592
LC
2501/* Nonzero iff type T is a class template implicit specialization. */
2502
2503bool
ac7d7749 2504class_tmpl_impl_spec_p (const_tree t)
39ef6592
LC
2505{
2506 return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
2507}
2508
94e6e4c4
AO
2509/* Returns 1 iff zero initialization of type T means actually storing
2510 zeros in it. */
2511
2512int
58f9752a 2513zero_init_p (const_tree t)
94e6e4c4 2514{
4e9b57fa 2515 /* This CONST_CAST is okay because strip_array_types returns its
75547801 2516 argument unmodified and we assign it to a const_tree. */
b1d5455a 2517 t = strip_array_types (CONST_CAST_TREE(t));
94e6e4c4 2518
17bbb839
MM
2519 if (t == error_mark_node)
2520 return 1;
2521
94e6e4c4
AO
2522 /* NULL pointers to data members are initialized with -1. */
2523 if (TYPE_PTRMEM_P (t))
2524 return 0;
2525
2526 /* Classes that contain types that can't be zero-initialized, cannot
2527 be zero-initialized themselves. */
2528 if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
2529 return 0;
2530
2531 return 1;
2532}
2533
91d231cb 2534/* Table of valid C++ attributes. */
349ae713 2535const struct attribute_spec cxx_attribute_table[] =
e5dc5fb2 2536{
91d231cb
JM
2537 /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
2538 { "java_interface", 0, 0, false, false, false, handle_java_interface_attribute },
2539 { "com_interface", 0, 0, false, false, false, handle_com_interface_attribute },
2540 { "init_priority", 1, 1, true, false, false, handle_init_priority_attribute },
0cbd7506 2541 { NULL, 0, 0, false, false, false, NULL }
91d231cb
JM
2542};
2543
2544/* Handle a "java_interface" attribute; arguments as in
2545 struct attribute_spec.handler. */
2546static tree
9f63daea 2547handle_java_interface_attribute (tree* node,
0cbd7506
MS
2548 tree name,
2549 tree args ATTRIBUTE_UNUSED ,
2550 int flags,
2551 bool* no_add_attrs)
91d231cb
JM
2552{
2553 if (DECL_P (*node)
2554 || !CLASS_TYPE_P (*node)
2555 || !TYPE_FOR_JAVA (*node))
60c87482 2556 {
a82e1a7d 2557 error ("%qE attribute can only be applied to Java class definitions",
4460cef2 2558 name);
91d231cb
JM
2559 *no_add_attrs = true;
2560 return NULL_TREE;
60c87482 2561 }
91d231cb 2562 if (!(flags & (int) ATTR_FLAG_TYPE_IN_PLACE))
8dd16ecc 2563 *node = build_variant_type_copy (*node);
91d231cb 2564 TYPE_JAVA_INTERFACE (*node) = 1;
e5dc5fb2 2565
91d231cb
JM
2566 return NULL_TREE;
2567}
2568
2569/* Handle a "com_interface" attribute; arguments as in
2570 struct attribute_spec.handler. */
2571static tree
9f63daea 2572handle_com_interface_attribute (tree* node,
0cbd7506
MS
2573 tree name,
2574 tree args ATTRIBUTE_UNUSED ,
2575 int flags ATTRIBUTE_UNUSED ,
2576 bool* no_add_attrs)
91d231cb
JM
2577{
2578 static int warned;
2579
2580 *no_add_attrs = true;
2581
2582 if (DECL_P (*node)
2583 || !CLASS_TYPE_P (*node)
2584 || *node != TYPE_MAIN_VARIANT (*node))
e5dc5fb2 2585 {
5c498b10
DD
2586 warning (OPT_Wattributes, "%qE attribute can only be applied "
2587 "to class definitions", name);
91d231cb
JM
2588 return NULL_TREE;
2589 }
e5dc5fb2 2590
91d231cb 2591 if (!warned++)
d4ee4d25 2592 warning (0, "%qE is obsolete; g++ vtables are now COM-compatible by default",
4460cef2 2593 name);
91d231cb
JM
2594
2595 return NULL_TREE;
2596}
2597
2598/* Handle an "init_priority" attribute; arguments as in
2599 struct attribute_spec.handler. */
2600static tree
9f63daea 2601handle_init_priority_attribute (tree* node,
0cbd7506
MS
2602 tree name,
2603 tree args,
2604 int flags ATTRIBUTE_UNUSED ,
2605 bool* no_add_attrs)
91d231cb
JM
2606{
2607 tree initp_expr = TREE_VALUE (args);
2608 tree decl = *node;
2609 tree type = TREE_TYPE (decl);
2610 int pri;
2611
2612 STRIP_NOPS (initp_expr);
9f63daea 2613
91d231cb
JM
2614 if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
2615 {
2616 error ("requested init_priority is not an integer constant");
2617 *no_add_attrs = true;
2618 return NULL_TREE;
2619 }
e5dc5fb2 2620
91d231cb 2621 pri = TREE_INT_CST_LOW (initp_expr);
9f63daea 2622
91d231cb
JM
2623 type = strip_array_types (type);
2624
2625 if (decl == NULL_TREE
2626 || TREE_CODE (decl) != VAR_DECL
2627 || !TREE_STATIC (decl)
2628 || DECL_EXTERNAL (decl)
2629 || (TREE_CODE (type) != RECORD_TYPE
2630 && TREE_CODE (type) != UNION_TYPE)
2631 /* Static objects in functions are initialized the
2632 first time control passes through that
2633 function. This is not precise enough to pin down an
c6002625 2634 init_priority value, so don't allow it. */
9f63daea 2635 || current_function_decl)
91d231cb 2636 {
a82e1a7d 2637 error ("can only use %qE attribute on file-scope definitions "
0cbd7506 2638 "of objects of class type", name);
91d231cb
JM
2639 *no_add_attrs = true;
2640 return NULL_TREE;
2641 }
e5dc5fb2 2642
91d231cb
JM
2643 if (pri > MAX_INIT_PRIORITY || pri <= 0)
2644 {
2645 error ("requested init_priority is out of range");
2646 *no_add_attrs = true;
2647 return NULL_TREE;
2648 }
e5dc5fb2 2649
91d231cb
JM
2650 /* Check for init_priorities that are reserved for
2651 language and runtime support implementations.*/
2652 if (pri <= MAX_RESERVED_INIT_PRIORITY)
2653 {
9f63daea 2654 warning
d4ee4d25 2655 (0, "requested init_priority is reserved for internal use");
e5dc5fb2
JM
2656 }
2657
91d231cb
JM
2658 if (SUPPORTS_INIT_PRIORITY)
2659 {
820cc88f
DB
2660 SET_DECL_INIT_PRIORITY (decl, pri);
2661 DECL_HAS_INIT_PRIORITY_P (decl) = 1;
91d231cb
JM
2662 return NULL_TREE;
2663 }
2664 else
2665 {
a82e1a7d 2666 error ("%qE attribute is not supported on this platform", name);
91d231cb
JM
2667 *no_add_attrs = true;
2668 return NULL_TREE;
2669 }
e5dc5fb2 2670}
87533b37
MM
2671
2672/* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the
2673 thing pointed to by the constant. */
2674
2675tree
b57b79f7 2676make_ptrmem_cst (tree type, tree member)
87533b37
MM
2677{
2678 tree ptrmem_cst = make_node (PTRMEM_CST);
87533b37
MM
2679 TREE_TYPE (ptrmem_cst) = type;
2680 PTRMEM_CST_MEMBER (ptrmem_cst) = member;
2681 return ptrmem_cst;
2682}
2683
e9525111 2684/* Build a variant of TYPE that has the indicated ATTRIBUTES. May
51035976 2685 return an existing type if an appropriate type already exists. */
e9525111
MM
2686
2687tree
2688cp_build_type_attribute_variant (tree type, tree attributes)
2689{
2690 tree new_type;
2691
2692 new_type = build_type_attribute_variant (type, attributes);
3a55fb4c
JM
2693 if (TREE_CODE (new_type) == FUNCTION_TYPE
2694 || TREE_CODE (new_type) == METHOD_TYPE)
e9525111
MM
2695 new_type = build_exception_variant (new_type,
2696 TYPE_RAISES_EXCEPTIONS (type));
8e30dcf3
JM
2697
2698 /* Making a new main variant of a class type is broken. */
2699 gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
2700
e9525111
MM
2701 return new_type;
2702}
2703
2dff8956
JJ
2704/* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
2705 Called only after doing all language independent checks. Only
2706 to check TYPE_RAISES_EXCEPTIONS for FUNCTION_TYPE, the rest is already
2707 compared in type_hash_eq. */
2708
2709bool
2710cxx_type_hash_eq (const_tree typea, const_tree typeb)
2711{
2712 gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE);
2713
2714 return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
3a55fb4c 2715 TYPE_RAISES_EXCEPTIONS (typeb), ce_exact);
2dff8956
JJ
2716}
2717
25af8512 2718/* Apply FUNC to all language-specific sub-trees of TP in a pre-order
350fae66 2719 traversal. Called from walk_tree. */
25af8512 2720
9f63daea 2721tree
350fae66 2722cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
0c58f841 2723 void *data, struct pointer_set_t *pset)
25af8512
AO
2724{
2725 enum tree_code code = TREE_CODE (*tp);
2726 tree result;
9f63daea 2727
25af8512
AO
2728#define WALK_SUBTREE(NODE) \
2729 do \
2730 { \
14588106 2731 result = cp_walk_tree (&(NODE), func, data, pset); \
6de9cd9a 2732 if (result) goto out; \
25af8512
AO
2733 } \
2734 while (0)
2735
2736 /* Not one of the easy cases. We must explicitly go through the
2737 children. */
6de9cd9a 2738 result = NULL_TREE;
25af8512
AO
2739 switch (code)
2740 {
2741 case DEFAULT_ARG:
2742 case TEMPLATE_TEMPLATE_PARM:
2743 case BOUND_TEMPLATE_TEMPLATE_PARM:
b8c6534b 2744 case UNBOUND_CLASS_TEMPLATE:
25af8512
AO
2745 case TEMPLATE_PARM_INDEX:
2746 case TEMPLATE_TYPE_PARM:
2747 case TYPENAME_TYPE:
2748 case TYPEOF_TYPE:
da1d7781 2749 /* None of these have subtrees other than those already walked
0cbd7506 2750 above. */
25af8512
AO
2751 *walk_subtrees_p = 0;
2752 break;
2753
5d80a306
DG
2754 case BASELINK:
2755 WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
2756 *walk_subtrees_p = 0;
2757 break;
2758
25af8512
AO
2759 case PTRMEM_CST:
2760 WALK_SUBTREE (TREE_TYPE (*tp));
2761 *walk_subtrees_p = 0;
2762 break;
2763
2764 case TREE_LIST:
5dae1114 2765 WALK_SUBTREE (TREE_PURPOSE (*tp));
25af8512
AO
2766 break;
2767
2768 case OVERLOAD:
2769 WALK_SUBTREE (OVL_FUNCTION (*tp));
2770 WALK_SUBTREE (OVL_CHAIN (*tp));
2771 *walk_subtrees_p = 0;
4439d02f
DG
2772 break;
2773
2774 case USING_DECL:
2775 WALK_SUBTREE (DECL_NAME (*tp));
2776 WALK_SUBTREE (USING_DECL_SCOPE (*tp));
2777 WALK_SUBTREE (USING_DECL_DECLS (*tp));
2778 *walk_subtrees_p = 0;
25af8512
AO
2779 break;
2780
2781 case RECORD_TYPE:
2782 if (TYPE_PTRMEMFUNC_P (*tp))
2783 WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (*tp));
2784 break;
2785
5d80a306
DG
2786 case TYPE_ARGUMENT_PACK:
2787 case NONTYPE_ARGUMENT_PACK:
2788 {
2789 tree args = ARGUMENT_PACK_ARGS (*tp);
2790 int i, len = TREE_VEC_LENGTH (args);
2791 for (i = 0; i < len; i++)
2792 WALK_SUBTREE (TREE_VEC_ELT (args, i));
2793 }
2794 break;
2795
2796 case TYPE_PACK_EXPANSION:
2797 WALK_SUBTREE (TREE_TYPE (*tp));
2798 *walk_subtrees_p = 0;
2799 break;
2800
2801 case EXPR_PACK_EXPANSION:
2802 WALK_SUBTREE (TREE_OPERAND (*tp, 0));
2803 *walk_subtrees_p = 0;
2804 break;
2805
2806 case CAST_EXPR:
a7cbc517
JJ
2807 case REINTERPRET_CAST_EXPR:
2808 case STATIC_CAST_EXPR:
2809 case CONST_CAST_EXPR:
2810 case DYNAMIC_CAST_EXPR:
5d80a306
DG
2811 if (TREE_TYPE (*tp))
2812 WALK_SUBTREE (TREE_TYPE (*tp));
2813
2814 {
2815 int i;
2816 for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
2817 WALK_SUBTREE (TREE_OPERAND (*tp, i));
2818 }
2819 *walk_subtrees_p = 0;
2820 break;
2821
cb68ec50
PC
2822 case TRAIT_EXPR:
2823 WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
2824 WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
2825 *walk_subtrees_p = 0;
2826 break;
2827
3ad6a8e1
DG
2828 case DECLTYPE_TYPE:
2829 WALK_SUBTREE (DECLTYPE_TYPE_EXPR (*tp));
2830 *walk_subtrees_p = 0;
2831 break;
2832
2833
25af8512 2834 default:
350fae66 2835 return NULL_TREE;
25af8512
AO
2836 }
2837
2838 /* We didn't find what we were looking for. */
6de9cd9a 2839 out:
6de9cd9a 2840 return result;
25af8512
AO
2841
2842#undef WALK_SUBTREE
2843}
2844
b655f214
MM
2845/* Like save_expr, but for C++. */
2846
2847tree
2848cp_save_expr (tree expr)
2849{
2850 /* There is no reason to create a SAVE_EXPR within a template; if
2851 needed, we can create the SAVE_EXPR when instantiating the
2852 template. Furthermore, the middle-end cannot handle C++-specific
2853 tree codes. */
2854 if (processing_template_decl)
2855 return expr;
2856 return save_expr (expr);
2857}
2858
87e3dbc9
MM
2859/* Initialize tree.c. */
2860
0a818f84 2861void
b57b79f7 2862init_tree (void)
0a818f84 2863{
e2500fed 2864 list_hash_table = htab_create_ggc (31, list_hash, list_hash_eq, NULL);
0a818f84
GRK
2865}
2866
872f37f9 2867/* Returns the kind of special function that DECL (a FUNCTION_DECL)
50ad9642
MM
2868 is. Note that sfk_none is zero, so this function can be used as a
2869 predicate to test whether or not DECL is a special function. */
872f37f9
MM
2870
2871special_function_kind
58f9752a 2872special_function_p (const_tree decl)
872f37f9
MM
2873{
2874 /* Rather than doing all this stuff with magic names, we should
2875 probably have a field of type `special_function_kind' in
2876 DECL_LANG_SPECIFIC. */
2877 if (DECL_COPY_CONSTRUCTOR_P (decl))
2878 return sfk_copy_constructor;
d5f4eddd
JM
2879 if (DECL_MOVE_CONSTRUCTOR_P (decl))
2880 return sfk_move_constructor;
872f37f9
MM
2881 if (DECL_CONSTRUCTOR_P (decl))
2882 return sfk_constructor;
596ea4e5 2883 if (DECL_OVERLOADED_OPERATOR_P (decl) == NOP_EXPR)
ac177431
JM
2884 {
2885 if (copy_fn_p (decl))
2886 return sfk_copy_assignment;
2887 if (move_fn_p (decl))
2888 return sfk_move_assignment;
2889 }
872f37f9
MM
2890 if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2891 return sfk_destructor;
2892 if (DECL_COMPLETE_DESTRUCTOR_P (decl))
2893 return sfk_complete_destructor;
2894 if (DECL_BASE_DESTRUCTOR_P (decl))
2895 return sfk_base_destructor;
2896 if (DECL_DELETING_DESTRUCTOR_P (decl))
2897 return sfk_deleting_destructor;
2898 if (DECL_CONV_FN_P (decl))
2899 return sfk_conversion;
2900
2901 return sfk_none;
2902}
7b019c19 2903
838dfd8a 2904/* Returns nonzero if TYPE is a character type, including wchar_t. */
7b019c19
MM
2905
2906int
b57b79f7 2907char_type_p (tree type)
7b019c19
MM
2908{
2909 return (same_type_p (type, char_type_node)
2910 || same_type_p (type, unsigned_char_type_node)
2911 || same_type_p (type, signed_char_type_node)
b6baa67d
KVH
2912 || same_type_p (type, char16_type_node)
2913 || same_type_p (type, char32_type_node)
7b019c19
MM
2914 || same_type_p (type, wchar_type_node));
2915}
ad50e811
MM
2916
2917/* Returns the kind of linkage associated with the indicated DECL. Th
2918 value returned is as specified by the language standard; it is
2919 independent of implementation details regarding template
2920 instantiation, etc. For example, it is possible that a declaration
2921 to which this function assigns external linkage would not show up
2922 as a global symbol when you run `nm' on the resulting object file. */
2923
2924linkage_kind
b57b79f7 2925decl_linkage (tree decl)
ad50e811
MM
2926{
2927 /* This function doesn't attempt to calculate the linkage from first
2928 principles as given in [basic.link]. Instead, it makes use of
2929 the fact that we have already set TREE_PUBLIC appropriately, and
2930 then handles a few special cases. Ideally, we would calculate
2931 linkage first, and then transform that into a concrete
2932 implementation. */
2933
2934 /* Things that don't have names have no linkage. */
2935 if (!DECL_NAME (decl))
2936 return lk_none;
2937
c02cdc25
TT
2938 /* Fields have no linkage. */
2939 if (TREE_CODE (decl) == FIELD_DECL)
2940 return lk_none;
2941
ad50e811
MM
2942 /* Things that are TREE_PUBLIC have external linkage. */
2943 if (TREE_PUBLIC (decl))
2944 return lk_external;
3db45ab5 2945
b70f0f48
JM
2946 if (TREE_CODE (decl) == NAMESPACE_DECL)
2947 return lk_external;
2948
3db45ab5 2949 /* Linkage of a CONST_DECL depends on the linkage of the enumeration
3f774254
DB
2950 type. */
2951 if (TREE_CODE (decl) == CONST_DECL)
2952 return decl_linkage (TYPE_NAME (TREE_TYPE (decl)));
ad50e811
MM
2953
2954 /* Some things that are not TREE_PUBLIC have external linkage, too.
2955 For example, on targets that don't have weak symbols, we make all
2956 template instantiations have internal linkage (in the object
2957 file), but the symbols should still be treated as having external
2958 linkage from the point of view of the language. */
ad909c97
JM
2959 if ((TREE_CODE (decl) == FUNCTION_DECL
2960 || TREE_CODE (decl) == VAR_DECL)
b9e75696 2961 && DECL_COMDAT (decl))
ad50e811
MM
2962 return lk_external;
2963
2964 /* Things in local scope do not have linkage, if they don't have
2965 TREE_PUBLIC set. */
2966 if (decl_function_context (decl))
2967 return lk_none;
2968
b70f0f48
JM
2969 /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
2970 are considered to have external linkage for language purposes. DECLs
2971 really meant to have internal linkage have DECL_THIS_STATIC set. */
ce41114b 2972 if (TREE_CODE (decl) == TYPE_DECL)
b70f0f48 2973 return lk_external;
ce41114b
JJ
2974 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == FUNCTION_DECL)
2975 {
2976 if (!DECL_THIS_STATIC (decl))
2977 return lk_external;
2978
2979 /* Static data members and static member functions from classes
2980 in anonymous namespace also don't have TREE_PUBLIC set. */
2981 if (DECL_CLASS_CONTEXT (decl))
2982 return lk_external;
2983 }
b70f0f48 2984
ad50e811
MM
2985 /* Everything else has internal linkage. */
2986 return lk_internal;
2987}
b95ca513
JM
2988
2989/* Returns the storage duration of the object or reference associated with
2990 the indicated DECL, which should be a VAR_DECL or PARM_DECL. */
2991
2992duration_kind
2993decl_storage_duration (tree decl)
2994{
2995 if (TREE_CODE (decl) == PARM_DECL)
2996 return dk_auto;
2997 if (TREE_CODE (decl) == FUNCTION_DECL)
2998 return dk_static;
2999 gcc_assert (TREE_CODE (decl) == VAR_DECL);
3000 if (!TREE_STATIC (decl)
3001 && !DECL_EXTERNAL (decl))
3002 return dk_auto;
3003 if (DECL_THREAD_LOCAL_P (decl))
3004 return dk_thread;
3005 return dk_static;
3006}
6f30f1f1 3007\f
9beafc83
MM
3008/* EXP is an expression that we want to pre-evaluate. Returns (in
3009 *INITP) an expression that will perform the pre-evaluation. The
3010 value returned by this function is a side-effect free expression
3011 equivalent to the pre-evaluated expression. Callers must ensure
3012 that *INITP is evaluated before EXP. */
6f30f1f1
JM
3013
3014tree
b57b79f7 3015stabilize_expr (tree exp, tree* initp)
6f30f1f1
JM
3016{
3017 tree init_expr;
3018
3019 if (!TREE_SIDE_EFFECTS (exp))
9beafc83 3020 init_expr = NULL_TREE;
6f30f1f1
JM
3021 else if (!real_lvalue_p (exp)
3022 || !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (exp)))
3023 {
3024 init_expr = get_target_expr (exp);
3025 exp = TARGET_EXPR_SLOT (init_expr);
3026 }
3027 else
3028 {
93c0e0bb 3029 exp = cp_build_addr_expr (exp, tf_warning_or_error);
6f30f1f1
JM
3030 init_expr = get_target_expr (exp);
3031 exp = TARGET_EXPR_SLOT (init_expr);
dd865ef6 3032 exp = cp_build_indirect_ref (exp, RO_NULL, tf_warning_or_error);
6f30f1f1 3033 }
6f30f1f1 3034 *initp = init_expr;
9beafc83
MM
3035
3036 gcc_assert (!TREE_SIDE_EFFECTS (exp));
6f30f1f1
JM
3037 return exp;
3038}
6de9cd9a 3039
be93747e 3040/* Add NEW_EXPR, an expression whose value we don't care about, after the
40aac948
JM
3041 similar expression ORIG. */
3042
3043tree
be93747e 3044add_stmt_to_compound (tree orig, tree new_expr)
40aac948 3045{
be93747e 3046 if (!new_expr || !TREE_SIDE_EFFECTS (new_expr))
40aac948
JM
3047 return orig;
3048 if (!orig || !TREE_SIDE_EFFECTS (orig))
be93747e
KG
3049 return new_expr;
3050 return build2 (COMPOUND_EXPR, void_type_node, orig, new_expr);
40aac948
JM
3051}
3052
9beafc83
MM
3053/* Like stabilize_expr, but for a call whose arguments we want to
3054 pre-evaluate. CALL is modified in place to use the pre-evaluated
3055 arguments, while, upon return, *INITP contains an expression to
3056 compute the arguments. */
6de9cd9a
DN
3057
3058void
3059stabilize_call (tree call, tree *initp)
3060{
3061 tree inits = NULL_TREE;
5039610b
SL
3062 int i;
3063 int nargs = call_expr_nargs (call);
6de9cd9a 3064
28267cfc
JJ
3065 if (call == error_mark_node || processing_template_decl)
3066 {
3067 *initp = NULL_TREE;
3068 return;
3069 }
6de9cd9a 3070
5039610b 3071 gcc_assert (TREE_CODE (call) == CALL_EXPR);
6de9cd9a 3072
5039610b
SL
3073 for (i = 0; i < nargs; i++)
3074 {
3075 tree init;
3076 CALL_EXPR_ARG (call, i) =
3077 stabilize_expr (CALL_EXPR_ARG (call, i), &init);
3078 inits = add_stmt_to_compound (inits, init);
3079 }
3080
3081 *initp = inits;
3082}
3083
3084/* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
3085 to pre-evaluate. CALL is modified in place to use the pre-evaluated
3086 arguments, while, upon return, *INITP contains an expression to
3087 compute the arguments. */
3088
3089void
3090stabilize_aggr_init (tree call, tree *initp)
3091{
3092 tree inits = NULL_TREE;
3093 int i;
3094 int nargs = aggr_init_expr_nargs (call);
3095
3096 if (call == error_mark_node)
3097 return;
3098
3099 gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
3100
3101 for (i = 0; i < nargs; i++)
3102 {
3103 tree init;
3104 AGGR_INIT_EXPR_ARG (call, i) =
3105 stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
3106 inits = add_stmt_to_compound (inits, init);
3107 }
6de9cd9a
DN
3108
3109 *initp = inits;
3110}
3111
9beafc83
MM
3112/* Like stabilize_expr, but for an initialization.
3113
3114 If the initialization is for an object of class type, this function
3115 takes care not to introduce additional temporaries.
3116
3117 Returns TRUE iff the expression was successfully pre-evaluated,
3118 i.e., if INIT is now side-effect free, except for, possible, a
3119 single call to a constructor. */
6de9cd9a
DN
3120
3121bool
3122stabilize_init (tree init, tree *initp)
3123{
3124 tree t = init;
3125
9beafc83
MM
3126 *initp = NULL_TREE;
3127
28267cfc 3128 if (t == error_mark_node || processing_template_decl)
6de9cd9a
DN
3129 return true;
3130
3131 if (TREE_CODE (t) == INIT_EXPR
844ae01d
JM
3132 && TREE_CODE (TREE_OPERAND (t, 1)) != TARGET_EXPR
3133 && TREE_CODE (TREE_OPERAND (t, 1)) != AGGR_INIT_EXPR)
6de9cd9a 3134 {
9beafc83
MM
3135 TREE_OPERAND (t, 1) = stabilize_expr (TREE_OPERAND (t, 1), initp);
3136 return true;
3137 }
6de9cd9a 3138
9beafc83
MM
3139 if (TREE_CODE (t) == INIT_EXPR)
3140 t = TREE_OPERAND (t, 1);
3141 if (TREE_CODE (t) == TARGET_EXPR)
3142 t = TARGET_EXPR_INITIAL (t);
3143 if (TREE_CODE (t) == COMPOUND_EXPR)
3144 t = expr_last (t);
3145 if (TREE_CODE (t) == CONSTRUCTOR
3146 && EMPTY_CONSTRUCTOR_P (t))
3147 /* Default-initialization. */
3148 return true;
3149
3150 /* If the initializer is a COND_EXPR, we can't preevaluate
3151 anything. */
3152 if (TREE_CODE (t) == COND_EXPR)
3153 return false;
6de9cd9a 3154
5039610b 3155 if (TREE_CODE (t) == CALL_EXPR)
9beafc83
MM
3156 {
3157 stabilize_call (t, initp);
3158 return true;
6de9cd9a
DN
3159 }
3160
5039610b
SL
3161 if (TREE_CODE (t) == AGGR_INIT_EXPR)
3162 {
3163 stabilize_aggr_init (t, initp);
3164 return true;
3165 }
3166
9beafc83
MM
3167 /* The initialization is being performed via a bitwise copy -- and
3168 the item copied may have side effects. */
3169 return TREE_SIDE_EFFECTS (init);
6de9cd9a
DN
3170}
3171
455f19cb
MM
3172/* Like "fold", but should be used whenever we might be processing the
3173 body of a template. */
3174
3175tree
3176fold_if_not_in_template (tree expr)
3177{
3178 /* In the body of a template, there is never any need to call
3179 "fold". We will call fold later when actually instantiating the
3180 template. Integral constant expressions in templates will be
f9f1c24e 3181 evaluated via fold_non_dependent_expr, as necessary. */
392e3d51
RS
3182 if (processing_template_decl)
3183 return expr;
3184
3185 /* Fold C++ front-end specific tree codes. */
3186 if (TREE_CODE (expr) == UNARY_PLUS_EXPR)
3187 return fold_convert (TREE_TYPE (expr), TREE_OPERAND (expr, 0));
3188
3189 return fold (expr);
455f19cb
MM
3190}
3191
015c2c66
MM
3192/* Returns true if a cast to TYPE may appear in an integral constant
3193 expression. */
3194
3195bool
3196cast_valid_in_integral_constant_expression_p (tree type)
3197{
3198 return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
3199 || dependent_type_p (type)
3200 || type == error_mark_node);
3201}
3202
4537ec0c
DN
3203/* Return true if we need to fix linkage information of DECL. */
3204
3205static bool
3206cp_fix_function_decl_p (tree decl)
3207{
3208 /* Skip if DECL is not externally visible. */
3209 if (!TREE_PUBLIC (decl))
3210 return false;
3211
3212 /* We need to fix DECL if it a appears to be exported but with no
3213 function body. Thunks do not have CFGs and we may need to
3214 handle them specially later. */
3215 if (!gimple_has_body_p (decl)
3216 && !DECL_THUNK_P (decl)
3217 && !DECL_EXTERNAL (decl))
87501227
JJ
3218 {
3219 struct cgraph_node *node = cgraph_get_node (decl);
3220
3221 /* Don't fix same_body aliases. Although they don't have their own
3222 CFG, they share it with what they alias to. */
3223 if (!node
3224 || node->decl == decl
3225 || !node->same_body)
3226 return true;
3227 }
4537ec0c
DN
3228
3229 return false;
3230}
3231
3232/* Clean the C++ specific parts of the tree T. */
3233
3234void
3235cp_free_lang_data (tree t)
3236{
3237 if (TREE_CODE (t) == METHOD_TYPE
3238 || TREE_CODE (t) == FUNCTION_TYPE)
3239 {
3240 /* Default args are not interesting anymore. */
3241 tree argtypes = TYPE_ARG_TYPES (t);
3242 while (argtypes)
3243 {
3244 TREE_PURPOSE (argtypes) = 0;
3245 argtypes = TREE_CHAIN (argtypes);
3246 }
3247 }
3248 else if (TREE_CODE (t) == FUNCTION_DECL
3249 && cp_fix_function_decl_p (t))
3250 {
3251 /* If T is used in this translation unit at all, the definition
3252 must exist somewhere else since we have decided to not emit it
3253 in this TU. So make it an external reference. */
3254 DECL_EXTERNAL (t) = 1;
3255 TREE_STATIC (t) = 0;
3256 }
652a8c1c
RG
3257 if (CP_AGGREGATE_TYPE_P (t)
3258 && TYPE_NAME (t))
3259 {
3260 tree name = TYPE_NAME (t);
3261 if (TREE_CODE (name) == TYPE_DECL)
3262 name = DECL_NAME (name);
3263 /* Drop anonymous names. */
3264 if (name != NULL_TREE
3265 && ANON_AGGRNAME_P (name))
3266 TYPE_NAME (t) = NULL_TREE;
3267 }
b4ca4f9e
RG
3268 if (TREE_CODE (t) == NAMESPACE_DECL)
3269 {
3270 /* The list of users of a namespace isn't useful for the middle-end
3271 or debug generators. */
3272 DECL_NAMESPACE_USERS (t) = NULL_TREE;
3273 /* Neither do we need the leftover chaining of namespaces
3274 from the binding level. */
3275 DECL_CHAIN (t) = NULL_TREE;
3276 }
4537ec0c
DN
3277}
3278
bffad7f1
SB
3279/* Stub for c-common. Please keep in sync with c-decl.c.
3280 FIXME: If address space support is target specific, then this
3281 should be a C target hook. But currently this is not possible,
3282 because this function is called via REGISTER_TARGET_PRAGMAS. */
3283void
3284c_register_addr_space (const char *word ATTRIBUTE_UNUSED,
3285 addr_space_t as ATTRIBUTE_UNUSED)
3286{
3287}
3288
e2500fed
GK
3289\f
3290#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
3291/* Complain that some language-specific thing hanging off a tree
3292 node has been accessed improperly. */
3293
3294void
b57b79f7 3295lang_check_failed (const char* file, int line, const char* function)
e2500fed
GK
3296{
3297 internal_error ("lang_* check: failed in %s, at %s:%d",
3298 function, trim_filename (file), line);
3299}
3300#endif /* ENABLE_TREE_CHECKING */
3301
3302#include "gt-cp-tree.h"