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