1 /* Language-dependent node constructors for parse phase of GNU compiler.
2    Copyright (C) 1987-2019 Free Software Foundation, Inc.
3    Hacked by Michael Tiemann (tiemann@cygnus.com)
4 
5 This file is part of GCC.
6 
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11 
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20 
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tree.h"
25 #include "cp-tree.h"
26 #include "gimple-expr.h"
27 #include "cgraph.h"
28 #include "stor-layout.h"
29 #include "print-tree.h"
30 #include "tree-iterator.h"
31 #include "tree-inline.h"
32 #include "debug.h"
33 #include "convert.h"
34 #include "gimplify.h"
35 #include "stringpool.h"
36 #include "attribs.h"
37 #include "flags.h"
38 #include "selftest.h"
39 
40 static tree bot_manip (tree *, int *, void *);
41 static tree bot_replace (tree *, int *, void *);
42 static hashval_t list_hash_pieces (tree, tree, tree);
43 static tree build_target_expr (tree, tree, tsubst_flags_t);
44 static tree count_trees_r (tree *, int *, void *);
45 static tree verify_stmt_tree_r (tree *, int *, void *);
46 static tree build_local_temp (tree);
47 
48 static tree handle_init_priority_attribute (tree *, tree, tree, int, bool *);
49 static tree handle_abi_tag_attribute (tree *, tree, tree, int, bool *);
50 
51 /* If REF is an lvalue, returns the kind of lvalue that REF is.
52    Otherwise, returns clk_none.  */
53 
54 cp_lvalue_kind
lvalue_kind(const_tree ref)55 lvalue_kind (const_tree ref)
56 {
57   cp_lvalue_kind op1_lvalue_kind = clk_none;
58   cp_lvalue_kind op2_lvalue_kind = clk_none;
59 
60   /* Expressions of reference type are sometimes wrapped in
61      INDIRECT_REFs.  INDIRECT_REFs are just internal compiler
62      representation, not part of the language, so we have to look
63      through them.  */
64   if (REFERENCE_REF_P (ref))
65     return lvalue_kind (TREE_OPERAND (ref, 0));
66 
67   if (TREE_TYPE (ref)
68       && TYPE_REF_P (TREE_TYPE (ref)))
69     {
70       /* unnamed rvalue references are rvalues */
71       if (TYPE_REF_IS_RVALUE (TREE_TYPE (ref))
72 	  && TREE_CODE (ref) != PARM_DECL
73 	  && !VAR_P (ref)
74 	  && TREE_CODE (ref) != COMPONENT_REF
75 	  /* Functions are always lvalues.  */
76 	  && TREE_CODE (TREE_TYPE (TREE_TYPE (ref))) != FUNCTION_TYPE)
77 	return clk_rvalueref;
78 
79       /* lvalue references and named rvalue references are lvalues.  */
80       return clk_ordinary;
81     }
82 
83   if (ref == current_class_ptr)
84     return clk_none;
85 
86   switch (TREE_CODE (ref))
87     {
88     case SAVE_EXPR:
89       return clk_none;
90 
91       /* preincrements and predecrements are valid lvals, provided
92 	 what they refer to are valid lvals.  */
93     case PREINCREMENT_EXPR:
94     case PREDECREMENT_EXPR:
95     case TRY_CATCH_EXPR:
96     case REALPART_EXPR:
97     case IMAGPART_EXPR:
98     case VIEW_CONVERT_EXPR:
99       return lvalue_kind (TREE_OPERAND (ref, 0));
100 
101     case ARRAY_REF:
102       {
103 	tree op1 = TREE_OPERAND (ref, 0);
104 	if (TREE_CODE (TREE_TYPE (op1)) == ARRAY_TYPE)
105 	  {
106 	    op1_lvalue_kind = lvalue_kind (op1);
107 	    if (op1_lvalue_kind == clk_class)
108 	      /* in the case of an array operand, the result is an lvalue if
109 		 that operand is an lvalue and an xvalue otherwise */
110 	      op1_lvalue_kind = clk_rvalueref;
111 	    return op1_lvalue_kind;
112 	  }
113 	else
114 	  return clk_ordinary;
115       }
116 
117     case MEMBER_REF:
118     case DOTSTAR_EXPR:
119       if (TREE_CODE (ref) == MEMBER_REF)
120 	op1_lvalue_kind = clk_ordinary;
121       else
122 	op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
123       if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref, 1))))
124 	op1_lvalue_kind = clk_none;
125       else if (op1_lvalue_kind == clk_class)
126 	/* The result of a .* expression whose second operand is a pointer to a
127 	   data member is an lvalue if the first operand is an lvalue and an
128 	   xvalue otherwise.  */
129 	op1_lvalue_kind = clk_rvalueref;
130       return op1_lvalue_kind;
131 
132     case COMPONENT_REF:
133       if (BASELINK_P (TREE_OPERAND (ref, 1)))
134 	{
135 	  tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (ref, 1));
136 
137 	  /* For static member function recurse on the BASELINK, we can get
138 	     here e.g. from reference_binding.  If BASELINK_FUNCTIONS is
139 	     OVERLOAD, the overload is resolved first if possible through
140 	     resolve_address_of_overloaded_function.  */
141 	  if (TREE_CODE (fn) == FUNCTION_DECL && DECL_STATIC_FUNCTION_P (fn))
142 	    return lvalue_kind (TREE_OPERAND (ref, 1));
143 	}
144       op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
145       if (op1_lvalue_kind == clk_class)
146 	/* If E1 is an lvalue, then E1.E2 is an lvalue;
147 	   otherwise E1.E2 is an xvalue.  */
148 	op1_lvalue_kind = clk_rvalueref;
149 
150       /* Look at the member designator.  */
151       if (!op1_lvalue_kind)
152 	;
153       else if (is_overloaded_fn (TREE_OPERAND (ref, 1)))
154 	/* The "field" can be a FUNCTION_DECL or an OVERLOAD in some
155 	   situations.  If we're seeing a COMPONENT_REF, it's a non-static
156 	   member, so it isn't an lvalue. */
157 	op1_lvalue_kind = clk_none;
158       else if (TREE_CODE (TREE_OPERAND (ref, 1)) != FIELD_DECL)
159 	/* This can be IDENTIFIER_NODE in a template.  */;
160       else if (DECL_C_BIT_FIELD (TREE_OPERAND (ref, 1)))
161 	{
162 	  /* Clear the ordinary bit.  If this object was a class
163 	     rvalue we want to preserve that information.  */
164 	  op1_lvalue_kind &= ~clk_ordinary;
165 	  /* The lvalue is for a bitfield.  */
166 	  op1_lvalue_kind |= clk_bitfield;
167 	}
168       else if (DECL_PACKED (TREE_OPERAND (ref, 1)))
169 	op1_lvalue_kind |= clk_packed;
170 
171       return op1_lvalue_kind;
172 
173     case STRING_CST:
174     case COMPOUND_LITERAL_EXPR:
175       return clk_ordinary;
176 
177     case CONST_DECL:
178       /* CONST_DECL without TREE_STATIC are enumeration values and
179 	 thus not lvalues.  With TREE_STATIC they are used by ObjC++
180 	 in objc_build_string_object and need to be considered as
181 	 lvalues.  */
182       if (! TREE_STATIC (ref))
183 	return clk_none;
184       /* FALLTHRU */
185     case VAR_DECL:
186       if (VAR_P (ref) && DECL_HAS_VALUE_EXPR_P (ref))
187 	return lvalue_kind (DECL_VALUE_EXPR (CONST_CAST_TREE (ref)));
188 
189       if (TREE_READONLY (ref) && ! TREE_STATIC (ref)
190 	  && DECL_LANG_SPECIFIC (ref)
191 	  && DECL_IN_AGGR_P (ref))
192 	return clk_none;
193       /* FALLTHRU */
194     case INDIRECT_REF:
195     case ARROW_EXPR:
196     case PARM_DECL:
197     case RESULT_DECL:
198     case PLACEHOLDER_EXPR:
199       return clk_ordinary;
200 
201       /* A scope ref in a template, left as SCOPE_REF to support later
202 	 access checking.  */
203     case SCOPE_REF:
204       gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE (ref)));
205       {
206 	tree op = TREE_OPERAND (ref, 1);
207 	if (TREE_CODE (op) == FIELD_DECL)
208 	  return (DECL_C_BIT_FIELD (op) ? clk_bitfield : clk_ordinary);
209 	else
210 	  return lvalue_kind (op);
211       }
212 
213     case MAX_EXPR:
214     case MIN_EXPR:
215       /* Disallow <? and >? as lvalues if either argument side-effects.  */
216       if (TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 0))
217 	  || TREE_SIDE_EFFECTS (TREE_OPERAND (ref, 1)))
218 	return clk_none;
219       op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
220       op2_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 1));
221       break;
222 
223     case COND_EXPR:
224       if (processing_template_decl)
225 	{
226 	  /* Within templates, a REFERENCE_TYPE will indicate whether
227 	     the COND_EXPR result is an ordinary lvalue or rvalueref.
228 	     Since REFERENCE_TYPEs are handled above, if we reach this
229 	     point, we know we got a plain rvalue.  Unless we have a
230 	     type-dependent expr, that is, but we shouldn't be testing
231 	     lvalueness if we can't even tell the types yet!  */
232 	  gcc_assert (!type_dependent_expression_p (CONST_CAST_TREE (ref)));
233 	  goto default_;
234 	}
235       op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 1)
236 				    ? TREE_OPERAND (ref, 1)
237 				    : TREE_OPERAND (ref, 0));
238       op2_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 2));
239       break;
240 
241     case MODOP_EXPR:
242       /* We expect to see unlowered MODOP_EXPRs only during
243 	 template processing.  */
244       gcc_assert (processing_template_decl);
245       return clk_ordinary;
246 
247     case MODIFY_EXPR:
248     case TYPEID_EXPR:
249       return clk_ordinary;
250 
251     case COMPOUND_EXPR:
252       return lvalue_kind (TREE_OPERAND (ref, 1));
253 
254     case TARGET_EXPR:
255       return clk_class;
256 
257     case VA_ARG_EXPR:
258       return (CLASS_TYPE_P (TREE_TYPE (ref)) ? clk_class : clk_none);
259 
260     case CALL_EXPR:
261       /* We can see calls outside of TARGET_EXPR in templates.  */
262       if (CLASS_TYPE_P (TREE_TYPE (ref)))
263 	return clk_class;
264       return clk_none;
265 
266     case FUNCTION_DECL:
267       /* All functions (except non-static-member functions) are
268 	 lvalues.  */
269       return (DECL_NONSTATIC_MEMBER_FUNCTION_P (ref)
270 	      ? clk_none : clk_ordinary);
271 
272     case BASELINK:
273       /* We now represent a reference to a single static member function
274 	 with a BASELINK.  */
275       /* This CONST_CAST is okay because BASELINK_FUNCTIONS returns
276 	 its argument unmodified and we assign it to a const_tree.  */
277       return lvalue_kind (BASELINK_FUNCTIONS (CONST_CAST_TREE (ref)));
278 
279     case NON_DEPENDENT_EXPR:
280     case PAREN_EXPR:
281       return lvalue_kind (TREE_OPERAND (ref, 0));
282 
283     case TEMPLATE_PARM_INDEX:
284       if (CLASS_TYPE_P (TREE_TYPE (ref)))
285 	/* A template parameter object is an lvalue.  */
286 	return clk_ordinary;
287       return clk_none;
288 
289     default:
290     default_:
291       if (!TREE_TYPE (ref))
292 	return clk_none;
293       if (CLASS_TYPE_P (TREE_TYPE (ref))
294 	  || TREE_CODE (TREE_TYPE (ref)) == ARRAY_TYPE)
295 	return clk_class;
296       return clk_none;
297     }
298 
299   /* If one operand is not an lvalue at all, then this expression is
300      not an lvalue.  */
301   if (!op1_lvalue_kind || !op2_lvalue_kind)
302     return clk_none;
303 
304   /* Otherwise, it's an lvalue, and it has all the odd properties
305      contributed by either operand.  */
306   op1_lvalue_kind = op1_lvalue_kind | op2_lvalue_kind;
307   /* It's not an ordinary lvalue if it involves any other kind.  */
308   if ((op1_lvalue_kind & ~clk_ordinary) != clk_none)
309     op1_lvalue_kind &= ~clk_ordinary;
310   /* It can't be both a pseudo-lvalue and a non-addressable lvalue.
311      A COND_EXPR of those should be wrapped in a TARGET_EXPR.  */
312   if ((op1_lvalue_kind & (clk_rvalueref|clk_class))
313       && (op1_lvalue_kind & (clk_bitfield|clk_packed)))
314     op1_lvalue_kind = clk_none;
315   return op1_lvalue_kind;
316 }
317 
318 /* Returns the kind of lvalue that REF is, in the sense of [basic.lval].  */
319 
320 cp_lvalue_kind
real_lvalue_p(const_tree ref)321 real_lvalue_p (const_tree ref)
322 {
323   cp_lvalue_kind kind = lvalue_kind (ref);
324   if (kind & (clk_rvalueref|clk_class))
325     return clk_none;
326   else
327     return kind;
328 }
329 
330 /* c-common wants us to return bool.  */
331 
332 bool
lvalue_p(const_tree t)333 lvalue_p (const_tree t)
334 {
335   return real_lvalue_p (t);
336 }
337 
338 /* This differs from lvalue_p in that xvalues are included.  */
339 
340 bool
glvalue_p(const_tree ref)341 glvalue_p (const_tree ref)
342 {
343   cp_lvalue_kind kind = lvalue_kind (ref);
344   if (kind & clk_class)
345     return false;
346   else
347     return (kind != clk_none);
348 }
349 
350 /* This differs from glvalue_p in that class prvalues are included.  */
351 
352 bool
obvalue_p(const_tree ref)353 obvalue_p (const_tree ref)
354 {
355   return (lvalue_kind (ref) != clk_none);
356 }
357 
358 /* Returns true if REF is an xvalue (the result of dereferencing an rvalue
359    reference), false otherwise.  */
360 
361 bool
xvalue_p(const_tree ref)362 xvalue_p (const_tree ref)
363 {
364   return (lvalue_kind (ref) == clk_rvalueref);
365 }
366 
367 /* True if REF is a bit-field.  */
368 
369 bool
bitfield_p(const_tree ref)370 bitfield_p (const_tree ref)
371 {
372   return (lvalue_kind (ref) & clk_bitfield);
373 }
374 
375 /* C++-specific version of stabilize_reference.  */
376 
377 tree
cp_stabilize_reference(tree ref)378 cp_stabilize_reference (tree ref)
379 {
380   STRIP_ANY_LOCATION_WRAPPER (ref);
381   switch (TREE_CODE (ref))
382     {
383     case NON_DEPENDENT_EXPR:
384       /* We aren't actually evaluating this.  */
385       return ref;
386 
387     /* We need to treat specially anything stabilize_reference doesn't
388        handle specifically.  */
389     case VAR_DECL:
390     case PARM_DECL:
391     case RESULT_DECL:
392     CASE_CONVERT:
393     case FLOAT_EXPR:
394     case FIX_TRUNC_EXPR:
395     case INDIRECT_REF:
396     case COMPONENT_REF:
397     case BIT_FIELD_REF:
398     case ARRAY_REF:
399     case ARRAY_RANGE_REF:
400     case ERROR_MARK:
401       break;
402     default:
403       cp_lvalue_kind kind = lvalue_kind (ref);
404       if ((kind & ~clk_class) != clk_none)
405 	{
406 	  tree type = unlowered_expr_type (ref);
407 	  bool rval = !!(kind & clk_rvalueref);
408 	  type = cp_build_reference_type (type, rval);
409 	  /* This inhibits warnings in, eg, cxx_mark_addressable
410 	     (c++/60955).  */
411 	  warning_sentinel s (extra_warnings);
412 	  ref = build_static_cast (type, ref, tf_error);
413 	}
414     }
415 
416   return stabilize_reference (ref);
417 }
418 
419 /* Test whether DECL is a builtin that may appear in a
420    constant-expression. */
421 
422 bool
builtin_valid_in_constant_expr_p(const_tree decl)423 builtin_valid_in_constant_expr_p (const_tree decl)
424 {
425   STRIP_ANY_LOCATION_WRAPPER (decl);
426   if (TREE_CODE (decl) != FUNCTION_DECL)
427     /* Not a function.  */
428     return false;
429   if (DECL_BUILT_IN_CLASS (decl) != BUILT_IN_NORMAL)
430     {
431       if (fndecl_built_in_p (decl, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
432 			   BUILT_IN_FRONTEND))
433 	return true;
434       /* Not a built-in.  */
435       return false;
436     }
437   switch (DECL_FUNCTION_CODE (decl))
438     {
439       /* These always have constant results like the corresponding
440 	 macros/symbol.  */
441     case BUILT_IN_FILE:
442     case BUILT_IN_FUNCTION:
443     case BUILT_IN_LINE:
444 
445       /* The following built-ins are valid in constant expressions
446 	 when their arguments are.  */
447     case BUILT_IN_ADD_OVERFLOW_P:
448     case BUILT_IN_SUB_OVERFLOW_P:
449     case BUILT_IN_MUL_OVERFLOW_P:
450 
451       /* These have constant results even if their operands are
452 	 non-constant.  */
453     case BUILT_IN_CONSTANT_P:
454     case BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE:
455       return true;
456     default:
457       return false;
458     }
459 }
460 
461 /* Build a TARGET_EXPR, initializing the DECL with the VALUE.  */
462 
463 static tree
build_target_expr(tree decl,tree value,tsubst_flags_t complain)464 build_target_expr (tree decl, tree value, tsubst_flags_t complain)
465 {
466   tree t;
467   tree type = TREE_TYPE (decl);
468 
469   value = mark_rvalue_use (value);
470 
471   gcc_checking_assert (VOID_TYPE_P (TREE_TYPE (value))
472 		       || TREE_TYPE (decl) == TREE_TYPE (value)
473 		       /* On ARM ctors return 'this'.  */
474 		       || (TYPE_PTR_P (TREE_TYPE (value))
475 			   && TREE_CODE (value) == CALL_EXPR)
476 		       || useless_type_conversion_p (TREE_TYPE (decl),
477 						     TREE_TYPE (value)));
478 
479   /* Set TREE_READONLY for optimization, such as gimplify_init_constructor
480      moving a constant aggregate into .rodata.  */
481   if (CP_TYPE_CONST_NON_VOLATILE_P (type)
482       && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
483       && !VOID_TYPE_P (TREE_TYPE (value))
484       && reduced_constant_expression_p (value))
485     TREE_READONLY (decl) = true;
486 
487   if (complain & tf_no_cleanup)
488     /* The caller is building a new-expr and does not need a cleanup.  */
489     t = NULL_TREE;
490   else
491     {
492       t = cxx_maybe_build_cleanup (decl, complain);
493       if (t == error_mark_node)
494 	return error_mark_node;
495     }
496   t = build4 (TARGET_EXPR, type, decl, value, t, NULL_TREE);
497   if (location_t eloc = cp_expr_location (value))
498     SET_EXPR_LOCATION (t, eloc);
499   /* We always set TREE_SIDE_EFFECTS so that expand_expr does not
500      ignore the TARGET_EXPR.  If there really turn out to be no
501      side-effects, then the optimizer should be able to get rid of
502      whatever code is generated anyhow.  */
503   TREE_SIDE_EFFECTS (t) = 1;
504 
505   return t;
506 }
507 
508 /* Return an undeclared local temporary of type TYPE for use in building a
509    TARGET_EXPR.  */
510 
511 static tree
build_local_temp(tree type)512 build_local_temp (tree type)
513 {
514   tree slot = build_decl (input_location,
515 			  VAR_DECL, NULL_TREE, type);
516   DECL_ARTIFICIAL (slot) = 1;
517   DECL_IGNORED_P (slot) = 1;
518   DECL_CONTEXT (slot) = current_function_decl;
519   layout_decl (slot, 0);
520   return slot;
521 }
522 
523 /* Set various status flags when building an AGGR_INIT_EXPR object T.  */
524 
525 static void
process_aggr_init_operands(tree t)526 process_aggr_init_operands (tree t)
527 {
528   bool side_effects;
529 
530   side_effects = TREE_SIDE_EFFECTS (t);
531   if (!side_effects)
532     {
533       int i, n;
534       n = TREE_OPERAND_LENGTH (t);
535       for (i = 1; i < n; i++)
536 	{
537 	  tree op = TREE_OPERAND (t, i);
538 	  if (op && TREE_SIDE_EFFECTS (op))
539 	    {
540 	      side_effects = 1;
541 	      break;
542 	    }
543 	}
544     }
545   TREE_SIDE_EFFECTS (t) = side_effects;
546 }
547 
548 /* Build an AGGR_INIT_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE,
549    FN, and SLOT.  NARGS is the number of call arguments which are specified
550    as a tree array ARGS.  */
551 
552 static tree
build_aggr_init_array(tree return_type,tree fn,tree slot,int nargs,tree * args)553 build_aggr_init_array (tree return_type, tree fn, tree slot, int nargs,
554 		       tree *args)
555 {
556   tree t;
557   int i;
558 
559   t = build_vl_exp (AGGR_INIT_EXPR, nargs + 3);
560   TREE_TYPE (t) = return_type;
561   AGGR_INIT_EXPR_FN (t) = fn;
562   AGGR_INIT_EXPR_SLOT (t) = slot;
563   for (i = 0; i < nargs; i++)
564     AGGR_INIT_EXPR_ARG (t, i) = args[i];
565   process_aggr_init_operands (t);
566   return t;
567 }
568 
569 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
570    target.  TYPE is the type to be initialized.
571 
572    Build an AGGR_INIT_EXPR to represent the initialization.  This function
573    differs from build_cplus_new in that an AGGR_INIT_EXPR can only be used
574    to initialize another object, whereas a TARGET_EXPR can either
575    initialize another object or create its own temporary object, and as a
576    result building up a TARGET_EXPR requires that the type's destructor be
577    callable.  */
578 
579 tree
build_aggr_init_expr(tree type,tree init)580 build_aggr_init_expr (tree type, tree init)
581 {
582   tree fn;
583   tree slot;
584   tree rval;
585   int is_ctor;
586 
587   gcc_assert (!VOID_TYPE_P (type));
588 
589   /* Don't build AGGR_INIT_EXPR in a template.  */
590   if (processing_template_decl)
591     return init;
592 
593   fn = cp_get_callee (init);
594   if (fn == NULL_TREE)
595     return convert (type, init);
596 
597   is_ctor = (TREE_CODE (fn) == ADDR_EXPR
598 	     && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL
599 	     && DECL_CONSTRUCTOR_P (TREE_OPERAND (fn, 0)));
600 
601   /* We split the CALL_EXPR into its function and its arguments here.
602      Then, in expand_expr, we put them back together.  The reason for
603      this is that this expression might be a default argument
604      expression.  In that case, we need a new temporary every time the
605      expression is used.  That's what break_out_target_exprs does; it
606      replaces every AGGR_INIT_EXPR with a copy that uses a fresh
607      temporary slot.  Then, expand_expr builds up a call-expression
608      using the new slot.  */
609 
610   /* If we don't need to use a constructor to create an object of this
611      type, don't mess with AGGR_INIT_EXPR.  */
612   if (is_ctor || TREE_ADDRESSABLE (type))
613     {
614       slot = build_local_temp (type);
615 
616       if (TREE_CODE (init) == CALL_EXPR)
617 	{
618 	  rval = build_aggr_init_array (void_type_node, fn, slot,
619 					call_expr_nargs (init),
620 					CALL_EXPR_ARGP (init));
621 	  AGGR_INIT_FROM_THUNK_P (rval)
622 	    = CALL_FROM_THUNK_P (init);
623 	}
624       else
625 	{
626 	  rval = build_aggr_init_array (void_type_node, fn, slot,
627 					aggr_init_expr_nargs (init),
628 					AGGR_INIT_EXPR_ARGP (init));
629 	  AGGR_INIT_FROM_THUNK_P (rval)
630 	    = AGGR_INIT_FROM_THUNK_P (init);
631 	}
632       TREE_SIDE_EFFECTS (rval) = 1;
633       AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
634       TREE_NOTHROW (rval) = TREE_NOTHROW (init);
635       CALL_EXPR_OPERATOR_SYNTAX (rval) = CALL_EXPR_OPERATOR_SYNTAX (init);
636       CALL_EXPR_ORDERED_ARGS (rval) = CALL_EXPR_ORDERED_ARGS (init);
637       CALL_EXPR_REVERSE_ARGS (rval) = CALL_EXPR_REVERSE_ARGS (init);
638     }
639   else
640     rval = init;
641 
642   return rval;
643 }
644 
645 /* INIT is a CALL_EXPR or AGGR_INIT_EXPR which needs info about its
646    target.  TYPE is the type that this initialization should appear to
647    have.
648 
649    Build an encapsulation of the initialization to perform
650    and return it so that it can be processed by language-independent
651    and language-specific expression expanders.  */
652 
653 tree
build_cplus_new(tree type,tree init,tsubst_flags_t complain)654 build_cplus_new (tree type, tree init, tsubst_flags_t complain)
655 {
656   tree rval = build_aggr_init_expr (type, init);
657   tree slot;
658 
659   if (init == error_mark_node)
660     return error_mark_node;
661 
662   if (!complete_type_or_maybe_complain (type, init, complain))
663     return error_mark_node;
664 
665   /* Make sure that we're not trying to create an instance of an
666      abstract class.  */
667   if (abstract_virtuals_error_sfinae (NULL_TREE, type, complain))
668     return error_mark_node;
669 
670   if (TREE_CODE (rval) == AGGR_INIT_EXPR)
671     slot = AGGR_INIT_EXPR_SLOT (rval);
672   else if (TREE_CODE (rval) == CALL_EXPR
673 	   || TREE_CODE (rval) == CONSTRUCTOR)
674     slot = build_local_temp (type);
675   else
676     return rval;
677 
678   rval = build_target_expr (slot, rval, complain);
679 
680   if (rval != error_mark_node)
681     TARGET_EXPR_IMPLICIT_P (rval) = 1;
682 
683   return rval;
684 }
685 
686 /* Subroutine of build_vec_init_expr: Build up a single element
687    intialization as a proxy for the full array initialization to get things
688    marked as used and any appropriate diagnostics.
689 
690    Since we're deferring building the actual constructor calls until
691    gimplification time, we need to build one now and throw it away so
692    that the relevant constructor gets mark_used before cgraph decides
693    what functions are needed.  Here we assume that init is either
694    NULL_TREE, void_type_node (indicating value-initialization), or
695    another array to copy.  */
696 
697 static tree
build_vec_init_elt(tree type,tree init,tsubst_flags_t complain)698 build_vec_init_elt (tree type, tree init, tsubst_flags_t complain)
699 {
700   tree inner_type = strip_array_types (type);
701   vec<tree, va_gc> *argvec;
702 
703   if (integer_zerop (array_type_nelts_total (type))
704       || !CLASS_TYPE_P (inner_type))
705     /* No interesting initialization to do.  */
706     return integer_zero_node;
707   else if (init == void_type_node)
708     return build_value_init (inner_type, complain);
709 
710   gcc_assert (init == NULL_TREE
711 	      || (same_type_ignoring_top_level_qualifiers_p
712 		  (type, TREE_TYPE (init))));
713 
714   argvec = make_tree_vector ();
715   if (init)
716     {
717       tree init_type = strip_array_types (TREE_TYPE (init));
718       tree dummy = build_dummy_object (init_type);
719       if (!lvalue_p (init))
720 	dummy = move (dummy);
721       argvec->quick_push (dummy);
722     }
723   init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
724 				    &argvec, inner_type, LOOKUP_NORMAL,
725 				    complain);
726   release_tree_vector (argvec);
727 
728   /* For a trivial constructor, build_over_call creates a TARGET_EXPR.  But
729      we don't want one here because we aren't creating a temporary.  */
730   if (TREE_CODE (init) == TARGET_EXPR)
731     init = TARGET_EXPR_INITIAL (init);
732 
733   return init;
734 }
735 
736 /* Return a TARGET_EXPR which expresses the initialization of an array to
737    be named later, either default-initialization or copy-initialization
738    from another array of the same type.  */
739 
740 tree
build_vec_init_expr(tree type,tree init,tsubst_flags_t complain)741 build_vec_init_expr (tree type, tree init, tsubst_flags_t complain)
742 {
743   tree slot;
744   bool value_init = false;
745   tree elt_init = build_vec_init_elt (type, init, complain);
746 
747   if (init == void_type_node)
748     {
749       value_init = true;
750       init = NULL_TREE;
751     }
752 
753   slot = build_local_temp (type);
754   init = build2 (VEC_INIT_EXPR, type, slot, init);
755   TREE_SIDE_EFFECTS (init) = true;
756   SET_EXPR_LOCATION (init, input_location);
757 
758   if (cxx_dialect >= cxx11
759       && potential_constant_expression (elt_init))
760     VEC_INIT_EXPR_IS_CONSTEXPR (init) = true;
761   VEC_INIT_EXPR_VALUE_INIT (init) = value_init;
762 
763   return init;
764 }
765 
766 /* Give a helpful diagnostic for a non-constexpr VEC_INIT_EXPR in a context
767    that requires a constant expression.  */
768 
769 void
diagnose_non_constexpr_vec_init(tree expr)770 diagnose_non_constexpr_vec_init (tree expr)
771 {
772   tree type = TREE_TYPE (VEC_INIT_EXPR_SLOT (expr));
773   tree init, elt_init;
774   if (VEC_INIT_EXPR_VALUE_INIT (expr))
775     init = void_type_node;
776   else
777     init = VEC_INIT_EXPR_INIT (expr);
778 
779   elt_init = build_vec_init_elt (type, init, tf_warning_or_error);
780   require_potential_constant_expression (elt_init);
781 }
782 
783 tree
build_array_copy(tree init)784 build_array_copy (tree init)
785 {
786   return build_vec_init_expr (TREE_TYPE (init), init, tf_warning_or_error);
787 }
788 
789 /* Build a TARGET_EXPR using INIT to initialize a new temporary of the
790    indicated TYPE.  */
791 
792 tree
build_target_expr_with_type(tree init,tree type,tsubst_flags_t complain)793 build_target_expr_with_type (tree init, tree type, tsubst_flags_t complain)
794 {
795   gcc_assert (!VOID_TYPE_P (type));
796 
797   if (TREE_CODE (init) == TARGET_EXPR
798       || init == error_mark_node)
799     return init;
800   else if (CLASS_TYPE_P (type) && type_has_nontrivial_copy_init (type)
801 	   && !VOID_TYPE_P (TREE_TYPE (init))
802 	   && TREE_CODE (init) != COND_EXPR
803 	   && TREE_CODE (init) != CONSTRUCTOR
804 	   && TREE_CODE (init) != VA_ARG_EXPR)
805     /* We need to build up a copy constructor call.  A void initializer
806        means we're being called from bot_manip.  COND_EXPR is a special
807        case because we already have copies on the arms and we don't want
808        another one here.  A CONSTRUCTOR is aggregate initialization, which
809        is handled separately.  A VA_ARG_EXPR is magic creation of an
810        aggregate; there's no additional work to be done.  */
811     return force_rvalue (init, complain);
812 
813   return force_target_expr (type, init, complain);
814 }
815 
816 /* Like the above function, but without the checking.  This function should
817    only be used by code which is deliberately trying to subvert the type
818    system, such as call_builtin_trap.  Or build_over_call, to avoid
819    infinite recursion.  */
820 
821 tree
force_target_expr(tree type,tree init,tsubst_flags_t complain)822 force_target_expr (tree type, tree init, tsubst_flags_t complain)
823 {
824   tree slot;
825 
826   gcc_assert (!VOID_TYPE_P (type));
827 
828   slot = build_local_temp (type);
829   return build_target_expr (slot, init, complain);
830 }
831 
832 /* Like build_target_expr_with_type, but use the type of INIT.  */
833 
834 tree
get_target_expr_sfinae(tree init,tsubst_flags_t complain)835 get_target_expr_sfinae (tree init, tsubst_flags_t complain)
836 {
837   if (TREE_CODE (init) == AGGR_INIT_EXPR)
838     return build_target_expr (AGGR_INIT_EXPR_SLOT (init), init, complain);
839   else if (TREE_CODE (init) == VEC_INIT_EXPR)
840     return build_target_expr (VEC_INIT_EXPR_SLOT (init), init, complain);
841   else
842     {
843       init = convert_bitfield_to_declared_type (init);
844       return build_target_expr_with_type (init, TREE_TYPE (init), complain);
845     }
846 }
847 
848 tree
get_target_expr(tree init)849 get_target_expr (tree init)
850 {
851   return get_target_expr_sfinae (init, tf_warning_or_error);
852 }
853 
854 /* If EXPR is a bitfield reference, convert it to the declared type of
855    the bitfield, and return the resulting expression.  Otherwise,
856    return EXPR itself.  */
857 
858 tree
convert_bitfield_to_declared_type(tree expr)859 convert_bitfield_to_declared_type (tree expr)
860 {
861   tree bitfield_type;
862 
863   bitfield_type = is_bitfield_expr_with_lowered_type (expr);
864   if (bitfield_type)
865     expr = convert_to_integer_nofold (TYPE_MAIN_VARIANT (bitfield_type),
866 				      expr);
867   return expr;
868 }
869 
870 /* EXPR is being used in an rvalue context.  Return a version of EXPR
871    that is marked as an rvalue.  */
872 
873 tree
rvalue(tree expr)874 rvalue (tree expr)
875 {
876   tree type;
877 
878   if (error_operand_p (expr))
879     return expr;
880 
881   expr = mark_rvalue_use (expr);
882 
883   /* [basic.lval]
884 
885      Non-class rvalues always have cv-unqualified types.  */
886   type = TREE_TYPE (expr);
887   if (!CLASS_TYPE_P (type) && cv_qualified_p (type))
888     type = cv_unqualified (type);
889 
890   /* We need to do this for rvalue refs as well to get the right answer
891      from decltype; see c++/36628.  */
892   if (!processing_template_decl && glvalue_p (expr))
893     expr = build1 (NON_LVALUE_EXPR, type, expr);
894   else if (type != TREE_TYPE (expr))
895     expr = build_nop (type, expr);
896 
897   return expr;
898 }
899 
900 
901 struct cplus_array_info
902 {
903   tree type;
904   tree domain;
905 };
906 
907 struct cplus_array_hasher : ggc_ptr_hash<tree_node>
908 {
909   typedef cplus_array_info *compare_type;
910 
911   static hashval_t hash (tree t);
912   static bool equal (tree, cplus_array_info *);
913 };
914 
915 /* Hash an ARRAY_TYPE.  K is really of type `tree'.  */
916 
917 hashval_t
hash(tree t)918 cplus_array_hasher::hash (tree t)
919 {
920   hashval_t hash;
921 
922   hash = TYPE_UID (TREE_TYPE (t));
923   if (TYPE_DOMAIN (t))
924     hash ^= TYPE_UID (TYPE_DOMAIN (t));
925   return hash;
926 }
927 
928 /* Compare two ARRAY_TYPEs.  K1 is really of type `tree', K2 is really
929    of type `cplus_array_info*'. */
930 
931 bool
equal(tree t1,cplus_array_info * t2)932 cplus_array_hasher::equal (tree t1, cplus_array_info *t2)
933 {
934   return (TREE_TYPE (t1) == t2->type && TYPE_DOMAIN (t1) == t2->domain);
935 }
936 
937 /* Hash table containing dependent array types, which are unsuitable for
938    the language-independent type hash table.  */
939 static GTY (()) hash_table<cplus_array_hasher> *cplus_array_htab;
940 
941 /* Build an ARRAY_TYPE without laying it out.  */
942 
943 static tree
build_min_array_type(tree elt_type,tree index_type)944 build_min_array_type (tree elt_type, tree index_type)
945 {
946   tree t = cxx_make_type (ARRAY_TYPE);
947   TREE_TYPE (t) = elt_type;
948   TYPE_DOMAIN (t) = index_type;
949   return t;
950 }
951 
952 /* Set TYPE_CANONICAL like build_array_type_1, but using
953    build_cplus_array_type.  */
954 
955 static void
set_array_type_canon(tree t,tree elt_type,tree index_type)956 set_array_type_canon (tree t, tree elt_type, tree index_type)
957 {
958   /* Set the canonical type for this new node.  */
959   if (TYPE_STRUCTURAL_EQUALITY_P (elt_type)
960       || (index_type && TYPE_STRUCTURAL_EQUALITY_P (index_type)))
961     SET_TYPE_STRUCTURAL_EQUALITY (t);
962   else if (TYPE_CANONICAL (elt_type) != elt_type
963 	   || (index_type && TYPE_CANONICAL (index_type) != index_type))
964     TYPE_CANONICAL (t)
965       = build_cplus_array_type (TYPE_CANONICAL (elt_type),
966 				index_type
967 				? TYPE_CANONICAL (index_type) : index_type);
968   else
969     TYPE_CANONICAL (t) = t;
970 }
971 
972 /* Like build_array_type, but handle special C++ semantics: an array of a
973    variant element type is a variant of the array of the main variant of
974    the element type.  */
975 
976 tree
build_cplus_array_type(tree elt_type,tree index_type)977 build_cplus_array_type (tree elt_type, tree index_type)
978 {
979   tree t;
980 
981   if (elt_type == error_mark_node || index_type == error_mark_node)
982     return error_mark_node;
983 
984   bool dependent = (uses_template_parms (elt_type)
985 		    || (index_type && uses_template_parms (index_type)));
986 
987   if (elt_type != TYPE_MAIN_VARIANT (elt_type))
988     /* Start with an array of the TYPE_MAIN_VARIANT.  */
989     t = build_cplus_array_type (TYPE_MAIN_VARIANT (elt_type),
990 				index_type);
991   else if (dependent)
992     {
993       /* Since type_hash_canon calls layout_type, we need to use our own
994 	 hash table.  */
995       cplus_array_info cai;
996       hashval_t hash;
997 
998       if (cplus_array_htab == NULL)
999 	cplus_array_htab = hash_table<cplus_array_hasher>::create_ggc (61);
1000 
1001       hash = TYPE_UID (elt_type);
1002       if (index_type)
1003 	hash ^= TYPE_UID (index_type);
1004       cai.type = elt_type;
1005       cai.domain = index_type;
1006 
1007       tree *e = cplus_array_htab->find_slot_with_hash (&cai, hash, INSERT);
1008       if (*e)
1009 	/* We have found the type: we're done.  */
1010 	return (tree) *e;
1011       else
1012 	{
1013 	  /* Build a new array type.  */
1014 	  t = build_min_array_type (elt_type, index_type);
1015 
1016 	  /* Store it in the hash table. */
1017 	  *e = t;
1018 
1019 	  /* Set the canonical type for this new node.  */
1020 	  set_array_type_canon (t, elt_type, index_type);
1021 	}
1022     }
1023   else
1024     {
1025       bool typeless_storage
1026 	= (elt_type == unsigned_char_type_node
1027 	   || elt_type == signed_char_type_node
1028 	   || elt_type == char_type_node
1029 	   || (TREE_CODE (elt_type) == ENUMERAL_TYPE
1030 	       && TYPE_CONTEXT (elt_type) == std_node
1031 	       && !strcmp ("byte", TYPE_NAME_STRING (elt_type))));
1032       t = build_array_type (elt_type, index_type, typeless_storage);
1033     }
1034 
1035   /* Now check whether we already have this array variant.  */
1036   if (elt_type != TYPE_MAIN_VARIANT (elt_type))
1037     {
1038       tree m = t;
1039       for (t = m; t; t = TYPE_NEXT_VARIANT (t))
1040 	if (TREE_TYPE (t) == elt_type
1041 	    && TYPE_NAME (t) == NULL_TREE
1042 	    && TYPE_ATTRIBUTES (t) == NULL_TREE)
1043 	  break;
1044       if (!t)
1045 	{
1046 	  t = build_min_array_type (elt_type, index_type);
1047 	  set_array_type_canon (t, elt_type, index_type);
1048 	  if (!dependent)
1049 	    {
1050 	      layout_type (t);
1051 	      /* Make sure sizes are shared with the main variant.
1052 		 layout_type can't be called after setting TYPE_NEXT_VARIANT,
1053 		 as it will overwrite alignment etc. of all variants.  */
1054 	      TYPE_SIZE (t) = TYPE_SIZE (m);
1055 	      TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (m);
1056 	      TYPE_TYPELESS_STORAGE (t) = TYPE_TYPELESS_STORAGE (m);
1057 	    }
1058 
1059 	  TYPE_MAIN_VARIANT (t) = m;
1060 	  TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (m);
1061 	  TYPE_NEXT_VARIANT (m) = t;
1062 	}
1063     }
1064 
1065   /* Avoid spurious warnings with VLAs (c++/54583).  */
1066   if (TYPE_SIZE (t) && EXPR_P (TYPE_SIZE (t)))
1067     TREE_NO_WARNING (TYPE_SIZE (t)) = 1;
1068 
1069   /* Push these needs up to the ARRAY_TYPE so that initialization takes
1070      place more easily.  */
1071   bool needs_ctor = (TYPE_NEEDS_CONSTRUCTING (t)
1072 		     = TYPE_NEEDS_CONSTRUCTING (elt_type));
1073   bool needs_dtor = (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1074 		     = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type));
1075 
1076   if (!dependent && t == TYPE_MAIN_VARIANT (t)
1077       && !COMPLETE_TYPE_P (t) && COMPLETE_TYPE_P (elt_type))
1078     {
1079       /* The element type has been completed since the last time we saw
1080 	 this array type; update the layout and 'tor flags for any variants
1081 	 that need it.  */
1082       layout_type (t);
1083       for (tree v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
1084 	{
1085 	  TYPE_NEEDS_CONSTRUCTING (v) = needs_ctor;
1086 	  TYPE_HAS_NONTRIVIAL_DESTRUCTOR (v) = needs_dtor;
1087 	}
1088     }
1089 
1090   return t;
1091 }
1092 
1093 /* Return an ARRAY_TYPE with element type ELT and length N.  */
1094 
1095 tree
build_array_of_n_type(tree elt,int n)1096 build_array_of_n_type (tree elt, int n)
1097 {
1098   return build_cplus_array_type (elt, build_index_type (size_int (n - 1)));
1099 }
1100 
1101 /* True iff T is an N3639 array of runtime bound (VLA).  These were approved
1102    for C++14 but then removed.  This should only be used for N3639
1103    specifically; code wondering more generally if something is a VLA should use
1104    vla_type_p.  */
1105 
1106 bool
array_of_runtime_bound_p(tree t)1107 array_of_runtime_bound_p (tree t)
1108 {
1109   if (!t || TREE_CODE (t) != ARRAY_TYPE)
1110     return false;
1111   if (variably_modified_type_p (TREE_TYPE (t), NULL_TREE))
1112     return false;
1113   tree dom = TYPE_DOMAIN (t);
1114   if (!dom)
1115     return false;
1116   tree max = TYPE_MAX_VALUE (dom);
1117   return (!potential_rvalue_constant_expression (max)
1118 	  || (!value_dependent_expression_p (max) && !TREE_CONSTANT (max)));
1119 }
1120 
1121 /* True iff T is a variable length array.  */
1122 
1123 bool
vla_type_p(tree t)1124 vla_type_p (tree t)
1125 {
1126   for (; t && TREE_CODE (t) == ARRAY_TYPE;
1127        t = TREE_TYPE (t))
1128     if (tree dom = TYPE_DOMAIN (t))
1129       {
1130 	tree max = TYPE_MAX_VALUE (dom);
1131 	if (!potential_rvalue_constant_expression (max)
1132 	    || (!value_dependent_expression_p (max) && !TREE_CONSTANT (max)))
1133 	  return true;
1134       }
1135   return false;
1136 }
1137 
1138 /* Return a reference type node referring to TO_TYPE.  If RVAL is
1139    true, return an rvalue reference type, otherwise return an lvalue
1140    reference type.  If a type node exists, reuse it, otherwise create
1141    a new one.  */
1142 tree
cp_build_reference_type(tree to_type,bool rval)1143 cp_build_reference_type (tree to_type, bool rval)
1144 {
1145   tree lvalue_ref, t;
1146 
1147   if (to_type == error_mark_node)
1148     return error_mark_node;
1149 
1150   if (TYPE_REF_P (to_type))
1151     {
1152       rval = rval && TYPE_REF_IS_RVALUE (to_type);
1153       to_type = TREE_TYPE (to_type);
1154     }
1155 
1156   lvalue_ref = build_reference_type (to_type);
1157   if (!rval)
1158     return lvalue_ref;
1159 
1160   /* This code to create rvalue reference types is based on and tied
1161      to the code creating lvalue reference types in the middle-end
1162      functions build_reference_type_for_mode and build_reference_type.
1163 
1164      It works by putting the rvalue reference type nodes after the
1165      lvalue reference nodes in the TYPE_NEXT_REF_TO linked list, so
1166      they will effectively be ignored by the middle end.  */
1167 
1168   for (t = lvalue_ref; (t = TYPE_NEXT_REF_TO (t)); )
1169     if (TYPE_REF_IS_RVALUE (t))
1170       return t;
1171 
1172   t = build_distinct_type_copy (lvalue_ref);
1173 
1174   TYPE_REF_IS_RVALUE (t) = true;
1175   TYPE_NEXT_REF_TO (t) = TYPE_NEXT_REF_TO (lvalue_ref);
1176   TYPE_NEXT_REF_TO (lvalue_ref) = t;
1177 
1178   if (TYPE_STRUCTURAL_EQUALITY_P (to_type))
1179     SET_TYPE_STRUCTURAL_EQUALITY (t);
1180   else if (TYPE_CANONICAL (to_type) != to_type)
1181     TYPE_CANONICAL (t)
1182       = cp_build_reference_type (TYPE_CANONICAL (to_type), rval);
1183   else
1184     TYPE_CANONICAL (t) = t;
1185 
1186   layout_type (t);
1187 
1188   return t;
1189 
1190 }
1191 
1192 /* Returns EXPR cast to rvalue reference type, like std::move.  */
1193 
1194 tree
move(tree expr)1195 move (tree expr)
1196 {
1197   tree type = TREE_TYPE (expr);
1198   gcc_assert (!TYPE_REF_P (type));
1199   type = cp_build_reference_type (type, /*rval*/true);
1200   return build_static_cast (type, expr, tf_warning_or_error);
1201 }
1202 
1203 /* Used by the C++ front end to build qualified array types.  However,
1204    the C version of this function does not properly maintain canonical
1205    types (which are not used in C).  */
1206 tree
c_build_qualified_type(tree type,int type_quals,tree,size_t)1207 c_build_qualified_type (tree type, int type_quals, tree /* orig_qual_type */,
1208 			size_t /* orig_qual_indirect */)
1209 {
1210   return cp_build_qualified_type (type, type_quals);
1211 }
1212 
1213 
1214 /* Make a variant of TYPE, qualified with the TYPE_QUALS.  Handles
1215    arrays correctly.  In particular, if TYPE is an array of T's, and
1216    TYPE_QUALS is non-empty, returns an array of qualified T's.
1217 
1218    FLAGS determines how to deal with ill-formed qualifications. If
1219    tf_ignore_bad_quals is set, then bad qualifications are dropped
1220    (this is permitted if TYPE was introduced via a typedef or template
1221    type parameter). If bad qualifications are dropped and tf_warning
1222    is set, then a warning is issued for non-const qualifications.  If
1223    tf_ignore_bad_quals is not set and tf_error is not set, we
1224    return error_mark_node. Otherwise, we issue an error, and ignore
1225    the qualifications.
1226 
1227    Qualification of a reference type is valid when the reference came
1228    via a typedef or template type argument. [dcl.ref] No such
1229    dispensation is provided for qualifying a function type.  [dcl.fct]
1230    DR 295 queries this and the proposed resolution brings it into line
1231    with qualifying a reference.  We implement the DR.  We also behave
1232    in a similar manner for restricting non-pointer types.  */
1233 
1234 tree
cp_build_qualified_type_real(tree type,int type_quals,tsubst_flags_t complain)1235 cp_build_qualified_type_real (tree type,
1236 			      int type_quals,
1237 			      tsubst_flags_t complain)
1238 {
1239   tree result;
1240   int bad_quals = TYPE_UNQUALIFIED;
1241 
1242   if (type == error_mark_node)
1243     return type;
1244 
1245   if (type_quals == cp_type_quals (type))
1246     return type;
1247 
1248   if (TREE_CODE (type) == ARRAY_TYPE)
1249     {
1250       /* In C++, the qualification really applies to the array element
1251 	 type.  Obtain the appropriately qualified element type.  */
1252       tree t;
1253       tree element_type
1254 	= cp_build_qualified_type_real (TREE_TYPE (type),
1255 					type_quals,
1256 					complain);
1257 
1258       if (element_type == error_mark_node)
1259 	return error_mark_node;
1260 
1261       /* See if we already have an identically qualified type.  Tests
1262 	 should be equivalent to those in check_qualified_type.  */
1263       for (t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
1264 	if (TREE_TYPE (t) == element_type
1265 	    && TYPE_NAME (t) == TYPE_NAME (type)
1266 	    && TYPE_CONTEXT (t) == TYPE_CONTEXT (type)
1267 	    && attribute_list_equal (TYPE_ATTRIBUTES (t),
1268 				     TYPE_ATTRIBUTES (type)))
1269 	  break;
1270 
1271       if (!t)
1272 	{
1273 	  t = build_cplus_array_type (element_type, TYPE_DOMAIN (type));
1274 
1275 	  /* Keep the typedef name.  */
1276 	  if (TYPE_NAME (t) != TYPE_NAME (type))
1277 	    {
1278 	      t = build_variant_type_copy (t);
1279 	      TYPE_NAME (t) = TYPE_NAME (type);
1280 	      SET_TYPE_ALIGN (t, TYPE_ALIGN (type));
1281 	      TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (type);
1282 	    }
1283 	}
1284 
1285       /* Even if we already had this variant, we update
1286 	 TYPE_NEEDS_CONSTRUCTING and TYPE_HAS_NONTRIVIAL_DESTRUCTOR in case
1287 	 they changed since the variant was originally created.
1288 
1289 	 This seems hokey; if there is some way to use a previous
1290 	 variant *without* coming through here,
1291 	 TYPE_NEEDS_CONSTRUCTING will never be updated.  */
1292       TYPE_NEEDS_CONSTRUCTING (t)
1293 	= TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (element_type));
1294       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
1295 	= TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (element_type));
1296       return t;
1297     }
1298   else if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
1299     {
1300       tree t = PACK_EXPANSION_PATTERN (type);
1301 
1302       t = cp_build_qualified_type_real (t, type_quals, complain);
1303       return make_pack_expansion (t, complain);
1304     }
1305 
1306   /* A reference or method type shall not be cv-qualified.
1307      [dcl.ref], [dcl.fct].  This used to be an error, but as of DR 295
1308      (in CD1) we always ignore extra cv-quals on functions.  */
1309   if (type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)
1310       && (TYPE_REF_P (type)
1311 	  || TREE_CODE (type) == FUNCTION_TYPE
1312 	  || TREE_CODE (type) == METHOD_TYPE))
1313     {
1314       if (TYPE_REF_P (type))
1315 	bad_quals |= type_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
1316       type_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
1317     }
1318 
1319   /* But preserve any function-cv-quals on a FUNCTION_TYPE.  */
1320   if (TREE_CODE (type) == FUNCTION_TYPE)
1321     type_quals |= type_memfn_quals (type);
1322 
1323   /* A restrict-qualified type must be a pointer (or reference)
1324      to object or incomplete type. */
1325   if ((type_quals & TYPE_QUAL_RESTRICT)
1326       && TREE_CODE (type) != TEMPLATE_TYPE_PARM
1327       && TREE_CODE (type) != TYPENAME_TYPE
1328       && !INDIRECT_TYPE_P (type))
1329     {
1330       bad_quals |= TYPE_QUAL_RESTRICT;
1331       type_quals &= ~TYPE_QUAL_RESTRICT;
1332     }
1333 
1334   if (bad_quals == TYPE_UNQUALIFIED
1335       || (complain & tf_ignore_bad_quals))
1336     /*OK*/;
1337   else if (!(complain & tf_error))
1338     return error_mark_node;
1339   else
1340     {
1341       tree bad_type = build_qualified_type (ptr_type_node, bad_quals);
1342       error ("%qV qualifiers cannot be applied to %qT",
1343 	     bad_type, type);
1344     }
1345 
1346   /* Retrieve (or create) the appropriately qualified variant.  */
1347   result = build_qualified_type (type, type_quals);
1348 
1349   return result;
1350 }
1351 
1352 /* Return TYPE with const and volatile removed.  */
1353 
1354 tree
cv_unqualified(tree type)1355 cv_unqualified (tree type)
1356 {
1357   int quals;
1358 
1359   if (type == error_mark_node)
1360     return type;
1361 
1362   quals = cp_type_quals (type);
1363   quals &= ~(TYPE_QUAL_CONST|TYPE_QUAL_VOLATILE);
1364   return cp_build_qualified_type (type, quals);
1365 }
1366 
1367 /* Subroutine of strip_typedefs.  We want to apply to RESULT the attributes
1368    from ATTRIBS that affect type identity, and no others.  If any are not
1369    applied, set *remove_attributes to true.  */
1370 
1371 static tree
apply_identity_attributes(tree result,tree attribs,bool * remove_attributes)1372 apply_identity_attributes (tree result, tree attribs, bool *remove_attributes)
1373 {
1374   tree first_ident = NULL_TREE;
1375   tree new_attribs = NULL_TREE;
1376   tree *p = &new_attribs;
1377 
1378   if (OVERLOAD_TYPE_P (result))
1379     {
1380       /* On classes and enums all attributes are ingrained.  */
1381       gcc_assert (attribs == TYPE_ATTRIBUTES (result));
1382       return result;
1383     }
1384 
1385   for (tree a = attribs; a; a = TREE_CHAIN (a))
1386     {
1387       const attribute_spec *as
1388 	= lookup_attribute_spec (get_attribute_name (a));
1389       if (as && as->affects_type_identity)
1390 	{
1391 	  if (!first_ident)
1392 	    first_ident = a;
1393 	  else if (first_ident == error_mark_node)
1394 	    {
1395 	      *p = tree_cons (TREE_PURPOSE (a), TREE_VALUE (a), NULL_TREE);
1396 	      p = &TREE_CHAIN (*p);
1397 	    }
1398 	}
1399       else if (first_ident)
1400 	{
1401 	  for (tree a2 = first_ident; a2; a2 = TREE_CHAIN (a2))
1402 	    {
1403 	      *p = tree_cons (TREE_PURPOSE (a2), TREE_VALUE (a2), NULL_TREE);
1404 	      p = &TREE_CHAIN (*p);
1405 	    }
1406 	  first_ident = error_mark_node;
1407 	}
1408     }
1409   if (first_ident != error_mark_node)
1410     new_attribs = first_ident;
1411 
1412   if (first_ident == attribs)
1413     /* All attributes affected type identity.  */;
1414   else
1415     *remove_attributes = true;
1416 
1417   return cp_build_type_attribute_variant (result, new_attribs);
1418 }
1419 
1420 /* Builds a qualified variant of T that is not a typedef variant.
1421    E.g. consider the following declarations:
1422      typedef const int ConstInt;
1423      typedef ConstInt* PtrConstInt;
1424    If T is PtrConstInt, this function returns a type representing
1425      const int*.
1426    In other words, if T is a typedef, the function returns the underlying type.
1427    The cv-qualification and attributes of the type returned match the
1428    input type.
1429    They will always be compatible types.
1430    The returned type is built so that all of its subtypes
1431    recursively have their typedefs stripped as well.
1432 
1433    This is different from just returning TYPE_CANONICAL (T)
1434    Because of several reasons:
1435     * If T is a type that needs structural equality
1436       its TYPE_CANONICAL (T) will be NULL.
1437     * TYPE_CANONICAL (T) desn't carry type attributes
1438       and loses template parameter names.
1439 
1440    If REMOVE_ATTRIBUTES is non-null, also strip attributes that don't
1441    affect type identity, and set the referent to true if any were
1442    stripped.  */
1443 
1444 tree
strip_typedefs(tree t,bool * remove_attributes)1445 strip_typedefs (tree t, bool *remove_attributes)
1446 {
1447   tree result = NULL, type = NULL, t0 = NULL;
1448 
1449   if (!t || t == error_mark_node)
1450     return t;
1451 
1452   if (TREE_CODE (t) == TREE_LIST)
1453     {
1454       bool changed = false;
1455       vec<tree,va_gc> *vec = make_tree_vector ();
1456       tree r = t;
1457       for (; t; t = TREE_CHAIN (t))
1458 	{
1459 	  gcc_assert (!TREE_PURPOSE (t));
1460 	  tree elt = strip_typedefs (TREE_VALUE (t), remove_attributes);
1461 	  if (elt != TREE_VALUE (t))
1462 	    changed = true;
1463 	  vec_safe_push (vec, elt);
1464 	}
1465       if (changed)
1466 	r = build_tree_list_vec (vec);
1467       release_tree_vector (vec);
1468       return r;
1469     }
1470 
1471   gcc_assert (TYPE_P (t));
1472 
1473   if (t == TYPE_CANONICAL (t))
1474     return t;
1475 
1476   if (dependent_alias_template_spec_p (t))
1477     /* DR 1558: However, if the template-id is dependent, subsequent
1478        template argument substitution still applies to the template-id.  */
1479     return t;
1480 
1481   switch (TREE_CODE (t))
1482     {
1483     case POINTER_TYPE:
1484       type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1485       result = build_pointer_type (type);
1486       break;
1487     case REFERENCE_TYPE:
1488       type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1489       result = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
1490       break;
1491     case OFFSET_TYPE:
1492       t0 = strip_typedefs (TYPE_OFFSET_BASETYPE (t), remove_attributes);
1493       type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1494       result = build_offset_type (t0, type);
1495       break;
1496     case RECORD_TYPE:
1497       if (TYPE_PTRMEMFUNC_P (t))
1498 	{
1499 	  t0 = strip_typedefs (TYPE_PTRMEMFUNC_FN_TYPE (t), remove_attributes);
1500 	  result = build_ptrmemfunc_type (t0);
1501 	}
1502       break;
1503     case ARRAY_TYPE:
1504       type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1505       t0  = strip_typedefs (TYPE_DOMAIN (t), remove_attributes);
1506       result = build_cplus_array_type (type, t0);
1507       break;
1508     case FUNCTION_TYPE:
1509     case METHOD_TYPE:
1510       {
1511 	tree arg_types = NULL, arg_node, arg_node2, arg_type;
1512 	bool changed;
1513 
1514 	/* Because we stomp on TREE_PURPOSE of TYPE_ARG_TYPES in many places
1515 	   around the compiler (e.g. cp_parser_late_parsing_default_args), we
1516 	   can't expect that re-hashing a function type will find a previous
1517 	   equivalent type, so try to reuse the input type if nothing has
1518 	   changed.  If the type is itself a variant, that will change.  */
1519 	bool is_variant = typedef_variant_p (t);
1520 	if (remove_attributes
1521 	    && (TYPE_ATTRIBUTES (t) || TYPE_USER_ALIGN (t)))
1522 	  is_variant = true;
1523 
1524 	type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1525 	tree canon_spec = (flag_noexcept_type
1526 			   ? canonical_eh_spec (TYPE_RAISES_EXCEPTIONS (t))
1527 			   : NULL_TREE);
1528 	changed = (type != TREE_TYPE (t) || is_variant
1529 		   || TYPE_RAISES_EXCEPTIONS (t) != canon_spec);
1530 
1531 	for (arg_node = TYPE_ARG_TYPES (t);
1532 	     arg_node;
1533 	     arg_node = TREE_CHAIN (arg_node))
1534 	  {
1535 	    if (arg_node == void_list_node)
1536 	      break;
1537 	    arg_type = strip_typedefs (TREE_VALUE (arg_node),
1538 				       remove_attributes);
1539 	    gcc_assert (arg_type);
1540 	    if (arg_type == TREE_VALUE (arg_node) && !changed)
1541 	      continue;
1542 
1543 	    if (!changed)
1544 	      {
1545 		changed = true;
1546 		for (arg_node2 = TYPE_ARG_TYPES (t);
1547 		     arg_node2 != arg_node;
1548 		     arg_node2 = TREE_CHAIN (arg_node2))
1549 		  arg_types
1550 		    = tree_cons (TREE_PURPOSE (arg_node2),
1551 				 TREE_VALUE (arg_node2), arg_types);
1552 	      }
1553 
1554 	    arg_types
1555 	      = tree_cons (TREE_PURPOSE (arg_node), arg_type, arg_types);
1556 	  }
1557 
1558 	if (!changed)
1559 	  return t;
1560 
1561 	if (arg_types)
1562 	  arg_types = nreverse (arg_types);
1563 
1564 	/* A list of parameters not ending with an ellipsis
1565 	   must end with void_list_node.  */
1566 	if (arg_node)
1567 	  arg_types = chainon (arg_types, void_list_node);
1568 
1569 	if (TREE_CODE (t) == METHOD_TYPE)
1570 	  {
1571 	    tree class_type = TREE_TYPE (TREE_VALUE (arg_types));
1572 	    gcc_assert (class_type);
1573 	    result =
1574 	      build_method_type_directly (class_type, type,
1575 					  TREE_CHAIN (arg_types));
1576 	  }
1577 	else
1578 	  {
1579 	    result = build_function_type (type, arg_types);
1580 	    result = apply_memfn_quals (result, type_memfn_quals (t));
1581 	  }
1582 
1583 	result = build_cp_fntype_variant (result,
1584 					  type_memfn_rqual (t), canon_spec,
1585 					  TYPE_HAS_LATE_RETURN_TYPE (t));
1586       }
1587       break;
1588     case TYPENAME_TYPE:
1589       {
1590 	bool changed = false;
1591 	tree fullname = TYPENAME_TYPE_FULLNAME (t);
1592 	if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR
1593 	    && TREE_OPERAND (fullname, 1))
1594 	  {
1595 	    tree args = TREE_OPERAND (fullname, 1);
1596 	    tree new_args = copy_node (args);
1597 	    for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
1598 	      {
1599 		tree arg = TREE_VEC_ELT (args, i);
1600 		tree strip_arg;
1601 		if (TYPE_P (arg))
1602 		  strip_arg = strip_typedefs (arg, remove_attributes);
1603 		else
1604 		  strip_arg = strip_typedefs_expr (arg, remove_attributes);
1605 		TREE_VEC_ELT (new_args, i) = strip_arg;
1606 		if (strip_arg != arg)
1607 		  changed = true;
1608 	      }
1609 	    if (changed)
1610 	      {
1611 		NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_args)
1612 		  = NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
1613 		fullname
1614 		  = lookup_template_function (TREE_OPERAND (fullname, 0),
1615 					      new_args);
1616 	      }
1617 	    else
1618 	      ggc_free (new_args);
1619 	  }
1620 	tree ctx = strip_typedefs (TYPE_CONTEXT (t), remove_attributes);
1621 	if (!changed && ctx == TYPE_CONTEXT (t) && !typedef_variant_p (t))
1622 	  return t;
1623 	tree name = fullname;
1624 	if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR)
1625 	  name = TREE_OPERAND (fullname, 0);
1626 	/* Use build_typename_type rather than make_typename_type because we
1627 	   don't want to resolve it here, just strip typedefs.  */
1628 	result = build_typename_type (ctx, name, fullname, typename_type);
1629       }
1630       break;
1631     case DECLTYPE_TYPE:
1632       result = strip_typedefs_expr (DECLTYPE_TYPE_EXPR (t),
1633 				    remove_attributes);
1634       if (result == DECLTYPE_TYPE_EXPR (t))
1635 	result = NULL_TREE;
1636       else
1637 	result = (finish_decltype_type
1638 		  (result,
1639 		   DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t),
1640 		   tf_none));
1641       break;
1642     case UNDERLYING_TYPE:
1643       type = strip_typedefs (UNDERLYING_TYPE_TYPE (t), remove_attributes);
1644       result = finish_underlying_type (type);
1645       break;
1646     default:
1647       break;
1648     }
1649 
1650   if (!result)
1651     {
1652       if (typedef_variant_p (t))
1653 	{
1654 	  /* Explicitly get the underlying type, as TYPE_MAIN_VARIANT doesn't
1655 	     strip typedefs with attributes.  */
1656 	  result = TYPE_MAIN_VARIANT (DECL_ORIGINAL_TYPE (TYPE_NAME (t)));
1657 	  result = strip_typedefs (result);
1658 	}
1659       else
1660 	result = TYPE_MAIN_VARIANT (t);
1661     }
1662   gcc_assert (!typedef_variant_p (result));
1663 
1664   if (COMPLETE_TYPE_P (result) && !COMPLETE_TYPE_P (t))
1665   /* If RESULT is complete and T isn't, it's likely the case that T
1666      is a variant of RESULT which hasn't been updated yet.  Skip the
1667      attribute handling.  */;
1668   else
1669     {
1670       if (TYPE_USER_ALIGN (t) != TYPE_USER_ALIGN (result)
1671 	  || TYPE_ALIGN (t) != TYPE_ALIGN (result))
1672 	{
1673 	  gcc_assert (TYPE_USER_ALIGN (t));
1674 	  if (remove_attributes)
1675 	    *remove_attributes = true;
1676 	  else
1677 	    {
1678 	      if (TYPE_ALIGN (t) == TYPE_ALIGN (result))
1679 		result = build_variant_type_copy (result);
1680 	      else
1681 		result = build_aligned_type (result, TYPE_ALIGN (t));
1682 	      TYPE_USER_ALIGN (result) = true;
1683 	    }
1684 	}
1685 
1686       if (TYPE_ATTRIBUTES (t))
1687 	{
1688 	  if (remove_attributes)
1689 	    result = apply_identity_attributes (result, TYPE_ATTRIBUTES (t),
1690 						remove_attributes);
1691 	  else
1692 	    result = cp_build_type_attribute_variant (result,
1693 						      TYPE_ATTRIBUTES (t));
1694 	}
1695     }
1696 
1697   return cp_build_qualified_type (result, cp_type_quals (t));
1698 }
1699 
1700 /* Like strip_typedefs above, but works on expressions, so that in
1701 
1702    template<class T> struct A
1703    {
1704      typedef T TT;
1705      B<sizeof(TT)> b;
1706    };
1707 
1708    sizeof(TT) is replaced by sizeof(T).  */
1709 
1710 tree
strip_typedefs_expr(tree t,bool * remove_attributes)1711 strip_typedefs_expr (tree t, bool *remove_attributes)
1712 {
1713   unsigned i,n;
1714   tree r, type, *ops;
1715   enum tree_code code;
1716 
1717   if (t == NULL_TREE || t == error_mark_node)
1718     return t;
1719 
1720   STRIP_ANY_LOCATION_WRAPPER (t);
1721 
1722   if (DECL_P (t) || CONSTANT_CLASS_P (t))
1723     return t;
1724 
1725   /* Some expressions have type operands, so let's handle types here rather
1726      than check TYPE_P in multiple places below.  */
1727   if (TYPE_P (t))
1728     return strip_typedefs (t, remove_attributes);
1729 
1730   code = TREE_CODE (t);
1731   switch (code)
1732     {
1733     case IDENTIFIER_NODE:
1734     case TEMPLATE_PARM_INDEX:
1735     case OVERLOAD:
1736     case BASELINK:
1737     case ARGUMENT_PACK_SELECT:
1738       return t;
1739 
1740     case TRAIT_EXPR:
1741       {
1742 	tree type1 = strip_typedefs (TRAIT_EXPR_TYPE1 (t), remove_attributes);
1743 	tree type2 = strip_typedefs (TRAIT_EXPR_TYPE2 (t), remove_attributes);
1744 	if (type1 == TRAIT_EXPR_TYPE1 (t)
1745 	    && type2 == TRAIT_EXPR_TYPE2 (t))
1746 	  return t;
1747 	r = copy_node (t);
1748 	TRAIT_EXPR_TYPE1 (r) = type1;
1749 	TRAIT_EXPR_TYPE2 (r) = type2;
1750 	return r;
1751       }
1752 
1753     case TREE_LIST:
1754       {
1755 	vec<tree, va_gc> *vec = make_tree_vector ();
1756 	bool changed = false;
1757 	tree it;
1758 	for (it = t; it; it = TREE_CHAIN (it))
1759 	  {
1760 	    tree val = strip_typedefs_expr (TREE_VALUE (it), remove_attributes);
1761 	    vec_safe_push (vec, val);
1762 	    if (val != TREE_VALUE (it))
1763 	      changed = true;
1764 	    gcc_assert (TREE_PURPOSE (it) == NULL_TREE);
1765 	  }
1766 	if (changed)
1767 	  {
1768 	    r = NULL_TREE;
1769 	    FOR_EACH_VEC_ELT_REVERSE (*vec, i, it)
1770 	      r = tree_cons (NULL_TREE, it, r);
1771 	  }
1772 	else
1773 	  r = t;
1774 	release_tree_vector (vec);
1775 	return r;
1776       }
1777 
1778     case TREE_VEC:
1779       {
1780 	bool changed = false;
1781 	vec<tree, va_gc> *vec = make_tree_vector ();
1782 	n = TREE_VEC_LENGTH (t);
1783 	vec_safe_reserve (vec, n);
1784 	for (i = 0; i < n; ++i)
1785 	  {
1786 	    tree op = strip_typedefs_expr (TREE_VEC_ELT (t, i),
1787 					   remove_attributes);
1788 	    vec->quick_push (op);
1789 	    if (op != TREE_VEC_ELT (t, i))
1790 	      changed = true;
1791 	  }
1792 	if (changed)
1793 	  {
1794 	    r = copy_node (t);
1795 	    for (i = 0; i < n; ++i)
1796 	      TREE_VEC_ELT (r, i) = (*vec)[i];
1797 	    NON_DEFAULT_TEMPLATE_ARGS_COUNT (r)
1798 	      = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
1799 	  }
1800 	else
1801 	  r = t;
1802 	release_tree_vector (vec);
1803 	return r;
1804       }
1805 
1806     case CONSTRUCTOR:
1807       {
1808 	bool changed = false;
1809 	vec<constructor_elt, va_gc> *vec
1810 	  = vec_safe_copy (CONSTRUCTOR_ELTS (t));
1811 	n = CONSTRUCTOR_NELTS (t);
1812 	type = strip_typedefs (TREE_TYPE (t), remove_attributes);
1813 	for (i = 0; i < n; ++i)
1814 	  {
1815 	    constructor_elt *e = &(*vec)[i];
1816 	    tree op = strip_typedefs_expr (e->value, remove_attributes);
1817 	    if (op != e->value)
1818 	      {
1819 		changed = true;
1820 		e->value = op;
1821 	      }
1822 	    gcc_checking_assert
1823 	      (e->index == strip_typedefs_expr (e->index, remove_attributes));
1824 	  }
1825 
1826 	if (!changed && type == TREE_TYPE (t))
1827 	  {
1828 	    vec_free (vec);
1829 	    return t;
1830 	  }
1831 	else
1832 	  {
1833 	    r = copy_node (t);
1834 	    TREE_TYPE (r) = type;
1835 	    CONSTRUCTOR_ELTS (r) = vec;
1836 	    return r;
1837 	  }
1838       }
1839 
1840     case LAMBDA_EXPR:
1841       return t;
1842 
1843     case STATEMENT_LIST:
1844       error ("statement-expression in a constant expression");
1845       return error_mark_node;
1846 
1847     default:
1848       break;
1849     }
1850 
1851   gcc_assert (EXPR_P (t));
1852 
1853   n = cp_tree_operand_length (t);
1854   ops = XALLOCAVEC (tree, n);
1855   type = TREE_TYPE (t);
1856 
1857   switch (code)
1858     {
1859     CASE_CONVERT:
1860     case IMPLICIT_CONV_EXPR:
1861     case DYNAMIC_CAST_EXPR:
1862     case STATIC_CAST_EXPR:
1863     case CONST_CAST_EXPR:
1864     case REINTERPRET_CAST_EXPR:
1865     case CAST_EXPR:
1866     case NEW_EXPR:
1867       type = strip_typedefs (type, remove_attributes);
1868       /* fallthrough */
1869 
1870     default:
1871       for (i = 0; i < n; ++i)
1872 	ops[i] = strip_typedefs_expr (TREE_OPERAND (t, i), remove_attributes);
1873       break;
1874     }
1875 
1876   /* If nothing changed, return t.  */
1877   for (i = 0; i < n; ++i)
1878     if (ops[i] != TREE_OPERAND (t, i))
1879       break;
1880   if (i == n && type == TREE_TYPE (t))
1881     return t;
1882 
1883   r = copy_node (t);
1884   TREE_TYPE (r) = type;
1885   for (i = 0; i < n; ++i)
1886     TREE_OPERAND (r, i) = ops[i];
1887   return r;
1888 }
1889 
1890 /* Makes a copy of BINFO and TYPE, which is to be inherited into a
1891    graph dominated by T.  If BINFO is NULL, TYPE is a dependent base,
1892    and we do a shallow copy.  If BINFO is non-NULL, we do a deep copy.
1893    VIRT indicates whether TYPE is inherited virtually or not.
1894    IGO_PREV points at the previous binfo of the inheritance graph
1895    order chain.  The newly copied binfo's TREE_CHAIN forms this
1896    ordering.
1897 
1898    The CLASSTYPE_VBASECLASSES vector of T is constructed in the
1899    correct order. That is in the order the bases themselves should be
1900    constructed in.
1901 
1902    The BINFO_INHERITANCE of a virtual base class points to the binfo
1903    of the most derived type. ??? We could probably change this so that
1904    BINFO_INHERITANCE becomes synonymous with BINFO_PRIMARY, and hence
1905    remove a field.  They currently can only differ for primary virtual
1906    virtual bases.  */
1907 
1908 tree
copy_binfo(tree binfo,tree type,tree t,tree * igo_prev,int virt)1909 copy_binfo (tree binfo, tree type, tree t, tree *igo_prev, int virt)
1910 {
1911   tree new_binfo;
1912 
1913   if (virt)
1914     {
1915       /* See if we've already made this virtual base.  */
1916       new_binfo = binfo_for_vbase (type, t);
1917       if (new_binfo)
1918 	return new_binfo;
1919     }
1920 
1921   new_binfo = make_tree_binfo (binfo ? BINFO_N_BASE_BINFOS (binfo) : 0);
1922   BINFO_TYPE (new_binfo) = type;
1923 
1924   /* Chain it into the inheritance graph.  */
1925   TREE_CHAIN (*igo_prev) = new_binfo;
1926   *igo_prev = new_binfo;
1927 
1928   if (binfo && !BINFO_DEPENDENT_BASE_P (binfo))
1929     {
1930       int ix;
1931       tree base_binfo;
1932 
1933       gcc_assert (SAME_BINFO_TYPE_P (BINFO_TYPE (binfo), type));
1934 
1935       BINFO_OFFSET (new_binfo) = BINFO_OFFSET (binfo);
1936       BINFO_VIRTUALS (new_binfo) = BINFO_VIRTUALS (binfo);
1937 
1938       /* We do not need to copy the accesses, as they are read only.  */
1939       BINFO_BASE_ACCESSES (new_binfo) = BINFO_BASE_ACCESSES (binfo);
1940 
1941       /* Recursively copy base binfos of BINFO.  */
1942       for (ix = 0; BINFO_BASE_ITERATE (binfo, ix, base_binfo); ix++)
1943 	{
1944 	  tree new_base_binfo;
1945 	  new_base_binfo = copy_binfo (base_binfo, BINFO_TYPE (base_binfo),
1946 				       t, igo_prev,
1947 				       BINFO_VIRTUAL_P (base_binfo));
1948 
1949 	  if (!BINFO_INHERITANCE_CHAIN (new_base_binfo))
1950 	    BINFO_INHERITANCE_CHAIN (new_base_binfo) = new_binfo;
1951 	  BINFO_BASE_APPEND (new_binfo, new_base_binfo);
1952 	}
1953     }
1954   else
1955     BINFO_DEPENDENT_BASE_P (new_binfo) = 1;
1956 
1957   if (virt)
1958     {
1959       /* Push it onto the list after any virtual bases it contains
1960 	 will have been pushed.  */
1961       CLASSTYPE_VBASECLASSES (t)->quick_push (new_binfo);
1962       BINFO_VIRTUAL_P (new_binfo) = 1;
1963       BINFO_INHERITANCE_CHAIN (new_binfo) = TYPE_BINFO (t);
1964     }
1965 
1966   return new_binfo;
1967 }
1968 
1969 /* Hashing of lists so that we don't make duplicates.
1970    The entry point is `list_hash_canon'.  */
1971 
1972 struct list_proxy
1973 {
1974   tree purpose;
1975   tree value;
1976   tree chain;
1977 };
1978 
1979 struct list_hasher : ggc_ptr_hash<tree_node>
1980 {
1981   typedef list_proxy *compare_type;
1982 
1983   static hashval_t hash (tree);
1984   static bool equal (tree, list_proxy *);
1985 };
1986 
1987 /* Now here is the hash table.  When recording a list, it is added
1988    to the slot whose index is the hash code mod the table size.
1989    Note that the hash table is used for several kinds of lists.
1990    While all these live in the same table, they are completely independent,
1991    and the hash code is computed differently for each of these.  */
1992 
1993 static GTY (()) hash_table<list_hasher> *list_hash_table;
1994 
1995 /* Compare ENTRY (an entry in the hash table) with DATA (a list_proxy
1996    for a node we are thinking about adding).  */
1997 
1998 bool
equal(tree t,list_proxy * proxy)1999 list_hasher::equal (tree t, list_proxy *proxy)
2000 {
2001   return (TREE_VALUE (t) == proxy->value
2002 	  && TREE_PURPOSE (t) == proxy->purpose
2003 	  && TREE_CHAIN (t) == proxy->chain);
2004 }
2005 
2006 /* Compute a hash code for a list (chain of TREE_LIST nodes
2007    with goodies in the TREE_PURPOSE, TREE_VALUE, and bits of the
2008    TREE_COMMON slots), by adding the hash codes of the individual entries.  */
2009 
2010 static hashval_t
list_hash_pieces(tree purpose,tree value,tree chain)2011 list_hash_pieces (tree purpose, tree value, tree chain)
2012 {
2013   hashval_t hashcode = 0;
2014 
2015   if (chain)
2016     hashcode += TREE_HASH (chain);
2017 
2018   if (value)
2019     hashcode += TREE_HASH (value);
2020   else
2021     hashcode += 1007;
2022   if (purpose)
2023     hashcode += TREE_HASH (purpose);
2024   else
2025     hashcode += 1009;
2026   return hashcode;
2027 }
2028 
2029 /* Hash an already existing TREE_LIST.  */
2030 
2031 hashval_t
hash(tree t)2032 list_hasher::hash (tree t)
2033 {
2034   return list_hash_pieces (TREE_PURPOSE (t),
2035 			   TREE_VALUE (t),
2036 			   TREE_CHAIN (t));
2037 }
2038 
2039 /* Given list components PURPOSE, VALUE, AND CHAIN, return the canonical
2040    object for an identical list if one already exists.  Otherwise, build a
2041    new one, and record it as the canonical object.  */
2042 
2043 tree
hash_tree_cons(tree purpose,tree value,tree chain)2044 hash_tree_cons (tree purpose, tree value, tree chain)
2045 {
2046   int hashcode = 0;
2047   tree *slot;
2048   struct list_proxy proxy;
2049 
2050   /* Hash the list node.  */
2051   hashcode = list_hash_pieces (purpose, value, chain);
2052   /* Create a proxy for the TREE_LIST we would like to create.  We
2053      don't actually create it so as to avoid creating garbage.  */
2054   proxy.purpose = purpose;
2055   proxy.value = value;
2056   proxy.chain = chain;
2057   /* See if it is already in the table.  */
2058   slot = list_hash_table->find_slot_with_hash (&proxy, hashcode, INSERT);
2059   /* If not, create a new node.  */
2060   if (!*slot)
2061     *slot = tree_cons (purpose, value, chain);
2062   return (tree) *slot;
2063 }
2064 
2065 /* Constructor for hashed lists.  */
2066 
2067 tree
hash_tree_chain(tree value,tree chain)2068 hash_tree_chain (tree value, tree chain)
2069 {
2070   return hash_tree_cons (NULL_TREE, value, chain);
2071 }
2072 
2073 void
debug_binfo(tree elem)2074 debug_binfo (tree elem)
2075 {
2076   HOST_WIDE_INT n;
2077   tree virtuals;
2078 
2079   fprintf (stderr, "type \"%s\", offset = " HOST_WIDE_INT_PRINT_DEC
2080 	   "\nvtable type:\n",
2081 	   TYPE_NAME_STRING (BINFO_TYPE (elem)),
2082 	   TREE_INT_CST_LOW (BINFO_OFFSET (elem)));
2083   debug_tree (BINFO_TYPE (elem));
2084   if (BINFO_VTABLE (elem))
2085     fprintf (stderr, "vtable decl \"%s\"\n",
2086 	     IDENTIFIER_POINTER (DECL_NAME (get_vtbl_decl_for_binfo (elem))));
2087   else
2088     fprintf (stderr, "no vtable decl yet\n");
2089   fprintf (stderr, "virtuals:\n");
2090   virtuals = BINFO_VIRTUALS (elem);
2091   n = 0;
2092 
2093   while (virtuals)
2094     {
2095       tree fndecl = TREE_VALUE (virtuals);
2096       fprintf (stderr, "%s [%ld =? %ld]\n",
2097 	       IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (fndecl)),
2098 	       (long) n, (long) TREE_INT_CST_LOW (DECL_VINDEX (fndecl)));
2099       ++n;
2100       virtuals = TREE_CHAIN (virtuals);
2101     }
2102 }
2103 
2104 /* Build a representation for the qualified name SCOPE::NAME.  TYPE is
2105    the type of the result expression, if known, or NULL_TREE if the
2106    resulting expression is type-dependent.  If TEMPLATE_P is true,
2107    NAME is known to be a template because the user explicitly used the
2108    "template" keyword after the "::".
2109 
2110    All SCOPE_REFs should be built by use of this function.  */
2111 
2112 tree
build_qualified_name(tree type,tree scope,tree name,bool template_p)2113 build_qualified_name (tree type, tree scope, tree name, bool template_p)
2114 {
2115   tree t;
2116   if (type == error_mark_node
2117       || scope == error_mark_node
2118       || name == error_mark_node)
2119     return error_mark_node;
2120   gcc_assert (TREE_CODE (name) != SCOPE_REF);
2121   t = build2 (SCOPE_REF, type, scope, name);
2122   QUALIFIED_NAME_IS_TEMPLATE (t) = template_p;
2123   PTRMEM_OK_P (t) = true;
2124   if (type)
2125     t = convert_from_reference (t);
2126   return t;
2127 }
2128 
2129 /* Like check_qualified_type, but also check ref-qualifier, exception
2130    specification, and whether the return type was specified after the
2131    parameters.  */
2132 
2133 static bool
cp_check_qualified_type(const_tree cand,const_tree base,int type_quals,cp_ref_qualifier rqual,tree raises,bool late)2134 cp_check_qualified_type (const_tree cand, const_tree base, int type_quals,
2135 			 cp_ref_qualifier rqual, tree raises, bool late)
2136 {
2137   return (TYPE_QUALS (cand) == type_quals
2138 	  && check_base_type (cand, base)
2139 	  && comp_except_specs (raises, TYPE_RAISES_EXCEPTIONS (cand),
2140 				ce_exact)
2141 	  && TYPE_HAS_LATE_RETURN_TYPE (cand) == late
2142 	  && type_memfn_rqual (cand) == rqual);
2143 }
2144 
2145 /* Build the FUNCTION_TYPE or METHOD_TYPE with the ref-qualifier RQUAL.  */
2146 
2147 tree
build_ref_qualified_type(tree type,cp_ref_qualifier rqual)2148 build_ref_qualified_type (tree type, cp_ref_qualifier rqual)
2149 {
2150   tree raises = TYPE_RAISES_EXCEPTIONS (type);
2151   bool late = TYPE_HAS_LATE_RETURN_TYPE (type);
2152   return build_cp_fntype_variant (type, rqual, raises, late);
2153 }
2154 
2155 /* Make a raw overload node containing FN.  */
2156 
2157 tree
ovl_make(tree fn,tree next)2158 ovl_make (tree fn, tree next)
2159 {
2160   tree result = make_node (OVERLOAD);
2161 
2162   if (TREE_CODE (fn) == OVERLOAD)
2163     OVL_NESTED_P (result) = true;
2164 
2165   TREE_TYPE (result) = (next || TREE_CODE (fn) == TEMPLATE_DECL
2166 			? unknown_type_node : TREE_TYPE (fn));
2167   if (next && TREE_CODE (next) == OVERLOAD && OVL_DEDUP_P (next))
2168     OVL_DEDUP_P (result) = true;
2169   OVL_FUNCTION (result) = fn;
2170   OVL_CHAIN (result) = next;
2171   return result;
2172 }
2173 
2174 /* Add FN to the (potentially NULL) overload set OVL.  USING_P is
2175    true, if FN is via a using declaration.  We also pay attention to
2176    DECL_HIDDEN.  We keep the hidden decls first, but remaining ones
2177    are unordered.  */
2178 
2179 tree
ovl_insert(tree fn,tree maybe_ovl,bool using_p)2180 ovl_insert (tree fn, tree maybe_ovl, bool using_p)
2181 {
2182   tree result = maybe_ovl;
2183   tree insert_after = NULL_TREE;
2184 
2185   /* Skip hidden.  */
2186   for (; maybe_ovl && TREE_CODE (maybe_ovl) == OVERLOAD
2187 	 && OVL_HIDDEN_P (maybe_ovl);
2188        maybe_ovl = OVL_CHAIN (maybe_ovl))
2189     {
2190       gcc_checking_assert (!OVL_LOOKUP_P (maybe_ovl));
2191       insert_after = maybe_ovl;
2192     }
2193 
2194   bool hidden_p = DECL_HIDDEN_P (fn);
2195   if (maybe_ovl || using_p || hidden_p || TREE_CODE (fn) == TEMPLATE_DECL)
2196     {
2197       maybe_ovl = ovl_make (fn, maybe_ovl);
2198       if (hidden_p)
2199 	OVL_HIDDEN_P (maybe_ovl) = true;
2200       if (using_p)
2201 	OVL_DEDUP_P (maybe_ovl) = OVL_USING_P (maybe_ovl) = true;
2202     }
2203   else
2204     maybe_ovl = fn;
2205 
2206   if (insert_after)
2207     {
2208       OVL_CHAIN (insert_after) = maybe_ovl;
2209       TREE_TYPE (insert_after) = unknown_type_node;
2210     }
2211   else
2212     result = maybe_ovl;
2213 
2214   return result;
2215 }
2216 
2217 /* Skip any hidden names at the beginning of OVL.   */
2218 
2219 tree
ovl_skip_hidden(tree ovl)2220 ovl_skip_hidden (tree ovl)
2221 {
2222   for (;
2223        ovl && TREE_CODE (ovl) == OVERLOAD && OVL_HIDDEN_P (ovl);
2224        ovl = OVL_CHAIN (ovl))
2225     gcc_checking_assert (DECL_HIDDEN_P (OVL_FUNCTION (ovl)));
2226 
2227   if (ovl && TREE_CODE (ovl) != OVERLOAD && DECL_HIDDEN_P (ovl))
2228     {
2229       /* Any hidden functions should have been wrapped in an
2230 	 overload, but injected friend classes will not.  */
2231       gcc_checking_assert (!DECL_DECLARES_FUNCTION_P (ovl));
2232       ovl = NULL_TREE;
2233     }
2234 
2235   return ovl;
2236 }
2237 
2238 /* NODE is an OVL_HIDDEN_P node which is now revealed.  */
2239 
2240 tree
reveal_node(tree overload,tree node)2241 ovl_iterator::reveal_node (tree overload, tree node)
2242 {
2243   /* We cannot have returned NODE as part of a lookup overload, so we
2244      don't have to worry about preserving that.  */
2245 
2246   OVL_HIDDEN_P (node) = false;
2247   if (tree chain = OVL_CHAIN (node))
2248     if (TREE_CODE (chain) == OVERLOAD)
2249       {
2250 	if (OVL_HIDDEN_P (chain))
2251 	  {
2252 	    /* The node needs moving, and the simplest way is to remove it
2253 	       and reinsert.  */
2254 	    overload = remove_node (overload, node);
2255 	    overload = ovl_insert (OVL_FUNCTION (node), overload);
2256 	  }
2257 	else if (OVL_DEDUP_P (chain))
2258 	  OVL_DEDUP_P (node) = true;
2259       }
2260   return overload;
2261 }
2262 
2263 /* NODE is on the overloads of OVL.  Remove it.
2264    The removed node is unaltered and may continue to be iterated
2265    from (i.e. it is safe to remove a node from an overload one is
2266    currently iterating over).  */
2267 
2268 tree
remove_node(tree overload,tree node)2269 ovl_iterator::remove_node (tree overload, tree node)
2270 {
2271   tree *slot = &overload;
2272   while (*slot != node)
2273     {
2274       tree probe = *slot;
2275       gcc_checking_assert (!OVL_LOOKUP_P (probe));
2276 
2277       slot = &OVL_CHAIN (probe);
2278     }
2279 
2280   /* Stitch out NODE.  We don't have to worry about now making a
2281      singleton overload (and consequently maybe setting its type),
2282      because all uses of this function will be followed by inserting a
2283      new node that must follow the place we've cut this out from.  */
2284   if (TREE_CODE (node) != OVERLOAD)
2285     /* Cloned inherited ctors don't mark themselves as via_using.  */
2286     *slot = NULL_TREE;
2287   else
2288     *slot = OVL_CHAIN (node);
2289 
2290   return overload;
2291 }
2292 
2293 /* Mark or unmark a lookup set. */
2294 
2295 void
lookup_mark(tree ovl,bool val)2296 lookup_mark (tree ovl, bool val)
2297 {
2298   for (lkp_iterator iter (ovl); iter; ++iter)
2299     {
2300       gcc_checking_assert (LOOKUP_SEEN_P (*iter) != val);
2301       LOOKUP_SEEN_P (*iter) = val;
2302     }
2303 }
2304 
2305 /* Add a set of new FNS into a lookup.  */
2306 
2307 tree
lookup_add(tree fns,tree lookup)2308 lookup_add (tree fns, tree lookup)
2309 {
2310   if (lookup || TREE_CODE (fns) == TEMPLATE_DECL)
2311     {
2312       lookup = ovl_make (fns, lookup);
2313       OVL_LOOKUP_P (lookup) = true;
2314     }
2315   else
2316     lookup = fns;
2317 
2318   return lookup;
2319 }
2320 
2321 /* FNS is a new overload set, add them to LOOKUP, if they are not
2322    already present there.  */
2323 
2324 tree
lookup_maybe_add(tree fns,tree lookup,bool deduping)2325 lookup_maybe_add (tree fns, tree lookup, bool deduping)
2326 {
2327   if (deduping)
2328     for (tree next, probe = fns; probe; probe = next)
2329       {
2330 	tree fn = probe;
2331 	next = NULL_TREE;
2332 
2333 	if (TREE_CODE (probe) == OVERLOAD)
2334 	  {
2335 	    fn = OVL_FUNCTION (probe);
2336 	    next = OVL_CHAIN (probe);
2337 	  }
2338 
2339 	if (!LOOKUP_SEEN_P (fn))
2340 	  LOOKUP_SEEN_P (fn) = true;
2341 	else
2342 	  {
2343 	    /* This function was already seen.  Insert all the
2344 	       predecessors onto the lookup.  */
2345 	    for (; fns != probe; fns = OVL_CHAIN (fns))
2346 	      {
2347 		lookup = lookup_add (OVL_FUNCTION (fns), lookup);
2348 		/* Propagate OVL_USING, but OVL_HIDDEN &
2349 		   OVL_DEDUP_P don't matter.  */
2350 		if (OVL_USING_P (fns))
2351 		  OVL_USING_P (lookup) = true;
2352 	      }
2353 
2354 	    /* And now skip this function.  */
2355 	    fns = next;
2356 	  }
2357       }
2358 
2359   if (fns)
2360     /* We ended in a set of new functions.  Add them all in one go.  */
2361     lookup = lookup_add (fns, lookup);
2362 
2363   return lookup;
2364 }
2365 
2366 /* Returns nonzero if X is an expression for a (possibly overloaded)
2367    function.  If "f" is a function or function template, "f", "c->f",
2368    "c.f", "C::f", and "f<int>" will all be considered possibly
2369    overloaded functions.  Returns 2 if the function is actually
2370    overloaded, i.e., if it is impossible to know the type of the
2371    function without performing overload resolution.  */
2372 
2373 int
is_overloaded_fn(tree x)2374 is_overloaded_fn (tree x)
2375 {
2376   STRIP_ANY_LOCATION_WRAPPER (x);
2377 
2378   /* A baselink is also considered an overloaded function.  */
2379   if (TREE_CODE (x) == OFFSET_REF
2380       || TREE_CODE (x) == COMPONENT_REF)
2381     x = TREE_OPERAND (x, 1);
2382   x = MAYBE_BASELINK_FUNCTIONS (x);
2383   if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
2384     x = TREE_OPERAND (x, 0);
2385 
2386   if (DECL_FUNCTION_TEMPLATE_P (OVL_FIRST (x))
2387       || (TREE_CODE (x) == OVERLOAD && !OVL_SINGLE_P (x)))
2388     return 2;
2389 
2390   return (TREE_CODE (x) == FUNCTION_DECL
2391 	  || TREE_CODE (x) == OVERLOAD);
2392 }
2393 
2394 /* X is the CALL_EXPR_FN of a CALL_EXPR.  If X represents a dependent name
2395    (14.6.2), return the IDENTIFIER_NODE for that name.  Otherwise, return
2396    NULL_TREE.  */
2397 
2398 tree
dependent_name(tree x)2399 dependent_name (tree x)
2400 {
2401   if (identifier_p (x))
2402     return x;
2403   if (TREE_CODE (x) == TEMPLATE_ID_EXPR)
2404     x = TREE_OPERAND (x, 0);
2405   if (TREE_CODE (x) == OVERLOAD || TREE_CODE (x) == FUNCTION_DECL)
2406     return OVL_NAME (x);
2407   return NULL_TREE;
2408 }
2409 
2410 /* Returns true iff X is an expression for an overloaded function
2411    whose type cannot be known without performing overload
2412    resolution.  */
2413 
2414 bool
really_overloaded_fn(tree x)2415 really_overloaded_fn (tree x)
2416 {
2417   return is_overloaded_fn (x) == 2;
2418 }
2419 
2420 /* Get the overload set FROM refers to.  Returns NULL if it's not an
2421    overload set.  */
2422 
2423 tree
maybe_get_fns(tree from)2424 maybe_get_fns (tree from)
2425 {
2426   STRIP_ANY_LOCATION_WRAPPER (from);
2427 
2428   /* A baselink is also considered an overloaded function.  */
2429   if (TREE_CODE (from) == OFFSET_REF
2430       || TREE_CODE (from) == COMPONENT_REF)
2431     from = TREE_OPERAND (from, 1);
2432   if (BASELINK_P (from))
2433     from = BASELINK_FUNCTIONS (from);
2434   if (TREE_CODE (from) == TEMPLATE_ID_EXPR)
2435     from = TREE_OPERAND (from, 0);
2436 
2437   if (TREE_CODE (from) == OVERLOAD
2438       || TREE_CODE (from) == FUNCTION_DECL)
2439     return from;
2440 
2441   return NULL;
2442 }
2443 
2444 /* FROM refers to an overload set.  Return that set (or die).  */
2445 
2446 tree
get_fns(tree from)2447 get_fns (tree from)
2448 {
2449   tree res = maybe_get_fns (from);
2450 
2451   gcc_assert (res);
2452   return res;
2453 }
2454 
2455 /* Return the first function of the overload set FROM refers to.  */
2456 
2457 tree
get_first_fn(tree from)2458 get_first_fn (tree from)
2459 {
2460   return OVL_FIRST (get_fns (from));
2461 }
2462 
2463 /* Return the scope where the overloaded functions OVL were found.  */
2464 
2465 tree
ovl_scope(tree ovl)2466 ovl_scope (tree ovl)
2467 {
2468   if (TREE_CODE (ovl) == OFFSET_REF
2469       || TREE_CODE (ovl) == COMPONENT_REF)
2470     ovl = TREE_OPERAND (ovl, 1);
2471   if (TREE_CODE (ovl) == BASELINK)
2472     return BINFO_TYPE (BASELINK_BINFO (ovl));
2473   if (TREE_CODE (ovl) == TEMPLATE_ID_EXPR)
2474     ovl = TREE_OPERAND (ovl, 0);
2475   /* Skip using-declarations.  */
2476   lkp_iterator iter (ovl);
2477   do
2478     ovl = *iter;
2479   while (iter.using_p () && ++iter);
2480 
2481   return CP_DECL_CONTEXT (ovl);
2482 }
2483 
2484 #define PRINT_RING_SIZE 4
2485 
2486 static const char *
cxx_printable_name_internal(tree decl,int v,bool translate)2487 cxx_printable_name_internal (tree decl, int v, bool translate)
2488 {
2489   static unsigned int uid_ring[PRINT_RING_SIZE];
2490   static char *print_ring[PRINT_RING_SIZE];
2491   static bool trans_ring[PRINT_RING_SIZE];
2492   static int ring_counter;
2493   int i;
2494 
2495   /* Only cache functions.  */
2496   if (v < 2
2497       || TREE_CODE (decl) != FUNCTION_DECL
2498       || DECL_LANG_SPECIFIC (decl) == 0)
2499     return lang_decl_name (decl, v, translate);
2500 
2501   /* See if this print name is lying around.  */
2502   for (i = 0; i < PRINT_RING_SIZE; i++)
2503     if (uid_ring[i] == DECL_UID (decl) && translate == trans_ring[i])
2504       /* yes, so return it.  */
2505       return print_ring[i];
2506 
2507   if (++ring_counter == PRINT_RING_SIZE)
2508     ring_counter = 0;
2509 
2510   if (current_function_decl != NULL_TREE)
2511     {
2512       /* There may be both translated and untranslated versions of the
2513 	 name cached.  */
2514       for (i = 0; i < 2; i++)
2515 	{
2516 	  if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
2517 	    ring_counter += 1;
2518 	  if (ring_counter == PRINT_RING_SIZE)
2519 	    ring_counter = 0;
2520 	}
2521       gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
2522     }
2523 
2524   free (print_ring[ring_counter]);
2525 
2526   print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v, translate));
2527   uid_ring[ring_counter] = DECL_UID (decl);
2528   trans_ring[ring_counter] = translate;
2529   return print_ring[ring_counter];
2530 }
2531 
2532 const char *
cxx_printable_name(tree decl,int v)2533 cxx_printable_name (tree decl, int v)
2534 {
2535   return cxx_printable_name_internal (decl, v, false);
2536 }
2537 
2538 const char *
cxx_printable_name_translate(tree decl,int v)2539 cxx_printable_name_translate (tree decl, int v)
2540 {
2541   return cxx_printable_name_internal (decl, v, true);
2542 }
2543 
2544 /* Return the canonical version of exception-specification RAISES for a C++17
2545    function type, for use in type comparison and building TYPE_CANONICAL.  */
2546 
2547 tree
canonical_eh_spec(tree raises)2548 canonical_eh_spec (tree raises)
2549 {
2550   if (raises == NULL_TREE)
2551     return raises;
2552   else if (DEFERRED_NOEXCEPT_SPEC_P (raises)
2553 	   || uses_template_parms (raises)
2554 	   || uses_template_parms (TREE_PURPOSE (raises)))
2555     /* Keep a dependent or deferred exception specification.  */
2556     return raises;
2557   else if (nothrow_spec_p (raises))
2558     /* throw() -> noexcept.  */
2559     return noexcept_true_spec;
2560   else
2561     /* For C++17 type matching, anything else -> nothing.  */
2562     return NULL_TREE;
2563 }
2564 
2565 tree
build_cp_fntype_variant(tree type,cp_ref_qualifier rqual,tree raises,bool late)2566 build_cp_fntype_variant (tree type, cp_ref_qualifier rqual,
2567 			 tree raises, bool late)
2568 {
2569   cp_cv_quals type_quals = TYPE_QUALS (type);
2570 
2571   if (cp_check_qualified_type (type, type, type_quals, rqual, raises, late))
2572     return type;
2573 
2574   tree v = TYPE_MAIN_VARIANT (type);
2575   for (; v; v = TYPE_NEXT_VARIANT (v))
2576     if (cp_check_qualified_type (v, type, type_quals, rqual, raises, late))
2577       return v;
2578 
2579   /* Need to build a new variant.  */
2580   v = build_variant_type_copy (type);
2581   TYPE_RAISES_EXCEPTIONS (v) = raises;
2582   TYPE_HAS_LATE_RETURN_TYPE (v) = late;
2583   switch (rqual)
2584     {
2585     case REF_QUAL_RVALUE:
2586       FUNCTION_RVALUE_QUALIFIED (v) = 1;
2587       FUNCTION_REF_QUALIFIED (v) = 1;
2588       break;
2589     case REF_QUAL_LVALUE:
2590       FUNCTION_RVALUE_QUALIFIED (v) = 0;
2591       FUNCTION_REF_QUALIFIED (v) = 1;
2592       break;
2593     default:
2594       FUNCTION_REF_QUALIFIED (v) = 0;
2595       break;
2596     }
2597 
2598   /* Canonicalize the exception specification.  */
2599   tree cr = flag_noexcept_type ? canonical_eh_spec (raises) : NULL_TREE;
2600 
2601   if (TYPE_STRUCTURAL_EQUALITY_P (type))
2602     /* Propagate structural equality. */
2603     SET_TYPE_STRUCTURAL_EQUALITY (v);
2604   else if (TYPE_CANONICAL (type) != type || cr != raises || late)
2605     /* Build the underlying canonical type, since it is different
2606        from TYPE. */
2607     TYPE_CANONICAL (v) = build_cp_fntype_variant (TYPE_CANONICAL (type),
2608 						  rqual, cr, false);
2609   else
2610     /* T is its own canonical type. */
2611     TYPE_CANONICAL (v) = v;
2612 
2613   return v;
2614 }
2615 
2616 /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions
2617    listed in RAISES.  */
2618 
2619 tree
build_exception_variant(tree type,tree raises)2620 build_exception_variant (tree type, tree raises)
2621 {
2622   cp_ref_qualifier rqual = type_memfn_rqual (type);
2623   bool late = TYPE_HAS_LATE_RETURN_TYPE (type);
2624   return build_cp_fntype_variant (type, rqual, raises, late);
2625 }
2626 
2627 /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
2628    BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
2629    arguments.  */
2630 
2631 tree
bind_template_template_parm(tree t,tree newargs)2632 bind_template_template_parm (tree t, tree newargs)
2633 {
2634   tree decl = TYPE_NAME (t);
2635   tree t2;
2636 
2637   t2 = cxx_make_type (BOUND_TEMPLATE_TEMPLATE_PARM);
2638   decl = build_decl (input_location,
2639 		     TYPE_DECL, DECL_NAME (decl), NULL_TREE);
2640 
2641   /* These nodes have to be created to reflect new TYPE_DECL and template
2642      arguments.  */
2643   TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
2644   TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
2645   TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
2646     = build_template_info (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t), newargs);
2647 
2648   TREE_TYPE (decl) = t2;
2649   TYPE_NAME (t2) = decl;
2650   TYPE_STUB_DECL (t2) = decl;
2651   TYPE_SIZE (t2) = 0;
2652   SET_TYPE_STRUCTURAL_EQUALITY (t2);
2653 
2654   return t2;
2655 }
2656 
2657 /* Called from count_trees via walk_tree.  */
2658 
2659 static tree
count_trees_r(tree * tp,int * walk_subtrees,void * data)2660 count_trees_r (tree *tp, int *walk_subtrees, void *data)
2661 {
2662   ++*((int *) data);
2663 
2664   if (TYPE_P (*tp))
2665     *walk_subtrees = 0;
2666 
2667   return NULL_TREE;
2668 }
2669 
2670 /* Debugging function for measuring the rough complexity of a tree
2671    representation.  */
2672 
2673 int
count_trees(tree t)2674 count_trees (tree t)
2675 {
2676   int n_trees = 0;
2677   cp_walk_tree_without_duplicates (&t, count_trees_r, &n_trees);
2678   return n_trees;
2679 }
2680 
2681 /* Called from verify_stmt_tree via walk_tree.  */
2682 
2683 static tree
verify_stmt_tree_r(tree * tp,int *,void * data)2684 verify_stmt_tree_r (tree* tp, int * /*walk_subtrees*/, void* data)
2685 {
2686   tree t = *tp;
2687   hash_table<nofree_ptr_hash <tree_node> > *statements
2688       = static_cast <hash_table<nofree_ptr_hash <tree_node> > *> (data);
2689   tree_node **slot;
2690 
2691   if (!STATEMENT_CODE_P (TREE_CODE (t)))
2692     return NULL_TREE;
2693 
2694   /* If this statement is already present in the hash table, then
2695      there is a circularity in the statement tree.  */
2696   gcc_assert (!statements->find (t));
2697 
2698   slot = statements->find_slot (t, INSERT);
2699   *slot = t;
2700 
2701   return NULL_TREE;
2702 }
2703 
2704 /* Debugging function to check that the statement T has not been
2705    corrupted.  For now, this function simply checks that T contains no
2706    circularities.  */
2707 
2708 void
verify_stmt_tree(tree t)2709 verify_stmt_tree (tree t)
2710 {
2711   hash_table<nofree_ptr_hash <tree_node> > statements (37);
2712   cp_walk_tree (&t, verify_stmt_tree_r, &statements, NULL);
2713 }
2714 
2715 /* Check if the type T depends on a type with no linkage and if so, return
2716    it.  If RELAXED_P then do not consider a class type declared within
2717    a vague-linkage function to have no linkage.  */
2718 
2719 tree
no_linkage_check(tree t,bool relaxed_p)2720 no_linkage_check (tree t, bool relaxed_p)
2721 {
2722   tree r;
2723 
2724   /* Lambda types that don't have mangling scope have no linkage.  We
2725      check CLASSTYPE_LAMBDA_EXPR for error_mark_node because
2726      when we get here from pushtag none of the lambda information is
2727      set up yet, so we want to assume that the lambda has linkage and
2728      fix it up later if not.  We need to check this even in templates so
2729      that we properly handle a lambda-expression in the signature.  */
2730   if (LAMBDA_TYPE_P (t)
2731       && CLASSTYPE_LAMBDA_EXPR (t) != error_mark_node
2732       && LAMBDA_TYPE_EXTRA_SCOPE (t) == NULL_TREE)
2733     return t;
2734 
2735   /* Otherwise there's no point in checking linkage on template functions; we
2736      can't know their complete types.  */
2737   if (processing_template_decl)
2738     return NULL_TREE;
2739 
2740   switch (TREE_CODE (t))
2741     {
2742     case RECORD_TYPE:
2743       if (TYPE_PTRMEMFUNC_P (t))
2744 	goto ptrmem;
2745       /* Fall through.  */
2746     case UNION_TYPE:
2747       if (!CLASS_TYPE_P (t))
2748 	return NULL_TREE;
2749       /* Fall through.  */
2750     case ENUMERAL_TYPE:
2751       /* Only treat unnamed types as having no linkage if they're at
2752 	 namespace scope.  This is core issue 966.  */
2753       if (TYPE_UNNAMED_P (t) && TYPE_NAMESPACE_SCOPE_P (t))
2754 	return t;
2755 
2756       for (r = CP_TYPE_CONTEXT (t); ; )
2757 	{
2758 	  /* If we're a nested type of a !TREE_PUBLIC class, we might not
2759 	     have linkage, or we might just be in an anonymous namespace.
2760 	     If we're in a TREE_PUBLIC class, we have linkage.  */
2761 	  if (TYPE_P (r) && !TREE_PUBLIC (TYPE_NAME (r)))
2762 	    return no_linkage_check (TYPE_CONTEXT (t), relaxed_p);
2763 	  else if (TREE_CODE (r) == FUNCTION_DECL)
2764 	    {
2765 	      if (!relaxed_p || !vague_linkage_p (r))
2766 		return t;
2767 	      else
2768 		r = CP_DECL_CONTEXT (r);
2769 	    }
2770 	  else
2771 	    break;
2772 	}
2773 
2774       return NULL_TREE;
2775 
2776     case ARRAY_TYPE:
2777     case POINTER_TYPE:
2778     case REFERENCE_TYPE:
2779     case VECTOR_TYPE:
2780       return no_linkage_check (TREE_TYPE (t), relaxed_p);
2781 
2782     case OFFSET_TYPE:
2783     ptrmem:
2784       r = no_linkage_check (TYPE_PTRMEM_POINTED_TO_TYPE (t),
2785 			    relaxed_p);
2786       if (r)
2787 	return r;
2788       return no_linkage_check (TYPE_PTRMEM_CLASS_TYPE (t), relaxed_p);
2789 
2790     case METHOD_TYPE:
2791     case FUNCTION_TYPE:
2792       {
2793 	tree parm = TYPE_ARG_TYPES (t);
2794 	if (TREE_CODE (t) == METHOD_TYPE)
2795 	  /* The 'this' pointer isn't interesting; a method has the same
2796 	     linkage (or lack thereof) as its enclosing class.  */
2797 	  parm = TREE_CHAIN (parm);
2798 	for (;
2799 	     parm && parm != void_list_node;
2800 	     parm = TREE_CHAIN (parm))
2801 	  {
2802 	    r = no_linkage_check (TREE_VALUE (parm), relaxed_p);
2803 	    if (r)
2804 	      return r;
2805 	  }
2806 	return no_linkage_check (TREE_TYPE (t), relaxed_p);
2807       }
2808 
2809     default:
2810       return NULL_TREE;
2811     }
2812 }
2813 
2814 extern int depth_reached;
2815 
2816 void
cxx_print_statistics(void)2817 cxx_print_statistics (void)
2818 {
2819   print_template_statistics ();
2820   if (GATHER_STATISTICS)
2821     fprintf (stderr, "maximum template instantiation depth reached: %d\n",
2822 	     depth_reached);
2823 }
2824 
2825 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2826    (which is an ARRAY_TYPE).  This counts only elements of the top
2827    array.  */
2828 
2829 tree
array_type_nelts_top(tree type)2830 array_type_nelts_top (tree type)
2831 {
2832   return fold_build2_loc (input_location,
2833 		      PLUS_EXPR, sizetype,
2834 		      array_type_nelts (type),
2835 		      size_one_node);
2836 }
2837 
2838 /* Return, as an INTEGER_CST node, the number of elements for TYPE
2839    (which is an ARRAY_TYPE).  This one is a recursive count of all
2840    ARRAY_TYPEs that are clumped together.  */
2841 
2842 tree
array_type_nelts_total(tree type)2843 array_type_nelts_total (tree type)
2844 {
2845   tree sz = array_type_nelts_top (type);
2846   type = TREE_TYPE (type);
2847   while (TREE_CODE (type) == ARRAY_TYPE)
2848     {
2849       tree n = array_type_nelts_top (type);
2850       sz = fold_build2_loc (input_location,
2851 			MULT_EXPR, sizetype, sz, n);
2852       type = TREE_TYPE (type);
2853     }
2854   return sz;
2855 }
2856 
2857 struct bot_data
2858 {
2859   splay_tree target_remap;
2860   bool clear_location;
2861 };
2862 
2863 /* Called from break_out_target_exprs via mapcar.  */
2864 
2865 static tree
bot_manip(tree * tp,int * walk_subtrees,void * data_)2866 bot_manip (tree* tp, int* walk_subtrees, void* data_)
2867 {
2868   bot_data &data = *(bot_data*)data_;
2869   splay_tree target_remap = data.target_remap;
2870   tree t = *tp;
2871 
2872   if (!TYPE_P (t) && TREE_CONSTANT (t) && !TREE_SIDE_EFFECTS (t))
2873     {
2874       /* There can't be any TARGET_EXPRs or their slot variables below this
2875 	 point.  But we must make a copy, in case subsequent processing
2876 	 alters any part of it.  For example, during gimplification a cast
2877 	 of the form (T) &X::f (where "f" is a member function) will lead
2878 	 to replacing the PTRMEM_CST for &X::f with a VAR_DECL.  */
2879       *walk_subtrees = 0;
2880       *tp = unshare_expr (t);
2881       return NULL_TREE;
2882     }
2883   if (TREE_CODE (t) == TARGET_EXPR)
2884     {
2885       tree u;
2886 
2887       if (TREE_CODE (TREE_OPERAND (t, 1)) == AGGR_INIT_EXPR)
2888 	{
2889 	  u = build_cplus_new (TREE_TYPE (t), TREE_OPERAND (t, 1),
2890 			       tf_warning_or_error);
2891 	  if (u == error_mark_node)
2892 	    return u;
2893 	  if (AGGR_INIT_ZERO_FIRST (TREE_OPERAND (t, 1)))
2894 	    AGGR_INIT_ZERO_FIRST (TREE_OPERAND (u, 1)) = true;
2895 	}
2896       else
2897 	u = build_target_expr_with_type (TREE_OPERAND (t, 1), TREE_TYPE (t),
2898 					 tf_warning_or_error);
2899 
2900       TARGET_EXPR_IMPLICIT_P (u) = TARGET_EXPR_IMPLICIT_P (t);
2901       TARGET_EXPR_LIST_INIT_P (u) = TARGET_EXPR_LIST_INIT_P (t);
2902       TARGET_EXPR_DIRECT_INIT_P (u) = TARGET_EXPR_DIRECT_INIT_P (t);
2903 
2904       /* Map the old variable to the new one.  */
2905       splay_tree_insert (target_remap,
2906 			 (splay_tree_key) TREE_OPERAND (t, 0),
2907 			 (splay_tree_value) TREE_OPERAND (u, 0));
2908 
2909       TREE_OPERAND (u, 1) = break_out_target_exprs (TREE_OPERAND (u, 1),
2910 						    data.clear_location);
2911       if (TREE_OPERAND (u, 1) == error_mark_node)
2912 	return error_mark_node;
2913 
2914       /* Replace the old expression with the new version.  */
2915       *tp = u;
2916       /* We don't have to go below this point; the recursive call to
2917 	 break_out_target_exprs will have handled anything below this
2918 	 point.  */
2919       *walk_subtrees = 0;
2920       return NULL_TREE;
2921     }
2922   if (TREE_CODE (*tp) == SAVE_EXPR)
2923     {
2924       t = *tp;
2925       splay_tree_node n = splay_tree_lookup (target_remap,
2926 					     (splay_tree_key) t);
2927       if (n)
2928 	{
2929 	  *tp = (tree)n->value;
2930 	  *walk_subtrees = 0;
2931 	}
2932       else
2933 	{
2934 	  copy_tree_r (tp, walk_subtrees, NULL);
2935 	  splay_tree_insert (target_remap,
2936 			     (splay_tree_key)t,
2937 			     (splay_tree_value)*tp);
2938 	  /* Make sure we don't remap an already-remapped SAVE_EXPR.  */
2939 	  splay_tree_insert (target_remap,
2940 			     (splay_tree_key)*tp,
2941 			     (splay_tree_value)*tp);
2942 	}
2943       return NULL_TREE;
2944     }
2945 
2946   /* Make a copy of this node.  */
2947   t = copy_tree_r (tp, walk_subtrees, NULL);
2948   if (TREE_CODE (*tp) == CALL_EXPR || TREE_CODE (*tp) == AGGR_INIT_EXPR)
2949     if (!processing_template_decl)
2950       set_flags_from_callee (*tp);
2951   if (data.clear_location && EXPR_HAS_LOCATION (*tp))
2952     SET_EXPR_LOCATION (*tp, input_location);
2953   return t;
2954 }
2955 
2956 /* Replace all remapped VAR_DECLs in T with their new equivalents.
2957    DATA is really a splay-tree mapping old variables to new
2958    variables.  */
2959 
2960 static tree
bot_replace(tree * t,int *,void * data_)2961 bot_replace (tree* t, int* /*walk_subtrees*/, void* data_)
2962 {
2963   bot_data &data = *(bot_data*)data_;
2964   splay_tree target_remap = data.target_remap;
2965 
2966   if (VAR_P (*t))
2967     {
2968       splay_tree_node n = splay_tree_lookup (target_remap,
2969 					     (splay_tree_key) *t);
2970       if (n)
2971 	*t = (tree) n->value;
2972     }
2973   else if (TREE_CODE (*t) == PARM_DECL
2974 	   && DECL_NAME (*t) == this_identifier
2975 	   && !DECL_CONTEXT (*t))
2976     {
2977       /* In an NSDMI we need to replace the 'this' parameter we used for
2978 	 parsing with the real one for this function.  */
2979       *t = current_class_ptr;
2980     }
2981   else if (TREE_CODE (*t) == CONVERT_EXPR
2982 	   && CONVERT_EXPR_VBASE_PATH (*t))
2983     {
2984       /* In an NSDMI build_base_path defers building conversions to virtual
2985 	 bases, and we handle it here.  */
2986       tree basetype = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (*t)));
2987       vec<tree, va_gc> *vbases = CLASSTYPE_VBASECLASSES (current_class_type);
2988       int i; tree binfo;
2989       FOR_EACH_VEC_SAFE_ELT (vbases, i, binfo)
2990 	if (BINFO_TYPE (binfo) == basetype)
2991 	  break;
2992       *t = build_base_path (PLUS_EXPR, TREE_OPERAND (*t, 0), binfo, true,
2993 			    tf_warning_or_error);
2994     }
2995 
2996   return NULL_TREE;
2997 }
2998 
2999 /* When we parse a default argument expression, we may create
3000    temporary variables via TARGET_EXPRs.  When we actually use the
3001    default-argument expression, we make a copy of the expression
3002    and replace the temporaries with appropriate local versions.
3003 
3004    If CLEAR_LOCATION is true, override any EXPR_LOCATION with
3005    input_location.  */
3006 
3007 tree
break_out_target_exprs(tree t,bool clear_location)3008 break_out_target_exprs (tree t, bool clear_location /* = false */)
3009 {
3010   static int target_remap_count;
3011   static splay_tree target_remap;
3012 
3013   if (!target_remap_count++)
3014     target_remap = splay_tree_new (splay_tree_compare_pointers,
3015 				   /*splay_tree_delete_key_fn=*/NULL,
3016 				   /*splay_tree_delete_value_fn=*/NULL);
3017   bot_data data = { target_remap, clear_location };
3018   if (cp_walk_tree (&t, bot_manip, &data, NULL) == error_mark_node)
3019     t = error_mark_node;
3020   cp_walk_tree (&t, bot_replace, &data, NULL);
3021 
3022   if (!--target_remap_count)
3023     {
3024       splay_tree_delete (target_remap);
3025       target_remap = NULL;
3026     }
3027 
3028   return t;
3029 }
3030 
3031 /* Build an expression for the subobject of OBJ at CONSTRUCTOR index INDEX,
3032    which we expect to have type TYPE.  */
3033 
3034 tree
build_ctor_subob_ref(tree index,tree type,tree obj)3035 build_ctor_subob_ref (tree index, tree type, tree obj)
3036 {
3037   if (index == NULL_TREE)
3038     /* Can't refer to a particular member of a vector.  */
3039     obj = NULL_TREE;
3040   else if (TREE_CODE (index) == INTEGER_CST)
3041     obj = cp_build_array_ref (input_location, obj, index, tf_none);
3042   else
3043     obj = build_class_member_access_expr (obj, index, NULL_TREE,
3044 					  /*reference*/false, tf_none);
3045   if (obj)
3046     {
3047       tree objtype = TREE_TYPE (obj);
3048       if (TREE_CODE (objtype) == ARRAY_TYPE && !TYPE_DOMAIN (objtype))
3049 	{
3050 	  /* When the destination object refers to a flexible array member
3051 	     verify that it matches the type of the source object except
3052 	     for its domain and qualifiers.  */
3053 	  gcc_assert (comptypes (TYPE_MAIN_VARIANT (type),
3054 	  			 TYPE_MAIN_VARIANT (objtype),
3055 	  			 COMPARE_REDECLARATION));
3056 	}
3057       else
3058 	gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, objtype));
3059     }
3060 
3061   return obj;
3062 }
3063 
3064 struct replace_placeholders_t
3065 {
3066   tree obj;	    /* The object to be substituted for a PLACEHOLDER_EXPR.  */
3067   tree exp;	    /* The outermost exp.  */
3068   bool seen;	    /* Whether we've encountered a PLACEHOLDER_EXPR.  */
3069   hash_set<tree> *pset;	/* To avoid walking same trees multiple times.  */
3070 };
3071 
3072 /* Like substitute_placeholder_in_expr, but handle C++ tree codes and
3073    build up subexpressions as we go deeper.  */
3074 
3075 static tree
replace_placeholders_r(tree * t,int * walk_subtrees,void * data_)3076 replace_placeholders_r (tree* t, int* walk_subtrees, void* data_)
3077 {
3078   replace_placeholders_t *d = static_cast<replace_placeholders_t*>(data_);
3079   tree obj = d->obj;
3080 
3081   if (TYPE_P (*t) || TREE_CONSTANT (*t))
3082     {
3083       *walk_subtrees = false;
3084       return NULL_TREE;
3085     }
3086 
3087   switch (TREE_CODE (*t))
3088     {
3089     case PLACEHOLDER_EXPR:
3090       {
3091 	tree x = obj;
3092 	for (; !same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (*t),
3093 							   TREE_TYPE (x));
3094 	     x = TREE_OPERAND (x, 0))
3095 	  gcc_assert (handled_component_p (x));
3096 	*t = unshare_expr (x);
3097 	*walk_subtrees = false;
3098 	d->seen = true;
3099       }
3100       break;
3101 
3102     case CONSTRUCTOR:
3103       {
3104 	constructor_elt *ce;
3105 	vec<constructor_elt,va_gc> *v = CONSTRUCTOR_ELTS (*t);
3106 	/* Don't walk into CONSTRUCTOR_PLACEHOLDER_BOUNDARY ctors
3107 	   other than the d->exp one, those have PLACEHOLDER_EXPRs
3108 	   related to another object.  */
3109 	if ((CONSTRUCTOR_PLACEHOLDER_BOUNDARY (*t)
3110 	     && *t != d->exp)
3111 	    || d->pset->add (*t))
3112 	  {
3113 	    *walk_subtrees = false;
3114 	    return NULL_TREE;
3115 	  }
3116 	for (unsigned i = 0; vec_safe_iterate (v, i, &ce); ++i)
3117 	  {
3118 	    tree *valp = &ce->value;
3119 	    tree type = TREE_TYPE (*valp);
3120 	    tree subob = obj;
3121 
3122 	    if (TREE_CODE (*valp) == CONSTRUCTOR
3123 		&& AGGREGATE_TYPE_P (type))
3124 	      {
3125 		/* If we're looking at the initializer for OBJ, then build
3126 		   a sub-object reference.  If we're looking at an
3127 		   initializer for another object, just pass OBJ down.  */
3128 		if (same_type_ignoring_top_level_qualifiers_p
3129 		    (TREE_TYPE (*t), TREE_TYPE (obj)))
3130 		  subob = build_ctor_subob_ref (ce->index, type, obj);
3131 		if (TREE_CODE (*valp) == TARGET_EXPR)
3132 		  valp = &TARGET_EXPR_INITIAL (*valp);
3133 	      }
3134 	    d->obj = subob;
3135 	    cp_walk_tree (valp, replace_placeholders_r, data_, NULL);
3136 	    d->obj = obj;
3137 	  }
3138 	*walk_subtrees = false;
3139 	break;
3140       }
3141 
3142     default:
3143       if (d->pset->add (*t))
3144 	*walk_subtrees = false;
3145       break;
3146     }
3147 
3148   return NULL_TREE;
3149 }
3150 
3151 /* Replace PLACEHOLDER_EXPRs in EXP with object OBJ.  SEEN_P is set if
3152    a PLACEHOLDER_EXPR has been encountered.  */
3153 
3154 tree
replace_placeholders(tree exp,tree obj,bool * seen_p)3155 replace_placeholders (tree exp, tree obj, bool *seen_p)
3156 {
3157   /* This is only relevant for C++14.  */
3158   if (cxx_dialect < cxx14)
3159     return exp;
3160 
3161   /* If the object isn't a (member of a) class, do nothing.  */
3162   tree op0 = obj;
3163   while (TREE_CODE (op0) == COMPONENT_REF)
3164     op0 = TREE_OPERAND (op0, 0);
3165   if (!CLASS_TYPE_P (strip_array_types (TREE_TYPE (op0))))
3166     return exp;
3167 
3168   tree *tp = &exp;
3169   if (TREE_CODE (exp) == TARGET_EXPR)
3170     tp = &TARGET_EXPR_INITIAL (exp);
3171   hash_set<tree> pset;
3172   replace_placeholders_t data = { obj, *tp, false, &pset };
3173   cp_walk_tree (tp, replace_placeholders_r, &data, NULL);
3174   if (seen_p)
3175     *seen_p = data.seen;
3176   return exp;
3177 }
3178 
3179 /* Callback function for find_placeholders.  */
3180 
3181 static tree
find_placeholders_r(tree * t,int * walk_subtrees,void *)3182 find_placeholders_r (tree *t, int *walk_subtrees, void *)
3183 {
3184   if (TYPE_P (*t) || TREE_CONSTANT (*t))
3185     {
3186       *walk_subtrees = false;
3187       return NULL_TREE;
3188     }
3189 
3190   switch (TREE_CODE (*t))
3191     {
3192     case PLACEHOLDER_EXPR:
3193       return *t;
3194 
3195     case CONSTRUCTOR:
3196       if (CONSTRUCTOR_PLACEHOLDER_BOUNDARY (*t))
3197 	*walk_subtrees = false;
3198       break;
3199 
3200     default:
3201       break;
3202     }
3203 
3204   return NULL_TREE;
3205 }
3206 
3207 /* Return true if EXP contains a PLACEHOLDER_EXPR.  Don't walk into
3208    ctors with CONSTRUCTOR_PLACEHOLDER_BOUNDARY flag set.  */
3209 
3210 bool
find_placeholders(tree exp)3211 find_placeholders (tree exp)
3212 {
3213   /* This is only relevant for C++14.  */
3214   if (cxx_dialect < cxx14)
3215     return false;
3216 
3217   return cp_walk_tree_without_duplicates (&exp, find_placeholders_r, NULL);
3218 }
3219 
3220 /* Similar to `build_nt', but for template definitions of dependent
3221    expressions  */
3222 
3223 tree
build_min_nt_loc(location_t loc,enum tree_code code,...)3224 build_min_nt_loc (location_t loc, enum tree_code code, ...)
3225 {
3226   tree t;
3227   int length;
3228   int i;
3229   va_list p;
3230 
3231   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3232 
3233   va_start (p, code);
3234 
3235   t = make_node (code);
3236   SET_EXPR_LOCATION (t, loc);
3237   length = TREE_CODE_LENGTH (code);
3238 
3239   for (i = 0; i < length; i++)
3240     TREE_OPERAND (t, i) = va_arg (p, tree);
3241 
3242   va_end (p);
3243   return t;
3244 }
3245 
3246 /* Similar to `build', but for template definitions.  */
3247 
3248 tree
build_min(enum tree_code code,tree tt,...)3249 build_min (enum tree_code code, tree tt, ...)
3250 {
3251   tree t;
3252   int length;
3253   int i;
3254   va_list p;
3255 
3256   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3257 
3258   va_start (p, tt);
3259 
3260   t = make_node (code);
3261   length = TREE_CODE_LENGTH (code);
3262   TREE_TYPE (t) = tt;
3263 
3264   for (i = 0; i < length; i++)
3265     {
3266       tree x = va_arg (p, tree);
3267       TREE_OPERAND (t, i) = x;
3268       if (x && !TYPE_P (x) && TREE_SIDE_EFFECTS (x))
3269 	TREE_SIDE_EFFECTS (t) = 1;
3270     }
3271 
3272   va_end (p);
3273 
3274   return t;
3275 }
3276 
3277 /* Similar to `build', but for template definitions of non-dependent
3278    expressions. NON_DEP is the non-dependent expression that has been
3279    built.  */
3280 
3281 tree
build_min_non_dep(enum tree_code code,tree non_dep,...)3282 build_min_non_dep (enum tree_code code, tree non_dep, ...)
3283 {
3284   tree t;
3285   int length;
3286   int i;
3287   va_list p;
3288 
3289   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
3290 
3291   va_start (p, non_dep);
3292 
3293   if (REFERENCE_REF_P (non_dep))
3294     non_dep = TREE_OPERAND (non_dep, 0);
3295 
3296   t = make_node (code);
3297   length = TREE_CODE_LENGTH (code);
3298   TREE_TYPE (t) = unlowered_expr_type (non_dep);
3299   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
3300 
3301   for (i = 0; i < length; i++)
3302     TREE_OPERAND (t, i) = va_arg (p, tree);
3303 
3304   if (code == COMPOUND_EXPR && TREE_CODE (non_dep) != COMPOUND_EXPR)
3305     /* This should not be considered a COMPOUND_EXPR, because it
3306        resolves to an overload.  */
3307     COMPOUND_EXPR_OVERLOADED (t) = 1;
3308 
3309   va_end (p);
3310   return convert_from_reference (t);
3311 }
3312 
3313 /* Similar to build_min_nt, but call expressions  */
3314 
3315 tree
build_min_nt_call_vec(tree fn,vec<tree,va_gc> * args)3316 build_min_nt_call_vec (tree fn, vec<tree, va_gc> *args)
3317 {
3318   tree ret, t;
3319   unsigned int ix;
3320 
3321   ret = build_vl_exp (CALL_EXPR, vec_safe_length (args) + 3);
3322   CALL_EXPR_FN (ret) = fn;
3323   CALL_EXPR_STATIC_CHAIN (ret) = NULL_TREE;
3324   FOR_EACH_VEC_SAFE_ELT (args, ix, t)
3325     CALL_EXPR_ARG (ret, ix) = t;
3326 
3327   return ret;
3328 }
3329 
3330 /* Similar to `build_min_nt_call_vec', but for template definitions of
3331    non-dependent expressions. NON_DEP is the non-dependent expression
3332    that has been built.  */
3333 
3334 tree
build_min_non_dep_call_vec(tree non_dep,tree fn,vec<tree,va_gc> * argvec)3335 build_min_non_dep_call_vec (tree non_dep, tree fn, vec<tree, va_gc> *argvec)
3336 {
3337   tree t = build_min_nt_call_vec (fn, argvec);
3338   if (REFERENCE_REF_P (non_dep))
3339     non_dep = TREE_OPERAND (non_dep, 0);
3340   TREE_TYPE (t) = TREE_TYPE (non_dep);
3341   TREE_SIDE_EFFECTS (t) = TREE_SIDE_EFFECTS (non_dep);
3342   return convert_from_reference (t);
3343 }
3344 
3345 /* Similar to build_min_non_dep, but for expressions that have been resolved to
3346    a call to an operator overload.  OP is the operator that has been
3347    overloaded.  NON_DEP is the non-dependent expression that's been built,
3348    which should be a CALL_EXPR or an INDIRECT_REF to a CALL_EXPR.  OVERLOAD is
3349    the overload that NON_DEP is calling.  */
3350 
3351 tree
build_min_non_dep_op_overload(enum tree_code op,tree non_dep,tree overload,...)3352 build_min_non_dep_op_overload (enum tree_code op,
3353 			       tree non_dep,
3354 			       tree overload, ...)
3355 {
3356   va_list p;
3357   int nargs, expected_nargs;
3358   tree fn, call;
3359   vec<tree, va_gc> *args;
3360 
3361   non_dep = extract_call_expr (non_dep);
3362 
3363   nargs = call_expr_nargs (non_dep);
3364 
3365   expected_nargs = cp_tree_code_length (op);
3366   if ((op == POSTINCREMENT_EXPR
3367        || op == POSTDECREMENT_EXPR)
3368       /* With -fpermissive non_dep could be operator++().  */
3369       && (!flag_permissive || nargs != expected_nargs))
3370     expected_nargs += 1;
3371   gcc_assert (nargs == expected_nargs);
3372 
3373   args = make_tree_vector ();
3374   va_start (p, overload);
3375 
3376   if (TREE_CODE (TREE_TYPE (overload)) == FUNCTION_TYPE)
3377     {
3378       fn = overload;
3379       for (int i = 0; i < nargs; i++)
3380 	{
3381 	  tree arg = va_arg (p, tree);
3382 	  vec_safe_push (args, arg);
3383 	}
3384     }
3385   else if (TREE_CODE (TREE_TYPE (overload)) == METHOD_TYPE)
3386     {
3387       tree object = va_arg (p, tree);
3388       tree binfo = TYPE_BINFO (TREE_TYPE (object));
3389       tree method = build_baselink (binfo, binfo, overload, NULL_TREE);
3390       fn = build_min (COMPONENT_REF, TREE_TYPE (overload),
3391 		      object, method, NULL_TREE);
3392       for (int i = 1; i < nargs; i++)
3393 	{
3394 	  tree arg = va_arg (p, tree);
3395 	  vec_safe_push (args, arg);
3396 	}
3397     }
3398   else
3399    gcc_unreachable ();
3400 
3401   va_end (p);
3402   call = build_min_non_dep_call_vec (non_dep, fn, args);
3403   release_tree_vector (args);
3404 
3405   tree call_expr = extract_call_expr (call);
3406   KOENIG_LOOKUP_P (call_expr) = KOENIG_LOOKUP_P (non_dep);
3407   CALL_EXPR_OPERATOR_SYNTAX (call_expr) = true;
3408   CALL_EXPR_ORDERED_ARGS (call_expr) = CALL_EXPR_ORDERED_ARGS (non_dep);
3409   CALL_EXPR_REVERSE_ARGS (call_expr) = CALL_EXPR_REVERSE_ARGS (non_dep);
3410 
3411   return call;
3412 }
3413 
3414 /* Return a new tree vec copied from VEC, with ELT inserted at index IDX.  */
3415 
3416 vec<tree, va_gc> *
vec_copy_and_insert(vec<tree,va_gc> * old_vec,tree elt,unsigned idx)3417 vec_copy_and_insert (vec<tree, va_gc> *old_vec, tree elt, unsigned idx)
3418 {
3419   unsigned len = vec_safe_length (old_vec);
3420   gcc_assert (idx <= len);
3421 
3422   vec<tree, va_gc> *new_vec = NULL;
3423   vec_alloc (new_vec, len + 1);
3424 
3425   unsigned i;
3426   for (i = 0; i < len; ++i)
3427     {
3428       if (i == idx)
3429 	new_vec->quick_push (elt);
3430       new_vec->quick_push ((*old_vec)[i]);
3431     }
3432   if (i == idx)
3433     new_vec->quick_push (elt);
3434 
3435   return new_vec;
3436 }
3437 
3438 tree
get_type_decl(tree t)3439 get_type_decl (tree t)
3440 {
3441   if (TREE_CODE (t) == TYPE_DECL)
3442     return t;
3443   if (TYPE_P (t))
3444     return TYPE_STUB_DECL (t);
3445   gcc_assert (t == error_mark_node);
3446   return t;
3447 }
3448 
3449 /* Returns the namespace that contains DECL, whether directly or
3450    indirectly.  */
3451 
3452 tree
decl_namespace_context(tree decl)3453 decl_namespace_context (tree decl)
3454 {
3455   while (1)
3456     {
3457       if (TREE_CODE (decl) == NAMESPACE_DECL)
3458 	return decl;
3459       else if (TYPE_P (decl))
3460 	decl = CP_DECL_CONTEXT (TYPE_MAIN_DECL (decl));
3461       else
3462 	decl = CP_DECL_CONTEXT (decl);
3463     }
3464 }
3465 
3466 /* Returns true if decl is within an anonymous namespace, however deeply
3467    nested, or false otherwise.  */
3468 
3469 bool
decl_anon_ns_mem_p(const_tree decl)3470 decl_anon_ns_mem_p (const_tree decl)
3471 {
3472   while (TREE_CODE (decl) != NAMESPACE_DECL)
3473     {
3474       /* Classes inside anonymous namespaces have TREE_PUBLIC == 0.  */
3475       if (TYPE_P (decl))
3476 	return !TREE_PUBLIC (TYPE_MAIN_DECL (decl));
3477 
3478       decl = CP_DECL_CONTEXT (decl);
3479     }
3480   return !TREE_PUBLIC (decl);
3481 }
3482 
3483 /* Subroutine of cp_tree_equal: t1 and t2 are the CALL_EXPR_FNs of two
3484    CALL_EXPRS.  Return whether they are equivalent.  */
3485 
3486 static bool
called_fns_equal(tree t1,tree t2)3487 called_fns_equal (tree t1, tree t2)
3488 {
3489   /* Core 1321: dependent names are equivalent even if the overload sets
3490      are different.  But do compare explicit template arguments.  */
3491   tree name1 = dependent_name (t1);
3492   tree name2 = dependent_name (t2);
3493   if (name1 || name2)
3494     {
3495       tree targs1 = NULL_TREE, targs2 = NULL_TREE;
3496 
3497       if (name1 != name2)
3498 	return false;
3499 
3500       if (TREE_CODE (t1) == TEMPLATE_ID_EXPR)
3501 	targs1 = TREE_OPERAND (t1, 1);
3502       if (TREE_CODE (t2) == TEMPLATE_ID_EXPR)
3503 	targs2 = TREE_OPERAND (t2, 1);
3504       return cp_tree_equal (targs1, targs2);
3505     }
3506   else
3507     return cp_tree_equal (t1, t2);
3508 }
3509 
3510 /* Return truthvalue of whether T1 is the same tree structure as T2.
3511    Return 1 if they are the same. Return 0 if they are different.  */
3512 
3513 bool
cp_tree_equal(tree t1,tree t2)3514 cp_tree_equal (tree t1, tree t2)
3515 {
3516   enum tree_code code1, code2;
3517 
3518   if (t1 == t2)
3519     return true;
3520   if (!t1 || !t2)
3521     return false;
3522 
3523   code1 = TREE_CODE (t1);
3524   code2 = TREE_CODE (t2);
3525 
3526   if (code1 != code2)
3527     return false;
3528 
3529   if (CONSTANT_CLASS_P (t1)
3530       && !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
3531     return false;
3532 
3533   switch (code1)
3534     {
3535     case VOID_CST:
3536       /* There's only a single VOID_CST node, so we should never reach
3537 	 here.  */
3538       gcc_unreachable ();
3539 
3540     case INTEGER_CST:
3541       return tree_int_cst_equal (t1, t2);
3542 
3543     case REAL_CST:
3544       return real_equal (&TREE_REAL_CST (t1), &TREE_REAL_CST (t2));
3545 
3546     case STRING_CST:
3547       return TREE_STRING_LENGTH (t1) == TREE_STRING_LENGTH (t2)
3548 	&& !memcmp (TREE_STRING_POINTER (t1), TREE_STRING_POINTER (t2),
3549 		    TREE_STRING_LENGTH (t1));
3550 
3551     case FIXED_CST:
3552       return FIXED_VALUES_IDENTICAL (TREE_FIXED_CST (t1),
3553 				     TREE_FIXED_CST (t2));
3554 
3555     case COMPLEX_CST:
3556       return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))
3557 	&& cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));
3558 
3559     case VECTOR_CST:
3560       return operand_equal_p (t1, t2, OEP_ONLY_CONST);
3561 
3562     case CONSTRUCTOR:
3563       /* We need to do this when determining whether or not two
3564 	 non-type pointer to member function template arguments
3565 	 are the same.  */
3566       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))
3567 	  || CONSTRUCTOR_NELTS (t1) != CONSTRUCTOR_NELTS (t2))
3568 	return false;
3569       {
3570 	tree field, value;
3571 	unsigned int i;
3572 	FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t1), i, field, value)
3573 	  {
3574 	    constructor_elt *elt2 = CONSTRUCTOR_ELT (t2, i);
3575 	    if (!cp_tree_equal (field, elt2->index)
3576 		|| !cp_tree_equal (value, elt2->value))
3577 	      return false;
3578 	  }
3579       }
3580       return true;
3581 
3582     case TREE_LIST:
3583       if (!cp_tree_equal (TREE_PURPOSE (t1), TREE_PURPOSE (t2)))
3584 	return false;
3585       if (!cp_tree_equal (TREE_VALUE (t1), TREE_VALUE (t2)))
3586 	return false;
3587       return cp_tree_equal (TREE_CHAIN (t1), TREE_CHAIN (t2));
3588 
3589     case SAVE_EXPR:
3590       return cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0));
3591 
3592     case CALL_EXPR:
3593       {
3594 	tree arg1, arg2;
3595 	call_expr_arg_iterator iter1, iter2;
3596 	if (!called_fns_equal (CALL_EXPR_FN (t1), CALL_EXPR_FN (t2)))
3597 	  return false;
3598 	for (arg1 = first_call_expr_arg (t1, &iter1),
3599 	       arg2 = first_call_expr_arg (t2, &iter2);
3600 	     arg1 && arg2;
3601 	     arg1 = next_call_expr_arg (&iter1),
3602 	       arg2 = next_call_expr_arg (&iter2))
3603 	  if (!cp_tree_equal (arg1, arg2))
3604 	    return false;
3605 	if (arg1 || arg2)
3606 	  return false;
3607 	return true;
3608       }
3609 
3610     case TARGET_EXPR:
3611       {
3612 	tree o1 = TREE_OPERAND (t1, 0);
3613 	tree o2 = TREE_OPERAND (t2, 0);
3614 
3615 	/* Special case: if either target is an unallocated VAR_DECL,
3616 	   it means that it's going to be unified with whatever the
3617 	   TARGET_EXPR is really supposed to initialize, so treat it
3618 	   as being equivalent to anything.  */
3619 	if (VAR_P (o1) && DECL_NAME (o1) == NULL_TREE
3620 	    && !DECL_RTL_SET_P (o1))
3621 	  /*Nop*/;
3622 	else if (VAR_P (o2) && DECL_NAME (o2) == NULL_TREE
3623 		 && !DECL_RTL_SET_P (o2))
3624 	  /*Nop*/;
3625 	else if (!cp_tree_equal (o1, o2))
3626 	  return false;
3627 
3628 	return cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1));
3629       }
3630 
3631     case PARM_DECL:
3632       /* For comparing uses of parameters in late-specified return types
3633 	 with an out-of-class definition of the function, but can also come
3634 	 up for expressions that involve 'this' in a member function
3635 	 template.  */
3636 
3637       if (comparing_specializations && !CONSTRAINT_VAR_P (t1))
3638 	/* When comparing hash table entries, only an exact match is
3639 	   good enough; we don't want to replace 'this' with the
3640 	   version from another function.  But be more flexible
3641 	   with local parameters in a requires-expression.  */
3642 	return false;
3643 
3644       if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
3645 	{
3646 	  if (DECL_ARTIFICIAL (t1) ^ DECL_ARTIFICIAL (t2))
3647 	    return false;
3648 	  if (CONSTRAINT_VAR_P (t1) ^ CONSTRAINT_VAR_P (t2))
3649 	    return false;
3650 	  if (DECL_ARTIFICIAL (t1)
3651 	      || (DECL_PARM_LEVEL (t1) == DECL_PARM_LEVEL (t2)
3652 		  && DECL_PARM_INDEX (t1) == DECL_PARM_INDEX (t2)))
3653 	    return true;
3654 	}
3655       return false;
3656 
3657     case VAR_DECL:
3658     case CONST_DECL:
3659     case FIELD_DECL:
3660     case FUNCTION_DECL:
3661     case TEMPLATE_DECL:
3662     case IDENTIFIER_NODE:
3663     case SSA_NAME:
3664     case USING_DECL:
3665       return false;
3666 
3667     case BASELINK:
3668       return (BASELINK_BINFO (t1) == BASELINK_BINFO (t2)
3669 	      && BASELINK_ACCESS_BINFO (t1) == BASELINK_ACCESS_BINFO (t2)
3670 	      && BASELINK_QUALIFIED_P (t1) == BASELINK_QUALIFIED_P (t2)
3671 	      && cp_tree_equal (BASELINK_FUNCTIONS (t1),
3672 				BASELINK_FUNCTIONS (t2)));
3673 
3674     case TEMPLATE_PARM_INDEX:
3675       return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
3676 	      && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
3677 	      && (TEMPLATE_PARM_PARAMETER_PACK (t1)
3678 		  == TEMPLATE_PARM_PARAMETER_PACK (t2))
3679 	      && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
3680 			      TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
3681 
3682     case TEMPLATE_ID_EXPR:
3683       return (cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0))
3684 	      && cp_tree_equal (TREE_OPERAND (t1, 1), TREE_OPERAND (t2, 1)));
3685 
3686     case CONSTRAINT_INFO:
3687       return cp_tree_equal (CI_ASSOCIATED_CONSTRAINTS (t1),
3688                             CI_ASSOCIATED_CONSTRAINTS (t2));
3689 
3690     case CHECK_CONSTR:
3691       return (CHECK_CONSTR_CONCEPT (t1) == CHECK_CONSTR_CONCEPT (t2)
3692               && comp_template_args (CHECK_CONSTR_ARGS (t1),
3693 				     CHECK_CONSTR_ARGS (t2)));
3694 
3695     case TREE_VEC:
3696       {
3697 	unsigned ix;
3698 	if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
3699 	  return false;
3700 	for (ix = TREE_VEC_LENGTH (t1); ix--;)
3701 	  if (!cp_tree_equal (TREE_VEC_ELT (t1, ix),
3702 			      TREE_VEC_ELT (t2, ix)))
3703 	    return false;
3704 	return true;
3705       }
3706 
3707     case SIZEOF_EXPR:
3708     case ALIGNOF_EXPR:
3709       {
3710 	tree o1 = TREE_OPERAND (t1, 0);
3711 	tree o2 = TREE_OPERAND (t2, 0);
3712 
3713 	if (code1 == SIZEOF_EXPR)
3714 	  {
3715 	    if (SIZEOF_EXPR_TYPE_P (t1))
3716 	      o1 = TREE_TYPE (o1);
3717 	    if (SIZEOF_EXPR_TYPE_P (t2))
3718 	      o2 = TREE_TYPE (o2);
3719 	  }
3720 	if (TREE_CODE (o1) != TREE_CODE (o2))
3721 	  return false;
3722 	if (TYPE_P (o1))
3723 	  return same_type_p (o1, o2);
3724 	else
3725 	  return cp_tree_equal (o1, o2);
3726       }
3727 
3728     case MODOP_EXPR:
3729       {
3730 	tree t1_op1, t2_op1;
3731 
3732 	if (!cp_tree_equal (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0)))
3733 	  return false;
3734 
3735 	t1_op1 = TREE_OPERAND (t1, 1);
3736 	t2_op1 = TREE_OPERAND (t2, 1);
3737 	if (TREE_CODE (t1_op1) != TREE_CODE (t2_op1))
3738 	  return false;
3739 
3740 	return cp_tree_equal (TREE_OPERAND (t1, 2), TREE_OPERAND (t2, 2));
3741       }
3742 
3743     case PTRMEM_CST:
3744       /* Two pointer-to-members are the same if they point to the same
3745 	 field or function in the same class.  */
3746       if (PTRMEM_CST_MEMBER (t1) != PTRMEM_CST_MEMBER (t2))
3747 	return false;
3748 
3749       return same_type_p (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2));
3750 
3751     case OVERLOAD:
3752       {
3753 	/* Two overloads. Must be exactly the same set of decls.  */
3754 	lkp_iterator first (t1);
3755 	lkp_iterator second (t2);
3756 
3757 	for (; first && second; ++first, ++second)
3758 	  if (*first != *second)
3759 	    return false;
3760 	return !(first || second);
3761       }
3762 
3763     case TRAIT_EXPR:
3764       if (TRAIT_EXPR_KIND (t1) != TRAIT_EXPR_KIND (t2))
3765 	return false;
3766       return same_type_p (TRAIT_EXPR_TYPE1 (t1), TRAIT_EXPR_TYPE1 (t2))
3767 	&& cp_tree_equal (TRAIT_EXPR_TYPE2 (t1), TRAIT_EXPR_TYPE2 (t2));
3768 
3769     case CAST_EXPR:
3770     case STATIC_CAST_EXPR:
3771     case REINTERPRET_CAST_EXPR:
3772     case CONST_CAST_EXPR:
3773     case DYNAMIC_CAST_EXPR:
3774     case IMPLICIT_CONV_EXPR:
3775     case NEW_EXPR:
3776     CASE_CONVERT:
3777     case NON_LVALUE_EXPR:
3778     case VIEW_CONVERT_EXPR:
3779       if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
3780 	return false;
3781       /* Now compare operands as usual.  */
3782       break;
3783 
3784     case DEFERRED_NOEXCEPT:
3785       return (cp_tree_equal (DEFERRED_NOEXCEPT_PATTERN (t1),
3786 			     DEFERRED_NOEXCEPT_PATTERN (t2))
3787 	      && comp_template_args (DEFERRED_NOEXCEPT_ARGS (t1),
3788 				     DEFERRED_NOEXCEPT_ARGS (t2)));
3789       break;
3790 
3791     case LAMBDA_EXPR:
3792       /* Two lambda-expressions are never considered equivalent.  */
3793       return false;
3794 
3795     default:
3796       break;
3797     }
3798 
3799   switch (TREE_CODE_CLASS (code1))
3800     {
3801     case tcc_unary:
3802     case tcc_binary:
3803     case tcc_comparison:
3804     case tcc_expression:
3805     case tcc_vl_exp:
3806     case tcc_reference:
3807     case tcc_statement:
3808       {
3809 	int i, n;
3810 
3811 	n = cp_tree_operand_length (t1);
3812 	if (TREE_CODE_CLASS (code1) == tcc_vl_exp
3813 	    && n != TREE_OPERAND_LENGTH (t2))
3814 	  return false;
3815 
3816 	for (i = 0; i < n; ++i)
3817 	  if (!cp_tree_equal (TREE_OPERAND (t1, i), TREE_OPERAND (t2, i)))
3818 	    return false;
3819 
3820 	return true;
3821       }
3822 
3823     case tcc_type:
3824       return same_type_p (t1, t2);
3825     default:
3826       gcc_unreachable ();
3827     }
3828   /* We can get here with --disable-checking.  */
3829   return false;
3830 }
3831 
3832 /* The type of ARG when used as an lvalue.  */
3833 
3834 tree
lvalue_type(tree arg)3835 lvalue_type (tree arg)
3836 {
3837   tree type = TREE_TYPE (arg);
3838   return type;
3839 }
3840 
3841 /* The type of ARG for printing error messages; denote lvalues with
3842    reference types.  */
3843 
3844 tree
error_type(tree arg)3845 error_type (tree arg)
3846 {
3847   tree type = TREE_TYPE (arg);
3848 
3849   if (TREE_CODE (type) == ARRAY_TYPE)
3850     ;
3851   else if (TREE_CODE (type) == ERROR_MARK)
3852     ;
3853   else if (lvalue_p (arg))
3854     type = build_reference_type (lvalue_type (arg));
3855   else if (MAYBE_CLASS_TYPE_P (type))
3856     type = lvalue_type (arg);
3857 
3858   return type;
3859 }
3860 
3861 /* Does FUNCTION use a variable-length argument list?  */
3862 
3863 int
varargs_function_p(const_tree function)3864 varargs_function_p (const_tree function)
3865 {
3866   return stdarg_p (TREE_TYPE (function));
3867 }
3868 
3869 /* Returns 1 if decl is a member of a class.  */
3870 
3871 int
member_p(const_tree decl)3872 member_p (const_tree decl)
3873 {
3874   const_tree const ctx = DECL_CONTEXT (decl);
3875   return (ctx && TYPE_P (ctx));
3876 }
3877 
3878 /* Create a placeholder for member access where we don't actually have an
3879    object that the access is against.  */
3880 
3881 tree
build_dummy_object(tree type)3882 build_dummy_object (tree type)
3883 {
3884   tree decl = build1 (CONVERT_EXPR, build_pointer_type (type), void_node);
3885   return cp_build_fold_indirect_ref (decl);
3886 }
3887 
3888 /* We've gotten a reference to a member of TYPE.  Return *this if appropriate,
3889    or a dummy object otherwise.  If BINFOP is non-0, it is filled with the
3890    binfo path from current_class_type to TYPE, or 0.  */
3891 
3892 tree
maybe_dummy_object(tree type,tree * binfop)3893 maybe_dummy_object (tree type, tree* binfop)
3894 {
3895   tree decl, context;
3896   tree binfo;
3897   tree current = current_nonlambda_class_type ();
3898 
3899   if (current
3900       && (binfo = lookup_base (current, type, ba_any, NULL,
3901 			       tf_warning_or_error)))
3902     context = current;
3903   else
3904     {
3905       /* Reference from a nested class member function.  */
3906       context = type;
3907       binfo = TYPE_BINFO (type);
3908     }
3909 
3910   if (binfop)
3911     *binfop = binfo;
3912 
3913   if (current_class_ref
3914       /* current_class_ref might not correspond to current_class_type if
3915 	 we're in tsubst_default_argument or a lambda-declarator; in either
3916 	 case, we want to use current_class_ref if it matches CONTEXT.  */
3917       && (same_type_ignoring_top_level_qualifiers_p
3918 	  (TREE_TYPE (current_class_ref), context)))
3919     decl = current_class_ref;
3920   else
3921     decl = build_dummy_object (context);
3922 
3923   return decl;
3924 }
3925 
3926 /* Returns 1 if OB is a placeholder object, or a pointer to one.  */
3927 
3928 int
is_dummy_object(const_tree ob)3929 is_dummy_object (const_tree ob)
3930 {
3931   if (INDIRECT_REF_P (ob))
3932     ob = TREE_OPERAND (ob, 0);
3933   return (TREE_CODE (ob) == CONVERT_EXPR
3934 	  && TREE_OPERAND (ob, 0) == void_node);
3935 }
3936 
3937 /* Returns 1 iff type T is something we want to treat as a scalar type for
3938    the purpose of deciding whether it is trivial/POD/standard-layout.  */
3939 
3940 bool
scalarish_type_p(const_tree t)3941 scalarish_type_p (const_tree t)
3942 {
3943   if (t == error_mark_node)
3944     return 1;
3945 
3946   return (SCALAR_TYPE_P (t) || VECTOR_TYPE_P (t));
3947 }
3948 
3949 /* Returns true iff T requires non-trivial default initialization.  */
3950 
3951 bool
type_has_nontrivial_default_init(const_tree t)3952 type_has_nontrivial_default_init (const_tree t)
3953 {
3954   t = strip_array_types (CONST_CAST_TREE (t));
3955 
3956   if (CLASS_TYPE_P (t))
3957     return TYPE_HAS_COMPLEX_DFLT (t);
3958   else
3959     return 0;
3960 }
3961 
3962 /* Track classes with only deleted copy/move constructors so that we can warn
3963    if they are used in call/return by value.  */
3964 
3965 static GTY(()) hash_set<tree>* deleted_copy_types;
3966 static void
remember_deleted_copy(const_tree t)3967 remember_deleted_copy (const_tree t)
3968 {
3969   if (!deleted_copy_types)
3970     deleted_copy_types = hash_set<tree>::create_ggc(37);
3971   deleted_copy_types->add (CONST_CAST_TREE (t));
3972 }
3973 void
maybe_warn_parm_abi(tree t,location_t loc)3974 maybe_warn_parm_abi (tree t, location_t loc)
3975 {
3976   if (!deleted_copy_types
3977       || !deleted_copy_types->contains (t))
3978     return;
3979 
3980   if ((flag_abi_version == 12 || warn_abi_version == 12)
3981       && classtype_has_non_deleted_move_ctor (t))
3982     {
3983       bool w;
3984       auto_diagnostic_group d;
3985       if (flag_abi_version > 12)
3986 	w = warning_at (loc, OPT_Wabi, "%<-fabi-version=13%> (GCC 8.2) fixes "
3987 			"the calling convention for %qT, which was "
3988 			"accidentally changed in 8.1", t);
3989       else
3990 	w = warning_at (loc, OPT_Wabi, "%<-fabi-version=12%> (GCC 8.1) accident"
3991 			"ally changes the calling convention for %qT", t);
3992       if (w)
3993 	inform (location_of (t), " declared here");
3994       return;
3995     }
3996 
3997   auto_diagnostic_group d;
3998   if (warning_at (loc, OPT_Wabi, "the calling convention for %qT changes in "
3999 		  "%<-fabi-version=13%> (GCC 8.2)", t))
4000     inform (location_of (t), " because all of its copy and move "
4001 	    "constructors are deleted");
4002 }
4003 
4004 /* Returns true iff copying an object of type T (including via move
4005    constructor) is non-trivial.  That is, T has no non-trivial copy
4006    constructors and no non-trivial move constructors, and not all copy/move
4007    constructors are deleted.  This function implements the ABI notion of
4008    non-trivial copy, which has diverged from the one in the standard.  */
4009 
4010 bool
type_has_nontrivial_copy_init(const_tree type)4011 type_has_nontrivial_copy_init (const_tree type)
4012 {
4013   tree t = strip_array_types (CONST_CAST_TREE (type));
4014 
4015   if (CLASS_TYPE_P (t))
4016     {
4017       gcc_assert (COMPLETE_TYPE_P (t));
4018 
4019       if (TYPE_HAS_COMPLEX_COPY_CTOR (t)
4020 	  || TYPE_HAS_COMPLEX_MOVE_CTOR (t))
4021 	/* Nontrivial.  */
4022 	return true;
4023 
4024       if (cxx_dialect < cxx11)
4025 	/* No deleted functions before C++11.  */
4026 	return false;
4027 
4028       /* Before ABI v12 we did a bitwise copy of types with only deleted
4029 	 copy/move constructors.  */
4030       if (!abi_version_at_least (12)
4031 	  && !(warn_abi && abi_version_crosses (12)))
4032 	return false;
4033 
4034       bool saw_copy = false;
4035       bool saw_non_deleted = false;
4036       bool saw_non_deleted_move = false;
4037 
4038       if (CLASSTYPE_LAZY_MOVE_CTOR (t))
4039 	saw_copy = saw_non_deleted = true;
4040       else if (CLASSTYPE_LAZY_COPY_CTOR (t))
4041 	{
4042 	  saw_copy = true;
4043 	  if (classtype_has_move_assign_or_move_ctor_p (t, true))
4044 	    /* [class.copy]/8 If the class definition declares a move
4045 	       constructor or move assignment operator, the implicitly declared
4046 	       copy constructor is defined as deleted.... */;
4047 	  else
4048 	    /* Any other reason the implicitly-declared function would be
4049 	       deleted would also cause TYPE_HAS_COMPLEX_COPY_CTOR to be
4050 	       set.  */
4051 	    saw_non_deleted = true;
4052 	}
4053 
4054       if (!saw_non_deleted)
4055 	for (ovl_iterator iter (CLASSTYPE_CONSTRUCTORS (t)); iter; ++iter)
4056 	  {
4057 	    tree fn = *iter;
4058 	    if (copy_fn_p (fn))
4059 	      {
4060 		saw_copy = true;
4061 		if (!DECL_DELETED_FN (fn))
4062 		  {
4063 		    /* Not deleted, therefore trivial.  */
4064 		    saw_non_deleted = true;
4065 		    break;
4066 		  }
4067 	      }
4068 	    else if (move_fn_p (fn))
4069 	      if (!DECL_DELETED_FN (fn))
4070 		saw_non_deleted_move = true;
4071 	  }
4072 
4073       gcc_assert (saw_copy);
4074 
4075       /* ABI v12 buggily ignored move constructors.  */
4076       bool v11nontriv = false;
4077       bool v12nontriv = !saw_non_deleted;
4078       bool v13nontriv = !saw_non_deleted && !saw_non_deleted_move;
4079       bool nontriv = (abi_version_at_least (13) ? v13nontriv
4080 		      : flag_abi_version == 12 ? v12nontriv
4081 		      : v11nontriv);
4082       bool warn_nontriv = (warn_abi_version >= 13 ? v13nontriv
4083 			   : warn_abi_version == 12 ? v12nontriv
4084 			   : v11nontriv);
4085       if (nontriv != warn_nontriv)
4086 	remember_deleted_copy (t);
4087 
4088       return nontriv;
4089     }
4090   else
4091     return 0;
4092 }
4093 
4094 /* Returns 1 iff type T is a trivially copyable type, as defined in
4095    [basic.types] and [class].  */
4096 
4097 bool
trivially_copyable_p(const_tree t)4098 trivially_copyable_p (const_tree t)
4099 {
4100   t = strip_array_types (CONST_CAST_TREE (t));
4101 
4102   if (CLASS_TYPE_P (t))
4103     return ((!TYPE_HAS_COPY_CTOR (t)
4104 	     || !TYPE_HAS_COMPLEX_COPY_CTOR (t))
4105 	    && !TYPE_HAS_COMPLEX_MOVE_CTOR (t)
4106 	    && (!TYPE_HAS_COPY_ASSIGN (t)
4107 		|| !TYPE_HAS_COMPLEX_COPY_ASSIGN (t))
4108 	    && !TYPE_HAS_COMPLEX_MOVE_ASSIGN (t)
4109 	    && TYPE_HAS_TRIVIAL_DESTRUCTOR (t));
4110   else
4111     return !CP_TYPE_VOLATILE_P (t) && scalarish_type_p (t);
4112 }
4113 
4114 /* Returns 1 iff type T is a trivial type, as defined in [basic.types] and
4115    [class].  */
4116 
4117 bool
trivial_type_p(const_tree t)4118 trivial_type_p (const_tree t)
4119 {
4120   t = strip_array_types (CONST_CAST_TREE (t));
4121 
4122   if (CLASS_TYPE_P (t))
4123     return (TYPE_HAS_TRIVIAL_DFLT (t)
4124 	    && trivially_copyable_p (t));
4125   else
4126     return scalarish_type_p (t);
4127 }
4128 
4129 /* Returns 1 iff type T is a POD type, as defined in [basic.types].  */
4130 
4131 bool
pod_type_p(const_tree t)4132 pod_type_p (const_tree t)
4133 {
4134   /* This CONST_CAST is okay because strip_array_types returns its
4135      argument unmodified and we assign it to a const_tree.  */
4136   t = strip_array_types (CONST_CAST_TREE(t));
4137 
4138   if (!CLASS_TYPE_P (t))
4139     return scalarish_type_p (t);
4140   else if (cxx_dialect > cxx98)
4141     /* [class]/10: A POD struct is a class that is both a trivial class and a
4142        standard-layout class, and has no non-static data members of type
4143        non-POD struct, non-POD union (or array of such types).
4144 
4145        We don't need to check individual members because if a member is
4146        non-std-layout or non-trivial, the class will be too.  */
4147     return (std_layout_type_p (t) && trivial_type_p (t));
4148   else
4149     /* The C++98 definition of POD is different.  */
4150     return !CLASSTYPE_NON_LAYOUT_POD_P (t);
4151 }
4152 
4153 /* Returns true iff T is POD for the purpose of layout, as defined in the
4154    C++ ABI.  */
4155 
4156 bool
layout_pod_type_p(const_tree t)4157 layout_pod_type_p (const_tree t)
4158 {
4159   t = strip_array_types (CONST_CAST_TREE (t));
4160 
4161   if (CLASS_TYPE_P (t))
4162     return !CLASSTYPE_NON_LAYOUT_POD_P (t);
4163   else
4164     return scalarish_type_p (t);
4165 }
4166 
4167 /* Returns true iff T is a standard-layout type, as defined in
4168    [basic.types].  */
4169 
4170 bool
std_layout_type_p(const_tree t)4171 std_layout_type_p (const_tree t)
4172 {
4173   t = strip_array_types (CONST_CAST_TREE (t));
4174 
4175   if (CLASS_TYPE_P (t))
4176     return !CLASSTYPE_NON_STD_LAYOUT (t);
4177   else
4178     return scalarish_type_p (t);
4179 }
4180 
4181 static bool record_has_unique_obj_representations (const_tree, const_tree);
4182 
4183 /* Returns true iff T satisfies std::has_unique_object_representations<T>,
4184    as defined in [meta.unary.prop].  */
4185 
4186 bool
type_has_unique_obj_representations(const_tree t)4187 type_has_unique_obj_representations (const_tree t)
4188 {
4189   bool ret;
4190 
4191   t = strip_array_types (CONST_CAST_TREE (t));
4192 
4193   if (!trivially_copyable_p (t))
4194     return false;
4195 
4196   if (CLASS_TYPE_P (t) && CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS_SET (t))
4197     return CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS (t);
4198 
4199   switch (TREE_CODE (t))
4200     {
4201     case INTEGER_TYPE:
4202     case POINTER_TYPE:
4203     case REFERENCE_TYPE:
4204       /* If some backend has any paddings in these types, we should add
4205 	 a target hook for this and handle it there.  */
4206       return true;
4207 
4208     case BOOLEAN_TYPE:
4209       /* For bool values other than 0 and 1 should only appear with
4210 	 undefined behavior.  */
4211       return true;
4212 
4213     case ENUMERAL_TYPE:
4214       return type_has_unique_obj_representations (ENUM_UNDERLYING_TYPE (t));
4215 
4216     case REAL_TYPE:
4217       /* XFmode certainly contains padding on x86, which the CPU doesn't store
4218 	 when storing long double values, so for that we have to return false.
4219 	 Other kinds of floating point values are questionable due to +.0/-.0
4220 	 and NaNs, let's play safe for now.  */
4221       return false;
4222 
4223     case FIXED_POINT_TYPE:
4224       return false;
4225 
4226     case OFFSET_TYPE:
4227       return true;
4228 
4229     case COMPLEX_TYPE:
4230     case VECTOR_TYPE:
4231       return type_has_unique_obj_representations (TREE_TYPE (t));
4232 
4233     case RECORD_TYPE:
4234       ret = record_has_unique_obj_representations (t, TYPE_SIZE (t));
4235       if (CLASS_TYPE_P (t))
4236 	{
4237 	  CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS_SET (t) = 1;
4238 	  CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS (t) = ret;
4239 	}
4240       return ret;
4241 
4242     case UNION_TYPE:
4243       ret = true;
4244       bool any_fields;
4245       any_fields = false;
4246       for (tree field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4247 	if (TREE_CODE (field) == FIELD_DECL)
4248 	  {
4249 	    any_fields = true;
4250 	    if (!type_has_unique_obj_representations (TREE_TYPE (field))
4251 		|| simple_cst_equal (DECL_SIZE (field), TYPE_SIZE (t)) != 1)
4252 	      {
4253 		ret = false;
4254 		break;
4255 	      }
4256 	  }
4257       if (!any_fields && !integer_zerop (TYPE_SIZE (t)))
4258 	ret = false;
4259       if (CLASS_TYPE_P (t))
4260 	{
4261 	  CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS_SET (t) = 1;
4262 	  CLASSTYPE_UNIQUE_OBJ_REPRESENTATIONS (t) = ret;
4263 	}
4264       return ret;
4265 
4266     case NULLPTR_TYPE:
4267       return false;
4268 
4269     case ERROR_MARK:
4270       return false;
4271 
4272     default:
4273       gcc_unreachable ();
4274     }
4275 }
4276 
4277 /* Helper function for type_has_unique_obj_representations.  */
4278 
4279 static bool
record_has_unique_obj_representations(const_tree t,const_tree sz)4280 record_has_unique_obj_representations (const_tree t, const_tree sz)
4281 {
4282   for (tree field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4283     if (TREE_CODE (field) != FIELD_DECL)
4284       ;
4285     /* For bases, can't use type_has_unique_obj_representations here, as in
4286 	struct S { int i : 24; S (); };
4287 	struct T : public S { int j : 8; T (); };
4288 	S doesn't have unique obj representations, but T does.  */
4289     else if (DECL_FIELD_IS_BASE (field))
4290       {
4291 	if (!record_has_unique_obj_representations (TREE_TYPE (field),
4292 						    DECL_SIZE (field)))
4293 	  return false;
4294       }
4295     else if (DECL_C_BIT_FIELD (field))
4296       {
4297 	tree btype = DECL_BIT_FIELD_TYPE (field);
4298 	if (!type_has_unique_obj_representations (btype))
4299 	  return false;
4300       }
4301     else if (!type_has_unique_obj_representations (TREE_TYPE (field)))
4302       return false;
4303 
4304   offset_int cur = 0;
4305   for (tree field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4306     if (TREE_CODE (field) == FIELD_DECL)
4307       {
4308 	offset_int fld = wi::to_offset (DECL_FIELD_OFFSET (field));
4309 	offset_int bitpos = wi::to_offset (DECL_FIELD_BIT_OFFSET (field));
4310 	fld = fld * BITS_PER_UNIT + bitpos;
4311 	if (cur != fld)
4312 	  return false;
4313 	if (DECL_SIZE (field))
4314 	  {
4315 	    offset_int size = wi::to_offset (DECL_SIZE (field));
4316 	    cur += size;
4317 	  }
4318       }
4319   if (cur != wi::to_offset (sz))
4320     return false;
4321 
4322   return true;
4323 }
4324 
4325 /* Nonzero iff type T is a class template implicit specialization.  */
4326 
4327 bool
class_tmpl_impl_spec_p(const_tree t)4328 class_tmpl_impl_spec_p (const_tree t)
4329 {
4330   return CLASS_TYPE_P (t) && CLASSTYPE_TEMPLATE_INSTANTIATION (t);
4331 }
4332 
4333 /* Returns 1 iff zero initialization of type T means actually storing
4334    zeros in it.  */
4335 
4336 int
zero_init_p(const_tree t)4337 zero_init_p (const_tree t)
4338 {
4339   /* This CONST_CAST is okay because strip_array_types returns its
4340      argument unmodified and we assign it to a const_tree.  */
4341   t = strip_array_types (CONST_CAST_TREE(t));
4342 
4343   if (t == error_mark_node)
4344     return 1;
4345 
4346   /* NULL pointers to data members are initialized with -1.  */
4347   if (TYPE_PTRDATAMEM_P (t))
4348     return 0;
4349 
4350   /* Classes that contain types that can't be zero-initialized, cannot
4351      be zero-initialized themselves.  */
4352   if (CLASS_TYPE_P (t) && CLASSTYPE_NON_ZERO_INIT_P (t))
4353     return 0;
4354 
4355   return 1;
4356 }
4357 
4358 /* Handle the C++17 [[nodiscard]] attribute, which is similar to the GNU
4359    warn_unused_result attribute.  */
4360 
4361 static tree
handle_nodiscard_attribute(tree * node,tree name,tree,int,bool * no_add_attrs)4362 handle_nodiscard_attribute (tree *node, tree name, tree /*args*/,
4363 			    int /*flags*/, bool *no_add_attrs)
4364 {
4365   if (TREE_CODE (*node) == FUNCTION_DECL)
4366     {
4367       if (VOID_TYPE_P (TREE_TYPE (TREE_TYPE (*node))))
4368 	warning_at (DECL_SOURCE_LOCATION (*node),
4369 		    OPT_Wattributes, "%qE attribute applied to %qD with void "
4370 		    "return type", name, *node);
4371     }
4372   else if (OVERLOAD_TYPE_P (*node))
4373     /* OK */;
4374   else
4375     {
4376       warning (OPT_Wattributes, "%qE attribute can only be applied to "
4377 	       "functions or to class or enumeration types", name);
4378       *no_add_attrs = true;
4379     }
4380   return NULL_TREE;
4381 }
4382 
4383 /* Handle a C++2a "no_unique_address" attribute; arguments as in
4384    struct attribute_spec.handler.  */
4385 static tree
handle_no_unique_addr_attribute(tree * node,tree name,tree,int,bool * no_add_attrs)4386 handle_no_unique_addr_attribute (tree* node,
4387 				 tree name,
4388 				 tree /*args*/,
4389 				 int /*flags*/,
4390 				 bool* no_add_attrs)
4391 {
4392   if (TREE_CODE (*node) != FIELD_DECL)
4393     {
4394       warning (OPT_Wattributes, "%qE attribute can only be applied to "
4395 	       "non-static data members", name);
4396       *no_add_attrs = true;
4397     }
4398   else if (DECL_C_BIT_FIELD (*node))
4399     {
4400       warning (OPT_Wattributes, "%qE attribute cannot be applied to "
4401 	       "a bit-field", name);
4402       *no_add_attrs = true;
4403     }
4404 
4405   return NULL_TREE;
4406 }
4407 
4408 /* The C++20 [[likely]] and [[unlikely]] attributes on labels map to the GNU
4409    hot/cold attributes.  */
4410 
4411 static tree
handle_likeliness_attribute(tree * node,tree name,tree args,int flags,bool * no_add_attrs)4412 handle_likeliness_attribute (tree *node, tree name, tree args,
4413 			     int flags, bool *no_add_attrs)
4414 {
4415   *no_add_attrs = true;
4416   if (TREE_CODE (*node) == LABEL_DECL
4417       || TREE_CODE (*node) == FUNCTION_DECL)
4418     {
4419       if (args)
4420 	warning (OPT_Wattributes, "%qE attribute takes no arguments", name);
4421       tree bname = (is_attribute_p ("likely", name)
4422 		    ? get_identifier ("hot") : get_identifier ("cold"));
4423       if (TREE_CODE (*node) == FUNCTION_DECL)
4424 	warning (OPT_Wattributes, "ISO C++ %qE attribute does not apply to "
4425 		 "functions; treating as %<[[gnu::%E]]%>", name, bname);
4426       tree battr = build_tree_list (bname, NULL_TREE);
4427       decl_attributes (node, battr, flags);
4428       return NULL_TREE;
4429     }
4430   else
4431     return error_mark_node;
4432 }
4433 
4434 /* Table of valid C++ attributes.  */
4435 const struct attribute_spec cxx_attribute_table[] =
4436 {
4437   /* { name, min_len, max_len, decl_req, type_req, fn_type_req,
4438        affects_type_identity, handler, exclude } */
4439   { "init_priority",  1, 1, true,  false, false, false,
4440     handle_init_priority_attribute, NULL },
4441   { "abi_tag", 1, -1, false, false, false, true,
4442     handle_abi_tag_attribute, NULL },
4443   { NULL, 0, 0, false, false, false, false, NULL, NULL }
4444 };
4445 
4446 /* Table of C++ standard attributes.  */
4447 const struct attribute_spec std_attribute_table[] =
4448 {
4449   /* { name, min_len, max_len, decl_req, type_req, fn_type_req,
4450        affects_type_identity, handler, exclude } */
4451   { "maybe_unused", 0, 0, false, false, false, false,
4452     handle_unused_attribute, NULL },
4453   { "nodiscard", 0, 0, false, false, false, false,
4454     handle_nodiscard_attribute, NULL },
4455   { "no_unique_address", 0, 0, true, false, false, false,
4456     handle_no_unique_addr_attribute, NULL },
4457   { "likely", 0, 0, false, false, false, false,
4458     handle_likeliness_attribute, attr_cold_hot_exclusions },
4459   { "unlikely", 0, 0, false, false, false, false,
4460     handle_likeliness_attribute, attr_cold_hot_exclusions },
4461   { NULL, 0, 0, false, false, false, false, NULL, NULL }
4462 };
4463 
4464 /* Handle an "init_priority" attribute; arguments as in
4465    struct attribute_spec.handler.  */
4466 static tree
handle_init_priority_attribute(tree * node,tree name,tree args,int,bool * no_add_attrs)4467 handle_init_priority_attribute (tree* node,
4468 				tree name,
4469 				tree args,
4470 				int /*flags*/,
4471 				bool* no_add_attrs)
4472 {
4473   tree initp_expr = TREE_VALUE (args);
4474   tree decl = *node;
4475   tree type = TREE_TYPE (decl);
4476   int pri;
4477 
4478   STRIP_NOPS (initp_expr);
4479   initp_expr = default_conversion (initp_expr);
4480   if (initp_expr)
4481     initp_expr = maybe_constant_value (initp_expr);
4482 
4483   if (!initp_expr || TREE_CODE (initp_expr) != INTEGER_CST)
4484     {
4485       error ("requested init_priority is not an integer constant");
4486       cxx_constant_value (initp_expr);
4487       *no_add_attrs = true;
4488       return NULL_TREE;
4489     }
4490 
4491   pri = TREE_INT_CST_LOW (initp_expr);
4492 
4493   type = strip_array_types (type);
4494 
4495   if (decl == NULL_TREE
4496       || !VAR_P (decl)
4497       || !TREE_STATIC (decl)
4498       || DECL_EXTERNAL (decl)
4499       || (TREE_CODE (type) != RECORD_TYPE
4500 	  && TREE_CODE (type) != UNION_TYPE)
4501       /* Static objects in functions are initialized the
4502 	 first time control passes through that
4503 	 function. This is not precise enough to pin down an
4504 	 init_priority value, so don't allow it.  */
4505       || current_function_decl)
4506     {
4507       error ("can only use %qE attribute on file-scope definitions "
4508 	     "of objects of class type", name);
4509       *no_add_attrs = true;
4510       return NULL_TREE;
4511     }
4512 
4513   if (pri > MAX_INIT_PRIORITY || pri <= 0)
4514     {
4515       error ("requested init_priority is out of range");
4516       *no_add_attrs = true;
4517       return NULL_TREE;
4518     }
4519 
4520   /* Check for init_priorities that are reserved for
4521      language and runtime support implementations.*/
4522   if (pri <= MAX_RESERVED_INIT_PRIORITY)
4523     {
4524       warning
4525 	(0, "requested init_priority is reserved for internal use");
4526     }
4527 
4528   if (SUPPORTS_INIT_PRIORITY)
4529     {
4530       SET_DECL_INIT_PRIORITY (decl, pri);
4531       DECL_HAS_INIT_PRIORITY_P (decl) = 1;
4532       return NULL_TREE;
4533     }
4534   else
4535     {
4536       error ("%qE attribute is not supported on this platform", name);
4537       *no_add_attrs = true;
4538       return NULL_TREE;
4539     }
4540 }
4541 
4542 /* DECL is being redeclared; the old declaration had the abi tags in OLD,
4543    and the new one has the tags in NEW_.  Give an error if there are tags
4544    in NEW_ that weren't in OLD.  */
4545 
4546 bool
check_abi_tag_redeclaration(const_tree decl,const_tree old,const_tree new_)4547 check_abi_tag_redeclaration (const_tree decl, const_tree old, const_tree new_)
4548 {
4549   if (old && TREE_CODE (TREE_VALUE (old)) == TREE_LIST)
4550     old = TREE_VALUE (old);
4551   if (new_ && TREE_CODE (TREE_VALUE (new_)) == TREE_LIST)
4552     new_ = TREE_VALUE (new_);
4553   bool err = false;
4554   for (const_tree t = new_; t; t = TREE_CHAIN (t))
4555     {
4556       tree str = TREE_VALUE (t);
4557       for (const_tree in = old; in; in = TREE_CHAIN (in))
4558 	{
4559 	  tree ostr = TREE_VALUE (in);
4560 	  if (cp_tree_equal (str, ostr))
4561 	    goto found;
4562 	}
4563       error ("redeclaration of %qD adds abi tag %qE", decl, str);
4564       err = true;
4565     found:;
4566     }
4567   if (err)
4568     {
4569       inform (DECL_SOURCE_LOCATION (decl), "previous declaration here");
4570       return false;
4571     }
4572   return true;
4573 }
4574 
4575 /* The abi_tag attribute with the name NAME was given ARGS.  If they are
4576    ill-formed, give an error and return false; otherwise, return true.  */
4577 
4578 bool
check_abi_tag_args(tree args,tree name)4579 check_abi_tag_args (tree args, tree name)
4580 {
4581   if (!args)
4582     {
4583       error ("the %qE attribute requires arguments", name);
4584       return false;
4585     }
4586   for (tree arg = args; arg; arg = TREE_CHAIN (arg))
4587     {
4588       tree elt = TREE_VALUE (arg);
4589       if (TREE_CODE (elt) != STRING_CST
4590 	  || (!same_type_ignoring_top_level_qualifiers_p
4591 	      (strip_array_types (TREE_TYPE (elt)),
4592 	       char_type_node)))
4593 	{
4594 	  error ("arguments to the %qE attribute must be narrow string "
4595 		 "literals", name);
4596 	  return false;
4597 	}
4598       const char *begin = TREE_STRING_POINTER (elt);
4599       const char *end = begin + TREE_STRING_LENGTH (elt);
4600       for (const char *p = begin; p != end; ++p)
4601 	{
4602 	  char c = *p;
4603 	  if (p == begin)
4604 	    {
4605 	      if (!ISALPHA (c) && c != '_')
4606 		{
4607 		  error ("arguments to the %qE attribute must contain valid "
4608 			 "identifiers", name);
4609 		  inform (input_location, "%<%c%> is not a valid first "
4610 			  "character for an identifier", c);
4611 		  return false;
4612 		}
4613 	    }
4614 	  else if (p == end - 1)
4615 	    gcc_assert (c == 0);
4616 	  else
4617 	    {
4618 	      if (!ISALNUM (c) && c != '_')
4619 		{
4620 		  error ("arguments to the %qE attribute must contain valid "
4621 			 "identifiers", name);
4622 		  inform (input_location, "%<%c%> is not a valid character "
4623 			  "in an identifier", c);
4624 		  return false;
4625 		}
4626 	    }
4627 	}
4628     }
4629   return true;
4630 }
4631 
4632 /* Handle an "abi_tag" attribute; arguments as in
4633    struct attribute_spec.handler.  */
4634 
4635 static tree
handle_abi_tag_attribute(tree * node,tree name,tree args,int flags,bool * no_add_attrs)4636 handle_abi_tag_attribute (tree* node, tree name, tree args,
4637 			  int flags, bool* no_add_attrs)
4638 {
4639   if (!check_abi_tag_args (args, name))
4640     goto fail;
4641 
4642   if (TYPE_P (*node))
4643     {
4644       if (!OVERLOAD_TYPE_P (*node))
4645 	{
4646 	  error ("%qE attribute applied to non-class, non-enum type %qT",
4647 		 name, *node);
4648 	  goto fail;
4649 	}
4650       else if (!(flags & (int)ATTR_FLAG_TYPE_IN_PLACE))
4651 	{
4652 	  error ("%qE attribute applied to %qT after its definition",
4653 		 name, *node);
4654 	  goto fail;
4655 	}
4656       else if (CLASS_TYPE_P (*node)
4657 	       && CLASSTYPE_TEMPLATE_INSTANTIATION (*node))
4658 	{
4659 	  warning (OPT_Wattributes, "ignoring %qE attribute applied to "
4660 		   "template instantiation %qT", name, *node);
4661 	  goto fail;
4662 	}
4663       else if (CLASS_TYPE_P (*node)
4664 	       && CLASSTYPE_TEMPLATE_SPECIALIZATION (*node))
4665 	{
4666 	  warning (OPT_Wattributes, "ignoring %qE attribute applied to "
4667 		   "template specialization %qT", name, *node);
4668 	  goto fail;
4669 	}
4670 
4671       tree attributes = TYPE_ATTRIBUTES (*node);
4672       tree decl = TYPE_NAME (*node);
4673 
4674       /* Make sure all declarations have the same abi tags.  */
4675       if (DECL_SOURCE_LOCATION (decl) != input_location)
4676 	{
4677 	  if (!check_abi_tag_redeclaration (decl,
4678 					    lookup_attribute ("abi_tag",
4679 							      attributes),
4680 					    args))
4681 	    goto fail;
4682 	}
4683     }
4684   else
4685     {
4686       if (!VAR_OR_FUNCTION_DECL_P (*node))
4687 	{
4688 	  error ("%qE attribute applied to non-function, non-variable %qD",
4689 		 name, *node);
4690 	  goto fail;
4691 	}
4692       else if (DECL_LANGUAGE (*node) == lang_c)
4693 	{
4694 	  error ("%qE attribute applied to extern \"C\" declaration %qD",
4695 		 name, *node);
4696 	  goto fail;
4697 	}
4698     }
4699 
4700   return NULL_TREE;
4701 
4702  fail:
4703   *no_add_attrs = true;
4704   return NULL_TREE;
4705 }
4706 
4707 /* Return a new PTRMEM_CST of the indicated TYPE.  The MEMBER is the
4708    thing pointed to by the constant.  */
4709 
4710 tree
make_ptrmem_cst(tree type,tree member)4711 make_ptrmem_cst (tree type, tree member)
4712 {
4713   tree ptrmem_cst = make_node (PTRMEM_CST);
4714   TREE_TYPE (ptrmem_cst) = type;
4715   PTRMEM_CST_MEMBER (ptrmem_cst) = member;
4716   return ptrmem_cst;
4717 }
4718 
4719 /* Build a variant of TYPE that has the indicated ATTRIBUTES.  May
4720    return an existing type if an appropriate type already exists.  */
4721 
4722 tree
cp_build_type_attribute_variant(tree type,tree attributes)4723 cp_build_type_attribute_variant (tree type, tree attributes)
4724 {
4725   tree new_type;
4726 
4727   new_type = build_type_attribute_variant (type, attributes);
4728   if (TREE_CODE (new_type) == FUNCTION_TYPE
4729       || TREE_CODE (new_type) == METHOD_TYPE)
4730     gcc_checking_assert (cxx_type_hash_eq (type, new_type));
4731 
4732   /* Making a new main variant of a class type is broken.  */
4733   gcc_assert (!CLASS_TYPE_P (type) || new_type == type);
4734 
4735   return new_type;
4736 }
4737 
4738 /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
4739    Called only after doing all language independent checks.  */
4740 
4741 bool
cxx_type_hash_eq(const_tree typea,const_tree typeb)4742 cxx_type_hash_eq (const_tree typea, const_tree typeb)
4743 {
4744   gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE
4745 	      || TREE_CODE (typea) == METHOD_TYPE);
4746 
4747   if (type_memfn_rqual (typea) != type_memfn_rqual (typeb))
4748     return false;
4749   if (TYPE_HAS_LATE_RETURN_TYPE (typea) != TYPE_HAS_LATE_RETURN_TYPE (typeb))
4750     return false;
4751   return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
4752 			    TYPE_RAISES_EXCEPTIONS (typeb), ce_exact);
4753 }
4754 
4755 /* Copy the language-specific type variant modifiers from TYPEB to TYPEA.  For
4756    C++, these are the exception-specifier and ref-qualifier.  */
4757 
4758 tree
cxx_copy_lang_qualifiers(const_tree typea,const_tree typeb)4759 cxx_copy_lang_qualifiers (const_tree typea, const_tree typeb)
4760 {
4761   tree type = CONST_CAST_TREE (typea);
4762   if (TREE_CODE (type) == FUNCTION_TYPE || TREE_CODE (type) == METHOD_TYPE)
4763     type = build_cp_fntype_variant (type, type_memfn_rqual (typeb),
4764 				    TYPE_RAISES_EXCEPTIONS (typeb),
4765 				    TYPE_HAS_LATE_RETURN_TYPE (typeb));
4766   return type;
4767 }
4768 
4769 /* Apply FUNC to all language-specific sub-trees of TP in a pre-order
4770    traversal.  Called from walk_tree.  */
4771 
4772 tree
cp_walk_subtrees(tree * tp,int * walk_subtrees_p,walk_tree_fn func,void * data,hash_set<tree> * pset)4773 cp_walk_subtrees (tree *tp, int *walk_subtrees_p, walk_tree_fn func,
4774 		  void *data, hash_set<tree> *pset)
4775 {
4776   enum tree_code code = TREE_CODE (*tp);
4777   tree result;
4778 
4779 #define WALK_SUBTREE(NODE)				\
4780   do							\
4781     {							\
4782       result = cp_walk_tree (&(NODE), func, data, pset);	\
4783       if (result) goto out;				\
4784     }							\
4785   while (0)
4786 
4787   /* Not one of the easy cases.  We must explicitly go through the
4788      children.  */
4789   result = NULL_TREE;
4790   switch (code)
4791     {
4792     case DEFAULT_ARG:
4793     case TEMPLATE_TEMPLATE_PARM:
4794     case BOUND_TEMPLATE_TEMPLATE_PARM:
4795     case UNBOUND_CLASS_TEMPLATE:
4796     case TEMPLATE_PARM_INDEX:
4797     case TEMPLATE_TYPE_PARM:
4798     case TYPENAME_TYPE:
4799     case TYPEOF_TYPE:
4800     case UNDERLYING_TYPE:
4801       /* None of these have subtrees other than those already walked
4802 	 above.  */
4803       *walk_subtrees_p = 0;
4804       break;
4805 
4806     case BASELINK:
4807       if (BASELINK_QUALIFIED_P (*tp))
4808 	WALK_SUBTREE (BINFO_TYPE (BASELINK_ACCESS_BINFO (*tp)));
4809       WALK_SUBTREE (BASELINK_FUNCTIONS (*tp));
4810       *walk_subtrees_p = 0;
4811       break;
4812 
4813     case PTRMEM_CST:
4814       WALK_SUBTREE (TREE_TYPE (*tp));
4815       *walk_subtrees_p = 0;
4816       break;
4817 
4818     case TREE_LIST:
4819       WALK_SUBTREE (TREE_PURPOSE (*tp));
4820       break;
4821 
4822     case OVERLOAD:
4823       WALK_SUBTREE (OVL_FUNCTION (*tp));
4824       WALK_SUBTREE (OVL_CHAIN (*tp));
4825       *walk_subtrees_p = 0;
4826       break;
4827 
4828     case USING_DECL:
4829       WALK_SUBTREE (DECL_NAME (*tp));
4830       WALK_SUBTREE (USING_DECL_SCOPE (*tp));
4831       WALK_SUBTREE (USING_DECL_DECLS (*tp));
4832       *walk_subtrees_p = 0;
4833       break;
4834 
4835     case RECORD_TYPE:
4836       if (TYPE_PTRMEMFUNC_P (*tp))
4837 	WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE_RAW (*tp));
4838       break;
4839 
4840     case TYPE_ARGUMENT_PACK:
4841     case NONTYPE_ARGUMENT_PACK:
4842       {
4843         tree args = ARGUMENT_PACK_ARGS (*tp);
4844         int i, len = TREE_VEC_LENGTH (args);
4845         for (i = 0; i < len; i++)
4846           WALK_SUBTREE (TREE_VEC_ELT (args, i));
4847       }
4848       break;
4849 
4850     case TYPE_PACK_EXPANSION:
4851       WALK_SUBTREE (TREE_TYPE (*tp));
4852       WALK_SUBTREE (PACK_EXPANSION_EXTRA_ARGS (*tp));
4853       *walk_subtrees_p = 0;
4854       break;
4855 
4856     case EXPR_PACK_EXPANSION:
4857       WALK_SUBTREE (TREE_OPERAND (*tp, 0));
4858       WALK_SUBTREE (PACK_EXPANSION_EXTRA_ARGS (*tp));
4859       *walk_subtrees_p = 0;
4860       break;
4861 
4862     case CAST_EXPR:
4863     case REINTERPRET_CAST_EXPR:
4864     case STATIC_CAST_EXPR:
4865     case CONST_CAST_EXPR:
4866     case DYNAMIC_CAST_EXPR:
4867     case IMPLICIT_CONV_EXPR:
4868       if (TREE_TYPE (*tp))
4869 	WALK_SUBTREE (TREE_TYPE (*tp));
4870 
4871       {
4872         int i;
4873         for (i = 0; i < TREE_CODE_LENGTH (TREE_CODE (*tp)); ++i)
4874 	  WALK_SUBTREE (TREE_OPERAND (*tp, i));
4875       }
4876       *walk_subtrees_p = 0;
4877       break;
4878 
4879     case TRAIT_EXPR:
4880       WALK_SUBTREE (TRAIT_EXPR_TYPE1 (*tp));
4881       WALK_SUBTREE (TRAIT_EXPR_TYPE2 (*tp));
4882       *walk_subtrees_p = 0;
4883       break;
4884 
4885     case DECLTYPE_TYPE:
4886       ++cp_unevaluated_operand;
4887       /* We can't use WALK_SUBTREE here because of the goto.  */
4888       result = cp_walk_tree (&DECLTYPE_TYPE_EXPR (*tp), func, data, pset);
4889       --cp_unevaluated_operand;
4890       *walk_subtrees_p = 0;
4891       break;
4892 
4893     case ALIGNOF_EXPR:
4894     case SIZEOF_EXPR:
4895     case NOEXCEPT_EXPR:
4896       ++cp_unevaluated_operand;
4897       result = cp_walk_tree (&TREE_OPERAND (*tp, 0), func, data, pset);
4898       --cp_unevaluated_operand;
4899       *walk_subtrees_p = 0;
4900       break;
4901 
4902     case REQUIRES_EXPR:
4903       // Only recurse through the nested expression. Do not
4904       // walk the parameter list. Doing so causes false
4905       // positives in the pack expansion checker since the
4906       // requires parameters are introduced as pack expansions.
4907       WALK_SUBTREE (TREE_OPERAND (*tp, 1));
4908       *walk_subtrees_p = 0;
4909       break;
4910 
4911     case DECL_EXPR:
4912       /* User variables should be mentioned in BIND_EXPR_VARS
4913 	 and their initializers and sizes walked when walking
4914 	 the containing BIND_EXPR.  Compiler temporaries are
4915 	 handled here.  And also normal variables in templates,
4916 	 since do_poplevel doesn't build a BIND_EXPR then.  */
4917       if (VAR_P (TREE_OPERAND (*tp, 0))
4918 	  && (processing_template_decl
4919 	      || (DECL_ARTIFICIAL (TREE_OPERAND (*tp, 0))
4920 		  && !TREE_STATIC (TREE_OPERAND (*tp, 0)))))
4921 	{
4922 	  tree decl = TREE_OPERAND (*tp, 0);
4923 	  WALK_SUBTREE (DECL_INITIAL (decl));
4924 	  WALK_SUBTREE (DECL_SIZE (decl));
4925 	  WALK_SUBTREE (DECL_SIZE_UNIT (decl));
4926 	}
4927       break;
4928 
4929     case LAMBDA_EXPR:
4930       /* Don't walk into the body of the lambda, but the capture initializers
4931 	 are part of the enclosing context.  */
4932       for (tree cap = LAMBDA_EXPR_CAPTURE_LIST (*tp); cap;
4933 	   cap = TREE_CHAIN (cap))
4934 	WALK_SUBTREE (TREE_VALUE (cap));
4935       break;
4936 
4937     default:
4938       return NULL_TREE;
4939     }
4940 
4941   /* We didn't find what we were looking for.  */
4942  out:
4943   return result;
4944 
4945 #undef WALK_SUBTREE
4946 }
4947 
4948 /* Like save_expr, but for C++.  */
4949 
4950 tree
cp_save_expr(tree expr)4951 cp_save_expr (tree expr)
4952 {
4953   /* There is no reason to create a SAVE_EXPR within a template; if
4954      needed, we can create the SAVE_EXPR when instantiating the
4955      template.  Furthermore, the middle-end cannot handle C++-specific
4956      tree codes.  */
4957   if (processing_template_decl)
4958     return expr;
4959 
4960   /* TARGET_EXPRs are only expanded once.  */
4961   if (TREE_CODE (expr) == TARGET_EXPR)
4962     return expr;
4963 
4964   return save_expr (expr);
4965 }
4966 
4967 /* Initialize tree.c.  */
4968 
4969 void
init_tree(void)4970 init_tree (void)
4971 {
4972   list_hash_table = hash_table<list_hasher>::create_ggc (61);
4973   register_scoped_attributes (std_attribute_table, NULL);
4974 }
4975 
4976 /* Returns the kind of special function that DECL (a FUNCTION_DECL)
4977    is.  Note that sfk_none is zero, so this function can be used as a
4978    predicate to test whether or not DECL is a special function.  */
4979 
4980 special_function_kind
special_function_p(const_tree decl)4981 special_function_p (const_tree decl)
4982 {
4983   /* Rather than doing all this stuff with magic names, we should
4984      probably have a field of type `special_function_kind' in
4985      DECL_LANG_SPECIFIC.  */
4986   if (DECL_INHERITED_CTOR (decl))
4987     return sfk_inheriting_constructor;
4988   if (DECL_COPY_CONSTRUCTOR_P (decl))
4989     return sfk_copy_constructor;
4990   if (DECL_MOVE_CONSTRUCTOR_P (decl))
4991     return sfk_move_constructor;
4992   if (DECL_CONSTRUCTOR_P (decl))
4993     return sfk_constructor;
4994   if (DECL_ASSIGNMENT_OPERATOR_P (decl)
4995       && DECL_OVERLOADED_OPERATOR_IS (decl, NOP_EXPR))
4996     {
4997       if (copy_fn_p (decl))
4998 	return sfk_copy_assignment;
4999       if (move_fn_p (decl))
5000 	return sfk_move_assignment;
5001     }
5002   if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
5003     return sfk_destructor;
5004   if (DECL_COMPLETE_DESTRUCTOR_P (decl))
5005     return sfk_complete_destructor;
5006   if (DECL_BASE_DESTRUCTOR_P (decl))
5007     return sfk_base_destructor;
5008   if (DECL_DELETING_DESTRUCTOR_P (decl))
5009     return sfk_deleting_destructor;
5010   if (DECL_CONV_FN_P (decl))
5011     return sfk_conversion;
5012   if (deduction_guide_p (decl))
5013     return sfk_deduction_guide;
5014 
5015   return sfk_none;
5016 }
5017 
5018 /* Returns nonzero if TYPE is a character type, including wchar_t.  */
5019 
5020 int
char_type_p(tree type)5021 char_type_p (tree type)
5022 {
5023   return (same_type_p (type, char_type_node)
5024 	  || same_type_p (type, unsigned_char_type_node)
5025 	  || same_type_p (type, signed_char_type_node)
5026 	  || same_type_p (type, char8_type_node)
5027 	  || same_type_p (type, char16_type_node)
5028 	  || same_type_p (type, char32_type_node)
5029 	  || same_type_p (type, wchar_type_node));
5030 }
5031 
5032 /* Returns the kind of linkage associated with the indicated DECL.  Th
5033    value returned is as specified by the language standard; it is
5034    independent of implementation details regarding template
5035    instantiation, etc.  For example, it is possible that a declaration
5036    to which this function assigns external linkage would not show up
5037    as a global symbol when you run `nm' on the resulting object file.  */
5038 
5039 linkage_kind
decl_linkage(tree decl)5040 decl_linkage (tree decl)
5041 {
5042   /* This function doesn't attempt to calculate the linkage from first
5043      principles as given in [basic.link].  Instead, it makes use of
5044      the fact that we have already set TREE_PUBLIC appropriately, and
5045      then handles a few special cases.  Ideally, we would calculate
5046      linkage first, and then transform that into a concrete
5047      implementation.  */
5048 
5049   /* Things that don't have names have no linkage.  */
5050   if (!DECL_NAME (decl))
5051     return lk_none;
5052 
5053   /* Fields have no linkage.  */
5054   if (TREE_CODE (decl) == FIELD_DECL)
5055     return lk_none;
5056 
5057   /* Things that are TREE_PUBLIC have external linkage.  */
5058   if (TREE_PUBLIC (decl))
5059     return lk_external;
5060 
5061   /* maybe_thunk_body clears TREE_PUBLIC on the maybe-in-charge 'tor variants,
5062      check one of the "clones" for the real linkage.  */
5063   if (DECL_MAYBE_IN_CHARGE_CDTOR_P (decl)
5064       && DECL_CHAIN (decl)
5065       && DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)))
5066     return decl_linkage (DECL_CHAIN (decl));
5067 
5068   if (TREE_CODE (decl) == NAMESPACE_DECL)
5069     return lk_external;
5070 
5071   /* Linkage of a CONST_DECL depends on the linkage of the enumeration
5072      type.  */
5073   if (TREE_CODE (decl) == CONST_DECL)
5074     return decl_linkage (TYPE_NAME (DECL_CONTEXT (decl)));
5075 
5076   /* Things in local scope do not have linkage, if they don't have
5077      TREE_PUBLIC set.  */
5078   if (decl_function_context (decl))
5079     return lk_none;
5080 
5081   /* Members of the anonymous namespace also have TREE_PUBLIC unset, but
5082      are considered to have external linkage for language purposes, as do
5083      template instantiations on targets without weak symbols.  DECLs really
5084      meant to have internal linkage have DECL_THIS_STATIC set.  */
5085   if (TREE_CODE (decl) == TYPE_DECL)
5086     return lk_external;
5087   if (VAR_OR_FUNCTION_DECL_P (decl))
5088     {
5089       if (!DECL_THIS_STATIC (decl))
5090 	return lk_external;
5091 
5092       /* Static data members and static member functions from classes
5093 	 in anonymous namespace also don't have TREE_PUBLIC set.  */
5094       if (DECL_CLASS_CONTEXT (decl))
5095 	return lk_external;
5096     }
5097 
5098   /* Everything else has internal linkage.  */
5099   return lk_internal;
5100 }
5101 
5102 /* Returns the storage duration of the object or reference associated with
5103    the indicated DECL, which should be a VAR_DECL or PARM_DECL.  */
5104 
5105 duration_kind
decl_storage_duration(tree decl)5106 decl_storage_duration (tree decl)
5107 {
5108   if (TREE_CODE (decl) == PARM_DECL)
5109     return dk_auto;
5110   if (TREE_CODE (decl) == FUNCTION_DECL)
5111     return dk_static;
5112   gcc_assert (VAR_P (decl));
5113   if (!TREE_STATIC (decl)
5114       && !DECL_EXTERNAL (decl))
5115     return dk_auto;
5116   if (CP_DECL_THREAD_LOCAL_P (decl))
5117     return dk_thread;
5118   return dk_static;
5119 }
5120 
5121 /* EXP is an expression that we want to pre-evaluate.  Returns (in
5122    *INITP) an expression that will perform the pre-evaluation.  The
5123    value returned by this function is a side-effect free expression
5124    equivalent to the pre-evaluated expression.  Callers must ensure
5125    that *INITP is evaluated before EXP.  */
5126 
5127 tree
stabilize_expr(tree exp,tree * initp)5128 stabilize_expr (tree exp, tree* initp)
5129 {
5130   tree init_expr;
5131 
5132   if (!TREE_SIDE_EFFECTS (exp))
5133     init_expr = NULL_TREE;
5134   else if (VOID_TYPE_P (TREE_TYPE (exp)))
5135     {
5136       init_expr = exp;
5137       exp = void_node;
5138     }
5139   /* There are no expressions with REFERENCE_TYPE, but there can be call
5140      arguments with such a type; just treat it as a pointer.  */
5141   else if (TYPE_REF_P (TREE_TYPE (exp))
5142 	   || SCALAR_TYPE_P (TREE_TYPE (exp))
5143 	   || !glvalue_p (exp))
5144     {
5145       init_expr = get_target_expr (exp);
5146       exp = TARGET_EXPR_SLOT (init_expr);
5147       if (CLASS_TYPE_P (TREE_TYPE (exp)))
5148 	exp = move (exp);
5149       else
5150 	exp = rvalue (exp);
5151     }
5152   else
5153     {
5154       bool xval = !lvalue_p (exp);
5155       exp = cp_build_addr_expr (exp, tf_warning_or_error);
5156       init_expr = get_target_expr (exp);
5157       exp = TARGET_EXPR_SLOT (init_expr);
5158       exp = cp_build_fold_indirect_ref (exp);
5159       if (xval)
5160 	exp = move (exp);
5161     }
5162   *initp = init_expr;
5163 
5164   gcc_assert (!TREE_SIDE_EFFECTS (exp));
5165   return exp;
5166 }
5167 
5168 /* Add NEW_EXPR, an expression whose value we don't care about, after the
5169    similar expression ORIG.  */
5170 
5171 tree
add_stmt_to_compound(tree orig,tree new_expr)5172 add_stmt_to_compound (tree orig, tree new_expr)
5173 {
5174   if (!new_expr || !TREE_SIDE_EFFECTS (new_expr))
5175     return orig;
5176   if (!orig || !TREE_SIDE_EFFECTS (orig))
5177     return new_expr;
5178   return build2 (COMPOUND_EXPR, void_type_node, orig, new_expr);
5179 }
5180 
5181 /* Like stabilize_expr, but for a call whose arguments we want to
5182    pre-evaluate.  CALL is modified in place to use the pre-evaluated
5183    arguments, while, upon return, *INITP contains an expression to
5184    compute the arguments.  */
5185 
5186 void
stabilize_call(tree call,tree * initp)5187 stabilize_call (tree call, tree *initp)
5188 {
5189   tree inits = NULL_TREE;
5190   int i;
5191   int nargs = call_expr_nargs (call);
5192 
5193   if (call == error_mark_node || processing_template_decl)
5194     {
5195       *initp = NULL_TREE;
5196       return;
5197     }
5198 
5199   gcc_assert (TREE_CODE (call) == CALL_EXPR);
5200 
5201   for (i = 0; i < nargs; i++)
5202     {
5203       tree init;
5204       CALL_EXPR_ARG (call, i) =
5205 	stabilize_expr (CALL_EXPR_ARG (call, i), &init);
5206       inits = add_stmt_to_compound (inits, init);
5207     }
5208 
5209   *initp = inits;
5210 }
5211 
5212 /* Like stabilize_expr, but for an AGGR_INIT_EXPR whose arguments we want
5213    to pre-evaluate.  CALL is modified in place to use the pre-evaluated
5214    arguments, while, upon return, *INITP contains an expression to
5215    compute the arguments.  */
5216 
5217 static void
stabilize_aggr_init(tree call,tree * initp)5218 stabilize_aggr_init (tree call, tree *initp)
5219 {
5220   tree inits = NULL_TREE;
5221   int i;
5222   int nargs = aggr_init_expr_nargs (call);
5223 
5224   if (call == error_mark_node)
5225     return;
5226 
5227   gcc_assert (TREE_CODE (call) == AGGR_INIT_EXPR);
5228 
5229   for (i = 0; i < nargs; i++)
5230     {
5231       tree init;
5232       AGGR_INIT_EXPR_ARG (call, i) =
5233 	stabilize_expr (AGGR_INIT_EXPR_ARG (call, i), &init);
5234       inits = add_stmt_to_compound (inits, init);
5235     }
5236 
5237   *initp = inits;
5238 }
5239 
5240 /* Like stabilize_expr, but for an initialization.
5241 
5242    If the initialization is for an object of class type, this function
5243    takes care not to introduce additional temporaries.
5244 
5245    Returns TRUE iff the expression was successfully pre-evaluated,
5246    i.e., if INIT is now side-effect free, except for, possibly, a
5247    single call to a constructor.  */
5248 
5249 bool
stabilize_init(tree init,tree * initp)5250 stabilize_init (tree init, tree *initp)
5251 {
5252   tree t = init;
5253 
5254   *initp = NULL_TREE;
5255 
5256   if (t == error_mark_node || processing_template_decl)
5257     return true;
5258 
5259   if (TREE_CODE (t) == INIT_EXPR)
5260     t = TREE_OPERAND (t, 1);
5261   if (TREE_CODE (t) == TARGET_EXPR)
5262     t = TARGET_EXPR_INITIAL (t);
5263 
5264   /* If the RHS can be stabilized without breaking copy elision, stabilize
5265      it.  We specifically don't stabilize class prvalues here because that
5266      would mean an extra copy, but they might be stabilized below.  */
5267   if (TREE_CODE (init) == INIT_EXPR
5268       && TREE_CODE (t) != CONSTRUCTOR
5269       && TREE_CODE (t) != AGGR_INIT_EXPR
5270       && (SCALAR_TYPE_P (TREE_TYPE (t))
5271 	  || glvalue_p (t)))
5272     {
5273       TREE_OPERAND (init, 1) = stabilize_expr (t, initp);
5274       return true;
5275     }
5276 
5277   if (TREE_CODE (t) == COMPOUND_EXPR
5278       && TREE_CODE (init) == INIT_EXPR)
5279     {
5280       tree last = expr_last (t);
5281       /* Handle stabilizing the EMPTY_CLASS_EXPR pattern.  */
5282       if (!TREE_SIDE_EFFECTS (last))
5283 	{
5284 	  *initp = t;
5285 	  TREE_OPERAND (init, 1) = last;
5286 	  return true;
5287 	}
5288     }
5289 
5290   if (TREE_CODE (t) == CONSTRUCTOR)
5291     {
5292       /* Aggregate initialization: stabilize each of the field
5293 	 initializers.  */
5294       unsigned i;
5295       constructor_elt *ce;
5296       bool good = true;
5297       vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
5298       for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
5299 	{
5300 	  tree type = TREE_TYPE (ce->value);
5301 	  tree subinit;
5302 	  if (TYPE_REF_P (type)
5303 	      || SCALAR_TYPE_P (type))
5304 	    ce->value = stabilize_expr (ce->value, &subinit);
5305 	  else if (!stabilize_init (ce->value, &subinit))
5306 	    good = false;
5307 	  *initp = add_stmt_to_compound (*initp, subinit);
5308 	}
5309       return good;
5310     }
5311 
5312   if (TREE_CODE (t) == CALL_EXPR)
5313     {
5314       stabilize_call (t, initp);
5315       return true;
5316     }
5317 
5318   if (TREE_CODE (t) == AGGR_INIT_EXPR)
5319     {
5320       stabilize_aggr_init (t, initp);
5321       return true;
5322     }
5323 
5324   /* The initialization is being performed via a bitwise copy -- and
5325      the item copied may have side effects.  */
5326   return !TREE_SIDE_EFFECTS (init);
5327 }
5328 
5329 /* Returns true if a cast to TYPE may appear in an integral constant
5330    expression.  */
5331 
5332 bool
cast_valid_in_integral_constant_expression_p(tree type)5333 cast_valid_in_integral_constant_expression_p (tree type)
5334 {
5335   return (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
5336 	  || cxx_dialect >= cxx11
5337 	  || dependent_type_p (type)
5338 	  || type == error_mark_node);
5339 }
5340 
5341 /* Return true if we need to fix linkage information of DECL.  */
5342 
5343 static bool
cp_fix_function_decl_p(tree decl)5344 cp_fix_function_decl_p (tree decl)
5345 {
5346   /* Skip if DECL is not externally visible.  */
5347   if (!TREE_PUBLIC (decl))
5348     return false;
5349 
5350   /* We need to fix DECL if it a appears to be exported but with no
5351      function body.  Thunks do not have CFGs and we may need to
5352      handle them specially later.   */
5353   if (!gimple_has_body_p (decl)
5354       && !DECL_THUNK_P (decl)
5355       && !DECL_EXTERNAL (decl))
5356     {
5357       struct cgraph_node *node = cgraph_node::get (decl);
5358 
5359       /* Don't fix same_body aliases.  Although they don't have their own
5360 	 CFG, they share it with what they alias to.  */
5361       if (!node || !node->alias
5362 	  || !vec_safe_length (node->ref_list.references))
5363 	return true;
5364     }
5365 
5366   return false;
5367 }
5368 
5369 /* Clean the C++ specific parts of the tree T. */
5370 
5371 void
cp_free_lang_data(tree t)5372 cp_free_lang_data (tree t)
5373 {
5374   if (TREE_CODE (t) == METHOD_TYPE
5375       || TREE_CODE (t) == FUNCTION_TYPE)
5376     {
5377       /* Default args are not interesting anymore.  */
5378       tree argtypes = TYPE_ARG_TYPES (t);
5379       while (argtypes)
5380         {
5381 	  TREE_PURPOSE (argtypes) = 0;
5382 	  argtypes = TREE_CHAIN (argtypes);
5383 	}
5384     }
5385   else if (TREE_CODE (t) == FUNCTION_DECL
5386 	   && cp_fix_function_decl_p (t))
5387     {
5388       /* If T is used in this translation unit at all,  the definition
5389 	 must exist somewhere else since we have decided to not emit it
5390 	 in this TU.  So make it an external reference.  */
5391       DECL_EXTERNAL (t) = 1;
5392       TREE_STATIC (t) = 0;
5393     }
5394   if (TREE_CODE (t) == FUNCTION_DECL)
5395     discard_operator_bindings (t);
5396   if (TREE_CODE (t) == NAMESPACE_DECL)
5397     /* We do not need the leftover chaining of namespaces from the
5398        binding level.  */
5399     DECL_CHAIN (t) = NULL_TREE;
5400 }
5401 
5402 /* Stub for c-common.  Please keep in sync with c-decl.c.
5403    FIXME: If address space support is target specific, then this
5404    should be a C target hook.  But currently this is not possible,
5405    because this function is called via REGISTER_TARGET_PRAGMAS.  */
5406 void
c_register_addr_space(const char *,addr_space_t)5407 c_register_addr_space (const char * /*word*/, addr_space_t /*as*/)
5408 {
5409 }
5410 
5411 /* Return the number of operands in T that we care about for things like
5412    mangling.  */
5413 
5414 int
cp_tree_operand_length(const_tree t)5415 cp_tree_operand_length (const_tree t)
5416 {
5417   enum tree_code code = TREE_CODE (t);
5418 
5419   if (TREE_CODE_CLASS (code) == tcc_vl_exp)
5420     return VL_EXP_OPERAND_LENGTH (t);
5421 
5422   return cp_tree_code_length (code);
5423 }
5424 
5425 /* Like cp_tree_operand_length, but takes a tree_code CODE.  */
5426 
5427 int
cp_tree_code_length(enum tree_code code)5428 cp_tree_code_length (enum tree_code code)
5429 {
5430   gcc_assert (TREE_CODE_CLASS (code) != tcc_vl_exp);
5431 
5432   switch (code)
5433     {
5434     case PREINCREMENT_EXPR:
5435     case PREDECREMENT_EXPR:
5436     case POSTINCREMENT_EXPR:
5437     case POSTDECREMENT_EXPR:
5438       return 1;
5439 
5440     case ARRAY_REF:
5441       return 2;
5442 
5443     case EXPR_PACK_EXPANSION:
5444       return 1;
5445 
5446     default:
5447       return TREE_CODE_LENGTH (code);
5448     }
5449 }
5450 
5451 /* Like EXPR_LOCATION, but also handle some tcc_exceptional that have
5452    locations.  */
5453 
5454 location_t
cp_expr_location(const_tree t_)5455 cp_expr_location (const_tree t_)
5456 {
5457   tree t = CONST_CAST_TREE (t_);
5458   if (t == NULL_TREE)
5459     return UNKNOWN_LOCATION;
5460   switch (TREE_CODE (t))
5461     {
5462     case LAMBDA_EXPR:
5463       return LAMBDA_EXPR_LOCATION (t);
5464     case STATIC_ASSERT:
5465       return STATIC_ASSERT_SOURCE_LOCATION (t);
5466     default:
5467       return EXPR_LOCATION (t);
5468     }
5469 }
5470 
5471 /* Implement -Wzero_as_null_pointer_constant.  Return true if the
5472    conditions for the warning hold, false otherwise.  */
5473 bool
maybe_warn_zero_as_null_pointer_constant(tree expr,location_t loc)5474 maybe_warn_zero_as_null_pointer_constant (tree expr, location_t loc)
5475 {
5476   if (c_inhibit_evaluation_warnings == 0
5477       && !null_node_p (expr) && !NULLPTR_TYPE_P (TREE_TYPE (expr)))
5478     {
5479       warning_at (loc, OPT_Wzero_as_null_pointer_constant,
5480 		  "zero as null pointer constant");
5481       return true;
5482     }
5483   return false;
5484 }
5485 
5486 #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
5487 /* Complain that some language-specific thing hanging off a tree
5488    node has been accessed improperly.  */
5489 
5490 void
lang_check_failed(const char * file,int line,const char * function)5491 lang_check_failed (const char* file, int line, const char* function)
5492 {
5493   internal_error ("lang_* check: failed in %s, at %s:%d",
5494 		  function, trim_filename (file), line);
5495 }
5496 #endif /* ENABLE_TREE_CHECKING */
5497 
5498 #if CHECKING_P
5499 
5500 namespace selftest {
5501 
5502 /* Verify that lvalue_kind () works, for various expressions,
5503    and that location wrappers don't affect the results.  */
5504 
5505 static void
test_lvalue_kind()5506 test_lvalue_kind ()
5507 {
5508   location_t loc = BUILTINS_LOCATION;
5509 
5510   /* Verify constants and parameters, without and with
5511      location wrappers.  */
5512   tree int_cst = build_int_cst (integer_type_node, 42);
5513   ASSERT_EQ (clk_none, lvalue_kind (int_cst));
5514 
5515   tree wrapped_int_cst = maybe_wrap_with_location (int_cst, loc);
5516   ASSERT_TRUE (location_wrapper_p (wrapped_int_cst));
5517   ASSERT_EQ (clk_none, lvalue_kind (wrapped_int_cst));
5518 
5519   tree string_lit = build_string (4, "foo");
5520   TREE_TYPE (string_lit) = char_array_type_node;
5521   string_lit = fix_string_type (string_lit);
5522   ASSERT_EQ (clk_ordinary, lvalue_kind (string_lit));
5523 
5524   tree wrapped_string_lit = maybe_wrap_with_location (string_lit, loc);
5525   ASSERT_TRUE (location_wrapper_p (wrapped_string_lit));
5526   ASSERT_EQ (clk_ordinary, lvalue_kind (wrapped_string_lit));
5527 
5528   tree parm = build_decl (UNKNOWN_LOCATION, PARM_DECL,
5529 			  get_identifier ("some_parm"),
5530 			  integer_type_node);
5531   ASSERT_EQ (clk_ordinary, lvalue_kind (parm));
5532 
5533   tree wrapped_parm = maybe_wrap_with_location (parm, loc);
5534   ASSERT_TRUE (location_wrapper_p (wrapped_parm));
5535   ASSERT_EQ (clk_ordinary, lvalue_kind (wrapped_parm));
5536 
5537   /* Verify that lvalue_kind of std::move on a parm isn't
5538      affected by location wrappers.  */
5539   tree rvalue_ref_of_parm = move (parm);
5540   ASSERT_EQ (clk_rvalueref, lvalue_kind (rvalue_ref_of_parm));
5541   tree rvalue_ref_of_wrapped_parm = move (wrapped_parm);
5542   ASSERT_EQ (clk_rvalueref, lvalue_kind (rvalue_ref_of_wrapped_parm));
5543 
5544   /* Verify lvalue_p.  */
5545   ASSERT_FALSE (lvalue_p (int_cst));
5546   ASSERT_FALSE (lvalue_p (wrapped_int_cst));
5547   ASSERT_TRUE (lvalue_p (parm));
5548   ASSERT_TRUE (lvalue_p (wrapped_parm));
5549   ASSERT_FALSE (lvalue_p (rvalue_ref_of_parm));
5550   ASSERT_FALSE (lvalue_p (rvalue_ref_of_wrapped_parm));
5551 }
5552 
5553 /* Run all of the selftests within this file.  */
5554 
5555 void
cp_tree_c_tests()5556 cp_tree_c_tests ()
5557 {
5558   test_lvalue_kind ();
5559 }
5560 
5561 } // namespace selftest
5562 
5563 #endif /* #if CHECKING_P */
5564 
5565 
5566 #include "gt-cp-tree.h"
5567