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