1 /* Handle parameterized types (templates) for GNU -*- C++ -*-.
2    Copyright (C) 1992-2019 Free Software Foundation, Inc.
3    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
4    Rewritten by Jason Merrill (jason@cygnus.com).
5 
6 This file is part of GCC.
7 
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12 
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21 
22 /* Known bugs or deficiencies include:
23 
24      all methods must be provided in header files; can't use a source
25      file that contains only the method templates and "just win".  */
26 
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "cp-tree.h"
31 #include "timevar.h"
32 #include "stringpool.h"
33 #include "varasm.h"
34 #include "attribs.h"
35 #include "stor-layout.h"
36 #include "intl.h"
37 #include "c-family/c-objc.h"
38 #include "cp-objcp-common.h"
39 #include "toplev.h"
40 #include "tree-iterator.h"
41 #include "type-utils.h"
42 #include "gimplify.h"
43 #include "gcc-rich-location.h"
44 #include "selftest.h"
45 
46 /* The type of functions taking a tree, and some additional data, and
47    returning an int.  */
48 typedef int (*tree_fn_t) (tree, void*);
49 
50 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
51    instantiations have been deferred, either because their definitions
52    were not yet available, or because we were putting off doing the work.  */
53 struct GTY ((chain_next ("%h.next"))) pending_template
54 {
55   struct pending_template *next;
56   struct tinst_level *tinst;
57 };
58 
59 static GTY(()) struct pending_template *pending_templates;
60 static GTY(()) struct pending_template *last_pending_template;
61 
62 int processing_template_parmlist;
63 static int template_header_count;
64 
65 static GTY(()) tree saved_trees;
66 static vec<int> inline_parm_levels;
67 
68 static GTY(()) struct tinst_level *current_tinst_level;
69 
70 static GTY(()) tree saved_access_scope;
71 
72 /* Live only within one (recursive) call to tsubst_expr.  We use
73    this to pass the statement expression node from the STMT_EXPR
74    to the EXPR_STMT that is its result.  */
75 static tree cur_stmt_expr;
76 
77 // -------------------------------------------------------------------------- //
78 // Local Specialization Stack
79 //
80 // Implementation of the RAII helper for creating new local
81 // specializations.
local_specialization_stack(lss_policy policy)82 local_specialization_stack::local_specialization_stack (lss_policy policy)
83   : saved (local_specializations)
84 {
85   if (policy == lss_blank || !saved)
86     local_specializations = new hash_map<tree, tree>;
87   else
88     local_specializations = new hash_map<tree, tree>(*saved);
89 }
90 
~local_specialization_stack()91 local_specialization_stack::~local_specialization_stack ()
92 {
93   delete local_specializations;
94   local_specializations = saved;
95 }
96 
97 /* True if we've recursed into fn_type_unification too many times.  */
98 static bool excessive_deduction_depth;
99 
100 struct GTY((for_user)) spec_entry
101 {
102   tree tmpl;
103   tree args;
104   tree spec;
105 };
106 
107 struct spec_hasher : ggc_ptr_hash<spec_entry>
108 {
109   static hashval_t hash (spec_entry *);
110   static bool equal (spec_entry *, spec_entry *);
111 };
112 
113 static GTY (()) hash_table<spec_hasher> *decl_specializations;
114 
115 static GTY (()) hash_table<spec_hasher> *type_specializations;
116 
117 /* Contains canonical template parameter types. The vector is indexed by
118    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
119    TREE_LIST, whose TREE_VALUEs contain the canonical template
120    parameters of various types and levels.  */
121 static GTY(()) vec<tree, va_gc> *canonical_template_parms;
122 
123 #define UNIFY_ALLOW_NONE 0
124 #define UNIFY_ALLOW_MORE_CV_QUAL 1
125 #define UNIFY_ALLOW_LESS_CV_QUAL 2
126 #define UNIFY_ALLOW_DERIVED 4
127 #define UNIFY_ALLOW_INTEGER 8
128 #define UNIFY_ALLOW_OUTER_LEVEL 16
129 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
130 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
131 
132 enum template_base_result {
133   tbr_incomplete_type,
134   tbr_ambiguous_baseclass,
135   tbr_success
136 };
137 
138 static void push_access_scope (tree);
139 static void pop_access_scope (tree);
140 static bool resolve_overloaded_unification (tree, tree, tree, tree,
141 					    unification_kind_t, int,
142 					    bool);
143 static int try_one_overload (tree, tree, tree, tree, tree,
144 			     unification_kind_t, int, bool, bool);
145 static int unify (tree, tree, tree, tree, int, bool);
146 static void add_pending_template (tree);
147 static tree reopen_tinst_level (struct tinst_level *);
148 static tree tsubst_initializer_list (tree, tree);
149 static tree get_partial_spec_bindings (tree, tree, tree);
150 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
151 				   bool, bool);
152 static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
153 					      bool, bool);
154 static void tsubst_enum	(tree, tree, tree);
155 static tree add_to_template_args (tree, tree);
156 static tree add_outermost_template_args (tree, tree);
157 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
158 static int check_non_deducible_conversion (tree, tree, int, int,
159 					   struct conversion **, bool);
160 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
161 					     tree);
162 static int type_unification_real (tree, tree, tree, const tree *,
163 				  unsigned int, int, unification_kind_t,
164 				  vec<deferred_access_check, va_gc> **,
165 				  bool);
166 static void note_template_header (int);
167 static tree convert_nontype_argument_function (tree, tree, tsubst_flags_t);
168 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
169 static tree convert_template_argument (tree, tree, tree,
170 				       tsubst_flags_t, int, tree);
171 static tree for_each_template_parm (tree, tree_fn_t, void*,
172 				    hash_set<tree> *, bool, tree_fn_t = NULL);
173 static tree expand_template_argument_pack (tree);
174 static tree build_template_parm_index (int, int, int, tree, tree);
175 static bool inline_needs_template_parms (tree, bool);
176 static void push_inline_template_parms_recursive (tree, int);
177 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
178 static int mark_template_parm (tree, void *);
179 static int template_parm_this_level_p (tree, void *);
180 static tree tsubst_friend_function (tree, tree);
181 static tree tsubst_friend_class (tree, tree);
182 static int can_complete_type_without_circularity (tree);
183 static tree get_bindings (tree, tree, tree, bool);
184 static int template_decl_level (tree);
185 static int check_cv_quals_for_unify (int, tree, tree);
186 static void template_parm_level_and_index (tree, int*, int*);
187 static int unify_pack_expansion (tree, tree, tree,
188 				 tree, unification_kind_t, bool, bool);
189 static tree copy_template_args (tree);
190 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
191 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
192 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
193 static tree most_specialized_partial_spec (tree, tsubst_flags_t);
194 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
195 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
196 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
197 static bool check_specialization_scope (void);
198 static tree process_partial_specialization (tree);
199 static void set_current_access_from_decl (tree);
200 static enum template_base_result get_template_base (tree, tree, tree, tree,
201 						    bool , tree *);
202 static tree try_class_unification (tree, tree, tree, tree, bool);
203 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
204 					   tree, tree);
205 static bool template_template_parm_bindings_ok_p (tree, tree);
206 static void tsubst_default_arguments (tree, tsubst_flags_t);
207 static tree for_each_template_parm_r (tree *, int *, void *);
208 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
209 static void copy_default_args_to_explicit_spec (tree);
210 static bool invalid_nontype_parm_type_p (tree, tsubst_flags_t);
211 static bool dependent_template_arg_p (tree);
212 static bool any_template_arguments_need_structural_equality_p (tree);
213 static bool dependent_type_p_r (tree);
214 static tree tsubst_copy	(tree, tree, tsubst_flags_t, tree);
215 static tree tsubst_decl (tree, tree, tsubst_flags_t);
216 static void perform_typedefs_access_check (tree tmpl, tree targs);
217 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
218 							location_t);
219 static tree listify (tree);
220 static tree listify_autos (tree, tree);
221 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
222 static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
223 static bool complex_alias_template_p (const_tree tmpl);
224 static tree tsubst_attributes (tree, tree, tsubst_flags_t, tree);
225 static tree canonicalize_expr_argument (tree, tsubst_flags_t);
226 static tree make_argument_pack (tree);
227 static void register_parameter_specializations (tree, tree);
228 static tree enclosing_instantiation_of (tree tctx);
229 
230 /* Make the current scope suitable for access checking when we are
231    processing T.  T can be FUNCTION_DECL for instantiated function
232    template, VAR_DECL for static member variable, or TYPE_DECL for
233    alias template (needed by instantiate_decl).  */
234 
235 static void
push_access_scope(tree t)236 push_access_scope (tree t)
237 {
238   gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
239 	      || TREE_CODE (t) == TYPE_DECL);
240 
241   if (DECL_FRIEND_CONTEXT (t))
242     push_nested_class (DECL_FRIEND_CONTEXT (t));
243   else if (DECL_CLASS_SCOPE_P (t))
244     push_nested_class (DECL_CONTEXT (t));
245   else
246     push_to_top_level ();
247 
248   if (TREE_CODE (t) == FUNCTION_DECL)
249     {
250       saved_access_scope = tree_cons
251 	(NULL_TREE, current_function_decl, saved_access_scope);
252       current_function_decl = t;
253     }
254 }
255 
256 /* Restore the scope set up by push_access_scope.  T is the node we
257    are processing.  */
258 
259 static void
pop_access_scope(tree t)260 pop_access_scope (tree t)
261 {
262   if (TREE_CODE (t) == FUNCTION_DECL)
263     {
264       current_function_decl = TREE_VALUE (saved_access_scope);
265       saved_access_scope = TREE_CHAIN (saved_access_scope);
266     }
267 
268   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
269     pop_nested_class ();
270   else
271     pop_from_top_level ();
272 }
273 
274 /* Do any processing required when DECL (a member template
275    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
276    to DECL, unless it is a specialization, in which case the DECL
277    itself is returned.  */
278 
279 tree
finish_member_template_decl(tree decl)280 finish_member_template_decl (tree decl)
281 {
282   if (decl == error_mark_node)
283     return error_mark_node;
284 
285   gcc_assert (DECL_P (decl));
286 
287   if (TREE_CODE (decl) == TYPE_DECL)
288     {
289       tree type;
290 
291       type = TREE_TYPE (decl);
292       if (type == error_mark_node)
293 	return error_mark_node;
294       if (MAYBE_CLASS_TYPE_P (type)
295 	  && CLASSTYPE_TEMPLATE_INFO (type)
296 	  && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
297 	{
298 	  tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
299 	  check_member_template (tmpl);
300 	  return tmpl;
301 	}
302       return NULL_TREE;
303     }
304   else if (TREE_CODE (decl) == FIELD_DECL)
305     error ("data member %qD cannot be a member template", decl);
306   else if (DECL_TEMPLATE_INFO (decl))
307     {
308       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
309 	{
310 	  check_member_template (DECL_TI_TEMPLATE (decl));
311 	  return DECL_TI_TEMPLATE (decl);
312 	}
313       else
314 	return decl;
315     }
316   else
317     error ("invalid member template declaration %qD", decl);
318 
319   return error_mark_node;
320 }
321 
322 /* Create a template info node.  */
323 
324 tree
build_template_info(tree template_decl,tree template_args)325 build_template_info (tree template_decl, tree template_args)
326 {
327   tree result = make_node (TEMPLATE_INFO);
328   TI_TEMPLATE (result) = template_decl;
329   TI_ARGS (result) = template_args;
330   return result;
331 }
332 
333 /* Return the template info node corresponding to T, whatever T is.  */
334 
335 tree
get_template_info(const_tree t)336 get_template_info (const_tree t)
337 {
338   tree tinfo = NULL_TREE;
339 
340   if (!t || t == error_mark_node)
341     return NULL;
342 
343   if (TREE_CODE (t) == NAMESPACE_DECL
344       || TREE_CODE (t) == PARM_DECL)
345     return NULL;
346 
347   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
348     tinfo = DECL_TEMPLATE_INFO (t);
349 
350   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
351     t = TREE_TYPE (t);
352 
353   if (OVERLOAD_TYPE_P (t))
354     tinfo = TYPE_TEMPLATE_INFO (t);
355   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
356     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
357 
358   return tinfo;
359 }
360 
361 /* Returns the template nesting level of the indicated class TYPE.
362 
363    For example, in:
364      template <class T>
365      struct A
366      {
367        template <class U>
368        struct B {};
369      };
370 
371    A<T>::B<U> has depth two, while A<T> has depth one.
372    Both A<T>::B<int> and A<int>::B<U> have depth one, if
373    they are instantiations, not specializations.
374 
375    This function is guaranteed to return 0 if passed NULL_TREE so
376    that, for example, `template_class_depth (current_class_type)' is
377    always safe.  */
378 
379 int
template_class_depth(tree type)380 template_class_depth (tree type)
381 {
382   int depth;
383 
384   for (depth = 0; type && TREE_CODE (type) != NAMESPACE_DECL; )
385     {
386       tree tinfo = get_template_info (type);
387 
388       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
389 	  && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
390 	++depth;
391 
392       if (DECL_P (type))
393 	type = CP_DECL_CONTEXT (type);
394       else if (LAMBDA_TYPE_P (type))
395 	type = LAMBDA_TYPE_EXTRA_SCOPE (type);
396       else
397 	type = CP_TYPE_CONTEXT (type);
398     }
399 
400   return depth;
401 }
402 
403 /* Return TRUE if NODE instantiates a template that has arguments of
404    its own, be it directly a primary template or indirectly through a
405    partial specializations.  */
406 static bool
instantiates_primary_template_p(tree node)407 instantiates_primary_template_p (tree node)
408 {
409   tree tinfo = get_template_info (node);
410   if (!tinfo)
411     return false;
412 
413   tree tmpl = TI_TEMPLATE (tinfo);
414   if (PRIMARY_TEMPLATE_P (tmpl))
415     return true;
416 
417   if (!DECL_TEMPLATE_SPECIALIZATION (tmpl))
418     return false;
419 
420   /* So now we know we have a specialization, but it could be a full
421      or a partial specialization.  To tell which, compare the depth of
422      its template arguments with those of its context.  */
423 
424   tree ctxt = DECL_CONTEXT (tmpl);
425   tree ctinfo = get_template_info (ctxt);
426   if (!ctinfo)
427     return true;
428 
429   return (TMPL_ARGS_DEPTH (TI_ARGS (tinfo))
430 	  > TMPL_ARGS_DEPTH (TI_ARGS (ctinfo)));
431 }
432 
433 /* Subroutine of maybe_begin_member_template_processing.
434    Returns true if processing DECL needs us to push template parms.  */
435 
436 static bool
inline_needs_template_parms(tree decl,bool nsdmi)437 inline_needs_template_parms (tree decl, bool nsdmi)
438 {
439   if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
440     return false;
441 
442   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
443 	  > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
444 }
445 
446 /* Subroutine of maybe_begin_member_template_processing.
447    Push the template parms in PARMS, starting from LEVELS steps into the
448    chain, and ending at the beginning, since template parms are listed
449    innermost first.  */
450 
451 static void
push_inline_template_parms_recursive(tree parmlist,int levels)452 push_inline_template_parms_recursive (tree parmlist, int levels)
453 {
454   tree parms = TREE_VALUE (parmlist);
455   int i;
456 
457   if (levels > 1)
458     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
459 
460   ++processing_template_decl;
461   current_template_parms
462     = tree_cons (size_int (processing_template_decl),
463 		 parms, current_template_parms);
464   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
465 
466   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
467 	       NULL);
468   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
469     {
470       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
471 
472       if (error_operand_p (parm))
473 	continue;
474 
475       gcc_assert (DECL_P (parm));
476 
477       switch (TREE_CODE (parm))
478 	{
479 	case TYPE_DECL:
480 	case TEMPLATE_DECL:
481 	  pushdecl (parm);
482 	  break;
483 
484 	case PARM_DECL:
485 	  /* Push the CONST_DECL.  */
486 	  pushdecl (TEMPLATE_PARM_DECL (DECL_INITIAL (parm)));
487 	  break;
488 
489 	default:
490 	  gcc_unreachable ();
491 	}
492     }
493 }
494 
495 /* Restore the template parameter context for a member template, a
496    friend template defined in a class definition, or a non-template
497    member of template class.  */
498 
499 void
maybe_begin_member_template_processing(tree decl)500 maybe_begin_member_template_processing (tree decl)
501 {
502   tree parms;
503   int levels = 0;
504   bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
505 
506   if (nsdmi)
507     {
508       tree ctx = DECL_CONTEXT (decl);
509       decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
510 	      /* Disregard full specializations (c++/60999).  */
511 	      && uses_template_parms (ctx)
512 	      ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
513     }
514 
515   if (inline_needs_template_parms (decl, nsdmi))
516     {
517       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
518       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
519 
520       if (DECL_TEMPLATE_SPECIALIZATION (decl))
521 	{
522 	  --levels;
523 	  parms = TREE_CHAIN (parms);
524 	}
525 
526       push_inline_template_parms_recursive (parms, levels);
527     }
528 
529   /* Remember how many levels of template parameters we pushed so that
530      we can pop them later.  */
531   inline_parm_levels.safe_push (levels);
532 }
533 
534 /* Undo the effects of maybe_begin_member_template_processing.  */
535 
536 void
maybe_end_member_template_processing(void)537 maybe_end_member_template_processing (void)
538 {
539   int i;
540   int last;
541 
542   if (inline_parm_levels.length () == 0)
543     return;
544 
545   last = inline_parm_levels.pop ();
546   for (i = 0; i < last; ++i)
547     {
548       --processing_template_decl;
549       current_template_parms = TREE_CHAIN (current_template_parms);
550       poplevel (0, 0, 0);
551     }
552 }
553 
554 /* Return a new template argument vector which contains all of ARGS,
555    but has as its innermost set of arguments the EXTRA_ARGS.  */
556 
557 static tree
add_to_template_args(tree args,tree extra_args)558 add_to_template_args (tree args, tree extra_args)
559 {
560   tree new_args;
561   int extra_depth;
562   int i;
563   int j;
564 
565   if (args == NULL_TREE || extra_args == error_mark_node)
566     return extra_args;
567 
568   extra_depth = TMPL_ARGS_DEPTH (extra_args);
569   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
570 
571   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
572     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
573 
574   for (j = 1; j <= extra_depth; ++j, ++i)
575     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
576 
577   return new_args;
578 }
579 
580 /* Like add_to_template_args, but only the outermost ARGS are added to
581    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
582    (EXTRA_ARGS) levels are added.  This function is used to combine
583    the template arguments from a partial instantiation with the
584    template arguments used to attain the full instantiation from the
585    partial instantiation.  */
586 
587 static tree
add_outermost_template_args(tree args,tree extra_args)588 add_outermost_template_args (tree args, tree extra_args)
589 {
590   tree new_args;
591 
592   /* If there are more levels of EXTRA_ARGS than there are ARGS,
593      something very fishy is going on.  */
594   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
595 
596   /* If *all* the new arguments will be the EXTRA_ARGS, just return
597      them.  */
598   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
599     return extra_args;
600 
601   /* For the moment, we make ARGS look like it contains fewer levels.  */
602   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
603 
604   new_args = add_to_template_args (args, extra_args);
605 
606   /* Now, we restore ARGS to its full dimensions.  */
607   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
608 
609   return new_args;
610 }
611 
612 /* Return the N levels of innermost template arguments from the ARGS.  */
613 
614 tree
get_innermost_template_args(tree args,int n)615 get_innermost_template_args (tree args, int n)
616 {
617   tree new_args;
618   int extra_levels;
619   int i;
620 
621   gcc_assert (n >= 0);
622 
623   /* If N is 1, just return the innermost set of template arguments.  */
624   if (n == 1)
625     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
626 
627   /* If we're not removing anything, just return the arguments we were
628      given.  */
629   extra_levels = TMPL_ARGS_DEPTH (args) - n;
630   gcc_assert (extra_levels >= 0);
631   if (extra_levels == 0)
632     return args;
633 
634   /* Make a new set of arguments, not containing the outer arguments.  */
635   new_args = make_tree_vec (n);
636   for (i = 1; i <= n; ++i)
637     SET_TMPL_ARGS_LEVEL (new_args, i,
638 			 TMPL_ARGS_LEVEL (args, i + extra_levels));
639 
640   return new_args;
641 }
642 
643 /* The inverse of get_innermost_template_args: Return all but the innermost
644    EXTRA_LEVELS levels of template arguments from the ARGS.  */
645 
646 static tree
strip_innermost_template_args(tree args,int extra_levels)647 strip_innermost_template_args (tree args, int extra_levels)
648 {
649   tree new_args;
650   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
651   int i;
652 
653   gcc_assert (n >= 0);
654 
655   /* If N is 1, just return the outermost set of template arguments.  */
656   if (n == 1)
657     return TMPL_ARGS_LEVEL (args, 1);
658 
659   /* If we're not removing anything, just return the arguments we were
660      given.  */
661   gcc_assert (extra_levels >= 0);
662   if (extra_levels == 0)
663     return args;
664 
665   /* Make a new set of arguments, not containing the inner arguments.  */
666   new_args = make_tree_vec (n);
667   for (i = 1; i <= n; ++i)
668     SET_TMPL_ARGS_LEVEL (new_args, i,
669 			 TMPL_ARGS_LEVEL (args, i));
670 
671   return new_args;
672 }
673 
674 /* We've got a template header coming up; push to a new level for storing
675    the parms.  */
676 
677 void
begin_template_parm_list(void)678 begin_template_parm_list (void)
679 {
680   /* We use a non-tag-transparent scope here, which causes pushtag to
681      put tags in this scope, rather than in the enclosing class or
682      namespace scope.  This is the right thing, since we want
683      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
684      global template class, push_template_decl handles putting the
685      TEMPLATE_DECL into top-level scope.  For a nested template class,
686      e.g.:
687 
688        template <class T> struct S1 {
689 	 template <class T> struct S2 {};
690        };
691 
692      pushtag contains special code to insert the TEMPLATE_DECL for S2
693      at the right scope.  */
694   begin_scope (sk_template_parms, NULL);
695   ++processing_template_decl;
696   ++processing_template_parmlist;
697   note_template_header (0);
698 
699   /* Add a dummy parameter level while we process the parameter list.  */
700   current_template_parms
701     = tree_cons (size_int (processing_template_decl),
702 		 make_tree_vec (0),
703 		 current_template_parms);
704 }
705 
706 /* This routine is called when a specialization is declared.  If it is
707    invalid to declare a specialization here, an error is reported and
708    false is returned, otherwise this routine will return true.  */
709 
710 static bool
check_specialization_scope(void)711 check_specialization_scope (void)
712 {
713   tree scope = current_scope ();
714 
715   /* [temp.expl.spec]
716 
717      An explicit specialization shall be declared in the namespace of
718      which the template is a member, or, for member templates, in the
719      namespace of which the enclosing class or enclosing class
720      template is a member.  An explicit specialization of a member
721      function, member class or static data member of a class template
722      shall be declared in the namespace of which the class template
723      is a member.  */
724   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
725     {
726       error ("explicit specialization in non-namespace scope %qD", scope);
727       return false;
728     }
729 
730   /* [temp.expl.spec]
731 
732      In an explicit specialization declaration for a member of a class
733      template or a member template that appears in namespace scope,
734      the member template and some of its enclosing class templates may
735      remain unspecialized, except that the declaration shall not
736      explicitly specialize a class member template if its enclosing
737      class templates are not explicitly specialized as well.  */
738   if (current_template_parms)
739     {
740       error ("enclosing class templates are not explicitly specialized");
741       return false;
742     }
743 
744   return true;
745 }
746 
747 /* We've just seen template <>.  */
748 
749 bool
begin_specialization(void)750 begin_specialization (void)
751 {
752   begin_scope (sk_template_spec, NULL);
753   note_template_header (1);
754   return check_specialization_scope ();
755 }
756 
757 /* Called at then end of processing a declaration preceded by
758    template<>.  */
759 
760 void
end_specialization(void)761 end_specialization (void)
762 {
763   finish_scope ();
764   reset_specialization ();
765 }
766 
767 /* Any template <>'s that we have seen thus far are not referring to a
768    function specialization.  */
769 
770 void
reset_specialization(void)771 reset_specialization (void)
772 {
773   processing_specialization = 0;
774   template_header_count = 0;
775 }
776 
777 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
778    it was of the form template <>.  */
779 
780 static void
note_template_header(int specialization)781 note_template_header (int specialization)
782 {
783   processing_specialization = specialization;
784   template_header_count++;
785 }
786 
787 /* We're beginning an explicit instantiation.  */
788 
789 void
begin_explicit_instantiation(void)790 begin_explicit_instantiation (void)
791 {
792   gcc_assert (!processing_explicit_instantiation);
793   processing_explicit_instantiation = true;
794 }
795 
796 
797 void
end_explicit_instantiation(void)798 end_explicit_instantiation (void)
799 {
800   gcc_assert (processing_explicit_instantiation);
801   processing_explicit_instantiation = false;
802 }
803 
804 /* An explicit specialization or partial specialization of TMPL is being
805    declared.  Check that the namespace in which the specialization is
806    occurring is permissible.  Returns false iff it is invalid to
807    specialize TMPL in the current namespace.  */
808 
809 static bool
check_specialization_namespace(tree tmpl)810 check_specialization_namespace (tree tmpl)
811 {
812   tree tpl_ns = decl_namespace_context (tmpl);
813 
814   /* [tmpl.expl.spec]
815 
816      An explicit specialization shall be declared in a namespace enclosing the
817      specialized template. An explicit specialization whose declarator-id is
818      not qualified shall be declared in the nearest enclosing namespace of the
819      template, or, if the namespace is inline (7.3.1), any namespace from its
820      enclosing namespace set.  */
821   if (current_scope() != DECL_CONTEXT (tmpl)
822       && !at_namespace_scope_p ())
823     {
824       error ("specialization of %qD must appear at namespace scope", tmpl);
825       return false;
826     }
827 
828   if (is_nested_namespace (current_namespace, tpl_ns, cxx_dialect < cxx11))
829     /* Same or enclosing namespace.  */
830     return true;
831   else
832     {
833       auto_diagnostic_group d;
834       if (permerror (input_location,
835 		     "specialization of %qD in different namespace", tmpl))
836 	inform (DECL_SOURCE_LOCATION (tmpl),
837 		"  from definition of %q#D", tmpl);
838       return false;
839     }
840 }
841 
842 /* SPEC is an explicit instantiation.  Check that it is valid to
843    perform this explicit instantiation in the current namespace.  */
844 
845 static void
check_explicit_instantiation_namespace(tree spec)846 check_explicit_instantiation_namespace (tree spec)
847 {
848   tree ns;
849 
850   /* DR 275: An explicit instantiation shall appear in an enclosing
851      namespace of its template.  */
852   ns = decl_namespace_context (spec);
853   if (!is_nested_namespace (current_namespace, ns))
854     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
855 	       "(which does not enclose namespace %qD)",
856 	       spec, current_namespace, ns);
857 }
858 
859 // Returns the type of a template specialization only if that
860 // specialization needs to be defined. Otherwise (e.g., if the type has
861 // already been defined), the function returns NULL_TREE.
862 static tree
maybe_new_partial_specialization(tree type)863 maybe_new_partial_specialization (tree type)
864 {
865   // An implicit instantiation of an incomplete type implies
866   // the definition of a new class template.
867   //
868   //    template<typename T>
869   //      struct S;
870   //
871   //    template<typename T>
872   //      struct S<T*>;
873   //
874   // Here, S<T*> is an implicit instantiation of S whose type
875   // is incomplete.
876   if (CLASSTYPE_IMPLICIT_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
877     return type;
878 
879   // It can also be the case that TYPE is a completed specialization.
880   // Continuing the previous example, suppose we also declare:
881   //
882   //    template<typename T>
883   //      requires Integral<T>
884   //        struct S<T*>;
885   //
886   // Here, S<T*> refers to the specialization S<T*> defined
887   // above. However, we need to differentiate definitions because
888   // we intend to define a new partial specialization. In this case,
889   // we rely on the fact that the constraints are different for
890   // this declaration than that above.
891   //
892   // Note that we also get here for injected class names and
893   // late-parsed template definitions. We must ensure that we
894   // do not create new type declarations for those cases.
895   if (flag_concepts && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
896     {
897       tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
898       tree args = CLASSTYPE_TI_ARGS (type);
899 
900       // If there are no template parameters, this cannot be a new
901       // partial template specializtion?
902       if (!current_template_parms)
903         return NULL_TREE;
904 
905       // The injected-class-name is not a new partial specialization.
906       if (DECL_SELF_REFERENCE_P (TYPE_NAME (type)))
907 	return NULL_TREE;
908 
909       // If the constraints are not the same as those of the primary
910       // then, we can probably create a new specialization.
911       tree type_constr = current_template_constraints ();
912 
913       if (type == TREE_TYPE (tmpl))
914 	{
915 	  tree main_constr = get_constraints (tmpl);
916 	  if (equivalent_constraints (type_constr, main_constr))
917 	    return NULL_TREE;
918 	}
919 
920       // Also, if there's a pre-existing specialization with matching
921       // constraints, then this also isn't new.
922       tree specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
923       while (specs)
924         {
925           tree spec_tmpl = TREE_VALUE (specs);
926           tree spec_args = TREE_PURPOSE (specs);
927           tree spec_constr = get_constraints (spec_tmpl);
928           if (comp_template_args (args, spec_args)
929 	      && equivalent_constraints (type_constr, spec_constr))
930             return NULL_TREE;
931           specs = TREE_CHAIN (specs);
932         }
933 
934       // Create a new type node (and corresponding type decl)
935       // for the newly declared specialization.
936       tree t = make_class_type (TREE_CODE (type));
937       CLASSTYPE_DECLARED_CLASS (t) = CLASSTYPE_DECLARED_CLASS (type);
938       SET_TYPE_TEMPLATE_INFO (t, build_template_info (tmpl, args));
939 
940       /* We only need a separate type node for storing the definition of this
941 	 partial specialization; uses of S<T*> are unconstrained, so all are
942 	 equivalent.  So keep TYPE_CANONICAL the same.  */
943       TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
944 
945       // Build the corresponding type decl.
946       tree d = create_implicit_typedef (DECL_NAME (tmpl), t);
947       DECL_CONTEXT (d) = TYPE_CONTEXT (t);
948       DECL_SOURCE_LOCATION (d) = input_location;
949 
950       return t;
951     }
952 
953   return NULL_TREE;
954 }
955 
956 /* The TYPE is being declared.  If it is a template type, that means it
957    is a partial specialization.  Do appropriate error-checking.  */
958 
959 tree
maybe_process_partial_specialization(tree type)960 maybe_process_partial_specialization (tree type)
961 {
962   tree context;
963 
964   if (type == error_mark_node)
965     return error_mark_node;
966 
967   /* A lambda that appears in specialization context is not itself a
968      specialization.  */
969   if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
970     return type;
971 
972   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
973     {
974       error ("name of class shadows template template parameter %qD",
975 	     TYPE_NAME (type));
976       return error_mark_node;
977     }
978 
979   context = TYPE_CONTEXT (type);
980 
981   if (TYPE_ALIAS_P (type))
982     {
983       tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (type);
984 
985       if (tinfo && DECL_ALIAS_TEMPLATE_P (TI_TEMPLATE (tinfo)))
986 	error ("specialization of alias template %qD",
987 	       TI_TEMPLATE (tinfo));
988       else
989 	error ("explicit specialization of non-template %qT", type);
990       return error_mark_node;
991     }
992   else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
993     {
994       /* This is for ordinary explicit specialization and partial
995 	 specialization of a template class such as:
996 
997 	   template <> class C<int>;
998 
999 	 or:
1000 
1001 	   template <class T> class C<T*>;
1002 
1003 	 Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
1004 
1005       if (tree t = maybe_new_partial_specialization (type))
1006 	{
1007 	  if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (t))
1008 	      && !at_namespace_scope_p ())
1009 	    return error_mark_node;
1010 	  SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (t);
1011 	  DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (t)) = input_location;
1012 	  if (processing_template_decl)
1013 	    {
1014 	      tree decl = push_template_decl (TYPE_MAIN_DECL (t));
1015 	      if (decl == error_mark_node)
1016 		return error_mark_node;
1017 	      return TREE_TYPE (decl);
1018 	    }
1019 	}
1020       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
1021 	error ("specialization of %qT after instantiation", type);
1022       else if (errorcount && !processing_specialization
1023 	        && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
1024 	       && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
1025 	/* Trying to define a specialization either without a template<> header
1026 	   or in an inappropriate place.  We've already given an error, so just
1027 	   bail now so we don't actually define the specialization.  */
1028 	return error_mark_node;
1029     }
1030   else if (CLASS_TYPE_P (type)
1031 	   && !CLASSTYPE_USE_TEMPLATE (type)
1032 	   && CLASSTYPE_TEMPLATE_INFO (type)
1033 	   && context && CLASS_TYPE_P (context)
1034 	   && CLASSTYPE_TEMPLATE_INFO (context))
1035     {
1036       /* This is for an explicit specialization of member class
1037 	 template according to [temp.expl.spec/18]:
1038 
1039 	   template <> template <class U> class C<int>::D;
1040 
1041 	 The context `C<int>' must be an implicit instantiation.
1042 	 Otherwise this is just a member class template declared
1043 	 earlier like:
1044 
1045 	   template <> class C<int> { template <class U> class D; };
1046 	   template <> template <class U> class C<int>::D;
1047 
1048 	 In the first case, `C<int>::D' is a specialization of `C<T>::D'
1049 	 while in the second case, `C<int>::D' is a primary template
1050 	 and `C<T>::D' may not exist.  */
1051 
1052       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
1053 	  && !COMPLETE_TYPE_P (type))
1054 	{
1055 	  tree t;
1056 	  tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
1057 
1058 	  if (current_namespace
1059 	      != decl_namespace_context (tmpl))
1060 	    {
1061 	      permerror (input_location,
1062 			 "specializing %q#T in different namespace", type);
1063 	      permerror (DECL_SOURCE_LOCATION (tmpl),
1064 			 "  from definition of %q#D", tmpl);
1065 	    }
1066 
1067 	  /* Check for invalid specialization after instantiation:
1068 
1069 	       template <> template <> class C<int>::D<int>;
1070 	       template <> template <class U> class C<int>::D;  */
1071 
1072 	  for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
1073 	       t; t = TREE_CHAIN (t))
1074 	    {
1075 	      tree inst = TREE_VALUE (t);
1076 	      if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
1077 		  || !COMPLETE_OR_OPEN_TYPE_P (inst))
1078 		{
1079 		  /* We already have a full specialization of this partial
1080 		     instantiation, or a full specialization has been
1081 		     looked up but not instantiated.  Reassign it to the
1082 		     new member specialization template.  */
1083 		  spec_entry elt;
1084 		  spec_entry *entry;
1085 
1086 		  elt.tmpl = most_general_template (tmpl);
1087 		  elt.args = CLASSTYPE_TI_ARGS (inst);
1088 		  elt.spec = inst;
1089 
1090 		  type_specializations->remove_elt (&elt);
1091 
1092 		  elt.tmpl = tmpl;
1093 		  CLASSTYPE_TI_ARGS (inst)
1094 		    = elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
1095 
1096 		  spec_entry **slot
1097 		    = type_specializations->find_slot (&elt, INSERT);
1098 		  entry = ggc_alloc<spec_entry> ();
1099 		  *entry = elt;
1100 		  *slot = entry;
1101 		}
1102 	      else
1103 		/* But if we've had an implicit instantiation, that's a
1104 		   problem ([temp.expl.spec]/6).  */
1105 		error ("specialization %qT after instantiation %qT",
1106 		       type, inst);
1107 	    }
1108 
1109 	  /* Mark TYPE as a specialization.  And as a result, we only
1110 	     have one level of template argument for the innermost
1111 	     class template.  */
1112 	  SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
1113 	  DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
1114 	  CLASSTYPE_TI_ARGS (type)
1115 	    = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
1116 	}
1117     }
1118   else if (processing_specialization)
1119     {
1120        /* Someday C++0x may allow for enum template specialization.  */
1121       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
1122 	  && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
1123 	pedwarn (input_location, OPT_Wpedantic, "template specialization "
1124 		 "of %qD not allowed by ISO C++", type);
1125       else
1126 	{
1127 	  error ("explicit specialization of non-template %qT", type);
1128 	  return error_mark_node;
1129 	}
1130     }
1131 
1132   return type;
1133 }
1134 
1135 /* Returns nonzero if we can optimize the retrieval of specializations
1136    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
1137    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
1138 
1139 static inline bool
optimize_specialization_lookup_p(tree tmpl)1140 optimize_specialization_lookup_p (tree tmpl)
1141 {
1142   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
1143 	  && DECL_CLASS_SCOPE_P (tmpl)
1144 	  /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
1145 	     parameter.  */
1146 	  && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1147 	  /* The optimized lookup depends on the fact that the
1148 	     template arguments for the member function template apply
1149 	     purely to the containing class, which is not true if the
1150 	     containing class is an explicit or partial
1151 	     specialization.  */
1152 	  && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1153 	  && !DECL_MEMBER_TEMPLATE_P (tmpl)
1154 	  && !DECL_CONV_FN_P (tmpl)
1155 	  /* It is possible to have a template that is not a member
1156 	     template and is not a member of a template class:
1157 
1158 	     template <typename T>
1159 	     struct S { friend A::f(); };
1160 
1161 	     Here, the friend function is a template, but the context does
1162 	     not have template information.  The optimized lookup relies
1163 	     on having ARGS be the template arguments for both the class
1164 	     and the function template.  */
1165 	  && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1166 }
1167 
1168 /* Make sure ARGS doesn't use any inappropriate typedefs; we should have
1169    gone through coerce_template_parms by now.  */
1170 
1171 static void
verify_unstripped_args_1(tree inner)1172 verify_unstripped_args_1 (tree inner)
1173 {
1174   for (int i = 0; i < TREE_VEC_LENGTH (inner); ++i)
1175     {
1176       tree arg = TREE_VEC_ELT (inner, i);
1177       if (TREE_CODE (arg) == TEMPLATE_DECL)
1178 	/* OK */;
1179       else if (TYPE_P (arg))
1180 	gcc_assert (strip_typedefs (arg, NULL) == arg);
1181       else if (ARGUMENT_PACK_P (arg))
1182 	verify_unstripped_args_1 (ARGUMENT_PACK_ARGS (arg));
1183       else if (strip_typedefs (TREE_TYPE (arg), NULL) != TREE_TYPE (arg))
1184 	/* Allow typedefs on the type of a non-type argument, since a
1185 	   parameter can have them.  */;
1186       else
1187 	gcc_assert (strip_typedefs_expr (arg, NULL) == arg);
1188     }
1189 }
1190 
1191 static void
verify_unstripped_args(tree args)1192 verify_unstripped_args (tree args)
1193 {
1194   ++processing_template_decl;
1195   if (!any_dependent_template_arguments_p (args))
1196     verify_unstripped_args_1 (INNERMOST_TEMPLATE_ARGS (args));
1197   --processing_template_decl;
1198 }
1199 
1200 /* Retrieve the specialization (in the sense of [temp.spec] - a
1201    specialization is either an instantiation or an explicit
1202    specialization) of TMPL for the given template ARGS.  If there is
1203    no such specialization, return NULL_TREE.  The ARGS are a vector of
1204    arguments, or a vector of vectors of arguments, in the case of
1205    templates with more than one level of parameters.
1206 
1207    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1208    then we search for a partial specialization matching ARGS.  This
1209    parameter is ignored if TMPL is not a class template.
1210 
1211    We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1212    result is a NONTYPE_ARGUMENT_PACK.  */
1213 
1214 static tree
retrieve_specialization(tree tmpl,tree args,hashval_t hash)1215 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1216 {
1217   if (tmpl == NULL_TREE)
1218     return NULL_TREE;
1219 
1220   if (args == error_mark_node)
1221     return NULL_TREE;
1222 
1223   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1224 	      || TREE_CODE (tmpl) == FIELD_DECL);
1225 
1226   /* There should be as many levels of arguments as there are
1227      levels of parameters.  */
1228   gcc_assert (TMPL_ARGS_DEPTH (args)
1229 	      == (TREE_CODE (tmpl) == TEMPLATE_DECL
1230 		  ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1231 		  : template_class_depth (DECL_CONTEXT (tmpl))));
1232 
1233   if (flag_checking)
1234     verify_unstripped_args (args);
1235 
1236   /* Lambda functions in templates aren't instantiated normally, but through
1237      tsubst_lambda_expr.  */
1238   if (lambda_fn_in_template_p (tmpl))
1239     return NULL_TREE;
1240 
1241   if (optimize_specialization_lookup_p (tmpl))
1242     {
1243       /* The template arguments actually apply to the containing
1244 	 class.  Find the class specialization with those
1245 	 arguments.  */
1246       tree class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1247       tree class_specialization
1248 	= retrieve_specialization (class_template, args, 0);
1249       if (!class_specialization)
1250 	return NULL_TREE;
1251 
1252       /* Find the instance of TMPL.  */
1253       tree fns = get_class_binding (class_specialization, DECL_NAME (tmpl));
1254       for (ovl_iterator iter (fns); iter; ++iter)
1255 	{
1256 	  tree fn = *iter;
1257 	  if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1258 	      /* using-declarations can add base methods to the method vec,
1259 		 and we don't want those here.  */
1260 	      && DECL_CONTEXT (fn) == class_specialization)
1261 	    return fn;
1262 	}
1263       return NULL_TREE;
1264     }
1265   else
1266     {
1267       spec_entry *found;
1268       spec_entry elt;
1269       hash_table<spec_hasher> *specializations;
1270 
1271       elt.tmpl = tmpl;
1272       elt.args = args;
1273       elt.spec = NULL_TREE;
1274 
1275       if (DECL_CLASS_TEMPLATE_P (tmpl))
1276 	specializations = type_specializations;
1277       else
1278 	specializations = decl_specializations;
1279 
1280       if (hash == 0)
1281 	hash = spec_hasher::hash (&elt);
1282       found = specializations->find_with_hash (&elt, hash);
1283       if (found)
1284 	return found->spec;
1285     }
1286 
1287   return NULL_TREE;
1288 }
1289 
1290 /* Like retrieve_specialization, but for local declarations.  */
1291 
1292 tree
retrieve_local_specialization(tree tmpl)1293 retrieve_local_specialization (tree tmpl)
1294 {
1295   if (local_specializations == NULL)
1296     return NULL_TREE;
1297 
1298   tree *slot = local_specializations->get (tmpl);
1299   return slot ? *slot : NULL_TREE;
1300 }
1301 
1302 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1303 
1304 int
is_specialization_of(tree decl,tree tmpl)1305 is_specialization_of (tree decl, tree tmpl)
1306 {
1307   tree t;
1308 
1309   if (TREE_CODE (decl) == FUNCTION_DECL)
1310     {
1311       for (t = decl;
1312 	   t != NULL_TREE;
1313 	   t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1314 	if (t == tmpl)
1315 	  return 1;
1316     }
1317   else
1318     {
1319       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1320 
1321       for (t = TREE_TYPE (decl);
1322 	   t != NULL_TREE;
1323 	   t = CLASSTYPE_USE_TEMPLATE (t)
1324 	     ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1325 	if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1326 	  return 1;
1327     }
1328 
1329   return 0;
1330 }
1331 
1332 /* Returns nonzero iff DECL is a specialization of friend declaration
1333    FRIEND_DECL according to [temp.friend].  */
1334 
1335 bool
is_specialization_of_friend(tree decl,tree friend_decl)1336 is_specialization_of_friend (tree decl, tree friend_decl)
1337 {
1338   bool need_template = true;
1339   int template_depth;
1340 
1341   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1342 	      || TREE_CODE (decl) == TYPE_DECL);
1343 
1344   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1345      of a template class, we want to check if DECL is a specialization
1346      if this.  */
1347   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1348       && DECL_TEMPLATE_INFO (friend_decl)
1349       && !DECL_USE_TEMPLATE (friend_decl))
1350     {
1351       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1352       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1353       need_template = false;
1354     }
1355   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1356 	   && !PRIMARY_TEMPLATE_P (friend_decl))
1357     need_template = false;
1358 
1359   /* There is nothing to do if this is not a template friend.  */
1360   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1361     return false;
1362 
1363   if (is_specialization_of (decl, friend_decl))
1364     return true;
1365 
1366   /* [temp.friend/6]
1367      A member of a class template may be declared to be a friend of a
1368      non-template class.  In this case, the corresponding member of
1369      every specialization of the class template is a friend of the
1370      class granting friendship.
1371 
1372      For example, given a template friend declaration
1373 
1374        template <class T> friend void A<T>::f();
1375 
1376      the member function below is considered a friend
1377 
1378        template <> struct A<int> {
1379 	 void f();
1380        };
1381 
1382      For this type of template friend, TEMPLATE_DEPTH below will be
1383      nonzero.  To determine if DECL is a friend of FRIEND, we first
1384      check if the enclosing class is a specialization of another.  */
1385 
1386   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1387   if (template_depth
1388       && DECL_CLASS_SCOPE_P (decl)
1389       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1390 			       CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1391     {
1392       /* Next, we check the members themselves.  In order to handle
1393 	 a few tricky cases, such as when FRIEND_DECL's are
1394 
1395 	   template <class T> friend void A<T>::g(T t);
1396 	   template <class T> template <T t> friend void A<T>::h();
1397 
1398 	 and DECL's are
1399 
1400 	   void A<int>::g(int);
1401 	   template <int> void A<int>::h();
1402 
1403 	 we need to figure out ARGS, the template arguments from
1404 	 the context of DECL.  This is required for template substitution
1405 	 of `T' in the function parameter of `g' and template parameter
1406 	 of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1407 
1408       tree context = DECL_CONTEXT (decl);
1409       tree args = NULL_TREE;
1410       int current_depth = 0;
1411 
1412       while (current_depth < template_depth)
1413 	{
1414 	  if (CLASSTYPE_TEMPLATE_INFO (context))
1415 	    {
1416 	      if (current_depth == 0)
1417 		args = TYPE_TI_ARGS (context);
1418 	      else
1419 		args = add_to_template_args (TYPE_TI_ARGS (context), args);
1420 	      current_depth++;
1421 	    }
1422 	  context = TYPE_CONTEXT (context);
1423 	}
1424 
1425       if (TREE_CODE (decl) == FUNCTION_DECL)
1426 	{
1427 	  bool is_template;
1428 	  tree friend_type;
1429 	  tree decl_type;
1430 	  tree friend_args_type;
1431 	  tree decl_args_type;
1432 
1433 	  /* Make sure that both DECL and FRIEND_DECL are templates or
1434 	     non-templates.  */
1435 	  is_template = DECL_TEMPLATE_INFO (decl)
1436 			&& PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1437 	  if (need_template ^ is_template)
1438 	    return false;
1439 	  else if (is_template)
1440 	    {
1441 	      /* If both are templates, check template parameter list.  */
1442 	      tree friend_parms
1443 		= tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1444 					 args, tf_none);
1445 	      if (!comp_template_parms
1446 		     (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1447 		      friend_parms))
1448 		return false;
1449 
1450 	      decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1451 	    }
1452 	  else
1453 	    decl_type = TREE_TYPE (decl);
1454 
1455 	  friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1456 					      tf_none, NULL_TREE);
1457 	  if (friend_type == error_mark_node)
1458 	    return false;
1459 
1460 	  /* Check if return types match.  */
1461 	  if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1462 	    return false;
1463 
1464 	  /* Check if function parameter types match, ignoring the
1465 	     `this' parameter.  */
1466 	  friend_args_type = TYPE_ARG_TYPES (friend_type);
1467 	  decl_args_type = TYPE_ARG_TYPES (decl_type);
1468 	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1469 	    friend_args_type = TREE_CHAIN (friend_args_type);
1470 	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1471 	    decl_args_type = TREE_CHAIN (decl_args_type);
1472 
1473 	  return compparms (decl_args_type, friend_args_type);
1474 	}
1475       else
1476 	{
1477 	  /* DECL is a TYPE_DECL */
1478 	  bool is_template;
1479 	  tree decl_type = TREE_TYPE (decl);
1480 
1481 	  /* Make sure that both DECL and FRIEND_DECL are templates or
1482 	     non-templates.  */
1483 	  is_template
1484 	    = CLASSTYPE_TEMPLATE_INFO (decl_type)
1485 	      && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1486 
1487 	  if (need_template ^ is_template)
1488 	    return false;
1489 	  else if (is_template)
1490 	    {
1491 	      tree friend_parms;
1492 	      /* If both are templates, check the name of the two
1493 		 TEMPLATE_DECL's first because is_friend didn't.  */
1494 	      if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1495 		  != DECL_NAME (friend_decl))
1496 		return false;
1497 
1498 	      /* Now check template parameter list.  */
1499 	      friend_parms
1500 		= tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1501 					 args, tf_none);
1502 	      return comp_template_parms
1503 		(DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1504 		 friend_parms);
1505 	    }
1506 	  else
1507 	    return (DECL_NAME (decl)
1508 		    == DECL_NAME (friend_decl));
1509 	}
1510     }
1511   return false;
1512 }
1513 
1514 /* Register the specialization SPEC as a specialization of TMPL with
1515    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1516    is actually just a friend declaration.  ATTRLIST is the list of
1517    attributes that the specialization is declared with or NULL when
1518    it isn't.  Returns SPEC, or an equivalent prior declaration, if
1519    available.
1520 
1521    We also store instantiations of field packs in the hash table, even
1522    though they are not themselves templates, to make lookup easier.  */
1523 
1524 static tree
register_specialization(tree spec,tree tmpl,tree args,bool is_friend,hashval_t hash)1525 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1526 			 hashval_t hash)
1527 {
1528   tree fn;
1529   spec_entry **slot = NULL;
1530   spec_entry elt;
1531 
1532   gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1533 	      || (TREE_CODE (tmpl) == FIELD_DECL
1534 		  && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1535 
1536   if (TREE_CODE (spec) == FUNCTION_DECL
1537       && uses_template_parms (DECL_TI_ARGS (spec)))
1538     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1539        register it; we want the corresponding TEMPLATE_DECL instead.
1540        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1541        the more obvious `uses_template_parms (spec)' to avoid problems
1542        with default function arguments.  In particular, given
1543        something like this:
1544 
1545 	  template <class T> void f(T t1, T t = T())
1546 
1547        the default argument expression is not substituted for in an
1548        instantiation unless and until it is actually needed.  */
1549     return spec;
1550 
1551   if (optimize_specialization_lookup_p (tmpl))
1552     /* We don't put these specializations in the hash table, but we might
1553        want to give an error about a mismatch.  */
1554     fn = retrieve_specialization (tmpl, args, 0);
1555   else
1556     {
1557       elt.tmpl = tmpl;
1558       elt.args = args;
1559       elt.spec = spec;
1560 
1561       if (hash == 0)
1562 	hash = spec_hasher::hash (&elt);
1563 
1564       slot =
1565 	decl_specializations->find_slot_with_hash (&elt, hash, INSERT);
1566       if (*slot)
1567 	fn = ((spec_entry *) *slot)->spec;
1568       else
1569 	fn = NULL_TREE;
1570     }
1571 
1572   /* We can sometimes try to re-register a specialization that we've
1573      already got.  In particular, regenerate_decl_from_template calls
1574      duplicate_decls which will update the specialization list.  But,
1575      we'll still get called again here anyhow.  It's more convenient
1576      to simply allow this than to try to prevent it.  */
1577   if (fn == spec)
1578     return spec;
1579   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1580     {
1581       if (DECL_TEMPLATE_INSTANTIATION (fn))
1582 	{
1583 	  if (DECL_ODR_USED (fn)
1584 	      || DECL_EXPLICIT_INSTANTIATION (fn))
1585 	    {
1586 	      error ("specialization of %qD after instantiation",
1587 		     fn);
1588 	      return error_mark_node;
1589 	    }
1590 	  else
1591 	    {
1592 	      tree clone;
1593 	      /* This situation should occur only if the first
1594 		 specialization is an implicit instantiation, the
1595 		 second is an explicit specialization, and the
1596 		 implicit instantiation has not yet been used.  That
1597 		 situation can occur if we have implicitly
1598 		 instantiated a member function and then specialized
1599 		 it later.
1600 
1601 		 We can also wind up here if a friend declaration that
1602 		 looked like an instantiation turns out to be a
1603 		 specialization:
1604 
1605 		   template <class T> void foo(T);
1606 		   class S { friend void foo<>(int) };
1607 		   template <> void foo(int);
1608 
1609 		 We transform the existing DECL in place so that any
1610 		 pointers to it become pointers to the updated
1611 		 declaration.
1612 
1613 		 If there was a definition for the template, but not
1614 		 for the specialization, we want this to look as if
1615 		 there were no definition, and vice versa.  */
1616 	      DECL_INITIAL (fn) = NULL_TREE;
1617 	      duplicate_decls (spec, fn, is_friend);
1618 	      /* The call to duplicate_decls will have applied
1619 		 [temp.expl.spec]:
1620 
1621 		   An explicit specialization of a function template
1622 		   is inline only if it is explicitly declared to be,
1623 		   and independently of whether its function template
1624 		   is.
1625 
1626 		to the primary function; now copy the inline bits to
1627 		the various clones.  */
1628 	      FOR_EACH_CLONE (clone, fn)
1629 		{
1630 		  DECL_DECLARED_INLINE_P (clone)
1631 		    = DECL_DECLARED_INLINE_P (fn);
1632 		  DECL_SOURCE_LOCATION (clone)
1633 		    = DECL_SOURCE_LOCATION (fn);
1634 		  DECL_DELETED_FN (clone)
1635 		    = DECL_DELETED_FN (fn);
1636 		}
1637 	      check_specialization_namespace (tmpl);
1638 
1639 	      return fn;
1640 	    }
1641 	}
1642       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1643 	{
1644 	  tree dd = duplicate_decls (spec, fn, is_friend);
1645 	  if (dd == error_mark_node)
1646 	    /* We've already complained in duplicate_decls.  */
1647 	    return error_mark_node;
1648 
1649 	  if (dd == NULL_TREE && DECL_INITIAL (spec))
1650 	    /* Dup decl failed, but this is a new definition. Set the
1651 	       line number so any errors match this new
1652 	       definition.  */
1653 	    DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1654 
1655 	  return fn;
1656 	}
1657     }
1658   else if (fn)
1659     return duplicate_decls (spec, fn, is_friend);
1660 
1661   /* A specialization must be declared in the same namespace as the
1662      template it is specializing.  */
1663   if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1664       && !check_specialization_namespace (tmpl))
1665     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1666 
1667   if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1668     {
1669       spec_entry *entry = ggc_alloc<spec_entry> ();
1670       gcc_assert (tmpl && args && spec);
1671       *entry = elt;
1672       *slot = entry;
1673       if ((TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1674 	   && PRIMARY_TEMPLATE_P (tmpl)
1675 	   && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1676 	  || variable_template_p (tmpl))
1677 	/* If TMPL is a forward declaration of a template function, keep a list
1678 	   of all specializations in case we need to reassign them to a friend
1679 	   template later in tsubst_friend_function.
1680 
1681 	   Also keep a list of all variable template instantiations so that
1682 	   process_partial_specialization can check whether a later partial
1683 	   specialization would have used it.  */
1684 	DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1685 	  = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1686     }
1687 
1688   return spec;
1689 }
1690 
1691 /* Returns true iff two spec_entry nodes are equivalent.  */
1692 
1693 int comparing_specializations;
1694 
1695 bool
equal(spec_entry * e1,spec_entry * e2)1696 spec_hasher::equal (spec_entry *e1, spec_entry *e2)
1697 {
1698   int equal;
1699 
1700   ++comparing_specializations;
1701   equal = (e1->tmpl == e2->tmpl
1702 	   && comp_template_args (e1->args, e2->args));
1703   if (equal && flag_concepts
1704       /* tmpl could be a FIELD_DECL for a capture pack.  */
1705       && TREE_CODE (e1->tmpl) == TEMPLATE_DECL
1706       && VAR_P (DECL_TEMPLATE_RESULT (e1->tmpl))
1707       && uses_template_parms (e1->args))
1708     {
1709       /* Partial specializations of a variable template can be distinguished by
1710 	 constraints.  */
1711       tree c1 = e1->spec ? get_constraints (e1->spec) : NULL_TREE;
1712       tree c2 = e2->spec ? get_constraints (e2->spec) : NULL_TREE;
1713       equal = equivalent_constraints (c1, c2);
1714     }
1715   --comparing_specializations;
1716 
1717   return equal;
1718 }
1719 
1720 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1721 
1722 static hashval_t
hash_tmpl_and_args(tree tmpl,tree args)1723 hash_tmpl_and_args (tree tmpl, tree args)
1724 {
1725   hashval_t val = iterative_hash_object (DECL_UID (tmpl), 0);
1726   return iterative_hash_template_arg (args, val);
1727 }
1728 
1729 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1730    ignoring SPEC.  */
1731 
1732 hashval_t
hash(spec_entry * e)1733 spec_hasher::hash (spec_entry *e)
1734 {
1735   return hash_tmpl_and_args (e->tmpl, e->args);
1736 }
1737 
1738 /* Recursively calculate a hash value for a template argument ARG, for use
1739    in the hash tables of template specializations.  */
1740 
1741 hashval_t
iterative_hash_template_arg(tree arg,hashval_t val)1742 iterative_hash_template_arg (tree arg, hashval_t val)
1743 {
1744   unsigned HOST_WIDE_INT i;
1745   enum tree_code code;
1746   char tclass;
1747 
1748   if (arg == NULL_TREE)
1749     return iterative_hash_object (arg, val);
1750 
1751   if (!TYPE_P (arg))
1752     STRIP_NOPS (arg);
1753 
1754   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1755     gcc_unreachable ();
1756 
1757   code = TREE_CODE (arg);
1758   tclass = TREE_CODE_CLASS (code);
1759 
1760   val = iterative_hash_object (code, val);
1761 
1762   switch (code)
1763     {
1764     case ERROR_MARK:
1765       return val;
1766 
1767     case IDENTIFIER_NODE:
1768       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1769 
1770     case TREE_VEC:
1771       {
1772 	int i, len = TREE_VEC_LENGTH (arg);
1773 	for (i = 0; i < len; ++i)
1774 	  val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1775 	return val;
1776       }
1777 
1778     case TYPE_PACK_EXPANSION:
1779     case EXPR_PACK_EXPANSION:
1780       val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1781       return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1782 
1783     case TYPE_ARGUMENT_PACK:
1784     case NONTYPE_ARGUMENT_PACK:
1785       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1786 
1787     case TREE_LIST:
1788       for (; arg; arg = TREE_CHAIN (arg))
1789 	val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1790       return val;
1791 
1792     case OVERLOAD:
1793       for (lkp_iterator iter (arg); iter; ++iter)
1794 	val = iterative_hash_template_arg (*iter, val);
1795       return val;
1796 
1797     case CONSTRUCTOR:
1798       {
1799 	tree field, value;
1800 	iterative_hash_template_arg (TREE_TYPE (arg), val);
1801 	FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1802 	  {
1803 	    val = iterative_hash_template_arg (field, val);
1804 	    val = iterative_hash_template_arg (value, val);
1805 	  }
1806 	return val;
1807       }
1808 
1809     case PARM_DECL:
1810       if (!DECL_ARTIFICIAL (arg))
1811 	{
1812 	  val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1813 	  val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1814 	}
1815       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1816 
1817     case TARGET_EXPR:
1818       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1819 
1820     case PTRMEM_CST:
1821       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1822       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1823 
1824     case TEMPLATE_PARM_INDEX:
1825       val = iterative_hash_template_arg
1826 	(TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1827       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1828       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1829 
1830     case TRAIT_EXPR:
1831       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1832       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1833       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1834 
1835     case BASELINK:
1836       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1837 					 val);
1838       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1839 					  val);
1840 
1841     case MODOP_EXPR:
1842       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1843       code = TREE_CODE (TREE_OPERAND (arg, 1));
1844       val = iterative_hash_object (code, val);
1845       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1846 
1847     case LAMBDA_EXPR:
1848       /* [temp.over.link] Two lambda-expressions are never considered
1849 	 equivalent.
1850 
1851          So just hash the closure type.  */
1852       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1853 
1854     case CAST_EXPR:
1855     case IMPLICIT_CONV_EXPR:
1856     case STATIC_CAST_EXPR:
1857     case REINTERPRET_CAST_EXPR:
1858     case CONST_CAST_EXPR:
1859     case DYNAMIC_CAST_EXPR:
1860     case NEW_EXPR:
1861       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1862       /* Now hash operands as usual.  */
1863       break;
1864 
1865     case CALL_EXPR:
1866       {
1867 	tree fn = CALL_EXPR_FN (arg);
1868 	if (tree name = dependent_name (fn))
1869 	  {
1870 	    if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1871 	      val = iterative_hash_template_arg (TREE_OPERAND (fn, 1), val);
1872 	    fn = name;
1873 	  }
1874 	val = iterative_hash_template_arg (fn, val);
1875 	call_expr_arg_iterator ai;
1876 	for (tree x = first_call_expr_arg (arg, &ai); x;
1877 	     x = next_call_expr_arg (&ai))
1878 	  val = iterative_hash_template_arg (x, val);
1879 	return val;
1880       }
1881 
1882     default:
1883       break;
1884     }
1885 
1886   switch (tclass)
1887     {
1888     case tcc_type:
1889       if (alias_template_specialization_p (arg))
1890 	{
1891 	  // We want an alias specialization that survived strip_typedefs
1892 	  // to hash differently from its TYPE_CANONICAL, to avoid hash
1893 	  // collisions that compare as different in template_args_equal.
1894 	  // These could be dependent specializations that strip_typedefs
1895 	  // left alone, or untouched specializations because
1896 	  // coerce_template_parms returns the unconverted template
1897 	  // arguments if it sees incomplete argument packs.
1898 	  tree ti = TYPE_ALIAS_TEMPLATE_INFO (arg);
1899 	  return hash_tmpl_and_args (TI_TEMPLATE (ti), TI_ARGS (ti));
1900 	}
1901       if (TYPE_CANONICAL (arg))
1902 	return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1903 				      val);
1904       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1905 	return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1906       /* Otherwise just compare the types during lookup.  */
1907       return val;
1908 
1909     case tcc_declaration:
1910     case tcc_constant:
1911       return iterative_hash_expr (arg, val);
1912 
1913     default:
1914       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1915       {
1916 	unsigned n = cp_tree_operand_length (arg);
1917 	for (i = 0; i < n; ++i)
1918 	  val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1919 	return val;
1920       }
1921     }
1922   gcc_unreachable ();
1923   return 0;
1924 }
1925 
1926 /* Unregister the specialization SPEC as a specialization of TMPL.
1927    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1928    if the SPEC was listed as a specialization of TMPL.
1929 
1930    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1931 
1932 bool
reregister_specialization(tree spec,tree tinfo,tree new_spec)1933 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1934 {
1935   spec_entry *entry;
1936   spec_entry elt;
1937 
1938   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1939   elt.args = TI_ARGS (tinfo);
1940   elt.spec = NULL_TREE;
1941 
1942   entry = decl_specializations->find (&elt);
1943   if (entry != NULL)
1944     {
1945       gcc_assert (entry->spec == spec || entry->spec == new_spec);
1946       gcc_assert (new_spec != NULL_TREE);
1947       entry->spec = new_spec;
1948       return 1;
1949     }
1950 
1951   return 0;
1952 }
1953 
1954 /* Like register_specialization, but for local declarations.  We are
1955    registering SPEC, an instantiation of TMPL.  */
1956 
1957 void
register_local_specialization(tree spec,tree tmpl)1958 register_local_specialization (tree spec, tree tmpl)
1959 {
1960   gcc_assert (tmpl != spec);
1961   local_specializations->put (tmpl, spec);
1962 }
1963 
1964 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1965    specialized class.  */
1966 
1967 bool
explicit_class_specialization_p(tree type)1968 explicit_class_specialization_p (tree type)
1969 {
1970   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1971     return false;
1972   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1973 }
1974 
1975 /* Print the list of functions at FNS, going through all the overloads
1976    for each element of the list.  Alternatively, FNS cannot be a
1977    TREE_LIST, in which case it will be printed together with all the
1978    overloads.
1979 
1980    MORE and *STR should respectively be FALSE and NULL when the function
1981    is called from the outside.  They are used internally on recursive
1982    calls.  print_candidates manages the two parameters and leaves NULL
1983    in *STR when it ends.  */
1984 
1985 static void
1986 print_candidates_1 (tree fns, char **str, bool more = false)
1987 {
1988   if (TREE_CODE (fns) == TREE_LIST)
1989     for (; fns; fns = TREE_CHAIN (fns))
1990       print_candidates_1 (TREE_VALUE (fns), str, more || TREE_CHAIN (fns));
1991   else
1992     for (lkp_iterator iter (fns); iter;)
1993       {
1994 	tree cand = *iter;
1995 	++iter;
1996 
1997 	const char *pfx = *str;
1998 	if (!pfx)
1999 	  {
2000 	    if (more || iter)
2001 	      pfx = _("candidates are:");
2002 	    else
2003 	      pfx = _("candidate is:");
2004 	    *str = get_spaces (pfx);
2005 	  }
2006 	inform (DECL_SOURCE_LOCATION (cand), "%s %#qD", pfx, cand);
2007       }
2008 }
2009 
2010 /* Print the list of candidate FNS in an error message.  FNS can also
2011    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
2012 
2013 void
print_candidates(tree fns)2014 print_candidates (tree fns)
2015 {
2016   char *str = NULL;
2017   print_candidates_1 (fns, &str);
2018   free (str);
2019 }
2020 
2021 /* Get a (possibly) constrained template declaration for the
2022    purpose of ordering candidates.  */
2023 static tree
get_template_for_ordering(tree list)2024 get_template_for_ordering (tree list)
2025 {
2026   gcc_assert (TREE_CODE (list) == TREE_LIST);
2027   tree f = TREE_VALUE (list);
2028   if (tree ti = DECL_TEMPLATE_INFO (f))
2029     return TI_TEMPLATE (ti);
2030   return f;
2031 }
2032 
2033 /* Among candidates having the same signature, return the
2034    most constrained or NULL_TREE if there is no best candidate.
2035    If the signatures of candidates vary (e.g., template
2036    specialization vs. member function), then there can be no
2037    most constrained.
2038 
2039    Note that we don't compare constraints on the functions
2040    themselves, but rather those of their templates. */
2041 static tree
most_constrained_function(tree candidates)2042 most_constrained_function (tree candidates)
2043 {
2044   // Try to find the best candidate in a first pass.
2045   tree champ = candidates;
2046   for (tree c = TREE_CHAIN (champ); c; c = TREE_CHAIN (c))
2047     {
2048       int winner = more_constrained (get_template_for_ordering (champ),
2049                                      get_template_for_ordering (c));
2050       if (winner == -1)
2051         champ = c; // The candidate is more constrained
2052       else if (winner == 0)
2053         return NULL_TREE; // Neither is more constrained
2054     }
2055 
2056   // Verify that the champ is better than previous candidates.
2057   for (tree c = candidates; c != champ; c = TREE_CHAIN (c)) {
2058     if (!more_constrained (get_template_for_ordering (champ),
2059                            get_template_for_ordering (c)))
2060       return NULL_TREE;
2061   }
2062 
2063   return champ;
2064 }
2065 
2066 
2067 /* Returns the template (one of the functions given by TEMPLATE_ID)
2068    which can be specialized to match the indicated DECL with the
2069    explicit template args given in TEMPLATE_ID.  The DECL may be
2070    NULL_TREE if none is available.  In that case, the functions in
2071    TEMPLATE_ID are non-members.
2072 
2073    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
2074    specialization of a member template.
2075 
2076    The TEMPLATE_COUNT is the number of references to qualifying
2077    template classes that appeared in the name of the function. See
2078    check_explicit_specialization for a more accurate description.
2079 
2080    TSK indicates what kind of template declaration (if any) is being
2081    declared.  TSK_TEMPLATE indicates that the declaration given by
2082    DECL, though a FUNCTION_DECL, has template parameters, and is
2083    therefore a template function.
2084 
2085    The template args (those explicitly specified and those deduced)
2086    are output in a newly created vector *TARGS_OUT.
2087 
2088    If it is impossible to determine the result, an error message is
2089    issued.  The error_mark_node is returned to indicate failure.  */
2090 
2091 static tree
determine_specialization(tree template_id,tree decl,tree * targs_out,int need_member_template,int template_count,tmpl_spec_kind tsk)2092 determine_specialization (tree template_id,
2093 			  tree decl,
2094 			  tree* targs_out,
2095 			  int need_member_template,
2096 			  int template_count,
2097 			  tmpl_spec_kind tsk)
2098 {
2099   tree fns;
2100   tree targs;
2101   tree explicit_targs;
2102   tree candidates = NULL_TREE;
2103 
2104   /* A TREE_LIST of templates of which DECL may be a specialization.
2105      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
2106      corresponding TREE_PURPOSE is the set of template arguments that,
2107      when used to instantiate the template, would produce a function
2108      with the signature of DECL.  */
2109   tree templates = NULL_TREE;
2110   int header_count;
2111   cp_binding_level *b;
2112 
2113   *targs_out = NULL_TREE;
2114 
2115   if (template_id == error_mark_node || decl == error_mark_node)
2116     return error_mark_node;
2117 
2118   /* We shouldn't be specializing a member template of an
2119      unspecialized class template; we already gave an error in
2120      check_specialization_scope, now avoid crashing.  */
2121   if (!VAR_P (decl)
2122       && template_count && DECL_CLASS_SCOPE_P (decl)
2123       && template_class_depth (DECL_CONTEXT (decl)) > 0)
2124     {
2125       gcc_assert (errorcount);
2126       return error_mark_node;
2127     }
2128 
2129   fns = TREE_OPERAND (template_id, 0);
2130   explicit_targs = TREE_OPERAND (template_id, 1);
2131 
2132   if (fns == error_mark_node)
2133     return error_mark_node;
2134 
2135   /* Check for baselinks.  */
2136   if (BASELINK_P (fns))
2137     fns = BASELINK_FUNCTIONS (fns);
2138 
2139   if (TREE_CODE (decl) == FUNCTION_DECL && !is_overloaded_fn (fns))
2140     {
2141       error ("%qD is not a function template", fns);
2142       return error_mark_node;
2143     }
2144   else if (VAR_P (decl) && !variable_template_p (fns))
2145     {
2146       error ("%qD is not a variable template", fns);
2147       return error_mark_node;
2148     }
2149 
2150   /* Count the number of template headers specified for this
2151      specialization.  */
2152   header_count = 0;
2153   for (b = current_binding_level;
2154        b->kind == sk_template_parms;
2155        b = b->level_chain)
2156     ++header_count;
2157 
2158   tree orig_fns = fns;
2159 
2160   if (variable_template_p (fns))
2161     {
2162       tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (fns));
2163       targs = coerce_template_parms (parms, explicit_targs, fns,
2164 				     tf_warning_or_error,
2165 				     /*req_all*/true, /*use_defarg*/true);
2166       if (targs != error_mark_node)
2167         templates = tree_cons (targs, fns, templates);
2168     }
2169   else for (lkp_iterator iter (fns); iter; ++iter)
2170     {
2171       tree fn = *iter;
2172 
2173       if (TREE_CODE (fn) == TEMPLATE_DECL)
2174 	{
2175 	  tree decl_arg_types;
2176 	  tree fn_arg_types;
2177 	  tree insttype;
2178 
2179 	  /* In case of explicit specialization, we need to check if
2180 	     the number of template headers appearing in the specialization
2181 	     is correct. This is usually done in check_explicit_specialization,
2182 	     but the check done there cannot be exhaustive when specializing
2183 	     member functions. Consider the following code:
2184 
2185 	     template <> void A<int>::f(int);
2186 	     template <> template <> void A<int>::f(int);
2187 
2188 	     Assuming that A<int> is not itself an explicit specialization
2189 	     already, the first line specializes "f" which is a non-template
2190 	     member function, whilst the second line specializes "f" which
2191 	     is a template member function. So both lines are syntactically
2192 	     correct, and check_explicit_specialization does not reject
2193 	     them.
2194 
2195 	     Here, we can do better, as we are matching the specialization
2196 	     against the declarations. We count the number of template
2197 	     headers, and we check if they match TEMPLATE_COUNT + 1
2198 	     (TEMPLATE_COUNT is the number of qualifying template classes,
2199 	     plus there must be another header for the member template
2200 	     itself).
2201 
2202 	     Notice that if header_count is zero, this is not a
2203 	     specialization but rather a template instantiation, so there
2204 	     is no check we can perform here.  */
2205 	  if (header_count && header_count != template_count + 1)
2206 	    continue;
2207 
2208 	  /* Check that the number of template arguments at the
2209 	     innermost level for DECL is the same as for FN.  */
2210 	  if (current_binding_level->kind == sk_template_parms
2211 	      && !current_binding_level->explicit_spec_p
2212 	      && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
2213 		  != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
2214 				      (current_template_parms))))
2215 	    continue;
2216 
2217 	  /* DECL might be a specialization of FN.  */
2218 	  decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2219 	  fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
2220 
2221 	  /* For a non-static member function, we need to make sure
2222 	     that the const qualification is the same.  Since
2223 	     get_bindings does not try to merge the "this" parameter,
2224 	     we must do the comparison explicitly.  */
2225 	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
2226 	    {
2227 	      if (!same_type_p (TREE_VALUE (fn_arg_types),
2228 				TREE_VALUE (decl_arg_types)))
2229 		continue;
2230 
2231 	      /* And the ref-qualification.  */
2232 	      if (type_memfn_rqual (TREE_TYPE (decl))
2233 		  != type_memfn_rqual (TREE_TYPE (fn)))
2234 		continue;
2235 	    }
2236 
2237 	  /* Skip the "this" parameter and, for constructors of
2238 	     classes with virtual bases, the VTT parameter.  A
2239 	     full specialization of a constructor will have a VTT
2240 	     parameter, but a template never will.  */
2241 	  decl_arg_types
2242 	    = skip_artificial_parms_for (decl, decl_arg_types);
2243 	  fn_arg_types
2244 	    = skip_artificial_parms_for (fn, fn_arg_types);
2245 
2246 	  /* Function templates cannot be specializations; there are
2247 	     no partial specializations of functions.  Therefore, if
2248 	     the type of DECL does not match FN, there is no
2249 	     match.
2250 
2251              Note that it should never be the case that we have both
2252              candidates added here, and for regular member functions
2253              below. */
2254 	  if (tsk == tsk_template)
2255 	    {
2256 	      if (compparms (fn_arg_types, decl_arg_types))
2257 		candidates = tree_cons (NULL_TREE, fn, candidates);
2258 	      continue;
2259 	    }
2260 
2261 	  /* See whether this function might be a specialization of this
2262 	     template.  Suppress access control because we might be trying
2263 	     to make this specialization a friend, and we have already done
2264 	     access control for the declaration of the specialization.  */
2265 	  push_deferring_access_checks (dk_no_check);
2266 	  targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
2267 	  pop_deferring_access_checks ();
2268 
2269 	  if (!targs)
2270 	    /* We cannot deduce template arguments that when used to
2271 	       specialize TMPL will produce DECL.  */
2272 	    continue;
2273 
2274 	  if (uses_template_parms (targs))
2275 	    /* We deduced something involving 'auto', which isn't a valid
2276 	       template argument.  */
2277 	    continue;
2278 
2279           /* Remove, from the set of candidates, all those functions
2280              whose constraints are not satisfied. */
2281           if (flag_concepts && !constraints_satisfied_p (fn, targs))
2282             continue;
2283 
2284           // Then, try to form the new function type.
2285 	  insttype = tsubst (TREE_TYPE (fn), targs, tf_fndecl_type, NULL_TREE);
2286 	  if (insttype == error_mark_node)
2287 	    continue;
2288 	  fn_arg_types
2289 	    = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
2290 	  if (!compparms (fn_arg_types, decl_arg_types))
2291 	    continue;
2292 
2293 	  /* Save this template, and the arguments deduced.  */
2294 	  templates = tree_cons (targs, fn, templates);
2295 	}
2296       else if (need_member_template)
2297 	/* FN is an ordinary member function, and we need a
2298 	   specialization of a member template.  */
2299 	;
2300       else if (TREE_CODE (fn) != FUNCTION_DECL)
2301 	/* We can get IDENTIFIER_NODEs here in certain erroneous
2302 	   cases.  */
2303 	;
2304       else if (!DECL_FUNCTION_MEMBER_P (fn))
2305 	/* This is just an ordinary non-member function.  Nothing can
2306 	   be a specialization of that.  */
2307 	;
2308       else if (DECL_ARTIFICIAL (fn))
2309 	/* Cannot specialize functions that are created implicitly.  */
2310 	;
2311       else
2312 	{
2313 	  tree decl_arg_types;
2314 
2315 	  /* This is an ordinary member function.  However, since
2316 	     we're here, we can assume its enclosing class is a
2317 	     template class.  For example,
2318 
2319 	       template <typename T> struct S { void f(); };
2320 	       template <> void S<int>::f() {}
2321 
2322 	     Here, S<int>::f is a non-template, but S<int> is a
2323 	     template class.  If FN has the same type as DECL, we
2324 	     might be in business.  */
2325 
2326 	  if (!DECL_TEMPLATE_INFO (fn))
2327 	    /* Its enclosing class is an explicit specialization
2328 	       of a template class.  This is not a candidate.  */
2329 	    continue;
2330 
2331 	  if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2332 			    TREE_TYPE (TREE_TYPE (fn))))
2333 	    /* The return types differ.  */
2334 	    continue;
2335 
2336 	  /* Adjust the type of DECL in case FN is a static member.  */
2337 	  decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2338 	  if (DECL_STATIC_FUNCTION_P (fn)
2339 	      && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2340 	    decl_arg_types = TREE_CHAIN (decl_arg_types);
2341 
2342 	  if (!compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2343 			 decl_arg_types))
2344             continue;
2345 
2346 	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2347 	      && (type_memfn_rqual (TREE_TYPE (decl))
2348 		  != type_memfn_rqual (TREE_TYPE (fn))))
2349 	    continue;
2350 
2351           // If the deduced arguments do not satisfy the constraints,
2352           // this is not a candidate.
2353           if (flag_concepts && !constraints_satisfied_p (fn))
2354             continue;
2355 
2356           // Add the candidate.
2357           candidates = tree_cons (NULL_TREE, fn, candidates);
2358 	}
2359     }
2360 
2361   if (templates && TREE_CHAIN (templates))
2362     {
2363       /* We have:
2364 
2365 	   [temp.expl.spec]
2366 
2367 	   It is possible for a specialization with a given function
2368 	   signature to be instantiated from more than one function
2369 	   template.  In such cases, explicit specification of the
2370 	   template arguments must be used to uniquely identify the
2371 	   function template specialization being specialized.
2372 
2373 	 Note that here, there's no suggestion that we're supposed to
2374 	 determine which of the candidate templates is most
2375 	 specialized.  However, we, also have:
2376 
2377 	   [temp.func.order]
2378 
2379 	   Partial ordering of overloaded function template
2380 	   declarations is used in the following contexts to select
2381 	   the function template to which a function template
2382 	   specialization refers:
2383 
2384 	   -- when an explicit specialization refers to a function
2385 	      template.
2386 
2387 	 So, we do use the partial ordering rules, at least for now.
2388 	 This extension can only serve to make invalid programs valid,
2389 	 so it's safe.  And, there is strong anecdotal evidence that
2390 	 the committee intended the partial ordering rules to apply;
2391 	 the EDG front end has that behavior, and John Spicer claims
2392 	 that the committee simply forgot to delete the wording in
2393 	 [temp.expl.spec].  */
2394       tree tmpl = most_specialized_instantiation (templates);
2395       if (tmpl != error_mark_node)
2396 	{
2397 	  templates = tmpl;
2398 	  TREE_CHAIN (templates) = NULL_TREE;
2399 	}
2400     }
2401 
2402   // Concepts allows multiple declarations of member functions
2403   // with the same signature. Like above, we need to rely on
2404   // on the partial ordering of those candidates to determine which
2405   // is the best.
2406   if (flag_concepts && candidates && TREE_CHAIN (candidates))
2407     {
2408       if (tree cand = most_constrained_function (candidates))
2409         {
2410           candidates = cand;
2411           TREE_CHAIN (cand) = NULL_TREE;
2412         }
2413     }
2414 
2415   if (templates == NULL_TREE && candidates == NULL_TREE)
2416     {
2417       error ("template-id %qD for %q+D does not match any template "
2418 	     "declaration", template_id, decl);
2419       if (header_count && header_count != template_count + 1)
2420 	inform (input_location, "saw %d %<template<>%>, need %d for "
2421 		"specializing a member function template",
2422 		header_count, template_count + 1);
2423       else
2424 	print_candidates (orig_fns);
2425       return error_mark_node;
2426     }
2427   else if ((templates && TREE_CHAIN (templates))
2428 	   || (candidates && TREE_CHAIN (candidates))
2429 	   || (templates && candidates))
2430     {
2431       error ("ambiguous template specialization %qD for %q+D",
2432 	     template_id, decl);
2433       candidates = chainon (candidates, templates);
2434       print_candidates (candidates);
2435       return error_mark_node;
2436     }
2437 
2438   /* We have one, and exactly one, match.  */
2439   if (candidates)
2440     {
2441       tree fn = TREE_VALUE (candidates);
2442       *targs_out = copy_node (DECL_TI_ARGS (fn));
2443 
2444       // Propagate the candidate's constraints to the declaration.
2445       set_constraints (decl, get_constraints (fn));
2446 
2447       /* DECL is a re-declaration or partial instantiation of a template
2448 	 function.  */
2449       if (TREE_CODE (fn) == TEMPLATE_DECL)
2450 	return fn;
2451       /* It was a specialization of an ordinary member function in a
2452 	 template class.  */
2453       return DECL_TI_TEMPLATE (fn);
2454     }
2455 
2456   /* It was a specialization of a template.  */
2457   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2458   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2459     {
2460       *targs_out = copy_node (targs);
2461       SET_TMPL_ARGS_LEVEL (*targs_out,
2462 			   TMPL_ARGS_DEPTH (*targs_out),
2463 			   TREE_PURPOSE (templates));
2464     }
2465   else
2466     *targs_out = TREE_PURPOSE (templates);
2467   return TREE_VALUE (templates);
2468 }
2469 
2470 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2471    but with the default argument values filled in from those in the
2472    TMPL_TYPES.  */
2473 
2474 static tree
copy_default_args_to_explicit_spec_1(tree spec_types,tree tmpl_types)2475 copy_default_args_to_explicit_spec_1 (tree spec_types,
2476 				      tree tmpl_types)
2477 {
2478   tree new_spec_types;
2479 
2480   if (!spec_types)
2481     return NULL_TREE;
2482 
2483   if (spec_types == void_list_node)
2484     return void_list_node;
2485 
2486   /* Substitute into the rest of the list.  */
2487   new_spec_types =
2488     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2489 					  TREE_CHAIN (tmpl_types));
2490 
2491   /* Add the default argument for this parameter.  */
2492   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2493 			 TREE_VALUE (spec_types),
2494 			 new_spec_types);
2495 }
2496 
2497 /* DECL is an explicit specialization.  Replicate default arguments
2498    from the template it specializes.  (That way, code like:
2499 
2500      template <class T> void f(T = 3);
2501      template <> void f(double);
2502      void g () { f (); }
2503 
2504    works, as required.)  An alternative approach would be to look up
2505    the correct default arguments at the call-site, but this approach
2506    is consistent with how implicit instantiations are handled.  */
2507 
2508 static void
copy_default_args_to_explicit_spec(tree decl)2509 copy_default_args_to_explicit_spec (tree decl)
2510 {
2511   tree tmpl;
2512   tree spec_types;
2513   tree tmpl_types;
2514   tree new_spec_types;
2515   tree old_type;
2516   tree new_type;
2517   tree t;
2518   tree object_type = NULL_TREE;
2519   tree in_charge = NULL_TREE;
2520   tree vtt = NULL_TREE;
2521 
2522   /* See if there's anything we need to do.  */
2523   tmpl = DECL_TI_TEMPLATE (decl);
2524   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2525   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2526     if (TREE_PURPOSE (t))
2527       break;
2528   if (!t)
2529     return;
2530 
2531   old_type = TREE_TYPE (decl);
2532   spec_types = TYPE_ARG_TYPES (old_type);
2533 
2534   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2535     {
2536       /* Remove the this pointer, but remember the object's type for
2537 	 CV quals.  */
2538       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2539       spec_types = TREE_CHAIN (spec_types);
2540       tmpl_types = TREE_CHAIN (tmpl_types);
2541 
2542       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2543 	{
2544 	  /* DECL may contain more parameters than TMPL due to the extra
2545 	     in-charge parameter in constructors and destructors.  */
2546 	  in_charge = spec_types;
2547 	  spec_types = TREE_CHAIN (spec_types);
2548 	}
2549       if (DECL_HAS_VTT_PARM_P (decl))
2550 	{
2551 	  vtt = spec_types;
2552 	  spec_types = TREE_CHAIN (spec_types);
2553 	}
2554     }
2555 
2556   /* Compute the merged default arguments.  */
2557   new_spec_types =
2558     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2559 
2560   /* Compute the new FUNCTION_TYPE.  */
2561   if (object_type)
2562     {
2563       if (vtt)
2564 	new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2565 					 TREE_VALUE (vtt),
2566 					 new_spec_types);
2567 
2568       if (in_charge)
2569 	/* Put the in-charge parameter back.  */
2570 	new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2571 					 TREE_VALUE (in_charge),
2572 					 new_spec_types);
2573 
2574       new_type = build_method_type_directly (object_type,
2575 					     TREE_TYPE (old_type),
2576 					     new_spec_types);
2577     }
2578   else
2579     new_type = build_function_type (TREE_TYPE (old_type),
2580 				    new_spec_types);
2581   new_type = cp_build_type_attribute_variant (new_type,
2582 					      TYPE_ATTRIBUTES (old_type));
2583   new_type = cxx_copy_lang_qualifiers (new_type, old_type);
2584 
2585   TREE_TYPE (decl) = new_type;
2586 }
2587 
2588 /* Return the number of template headers we expect to see for a definition
2589    or specialization of CTYPE or one of its non-template members.  */
2590 
2591 int
num_template_headers_for_class(tree ctype)2592 num_template_headers_for_class (tree ctype)
2593 {
2594   int num_templates = 0;
2595 
2596   while (ctype && CLASS_TYPE_P (ctype))
2597     {
2598       /* You're supposed to have one `template <...>' for every
2599 	 template class, but you don't need one for a full
2600 	 specialization.  For example:
2601 
2602 	 template <class T> struct S{};
2603 	 template <> struct S<int> { void f(); };
2604 	 void S<int>::f () {}
2605 
2606 	 is correct; there shouldn't be a `template <>' for the
2607 	 definition of `S<int>::f'.  */
2608       if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2609 	/* If CTYPE does not have template information of any
2610 	   kind,  then it is not a template, nor is it nested
2611 	   within a template.  */
2612 	break;
2613       if (explicit_class_specialization_p (ctype))
2614 	break;
2615       if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2616 	++num_templates;
2617 
2618       ctype = TYPE_CONTEXT (ctype);
2619     }
2620 
2621   return num_templates;
2622 }
2623 
2624 /* Do a simple sanity check on the template headers that precede the
2625    variable declaration DECL.  */
2626 
2627 void
check_template_variable(tree decl)2628 check_template_variable (tree decl)
2629 {
2630   tree ctx = CP_DECL_CONTEXT (decl);
2631   int wanted = num_template_headers_for_class (ctx);
2632   if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
2633       && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
2634     {
2635       if (cxx_dialect < cxx14)
2636         pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2637 		 "variable templates only available with "
2638 		 "%<-std=c++14%> or %<-std=gnu++14%>");
2639 
2640       // Namespace-scope variable templates should have a template header.
2641       ++wanted;
2642     }
2643   if (template_header_count > wanted)
2644     {
2645       auto_diagnostic_group d;
2646       bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2647 			     "too many template headers for %qD "
2648 	                     "(should be %d)",
2649 			     decl, wanted);
2650       if (warned && CLASS_TYPE_P (ctx)
2651 	  && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2652 	inform (DECL_SOURCE_LOCATION (decl),
2653 		"members of an explicitly specialized class are defined "
2654 		"without a template header");
2655     }
2656 }
2657 
2658 /* An explicit specialization whose declarator-id or class-head-name is not
2659    qualified shall be declared in the nearest enclosing namespace of the
2660    template, or, if the namespace is inline (7.3.1), any namespace from its
2661    enclosing namespace set.
2662 
2663    If the name declared in the explicit instantiation is an unqualified name,
2664    the explicit instantiation shall appear in the namespace where its template
2665    is declared or, if that namespace is inline (7.3.1), any namespace from its
2666    enclosing namespace set.  */
2667 
2668 void
check_unqualified_spec_or_inst(tree t,location_t loc)2669 check_unqualified_spec_or_inst (tree t, location_t loc)
2670 {
2671   tree tmpl = most_general_template (t);
2672   if (DECL_NAMESPACE_SCOPE_P (tmpl)
2673       && !is_nested_namespace (current_namespace,
2674 			       CP_DECL_CONTEXT (tmpl), true))
2675     {
2676       if (processing_specialization)
2677 	permerror (loc, "explicit specialization of %qD outside its "
2678 		   "namespace must use a nested-name-specifier", tmpl);
2679       else if (processing_explicit_instantiation
2680 	       && cxx_dialect >= cxx11)
2681 	/* This was allowed in C++98, so only pedwarn.  */
2682 	pedwarn (loc, OPT_Wpedantic, "explicit instantiation of %qD "
2683 		 "outside its namespace must use a nested-name-"
2684 		 "specifier", tmpl);
2685     }
2686 }
2687 
2688 /* Warn for a template specialization SPEC that is missing some of a set
2689    of function or type attributes that the template TEMPL is declared with.
2690    ATTRLIST is a list of additional attributes that SPEC should be taken
2691    to ultimately be declared with.  */
2692 
2693 static void
warn_spec_missing_attributes(tree tmpl,tree spec,tree attrlist)2694 warn_spec_missing_attributes (tree tmpl, tree spec, tree attrlist)
2695 {
2696   if (DECL_FUNCTION_TEMPLATE_P (tmpl))
2697     tmpl = DECL_TEMPLATE_RESULT (tmpl);
2698 
2699   /* Avoid warning if the difference between the primary and
2700      the specialization is not in one of the attributes below.  */
2701   const char* const blacklist[] = {
2702     "alloc_align", "alloc_size", "assume_aligned", "format",
2703     "format_arg", "malloc", "nonnull", NULL
2704   };
2705 
2706   /* Put together a list of the black listed attributes that the primary
2707      template is declared with that the specialization is not, in case
2708      it's not apparent from the most recent declaration of the primary.  */
2709   pretty_printer str;
2710   unsigned nattrs = decls_mismatched_attributes (tmpl, spec, attrlist,
2711 						 blacklist, &str);
2712 
2713   if (!nattrs)
2714     return;
2715 
2716   auto_diagnostic_group d;
2717   if (warning_at (DECL_SOURCE_LOCATION (spec), OPT_Wmissing_attributes,
2718 		  "explicit specialization %q#D may be missing attributes",
2719 		  spec))
2720     inform (DECL_SOURCE_LOCATION (tmpl),
2721 	    nattrs > 1
2722 	    ? G_("missing primary template attributes %s")
2723 	    : G_("missing primary template attribute %s"),
2724 	    pp_formatted_text (&str));
2725 }
2726 
2727 /* Check to see if the function just declared, as indicated in
2728    DECLARATOR, and in DECL, is a specialization of a function
2729    template.  We may also discover that the declaration is an explicit
2730    instantiation at this point.
2731 
2732    Returns DECL, or an equivalent declaration that should be used
2733    instead if all goes well.  Issues an error message if something is
2734    amiss.  Returns error_mark_node if the error is not easily
2735    recoverable.
2736 
2737    FLAGS is a bitmask consisting of the following flags:
2738 
2739    2: The function has a definition.
2740    4: The function is a friend.
2741 
2742    The TEMPLATE_COUNT is the number of references to qualifying
2743    template classes that appeared in the name of the function.  For
2744    example, in
2745 
2746      template <class T> struct S { void f(); };
2747      void S<int>::f();
2748 
2749    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2750    classes are not counted in the TEMPLATE_COUNT, so that in
2751 
2752      template <class T> struct S {};
2753      template <> struct S<int> { void f(); }
2754      template <> void S<int>::f();
2755 
2756    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2757    invalid; there should be no template <>.)
2758 
2759    If the function is a specialization, it is marked as such via
2760    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2761    is set up correctly, and it is added to the list of specializations
2762    for that template.  */
2763 
2764 tree
check_explicit_specialization(tree declarator,tree decl,int template_count,int flags,tree attrlist)2765 check_explicit_specialization (tree declarator,
2766 			       tree decl,
2767 			       int template_count,
2768 			       int flags,
2769 			       tree attrlist)
2770 {
2771   int have_def = flags & 2;
2772   int is_friend = flags & 4;
2773   bool is_concept = flags & 8;
2774   int specialization = 0;
2775   int explicit_instantiation = 0;
2776   int member_specialization = 0;
2777   tree ctype = DECL_CLASS_CONTEXT (decl);
2778   tree dname = DECL_NAME (decl);
2779   tmpl_spec_kind tsk;
2780 
2781   if (is_friend)
2782     {
2783       if (!processing_specialization)
2784 	tsk = tsk_none;
2785       else
2786 	tsk = tsk_excessive_parms;
2787     }
2788   else
2789     tsk = current_tmpl_spec_kind (template_count);
2790 
2791   switch (tsk)
2792     {
2793     case tsk_none:
2794       if (processing_specialization && !VAR_P (decl))
2795 	{
2796 	  specialization = 1;
2797 	  SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2798 	}
2799       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2800 	{
2801 	  if (is_friend)
2802 	    /* This could be something like:
2803 
2804 	       template <class T> void f(T);
2805 	       class S { friend void f<>(int); }  */
2806 	    specialization = 1;
2807 	  else
2808 	    {
2809 	      /* This case handles bogus declarations like template <>
2810 		 template <class T> void f<int>(); */
2811 
2812 	      error ("template-id %qD in declaration of primary template",
2813 		     declarator);
2814 	      return decl;
2815 	    }
2816 	}
2817       break;
2818 
2819     case tsk_invalid_member_spec:
2820       /* The error has already been reported in
2821 	 check_specialization_scope.  */
2822       return error_mark_node;
2823 
2824     case tsk_invalid_expl_inst:
2825       error ("template parameter list used in explicit instantiation");
2826 
2827       /* Fall through.  */
2828 
2829     case tsk_expl_inst:
2830       if (have_def)
2831 	error ("definition provided for explicit instantiation");
2832 
2833       explicit_instantiation = 1;
2834       break;
2835 
2836     case tsk_excessive_parms:
2837     case tsk_insufficient_parms:
2838       if (tsk == tsk_excessive_parms)
2839 	error ("too many template parameter lists in declaration of %qD",
2840 	       decl);
2841       else if (template_header_count)
2842 	error("too few template parameter lists in declaration of %qD", decl);
2843       else
2844 	error("explicit specialization of %qD must be introduced by "
2845 	      "%<template <>%>", decl);
2846 
2847       /* Fall through.  */
2848     case tsk_expl_spec:
2849       if (is_concept)
2850         error ("explicit specialization declared %<concept%>");
2851 
2852       if (VAR_P (decl) && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2853 	/* In cases like template<> constexpr bool v = true;
2854 	   We'll give an error in check_template_variable.  */
2855 	break;
2856 
2857       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2858       if (ctype)
2859 	member_specialization = 1;
2860       else
2861 	specialization = 1;
2862       break;
2863 
2864     case tsk_template:
2865       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2866 	{
2867 	  /* This case handles bogus declarations like template <>
2868 	     template <class T> void f<int>(); */
2869 
2870 	  if (!uses_template_parms (TREE_OPERAND (declarator, 1)))
2871 	    error ("template-id %qD in declaration of primary template",
2872 		   declarator);
2873 	  else if (variable_template_p (TREE_OPERAND (declarator, 0)))
2874 	    {
2875 	      /* Partial specialization of variable template.  */
2876 	      SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2877 	      specialization = 1;
2878 	      goto ok;
2879 	    }
2880 	  else if (cxx_dialect < cxx14)
2881 	    error ("non-type partial specialization %qD "
2882 		   "is not allowed", declarator);
2883 	  else
2884 	    error ("non-class, non-variable partial specialization %qD "
2885 		   "is not allowed", declarator);
2886 	  return decl;
2887 	ok:;
2888 	}
2889 
2890       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2891 	/* This is a specialization of a member template, without
2892 	   specialization the containing class.  Something like:
2893 
2894 	     template <class T> struct S {
2895 	       template <class U> void f (U);
2896 	     };
2897 	     template <> template <class U> void S<int>::f(U) {}
2898 
2899 	   That's a specialization -- but of the entire template.  */
2900 	specialization = 1;
2901       break;
2902 
2903     default:
2904       gcc_unreachable ();
2905     }
2906 
2907   if ((specialization || member_specialization)
2908       /* This doesn't apply to variable templates.  */
2909       && (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE
2910           || TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE))
2911     {
2912       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2913       for (; t; t = TREE_CHAIN (t))
2914 	if (TREE_PURPOSE (t))
2915 	  {
2916 	    permerror (input_location,
2917 		       "default argument specified in explicit specialization");
2918 	    break;
2919 	  }
2920     }
2921 
2922   if (specialization || member_specialization || explicit_instantiation)
2923     {
2924       tree tmpl = NULL_TREE;
2925       tree targs = NULL_TREE;
2926       bool was_template_id = (TREE_CODE (declarator) == TEMPLATE_ID_EXPR);
2927 
2928       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2929       if (!was_template_id)
2930 	{
2931 	  tree fns;
2932 
2933 	  gcc_assert (identifier_p (declarator));
2934 	  if (ctype)
2935 	    fns = dname;
2936 	  else
2937 	    {
2938 	      /* If there is no class context, the explicit instantiation
2939 		 must be at namespace scope.  */
2940 	      gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2941 
2942 	      /* Find the namespace binding, using the declaration
2943 		 context.  */
2944 	      fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2945 					   false, true);
2946 	      if (fns == error_mark_node)
2947 		/* If lookup fails, look for a friend declaration so we can
2948 		   give a better diagnostic.  */
2949 		fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2950 					     /*type*/false, /*complain*/true,
2951 					     /*hidden*/true);
2952 
2953 	      if (fns == error_mark_node || !is_overloaded_fn (fns))
2954 		{
2955 		  error ("%qD is not a template function", dname);
2956 		  fns = error_mark_node;
2957 		}
2958 	    }
2959 
2960 	  declarator = lookup_template_function (fns, NULL_TREE);
2961 	}
2962 
2963       if (declarator == error_mark_node)
2964 	return error_mark_node;
2965 
2966       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2967 	{
2968 	  if (!explicit_instantiation)
2969 	    /* A specialization in class scope.  This is invalid,
2970 	       but the error will already have been flagged by
2971 	       check_specialization_scope.  */
2972 	    return error_mark_node;
2973 	  else
2974 	    {
2975 	      /* It's not valid to write an explicit instantiation in
2976 		 class scope, e.g.:
2977 
2978 		   class C { template void f(); }
2979 
2980 		   This case is caught by the parser.  However, on
2981 		   something like:
2982 
2983 		   template class C { void f(); };
2984 
2985 		   (which is invalid) we can get here.  The error will be
2986 		   issued later.  */
2987 	      ;
2988 	    }
2989 
2990 	  return decl;
2991 	}
2992       else if (ctype != NULL_TREE
2993 	       && (identifier_p (TREE_OPERAND (declarator, 0))))
2994 	{
2995 	  // We'll match variable templates in start_decl.
2996 	  if (VAR_P (decl))
2997 	    return decl;
2998 
2999 	  /* Find the list of functions in ctype that have the same
3000 	     name as the declared function.  */
3001 	  tree name = TREE_OPERAND (declarator, 0);
3002 
3003 	  if (constructor_name_p (name, ctype))
3004 	    {
3005 	      if (DECL_CONSTRUCTOR_P (decl)
3006 		  ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
3007 		  : !CLASSTYPE_DESTRUCTOR (ctype))
3008 		{
3009 		  /* From [temp.expl.spec]:
3010 
3011 		     If such an explicit specialization for the member
3012 		     of a class template names an implicitly-declared
3013 		     special member function (clause _special_), the
3014 		     program is ill-formed.
3015 
3016 		     Similar language is found in [temp.explicit].  */
3017 		  error ("specialization of implicitly-declared special member function");
3018 		  return error_mark_node;
3019 		}
3020 
3021 	      name = DECL_NAME (decl);
3022 	    }
3023 
3024 	  /* For a type-conversion operator, We might be looking for
3025 	     `operator int' which will be a specialization of
3026 	     `operator T'.  Grab all the conversion operators, and
3027 	     then select from them.  */
3028 	  tree fns = get_class_binding (ctype, IDENTIFIER_CONV_OP_P (name)
3029 				      ? conv_op_identifier : name);
3030 
3031 	  if (fns == NULL_TREE)
3032 	    {
3033 	      error ("no member function %qD declared in %qT", name, ctype);
3034 	      return error_mark_node;
3035 	    }
3036 	  else
3037 	    TREE_OPERAND (declarator, 0) = fns;
3038 	}
3039 
3040       /* Figure out what exactly is being specialized at this point.
3041 	 Note that for an explicit instantiation, even one for a
3042 	 member function, we cannot tell a priori whether the
3043 	 instantiation is for a member template, or just a member
3044 	 function of a template class.  Even if a member template is
3045 	 being instantiated, the member template arguments may be
3046 	 elided if they can be deduced from the rest of the
3047 	 declaration.  */
3048       tmpl = determine_specialization (declarator, decl,
3049 				       &targs,
3050 				       member_specialization,
3051 				       template_count,
3052 				       tsk);
3053 
3054       if (!tmpl || tmpl == error_mark_node)
3055 	/* We couldn't figure out what this declaration was
3056 	   specializing.  */
3057 	return error_mark_node;
3058       else
3059 	{
3060 	  if (TREE_CODE (decl) == FUNCTION_DECL
3061 	      && DECL_HIDDEN_FRIEND_P (tmpl))
3062 	    {
3063 	      auto_diagnostic_group d;
3064 	      if (pedwarn (DECL_SOURCE_LOCATION (decl), 0,
3065 			   "friend declaration %qD is not visible to "
3066 			   "explicit specialization", tmpl))
3067 		inform (DECL_SOURCE_LOCATION (tmpl),
3068 			"friend declaration here");
3069 	    }
3070 	  else if (!ctype && !is_friend
3071 		   && CP_DECL_CONTEXT (decl) == current_namespace)
3072 	    check_unqualified_spec_or_inst (tmpl, DECL_SOURCE_LOCATION (decl));
3073 
3074 	  tree gen_tmpl = most_general_template (tmpl);
3075 
3076 	  if (explicit_instantiation)
3077 	    {
3078 	      /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
3079 		 is done by do_decl_instantiation later.  */
3080 
3081 	      int arg_depth = TMPL_ARGS_DEPTH (targs);
3082 	      int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3083 
3084 	      if (arg_depth > parm_depth)
3085 		{
3086 		  /* If TMPL is not the most general template (for
3087 		     example, if TMPL is a friend template that is
3088 		     injected into namespace scope), then there will
3089 		     be too many levels of TARGS.  Remove some of them
3090 		     here.  */
3091 		  int i;
3092 		  tree new_targs;
3093 
3094 		  new_targs = make_tree_vec (parm_depth);
3095 		  for (i = arg_depth - parm_depth; i < arg_depth; ++i)
3096 		    TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
3097 		      = TREE_VEC_ELT (targs, i);
3098 		  targs = new_targs;
3099 		}
3100 
3101 	      return instantiate_template (tmpl, targs, tf_error);
3102 	    }
3103 
3104 	  /* If we thought that the DECL was a member function, but it
3105 	     turns out to be specializing a static member function,
3106 	     make DECL a static member function as well.  */
3107 	  if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3108 	      && DECL_STATIC_FUNCTION_P (tmpl)
3109 	      && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
3110 	    revert_static_member_fn (decl);
3111 
3112 	  /* If this is a specialization of a member template of a
3113 	     template class, we want to return the TEMPLATE_DECL, not
3114 	     the specialization of it.  */
3115 	  if (tsk == tsk_template && !was_template_id)
3116 	    {
3117 	      tree result = DECL_TEMPLATE_RESULT (tmpl);
3118 	      SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3119 	      DECL_INITIAL (result) = NULL_TREE;
3120 	      if (have_def)
3121 		{
3122 		  tree parm;
3123 		  DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
3124 		  DECL_SOURCE_LOCATION (result)
3125 		    = DECL_SOURCE_LOCATION (decl);
3126 		  /* We want to use the argument list specified in the
3127 		     definition, not in the original declaration.  */
3128 		  DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
3129 		  for (parm = DECL_ARGUMENTS (result); parm;
3130 		       parm = DECL_CHAIN (parm))
3131 		    DECL_CONTEXT (parm) = result;
3132 		}
3133 	      return register_specialization (tmpl, gen_tmpl, targs,
3134 					      is_friend, 0);
3135 	    }
3136 
3137 	  /* Set up the DECL_TEMPLATE_INFO for DECL.  */
3138 	  DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
3139 
3140 	  if (was_template_id)
3141 	    TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl)) = true;
3142 
3143 	  /* Inherit default function arguments from the template
3144 	     DECL is specializing.  */
3145 	  if (DECL_FUNCTION_TEMPLATE_P (tmpl))
3146 	    copy_default_args_to_explicit_spec (decl);
3147 
3148 	  /* This specialization has the same protection as the
3149 	     template it specializes.  */
3150 	  TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
3151 	  TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
3152 
3153           /* 7.1.1-1 [dcl.stc]
3154 
3155              A storage-class-specifier shall not be specified in an
3156              explicit specialization...
3157 
3158              The parser rejects these, so unless action is taken here,
3159              explicit function specializations will always appear with
3160              global linkage.
3161 
3162              The action recommended by the C++ CWG in response to C++
3163              defect report 605 is to make the storage class and linkage
3164              of the explicit specialization match the templated function:
3165 
3166              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
3167            */
3168           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
3169             {
3170               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
3171               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
3172 
3173               /* A concept cannot be specialized.  */
3174               if (DECL_DECLARED_CONCEPT_P (tmpl_func))
3175                 {
3176                   error ("explicit specialization of function concept %qD",
3177                          gen_tmpl);
3178                   return error_mark_node;
3179                 }
3180 
3181               /* This specialization has the same linkage and visibility as
3182                  the function template it specializes.  */
3183               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
3184 	      if (! TREE_PUBLIC (decl))
3185 		{
3186 		  DECL_INTERFACE_KNOWN (decl) = 1;
3187 		  DECL_NOT_REALLY_EXTERN (decl) = 1;
3188 		}
3189               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
3190               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
3191                 {
3192                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3193                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
3194                 }
3195             }
3196 
3197 	  /* If DECL is a friend declaration, declared using an
3198 	     unqualified name, the namespace associated with DECL may
3199 	     have been set incorrectly.  For example, in:
3200 
3201 	       template <typename T> void f(T);
3202 	       namespace N {
3203 		 struct S { friend void f<int>(int); }
3204 	       }
3205 
3206 	     we will have set the DECL_CONTEXT for the friend
3207 	     declaration to N, rather than to the global namespace.  */
3208 	  if (DECL_NAMESPACE_SCOPE_P (decl))
3209 	    DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
3210 
3211 	  if (is_friend && !have_def)
3212 	    /* This is not really a declaration of a specialization.
3213 	       It's just the name of an instantiation.  But, it's not
3214 	       a request for an instantiation, either.  */
3215 	    SET_DECL_IMPLICIT_INSTANTIATION (decl);
3216 	  else if (TREE_CODE (decl) == FUNCTION_DECL)
3217 	    /* A specialization is not necessarily COMDAT.  */
3218 	    DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
3219 				  && DECL_DECLARED_INLINE_P (decl));
3220 	  else if (VAR_P (decl))
3221 	    DECL_COMDAT (decl) = false;
3222 
3223 	  /* If this is a full specialization, register it so that we can find
3224 	     it again.  Partial specializations will be registered in
3225 	     process_partial_specialization.  */
3226 	  if (!processing_template_decl)
3227 	    {
3228 	      warn_spec_missing_attributes (gen_tmpl, decl, attrlist);
3229 
3230 	      decl = register_specialization (decl, gen_tmpl, targs,
3231 					      is_friend, 0);
3232 	    }
3233 
3234 
3235 	  /* A 'structor should already have clones.  */
3236 	  gcc_assert (decl == error_mark_node
3237 		      || variable_template_p (tmpl)
3238 		      || !(DECL_CONSTRUCTOR_P (decl)
3239 			   || DECL_DESTRUCTOR_P (decl))
3240 		      || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
3241 	}
3242     }
3243 
3244   return decl;
3245 }
3246 
3247 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
3248    parameters.  These are represented in the same format used for
3249    DECL_TEMPLATE_PARMS.  */
3250 
3251 int
comp_template_parms(const_tree parms1,const_tree parms2)3252 comp_template_parms (const_tree parms1, const_tree parms2)
3253 {
3254   const_tree p1;
3255   const_tree p2;
3256 
3257   if (parms1 == parms2)
3258     return 1;
3259 
3260   for (p1 = parms1, p2 = parms2;
3261        p1 != NULL_TREE && p2 != NULL_TREE;
3262        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
3263     {
3264       tree t1 = TREE_VALUE (p1);
3265       tree t2 = TREE_VALUE (p2);
3266       int i;
3267 
3268       gcc_assert (TREE_CODE (t1) == TREE_VEC);
3269       gcc_assert (TREE_CODE (t2) == TREE_VEC);
3270 
3271       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
3272 	return 0;
3273 
3274       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
3275 	{
3276           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
3277           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
3278 
3279           /* If either of the template parameters are invalid, assume
3280              they match for the sake of error recovery. */
3281           if (error_operand_p (parm1) || error_operand_p (parm2))
3282             return 1;
3283 
3284 	  if (TREE_CODE (parm1) != TREE_CODE (parm2))
3285 	    return 0;
3286 
3287 	  if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
3288               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
3289                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
3290 	    continue;
3291 	  else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
3292 	    return 0;
3293 	}
3294     }
3295 
3296   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
3297     /* One set of parameters has more parameters lists than the
3298        other.  */
3299     return 0;
3300 
3301   return 1;
3302 }
3303 
3304 /* Determine whether PARM is a parameter pack.  */
3305 
3306 bool
template_parameter_pack_p(const_tree parm)3307 template_parameter_pack_p (const_tree parm)
3308 {
3309   /* Determine if we have a non-type template parameter pack.  */
3310   if (TREE_CODE (parm) == PARM_DECL)
3311     return (DECL_TEMPLATE_PARM_P (parm)
3312             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
3313   if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
3314     return TEMPLATE_PARM_PARAMETER_PACK (parm);
3315 
3316   /* If this is a list of template parameters, we could get a
3317      TYPE_DECL or a TEMPLATE_DECL.  */
3318   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
3319     parm = TREE_TYPE (parm);
3320 
3321   /* Otherwise it must be a type template parameter.  */
3322   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
3323 	   || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
3324 	  && TEMPLATE_TYPE_PARAMETER_PACK (parm));
3325 }
3326 
3327 /* Determine if T is a function parameter pack.  */
3328 
3329 bool
function_parameter_pack_p(const_tree t)3330 function_parameter_pack_p (const_tree t)
3331 {
3332   if (t && TREE_CODE (t) == PARM_DECL)
3333     return DECL_PACK_P (t);
3334   return false;
3335 }
3336 
3337 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
3338    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
3339 
3340 tree
get_function_template_decl(const_tree primary_func_tmpl_inst)3341 get_function_template_decl (const_tree primary_func_tmpl_inst)
3342 {
3343   if (! primary_func_tmpl_inst
3344       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
3345       || ! primary_template_specialization_p (primary_func_tmpl_inst))
3346     return NULL;
3347 
3348   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
3349 }
3350 
3351 /* Return true iff the function parameter PARAM_DECL was expanded
3352    from the function parameter pack PACK.  */
3353 
3354 bool
function_parameter_expanded_from_pack_p(tree param_decl,tree pack)3355 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
3356 {
3357   if (DECL_ARTIFICIAL (param_decl)
3358       || !function_parameter_pack_p (pack))
3359     return false;
3360 
3361   /* The parameter pack and its pack arguments have the same
3362      DECL_PARM_INDEX.  */
3363   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
3364 }
3365 
3366 /* Determine whether ARGS describes a variadic template args list,
3367    i.e., one that is terminated by a template argument pack.  */
3368 
3369 static bool
template_args_variadic_p(tree args)3370 template_args_variadic_p (tree args)
3371 {
3372   int nargs;
3373   tree last_parm;
3374 
3375   if (args == NULL_TREE)
3376     return false;
3377 
3378   args = INNERMOST_TEMPLATE_ARGS (args);
3379   nargs = TREE_VEC_LENGTH (args);
3380 
3381   if (nargs == 0)
3382     return false;
3383 
3384   last_parm = TREE_VEC_ELT (args, nargs - 1);
3385 
3386   return ARGUMENT_PACK_P (last_parm);
3387 }
3388 
3389 /* Generate a new name for the parameter pack name NAME (an
3390    IDENTIFIER_NODE) that incorporates its */
3391 
3392 static tree
make_ith_pack_parameter_name(tree name,int i)3393 make_ith_pack_parameter_name (tree name, int i)
3394 {
3395   /* Munge the name to include the parameter index.  */
3396 #define NUMBUF_LEN 128
3397   char numbuf[NUMBUF_LEN];
3398   char* newname;
3399   int newname_len;
3400 
3401   if (name == NULL_TREE)
3402     return name;
3403   snprintf (numbuf, NUMBUF_LEN, "%i", i);
3404   newname_len = IDENTIFIER_LENGTH (name)
3405 	        + strlen (numbuf) + 2;
3406   newname = (char*)alloca (newname_len);
3407   snprintf (newname, newname_len,
3408 	    "%s#%i", IDENTIFIER_POINTER (name), i);
3409   return get_identifier (newname);
3410 }
3411 
3412 /* Return true if T is a primary function, class or alias template
3413    specialization, not including the template pattern.  */
3414 
3415 bool
primary_template_specialization_p(const_tree t)3416 primary_template_specialization_p (const_tree t)
3417 {
3418   if (!t)
3419     return false;
3420 
3421   if (TREE_CODE (t) == FUNCTION_DECL || VAR_P (t))
3422     return (DECL_LANG_SPECIFIC (t)
3423 	    && DECL_USE_TEMPLATE (t)
3424 	    && DECL_TEMPLATE_INFO (t)
3425 	    && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t)));
3426   else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3427     return (CLASSTYPE_TEMPLATE_INFO (t)
3428 	    && CLASSTYPE_USE_TEMPLATE (t)
3429 	    && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)));
3430   else if (alias_template_specialization_p (t))
3431     return true;
3432   return false;
3433 }
3434 
3435 /* Return true if PARM is a template template parameter.  */
3436 
3437 bool
template_template_parameter_p(const_tree parm)3438 template_template_parameter_p (const_tree parm)
3439 {
3440   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
3441 }
3442 
3443 /* Return true iff PARM is a DECL representing a type template
3444    parameter.  */
3445 
3446 bool
template_type_parameter_p(const_tree parm)3447 template_type_parameter_p (const_tree parm)
3448 {
3449   return (parm
3450 	  && (TREE_CODE (parm) == TYPE_DECL
3451 	      || TREE_CODE (parm) == TEMPLATE_DECL)
3452 	  && DECL_TEMPLATE_PARM_P (parm));
3453 }
3454 
3455 /* Return the template parameters of T if T is a
3456    primary template instantiation, NULL otherwise.  */
3457 
3458 tree
get_primary_template_innermost_parameters(const_tree t)3459 get_primary_template_innermost_parameters (const_tree t)
3460 {
3461   tree parms = NULL, template_info = NULL;
3462 
3463   if ((template_info = get_template_info (t))
3464       && primary_template_specialization_p (t))
3465     parms = INNERMOST_TEMPLATE_PARMS
3466 	(DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3467 
3468   return parms;
3469 }
3470 
3471 /* Return the template parameters of the LEVELth level from the full list
3472    of template parameters PARMS.  */
3473 
3474 tree
get_template_parms_at_level(tree parms,int level)3475 get_template_parms_at_level (tree parms, int level)
3476 {
3477   tree p;
3478   if (!parms
3479       || TREE_CODE (parms) != TREE_LIST
3480       || level > TMPL_PARMS_DEPTH (parms))
3481     return NULL_TREE;
3482 
3483   for (p = parms; p; p = TREE_CHAIN (p))
3484     if (TMPL_PARMS_DEPTH (p) == level)
3485       return p;
3486 
3487   return NULL_TREE;
3488 }
3489 
3490 /* Returns the template arguments of T if T is a template instantiation,
3491    NULL otherwise.  */
3492 
3493 tree
get_template_innermost_arguments(const_tree t)3494 get_template_innermost_arguments (const_tree t)
3495 {
3496   tree args = NULL, template_info = NULL;
3497 
3498   if ((template_info = get_template_info (t))
3499       && TI_ARGS (template_info))
3500     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3501 
3502   return args;
3503 }
3504 
3505 /* Return the argument pack elements of T if T is a template argument pack,
3506    NULL otherwise.  */
3507 
3508 tree
get_template_argument_pack_elems(const_tree t)3509 get_template_argument_pack_elems (const_tree t)
3510 {
3511   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3512       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3513     return NULL;
3514 
3515   return ARGUMENT_PACK_ARGS (t);
3516 }
3517 
3518 /* In an ARGUMENT_PACK_SELECT, the actual underlying argument that the
3519    ARGUMENT_PACK_SELECT represents. */
3520 
3521 static tree
argument_pack_select_arg(tree t)3522 argument_pack_select_arg (tree t)
3523 {
3524   tree args = ARGUMENT_PACK_ARGS (ARGUMENT_PACK_SELECT_FROM_PACK (t));
3525   tree arg = TREE_VEC_ELT (args, ARGUMENT_PACK_SELECT_INDEX (t));
3526 
3527   /* If the selected argument is an expansion E, that most likely means we were
3528      called from gen_elem_of_pack_expansion_instantiation during the
3529      substituting of an argument pack (of which the Ith element is a pack
3530      expansion, where I is ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
3531      In this case, the Ith element resulting from this substituting is going to
3532      be a pack expansion, which pattern is the pattern of E.  Let's return the
3533      pattern of E, and gen_elem_of_pack_expansion_instantiation will build the
3534      resulting pack expansion from it.  */
3535   if (PACK_EXPANSION_P (arg))
3536     {
3537       /* Make sure we aren't throwing away arg info.  */
3538       gcc_assert (!PACK_EXPANSION_EXTRA_ARGS (arg));
3539       arg = PACK_EXPANSION_PATTERN (arg);
3540     }
3541 
3542   return arg;
3543 }
3544 
3545 
3546 /* True iff FN is a function representing a built-in variadic parameter
3547    pack.  */
3548 
3549 bool
builtin_pack_fn_p(tree fn)3550 builtin_pack_fn_p (tree fn)
3551 {
3552   if (!fn
3553       || TREE_CODE (fn) != FUNCTION_DECL
3554       || !DECL_IS_BUILTIN (fn))
3555     return false;
3556 
3557   if (id_equal (DECL_NAME (fn), "__integer_pack"))
3558     return true;
3559 
3560   return false;
3561 }
3562 
3563 /* True iff CALL is a call to a function representing a built-in variadic
3564    parameter pack.  */
3565 
3566 static bool
builtin_pack_call_p(tree call)3567 builtin_pack_call_p (tree call)
3568 {
3569   if (TREE_CODE (call) != CALL_EXPR)
3570     return false;
3571   return builtin_pack_fn_p (CALL_EXPR_FN (call));
3572 }
3573 
3574 /* Return a TREE_VEC for the expansion of __integer_pack(HI).  */
3575 
3576 static tree
expand_integer_pack(tree call,tree args,tsubst_flags_t complain,tree in_decl)3577 expand_integer_pack (tree call, tree args, tsubst_flags_t complain,
3578 		     tree in_decl)
3579 {
3580   tree ohi = CALL_EXPR_ARG (call, 0);
3581   tree hi = tsubst_copy_and_build (ohi, args, complain, in_decl,
3582 				   false/*fn*/, true/*int_cst*/);
3583 
3584   if (value_dependent_expression_p (hi))
3585     {
3586       if (hi != ohi)
3587 	{
3588 	  call = copy_node (call);
3589 	  CALL_EXPR_ARG (call, 0) = hi;
3590 	}
3591       tree ex = make_pack_expansion (call, complain);
3592       tree vec = make_tree_vec (1);
3593       TREE_VEC_ELT (vec, 0) = ex;
3594       return vec;
3595     }
3596   else
3597     {
3598       hi = cxx_constant_value (hi);
3599       int len = valid_constant_size_p (hi) ? tree_to_shwi (hi) : -1;
3600 
3601       /* Calculate the largest value of len that won't make the size of the vec
3602 	 overflow an int.  The compiler will exceed resource limits long before
3603 	 this, but it seems a decent place to diagnose.  */
3604       int max = ((INT_MAX - sizeof (tree_vec)) / sizeof (tree)) + 1;
3605 
3606       if (len < 0 || len > max)
3607 	{
3608 	  if ((complain & tf_error)
3609 	      && hi != error_mark_node)
3610 	    error ("argument to __integer_pack must be between 0 and %d", max);
3611 	  return error_mark_node;
3612 	}
3613 
3614       tree vec = make_tree_vec (len);
3615 
3616       for (int i = 0; i < len; ++i)
3617 	TREE_VEC_ELT (vec, i) = size_int (i);
3618 
3619       return vec;
3620     }
3621 }
3622 
3623 /* Return a TREE_VEC for the expansion of built-in template parameter pack
3624    CALL.  */
3625 
3626 static tree
expand_builtin_pack_call(tree call,tree args,tsubst_flags_t complain,tree in_decl)3627 expand_builtin_pack_call (tree call, tree args, tsubst_flags_t complain,
3628 			  tree in_decl)
3629 {
3630   if (!builtin_pack_call_p (call))
3631     return NULL_TREE;
3632 
3633   tree fn = CALL_EXPR_FN (call);
3634 
3635   if (id_equal (DECL_NAME (fn), "__integer_pack"))
3636     return expand_integer_pack (call, args, complain, in_decl);
3637 
3638   return NULL_TREE;
3639 }
3640 
3641 /* Structure used to track the progress of find_parameter_packs_r.  */
3642 struct find_parameter_pack_data
3643 {
3644   /* TREE_LIST that will contain all of the parameter packs found by
3645      the traversal.  */
3646   tree* parameter_packs;
3647 
3648   /* Set of AST nodes that have been visited by the traversal.  */
3649   hash_set<tree> *visited;
3650 
3651   /* True iff we're making a type pack expansion.  */
3652   bool type_pack_expansion_p;
3653 };
3654 
3655 /* Identifies all of the argument packs that occur in a template
3656    argument and appends them to the TREE_LIST inside DATA, which is a
3657    find_parameter_pack_data structure. This is a subroutine of
3658    make_pack_expansion and uses_parameter_packs.  */
3659 static tree
find_parameter_packs_r(tree * tp,int * walk_subtrees,void * data)3660 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3661 {
3662   tree t = *tp;
3663   struct find_parameter_pack_data* ppd =
3664     (struct find_parameter_pack_data*)data;
3665   bool parameter_pack_p = false;
3666 
3667   /* Handle type aliases/typedefs.  */
3668   if (TYPE_ALIAS_P (t))
3669     {
3670       if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
3671 	cp_walk_tree (&TI_ARGS (tinfo),
3672 		      &find_parameter_packs_r,
3673 		      ppd, ppd->visited);
3674       *walk_subtrees = 0;
3675       return NULL_TREE;
3676     }
3677 
3678   /* Identify whether this is a parameter pack or not.  */
3679   switch (TREE_CODE (t))
3680     {
3681     case TEMPLATE_PARM_INDEX:
3682       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3683         parameter_pack_p = true;
3684       break;
3685 
3686     case TEMPLATE_TYPE_PARM:
3687       t = TYPE_MAIN_VARIANT (t);
3688       /* FALLTHRU */
3689     case TEMPLATE_TEMPLATE_PARM:
3690       /* If the placeholder appears in the decl-specifier-seq of a function
3691 	 parameter pack (14.6.3), or the type-specifier-seq of a type-id that
3692 	 is a pack expansion, the invented template parameter is a template
3693 	 parameter pack.  */
3694       if (ppd->type_pack_expansion_p && is_auto (t))
3695 	TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
3696       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3697         parameter_pack_p = true;
3698       break;
3699 
3700     case FIELD_DECL:
3701     case PARM_DECL:
3702       if (DECL_PACK_P (t))
3703         {
3704           /* We don't want to walk into the type of a PARM_DECL,
3705              because we don't want to see the type parameter pack.  */
3706           *walk_subtrees = 0;
3707 	  parameter_pack_p = true;
3708         }
3709       break;
3710 
3711     case VAR_DECL:
3712       if (DECL_PACK_P (t))
3713         {
3714           /* We don't want to walk into the type of a variadic capture proxy,
3715              because we don't want to see the type parameter pack.  */
3716           *walk_subtrees = 0;
3717 	  parameter_pack_p = true;
3718         }
3719       else if (variable_template_specialization_p (t))
3720 	{
3721 	  cp_walk_tree (&DECL_TI_ARGS (t),
3722 			find_parameter_packs_r,
3723 			ppd, ppd->visited);
3724 	  *walk_subtrees = 0;
3725 	}
3726       break;
3727 
3728     case CALL_EXPR:
3729       if (builtin_pack_call_p (t))
3730 	parameter_pack_p = true;
3731       break;
3732 
3733     case BASES:
3734       parameter_pack_p = true;
3735       break;
3736     default:
3737       /* Not a parameter pack.  */
3738       break;
3739     }
3740 
3741   if (parameter_pack_p)
3742     {
3743       /* Add this parameter pack to the list.  */
3744       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3745     }
3746 
3747   if (TYPE_P (t))
3748     cp_walk_tree (&TYPE_CONTEXT (t),
3749 		  &find_parameter_packs_r, ppd, ppd->visited);
3750 
3751   /* This switch statement will return immediately if we don't find a
3752      parameter pack.  */
3753   switch (TREE_CODE (t))
3754     {
3755     case TEMPLATE_PARM_INDEX:
3756       return NULL_TREE;
3757 
3758     case BOUND_TEMPLATE_TEMPLATE_PARM:
3759       /* Check the template itself.  */
3760       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3761 		    &find_parameter_packs_r, ppd, ppd->visited);
3762       /* Check the template arguments.  */
3763       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3764 		    ppd->visited);
3765       *walk_subtrees = 0;
3766       return NULL_TREE;
3767 
3768     case TEMPLATE_TYPE_PARM:
3769     case TEMPLATE_TEMPLATE_PARM:
3770       return NULL_TREE;
3771 
3772     case PARM_DECL:
3773       return NULL_TREE;
3774 
3775     case DECL_EXPR:
3776       /* Ignore the declaration of a capture proxy for a parameter pack.  */
3777       if (is_capture_proxy (DECL_EXPR_DECL (t)))
3778 	*walk_subtrees = 0;
3779       return NULL_TREE;
3780 
3781     case RECORD_TYPE:
3782       if (TYPE_PTRMEMFUNC_P (t))
3783 	return NULL_TREE;
3784       /* Fall through.  */
3785 
3786     case UNION_TYPE:
3787     case ENUMERAL_TYPE:
3788       if (TYPE_TEMPLATE_INFO (t))
3789 	cp_walk_tree (&TYPE_TI_ARGS (t),
3790 		      &find_parameter_packs_r, ppd, ppd->visited);
3791 
3792       *walk_subtrees = 0;
3793       return NULL_TREE;
3794 
3795     case TEMPLATE_DECL:
3796       if (!DECL_TEMPLATE_TEMPLATE_PARM_P (t))
3797 	return NULL_TREE;
3798       gcc_fallthrough();
3799 
3800     case CONSTRUCTOR:
3801       cp_walk_tree (&TREE_TYPE (t),
3802 		    &find_parameter_packs_r, ppd, ppd->visited);
3803       return NULL_TREE;
3804 
3805     case TYPENAME_TYPE:
3806       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3807                    ppd, ppd->visited);
3808       *walk_subtrees = 0;
3809       return NULL_TREE;
3810 
3811     case TYPE_PACK_EXPANSION:
3812     case EXPR_PACK_EXPANSION:
3813       *walk_subtrees = 0;
3814       return NULL_TREE;
3815 
3816     case INTEGER_TYPE:
3817       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3818 		    ppd, ppd->visited);
3819       *walk_subtrees = 0;
3820       return NULL_TREE;
3821 
3822     case IDENTIFIER_NODE:
3823       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3824 		    ppd->visited);
3825       *walk_subtrees = 0;
3826       return NULL_TREE;
3827 
3828     case LAMBDA_EXPR:
3829       {
3830 	/* Look at explicit captures.  */
3831 	for (tree cap = LAMBDA_EXPR_CAPTURE_LIST (t);
3832 	     cap; cap = TREE_CHAIN (cap))
3833 	  cp_walk_tree (&TREE_VALUE (cap), &find_parameter_packs_r, ppd,
3834 			ppd->visited);
3835 	/* Since we defer implicit capture, look in the parms and body.  */
3836 	tree fn = lambda_function (t);
3837 	cp_walk_tree (&TREE_TYPE (fn), &find_parameter_packs_r, ppd,
3838 		      ppd->visited);
3839 	cp_walk_tree (&DECL_SAVED_TREE (fn), &find_parameter_packs_r, ppd,
3840 		      ppd->visited);
3841 	*walk_subtrees = 0;
3842 	return NULL_TREE;
3843       }
3844 
3845     case DECLTYPE_TYPE:
3846       {
3847 	/* When traversing a DECLTYPE_TYPE_EXPR, we need to set
3848 	   type_pack_expansion_p to false so that any placeholders
3849 	   within the expression don't get marked as parameter packs.  */
3850 	bool type_pack_expansion_p = ppd->type_pack_expansion_p;
3851 	ppd->type_pack_expansion_p = false;
3852 	cp_walk_tree (&DECLTYPE_TYPE_EXPR (t), &find_parameter_packs_r,
3853 		      ppd, ppd->visited);
3854 	ppd->type_pack_expansion_p = type_pack_expansion_p;
3855 	*walk_subtrees = 0;
3856 	return NULL_TREE;
3857       }
3858 
3859     case IF_STMT:
3860       cp_walk_tree (&IF_COND (t), &find_parameter_packs_r,
3861 		    ppd, ppd->visited);
3862       cp_walk_tree (&THEN_CLAUSE (t), &find_parameter_packs_r,
3863 		    ppd, ppd->visited);
3864       cp_walk_tree (&ELSE_CLAUSE (t), &find_parameter_packs_r,
3865 		    ppd, ppd->visited);
3866       /* Don't walk into IF_STMT_EXTRA_ARGS.  */
3867       *walk_subtrees = 0;
3868       return NULL_TREE;
3869 
3870     default:
3871       return NULL_TREE;
3872     }
3873 
3874   return NULL_TREE;
3875 }
3876 
3877 /* Determines if the expression or type T uses any parameter packs.  */
3878 bool
uses_parameter_packs(tree t)3879 uses_parameter_packs (tree t)
3880 {
3881   tree parameter_packs = NULL_TREE;
3882   struct find_parameter_pack_data ppd;
3883   ppd.parameter_packs = &parameter_packs;
3884   ppd.visited = new hash_set<tree>;
3885   ppd.type_pack_expansion_p = false;
3886   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3887   delete ppd.visited;
3888   return parameter_packs != NULL_TREE;
3889 }
3890 
3891 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3892    representation a base-class initializer into a parameter pack
3893    expansion. If all goes well, the resulting node will be an
3894    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3895    respectively.  */
3896 tree
make_pack_expansion(tree arg,tsubst_flags_t complain)3897 make_pack_expansion (tree arg, tsubst_flags_t complain)
3898 {
3899   tree result;
3900   tree parameter_packs = NULL_TREE;
3901   bool for_types = false;
3902   struct find_parameter_pack_data ppd;
3903 
3904   if (!arg || arg == error_mark_node)
3905     return arg;
3906 
3907   if (TREE_CODE (arg) == TREE_LIST && TREE_PURPOSE (arg))
3908     {
3909       /* A TREE_LIST with a non-null TREE_PURPOSE is for a base
3910          class initializer.  In this case, the TREE_PURPOSE will be a
3911          _TYPE node (representing the base class expansion we're
3912          initializing) and the TREE_VALUE will be a TREE_LIST
3913          containing the initialization arguments.
3914 
3915          The resulting expansion looks somewhat different from most
3916          expansions. Rather than returning just one _EXPANSION, we
3917          return a TREE_LIST whose TREE_PURPOSE is a
3918          TYPE_PACK_EXPANSION containing the bases that will be
3919          initialized.  The TREE_VALUE will be identical to the
3920          original TREE_VALUE, which is a list of arguments that will
3921          be passed to each base.  We do not introduce any new pack
3922          expansion nodes into the TREE_VALUE (although it is possible
3923          that some already exist), because the TREE_PURPOSE and
3924          TREE_VALUE all need to be expanded together with the same
3925          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3926          resulting TREE_PURPOSE will mention the parameter packs in
3927          both the bases and the arguments to the bases.  */
3928       tree purpose;
3929       tree value;
3930       tree parameter_packs = NULL_TREE;
3931 
3932       /* Determine which parameter packs will be used by the base
3933          class expansion.  */
3934       ppd.visited = new hash_set<tree>;
3935       ppd.parameter_packs = &parameter_packs;
3936       ppd.type_pack_expansion_p = false;
3937       gcc_assert (TYPE_P (TREE_PURPOSE (arg)));
3938       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3939                     &ppd, ppd.visited);
3940 
3941       if (parameter_packs == NULL_TREE)
3942         {
3943 	  if (complain & tf_error)
3944 	    error ("base initializer expansion %qT contains no parameter packs",
3945 		   arg);
3946           delete ppd.visited;
3947           return error_mark_node;
3948         }
3949 
3950       if (TREE_VALUE (arg) != void_type_node)
3951         {
3952           /* Collect the sets of parameter packs used in each of the
3953              initialization arguments.  */
3954           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3955             {
3956               /* Determine which parameter packs will be expanded in this
3957                  argument.  */
3958               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3959                             &ppd, ppd.visited);
3960             }
3961         }
3962 
3963       delete ppd.visited;
3964 
3965       /* Create the pack expansion type for the base type.  */
3966       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3967       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3968       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3969       PACK_EXPANSION_LOCAL_P (purpose) = at_function_scope_p ();
3970 
3971       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3972 	 they will rarely be compared to anything.  */
3973       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3974 
3975       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3976     }
3977 
3978   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3979     for_types = true;
3980 
3981   /* Build the PACK_EXPANSION_* node.  */
3982   result = for_types
3983      ? cxx_make_type (TYPE_PACK_EXPANSION)
3984      : make_node (EXPR_PACK_EXPANSION);
3985   SET_PACK_EXPANSION_PATTERN (result, arg);
3986   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3987     {
3988       /* Propagate type and const-expression information.  */
3989       TREE_TYPE (result) = TREE_TYPE (arg);
3990       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3991       /* Mark this read now, since the expansion might be length 0.  */
3992       mark_exp_read (arg);
3993     }
3994   else
3995     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3996        they will rarely be compared to anything.  */
3997     SET_TYPE_STRUCTURAL_EQUALITY (result);
3998 
3999   /* Determine which parameter packs will be expanded.  */
4000   ppd.parameter_packs = &parameter_packs;
4001   ppd.visited = new hash_set<tree>;
4002   ppd.type_pack_expansion_p = TYPE_P (arg);
4003   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
4004   delete ppd.visited;
4005 
4006   /* Make sure we found some parameter packs.  */
4007   if (parameter_packs == NULL_TREE)
4008     {
4009       if (complain & tf_error)
4010 	{
4011 	  if (TYPE_P (arg))
4012 	    error ("expansion pattern %qT contains no parameter packs", arg);
4013 	  else
4014 	    error ("expansion pattern %qE contains no parameter packs", arg);
4015 	}
4016       return error_mark_node;
4017     }
4018   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
4019 
4020   PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
4021 
4022   return result;
4023 }
4024 
4025 /* Checks T for any "bare" parameter packs, which have not yet been
4026    expanded, and issues an error if any are found. This operation can
4027    only be done on full expressions or types (e.g., an expression
4028    statement, "if" condition, etc.), because we could have expressions like:
4029 
4030      foo(f(g(h(args)))...)
4031 
4032    where "args" is a parameter pack. check_for_bare_parameter_packs
4033    should not be called for the subexpressions args, h(args),
4034    g(h(args)), or f(g(h(args))), because we would produce erroneous
4035    error messages.
4036 
4037    Returns TRUE and emits an error if there were bare parameter packs,
4038    returns FALSE otherwise.  */
4039 bool
check_for_bare_parameter_packs(tree t,location_t loc)4040 check_for_bare_parameter_packs (tree t, location_t loc /* = UNKNOWN_LOCATION */)
4041 {
4042   tree parameter_packs = NULL_TREE;
4043   struct find_parameter_pack_data ppd;
4044 
4045   if (!processing_template_decl || !t || t == error_mark_node)
4046     return false;
4047 
4048   /* A lambda might use a parameter pack from the containing context.  */
4049   if (current_class_type && LAMBDA_TYPE_P (current_class_type)
4050       && CLASSTYPE_TEMPLATE_INFO (current_class_type))
4051     return false;
4052 
4053   if (TREE_CODE (t) == TYPE_DECL)
4054     t = TREE_TYPE (t);
4055 
4056   ppd.parameter_packs = &parameter_packs;
4057   ppd.visited = new hash_set<tree>;
4058   ppd.type_pack_expansion_p = false;
4059   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
4060   delete ppd.visited;
4061 
4062   if (parameter_packs)
4063     {
4064       if (loc == UNKNOWN_LOCATION)
4065 	loc = cp_expr_loc_or_loc (t, input_location);
4066       error_at (loc, "parameter packs not expanded with %<...%>:");
4067       while (parameter_packs)
4068         {
4069           tree pack = TREE_VALUE (parameter_packs);
4070           tree name = NULL_TREE;
4071 
4072           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
4073               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
4074             name = TYPE_NAME (pack);
4075           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
4076             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
4077 	  else if (TREE_CODE (pack) == CALL_EXPR)
4078 	    name = DECL_NAME (CALL_EXPR_FN (pack));
4079           else
4080             name = DECL_NAME (pack);
4081 
4082 	  if (name)
4083 	    inform (loc, "        %qD", name);
4084 	  else
4085 	    inform (loc, "        <anonymous>");
4086 
4087           parameter_packs = TREE_CHAIN (parameter_packs);
4088         }
4089 
4090       return true;
4091     }
4092 
4093   return false;
4094 }
4095 
4096 /* Expand any parameter packs that occur in the template arguments in
4097    ARGS.  */
4098 tree
expand_template_argument_pack(tree args)4099 expand_template_argument_pack (tree args)
4100 {
4101   if (args == error_mark_node)
4102     return error_mark_node;
4103 
4104   tree result_args = NULL_TREE;
4105   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
4106   int num_result_args = -1;
4107   int non_default_args_count = -1;
4108 
4109   /* First, determine if we need to expand anything, and the number of
4110      slots we'll need.  */
4111   for (in_arg = 0; in_arg < nargs; ++in_arg)
4112     {
4113       tree arg = TREE_VEC_ELT (args, in_arg);
4114       if (arg == NULL_TREE)
4115 	return args;
4116       if (ARGUMENT_PACK_P (arg))
4117         {
4118           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
4119           if (num_result_args < 0)
4120             num_result_args = in_arg + num_packed;
4121           else
4122             num_result_args += num_packed;
4123         }
4124       else
4125         {
4126           if (num_result_args >= 0)
4127             num_result_args++;
4128         }
4129     }
4130 
4131   /* If no expansion is necessary, we're done.  */
4132   if (num_result_args < 0)
4133     return args;
4134 
4135   /* Expand arguments.  */
4136   result_args = make_tree_vec (num_result_args);
4137   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
4138     non_default_args_count =
4139       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
4140   for (in_arg = 0; in_arg < nargs; ++in_arg)
4141     {
4142       tree arg = TREE_VEC_ELT (args, in_arg);
4143       if (ARGUMENT_PACK_P (arg))
4144         {
4145           tree packed = ARGUMENT_PACK_ARGS (arg);
4146           int i, num_packed = TREE_VEC_LENGTH (packed);
4147           for (i = 0; i < num_packed; ++i, ++out_arg)
4148             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
4149 	  if (non_default_args_count > 0)
4150 	    non_default_args_count += num_packed - 1;
4151         }
4152       else
4153         {
4154           TREE_VEC_ELT (result_args, out_arg) = arg;
4155           ++out_arg;
4156         }
4157     }
4158   if (non_default_args_count >= 0)
4159     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
4160   return result_args;
4161 }
4162 
4163 /* Checks if DECL shadows a template parameter.
4164 
4165    [temp.local]: A template-parameter shall not be redeclared within its
4166    scope (including nested scopes).
4167 
4168    Emits an error and returns TRUE if the DECL shadows a parameter,
4169    returns FALSE otherwise.  */
4170 
4171 bool
check_template_shadow(tree decl)4172 check_template_shadow (tree decl)
4173 {
4174   tree olddecl;
4175 
4176   /* If we're not in a template, we can't possibly shadow a template
4177      parameter.  */
4178   if (!current_template_parms)
4179     return true;
4180 
4181   /* Figure out what we're shadowing.  */
4182   decl = OVL_FIRST (decl);
4183   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
4184 
4185   /* If there's no previous binding for this name, we're not shadowing
4186      anything, let alone a template parameter.  */
4187   if (!olddecl)
4188     return true;
4189 
4190   /* If we're not shadowing a template parameter, we're done.  Note
4191      that OLDDECL might be an OVERLOAD (or perhaps even an
4192      ERROR_MARK), so we can't just blithely assume it to be a _DECL
4193      node.  */
4194   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
4195     return true;
4196 
4197   /* We check for decl != olddecl to avoid bogus errors for using a
4198      name inside a class.  We check TPFI to avoid duplicate errors for
4199      inline member templates.  */
4200   if (decl == olddecl
4201       || (DECL_TEMPLATE_PARM_P (decl)
4202 	  && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
4203     return true;
4204 
4205   /* Don't complain about the injected class name, as we've already
4206      complained about the class itself.  */
4207   if (DECL_SELF_REFERENCE_P (decl))
4208     return false;
4209 
4210   if (DECL_TEMPLATE_PARM_P (decl))
4211     error ("declaration of template parameter %q+D shadows "
4212 	   "template parameter", decl);
4213   else
4214     error ("declaration of %q+#D shadows template parameter", decl);
4215   inform (DECL_SOURCE_LOCATION (olddecl),
4216 	  "template parameter %qD declared here", olddecl);
4217   return false;
4218 }
4219 
4220 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
4221    ORIG_LEVEL, DECL, and TYPE.  */
4222 
4223 static tree
build_template_parm_index(int index,int level,int orig_level,tree decl,tree type)4224 build_template_parm_index (int index,
4225 			   int level,
4226 			   int orig_level,
4227 			   tree decl,
4228 			   tree type)
4229 {
4230   tree t = make_node (TEMPLATE_PARM_INDEX);
4231   TEMPLATE_PARM_IDX (t) = index;
4232   TEMPLATE_PARM_LEVEL (t) = level;
4233   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
4234   TEMPLATE_PARM_DECL (t) = decl;
4235   TREE_TYPE (t) = type;
4236   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
4237   TREE_READONLY (t) = TREE_READONLY (decl);
4238 
4239   return t;
4240 }
4241 
4242 /* Find the canonical type parameter for the given template type
4243    parameter.  Returns the canonical type parameter, which may be TYPE
4244    if no such parameter existed.  */
4245 
4246 static tree
canonical_type_parameter(tree type)4247 canonical_type_parameter (tree type)
4248 {
4249   tree list;
4250   int idx = TEMPLATE_TYPE_IDX (type);
4251   if (!canonical_template_parms)
4252     vec_alloc (canonical_template_parms, idx + 1);
4253 
4254   if (canonical_template_parms->length () <= (unsigned) idx)
4255     vec_safe_grow_cleared (canonical_template_parms, idx + 1);
4256 
4257   list = (*canonical_template_parms)[idx];
4258   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
4259     list = TREE_CHAIN (list);
4260 
4261   if (list)
4262     return TREE_VALUE (list);
4263   else
4264     {
4265       (*canonical_template_parms)[idx]
4266 	= tree_cons (NULL_TREE, type, (*canonical_template_parms)[idx]);
4267       return type;
4268     }
4269 }
4270 
4271 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
4272    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
4273    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
4274    new one is created.  */
4275 
4276 static tree
reduce_template_parm_level(tree index,tree type,int levels,tree args,tsubst_flags_t complain)4277 reduce_template_parm_level (tree index, tree type, int levels, tree args,
4278 			    tsubst_flags_t complain)
4279 {
4280   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
4281       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
4282 	  != TEMPLATE_PARM_LEVEL (index) - levels)
4283       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
4284     {
4285       tree orig_decl = TEMPLATE_PARM_DECL (index);
4286       tree decl, t;
4287 
4288       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
4289 			 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
4290       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
4291       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
4292       DECL_ARTIFICIAL (decl) = 1;
4293       SET_DECL_TEMPLATE_PARM_P (decl);
4294 
4295       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
4296 				     TEMPLATE_PARM_LEVEL (index) - levels,
4297 				     TEMPLATE_PARM_ORIG_LEVEL (index),
4298 				     decl, type);
4299       TEMPLATE_PARM_DESCENDANTS (index) = t;
4300       TEMPLATE_PARM_PARAMETER_PACK (t)
4301 	= TEMPLATE_PARM_PARAMETER_PACK (index);
4302 
4303 	/* Template template parameters need this.  */
4304       if (TREE_CODE (decl) == TEMPLATE_DECL)
4305 	{
4306 	  DECL_TEMPLATE_RESULT (decl)
4307 	    = build_decl (DECL_SOURCE_LOCATION (decl),
4308 			  TYPE_DECL, DECL_NAME (decl), type);
4309 	  DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (decl)) = true;
4310 	  DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
4311 	    (DECL_TEMPLATE_PARMS (orig_decl), args, complain);
4312 	}
4313     }
4314 
4315   return TEMPLATE_PARM_DESCENDANTS (index);
4316 }
4317 
4318 /* Process information from new template parameter PARM and append it
4319    to the LIST being built.  This new parameter is a non-type
4320    parameter iff IS_NON_TYPE is true. This new parameter is a
4321    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
4322    is in PARM_LOC.  */
4323 
4324 tree
process_template_parm(tree list,location_t parm_loc,tree parm,bool is_non_type,bool is_parameter_pack)4325 process_template_parm (tree list, location_t parm_loc, tree parm,
4326 		       bool is_non_type, bool is_parameter_pack)
4327 {
4328   tree decl = 0;
4329   int idx = 0;
4330 
4331   gcc_assert (TREE_CODE (parm) == TREE_LIST);
4332   tree defval = TREE_PURPOSE (parm);
4333   tree constr = TREE_TYPE (parm);
4334 
4335   if (list)
4336     {
4337       tree p = tree_last (list);
4338 
4339       if (p && TREE_VALUE (p) != error_mark_node)
4340         {
4341           p = TREE_VALUE (p);
4342           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
4343             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
4344           else
4345             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
4346         }
4347 
4348       ++idx;
4349     }
4350 
4351   if (is_non_type)
4352     {
4353       parm = TREE_VALUE (parm);
4354 
4355       SET_DECL_TEMPLATE_PARM_P (parm);
4356 
4357       if (TREE_TYPE (parm) != error_mark_node)
4358 	{
4359 	  /* [temp.param]
4360 
4361 	     The top-level cv-qualifiers on the template-parameter are
4362 	     ignored when determining its type.  */
4363 	  TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
4364 	  if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
4365 	    TREE_TYPE (parm) = error_mark_node;
4366 	  else if (uses_parameter_packs (TREE_TYPE (parm))
4367 		   && !is_parameter_pack
4368 		   /* If we're in a nested template parameter list, the template
4369 		      template parameter could be a parameter pack.  */
4370 		   && processing_template_parmlist == 1)
4371 	    {
4372 	      /* This template parameter is not a parameter pack, but it
4373 		 should be. Complain about "bare" parameter packs.  */
4374 	      check_for_bare_parameter_packs (TREE_TYPE (parm));
4375 
4376 	      /* Recover by calling this a parameter pack.  */
4377 	      is_parameter_pack = true;
4378 	    }
4379 	}
4380 
4381       /* A template parameter is not modifiable.  */
4382       TREE_CONSTANT (parm) = 1;
4383       TREE_READONLY (parm) = 1;
4384       decl = build_decl (parm_loc,
4385 			 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
4386       TREE_CONSTANT (decl) = 1;
4387       TREE_READONLY (decl) = 1;
4388       DECL_INITIAL (parm) = DECL_INITIAL (decl)
4389 	= build_template_parm_index (idx, processing_template_decl,
4390 				     processing_template_decl,
4391 				     decl, TREE_TYPE (parm));
4392 
4393       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4394 	= is_parameter_pack;
4395     }
4396   else
4397     {
4398       tree t;
4399       parm = TREE_VALUE (TREE_VALUE (parm));
4400 
4401       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
4402 	{
4403 	  t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
4404 	  /* This is for distinguishing between real templates and template
4405 	     template parameters */
4406 	  TREE_TYPE (parm) = t;
4407 	  TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
4408 	  decl = parm;
4409 	}
4410       else
4411 	{
4412 	  t = cxx_make_type (TEMPLATE_TYPE_PARM);
4413 	  /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
4414 	  decl = build_decl (parm_loc,
4415 			     TYPE_DECL, parm, t);
4416 	}
4417 
4418       TYPE_NAME (t) = decl;
4419       TYPE_STUB_DECL (t) = decl;
4420       parm = decl;
4421       TEMPLATE_TYPE_PARM_INDEX (t)
4422 	= build_template_parm_index (idx, processing_template_decl,
4423 				     processing_template_decl,
4424 				     decl, TREE_TYPE (parm));
4425       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
4426       TYPE_CANONICAL (t) = canonical_type_parameter (t);
4427     }
4428   DECL_ARTIFICIAL (decl) = 1;
4429   SET_DECL_TEMPLATE_PARM_P (decl);
4430 
4431   /* Build requirements for the type/template parameter.
4432      This must be done after SET_DECL_TEMPLATE_PARM_P or
4433      process_template_parm could fail. */
4434   tree reqs = finish_shorthand_constraint (parm, constr);
4435 
4436   decl = pushdecl (decl);
4437   if (!is_non_type)
4438     parm = decl;
4439 
4440   /* Build the parameter node linking the parameter declaration,
4441      its default argument (if any), and its constraints (if any). */
4442   parm = build_tree_list (defval, parm);
4443   TEMPLATE_PARM_CONSTRAINTS (parm) = reqs;
4444 
4445   return chainon (list, parm);
4446 }
4447 
4448 /* The end of a template parameter list has been reached.  Process the
4449    tree list into a parameter vector, converting each parameter into a more
4450    useful form.	 Type parameters are saved as IDENTIFIER_NODEs, and others
4451    as PARM_DECLs.  */
4452 
4453 tree
end_template_parm_list(tree parms)4454 end_template_parm_list (tree parms)
4455 {
4456   int nparms;
4457   tree parm, next;
4458   tree saved_parmlist = make_tree_vec (list_length (parms));
4459 
4460   /* Pop the dummy parameter level and add the real one.  */
4461   current_template_parms = TREE_CHAIN (current_template_parms);
4462 
4463   current_template_parms
4464     = tree_cons (size_int (processing_template_decl),
4465 		 saved_parmlist, current_template_parms);
4466 
4467   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
4468     {
4469       next = TREE_CHAIN (parm);
4470       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
4471       TREE_CHAIN (parm) = NULL_TREE;
4472     }
4473 
4474   --processing_template_parmlist;
4475 
4476   return saved_parmlist;
4477 }
4478 
4479 // Explicitly indicate the end of the template parameter list. We assume
4480 // that the current template parameters have been constructed and/or
4481 // managed explicitly, as when creating new template template parameters
4482 // from a shorthand constraint.
4483 void
end_template_parm_list()4484 end_template_parm_list ()
4485 {
4486   --processing_template_parmlist;
4487 }
4488 
4489 /* end_template_decl is called after a template declaration is seen.  */
4490 
4491 void
end_template_decl(void)4492 end_template_decl (void)
4493 {
4494   reset_specialization ();
4495 
4496   if (! processing_template_decl)
4497     return;
4498 
4499   /* This matches the pushlevel in begin_template_parm_list.  */
4500   finish_scope ();
4501 
4502   --processing_template_decl;
4503   current_template_parms = TREE_CHAIN (current_template_parms);
4504 }
4505 
4506 /* Takes a TREE_LIST representing a template parameter and convert it
4507    into an argument suitable to be passed to the type substitution
4508    functions.  Note that If the TREE_LIST contains an error_mark
4509    node, the returned argument is error_mark_node.  */
4510 
4511 tree
template_parm_to_arg(tree t)4512 template_parm_to_arg (tree t)
4513 {
4514 
4515   if (t == NULL_TREE
4516       || TREE_CODE (t) != TREE_LIST)
4517     return t;
4518 
4519   if (error_operand_p (TREE_VALUE (t)))
4520     return error_mark_node;
4521 
4522   t = TREE_VALUE (t);
4523 
4524   if (TREE_CODE (t) == TYPE_DECL
4525       || TREE_CODE (t) == TEMPLATE_DECL)
4526     {
4527       t = TREE_TYPE (t);
4528 
4529       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4530 	{
4531 	  /* Turn this argument into a TYPE_ARGUMENT_PACK
4532 	     with a single element, which expands T.  */
4533 	  tree vec = make_tree_vec (1);
4534 	  if (CHECKING_P)
4535 	    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
4536 
4537 	  TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4538 
4539 	  t = cxx_make_type (TYPE_ARGUMENT_PACK);
4540 	  SET_ARGUMENT_PACK_ARGS (t, vec);
4541 	}
4542     }
4543   else
4544     {
4545       t = DECL_INITIAL (t);
4546 
4547       if (TEMPLATE_PARM_PARAMETER_PACK (t))
4548 	{
4549 	  /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4550 	     with a single element, which expands T.  */
4551 	  tree vec = make_tree_vec (1);
4552 	  if (CHECKING_P)
4553 	    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
4554 
4555 	  t = convert_from_reference (t);
4556 	  TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4557 
4558 	  t  = make_node (NONTYPE_ARGUMENT_PACK);
4559 	  SET_ARGUMENT_PACK_ARGS (t, vec);
4560 	}
4561       else
4562 	t = convert_from_reference (t);
4563     }
4564   return t;
4565 }
4566 
4567 /* Given a single level of template parameters (a TREE_VEC), return it
4568    as a set of template arguments.  */
4569 
4570 static tree
template_parms_level_to_args(tree parms)4571 template_parms_level_to_args (tree parms)
4572 {
4573   tree a = copy_node (parms);
4574   TREE_TYPE (a) = NULL_TREE;
4575   for (int i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4576     TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4577 
4578   if (CHECKING_P)
4579     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4580 
4581   return a;
4582 }
4583 
4584 /* Given a set of template parameters, return them as a set of template
4585    arguments.  The template parameters are represented as a TREE_VEC, in
4586    the form documented in cp-tree.h for template arguments.  */
4587 
4588 static tree
template_parms_to_args(tree parms)4589 template_parms_to_args (tree parms)
4590 {
4591   tree header;
4592   tree args = NULL_TREE;
4593   int length = TMPL_PARMS_DEPTH (parms);
4594   int l = length;
4595 
4596   /* If there is only one level of template parameters, we do not
4597      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4598      TREE_VEC containing the arguments.  */
4599   if (length > 1)
4600     args = make_tree_vec (length);
4601 
4602   for (header = parms; header; header = TREE_CHAIN (header))
4603     {
4604       tree a = template_parms_level_to_args (TREE_VALUE (header));
4605 
4606       if (length > 1)
4607 	TREE_VEC_ELT (args, --l) = a;
4608       else
4609 	args = a;
4610     }
4611 
4612   return args;
4613 }
4614 
4615 /* Within the declaration of a template, return the currently active
4616    template parameters as an argument TREE_VEC.  */
4617 
4618 static tree
current_template_args(void)4619 current_template_args (void)
4620 {
4621   return template_parms_to_args (current_template_parms);
4622 }
4623 
4624 /* Update the declared TYPE by doing any lookups which were thought to be
4625    dependent, but are not now that we know the SCOPE of the declarator.  */
4626 
4627 tree
maybe_update_decl_type(tree orig_type,tree scope)4628 maybe_update_decl_type (tree orig_type, tree scope)
4629 {
4630   tree type = orig_type;
4631 
4632   if (type == NULL_TREE)
4633     return type;
4634 
4635   if (TREE_CODE (orig_type) == TYPE_DECL)
4636     type = TREE_TYPE (type);
4637 
4638   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4639       && dependent_type_p (type)
4640       /* Don't bother building up the args in this case.  */
4641       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4642     {
4643       /* tsubst in the args corresponding to the template parameters,
4644 	 including auto if present.  Most things will be unchanged, but
4645 	 make_typename_type and tsubst_qualified_id will resolve
4646 	 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4647       tree args = current_template_args ();
4648       tree auto_node = type_uses_auto (type);
4649       tree pushed;
4650       if (auto_node)
4651 	{
4652 	  tree auto_vec = make_tree_vec (1);
4653 	  TREE_VEC_ELT (auto_vec, 0) = auto_node;
4654 	  args = add_to_template_args (args, auto_vec);
4655 	}
4656       pushed = push_scope (scope);
4657       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4658       if (pushed)
4659 	pop_scope (scope);
4660     }
4661 
4662   if (type == error_mark_node)
4663     return orig_type;
4664 
4665   if (TREE_CODE (orig_type) == TYPE_DECL)
4666     {
4667       if (same_type_p (type, TREE_TYPE (orig_type)))
4668 	type = orig_type;
4669       else
4670 	type = TYPE_NAME (type);
4671     }
4672   return type;
4673 }
4674 
4675 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4676    template PARMS and constraints, CONSTR.  If MEMBER_TEMPLATE_P is true,
4677    the new  template is a member template. */
4678 
4679 static tree
build_template_decl(tree decl,tree parms,bool member_template_p)4680 build_template_decl (tree decl, tree parms, bool member_template_p)
4681 {
4682   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4683   SET_DECL_LANGUAGE (tmpl, DECL_LANGUAGE (decl));
4684   DECL_TEMPLATE_PARMS (tmpl) = parms;
4685   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4686   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4687   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4688 
4689   return tmpl;
4690 }
4691 
4692 struct template_parm_data
4693 {
4694   /* The level of the template parameters we are currently
4695      processing.  */
4696   int level;
4697 
4698   /* The index of the specialization argument we are currently
4699      processing.  */
4700   int current_arg;
4701 
4702   /* An array whose size is the number of template parameters.  The
4703      elements are nonzero if the parameter has been used in any one
4704      of the arguments processed so far.  */
4705   int* parms;
4706 
4707   /* An array whose size is the number of template arguments.  The
4708      elements are nonzero if the argument makes use of template
4709      parameters of this level.  */
4710   int* arg_uses_template_parms;
4711 };
4712 
4713 /* Subroutine of push_template_decl used to see if each template
4714    parameter in a partial specialization is used in the explicit
4715    argument list.  If T is of the LEVEL given in DATA (which is
4716    treated as a template_parm_data*), then DATA->PARMS is marked
4717    appropriately.  */
4718 
4719 static int
mark_template_parm(tree t,void * data)4720 mark_template_parm (tree t, void* data)
4721 {
4722   int level;
4723   int idx;
4724   struct template_parm_data* tpd = (struct template_parm_data*) data;
4725 
4726   template_parm_level_and_index (t, &level, &idx);
4727 
4728   if (level == tpd->level)
4729     {
4730       tpd->parms[idx] = 1;
4731       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4732     }
4733 
4734   /* In C++17 the type of a non-type argument is a deduced context.  */
4735   if (cxx_dialect >= cxx17
4736       && TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4737     for_each_template_parm (TREE_TYPE (t),
4738 			    &mark_template_parm,
4739 			    data,
4740 			    NULL,
4741 			    /*include_nondeduced_p=*/false);
4742 
4743   /* Return zero so that for_each_template_parm will continue the
4744      traversal of the tree; we want to mark *every* template parm.  */
4745   return 0;
4746 }
4747 
4748 /* Process the partial specialization DECL.  */
4749 
4750 static tree
process_partial_specialization(tree decl)4751 process_partial_specialization (tree decl)
4752 {
4753   tree type = TREE_TYPE (decl);
4754   tree tinfo = get_template_info (decl);
4755   tree maintmpl = TI_TEMPLATE (tinfo);
4756   tree specargs = TI_ARGS (tinfo);
4757   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4758   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4759   tree inner_parms;
4760   tree inst;
4761   int nargs = TREE_VEC_LENGTH (inner_args);
4762   int ntparms;
4763   int  i;
4764   bool did_error_intro = false;
4765   struct template_parm_data tpd;
4766   struct template_parm_data tpd2;
4767 
4768   gcc_assert (current_template_parms);
4769 
4770   /* A concept cannot be specialized.  */
4771   if (flag_concepts && variable_concept_p (maintmpl))
4772     {
4773       error ("specialization of variable concept %q#D", maintmpl);
4774       return error_mark_node;
4775     }
4776 
4777   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4778   ntparms = TREE_VEC_LENGTH (inner_parms);
4779 
4780   /* We check that each of the template parameters given in the
4781      partial specialization is used in the argument list to the
4782      specialization.  For example:
4783 
4784        template <class T> struct S;
4785        template <class T> struct S<T*>;
4786 
4787      The second declaration is OK because `T*' uses the template
4788      parameter T, whereas
4789 
4790        template <class T> struct S<int>;
4791 
4792      is no good.  Even trickier is:
4793 
4794        template <class T>
4795        struct S1
4796        {
4797 	  template <class U>
4798 	  struct S2;
4799 	  template <class U>
4800 	  struct S2<T>;
4801        };
4802 
4803      The S2<T> declaration is actually invalid; it is a
4804      full-specialization.  Of course,
4805 
4806 	  template <class U>
4807 	  struct S2<T (*)(U)>;
4808 
4809      or some such would have been OK.  */
4810   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4811   tpd.parms = XALLOCAVEC (int, ntparms);
4812   memset (tpd.parms, 0, sizeof (int) * ntparms);
4813 
4814   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4815   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4816   for (i = 0; i < nargs; ++i)
4817     {
4818       tpd.current_arg = i;
4819       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4820 			      &mark_template_parm,
4821 			      &tpd,
4822 			      NULL,
4823 			      /*include_nondeduced_p=*/false);
4824     }
4825   for (i = 0; i < ntparms; ++i)
4826     if (tpd.parms[i] == 0)
4827       {
4828 	/* One of the template parms was not used in a deduced context in the
4829 	   specialization.  */
4830 	if (!did_error_intro)
4831 	  {
4832 	    error ("template parameters not deducible in "
4833 		   "partial specialization:");
4834 	    did_error_intro = true;
4835 	  }
4836 
4837 	inform (input_location, "        %qD",
4838 		TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4839       }
4840 
4841   if (did_error_intro)
4842     return error_mark_node;
4843 
4844   /* [temp.class.spec]
4845 
4846      The argument list of the specialization shall not be identical to
4847      the implicit argument list of the primary template.  */
4848   tree main_args
4849     = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (maintmpl)));
4850   if (comp_template_args (inner_args, INNERMOST_TEMPLATE_ARGS (main_args))
4851       && (!flag_concepts
4852 	  || !strictly_subsumes (current_template_constraints (),
4853 				 get_constraints (maintmpl))))
4854     {
4855       if (!flag_concepts)
4856         error ("partial specialization %q+D does not specialize "
4857 	       "any template arguments; to define the primary template, "
4858 	       "remove the template argument list", decl);
4859       else
4860         error ("partial specialization %q+D does not specialize any "
4861 	       "template arguments and is not more constrained than "
4862 	       "the primary template; to define the primary template, "
4863 	       "remove the template argument list", decl);
4864       inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4865     }
4866 
4867   /* A partial specialization that replaces multiple parameters of the
4868      primary template with a pack expansion is less specialized for those
4869      parameters.  */
4870   if (nargs < DECL_NTPARMS (maintmpl))
4871     {
4872       error ("partial specialization is not more specialized than the "
4873 	     "primary template because it replaces multiple parameters "
4874 	     "with a pack expansion");
4875       inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4876       /* Avoid crash in process_partial_specialization.  */
4877       return decl;
4878     }
4879 
4880   /* If we aren't in a dependent class, we can actually try deduction.  */
4881   else if (tpd.level == 1
4882 	   /* FIXME we should be able to handle a partial specialization of a
4883 	      partial instantiation, but currently we can't (c++/41727).  */
4884 	   && TMPL_ARGS_DEPTH (specargs) == 1
4885 	   && !get_partial_spec_bindings (maintmpl, maintmpl, specargs))
4886     {
4887       auto_diagnostic_group d;
4888       if (permerror (input_location, "partial specialization %qD is not "
4889 		     "more specialized than", decl))
4890 	inform (DECL_SOURCE_LOCATION (maintmpl), "primary template %qD",
4891 		maintmpl);
4892     }
4893 
4894   /* [temp.class.spec]
4895 
4896      A partially specialized non-type argument expression shall not
4897      involve template parameters of the partial specialization except
4898      when the argument expression is a simple identifier.
4899 
4900      The type of a template parameter corresponding to a specialized
4901      non-type argument shall not be dependent on a parameter of the
4902      specialization.
4903 
4904      Also, we verify that pack expansions only occur at the
4905      end of the argument list.  */
4906   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4907   tpd2.parms = 0;
4908   for (i = 0; i < nargs; ++i)
4909     {
4910       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4911       tree arg = TREE_VEC_ELT (inner_args, i);
4912       tree packed_args = NULL_TREE;
4913       int j, len = 1;
4914 
4915       if (ARGUMENT_PACK_P (arg))
4916         {
4917           /* Extract the arguments from the argument pack. We'll be
4918              iterating over these in the following loop.  */
4919           packed_args = ARGUMENT_PACK_ARGS (arg);
4920           len = TREE_VEC_LENGTH (packed_args);
4921         }
4922 
4923       for (j = 0; j < len; j++)
4924         {
4925           if (packed_args)
4926             /* Get the Jth argument in the parameter pack.  */
4927             arg = TREE_VEC_ELT (packed_args, j);
4928 
4929           if (PACK_EXPANSION_P (arg))
4930             {
4931               /* Pack expansions must come at the end of the
4932                  argument list.  */
4933               if ((packed_args && j < len - 1)
4934                   || (!packed_args && i < nargs - 1))
4935                 {
4936                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4937                     error ("parameter pack argument %qE must be at the "
4938 			   "end of the template argument list", arg);
4939                   else
4940                     error ("parameter pack argument %qT must be at the "
4941 			   "end of the template argument list", arg);
4942                 }
4943             }
4944 
4945           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4946             /* We only care about the pattern.  */
4947             arg = PACK_EXPANSION_PATTERN (arg);
4948 
4949           if (/* These first two lines are the `non-type' bit.  */
4950               !TYPE_P (arg)
4951               && TREE_CODE (arg) != TEMPLATE_DECL
4952               /* This next two lines are the `argument expression is not just a
4953                  simple identifier' condition and also the `specialized
4954                  non-type argument' bit.  */
4955               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
4956 	      && !(REFERENCE_REF_P (arg)
4957 		   && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
4958             {
4959               if ((!packed_args && tpd.arg_uses_template_parms[i])
4960                   || (packed_args && uses_template_parms (arg)))
4961                 error ("template argument %qE involves template parameter(s)",
4962                        arg);
4963               else
4964                 {
4965                   /* Look at the corresponding template parameter,
4966                      marking which template parameters its type depends
4967                      upon.  */
4968                   tree type = TREE_TYPE (parm);
4969 
4970                   if (!tpd2.parms)
4971                     {
4972                       /* We haven't yet initialized TPD2.  Do so now.  */
4973                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4974                       /* The number of parameters here is the number in the
4975                          main template, which, as checked in the assertion
4976                          above, is NARGS.  */
4977                       tpd2.parms = XALLOCAVEC (int, nargs);
4978                       tpd2.level =
4979                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4980                     }
4981 
4982                   /* Mark the template parameters.  But this time, we're
4983                      looking for the template parameters of the main
4984                      template, not in the specialization.  */
4985                   tpd2.current_arg = i;
4986                   tpd2.arg_uses_template_parms[i] = 0;
4987                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4988                   for_each_template_parm (type,
4989                                           &mark_template_parm,
4990                                           &tpd2,
4991                                           NULL,
4992 					  /*include_nondeduced_p=*/false);
4993 
4994                   if (tpd2.arg_uses_template_parms [i])
4995                     {
4996                       /* The type depended on some template parameters.
4997                          If they are fully specialized in the
4998                          specialization, that's OK.  */
4999                       int j;
5000                       int count = 0;
5001                       for (j = 0; j < nargs; ++j)
5002                         if (tpd2.parms[j] != 0
5003                             && tpd.arg_uses_template_parms [j])
5004                           ++count;
5005                       if (count != 0)
5006                         error_n (input_location, count,
5007                                  "type %qT of template argument %qE depends "
5008                                  "on a template parameter",
5009                                  "type %qT of template argument %qE depends "
5010                                  "on template parameters",
5011                                  type,
5012                                  arg);
5013                     }
5014                 }
5015             }
5016         }
5017     }
5018 
5019   /* We should only get here once.  */
5020   if (TREE_CODE (decl) == TYPE_DECL)
5021     gcc_assert (!COMPLETE_TYPE_P (type));
5022 
5023   // Build the template decl.
5024   tree tmpl = build_template_decl (decl, current_template_parms,
5025 				   DECL_MEMBER_TEMPLATE_P (maintmpl));
5026   TREE_TYPE (tmpl) = type;
5027   DECL_TEMPLATE_RESULT (tmpl) = decl;
5028   SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
5029   DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
5030   DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
5031 
5032   /* Give template template parms a DECL_CONTEXT of the template
5033      for which they are a parameter.  */
5034   for (i = 0; i < ntparms; ++i)
5035     {
5036       tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
5037       if (TREE_CODE (parm) == TEMPLATE_DECL)
5038 	DECL_CONTEXT (parm) = tmpl;
5039     }
5040 
5041   if (VAR_P (decl))
5042     /* We didn't register this in check_explicit_specialization so we could
5043        wait until the constraints were set.  */
5044     decl = register_specialization (decl, maintmpl, specargs, false, 0);
5045   else
5046     associate_classtype_constraints (type);
5047 
5048   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
5049     = tree_cons (specargs, tmpl,
5050                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
5051   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
5052 
5053   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
5054        inst = TREE_CHAIN (inst))
5055     {
5056       tree instance = TREE_VALUE (inst);
5057       if (TYPE_P (instance)
5058 	  ? (COMPLETE_TYPE_P (instance)
5059 	     && CLASSTYPE_IMPLICIT_INSTANTIATION (instance))
5060 	  : DECL_TEMPLATE_INSTANTIATION (instance))
5061 	{
5062 	  tree spec = most_specialized_partial_spec (instance, tf_none);
5063 	  tree inst_decl = (DECL_P (instance)
5064 			    ? instance : TYPE_NAME (instance));
5065 	  if (!spec)
5066 	    /* OK */;
5067 	  else if (spec == error_mark_node)
5068 	    permerror (input_location,
5069 		       "declaration of %qD ambiguates earlier template "
5070 		       "instantiation for %qD", decl, inst_decl);
5071 	  else if (TREE_VALUE (spec) == tmpl)
5072 	    permerror (input_location,
5073 		       "partial specialization of %qD after instantiation "
5074 		       "of %qD", decl, inst_decl);
5075 	}
5076     }
5077 
5078   return decl;
5079 }
5080 
5081 /* PARM is a template parameter of some form; return the corresponding
5082    TEMPLATE_PARM_INDEX.  */
5083 
5084 static tree
get_template_parm_index(tree parm)5085 get_template_parm_index (tree parm)
5086 {
5087   if (TREE_CODE (parm) == PARM_DECL
5088       || TREE_CODE (parm) == CONST_DECL)
5089     parm = DECL_INITIAL (parm);
5090   else if (TREE_CODE (parm) == TYPE_DECL
5091 	   || TREE_CODE (parm) == TEMPLATE_DECL)
5092     parm = TREE_TYPE (parm);
5093   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
5094       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM
5095       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
5096     parm = TEMPLATE_TYPE_PARM_INDEX (parm);
5097   gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
5098   return parm;
5099 }
5100 
5101 /* Subroutine of fixed_parameter_pack_p below.  Look for any template
5102    parameter packs used by the template parameter PARM.  */
5103 
5104 static void
fixed_parameter_pack_p_1(tree parm,struct find_parameter_pack_data * ppd)5105 fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
5106 {
5107   /* A type parm can't refer to another parm.  */
5108   if (TREE_CODE (parm) == TYPE_DECL || parm == error_mark_node)
5109     return;
5110   else if (TREE_CODE (parm) == PARM_DECL)
5111     {
5112       cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
5113 		    ppd, ppd->visited);
5114       return;
5115     }
5116 
5117   gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
5118 
5119   tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
5120   for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
5121     {
5122       tree p = TREE_VALUE (TREE_VEC_ELT (vec, i));
5123       if (template_parameter_pack_p (p))
5124 	/* Any packs in the type are expanded by this parameter.  */;
5125       else
5126 	fixed_parameter_pack_p_1 (p, ppd);
5127     }
5128 }
5129 
5130 /* PARM is a template parameter pack.  Return any parameter packs used in
5131    its type or the type of any of its template parameters.  If there are
5132    any such packs, it will be instantiated into a fixed template parameter
5133    list by partial instantiation rather than be fully deduced.  */
5134 
5135 tree
fixed_parameter_pack_p(tree parm)5136 fixed_parameter_pack_p (tree parm)
5137 {
5138   /* This can only be true in a member template.  */
5139   if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
5140     return NULL_TREE;
5141   /* This can only be true for a parameter pack.  */
5142   if (!template_parameter_pack_p (parm))
5143     return NULL_TREE;
5144   /* A type parm can't refer to another parm.  */
5145   if (TREE_CODE (parm) == TYPE_DECL)
5146     return NULL_TREE;
5147 
5148   tree parameter_packs = NULL_TREE;
5149   struct find_parameter_pack_data ppd;
5150   ppd.parameter_packs = &parameter_packs;
5151   ppd.visited = new hash_set<tree>;
5152   ppd.type_pack_expansion_p = false;
5153 
5154   fixed_parameter_pack_p_1 (parm, &ppd);
5155 
5156   delete ppd.visited;
5157   return parameter_packs;
5158 }
5159 
5160 /* Check that a template declaration's use of default arguments and
5161    parameter packs is not invalid.  Here, PARMS are the template
5162    parameters.  IS_PRIMARY is true if DECL is the thing declared by
5163    a primary template.  IS_PARTIAL is true if DECL is a partial
5164    specialization.
5165 
5166    IS_FRIEND_DECL is nonzero if DECL is either a non-defining friend
5167    function template declaration or a friend class template
5168    declaration.  In the function case, 1 indicates a declaration, 2
5169    indicates a redeclaration.  When IS_FRIEND_DECL=2, no errors are
5170    emitted for extraneous default arguments.
5171 
5172    Returns TRUE if there were no errors found, FALSE otherwise. */
5173 
5174 bool
check_default_tmpl_args(tree decl,tree parms,bool is_primary,bool is_partial,int is_friend_decl)5175 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
5176                          bool is_partial, int is_friend_decl)
5177 {
5178   const char *msg;
5179   int last_level_to_check;
5180   tree parm_level;
5181   bool no_errors = true;
5182 
5183   /* [temp.param]
5184 
5185      A default template-argument shall not be specified in a
5186      function template declaration or a function template definition, nor
5187      in the template-parameter-list of the definition of a member of a
5188      class template.  */
5189 
5190   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
5191       || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
5192     /* You can't have a function template declaration in a local
5193        scope, nor you can you define a member of a class template in a
5194        local scope.  */
5195     return true;
5196 
5197   if ((TREE_CODE (decl) == TYPE_DECL
5198        && TREE_TYPE (decl)
5199        && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5200       || (TREE_CODE (decl) == FUNCTION_DECL
5201 	  && LAMBDA_FUNCTION_P (decl)))
5202     /* A lambda doesn't have an explicit declaration; don't complain
5203        about the parms of the enclosing class.  */
5204     return true;
5205 
5206   if (current_class_type
5207       && !TYPE_BEING_DEFINED (current_class_type)
5208       && DECL_LANG_SPECIFIC (decl)
5209       && DECL_DECLARES_FUNCTION_P (decl)
5210       /* If this is either a friend defined in the scope of the class
5211 	 or a member function.  */
5212       && (DECL_FUNCTION_MEMBER_P (decl)
5213 	  ? same_type_p (DECL_CONTEXT (decl), current_class_type)
5214 	  : DECL_FRIEND_CONTEXT (decl)
5215 	  ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
5216 	  : false)
5217       /* And, if it was a member function, it really was defined in
5218 	 the scope of the class.  */
5219       && (!DECL_FUNCTION_MEMBER_P (decl)
5220 	  || DECL_INITIALIZED_IN_CLASS_P (decl)))
5221     /* We already checked these parameters when the template was
5222        declared, so there's no need to do it again now.  This function
5223        was defined in class scope, but we're processing its body now
5224        that the class is complete.  */
5225     return true;
5226 
5227   /* Core issue 226 (C++0x only): the following only applies to class
5228      templates.  */
5229   if (is_primary
5230       && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
5231     {
5232       /* [temp.param]
5233 
5234          If a template-parameter has a default template-argument, all
5235          subsequent template-parameters shall have a default
5236          template-argument supplied.  */
5237       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
5238         {
5239           tree inner_parms = TREE_VALUE (parm_level);
5240           int ntparms = TREE_VEC_LENGTH (inner_parms);
5241           int seen_def_arg_p = 0;
5242           int i;
5243 
5244           for (i = 0; i < ntparms; ++i)
5245             {
5246               tree parm = TREE_VEC_ELT (inner_parms, i);
5247 
5248               if (parm == error_mark_node)
5249                 continue;
5250 
5251               if (TREE_PURPOSE (parm))
5252                 seen_def_arg_p = 1;
5253               else if (seen_def_arg_p
5254 		       && !template_parameter_pack_p (TREE_VALUE (parm)))
5255                 {
5256                   error ("no default argument for %qD", TREE_VALUE (parm));
5257                   /* For better subsequent error-recovery, we indicate that
5258                      there should have been a default argument.  */
5259                   TREE_PURPOSE (parm) = error_mark_node;
5260                   no_errors = false;
5261                 }
5262 	      else if (!is_partial
5263 		       && !is_friend_decl
5264 		       /* Don't complain about an enclosing partial
5265 			  specialization.  */
5266 		       && parm_level == parms
5267 		       && TREE_CODE (decl) == TYPE_DECL
5268 		       && i < ntparms - 1
5269 		       && template_parameter_pack_p (TREE_VALUE (parm))
5270 		       /* A fixed parameter pack will be partially
5271 			  instantiated into a fixed length list.  */
5272 		       && !fixed_parameter_pack_p (TREE_VALUE (parm)))
5273 		{
5274 		  /* A primary class template can only have one
5275 		     parameter pack, at the end of the template
5276 		     parameter list.  */
5277 
5278 		  error ("parameter pack %q+D must be at the end of the"
5279 			 " template parameter list", TREE_VALUE (parm));
5280 
5281 		  TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
5282 		    = error_mark_node;
5283 		  no_errors = false;
5284 		}
5285             }
5286         }
5287     }
5288 
5289   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
5290       || is_partial
5291       || !is_primary
5292       || is_friend_decl)
5293     /* For an ordinary class template, default template arguments are
5294        allowed at the innermost level, e.g.:
5295 	 template <class T = int>
5296 	 struct S {};
5297        but, in a partial specialization, they're not allowed even
5298        there, as we have in [temp.class.spec]:
5299 
5300 	 The template parameter list of a specialization shall not
5301 	 contain default template argument values.
5302 
5303        So, for a partial specialization, or for a function template
5304        (in C++98/C++03), we look at all of them.  */
5305     ;
5306   else
5307     /* But, for a primary class template that is not a partial
5308        specialization we look at all template parameters except the
5309        innermost ones.  */
5310     parms = TREE_CHAIN (parms);
5311 
5312   /* Figure out what error message to issue.  */
5313   if (is_friend_decl == 2)
5314     msg = G_("default template arguments may not be used in function template "
5315 	     "friend re-declaration");
5316   else if (is_friend_decl)
5317     msg = G_("default template arguments may not be used in template "
5318 	     "friend declarations");
5319   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
5320     msg = G_("default template arguments may not be used in function templates "
5321 	     "without %<-std=c++11%> or %<-std=gnu++11%>");
5322   else if (is_partial)
5323     msg = G_("default template arguments may not be used in "
5324 	     "partial specializations");
5325   else if (current_class_type && CLASSTYPE_IS_TEMPLATE (current_class_type))
5326     msg = G_("default argument for template parameter for class enclosing %qD");
5327   else
5328     /* Per [temp.param]/9, "A default template-argument shall not be
5329        specified in the template-parameter-lists of the definition of
5330        a member of a class template that appears outside of the member's
5331        class.", thus if we aren't handling a member of a class template
5332        there is no need to examine the parameters.  */
5333     return true;
5334 
5335   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
5336     /* If we're inside a class definition, there's no need to
5337        examine the parameters to the class itself.  On the one
5338        hand, they will be checked when the class is defined, and,
5339        on the other, default arguments are valid in things like:
5340 	 template <class T = double>
5341 	 struct S { template <class U> void f(U); };
5342        Here the default argument for `S' has no bearing on the
5343        declaration of `f'.  */
5344     last_level_to_check = template_class_depth (current_class_type) + 1;
5345   else
5346     /* Check everything.  */
5347     last_level_to_check = 0;
5348 
5349   for (parm_level = parms;
5350        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
5351        parm_level = TREE_CHAIN (parm_level))
5352     {
5353       tree inner_parms = TREE_VALUE (parm_level);
5354       int i;
5355       int ntparms;
5356 
5357       ntparms = TREE_VEC_LENGTH (inner_parms);
5358       for (i = 0; i < ntparms; ++i)
5359         {
5360           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
5361             continue;
5362 
5363 	  if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
5364 	    {
5365 	      if (msg)
5366 	        {
5367                   no_errors = false;
5368                   if (is_friend_decl == 2)
5369                     return no_errors;
5370 
5371 		  error (msg, decl);
5372 		  msg = 0;
5373 	        }
5374 
5375 	      /* Clear out the default argument so that we are not
5376 	         confused later.  */
5377 	      TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
5378 	    }
5379         }
5380 
5381       /* At this point, if we're still interested in issuing messages,
5382 	 they must apply to classes surrounding the object declared.  */
5383       if (msg)
5384 	msg = G_("default argument for template parameter for class "
5385 		 "enclosing %qD");
5386     }
5387 
5388   return no_errors;
5389 }
5390 
5391 /* Worker for push_template_decl_real, called via
5392    for_each_template_parm.  DATA is really an int, indicating the
5393    level of the parameters we are interested in.  If T is a template
5394    parameter of that level, return nonzero.  */
5395 
5396 static int
template_parm_this_level_p(tree t,void * data)5397 template_parm_this_level_p (tree t, void* data)
5398 {
5399   int this_level = *(int *)data;
5400   int level;
5401 
5402   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
5403     level = TEMPLATE_PARM_LEVEL (t);
5404   else
5405     level = TEMPLATE_TYPE_LEVEL (t);
5406   return level == this_level;
5407 }
5408 
5409 /* Worker for uses_outer_template_parms, called via for_each_template_parm.
5410    DATA is really an int, indicating the innermost outer level of parameters.
5411    If T is a template parameter of that level or further out, return
5412    nonzero.  */
5413 
5414 static int
template_parm_outer_level(tree t,void * data)5415 template_parm_outer_level (tree t, void *data)
5416 {
5417   int this_level = *(int *)data;
5418   int level;
5419 
5420   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
5421     level = TEMPLATE_PARM_LEVEL (t);
5422   else
5423     level = TEMPLATE_TYPE_LEVEL (t);
5424   return level <= this_level;
5425 }
5426 
5427 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
5428    parameters given by current_template_args, or reuses a
5429    previously existing one, if appropriate.  Returns the DECL, or an
5430    equivalent one, if it is replaced via a call to duplicate_decls.
5431 
5432    If IS_FRIEND is true, DECL is a friend declaration.  */
5433 
5434 tree
push_template_decl_real(tree decl,bool is_friend)5435 push_template_decl_real (tree decl, bool is_friend)
5436 {
5437   tree tmpl;
5438   tree args;
5439   tree info;
5440   tree ctx;
5441   bool is_primary;
5442   bool is_partial;
5443   int new_template_p = 0;
5444   /* True if the template is a member template, in the sense of
5445      [temp.mem].  */
5446   bool member_template_p = false;
5447 
5448   if (decl == error_mark_node || !current_template_parms)
5449     return error_mark_node;
5450 
5451   /* See if this is a partial specialization.  */
5452   is_partial = ((DECL_IMPLICIT_TYPEDEF_P (decl)
5453 		 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
5454 		 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
5455 		|| (VAR_P (decl)
5456 		    && DECL_LANG_SPECIFIC (decl)
5457 		    && DECL_TEMPLATE_SPECIALIZATION (decl)
5458 		    && TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl))));
5459 
5460   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
5461     is_friend = true;
5462 
5463   if (is_friend)
5464     /* For a friend, we want the context of the friend, not
5465        the type of which it is a friend.  */
5466     ctx = CP_DECL_CONTEXT (decl);
5467   else if (CP_DECL_CONTEXT (decl)
5468 	   && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
5469     /* In the case of a virtual function, we want the class in which
5470        it is defined.  */
5471     ctx = CP_DECL_CONTEXT (decl);
5472   else
5473     /* Otherwise, if we're currently defining some class, the DECL
5474        is assumed to be a member of the class.  */
5475     ctx = current_scope ();
5476 
5477   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
5478     ctx = NULL_TREE;
5479 
5480   if (!DECL_CONTEXT (decl))
5481     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5482 
5483   /* See if this is a primary template.  */
5484   if (is_friend && ctx
5485       && uses_template_parms_level (ctx, processing_template_decl))
5486     /* A friend template that specifies a class context, i.e.
5487          template <typename T> friend void A<T>::f();
5488        is not primary.  */
5489     is_primary = false;
5490   else if (TREE_CODE (decl) == TYPE_DECL
5491 	   && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5492     is_primary = false;
5493   else
5494     is_primary = template_parm_scope_p ();
5495 
5496   if (is_primary)
5497     {
5498       warning (OPT_Wtemplates, "template %qD declared", decl);
5499 
5500       if (DECL_CLASS_SCOPE_P (decl))
5501 	member_template_p = true;
5502       if (TREE_CODE (decl) == TYPE_DECL
5503 	  && anon_aggrname_p (DECL_NAME (decl)))
5504 	{
5505 	  error ("template class without a name");
5506 	  return error_mark_node;
5507 	}
5508       else if (TREE_CODE (decl) == FUNCTION_DECL)
5509 	{
5510 	  if (member_template_p)
5511 	    {
5512 	      if (DECL_OVERRIDE_P (decl) || DECL_FINAL_P (decl))
5513 		error ("member template %qD may not have virt-specifiers", decl);
5514 	    }
5515 	  if (DECL_DESTRUCTOR_P (decl))
5516 	    {
5517 	      /* [temp.mem]
5518 
5519 		 A destructor shall not be a member template.  */
5520 	      error ("destructor %qD declared as member template", decl);
5521 	      return error_mark_node;
5522 	    }
5523 	  if (IDENTIFIER_NEWDEL_OP_P (DECL_NAME (decl))
5524 	      && (!prototype_p (TREE_TYPE (decl))
5525 		  || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
5526 		  || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
5527 		  || (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
5528 		      == void_list_node)))
5529 	    {
5530 	      /* [basic.stc.dynamic.allocation]
5531 
5532 		 An allocation function can be a function
5533 		 template. ... Template allocation functions shall
5534 		 have two or more parameters.  */
5535 	      error ("invalid template declaration of %qD", decl);
5536 	      return error_mark_node;
5537 	    }
5538 	}
5539       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
5540 	       && CLASS_TYPE_P (TREE_TYPE (decl)))
5541 	{
5542 	  /* Class template, set TEMPLATE_TYPE_PARM_FOR_CLASS.  */
5543 	  tree parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
5544 	  for (int i = 0; i < TREE_VEC_LENGTH (parms); ++i)
5545 	    {
5546 	      tree t = TREE_VALUE (TREE_VEC_ELT (parms, i));
5547 	      if (TREE_CODE (t) == TYPE_DECL)
5548 		t = TREE_TYPE (t);
5549 	      if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
5550 		TEMPLATE_TYPE_PARM_FOR_CLASS (t) = true;
5551 	    }
5552 	}
5553       else if (TREE_CODE (decl) == TYPE_DECL
5554 	       && TYPE_DECL_ALIAS_P (decl))
5555 	/* alias-declaration */
5556 	gcc_assert (!DECL_ARTIFICIAL (decl));
5557       else if (VAR_P (decl))
5558 	/* C++14 variable template. */;
5559       else
5560 	{
5561 	  error ("template declaration of %q#D", decl);
5562 	  return error_mark_node;
5563 	}
5564     }
5565 
5566   /* Check to see that the rules regarding the use of default
5567      arguments are not being violated.  We check args for a friend
5568      functions when we know whether it's a definition, introducing
5569      declaration or re-declaration.  */
5570   if (!is_friend || TREE_CODE (decl) != FUNCTION_DECL)
5571     check_default_tmpl_args (decl, current_template_parms,
5572 			     is_primary, is_partial, is_friend);
5573 
5574   /* Ensure that there are no parameter packs in the type of this
5575      declaration that have not been expanded.  */
5576   if (TREE_CODE (decl) == FUNCTION_DECL)
5577     {
5578       /* Check each of the arguments individually to see if there are
5579          any bare parameter packs.  */
5580       tree type = TREE_TYPE (decl);
5581       tree arg = DECL_ARGUMENTS (decl);
5582       tree argtype = TYPE_ARG_TYPES (type);
5583 
5584       while (arg && argtype)
5585         {
5586           if (!DECL_PACK_P (arg)
5587               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
5588             {
5589             /* This is a PARM_DECL that contains unexpanded parameter
5590                packs. We have already complained about this in the
5591                check_for_bare_parameter_packs call, so just replace
5592                these types with ERROR_MARK_NODE.  */
5593               TREE_TYPE (arg) = error_mark_node;
5594               TREE_VALUE (argtype) = error_mark_node;
5595             }
5596 
5597           arg = DECL_CHAIN (arg);
5598           argtype = TREE_CHAIN (argtype);
5599         }
5600 
5601       /* Check for bare parameter packs in the return type and the
5602          exception specifiers.  */
5603       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
5604 	/* Errors were already issued, set return type to int
5605 	   as the frontend doesn't expect error_mark_node as
5606 	   the return type.  */
5607 	TREE_TYPE (type) = integer_type_node;
5608       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
5609 	TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
5610     }
5611   else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
5612 					    && TYPE_DECL_ALIAS_P (decl))
5613 					   ? DECL_ORIGINAL_TYPE (decl)
5614 					   : TREE_TYPE (decl)))
5615     {
5616       TREE_TYPE (decl) = error_mark_node;
5617       return error_mark_node;
5618     }
5619 
5620   if (is_partial)
5621     return process_partial_specialization (decl);
5622 
5623   args = current_template_args ();
5624 
5625   if (!ctx
5626       || TREE_CODE (ctx) == FUNCTION_DECL
5627       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
5628       || (TREE_CODE (decl) == TYPE_DECL
5629 	  && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5630       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
5631     {
5632       if (DECL_LANG_SPECIFIC (decl)
5633 	  && DECL_TEMPLATE_INFO (decl)
5634 	  && DECL_TI_TEMPLATE (decl))
5635 	tmpl = DECL_TI_TEMPLATE (decl);
5636       /* If DECL is a TYPE_DECL for a class-template, then there won't
5637 	 be DECL_LANG_SPECIFIC.  The information equivalent to
5638 	 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
5639       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
5640 	       && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
5641 	       && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
5642 	{
5643 	  /* Since a template declaration already existed for this
5644 	     class-type, we must be redeclaring it here.  Make sure
5645 	     that the redeclaration is valid.  */
5646 	  redeclare_class_template (TREE_TYPE (decl),
5647 				    current_template_parms,
5648 				    current_template_constraints ());
5649 	  /* We don't need to create a new TEMPLATE_DECL; just use the
5650 	     one we already had.  */
5651 	  tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
5652 	}
5653       else
5654 	{
5655 	  tmpl = build_template_decl (decl, current_template_parms,
5656 				      member_template_p);
5657 	  new_template_p = 1;
5658 
5659 	  if (DECL_LANG_SPECIFIC (decl)
5660 	      && DECL_TEMPLATE_SPECIALIZATION (decl))
5661 	    {
5662 	      /* A specialization of a member template of a template
5663 		 class.  */
5664 	      SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
5665 	      DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
5666 	      DECL_TEMPLATE_INFO (decl) = NULL_TREE;
5667 	    }
5668 	}
5669     }
5670   else
5671     {
5672       tree a, t, current, parms;
5673       int i;
5674       tree tinfo = get_template_info (decl);
5675 
5676       if (!tinfo)
5677 	{
5678 	  error ("template definition of non-template %q#D", decl);
5679 	  return error_mark_node;
5680 	}
5681 
5682       tmpl = TI_TEMPLATE (tinfo);
5683 
5684       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
5685 	  && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
5686 	  && DECL_TEMPLATE_SPECIALIZATION (decl)
5687 	  && DECL_MEMBER_TEMPLATE_P (tmpl))
5688 	{
5689 	  tree new_tmpl;
5690 
5691 	  /* The declaration is a specialization of a member
5692 	     template, declared outside the class.  Therefore, the
5693 	     innermost template arguments will be NULL, so we
5694 	     replace them with the arguments determined by the
5695 	     earlier call to check_explicit_specialization.  */
5696 	  args = DECL_TI_ARGS (decl);
5697 
5698 	  new_tmpl
5699 	    = build_template_decl (decl, current_template_parms,
5700 				   member_template_p);
5701 	  DECL_TEMPLATE_RESULT (new_tmpl) = decl;
5702 	  TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
5703 	  DECL_TI_TEMPLATE (decl) = new_tmpl;
5704 	  SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
5705 	  DECL_TEMPLATE_INFO (new_tmpl)
5706 	    = build_template_info (tmpl, args);
5707 
5708 	  register_specialization (new_tmpl,
5709 				   most_general_template (tmpl),
5710 				   args,
5711 				   is_friend, 0);
5712 	  return decl;
5713 	}
5714 
5715       /* Make sure the template headers we got make sense.  */
5716 
5717       parms = DECL_TEMPLATE_PARMS (tmpl);
5718       i = TMPL_PARMS_DEPTH (parms);
5719       if (TMPL_ARGS_DEPTH (args) != i)
5720 	{
5721 	  error ("expected %d levels of template parms for %q#D, got %d",
5722 		 i, decl, TMPL_ARGS_DEPTH (args));
5723 	  DECL_INTERFACE_KNOWN (decl) = 1;
5724 	  return error_mark_node;
5725 	}
5726       else
5727 	for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5728 	  {
5729 	    a = TMPL_ARGS_LEVEL (args, i);
5730 	    t = INNERMOST_TEMPLATE_PARMS (parms);
5731 
5732 	    if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5733 	      {
5734 		if (current == decl)
5735 		  error ("got %d template parameters for %q#D",
5736 			 TREE_VEC_LENGTH (a), decl);
5737 		else
5738 		  error ("got %d template parameters for %q#T",
5739 			 TREE_VEC_LENGTH (a), current);
5740 		error ("  but %d required", TREE_VEC_LENGTH (t));
5741 		/* Avoid crash in import_export_decl.  */
5742 		DECL_INTERFACE_KNOWN (decl) = 1;
5743 		return error_mark_node;
5744 	      }
5745 
5746 	    if (current == decl)
5747 	      current = ctx;
5748 	    else if (current == NULL_TREE)
5749 	      /* Can happen in erroneous input.  */
5750 	      break;
5751 	    else
5752 	      current = get_containing_scope (current);
5753 	  }
5754 
5755       /* Check that the parms are used in the appropriate qualifying scopes
5756 	 in the declarator.  */
5757       if (!comp_template_args
5758 	  (TI_ARGS (tinfo),
5759 	   TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5760 	{
5761 	  error ("template arguments to %qD do not match original "
5762 		 "template %qD", decl, DECL_TEMPLATE_RESULT (tmpl));
5763 	  if (!uses_template_parms (TI_ARGS (tinfo)))
5764 	    inform (input_location, "use %<template<>%> for"
5765 		    " an explicit specialization");
5766 	  /* Avoid crash in import_export_decl.  */
5767 	  DECL_INTERFACE_KNOWN (decl) = 1;
5768 	  return error_mark_node;
5769 	}
5770     }
5771 
5772   DECL_TEMPLATE_RESULT (tmpl) = decl;
5773   TREE_TYPE (tmpl) = TREE_TYPE (decl);
5774 
5775   /* Push template declarations for global functions and types.  Note
5776      that we do not try to push a global template friend declared in a
5777      template class; such a thing may well depend on the template
5778      parameters of the class.  */
5779   if (new_template_p && !ctx
5780       && !(is_friend && template_class_depth (current_class_type) > 0))
5781     {
5782       tmpl = pushdecl_namespace_level (tmpl, is_friend);
5783       if (tmpl == error_mark_node)
5784 	return error_mark_node;
5785 
5786       /* Hide template friend classes that haven't been declared yet.  */
5787       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5788 	{
5789 	  DECL_ANTICIPATED (tmpl) = 1;
5790 	  DECL_FRIEND_P (tmpl) = 1;
5791 	}
5792     }
5793 
5794   if (is_primary)
5795     {
5796       tree parms = DECL_TEMPLATE_PARMS (tmpl);
5797 
5798       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5799 
5800       /* Give template template parms a DECL_CONTEXT of the template
5801 	 for which they are a parameter.  */
5802       parms = INNERMOST_TEMPLATE_PARMS (parms);
5803       for (int i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5804 	{
5805 	  tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5806 	  if (TREE_CODE (parm) == TEMPLATE_DECL)
5807 	    DECL_CONTEXT (parm) = tmpl;
5808 	}
5809 
5810       if (TREE_CODE (decl) == TYPE_DECL
5811 	  && TYPE_DECL_ALIAS_P (decl)
5812 	  && complex_alias_template_p (tmpl))
5813 	TEMPLATE_DECL_COMPLEX_ALIAS_P (tmpl) = true;
5814     }
5815 
5816   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5817      back to its most general template.  If TMPL is a specialization,
5818      ARGS may only have the innermost set of arguments.  Add the missing
5819      argument levels if necessary.  */
5820   if (DECL_TEMPLATE_INFO (tmpl))
5821     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5822 
5823   info = build_template_info (tmpl, args);
5824 
5825   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5826     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5827   else
5828     {
5829       if (is_primary)
5830 	retrofit_lang_decl (decl);
5831       if (DECL_LANG_SPECIFIC (decl))
5832 	DECL_TEMPLATE_INFO (decl) = info;
5833     }
5834 
5835   if (flag_implicit_templates
5836       && !is_friend
5837       && TREE_PUBLIC (decl)
5838       && VAR_OR_FUNCTION_DECL_P (decl))
5839     /* Set DECL_COMDAT on template instantiations; if we force
5840        them to be emitted by explicit instantiation or -frepo,
5841        mark_needed will tell cgraph to do the right thing.  */
5842     DECL_COMDAT (decl) = true;
5843 
5844   return DECL_TEMPLATE_RESULT (tmpl);
5845 }
5846 
5847 tree
push_template_decl(tree decl)5848 push_template_decl (tree decl)
5849 {
5850   return push_template_decl_real (decl, false);
5851 }
5852 
5853 /* FN is an inheriting constructor that inherits from the constructor
5854    template INHERITED; turn FN into a constructor template with a matching
5855    template header.  */
5856 
5857 tree
add_inherited_template_parms(tree fn,tree inherited)5858 add_inherited_template_parms (tree fn, tree inherited)
5859 {
5860   tree inner_parms
5861     = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
5862   inner_parms = copy_node (inner_parms);
5863   tree parms
5864     = tree_cons (size_int (processing_template_decl + 1),
5865 		 inner_parms, current_template_parms);
5866   tree tmpl = build_template_decl (fn, parms, /*member*/true);
5867   tree args = template_parms_to_args (parms);
5868   DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
5869   TREE_TYPE (tmpl) = TREE_TYPE (fn);
5870   DECL_TEMPLATE_RESULT (tmpl) = fn;
5871   DECL_ARTIFICIAL (tmpl) = true;
5872   DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5873   return tmpl;
5874 }
5875 
5876 /* Called when a class template TYPE is redeclared with the indicated
5877    template PARMS, e.g.:
5878 
5879      template <class T> struct S;
5880      template <class T> struct S {};  */
5881 
5882 bool
redeclare_class_template(tree type,tree parms,tree cons)5883 redeclare_class_template (tree type, tree parms, tree cons)
5884 {
5885   tree tmpl;
5886   tree tmpl_parms;
5887   int i;
5888 
5889   if (!TYPE_TEMPLATE_INFO (type))
5890     {
5891       error ("%qT is not a template type", type);
5892       return false;
5893     }
5894 
5895   tmpl = TYPE_TI_TEMPLATE (type);
5896   if (!PRIMARY_TEMPLATE_P (tmpl))
5897     /* The type is nested in some template class.  Nothing to worry
5898        about here; there are no new template parameters for the nested
5899        type.  */
5900     return true;
5901 
5902   if (!parms)
5903     {
5904       error ("template specifiers not specified in declaration of %qD",
5905 	     tmpl);
5906       return false;
5907     }
5908 
5909   parms = INNERMOST_TEMPLATE_PARMS (parms);
5910   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5911 
5912   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5913     {
5914       error_n (input_location, TREE_VEC_LENGTH (parms),
5915                "redeclared with %d template parameter",
5916                "redeclared with %d template parameters",
5917                TREE_VEC_LENGTH (parms));
5918       inform_n (DECL_SOURCE_LOCATION (tmpl), TREE_VEC_LENGTH (tmpl_parms),
5919                 "previous declaration %qD used %d template parameter",
5920                 "previous declaration %qD used %d template parameters",
5921                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5922       return false;
5923     }
5924 
5925   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5926     {
5927       tree tmpl_parm;
5928       tree parm;
5929       tree tmpl_default;
5930       tree parm_default;
5931 
5932       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5933           || TREE_VEC_ELT (parms, i) == error_mark_node)
5934         continue;
5935 
5936       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5937       if (error_operand_p (tmpl_parm))
5938 	return false;
5939 
5940       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5941       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5942       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5943 
5944       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5945 	 TEMPLATE_DECL.  */
5946       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5947 	  || (TREE_CODE (tmpl_parm) != TYPE_DECL
5948 	      && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5949 	  || (TREE_CODE (tmpl_parm) != PARM_DECL
5950 	      && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5951 		  != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5952 	  || (TREE_CODE (tmpl_parm) == PARM_DECL
5953 	      && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5954 		  != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5955 	{
5956 	  error ("template parameter %q+#D", tmpl_parm);
5957 	  error ("redeclared here as %q#D", parm);
5958 	  return false;
5959 	}
5960 
5961       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5962 	{
5963 	  /* We have in [temp.param]:
5964 
5965 	     A template-parameter may not be given default arguments
5966 	     by two different declarations in the same scope.  */
5967 	  error_at (input_location, "redefinition of default argument for %q#D", parm);
5968 	  inform (DECL_SOURCE_LOCATION (tmpl_parm),
5969 		  "original definition appeared here");
5970 	  return false;
5971 	}
5972 
5973       if (parm_default != NULL_TREE)
5974 	/* Update the previous template parameters (which are the ones
5975 	   that will really count) with the new default value.  */
5976 	TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5977       else if (tmpl_default != NULL_TREE)
5978 	/* Update the new parameters, too; they'll be used as the
5979 	   parameters for any members.  */
5980 	TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5981 
5982       /* Give each template template parm in this redeclaration a
5983 	 DECL_CONTEXT of the template for which they are a parameter.  */
5984       if (TREE_CODE (parm) == TEMPLATE_DECL)
5985 	{
5986 	  gcc_assert (DECL_CONTEXT (parm) == NULL_TREE);
5987 	  DECL_CONTEXT (parm) = tmpl;
5988 	}
5989 
5990       if (TREE_CODE (parm) == TYPE_DECL)
5991 	TEMPLATE_TYPE_PARM_FOR_CLASS (TREE_TYPE (parm)) = true;
5992     }
5993 
5994   // Cannot redeclare a class template with a different set of constraints.
5995   if (!equivalent_constraints (get_constraints (tmpl), cons))
5996     {
5997       error_at (input_location, "redeclaration %q#D with different "
5998                                 "constraints", tmpl);
5999       inform (DECL_SOURCE_LOCATION (tmpl),
6000               "original declaration appeared here");
6001     }
6002 
6003     return true;
6004 }
6005 
6006 /* The actual substitution part of instantiate_non_dependent_expr_sfinae,
6007    to be used when the caller has already checked
6008    (processing_template_decl
6009     && !instantiation_dependent_expression_p (expr)
6010     && potential_constant_expression (expr))
6011    and cleared processing_template_decl.  */
6012 
6013 tree
instantiate_non_dependent_expr_internal(tree expr,tsubst_flags_t complain)6014 instantiate_non_dependent_expr_internal (tree expr, tsubst_flags_t complain)
6015 {
6016   return tsubst_copy_and_build (expr,
6017 				/*args=*/NULL_TREE,
6018 				complain,
6019 				/*in_decl=*/NULL_TREE,
6020 				/*function_p=*/false,
6021 				/*integral_constant_expression_p=*/true);
6022 }
6023 
6024 /* Simplify EXPR if it is a non-dependent expression.  Returns the
6025    (possibly simplified) expression.  */
6026 
6027 tree
instantiate_non_dependent_expr_sfinae(tree expr,tsubst_flags_t complain)6028 instantiate_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
6029 {
6030   if (expr == NULL_TREE)
6031     return NULL_TREE;
6032 
6033   /* If we're in a template, but EXPR isn't value dependent, simplify
6034      it.  We're supposed to treat:
6035 
6036        template <typename T> void f(T[1 + 1]);
6037        template <typename T> void f(T[2]);
6038 
6039      as two declarations of the same function, for example.  */
6040   if (processing_template_decl
6041       && is_nondependent_constant_expression (expr))
6042     {
6043       processing_template_decl_sentinel s;
6044       expr = instantiate_non_dependent_expr_internal (expr, complain);
6045     }
6046   return expr;
6047 }
6048 
6049 tree
instantiate_non_dependent_expr(tree expr)6050 instantiate_non_dependent_expr (tree expr)
6051 {
6052   return instantiate_non_dependent_expr_sfinae (expr, tf_error);
6053 }
6054 
6055 /* Like instantiate_non_dependent_expr, but return NULL_TREE rather than
6056    an uninstantiated expression.  */
6057 
6058 tree
instantiate_non_dependent_or_null(tree expr)6059 instantiate_non_dependent_or_null (tree expr)
6060 {
6061   if (expr == NULL_TREE)
6062     return NULL_TREE;
6063   if (processing_template_decl)
6064     {
6065       if (!is_nondependent_constant_expression (expr))
6066 	expr = NULL_TREE;
6067       else
6068 	{
6069 	  processing_template_decl_sentinel s;
6070 	  expr = instantiate_non_dependent_expr_internal (expr, tf_error);
6071 	}
6072     }
6073   return expr;
6074 }
6075 
6076 /* True iff T is a specialization of a variable template.  */
6077 
6078 bool
variable_template_specialization_p(tree t)6079 variable_template_specialization_p (tree t)
6080 {
6081   if (!VAR_P (t) || !DECL_LANG_SPECIFIC (t) || !DECL_TEMPLATE_INFO (t))
6082     return false;
6083   tree tmpl = DECL_TI_TEMPLATE (t);
6084   return variable_template_p (tmpl);
6085 }
6086 
6087 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
6088    template declaration, or a TYPE_DECL for an alias declaration.  */
6089 
6090 bool
alias_type_or_template_p(tree t)6091 alias_type_or_template_p (tree t)
6092 {
6093   if (t == NULL_TREE)
6094     return false;
6095   return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
6096 	  || (TYPE_P (t)
6097 	      && TYPE_NAME (t)
6098 	      && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
6099 	  || DECL_ALIAS_TEMPLATE_P (t));
6100 }
6101 
6102 /* Return TRUE iff T is a specialization of an alias template.  */
6103 
6104 bool
alias_template_specialization_p(const_tree t)6105 alias_template_specialization_p (const_tree t)
6106 {
6107   /* It's an alias template specialization if it's an alias and its
6108      TYPE_NAME is a specialization of a primary template.  */
6109   if (TYPE_ALIAS_P (t))
6110     if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
6111       return PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo));
6112 
6113   return false;
6114 }
6115 
6116 /* An alias template is complex from a SFINAE perspective if a template-id
6117    using that alias can be ill-formed when the expansion is not, as with
6118    the void_t template.  We determine this by checking whether the
6119    expansion for the alias template uses all its template parameters.  */
6120 
6121 struct uses_all_template_parms_data
6122 {
6123   int level;
6124   bool *seen;
6125 };
6126 
6127 static int
uses_all_template_parms_r(tree t,void * data_)6128 uses_all_template_parms_r (tree t, void *data_)
6129 {
6130   struct uses_all_template_parms_data &data
6131     = *(struct uses_all_template_parms_data*)data_;
6132   tree idx = get_template_parm_index (t);
6133 
6134   if (TEMPLATE_PARM_LEVEL (idx) == data.level)
6135     data.seen[TEMPLATE_PARM_IDX (idx)] = true;
6136   return 0;
6137 }
6138 
6139 static bool
complex_alias_template_p(const_tree tmpl)6140 complex_alias_template_p (const_tree tmpl)
6141 {
6142   struct uses_all_template_parms_data data;
6143   tree pat = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
6144   tree parms = DECL_TEMPLATE_PARMS (tmpl);
6145   data.level = TMPL_PARMS_DEPTH (parms);
6146   int len = TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (parms));
6147   data.seen = XALLOCAVEC (bool, len);
6148   for (int i = 0; i < len; ++i)
6149     data.seen[i] = false;
6150 
6151   for_each_template_parm (pat, uses_all_template_parms_r, &data, NULL, true);
6152   for (int i = 0; i < len; ++i)
6153     if (!data.seen[i])
6154       return true;
6155   return false;
6156 }
6157 
6158 /* Return TRUE iff T is a specialization of a complex alias template with
6159    dependent template-arguments.  */
6160 
6161 bool
dependent_alias_template_spec_p(const_tree t)6162 dependent_alias_template_spec_p (const_tree t)
6163 {
6164   if (!alias_template_specialization_p (t))
6165     return false;
6166 
6167   tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t);
6168   if (!TEMPLATE_DECL_COMPLEX_ALIAS_P (TI_TEMPLATE (tinfo)))
6169     return false;
6170 
6171   tree args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo));
6172   if (!any_dependent_template_arguments_p (args))
6173     return false;
6174 
6175   return true;
6176 }
6177 
6178 /* Return the number of innermost template parameters in TMPL.  */
6179 
6180 static int
num_innermost_template_parms(tree tmpl)6181 num_innermost_template_parms (tree tmpl)
6182 {
6183   tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
6184   return TREE_VEC_LENGTH (parms);
6185 }
6186 
6187 /* Return either TMPL or another template that it is equivalent to under DR
6188    1286: An alias that just changes the name of a template is equivalent to
6189    the other template.  */
6190 
6191 static tree
get_underlying_template(tree tmpl)6192 get_underlying_template (tree tmpl)
6193 {
6194   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
6195   while (DECL_ALIAS_TEMPLATE_P (tmpl))
6196     {
6197       /* Determine if the alias is equivalent to an underlying template.  */
6198       tree orig_type = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
6199       tree tinfo = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (orig_type);
6200       if (!tinfo)
6201 	break;
6202 
6203       tree underlying = TI_TEMPLATE (tinfo);
6204       if (!PRIMARY_TEMPLATE_P (underlying)
6205 	  || (num_innermost_template_parms (tmpl)
6206 	      != num_innermost_template_parms (underlying)))
6207 	break;
6208 
6209       tree alias_args = INNERMOST_TEMPLATE_ARGS
6210 	(template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl)));
6211       if (!comp_template_args (TI_ARGS (tinfo), alias_args))
6212 	break;
6213 
6214       /* Alias is equivalent.  Strip it and repeat.  */
6215       tmpl = underlying;
6216     }
6217 
6218   return tmpl;
6219 }
6220 
6221 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
6222    must be a reference-to-function or a pointer-to-function type, as specified
6223    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
6224    and check that the resulting function has external linkage.  */
6225 
6226 static tree
convert_nontype_argument_function(tree type,tree expr,tsubst_flags_t complain)6227 convert_nontype_argument_function (tree type, tree expr,
6228 				   tsubst_flags_t complain)
6229 {
6230   tree fns = expr;
6231   tree fn, fn_no_ptr;
6232   linkage_kind linkage;
6233 
6234   fn = instantiate_type (type, fns, tf_none);
6235   if (fn == error_mark_node)
6236     return error_mark_node;
6237 
6238   if (value_dependent_expression_p (fn))
6239     goto accept;
6240 
6241   fn_no_ptr = strip_fnptr_conv (fn);
6242   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
6243     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
6244   if (BASELINK_P (fn_no_ptr))
6245     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
6246 
6247   /* [temp.arg.nontype]/1
6248 
6249      A template-argument for a non-type, non-template template-parameter
6250      shall be one of:
6251      [...]
6252      -- the address of an object or function with external [C++11: or
6253         internal] linkage.  */
6254 
6255   STRIP_ANY_LOCATION_WRAPPER (fn_no_ptr);
6256   if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
6257     {
6258       if (complain & tf_error)
6259 	{
6260 	  error ("%qE is not a valid template argument for type %qT",
6261 		 expr, type);
6262 	  if (TYPE_PTR_P (type))
6263 	    inform (input_location, "it must be the address of a function "
6264 		    "with external linkage");
6265 	  else
6266 	    inform (input_location, "it must be the name of a function with "
6267 		    "external linkage");
6268 	}
6269       return NULL_TREE;
6270     }
6271 
6272   linkage = decl_linkage (fn_no_ptr);
6273   if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
6274     {
6275       if (complain & tf_error)
6276 	{
6277 	  if (cxx_dialect >= cxx11)
6278 	    error ("%qE is not a valid template argument for type %qT "
6279 		   "because %qD has no linkage",
6280 		   expr, type, fn_no_ptr);
6281 	  else
6282 	    error ("%qE is not a valid template argument for type %qT "
6283 		   "because %qD does not have external linkage",
6284 		   expr, type, fn_no_ptr);
6285 	}
6286       return NULL_TREE;
6287     }
6288 
6289  accept:
6290   if (TYPE_REF_P (type))
6291     {
6292       if (REFERENCE_REF_P (fn))
6293 	fn = TREE_OPERAND (fn, 0);
6294       else
6295 	fn = build_address (fn);
6296     }
6297   if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (fn)))
6298     fn = build_nop (type, fn);
6299 
6300   return fn;
6301 }
6302 
6303 /* Subroutine of convert_nontype_argument.
6304    Check if EXPR of type TYPE is a valid pointer-to-member constant.
6305    Emit an error otherwise.  */
6306 
6307 static bool
check_valid_ptrmem_cst_expr(tree type,tree expr,tsubst_flags_t complain)6308 check_valid_ptrmem_cst_expr (tree type, tree expr,
6309 			     tsubst_flags_t complain)
6310 {
6311   location_t loc = cp_expr_loc_or_loc (expr, input_location);
6312   tree orig_expr = expr;
6313   STRIP_NOPS (expr);
6314   if (null_ptr_cst_p (expr))
6315     return true;
6316   if (TREE_CODE (expr) == PTRMEM_CST
6317       && same_type_p (TYPE_PTRMEM_CLASS_TYPE (type),
6318 		      PTRMEM_CST_CLASS (expr)))
6319     return true;
6320   if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
6321     return true;
6322   if (processing_template_decl
6323       && TREE_CODE (expr) == ADDR_EXPR
6324       && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
6325     return true;
6326   if (complain & tf_error)
6327     {
6328       error_at (loc, "%qE is not a valid template argument for type %qT",
6329 		orig_expr, type);
6330       if (TREE_CODE (expr) != PTRMEM_CST)
6331 	inform (loc, "it must be a pointer-to-member of the form %<&X::Y%>");
6332       else
6333 	inform (loc, "because it is a member of %qT", PTRMEM_CST_CLASS (expr));
6334     }
6335   return false;
6336 }
6337 
6338 /* Returns TRUE iff the address of OP is value-dependent.
6339 
6340    14.6.2.4 [temp.dep.temp]:
6341    A non-integral non-type template-argument is dependent if its type is
6342    dependent or it has either of the following forms
6343      qualified-id
6344      & qualified-id
6345    and contains a nested-name-specifier which specifies a class-name that
6346    names a dependent type.
6347 
6348    We generalize this to just say that the address of a member of a
6349    dependent class is value-dependent; the above doesn't cover the
6350    address of a static data member named with an unqualified-id.  */
6351 
6352 static bool
has_value_dependent_address(tree op)6353 has_value_dependent_address (tree op)
6354 {
6355   /* We could use get_inner_reference here, but there's no need;
6356      this is only relevant for template non-type arguments, which
6357      can only be expressed as &id-expression.  */
6358   if (DECL_P (op))
6359     {
6360       tree ctx = CP_DECL_CONTEXT (op);
6361       if (TYPE_P (ctx) && dependent_type_p (ctx))
6362 	return true;
6363     }
6364 
6365   return false;
6366 }
6367 
6368 /* The next set of functions are used for providing helpful explanatory
6369    diagnostics for failed overload resolution.  Their messages should be
6370    indented by two spaces for consistency with the messages in
6371    call.c  */
6372 
6373 static int
unify_success(bool)6374 unify_success (bool /*explain_p*/)
6375 {
6376   return 0;
6377 }
6378 
6379 /* Other failure functions should call this one, to provide a single function
6380    for setting a breakpoint on.  */
6381 
6382 static int
unify_invalid(bool)6383 unify_invalid (bool /*explain_p*/)
6384 {
6385   return 1;
6386 }
6387 
6388 static int
unify_parameter_deduction_failure(bool explain_p,tree parm)6389 unify_parameter_deduction_failure (bool explain_p, tree parm)
6390 {
6391   if (explain_p)
6392     inform (input_location,
6393 	    "  couldn%'t deduce template parameter %qD", parm);
6394   return unify_invalid (explain_p);
6395 }
6396 
6397 static int
unify_cv_qual_mismatch(bool explain_p,tree parm,tree arg)6398 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
6399 {
6400   if (explain_p)
6401     inform (input_location,
6402 	    "  types %qT and %qT have incompatible cv-qualifiers",
6403 	    parm, arg);
6404   return unify_invalid (explain_p);
6405 }
6406 
6407 static int
unify_type_mismatch(bool explain_p,tree parm,tree arg)6408 unify_type_mismatch (bool explain_p, tree parm, tree arg)
6409 {
6410   if (explain_p)
6411     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
6412   return unify_invalid (explain_p);
6413 }
6414 
6415 static int
unify_parameter_pack_mismatch(bool explain_p,tree parm,tree arg)6416 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
6417 {
6418   if (explain_p)
6419     inform (input_location,
6420 	    "  template parameter %qD is not a parameter pack, but "
6421 	    "argument %qD is",
6422 	    parm, arg);
6423   return unify_invalid (explain_p);
6424 }
6425 
6426 static int
unify_ptrmem_cst_mismatch(bool explain_p,tree parm,tree arg)6427 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
6428 {
6429   if (explain_p)
6430     inform (input_location,
6431 	    "  template argument %qE does not match "
6432 	    "pointer-to-member constant %qE",
6433 	    arg, parm);
6434   return unify_invalid (explain_p);
6435 }
6436 
6437 static int
unify_expression_unequal(bool explain_p,tree parm,tree arg)6438 unify_expression_unequal (bool explain_p, tree parm, tree arg)
6439 {
6440   if (explain_p)
6441     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
6442   return unify_invalid (explain_p);
6443 }
6444 
6445 static int
unify_parameter_pack_inconsistent(bool explain_p,tree old_arg,tree new_arg)6446 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
6447 {
6448   if (explain_p)
6449     inform (input_location,
6450 	    "  inconsistent parameter pack deduction with %qT and %qT",
6451 	    old_arg, new_arg);
6452   return unify_invalid (explain_p);
6453 }
6454 
6455 static int
unify_inconsistency(bool explain_p,tree parm,tree first,tree second)6456 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
6457 {
6458   if (explain_p)
6459     {
6460       if (TYPE_P (parm))
6461 	inform (input_location,
6462 		"  deduced conflicting types for parameter %qT (%qT and %qT)",
6463 		parm, first, second);
6464       else
6465 	inform (input_location,
6466 		"  deduced conflicting values for non-type parameter "
6467 		"%qE (%qE and %qE)", parm, first, second);
6468     }
6469   return unify_invalid (explain_p);
6470 }
6471 
6472 static int
unify_vla_arg(bool explain_p,tree arg)6473 unify_vla_arg (bool explain_p, tree arg)
6474 {
6475   if (explain_p)
6476     inform (input_location,
6477 	    "  variable-sized array type %qT is not "
6478 	    "a valid template argument",
6479 	    arg);
6480   return unify_invalid (explain_p);
6481 }
6482 
6483 static int
unify_method_type_error(bool explain_p,tree arg)6484 unify_method_type_error (bool explain_p, tree arg)
6485 {
6486   if (explain_p)
6487     inform (input_location,
6488 	    "  member function type %qT is not a valid template argument",
6489 	    arg);
6490   return unify_invalid (explain_p);
6491 }
6492 
6493 static int
6494 unify_arity (bool explain_p, int have, int wanted, bool least_p = false)
6495 {
6496   if (explain_p)
6497     {
6498       if (least_p)
6499 	inform_n (input_location, wanted,
6500 		  "  candidate expects at least %d argument, %d provided",
6501 		  "  candidate expects at least %d arguments, %d provided",
6502 		  wanted, have);
6503       else
6504 	inform_n (input_location, wanted,
6505 		  "  candidate expects %d argument, %d provided",
6506 		  "  candidate expects %d arguments, %d provided",
6507 		  wanted, have);
6508     }
6509   return unify_invalid (explain_p);
6510 }
6511 
6512 static int
unify_too_many_arguments(bool explain_p,int have,int wanted)6513 unify_too_many_arguments (bool explain_p, int have, int wanted)
6514 {
6515   return unify_arity (explain_p, have, wanted);
6516 }
6517 
6518 static int
6519 unify_too_few_arguments (bool explain_p, int have, int wanted,
6520 			 bool least_p = false)
6521 {
6522   return unify_arity (explain_p, have, wanted, least_p);
6523 }
6524 
6525 static int
unify_arg_conversion(bool explain_p,tree to_type,tree from_type,tree arg)6526 unify_arg_conversion (bool explain_p, tree to_type,
6527 		      tree from_type, tree arg)
6528 {
6529   if (explain_p)
6530     inform (cp_expr_loc_or_loc (arg, input_location),
6531 	    "  cannot convert %qE (type %qT) to type %qT",
6532 	    arg, from_type, to_type);
6533   return unify_invalid (explain_p);
6534 }
6535 
6536 static int
unify_no_common_base(bool explain_p,enum template_base_result r,tree parm,tree arg)6537 unify_no_common_base (bool explain_p, enum template_base_result r,
6538 		      tree parm, tree arg)
6539 {
6540   if (explain_p)
6541     switch (r)
6542       {
6543       case tbr_ambiguous_baseclass:
6544 	inform (input_location, "  %qT is an ambiguous base class of %qT",
6545 		parm, arg);
6546 	break;
6547       default:
6548 	inform (input_location, "  %qT is not derived from %qT", arg, parm);
6549 	break;
6550       }
6551   return unify_invalid (explain_p);
6552 }
6553 
6554 static int
unify_inconsistent_template_template_parameters(bool explain_p)6555 unify_inconsistent_template_template_parameters (bool explain_p)
6556 {
6557   if (explain_p)
6558     inform (input_location,
6559 	    "  template parameters of a template template argument are "
6560 	    "inconsistent with other deduced template arguments");
6561   return unify_invalid (explain_p);
6562 }
6563 
6564 static int
unify_template_deduction_failure(bool explain_p,tree parm,tree arg)6565 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
6566 {
6567   if (explain_p)
6568     inform (input_location,
6569 	    "  can%'t deduce a template for %qT from non-template type %qT",
6570 	    parm, arg);
6571   return unify_invalid (explain_p);
6572 }
6573 
6574 static int
unify_template_argument_mismatch(bool explain_p,tree parm,tree arg)6575 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
6576 {
6577   if (explain_p)
6578     inform (input_location,
6579 	    "  template argument %qE does not match %qE", arg, parm);
6580   return unify_invalid (explain_p);
6581 }
6582 
6583 /* True if T is a C++20 template parameter object to store the argument for a
6584    template parameter of class type.  */
6585 
6586 bool
template_parm_object_p(const_tree t)6587 template_parm_object_p (const_tree t)
6588 {
6589   return (TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t) && DECL_NAME (t)
6590 	  && !strncmp (IDENTIFIER_POINTER (DECL_NAME (t)), "_ZTA", 4));
6591 }
6592 
6593 /* Subroutine of convert_nontype_argument, to check whether EXPR, as an
6594    argument for TYPE, points to an unsuitable object.  */
6595 
6596 static bool
invalid_tparm_referent_p(tree type,tree expr,tsubst_flags_t complain)6597 invalid_tparm_referent_p (tree type, tree expr, tsubst_flags_t complain)
6598 {
6599   switch (TREE_CODE (expr))
6600     {
6601     CASE_CONVERT:
6602       return invalid_tparm_referent_p (type, TREE_OPERAND (expr, 0),
6603 				       complain);
6604 
6605     case TARGET_EXPR:
6606       return invalid_tparm_referent_p (type, TARGET_EXPR_INITIAL (expr),
6607 				       complain);
6608 
6609     case CONSTRUCTOR:
6610       {
6611 	unsigned i; tree elt;
6612 	FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), i, elt)
6613 	  if (invalid_tparm_referent_p (TREE_TYPE (elt), elt, complain))
6614 	    return true;
6615       }
6616       break;
6617 
6618     case ADDR_EXPR:
6619       {
6620 	tree decl = TREE_OPERAND (expr, 0);
6621 
6622 	if (!VAR_P (decl))
6623 	  {
6624 	    if (complain & tf_error)
6625 	      error ("%qE is not a valid template argument of type %qT "
6626 		     "because %qE is not a variable", expr, type, decl);
6627 	    return true;
6628 	  }
6629 	else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
6630 	  {
6631 	    if (complain & tf_error)
6632 	      error ("%qE is not a valid template argument of type %qT "
6633 		     "in C++98 because %qD does not have external linkage",
6634 		     expr, type, decl);
6635 	    return true;
6636 	  }
6637 	else if ((cxx_dialect >= cxx11 && cxx_dialect < cxx17)
6638 		 && decl_linkage (decl) == lk_none)
6639 	  {
6640 	    if (complain & tf_error)
6641 	      error ("%qE is not a valid template argument of type %qT "
6642 		     "because %qD has no linkage", expr, type, decl);
6643 	    return true;
6644 	  }
6645 	/* C++17: For a non-type template-parameter of reference or pointer
6646 	   type, the value of the constant expression shall not refer to (or
6647 	   for a pointer type, shall not be the address of):
6648 	   * a subobject (4.5),
6649 	   * a temporary object (15.2),
6650 	   * a string literal (5.13.5),
6651 	   * the result of a typeid expression (8.2.8), or
6652 	   * a predefined __func__ variable (11.4.1).  */
6653 	else if (DECL_ARTIFICIAL (decl))
6654 	  {
6655 	    if (complain & tf_error)
6656 	      error ("the address of %qD is not a valid template argument",
6657 		     decl);
6658 	    return true;
6659 	  }
6660 	else if (!same_type_ignoring_top_level_qualifiers_p
6661 		 (strip_array_types (TREE_TYPE (type)),
6662 		  strip_array_types (TREE_TYPE (decl))))
6663 	  {
6664 	    if (complain & tf_error)
6665 	      error ("the address of the %qT subobject of %qD is not a "
6666 		     "valid template argument", TREE_TYPE (type), decl);
6667 	    return true;
6668 	  }
6669 	else if (!TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
6670 	  {
6671 	    if (complain & tf_error)
6672 	      error ("the address of %qD is not a valid template argument "
6673 		     "because it does not have static storage duration",
6674 		     decl);
6675 	    return true;
6676 	  }
6677       }
6678       break;
6679 
6680     default:
6681       if (!INDIRECT_TYPE_P (type))
6682 	/* We're only concerned about pointers and references here.  */;
6683       else if (cxx_dialect >= cxx11 && integer_zerop (expr))
6684 	/* Null pointer values are OK in C++11.  */;
6685       else
6686 	{
6687 	  if (VAR_P (expr))
6688 	    {
6689 	      if (complain & tf_error)
6690 		error ("%qD is not a valid template argument "
6691 		       "because %qD is a variable, not the address of "
6692 		       "a variable", expr, expr);
6693 	      return true;
6694 	    }
6695 	  else
6696 	    {
6697 	      if (complain & tf_error)
6698 		error ("%qE is not a valid template argument for %qT "
6699 		       "because it is not the address of a variable",
6700 		       expr, type);
6701 	      return true;
6702 	    }
6703 	}
6704     }
6705   return false;
6706 
6707 }
6708 
6709 /* Return a VAR_DECL for the C++20 template parameter object corresponding to
6710    template argument EXPR.  */
6711 
6712 static tree
get_template_parm_object(tree expr,tsubst_flags_t complain)6713 get_template_parm_object (tree expr, tsubst_flags_t complain)
6714 {
6715   if (TREE_CODE (expr) == TARGET_EXPR)
6716     expr = TARGET_EXPR_INITIAL (expr);
6717 
6718   if (!TREE_CONSTANT (expr))
6719     {
6720       if ((complain & tf_error)
6721 	  && require_rvalue_constant_expression (expr))
6722 	cxx_constant_value (expr);
6723       return error_mark_node;
6724     }
6725   if (invalid_tparm_referent_p (TREE_TYPE (expr), expr, complain))
6726     return error_mark_node;
6727 
6728   tree name = mangle_template_parm_object (expr);
6729   tree decl = get_global_binding (name);
6730   if (decl)
6731     return decl;
6732 
6733   tree type = cp_build_qualified_type (TREE_TYPE (expr), TYPE_QUAL_CONST);
6734   decl = create_temporary_var (type);
6735   TREE_STATIC (decl) = true;
6736   DECL_DECLARED_CONSTEXPR_P (decl) = true;
6737   TREE_READONLY (decl) = true;
6738   DECL_NAME (decl) = name;
6739   SET_DECL_ASSEMBLER_NAME (decl, name);
6740   DECL_CONTEXT (decl) = global_namespace;
6741   comdat_linkage (decl);
6742   pushdecl_top_level_and_finish (decl, expr);
6743   return decl;
6744 }
6745 
6746 /* Attempt to convert the non-type template parameter EXPR to the
6747    indicated TYPE.  If the conversion is successful, return the
6748    converted value.  If the conversion is unsuccessful, return
6749    NULL_TREE if we issued an error message, or error_mark_node if we
6750    did not.  We issue error messages for out-and-out bad template
6751    parameters, but not simply because the conversion failed, since we
6752    might be just trying to do argument deduction.  Both TYPE and EXPR
6753    must be non-dependent.
6754 
6755    The conversion follows the special rules described in
6756    [temp.arg.nontype], and it is much more strict than an implicit
6757    conversion.
6758 
6759    This function is called twice for each template argument (see
6760    lookup_template_class for a more accurate description of this
6761    problem). This means that we need to handle expressions which
6762    are not valid in a C++ source, but can be created from the
6763    first call (for instance, casts to perform conversions). These
6764    hacks can go away after we fix the double coercion problem.  */
6765 
6766 static tree
convert_nontype_argument(tree type,tree expr,tsubst_flags_t complain)6767 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
6768 {
6769   tree expr_type;
6770   location_t loc = cp_expr_loc_or_loc (expr, input_location);
6771 
6772   /* Detect immediately string literals as invalid non-type argument.
6773      This special-case is not needed for correctness (we would easily
6774      catch this later), but only to provide better diagnostic for this
6775      common user mistake. As suggested by DR 100, we do not mention
6776      linkage issues in the diagnostic as this is not the point.  */
6777   if (TREE_CODE (expr) == STRING_CST && !CLASS_TYPE_P (type))
6778     {
6779       if (complain & tf_error)
6780 	error ("%qE is not a valid template argument for type %qT "
6781 	       "because string literals can never be used in this context",
6782 	       expr, type);
6783       return NULL_TREE;
6784     }
6785 
6786   /* Add the ADDR_EXPR now for the benefit of
6787      value_dependent_expression_p.  */
6788   if (TYPE_PTROBV_P (type)
6789       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
6790     {
6791       expr = decay_conversion (expr, complain);
6792       if (expr == error_mark_node)
6793 	return error_mark_node;
6794     }
6795 
6796   /* If we are in a template, EXPR may be non-dependent, but still
6797      have a syntactic, rather than semantic, form.  For example, EXPR
6798      might be a SCOPE_REF, rather than the VAR_DECL to which the
6799      SCOPE_REF refers.  Preserving the qualifying scope is necessary
6800      so that access checking can be performed when the template is
6801      instantiated -- but here we need the resolved form so that we can
6802      convert the argument.  */
6803   bool non_dep = false;
6804   if (TYPE_REF_OBJ_P (type)
6805       && has_value_dependent_address (expr))
6806     /* If we want the address and it's value-dependent, don't fold.  */;
6807   else if (processing_template_decl
6808 	   && is_nondependent_constant_expression (expr))
6809     non_dep = true;
6810   if (error_operand_p (expr))
6811     return error_mark_node;
6812   expr_type = TREE_TYPE (expr);
6813 
6814   /* If the argument is non-dependent, perform any conversions in
6815      non-dependent context as well.  */
6816   processing_template_decl_sentinel s (non_dep);
6817   if (non_dep)
6818     expr = instantiate_non_dependent_expr_internal (expr, complain);
6819 
6820   if (value_dependent_expression_p (expr))
6821     expr = canonicalize_expr_argument (expr, complain);
6822 
6823   /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
6824      to a non-type argument of "nullptr".  */
6825   if (NULLPTR_TYPE_P (expr_type) && TYPE_PTR_OR_PTRMEM_P (type))
6826     expr = fold_simple (convert (type, expr));
6827 
6828   /* In C++11, integral or enumeration non-type template arguments can be
6829      arbitrary constant expressions.  Pointer and pointer to
6830      member arguments can be general constant expressions that evaluate
6831      to a null value, but otherwise still need to be of a specific form.  */
6832   if (cxx_dialect >= cxx11)
6833     {
6834       if (TREE_CODE (expr) == PTRMEM_CST && TYPE_PTRMEM_P (type))
6835 	/* A PTRMEM_CST is already constant, and a valid template
6836 	   argument for a parameter of pointer to member type, we just want
6837 	   to leave it in that form rather than lower it to a
6838 	   CONSTRUCTOR.  */;
6839       else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
6840 	       || cxx_dialect >= cxx17)
6841 	{
6842 	  /* Calling build_converted_constant_expr might create a call to
6843 	     a conversion function with a value-dependent argument, which
6844 	     could invoke taking the address of a temporary representing
6845 	     the result of the conversion.  */
6846 	  if (COMPOUND_LITERAL_P (expr)
6847 	      && CONSTRUCTOR_IS_DEPENDENT (expr)
6848 	      && MAYBE_CLASS_TYPE_P (expr_type)
6849 	      && TYPE_HAS_CONVERSION (expr_type))
6850 	    {
6851 	      expr = build1 (IMPLICIT_CONV_EXPR, type, expr);
6852 	      IMPLICIT_CONV_EXPR_NONTYPE_ARG (expr) = true;
6853 	      return expr;
6854 	    }
6855 	  /* C++17: A template-argument for a non-type template-parameter shall
6856 	     be a converted constant expression (8.20) of the type of the
6857 	     template-parameter.  */
6858 	  expr = build_converted_constant_expr (type, expr, complain);
6859 	  if (expr == error_mark_node)
6860 	    /* Make sure we return NULL_TREE only if we have really issued
6861 	       an error, as described above.  */
6862 	    return (complain & tf_error) ? NULL_TREE : error_mark_node;
6863 	  expr = maybe_constant_value (expr, NULL_TREE,
6864 				       /*manifestly_const_eval=*/true);
6865 	  expr = convert_from_reference (expr);
6866 	}
6867       else if (TYPE_PTR_OR_PTRMEM_P (type))
6868 	{
6869 	  tree folded = maybe_constant_value (expr, NULL_TREE,
6870 					      /*manifestly_const_eval=*/true);
6871 	  if (TYPE_PTR_P (type) ? integer_zerop (folded)
6872 	      : null_member_pointer_value_p (folded))
6873 	    expr = folded;
6874 	}
6875     }
6876 
6877   if (TYPE_REF_P (type))
6878     expr = mark_lvalue_use (expr);
6879   else
6880     expr = mark_rvalue_use (expr);
6881 
6882   /* HACK: Due to double coercion, we can get a
6883      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
6884      which is the tree that we built on the first call (see
6885      below when coercing to reference to object or to reference to
6886      function). We just strip everything and get to the arg.
6887      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
6888      for examples.  */
6889   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
6890     {
6891       tree probe_type, probe = expr;
6892       if (REFERENCE_REF_P (probe))
6893 	probe = TREE_OPERAND (probe, 0);
6894       probe_type = TREE_TYPE (probe);
6895       if (TREE_CODE (probe) == NOP_EXPR)
6896 	{
6897 	  /* ??? Maybe we could use convert_from_reference here, but we
6898 	     would need to relax its constraints because the NOP_EXPR
6899 	     could actually change the type to something more cv-qualified,
6900 	     and this is not folded by convert_from_reference.  */
6901 	  tree addr = TREE_OPERAND (probe, 0);
6902 	  if (TYPE_REF_P (probe_type)
6903 	      && TREE_CODE (addr) == ADDR_EXPR
6904 	      && TYPE_PTR_P (TREE_TYPE (addr))
6905 	      && (same_type_ignoring_top_level_qualifiers_p
6906 		  (TREE_TYPE (probe_type),
6907 		   TREE_TYPE (TREE_TYPE (addr)))))
6908 	    {
6909 	      expr = TREE_OPERAND (addr, 0);
6910 	      expr_type = TREE_TYPE (probe_type);
6911 	    }
6912 	}
6913     }
6914 
6915   /* [temp.arg.nontype]/5, bullet 1
6916 
6917      For a non-type template-parameter of integral or enumeration type,
6918      integral promotions (_conv.prom_) and integral conversions
6919      (_conv.integral_) are applied.  */
6920   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6921     {
6922       if (cxx_dialect < cxx11)
6923 	{
6924 	  tree t = build_converted_constant_expr (type, expr, complain);
6925 	  t = maybe_constant_value (t);
6926 	  if (t != error_mark_node)
6927 	    expr = t;
6928 	}
6929 
6930       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
6931 	return error_mark_node;
6932 
6933       /* Notice that there are constant expressions like '4 % 0' which
6934 	 do not fold into integer constants.  */
6935       if (TREE_CODE (expr) != INTEGER_CST
6936 	  && !value_dependent_expression_p (expr))
6937 	{
6938 	  if (complain & tf_error)
6939 	    {
6940 	      int errs = errorcount, warns = warningcount + werrorcount;
6941 	      if (!require_potential_constant_expression (expr))
6942 		expr = error_mark_node;
6943 	      else
6944 		expr = cxx_constant_value (expr);
6945 	      if (errorcount > errs || warningcount + werrorcount > warns)
6946 		inform (loc, "in template argument for type %qT", type);
6947 	      if (expr == error_mark_node)
6948 		return NULL_TREE;
6949 	      /* else cxx_constant_value complained but gave us
6950 		 a real constant, so go ahead.  */
6951 	      if (TREE_CODE (expr) != INTEGER_CST)
6952 		{
6953 		  /* Some assemble time constant expressions like
6954 		     (intptr_t)&&lab1 - (intptr_t)&&lab2 or
6955 		     4 + (intptr_t)&&var satisfy reduced_constant_expression_p
6956 		     as we can emit them into .rodata initializers of
6957 		     variables, yet they can't fold into an INTEGER_CST at
6958 		     compile time.  Refuse them here.  */
6959 		  gcc_checking_assert (reduced_constant_expression_p (expr));
6960 		  error_at (loc, "template argument %qE for type %qT not "
6961 				 "a constant integer", expr, type);
6962 		  return NULL_TREE;
6963 		}
6964 	    }
6965 	  else
6966 	    return NULL_TREE;
6967 	}
6968 
6969       /* Avoid typedef problems.  */
6970       if (TREE_TYPE (expr) != type)
6971 	expr = fold_convert (type, expr);
6972     }
6973   /* [temp.arg.nontype]/5, bullet 2
6974 
6975      For a non-type template-parameter of type pointer to object,
6976      qualification conversions (_conv.qual_) and the array-to-pointer
6977      conversion (_conv.array_) are applied.  */
6978   else if (TYPE_PTROBV_P (type))
6979     {
6980       tree decayed = expr;
6981 
6982       /* Look through any NOP_EXPRs around an ADDR_EXPR, whether they come from
6983 	 decay_conversion or an explicit cast.  If it's a problematic cast,
6984 	 we'll complain about it below.  */
6985       if (TREE_CODE (expr) == NOP_EXPR)
6986 	{
6987 	  tree probe = expr;
6988 	  STRIP_NOPS (probe);
6989 	  if (TREE_CODE (probe) == ADDR_EXPR
6990 	      && TYPE_PTR_P (TREE_TYPE (probe)))
6991 	    {
6992 	      expr = probe;
6993 	      expr_type = TREE_TYPE (expr);
6994 	    }
6995 	}
6996 
6997       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
6998 
6999 	 A template-argument for a non-type, non-template template-parameter
7000 	 shall be one of: [...]
7001 
7002 	 -- the name of a non-type template-parameter;
7003 	 -- the address of an object or function with external linkage, [...]
7004 	    expressed as "& id-expression" where the & is optional if the name
7005 	    refers to a function or array, or if the corresponding
7006 	    template-parameter is a reference.
7007 
7008 	Here, we do not care about functions, as they are invalid anyway
7009 	for a parameter of type pointer-to-object.  */
7010 
7011       if (value_dependent_expression_p (expr))
7012 	/* Non-type template parameters are OK.  */
7013 	;
7014       else if (cxx_dialect >= cxx11 && integer_zerop (expr))
7015 	/* Null pointer values are OK in C++11.  */;
7016       else if (TREE_CODE (expr) != ADDR_EXPR
7017 	       && !INDIRECT_TYPE_P (expr_type))
7018 	/* Other values, like integer constants, might be valid
7019 	   non-type arguments of some other type.  */
7020 	return error_mark_node;
7021       else if (invalid_tparm_referent_p (type, expr, complain))
7022 	return NULL_TREE;
7023 
7024       expr = decayed;
7025 
7026       expr = perform_qualification_conversions (type, expr);
7027       if (expr == error_mark_node)
7028 	return error_mark_node;
7029     }
7030   /* [temp.arg.nontype]/5, bullet 3
7031 
7032      For a non-type template-parameter of type reference to object, no
7033      conversions apply. The type referred to by the reference may be more
7034      cv-qualified than the (otherwise identical) type of the
7035      template-argument. The template-parameter is bound directly to the
7036      template-argument, which must be an lvalue.  */
7037   else if (TYPE_REF_OBJ_P (type))
7038     {
7039       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
7040 						      expr_type))
7041 	return error_mark_node;
7042 
7043       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
7044 	{
7045 	  if (complain & tf_error)
7046 	    error ("%qE is not a valid template argument for type %qT "
7047 		   "because of conflicts in cv-qualification", expr, type);
7048 	  return NULL_TREE;
7049 	}
7050 
7051       if (!lvalue_p (expr))
7052 	{
7053 	  if (complain & tf_error)
7054 	    error ("%qE is not a valid template argument for type %qT "
7055 		   "because it is not an lvalue", expr, type);
7056 	  return NULL_TREE;
7057 	}
7058 
7059       /* [temp.arg.nontype]/1
7060 
7061 	 A template-argument for a non-type, non-template template-parameter
7062 	 shall be one of: [...]
7063 
7064 	 -- the address of an object or function with external linkage.  */
7065       if (INDIRECT_REF_P (expr)
7066 	  && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
7067 	{
7068 	  expr = TREE_OPERAND (expr, 0);
7069 	  if (DECL_P (expr))
7070 	    {
7071 	      if (complain & tf_error)
7072 		error ("%q#D is not a valid template argument for type %qT "
7073 		       "because a reference variable does not have a constant "
7074 		       "address", expr, type);
7075 	      return NULL_TREE;
7076 	    }
7077 	}
7078 
7079       if (TYPE_REF_OBJ_P (TREE_TYPE (expr))
7080 	  && value_dependent_expression_p (expr))
7081 	/* OK, dependent reference.  We don't want to ask whether a DECL is
7082 	   itself value-dependent, since what we want here is its address.  */;
7083       else
7084 	{
7085 	  expr = build_address (expr);
7086 
7087 	  if (invalid_tparm_referent_p (type, expr, complain))
7088 	    return NULL_TREE;
7089 	}
7090 
7091       if (!same_type_p (type, TREE_TYPE (expr)))
7092 	expr = build_nop (type, expr);
7093     }
7094   /* [temp.arg.nontype]/5, bullet 4
7095 
7096      For a non-type template-parameter of type pointer to function, only
7097      the function-to-pointer conversion (_conv.func_) is applied. If the
7098      template-argument represents a set of overloaded functions (or a
7099      pointer to such), the matching function is selected from the set
7100      (_over.over_).  */
7101   else if (TYPE_PTRFN_P (type))
7102     {
7103       /* If the argument is a template-id, we might not have enough
7104 	 context information to decay the pointer.  */
7105       if (!type_unknown_p (expr_type))
7106 	{
7107 	  expr = decay_conversion (expr, complain);
7108 	  if (expr == error_mark_node)
7109 	    return error_mark_node;
7110 	}
7111 
7112       if (cxx_dialect >= cxx11 && integer_zerop (expr))
7113 	/* Null pointer values are OK in C++11.  */
7114 	return perform_qualification_conversions (type, expr);
7115 
7116       expr = convert_nontype_argument_function (type, expr, complain);
7117       if (!expr || expr == error_mark_node)
7118 	return expr;
7119     }
7120   /* [temp.arg.nontype]/5, bullet 5
7121 
7122      For a non-type template-parameter of type reference to function, no
7123      conversions apply. If the template-argument represents a set of
7124      overloaded functions, the matching function is selected from the set
7125      (_over.over_).  */
7126   else if (TYPE_REFFN_P (type))
7127     {
7128       if (TREE_CODE (expr) == ADDR_EXPR)
7129 	{
7130 	  if (complain & tf_error)
7131 	    {
7132 	      error ("%qE is not a valid template argument for type %qT "
7133 		     "because it is a pointer", expr, type);
7134 	      inform (input_location, "try using %qE instead",
7135 		      TREE_OPERAND (expr, 0));
7136 	    }
7137 	  return NULL_TREE;
7138 	}
7139 
7140       expr = convert_nontype_argument_function (type, expr, complain);
7141       if (!expr || expr == error_mark_node)
7142 	return expr;
7143     }
7144   /* [temp.arg.nontype]/5, bullet 6
7145 
7146      For a non-type template-parameter of type pointer to member function,
7147      no conversions apply. If the template-argument represents a set of
7148      overloaded member functions, the matching member function is selected
7149      from the set (_over.over_).  */
7150   else if (TYPE_PTRMEMFUNC_P (type))
7151     {
7152       expr = instantiate_type (type, expr, tf_none);
7153       if (expr == error_mark_node)
7154 	return error_mark_node;
7155 
7156       /* [temp.arg.nontype] bullet 1 says the pointer to member
7157          expression must be a pointer-to-member constant.  */
7158       if (!value_dependent_expression_p (expr)
7159 	  && !check_valid_ptrmem_cst_expr (type, expr, complain))
7160 	return NULL_TREE;
7161 
7162       /* Repeated conversion can't deal with a conversion that turns PTRMEM_CST
7163 	 into a CONSTRUCTOR, so build up a new PTRMEM_CST instead.  */
7164       if (fnptr_conv_p (type, TREE_TYPE (expr)))
7165 	expr = make_ptrmem_cst (type, PTRMEM_CST_MEMBER (expr));
7166     }
7167   /* [temp.arg.nontype]/5, bullet 7
7168 
7169      For a non-type template-parameter of type pointer to data member,
7170      qualification conversions (_conv.qual_) are applied.  */
7171   else if (TYPE_PTRDATAMEM_P (type))
7172     {
7173       /* [temp.arg.nontype] bullet 1 says the pointer to member
7174          expression must be a pointer-to-member constant.  */
7175       if (!value_dependent_expression_p (expr)
7176 	  && !check_valid_ptrmem_cst_expr (type, expr, complain))
7177 	return NULL_TREE;
7178 
7179       expr = perform_qualification_conversions (type, expr);
7180       if (expr == error_mark_node)
7181 	return expr;
7182     }
7183   else if (NULLPTR_TYPE_P (type))
7184     {
7185       if (!NULLPTR_TYPE_P (TREE_TYPE (expr)))
7186 	{
7187 	  if (complain & tf_error)
7188 	    error ("%qE is not a valid template argument for type %qT "
7189 		   "because it is of type %qT", expr, type, TREE_TYPE (expr));
7190 	  return NULL_TREE;
7191 	}
7192       return expr;
7193     }
7194   else if (CLASS_TYPE_P (type))
7195     {
7196       /* Replace the argument with a reference to the corresponding template
7197 	 parameter object.  */
7198       if (!value_dependent_expression_p (expr))
7199 	expr = get_template_parm_object (expr, complain);
7200       if (expr == error_mark_node)
7201 	return NULL_TREE;
7202     }
7203   /* A template non-type parameter must be one of the above.  */
7204   else
7205     gcc_unreachable ();
7206 
7207   /* Sanity check: did we actually convert the argument to the
7208      right type?  */
7209   gcc_assert (same_type_ignoring_top_level_qualifiers_p
7210 	      (type, TREE_TYPE (expr)));
7211   return convert_from_reference (expr);
7212 }
7213 
7214 /* Subroutine of coerce_template_template_parms, which returns 1 if
7215    PARM_PARM and ARG_PARM match using the rule for the template
7216    parameters of template template parameters. Both PARM and ARG are
7217    template parameters; the rest of the arguments are the same as for
7218    coerce_template_template_parms.
7219  */
7220 static int
coerce_template_template_parm(tree parm,tree arg,tsubst_flags_t complain,tree in_decl,tree outer_args)7221 coerce_template_template_parm (tree parm,
7222                               tree arg,
7223                               tsubst_flags_t complain,
7224                               tree in_decl,
7225                               tree outer_args)
7226 {
7227   if (arg == NULL_TREE || error_operand_p (arg)
7228       || parm == NULL_TREE || error_operand_p (parm))
7229     return 0;
7230 
7231   if (TREE_CODE (arg) != TREE_CODE (parm))
7232     return 0;
7233 
7234   switch (TREE_CODE (parm))
7235     {
7236     case TEMPLATE_DECL:
7237       /* We encounter instantiations of templates like
7238 	 template <template <template <class> class> class TT>
7239 	 class C;  */
7240       {
7241 	tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
7242 	tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
7243 
7244 	if (!coerce_template_template_parms
7245 	    (parmparm, argparm, complain, in_decl, outer_args))
7246 	  return 0;
7247       }
7248       /* Fall through.  */
7249 
7250     case TYPE_DECL:
7251       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
7252 	  && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
7253 	/* Argument is a parameter pack but parameter is not.  */
7254 	return 0;
7255       break;
7256 
7257     case PARM_DECL:
7258       /* The tsubst call is used to handle cases such as
7259 
7260            template <int> class C {};
7261 	   template <class T, template <T> class TT> class D {};
7262 	   D<int, C> d;
7263 
7264 	 i.e. the parameter list of TT depends on earlier parameters.  */
7265       if (!uses_template_parms (TREE_TYPE (arg)))
7266 	{
7267 	  tree t = tsubst (TREE_TYPE (parm), outer_args, complain, in_decl);
7268 	  if (!uses_template_parms (t)
7269 	      && !same_type_p (t, TREE_TYPE (arg)))
7270 	    return 0;
7271 	}
7272 
7273       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
7274 	  && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
7275 	/* Argument is a parameter pack but parameter is not.  */
7276 	return 0;
7277 
7278       break;
7279 
7280     default:
7281       gcc_unreachable ();
7282     }
7283 
7284   return 1;
7285 }
7286 
7287 /* Coerce template argument list ARGLIST for use with template
7288    template-parameter TEMPL.  */
7289 
7290 static tree
coerce_template_args_for_ttp(tree templ,tree arglist,tsubst_flags_t complain)7291 coerce_template_args_for_ttp (tree templ, tree arglist,
7292 			      tsubst_flags_t complain)
7293 {
7294   /* Consider an example where a template template parameter declared as
7295 
7296      template <class T, class U = std::allocator<T> > class TT
7297 
7298      The template parameter level of T and U are one level larger than
7299      of TT.  To proper process the default argument of U, say when an
7300      instantiation `TT<int>' is seen, we need to build the full
7301      arguments containing {int} as the innermost level.  Outer levels,
7302      available when not appearing as default template argument, can be
7303      obtained from the arguments of the enclosing template.
7304 
7305      Suppose that TT is later substituted with std::vector.  The above
7306      instantiation is `TT<int, std::allocator<T> >' with TT at
7307      level 1, and T at level 2, while the template arguments at level 1
7308      becomes {std::vector} and the inner level 2 is {int}.  */
7309 
7310   tree outer = DECL_CONTEXT (templ);
7311   if (outer)
7312     {
7313       if (DECL_TEMPLATE_SPECIALIZATION (outer))
7314 	/* We want arguments for the partial specialization, not arguments for
7315 	   the primary template.  */
7316 	outer = template_parms_to_args (DECL_TEMPLATE_PARMS (outer));
7317       else
7318 	outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7319     }
7320   else if (current_template_parms)
7321     {
7322       /* This is an argument of the current template, so we haven't set
7323 	 DECL_CONTEXT yet.  */
7324       tree relevant_template_parms;
7325 
7326       /* Parameter levels that are greater than the level of the given
7327 	 template template parm are irrelevant.  */
7328       relevant_template_parms = current_template_parms;
7329       while (TMPL_PARMS_DEPTH (relevant_template_parms)
7330 	     != TEMPLATE_TYPE_LEVEL (TREE_TYPE (templ)))
7331 	relevant_template_parms = TREE_CHAIN (relevant_template_parms);
7332 
7333       outer = template_parms_to_args (relevant_template_parms);
7334     }
7335 
7336   if (outer)
7337     arglist = add_to_template_args (outer, arglist);
7338 
7339   tree parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7340   return coerce_template_parms (parmlist, arglist, templ,
7341 				complain,
7342 				/*require_all_args=*/true,
7343 				/*use_default_args=*/true);
7344 }
7345 
7346 /* A cache of template template parameters with match-all default
7347    arguments.  */
7348 static GTY((deletable)) hash_map<tree,tree> *defaulted_ttp_cache;
7349 static void
store_defaulted_ttp(tree v,tree t)7350 store_defaulted_ttp (tree v, tree t)
7351 {
7352   if (!defaulted_ttp_cache)
7353     defaulted_ttp_cache = hash_map<tree,tree>::create_ggc (13);
7354   defaulted_ttp_cache->put (v, t);
7355 }
7356 static tree
lookup_defaulted_ttp(tree v)7357 lookup_defaulted_ttp (tree v)
7358 {
7359   if (defaulted_ttp_cache)
7360     if (tree *p = defaulted_ttp_cache->get (v))
7361       return *p;
7362   return NULL_TREE;
7363 }
7364 
7365 /* T is a bound template template-parameter.  Copy its arguments into default
7366    arguments of the template template-parameter's template parameters.  */
7367 
7368 static tree
add_defaults_to_ttp(tree otmpl)7369 add_defaults_to_ttp (tree otmpl)
7370 {
7371   if (tree c = lookup_defaulted_ttp (otmpl))
7372     return c;
7373 
7374   tree ntmpl = copy_node (otmpl);
7375 
7376   tree ntype = copy_node (TREE_TYPE (otmpl));
7377   TYPE_STUB_DECL (ntype) = TYPE_NAME (ntype) = ntmpl;
7378   TYPE_MAIN_VARIANT (ntype) = ntype;
7379   TYPE_POINTER_TO (ntype) = TYPE_REFERENCE_TO (ntype) = NULL_TREE;
7380   TYPE_NAME (ntype) = ntmpl;
7381   SET_TYPE_STRUCTURAL_EQUALITY (ntype);
7382 
7383   tree idx = TEMPLATE_TYPE_PARM_INDEX (ntype)
7384     = copy_node (TEMPLATE_TYPE_PARM_INDEX (ntype));
7385   TEMPLATE_PARM_DECL (idx) = ntmpl;
7386   TREE_TYPE (ntmpl) = TREE_TYPE (idx) = ntype;
7387 
7388   tree oparms = DECL_TEMPLATE_PARMS (otmpl);
7389   tree parms = DECL_TEMPLATE_PARMS (ntmpl) = copy_node (oparms);
7390   TREE_CHAIN (parms) = TREE_CHAIN (oparms);
7391   tree vec = TREE_VALUE (parms) = copy_node (TREE_VALUE (parms));
7392   for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
7393     {
7394       tree o = TREE_VEC_ELT (vec, i);
7395       if (!template_parameter_pack_p (TREE_VALUE (o)))
7396 	{
7397 	  tree n = TREE_VEC_ELT (vec, i) = copy_node (o);
7398 	  TREE_PURPOSE (n) = any_targ_node;
7399 	}
7400     }
7401 
7402   store_defaulted_ttp (otmpl, ntmpl);
7403   return ntmpl;
7404 }
7405 
7406 /* ARG is a bound potential template template-argument, and PARGS is a list
7407    of arguments for the corresponding template template-parameter.  Adjust
7408    PARGS as appropriate for application to ARG's template, and if ARG is a
7409    BOUND_TEMPLATE_TEMPLATE_PARM, possibly adjust it to add default template
7410    arguments to the template template parameter.  */
7411 
7412 static tree
coerce_ttp_args_for_tta(tree & arg,tree pargs,tsubst_flags_t complain)7413 coerce_ttp_args_for_tta (tree& arg, tree pargs, tsubst_flags_t complain)
7414 {
7415   ++processing_template_decl;
7416   tree arg_tmpl = TYPE_TI_TEMPLATE (arg);
7417   if (DECL_TEMPLATE_TEMPLATE_PARM_P (arg_tmpl))
7418     {
7419       /* When comparing two template template-parameters in partial ordering,
7420 	 rewrite the one currently being used as an argument to have default
7421 	 arguments for all parameters.  */
7422       arg_tmpl = add_defaults_to_ttp (arg_tmpl);
7423       pargs = coerce_template_args_for_ttp (arg_tmpl, pargs, complain);
7424       if (pargs != error_mark_node)
7425 	arg = bind_template_template_parm (TREE_TYPE (arg_tmpl),
7426 					   TYPE_TI_ARGS (arg));
7427     }
7428   else
7429     {
7430       tree aparms
7431 	= INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (arg_tmpl));
7432       pargs = coerce_template_parms (aparms, pargs, arg_tmpl, complain,
7433 				       /*require_all*/true,
7434 				       /*use_default*/true);
7435     }
7436   --processing_template_decl;
7437   return pargs;
7438 }
7439 
7440 /* Subroutine of unify for the case when PARM is a
7441    BOUND_TEMPLATE_TEMPLATE_PARM.  */
7442 
7443 static int
unify_bound_ttp_args(tree tparms,tree targs,tree parm,tree & arg,bool explain_p)7444 unify_bound_ttp_args (tree tparms, tree targs, tree parm, tree& arg,
7445 		      bool explain_p)
7446 {
7447   tree parmvec = TYPE_TI_ARGS (parm);
7448   tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
7449 
7450   /* The template template parm might be variadic and the argument
7451      not, so flatten both argument lists.  */
7452   parmvec = expand_template_argument_pack (parmvec);
7453   argvec = expand_template_argument_pack (argvec);
7454 
7455   if (flag_new_ttp)
7456     {
7457       /* In keeping with P0522R0, adjust P's template arguments
7458 	 to apply to A's template; then flatten it again.  */
7459       tree nparmvec = parmvec;
7460       nparmvec = coerce_ttp_args_for_tta (arg, parmvec, tf_none);
7461       nparmvec = expand_template_argument_pack (nparmvec);
7462 
7463       if (unify (tparms, targs, nparmvec, argvec,
7464 		 UNIFY_ALLOW_NONE, explain_p))
7465 	return 1;
7466 
7467       /* If the P0522 adjustment eliminated a pack expansion, deduce
7468 	 empty packs.  */
7469       if (flag_new_ttp
7470 	  && TREE_VEC_LENGTH (nparmvec) < TREE_VEC_LENGTH (parmvec)
7471 	  && unify_pack_expansion (tparms, targs, parmvec, argvec,
7472 				   DEDUCE_EXACT, /*sub*/true, explain_p))
7473 	return 1;
7474     }
7475   else
7476     {
7477       /* Deduce arguments T, i from TT<T> or TT<i>.
7478 	 We check each element of PARMVEC and ARGVEC individually
7479 	 rather than the whole TREE_VEC since they can have
7480 	 different number of elements, which is allowed under N2555.  */
7481 
7482       int len = TREE_VEC_LENGTH (parmvec);
7483 
7484       /* Check if the parameters end in a pack, making them
7485 	 variadic.  */
7486       int parm_variadic_p = 0;
7487       if (len > 0
7488 	  && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
7489 	parm_variadic_p = 1;
7490 
7491       for (int i = 0; i < len - parm_variadic_p; ++i)
7492 	/* If the template argument list of P contains a pack
7493 	   expansion that is not the last template argument, the
7494 	   entire template argument list is a non-deduced
7495 	   context.  */
7496 	if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
7497 	  return unify_success (explain_p);
7498 
7499       if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
7500 	return unify_too_few_arguments (explain_p,
7501 					TREE_VEC_LENGTH (argvec), len);
7502 
7503       for (int i = 0; i < len - parm_variadic_p; ++i)
7504 	if (unify (tparms, targs,
7505 		   TREE_VEC_ELT (parmvec, i),
7506 		   TREE_VEC_ELT (argvec, i),
7507 		   UNIFY_ALLOW_NONE, explain_p))
7508 	  return 1;
7509 
7510       if (parm_variadic_p
7511 	  && unify_pack_expansion (tparms, targs,
7512 				   parmvec, argvec,
7513 				   DEDUCE_EXACT,
7514 				   /*subr=*/true, explain_p))
7515 	return 1;
7516     }
7517 
7518   return 0;
7519 }
7520 
7521 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
7522    template template parameters.  Both PARM_PARMS and ARG_PARMS are
7523    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
7524    or PARM_DECL.
7525 
7526    Consider the example:
7527      template <class T> class A;
7528      template<template <class U> class TT> class B;
7529 
7530    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
7531    the parameters to A, and OUTER_ARGS contains A.  */
7532 
7533 static int
coerce_template_template_parms(tree parm_parms,tree arg_parms,tsubst_flags_t complain,tree in_decl,tree outer_args)7534 coerce_template_template_parms (tree parm_parms,
7535 				tree arg_parms,
7536 				tsubst_flags_t complain,
7537 				tree in_decl,
7538 				tree outer_args)
7539 {
7540   int nparms, nargs, i;
7541   tree parm, arg;
7542   int variadic_p = 0;
7543 
7544   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
7545   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
7546 
7547   nparms = TREE_VEC_LENGTH (parm_parms);
7548   nargs = TREE_VEC_LENGTH (arg_parms);
7549 
7550   if (flag_new_ttp)
7551     {
7552       /* P0522R0: A template template-parameter P is at least as specialized as
7553 	 a template template-argument A if, given the following rewrite to two
7554 	 function templates, the function template corresponding to P is at
7555 	 least as specialized as the function template corresponding to A
7556 	 according to the partial ordering rules for function templates
7557 	 ([temp.func.order]). Given an invented class template X with the
7558 	 template parameter list of A (including default arguments):
7559 
7560 	 * Each of the two function templates has the same template parameters,
7561 	 respectively, as P or A.
7562 
7563 	 * Each function template has a single function parameter whose type is
7564 	 a specialization of X with template arguments corresponding to the
7565 	 template parameters from the respective function template where, for
7566 	 each template parameter PP in the template parameter list of the
7567 	 function template, a corresponding template argument AA is formed. If
7568 	 PP declares a parameter pack, then AA is the pack expansion
7569 	 PP... ([temp.variadic]); otherwise, AA is the id-expression PP.
7570 
7571 	 If the rewrite produces an invalid type, then P is not at least as
7572 	 specialized as A.  */
7573 
7574       /* So coerce P's args to apply to A's parms, and then deduce between A's
7575 	 args and the converted args.  If that succeeds, A is at least as
7576 	 specialized as P, so they match.*/
7577       tree pargs = template_parms_level_to_args (parm_parms);
7578       pargs = add_outermost_template_args (outer_args, pargs);
7579       ++processing_template_decl;
7580       pargs = coerce_template_parms (arg_parms, pargs, NULL_TREE, tf_none,
7581 				     /*require_all*/true, /*use_default*/true);
7582       --processing_template_decl;
7583       if (pargs != error_mark_node)
7584 	{
7585 	  tree targs = make_tree_vec (nargs);
7586 	  tree aargs = template_parms_level_to_args (arg_parms);
7587 	  if (!unify (arg_parms, targs, aargs, pargs, UNIFY_ALLOW_NONE,
7588 		      /*explain*/false))
7589 	    return 1;
7590 	}
7591     }
7592 
7593   /* Determine whether we have a parameter pack at the end of the
7594      template template parameter's template parameter list.  */
7595   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
7596     {
7597       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
7598 
7599       if (error_operand_p (parm))
7600 	return 0;
7601 
7602       switch (TREE_CODE (parm))
7603         {
7604         case TEMPLATE_DECL:
7605         case TYPE_DECL:
7606           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
7607             variadic_p = 1;
7608           break;
7609 
7610         case PARM_DECL:
7611           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
7612             variadic_p = 1;
7613           break;
7614 
7615         default:
7616           gcc_unreachable ();
7617         }
7618     }
7619 
7620   if (nargs != nparms
7621       && !(variadic_p && nargs >= nparms - 1))
7622     return 0;
7623 
7624   /* Check all of the template parameters except the parameter pack at
7625      the end (if any).  */
7626   for (i = 0; i < nparms - variadic_p; ++i)
7627     {
7628       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
7629           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
7630         continue;
7631 
7632       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
7633       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
7634 
7635       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
7636                                           outer_args))
7637 	return 0;
7638 
7639     }
7640 
7641   if (variadic_p)
7642     {
7643       /* Check each of the template parameters in the template
7644 	 argument against the template parameter pack at the end of
7645 	 the template template parameter.  */
7646       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
7647 	return 0;
7648 
7649       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
7650 
7651       for (; i < nargs; ++i)
7652         {
7653           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
7654             continue;
7655 
7656           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
7657 
7658           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
7659                                               outer_args))
7660             return 0;
7661         }
7662     }
7663 
7664   return 1;
7665 }
7666 
7667 /* Verifies that the deduced template arguments (in TARGS) for the
7668    template template parameters (in TPARMS) represent valid bindings,
7669    by comparing the template parameter list of each template argument
7670    to the template parameter list of its corresponding template
7671    template parameter, in accordance with DR150. This
7672    routine can only be called after all template arguments have been
7673    deduced. It will return TRUE if all of the template template
7674    parameter bindings are okay, FALSE otherwise.  */
7675 bool
template_template_parm_bindings_ok_p(tree tparms,tree targs)7676 template_template_parm_bindings_ok_p (tree tparms, tree targs)
7677 {
7678   int i, ntparms = TREE_VEC_LENGTH (tparms);
7679   bool ret = true;
7680 
7681   /* We're dealing with template parms in this process.  */
7682   ++processing_template_decl;
7683 
7684   targs = INNERMOST_TEMPLATE_ARGS (targs);
7685 
7686   for (i = 0; i < ntparms; ++i)
7687     {
7688       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
7689       tree targ = TREE_VEC_ELT (targs, i);
7690 
7691       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
7692 	{
7693 	  tree packed_args = NULL_TREE;
7694 	  int idx, len = 1;
7695 
7696 	  if (ARGUMENT_PACK_P (targ))
7697 	    {
7698 	      /* Look inside the argument pack.  */
7699 	      packed_args = ARGUMENT_PACK_ARGS (targ);
7700 	      len = TREE_VEC_LENGTH (packed_args);
7701 	    }
7702 
7703 	  for (idx = 0; idx < len; ++idx)
7704 	    {
7705 	      tree targ_parms = NULL_TREE;
7706 
7707 	      if (packed_args)
7708 		/* Extract the next argument from the argument
7709 		   pack.  */
7710 		targ = TREE_VEC_ELT (packed_args, idx);
7711 
7712 	      if (PACK_EXPANSION_P (targ))
7713 		/* Look at the pattern of the pack expansion.  */
7714 		targ = PACK_EXPANSION_PATTERN (targ);
7715 
7716 	      /* Extract the template parameters from the template
7717 		 argument.  */
7718 	      if (TREE_CODE (targ) == TEMPLATE_DECL)
7719 		targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
7720 	      else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
7721 		targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
7722 
7723 	      /* Verify that we can coerce the template template
7724 		 parameters from the template argument to the template
7725 		 parameter.  This requires an exact match.  */
7726 	      if (targ_parms
7727 		  && !coerce_template_template_parms
7728 		       (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
7729 			targ_parms,
7730 			tf_none,
7731 			tparm,
7732 			targs))
7733 		{
7734 		  ret = false;
7735 		  goto out;
7736 		}
7737 	    }
7738 	}
7739     }
7740 
7741  out:
7742 
7743   --processing_template_decl;
7744   return ret;
7745 }
7746 
7747 /* Since type attributes aren't mangled, we need to strip them from
7748    template type arguments.  */
7749 
7750 static tree
canonicalize_type_argument(tree arg,tsubst_flags_t complain)7751 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
7752 {
7753   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
7754     return arg;
7755   bool removed_attributes = false;
7756   tree canon = strip_typedefs (arg, &removed_attributes);
7757   if (removed_attributes
7758       && (complain & tf_warning))
7759     warning (OPT_Wignored_attributes,
7760 	     "ignoring attributes on template argument %qT", arg);
7761   return canon;
7762 }
7763 
7764 /* And from inside dependent non-type arguments like sizeof(Type).  */
7765 
7766 static tree
canonicalize_expr_argument(tree arg,tsubst_flags_t complain)7767 canonicalize_expr_argument (tree arg, tsubst_flags_t complain)
7768 {
7769   if (!arg || arg == error_mark_node)
7770     return arg;
7771   bool removed_attributes = false;
7772   tree canon = strip_typedefs_expr (arg, &removed_attributes);
7773   if (removed_attributes
7774       && (complain & tf_warning))
7775     warning (OPT_Wignored_attributes,
7776 	     "ignoring attributes in template argument %qE", arg);
7777   return canon;
7778 }
7779 
7780 // A template declaration can be substituted for a constrained
7781 // template template parameter only when the argument is more
7782 // constrained than the parameter.
7783 static bool
is_compatible_template_arg(tree parm,tree arg)7784 is_compatible_template_arg (tree parm, tree arg)
7785 {
7786   tree parm_cons = get_constraints (parm);
7787 
7788   /* For now, allow constrained template template arguments
7789      and unconstrained template template parameters.  */
7790   if (parm_cons == NULL_TREE)
7791     return true;
7792 
7793   tree arg_cons = get_constraints (arg);
7794 
7795   // If the template parameter is constrained, we need to rewrite its
7796   // constraints in terms of the ARG's template parameters. This ensures
7797   // that all of the template parameter types will have the same depth.
7798   //
7799   // Note that this is only valid when coerce_template_template_parm is
7800   // true for the innermost template parameters of PARM and ARG. In other
7801   // words, because coercion is successful, this conversion will be valid.
7802   if (parm_cons)
7803     {
7804       tree args = template_parms_to_args (DECL_TEMPLATE_PARMS (arg));
7805       parm_cons = tsubst_constraint_info (parm_cons,
7806 					  INNERMOST_TEMPLATE_ARGS (args),
7807 					  tf_none, NULL_TREE);
7808       if (parm_cons == error_mark_node)
7809         return false;
7810     }
7811 
7812   return subsumes (parm_cons, arg_cons);
7813 }
7814 
7815 // Convert a placeholder argument into a binding to the original
7816 // parameter. The original parameter is saved as the TREE_TYPE of
7817 // ARG.
7818 static inline tree
convert_wildcard_argument(tree parm,tree arg)7819 convert_wildcard_argument (tree parm, tree arg)
7820 {
7821   TREE_TYPE (arg) = parm;
7822   return arg;
7823 }
7824 
7825 /* We can't fully resolve ARG given as a non-type template argument to TYPE,
7826    because one of them is dependent.  But we need to represent the
7827    conversion for the benefit of cp_tree_equal.  */
7828 
7829 static tree
maybe_convert_nontype_argument(tree type,tree arg)7830 maybe_convert_nontype_argument (tree type, tree arg)
7831 {
7832   /* Auto parms get no conversion.  */
7833   if (type_uses_auto (type))
7834     return arg;
7835   /* We don't need or want to add this conversion now if we're going to use the
7836      argument for deduction.  */
7837   if (value_dependent_expression_p (arg))
7838     return arg;
7839 
7840   type = cv_unqualified (type);
7841   tree argtype = TREE_TYPE (arg);
7842   if (same_type_p (type, argtype))
7843     return arg;
7844 
7845   arg = build1 (IMPLICIT_CONV_EXPR, type, arg);
7846   IMPLICIT_CONV_EXPR_NONTYPE_ARG (arg) = true;
7847   return arg;
7848 }
7849 
7850 /* Convert the indicated template ARG as necessary to match the
7851    indicated template PARM.  Returns the converted ARG, or
7852    error_mark_node if the conversion was unsuccessful.  Error and
7853    warning messages are issued under control of COMPLAIN.  This
7854    conversion is for the Ith parameter in the parameter list.  ARGS is
7855    the full set of template arguments deduced so far.  */
7856 
7857 static tree
convert_template_argument(tree parm,tree arg,tree args,tsubst_flags_t complain,int i,tree in_decl)7858 convert_template_argument (tree parm,
7859 			   tree arg,
7860 			   tree args,
7861 			   tsubst_flags_t complain,
7862 			   int i,
7863 			   tree in_decl)
7864 {
7865   tree orig_arg;
7866   tree val;
7867   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
7868 
7869   if (parm == error_mark_node || error_operand_p (arg))
7870     return error_mark_node;
7871 
7872   /* Trivially convert placeholders. */
7873   if (TREE_CODE (arg) == WILDCARD_DECL)
7874     return convert_wildcard_argument (parm, arg);
7875 
7876   if (arg == any_targ_node)
7877     return arg;
7878 
7879   if (TREE_CODE (arg) == TREE_LIST
7880       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
7881     {
7882       /* The template argument was the name of some
7883 	 member function.  That's usually
7884 	 invalid, but static members are OK.  In any
7885 	 case, grab the underlying fields/functions
7886 	 and issue an error later if required.  */
7887       orig_arg = TREE_VALUE (arg);
7888       TREE_TYPE (arg) = unknown_type_node;
7889     }
7890 
7891   orig_arg = arg;
7892 
7893   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
7894   requires_type = (TREE_CODE (parm) == TYPE_DECL
7895 		   || requires_tmpl_type);
7896 
7897   /* When determining whether an argument pack expansion is a template,
7898      look at the pattern.  */
7899   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
7900     arg = PACK_EXPANSION_PATTERN (arg);
7901 
7902   /* Deal with an injected-class-name used as a template template arg.  */
7903   if (requires_tmpl_type && CLASS_TYPE_P (arg))
7904     {
7905       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
7906       if (TREE_CODE (t) == TEMPLATE_DECL)
7907 	{
7908 	  if (cxx_dialect >= cxx11)
7909 	    /* OK under DR 1004.  */;
7910 	  else if (complain & tf_warning_or_error)
7911 	    pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
7912 		     " used as template template argument", TYPE_NAME (arg));
7913 	  else if (flag_pedantic_errors)
7914 	    t = arg;
7915 
7916 	  arg = t;
7917 	}
7918     }
7919 
7920   is_tmpl_type =
7921     ((TREE_CODE (arg) == TEMPLATE_DECL
7922       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
7923      || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
7924      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
7925      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
7926 
7927   if (is_tmpl_type
7928       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
7929 	  || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
7930     arg = TYPE_STUB_DECL (arg);
7931 
7932   is_type = TYPE_P (arg) || is_tmpl_type;
7933 
7934   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
7935       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
7936     {
7937       if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
7938 	{
7939 	  if (complain & tf_error)
7940 	    error ("invalid use of destructor %qE as a type", orig_arg);
7941 	  return error_mark_node;
7942 	}
7943 
7944       permerror (input_location,
7945 		 "to refer to a type member of a template parameter, "
7946 		 "use %<typename %E%>", orig_arg);
7947 
7948       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
7949 				     TREE_OPERAND (arg, 1),
7950 				     typename_type,
7951 				     complain);
7952       arg = orig_arg;
7953       is_type = 1;
7954     }
7955   if (is_type != requires_type)
7956     {
7957       if (in_decl)
7958 	{
7959 	  if (complain & tf_error)
7960 	    {
7961 	      error ("type/value mismatch at argument %d in template "
7962 		     "parameter list for %qD",
7963 		     i + 1, in_decl);
7964 	      if (is_type)
7965 		inform (input_location,
7966 			"  expected a constant of type %qT, got %qT",
7967 			TREE_TYPE (parm),
7968 			(DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
7969 	      else if (requires_tmpl_type)
7970 		inform (input_location,
7971 			"  expected a class template, got %qE", orig_arg);
7972 	      else
7973 		inform (input_location,
7974 			"  expected a type, got %qE", orig_arg);
7975 	    }
7976 	}
7977       return error_mark_node;
7978     }
7979   if (is_tmpl_type ^ requires_tmpl_type)
7980     {
7981       if (in_decl && (complain & tf_error))
7982 	{
7983 	  error ("type/value mismatch at argument %d in template "
7984 		 "parameter list for %qD",
7985 		 i + 1, in_decl);
7986 	  if (is_tmpl_type)
7987 	    inform (input_location,
7988 		    "  expected a type, got %qT", DECL_NAME (arg));
7989 	  else
7990 	    inform (input_location,
7991 		    "  expected a class template, got %qT", orig_arg);
7992 	}
7993       return error_mark_node;
7994     }
7995 
7996   if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
7997     /* We already did the appropriate conversion when packing args.  */
7998     val = orig_arg;
7999   else if (is_type)
8000     {
8001       if (requires_tmpl_type)
8002 	{
8003 	  if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
8004 	    /* The number of argument required is not known yet.
8005 	       Just accept it for now.  */
8006 	    val = orig_arg;
8007 	  else
8008 	    {
8009 	      tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
8010 	      tree argparm;
8011 
8012 	      /* Strip alias templates that are equivalent to another
8013 		 template.  */
8014 	      arg = get_underlying_template (arg);
8015               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
8016 
8017 	      if (coerce_template_template_parms (parmparm, argparm,
8018 						  complain, in_decl,
8019 						  args))
8020 		{
8021 		  val = arg;
8022 
8023 		  /* TEMPLATE_TEMPLATE_PARM node is preferred over
8024 		     TEMPLATE_DECL.  */
8025 		  if (val != error_mark_node)
8026                     {
8027                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
8028                         val = TREE_TYPE (val);
8029 		      if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
8030 			val = make_pack_expansion (val, complain);
8031                     }
8032 		}
8033 	      else
8034 		{
8035 		  if (in_decl && (complain & tf_error))
8036 		    {
8037 		      error ("type/value mismatch at argument %d in "
8038 			     "template parameter list for %qD",
8039 			     i + 1, in_decl);
8040 		      inform (input_location,
8041 			      "  expected a template of type %qD, got %qT",
8042 			      parm, orig_arg);
8043 		    }
8044 
8045 		  val = error_mark_node;
8046 		}
8047 
8048               // Check that the constraints are compatible before allowing the
8049               // substitution.
8050               if (val != error_mark_node)
8051                 if (!is_compatible_template_arg (parm, arg))
8052                   {
8053 		    if (in_decl && (complain & tf_error))
8054                       {
8055                         error ("constraint mismatch at argument %d in "
8056                                "template parameter list for %qD",
8057                                i + 1, in_decl);
8058                         inform (input_location, "  expected %qD but got %qD",
8059                                 parm, arg);
8060                       }
8061 		    val = error_mark_node;
8062                   }
8063 	    }
8064 	}
8065       else
8066 	val = orig_arg;
8067       /* We only form one instance of each template specialization.
8068 	 Therefore, if we use a non-canonical variant (i.e., a
8069 	 typedef), any future messages referring to the type will use
8070 	 the typedef, which is confusing if those future uses do not
8071 	 themselves also use the typedef.  */
8072       if (TYPE_P (val))
8073 	val = canonicalize_type_argument (val, complain);
8074     }
8075   else
8076     {
8077       tree t = TREE_TYPE (parm);
8078 
8079       if (TEMPLATE_PARM_LEVEL (get_template_parm_index (parm))
8080 	  > TMPL_ARGS_DEPTH (args))
8081 	/* We don't have enough levels of args to do any substitution.  This
8082 	   can happen in the context of -fnew-ttp-matching.  */;
8083       else if (tree a = type_uses_auto (t))
8084 	{
8085 	  t = do_auto_deduction (t, arg, a, complain, adc_unify, args);
8086 	  if (t == error_mark_node)
8087 	    return error_mark_node;
8088 	}
8089       else
8090 	t = tsubst (t, args, complain, in_decl);
8091 
8092       if (invalid_nontype_parm_type_p (t, complain))
8093 	return error_mark_node;
8094 
8095       if (t != TREE_TYPE (parm))
8096 	t = canonicalize_type_argument (t, complain);
8097 
8098       if (!type_dependent_expression_p (orig_arg)
8099 	  && !uses_template_parms (t))
8100 	/* We used to call digest_init here.  However, digest_init
8101 	   will report errors, which we don't want when complain
8102 	   is zero.  More importantly, digest_init will try too
8103 	   hard to convert things: for example, `0' should not be
8104 	   converted to pointer type at this point according to
8105 	   the standard.  Accepting this is not merely an
8106 	   extension, since deciding whether or not these
8107 	   conversions can occur is part of determining which
8108 	   function template to call, or whether a given explicit
8109 	   argument specification is valid.  */
8110 	val = convert_nontype_argument (t, orig_arg, complain);
8111       else
8112 	{
8113 	  val = canonicalize_expr_argument (orig_arg, complain);
8114 	  val = maybe_convert_nontype_argument (t, val);
8115 	}
8116 
8117 
8118       if (val == NULL_TREE)
8119 	val = error_mark_node;
8120       else if (val == error_mark_node && (complain & tf_error))
8121 	error ("could not convert template argument %qE from %qT to %qT",
8122 	       orig_arg, TREE_TYPE (orig_arg), t);
8123 
8124       if (INDIRECT_REF_P (val))
8125         {
8126           /* Reject template arguments that are references to built-in
8127              functions with no library fallbacks.  */
8128           const_tree inner = TREE_OPERAND (val, 0);
8129 	  const_tree innertype = TREE_TYPE (inner);
8130 	  if (innertype
8131 	      && TYPE_REF_P (innertype)
8132 	      && TREE_CODE (TREE_TYPE (innertype)) == FUNCTION_TYPE
8133 	      && TREE_OPERAND_LENGTH (inner) > 0
8134               && reject_gcc_builtin (TREE_OPERAND (inner, 0)))
8135               return error_mark_node;
8136         }
8137 
8138       if (TREE_CODE (val) == SCOPE_REF)
8139 	{
8140 	  /* Strip typedefs from the SCOPE_REF.  */
8141 	  tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
8142 	  tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
8143 						   complain);
8144 	  val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
8145 				      QUALIFIED_NAME_IS_TEMPLATE (val));
8146 	}
8147     }
8148 
8149   return val;
8150 }
8151 
8152 /* Coerces the remaining template arguments in INNER_ARGS (from
8153    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
8154    Returns the coerced argument pack. PARM_IDX is the position of this
8155    parameter in the template parameter list. ARGS is the original
8156    template argument list.  */
8157 static tree
coerce_template_parameter_pack(tree parms,int parm_idx,tree args,tree inner_args,int arg_idx,tree new_args,int * lost,tree in_decl,tsubst_flags_t complain)8158 coerce_template_parameter_pack (tree parms,
8159                                 int parm_idx,
8160                                 tree args,
8161                                 tree inner_args,
8162                                 int arg_idx,
8163                                 tree new_args,
8164                                 int* lost,
8165                                 tree in_decl,
8166                                 tsubst_flags_t complain)
8167 {
8168   tree parm = TREE_VEC_ELT (parms, parm_idx);
8169   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
8170   tree packed_args;
8171   tree argument_pack;
8172   tree packed_parms = NULL_TREE;
8173 
8174   if (arg_idx > nargs)
8175     arg_idx = nargs;
8176 
8177   if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
8178     {
8179       /* When the template parameter is a non-type template parameter pack
8180          or template template parameter pack whose type or template
8181          parameters use parameter packs, we know exactly how many arguments
8182          we are looking for.  Build a vector of the instantiated decls for
8183          these template parameters in PACKED_PARMS.  */
8184       /* We can't use make_pack_expansion here because it would interpret a
8185 	 _DECL as a use rather than a declaration.  */
8186       tree decl = TREE_VALUE (parm);
8187       tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
8188       SET_PACK_EXPANSION_PATTERN (exp, decl);
8189       PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
8190       SET_TYPE_STRUCTURAL_EQUALITY (exp);
8191 
8192       TREE_VEC_LENGTH (args)--;
8193       packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
8194       TREE_VEC_LENGTH (args)++;
8195 
8196       if (packed_parms == error_mark_node)
8197         return error_mark_node;
8198 
8199       /* If we're doing a partial instantiation of a member template,
8200          verify that all of the types used for the non-type
8201          template parameter pack are, in fact, valid for non-type
8202          template parameters.  */
8203       if (arg_idx < nargs
8204           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
8205         {
8206           int j, len = TREE_VEC_LENGTH (packed_parms);
8207           for (j = 0; j < len; ++j)
8208             {
8209               tree t = TREE_VEC_ELT (packed_parms, j);
8210               if (TREE_CODE (t) == PARM_DECL
8211 		  && invalid_nontype_parm_type_p (TREE_TYPE (t), complain))
8212                 return error_mark_node;
8213             }
8214 	  /* We don't know how many args we have yet, just
8215 	     use the unconverted ones for now.  */
8216 	  return NULL_TREE;
8217         }
8218 
8219       packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
8220     }
8221   /* Check if we have a placeholder pack, which indicates we're
8222      in the context of a introduction list.  In that case we want
8223      to match this pack to the single placeholder.  */
8224   else if (arg_idx < nargs
8225            && TREE_CODE (TREE_VEC_ELT (inner_args, arg_idx)) == WILDCARD_DECL
8226            && WILDCARD_PACK_P (TREE_VEC_ELT (inner_args, arg_idx)))
8227     {
8228       nargs = arg_idx + 1;
8229       packed_args = make_tree_vec (1);
8230     }
8231   else
8232     packed_args = make_tree_vec (nargs - arg_idx);
8233 
8234   /* Convert the remaining arguments, which will be a part of the
8235      parameter pack "parm".  */
8236   int first_pack_arg = arg_idx;
8237   for (; arg_idx < nargs; ++arg_idx)
8238     {
8239       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
8240       tree actual_parm = TREE_VALUE (parm);
8241       int pack_idx = arg_idx - first_pack_arg;
8242 
8243       if (packed_parms)
8244         {
8245 	  /* Once we've packed as many args as we have types, stop.  */
8246 	  if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
8247 	    break;
8248 	  else if (PACK_EXPANSION_P (arg))
8249 	    /* We don't know how many args we have yet, just
8250 	       use the unconverted ones for now.  */
8251 	    return NULL_TREE;
8252 	  else
8253 	    actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
8254         }
8255 
8256       if (arg == error_mark_node)
8257 	{
8258 	  if (complain & tf_error)
8259 	    error ("template argument %d is invalid", arg_idx + 1);
8260 	}
8261       else
8262 	arg = convert_template_argument (actual_parm,
8263 					 arg, new_args, complain, parm_idx,
8264 					 in_decl);
8265       if (arg == error_mark_node)
8266         (*lost)++;
8267       TREE_VEC_ELT (packed_args, pack_idx) = arg;
8268     }
8269 
8270   if (arg_idx - first_pack_arg < TREE_VEC_LENGTH (packed_args)
8271       && TREE_VEC_LENGTH (packed_args) > 0)
8272     {
8273       if (complain & tf_error)
8274 	error ("wrong number of template arguments (%d, should be %d)",
8275 	       arg_idx - first_pack_arg, TREE_VEC_LENGTH (packed_args));
8276       return error_mark_node;
8277     }
8278 
8279   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
8280       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
8281     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
8282   else
8283     {
8284       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
8285       TREE_CONSTANT (argument_pack) = 1;
8286     }
8287 
8288   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
8289   if (CHECKING_P)
8290     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
8291 					 TREE_VEC_LENGTH (packed_args));
8292   return argument_pack;
8293 }
8294 
8295 /* Returns the number of pack expansions in the template argument vector
8296    ARGS.  */
8297 
8298 static int
pack_expansion_args_count(tree args)8299 pack_expansion_args_count (tree args)
8300 {
8301   int i;
8302   int count = 0;
8303   if (args)
8304     for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
8305       {
8306 	tree elt = TREE_VEC_ELT (args, i);
8307 	if (elt && PACK_EXPANSION_P (elt))
8308 	  ++count;
8309       }
8310   return count;
8311 }
8312 
8313 /* Convert all template arguments to their appropriate types, and
8314    return a vector containing the innermost resulting template
8315    arguments.  If any error occurs, return error_mark_node. Error and
8316    warning messages are issued under control of COMPLAIN.
8317 
8318    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
8319    for arguments not specified in ARGS.  Otherwise, if
8320    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
8321    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
8322    USE_DEFAULT_ARGS is false, then all arguments must be specified in
8323    ARGS.  */
8324 
8325 static tree
coerce_template_parms(tree parms,tree args,tree in_decl,tsubst_flags_t complain,bool require_all_args,bool use_default_args)8326 coerce_template_parms (tree parms,
8327 		       tree args,
8328 		       tree in_decl,
8329 		       tsubst_flags_t complain,
8330 		       bool require_all_args,
8331 		       bool use_default_args)
8332 {
8333   int nparms, nargs, parm_idx, arg_idx, lost = 0;
8334   tree orig_inner_args;
8335   tree inner_args;
8336   tree new_args;
8337   tree new_inner_args;
8338 
8339   /* When used as a boolean value, indicates whether this is a
8340      variadic template parameter list. Since it's an int, we can also
8341      subtract it from nparms to get the number of non-variadic
8342      parameters.  */
8343   int variadic_p = 0;
8344   int variadic_args_p = 0;
8345   int post_variadic_parms = 0;
8346 
8347   /* Adjustment to nparms for fixed parameter packs.  */
8348   int fixed_pack_adjust = 0;
8349   int fixed_packs = 0;
8350   int missing = 0;
8351 
8352   /* Likewise for parameters with default arguments.  */
8353   int default_p = 0;
8354 
8355   if (args == error_mark_node)
8356     return error_mark_node;
8357 
8358   nparms = TREE_VEC_LENGTH (parms);
8359 
8360   /* Determine if there are any parameter packs or default arguments.  */
8361   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
8362     {
8363       tree parm = TREE_VEC_ELT (parms, parm_idx);
8364       if (variadic_p)
8365 	++post_variadic_parms;
8366       if (template_parameter_pack_p (TREE_VALUE (parm)))
8367 	++variadic_p;
8368       if (TREE_PURPOSE (parm))
8369 	++default_p;
8370     }
8371 
8372   inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
8373   /* If there are no parameters that follow a parameter pack, we need to
8374      expand any argument packs so that we can deduce a parameter pack from
8375      some non-packed args followed by an argument pack, as in variadic85.C.
8376      If there are such parameters, we need to leave argument packs intact
8377      so the arguments are assigned properly.  This can happen when dealing
8378      with a nested class inside a partial specialization of a class
8379      template, as in variadic92.C, or when deducing a template parameter pack
8380      from a sub-declarator, as in variadic114.C.  */
8381   if (!post_variadic_parms)
8382     inner_args = expand_template_argument_pack (inner_args);
8383 
8384   /* Count any pack expansion args.  */
8385   variadic_args_p = pack_expansion_args_count (inner_args);
8386 
8387   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
8388   if ((nargs - variadic_args_p > nparms && !variadic_p)
8389       || (nargs < nparms - variadic_p
8390 	  && require_all_args
8391 	  && !variadic_args_p
8392 	  && (!use_default_args
8393 	      || (TREE_VEC_ELT (parms, nargs) != error_mark_node
8394                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
8395     {
8396     bad_nargs:
8397       if (complain & tf_error)
8398 	{
8399           if (variadic_p || default_p)
8400             {
8401               nparms -= variadic_p + default_p;
8402 	      error ("wrong number of template arguments "
8403 		     "(%d, should be at least %d)", nargs, nparms);
8404             }
8405 	  else
8406 	     error ("wrong number of template arguments "
8407 		    "(%d, should be %d)", nargs, nparms);
8408 
8409 	  if (in_decl)
8410 	    inform (DECL_SOURCE_LOCATION (in_decl),
8411 		    "provided for %qD", in_decl);
8412 	}
8413 
8414       return error_mark_node;
8415     }
8416   /* We can't pass a pack expansion to a non-pack parameter of an alias
8417      template (DR 1430).  */
8418   else if (in_decl
8419 	   && (DECL_ALIAS_TEMPLATE_P (in_decl)
8420 	       || concept_template_p (in_decl))
8421 	   && variadic_args_p
8422 	   && nargs - variadic_args_p < nparms - variadic_p)
8423     {
8424       if (complain & tf_error)
8425 	{
8426 	  for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
8427 	    {
8428 	      tree arg = TREE_VEC_ELT (inner_args, i);
8429 	      tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
8430 
8431 	      if (PACK_EXPANSION_P (arg)
8432 		  && !template_parameter_pack_p (parm))
8433 		{
8434 		  if (DECL_ALIAS_TEMPLATE_P (in_decl))
8435 		    error_at (location_of (arg),
8436 			      "pack expansion argument for non-pack parameter "
8437 			      "%qD of alias template %qD", parm, in_decl);
8438 		  else
8439 		    error_at (location_of (arg),
8440 			      "pack expansion argument for non-pack parameter "
8441 			      "%qD of concept %qD", parm, in_decl);
8442 		  inform (DECL_SOURCE_LOCATION (parm), "declared here");
8443 		  goto found;
8444 		}
8445 	    }
8446 	  gcc_unreachable ();
8447 	found:;
8448 	}
8449       return error_mark_node;
8450     }
8451 
8452   /* We need to evaluate the template arguments, even though this
8453      template-id may be nested within a "sizeof".  */
8454   cp_evaluated ev;
8455 
8456   new_inner_args = make_tree_vec (nparms);
8457   new_args = add_outermost_template_args (args, new_inner_args);
8458   int pack_adjust = 0;
8459   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
8460     {
8461       tree arg;
8462       tree parm;
8463 
8464       /* Get the Ith template parameter.  */
8465       parm = TREE_VEC_ELT (parms, parm_idx);
8466 
8467       if (parm == error_mark_node)
8468 	{
8469 	  TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
8470 	  continue;
8471 	}
8472 
8473       /* Calculate the next argument.  */
8474       if (arg_idx < nargs)
8475 	arg = TREE_VEC_ELT (inner_args, arg_idx);
8476       else
8477 	arg = NULL_TREE;
8478 
8479       if (template_parameter_pack_p (TREE_VALUE (parm))
8480 	  && (arg || require_all_args || !(complain & tf_partial))
8481 	  && !(arg && ARGUMENT_PACK_P (arg)))
8482         {
8483 	  /* Some arguments will be placed in the
8484 	     template parameter pack PARM.  */
8485 	  arg = coerce_template_parameter_pack (parms, parm_idx, args,
8486 						inner_args, arg_idx,
8487 						new_args, &lost,
8488 						in_decl, complain);
8489 
8490 	  if (arg == NULL_TREE)
8491 	    {
8492 	      /* We don't know how many args we have yet, just use the
8493 		 unconverted (and still packed) ones for now.  */
8494 	      new_inner_args = orig_inner_args;
8495 	      arg_idx = nargs;
8496 	      break;
8497 	    }
8498 
8499           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
8500 
8501           /* Store this argument.  */
8502           if (arg == error_mark_node)
8503 	    {
8504 	      lost++;
8505 	      /* We are done with all of the arguments.  */
8506 	      arg_idx = nargs;
8507 	      break;
8508 	    }
8509 	  else
8510 	    {
8511 	      pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
8512 	      arg_idx += pack_adjust;
8513 	      if (fixed_parameter_pack_p (TREE_VALUE (parm)))
8514 		{
8515 		  ++fixed_packs;
8516 		  fixed_pack_adjust += pack_adjust;
8517 		}
8518 	    }
8519 
8520           continue;
8521         }
8522       else if (arg)
8523 	{
8524           if (PACK_EXPANSION_P (arg))
8525             {
8526 	      /* "If every valid specialization of a variadic template
8527 		 requires an empty template parameter pack, the template is
8528 		 ill-formed, no diagnostic required."  So check that the
8529 		 pattern works with this parameter.  */
8530 	      tree pattern = PACK_EXPANSION_PATTERN (arg);
8531 	      tree conv = convert_template_argument (TREE_VALUE (parm),
8532 						     pattern, new_args,
8533 						     complain, parm_idx,
8534 						     in_decl);
8535 	      if (conv == error_mark_node)
8536 		{
8537 		  if (complain & tf_error)
8538 		    inform (input_location, "so any instantiation with a "
8539 			    "non-empty parameter pack would be ill-formed");
8540 		  ++lost;
8541 		}
8542 	      else if (TYPE_P (conv) && !TYPE_P (pattern))
8543 		/* Recover from missing typename.  */
8544 		TREE_VEC_ELT (inner_args, arg_idx)
8545 		  = make_pack_expansion (conv, complain);
8546 
8547               /* We don't know how many args we have yet, just
8548                  use the unconverted ones for now.  */
8549               new_inner_args = inner_args;
8550 	      arg_idx = nargs;
8551               break;
8552             }
8553         }
8554       else if (require_all_args)
8555 	{
8556 	  /* There must be a default arg in this case.  */
8557 	  arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
8558 				     complain, in_decl);
8559 	  /* The position of the first default template argument,
8560 	     is also the number of non-defaulted arguments in NEW_INNER_ARGS.
8561 	     Record that.  */
8562 	  if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
8563 	    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
8564 						 arg_idx - pack_adjust);
8565 	}
8566       else
8567 	break;
8568 
8569       if (arg == error_mark_node)
8570 	{
8571 	  if (complain & tf_error)
8572 	    error ("template argument %d is invalid", arg_idx + 1);
8573 	}
8574       else if (!arg)
8575 	{
8576 	  /* This can occur if there was an error in the template
8577 	     parameter list itself (which we would already have
8578 	     reported) that we are trying to recover from, e.g., a class
8579 	     template with a parameter list such as
8580 	     template<typename..., typename> (cpp0x/variadic150.C).  */
8581 	  ++lost;
8582 
8583 	  /* This can also happen with a fixed parameter pack (71834).  */
8584 	  if (arg_idx >= nargs)
8585 	    ++missing;
8586 	}
8587       else
8588 	arg = convert_template_argument (TREE_VALUE (parm),
8589 					 arg, new_args, complain,
8590                                          parm_idx, in_decl);
8591 
8592       if (arg == error_mark_node)
8593 	lost++;
8594       TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
8595     }
8596 
8597   if (missing || arg_idx < nargs - variadic_args_p)
8598     {
8599       /* If we had fixed parameter packs, we didn't know how many arguments we
8600 	 actually needed earlier; now we do.  */
8601       nparms += fixed_pack_adjust;
8602       variadic_p -= fixed_packs;
8603       goto bad_nargs;
8604     }
8605 
8606   if (arg_idx < nargs)
8607     {
8608       /* We had some pack expansion arguments that will only work if the packs
8609 	 are empty, but wait until instantiation time to complain.
8610 	 See variadic-ttp3.C.  */
8611       int len = nparms + (nargs - arg_idx);
8612       tree args = make_tree_vec (len);
8613       int i = 0;
8614       for (; i < nparms; ++i)
8615 	TREE_VEC_ELT (args, i) = TREE_VEC_ELT (new_inner_args, i);
8616       for (; i < len; ++i, ++arg_idx)
8617 	TREE_VEC_ELT (args, i) = TREE_VEC_ELT (inner_args,
8618 					       arg_idx - pack_adjust);
8619       new_inner_args = args;
8620     }
8621 
8622   if (lost)
8623     {
8624       gcc_assert (!(complain & tf_error) || seen_error ());
8625       return error_mark_node;
8626     }
8627 
8628   if (CHECKING_P && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
8629     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
8630 					 TREE_VEC_LENGTH (new_inner_args));
8631 
8632   return new_inner_args;
8633 }
8634 
8635 /* Convert all template arguments to their appropriate types, and
8636    return a vector containing the innermost resulting template
8637    arguments.  If any error occurs, return error_mark_node. Error and
8638    warning messages are not issued.
8639 
8640    Note that no function argument deduction is performed, and default
8641    arguments are used to fill in unspecified arguments. */
8642 tree
coerce_template_parms(tree parms,tree args,tree in_decl)8643 coerce_template_parms (tree parms, tree args, tree in_decl)
8644 {
8645   return coerce_template_parms (parms, args, in_decl, tf_none, true, true);
8646 }
8647 
8648 /* Convert all template arguments to their appropriate type, and
8649    instantiate default arguments as needed. This returns a vector
8650    containing the innermost resulting template arguments, or
8651    error_mark_node if unsuccessful.  */
8652 tree
coerce_template_parms(tree parms,tree args,tree in_decl,tsubst_flags_t complain)8653 coerce_template_parms (tree parms, tree args, tree in_decl,
8654                        tsubst_flags_t complain)
8655 {
8656   return coerce_template_parms (parms, args, in_decl, complain, true, true);
8657 }
8658 
8659 /* Like coerce_template_parms.  If PARMS represents all template
8660    parameters levels, this function returns a vector of vectors
8661    representing all the resulting argument levels.  Note that in this
8662    case, only the innermost arguments are coerced because the
8663    outermost ones are supposed to have been coerced already.
8664 
8665    Otherwise, if PARMS represents only (the innermost) vector of
8666    parameters, this function returns a vector containing just the
8667    innermost resulting arguments.  */
8668 
8669 static tree
coerce_innermost_template_parms(tree parms,tree args,tree in_decl,tsubst_flags_t complain,bool require_all_args,bool use_default_args)8670 coerce_innermost_template_parms (tree parms,
8671 				  tree args,
8672 				  tree in_decl,
8673 				  tsubst_flags_t complain,
8674 				  bool require_all_args,
8675 				  bool use_default_args)
8676 {
8677   int parms_depth = TMPL_PARMS_DEPTH (parms);
8678   int args_depth = TMPL_ARGS_DEPTH (args);
8679   tree coerced_args;
8680 
8681   if (parms_depth > 1)
8682     {
8683       coerced_args = make_tree_vec (parms_depth);
8684       tree level;
8685       int cur_depth;
8686 
8687       for (level = parms, cur_depth = parms_depth;
8688 	   parms_depth > 0 && level != NULL_TREE;
8689 	   level = TREE_CHAIN (level), --cur_depth)
8690 	{
8691 	  tree l;
8692 	  if (cur_depth == args_depth)
8693 	    l = coerce_template_parms (TREE_VALUE (level),
8694 				       args, in_decl, complain,
8695 				       require_all_args,
8696 				       use_default_args);
8697 	  else
8698 	    l = TMPL_ARGS_LEVEL (args, cur_depth);
8699 
8700 	  if (l == error_mark_node)
8701 	    return error_mark_node;
8702 
8703 	  SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
8704 	}
8705     }
8706   else
8707     coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
8708 					  args, in_decl, complain,
8709 					  require_all_args,
8710 					  use_default_args);
8711   return coerced_args;
8712 }
8713 
8714 /* Returns 1 if template args OT and NT are equivalent.  */
8715 
8716 int
template_args_equal(tree ot,tree nt,bool partial_order)8717 template_args_equal (tree ot, tree nt, bool partial_order /* = false */)
8718 {
8719   if (nt == ot)
8720     return 1;
8721   if (nt == NULL_TREE || ot == NULL_TREE)
8722     return false;
8723   if (nt == any_targ_node || ot == any_targ_node)
8724     return true;
8725 
8726   if (TREE_CODE (nt) == TREE_VEC)
8727     /* For member templates */
8728     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
8729   else if (PACK_EXPANSION_P (ot))
8730     return (PACK_EXPANSION_P (nt)
8731 	    && template_args_equal (PACK_EXPANSION_PATTERN (ot),
8732 				    PACK_EXPANSION_PATTERN (nt))
8733 	    && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
8734 				    PACK_EXPANSION_EXTRA_ARGS (nt)));
8735   else if (ARGUMENT_PACK_P (ot))
8736     {
8737       int i, len;
8738       tree opack, npack;
8739 
8740       if (!ARGUMENT_PACK_P (nt))
8741 	return 0;
8742 
8743       opack = ARGUMENT_PACK_ARGS (ot);
8744       npack = ARGUMENT_PACK_ARGS (nt);
8745       len = TREE_VEC_LENGTH (opack);
8746       if (TREE_VEC_LENGTH (npack) != len)
8747 	return 0;
8748       for (i = 0; i < len; ++i)
8749 	if (!template_args_equal (TREE_VEC_ELT (opack, i),
8750 				  TREE_VEC_ELT (npack, i)))
8751 	  return 0;
8752       return 1;
8753     }
8754   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
8755     gcc_unreachable ();
8756   else if (TYPE_P (nt))
8757     {
8758       if (!TYPE_P (ot))
8759 	return false;
8760       /* Don't treat an alias template specialization with dependent
8761 	 arguments as equivalent to its underlying type when used as a
8762 	 template argument; we need them to be distinct so that we
8763 	 substitute into the specialization arguments at instantiation
8764 	 time.  And aliases can't be equivalent without being ==, so
8765 	 we don't need to look any deeper.
8766 
8767          During partial ordering, however, we need to treat them normally so
8768          that we can order uses of the same alias with different
8769          cv-qualification (79960).  */
8770       if (!partial_order
8771 	  && (TYPE_ALIAS_P (nt) || TYPE_ALIAS_P (ot)))
8772 	return false;
8773       else
8774 	return same_type_p (ot, nt);
8775     }
8776   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
8777     return 0;
8778   else
8779     {
8780       /* Try to treat a template non-type argument that has been converted
8781 	 to the parameter type as equivalent to one that hasn't yet.  */
8782       for (enum tree_code code1 = TREE_CODE (ot);
8783 	   CONVERT_EXPR_CODE_P (code1)
8784 	     || code1 == NON_LVALUE_EXPR;
8785 	   code1 = TREE_CODE (ot))
8786 	ot = TREE_OPERAND (ot, 0);
8787       for (enum tree_code code2 = TREE_CODE (nt);
8788 	   CONVERT_EXPR_CODE_P (code2)
8789 	     || code2 == NON_LVALUE_EXPR;
8790 	   code2 = TREE_CODE (nt))
8791 	nt = TREE_OPERAND (nt, 0);
8792 
8793       return cp_tree_equal (ot, nt);
8794     }
8795 }
8796 
8797 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
8798    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
8799    NEWARG_PTR with the offending arguments if they are non-NULL.  */
8800 
8801 int
comp_template_args(tree oldargs,tree newargs,tree * oldarg_ptr,tree * newarg_ptr,bool partial_order)8802 comp_template_args (tree oldargs, tree newargs,
8803 		    tree *oldarg_ptr, tree *newarg_ptr,
8804 		    bool partial_order)
8805 {
8806   int i;
8807 
8808   if (oldargs == newargs)
8809     return 1;
8810 
8811   if (!oldargs || !newargs)
8812     return 0;
8813 
8814   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
8815     return 0;
8816 
8817   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
8818     {
8819       tree nt = TREE_VEC_ELT (newargs, i);
8820       tree ot = TREE_VEC_ELT (oldargs, i);
8821 
8822       if (! template_args_equal (ot, nt, partial_order))
8823 	{
8824 	  if (oldarg_ptr != NULL)
8825 	    *oldarg_ptr = ot;
8826 	  if (newarg_ptr != NULL)
8827 	    *newarg_ptr = nt;
8828 	  return 0;
8829 	}
8830     }
8831   return 1;
8832 }
8833 
8834 inline bool
comp_template_args_porder(tree oargs,tree nargs)8835 comp_template_args_porder (tree oargs, tree nargs)
8836 {
8837   return comp_template_args (oargs, nargs, NULL, NULL, true);
8838 }
8839 
8840 /* Implement a freelist interface for objects of type T.
8841 
8842    Head is a separate object, rather than a regular member, so that we
8843    can define it as a GTY deletable pointer, which is highly
8844    desirable.  A data member could be declared that way, but then the
8845    containing object would implicitly get GTY((user)), which would
8846    prevent us from instantiating freelists as global objects.
8847    Although this way we can create freelist global objects, they're
8848    such thin wrappers that instantiating temporaries at every use
8849    loses nothing and saves permanent storage for the freelist object.
8850 
8851    Member functions next, anew, poison and reinit have default
8852    implementations that work for most of the types we're interested
8853    in, but if they don't work for some type, they should be explicitly
8854    specialized.  See the comments before them for requirements, and
8855    the example specializations for the tree_list_freelist.  */
8856 template <typename T>
8857 class freelist
8858 {
8859   /* Return the next object in a chain.  We could just do type
8860      punning, but if we access the object with its underlying type, we
8861      avoid strict-aliasing trouble.  This needs only work between
8862      poison and reinit.  */
next(T * obj)8863   static T *&next (T *obj) { return obj->next; }
8864 
8865   /* Return a newly allocated, uninitialized or minimally-initialized
8866      object of type T.  Any initialization performed by anew should
8867      either remain across the life of the object and the execution of
8868      poison, or be redone by reinit.  */
anew()8869   static T *anew () { return ggc_alloc<T> (); }
8870 
8871   /* Optionally scribble all over the bits holding the object, so that
8872      they become (mostly?) uninitialized memory.  This is called while
8873      preparing to make the object part of the free list.  */
poison(T * obj)8874   static void poison (T *obj) {
8875     T *p ATTRIBUTE_UNUSED = obj;
8876     T **q ATTRIBUTE_UNUSED = &next (obj);
8877 
8878 #ifdef ENABLE_GC_CHECKING
8879     /* Poison the data, to indicate the data is garbage.  */
8880     VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (p, sizeof (*p)));
8881     memset (p, 0xa5, sizeof (*p));
8882 #endif
8883     /* Let valgrind know the object is free.  */
8884     VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (p, sizeof (*p)));
8885 
8886     /* Let valgrind know the next portion of the object is available,
8887        but uninitialized.  */
8888     VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (q, sizeof (*q)));
8889   }
8890 
8891   /* Bring an object that underwent at least one lifecycle after anew
8892      and before the most recent free and poison, back to a usable
8893      state, reinitializing whatever is needed for it to be
8894      functionally equivalent to an object just allocated and returned
8895      by anew.  This may poison or clear the next field, used by
8896      freelist housekeeping after poison was called.  */
reinit(T * obj)8897   static void reinit (T *obj) {
8898     T **q ATTRIBUTE_UNUSED = &next (obj);
8899 
8900 #ifdef ENABLE_GC_CHECKING
8901     memset (q, 0xa5, sizeof (*q));
8902 #endif
8903     /* Let valgrind know the entire object is available, but
8904        uninitialized.  */
8905     VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (obj, sizeof (*obj)));
8906   }
8907 
8908   /* Reference a GTY-deletable pointer that points to the first object
8909      in the free list proper.  */
8910   T *&head;
8911 public:
8912   /* Construct a freelist object chaining objects off of HEAD.  */
freelist(T * & head)8913   freelist (T *&head) : head(head) {}
8914 
8915   /* Add OBJ to the free object list.  The former head becomes OBJ's
8916      successor.  */
free(T * obj)8917   void free (T *obj)
8918   {
8919     poison (obj);
8920     next (obj) = head;
8921     head = obj;
8922   }
8923 
8924   /* Take an object from the free list, if one is available, or
8925      allocate a new one.  Objects taken from the free list should be
8926      regarded as filled with garbage, except for bits that are
8927      configured to be preserved across free and alloc.  */
alloc()8928   T *alloc ()
8929   {
8930     if (head)
8931       {
8932 	T *obj = head;
8933 	head = next (head);
8934 	reinit (obj);
8935 	return obj;
8936       }
8937     else
8938       return anew ();
8939   }
8940 };
8941 
8942 /* Explicitly specialize the interfaces for freelist<tree_node>: we
8943    want to allocate a TREE_LIST using the usual interface, and ensure
8944    TREE_CHAIN remains functional.  Alas, we have to duplicate a bit of
8945    build_tree_list logic in reinit, so this could go out of sync.  */
8946 template <>
8947 inline tree &
next(tree obj)8948 freelist<tree_node>::next (tree obj)
8949 {
8950   return TREE_CHAIN (obj);
8951 }
8952 template <>
8953 inline tree
anew()8954 freelist<tree_node>::anew ()
8955 {
8956   return build_tree_list (NULL, NULL);
8957 }
8958 template <>
8959 inline void
poison(tree obj ATTRIBUTE_UNUSED)8960 freelist<tree_node>::poison (tree obj ATTRIBUTE_UNUSED)
8961 {
8962   int size ATTRIBUTE_UNUSED = sizeof (tree_list);
8963   tree p ATTRIBUTE_UNUSED = obj;
8964   tree_base *b ATTRIBUTE_UNUSED = &obj->base;
8965   tree *q ATTRIBUTE_UNUSED = &next (obj);
8966 
8967 #ifdef ENABLE_GC_CHECKING
8968   gcc_checking_assert (TREE_CODE (obj) == TREE_LIST);
8969 
8970   /* Poison the data, to indicate the data is garbage.  */
8971   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (p, size));
8972   memset (p, 0xa5, size);
8973 #endif
8974   /* Let valgrind know the object is free.  */
8975   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (p, size));
8976   /* But we still want to use the TREE_CODE and TREE_CHAIN parts.  */
8977   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_DEFINED (b, sizeof (*b)));
8978   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (q, sizeof (*q)));
8979 
8980 #ifdef ENABLE_GC_CHECKING
8981   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (b, sizeof (*b)));
8982   /* Keep TREE_CHAIN functional.  */
8983   TREE_SET_CODE (obj, TREE_LIST);
8984 #else
8985   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_DEFINED (b, sizeof (*b)));
8986 #endif
8987 }
8988 template <>
8989 inline void
reinit(tree obj ATTRIBUTE_UNUSED)8990 freelist<tree_node>::reinit (tree obj ATTRIBUTE_UNUSED)
8991 {
8992   tree_base *b ATTRIBUTE_UNUSED = &obj->base;
8993 
8994 #ifdef ENABLE_GC_CHECKING
8995   gcc_checking_assert (TREE_CODE (obj) == TREE_LIST);
8996   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (obj, sizeof (tree_list)));
8997   memset (obj, 0, sizeof (tree_list));
8998 #endif
8999 
9000   /* Let valgrind know the entire object is available, but
9001      uninitialized.  */
9002   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (obj, sizeof (tree_list)));
9003 
9004 #ifdef ENABLE_GC_CHECKING
9005   TREE_SET_CODE (obj, TREE_LIST);
9006 #else
9007   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_DEFINED (b, sizeof (*b)));
9008 #endif
9009 }
9010 
9011 /* Point to the first object in the TREE_LIST freelist.  */
9012 static GTY((deletable)) tree tree_list_freelist_head;
9013 /* Return the/an actual TREE_LIST freelist.  */
9014 static inline freelist<tree_node>
tree_list_freelist()9015 tree_list_freelist ()
9016 {
9017   return tree_list_freelist_head;
9018 }
9019 
9020 /* Point to the first object in the tinst_level freelist.  */
9021 static GTY((deletable)) tinst_level *tinst_level_freelist_head;
9022 /* Return the/an actual tinst_level freelist.  */
9023 static inline freelist<tinst_level>
tinst_level_freelist()9024 tinst_level_freelist ()
9025 {
9026   return tinst_level_freelist_head;
9027 }
9028 
9029 /* Point to the first object in the pending_template freelist.  */
9030 static GTY((deletable)) pending_template *pending_template_freelist_head;
9031 /* Return the/an actual pending_template freelist.  */
9032 static inline freelist<pending_template>
pending_template_freelist()9033 pending_template_freelist ()
9034 {
9035   return pending_template_freelist_head;
9036 }
9037 
9038 /* Build the TREE_LIST object out of a split list, store it
9039    permanently, and return it.  */
9040 tree
to_list()9041 tinst_level::to_list ()
9042 {
9043   gcc_assert (split_list_p ());
9044   tree ret = tree_list_freelist ().alloc ();
9045   TREE_PURPOSE (ret) = tldcl;
9046   TREE_VALUE (ret) = targs;
9047   tldcl = ret;
9048   targs = NULL;
9049   gcc_assert (tree_list_p ());
9050   return ret;
9051 }
9052 
9053 const unsigned short tinst_level::refcount_infinity;
9054 
9055 /* Increment OBJ's refcount unless it is already infinite.  */
9056 static tinst_level *
inc_refcount_use(tinst_level * obj)9057 inc_refcount_use (tinst_level *obj)
9058 {
9059   if (obj && obj->refcount != tinst_level::refcount_infinity)
9060     ++obj->refcount;
9061   return obj;
9062 }
9063 
9064 /* Release storage for OBJ and node, if it's a TREE_LIST.  */
9065 void
free(tinst_level * obj)9066 tinst_level::free (tinst_level *obj)
9067 {
9068   if (obj->tree_list_p ())
9069     tree_list_freelist ().free (obj->get_node ());
9070   tinst_level_freelist ().free (obj);
9071 }
9072 
9073 /* Decrement OBJ's refcount if not infinite.  If it reaches zero, release
9074    OBJ's DECL and OBJ, and start over with the tinst_level object that
9075    used to be referenced by OBJ's NEXT.  */
9076 static void
dec_refcount_use(tinst_level * obj)9077 dec_refcount_use (tinst_level *obj)
9078 {
9079   while (obj
9080 	 && obj->refcount != tinst_level::refcount_infinity
9081 	 && !--obj->refcount)
9082     {
9083       tinst_level *next = obj->next;
9084       tinst_level::free (obj);
9085       obj = next;
9086     }
9087 }
9088 
9089 /* Modify PTR so that it points to OBJ, adjusting the refcounts of OBJ
9090    and of the former PTR.  Omitting the second argument is equivalent
9091    to passing (T*)NULL; this is allowed because passing the
9092    zero-valued integral constant NULL confuses type deduction and/or
9093    overload resolution.  */
9094 template <typename T>
9095 static void
9096 set_refcount_ptr (T *& ptr, T *obj = NULL)
9097 {
9098   T *save = ptr;
9099   ptr = inc_refcount_use (obj);
9100   dec_refcount_use (save);
9101 }
9102 
9103 static void
add_pending_template(tree d)9104 add_pending_template (tree d)
9105 {
9106   tree ti = (TYPE_P (d)
9107 	     ? CLASSTYPE_TEMPLATE_INFO (d)
9108 	     : DECL_TEMPLATE_INFO (d));
9109   struct pending_template *pt;
9110   int level;
9111 
9112   if (TI_PENDING_TEMPLATE_FLAG (ti))
9113     return;
9114 
9115   /* We are called both from instantiate_decl, where we've already had a
9116      tinst_level pushed, and instantiate_template, where we haven't.
9117      Compensate.  */
9118   gcc_assert (TREE_CODE (d) != TREE_LIST);
9119   level = !current_tinst_level
9120     || current_tinst_level->maybe_get_node () != d;
9121 
9122   if (level)
9123     push_tinst_level (d);
9124 
9125   pt = pending_template_freelist ().alloc ();
9126   pt->next = NULL;
9127   pt->tinst = NULL;
9128   set_refcount_ptr (pt->tinst, current_tinst_level);
9129   if (last_pending_template)
9130     last_pending_template->next = pt;
9131   else
9132     pending_templates = pt;
9133 
9134   last_pending_template = pt;
9135 
9136   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
9137 
9138   if (level)
9139     pop_tinst_level ();
9140 }
9141 
9142 
9143 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
9144    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
9145    documentation for TEMPLATE_ID_EXPR.  */
9146 
9147 tree
lookup_template_function(tree fns,tree arglist)9148 lookup_template_function (tree fns, tree arglist)
9149 {
9150   if (fns == error_mark_node || arglist == error_mark_node)
9151     return error_mark_node;
9152 
9153   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
9154 
9155   if (!is_overloaded_fn (fns) && !identifier_p (fns))
9156     {
9157       error ("%q#D is not a function template", fns);
9158       return error_mark_node;
9159     }
9160 
9161   if (BASELINK_P (fns))
9162     {
9163       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
9164 					 unknown_type_node,
9165 					 BASELINK_FUNCTIONS (fns),
9166 					 arglist);
9167       return fns;
9168     }
9169 
9170   return build2 (TEMPLATE_ID_EXPR, unknown_type_node, fns, arglist);
9171 }
9172 
9173 /* Within the scope of a template class S<T>, the name S gets bound
9174    (in build_self_reference) to a TYPE_DECL for the class, not a
9175    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
9176    or one of its enclosing classes, and that type is a template,
9177    return the associated TEMPLATE_DECL.  Otherwise, the original
9178    DECL is returned.
9179 
9180    Also handle the case when DECL is a TREE_LIST of ambiguous
9181    injected-class-names from different bases.  */
9182 
9183 tree
maybe_get_template_decl_from_type_decl(tree decl)9184 maybe_get_template_decl_from_type_decl (tree decl)
9185 {
9186   if (decl == NULL_TREE)
9187     return decl;
9188 
9189   /* DR 176: A lookup that finds an injected-class-name (10.2
9190      [class.member.lookup]) can result in an ambiguity in certain cases
9191      (for example, if it is found in more than one base class). If all of
9192      the injected-class-names that are found refer to specializations of
9193      the same class template, and if the name is followed by a
9194      template-argument-list, the reference refers to the class template
9195      itself and not a specialization thereof, and is not ambiguous.  */
9196   if (TREE_CODE (decl) == TREE_LIST)
9197     {
9198       tree t, tmpl = NULL_TREE;
9199       for (t = decl; t; t = TREE_CHAIN (t))
9200 	{
9201 	  tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
9202 	  if (!tmpl)
9203 	    tmpl = elt;
9204 	  else if (tmpl != elt)
9205 	    break;
9206 	}
9207       if (tmpl && t == NULL_TREE)
9208 	return tmpl;
9209       else
9210 	return decl;
9211     }
9212 
9213   return (decl != NULL_TREE
9214 	  && DECL_SELF_REFERENCE_P (decl)
9215 	  && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
9216     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
9217 }
9218 
9219 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
9220    parameters, find the desired type.
9221 
9222    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
9223 
9224    IN_DECL, if non-NULL, is the template declaration we are trying to
9225    instantiate.
9226 
9227    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
9228    the class we are looking up.
9229 
9230    Issue error and warning messages under control of COMPLAIN.
9231 
9232    If the template class is really a local class in a template
9233    function, then the FUNCTION_CONTEXT is the function in which it is
9234    being instantiated.
9235 
9236    ??? Note that this function is currently called *twice* for each
9237    template-id: the first time from the parser, while creating the
9238    incomplete type (finish_template_type), and the second type during the
9239    real instantiation (instantiate_template_class). This is surely something
9240    that we want to avoid. It also causes some problems with argument
9241    coercion (see convert_nontype_argument for more information on this).  */
9242 
9243 static tree
lookup_template_class_1(tree d1,tree arglist,tree in_decl,tree context,int entering_scope,tsubst_flags_t complain)9244 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
9245 			 int entering_scope, tsubst_flags_t complain)
9246 {
9247   tree templ = NULL_TREE, parmlist;
9248   tree t;
9249   spec_entry **slot;
9250   spec_entry *entry;
9251   spec_entry elt;
9252   hashval_t hash;
9253 
9254   if (identifier_p (d1))
9255     {
9256       tree value = innermost_non_namespace_value (d1);
9257       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
9258 	templ = value;
9259       else
9260 	{
9261 	  if (context)
9262 	    push_decl_namespace (context);
9263 	  templ = lookup_name (d1);
9264 	  templ = maybe_get_template_decl_from_type_decl (templ);
9265 	  if (context)
9266 	    pop_decl_namespace ();
9267 	}
9268       if (templ)
9269 	context = DECL_CONTEXT (templ);
9270     }
9271   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
9272     {
9273       tree type = TREE_TYPE (d1);
9274 
9275       /* If we are declaring a constructor, say A<T>::A<T>, we will get
9276 	 an implicit typename for the second A.  Deal with it.  */
9277       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
9278 	type = TREE_TYPE (type);
9279 
9280       if (CLASSTYPE_TEMPLATE_INFO (type))
9281 	{
9282 	  templ = CLASSTYPE_TI_TEMPLATE (type);
9283 	  d1 = DECL_NAME (templ);
9284 	}
9285     }
9286   else if (TREE_CODE (d1) == ENUMERAL_TYPE
9287 	   || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
9288     {
9289       templ = TYPE_TI_TEMPLATE (d1);
9290       d1 = DECL_NAME (templ);
9291     }
9292   else if (DECL_TYPE_TEMPLATE_P (d1))
9293     {
9294       templ = d1;
9295       d1 = DECL_NAME (templ);
9296       context = DECL_CONTEXT (templ);
9297     }
9298   else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
9299     {
9300       templ = d1;
9301       d1 = DECL_NAME (templ);
9302     }
9303 
9304   /* Issue an error message if we didn't find a template.  */
9305   if (! templ)
9306     {
9307       if (complain & tf_error)
9308 	error ("%qT is not a template", d1);
9309       return error_mark_node;
9310     }
9311 
9312   if (TREE_CODE (templ) != TEMPLATE_DECL
9313 	 /* Make sure it's a user visible template, if it was named by
9314 	    the user.  */
9315       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
9316 	  && !PRIMARY_TEMPLATE_P (templ)))
9317     {
9318       if (complain & tf_error)
9319 	{
9320 	  error ("non-template type %qT used as a template", d1);
9321 	  if (in_decl)
9322 	    error ("for template declaration %q+D", in_decl);
9323 	}
9324       return error_mark_node;
9325     }
9326 
9327   complain &= ~tf_user;
9328 
9329   /* An alias that just changes the name of a template is equivalent to the
9330      other template, so if any of the arguments are pack expansions, strip
9331      the alias to avoid problems with a pack expansion passed to a non-pack
9332      alias template parameter (DR 1430).  */
9333   if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
9334     templ = get_underlying_template (templ);
9335 
9336   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
9337     {
9338       tree parm;
9339       tree arglist2 = coerce_template_args_for_ttp (templ, arglist, complain);
9340       if (arglist2 == error_mark_node
9341 	  || (!uses_template_parms (arglist2)
9342 	      && check_instantiated_args (templ, arglist2, complain)))
9343 	return error_mark_node;
9344 
9345       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
9346       return parm;
9347     }
9348   else
9349     {
9350       tree template_type = TREE_TYPE (templ);
9351       tree gen_tmpl;
9352       tree type_decl;
9353       tree found = NULL_TREE;
9354       int arg_depth;
9355       int parm_depth;
9356       int is_dependent_type;
9357       int use_partial_inst_tmpl = false;
9358 
9359       if (template_type == error_mark_node)
9360 	/* An error occurred while building the template TEMPL, and a
9361 	   diagnostic has most certainly been emitted for that
9362 	   already.  Let's propagate that error.  */
9363 	return error_mark_node;
9364 
9365       gen_tmpl = most_general_template (templ);
9366       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
9367       parm_depth = TMPL_PARMS_DEPTH (parmlist);
9368       arg_depth = TMPL_ARGS_DEPTH (arglist);
9369 
9370       if (arg_depth == 1 && parm_depth > 1)
9371 	{
9372 	  /* We've been given an incomplete set of template arguments.
9373 	     For example, given:
9374 
9375 	       template <class T> struct S1 {
9376 		 template <class U> struct S2 {};
9377 		 template <class U> struct S2<U*> {};
9378 		};
9379 
9380 	     we will be called with an ARGLIST of `U*', but the
9381 	     TEMPLATE will be `template <class T> template
9382 	     <class U> struct S1<T>::S2'.  We must fill in the missing
9383 	     arguments.  */
9384 	  tree ti = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (TREE_TYPE (templ));
9385 	  arglist = add_outermost_template_args (TI_ARGS (ti), arglist);
9386 	  arg_depth = TMPL_ARGS_DEPTH (arglist);
9387 	}
9388 
9389       /* Now we should have enough arguments.  */
9390       gcc_assert (parm_depth == arg_depth);
9391 
9392       /* From here on, we're only interested in the most general
9393 	 template.  */
9394 
9395       /* Calculate the BOUND_ARGS.  These will be the args that are
9396 	 actually tsubst'd into the definition to create the
9397 	 instantiation.  */
9398       arglist = coerce_innermost_template_parms (parmlist, arglist, gen_tmpl,
9399 						 complain,
9400 						 /*require_all_args=*/true,
9401 						 /*use_default_args=*/true);
9402 
9403       if (arglist == error_mark_node)
9404 	/* We were unable to bind the arguments.  */
9405 	return error_mark_node;
9406 
9407       /* In the scope of a template class, explicit references to the
9408 	 template class refer to the type of the template, not any
9409 	 instantiation of it.  For example, in:
9410 
9411 	   template <class T> class C { void f(C<T>); }
9412 
9413 	 the `C<T>' is just the same as `C'.  Outside of the
9414 	 class, however, such a reference is an instantiation.  */
9415       if (entering_scope
9416 	  || !PRIMARY_TEMPLATE_P (gen_tmpl)
9417 	  || currently_open_class (template_type))
9418 	{
9419 	  tree tinfo = TYPE_TEMPLATE_INFO (template_type);
9420 
9421 	  if (tinfo && comp_template_args (TI_ARGS (tinfo), arglist))
9422 	    return template_type;
9423 	}
9424 
9425       /* If we already have this specialization, return it.  */
9426       elt.tmpl = gen_tmpl;
9427       elt.args = arglist;
9428       elt.spec = NULL_TREE;
9429       hash = spec_hasher::hash (&elt);
9430       entry = type_specializations->find_with_hash (&elt, hash);
9431 
9432       if (entry)
9433 	return entry->spec;
9434 
9435       /* If the the template's constraints are not satisfied,
9436          then we cannot form a valid type.
9437 
9438          Note that the check is deferred until after the hash
9439          lookup. This prevents redundant checks on previously
9440          instantiated specializations. */
9441       if (flag_concepts && !constraints_satisfied_p (gen_tmpl, arglist))
9442         {
9443           if (complain & tf_error)
9444             {
9445 	      auto_diagnostic_group d;
9446               error ("template constraint failure");
9447               diagnose_constraints (input_location, gen_tmpl, arglist);
9448             }
9449           return error_mark_node;
9450         }
9451 
9452       is_dependent_type = uses_template_parms (arglist);
9453 
9454       /* If the deduced arguments are invalid, then the binding
9455 	 failed.  */
9456       if (!is_dependent_type
9457 	  && check_instantiated_args (gen_tmpl,
9458 				      INNERMOST_TEMPLATE_ARGS (arglist),
9459 				      complain))
9460 	return error_mark_node;
9461 
9462       if (!is_dependent_type
9463 	  && !PRIMARY_TEMPLATE_P (gen_tmpl)
9464 	  && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
9465 	  && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
9466 	{
9467 	  found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
9468 				      DECL_NAME (gen_tmpl),
9469 				      /*tag_scope=*/ts_global);
9470 	  return found;
9471 	}
9472 
9473       context = DECL_CONTEXT (gen_tmpl);
9474       if (context && TYPE_P (context))
9475 	{
9476 	  context = tsubst_aggr_type (context, arglist, complain, in_decl, true);
9477 	  context = complete_type (context);
9478 	}
9479       else
9480 	context = tsubst (context, arglist, complain, in_decl);
9481 
9482       if (context == error_mark_node)
9483 	return error_mark_node;
9484 
9485       if (!context)
9486 	context = global_namespace;
9487 
9488       /* Create the type.  */
9489       if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
9490 	{
9491 	  /* The user referred to a specialization of an alias
9492 	    template represented by GEN_TMPL.
9493 
9494 	    [temp.alias]/2 says:
9495 
9496 	        When a template-id refers to the specialization of an
9497 		alias template, it is equivalent to the associated
9498 		type obtained by substitution of its
9499 		template-arguments for the template-parameters in the
9500 		type-id of the alias template.  */
9501 
9502 	  t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
9503 	  /* Note that the call above (by indirectly calling
9504 	     register_specialization in tsubst_decl) registers the
9505 	     TYPE_DECL representing the specialization of the alias
9506 	     template.  So next time someone substitutes ARGLIST for
9507 	     the template parms into the alias template (GEN_TMPL),
9508 	     she'll get that TYPE_DECL back.  */
9509 
9510 	  if (t == error_mark_node)
9511 	    return t;
9512 	}
9513       else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
9514 	{
9515 	  if (!is_dependent_type)
9516 	    {
9517 	      set_current_access_from_decl (TYPE_NAME (template_type));
9518 	      t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
9519 			      tsubst (ENUM_UNDERLYING_TYPE (template_type),
9520 				      arglist, complain, in_decl),
9521 			      tsubst_attributes (TYPE_ATTRIBUTES (template_type),
9522 						 arglist, complain, in_decl),
9523 			      SCOPED_ENUM_P (template_type), NULL);
9524 
9525 	      if (t == error_mark_node)
9526 		return t;
9527 	    }
9528 	  else
9529             {
9530               /* We don't want to call start_enum for this type, since
9531                  the values for the enumeration constants may involve
9532                  template parameters.  And, no one should be interested
9533                  in the enumeration constants for such a type.  */
9534               t = cxx_make_type (ENUMERAL_TYPE);
9535               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
9536             }
9537           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
9538 	  ENUM_FIXED_UNDERLYING_TYPE_P (t)
9539 	    = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
9540 	}
9541       else if (CLASS_TYPE_P (template_type))
9542 	{
9543 	  /* Lambda closures are regenerated in tsubst_lambda_expr, not
9544 	     instantiated here.  */
9545 	  gcc_assert (!LAMBDA_TYPE_P (template_type));
9546 
9547 	  t = make_class_type (TREE_CODE (template_type));
9548 	  CLASSTYPE_DECLARED_CLASS (t)
9549 	    = CLASSTYPE_DECLARED_CLASS (template_type);
9550 	  SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
9551 
9552 	  /* A local class.  Make sure the decl gets registered properly.  */
9553 	  if (context == current_function_decl)
9554 	    if (pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current)
9555 		== error_mark_node)
9556 	      return error_mark_node;
9557 
9558 	  if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
9559 	    /* This instantiation is another name for the primary
9560 	       template type. Set the TYPE_CANONICAL field
9561 	       appropriately. */
9562 	    TYPE_CANONICAL (t) = template_type;
9563 	  else if (any_template_arguments_need_structural_equality_p (arglist))
9564 	    /* Some of the template arguments require structural
9565 	       equality testing, so this template class requires
9566 	       structural equality testing. */
9567 	    SET_TYPE_STRUCTURAL_EQUALITY (t);
9568 	}
9569       else
9570 	gcc_unreachable ();
9571 
9572       /* If we called start_enum or pushtag above, this information
9573 	 will already be set up.  */
9574       if (!TYPE_NAME (t))
9575 	{
9576 	  TYPE_CONTEXT (t) = FROB_CONTEXT (context);
9577 
9578 	  type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
9579 	  DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
9580 	  DECL_SOURCE_LOCATION (type_decl)
9581 	    = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
9582 	}
9583       else
9584 	type_decl = TYPE_NAME (t);
9585 
9586       if (CLASS_TYPE_P (template_type))
9587 	{
9588 	  TREE_PRIVATE (type_decl)
9589 	    = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
9590 	  TREE_PROTECTED (type_decl)
9591 	    = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
9592 	  if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
9593 	    {
9594 	      DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
9595 	      DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
9596 	    }
9597 	}
9598 
9599       if (OVERLOAD_TYPE_P (t)
9600 	  && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
9601 	{
9602 	  static const char *tags[] = {"abi_tag", "may_alias"};
9603 
9604 	  for (unsigned ix = 0; ix != 2; ix++)
9605 	    {
9606 	      tree attributes
9607 		= lookup_attribute (tags[ix], TYPE_ATTRIBUTES (template_type));
9608 
9609 	      if (attributes)
9610 		TYPE_ATTRIBUTES (t)
9611 		  = tree_cons (TREE_PURPOSE (attributes),
9612 			       TREE_VALUE (attributes),
9613 			       TYPE_ATTRIBUTES (t));
9614 	    }
9615 	}
9616 
9617       /* Let's consider the explicit specialization of a member
9618          of a class template specialization that is implicitly instantiated,
9619 	 e.g.:
9620 	     template<class T>
9621 	     struct S
9622 	     {
9623 	       template<class U> struct M {}; //#0
9624 	     };
9625 
9626 	     template<>
9627 	     template<>
9628 	     struct S<int>::M<char> //#1
9629 	     {
9630 	       int i;
9631 	     };
9632 	[temp.expl.spec]/4 says this is valid.
9633 
9634 	In this case, when we write:
9635 	S<int>::M<char> m;
9636 
9637 	M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
9638 	the one of #0.
9639 
9640 	When we encounter #1, we want to store the partial instantiation
9641 	of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
9642 
9643 	For all cases other than this "explicit specialization of member of a
9644 	class template", we just want to store the most general template into
9645 	the CLASSTYPE_TI_TEMPLATE of M.
9646 
9647 	This case of "explicit specialization of member of a class template"
9648 	only happens when:
9649 	1/ the enclosing class is an instantiation of, and therefore not
9650 	the same as, the context of the most general template, and
9651 	2/ we aren't looking at the partial instantiation itself, i.e.
9652 	the innermost arguments are not the same as the innermost parms of
9653 	the most general template.
9654 
9655 	So it's only when 1/ and 2/ happens that we want to use the partial
9656 	instantiation of the member template in lieu of its most general
9657 	template.  */
9658 
9659       if (PRIMARY_TEMPLATE_P (gen_tmpl)
9660 	  && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
9661 	  /* the enclosing class must be an instantiation...  */
9662 	  && CLASS_TYPE_P (context)
9663 	  && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
9664 	{
9665 	  TREE_VEC_LENGTH (arglist)--;
9666 	  ++processing_template_decl;
9667 	  tree tinfo = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (TREE_TYPE (gen_tmpl));
9668 	  tree partial_inst_args =
9669 	    tsubst (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo)),
9670 		    arglist, complain, NULL_TREE);
9671 	  --processing_template_decl;
9672 	  TREE_VEC_LENGTH (arglist)++;
9673 	  if (partial_inst_args == error_mark_node)
9674 	    return error_mark_node;
9675 	  use_partial_inst_tmpl =
9676 	    /*...and we must not be looking at the partial instantiation
9677 	     itself. */
9678 	    !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
9679 				 partial_inst_args);
9680 	}
9681 
9682       if (!use_partial_inst_tmpl)
9683 	/* This case is easy; there are no member templates involved.  */
9684 	found = gen_tmpl;
9685       else
9686 	{
9687 	  /* This is a full instantiation of a member template.  Find
9688 	     the partial instantiation of which this is an instance.  */
9689 
9690 	  /* Temporarily reduce by one the number of levels in the ARGLIST
9691 	     so as to avoid comparing the last set of arguments.  */
9692 	  TREE_VEC_LENGTH (arglist)--;
9693 	  found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
9694 	  TREE_VEC_LENGTH (arglist)++;
9695 	  /* FOUND is either a proper class type, or an alias
9696 	     template specialization.  In the later case, it's a
9697 	     TYPE_DECL, resulting from the substituting of arguments
9698 	     for parameters in the TYPE_DECL of the alias template
9699 	     done earlier.  So be careful while getting the template
9700 	     of FOUND.  */
9701 	  found = (TREE_CODE (found) == TEMPLATE_DECL
9702 		   ? found
9703 		   : (TREE_CODE (found) == TYPE_DECL
9704 		      ? DECL_TI_TEMPLATE (found)
9705 		      : CLASSTYPE_TI_TEMPLATE (found)));
9706 
9707 	  if (DECL_CLASS_TEMPLATE_P (found)
9708 	      && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (found)))
9709 	    {
9710 	      /* If this partial instantiation is specialized, we want to
9711 		 use it for hash table lookup.  */
9712 	      elt.tmpl = found;
9713 	      elt.args = arglist = INNERMOST_TEMPLATE_ARGS (arglist);
9714 	      hash = spec_hasher::hash (&elt);
9715 	    }
9716 	}
9717 
9718       // Build template info for the new specialization.
9719       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
9720 
9721       elt.spec = t;
9722       slot = type_specializations->find_slot_with_hash (&elt, hash, INSERT);
9723       gcc_checking_assert (*slot == NULL);
9724       entry = ggc_alloc<spec_entry> ();
9725       *entry = elt;
9726       *slot = entry;
9727 
9728       /* Note this use of the partial instantiation so we can check it
9729 	 later in maybe_process_partial_specialization.  */
9730       DECL_TEMPLATE_INSTANTIATIONS (found)
9731 	= tree_cons (arglist, t,
9732 		     DECL_TEMPLATE_INSTANTIATIONS (found));
9733 
9734       if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
9735 	  && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
9736 	/* Now that the type has been registered on the instantiations
9737 	   list, we set up the enumerators.  Because the enumeration
9738 	   constants may involve the enumeration type itself, we make
9739 	   sure to register the type first, and then create the
9740 	   constants.  That way, doing tsubst_expr for the enumeration
9741 	   constants won't result in recursive calls here; we'll find
9742 	   the instantiation and exit above.  */
9743 	tsubst_enum (template_type, t, arglist);
9744 
9745       if (CLASS_TYPE_P (template_type) && is_dependent_type)
9746 	/* If the type makes use of template parameters, the
9747 	   code that generates debugging information will crash.  */
9748 	DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
9749 
9750       /* Possibly limit visibility based on template args.  */
9751       TREE_PUBLIC (type_decl) = 1;
9752       determine_visibility (type_decl);
9753 
9754       inherit_targ_abi_tags (t);
9755 
9756       return t;
9757     }
9758 }
9759 
9760 /* Wrapper for lookup_template_class_1.  */
9761 
9762 tree
lookup_template_class(tree d1,tree arglist,tree in_decl,tree context,int entering_scope,tsubst_flags_t complain)9763 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
9764                        int entering_scope, tsubst_flags_t complain)
9765 {
9766   tree ret;
9767   timevar_push (TV_TEMPLATE_INST);
9768   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
9769                                  entering_scope, complain);
9770   timevar_pop (TV_TEMPLATE_INST);
9771   return ret;
9772 }
9773 
9774 /* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST.  */
9775 
9776 tree
lookup_template_variable(tree templ,tree arglist)9777 lookup_template_variable (tree templ, tree arglist)
9778 {
9779   /* The type of the expression is NULL_TREE since the template-id could refer
9780      to an explicit or partial specialization. */
9781   tree type = NULL_TREE;
9782   if (flag_concepts && variable_concept_p (templ))
9783     /* Except that concepts are always bool.  */
9784     type = boolean_type_node;
9785   return build2 (TEMPLATE_ID_EXPR, type, templ, arglist);
9786 }
9787 
9788 /* Instantiate a variable declaration from a TEMPLATE_ID_EXPR for use. */
9789 
9790 tree
finish_template_variable(tree var,tsubst_flags_t complain)9791 finish_template_variable (tree var, tsubst_flags_t complain)
9792 {
9793   tree templ = TREE_OPERAND (var, 0);
9794   tree arglist = TREE_OPERAND (var, 1);
9795 
9796   /* We never want to return a VAR_DECL for a variable concept, since they
9797      aren't instantiated.  In a template, leave the TEMPLATE_ID_EXPR alone.  */
9798   bool concept_p = flag_concepts && variable_concept_p (templ);
9799   if (concept_p && processing_template_decl)
9800     return var;
9801 
9802   tree tmpl_args = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (templ));
9803   arglist = add_outermost_template_args (tmpl_args, arglist);
9804 
9805   templ = most_general_template (templ);
9806   tree parms = DECL_TEMPLATE_PARMS (templ);
9807   arglist = coerce_innermost_template_parms (parms, arglist, templ, complain,
9808 					     /*req_all*/true,
9809 					     /*use_default*/true);
9810 
9811   if (flag_concepts && !constraints_satisfied_p (templ, arglist))
9812     {
9813       if (complain & tf_error)
9814 	{
9815 	  auto_diagnostic_group d;
9816 	  error ("use of invalid variable template %qE", var);
9817 	  diagnose_constraints (location_of (var), templ, arglist);
9818 	}
9819       return error_mark_node;
9820     }
9821 
9822   /* If a template-id refers to a specialization of a variable
9823      concept, then the expression is true if and only if the
9824      concept's constraints are satisfied by the given template
9825      arguments.
9826 
9827      NOTE: This is an extension of Concepts Lite TS that
9828      allows constraints to be used in expressions. */
9829   if (concept_p)
9830     {
9831       tree decl = DECL_TEMPLATE_RESULT (templ);
9832       return evaluate_variable_concept (decl, arglist);
9833     }
9834 
9835   return instantiate_template (templ, arglist, complain);
9836 }
9837 
9838 /* Construct a TEMPLATE_ID_EXPR for the given variable template TEMPL having
9839    TARGS template args, and instantiate it if it's not dependent.  */
9840 
9841 tree
lookup_and_finish_template_variable(tree templ,tree targs,tsubst_flags_t complain)9842 lookup_and_finish_template_variable (tree templ, tree targs,
9843 				     tsubst_flags_t complain)
9844 {
9845   templ = lookup_template_variable (templ, targs);
9846   if (!any_dependent_template_arguments_p (targs))
9847     {
9848       templ = finish_template_variable (templ, complain);
9849       mark_used (templ);
9850     }
9851 
9852   return convert_from_reference (templ);
9853 }
9854 
9855 
9856 struct pair_fn_data
9857 {
9858   tree_fn_t fn;
9859   tree_fn_t any_fn;
9860   void *data;
9861   /* True when we should also visit template parameters that occur in
9862      non-deduced contexts.  */
9863   bool include_nondeduced_p;
9864   hash_set<tree> *visited;
9865 };
9866 
9867 /* Called from for_each_template_parm via walk_tree.  */
9868 
9869 static tree
for_each_template_parm_r(tree * tp,int * walk_subtrees,void * d)9870 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
9871 {
9872   tree t = *tp;
9873   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
9874   tree_fn_t fn = pfd->fn;
9875   void *data = pfd->data;
9876   tree result = NULL_TREE;
9877 
9878 #define WALK_SUBTREE(NODE)						\
9879   do									\
9880     {									\
9881       result = for_each_template_parm (NODE, fn, data, pfd->visited,	\
9882 				       pfd->include_nondeduced_p,	\
9883 				       pfd->any_fn);			\
9884       if (result) goto out;						\
9885     }									\
9886   while (0)
9887 
9888   if (pfd->any_fn && (*pfd->any_fn)(t, data))
9889     return t;
9890 
9891   if (TYPE_P (t)
9892       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE))
9893     WALK_SUBTREE (TYPE_CONTEXT (t));
9894 
9895   switch (TREE_CODE (t))
9896     {
9897     case RECORD_TYPE:
9898       if (TYPE_PTRMEMFUNC_P (t))
9899 	break;
9900       /* Fall through.  */
9901 
9902     case UNION_TYPE:
9903     case ENUMERAL_TYPE:
9904       if (!TYPE_TEMPLATE_INFO (t))
9905 	*walk_subtrees = 0;
9906       else
9907 	WALK_SUBTREE (TYPE_TI_ARGS (t));
9908       break;
9909 
9910     case INTEGER_TYPE:
9911       WALK_SUBTREE (TYPE_MIN_VALUE (t));
9912       WALK_SUBTREE (TYPE_MAX_VALUE (t));
9913       break;
9914 
9915     case METHOD_TYPE:
9916       /* Since we're not going to walk subtrees, we have to do this
9917 	 explicitly here.  */
9918       WALK_SUBTREE (TYPE_METHOD_BASETYPE (t));
9919       /* Fall through.  */
9920 
9921     case FUNCTION_TYPE:
9922       /* Check the return type.  */
9923       WALK_SUBTREE (TREE_TYPE (t));
9924 
9925       /* Check the parameter types.  Since default arguments are not
9926 	 instantiated until they are needed, the TYPE_ARG_TYPES may
9927 	 contain expressions that involve template parameters.  But,
9928 	 no-one should be looking at them yet.  And, once they're
9929 	 instantiated, they don't contain template parameters, so
9930 	 there's no point in looking at them then, either.  */
9931       {
9932 	tree parm;
9933 
9934 	for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
9935 	  WALK_SUBTREE (TREE_VALUE (parm));
9936 
9937 	/* Since we've already handled the TYPE_ARG_TYPES, we don't
9938 	   want walk_tree walking into them itself.  */
9939 	*walk_subtrees = 0;
9940       }
9941 
9942       if (flag_noexcept_type)
9943 	{
9944 	  tree spec = TYPE_RAISES_EXCEPTIONS (t);
9945 	  if (spec)
9946 	    WALK_SUBTREE (TREE_PURPOSE (spec));
9947 	}
9948       break;
9949 
9950     case TYPEOF_TYPE:
9951     case DECLTYPE_TYPE:
9952     case UNDERLYING_TYPE:
9953       if (pfd->include_nondeduced_p
9954 	  && for_each_template_parm (TYPE_VALUES_RAW (t), fn, data,
9955 				     pfd->visited,
9956 				     pfd->include_nondeduced_p,
9957 				     pfd->any_fn))
9958 	return error_mark_node;
9959       *walk_subtrees = false;
9960       break;
9961 
9962     case FUNCTION_DECL:
9963     case VAR_DECL:
9964       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9965 	WALK_SUBTREE (DECL_TI_ARGS (t));
9966       /* Fall through.  */
9967 
9968     case PARM_DECL:
9969     case CONST_DECL:
9970       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t))
9971 	WALK_SUBTREE (DECL_INITIAL (t));
9972       if (DECL_CONTEXT (t)
9973 	  && pfd->include_nondeduced_p)
9974 	WALK_SUBTREE (DECL_CONTEXT (t));
9975       break;
9976 
9977     case BOUND_TEMPLATE_TEMPLATE_PARM:
9978       /* Record template parameters such as `T' inside `TT<T>'.  */
9979       WALK_SUBTREE (TYPE_TI_ARGS (t));
9980       /* Fall through.  */
9981 
9982     case TEMPLATE_TEMPLATE_PARM:
9983     case TEMPLATE_TYPE_PARM:
9984     case TEMPLATE_PARM_INDEX:
9985       if (fn && (*fn)(t, data))
9986 	return t;
9987       else if (!fn)
9988 	return t;
9989       break;
9990 
9991     case TEMPLATE_DECL:
9992       /* A template template parameter is encountered.  */
9993       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9994 	WALK_SUBTREE (TREE_TYPE (t));
9995 
9996       /* Already substituted template template parameter */
9997       *walk_subtrees = 0;
9998       break;
9999 
10000     case TYPENAME_TYPE:
10001       /* A template-id in a TYPENAME_TYPE might be a deduced context after
10002 	 partial instantiation.  */
10003       WALK_SUBTREE (TYPENAME_TYPE_FULLNAME (t));
10004       break;
10005 
10006     case CONSTRUCTOR:
10007       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
10008 	  && pfd->include_nondeduced_p)
10009 	WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (t)));
10010       break;
10011 
10012     case INDIRECT_REF:
10013     case COMPONENT_REF:
10014       /* If there's no type, then this thing must be some expression
10015 	 involving template parameters.  */
10016       if (!fn && !TREE_TYPE (t))
10017 	return error_mark_node;
10018       break;
10019 
10020     case MODOP_EXPR:
10021     case CAST_EXPR:
10022     case IMPLICIT_CONV_EXPR:
10023     case REINTERPRET_CAST_EXPR:
10024     case CONST_CAST_EXPR:
10025     case STATIC_CAST_EXPR:
10026     case DYNAMIC_CAST_EXPR:
10027     case ARROW_EXPR:
10028     case DOTSTAR_EXPR:
10029     case TYPEID_EXPR:
10030     case PSEUDO_DTOR_EXPR:
10031       if (!fn)
10032 	return error_mark_node;
10033       break;
10034 
10035     default:
10036       break;
10037     }
10038 
10039   #undef WALK_SUBTREE
10040 
10041   /* We didn't find any template parameters we liked.  */
10042  out:
10043   return result;
10044 }
10045 
10046 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
10047    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
10048    call FN with the parameter and the DATA.
10049    If FN returns nonzero, the iteration is terminated, and
10050    for_each_template_parm returns 1.  Otherwise, the iteration
10051    continues.  If FN never returns a nonzero value, the value
10052    returned by for_each_template_parm is 0.  If FN is NULL, it is
10053    considered to be the function which always returns 1.
10054 
10055    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
10056    parameters that occur in non-deduced contexts.  When false, only
10057    visits those template parameters that can be deduced.  */
10058 
10059 static tree
for_each_template_parm(tree t,tree_fn_t fn,void * data,hash_set<tree> * visited,bool include_nondeduced_p,tree_fn_t any_fn)10060 for_each_template_parm (tree t, tree_fn_t fn, void* data,
10061 			hash_set<tree> *visited,
10062 			bool include_nondeduced_p,
10063 			tree_fn_t any_fn)
10064 {
10065   struct pair_fn_data pfd;
10066   tree result;
10067 
10068   /* Set up.  */
10069   pfd.fn = fn;
10070   pfd.any_fn = any_fn;
10071   pfd.data = data;
10072   pfd.include_nondeduced_p = include_nondeduced_p;
10073 
10074   /* Walk the tree.  (Conceptually, we would like to walk without
10075      duplicates, but for_each_template_parm_r recursively calls
10076      for_each_template_parm, so we would need to reorganize a fair
10077      bit to use walk_tree_without_duplicates, so we keep our own
10078      visited list.)  */
10079   if (visited)
10080     pfd.visited = visited;
10081   else
10082     pfd.visited = new hash_set<tree>;
10083   result = cp_walk_tree (&t,
10084 		         for_each_template_parm_r,
10085 		         &pfd,
10086 		         pfd.visited);
10087 
10088   /* Clean up.  */
10089   if (!visited)
10090     {
10091       delete pfd.visited;
10092       pfd.visited = 0;
10093     }
10094 
10095   return result;
10096 }
10097 
10098 /* Returns true if T depends on any template parameter.  */
10099 
10100 int
uses_template_parms(tree t)10101 uses_template_parms (tree t)
10102 {
10103   if (t == NULL_TREE)
10104     return false;
10105 
10106   bool dependent_p;
10107   int saved_processing_template_decl;
10108 
10109   saved_processing_template_decl = processing_template_decl;
10110   if (!saved_processing_template_decl)
10111     processing_template_decl = 1;
10112   if (TYPE_P (t))
10113     dependent_p = dependent_type_p (t);
10114   else if (TREE_CODE (t) == TREE_VEC)
10115     dependent_p = any_dependent_template_arguments_p (t);
10116   else if (TREE_CODE (t) == TREE_LIST)
10117     dependent_p = (uses_template_parms (TREE_VALUE (t))
10118 		   || uses_template_parms (TREE_CHAIN (t)));
10119   else if (TREE_CODE (t) == TYPE_DECL)
10120     dependent_p = dependent_type_p (TREE_TYPE (t));
10121   else if (DECL_P (t)
10122 	   || EXPR_P (t)
10123 	   || TREE_CODE (t) == TEMPLATE_PARM_INDEX
10124 	   || TREE_CODE (t) == OVERLOAD
10125 	   || BASELINK_P (t)
10126 	   || identifier_p (t)
10127 	   || TREE_CODE (t) == TRAIT_EXPR
10128 	   || TREE_CODE (t) == CONSTRUCTOR
10129 	   || CONSTANT_CLASS_P (t))
10130     dependent_p = (type_dependent_expression_p (t)
10131 		   || value_dependent_expression_p (t));
10132   else
10133     {
10134       gcc_assert (t == error_mark_node);
10135       dependent_p = false;
10136     }
10137 
10138   processing_template_decl = saved_processing_template_decl;
10139 
10140   return dependent_p;
10141 }
10142 
10143 /* Returns true iff current_function_decl is an incompletely instantiated
10144    template.  Useful instead of processing_template_decl because the latter
10145    is set to 0 during instantiate_non_dependent_expr.  */
10146 
10147 bool
in_template_function(void)10148 in_template_function (void)
10149 {
10150   tree fn = current_function_decl;
10151   bool ret;
10152   ++processing_template_decl;
10153   ret = (fn && DECL_LANG_SPECIFIC (fn)
10154 	 && DECL_TEMPLATE_INFO (fn)
10155 	 && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
10156   --processing_template_decl;
10157   return ret;
10158 }
10159 
10160 /* Returns true if T depends on any template parameter with level LEVEL.  */
10161 
10162 bool
uses_template_parms_level(tree t,int level)10163 uses_template_parms_level (tree t, int level)
10164 {
10165   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
10166 				 /*include_nondeduced_p=*/true);
10167 }
10168 
10169 /* Returns true if the signature of DECL depends on any template parameter from
10170    its enclosing class.  */
10171 
10172 bool
uses_outer_template_parms(tree decl)10173 uses_outer_template_parms (tree decl)
10174 {
10175   int depth = template_class_depth (CP_DECL_CONTEXT (decl));
10176   if (depth == 0)
10177     return false;
10178   if (for_each_template_parm (TREE_TYPE (decl), template_parm_outer_level,
10179 			      &depth, NULL, /*include_nondeduced_p=*/true))
10180     return true;
10181   if (PRIMARY_TEMPLATE_P (decl)
10182       && for_each_template_parm (INNERMOST_TEMPLATE_PARMS
10183 				 (DECL_TEMPLATE_PARMS (decl)),
10184 				 template_parm_outer_level,
10185 				 &depth, NULL, /*include_nondeduced_p=*/true))
10186     return true;
10187   tree ci = get_constraints (decl);
10188   if (ci)
10189     ci = CI_ASSOCIATED_CONSTRAINTS (ci);
10190   if (ci && for_each_template_parm (ci, template_parm_outer_level,
10191 				    &depth, NULL, /*nondeduced*/true))
10192     return true;
10193   return false;
10194 }
10195 
10196 /* Returns TRUE iff INST is an instantiation we don't need to do in an
10197    ill-formed translation unit, i.e. a variable or function that isn't
10198    usable in a constant expression.  */
10199 
10200 static inline bool
neglectable_inst_p(tree d)10201 neglectable_inst_p (tree d)
10202 {
10203   return (d && DECL_P (d)
10204 	  && !undeduced_auto_decl (d)
10205 	  && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
10206 	       : decl_maybe_constant_var_p (d)));
10207 }
10208 
10209 /* Returns TRUE iff we should refuse to instantiate DECL because it's
10210    neglectable and instantiated from within an erroneous instantiation.  */
10211 
10212 static bool
limit_bad_template_recursion(tree decl)10213 limit_bad_template_recursion (tree decl)
10214 {
10215   struct tinst_level *lev = current_tinst_level;
10216   int errs = errorcount + sorrycount;
10217   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
10218     return false;
10219 
10220   for (; lev; lev = lev->next)
10221     if (neglectable_inst_p (lev->maybe_get_node ()))
10222       break;
10223 
10224   return (lev && errs > lev->errors);
10225 }
10226 
10227 static int tinst_depth;
10228 extern int max_tinst_depth;
10229 int depth_reached;
10230 
10231 static GTY(()) struct tinst_level *last_error_tinst_level;
10232 
10233 /* We're starting to instantiate D; record the template instantiation context
10234    at LOC for diagnostics and to restore it later.  */
10235 
10236 static bool
push_tinst_level_loc(tree tldcl,tree targs,location_t loc)10237 push_tinst_level_loc (tree tldcl, tree targs, location_t loc)
10238 {
10239   struct tinst_level *new_level;
10240 
10241   if (tinst_depth >= max_tinst_depth)
10242     {
10243       /* Tell error.c not to try to instantiate any templates.  */
10244       at_eof = 2;
10245       fatal_error (input_location,
10246 		   "template instantiation depth exceeds maximum of %d"
10247 		   " (use %<-ftemplate-depth=%> to increase the maximum)",
10248                    max_tinst_depth);
10249       return false;
10250     }
10251 
10252   /* If the current instantiation caused problems, don't let it instantiate
10253      anything else.  Do allow deduction substitution and decls usable in
10254      constant expressions.  */
10255   if (!targs && limit_bad_template_recursion (tldcl))
10256     return false;
10257 
10258   /* When not -quiet, dump template instantiations other than functions, since
10259      announce_function will take care of those.  */
10260   if (!quiet_flag && !targs
10261       && TREE_CODE (tldcl) != TREE_LIST
10262       && TREE_CODE (tldcl) != FUNCTION_DECL)
10263     fprintf (stderr, " %s", decl_as_string (tldcl, TFF_DECL_SPECIFIERS));
10264 
10265   new_level = tinst_level_freelist ().alloc ();
10266   new_level->tldcl = tldcl;
10267   new_level->targs = targs;
10268   new_level->locus = loc;
10269   new_level->errors = errorcount + sorrycount;
10270   new_level->next = NULL;
10271   new_level->refcount = 0;
10272   set_refcount_ptr (new_level->next, current_tinst_level);
10273   set_refcount_ptr (current_tinst_level, new_level);
10274 
10275   ++tinst_depth;
10276   if (GATHER_STATISTICS && (tinst_depth > depth_reached))
10277     depth_reached = tinst_depth;
10278 
10279   return true;
10280 }
10281 
10282 /* We're starting substitution of TMPL<ARGS>; record the template
10283    substitution context for diagnostics and to restore it later.  */
10284 
10285 static bool
push_tinst_level(tree tmpl,tree args)10286 push_tinst_level (tree tmpl, tree args)
10287 {
10288   return push_tinst_level_loc (tmpl, args, input_location);
10289 }
10290 
10291 /* We're starting to instantiate D; record INPUT_LOCATION and the
10292    template instantiation context for diagnostics and to restore it
10293    later.  */
10294 
10295 bool
push_tinst_level(tree d)10296 push_tinst_level (tree d)
10297 {
10298   return push_tinst_level_loc (d, input_location);
10299 }
10300 
10301 /* Likewise, but record LOC as the program location.  */
10302 
10303 bool
push_tinst_level_loc(tree d,location_t loc)10304 push_tinst_level_loc (tree d, location_t loc)
10305 {
10306   gcc_assert (TREE_CODE (d) != TREE_LIST);
10307   return push_tinst_level_loc (d, NULL, loc);
10308 }
10309 
10310 /* We're done instantiating this template; return to the instantiation
10311    context.  */
10312 
10313 void
pop_tinst_level(void)10314 pop_tinst_level (void)
10315 {
10316   /* Restore the filename and line number stashed away when we started
10317      this instantiation.  */
10318   input_location = current_tinst_level->locus;
10319   set_refcount_ptr (current_tinst_level, current_tinst_level->next);
10320   --tinst_depth;
10321 }
10322 
10323 /* We're instantiating a deferred template; restore the template
10324    instantiation context in which the instantiation was requested, which
10325    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
10326 
10327 static tree
reopen_tinst_level(struct tinst_level * level)10328 reopen_tinst_level (struct tinst_level *level)
10329 {
10330   struct tinst_level *t;
10331 
10332   tinst_depth = 0;
10333   for (t = level; t; t = t->next)
10334     ++tinst_depth;
10335 
10336   set_refcount_ptr (current_tinst_level, level);
10337   pop_tinst_level ();
10338   if (current_tinst_level)
10339     current_tinst_level->errors = errorcount+sorrycount;
10340   return level->maybe_get_node ();
10341 }
10342 
10343 /* Returns the TINST_LEVEL which gives the original instantiation
10344    context.  */
10345 
10346 struct tinst_level *
outermost_tinst_level(void)10347 outermost_tinst_level (void)
10348 {
10349   struct tinst_level *level = current_tinst_level;
10350   if (level)
10351     while (level->next)
10352       level = level->next;
10353   return level;
10354 }
10355 
10356 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
10357    vector of template arguments, as for tsubst.
10358 
10359    Returns an appropriate tsubst'd friend declaration.  */
10360 
10361 static tree
tsubst_friend_function(tree decl,tree args)10362 tsubst_friend_function (tree decl, tree args)
10363 {
10364   tree new_friend;
10365 
10366   if (TREE_CODE (decl) == FUNCTION_DECL
10367       && DECL_TEMPLATE_INSTANTIATION (decl)
10368       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10369     /* This was a friend declared with an explicit template
10370        argument list, e.g.:
10371 
10372        friend void f<>(T);
10373 
10374        to indicate that f was a template instantiation, not a new
10375        function declaration.  Now, we have to figure out what
10376        instantiation of what template.  */
10377     {
10378       tree template_id, arglist, fns;
10379       tree new_args;
10380       tree tmpl;
10381       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
10382 
10383       /* Friend functions are looked up in the containing namespace scope.
10384 	 We must enter that scope, to avoid finding member functions of the
10385 	 current class with same name.  */
10386       push_nested_namespace (ns);
10387       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
10388 			 tf_warning_or_error, NULL_TREE,
10389 			 /*integral_constant_expression_p=*/false);
10390       pop_nested_namespace (ns);
10391       arglist = tsubst (DECL_TI_ARGS (decl), args,
10392 			tf_warning_or_error, NULL_TREE);
10393       template_id = lookup_template_function (fns, arglist);
10394 
10395       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
10396       tmpl = determine_specialization (template_id, new_friend,
10397 				       &new_args,
10398 				       /*need_member_template=*/0,
10399 				       TREE_VEC_LENGTH (args),
10400 				       tsk_none);
10401       return instantiate_template (tmpl, new_args, tf_error);
10402     }
10403 
10404   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
10405 
10406   /* The NEW_FRIEND will look like an instantiation, to the
10407      compiler, but is not an instantiation from the point of view of
10408      the language.  For example, we might have had:
10409 
10410      template <class T> struct S {
10411        template <class U> friend void f(T, U);
10412      };
10413 
10414      Then, in S<int>, template <class U> void f(int, U) is not an
10415      instantiation of anything.  */
10416   if (new_friend == error_mark_node)
10417     return error_mark_node;
10418 
10419   DECL_USE_TEMPLATE (new_friend) = 0;
10420   if (TREE_CODE (decl) == TEMPLATE_DECL)
10421     {
10422       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
10423       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
10424 	= DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
10425     }
10426 
10427   /* The mangled name for the NEW_FRIEND is incorrect.  The function
10428      is not a template instantiation and should not be mangled like
10429      one.  Therefore, we forget the mangling here; we'll recompute it
10430      later if we need it.  */
10431   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
10432     {
10433       SET_DECL_RTL (new_friend, NULL);
10434       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
10435     }
10436 
10437   if (DECL_NAMESPACE_SCOPE_P (new_friend))
10438     {
10439       tree old_decl;
10440       tree new_friend_template_info;
10441       tree new_friend_result_template_info;
10442       tree ns;
10443       int  new_friend_is_defn;
10444 
10445       /* We must save some information from NEW_FRIEND before calling
10446 	 duplicate decls since that function will free NEW_FRIEND if
10447 	 possible.  */
10448       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
10449       new_friend_is_defn =
10450 	    (DECL_INITIAL (DECL_TEMPLATE_RESULT
10451 			   (template_for_substitution (new_friend)))
10452 	     != NULL_TREE);
10453       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
10454 	{
10455 	  /* This declaration is a `primary' template.  */
10456 	  DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
10457 
10458 	  new_friend_result_template_info
10459 	    = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
10460 	}
10461       else
10462 	new_friend_result_template_info = NULL_TREE;
10463 
10464       /* Inside pushdecl_namespace_level, we will push into the
10465 	 current namespace. However, the friend function should go
10466 	 into the namespace of the template.  */
10467       ns = decl_namespace_context (new_friend);
10468       push_nested_namespace (ns);
10469       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
10470       pop_nested_namespace (ns);
10471 
10472       if (old_decl == error_mark_node)
10473 	return error_mark_node;
10474 
10475       if (old_decl != new_friend)
10476 	{
10477 	  /* This new friend declaration matched an existing
10478 	     declaration.  For example, given:
10479 
10480 	       template <class T> void f(T);
10481 	       template <class U> class C {
10482 		 template <class T> friend void f(T) {}
10483 	       };
10484 
10485 	     the friend declaration actually provides the definition
10486 	     of `f', once C has been instantiated for some type.  So,
10487 	     old_decl will be the out-of-class template declaration,
10488 	     while new_friend is the in-class definition.
10489 
10490 	     But, if `f' was called before this point, the
10491 	     instantiation of `f' will have DECL_TI_ARGS corresponding
10492 	     to `T' but not to `U', references to which might appear
10493 	     in the definition of `f'.  Previously, the most general
10494 	     template for an instantiation of `f' was the out-of-class
10495 	     version; now it is the in-class version.  Therefore, we
10496 	     run through all specialization of `f', adding to their
10497 	     DECL_TI_ARGS appropriately.  In particular, they need a
10498 	     new set of outer arguments, corresponding to the
10499 	     arguments for this class instantiation.
10500 
10501 	     The same situation can arise with something like this:
10502 
10503 	       friend void f(int);
10504 	       template <class T> class C {
10505 		 friend void f(T) {}
10506 	       };
10507 
10508 	     when `C<int>' is instantiated.  Now, `f(int)' is defined
10509 	     in the class.  */
10510 
10511 	  if (!new_friend_is_defn)
10512 	    /* On the other hand, if the in-class declaration does
10513 	       *not* provide a definition, then we don't want to alter
10514 	       existing definitions.  We can just leave everything
10515 	       alone.  */
10516 	    ;
10517 	  else
10518 	    {
10519 	      tree new_template = TI_TEMPLATE (new_friend_template_info);
10520 	      tree new_args = TI_ARGS (new_friend_template_info);
10521 
10522 	      /* Overwrite whatever template info was there before, if
10523 		 any, with the new template information pertaining to
10524 		 the declaration.  */
10525 	      DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
10526 
10527 	      if (TREE_CODE (old_decl) != TEMPLATE_DECL)
10528 		{
10529 		  /* We should have called reregister_specialization in
10530 		     duplicate_decls.  */
10531 		  gcc_assert (retrieve_specialization (new_template,
10532 						       new_args, 0)
10533 			      == old_decl);
10534 
10535 		  /* Instantiate it if the global has already been used.  */
10536 		  if (DECL_ODR_USED (old_decl))
10537 		    instantiate_decl (old_decl, /*defer_ok=*/true,
10538 				      /*expl_inst_class_mem_p=*/false);
10539 		}
10540 	      else
10541 		{
10542 		  tree t;
10543 
10544 		  /* Indicate that the old function template is a partial
10545 		     instantiation.  */
10546 		  DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
10547 		    = new_friend_result_template_info;
10548 
10549 		  gcc_assert (new_template
10550 			      == most_general_template (new_template));
10551 		  gcc_assert (new_template != old_decl);
10552 
10553 		  /* Reassign any specializations already in the hash table
10554 		     to the new more general template, and add the
10555 		     additional template args.  */
10556 		  for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
10557 		       t != NULL_TREE;
10558 		       t = TREE_CHAIN (t))
10559 		    {
10560 		      tree spec = TREE_VALUE (t);
10561 		      spec_entry elt;
10562 
10563 		      elt.tmpl = old_decl;
10564 		      elt.args = DECL_TI_ARGS (spec);
10565 		      elt.spec = NULL_TREE;
10566 
10567 		      decl_specializations->remove_elt (&elt);
10568 
10569 		      DECL_TI_ARGS (spec)
10570 			= add_outermost_template_args (new_args,
10571 						       DECL_TI_ARGS (spec));
10572 
10573 		      register_specialization
10574 			(spec, new_template, DECL_TI_ARGS (spec), true, 0);
10575 
10576 		    }
10577 		  DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
10578 		}
10579 	    }
10580 
10581 	  /* The information from NEW_FRIEND has been merged into OLD_DECL
10582 	     by duplicate_decls.  */
10583 	  new_friend = old_decl;
10584 	}
10585     }
10586   else
10587     {
10588       tree context = DECL_CONTEXT (new_friend);
10589       bool dependent_p;
10590 
10591       /* In the code
10592 	   template <class T> class C {
10593 	     template <class U> friend void C1<U>::f (); // case 1
10594 	     friend void C2<T>::f ();			 // case 2
10595 	   };
10596 	 we only need to make sure CONTEXT is a complete type for
10597 	 case 2.  To distinguish between the two cases, we note that
10598 	 CONTEXT of case 1 remains dependent type after tsubst while
10599 	 this isn't true for case 2.  */
10600       ++processing_template_decl;
10601       dependent_p = dependent_type_p (context);
10602       --processing_template_decl;
10603 
10604       if (!dependent_p
10605 	  && !complete_type_or_else (context, NULL_TREE))
10606 	return error_mark_node;
10607 
10608       if (COMPLETE_TYPE_P (context))
10609 	{
10610 	  tree fn = new_friend;
10611 	  /* do_friend adds the TEMPLATE_DECL for any member friend
10612 	     template even if it isn't a member template, i.e.
10613 	       template <class T> friend A<T>::f();
10614 	     Look through it in that case.  */
10615 	  if (TREE_CODE (fn) == TEMPLATE_DECL
10616 	      && !PRIMARY_TEMPLATE_P (fn))
10617 	    fn = DECL_TEMPLATE_RESULT (fn);
10618 	  /* Check to see that the declaration is really present, and,
10619 	     possibly obtain an improved declaration.  */
10620 	  fn = check_classfn (context, fn, NULL_TREE);
10621 
10622 	  if (fn)
10623 	    new_friend = fn;
10624 	}
10625     }
10626 
10627   return new_friend;
10628 }
10629 
10630 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
10631    template arguments, as for tsubst.
10632 
10633    Returns an appropriate tsubst'd friend type or error_mark_node on
10634    failure.  */
10635 
10636 static tree
tsubst_friend_class(tree friend_tmpl,tree args)10637 tsubst_friend_class (tree friend_tmpl, tree args)
10638 {
10639   tree tmpl;
10640 
10641   if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
10642     {
10643       tmpl = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
10644       return TREE_TYPE (tmpl);
10645     }
10646 
10647   tree context = CP_DECL_CONTEXT (friend_tmpl);
10648   if (TREE_CODE (context) == NAMESPACE_DECL)
10649     push_nested_namespace (context);
10650   else
10651     {
10652       context = tsubst (context, args, tf_error, NULL_TREE);
10653       push_nested_class (context);
10654     }
10655 
10656   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), /*prefer_type=*/false,
10657 			   /*non_class=*/false, /*block_p=*/false,
10658 			   /*namespaces_only=*/false, LOOKUP_HIDDEN);
10659 
10660   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
10661     {
10662       /* The friend template has already been declared.  Just
10663 	 check to see that the declarations match, and install any new
10664 	 default parameters.  We must tsubst the default parameters,
10665 	 of course.  We only need the innermost template parameters
10666 	 because that is all that redeclare_class_template will look
10667 	 at.  */
10668       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
10669 	  > TMPL_ARGS_DEPTH (args))
10670 	{
10671 	  tree parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
10672 					      args, tf_warning_or_error);
10673           location_t saved_input_location = input_location;
10674           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
10675           tree cons = get_constraints (tmpl);
10676           redeclare_class_template (TREE_TYPE (tmpl), parms, cons);
10677           input_location = saved_input_location;
10678 	}
10679     }
10680   else
10681     {
10682       /* The friend template has not already been declared.  In this
10683 	 case, the instantiation of the template class will cause the
10684 	 injection of this template into the namespace scope.  */
10685       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
10686 
10687       if (tmpl != error_mark_node)
10688 	{
10689 	  /* The new TMPL is not an instantiation of anything, so we
10690 	     forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE
10691 	     for the new type because that is supposed to be the
10692 	     corresponding template decl, i.e., TMPL.  */
10693 	  DECL_USE_TEMPLATE (tmpl) = 0;
10694 	  DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
10695 	  CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
10696 	  CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
10697 	    = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
10698 
10699 	  /* It is hidden.  */
10700 	  retrofit_lang_decl (DECL_TEMPLATE_RESULT (tmpl));
10701 	  DECL_ANTICIPATED (tmpl)
10702 	    = DECL_ANTICIPATED (DECL_TEMPLATE_RESULT (tmpl)) = true;
10703 
10704 	  /* Inject this template into the enclosing namspace scope.  */
10705 	  tmpl = pushdecl_namespace_level (tmpl, true);
10706 	}
10707     }
10708 
10709   if (TREE_CODE (context) == NAMESPACE_DECL)
10710     pop_nested_namespace (context);
10711   else
10712     pop_nested_class ();
10713 
10714   return TREE_TYPE (tmpl);
10715 }
10716 
10717 /* Returns zero if TYPE cannot be completed later due to circularity.
10718    Otherwise returns one.  */
10719 
10720 static int
can_complete_type_without_circularity(tree type)10721 can_complete_type_without_circularity (tree type)
10722 {
10723   if (type == NULL_TREE || type == error_mark_node)
10724     return 0;
10725   else if (COMPLETE_TYPE_P (type))
10726     return 1;
10727   else if (TREE_CODE (type) == ARRAY_TYPE)
10728     return can_complete_type_without_circularity (TREE_TYPE (type));
10729   else if (CLASS_TYPE_P (type)
10730 	   && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
10731     return 0;
10732   else
10733     return 1;
10734 }
10735 
10736 static tree tsubst_omp_clauses (tree, enum c_omp_region_type, tree,
10737 				tsubst_flags_t, tree);
10738 
10739 /* Instantiate a single dependent attribute T (a TREE_LIST), and return either
10740    T or a new TREE_LIST, possibly a chain in the case of a pack expansion.  */
10741 
10742 static tree
tsubst_attribute(tree t,tree * decl_p,tree args,tsubst_flags_t complain,tree in_decl)10743 tsubst_attribute (tree t, tree *decl_p, tree args,
10744 		  tsubst_flags_t complain, tree in_decl)
10745 {
10746   gcc_assert (ATTR_IS_DEPENDENT (t));
10747 
10748   tree val = TREE_VALUE (t);
10749   if (val == NULL_TREE)
10750     /* Nothing to do.  */;
10751   else if ((flag_openmp || flag_openmp_simd)
10752 	   && is_attribute_p ("omp declare simd",
10753 			      get_attribute_name (t)))
10754     {
10755       tree clauses = TREE_VALUE (val);
10756       clauses = tsubst_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD, args,
10757 				    complain, in_decl);
10758       c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
10759       clauses = finish_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD);
10760       tree parms = DECL_ARGUMENTS (*decl_p);
10761       clauses
10762 	= c_omp_declare_simd_clauses_to_numbers (parms, clauses);
10763       if (clauses)
10764 	val = build_tree_list (NULL_TREE, clauses);
10765       else
10766 	val = NULL_TREE;
10767     }
10768   /* If the first attribute argument is an identifier, don't
10769      pass it through tsubst.  Attributes like mode, format,
10770      cleanup and several target specific attributes expect it
10771      unmodified.  */
10772   else if (attribute_takes_identifier_p (get_attribute_name (t)))
10773     {
10774       tree chain
10775 	= tsubst_expr (TREE_CHAIN (val), args, complain, in_decl,
10776 		       /*integral_constant_expression_p=*/false);
10777       if (chain != TREE_CHAIN (val))
10778 	val = tree_cons (NULL_TREE, TREE_VALUE (val), chain);
10779     }
10780   else if (PACK_EXPANSION_P (val))
10781     {
10782       /* An attribute pack expansion.  */
10783       tree purp = TREE_PURPOSE (t);
10784       tree pack = tsubst_pack_expansion (val, args, complain, in_decl);
10785       if (pack == error_mark_node)
10786 	return error_mark_node;
10787       int len = TREE_VEC_LENGTH (pack);
10788       tree list = NULL_TREE;
10789       tree *q = &list;
10790       for (int i = 0; i < len; ++i)
10791 	{
10792 	  tree elt = TREE_VEC_ELT (pack, i);
10793 	  *q = build_tree_list (purp, elt);
10794 	  q = &TREE_CHAIN (*q);
10795 	}
10796       return list;
10797     }
10798   else
10799     val = tsubst_expr (val, args, complain, in_decl,
10800 		       /*integral_constant_expression_p=*/false);
10801 
10802   if (val != TREE_VALUE (t))
10803     return build_tree_list (TREE_PURPOSE (t), val);
10804   return t;
10805 }
10806 
10807 /* Instantiate any dependent attributes in ATTRIBUTES, returning either it
10808    unchanged or a new TREE_LIST chain.  */
10809 
10810 static tree
tsubst_attributes(tree attributes,tree args,tsubst_flags_t complain,tree in_decl)10811 tsubst_attributes (tree attributes, tree args,
10812 		   tsubst_flags_t complain, tree in_decl)
10813 {
10814   tree last_dep = NULL_TREE;
10815 
10816   for (tree t = attributes; t; t = TREE_CHAIN (t))
10817     if (ATTR_IS_DEPENDENT (t))
10818       {
10819 	last_dep = t;
10820 	attributes = copy_list (attributes);
10821 	break;
10822       }
10823 
10824   if (last_dep)
10825     for (tree *p = &attributes; *p; )
10826       {
10827 	tree t = *p;
10828 	if (ATTR_IS_DEPENDENT (t))
10829 	  {
10830 	    tree subst = tsubst_attribute (t, NULL, args, complain, in_decl);
10831 	    if (subst != t)
10832 	      {
10833 		*p = subst;
10834 		while (*p)
10835 		  p = &TREE_CHAIN (*p);
10836 		*p = TREE_CHAIN (t);
10837 		continue;
10838 	      }
10839 	  }
10840 	p = &TREE_CHAIN (*p);
10841       }
10842 
10843   return attributes;
10844 }
10845 
10846 /* Apply any attributes which had to be deferred until instantiation
10847    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
10848    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
10849 
10850 static void
apply_late_template_attributes(tree * decl_p,tree attributes,int attr_flags,tree args,tsubst_flags_t complain,tree in_decl)10851 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
10852 				tree args, tsubst_flags_t complain, tree in_decl)
10853 {
10854   tree last_dep = NULL_TREE;
10855   tree t;
10856   tree *p;
10857 
10858   if (attributes == NULL_TREE)
10859     return;
10860 
10861   if (DECL_P (*decl_p))
10862     {
10863       if (TREE_TYPE (*decl_p) == error_mark_node)
10864 	return;
10865       p = &DECL_ATTRIBUTES (*decl_p);
10866       /* DECL_ATTRIBUTES comes from copy_node in tsubst_decl, and is identical
10867          to our attributes parameter.  */
10868       gcc_assert (*p == attributes);
10869     }
10870   else
10871     {
10872       p = &TYPE_ATTRIBUTES (*decl_p);
10873       /* TYPE_ATTRIBUTES was set up (with abi_tag and may_alias) in
10874 	 lookup_template_class_1, and should be preserved.  */
10875       gcc_assert (*p != attributes);
10876       while (*p)
10877 	p = &TREE_CHAIN (*p);
10878     }
10879 
10880   for (t = attributes; t; t = TREE_CHAIN (t))
10881     if (ATTR_IS_DEPENDENT (t))
10882       {
10883 	last_dep = t;
10884 	attributes = copy_list (attributes);
10885 	break;
10886       }
10887 
10888   *p = attributes;
10889   if (last_dep)
10890     {
10891       tree late_attrs = NULL_TREE;
10892       tree *q = &late_attrs;
10893 
10894       for (; *p; )
10895 	{
10896 	  t = *p;
10897 	  if (ATTR_IS_DEPENDENT (t))
10898 	    {
10899 	      *p = TREE_CHAIN (t);
10900 	      TREE_CHAIN (t) = NULL_TREE;
10901 	      *q = tsubst_attribute (t, decl_p, args, complain, in_decl);
10902 	      while (*q)
10903 		q = &TREE_CHAIN (*q);
10904 	    }
10905 	  else
10906 	    p = &TREE_CHAIN (t);
10907 	}
10908 
10909       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
10910     }
10911 }
10912 
10913 /* Perform (or defer) access check for typedefs that were referenced
10914    from within the template TMPL code.
10915    This is a subroutine of instantiate_decl and instantiate_class_template.
10916    TMPL is the template to consider and TARGS is the list of arguments of
10917    that template.  */
10918 
10919 static void
perform_typedefs_access_check(tree tmpl,tree targs)10920 perform_typedefs_access_check (tree tmpl, tree targs)
10921 {
10922   location_t saved_location;
10923   unsigned i;
10924   qualified_typedef_usage_t *iter;
10925 
10926   if (!tmpl
10927       || (!CLASS_TYPE_P (tmpl)
10928 	  && TREE_CODE (tmpl) != FUNCTION_DECL))
10929     return;
10930 
10931   saved_location = input_location;
10932   FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
10933     {
10934       tree type_decl = iter->typedef_decl;
10935       tree type_scope = iter->context;
10936 
10937       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
10938 	continue;
10939 
10940       if (uses_template_parms (type_decl))
10941 	type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
10942       if (uses_template_parms (type_scope))
10943 	type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
10944 
10945       /* Make access check error messages point to the location
10946          of the use of the typedef.  */
10947       input_location = iter->locus;
10948       perform_or_defer_access_check (TYPE_BINFO (type_scope),
10949 				     type_decl, type_decl,
10950 				     tf_warning_or_error);
10951     }
10952     input_location = saved_location;
10953 }
10954 
10955 static tree
instantiate_class_template_1(tree type)10956 instantiate_class_template_1 (tree type)
10957 {
10958   tree templ, args, pattern, t, member;
10959   tree typedecl;
10960   tree pbinfo;
10961   tree base_list;
10962   unsigned int saved_maximum_field_alignment;
10963   tree fn_context;
10964 
10965   if (type == error_mark_node)
10966     return error_mark_node;
10967 
10968   if (COMPLETE_OR_OPEN_TYPE_P (type)
10969       || uses_template_parms (type))
10970     return type;
10971 
10972   /* Figure out which template is being instantiated.  */
10973   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
10974   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
10975 
10976   /* Mark the type as in the process of being defined.  */
10977   TYPE_BEING_DEFINED (type) = 1;
10978 
10979   /* We may be in the middle of deferred access check.  Disable
10980      it now.  */
10981   deferring_access_check_sentinel acs (dk_no_deferred);
10982 
10983   /* Determine what specialization of the original template to
10984      instantiate.  */
10985   t = most_specialized_partial_spec (type, tf_warning_or_error);
10986   if (t == error_mark_node)
10987     return error_mark_node;
10988   else if (t)
10989     {
10990       /* This TYPE is actually an instantiation of a partial
10991 	 specialization.  We replace the innermost set of ARGS with
10992 	 the arguments appropriate for substitution.  For example,
10993 	 given:
10994 
10995 	   template <class T> struct S {};
10996 	   template <class T> struct S<T*> {};
10997 
10998 	 and supposing that we are instantiating S<int*>, ARGS will
10999 	 presently be {int*} -- but we need {int}.  */
11000       pattern = TREE_TYPE (t);
11001       args = TREE_PURPOSE (t);
11002     }
11003   else
11004     {
11005       pattern = TREE_TYPE (templ);
11006       args = CLASSTYPE_TI_ARGS (type);
11007     }
11008 
11009   /* If the template we're instantiating is incomplete, then clearly
11010      there's nothing we can do.  */
11011   if (!COMPLETE_TYPE_P (pattern))
11012     {
11013       /* We can try again later.  */
11014       TYPE_BEING_DEFINED (type) = 0;
11015       return type;
11016     }
11017 
11018   /* If we've recursively instantiated too many templates, stop.  */
11019   if (! push_tinst_level (type))
11020     return type;
11021 
11022   int saved_unevaluated_operand = cp_unevaluated_operand;
11023   int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
11024 
11025   fn_context = decl_function_context (TYPE_MAIN_DECL (type));
11026   /* Also avoid push_to_top_level for a lambda in an NSDMI.  */
11027   if (!fn_context && LAMBDA_TYPE_P (type) && TYPE_CLASS_SCOPE_P (type))
11028     fn_context = error_mark_node;
11029   if (!fn_context)
11030     push_to_top_level ();
11031   else
11032     {
11033       cp_unevaluated_operand = 0;
11034       c_inhibit_evaluation_warnings = 0;
11035     }
11036   /* Use #pragma pack from the template context.  */
11037   saved_maximum_field_alignment = maximum_field_alignment;
11038   maximum_field_alignment = TYPE_PRECISION (pattern);
11039 
11040   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
11041 
11042   /* Set the input location to the most specialized template definition.
11043      This is needed if tsubsting causes an error.  */
11044   typedecl = TYPE_MAIN_DECL (pattern);
11045   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
11046     DECL_SOURCE_LOCATION (typedecl);
11047 
11048   TYPE_PACKED (type) = TYPE_PACKED (pattern);
11049   SET_TYPE_ALIGN (type, TYPE_ALIGN (pattern));
11050   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
11051   CLASSTYPE_NON_AGGREGATE (type) = CLASSTYPE_NON_AGGREGATE (pattern);
11052   if (ANON_AGGR_TYPE_P (pattern))
11053     SET_ANON_AGGR_TYPE_P (type);
11054   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
11055     {
11056       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
11057       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
11058       /* Adjust visibility for template arguments.  */
11059       determine_visibility (TYPE_MAIN_DECL (type));
11060     }
11061   if (CLASS_TYPE_P (type))
11062     CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
11063 
11064   pbinfo = TYPE_BINFO (pattern);
11065 
11066   /* We should never instantiate a nested class before its enclosing
11067      class; we need to look up the nested class by name before we can
11068      instantiate it, and that lookup should instantiate the enclosing
11069      class.  */
11070   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
11071 	      || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
11072 
11073   base_list = NULL_TREE;
11074   if (BINFO_N_BASE_BINFOS (pbinfo))
11075     {
11076       tree pbase_binfo;
11077       tree pushed_scope;
11078       int i;
11079 
11080       /* We must enter the scope containing the type, as that is where
11081 	 the accessibility of types named in dependent bases are
11082 	 looked up from.  */
11083       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
11084 
11085       /* Substitute into each of the bases to determine the actual
11086 	 basetypes.  */
11087       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
11088 	{
11089 	  tree base;
11090 	  tree access = BINFO_BASE_ACCESS (pbinfo, i);
11091           tree expanded_bases = NULL_TREE;
11092           int idx, len = 1;
11093 
11094           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
11095             {
11096               expanded_bases =
11097 		tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
11098 				       args, tf_error, NULL_TREE);
11099               if (expanded_bases == error_mark_node)
11100                 continue;
11101 
11102               len = TREE_VEC_LENGTH (expanded_bases);
11103             }
11104 
11105           for (idx = 0; idx < len; idx++)
11106             {
11107               if (expanded_bases)
11108                 /* Extract the already-expanded base class.  */
11109                 base = TREE_VEC_ELT (expanded_bases, idx);
11110               else
11111                 /* Substitute to figure out the base class.  */
11112                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
11113                                NULL_TREE);
11114 
11115               if (base == error_mark_node)
11116                 continue;
11117 
11118               base_list = tree_cons (access, base, base_list);
11119               if (BINFO_VIRTUAL_P (pbase_binfo))
11120                 TREE_TYPE (base_list) = integer_type_node;
11121             }
11122 	}
11123 
11124       /* The list is now in reverse order; correct that.  */
11125       base_list = nreverse (base_list);
11126 
11127       if (pushed_scope)
11128 	pop_scope (pushed_scope);
11129     }
11130   /* Now call xref_basetypes to set up all the base-class
11131      information.  */
11132   xref_basetypes (type, base_list);
11133 
11134   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
11135 				  (int) ATTR_FLAG_TYPE_IN_PLACE,
11136 				  args, tf_error, NULL_TREE);
11137   fixup_attribute_variants (type);
11138 
11139   /* Now that our base classes are set up, enter the scope of the
11140      class, so that name lookups into base classes, etc. will work
11141      correctly.  This is precisely analogous to what we do in
11142      begin_class_definition when defining an ordinary non-template
11143      class, except we also need to push the enclosing classes.  */
11144   push_nested_class (type);
11145 
11146   /* Now members are processed in the order of declaration.  */
11147   for (member = CLASSTYPE_DECL_LIST (pattern);
11148        member; member = TREE_CHAIN (member))
11149     {
11150       tree t = TREE_VALUE (member);
11151 
11152       if (TREE_PURPOSE (member))
11153 	{
11154 	  if (TYPE_P (t))
11155 	    {
11156 	      if (LAMBDA_TYPE_P (t))
11157 		/* A closure type for a lambda in an NSDMI or default argument.
11158 		   Ignore it; it will be regenerated when needed.  */
11159 		continue;
11160 
11161 	      /* Build new CLASSTYPE_NESTED_UTDS.  */
11162 
11163 	      tree newtag;
11164 	      bool class_template_p;
11165 
11166 	      class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
11167 				  && TYPE_LANG_SPECIFIC (t)
11168 				  && CLASSTYPE_IS_TEMPLATE (t));
11169 	      /* If the member is a class template, then -- even after
11170 		 substitution -- there may be dependent types in the
11171 		 template argument list for the class.  We increment
11172 		 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
11173 		 that function will assume that no types are dependent
11174 		 when outside of a template.  */
11175 	      if (class_template_p)
11176 		++processing_template_decl;
11177 	      newtag = tsubst (t, args, tf_error, NULL_TREE);
11178 	      if (class_template_p)
11179 		--processing_template_decl;
11180 	      if (newtag == error_mark_node)
11181 		continue;
11182 
11183 	      if (TREE_CODE (newtag) != ENUMERAL_TYPE)
11184 		{
11185 		  tree name = TYPE_IDENTIFIER (t);
11186 
11187 		  if (class_template_p)
11188 		    /* Unfortunately, lookup_template_class sets
11189 		       CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
11190 		       instantiation (i.e., for the type of a member
11191 		       template class nested within a template class.)
11192 		       This behavior is required for
11193 		       maybe_process_partial_specialization to work
11194 		       correctly, but is not accurate in this case;
11195 		       the TAG is not an instantiation of anything.
11196 		       (The corresponding TEMPLATE_DECL is an
11197 		       instantiation, but the TYPE is not.) */
11198 		    CLASSTYPE_USE_TEMPLATE (newtag) = 0;
11199 
11200 		  /* Now, we call pushtag to put this NEWTAG into the scope of
11201 		     TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
11202 		     pushtag calling push_template_decl.  We don't have to do
11203 		     this for enums because it will already have been done in
11204 		     tsubst_enum.  */
11205 		  if (name)
11206 		    SET_IDENTIFIER_TYPE_VALUE (name, newtag);
11207 		  pushtag (name, newtag, /*tag_scope=*/ts_current);
11208 		}
11209 	    }
11210 	  else if (DECL_DECLARES_FUNCTION_P (t))
11211 	    {
11212 	      tree r;
11213 
11214 	      if (TREE_CODE (t) == TEMPLATE_DECL)
11215 		++processing_template_decl;
11216 	      r = tsubst (t, args, tf_error, NULL_TREE);
11217 	      if (TREE_CODE (t) == TEMPLATE_DECL)
11218 		--processing_template_decl;
11219 	      set_current_access_from_decl (r);
11220 	      finish_member_declaration (r);
11221 	      /* Instantiate members marked with attribute used.  */
11222 	      if (r != error_mark_node && DECL_PRESERVE_P (r))
11223 		mark_used (r);
11224 	      if (TREE_CODE (r) == FUNCTION_DECL
11225 		  && DECL_OMP_DECLARE_REDUCTION_P (r))
11226 		cp_check_omp_declare_reduction (r);
11227 	    }
11228 	  else if ((DECL_CLASS_TEMPLATE_P (t) || DECL_IMPLICIT_TYPEDEF_P (t))
11229 		   && LAMBDA_TYPE_P (TREE_TYPE (t)))
11230 	    /* A closure type for a lambda in an NSDMI or default argument.
11231 	       Ignore it; it will be regenerated when needed.  */;
11232 	  else
11233 	    {
11234 	      /* Build new TYPE_FIELDS.  */
11235               if (TREE_CODE (t) == STATIC_ASSERT)
11236                 {
11237                   tree condition;
11238 
11239 		  ++c_inhibit_evaluation_warnings;
11240 		  condition =
11241 		    tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
11242 				 tf_warning_or_error, NULL_TREE,
11243 				 /*integral_constant_expression_p=*/true);
11244 		  --c_inhibit_evaluation_warnings;
11245 
11246                   finish_static_assert (condition,
11247                                         STATIC_ASSERT_MESSAGE (t),
11248                                         STATIC_ASSERT_SOURCE_LOCATION (t),
11249                                         /*member_p=*/true);
11250                 }
11251 	      else if (TREE_CODE (t) != CONST_DECL)
11252 		{
11253 		  tree r;
11254 		  tree vec = NULL_TREE;
11255 		  int len = 1;
11256 
11257 		  /* The file and line for this declaration, to
11258 		     assist in error message reporting.  Since we
11259 		     called push_tinst_level above, we don't need to
11260 		     restore these.  */
11261 		  input_location = DECL_SOURCE_LOCATION (t);
11262 
11263 		  if (TREE_CODE (t) == TEMPLATE_DECL)
11264 		    ++processing_template_decl;
11265 		  r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
11266 		  if (TREE_CODE (t) == TEMPLATE_DECL)
11267 		    --processing_template_decl;
11268 
11269 		  if (TREE_CODE (r) == TREE_VEC)
11270 		    {
11271 		      /* A capture pack became multiple fields.  */
11272 		      vec = r;
11273 		      len = TREE_VEC_LENGTH (vec);
11274 		    }
11275 
11276 		  for (int i = 0; i < len; ++i)
11277 		    {
11278 		      if (vec)
11279 			r = TREE_VEC_ELT (vec, i);
11280 		      if (VAR_P (r))
11281 			{
11282 			  /* In [temp.inst]:
11283 
11284 			     [t]he initialization (and any associated
11285 			     side-effects) of a static data member does
11286 			     not occur unless the static data member is
11287 			     itself used in a way that requires the
11288 			     definition of the static data member to
11289 			     exist.
11290 
11291 			     Therefore, we do not substitute into the
11292 			     initialized for the static data member here.  */
11293 			  finish_static_data_member_decl
11294 			    (r,
11295 			     /*init=*/NULL_TREE,
11296 			     /*init_const_expr_p=*/false,
11297 			     /*asmspec_tree=*/NULL_TREE,
11298 			     /*flags=*/0);
11299 			  /* Instantiate members marked with attribute used. */
11300 			  if (r != error_mark_node && DECL_PRESERVE_P (r))
11301 			    mark_used (r);
11302 			}
11303 		      else if (TREE_CODE (r) == FIELD_DECL)
11304 			{
11305 			  /* Determine whether R has a valid type and can be
11306 			     completed later.  If R is invalid, then its type
11307 			     is replaced by error_mark_node.  */
11308 			  tree rtype = TREE_TYPE (r);
11309 			  if (can_complete_type_without_circularity (rtype))
11310 			    complete_type (rtype);
11311 
11312 			  if (!complete_or_array_type_p (rtype))
11313 			    {
11314 			      /* If R's type couldn't be completed and
11315 				 it isn't a flexible array member (whose
11316 				 type is incomplete by definition) give
11317 				 an error.  */
11318 			      cxx_incomplete_type_error (r, rtype);
11319 			      TREE_TYPE (r) = error_mark_node;
11320 			    }
11321 			  else if (TREE_CODE (rtype) == ARRAY_TYPE
11322 				   && TYPE_DOMAIN (rtype) == NULL_TREE
11323 				   && (TREE_CODE (type) == UNION_TYPE
11324 				       || TREE_CODE (type) == QUAL_UNION_TYPE))
11325 			    {
11326 			      error ("flexible array member %qD in union", r);
11327 			      TREE_TYPE (r) = error_mark_node;
11328 			    }
11329 			}
11330 
11331 		      /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
11332 			 such a thing will already have been added to the field
11333 			 list by tsubst_enum in finish_member_declaration in the
11334 			 CLASSTYPE_NESTED_UTDS case above.  */
11335 		      if (!(TREE_CODE (r) == TYPE_DECL
11336 			    && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
11337 			    && DECL_ARTIFICIAL (r)))
11338 			{
11339 			  set_current_access_from_decl (r);
11340 			  finish_member_declaration (r);
11341 			}
11342 		    }
11343 		}
11344 	    }
11345 	}
11346       else
11347 	{
11348 	  if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
11349 	      || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11350 	    {
11351 	      /* Build new CLASSTYPE_FRIEND_CLASSES.  */
11352 
11353 	      tree friend_type = t;
11354 	      bool adjust_processing_template_decl = false;
11355 
11356 	      if (TREE_CODE (friend_type) == TEMPLATE_DECL)
11357 		{
11358 		  /* template <class T> friend class C;  */
11359 		  friend_type = tsubst_friend_class (friend_type, args);
11360 		  adjust_processing_template_decl = true;
11361 		}
11362 	      else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
11363 		{
11364 		  /* template <class T> friend class C::D;  */
11365 		  friend_type = tsubst (friend_type, args,
11366 					tf_warning_or_error, NULL_TREE);
11367 		  if (TREE_CODE (friend_type) == TEMPLATE_DECL)
11368 		    friend_type = TREE_TYPE (friend_type);
11369 		  adjust_processing_template_decl = true;
11370 		}
11371 	      else if (TREE_CODE (friend_type) == TYPENAME_TYPE
11372 		       || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
11373 		{
11374 		  /* This could be either
11375 
11376 		       friend class T::C;
11377 
11378 		     when dependent_type_p is false or
11379 
11380 		       template <class U> friend class T::C;
11381 
11382 		     otherwise.  */
11383 		  /* Bump processing_template_decl in case this is something like
11384 		     template <class T> friend struct A<T>::B.  */
11385 		  ++processing_template_decl;
11386 		  friend_type = tsubst (friend_type, args,
11387 					tf_warning_or_error, NULL_TREE);
11388 		  if (dependent_type_p (friend_type))
11389 		    adjust_processing_template_decl = true;
11390 		  --processing_template_decl;
11391 		}
11392 	      else if (TREE_CODE (friend_type) != BOUND_TEMPLATE_TEMPLATE_PARM
11393 		       && !CLASSTYPE_USE_TEMPLATE (friend_type)
11394 		       && TYPE_HIDDEN_P (friend_type))
11395 		{
11396 		  /* friend class C;
11397 
11398 		     where C hasn't been declared yet.  Let's lookup name
11399 		     from namespace scope directly, bypassing any name that
11400 		     come from dependent base class.  */
11401 		  tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
11402 
11403 		  /* The call to xref_tag_from_type does injection for friend
11404 		     classes.  */
11405 		  push_nested_namespace (ns);
11406 		  friend_type =
11407 		    xref_tag_from_type (friend_type, NULL_TREE,
11408 					/*tag_scope=*/ts_current);
11409 		  pop_nested_namespace (ns);
11410 		}
11411 	      else if (uses_template_parms (friend_type))
11412 		/* friend class C<T>;  */
11413 		friend_type = tsubst (friend_type, args,
11414 				      tf_warning_or_error, NULL_TREE);
11415 	      /* Otherwise it's
11416 
11417 		   friend class C;
11418 
11419 		 where C is already declared or
11420 
11421 		   friend class C<int>;
11422 
11423 		 We don't have to do anything in these cases.  */
11424 
11425 	      if (adjust_processing_template_decl)
11426 		/* Trick make_friend_class into realizing that the friend
11427 		   we're adding is a template, not an ordinary class.  It's
11428 		   important that we use make_friend_class since it will
11429 		   perform some error-checking and output cross-reference
11430 		   information.  */
11431 		++processing_template_decl;
11432 
11433 	      if (friend_type != error_mark_node)
11434 		make_friend_class (type, friend_type, /*complain=*/false);
11435 
11436 	      if (adjust_processing_template_decl)
11437 		--processing_template_decl;
11438 	    }
11439 	  else
11440 	    {
11441 	      /* Build new DECL_FRIENDLIST.  */
11442 	      tree r;
11443 
11444 	      /* The file and line for this declaration, to
11445 		 assist in error message reporting.  Since we
11446 		 called push_tinst_level above, we don't need to
11447 		 restore these.  */
11448 	      input_location = DECL_SOURCE_LOCATION (t);
11449 
11450 	      if (TREE_CODE (t) == TEMPLATE_DECL)
11451 		{
11452 		  ++processing_template_decl;
11453 		  push_deferring_access_checks (dk_no_check);
11454 		}
11455 
11456 	      r = tsubst_friend_function (t, args);
11457 	      add_friend (type, r, /*complain=*/false);
11458 	      if (TREE_CODE (t) == TEMPLATE_DECL)
11459 		{
11460 		  pop_deferring_access_checks ();
11461 		  --processing_template_decl;
11462 		}
11463 	    }
11464 	}
11465     }
11466 
11467   if (fn_context)
11468     {
11469       /* Restore these before substituting into the lambda capture
11470 	 initializers.  */
11471       cp_unevaluated_operand = saved_unevaluated_operand;
11472       c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
11473     }
11474 
11475   /* Set the file and line number information to whatever is given for
11476      the class itself.  This puts error messages involving generated
11477      implicit functions at a predictable point, and the same point
11478      that would be used for non-template classes.  */
11479   input_location = DECL_SOURCE_LOCATION (typedecl);
11480 
11481   unreverse_member_declarations (type);
11482   finish_struct_1 (type);
11483   TYPE_BEING_DEFINED (type) = 0;
11484 
11485   /* We don't instantiate default arguments for member functions.  14.7.1:
11486 
11487      The implicit instantiation of a class template specialization causes
11488      the implicit instantiation of the declarations, but not of the
11489      definitions or default arguments, of the class member functions,
11490      member classes, static data members and member templates....  */
11491 
11492   /* Some typedefs referenced from within the template code need to be access
11493      checked at template instantiation time, i.e now. These types were
11494      added to the template at parsing time. Let's get those and perform
11495      the access checks then.  */
11496   perform_typedefs_access_check (pattern, args);
11497   perform_deferred_access_checks (tf_warning_or_error);
11498   pop_nested_class ();
11499   maximum_field_alignment = saved_maximum_field_alignment;
11500   if (!fn_context)
11501     pop_from_top_level ();
11502   pop_tinst_level ();
11503 
11504   /* The vtable for a template class can be emitted in any translation
11505      unit in which the class is instantiated.  When there is no key
11506      method, however, finish_struct_1 will already have added TYPE to
11507      the keyed_classes.  */
11508   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
11509     vec_safe_push (keyed_classes, type);
11510 
11511   return type;
11512 }
11513 
11514 /* Wrapper for instantiate_class_template_1.  */
11515 
11516 tree
instantiate_class_template(tree type)11517 instantiate_class_template (tree type)
11518 {
11519   tree ret;
11520   timevar_push (TV_TEMPLATE_INST);
11521   ret = instantiate_class_template_1 (type);
11522   timevar_pop (TV_TEMPLATE_INST);
11523   return ret;
11524 }
11525 
11526 static tree
tsubst_template_arg(tree t,tree args,tsubst_flags_t complain,tree in_decl)11527 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11528 {
11529   tree r;
11530 
11531   if (!t)
11532     r = t;
11533   else if (TYPE_P (t))
11534     r = tsubst (t, args, complain, in_decl);
11535   else
11536     {
11537       if (!(complain & tf_warning))
11538 	++c_inhibit_evaluation_warnings;
11539       r = tsubst_expr (t, args, complain, in_decl,
11540 		       /*integral_constant_expression_p=*/true);
11541       if (!(complain & tf_warning))
11542 	--c_inhibit_evaluation_warnings;
11543     }
11544   return r;
11545 }
11546 
11547 /* Given a function parameter pack TMPL_PARM and some function parameters
11548    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
11549    and set *SPEC_P to point at the next point in the list.  */
11550 
11551 tree
extract_fnparm_pack(tree tmpl_parm,tree * spec_p)11552 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
11553 {
11554   /* Collect all of the extra "packed" parameters into an
11555      argument pack.  */
11556   tree parmvec;
11557   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
11558   tree spec_parm = *spec_p;
11559   int i, len;
11560 
11561   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
11562     if (tmpl_parm
11563 	&& !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
11564       break;
11565 
11566   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
11567   parmvec = make_tree_vec (len);
11568   spec_parm = *spec_p;
11569   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
11570     {
11571       tree elt = spec_parm;
11572       if (DECL_PACK_P (elt))
11573 	elt = make_pack_expansion (elt);
11574       TREE_VEC_ELT (parmvec, i) = elt;
11575     }
11576 
11577   /* Build the argument packs.  */
11578   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
11579   *spec_p = spec_parm;
11580 
11581   return argpack;
11582 }
11583 
11584 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
11585    NONTYPE_ARGUMENT_PACK.  */
11586 
11587 static tree
make_fnparm_pack(tree spec_parm)11588 make_fnparm_pack (tree spec_parm)
11589 {
11590   return extract_fnparm_pack (NULL_TREE, &spec_parm);
11591 }
11592 
11593 /* Return 1 if the Ith element of the argument pack ARG_PACK is a
11594    pack expansion with no extra args, 2 if it has extra args, or 0
11595    if it is not a pack expansion.  */
11596 
11597 static int
argument_pack_element_is_expansion_p(tree arg_pack,int i)11598 argument_pack_element_is_expansion_p (tree arg_pack, int i)
11599 {
11600   if (TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
11601     /* We're being called before this happens in tsubst_pack_expansion.  */
11602     arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
11603   tree vec = ARGUMENT_PACK_ARGS (arg_pack);
11604   if (i >= TREE_VEC_LENGTH (vec))
11605     return 0;
11606   tree elt = TREE_VEC_ELT (vec, i);
11607   if (DECL_P (elt))
11608     /* A decl pack is itself an expansion.  */
11609     elt = TREE_TYPE (elt);
11610   if (!PACK_EXPANSION_P (elt))
11611     return 0;
11612   if (PACK_EXPANSION_EXTRA_ARGS (elt))
11613     return 2;
11614   return 1;
11615 }
11616 
11617 
11618 /* Creates and return an ARGUMENT_PACK_SELECT tree node.  */
11619 
11620 static tree
make_argument_pack_select(tree arg_pack,unsigned index)11621 make_argument_pack_select (tree arg_pack, unsigned index)
11622 {
11623   tree aps = make_node (ARGUMENT_PACK_SELECT);
11624 
11625   ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
11626   ARGUMENT_PACK_SELECT_INDEX (aps) = index;
11627 
11628   return aps;
11629 }
11630 
11631 /*  This is a subroutine of tsubst_pack_expansion.
11632 
11633     It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
11634     mechanism to store the (non complete list of) arguments of the
11635     substitution and return a non substituted pack expansion, in order
11636     to wait for when we have enough arguments to really perform the
11637     substitution.  */
11638 
11639 static bool
use_pack_expansion_extra_args_p(tree parm_packs,int arg_pack_len,bool has_empty_arg)11640 use_pack_expansion_extra_args_p (tree parm_packs,
11641 				 int arg_pack_len,
11642 				 bool has_empty_arg)
11643 {
11644   /* If one pack has an expansion and another pack has a normal
11645      argument or if one pack has an empty argument and an another
11646      one hasn't then tsubst_pack_expansion cannot perform the
11647      substitution and need to fall back on the
11648      PACK_EXPANSION_EXTRA mechanism.  */
11649   if (parm_packs == NULL_TREE)
11650     return false;
11651   else if (has_empty_arg)
11652     return true;
11653 
11654   bool has_expansion_arg = false;
11655   for (int i = 0 ; i < arg_pack_len; ++i)
11656     {
11657       bool has_non_expansion_arg = false;
11658       for (tree parm_pack = parm_packs;
11659 	   parm_pack;
11660 	   parm_pack = TREE_CHAIN (parm_pack))
11661 	{
11662 	  tree arg = TREE_VALUE (parm_pack);
11663 
11664 	  int exp = argument_pack_element_is_expansion_p (arg, i);
11665 	  if (exp == 2)
11666 	    /* We can't substitute a pack expansion with extra args into
11667 	       our pattern.  */
11668 	    return true;
11669 	  else if (exp)
11670 	    has_expansion_arg = true;
11671 	  else
11672 	    has_non_expansion_arg = true;
11673 	}
11674 
11675       if (has_expansion_arg && has_non_expansion_arg)
11676 	return true;
11677     }
11678   return false;
11679 }
11680 
11681 /* [temp.variadic]/6 says that:
11682 
11683        The instantiation of a pack expansion [...]
11684        produces a list E1,E2, ..., En, where N is the number of elements
11685        in the pack expansion parameters.
11686 
11687    This subroutine of tsubst_pack_expansion produces one of these Ei.
11688 
11689    PATTERN is the pattern of the pack expansion.  PARM_PACKS is a
11690    TREE_LIST in which each TREE_PURPOSE is a parameter pack of
11691    PATTERN, and each TREE_VALUE is its corresponding argument pack.
11692    INDEX is the index 'i' of the element Ei to produce.  ARGS,
11693    COMPLAIN, and IN_DECL are the same parameters as for the
11694    tsubst_pack_expansion function.
11695 
11696    The function returns the resulting Ei upon successful completion,
11697    or error_mark_node.
11698 
11699    Note that this function possibly modifies the ARGS parameter, so
11700    it's the responsibility of the caller to restore it.  */
11701 
11702 static tree
gen_elem_of_pack_expansion_instantiation(tree pattern,tree parm_packs,unsigned index,tree args,tsubst_flags_t complain,tree in_decl)11703 gen_elem_of_pack_expansion_instantiation (tree pattern,
11704 					  tree parm_packs,
11705 					  unsigned index,
11706 					  tree args /* This parm gets
11707 						       modified.  */,
11708 					  tsubst_flags_t complain,
11709 					  tree in_decl)
11710 {
11711   tree t;
11712   bool ith_elem_is_expansion = false;
11713 
11714   /* For each parameter pack, change the substitution of the parameter
11715      pack to the ith argument in its argument pack, then expand the
11716      pattern.  */
11717   for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
11718     {
11719       tree parm = TREE_PURPOSE (pack);
11720       tree arg_pack = TREE_VALUE (pack);
11721       tree aps;			/* instance of ARGUMENT_PACK_SELECT.  */
11722 
11723       ith_elem_is_expansion |=
11724 	argument_pack_element_is_expansion_p (arg_pack, index);
11725 
11726       /* Select the Ith argument from the pack.  */
11727       if (TREE_CODE (parm) == PARM_DECL
11728 	  || VAR_P (parm)
11729 	  || TREE_CODE (parm) == FIELD_DECL)
11730 	{
11731 	  if (index == 0)
11732 	    {
11733 	      aps = make_argument_pack_select (arg_pack, index);
11734 	      if (!mark_used (parm, complain) && !(complain & tf_error))
11735 		return error_mark_node;
11736 	      register_local_specialization (aps, parm);
11737 	    }
11738 	  else
11739 	    aps = retrieve_local_specialization (parm);
11740 	}
11741       else
11742 	{
11743 	  int idx, level;
11744 	  template_parm_level_and_index (parm, &level, &idx);
11745 
11746 	  if (index == 0)
11747 	    {
11748 	      aps = make_argument_pack_select (arg_pack, index);
11749 	      /* Update the corresponding argument.  */
11750 	      TMPL_ARG (args, level, idx) = aps;
11751 	    }
11752 	  else
11753 	    /* Re-use the ARGUMENT_PACK_SELECT.  */
11754 	    aps = TMPL_ARG (args, level, idx);
11755 	}
11756       ARGUMENT_PACK_SELECT_INDEX (aps) = index;
11757     }
11758 
11759   // Any local specialization bindings arising from this substitution
11760   // cannot be reused for a different INDEX.
11761   local_specialization_stack lss (lss_copy);
11762 
11763   /* Substitute into the PATTERN with the (possibly altered)
11764      arguments.  */
11765   if (pattern == in_decl)
11766     /* Expanding a fixed parameter pack from
11767        coerce_template_parameter_pack.  */
11768     t = tsubst_decl (pattern, args, complain);
11769   else if (pattern == error_mark_node)
11770     t = error_mark_node;
11771   else if (constraint_p (pattern))
11772     {
11773       if (processing_template_decl)
11774 	t = tsubst_constraint (pattern, args, complain, in_decl);
11775       else
11776 	t = (constraints_satisfied_p (pattern, args)
11777 	     ? boolean_true_node : boolean_false_node);
11778     }
11779   else if (!TYPE_P (pattern))
11780     t = tsubst_expr (pattern, args, complain, in_decl,
11781 		     /*integral_constant_expression_p=*/false);
11782   else
11783     t = tsubst (pattern, args, complain, in_decl);
11784 
11785   /*  If the Ith argument pack element is a pack expansion, then
11786       the Ith element resulting from the substituting is going to
11787       be a pack expansion as well.  */
11788   if (ith_elem_is_expansion)
11789     t = make_pack_expansion (t, complain);
11790 
11791   return t;
11792 }
11793 
11794 /* When the unexpanded parameter pack in a fold expression expands to an empty
11795    sequence, the value of the expression is as follows; the program is
11796    ill-formed if the operator is not listed in this table.
11797 
11798    &&	true
11799    ||	false
11800    ,	void()  */
11801 
11802 tree
expand_empty_fold(tree t,tsubst_flags_t complain)11803 expand_empty_fold (tree t, tsubst_flags_t complain)
11804 {
11805   tree_code code = (tree_code)TREE_INT_CST_LOW (TREE_OPERAND (t, 0));
11806   if (!FOLD_EXPR_MODIFY_P (t))
11807     switch (code)
11808       {
11809       case TRUTH_ANDIF_EXPR:
11810 	return boolean_true_node;
11811       case TRUTH_ORIF_EXPR:
11812 	return boolean_false_node;
11813       case COMPOUND_EXPR:
11814 	return void_node;
11815       default:
11816 	break;
11817       }
11818 
11819   if (complain & tf_error)
11820     error_at (location_of (t),
11821 	      "fold of empty expansion over %O", code);
11822   return error_mark_node;
11823 }
11824 
11825 /* Given a fold-expression T and a current LEFT and RIGHT operand,
11826    form an expression that combines the two terms using the
11827    operator of T. */
11828 
11829 static tree
fold_expression(tree t,tree left,tree right,tsubst_flags_t complain)11830 fold_expression (tree t, tree left, tree right, tsubst_flags_t complain)
11831 {
11832   tree op = FOLD_EXPR_OP (t);
11833   tree_code code = (tree_code)TREE_INT_CST_LOW (op);
11834 
11835   // Handle compound assignment operators.
11836   if (FOLD_EXPR_MODIFY_P (t))
11837     return build_x_modify_expr (input_location, left, code, right, complain);
11838 
11839   switch (code)
11840     {
11841     case COMPOUND_EXPR:
11842       return build_x_compound_expr (input_location, left, right, complain);
11843     default:
11844       return build_x_binary_op (input_location, code,
11845                                 left, TREE_CODE (left),
11846                                 right, TREE_CODE (right),
11847                                 /*overload=*/NULL,
11848                                 complain);
11849     }
11850 }
11851 
11852 /* Substitute ARGS into the pack of a fold expression T. */
11853 
11854 static inline tree
tsubst_fold_expr_pack(tree t,tree args,tsubst_flags_t complain,tree in_decl)11855 tsubst_fold_expr_pack (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11856 {
11857   return tsubst_pack_expansion (FOLD_EXPR_PACK (t), args, complain, in_decl);
11858 }
11859 
11860 /* Substitute ARGS into the pack of a fold expression T. */
11861 
11862 static inline tree
tsubst_fold_expr_init(tree t,tree args,tsubst_flags_t complain,tree in_decl)11863 tsubst_fold_expr_init (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11864 {
11865   return tsubst_expr (FOLD_EXPR_INIT (t), args, complain, in_decl, false);
11866 }
11867 
11868 /* Expand a PACK of arguments into a grouped as left fold.
11869    Given a pack containing elements A0, A1, ..., An and an
11870    operator @, this builds the expression:
11871 
11872       ((A0 @ A1) @ A2) ... @ An
11873 
11874    Note that PACK must not be empty.
11875 
11876    The operator is defined by the original fold expression T. */
11877 
11878 static tree
expand_left_fold(tree t,tree pack,tsubst_flags_t complain)11879 expand_left_fold (tree t, tree pack, tsubst_flags_t complain)
11880 {
11881   tree left = TREE_VEC_ELT (pack, 0);
11882   for (int i = 1; i < TREE_VEC_LENGTH (pack); ++i)
11883     {
11884       tree right = TREE_VEC_ELT (pack, i);
11885       left = fold_expression (t, left, right, complain);
11886     }
11887   return left;
11888 }
11889 
11890 /* Substitute into a unary left fold expression. */
11891 
11892 static tree
tsubst_unary_left_fold(tree t,tree args,tsubst_flags_t complain,tree in_decl)11893 tsubst_unary_left_fold (tree t, tree args, tsubst_flags_t complain,
11894                         tree in_decl)
11895 {
11896   tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11897   if (pack == error_mark_node)
11898     return error_mark_node;
11899   if (PACK_EXPANSION_P (pack))
11900     {
11901       tree r = copy_node (t);
11902       FOLD_EXPR_PACK (r) = pack;
11903       return r;
11904     }
11905   if (TREE_VEC_LENGTH (pack) == 0)
11906     return expand_empty_fold (t, complain);
11907   else
11908     return expand_left_fold (t, pack, complain);
11909 }
11910 
11911 /* Substitute into a binary left fold expression.
11912 
11913    Do ths by building a single (non-empty) vector of argumnts and
11914    building the expression from those elements. */
11915 
11916 static tree
tsubst_binary_left_fold(tree t,tree args,tsubst_flags_t complain,tree in_decl)11917 tsubst_binary_left_fold (tree t, tree args, tsubst_flags_t complain,
11918                          tree in_decl)
11919 {
11920   tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11921   if (pack == error_mark_node)
11922     return error_mark_node;
11923   tree init = tsubst_fold_expr_init (t, args, complain, in_decl);
11924   if (init == error_mark_node)
11925     return error_mark_node;
11926 
11927   if (PACK_EXPANSION_P (pack))
11928     {
11929       tree r = copy_node (t);
11930       FOLD_EXPR_PACK (r) = pack;
11931       FOLD_EXPR_INIT (r) = init;
11932       return r;
11933     }
11934 
11935   tree vec = make_tree_vec (TREE_VEC_LENGTH (pack) + 1);
11936   TREE_VEC_ELT (vec, 0) = init;
11937   for (int i = 0; i < TREE_VEC_LENGTH (pack); ++i)
11938     TREE_VEC_ELT (vec, i + 1) = TREE_VEC_ELT (pack, i);
11939 
11940   return expand_left_fold (t, vec, complain);
11941 }
11942 
11943 /* Expand a PACK of arguments into a grouped as right fold.
11944    Given a pack containing elementns A0, A1, ..., and an
11945    operator @, this builds the expression:
11946 
11947       A0@ ... (An-2 @ (An-1 @ An))
11948 
11949    Note that PACK must not be empty.
11950 
11951    The operator is defined by the original fold expression T. */
11952 
11953 tree
expand_right_fold(tree t,tree pack,tsubst_flags_t complain)11954 expand_right_fold (tree t, tree pack, tsubst_flags_t complain)
11955 {
11956   // Build the expression.
11957   int n = TREE_VEC_LENGTH (pack);
11958   tree right = TREE_VEC_ELT (pack, n - 1);
11959   for (--n; n != 0; --n)
11960     {
11961       tree left = TREE_VEC_ELT (pack, n - 1);
11962       right = fold_expression (t, left, right, complain);
11963     }
11964   return right;
11965 }
11966 
11967 /* Substitute into a unary right fold expression. */
11968 
11969 static tree
tsubst_unary_right_fold(tree t,tree args,tsubst_flags_t complain,tree in_decl)11970 tsubst_unary_right_fold (tree t, tree args, tsubst_flags_t complain,
11971                          tree in_decl)
11972 {
11973   tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11974   if (pack == error_mark_node)
11975     return error_mark_node;
11976   if (PACK_EXPANSION_P (pack))
11977     {
11978       tree r = copy_node (t);
11979       FOLD_EXPR_PACK (r) = pack;
11980       return r;
11981     }
11982   if (TREE_VEC_LENGTH (pack) == 0)
11983     return expand_empty_fold (t, complain);
11984   else
11985     return expand_right_fold (t, pack, complain);
11986 }
11987 
11988 /* Substitute into a binary right fold expression.
11989 
11990    Do ths by building a single (non-empty) vector of arguments and
11991    building the expression from those elements. */
11992 
11993 static tree
tsubst_binary_right_fold(tree t,tree args,tsubst_flags_t complain,tree in_decl)11994 tsubst_binary_right_fold (tree t, tree args, tsubst_flags_t complain,
11995                          tree in_decl)
11996 {
11997   tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
11998   if (pack == error_mark_node)
11999     return error_mark_node;
12000   tree init = tsubst_fold_expr_init (t, args, complain, in_decl);
12001   if (init == error_mark_node)
12002     return error_mark_node;
12003 
12004   if (PACK_EXPANSION_P (pack))
12005     {
12006       tree r = copy_node (t);
12007       FOLD_EXPR_PACK (r) = pack;
12008       FOLD_EXPR_INIT (r) = init;
12009       return r;
12010     }
12011 
12012   int n = TREE_VEC_LENGTH (pack);
12013   tree vec = make_tree_vec (n + 1);
12014   for (int i = 0; i < n; ++i)
12015     TREE_VEC_ELT (vec, i) = TREE_VEC_ELT (pack, i);
12016   TREE_VEC_ELT (vec, n) = init;
12017 
12018   return expand_right_fold (t, vec, complain);
12019 }
12020 
12021 /* Walk through the pattern of a pack expansion, adding everything in
12022    local_specializations to a list.  */
12023 
12024 struct el_data
12025 {
12026   hash_set<tree> internal;
12027   tree extra;
12028   tsubst_flags_t complain;
12029 
el_datael_data12030   el_data (tsubst_flags_t c)
12031     : extra (NULL_TREE), complain (c) {}
12032 };
12033 static tree
extract_locals_r(tree * tp,int *,void * data_)12034 extract_locals_r (tree *tp, int */*walk_subtrees*/, void *data_)
12035 {
12036   el_data &data = *reinterpret_cast<el_data*>(data_);
12037   tree *extra = &data.extra;
12038   tsubst_flags_t complain = data.complain;
12039 
12040   if (TYPE_P (*tp) && typedef_variant_p (*tp))
12041     /* Remember local typedefs (85214).  */
12042     tp = &TYPE_NAME (*tp);
12043 
12044   if (TREE_CODE (*tp) == DECL_EXPR)
12045     data.internal.add (DECL_EXPR_DECL (*tp));
12046   else if (tree spec = retrieve_local_specialization (*tp))
12047     {
12048       if (data.internal.contains (*tp))
12049 	/* Don't mess with variables declared within the pattern.  */
12050 	return NULL_TREE;
12051       if (TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK)
12052 	{
12053 	  /* Maybe pull out the PARM_DECL for a partial instantiation.  */
12054 	  tree args = ARGUMENT_PACK_ARGS (spec);
12055 	  if (TREE_VEC_LENGTH (args) == 1)
12056 	    {
12057 	      tree elt = TREE_VEC_ELT (args, 0);
12058 	      if (PACK_EXPANSION_P (elt))
12059 		elt = PACK_EXPANSION_PATTERN (elt);
12060 	      if (DECL_PACK_P (elt))
12061 		spec = elt;
12062 	    }
12063 	  if (TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK)
12064 	    {
12065 	      /* Handle lambda capture here, since we aren't doing any
12066 		 substitution now, and so tsubst_copy won't call
12067 		 process_outer_var_ref.  */
12068 	      tree args = ARGUMENT_PACK_ARGS (spec);
12069 	      int len = TREE_VEC_LENGTH (args);
12070 	      for (int i = 0; i < len; ++i)
12071 		{
12072 		  tree arg = TREE_VEC_ELT (args, i);
12073 		  tree carg = arg;
12074 		  if (outer_automatic_var_p (arg))
12075 		    carg = process_outer_var_ref (arg, complain);
12076 		  if (carg != arg)
12077 		    {
12078 		      /* Make a new NONTYPE_ARGUMENT_PACK of the capture
12079 			 proxies.  */
12080 		      if (i == 0)
12081 			{
12082 			  spec = copy_node (spec);
12083 			  args = copy_node (args);
12084 			  SET_ARGUMENT_PACK_ARGS (spec, args);
12085 			  register_local_specialization (spec, *tp);
12086 			}
12087 		      TREE_VEC_ELT (args, i) = carg;
12088 		    }
12089 		}
12090 	    }
12091 	}
12092       if (outer_automatic_var_p (spec))
12093 	spec = process_outer_var_ref (spec, complain);
12094       *extra = tree_cons (*tp, spec, *extra);
12095     }
12096   return NULL_TREE;
12097 }
12098 static tree
extract_local_specs(tree pattern,tsubst_flags_t complain)12099 extract_local_specs (tree pattern, tsubst_flags_t complain)
12100 {
12101   el_data data (complain);
12102   cp_walk_tree_without_duplicates (&pattern, extract_locals_r, &data);
12103   return data.extra;
12104 }
12105 
12106 /* Extract any uses of local_specializations from PATTERN and add them to ARGS
12107    for use in PACK_EXPANSION_EXTRA_ARGS.  */
12108 
12109 tree
build_extra_args(tree pattern,tree args,tsubst_flags_t complain)12110 build_extra_args (tree pattern, tree args, tsubst_flags_t complain)
12111 {
12112   tree extra = args;
12113   if (local_specializations)
12114     if (tree locals = extract_local_specs (pattern, complain))
12115       extra = tree_cons (NULL_TREE, extra, locals);
12116   return extra;
12117 }
12118 
12119 /* Apply any local specializations from PACK_EXPANSION_EXTRA_ARGS and add the
12120    normal template args to ARGS.  */
12121 
12122 tree
add_extra_args(tree extra,tree args)12123 add_extra_args (tree extra, tree args)
12124 {
12125   if (extra && TREE_CODE (extra) == TREE_LIST)
12126     {
12127       for (tree elt = TREE_CHAIN (extra); elt; elt = TREE_CHAIN (elt))
12128 	{
12129 	  /* The partial instantiation involved local declarations collected in
12130 	     extract_local_specs; map from the general template to our local
12131 	     context.  */
12132 	  tree gen = TREE_PURPOSE (elt);
12133 	  tree inst = TREE_VALUE (elt);
12134 	  if (DECL_P (inst))
12135 	    if (tree local = retrieve_local_specialization (inst))
12136 	      inst = local;
12137 	  /* else inst is already a full instantiation of the pack.  */
12138 	  register_local_specialization (inst, gen);
12139 	}
12140       gcc_assert (!TREE_PURPOSE (extra));
12141       extra = TREE_VALUE (extra);
12142     }
12143   return add_to_template_args (extra, args);
12144 }
12145 
12146 /* Substitute ARGS into T, which is an pack expansion
12147    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
12148    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
12149    (if only a partial substitution could be performed) or
12150    ERROR_MARK_NODE if there was an error.  */
12151 tree
tsubst_pack_expansion(tree t,tree args,tsubst_flags_t complain,tree in_decl)12152 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
12153 		       tree in_decl)
12154 {
12155   tree pattern;
12156   tree pack, packs = NULL_TREE;
12157   bool unsubstituted_packs = false;
12158   bool unsubstituted_fn_pack = false;
12159   int i, len = -1;
12160   tree result;
12161   hash_map<tree, tree> *saved_local_specializations = NULL;
12162   bool need_local_specializations = false;
12163   int levels;
12164 
12165   gcc_assert (PACK_EXPANSION_P (t));
12166   pattern = PACK_EXPANSION_PATTERN (t);
12167 
12168   /* Add in any args remembered from an earlier partial instantiation.  */
12169   args = add_extra_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
12170 
12171   levels = TMPL_ARGS_DEPTH (args);
12172 
12173   /* Determine the argument packs that will instantiate the parameter
12174      packs used in the expansion expression. While we're at it,
12175      compute the number of arguments to be expanded and make sure it
12176      is consistent.  */
12177   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
12178        pack = TREE_CHAIN (pack))
12179     {
12180       tree parm_pack = TREE_VALUE (pack);
12181       tree arg_pack = NULL_TREE;
12182       tree orig_arg = NULL_TREE;
12183       int level = 0;
12184 
12185       if (TREE_CODE (parm_pack) == BASES)
12186 	{
12187 	  gcc_assert (parm_pack == pattern);
12188 	  if (BASES_DIRECT (parm_pack))
12189 	    return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
12190 							args, complain,
12191 							in_decl, false),
12192 					   complain);
12193 	  else
12194 	    return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
12195 						 args, complain, in_decl,
12196 						 false), complain);
12197 	}
12198       else if (builtin_pack_call_p (parm_pack))
12199 	{
12200 	  if (parm_pack != pattern)
12201 	    {
12202 	      if (complain & tf_error)
12203 		sorry ("%qE is not the entire pattern of the pack expansion",
12204 		       parm_pack);
12205 	      return error_mark_node;
12206 	    }
12207 	  return expand_builtin_pack_call (parm_pack, args,
12208 					   complain, in_decl);
12209 	}
12210       else if (TREE_CODE (parm_pack) == PARM_DECL)
12211 	{
12212 	  /* We know we have correct local_specializations if this
12213 	     expansion is at function scope, or if we're dealing with a
12214 	     local parameter in a requires expression; for the latter,
12215 	     tsubst_requires_expr set it up appropriately.  */
12216 	  if (PACK_EXPANSION_LOCAL_P (t) || CONSTRAINT_VAR_P (parm_pack))
12217 	    arg_pack = retrieve_local_specialization (parm_pack);
12218 	  else
12219 	    /* We can't rely on local_specializations for a parameter
12220 	       name used later in a function declaration (such as in a
12221 	       late-specified return type).  Even if it exists, it might
12222 	       have the wrong value for a recursive call.  */
12223 	    need_local_specializations = true;
12224 
12225 	  if (!arg_pack)
12226 	    {
12227 	      /* This parameter pack was used in an unevaluated context.  Just
12228 		 make a dummy decl, since it's only used for its type.  */
12229 	      ++cp_unevaluated_operand;
12230 	      arg_pack = tsubst_decl (parm_pack, args, complain);
12231 	      --cp_unevaluated_operand;
12232 	      if (arg_pack && DECL_PACK_P (arg_pack))
12233 		/* Partial instantiation of the parm_pack, we can't build
12234 		   up an argument pack yet.  */
12235 		arg_pack = NULL_TREE;
12236 	      else
12237 		arg_pack = make_fnparm_pack (arg_pack);
12238 	    }
12239 	  else if (argument_pack_element_is_expansion_p (arg_pack, 0))
12240 	    /* This argument pack isn't fully instantiated yet.  We set this
12241 	       flag rather than clear arg_pack because we do want to do the
12242 	       optimization below, and we don't want to substitute directly
12243 	       into the pattern (as that would expose a NONTYPE_ARGUMENT_PACK
12244 	       where it isn't expected).  */
12245 	    unsubstituted_fn_pack = true;
12246 	}
12247       else if (is_capture_proxy (parm_pack))
12248 	{
12249 	  arg_pack = retrieve_local_specialization (parm_pack);
12250 	  if (argument_pack_element_is_expansion_p (arg_pack, 0))
12251 	    unsubstituted_fn_pack = true;
12252 	}
12253       else
12254         {
12255 	  int idx;
12256           template_parm_level_and_index (parm_pack, &level, &idx);
12257 
12258           if (level <= levels)
12259             arg_pack = TMPL_ARG (args, level, idx);
12260         }
12261 
12262       orig_arg = arg_pack;
12263       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
12264 	arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
12265 
12266       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
12267 	/* This can only happen if we forget to expand an argument
12268 	   pack somewhere else. Just return an error, silently.  */
12269 	{
12270 	  result = make_tree_vec (1);
12271 	  TREE_VEC_ELT (result, 0) = error_mark_node;
12272 	  return result;
12273 	}
12274 
12275       if (arg_pack)
12276         {
12277           int my_len =
12278             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
12279 
12280 	  /* Don't bother trying to do a partial substitution with
12281 	     incomplete packs; we'll try again after deduction.  */
12282           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
12283             return t;
12284 
12285           if (len < 0)
12286 	    len = my_len;
12287           else if (len != my_len
12288 		   && !unsubstituted_fn_pack)
12289             {
12290 	      if (!(complain & tf_error))
12291 		/* Fail quietly.  */;
12292               else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
12293                 error ("mismatched argument pack lengths while expanding %qT",
12294                        pattern);
12295               else
12296                 error ("mismatched argument pack lengths while expanding %qE",
12297                        pattern);
12298               return error_mark_node;
12299             }
12300 
12301           /* Keep track of the parameter packs and their corresponding
12302              argument packs.  */
12303           packs = tree_cons (parm_pack, arg_pack, packs);
12304           TREE_TYPE (packs) = orig_arg;
12305         }
12306       else
12307 	{
12308 	  /* We can't substitute for this parameter pack.  We use a flag as
12309 	     well as the missing_level counter because function parameter
12310 	     packs don't have a level.  */
12311 	  gcc_assert (processing_template_decl || is_auto (parm_pack));
12312 	  unsubstituted_packs = true;
12313 	}
12314     }
12315 
12316   /* If the expansion is just T..., return the matching argument pack, unless
12317      we need to call convert_from_reference on all the elements.  This is an
12318      important optimization; see c++/68422.  */
12319   if (!unsubstituted_packs
12320       && TREE_PURPOSE (packs) == pattern)
12321     {
12322       tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
12323 
12324       /* If the argument pack is a single pack expansion, pull it out.  */
12325       if (TREE_VEC_LENGTH (args) == 1
12326 	  && pack_expansion_args_count (args))
12327 	return TREE_VEC_ELT (args, 0);
12328 
12329       /* Types need no adjustment, nor does sizeof..., and if we still have
12330 	 some pack expansion args we won't do anything yet.  */
12331       if (TREE_CODE (t) == TYPE_PACK_EXPANSION
12332 	  || PACK_EXPANSION_SIZEOF_P (t)
12333 	  || pack_expansion_args_count (args))
12334 	return args;
12335       /* Also optimize expression pack expansions if we can tell that the
12336 	 elements won't have reference type.  */
12337       tree type = TREE_TYPE (pattern);
12338       if (type && !TYPE_REF_P (type)
12339 	  && !PACK_EXPANSION_P (type)
12340 	  && !WILDCARD_TYPE_P (type))
12341 	return args;
12342       /* Otherwise use the normal path so we get convert_from_reference.  */
12343     }
12344 
12345   /* We cannot expand this expansion expression, because we don't have
12346      all of the argument packs we need.  */
12347   if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
12348     {
12349       /* We got some full packs, but we can't substitute them in until we
12350 	 have values for all the packs.  So remember these until then.  */
12351 
12352       t = make_pack_expansion (pattern, complain);
12353       PACK_EXPANSION_EXTRA_ARGS (t)
12354 	= build_extra_args (pattern, args, complain);
12355       return t;
12356     }
12357   else if (unsubstituted_packs)
12358     {
12359       /* There were no real arguments, we're just replacing a parameter
12360 	 pack with another version of itself. Substitute into the
12361 	 pattern and return a PACK_EXPANSION_*. The caller will need to
12362 	 deal with that.  */
12363       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
12364 	t = tsubst_expr (pattern, args, complain, in_decl,
12365 			 /*integral_constant_expression_p=*/false);
12366       else
12367 	t = tsubst (pattern, args, complain, in_decl);
12368       t = make_pack_expansion (t, complain);
12369       return t;
12370     }
12371 
12372   gcc_assert (len >= 0);
12373 
12374   if (need_local_specializations)
12375     {
12376       /* We're in a late-specified return type, so create our own local
12377 	 specializations map; the current map is either NULL or (in the
12378 	 case of recursive unification) might have bindings that we don't
12379 	 want to use or alter.  */
12380       saved_local_specializations = local_specializations;
12381       local_specializations = new hash_map<tree, tree>;
12382     }
12383 
12384   /* For each argument in each argument pack, substitute into the
12385      pattern.  */
12386   result = make_tree_vec (len);
12387   tree elem_args = copy_template_args (args);
12388   for (i = 0; i < len; ++i)
12389     {
12390       t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
12391 						    i,
12392 						    elem_args, complain,
12393 						    in_decl);
12394       TREE_VEC_ELT (result, i) = t;
12395       if (t == error_mark_node)
12396 	{
12397 	  result = error_mark_node;
12398 	  break;
12399 	}
12400     }
12401 
12402   /* Update ARGS to restore the substitution from parameter packs to
12403      their argument packs.  */
12404   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12405     {
12406       tree parm = TREE_PURPOSE (pack);
12407 
12408       if (TREE_CODE (parm) == PARM_DECL
12409 	  || VAR_P (parm)
12410 	  || TREE_CODE (parm) == FIELD_DECL)
12411         register_local_specialization (TREE_TYPE (pack), parm);
12412       else
12413         {
12414           int idx, level;
12415 
12416 	  if (TREE_VALUE (pack) == NULL_TREE)
12417 	    continue;
12418 
12419           template_parm_level_and_index (parm, &level, &idx);
12420 
12421           /* Update the corresponding argument.  */
12422           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
12423             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
12424               TREE_TYPE (pack);
12425           else
12426             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
12427         }
12428     }
12429 
12430   if (need_local_specializations)
12431     {
12432       delete local_specializations;
12433       local_specializations = saved_local_specializations;
12434     }
12435 
12436   /* If the dependent pack arguments were such that we end up with only a
12437      single pack expansion again, there's no need to keep it in a TREE_VEC.  */
12438   if (len == 1 && TREE_CODE (result) == TREE_VEC
12439       && PACK_EXPANSION_P (TREE_VEC_ELT (result, 0)))
12440     return TREE_VEC_ELT (result, 0);
12441 
12442   return result;
12443 }
12444 
12445 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
12446    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
12447    parameter packs; all parms generated from a function parameter pack will
12448    have the same DECL_PARM_INDEX.  */
12449 
12450 tree
get_pattern_parm(tree parm,tree tmpl)12451 get_pattern_parm (tree parm, tree tmpl)
12452 {
12453   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
12454   tree patparm;
12455 
12456   if (DECL_ARTIFICIAL (parm))
12457     {
12458       for (patparm = DECL_ARGUMENTS (pattern);
12459 	   patparm; patparm = DECL_CHAIN (patparm))
12460 	if (DECL_ARTIFICIAL (patparm)
12461 	    && DECL_NAME (parm) == DECL_NAME (patparm))
12462 	  break;
12463     }
12464   else
12465     {
12466       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
12467       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
12468       gcc_assert (DECL_PARM_INDEX (patparm)
12469 		  == DECL_PARM_INDEX (parm));
12470     }
12471 
12472   return patparm;
12473 }
12474 
12475 /* Make an argument pack out of the TREE_VEC VEC.  */
12476 
12477 static tree
make_argument_pack(tree vec)12478 make_argument_pack (tree vec)
12479 {
12480   tree pack;
12481   tree elt = TREE_VEC_ELT (vec, 0);
12482   if (TYPE_P (elt))
12483     pack = cxx_make_type (TYPE_ARGUMENT_PACK);
12484   else
12485     {
12486       pack = make_node (NONTYPE_ARGUMENT_PACK);
12487       TREE_CONSTANT (pack) = 1;
12488     }
12489   SET_ARGUMENT_PACK_ARGS (pack, vec);
12490   return pack;
12491 }
12492 
12493 /* Return an exact copy of template args T that can be modified
12494    independently.  */
12495 
12496 static tree
copy_template_args(tree t)12497 copy_template_args (tree t)
12498 {
12499   if (t == error_mark_node)
12500     return t;
12501 
12502   int len = TREE_VEC_LENGTH (t);
12503   tree new_vec = make_tree_vec (len);
12504 
12505   for (int i = 0; i < len; ++i)
12506     {
12507       tree elt = TREE_VEC_ELT (t, i);
12508       if (elt && TREE_CODE (elt) == TREE_VEC)
12509 	elt = copy_template_args (elt);
12510       TREE_VEC_ELT (new_vec, i) = elt;
12511     }
12512 
12513   NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_vec)
12514     = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
12515 
12516   return new_vec;
12517 }
12518 
12519 /* Substitute ARGS into the vector or list of template arguments T.  */
12520 
12521 static tree
tsubst_template_args(tree t,tree args,tsubst_flags_t complain,tree in_decl)12522 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12523 {
12524   tree orig_t = t;
12525   int len, need_new = 0, i, expanded_len_adjust = 0, out;
12526   tree *elts;
12527 
12528   if (t == error_mark_node)
12529     return error_mark_node;
12530 
12531   len = TREE_VEC_LENGTH (t);
12532   elts = XALLOCAVEC (tree, len);
12533 
12534   for (i = 0; i < len; i++)
12535     {
12536       tree orig_arg = TREE_VEC_ELT (t, i);
12537       tree new_arg;
12538 
12539       if (TREE_CODE (orig_arg) == TREE_VEC)
12540 	new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
12541       else if (PACK_EXPANSION_P (orig_arg))
12542         {
12543           /* Substitute into an expansion expression.  */
12544           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
12545 
12546           if (TREE_CODE (new_arg) == TREE_VEC)
12547             /* Add to the expanded length adjustment the number of
12548                expanded arguments. We subtract one from this
12549                measurement, because the argument pack expression
12550                itself is already counted as 1 in
12551                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
12552                the argument pack is empty.  */
12553             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
12554         }
12555       else if (ARGUMENT_PACK_P (orig_arg))
12556         {
12557           /* Substitute into each of the arguments.  */
12558           new_arg = TYPE_P (orig_arg)
12559             ? cxx_make_type (TREE_CODE (orig_arg))
12560             : make_node (TREE_CODE (orig_arg));
12561 
12562 	  tree pack_args = tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
12563 						 args, complain, in_decl);
12564           if (pack_args == error_mark_node)
12565             new_arg = error_mark_node;
12566 	  else
12567 	    SET_ARGUMENT_PACK_ARGS (new_arg, pack_args);
12568 
12569           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK)
12570 	    TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
12571         }
12572       else
12573 	new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
12574 
12575       if (new_arg == error_mark_node)
12576 	return error_mark_node;
12577 
12578       elts[i] = new_arg;
12579       if (new_arg != orig_arg)
12580 	need_new = 1;
12581     }
12582 
12583   if (!need_new)
12584     return t;
12585 
12586   /* Make space for the expanded arguments coming from template
12587      argument packs.  */
12588   t = make_tree_vec (len + expanded_len_adjust);
12589   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
12590      arguments for a member template.
12591      In that case each TREE_VEC in ORIG_T represents a level of template
12592      arguments, and ORIG_T won't carry any non defaulted argument count.
12593      It will rather be the nested TREE_VECs that will carry one.
12594      In other words, ORIG_T carries a non defaulted argument count only
12595      if it doesn't contain any nested TREE_VEC.  */
12596   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
12597     {
12598       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
12599       count += expanded_len_adjust;
12600       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
12601     }
12602   for (i = 0, out = 0; i < len; i++)
12603     {
12604       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
12605            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
12606           && TREE_CODE (elts[i]) == TREE_VEC)
12607         {
12608           int idx;
12609 
12610           /* Now expand the template argument pack "in place".  */
12611           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
12612             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
12613         }
12614       else
12615         {
12616           TREE_VEC_ELT (t, out) = elts[i];
12617           out++;
12618         }
12619     }
12620 
12621   return t;
12622 }
12623 
12624 /* Substitute ARGS into one level PARMS of template parameters.  */
12625 
12626 static tree
tsubst_template_parms_level(tree parms,tree args,tsubst_flags_t complain)12627 tsubst_template_parms_level (tree parms, tree args, tsubst_flags_t complain)
12628 {
12629   if (parms == error_mark_node)
12630     return error_mark_node;
12631 
12632   tree new_vec = make_tree_vec (TREE_VEC_LENGTH (parms));
12633 
12634   for (int i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
12635     {
12636       tree tuple = TREE_VEC_ELT (parms, i);
12637 
12638       if (tuple == error_mark_node)
12639 	continue;
12640 
12641       TREE_VEC_ELT (new_vec, i) =
12642 	tsubst_template_parm (tuple, args, complain);
12643     }
12644 
12645   return new_vec;
12646 }
12647 
12648 /* Return the result of substituting ARGS into the template parameters
12649    given by PARMS.  If there are m levels of ARGS and m + n levels of
12650    PARMS, then the result will contain n levels of PARMS.  For
12651    example, if PARMS is `template <class T> template <class U>
12652    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
12653    result will be `template <int*, double, class V>'.  */
12654 
12655 static tree
tsubst_template_parms(tree parms,tree args,tsubst_flags_t complain)12656 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
12657 {
12658   tree r = NULL_TREE;
12659   tree* new_parms;
12660 
12661   /* When substituting into a template, we must set
12662      PROCESSING_TEMPLATE_DECL as the template parameters may be
12663      dependent if they are based on one-another, and the dependency
12664      predicates are short-circuit outside of templates.  */
12665   ++processing_template_decl;
12666 
12667   for (new_parms = &r;
12668        parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
12669        new_parms = &(TREE_CHAIN (*new_parms)),
12670 	 parms = TREE_CHAIN (parms))
12671     {
12672       tree new_vec = tsubst_template_parms_level (TREE_VALUE (parms),
12673 						  args, complain);
12674       *new_parms =
12675 	tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
12676 			     - TMPL_ARGS_DEPTH (args)),
12677 		   new_vec, NULL_TREE);
12678     }
12679 
12680   --processing_template_decl;
12681 
12682   return r;
12683 }
12684 
12685 /* Return the result of substituting ARGS into one template parameter
12686    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
12687    parameter and which TREE_PURPOSE is the default argument of the
12688    template parameter.  */
12689 
12690 static tree
tsubst_template_parm(tree t,tree args,tsubst_flags_t complain)12691 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
12692 {
12693   tree default_value, parm_decl;
12694 
12695   if (args == NULL_TREE
12696       || t == NULL_TREE
12697       || t == error_mark_node)
12698     return t;
12699 
12700   gcc_assert (TREE_CODE (t) == TREE_LIST);
12701 
12702   default_value = TREE_PURPOSE (t);
12703   parm_decl = TREE_VALUE (t);
12704 
12705   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
12706   if (TREE_CODE (parm_decl) == PARM_DECL
12707       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
12708     parm_decl = error_mark_node;
12709   default_value = tsubst_template_arg (default_value, args,
12710 				       complain, NULL_TREE);
12711 
12712   return build_tree_list (default_value, parm_decl);
12713 }
12714 
12715 /* Substitute the ARGS into the indicated aggregate (or enumeration)
12716    type T.  If T is not an aggregate or enumeration type, it is
12717    handled as if by tsubst.  IN_DECL is as for tsubst.  If
12718    ENTERING_SCOPE is nonzero, T is the context for a template which
12719    we are presently tsubst'ing.  Return the substituted value.  */
12720 
12721 static tree
tsubst_aggr_type(tree t,tree args,tsubst_flags_t complain,tree in_decl,int entering_scope)12722 tsubst_aggr_type (tree t,
12723 		  tree args,
12724 		  tsubst_flags_t complain,
12725 		  tree in_decl,
12726 		  int entering_scope)
12727 {
12728   if (t == NULL_TREE)
12729     return NULL_TREE;
12730 
12731   switch (TREE_CODE (t))
12732     {
12733     case RECORD_TYPE:
12734       if (TYPE_PTRMEMFUNC_P (t))
12735 	return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
12736 
12737       /* Fall through.  */
12738     case ENUMERAL_TYPE:
12739     case UNION_TYPE:
12740       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
12741 	{
12742 	  tree argvec;
12743 	  tree context;
12744 	  tree r;
12745 
12746 	  /* In "sizeof(X<I>)" we need to evaluate "I".  */
12747 	  cp_evaluated ev;
12748 
12749 	  /* First, determine the context for the type we are looking
12750 	     up.  */
12751 	  context = TYPE_CONTEXT (t);
12752 	  if (context && TYPE_P (context))
12753 	    {
12754 	      context = tsubst_aggr_type (context, args, complain,
12755 					  in_decl, /*entering_scope=*/1);
12756 	      /* If context is a nested class inside a class template,
12757 	         it may still need to be instantiated (c++/33959).  */
12758 	      context = complete_type (context);
12759 	    }
12760 
12761 	  /* Then, figure out what arguments are appropriate for the
12762 	     type we are trying to find.  For example, given:
12763 
12764 	       template <class T> struct S;
12765 	       template <class T, class U> void f(T, U) { S<U> su; }
12766 
12767 	     and supposing that we are instantiating f<int, double>,
12768 	     then our ARGS will be {int, double}, but, when looking up
12769 	     S we only want {double}.  */
12770 	  argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
12771 					 complain, in_decl);
12772 	  if (argvec == error_mark_node)
12773 	    r = error_mark_node;
12774 	  else
12775 	    {
12776 	      r = lookup_template_class (t, argvec, in_decl, context,
12777 					 entering_scope, complain);
12778 	      r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
12779 	    }
12780 
12781 	  return r;
12782 	}
12783       else
12784 	/* This is not a template type, so there's nothing to do.  */
12785 	return t;
12786 
12787     default:
12788       return tsubst (t, args, complain, in_decl);
12789     }
12790 }
12791 
12792 static GTY((cache)) tree_cache_map *defarg_inst;
12793 
12794 /* Substitute into the default argument ARG (a default argument for
12795    FN), which has the indicated TYPE.  */
12796 
12797 tree
tsubst_default_argument(tree fn,int parmnum,tree type,tree arg,tsubst_flags_t complain)12798 tsubst_default_argument (tree fn, int parmnum, tree type, tree arg,
12799 			 tsubst_flags_t complain)
12800 {
12801   int errs = errorcount + sorrycount;
12802 
12803   /* This can happen in invalid code.  */
12804   if (TREE_CODE (arg) == DEFAULT_ARG)
12805     return arg;
12806 
12807   tree parm = FUNCTION_FIRST_USER_PARM (fn);
12808   parm = chain_index (parmnum, parm);
12809   tree parmtype = TREE_TYPE (parm);
12810   if (DECL_BY_REFERENCE (parm))
12811     parmtype = TREE_TYPE (parmtype);
12812   if (parmtype == error_mark_node)
12813     return error_mark_node;
12814 
12815   gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, parmtype));
12816 
12817   tree *slot;
12818   if (defarg_inst && (slot = defarg_inst->get (parm)))
12819     return *slot;
12820 
12821   /* This default argument came from a template.  Instantiate the
12822      default argument here, not in tsubst.  In the case of
12823      something like:
12824 
12825        template <class T>
12826        struct S {
12827 	 static T t();
12828 	 void f(T = t());
12829        };
12830 
12831      we must be careful to do name lookup in the scope of S<T>,
12832      rather than in the current class.  */
12833   push_to_top_level ();
12834   push_access_scope (fn);
12835   push_deferring_access_checks (dk_no_deferred);
12836   start_lambda_scope (parm);
12837 
12838   /* The default argument expression may cause implicitly defined
12839      member functions to be synthesized, which will result in garbage
12840      collection.  We must treat this situation as if we were within
12841      the body of function so as to avoid collecting live data on the
12842      stack.  */
12843   ++function_depth;
12844   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
12845 		     complain, NULL_TREE,
12846 		     /*integral_constant_expression_p=*/false);
12847   --function_depth;
12848 
12849   finish_lambda_scope ();
12850 
12851   /* Make sure the default argument is reasonable.  */
12852   arg = check_default_argument (type, arg, complain);
12853 
12854   if (errorcount+sorrycount > errs
12855       && (complain & tf_warning_or_error))
12856     inform (input_location,
12857 	    "  when instantiating default argument for call to %qD", fn);
12858 
12859   pop_deferring_access_checks ();
12860   pop_access_scope (fn);
12861   pop_from_top_level ();
12862 
12863   if (arg != error_mark_node && !cp_unevaluated_operand)
12864     {
12865       if (!defarg_inst)
12866 	defarg_inst = tree_cache_map::create_ggc (37);
12867       defarg_inst->put (parm, arg);
12868     }
12869 
12870   return arg;
12871 }
12872 
12873 /* Substitute into all the default arguments for FN.  */
12874 
12875 static void
tsubst_default_arguments(tree fn,tsubst_flags_t complain)12876 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
12877 {
12878   tree arg;
12879   tree tmpl_args;
12880 
12881   tmpl_args = DECL_TI_ARGS (fn);
12882 
12883   /* If this function is not yet instantiated, we certainly don't need
12884      its default arguments.  */
12885   if (uses_template_parms (tmpl_args))
12886     return;
12887   /* Don't do this again for clones.  */
12888   if (DECL_CLONED_FUNCTION_P (fn))
12889     return;
12890 
12891   int i = 0;
12892   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
12893        arg;
12894        arg = TREE_CHAIN (arg), ++i)
12895     if (TREE_PURPOSE (arg))
12896       TREE_PURPOSE (arg) = tsubst_default_argument (fn, i,
12897 						    TREE_VALUE (arg),
12898 						    TREE_PURPOSE (arg),
12899 						    complain);
12900 }
12901 
12902 /* Hash table mapping a FUNCTION_DECL to its dependent explicit-specifier.  */
12903 static GTY((cache)) tree_cache_map *explicit_specifier_map;
12904 
12905 /* Store a pair to EXPLICIT_SPECIFIER_MAP.  */
12906 
12907 void
store_explicit_specifier(tree v,tree t)12908 store_explicit_specifier (tree v, tree t)
12909 {
12910   if (!explicit_specifier_map)
12911     explicit_specifier_map = tree_cache_map::create_ggc (37);
12912   DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P (v) = true;
12913   explicit_specifier_map->put (v, t);
12914 }
12915 
12916 /* Lookup an element in EXPLICIT_SPECIFIER_MAP.  */
12917 
12918 static tree
lookup_explicit_specifier(tree v)12919 lookup_explicit_specifier (tree v)
12920 {
12921   return *explicit_specifier_map->get (v);
12922 }
12923 
12924 /* Subroutine of tsubst_decl for the case when T is a FUNCTION_DECL.  */
12925 
12926 static tree
tsubst_function_decl(tree t,tree args,tsubst_flags_t complain,tree lambda_fntype)12927 tsubst_function_decl (tree t, tree args, tsubst_flags_t complain,
12928 		      tree lambda_fntype)
12929 {
12930   tree gen_tmpl, argvec;
12931   hashval_t hash = 0;
12932   tree in_decl = t;
12933 
12934   /* Nobody should be tsubst'ing into non-template functions.  */
12935   gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
12936 
12937   if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
12938     {
12939       /* If T is not dependent, just return it.  */
12940       if (!uses_template_parms (DECL_TI_ARGS (t))
12941 	  && !LAMBDA_FUNCTION_P (t))
12942 	return t;
12943 
12944       /* Calculate the most general template of which R is a
12945 	 specialization.  */
12946       gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
12947 
12948       /* We're substituting a lambda function under tsubst_lambda_expr but not
12949 	 directly from it; find the matching function we're already inside.
12950 	 But don't do this if T is a generic lambda with a single level of
12951 	 template parms, as in that case we're doing a normal instantiation. */
12952       if (LAMBDA_FUNCTION_P (t) && !lambda_fntype
12953 	  && (!generic_lambda_fn_p (t)
12954 	      || TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl)) > 1))
12955 	return enclosing_instantiation_of (t);
12956 
12957       /* Calculate the complete set of arguments used to
12958 	 specialize R.  */
12959       argvec = tsubst_template_args (DECL_TI_ARGS
12960 				     (DECL_TEMPLATE_RESULT
12961 				      (DECL_TI_TEMPLATE (t))),
12962 				     args, complain, in_decl);
12963       if (argvec == error_mark_node)
12964 	return error_mark_node;
12965 
12966       /* Check to see if we already have this specialization.  */
12967       if (!lambda_fntype)
12968 	{
12969 	  hash = hash_tmpl_and_args (gen_tmpl, argvec);
12970 	  if (tree spec = retrieve_specialization (gen_tmpl, argvec, hash))
12971 	    return spec;
12972 	}
12973 
12974       /* We can see more levels of arguments than parameters if
12975 	 there was a specialization of a member template, like
12976 	 this:
12977 
12978 	 template <class T> struct S { template <class U> void f(); }
12979 	 template <> template <class U> void S<int>::f(U);
12980 
12981 	 Here, we'll be substituting into the specialization,
12982 	 because that's where we can find the code we actually
12983 	 want to generate, but we'll have enough arguments for
12984 	 the most general template.
12985 
12986 	 We also deal with the peculiar case:
12987 
12988 	 template <class T> struct S {
12989 	   template <class U> friend void f();
12990 	 };
12991 	 template <class U> void f() {}
12992 	 template S<int>;
12993 	 template void f<double>();
12994 
12995 	 Here, the ARGS for the instantiation of will be {int,
12996 	 double}.  But, we only need as many ARGS as there are
12997 	 levels of template parameters in CODE_PATTERN.  We are
12998 	 careful not to get fooled into reducing the ARGS in
12999 	 situations like:
13000 
13001 	 template <class T> struct S { template <class U> void f(U); }
13002 	 template <class T> template <> void S<T>::f(int) {}
13003 
13004 	 which we can spot because the pattern will be a
13005 	 specialization in this case.  */
13006       int args_depth = TMPL_ARGS_DEPTH (args);
13007       int parms_depth =
13008 	TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
13009 
13010       if (args_depth > parms_depth && !DECL_TEMPLATE_SPECIALIZATION (t))
13011 	args = get_innermost_template_args (args, parms_depth);
13012     }
13013   else
13014     {
13015       /* This special case arises when we have something like this:
13016 
13017 	 template <class T> struct S {
13018 	 friend void f<int>(int, double);
13019 	 };
13020 
13021 	 Here, the DECL_TI_TEMPLATE for the friend declaration
13022 	 will be an IDENTIFIER_NODE.  We are being called from
13023 	 tsubst_friend_function, and we want only to create a
13024 	 new decl (R) with appropriate types so that we can call
13025 	 determine_specialization.  */
13026       gen_tmpl = NULL_TREE;
13027       argvec = NULL_TREE;
13028     }
13029 
13030   tree closure = (lambda_fntype ? TYPE_METHOD_BASETYPE (lambda_fntype)
13031 		  : NULL_TREE);
13032   tree ctx = closure ? closure : DECL_CONTEXT (t);
13033   bool member = ctx && TYPE_P (ctx);
13034 
13035   if (member && !closure)
13036     ctx = tsubst_aggr_type (ctx, args,
13037 			    complain, t, /*entering_scope=*/1);
13038 
13039   tree type = (lambda_fntype ? lambda_fntype
13040 	       : tsubst (TREE_TYPE (t), args,
13041 			 complain | tf_fndecl_type, in_decl));
13042   if (type == error_mark_node)
13043     return error_mark_node;
13044 
13045   /* If we hit excessive deduction depth, the type is bogus even if
13046      it isn't error_mark_node, so don't build a decl.  */
13047   if (excessive_deduction_depth)
13048     return error_mark_node;
13049 
13050   /* We do NOT check for matching decls pushed separately at this
13051      point, as they may not represent instantiations of this
13052      template, and in any case are considered separate under the
13053      discrete model.  */
13054   tree r = copy_decl (t);
13055   DECL_USE_TEMPLATE (r) = 0;
13056   TREE_TYPE (r) = type;
13057   /* Clear out the mangled name and RTL for the instantiation.  */
13058   SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
13059   SET_DECL_RTL (r, NULL);
13060   /* Leave DECL_INITIAL set on deleted instantiations.  */
13061   if (!DECL_DELETED_FN (r))
13062     DECL_INITIAL (r) = NULL_TREE;
13063   DECL_CONTEXT (r) = ctx;
13064 
13065   /* Handle explicit(dependent-expr).  */
13066   if (DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P (t))
13067     {
13068       tree spec = lookup_explicit_specifier (t);
13069       spec = tsubst_copy_and_build (spec, args, complain, in_decl,
13070 				    /*function_p=*/false,
13071 				    /*i_c_e_p=*/true);
13072       spec = build_explicit_specifier (spec, complain);
13073       DECL_NONCONVERTING_P (r) = (spec == boolean_true_node);
13074     }
13075 
13076   /* OpenMP UDRs have the only argument a reference to the declared
13077      type.  We want to diagnose if the declared type is a reference,
13078      which is invalid, but as references to references are usually
13079      quietly merged, diagnose it here.  */
13080   if (DECL_OMP_DECLARE_REDUCTION_P (t))
13081     {
13082       tree argtype
13083 	= TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
13084       argtype = tsubst (argtype, args, complain, in_decl);
13085       if (TYPE_REF_P (argtype))
13086 	error_at (DECL_SOURCE_LOCATION (t),
13087 		  "reference type %qT in "
13088 		  "%<#pragma omp declare reduction%>", argtype);
13089       if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
13090 	DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
13091 					  argtype);
13092     }
13093 
13094   if (member && DECL_CONV_FN_P (r))
13095     /* Type-conversion operator.  Reconstruct the name, in
13096        case it's the name of one of the template's parameters.  */
13097     DECL_NAME (r) = make_conv_op_name (TREE_TYPE (type));
13098 
13099   tree parms = DECL_ARGUMENTS (t);
13100   if (closure)
13101     parms = DECL_CHAIN (parms);
13102   parms = tsubst (parms, args, complain, t);
13103   for (tree parm = parms; parm; parm = DECL_CHAIN (parm))
13104     DECL_CONTEXT (parm) = r;
13105   if (closure)
13106     {
13107       tree tparm = build_this_parm (r, closure, type_memfn_quals (type));
13108       DECL_CHAIN (tparm) = parms;
13109       parms = tparm;
13110     }
13111   DECL_ARGUMENTS (r) = parms;
13112   DECL_RESULT (r) = NULL_TREE;
13113 
13114   TREE_STATIC (r) = 0;
13115   TREE_PUBLIC (r) = TREE_PUBLIC (t);
13116   DECL_EXTERNAL (r) = 1;
13117   /* If this is an instantiation of a function with internal
13118      linkage, we already know what object file linkage will be
13119      assigned to the instantiation.  */
13120   DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
13121   DECL_DEFER_OUTPUT (r) = 0;
13122   DECL_CHAIN (r) = NULL_TREE;
13123   DECL_PENDING_INLINE_INFO (r) = 0;
13124   DECL_PENDING_INLINE_P (r) = 0;
13125   DECL_SAVED_TREE (r) = NULL_TREE;
13126   DECL_STRUCT_FUNCTION (r) = NULL;
13127   TREE_USED (r) = 0;
13128   /* We'll re-clone as appropriate in instantiate_template.  */
13129   DECL_CLONED_FUNCTION (r) = NULL_TREE;
13130 
13131   /* If we aren't complaining now, return on error before we register
13132      the specialization so that we'll complain eventually.  */
13133   if ((complain & tf_error) == 0
13134       && IDENTIFIER_ANY_OP_P (DECL_NAME (r))
13135       && !grok_op_properties (r, /*complain=*/false))
13136     return error_mark_node;
13137 
13138   /* When instantiating a constrained member, substitute
13139      into the constraints to create a new constraint.  */
13140   if (tree ci = get_constraints (t))
13141     if (member)
13142       {
13143 	ci = tsubst_constraint_info (ci, argvec, complain, NULL_TREE);
13144 	set_constraints (r, ci);
13145       }
13146 
13147   if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
13148     SET_DECL_FRIEND_CONTEXT (r,
13149 			     tsubst (DECL_FRIEND_CONTEXT (t),
13150 				     args, complain, in_decl));
13151 
13152   /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
13153      this in the special friend case mentioned above where
13154      GEN_TMPL is NULL.  */
13155   if (gen_tmpl && !closure)
13156     {
13157       DECL_TEMPLATE_INFO (r)
13158 	= build_template_info (gen_tmpl, argvec);
13159       SET_DECL_IMPLICIT_INSTANTIATION (r);
13160 
13161       tree new_r
13162 	= register_specialization (r, gen_tmpl, argvec, false, hash);
13163       if (new_r != r)
13164 	/* We instantiated this while substituting into
13165 	   the type earlier (template/friend54.C).  */
13166 	return new_r;
13167 
13168       /* We're not supposed to instantiate default arguments
13169 	 until they are called, for a template.  But, for a
13170 	 declaration like:
13171 
13172 	 template <class T> void f ()
13173 	 { extern void g(int i = T()); }
13174 
13175 	 we should do the substitution when the template is
13176 	 instantiated.  We handle the member function case in
13177 	 instantiate_class_template since the default arguments
13178 	 might refer to other members of the class.  */
13179       if (!member
13180 	  && !PRIMARY_TEMPLATE_P (gen_tmpl)
13181 	  && !uses_template_parms (argvec))
13182 	tsubst_default_arguments (r, complain);
13183     }
13184   else
13185     DECL_TEMPLATE_INFO (r) = NULL_TREE;
13186 
13187   /* Copy the list of befriending classes.  */
13188   for (tree *friends = &DECL_BEFRIENDING_CLASSES (r);
13189        *friends;
13190        friends = &TREE_CHAIN (*friends))
13191     {
13192       *friends = copy_node (*friends);
13193       TREE_VALUE (*friends)
13194 	= tsubst (TREE_VALUE (*friends), args, complain, in_decl);
13195     }
13196 
13197   if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
13198     {
13199       maybe_retrofit_in_chrg (r);
13200       if (DECL_CONSTRUCTOR_P (r) && !grok_ctor_properties (ctx, r))
13201 	return error_mark_node;
13202       /* If this is an instantiation of a member template, clone it.
13203 	 If it isn't, that'll be handled by
13204 	 clone_constructors_and_destructors.  */
13205       if (PRIMARY_TEMPLATE_P (gen_tmpl))
13206 	clone_function_decl (r, /*update_methods=*/false);
13207     }
13208   else if ((complain & tf_error) != 0
13209 	   && IDENTIFIER_ANY_OP_P (DECL_NAME (r))
13210 	   && !grok_op_properties (r, /*complain=*/true))
13211     return error_mark_node;
13212 
13213   /* Possibly limit visibility based on template args.  */
13214   DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
13215   if (DECL_VISIBILITY_SPECIFIED (t))
13216     {
13217       DECL_VISIBILITY_SPECIFIED (r) = 0;
13218       DECL_ATTRIBUTES (r)
13219 	= remove_attribute ("visibility", DECL_ATTRIBUTES (r));
13220     }
13221   determine_visibility (r);
13222   if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
13223       && !processing_template_decl)
13224     defaulted_late_check (r);
13225 
13226   apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
13227 				  args, complain, in_decl);
13228   return r;
13229 }
13230 
13231 /* Subroutine of tsubst_decl for the case when T is a TEMPLATE_DECL.  */
13232 
13233 static tree
tsubst_template_decl(tree t,tree args,tsubst_flags_t complain,tree lambda_fntype)13234 tsubst_template_decl (tree t, tree args, tsubst_flags_t complain,
13235 		      tree lambda_fntype)
13236 {
13237   /* We can get here when processing a member function template,
13238      member class template, or template template parameter.  */
13239   tree decl = DECL_TEMPLATE_RESULT (t);
13240   tree in_decl = t;
13241   tree spec;
13242   tree tmpl_args;
13243   tree full_args;
13244   tree r;
13245   hashval_t hash = 0;
13246 
13247   if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
13248     {
13249       /* Template template parameter is treated here.  */
13250       tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13251       if (new_type == error_mark_node)
13252 	r = error_mark_node;
13253       /* If we get a real template back, return it.  This can happen in
13254 	 the context of most_specialized_partial_spec.  */
13255       else if (TREE_CODE (new_type) == TEMPLATE_DECL)
13256 	r = new_type;
13257       else
13258 	/* The new TEMPLATE_DECL was built in
13259 	   reduce_template_parm_level.  */
13260 	r = TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (new_type);
13261       return r;
13262     }
13263 
13264   if (!lambda_fntype)
13265     {
13266       /* We might already have an instance of this template.
13267 	 The ARGS are for the surrounding class type, so the
13268 	 full args contain the tsubst'd args for the context,
13269 	 plus the innermost args from the template decl.  */
13270       tmpl_args = DECL_CLASS_TEMPLATE_P (t)
13271 	? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
13272 	: DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
13273       /* Because this is a template, the arguments will still be
13274 	 dependent, even after substitution.  If
13275 	 PROCESSING_TEMPLATE_DECL is not set, the dependency
13276 	 predicates will short-circuit.  */
13277       ++processing_template_decl;
13278       full_args = tsubst_template_args (tmpl_args, args,
13279 					complain, in_decl);
13280       --processing_template_decl;
13281       if (full_args == error_mark_node)
13282 	return error_mark_node;
13283 
13284       /* If this is a default template template argument,
13285 	 tsubst might not have changed anything.  */
13286       if (full_args == tmpl_args)
13287 	return t;
13288 
13289       hash = hash_tmpl_and_args (t, full_args);
13290       spec = retrieve_specialization (t, full_args, hash);
13291       if (spec != NULL_TREE)
13292 	{
13293 	  if (TYPE_P (spec))
13294 	    /* Type partial instantiations are stored as the type by
13295 	       lookup_template_class_1, not here as the template.  */
13296 	    spec = CLASSTYPE_TI_TEMPLATE (spec);
13297 	  return spec;
13298 	}
13299     }
13300 
13301   /* Make a new template decl.  It will be similar to the
13302      original, but will record the current template arguments.
13303      We also create a new function declaration, which is just
13304      like the old one, but points to this new template, rather
13305      than the old one.  */
13306   r = copy_decl (t);
13307   gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
13308   DECL_CHAIN (r) = NULL_TREE;
13309 
13310   // Build new template info linking to the original template decl.
13311   if (!lambda_fntype)
13312     {
13313       DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
13314       SET_DECL_IMPLICIT_INSTANTIATION (r);
13315     }
13316   else
13317     DECL_TEMPLATE_INFO (r) = NULL_TREE;
13318 
13319   /* The template parameters for this new template are all the
13320      template parameters for the old template, except the
13321      outermost level of parameters.  */
13322   DECL_TEMPLATE_PARMS (r)
13323     = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
13324 			     complain);
13325 
13326   if (TREE_CODE (decl) == TYPE_DECL
13327       && !TYPE_DECL_ALIAS_P (decl))
13328     {
13329       tree new_type;
13330       ++processing_template_decl;
13331       new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13332       --processing_template_decl;
13333       if (new_type == error_mark_node)
13334 	return error_mark_node;
13335 
13336       TREE_TYPE (r) = new_type;
13337       /* For a partial specialization, we need to keep pointing to
13338 	 the primary template.  */
13339       if (!DECL_TEMPLATE_SPECIALIZATION (t))
13340 	CLASSTYPE_TI_TEMPLATE (new_type) = r;
13341       DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
13342       DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
13343       DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
13344     }
13345   else
13346     {
13347       tree new_decl;
13348       ++processing_template_decl;
13349       if (TREE_CODE (decl) == FUNCTION_DECL)
13350 	new_decl = tsubst_function_decl (decl, args, complain, lambda_fntype);
13351       else
13352 	new_decl = tsubst (decl, args, complain, in_decl);
13353       --processing_template_decl;
13354       if (new_decl == error_mark_node)
13355 	return error_mark_node;
13356 
13357       DECL_TEMPLATE_RESULT (r) = new_decl;
13358       TREE_TYPE (r) = TREE_TYPE (new_decl);
13359       DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
13360       if (lambda_fntype)
13361 	{
13362 	  tree args = template_parms_to_args (DECL_TEMPLATE_PARMS (r));
13363 	  DECL_TEMPLATE_INFO (new_decl) = build_template_info (r, args);
13364 	}
13365       else
13366 	{
13367 	  DECL_TI_TEMPLATE (new_decl) = r;
13368 	  DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
13369 	}
13370     }
13371 
13372   DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
13373   DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
13374 
13375   if (PRIMARY_TEMPLATE_P (t))
13376     DECL_PRIMARY_TEMPLATE (r) = r;
13377 
13378   if (TREE_CODE (decl) != TYPE_DECL && !VAR_P (decl)
13379       && !lambda_fntype)
13380     /* Record this non-type partial instantiation.  */
13381     register_specialization (r, t,
13382 			     DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
13383 			     false, hash);
13384 
13385   return r;
13386 }
13387 
13388 /* True if FN is the op() for a lambda in an uninstantiated template.  */
13389 
13390 bool
lambda_fn_in_template_p(tree fn)13391 lambda_fn_in_template_p (tree fn)
13392 {
13393   if (!fn || !LAMBDA_FUNCTION_P (fn))
13394     return false;
13395   tree closure = DECL_CONTEXT (fn);
13396   return CLASSTYPE_TEMPLATE_INFO (closure) != NULL_TREE;
13397 }
13398 
13399 /* True if FN is the substitution (via tsubst_lambda_expr) of a function for
13400    which the above is true.  */
13401 
13402 bool
instantiated_lambda_fn_p(tree fn)13403 instantiated_lambda_fn_p (tree fn)
13404 {
13405   if (!fn || !LAMBDA_FUNCTION_P (fn))
13406     return false;
13407   tree closure = DECL_CONTEXT (fn);
13408   tree lam = CLASSTYPE_LAMBDA_EXPR (closure);
13409   return LAMBDA_EXPR_INSTANTIATED (lam);
13410 }
13411 
13412 /* We're instantiating a variable from template function TCTX.  Return the
13413    corresponding current enclosing scope.  This gets complicated because lambda
13414    functions in templates are regenerated rather than instantiated, but generic
13415    lambda functions are subsequently instantiated.  */
13416 
13417 static tree
enclosing_instantiation_of(tree otctx)13418 enclosing_instantiation_of (tree otctx)
13419 {
13420   tree tctx = otctx;
13421   tree fn = current_function_decl;
13422   int lambda_count = 0;
13423 
13424   for (; tctx && (lambda_fn_in_template_p (tctx)
13425 		  || instantiated_lambda_fn_p (tctx));
13426        tctx = decl_function_context (tctx))
13427     ++lambda_count;
13428   for (; fn; fn = decl_function_context (fn))
13429     {
13430       tree ofn = fn;
13431       int flambda_count = 0;
13432       for (; fn && instantiated_lambda_fn_p (fn);
13433 	   fn = decl_function_context (fn))
13434 	++flambda_count;
13435       if ((fn && DECL_TEMPLATE_INFO (fn))
13436 	  ? most_general_template (fn) != most_general_template (tctx)
13437 	  : fn != tctx)
13438 	continue;
13439       if (flambda_count != lambda_count)
13440 	{
13441 	  gcc_assert (flambda_count > lambda_count);
13442 	  for (; flambda_count > lambda_count; --flambda_count)
13443 	    ofn = decl_function_context (ofn);
13444 	}
13445       gcc_assert (DECL_NAME (ofn) == DECL_NAME (otctx)
13446 		  || DECL_CONV_FN_P (ofn));
13447       return ofn;
13448     }
13449   gcc_unreachable ();
13450 }
13451 
13452 /* Substitute the ARGS into the T, which is a _DECL.  Return the
13453    result of the substitution.  Issue error and warning messages under
13454    control of COMPLAIN.  */
13455 
13456 static tree
tsubst_decl(tree t,tree args,tsubst_flags_t complain)13457 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
13458 {
13459 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
13460   location_t saved_loc;
13461   tree r = NULL_TREE;
13462   tree in_decl = t;
13463   hashval_t hash = 0;
13464 
13465   /* Set the filename and linenumber to improve error-reporting.  */
13466   saved_loc = input_location;
13467   input_location = DECL_SOURCE_LOCATION (t);
13468 
13469   switch (TREE_CODE (t))
13470     {
13471     case TEMPLATE_DECL:
13472       r = tsubst_template_decl (t, args, complain, /*lambda*/NULL_TREE);
13473       break;
13474 
13475     case FUNCTION_DECL:
13476       r = tsubst_function_decl (t, args, complain, /*lambda*/NULL_TREE);
13477       break;
13478 
13479     case PARM_DECL:
13480       {
13481 	tree type = NULL_TREE;
13482         int i, len = 1;
13483         tree expanded_types = NULL_TREE;
13484         tree prev_r = NULL_TREE;
13485         tree first_r = NULL_TREE;
13486 
13487         if (DECL_PACK_P (t))
13488           {
13489             /* If there is a local specialization that isn't a
13490                parameter pack, it means that we're doing a "simple"
13491                substitution from inside tsubst_pack_expansion. Just
13492                return the local specialization (which will be a single
13493                parm).  */
13494             tree spec = retrieve_local_specialization (t);
13495             if (spec
13496                 && TREE_CODE (spec) == PARM_DECL
13497                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
13498               RETURN (spec);
13499 
13500             /* Expand the TYPE_PACK_EXPANSION that provides the types for
13501                the parameters in this function parameter pack.  */
13502             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
13503 						    complain, in_decl);
13504             if (TREE_CODE (expanded_types) == TREE_VEC)
13505               {
13506                 len = TREE_VEC_LENGTH (expanded_types);
13507 
13508                 /* Zero-length parameter packs are boring. Just substitute
13509                    into the chain.  */
13510                 if (len == 0)
13511                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
13512 				  TREE_CHAIN (t)));
13513               }
13514             else
13515               {
13516                 /* All we did was update the type. Make a note of that.  */
13517                 type = expanded_types;
13518                 expanded_types = NULL_TREE;
13519               }
13520           }
13521 
13522         /* Loop through all of the parameters we'll build. When T is
13523            a function parameter pack, LEN is the number of expanded
13524            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
13525         r = NULL_TREE;
13526         for (i = 0; i < len; ++i)
13527           {
13528             prev_r = r;
13529             r = copy_node (t);
13530             if (DECL_TEMPLATE_PARM_P (t))
13531               SET_DECL_TEMPLATE_PARM_P (r);
13532 
13533             if (expanded_types)
13534               /* We're on the Ith parameter of the function parameter
13535                  pack.  */
13536               {
13537                 /* Get the Ith type.  */
13538                 type = TREE_VEC_ELT (expanded_types, i);
13539 
13540 		/* Rename the parameter to include the index.  */
13541 		DECL_NAME (r)
13542 		  = make_ith_pack_parameter_name (DECL_NAME (r), i);
13543               }
13544             else if (!type)
13545               /* We're dealing with a normal parameter.  */
13546               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13547 
13548             type = type_decays_to (type);
13549             TREE_TYPE (r) = type;
13550             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
13551 
13552             if (DECL_INITIAL (r))
13553               {
13554                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
13555                   DECL_INITIAL (r) = TREE_TYPE (r);
13556                 else
13557                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
13558                                              complain, in_decl);
13559               }
13560 
13561             DECL_CONTEXT (r) = NULL_TREE;
13562 
13563             if (!DECL_TEMPLATE_PARM_P (r))
13564               DECL_ARG_TYPE (r) = type_passed_as (type);
13565 
13566 	    apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
13567 					    args, complain, in_decl);
13568 
13569             /* Keep track of the first new parameter we
13570                generate. That's what will be returned to the
13571                caller.  */
13572             if (!first_r)
13573               first_r = r;
13574 
13575             /* Build a proper chain of parameters when substituting
13576                into a function parameter pack.  */
13577             if (prev_r)
13578               DECL_CHAIN (prev_r) = r;
13579           }
13580 
13581 	/* If cp_unevaluated_operand is set, we're just looking for a
13582 	   single dummy parameter, so don't keep going.  */
13583 	if (DECL_CHAIN (t) && !cp_unevaluated_operand)
13584 	  DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
13585 				   complain, DECL_CHAIN (t));
13586 
13587         /* FIRST_R contains the start of the chain we've built.  */
13588         r = first_r;
13589       }
13590       break;
13591 
13592     case FIELD_DECL:
13593       {
13594 	tree type = NULL_TREE;
13595 	tree vec = NULL_TREE;
13596 	tree expanded_types = NULL_TREE;
13597 	int len = 1;
13598 
13599 	if (PACK_EXPANSION_P (TREE_TYPE (t)))
13600 	  {
13601 	    /* This field is a lambda capture pack.  Return a TREE_VEC of
13602 	       the expanded fields to instantiate_class_template_1.  */
13603             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
13604 						    complain, in_decl);
13605             if (TREE_CODE (expanded_types) == TREE_VEC)
13606               {
13607                 len = TREE_VEC_LENGTH (expanded_types);
13608 		vec = make_tree_vec (len);
13609               }
13610             else
13611               {
13612                 /* All we did was update the type. Make a note of that.  */
13613                 type = expanded_types;
13614                 expanded_types = NULL_TREE;
13615               }
13616 	  }
13617 
13618 	for (int i = 0; i < len; ++i)
13619 	  {
13620 	    r = copy_decl (t);
13621 	    if (expanded_types)
13622 	      {
13623 		type = TREE_VEC_ELT (expanded_types, i);
13624 		DECL_NAME (r)
13625 		  = make_ith_pack_parameter_name (DECL_NAME (r), i);
13626 	      }
13627             else if (!type)
13628               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13629 
13630 	    if (type == error_mark_node)
13631 	      RETURN (error_mark_node);
13632 	    TREE_TYPE (r) = type;
13633 	    cp_apply_type_quals_to_decl (cp_type_quals (type), r);
13634 
13635 	    if (DECL_C_BIT_FIELD (r))
13636 	      /* For bit-fields, DECL_BIT_FIELD_REPRESENTATIVE gives the
13637 		 number of bits.  */
13638 	      DECL_BIT_FIELD_REPRESENTATIVE (r)
13639 		= tsubst_expr (DECL_BIT_FIELD_REPRESENTATIVE (t), args,
13640 			       complain, in_decl,
13641 			       /*integral_constant_expression_p=*/true);
13642 	    if (DECL_INITIAL (t))
13643 	      {
13644 		/* Set up DECL_TEMPLATE_INFO so that we can get at the
13645 		   NSDMI in perform_member_init.  Still set DECL_INITIAL
13646 		   so that we know there is one.  */
13647 		DECL_INITIAL (r) = void_node;
13648 		gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
13649 		retrofit_lang_decl (r);
13650 		DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
13651 	      }
13652 	    /* We don't have to set DECL_CONTEXT here; it is set by
13653 	       finish_member_declaration.  */
13654 	    DECL_CHAIN (r) = NULL_TREE;
13655 
13656 	    apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
13657 					    args, complain, in_decl);
13658 
13659 	    if (vec)
13660 	      TREE_VEC_ELT (vec, i) = r;
13661 	  }
13662 
13663 	if (vec)
13664 	  r = vec;
13665       }
13666       break;
13667 
13668     case USING_DECL:
13669       /* We reach here only for member using decls.  We also need to check
13670 	 uses_template_parms because DECL_DEPENDENT_P is not set for a
13671 	 using-declaration that designates a member of the current
13672 	 instantiation (c++/53549).  */
13673       if (DECL_DEPENDENT_P (t)
13674 	  || uses_template_parms (USING_DECL_SCOPE (t)))
13675 	{
13676 	  tree scope = USING_DECL_SCOPE (t);
13677 	  tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
13678 	  if (PACK_EXPANSION_P (scope))
13679 	    {
13680 	      tree vec = tsubst_pack_expansion (scope, args, complain, in_decl);
13681 	      int len = TREE_VEC_LENGTH (vec);
13682 	      r = make_tree_vec (len);
13683 	      for (int i = 0; i < len; ++i)
13684 		{
13685 		  tree escope = TREE_VEC_ELT (vec, i);
13686 		  tree elt = do_class_using_decl (escope, name);
13687 		  if (!elt)
13688 		    {
13689 		      r = error_mark_node;
13690 		      break;
13691 		    }
13692 		  else
13693 		    {
13694 		      TREE_PROTECTED (elt) = TREE_PROTECTED (t);
13695 		      TREE_PRIVATE (elt) = TREE_PRIVATE (t);
13696 		    }
13697 		  TREE_VEC_ELT (r, i) = elt;
13698 		}
13699 	    }
13700 	  else
13701 	    {
13702 	      tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
13703 					     complain, in_decl);
13704 	      r = do_class_using_decl (inst_scope, name);
13705 	      if (!r)
13706 		r = error_mark_node;
13707 	      else
13708 		{
13709 		  TREE_PROTECTED (r) = TREE_PROTECTED (t);
13710 		  TREE_PRIVATE (r) = TREE_PRIVATE (t);
13711 		}
13712 	    }
13713 	}
13714       else
13715 	{
13716 	  r = copy_node (t);
13717 	  DECL_CHAIN (r) = NULL_TREE;
13718 	}
13719       break;
13720 
13721     case TYPE_DECL:
13722     case VAR_DECL:
13723       {
13724 	tree argvec = NULL_TREE;
13725 	tree gen_tmpl = NULL_TREE;
13726 	tree spec;
13727 	tree tmpl = NULL_TREE;
13728 	tree ctx;
13729 	tree type = NULL_TREE;
13730 	bool local_p;
13731 
13732 	if (TREE_TYPE (t) == error_mark_node)
13733 	  RETURN (error_mark_node);
13734 
13735 	if (TREE_CODE (t) == TYPE_DECL
13736 	    && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
13737 	  {
13738 	    /* If this is the canonical decl, we don't have to
13739 	       mess with instantiations, and often we can't (for
13740 	       typename, template type parms and such).  Note that
13741 	       TYPE_NAME is not correct for the above test if
13742 	       we've copied the type for a typedef.  */
13743 	    type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13744 	    if (type == error_mark_node)
13745 	      RETURN (error_mark_node);
13746 	    r = TYPE_NAME (type);
13747 	    break;
13748 	  }
13749 
13750 	/* Check to see if we already have the specialization we
13751 	   need.  */
13752 	spec = NULL_TREE;
13753 	if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
13754 	  {
13755 	    /* T is a static data member or namespace-scope entity.
13756 	       We have to substitute into namespace-scope variables
13757 	       (not just variable templates) because of cases like:
13758 
13759 	         template <class T> void f() { extern T t; }
13760 
13761 	       where the entity referenced is not known until
13762 	       instantiation time.  */
13763 	    local_p = false;
13764 	    ctx = DECL_CONTEXT (t);
13765 	    if (DECL_CLASS_SCOPE_P (t))
13766 	      {
13767 		ctx = tsubst_aggr_type (ctx, args,
13768 					complain,
13769 					in_decl, /*entering_scope=*/1);
13770 		/* If CTX is unchanged, then T is in fact the
13771 		   specialization we want.  That situation occurs when
13772 		   referencing a static data member within in its own
13773 		   class.  We can use pointer equality, rather than
13774 		   same_type_p, because DECL_CONTEXT is always
13775 		   canonical...  */
13776 		if (ctx == DECL_CONTEXT (t)
13777 		    /* ... unless T is a member template; in which
13778 		       case our caller can be willing to create a
13779 		       specialization of that template represented
13780 		       by T.  */
13781 		    && !(DECL_TI_TEMPLATE (t)
13782 			 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t))))
13783 		  spec = t;
13784 	      }
13785 
13786 	    if (!spec)
13787 	      {
13788 		tmpl = DECL_TI_TEMPLATE (t);
13789 		gen_tmpl = most_general_template (tmpl);
13790 		argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
13791 		if (argvec != error_mark_node)
13792 		  argvec = (coerce_innermost_template_parms
13793 			    (DECL_TEMPLATE_PARMS (gen_tmpl),
13794 			     argvec, t, complain,
13795 			     /*all*/true, /*defarg*/true));
13796 		if (argvec == error_mark_node)
13797 		  RETURN (error_mark_node);
13798 		hash = hash_tmpl_and_args (gen_tmpl, argvec);
13799 		spec = retrieve_specialization (gen_tmpl, argvec, hash);
13800 	      }
13801 	  }
13802 	else
13803 	  {
13804 	    /* A local variable.  */
13805 	    local_p = true;
13806 	    /* Subsequent calls to pushdecl will fill this in.  */
13807 	    ctx = NULL_TREE;
13808 	    /* Unless this is a reference to a static variable from an
13809 	       enclosing function, in which case we need to fill it in now.  */
13810 	    if (TREE_STATIC (t))
13811 	      {
13812 		tree fn = enclosing_instantiation_of (DECL_CONTEXT (t));
13813 		if (fn != current_function_decl)
13814 		  ctx = fn;
13815 	      }
13816 	    spec = retrieve_local_specialization (t);
13817 	  }
13818 	/* If we already have the specialization we need, there is
13819 	   nothing more to do.  */
13820 	if (spec)
13821 	  {
13822 	    r = spec;
13823 	    break;
13824 	  }
13825 
13826 	/* Create a new node for the specialization we need.  */
13827 	if (type == NULL_TREE)
13828 	  {
13829 	    if (is_typedef_decl (t))
13830 	      type = DECL_ORIGINAL_TYPE (t);
13831 	    else
13832 	      type = TREE_TYPE (t);
13833 	    if (VAR_P (t)
13834 		&& VAR_HAD_UNKNOWN_BOUND (t)
13835 		&& type != error_mark_node)
13836 	      type = strip_array_domain (type);
13837 	    tree sub_args = args;
13838 	    if (tree auto_node = type_uses_auto (type))
13839 	      {
13840 		/* Mask off any template args past the variable's context so we
13841 		   don't replace the auto with an unrelated argument.  */
13842 		int nouter = TEMPLATE_TYPE_LEVEL (auto_node) - 1;
13843 		int extra = TMPL_ARGS_DEPTH (args) - nouter;
13844 		if (extra > 0)
13845 		  /* This should never happen with the new lambda instantiation
13846 		     model, but keep the handling just in case.  */
13847 		  gcc_assert (!CHECKING_P),
13848 		  sub_args = strip_innermost_template_args (args, extra);
13849 	      }
13850 	    type = tsubst (type, sub_args, complain, in_decl);
13851 	    /* Substituting the type might have recursively instantiated this
13852 	       same alias (c++/86171).  */
13853 	    if (gen_tmpl && DECL_ALIAS_TEMPLATE_P (gen_tmpl)
13854 		&& (spec = retrieve_specialization (gen_tmpl, argvec, hash)))
13855 	      {
13856 		r = spec;
13857 		break;
13858 	      }
13859 	  }
13860 	r = copy_decl (t);
13861 	if (VAR_P (r))
13862 	  {
13863 	    DECL_INITIALIZED_P (r) = 0;
13864 	    DECL_TEMPLATE_INSTANTIATED (r) = 0;
13865 	    if (type == error_mark_node)
13866 	      RETURN (error_mark_node);
13867 	    if (TREE_CODE (type) == FUNCTION_TYPE)
13868 	      {
13869 		/* It may seem that this case cannot occur, since:
13870 
13871 		   typedef void f();
13872 		   void g() { f x; }
13873 
13874 		   declares a function, not a variable.  However:
13875 
13876 		   typedef void f();
13877 		   template <typename T> void g() { T t; }
13878 		   template void g<f>();
13879 
13880 		   is an attempt to declare a variable with function
13881 		   type.  */
13882 		error ("variable %qD has function type",
13883 		       /* R is not yet sufficiently initialized, so we
13884 			  just use its name.  */
13885 		       DECL_NAME (r));
13886 		RETURN (error_mark_node);
13887 	      }
13888 	    type = complete_type (type);
13889 	    /* Wait until cp_finish_decl to set this again, to handle
13890 	       circular dependency (template/instantiate6.C). */
13891 	    DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
13892 	    type = check_var_type (DECL_NAME (r), type);
13893 
13894 	    if (DECL_HAS_VALUE_EXPR_P (t))
13895 	      {
13896 		tree ve = DECL_VALUE_EXPR (t);
13897 		ve = tsubst_expr (ve, args, complain, in_decl,
13898 				  /*constant_expression_p=*/false);
13899 		if (REFERENCE_REF_P (ve))
13900 		  {
13901 		    gcc_assert (TYPE_REF_P (type));
13902 		    ve = TREE_OPERAND (ve, 0);
13903 		  }
13904 		SET_DECL_VALUE_EXPR (r, ve);
13905 	      }
13906 	    if (CP_DECL_THREAD_LOCAL_P (r)
13907 		&& !processing_template_decl)
13908 	      set_decl_tls_model (r, decl_default_tls_model (r));
13909 	  }
13910 	else if (DECL_SELF_REFERENCE_P (t))
13911 	  SET_DECL_SELF_REFERENCE_P (r);
13912 	TREE_TYPE (r) = type;
13913 	cp_apply_type_quals_to_decl (cp_type_quals (type), r);
13914 	DECL_CONTEXT (r) = ctx;
13915 	/* Clear out the mangled name and RTL for the instantiation.  */
13916 	SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
13917 	if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
13918 	  SET_DECL_RTL (r, NULL);
13919 	/* The initializer must not be expanded until it is required;
13920 	   see [temp.inst].  */
13921 	DECL_INITIAL (r) = NULL_TREE;
13922 	DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
13923 	if (VAR_P (r))
13924 	  {
13925 	    if (DECL_LANG_SPECIFIC (r))
13926 	      SET_DECL_DEPENDENT_INIT_P (r, false);
13927 
13928 	    SET_DECL_MODE (r, VOIDmode);
13929 
13930 	    /* Possibly limit visibility based on template args.  */
13931 	    DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
13932 	    if (DECL_VISIBILITY_SPECIFIED (t))
13933 	      {
13934 		DECL_VISIBILITY_SPECIFIED (r) = 0;
13935 		DECL_ATTRIBUTES (r)
13936 		  = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
13937 	      }
13938 	    determine_visibility (r);
13939 	  }
13940 
13941 	if (!local_p)
13942 	  {
13943 	    /* A static data member declaration is always marked
13944 	       external when it is declared in-class, even if an
13945 	       initializer is present.  We mimic the non-template
13946 	       processing here.  */
13947 	    DECL_EXTERNAL (r) = 1;
13948 	    if (DECL_NAMESPACE_SCOPE_P (t))
13949 	      DECL_NOT_REALLY_EXTERN (r) = 1;
13950 
13951 	    DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
13952 	    SET_DECL_IMPLICIT_INSTANTIATION (r);
13953 	    if (!error_operand_p (r) || (complain & tf_error))
13954 	      register_specialization (r, gen_tmpl, argvec, false, hash);
13955 	  }
13956 	else
13957 	  {
13958 	    if (DECL_LANG_SPECIFIC (r))
13959 	      DECL_TEMPLATE_INFO (r) = NULL_TREE;
13960 	    if (!cp_unevaluated_operand)
13961 	      register_local_specialization (r, t);
13962 	  }
13963 
13964 	DECL_CHAIN (r) = NULL_TREE;
13965 
13966 	apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
13967 					/*flags=*/0,
13968 					args, complain, in_decl);
13969 
13970 	/* Preserve a typedef that names a type.  */
13971 	if (is_typedef_decl (r) && type != error_mark_node)
13972 	  {
13973 	    DECL_ORIGINAL_TYPE (r) = NULL_TREE;
13974 	    set_underlying_type (r);
13975 	    if (TYPE_DECL_ALIAS_P (r))
13976 	      /* An alias template specialization can be dependent
13977 		 even if its underlying type is not.  */
13978 	      TYPE_DEPENDENT_P_VALID (TREE_TYPE (r)) = false;
13979 	  }
13980 
13981 	layout_decl (r, 0);
13982       }
13983       break;
13984 
13985     default:
13986       gcc_unreachable ();
13987     }
13988 #undef RETURN
13989 
13990  out:
13991   /* Restore the file and line information.  */
13992   input_location = saved_loc;
13993 
13994   return r;
13995 }
13996 
13997 /* Substitute into the ARG_TYPES of a function type.
13998    If END is a TREE_CHAIN, leave it and any following types
13999    un-substituted.  */
14000 
14001 static tree
tsubst_arg_types(tree arg_types,tree args,tree end,tsubst_flags_t complain,tree in_decl)14002 tsubst_arg_types (tree arg_types,
14003 		  tree args,
14004 		  tree end,
14005 		  tsubst_flags_t complain,
14006 		  tree in_decl)
14007 {
14008   tree remaining_arg_types;
14009   tree type = NULL_TREE;
14010   int i = 1;
14011   tree expanded_args = NULL_TREE;
14012   tree default_arg;
14013 
14014   if (!arg_types || arg_types == void_list_node || arg_types == end)
14015     return arg_types;
14016 
14017   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
14018 					  args, end, complain, in_decl);
14019   if (remaining_arg_types == error_mark_node)
14020     return error_mark_node;
14021 
14022   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
14023     {
14024       /* For a pack expansion, perform substitution on the
14025          entire expression. Later on, we'll handle the arguments
14026          one-by-one.  */
14027       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
14028                                             args, complain, in_decl);
14029 
14030       if (TREE_CODE (expanded_args) == TREE_VEC)
14031         /* So that we'll spin through the parameters, one by one.  */
14032         i = TREE_VEC_LENGTH (expanded_args);
14033       else
14034         {
14035           /* We only partially substituted into the parameter
14036              pack. Our type is TYPE_PACK_EXPANSION.  */
14037           type = expanded_args;
14038           expanded_args = NULL_TREE;
14039         }
14040     }
14041 
14042   while (i > 0) {
14043     --i;
14044 
14045     if (expanded_args)
14046       type = TREE_VEC_ELT (expanded_args, i);
14047     else if (!type)
14048       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
14049 
14050     if (type == error_mark_node)
14051       return error_mark_node;
14052     if (VOID_TYPE_P (type))
14053       {
14054         if (complain & tf_error)
14055           {
14056             error ("invalid parameter type %qT", type);
14057             if (in_decl)
14058               error ("in declaration %q+D", in_decl);
14059           }
14060         return error_mark_node;
14061     }
14062     /* DR 657. */
14063     if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
14064       return error_mark_node;
14065 
14066     /* Do array-to-pointer, function-to-pointer conversion, and ignore
14067        top-level qualifiers as required.  */
14068     type = cv_unqualified (type_decays_to (type));
14069 
14070     /* We do not substitute into default arguments here.  The standard
14071        mandates that they be instantiated only when needed, which is
14072        done in build_over_call.  */
14073     default_arg = TREE_PURPOSE (arg_types);
14074 
14075     /* Except that we do substitute default arguments under tsubst_lambda_expr,
14076        since the new op() won't have any associated template arguments for us
14077        to refer to later.  */
14078     if (lambda_fn_in_template_p (in_decl))
14079       default_arg = tsubst_copy_and_build (default_arg, args, complain, in_decl,
14080 					   false/*fn*/, false/*constexpr*/);
14081 
14082     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
14083       {
14084         /* We've instantiated a template before its default arguments
14085            have been parsed.  This can happen for a nested template
14086            class, and is not an error unless we require the default
14087            argument in a call of this function.  */
14088         remaining_arg_types =
14089           tree_cons (default_arg, type, remaining_arg_types);
14090         vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
14091       }
14092     else
14093       remaining_arg_types =
14094         hash_tree_cons (default_arg, type, remaining_arg_types);
14095   }
14096 
14097   return remaining_arg_types;
14098 }
14099 
14100 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
14101    *not* handle the exception-specification for FNTYPE, because the
14102    initial substitution of explicitly provided template parameters
14103    during argument deduction forbids substitution into the
14104    exception-specification:
14105 
14106      [temp.deduct]
14107 
14108      All references in the function type of the function template to  the
14109      corresponding template parameters are replaced by the specified tem-
14110      plate argument values.  If a substitution in a template parameter or
14111      in  the function type of the function template results in an invalid
14112      type, type deduction fails.  [Note: The equivalent  substitution  in
14113      exception specifications is done only when the function is instanti-
14114      ated, at which point a program is  ill-formed  if  the  substitution
14115      results in an invalid type.]  */
14116 
14117 static tree
tsubst_function_type(tree t,tree args,tsubst_flags_t complain,tree in_decl)14118 tsubst_function_type (tree t,
14119 		      tree args,
14120 		      tsubst_flags_t complain,
14121 		      tree in_decl)
14122 {
14123   tree return_type;
14124   tree arg_types = NULL_TREE;
14125   tree fntype;
14126 
14127   /* The TYPE_CONTEXT is not used for function/method types.  */
14128   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
14129 
14130   /* DR 1227: Mixing immediate and non-immediate contexts in deduction
14131      failure.  */
14132   bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
14133 
14134   if (late_return_type_p)
14135     {
14136       /* Substitute the argument types.  */
14137       arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
14138 				    complain, in_decl);
14139       if (arg_types == error_mark_node)
14140 	return error_mark_node;
14141 
14142       tree save_ccp = current_class_ptr;
14143       tree save_ccr = current_class_ref;
14144       tree this_type = (TREE_CODE (t) == METHOD_TYPE
14145 			? TREE_TYPE (TREE_VALUE (arg_types)) : NULL_TREE);
14146       bool do_inject = this_type && CLASS_TYPE_P (this_type);
14147       if (do_inject)
14148 	{
14149 	  /* DR 1207: 'this' is in scope in the trailing return type.  */
14150 	  inject_this_parameter (this_type, cp_type_quals (this_type));
14151 	}
14152 
14153       /* Substitute the return type.  */
14154       return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14155 
14156       if (do_inject)
14157 	{
14158 	  current_class_ptr = save_ccp;
14159 	  current_class_ref = save_ccr;
14160 	}
14161     }
14162   else
14163     /* Substitute the return type.  */
14164     return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14165 
14166   if (return_type == error_mark_node)
14167     return error_mark_node;
14168   /* DR 486 clarifies that creation of a function type with an
14169      invalid return type is a deduction failure.  */
14170   if (TREE_CODE (return_type) == ARRAY_TYPE
14171       || TREE_CODE (return_type) == FUNCTION_TYPE)
14172     {
14173       if (complain & tf_error)
14174 	{
14175 	  if (TREE_CODE (return_type) == ARRAY_TYPE)
14176 	    error ("function returning an array");
14177 	  else
14178 	    error ("function returning a function");
14179 	}
14180       return error_mark_node;
14181     }
14182   /* And DR 657. */
14183   if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
14184     return error_mark_node;
14185 
14186   if (!late_return_type_p)
14187     {
14188       /* Substitute the argument types.  */
14189       arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
14190 				    complain, in_decl);
14191       if (arg_types == error_mark_node)
14192 	return error_mark_node;
14193     }
14194 
14195   /* Construct a new type node and return it.  */
14196   if (TREE_CODE (t) == FUNCTION_TYPE)
14197     {
14198       fntype = build_function_type (return_type, arg_types);
14199       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
14200     }
14201   else
14202     {
14203       tree r = TREE_TYPE (TREE_VALUE (arg_types));
14204       /* Don't pick up extra function qualifiers from the basetype.  */
14205       r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
14206       if (! MAYBE_CLASS_TYPE_P (r))
14207 	{
14208 	  /* [temp.deduct]
14209 
14210 	     Type deduction may fail for any of the following
14211 	     reasons:
14212 
14213 	     -- Attempting to create "pointer to member of T" when T
14214 	     is not a class type.  */
14215 	  if (complain & tf_error)
14216 	    error ("creating pointer to member function of non-class type %qT",
14217 		      r);
14218 	  return error_mark_node;
14219 	}
14220 
14221       fntype = build_method_type_directly (r, return_type,
14222 					   TREE_CHAIN (arg_types));
14223     }
14224   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
14225 
14226   /* See comment above.  */
14227   tree raises = NULL_TREE;
14228   cp_ref_qualifier rqual = type_memfn_rqual (t);
14229   fntype = build_cp_fntype_variant (fntype, rqual, raises, late_return_type_p);
14230 
14231   return fntype;
14232 }
14233 
14234 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
14235    ARGS into that specification, and return the substituted
14236    specification.  If there is no specification, return NULL_TREE.  */
14237 
14238 static tree
tsubst_exception_specification(tree fntype,tree args,tsubst_flags_t complain,tree in_decl,bool defer_ok)14239 tsubst_exception_specification (tree fntype,
14240 				tree args,
14241 				tsubst_flags_t complain,
14242 				tree in_decl,
14243 				bool defer_ok)
14244 {
14245   tree specs;
14246   tree new_specs;
14247 
14248   specs = TYPE_RAISES_EXCEPTIONS (fntype);
14249   new_specs = NULL_TREE;
14250   if (specs && TREE_PURPOSE (specs))
14251     {
14252       /* A noexcept-specifier.  */
14253       tree expr = TREE_PURPOSE (specs);
14254       if (TREE_CODE (expr) == INTEGER_CST)
14255 	new_specs = expr;
14256       else if (defer_ok)
14257 	{
14258 	  /* Defer instantiation of noexcept-specifiers to avoid
14259 	     excessive instantiations (c++/49107).  */
14260 	  new_specs = make_node (DEFERRED_NOEXCEPT);
14261 	  if (DEFERRED_NOEXCEPT_SPEC_P (specs))
14262 	    {
14263 	      /* We already partially instantiated this member template,
14264 		 so combine the new args with the old.  */
14265 	      DEFERRED_NOEXCEPT_PATTERN (new_specs)
14266 		= DEFERRED_NOEXCEPT_PATTERN (expr);
14267 	      DEFERRED_NOEXCEPT_ARGS (new_specs)
14268 		= add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
14269 	    }
14270 	  else
14271 	    {
14272 	      DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
14273 	      DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
14274 	    }
14275 	}
14276       else
14277 	{
14278 	  if (DEFERRED_NOEXCEPT_SPEC_P (specs))
14279 	    {
14280 	      args = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr),
14281 					   args);
14282 	      expr = DEFERRED_NOEXCEPT_PATTERN (expr);
14283 	    }
14284 	  new_specs = tsubst_copy_and_build
14285 	    (expr, args, complain, in_decl, /*function_p=*/false,
14286 	     /*integral_constant_expression_p=*/true);
14287 	}
14288       new_specs = build_noexcept_spec (new_specs, complain);
14289     }
14290   else if (specs)
14291     {
14292       if (! TREE_VALUE (specs))
14293 	new_specs = specs;
14294       else
14295 	while (specs)
14296 	  {
14297 	    tree spec;
14298             int i, len = 1;
14299             tree expanded_specs = NULL_TREE;
14300 
14301             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
14302               {
14303                 /* Expand the pack expansion type.  */
14304                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
14305                                                        args, complain,
14306                                                        in_decl);
14307 
14308 		if (expanded_specs == error_mark_node)
14309 		  return error_mark_node;
14310 		else if (TREE_CODE (expanded_specs) == TREE_VEC)
14311 		  len = TREE_VEC_LENGTH (expanded_specs);
14312 		else
14313 		  {
14314 		    /* We're substituting into a member template, so
14315 		       we got a TYPE_PACK_EXPANSION back.  Add that
14316 		       expansion and move on.  */
14317 		    gcc_assert (TREE_CODE (expanded_specs)
14318 				== TYPE_PACK_EXPANSION);
14319 		    new_specs = add_exception_specifier (new_specs,
14320 							 expanded_specs,
14321 							 complain);
14322 		    specs = TREE_CHAIN (specs);
14323 		    continue;
14324 		  }
14325               }
14326 
14327             for (i = 0; i < len; ++i)
14328               {
14329                 if (expanded_specs)
14330                   spec = TREE_VEC_ELT (expanded_specs, i);
14331                 else
14332                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
14333                 if (spec == error_mark_node)
14334                   return spec;
14335                 new_specs = add_exception_specifier (new_specs, spec,
14336                                                      complain);
14337               }
14338 
14339             specs = TREE_CHAIN (specs);
14340 	  }
14341     }
14342   return new_specs;
14343 }
14344 
14345 /* Take the tree structure T and replace template parameters used
14346    therein with the argument vector ARGS.  IN_DECL is an associated
14347    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
14348    Issue error and warning messages under control of COMPLAIN.  Note
14349    that we must be relatively non-tolerant of extensions here, in
14350    order to preserve conformance; if we allow substitutions that
14351    should not be allowed, we may allow argument deductions that should
14352    not succeed, and therefore report ambiguous overload situations
14353    where there are none.  In theory, we could allow the substitution,
14354    but indicate that it should have failed, and allow our caller to
14355    make sure that the right thing happens, but we don't try to do this
14356    yet.
14357 
14358    This function is used for dealing with types, decls and the like;
14359    for expressions, use tsubst_expr or tsubst_copy.  */
14360 
14361 tree
tsubst(tree t,tree args,tsubst_flags_t complain,tree in_decl)14362 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
14363 {
14364   enum tree_code code;
14365   tree type, r = NULL_TREE;
14366 
14367   if (t == NULL_TREE || t == error_mark_node
14368       || t == integer_type_node
14369       || t == void_type_node
14370       || t == char_type_node
14371       || t == unknown_type_node
14372       || TREE_CODE (t) == NAMESPACE_DECL
14373       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
14374     return t;
14375 
14376   if (DECL_P (t))
14377     return tsubst_decl (t, args, complain);
14378 
14379   if (args == NULL_TREE)
14380     return t;
14381 
14382   code = TREE_CODE (t);
14383 
14384   if (code == IDENTIFIER_NODE)
14385     type = IDENTIFIER_TYPE_VALUE (t);
14386   else
14387     type = TREE_TYPE (t);
14388 
14389   gcc_assert (type != unknown_type_node);
14390 
14391   /* Reuse typedefs.  We need to do this to handle dependent attributes,
14392      such as attribute aligned.  */
14393   if (TYPE_P (t)
14394       && typedef_variant_p (t))
14395     {
14396       tree decl = TYPE_NAME (t);
14397 
14398       if (alias_template_specialization_p (t))
14399 	{
14400 	  /* DECL represents an alias template and we want to
14401 	     instantiate it.  */
14402 	  tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14403 	  tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
14404 	  r = instantiate_alias_template (tmpl, gen_args, complain);
14405 	}
14406       else if (DECL_CLASS_SCOPE_P (decl)
14407 	       && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
14408 	       && uses_template_parms (DECL_CONTEXT (decl)))
14409 	{
14410 	  tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14411 	  tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
14412 	  r = retrieve_specialization (tmpl, gen_args, 0);
14413 	}
14414       else if (DECL_FUNCTION_SCOPE_P (decl)
14415 	       && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
14416 	       && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
14417 	r = retrieve_local_specialization (decl);
14418       else
14419 	/* The typedef is from a non-template context.  */
14420 	return t;
14421 
14422       if (r)
14423 	{
14424 	  r = TREE_TYPE (r);
14425 	  r = cp_build_qualified_type_real
14426 	    (r, cp_type_quals (t) | cp_type_quals (r),
14427 	     complain | tf_ignore_bad_quals);
14428 	  return r;
14429 	}
14430       else
14431 	{
14432 	  /* We don't have an instantiation yet, so drop the typedef.  */
14433 	  int quals = cp_type_quals (t);
14434 	  t = DECL_ORIGINAL_TYPE (decl);
14435 	  t = cp_build_qualified_type_real (t, quals,
14436 					    complain | tf_ignore_bad_quals);
14437 	}
14438     }
14439 
14440   bool fndecl_type = (complain & tf_fndecl_type);
14441   complain &= ~tf_fndecl_type;
14442 
14443   if (type
14444       && code != TYPENAME_TYPE
14445       && code != TEMPLATE_TYPE_PARM
14446       && code != TEMPLATE_PARM_INDEX
14447       && code != IDENTIFIER_NODE
14448       && code != FUNCTION_TYPE
14449       && code != METHOD_TYPE)
14450     type = tsubst (type, args, complain, in_decl);
14451   if (type == error_mark_node)
14452     return error_mark_node;
14453 
14454   switch (code)
14455     {
14456     case RECORD_TYPE:
14457     case UNION_TYPE:
14458     case ENUMERAL_TYPE:
14459       return tsubst_aggr_type (t, args, complain, in_decl,
14460 			       /*entering_scope=*/0);
14461 
14462     case ERROR_MARK:
14463     case IDENTIFIER_NODE:
14464     case VOID_TYPE:
14465     case REAL_TYPE:
14466     case COMPLEX_TYPE:
14467     case VECTOR_TYPE:
14468     case BOOLEAN_TYPE:
14469     case NULLPTR_TYPE:
14470     case LANG_TYPE:
14471       return t;
14472 
14473     case INTEGER_TYPE:
14474       if (t == integer_type_node)
14475 	return t;
14476 
14477       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
14478           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
14479         return t;
14480 
14481       {
14482 	tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
14483 
14484 	max = tsubst_expr (omax, args, complain, in_decl,
14485 			   /*integral_constant_expression_p=*/false);
14486 
14487 	/* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
14488 	   needed.  */
14489 	if (TREE_CODE (max) == NOP_EXPR
14490 	    && TREE_SIDE_EFFECTS (omax)
14491 	    && !TREE_TYPE (max))
14492 	  TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
14493 
14494 	/* If we're in a partial instantiation, preserve the magic NOP_EXPR
14495 	   with TREE_SIDE_EFFECTS that indicates this is not an integral
14496 	   constant expression.  */
14497 	if (processing_template_decl
14498 	    && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
14499 	  {
14500 	    gcc_assert (TREE_CODE (max) == NOP_EXPR);
14501 	    TREE_SIDE_EFFECTS (max) = 1;
14502 	  }
14503 
14504 	return compute_array_index_type (NULL_TREE, max, complain);
14505       }
14506 
14507     case TEMPLATE_TYPE_PARM:
14508     case TEMPLATE_TEMPLATE_PARM:
14509     case BOUND_TEMPLATE_TEMPLATE_PARM:
14510     case TEMPLATE_PARM_INDEX:
14511       {
14512 	int idx;
14513 	int level;
14514 	int levels;
14515 	tree arg = NULL_TREE;
14516 
14517 	/* Early in template argument deduction substitution, we don't
14518 	   want to reduce the level of 'auto', or it will be confused
14519 	   with a normal template parm in subsequent deduction.  */
14520 	if (is_auto (t) && (complain & tf_partial))
14521 	  return t;
14522 
14523 	r = NULL_TREE;
14524 
14525 	gcc_assert (TREE_VEC_LENGTH (args) > 0);
14526 	template_parm_level_and_index (t, &level, &idx);
14527 
14528 	levels = TMPL_ARGS_DEPTH (args);
14529 	if (level <= levels
14530 	    && TREE_VEC_LENGTH (TMPL_ARGS_LEVEL (args, level)) > 0)
14531 	  {
14532 	    arg = TMPL_ARG (args, level, idx);
14533 
14534 	    /* See through ARGUMENT_PACK_SELECT arguments. */
14535 	    if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
14536 	      arg = argument_pack_select_arg (arg);
14537 	  }
14538 
14539 	if (arg == error_mark_node)
14540 	  return error_mark_node;
14541 	else if (arg != NULL_TREE)
14542 	  {
14543 	    if (ARGUMENT_PACK_P (arg))
14544 	      /* If ARG is an argument pack, we don't actually want to
14545 		 perform a substitution here, because substitutions
14546 		 for argument packs are only done
14547 		 element-by-element. We can get to this point when
14548 		 substituting the type of a non-type template
14549 		 parameter pack, when that type actually contains
14550 		 template parameter packs from an outer template, e.g.,
14551 
14552 	         template<typename... Types> struct A {
14553 		   template<Types... Values> struct B { };
14554                  };  */
14555 	      return t;
14556 
14557 	    if (code == TEMPLATE_TYPE_PARM)
14558 	      {
14559 		int quals;
14560 		gcc_assert (TYPE_P (arg));
14561 
14562 		quals = cp_type_quals (arg) | cp_type_quals (t);
14563 
14564 		return cp_build_qualified_type_real
14565 		  (arg, quals, complain | tf_ignore_bad_quals);
14566 	      }
14567 	    else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
14568 	      {
14569 		/* We are processing a type constructed from a
14570 		   template template parameter.  */
14571 		tree argvec = tsubst (TYPE_TI_ARGS (t),
14572 				      args, complain, in_decl);
14573 		if (argvec == error_mark_node)
14574 		  return error_mark_node;
14575 
14576 		gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
14577 			    || TREE_CODE (arg) == TEMPLATE_DECL
14578 			    || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
14579 
14580 		if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
14581 		  /* Consider this code:
14582 
14583 			template <template <class> class Template>
14584 			struct Internal {
14585 			template <class Arg> using Bind = Template<Arg>;
14586 			};
14587 
14588 			template <template <class> class Template, class Arg>
14589 			using Instantiate = Template<Arg>; //#0
14590 
14591 			template <template <class> class Template,
14592                                   class Argument>
14593 			using Bind =
14594 			  Instantiate<Internal<Template>::template Bind,
14595 				      Argument>; //#1
14596 
14597 		     When #1 is parsed, the
14598 		     BOUND_TEMPLATE_TEMPLATE_PARM representing the
14599 		     parameter `Template' in #0 matches the
14600 		     UNBOUND_CLASS_TEMPLATE representing the argument
14601 		     `Internal<Template>::template Bind'; We then want
14602 		     to assemble the type `Bind<Argument>' that can't
14603 		     be fully created right now, because
14604 		     `Internal<Template>' not being complete, the Bind
14605 		     template cannot be looked up in that context.  So
14606 		     we need to "store" `Bind<Argument>' for later
14607 		     when the context of Bind becomes complete.  Let's
14608 		     store that in a TYPENAME_TYPE.  */
14609 		  return make_typename_type (TYPE_CONTEXT (arg),
14610 					     build_nt (TEMPLATE_ID_EXPR,
14611 						       TYPE_IDENTIFIER (arg),
14612 						       argvec),
14613 					     typename_type,
14614 					     complain);
14615 
14616 		/* We can get a TEMPLATE_TEMPLATE_PARM here when we
14617 		   are resolving nested-types in the signature of a
14618 		   member function templates.  Otherwise ARG is a
14619 		   TEMPLATE_DECL and is the real template to be
14620 		   instantiated.  */
14621 		if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
14622 		  arg = TYPE_NAME (arg);
14623 
14624 		r = lookup_template_class (arg,
14625 					   argvec, in_decl,
14626 					   DECL_CONTEXT (arg),
14627 					    /*entering_scope=*/0,
14628 					   complain);
14629 		return cp_build_qualified_type_real
14630 		  (r, cp_type_quals (t) | cp_type_quals (r), complain);
14631 	      }
14632 	    else if (code == TEMPLATE_TEMPLATE_PARM)
14633 	      return arg;
14634 	    else
14635 	      /* TEMPLATE_PARM_INDEX.  */
14636 	      return convert_from_reference (unshare_expr (arg));
14637 	  }
14638 
14639 	if (level == 1)
14640 	  /* This can happen during the attempted tsubst'ing in
14641 	     unify.  This means that we don't yet have any information
14642 	     about the template parameter in question.  */
14643 	  return t;
14644 
14645 	/* If we get here, we must have been looking at a parm for a
14646 	   more deeply nested template.  Make a new version of this
14647 	   template parameter, but with a lower level.  */
14648 	switch (code)
14649 	  {
14650 	  case TEMPLATE_TYPE_PARM:
14651 	  case TEMPLATE_TEMPLATE_PARM:
14652 	  case BOUND_TEMPLATE_TEMPLATE_PARM:
14653 	    if (cp_type_quals (t))
14654 	      {
14655 		r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
14656 		r = cp_build_qualified_type_real
14657 		  (r, cp_type_quals (t),
14658 		   complain | (code == TEMPLATE_TYPE_PARM
14659 			       ? tf_ignore_bad_quals : 0));
14660 	      }
14661 	    else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
14662 		     && PLACEHOLDER_TYPE_CONSTRAINTS (t)
14663 		     && (r = (TEMPLATE_PARM_DESCENDANTS
14664 			      (TEMPLATE_TYPE_PARM_INDEX (t))))
14665 		     && (r = TREE_TYPE (r))
14666 		     && !PLACEHOLDER_TYPE_CONSTRAINTS (r))
14667 	      /* Break infinite recursion when substituting the constraints
14668 		 of a constrained placeholder.  */;
14669 	    else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
14670 		     && !PLACEHOLDER_TYPE_CONSTRAINTS (t)
14671 		     && !CLASS_PLACEHOLDER_TEMPLATE (t)
14672 		     && (arg = TEMPLATE_TYPE_PARM_INDEX (t),
14673 			 r = TEMPLATE_PARM_DESCENDANTS (arg))
14674 		     && (TEMPLATE_PARM_LEVEL (r)
14675 			 == TEMPLATE_PARM_LEVEL (arg) - levels))
14676 		/* Cache the simple case of lowering a type parameter.  */
14677 	      r = TREE_TYPE (r);
14678 	    else
14679 	      {
14680 		r = copy_type (t);
14681 		TEMPLATE_TYPE_PARM_INDEX (r)
14682 		  = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
14683 						r, levels, args, complain);
14684 		TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
14685 		TYPE_MAIN_VARIANT (r) = r;
14686 		TYPE_POINTER_TO (r) = NULL_TREE;
14687 		TYPE_REFERENCE_TO (r) = NULL_TREE;
14688 
14689                 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
14690 		  {
14691 		    /* Propagate constraints on placeholders.  */
14692 		    if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (t))
14693 		      PLACEHOLDER_TYPE_CONSTRAINTS (r)
14694 			= tsubst_constraint (constr, args, complain, in_decl);
14695 		    else if (tree pl = CLASS_PLACEHOLDER_TEMPLATE (t))
14696 		      {
14697 			pl = tsubst_copy (pl, args, complain, in_decl);
14698 			CLASS_PLACEHOLDER_TEMPLATE (r) = pl;
14699 		      }
14700 		  }
14701 
14702 		if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
14703 		  /* We have reduced the level of the template
14704 		     template parameter, but not the levels of its
14705 		     template parameters, so canonical_type_parameter
14706 		     will not be able to find the canonical template
14707 		     template parameter for this level. Thus, we
14708 		     require structural equality checking to compare
14709 		     TEMPLATE_TEMPLATE_PARMs. */
14710 		  SET_TYPE_STRUCTURAL_EQUALITY (r);
14711 		else if (TYPE_STRUCTURAL_EQUALITY_P (t))
14712 		  SET_TYPE_STRUCTURAL_EQUALITY (r);
14713 		else
14714 		  TYPE_CANONICAL (r) = canonical_type_parameter (r);
14715 
14716 		if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
14717 		  {
14718 		    tree tinfo = TYPE_TEMPLATE_INFO (t);
14719 		    /* We might need to substitute into the types of non-type
14720 		       template parameters.  */
14721 		    tree tmpl = tsubst (TI_TEMPLATE (tinfo), args,
14722 					complain, in_decl);
14723 		    if (tmpl == error_mark_node)
14724 		      return error_mark_node;
14725 		    tree argvec = tsubst (TI_ARGS (tinfo), args,
14726 					  complain, in_decl);
14727 		    if (argvec == error_mark_node)
14728 		      return error_mark_node;
14729 
14730 		    TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
14731 		      = build_template_info (tmpl, argvec);
14732 		  }
14733 	      }
14734 	    break;
14735 
14736 	  case TEMPLATE_PARM_INDEX:
14737 	    /* OK, now substitute the type of the non-type parameter.  We
14738 	       couldn't do it earlier because it might be an auto parameter,
14739 	       and we wouldn't need to if we had an argument.  */
14740 	    type = tsubst (type, args, complain, in_decl);
14741 	    if (type == error_mark_node)
14742 	      return error_mark_node;
14743 	    r = reduce_template_parm_level (t, type, levels, args, complain);
14744 	    break;
14745 
14746 	  default:
14747 	    gcc_unreachable ();
14748 	  }
14749 
14750 	return r;
14751       }
14752 
14753     case TREE_LIST:
14754       {
14755 	tree purpose, value, chain;
14756 
14757 	if (t == void_list_node)
14758 	  return t;
14759 
14760 	purpose = TREE_PURPOSE (t);
14761 	if (purpose)
14762 	  {
14763 	    purpose = tsubst (purpose, args, complain, in_decl);
14764 	    if (purpose == error_mark_node)
14765 	      return error_mark_node;
14766 	  }
14767 	value = TREE_VALUE (t);
14768 	if (value)
14769 	  {
14770 	    value = tsubst (value, args, complain, in_decl);
14771 	    if (value == error_mark_node)
14772 	      return error_mark_node;
14773 	  }
14774 	chain = TREE_CHAIN (t);
14775 	if (chain && chain != void_type_node)
14776 	  {
14777 	    chain = tsubst (chain, args, complain, in_decl);
14778 	    if (chain == error_mark_node)
14779 	      return error_mark_node;
14780 	  }
14781 	if (purpose == TREE_PURPOSE (t)
14782 	    && value == TREE_VALUE (t)
14783 	    && chain == TREE_CHAIN (t))
14784 	  return t;
14785 	return hash_tree_cons (purpose, value, chain);
14786       }
14787 
14788     case TREE_BINFO:
14789       /* We should never be tsubsting a binfo.  */
14790       gcc_unreachable ();
14791 
14792     case TREE_VEC:
14793       /* A vector of template arguments.  */
14794       gcc_assert (!type);
14795       return tsubst_template_args (t, args, complain, in_decl);
14796 
14797     case POINTER_TYPE:
14798     case REFERENCE_TYPE:
14799       {
14800 	if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
14801 	  return t;
14802 
14803 	/* [temp.deduct]
14804 
14805 	   Type deduction may fail for any of the following
14806 	   reasons:
14807 
14808 	   -- Attempting to create a pointer to reference type.
14809 	   -- Attempting to create a reference to a reference type or
14810 	      a reference to void.
14811 
14812 	  Core issue 106 says that creating a reference to a reference
14813 	  during instantiation is no longer a cause for failure. We
14814 	  only enforce this check in strict C++98 mode.  */
14815 	if ((TYPE_REF_P (type)
14816 	     && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
14817 	    || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
14818 	  {
14819 	    static location_t last_loc;
14820 
14821 	    /* We keep track of the last time we issued this error
14822 	       message to avoid spewing a ton of messages during a
14823 	       single bad template instantiation.  */
14824 	    if (complain & tf_error
14825 		&& last_loc != input_location)
14826 	      {
14827 		if (VOID_TYPE_P (type))
14828 		  error ("forming reference to void");
14829                else if (code == POINTER_TYPE)
14830                  error ("forming pointer to reference type %qT", type);
14831                else
14832 		  error ("forming reference to reference type %qT", type);
14833 		last_loc = input_location;
14834 	      }
14835 
14836 	    return error_mark_node;
14837 	  }
14838 	else if (TREE_CODE (type) == FUNCTION_TYPE
14839 		 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
14840 		     || type_memfn_rqual (type) != REF_QUAL_NONE))
14841 	  {
14842 	    if (complain & tf_error)
14843 	      {
14844 		if (code == POINTER_TYPE)
14845 		  error ("forming pointer to qualified function type %qT",
14846 			 type);
14847 		else
14848 		  error ("forming reference to qualified function type %qT",
14849 			 type);
14850 	      }
14851 	    return error_mark_node;
14852 	  }
14853 	else if (code == POINTER_TYPE)
14854 	  {
14855 	    r = build_pointer_type (type);
14856 	    if (TREE_CODE (type) == METHOD_TYPE)
14857 	      r = build_ptrmemfunc_type (r);
14858 	  }
14859 	else if (TYPE_REF_P (type))
14860 	  /* In C++0x, during template argument substitution, when there is an
14861 	     attempt to create a reference to a reference type, reference
14862 	     collapsing is applied as described in [14.3.1/4 temp.arg.type]:
14863 
14864 	     "If a template-argument for a template-parameter T names a type
14865 	     that is a reference to a type A, an attempt to create the type
14866 	     'lvalue reference to cv T' creates the type 'lvalue reference to
14867 	     A,' while an attempt to create the type type rvalue reference to
14868 	     cv T' creates the type T"
14869 	  */
14870 	  r = cp_build_reference_type
14871 	      (TREE_TYPE (type),
14872 	       TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
14873 	else
14874 	  r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
14875 	r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
14876 
14877 	if (r != error_mark_node)
14878 	  /* Will this ever be needed for TYPE_..._TO values?  */
14879 	  layout_type (r);
14880 
14881 	return r;
14882       }
14883     case OFFSET_TYPE:
14884       {
14885 	r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
14886 	if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
14887 	  {
14888 	    /* [temp.deduct]
14889 
14890 	       Type deduction may fail for any of the following
14891 	       reasons:
14892 
14893 	       -- Attempting to create "pointer to member of T" when T
14894 		  is not a class type.  */
14895 	    if (complain & tf_error)
14896 	      error ("creating pointer to member of non-class type %qT", r);
14897 	    return error_mark_node;
14898 	  }
14899 	if (TYPE_REF_P (type))
14900 	  {
14901 	    if (complain & tf_error)
14902 	      error ("creating pointer to member reference type %qT", type);
14903 	    return error_mark_node;
14904 	  }
14905 	if (VOID_TYPE_P (type))
14906 	  {
14907 	    if (complain & tf_error)
14908 	      error ("creating pointer to member of type void");
14909 	    return error_mark_node;
14910 	  }
14911 	gcc_assert (TREE_CODE (type) != METHOD_TYPE);
14912 	if (TREE_CODE (type) == FUNCTION_TYPE)
14913 	  {
14914 	    /* The type of the implicit object parameter gets its
14915 	       cv-qualifiers from the FUNCTION_TYPE. */
14916 	    tree memptr;
14917 	    tree method_type
14918 	      = build_memfn_type (type, r, type_memfn_quals (type),
14919 				  type_memfn_rqual (type));
14920 	    memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
14921 	    return cp_build_qualified_type_real (memptr, cp_type_quals (t),
14922 						 complain);
14923 	  }
14924 	else
14925 	  return cp_build_qualified_type_real (build_ptrmem_type (r, type),
14926 					       cp_type_quals (t),
14927 					       complain);
14928       }
14929     case FUNCTION_TYPE:
14930     case METHOD_TYPE:
14931       {
14932 	tree fntype;
14933 	tree specs;
14934 	fntype = tsubst_function_type (t, args, complain, in_decl);
14935 	if (fntype == error_mark_node)
14936 	  return error_mark_node;
14937 
14938 	/* Substitute the exception specification.  */
14939 	specs = tsubst_exception_specification (t, args, complain, in_decl,
14940 						/*defer_ok*/fndecl_type);
14941 	if (specs == error_mark_node)
14942 	  return error_mark_node;
14943 	if (specs)
14944 	  fntype = build_exception_variant (fntype, specs);
14945 	return fntype;
14946       }
14947     case ARRAY_TYPE:
14948       {
14949 	tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
14950 	if (domain == error_mark_node)
14951 	  return error_mark_node;
14952 
14953 	/* As an optimization, we avoid regenerating the array type if
14954 	   it will obviously be the same as T.  */
14955 	if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
14956 	  return t;
14957 
14958 	/* These checks should match the ones in create_array_type_for_decl.
14959 
14960 	   [temp.deduct]
14961 
14962 	   The deduction may fail for any of the following reasons:
14963 
14964 	   -- Attempting to create an array with an element type that
14965 	      is void, a function type, or a reference type, or [DR337]
14966 	      an abstract class type.  */
14967 	if (VOID_TYPE_P (type)
14968 	    || TREE_CODE (type) == FUNCTION_TYPE
14969 	    || (TREE_CODE (type) == ARRAY_TYPE
14970 		&& TYPE_DOMAIN (type) == NULL_TREE)
14971 	    || TYPE_REF_P (type))
14972 	  {
14973 	    if (complain & tf_error)
14974 	      error ("creating array of %qT", type);
14975 	    return error_mark_node;
14976 	  }
14977 
14978 	if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
14979 	  return error_mark_node;
14980 
14981 	r = build_cplus_array_type (type, domain);
14982 
14983 	if (!valid_array_size_p (input_location, r, in_decl,
14984 				 (complain & tf_error)))
14985 	  return error_mark_node;
14986 
14987 	if (TYPE_USER_ALIGN (t))
14988 	  {
14989 	    SET_TYPE_ALIGN (r, TYPE_ALIGN (t));
14990 	    TYPE_USER_ALIGN (r) = 1;
14991 	  }
14992 
14993 	return r;
14994       }
14995 
14996     case TYPENAME_TYPE:
14997       {
14998 	tree ctx = TYPE_CONTEXT (t);
14999 	if (TREE_CODE (ctx) == TYPE_PACK_EXPANSION)
15000 	  {
15001 	    ctx = tsubst_pack_expansion (ctx, args, complain, in_decl);
15002 	    if (ctx == error_mark_node
15003 		|| TREE_VEC_LENGTH (ctx) > 1)
15004 	      return error_mark_node;
15005 	    if (TREE_VEC_LENGTH (ctx) == 0)
15006 	      {
15007 		if (complain & tf_error)
15008 		  error ("%qD is instantiated for an empty pack",
15009 			 TYPENAME_TYPE_FULLNAME (t));
15010 		return error_mark_node;
15011 	      }
15012 	    ctx = TREE_VEC_ELT (ctx, 0);
15013 	  }
15014 	else
15015 	  ctx = tsubst_aggr_type (ctx, args, complain, in_decl,
15016 				  /*entering_scope=*/1);
15017 	if (ctx == error_mark_node)
15018 	  return error_mark_node;
15019 
15020 	tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
15021 			      complain, in_decl);
15022 	if (f == error_mark_node)
15023 	  return error_mark_node;
15024 
15025 	if (!MAYBE_CLASS_TYPE_P (ctx))
15026 	  {
15027 	    if (complain & tf_error)
15028 	      error ("%qT is not a class, struct, or union type", ctx);
15029 	    return error_mark_node;
15030 	  }
15031 	else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
15032 	  {
15033 	    /* Normally, make_typename_type does not require that the CTX
15034 	       have complete type in order to allow things like:
15035 
15036 		 template <class T> struct S { typename S<T>::X Y; };
15037 
15038 	       But, such constructs have already been resolved by this
15039 	       point, so here CTX really should have complete type, unless
15040 	       it's a partial instantiation.  */
15041 	    ctx = complete_type (ctx);
15042 	    if (!COMPLETE_TYPE_P (ctx))
15043 	      {
15044 		if (complain & tf_error)
15045 		  cxx_incomplete_type_error (NULL_TREE, ctx);
15046 		return error_mark_node;
15047 	      }
15048 	  }
15049 
15050 	f = make_typename_type (ctx, f, typename_type,
15051 				complain | tf_keep_type_decl);
15052 	if (f == error_mark_node)
15053 	  return f;
15054 	if (TREE_CODE (f) == TYPE_DECL)
15055 	  {
15056 	    complain |= tf_ignore_bad_quals;
15057 	    f = TREE_TYPE (f);
15058 	  }
15059 
15060 	if (TREE_CODE (f) != TYPENAME_TYPE)
15061 	  {
15062 	    if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
15063 	      {
15064 		if (complain & tf_error)
15065 		  error ("%qT resolves to %qT, which is not an enumeration type",
15066 			 t, f);
15067 		else
15068 		  return error_mark_node;
15069 	      }
15070 	    else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
15071 	      {
15072 		if (complain & tf_error)
15073 		  error ("%qT resolves to %qT, which is is not a class type",
15074 			 t, f);
15075 		else
15076 		  return error_mark_node;
15077 	      }
15078 	  }
15079 
15080 	return cp_build_qualified_type_real
15081 	  (f, cp_type_quals (f) | cp_type_quals (t), complain);
15082       }
15083 
15084     case UNBOUND_CLASS_TEMPLATE:
15085       {
15086 	tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
15087 				     in_decl, /*entering_scope=*/1);
15088 	tree name = TYPE_IDENTIFIER (t);
15089 	tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
15090 
15091 	if (ctx == error_mark_node || name == error_mark_node)
15092 	  return error_mark_node;
15093 
15094 	if (parm_list)
15095 	  parm_list = tsubst_template_parms (parm_list, args, complain);
15096 	return make_unbound_class_template (ctx, name, parm_list, complain);
15097       }
15098 
15099     case TYPEOF_TYPE:
15100       {
15101 	tree type;
15102 
15103 	++cp_unevaluated_operand;
15104 	++c_inhibit_evaluation_warnings;
15105 
15106 	type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
15107 			    complain, in_decl,
15108 			    /*integral_constant_expression_p=*/false);
15109 
15110 	--cp_unevaluated_operand;
15111 	--c_inhibit_evaluation_warnings;
15112 
15113 	type = finish_typeof (type);
15114 	return cp_build_qualified_type_real (type,
15115 					     cp_type_quals (t)
15116 					     | cp_type_quals (type),
15117 					     complain);
15118       }
15119 
15120     case DECLTYPE_TYPE:
15121       {
15122 	tree type;
15123 
15124 	++cp_unevaluated_operand;
15125 	++c_inhibit_evaluation_warnings;
15126 
15127 	type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
15128 				      complain|tf_decltype, in_decl,
15129 				      /*function_p*/false,
15130 				      /*integral_constant_expression*/false);
15131 
15132 	if (DECLTYPE_FOR_INIT_CAPTURE (t))
15133 	  {
15134 	    if (type == NULL_TREE)
15135 	      {
15136 		if (complain & tf_error)
15137 		  error ("empty initializer in lambda init-capture");
15138 		type = error_mark_node;
15139 	      }
15140 	    else if (TREE_CODE (type) == TREE_LIST)
15141 	      type = build_x_compound_expr_from_list (type, ELK_INIT, complain);
15142 	  }
15143 
15144 	--cp_unevaluated_operand;
15145 	--c_inhibit_evaluation_warnings;
15146 
15147 	if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
15148 	  type = lambda_capture_field_type (type,
15149 					    DECLTYPE_FOR_INIT_CAPTURE (t),
15150 					    DECLTYPE_FOR_REF_CAPTURE (t));
15151 	else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
15152 	  type = lambda_proxy_type (type);
15153 	else
15154 	  {
15155 	    bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
15156 	    if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
15157 		&& EXPR_P (type))
15158 	      /* In a template ~id could be either a complement expression
15159 		 or an unqualified-id naming a destructor; if instantiating
15160 		 it produces an expression, it's not an id-expression or
15161 		 member access.  */
15162 	      id = false;
15163 	    type = finish_decltype_type (type, id, complain);
15164 	  }
15165 	return cp_build_qualified_type_real (type,
15166 					     cp_type_quals (t)
15167 					     | cp_type_quals (type),
15168 					     complain | tf_ignore_bad_quals);
15169       }
15170 
15171     case UNDERLYING_TYPE:
15172       {
15173 	tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
15174 			    complain, in_decl);
15175 	return finish_underlying_type (type);
15176       }
15177 
15178     case TYPE_ARGUMENT_PACK:
15179     case NONTYPE_ARGUMENT_PACK:
15180       {
15181         tree r;
15182 
15183 	if (code == NONTYPE_ARGUMENT_PACK)
15184 	  r = make_node (code);
15185 	else
15186 	  r = cxx_make_type (code);
15187 
15188 	tree pack_args = ARGUMENT_PACK_ARGS (t);
15189 	pack_args = tsubst_template_args (pack_args, args, complain, in_decl);
15190 	SET_ARGUMENT_PACK_ARGS (r, pack_args);
15191 
15192 	return r;
15193       }
15194 
15195     case VOID_CST:
15196     case INTEGER_CST:
15197     case REAL_CST:
15198     case STRING_CST:
15199     case PLUS_EXPR:
15200     case MINUS_EXPR:
15201     case NEGATE_EXPR:
15202     case NOP_EXPR:
15203     case INDIRECT_REF:
15204     case ADDR_EXPR:
15205     case CALL_EXPR:
15206     case ARRAY_REF:
15207     case SCOPE_REF:
15208       /* We should use one of the expression tsubsts for these codes.  */
15209       gcc_unreachable ();
15210 
15211     default:
15212       sorry ("use of %qs in template", get_tree_code_name (code));
15213       return error_mark_node;
15214     }
15215 }
15216 
15217 /* tsubst a BASELINK.  OBJECT_TYPE, if non-NULL, is the type of the
15218    expression on the left-hand side of the "." or "->" operator.  We
15219    only do the lookup if we had a dependent BASELINK.  Otherwise we
15220    adjust it onto the instantiated heirarchy.  */
15221 
15222 static tree
tsubst_baselink(tree baselink,tree object_type,tree args,tsubst_flags_t complain,tree in_decl)15223 tsubst_baselink (tree baselink, tree object_type,
15224 		 tree args, tsubst_flags_t complain, tree in_decl)
15225 {
15226   bool qualified_p = BASELINK_QUALIFIED_P (baselink);
15227   tree qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
15228   qualifying_scope = tsubst (qualifying_scope, args, complain, in_decl);
15229 
15230   tree optype = BASELINK_OPTYPE (baselink);
15231   optype = tsubst (optype, args, complain, in_decl);
15232 
15233   tree template_args = NULL_TREE;
15234   bool template_id_p = false;
15235   tree fns = BASELINK_FUNCTIONS (baselink);
15236   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
15237     {
15238       template_id_p = true;
15239       template_args = TREE_OPERAND (fns, 1);
15240       fns = TREE_OPERAND (fns, 0);
15241       if (template_args)
15242 	template_args = tsubst_template_args (template_args, args,
15243 					      complain, in_decl);
15244     }
15245 
15246   tree binfo_type = BINFO_TYPE (BASELINK_BINFO (baselink));
15247   binfo_type = tsubst (binfo_type, args, complain, in_decl);
15248   bool dependent_p = binfo_type != BINFO_TYPE (BASELINK_BINFO (baselink));
15249 
15250   if (dependent_p)
15251     {
15252       tree name = OVL_NAME (fns);
15253       if (IDENTIFIER_CONV_OP_P (name))
15254 	name = make_conv_op_name (optype);
15255 
15256       if (name == complete_dtor_identifier)
15257 	/* Treat as-if non-dependent below.  */
15258 	dependent_p = false;
15259 
15260       baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
15261       if (!baselink)
15262 	{
15263 	  if ((complain & tf_error)
15264 	      && constructor_name_p (name, qualifying_scope))
15265 	    error ("cannot call constructor %<%T::%D%> directly",
15266 		   qualifying_scope, name);
15267 	  return error_mark_node;
15268 	}
15269 
15270       if (BASELINK_P (baselink))
15271 	fns = BASELINK_FUNCTIONS (baselink);
15272     }
15273   else
15274     /* We're going to overwrite pieces below, make a duplicate.  */
15275     baselink = copy_node (baselink);
15276 
15277   /* If lookup found a single function, mark it as used at this point.
15278      (If lookup found multiple functions the one selected later by
15279      overload resolution will be marked as used at that point.)  */
15280   if (!template_id_p && !really_overloaded_fn (fns))
15281     {
15282       tree fn = OVL_FIRST (fns);
15283       bool ok = mark_used (fn, complain);
15284       if (!ok && !(complain & tf_error))
15285 	return error_mark_node;
15286       if (ok && BASELINK_P (baselink))
15287 	/* We might have instantiated an auto function.  */
15288 	TREE_TYPE (baselink) = TREE_TYPE (fn);
15289     }
15290 
15291   if (BASELINK_P (baselink))
15292     {
15293       /* Add back the template arguments, if present.  */
15294       if (template_id_p)
15295 	BASELINK_FUNCTIONS (baselink)
15296 	  = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fns, template_args);
15297 
15298       /* Update the conversion operator type.  */
15299       BASELINK_OPTYPE (baselink) = optype;
15300     }
15301 
15302   if (!object_type)
15303     object_type = current_class_type;
15304 
15305   if (qualified_p || !dependent_p)
15306     {
15307       baselink = adjust_result_of_qualified_name_lookup (baselink,
15308 							 qualifying_scope,
15309 							 object_type);
15310       if (!qualified_p)
15311 	/* We need to call adjust_result_of_qualified_name_lookup in case the
15312 	   destructor names a base class, but we unset BASELINK_QUALIFIED_P
15313 	   so that we still get virtual function binding.  */
15314 	BASELINK_QUALIFIED_P (baselink) = false;
15315     }
15316 
15317   return baselink;
15318 }
15319 
15320 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
15321    true if the qualified-id will be a postfix-expression in-and-of
15322    itself; false if more of the postfix-expression follows the
15323    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
15324    of "&".  */
15325 
15326 static tree
tsubst_qualified_id(tree qualified_id,tree args,tsubst_flags_t complain,tree in_decl,bool done,bool address_p)15327 tsubst_qualified_id (tree qualified_id, tree args,
15328 		     tsubst_flags_t complain, tree in_decl,
15329 		     bool done, bool address_p)
15330 {
15331   tree expr;
15332   tree scope;
15333   tree name;
15334   bool is_template;
15335   tree template_args;
15336   location_t loc = UNKNOWN_LOCATION;
15337 
15338   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
15339 
15340   /* Figure out what name to look up.  */
15341   name = TREE_OPERAND (qualified_id, 1);
15342   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
15343     {
15344       is_template = true;
15345       loc = EXPR_LOCATION (name);
15346       template_args = TREE_OPERAND (name, 1);
15347       if (template_args)
15348 	template_args = tsubst_template_args (template_args, args,
15349 					      complain, in_decl);
15350       if (template_args == error_mark_node)
15351 	return error_mark_node;
15352       name = TREE_OPERAND (name, 0);
15353     }
15354   else
15355     {
15356       is_template = false;
15357       template_args = NULL_TREE;
15358     }
15359 
15360   /* Substitute into the qualifying scope.  When there are no ARGS, we
15361      are just trying to simplify a non-dependent expression.  In that
15362      case the qualifying scope may be dependent, and, in any case,
15363      substituting will not help.  */
15364   scope = TREE_OPERAND (qualified_id, 0);
15365   if (args)
15366     {
15367       scope = tsubst (scope, args, complain, in_decl);
15368       expr = tsubst_copy (name, args, complain, in_decl);
15369     }
15370   else
15371     expr = name;
15372 
15373   if (dependent_scope_p (scope))
15374     {
15375       if (is_template)
15376 	expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
15377       tree r = build_qualified_name (NULL_TREE, scope, expr,
15378 				     QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
15379       REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (qualified_id);
15380       return r;
15381     }
15382 
15383   if (!BASELINK_P (name) && !DECL_P (expr))
15384     {
15385       if (TREE_CODE (expr) == BIT_NOT_EXPR)
15386 	{
15387 	  /* A BIT_NOT_EXPR is used to represent a destructor.  */
15388 	  if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
15389 	    {
15390 	      error ("qualifying type %qT does not match destructor name ~%qT",
15391 		     scope, TREE_OPERAND (expr, 0));
15392 	      expr = error_mark_node;
15393 	    }
15394 	  else
15395 	    expr = lookup_qualified_name (scope, complete_dtor_identifier,
15396 					  /*is_type_p=*/0, false);
15397 	}
15398       else
15399 	expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
15400       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
15401 		     ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
15402 	{
15403 	  if (complain & tf_error)
15404 	    {
15405 	      error ("dependent-name %qE is parsed as a non-type, but "
15406 		     "instantiation yields a type", qualified_id);
15407 	      inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
15408 	    }
15409 	  return error_mark_node;
15410 	}
15411     }
15412 
15413   if (DECL_P (expr))
15414     {
15415       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
15416 					   scope);
15417       /* Remember that there was a reference to this entity.  */
15418       if (!mark_used (expr, complain) && !(complain & tf_error))
15419 	return error_mark_node;
15420     }
15421 
15422   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
15423     {
15424       if (complain & tf_error)
15425 	qualified_name_lookup_error (scope,
15426 				     TREE_OPERAND (qualified_id, 1),
15427 				     expr, input_location);
15428       return error_mark_node;
15429     }
15430 
15431   if (is_template)
15432     {
15433       /* We may be repeating a check already done during parsing, but
15434 	 if it was well-formed and passed then, it will pass again
15435 	 now, and if it didn't, we wouldn't have got here.  The case
15436 	 we want to catch is when we couldn't tell then, and can now,
15437 	 namely when templ prior to substitution was an
15438 	 identifier.  */
15439       if (flag_concepts && check_auto_in_tmpl_args (expr, template_args))
15440 	return error_mark_node;
15441 
15442       if (variable_template_p (expr))
15443 	expr = lookup_and_finish_template_variable (expr, template_args,
15444 						    complain);
15445       else
15446 	expr = lookup_template_function (expr, template_args);
15447     }
15448 
15449   if (expr == error_mark_node && complain & tf_error)
15450     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
15451 				 expr, input_location);
15452   else if (TYPE_P (scope))
15453     {
15454       expr = (adjust_result_of_qualified_name_lookup
15455 	      (expr, scope, current_nonlambda_class_type ()));
15456       expr = (finish_qualified_id_expr
15457 	      (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
15458 	       QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
15459 	       /*template_arg_p=*/false, complain));
15460     }
15461 
15462   /* Expressions do not generally have reference type.  */
15463   if (TREE_CODE (expr) != SCOPE_REF
15464       /* However, if we're about to form a pointer-to-member, we just
15465 	 want the referenced member referenced.  */
15466       && TREE_CODE (expr) != OFFSET_REF)
15467     expr = convert_from_reference (expr);
15468 
15469   if (REF_PARENTHESIZED_P (qualified_id))
15470     expr = force_paren_expr (expr);
15471 
15472   return expr;
15473 }
15474 
15475 /* tsubst the initializer for a VAR_DECL.  INIT is the unsubstituted
15476    initializer, DECL is the substituted VAR_DECL.  Other arguments are as
15477    for tsubst.  */
15478 
15479 static tree
tsubst_init(tree init,tree decl,tree args,tsubst_flags_t complain,tree in_decl)15480 tsubst_init (tree init, tree decl, tree args,
15481 	     tsubst_flags_t complain, tree in_decl)
15482 {
15483   if (!init)
15484     return NULL_TREE;
15485 
15486   init = tsubst_expr (init, args, complain, in_decl, false);
15487 
15488   tree type = TREE_TYPE (decl);
15489 
15490   if (!init && type != error_mark_node)
15491     {
15492       if (tree auto_node = type_uses_auto (type))
15493 	{
15494 	  if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
15495 	    {
15496 	      if (complain & tf_error)
15497 		error ("initializer for %q#D expands to an empty list "
15498 		       "of expressions", decl);
15499 	      return error_mark_node;
15500 	    }
15501 	}
15502       else if (!dependent_type_p (type))
15503 	{
15504 	  /* If we had an initializer but it
15505 	     instantiated to nothing,
15506 	     value-initialize the object.  This will
15507 	     only occur when the initializer was a
15508 	     pack expansion where the parameter packs
15509 	     used in that expansion were of length
15510 	     zero.  */
15511 	  init = build_value_init (type, complain);
15512 	  if (TREE_CODE (init) == AGGR_INIT_EXPR)
15513 	    init = get_target_expr_sfinae (init, complain);
15514 	  if (TREE_CODE (init) == TARGET_EXPR)
15515 	    TARGET_EXPR_DIRECT_INIT_P (init) = true;
15516 	}
15517     }
15518 
15519   return init;
15520 }
15521 
15522 /* Like tsubst, but deals with expressions.  This function just replaces
15523    template parms; to finish processing the resultant expression, use
15524    tsubst_copy_and_build or tsubst_expr.  */
15525 
15526 static tree
tsubst_copy(tree t,tree args,tsubst_flags_t complain,tree in_decl)15527 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
15528 {
15529   enum tree_code code;
15530   tree r;
15531 
15532   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
15533     return t;
15534 
15535   code = TREE_CODE (t);
15536 
15537   switch (code)
15538     {
15539     case PARM_DECL:
15540       r = retrieve_local_specialization (t);
15541 
15542       if (r == NULL_TREE)
15543 	{
15544 	  /* We get here for a use of 'this' in an NSDMI.  */
15545 	  if (DECL_NAME (t) == this_identifier && current_class_ptr)
15546 	    return current_class_ptr;
15547 
15548 	  /* This can happen for a parameter name used later in a function
15549 	     declaration (such as in a late-specified return type).  Just
15550 	     make a dummy decl, since it's only used for its type.  */
15551 	  gcc_assert (cp_unevaluated_operand != 0);
15552 	  r = tsubst_decl (t, args, complain);
15553 	  /* Give it the template pattern as its context; its true context
15554 	     hasn't been instantiated yet and this is good enough for
15555 	     mangling.  */
15556 	  DECL_CONTEXT (r) = DECL_CONTEXT (t);
15557 	}
15558 
15559       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
15560 	r = argument_pack_select_arg (r);
15561       if (!mark_used (r, complain) && !(complain & tf_error))
15562 	return error_mark_node;
15563       return r;
15564 
15565     case CONST_DECL:
15566       {
15567 	tree enum_type;
15568 	tree v;
15569 
15570 	if (DECL_TEMPLATE_PARM_P (t))
15571 	  return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
15572 	/* There is no need to substitute into namespace-scope
15573 	   enumerators.  */
15574 	if (DECL_NAMESPACE_SCOPE_P (t))
15575 	  return t;
15576 	/* If ARGS is NULL, then T is known to be non-dependent.  */
15577 	if (args == NULL_TREE)
15578 	  return scalar_constant_value (t);
15579 
15580 	/* Unfortunately, we cannot just call lookup_name here.
15581 	   Consider:
15582 
15583 	     template <int I> int f() {
15584 	     enum E { a = I };
15585 	     struct S { void g() { E e = a; } };
15586 	     };
15587 
15588 	   When we instantiate f<7>::S::g(), say, lookup_name is not
15589 	   clever enough to find f<7>::a.  */
15590 	enum_type
15591 	  = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
15592 			      /*entering_scope=*/0);
15593 
15594 	for (v = TYPE_VALUES (enum_type);
15595 	     v != NULL_TREE;
15596 	     v = TREE_CHAIN (v))
15597 	  if (TREE_PURPOSE (v) == DECL_NAME (t))
15598 	    return TREE_VALUE (v);
15599 
15600 	  /* We didn't find the name.  That should never happen; if
15601 	     name-lookup found it during preliminary parsing, we
15602 	     should find it again here during instantiation.  */
15603 	gcc_unreachable ();
15604       }
15605       return t;
15606 
15607     case FIELD_DECL:
15608       if (DECL_CONTEXT (t))
15609 	{
15610 	  tree ctx;
15611 
15612 	  ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
15613 				  /*entering_scope=*/1);
15614 	  if (ctx != DECL_CONTEXT (t))
15615 	    {
15616 	      tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
15617 	      if (!r)
15618 		{
15619 		  if (complain & tf_error)
15620 		    error ("using invalid field %qD", t);
15621 		  return error_mark_node;
15622 		}
15623 	      return r;
15624 	    }
15625 	}
15626 
15627       return t;
15628 
15629     case VAR_DECL:
15630     case FUNCTION_DECL:
15631       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
15632 	r = tsubst (t, args, complain, in_decl);
15633       else if (local_variable_p (t)
15634 	       && uses_template_parms (DECL_CONTEXT (t)))
15635 	{
15636 	  r = retrieve_local_specialization (t);
15637 	  if (r == NULL_TREE)
15638 	    {
15639 	      /* First try name lookup to find the instantiation.  */
15640 	      r = lookup_name (DECL_NAME (t));
15641 	      if (r)
15642 		{
15643 		  if (!VAR_P (r))
15644 		    {
15645 		      /* During error-recovery we may find a non-variable,
15646 			 even an OVERLOAD: just bail out and avoid ICEs and
15647 			 duplicate diagnostics (c++/62207).  */
15648 		      gcc_assert (seen_error ());
15649 		      return error_mark_node;
15650 		    }
15651 		  if (!is_capture_proxy (r))
15652 		    {
15653 		      /* Make sure the one we found is the one we want.  */
15654 		      tree ctx = enclosing_instantiation_of (DECL_CONTEXT (t));
15655 		      if (ctx != DECL_CONTEXT (r))
15656 			r = NULL_TREE;
15657 		    }
15658 		}
15659 
15660 	      if (r)
15661 		/* OK */;
15662 	      else
15663 		{
15664 		  /* This can happen for a variable used in a
15665 		     late-specified return type of a local lambda, or for a
15666 		     local static or constant.  Building a new VAR_DECL
15667 		     should be OK in all those cases.  */
15668 		  r = tsubst_decl (t, args, complain);
15669 		  if (local_specializations)
15670 		    /* Avoid infinite recursion (79640).  */
15671 		    register_local_specialization (r, t);
15672 		  if (decl_maybe_constant_var_p (r))
15673 		    {
15674 		      /* We can't call cp_finish_decl, so handle the
15675 			 initializer by hand.  */
15676 		      tree init = tsubst_init (DECL_INITIAL (t), r, args,
15677 					       complain, in_decl);
15678 		      if (!processing_template_decl)
15679 			init = maybe_constant_init (init);
15680 		      if (processing_template_decl
15681 			  ? potential_constant_expression (init)
15682 			  : reduced_constant_expression_p (init))
15683 			DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
15684 			  = TREE_CONSTANT (r) = true;
15685 		      DECL_INITIAL (r) = init;
15686 		      if (tree auto_node = type_uses_auto (TREE_TYPE (r)))
15687 			TREE_TYPE (r)
15688 			  = do_auto_deduction (TREE_TYPE (r), init, auto_node,
15689 					       complain, adc_variable_type);
15690 		    }
15691 		  gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
15692 			      || decl_constant_var_p (r)
15693 			      || seen_error ());
15694 		  if (!processing_template_decl
15695 		      && !TREE_STATIC (r))
15696 		    r = process_outer_var_ref (r, complain);
15697 		}
15698 	      /* Remember this for subsequent uses.  */
15699 	      if (local_specializations)
15700 		register_local_specialization (r, t);
15701 	    }
15702 	  if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
15703 	    r = argument_pack_select_arg (r);
15704 	}
15705       else
15706 	r = t;
15707       if (!mark_used (r, complain))
15708 	return error_mark_node;
15709       return r;
15710 
15711     case NAMESPACE_DECL:
15712       return t;
15713 
15714     case OVERLOAD:
15715       return t;
15716 
15717     case BASELINK:
15718       return tsubst_baselink (t, current_nonlambda_class_type (),
15719 			      args, complain, in_decl);
15720 
15721     case TEMPLATE_DECL:
15722       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
15723 	return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
15724 		       args, complain, in_decl);
15725       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
15726 	return tsubst (t, args, complain, in_decl);
15727       else if (DECL_CLASS_SCOPE_P (t)
15728 	       && uses_template_parms (DECL_CONTEXT (t)))
15729 	{
15730 	  /* Template template argument like the following example need
15731 	     special treatment:
15732 
15733 	       template <template <class> class TT> struct C {};
15734 	       template <class T> struct D {
15735 		 template <class U> struct E {};
15736 		 C<E> c;				// #1
15737 	       };
15738 	       D<int> d;				// #2
15739 
15740 	     We are processing the template argument `E' in #1 for
15741 	     the template instantiation #2.  Originally, `E' is a
15742 	     TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
15743 	     have to substitute this with one having context `D<int>'.  */
15744 
15745 	  tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
15746 	  if (dependent_scope_p (context))
15747 	    {
15748 	      /* When rewriting a constructor into a deduction guide, a
15749 		 non-dependent name can become dependent, so memtmpl<args>
15750 		 becomes context::template memtmpl<args>.  */
15751 	      tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15752 	      return build_qualified_name (type, context, DECL_NAME (t),
15753 					   /*template*/true);
15754 	    }
15755 	  return lookup_field (context, DECL_NAME(t), 0, false);
15756 	}
15757       else
15758 	/* Ordinary template template argument.  */
15759 	return t;
15760 
15761     case NON_LVALUE_EXPR:
15762     case VIEW_CONVERT_EXPR:
15763 	{
15764 	  /* Handle location wrappers by substituting the wrapped node
15765 	     first, *then* reusing the resulting type.  Doing the type
15766 	     first ensures that we handle template parameters and
15767 	     parameter pack expansions.  */
15768 	  if (location_wrapper_p (t))
15769 	    {
15770 	      tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args,
15771 				      complain, in_decl);
15772 	      return maybe_wrap_with_location (op0, EXPR_LOCATION (t));
15773 	    }
15774 	  tree op = TREE_OPERAND (t, 0);
15775 	  if (code == VIEW_CONVERT_EXPR
15776 	      && TREE_CODE (op) == TEMPLATE_PARM_INDEX)
15777 	    {
15778 	      /* Wrapper to make a C++20 template parameter object const.  */
15779 	      op = tsubst_copy (op, args, complain, in_decl);
15780 	      if (TREE_CODE (op) == TEMPLATE_PARM_INDEX)
15781 		{
15782 		  tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15783 		  return build1 (code, type, op);
15784 		}
15785 	      else
15786 		{
15787 		  gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (op)));
15788 		  return op;
15789 		}
15790 	    }
15791 	  /* We shouldn't see any other uses of these in templates.  */
15792 	  gcc_unreachable ();
15793 	}
15794 
15795     case CAST_EXPR:
15796     case REINTERPRET_CAST_EXPR:
15797     case CONST_CAST_EXPR:
15798     case STATIC_CAST_EXPR:
15799     case DYNAMIC_CAST_EXPR:
15800     case IMPLICIT_CONV_EXPR:
15801     case CONVERT_EXPR:
15802     case NOP_EXPR:
15803       {
15804 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15805 	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15806 	return build1 (code, type, op0);
15807       }
15808 
15809     case SIZEOF_EXPR:
15810       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
15811 	  || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
15812         {
15813           tree expanded, op = TREE_OPERAND (t, 0);
15814 	  int len = 0;
15815 
15816 	  if (SIZEOF_EXPR_TYPE_P (t))
15817 	    op = TREE_TYPE (op);
15818 
15819 	  ++cp_unevaluated_operand;
15820 	  ++c_inhibit_evaluation_warnings;
15821 	  /* We only want to compute the number of arguments.  */
15822 	  if (PACK_EXPANSION_P (op))
15823 	    expanded = tsubst_pack_expansion (op, args, complain, in_decl);
15824 	  else
15825 	    expanded = tsubst_template_args (ARGUMENT_PACK_ARGS (op),
15826 					     args, complain, in_decl);
15827 	  --cp_unevaluated_operand;
15828 	  --c_inhibit_evaluation_warnings;
15829 
15830 	  if (TREE_CODE (expanded) == TREE_VEC)
15831 	    {
15832 	      len = TREE_VEC_LENGTH (expanded);
15833 	      /* Set TREE_USED for the benefit of -Wunused.  */
15834 	      for (int i = 0; i < len; i++)
15835 		if (DECL_P (TREE_VEC_ELT (expanded, i)))
15836 		  TREE_USED (TREE_VEC_ELT (expanded, i)) = true;
15837 	    }
15838 
15839 	  if (expanded == error_mark_node)
15840 	    return error_mark_node;
15841 	  else if (PACK_EXPANSION_P (expanded)
15842 		   || (TREE_CODE (expanded) == TREE_VEC
15843 		       && pack_expansion_args_count (expanded)))
15844 
15845 	    {
15846 	      if (PACK_EXPANSION_P (expanded))
15847 		/* OK.  */;
15848 	      else if (TREE_VEC_LENGTH (expanded) == 1)
15849 		expanded = TREE_VEC_ELT (expanded, 0);
15850 	      else
15851 		expanded = make_argument_pack (expanded);
15852 
15853 	      if (TYPE_P (expanded))
15854 		return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
15855 						   false,
15856 						   complain & tf_error);
15857 	      else
15858 		return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
15859                                                    complain & tf_error);
15860 	    }
15861 	  else
15862 	    return build_int_cst (size_type_node, len);
15863         }
15864       if (SIZEOF_EXPR_TYPE_P (t))
15865 	{
15866 	  r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
15867 		      args, complain, in_decl);
15868 	  r = build1 (NOP_EXPR, r, error_mark_node);
15869 	  r = build1 (SIZEOF_EXPR,
15870 		      tsubst (TREE_TYPE (t), args, complain, in_decl), r);
15871 	  SIZEOF_EXPR_TYPE_P (r) = 1;
15872 	  return r;
15873 	}
15874       /* Fall through */
15875 
15876     case INDIRECT_REF:
15877     case NEGATE_EXPR:
15878     case TRUTH_NOT_EXPR:
15879     case BIT_NOT_EXPR:
15880     case ADDR_EXPR:
15881     case UNARY_PLUS_EXPR:      /* Unary + */
15882     case ALIGNOF_EXPR:
15883     case AT_ENCODE_EXPR:
15884     case ARROW_EXPR:
15885     case THROW_EXPR:
15886     case TYPEID_EXPR:
15887     case REALPART_EXPR:
15888     case IMAGPART_EXPR:
15889     case PAREN_EXPR:
15890       {
15891 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15892 	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15893 	r = build1 (code, type, op0);
15894 	if (code == ALIGNOF_EXPR)
15895 	  ALIGNOF_EXPR_STD_P (r) = ALIGNOF_EXPR_STD_P (t);
15896 	return r;
15897       }
15898 
15899     case COMPONENT_REF:
15900       {
15901 	tree object;
15902 	tree name;
15903 
15904 	object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15905 	name = TREE_OPERAND (t, 1);
15906 	if (TREE_CODE (name) == BIT_NOT_EXPR)
15907 	  {
15908 	    name = tsubst_copy (TREE_OPERAND (name, 0), args,
15909 				complain, in_decl);
15910 	    name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
15911 	  }
15912 	else if (TREE_CODE (name) == SCOPE_REF
15913 		 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
15914 	  {
15915 	    tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
15916 				     complain, in_decl);
15917 	    name = TREE_OPERAND (name, 1);
15918 	    name = tsubst_copy (TREE_OPERAND (name, 0), args,
15919 				complain, in_decl);
15920 	    name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
15921 	    name = build_qualified_name (/*type=*/NULL_TREE,
15922 					 base, name,
15923 					 /*template_p=*/false);
15924 	  }
15925 	else if (BASELINK_P (name))
15926 	  name = tsubst_baselink (name,
15927 				  non_reference (TREE_TYPE (object)),
15928 				  args, complain,
15929 				  in_decl);
15930 	else
15931 	  name = tsubst_copy (name, args, complain, in_decl);
15932 	return build_nt (COMPONENT_REF, object, name, NULL_TREE);
15933       }
15934 
15935     case PLUS_EXPR:
15936     case MINUS_EXPR:
15937     case MULT_EXPR:
15938     case TRUNC_DIV_EXPR:
15939     case CEIL_DIV_EXPR:
15940     case FLOOR_DIV_EXPR:
15941     case ROUND_DIV_EXPR:
15942     case EXACT_DIV_EXPR:
15943     case BIT_AND_EXPR:
15944     case BIT_IOR_EXPR:
15945     case BIT_XOR_EXPR:
15946     case TRUNC_MOD_EXPR:
15947     case FLOOR_MOD_EXPR:
15948     case TRUTH_ANDIF_EXPR:
15949     case TRUTH_ORIF_EXPR:
15950     case TRUTH_AND_EXPR:
15951     case TRUTH_OR_EXPR:
15952     case RSHIFT_EXPR:
15953     case LSHIFT_EXPR:
15954     case RROTATE_EXPR:
15955     case LROTATE_EXPR:
15956     case EQ_EXPR:
15957     case NE_EXPR:
15958     case MAX_EXPR:
15959     case MIN_EXPR:
15960     case LE_EXPR:
15961     case GE_EXPR:
15962     case LT_EXPR:
15963     case GT_EXPR:
15964     case COMPOUND_EXPR:
15965     case DOTSTAR_EXPR:
15966     case MEMBER_REF:
15967     case PREDECREMENT_EXPR:
15968     case PREINCREMENT_EXPR:
15969     case POSTDECREMENT_EXPR:
15970     case POSTINCREMENT_EXPR:
15971       {
15972 	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15973 	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15974 	return build_nt (code, op0, op1);
15975       }
15976 
15977     case SCOPE_REF:
15978       {
15979 	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15980 	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15981 	return build_qualified_name (/*type=*/NULL_TREE, op0, op1,
15982 				     QUALIFIED_NAME_IS_TEMPLATE (t));
15983       }
15984 
15985     case ARRAY_REF:
15986       {
15987 	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
15988 	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
15989 	return build_nt (ARRAY_REF, op0, op1, NULL_TREE, NULL_TREE);
15990       }
15991 
15992     case CALL_EXPR:
15993       {
15994 	int n = VL_EXP_OPERAND_LENGTH (t);
15995 	tree result = build_vl_exp (CALL_EXPR, n);
15996 	int i;
15997 	for (i = 0; i < n; i++)
15998 	  TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
15999 					     complain, in_decl);
16000 	return result;
16001       }
16002 
16003     case COND_EXPR:
16004     case MODOP_EXPR:
16005     case PSEUDO_DTOR_EXPR:
16006     case VEC_PERM_EXPR:
16007       {
16008 	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16009 	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
16010 	tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
16011 	r = build_nt (code, op0, op1, op2);
16012 	TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
16013 	return r;
16014       }
16015 
16016     case NEW_EXPR:
16017       {
16018 	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16019 	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
16020 	tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
16021 	r = build_nt (code, op0, op1, op2);
16022 	NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
16023 	return r;
16024       }
16025 
16026     case DELETE_EXPR:
16027       {
16028 	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16029 	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
16030 	r = build_nt (code, op0, op1);
16031 	DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
16032 	DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
16033 	return r;
16034       }
16035 
16036     case TEMPLATE_ID_EXPR:
16037       {
16038 	/* Substituted template arguments */
16039 	tree fn = TREE_OPERAND (t, 0);
16040 	tree targs = TREE_OPERAND (t, 1);
16041 
16042 	fn = tsubst_copy (fn, args, complain, in_decl);
16043 	if (targs)
16044 	  targs = tsubst_template_args (targs, args, complain, in_decl);
16045 
16046 	return lookup_template_function (fn, targs);
16047       }
16048 
16049     case TREE_LIST:
16050       {
16051 	tree purpose, value, chain;
16052 
16053 	if (t == void_list_node)
16054 	  return t;
16055 
16056 	purpose = TREE_PURPOSE (t);
16057 	if (purpose)
16058 	  purpose = tsubst_copy (purpose, args, complain, in_decl);
16059 	value = TREE_VALUE (t);
16060 	if (value)
16061 	  value = tsubst_copy (value, args, complain, in_decl);
16062 	chain = TREE_CHAIN (t);
16063 	if (chain && chain != void_type_node)
16064 	  chain = tsubst_copy (chain, args, complain, in_decl);
16065 	if (purpose == TREE_PURPOSE (t)
16066 	    && value == TREE_VALUE (t)
16067 	    && chain == TREE_CHAIN (t))
16068 	  return t;
16069 	return tree_cons (purpose, value, chain);
16070       }
16071 
16072     case RECORD_TYPE:
16073     case UNION_TYPE:
16074     case ENUMERAL_TYPE:
16075     case INTEGER_TYPE:
16076     case TEMPLATE_TYPE_PARM:
16077     case TEMPLATE_TEMPLATE_PARM:
16078     case BOUND_TEMPLATE_TEMPLATE_PARM:
16079     case TEMPLATE_PARM_INDEX:
16080     case POINTER_TYPE:
16081     case REFERENCE_TYPE:
16082     case OFFSET_TYPE:
16083     case FUNCTION_TYPE:
16084     case METHOD_TYPE:
16085     case ARRAY_TYPE:
16086     case TYPENAME_TYPE:
16087     case UNBOUND_CLASS_TEMPLATE:
16088     case TYPEOF_TYPE:
16089     case DECLTYPE_TYPE:
16090     case TYPE_DECL:
16091       return tsubst (t, args, complain, in_decl);
16092 
16093     case USING_DECL:
16094       t = DECL_NAME (t);
16095       /* Fall through.  */
16096     case IDENTIFIER_NODE:
16097       if (IDENTIFIER_CONV_OP_P (t))
16098 	{
16099 	  tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16100 	  return make_conv_op_name (new_type);
16101 	}
16102       else
16103 	return t;
16104 
16105     case CONSTRUCTOR:
16106       /* This is handled by tsubst_copy_and_build.  */
16107       gcc_unreachable ();
16108 
16109     case VA_ARG_EXPR:
16110       {
16111 	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16112 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16113 	return build_x_va_arg (EXPR_LOCATION (t), op0, type);
16114       }
16115 
16116     case CLEANUP_POINT_EXPR:
16117       /* We shouldn't have built any of these during initial template
16118 	 generation.  Instead, they should be built during instantiation
16119 	 in response to the saved STMT_IS_FULL_EXPR_P setting.  */
16120       gcc_unreachable ();
16121 
16122     case OFFSET_REF:
16123       {
16124 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16125 	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16126 	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
16127 	r = build2 (code, type, op0, op1);
16128 	PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
16129 	if (!mark_used (TREE_OPERAND (r, 1), complain)
16130 	    && !(complain & tf_error))
16131 	  return error_mark_node;
16132 	return r;
16133       }
16134 
16135     case EXPR_PACK_EXPANSION:
16136       error ("invalid use of pack expansion expression");
16137       return error_mark_node;
16138 
16139     case NONTYPE_ARGUMENT_PACK:
16140       error ("use %<...%> to expand argument pack");
16141       return error_mark_node;
16142 
16143     case VOID_CST:
16144       gcc_checking_assert (t == void_node && VOID_TYPE_P (TREE_TYPE (t)));
16145       return t;
16146 
16147     case INTEGER_CST:
16148     case REAL_CST:
16149     case STRING_CST:
16150     case COMPLEX_CST:
16151       {
16152 	/* Instantiate any typedefs in the type.  */
16153 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16154 	r = fold_convert (type, t);
16155 	gcc_assert (TREE_CODE (r) == code);
16156 	return r;
16157       }
16158 
16159     case PTRMEM_CST:
16160       /* These can sometimes show up in a partial instantiation, but never
16161 	 involve template parms.  */
16162       gcc_assert (!uses_template_parms (t));
16163       return t;
16164 
16165     case UNARY_LEFT_FOLD_EXPR:
16166       return tsubst_unary_left_fold (t, args, complain, in_decl);
16167     case UNARY_RIGHT_FOLD_EXPR:
16168       return tsubst_unary_right_fold (t, args, complain, in_decl);
16169     case BINARY_LEFT_FOLD_EXPR:
16170       return tsubst_binary_left_fold (t, args, complain, in_decl);
16171     case BINARY_RIGHT_FOLD_EXPR:
16172       return tsubst_binary_right_fold (t, args, complain, in_decl);
16173     case PREDICT_EXPR:
16174       return t;
16175 
16176     case DEBUG_BEGIN_STMT:
16177       /* ??? There's no point in copying it for now, but maybe some
16178 	 day it will contain more information, such as a pointer back
16179 	 to the containing function, inlined copy or so.  */
16180       return t;
16181 
16182     default:
16183       /* We shouldn't get here, but keep going if !flag_checking.  */
16184       if (flag_checking)
16185 	gcc_unreachable ();
16186       return t;
16187     }
16188 }
16189 
16190 /* Helper function for tsubst_omp_clauses, used for instantiation of
16191    OMP_CLAUSE_DECL of clauses.  */
16192 
16193 static tree
tsubst_omp_clause_decl(tree decl,tree args,tsubst_flags_t complain,tree in_decl,tree * iterator_cache)16194 tsubst_omp_clause_decl (tree decl, tree args, tsubst_flags_t complain,
16195 			tree in_decl, tree *iterator_cache)
16196 {
16197   if (decl == NULL_TREE)
16198     return NULL_TREE;
16199 
16200   /* Handle OpenMP iterators.  */
16201   if (TREE_CODE (decl) == TREE_LIST
16202       && TREE_PURPOSE (decl)
16203       && TREE_CODE (TREE_PURPOSE (decl)) == TREE_VEC)
16204     {
16205       tree ret;
16206       if (iterator_cache[0] == TREE_PURPOSE (decl))
16207 	ret = iterator_cache[1];
16208       else
16209 	{
16210 	  tree *tp = &ret;
16211 	  begin_scope (sk_omp, NULL);
16212 	  for (tree it = TREE_PURPOSE (decl); it; it = TREE_CHAIN (it))
16213 	    {
16214 	      *tp = copy_node (it);
16215 	      TREE_VEC_ELT (*tp, 0)
16216 		= tsubst_decl (TREE_VEC_ELT (it, 0), args, complain);
16217 	      TREE_VEC_ELT (*tp, 1)
16218 		= tsubst_expr (TREE_VEC_ELT (it, 1), args, complain, in_decl,
16219 			       /*integral_constant_expression_p=*/false);
16220 	      TREE_VEC_ELT (*tp, 2)
16221 		= tsubst_expr (TREE_VEC_ELT (it, 2), args, complain, in_decl,
16222 			       /*integral_constant_expression_p=*/false);
16223 	      TREE_VEC_ELT (*tp, 3)
16224 		= tsubst_expr (TREE_VEC_ELT (it, 3), args, complain, in_decl,
16225 			       /*integral_constant_expression_p=*/false);
16226 	      TREE_CHAIN (*tp) = NULL_TREE;
16227 	      tp = &TREE_CHAIN (*tp);
16228 	    }
16229 	  TREE_VEC_ELT (ret, 5) = poplevel (1, 1, 0);
16230 	  iterator_cache[0] = TREE_PURPOSE (decl);
16231 	  iterator_cache[1] = ret;
16232 	}
16233       return build_tree_list (ret, tsubst_omp_clause_decl (TREE_VALUE (decl),
16234 							   args, complain,
16235 							   in_decl, NULL));
16236     }
16237 
16238   /* Handle an OpenMP array section represented as a TREE_LIST (or
16239      OMP_CLAUSE_DEPEND_KIND).  An OMP_CLAUSE_DEPEND (with a depend
16240      kind of OMP_CLAUSE_DEPEND_SINK) can also be represented as a
16241      TREE_LIST.  We can handle it exactly the same as an array section
16242      (purpose, value, and a chain), even though the nomenclature
16243      (low_bound, length, etc) is different.  */
16244   if (TREE_CODE (decl) == TREE_LIST)
16245     {
16246       tree low_bound
16247 	= tsubst_expr (TREE_PURPOSE (decl), args, complain, in_decl,
16248 		       /*integral_constant_expression_p=*/false);
16249       tree length = tsubst_expr (TREE_VALUE (decl), args, complain, in_decl,
16250 				 /*integral_constant_expression_p=*/false);
16251       tree chain = tsubst_omp_clause_decl (TREE_CHAIN (decl), args, complain,
16252 					   in_decl, NULL);
16253       if (TREE_PURPOSE (decl) == low_bound
16254 	  && TREE_VALUE (decl) == length
16255 	  && TREE_CHAIN (decl) == chain)
16256 	return decl;
16257       tree ret = tree_cons (low_bound, length, chain);
16258       OMP_CLAUSE_DEPEND_SINK_NEGATIVE (ret)
16259 	= OMP_CLAUSE_DEPEND_SINK_NEGATIVE (decl);
16260       return ret;
16261     }
16262   tree ret = tsubst_expr (decl, args, complain, in_decl,
16263 			  /*integral_constant_expression_p=*/false);
16264   /* Undo convert_from_reference tsubst_expr could have called.  */
16265   if (decl
16266       && REFERENCE_REF_P (ret)
16267       && !REFERENCE_REF_P (decl))
16268     ret = TREE_OPERAND (ret, 0);
16269   return ret;
16270 }
16271 
16272 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
16273 
16274 static tree
tsubst_omp_clauses(tree clauses,enum c_omp_region_type ort,tree args,tsubst_flags_t complain,tree in_decl)16275 tsubst_omp_clauses (tree clauses, enum c_omp_region_type ort,
16276 		    tree args, tsubst_flags_t complain, tree in_decl)
16277 {
16278   tree new_clauses = NULL_TREE, nc, oc;
16279   tree linear_no_step = NULL_TREE;
16280   tree iterator_cache[2] = { NULL_TREE, NULL_TREE };
16281 
16282   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
16283     {
16284       nc = copy_node (oc);
16285       OMP_CLAUSE_CHAIN (nc) = new_clauses;
16286       new_clauses = nc;
16287 
16288       switch (OMP_CLAUSE_CODE (nc))
16289 	{
16290 	case OMP_CLAUSE_LASTPRIVATE:
16291 	  if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
16292 	    {
16293 	      OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
16294 	      tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
16295 			   in_decl, /*integral_constant_expression_p=*/false);
16296 	      OMP_CLAUSE_LASTPRIVATE_STMT (nc)
16297 		= pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
16298 	    }
16299 	  /* FALLTHRU */
16300 	case OMP_CLAUSE_PRIVATE:
16301 	case OMP_CLAUSE_SHARED:
16302 	case OMP_CLAUSE_FIRSTPRIVATE:
16303 	case OMP_CLAUSE_COPYIN:
16304 	case OMP_CLAUSE_COPYPRIVATE:
16305 	case OMP_CLAUSE_UNIFORM:
16306 	case OMP_CLAUSE_DEPEND:
16307 	case OMP_CLAUSE_FROM:
16308 	case OMP_CLAUSE_TO:
16309 	case OMP_CLAUSE_MAP:
16310 	case OMP_CLAUSE_NONTEMPORAL:
16311 	case OMP_CLAUSE_USE_DEVICE_PTR:
16312 	case OMP_CLAUSE_IS_DEVICE_PTR:
16313 	  OMP_CLAUSE_DECL (nc)
16314 	    = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
16315 				      in_decl, iterator_cache);
16316 	  break;
16317 	case OMP_CLAUSE_TILE:
16318 	case OMP_CLAUSE_IF:
16319 	case OMP_CLAUSE_NUM_THREADS:
16320 	case OMP_CLAUSE_SCHEDULE:
16321 	case OMP_CLAUSE_COLLAPSE:
16322 	case OMP_CLAUSE_FINAL:
16323 	case OMP_CLAUSE_DEVICE:
16324 	case OMP_CLAUSE_DIST_SCHEDULE:
16325 	case OMP_CLAUSE_NUM_TEAMS:
16326 	case OMP_CLAUSE_THREAD_LIMIT:
16327 	case OMP_CLAUSE_SAFELEN:
16328 	case OMP_CLAUSE_SIMDLEN:
16329 	case OMP_CLAUSE_NUM_TASKS:
16330 	case OMP_CLAUSE_GRAINSIZE:
16331 	case OMP_CLAUSE_PRIORITY:
16332 	case OMP_CLAUSE_ORDERED:
16333 	case OMP_CLAUSE_HINT:
16334 	case OMP_CLAUSE_NUM_GANGS:
16335 	case OMP_CLAUSE_NUM_WORKERS:
16336 	case OMP_CLAUSE_VECTOR_LENGTH:
16337 	case OMP_CLAUSE_WORKER:
16338 	case OMP_CLAUSE_VECTOR:
16339 	case OMP_CLAUSE_ASYNC:
16340 	case OMP_CLAUSE_WAIT:
16341 	  OMP_CLAUSE_OPERAND (nc, 0)
16342 	    = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
16343 			   in_decl, /*integral_constant_expression_p=*/false);
16344 	  break;
16345 	case OMP_CLAUSE_REDUCTION:
16346 	case OMP_CLAUSE_IN_REDUCTION:
16347 	case OMP_CLAUSE_TASK_REDUCTION:
16348 	  if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
16349 	    {
16350 	      tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
16351 	      if (TREE_CODE (placeholder) == SCOPE_REF)
16352 		{
16353 		  tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
16354 				       complain, in_decl);
16355 		  OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
16356 		    = build_qualified_name (NULL_TREE, scope,
16357 					    TREE_OPERAND (placeholder, 1),
16358 					    false);
16359 		}
16360 	      else
16361 		gcc_assert (identifier_p (placeholder));
16362 	    }
16363 	  OMP_CLAUSE_DECL (nc)
16364 	    = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
16365 				      in_decl, NULL);
16366 	  break;
16367 	case OMP_CLAUSE_GANG:
16368 	case OMP_CLAUSE_ALIGNED:
16369 	  OMP_CLAUSE_DECL (nc)
16370 	    = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
16371 				      in_decl, NULL);
16372 	  OMP_CLAUSE_OPERAND (nc, 1)
16373 	    = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
16374 			   in_decl, /*integral_constant_expression_p=*/false);
16375 	  break;
16376 	case OMP_CLAUSE_LINEAR:
16377 	  OMP_CLAUSE_DECL (nc)
16378 	    = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
16379 				      in_decl, NULL);
16380 	  if (OMP_CLAUSE_LINEAR_STEP (oc) == NULL_TREE)
16381 	    {
16382 	      gcc_assert (!linear_no_step);
16383 	      linear_no_step = nc;
16384 	    }
16385 	  else if (OMP_CLAUSE_LINEAR_VARIABLE_STRIDE (oc))
16386 	    OMP_CLAUSE_LINEAR_STEP (nc)
16387 	      = tsubst_omp_clause_decl (OMP_CLAUSE_LINEAR_STEP (oc), args,
16388 					complain, in_decl, NULL);
16389 	  else
16390 	    OMP_CLAUSE_LINEAR_STEP (nc)
16391 	      = tsubst_expr (OMP_CLAUSE_LINEAR_STEP (oc), args, complain,
16392 			     in_decl,
16393 			     /*integral_constant_expression_p=*/false);
16394 	  break;
16395 	case OMP_CLAUSE_NOWAIT:
16396 	case OMP_CLAUSE_DEFAULT:
16397 	case OMP_CLAUSE_UNTIED:
16398 	case OMP_CLAUSE_MERGEABLE:
16399 	case OMP_CLAUSE_INBRANCH:
16400 	case OMP_CLAUSE_NOTINBRANCH:
16401 	case OMP_CLAUSE_PROC_BIND:
16402 	case OMP_CLAUSE_FOR:
16403 	case OMP_CLAUSE_PARALLEL:
16404 	case OMP_CLAUSE_SECTIONS:
16405 	case OMP_CLAUSE_TASKGROUP:
16406 	case OMP_CLAUSE_NOGROUP:
16407 	case OMP_CLAUSE_THREADS:
16408 	case OMP_CLAUSE_SIMD:
16409 	case OMP_CLAUSE_DEFAULTMAP:
16410 	case OMP_CLAUSE_INDEPENDENT:
16411 	case OMP_CLAUSE_AUTO:
16412 	case OMP_CLAUSE_SEQ:
16413 	case OMP_CLAUSE_IF_PRESENT:
16414 	case OMP_CLAUSE_FINALIZE:
16415 	  break;
16416 	default:
16417 	  gcc_unreachable ();
16418 	}
16419       if ((ort & C_ORT_OMP_DECLARE_SIMD) == C_ORT_OMP)
16420 	switch (OMP_CLAUSE_CODE (nc))
16421 	  {
16422 	  case OMP_CLAUSE_SHARED:
16423 	  case OMP_CLAUSE_PRIVATE:
16424 	  case OMP_CLAUSE_FIRSTPRIVATE:
16425 	  case OMP_CLAUSE_LASTPRIVATE:
16426 	  case OMP_CLAUSE_COPYPRIVATE:
16427 	  case OMP_CLAUSE_LINEAR:
16428 	  case OMP_CLAUSE_REDUCTION:
16429 	  case OMP_CLAUSE_IN_REDUCTION:
16430 	  case OMP_CLAUSE_TASK_REDUCTION:
16431 	  case OMP_CLAUSE_USE_DEVICE_PTR:
16432 	  case OMP_CLAUSE_IS_DEVICE_PTR:
16433 	    /* tsubst_expr on SCOPE_REF results in returning
16434 	       finish_non_static_data_member result.  Undo that here.  */
16435 	    if (TREE_CODE (OMP_CLAUSE_DECL (oc)) == SCOPE_REF
16436 		&& (TREE_CODE (TREE_OPERAND (OMP_CLAUSE_DECL (oc), 1))
16437 		    == IDENTIFIER_NODE))
16438 	      {
16439 		tree t = OMP_CLAUSE_DECL (nc);
16440 		tree v = t;
16441 		while (v)
16442 		  switch (TREE_CODE (v))
16443 		    {
16444 		    case COMPONENT_REF:
16445 		    case MEM_REF:
16446 		    case INDIRECT_REF:
16447 		    CASE_CONVERT:
16448 		    case POINTER_PLUS_EXPR:
16449 		      v = TREE_OPERAND (v, 0);
16450 		      continue;
16451 		    case PARM_DECL:
16452 		      if (DECL_CONTEXT (v) == current_function_decl
16453 			  && DECL_ARTIFICIAL (v)
16454 			  && DECL_NAME (v) == this_identifier)
16455 			OMP_CLAUSE_DECL (nc) = TREE_OPERAND (t, 1);
16456 		      /* FALLTHRU */
16457 		    default:
16458 		      v = NULL_TREE;
16459 		      break;
16460 		    }
16461 	      }
16462 	    else if (VAR_P (OMP_CLAUSE_DECL (oc))
16463 		     && DECL_HAS_VALUE_EXPR_P (OMP_CLAUSE_DECL (oc))
16464 		     && DECL_ARTIFICIAL (OMP_CLAUSE_DECL (oc))
16465 		     && DECL_LANG_SPECIFIC (OMP_CLAUSE_DECL (oc))
16466 		     && DECL_OMP_PRIVATIZED_MEMBER (OMP_CLAUSE_DECL (oc)))
16467 	      {
16468 		tree decl = OMP_CLAUSE_DECL (nc);
16469 		if (VAR_P (decl))
16470 		  {
16471 		    retrofit_lang_decl (decl);
16472 		    DECL_OMP_PRIVATIZED_MEMBER (decl) = 1;
16473 		  }
16474 	      }
16475 	    break;
16476 	  default:
16477 	    break;
16478 	  }
16479     }
16480 
16481   new_clauses = nreverse (new_clauses);
16482   if (ort != C_ORT_OMP_DECLARE_SIMD)
16483     {
16484       new_clauses = finish_omp_clauses (new_clauses, ort);
16485       if (linear_no_step)
16486 	for (nc = new_clauses; nc; nc = OMP_CLAUSE_CHAIN (nc))
16487 	  if (nc == linear_no_step)
16488 	    {
16489 	      OMP_CLAUSE_LINEAR_STEP (nc) = NULL_TREE;
16490 	      break;
16491 	    }
16492     }
16493   return new_clauses;
16494 }
16495 
16496 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
16497 
16498 static tree
tsubst_copy_asm_operands(tree t,tree args,tsubst_flags_t complain,tree in_decl)16499 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
16500 			  tree in_decl)
16501 {
16502 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
16503 
16504   tree purpose, value, chain;
16505 
16506   if (t == NULL)
16507     return t;
16508 
16509   if (TREE_CODE (t) != TREE_LIST)
16510     return tsubst_copy_and_build (t, args, complain, in_decl,
16511 				  /*function_p=*/false,
16512 				  /*integral_constant_expression_p=*/false);
16513 
16514   if (t == void_list_node)
16515     return t;
16516 
16517   purpose = TREE_PURPOSE (t);
16518   if (purpose)
16519     purpose = RECUR (purpose);
16520   value = TREE_VALUE (t);
16521   if (value)
16522     {
16523       if (TREE_CODE (value) != LABEL_DECL)
16524 	value = RECUR (value);
16525       else
16526 	{
16527 	  value = lookup_label (DECL_NAME (value));
16528 	  gcc_assert (TREE_CODE (value) == LABEL_DECL);
16529 	  TREE_USED (value) = 1;
16530 	}
16531     }
16532   chain = TREE_CHAIN (t);
16533   if (chain && chain != void_type_node)
16534     chain = RECUR (chain);
16535   return tree_cons (purpose, value, chain);
16536 #undef RECUR
16537 }
16538 
16539 /* Used to temporarily communicate the list of #pragma omp parallel
16540    clauses to #pragma omp for instantiation if they are combined
16541    together.  */
16542 
16543 static tree *omp_parallel_combined_clauses;
16544 
16545 static tree tsubst_decomp_names (tree, tree, tree, tsubst_flags_t, tree,
16546 				 tree *, unsigned int *);
16547 
16548 /* Substitute one OMP_FOR iterator.  */
16549 
16550 static bool
tsubst_omp_for_iterator(tree t,int i,tree declv,tree & orig_declv,tree initv,tree condv,tree incrv,tree * clauses,tree args,tsubst_flags_t complain,tree in_decl,bool integral_constant_expression_p)16551 tsubst_omp_for_iterator (tree t, int i, tree declv, tree &orig_declv,
16552 			 tree initv, tree condv, tree incrv, tree *clauses,
16553 			 tree args, tsubst_flags_t complain, tree in_decl,
16554 			 bool integral_constant_expression_p)
16555 {
16556 #define RECUR(NODE)				\
16557   tsubst_expr ((NODE), args, complain, in_decl,	\
16558 	       integral_constant_expression_p)
16559   tree decl, init, cond = NULL_TREE, incr = NULL_TREE;
16560   bool ret = false;
16561 
16562   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
16563   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
16564 
16565   decl = TREE_OPERAND (init, 0);
16566   init = TREE_OPERAND (init, 1);
16567   tree decl_expr = NULL_TREE;
16568   bool range_for = TREE_VEC_ELT (OMP_FOR_COND (t), i) == global_namespace;
16569   if (range_for)
16570     {
16571       bool decomp = false;
16572       if (decl != error_mark_node && DECL_HAS_VALUE_EXPR_P (decl))
16573 	{
16574 	  tree v = DECL_VALUE_EXPR (decl);
16575 	  if (TREE_CODE (v) == ARRAY_REF
16576 	      && VAR_P (TREE_OPERAND (v, 0))
16577 	      && DECL_DECOMPOSITION_P (TREE_OPERAND (v, 0)))
16578 	    {
16579 	      tree decomp_first = NULL_TREE;
16580 	      unsigned decomp_cnt = 0;
16581 	      tree d = tsubst_decl (TREE_OPERAND (v, 0), args, complain);
16582 	      maybe_push_decl (d);
16583 	      d = tsubst_decomp_names (d, TREE_OPERAND (v, 0), args, complain,
16584 				       in_decl, &decomp_first, &decomp_cnt);
16585 	      decomp = true;
16586 	      if (d == error_mark_node)
16587 		decl = error_mark_node;
16588 	      else
16589 		for (unsigned int i = 0; i < decomp_cnt; i++)
16590 		  {
16591 		    if (!DECL_HAS_VALUE_EXPR_P (decomp_first))
16592 		      {
16593 			tree v = build_nt (ARRAY_REF, d,
16594 					   size_int (decomp_cnt - i - 1),
16595 					   NULL_TREE, NULL_TREE);
16596 			SET_DECL_VALUE_EXPR (decomp_first, v);
16597 			DECL_HAS_VALUE_EXPR_P (decomp_first) = 1;
16598 		      }
16599 		    fit_decomposition_lang_decl (decomp_first, d);
16600 		    decomp_first = DECL_CHAIN (decomp_first);
16601 		  }
16602 	    }
16603 	}
16604       decl = tsubst_decl (decl, args, complain);
16605       if (!decomp)
16606 	maybe_push_decl (decl);
16607     }
16608   else if (init && TREE_CODE (init) == DECL_EXPR)
16609     {
16610       /* We need to jump through some hoops to handle declarations in the
16611 	 init-statement, since we might need to handle auto deduction,
16612 	 but we need to keep control of initialization.  */
16613       decl_expr = init;
16614       init = DECL_INITIAL (DECL_EXPR_DECL (init));
16615       decl = tsubst_decl (decl, args, complain);
16616     }
16617   else
16618     {
16619       if (TREE_CODE (decl) == SCOPE_REF)
16620 	{
16621 	  decl = RECUR (decl);
16622 	  if (TREE_CODE (decl) == COMPONENT_REF)
16623 	    {
16624 	      tree v = decl;
16625 	      while (v)
16626 		switch (TREE_CODE (v))
16627 		  {
16628 		  case COMPONENT_REF:
16629 		  case MEM_REF:
16630 		  case INDIRECT_REF:
16631 		  CASE_CONVERT:
16632 		  case POINTER_PLUS_EXPR:
16633 		    v = TREE_OPERAND (v, 0);
16634 		    continue;
16635 		  case PARM_DECL:
16636 		    if (DECL_CONTEXT (v) == current_function_decl
16637 			&& DECL_ARTIFICIAL (v)
16638 			&& DECL_NAME (v) == this_identifier)
16639 		      {
16640 			decl = TREE_OPERAND (decl, 1);
16641 			decl = omp_privatize_field (decl, false);
16642 		      }
16643 		    /* FALLTHRU */
16644 		  default:
16645 		    v = NULL_TREE;
16646 		    break;
16647 		  }
16648 	    }
16649 	}
16650       else
16651 	decl = RECUR (decl);
16652     }
16653   init = RECUR (init);
16654 
16655   if (orig_declv && OMP_FOR_ORIG_DECLS (t))
16656     {
16657       tree o = TREE_VEC_ELT (OMP_FOR_ORIG_DECLS (t), i);
16658       if (TREE_CODE (o) == TREE_LIST)
16659 	TREE_VEC_ELT (orig_declv, i)
16660 	  = tree_cons (RECUR (TREE_PURPOSE (o)),
16661 		       RECUR (TREE_VALUE (o)),
16662 		       NULL_TREE);
16663       else
16664 	TREE_VEC_ELT (orig_declv, i) = RECUR (o);
16665     }
16666 
16667   if (range_for)
16668     {
16669       tree this_pre_body = NULL_TREE;
16670       tree orig_init = NULL_TREE;
16671       tree orig_decl = NULL_TREE;
16672       cp_convert_omp_range_for (this_pre_body, NULL, decl, orig_decl, init,
16673 				orig_init, cond, incr);
16674       if (orig_decl)
16675 	{
16676 	  if (orig_declv == NULL_TREE)
16677 	    orig_declv = copy_node (declv);
16678 	  TREE_VEC_ELT (orig_declv, i) = orig_decl;
16679 	  ret = true;
16680 	}
16681       else if (orig_declv)
16682 	TREE_VEC_ELT (orig_declv, i) = decl;
16683     }
16684 
16685   tree auto_node = type_uses_auto (TREE_TYPE (decl));
16686   if (!range_for && auto_node && init)
16687     TREE_TYPE (decl)
16688       = do_auto_deduction (TREE_TYPE (decl), init, auto_node, complain);
16689 
16690   gcc_assert (!type_dependent_expression_p (decl));
16691 
16692   if (!CLASS_TYPE_P (TREE_TYPE (decl)) || range_for)
16693     {
16694       if (decl_expr)
16695 	{
16696 	  /* Declare the variable, but don't let that initialize it.  */
16697 	  tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
16698 	  DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
16699 	  RECUR (decl_expr);
16700 	  DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
16701 	}
16702 
16703       if (!range_for)
16704 	{
16705 	  cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
16706 	  incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
16707 	  if (TREE_CODE (incr) == MODIFY_EXPR)
16708 	    {
16709 	      tree lhs = RECUR (TREE_OPERAND (incr, 0));
16710 	      tree rhs = RECUR (TREE_OPERAND (incr, 1));
16711 	      incr = build_x_modify_expr (EXPR_LOCATION (incr), lhs,
16712 					  NOP_EXPR, rhs, complain);
16713 	    }
16714 	  else
16715 	    incr = RECUR (incr);
16716 	  if (orig_declv && !OMP_FOR_ORIG_DECLS (t))
16717 	    TREE_VEC_ELT (orig_declv, i) = decl;
16718 	}
16719       TREE_VEC_ELT (declv, i) = decl;
16720       TREE_VEC_ELT (initv, i) = init;
16721       TREE_VEC_ELT (condv, i) = cond;
16722       TREE_VEC_ELT (incrv, i) = incr;
16723       return ret;
16724     }
16725 
16726   if (decl_expr)
16727     {
16728       /* Declare and initialize the variable.  */
16729       RECUR (decl_expr);
16730       init = NULL_TREE;
16731     }
16732   else if (init)
16733     {
16734       tree *pc;
16735       int j;
16736       for (j = (omp_parallel_combined_clauses == NULL ? 1 : 0); j < 2; j++)
16737 	{
16738 	  for (pc = j ? clauses : omp_parallel_combined_clauses; *pc; )
16739 	    {
16740 	      if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_PRIVATE
16741 		  && OMP_CLAUSE_DECL (*pc) == decl)
16742 		break;
16743 	      else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_LASTPRIVATE
16744 		       && OMP_CLAUSE_DECL (*pc) == decl)
16745 		{
16746 		  if (j)
16747 		    break;
16748 		  /* Move lastprivate (decl) clause to OMP_FOR_CLAUSES.  */
16749 		  tree c = *pc;
16750 		  *pc = OMP_CLAUSE_CHAIN (c);
16751 		  OMP_CLAUSE_CHAIN (c) = *clauses;
16752 		  *clauses = c;
16753 		}
16754 	      else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_FIRSTPRIVATE
16755 		       && OMP_CLAUSE_DECL (*pc) == decl)
16756 		{
16757 		  error ("iteration variable %qD should not be firstprivate",
16758 			 decl);
16759 		  *pc = OMP_CLAUSE_CHAIN (*pc);
16760 		}
16761 	      else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_REDUCTION
16762 		       && OMP_CLAUSE_DECL (*pc) == decl)
16763 		{
16764 		  error ("iteration variable %qD should not be reduction",
16765 			 decl);
16766 		  *pc = OMP_CLAUSE_CHAIN (*pc);
16767 		}
16768 	      else
16769 		pc = &OMP_CLAUSE_CHAIN (*pc);
16770 	    }
16771 	  if (*pc)
16772 	    break;
16773 	}
16774       if (*pc == NULL_TREE)
16775 	{
16776 	  tree c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
16777 	  OMP_CLAUSE_DECL (c) = decl;
16778 	  c = finish_omp_clauses (c, C_ORT_OMP);
16779 	  if (c)
16780 	    {
16781 	      OMP_CLAUSE_CHAIN (c) = *clauses;
16782 	      *clauses = c;
16783 	    }
16784 	}
16785     }
16786   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
16787   if (COMPARISON_CLASS_P (cond))
16788     {
16789       tree op0 = RECUR (TREE_OPERAND (cond, 0));
16790       tree op1 = RECUR (TREE_OPERAND (cond, 1));
16791       cond = build2 (TREE_CODE (cond), boolean_type_node, op0, op1);
16792     }
16793   else
16794     cond = RECUR (cond);
16795   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
16796   switch (TREE_CODE (incr))
16797     {
16798     case PREINCREMENT_EXPR:
16799     case PREDECREMENT_EXPR:
16800     case POSTINCREMENT_EXPR:
16801     case POSTDECREMENT_EXPR:
16802       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
16803 		     RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
16804       break;
16805     case MODIFY_EXPR:
16806       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
16807 	  || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
16808 	{
16809 	  tree rhs = TREE_OPERAND (incr, 1);
16810 	  tree lhs = RECUR (TREE_OPERAND (incr, 0));
16811 	  tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
16812 	  tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
16813 	  incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
16814 			 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
16815 				 rhs0, rhs1));
16816 	}
16817       else
16818 	incr = RECUR (incr);
16819       break;
16820     case MODOP_EXPR:
16821       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
16822 	  || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
16823 	{
16824 	  tree lhs = RECUR (TREE_OPERAND (incr, 0));
16825 	  incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
16826 			 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
16827 				 TREE_TYPE (decl), lhs,
16828 				 RECUR (TREE_OPERAND (incr, 2))));
16829 	}
16830       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
16831 	       && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
16832 		   || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
16833 	{
16834 	  tree rhs = TREE_OPERAND (incr, 2);
16835 	  tree lhs = RECUR (TREE_OPERAND (incr, 0));
16836 	  tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
16837 	  tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
16838 	  incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
16839 			 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
16840 				 rhs0, rhs1));
16841 	}
16842       else
16843 	incr = RECUR (incr);
16844       break;
16845     default:
16846       incr = RECUR (incr);
16847       break;
16848     }
16849 
16850   if (orig_declv && !OMP_FOR_ORIG_DECLS (t))
16851     TREE_VEC_ELT (orig_declv, i) = decl;
16852   TREE_VEC_ELT (declv, i) = decl;
16853   TREE_VEC_ELT (initv, i) = init;
16854   TREE_VEC_ELT (condv, i) = cond;
16855   TREE_VEC_ELT (incrv, i) = incr;
16856   return false;
16857 #undef RECUR
16858 }
16859 
16860 /* Helper function of tsubst_expr, find OMP_TEAMS inside
16861    of OMP_TARGET's body.  */
16862 
16863 static tree
tsubst_find_omp_teams(tree * tp,int * walk_subtrees,void *)16864 tsubst_find_omp_teams (tree *tp, int *walk_subtrees, void *)
16865 {
16866   *walk_subtrees = 0;
16867   switch (TREE_CODE (*tp))
16868     {
16869     case OMP_TEAMS:
16870       return *tp;
16871     case BIND_EXPR:
16872     case STATEMENT_LIST:
16873       *walk_subtrees = 1;
16874       break;
16875     default:
16876       break;
16877     }
16878   return NULL_TREE;
16879 }
16880 
16881 /* Helper function for tsubst_expr.  For decomposition declaration
16882    artificial base DECL, which is tsubsted PATTERN_DECL, tsubst
16883    also the corresponding decls representing the identifiers
16884    of the decomposition declaration.  Return DECL if successful
16885    or error_mark_node otherwise, set *FIRST to the first decl
16886    in the list chained through DECL_CHAIN and *CNT to the number
16887    of such decls.  */
16888 
16889 static tree
tsubst_decomp_names(tree decl,tree pattern_decl,tree args,tsubst_flags_t complain,tree in_decl,tree * first,unsigned int * cnt)16890 tsubst_decomp_names (tree decl, tree pattern_decl, tree args,
16891 		     tsubst_flags_t complain, tree in_decl, tree *first,
16892 		     unsigned int *cnt)
16893 {
16894   tree decl2, decl3, prev = decl;
16895   *cnt = 0;
16896   gcc_assert (DECL_NAME (decl) == NULL_TREE);
16897   for (decl2 = DECL_CHAIN (pattern_decl);
16898        decl2
16899        && VAR_P (decl2)
16900        && DECL_DECOMPOSITION_P (decl2)
16901        && DECL_NAME (decl2);
16902        decl2 = DECL_CHAIN (decl2))
16903     {
16904       if (TREE_TYPE (decl2) == error_mark_node && *cnt == 0)
16905 	{
16906 	  gcc_assert (errorcount);
16907 	  return error_mark_node;
16908 	}
16909       (*cnt)++;
16910       gcc_assert (DECL_DECOMP_BASE (decl2) == pattern_decl);
16911       gcc_assert (DECL_HAS_VALUE_EXPR_P (decl2));
16912       tree v = DECL_VALUE_EXPR (decl2);
16913       DECL_HAS_VALUE_EXPR_P (decl2) = 0;
16914       SET_DECL_VALUE_EXPR (decl2, NULL_TREE);
16915       decl3 = tsubst (decl2, args, complain, in_decl);
16916       SET_DECL_VALUE_EXPR (decl2, v);
16917       DECL_HAS_VALUE_EXPR_P (decl2) = 1;
16918       if (VAR_P (decl3))
16919 	DECL_TEMPLATE_INSTANTIATED (decl3) = 1;
16920       else
16921 	{
16922 	  gcc_assert (errorcount);
16923 	  decl = error_mark_node;
16924 	  continue;
16925 	}
16926       maybe_push_decl (decl3);
16927       if (error_operand_p (decl3))
16928 	decl = error_mark_node;
16929       else if (decl != error_mark_node
16930 	       && DECL_CHAIN (decl3) != prev
16931 	       && decl != prev)
16932 	{
16933 	  gcc_assert (errorcount);
16934 	  decl = error_mark_node;
16935 	}
16936       else
16937 	prev = decl3;
16938     }
16939   *first = prev;
16940   return decl;
16941 }
16942 
16943 /* Return the proper local_specialization for init-capture pack DECL.  */
16944 
16945 static tree
lookup_init_capture_pack(tree decl)16946 lookup_init_capture_pack (tree decl)
16947 {
16948   /* We handle normal pack captures by forwarding to the specialization of the
16949      captured parameter.  We can't do that for pack init-captures; we need them
16950      to have their own local_specialization.  We created the individual
16951      VAR_DECLs (if any) under build_capture_proxy, and we need to collect them
16952      when we process the DECL_EXPR for the pack init-capture in the template.
16953      So, how do we find them?  We don't know the capture proxy pack when
16954      building the individual resulting proxies, and we don't know the
16955      individual proxies when instantiating the pack.  What we have in common is
16956      the FIELD_DECL.
16957 
16958      So...when we instantiate the FIELD_DECL, we stick the result in
16959      local_specializations.  Then at the DECL_EXPR we look up that result, see
16960      how many elements it has, synthesize the names, and look them up.  */
16961 
16962   tree cname = DECL_NAME (decl);
16963   tree val = DECL_VALUE_EXPR (decl);
16964   tree field = TREE_OPERAND (val, 1);
16965   gcc_assert (TREE_CODE (field) == FIELD_DECL);
16966   tree fpack = retrieve_local_specialization (field);
16967   if (fpack == error_mark_node)
16968     return error_mark_node;
16969 
16970   int len = 1;
16971   tree vec = NULL_TREE;
16972   tree r = NULL_TREE;
16973   if (TREE_CODE (fpack) == TREE_VEC)
16974     {
16975       len = TREE_VEC_LENGTH (fpack);
16976       vec = make_tree_vec (len);
16977       r = make_node (NONTYPE_ARGUMENT_PACK);
16978       SET_ARGUMENT_PACK_ARGS (r, vec);
16979     }
16980   for (int i = 0; i < len; ++i)
16981     {
16982       tree ename = vec ? make_ith_pack_parameter_name (cname, i) : cname;
16983       tree elt = lookup_name_real (ename, 0, 0, true, 0, LOOKUP_NORMAL);
16984       if (vec)
16985 	TREE_VEC_ELT (vec, i) = elt;
16986       else
16987 	r = elt;
16988     }
16989   return r;
16990 }
16991 
16992 /* Like tsubst_copy for expressions, etc. but also does semantic
16993    processing.  */
16994 
16995 tree
tsubst_expr(tree t,tree args,tsubst_flags_t complain,tree in_decl,bool integral_constant_expression_p)16996 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
16997 	     bool integral_constant_expression_p)
16998 {
16999 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
17000 #define RECUR(NODE)				\
17001   tsubst_expr ((NODE), args, complain, in_decl,	\
17002 	       integral_constant_expression_p)
17003 
17004   tree stmt, tmp;
17005   tree r;
17006   location_t loc;
17007 
17008   if (t == NULL_TREE || t == error_mark_node)
17009     return t;
17010 
17011   loc = input_location;
17012   if (location_t eloc = cp_expr_location (t))
17013     input_location = eloc;
17014   if (STATEMENT_CODE_P (TREE_CODE (t)))
17015     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
17016 
17017   switch (TREE_CODE (t))
17018     {
17019     case STATEMENT_LIST:
17020       {
17021 	tree_stmt_iterator i;
17022 	for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
17023 	  RECUR (tsi_stmt (i));
17024 	break;
17025       }
17026 
17027     case CTOR_INITIALIZER:
17028       finish_mem_initializers (tsubst_initializer_list
17029 			       (TREE_OPERAND (t, 0), args));
17030       break;
17031 
17032     case RETURN_EXPR:
17033       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
17034       break;
17035 
17036     case EXPR_STMT:
17037       tmp = RECUR (EXPR_STMT_EXPR (t));
17038       if (EXPR_STMT_STMT_EXPR_RESULT (t))
17039 	finish_stmt_expr_expr (tmp, cur_stmt_expr);
17040       else
17041 	finish_expr_stmt (tmp);
17042       break;
17043 
17044     case USING_STMT:
17045       finish_local_using_directive (USING_STMT_NAMESPACE (t),
17046 				    /*attribs=*/NULL_TREE);
17047       break;
17048 
17049     case DECL_EXPR:
17050       {
17051 	tree decl, pattern_decl;
17052 	tree init;
17053 
17054 	pattern_decl = decl = DECL_EXPR_DECL (t);
17055 	if (TREE_CODE (decl) == LABEL_DECL)
17056 	  finish_label_decl (DECL_NAME (decl));
17057 	else if (TREE_CODE (decl) == USING_DECL)
17058 	  {
17059 	    tree scope = USING_DECL_SCOPE (decl);
17060 	    tree name = DECL_NAME (decl);
17061 
17062 	    scope = tsubst (scope, args, complain, in_decl);
17063 	    decl = lookup_qualified_name (scope, name,
17064 					  /*is_type_p=*/false,
17065 					  /*complain=*/false);
17066 	    if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
17067 	      qualified_name_lookup_error (scope, name, decl, input_location);
17068 	    else
17069 	      finish_local_using_decl (decl, scope, name);
17070 	  }
17071 	else if (is_capture_proxy (decl)
17072 		 && !DECL_TEMPLATE_INSTANTIATION (current_function_decl))
17073 	  {
17074 	    /* We're in tsubst_lambda_expr, we've already inserted a new
17075 	       capture proxy, so look it up and register it.  */
17076 	    tree inst;
17077 	    if (!DECL_PACK_P (decl))
17078 	      {
17079 		inst = lookup_name_real (DECL_NAME (decl), /*prefer_type*/0,
17080 					 /*nonclass*/1, /*block_p=*/true,
17081 					 /*ns_only*/0, LOOKUP_HIDDEN);
17082 		gcc_assert (inst != decl && is_capture_proxy (inst));
17083 	      }
17084 	    else if (is_normal_capture_proxy (decl))
17085 	      {
17086 		inst = (retrieve_local_specialization
17087 			(DECL_CAPTURED_VARIABLE (decl)));
17088 		gcc_assert (TREE_CODE (inst) == NONTYPE_ARGUMENT_PACK);
17089 	      }
17090 	    else
17091 	      inst = lookup_init_capture_pack (decl);
17092 
17093 	    register_local_specialization (inst, decl);
17094 	    break;
17095 	  }
17096 	else if (DECL_PRETTY_FUNCTION_P (decl))
17097 	  decl = make_fname_decl (DECL_SOURCE_LOCATION (decl),
17098 				  DECL_NAME (decl),
17099 				  true/*DECL_PRETTY_FUNCTION_P (decl)*/);
17100 	else if (DECL_IMPLICIT_TYPEDEF_P (decl)
17101 		 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
17102 	  /* Don't copy the old closure; we'll create a new one in
17103 	     tsubst_lambda_expr.  */
17104 	  break;
17105 	else
17106 	  {
17107 	    init = DECL_INITIAL (decl);
17108 	    decl = tsubst (decl, args, complain, in_decl);
17109 	    if (decl != error_mark_node)
17110 	      {
17111 		/* By marking the declaration as instantiated, we avoid
17112 		   trying to instantiate it.  Since instantiate_decl can't
17113 		   handle local variables, and since we've already done
17114 		   all that needs to be done, that's the right thing to
17115 		   do.  */
17116 		if (VAR_P (decl))
17117 		  DECL_TEMPLATE_INSTANTIATED (decl) = 1;
17118 		if (VAR_P (decl) && !DECL_NAME (decl)
17119 		    && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
17120 		  /* Anonymous aggregates are a special case.  */
17121 		  finish_anon_union (decl);
17122 		else if (is_capture_proxy (DECL_EXPR_DECL (t)))
17123 		  {
17124 		    DECL_CONTEXT (decl) = current_function_decl;
17125 		    if (DECL_NAME (decl) == this_identifier)
17126 		      {
17127 			tree lam = DECL_CONTEXT (current_function_decl);
17128 			lam = CLASSTYPE_LAMBDA_EXPR (lam);
17129 			LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
17130 		      }
17131 		    insert_capture_proxy (decl);
17132 		  }
17133 		else if (DECL_IMPLICIT_TYPEDEF_P (t))
17134 		  /* We already did a pushtag.  */;
17135 		else if (TREE_CODE (decl) == FUNCTION_DECL
17136 			 && DECL_OMP_DECLARE_REDUCTION_P (decl)
17137 			 && DECL_FUNCTION_SCOPE_P (pattern_decl))
17138 		  {
17139 		    DECL_CONTEXT (decl) = NULL_TREE;
17140 		    pushdecl (decl);
17141 		    DECL_CONTEXT (decl) = current_function_decl;
17142 		    cp_check_omp_declare_reduction (decl);
17143 		  }
17144 		else
17145 		  {
17146 		    int const_init = false;
17147 		    unsigned int cnt = 0;
17148 		    tree first = NULL_TREE, ndecl = error_mark_node;
17149 		    maybe_push_decl (decl);
17150 
17151 		    if (VAR_P (decl)
17152 			&& DECL_DECOMPOSITION_P (decl)
17153 			&& TREE_TYPE (pattern_decl) != error_mark_node)
17154 		      ndecl = tsubst_decomp_names (decl, pattern_decl, args,
17155 						   complain, in_decl, &first,
17156 						   &cnt);
17157 
17158 		    init = tsubst_init (init, decl, args, complain, in_decl);
17159 
17160 		    if (VAR_P (decl))
17161 		      const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
17162 				    (pattern_decl));
17163 
17164 		    if (ndecl != error_mark_node)
17165 		      cp_maybe_mangle_decomp (ndecl, first, cnt);
17166 
17167 		    cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
17168 
17169 		    if (ndecl != error_mark_node)
17170 		      cp_finish_decomp (ndecl, first, cnt);
17171 		  }
17172 	      }
17173 	  }
17174 
17175 	break;
17176       }
17177 
17178     case FOR_STMT:
17179       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
17180       RECUR (FOR_INIT_STMT (t));
17181       finish_init_stmt (stmt);
17182       tmp = RECUR (FOR_COND (t));
17183       finish_for_cond (tmp, stmt, false, 0);
17184       tmp = RECUR (FOR_EXPR (t));
17185       finish_for_expr (tmp, stmt);
17186       {
17187 	bool prev = note_iteration_stmt_body_start ();
17188 	RECUR (FOR_BODY (t));
17189 	note_iteration_stmt_body_end (prev);
17190       }
17191       finish_for_stmt (stmt);
17192       break;
17193 
17194     case RANGE_FOR_STMT:
17195       {
17196 	/* Construct another range_for, if this is not a final
17197 	   substitution (for inside inside a generic lambda of a
17198 	   template).  Otherwise convert to a regular for.  */
17199         tree decl, expr;
17200         stmt = (processing_template_decl
17201 		? begin_range_for_stmt (NULL_TREE, NULL_TREE)
17202 		: begin_for_stmt (NULL_TREE, NULL_TREE));
17203 	RECUR (RANGE_FOR_INIT_STMT (t));
17204         decl = RANGE_FOR_DECL (t);
17205         decl = tsubst (decl, args, complain, in_decl);
17206         maybe_push_decl (decl);
17207         expr = RECUR (RANGE_FOR_EXPR (t));
17208 
17209 	tree decomp_first = NULL_TREE;
17210 	unsigned decomp_cnt = 0;
17211 	if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
17212 	  decl = tsubst_decomp_names (decl, RANGE_FOR_DECL (t), args,
17213 				      complain, in_decl,
17214 				      &decomp_first, &decomp_cnt);
17215 
17216 	if (processing_template_decl)
17217 	  {
17218 	    RANGE_FOR_IVDEP (stmt) = RANGE_FOR_IVDEP (t);
17219 	    RANGE_FOR_UNROLL (stmt) = RANGE_FOR_UNROLL (t);
17220 	    finish_range_for_decl (stmt, decl, expr);
17221 	    if (decomp_first && decl != error_mark_node)
17222 	      cp_finish_decomp (decl, decomp_first, decomp_cnt);
17223 	  }
17224 	else
17225 	  {
17226 	    unsigned short unroll = (RANGE_FOR_UNROLL (t)
17227 				     ? tree_to_uhwi (RANGE_FOR_UNROLL (t)) : 0);
17228 	    stmt = cp_convert_range_for (stmt, decl, expr,
17229 					 decomp_first, decomp_cnt,
17230 					 RANGE_FOR_IVDEP (t), unroll);
17231 	  }
17232 
17233 	bool prev = note_iteration_stmt_body_start ();
17234         RECUR (RANGE_FOR_BODY (t));
17235 	note_iteration_stmt_body_end (prev);
17236         finish_for_stmt (stmt);
17237       }
17238       break;
17239 
17240     case WHILE_STMT:
17241       stmt = begin_while_stmt ();
17242       tmp = RECUR (WHILE_COND (t));
17243       finish_while_stmt_cond (tmp, stmt, false, 0);
17244       {
17245 	bool prev = note_iteration_stmt_body_start ();
17246 	RECUR (WHILE_BODY (t));
17247 	note_iteration_stmt_body_end (prev);
17248       }
17249       finish_while_stmt (stmt);
17250       break;
17251 
17252     case DO_STMT:
17253       stmt = begin_do_stmt ();
17254       {
17255 	bool prev = note_iteration_stmt_body_start ();
17256 	RECUR (DO_BODY (t));
17257 	note_iteration_stmt_body_end (prev);
17258       }
17259       finish_do_body (stmt);
17260       tmp = RECUR (DO_COND (t));
17261       finish_do_stmt (tmp, stmt, false, 0);
17262       break;
17263 
17264     case IF_STMT:
17265       stmt = begin_if_stmt ();
17266       IF_STMT_CONSTEXPR_P (stmt) = IF_STMT_CONSTEXPR_P (t);
17267       if (IF_STMT_CONSTEXPR_P (t))
17268 	args = add_extra_args (IF_STMT_EXTRA_ARGS (t), args);
17269       tmp = RECUR (IF_COND (t));
17270       tmp = finish_if_stmt_cond (tmp, stmt);
17271       if (IF_STMT_CONSTEXPR_P (t)
17272 	  && instantiation_dependent_expression_p (tmp))
17273 	{
17274 	  /* We're partially instantiating a generic lambda, but the condition
17275 	     of the constexpr if is still dependent.  Don't substitute into the
17276 	     branches now, just remember the template arguments.  */
17277 	  do_poplevel (IF_SCOPE (stmt));
17278 	  IF_COND (stmt) = IF_COND (t);
17279 	  THEN_CLAUSE (stmt) = THEN_CLAUSE (t);
17280 	  ELSE_CLAUSE (stmt) = ELSE_CLAUSE (t);
17281 	  IF_STMT_EXTRA_ARGS (stmt) = build_extra_args (t, args, complain);
17282 	  add_stmt (stmt);
17283 	  break;
17284 	}
17285       if (IF_STMT_CONSTEXPR_P (t) && integer_zerop (tmp))
17286 	/* Don't instantiate the THEN_CLAUSE. */;
17287       else
17288 	{
17289 	  tree folded = fold_non_dependent_expr (tmp, complain);
17290 	  bool inhibit = integer_zerop (folded);
17291 	  if (inhibit)
17292 	    ++c_inhibit_evaluation_warnings;
17293 	  RECUR (THEN_CLAUSE (t));
17294 	  if (inhibit)
17295 	    --c_inhibit_evaluation_warnings;
17296 	}
17297       finish_then_clause (stmt);
17298 
17299       if (IF_STMT_CONSTEXPR_P (t) && integer_nonzerop (tmp))
17300 	/* Don't instantiate the ELSE_CLAUSE. */;
17301       else if (ELSE_CLAUSE (t))
17302 	{
17303 	  tree folded = fold_non_dependent_expr (tmp, complain);
17304 	  bool inhibit = integer_nonzerop (folded);
17305 	  begin_else_clause (stmt);
17306 	  if (inhibit)
17307 	    ++c_inhibit_evaluation_warnings;
17308 	  RECUR (ELSE_CLAUSE (t));
17309 	  if (inhibit)
17310 	    --c_inhibit_evaluation_warnings;
17311 	  finish_else_clause (stmt);
17312 	}
17313 
17314       finish_if_stmt (stmt);
17315       break;
17316 
17317     case BIND_EXPR:
17318       if (BIND_EXPR_BODY_BLOCK (t))
17319 	stmt = begin_function_body ();
17320       else
17321 	stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
17322 				    ? BCS_TRY_BLOCK : 0);
17323 
17324       RECUR (BIND_EXPR_BODY (t));
17325 
17326       if (BIND_EXPR_BODY_BLOCK (t))
17327 	finish_function_body (stmt);
17328       else
17329 	finish_compound_stmt (stmt);
17330       break;
17331 
17332     case BREAK_STMT:
17333       finish_break_stmt ();
17334       break;
17335 
17336     case CONTINUE_STMT:
17337       finish_continue_stmt ();
17338       break;
17339 
17340     case SWITCH_STMT:
17341       stmt = begin_switch_stmt ();
17342       tmp = RECUR (SWITCH_STMT_COND (t));
17343       finish_switch_cond (tmp, stmt);
17344       RECUR (SWITCH_STMT_BODY (t));
17345       finish_switch_stmt (stmt);
17346       break;
17347 
17348     case CASE_LABEL_EXPR:
17349       {
17350 	tree decl = CASE_LABEL (t);
17351 	tree low = RECUR (CASE_LOW (t));
17352 	tree high = RECUR (CASE_HIGH (t));
17353 	tree l = finish_case_label (EXPR_LOCATION (t), low, high);
17354 	if (l && TREE_CODE (l) == CASE_LABEL_EXPR)
17355 	  {
17356 	    tree label = CASE_LABEL (l);
17357 	    FALLTHROUGH_LABEL_P (label) = FALLTHROUGH_LABEL_P (decl);
17358 	    if (DECL_ATTRIBUTES (decl) != NULL_TREE)
17359 	      cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
17360 	  }
17361       }
17362       break;
17363 
17364     case LABEL_EXPR:
17365       {
17366 	tree decl = LABEL_EXPR_LABEL (t);
17367 	tree label;
17368 
17369 	label = finish_label_stmt (DECL_NAME (decl));
17370 	if (TREE_CODE (label) == LABEL_DECL)
17371 	  FALLTHROUGH_LABEL_P (label) = FALLTHROUGH_LABEL_P (decl);
17372 	if (DECL_ATTRIBUTES (decl) != NULL_TREE)
17373 	  cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
17374       }
17375       break;
17376 
17377     case GOTO_EXPR:
17378       tmp = GOTO_DESTINATION (t);
17379       if (TREE_CODE (tmp) != LABEL_DECL)
17380 	/* Computed goto's must be tsubst'd into.  On the other hand,
17381 	   non-computed gotos must not be; the identifier in question
17382 	   will have no binding.  */
17383 	tmp = RECUR (tmp);
17384       else
17385 	tmp = DECL_NAME (tmp);
17386       finish_goto_stmt (tmp);
17387       break;
17388 
17389     case ASM_EXPR:
17390       {
17391 	tree string = RECUR (ASM_STRING (t));
17392 	tree outputs = tsubst_copy_asm_operands (ASM_OUTPUTS (t), args,
17393 						 complain, in_decl);
17394 	tree inputs = tsubst_copy_asm_operands (ASM_INPUTS (t), args,
17395 						complain, in_decl);
17396 	tree clobbers = tsubst_copy_asm_operands (ASM_CLOBBERS (t), args,
17397 	 					  complain, in_decl);
17398 	tree labels = tsubst_copy_asm_operands (ASM_LABELS (t), args,
17399 						complain, in_decl);
17400 	tmp = finish_asm_stmt (ASM_VOLATILE_P (t), string, outputs, inputs,
17401 			       clobbers, labels, ASM_INLINE_P (t));
17402 	tree asm_expr = tmp;
17403 	if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
17404 	  asm_expr = TREE_OPERAND (asm_expr, 0);
17405 	ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
17406       }
17407       break;
17408 
17409     case TRY_BLOCK:
17410       if (CLEANUP_P (t))
17411 	{
17412 	  stmt = begin_try_block ();
17413 	  RECUR (TRY_STMTS (t));
17414 	  finish_cleanup_try_block (stmt);
17415 	  finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
17416 	}
17417       else
17418 	{
17419 	  tree compound_stmt = NULL_TREE;
17420 
17421 	  if (FN_TRY_BLOCK_P (t))
17422 	    stmt = begin_function_try_block (&compound_stmt);
17423 	  else
17424 	    stmt = begin_try_block ();
17425 
17426 	  RECUR (TRY_STMTS (t));
17427 
17428 	  if (FN_TRY_BLOCK_P (t))
17429 	    finish_function_try_block (stmt);
17430 	  else
17431 	    finish_try_block (stmt);
17432 
17433 	  RECUR (TRY_HANDLERS (t));
17434 	  if (FN_TRY_BLOCK_P (t))
17435 	    finish_function_handler_sequence (stmt, compound_stmt);
17436 	  else
17437 	    finish_handler_sequence (stmt);
17438 	}
17439       break;
17440 
17441     case HANDLER:
17442       {
17443 	tree decl = HANDLER_PARMS (t);
17444 
17445 	if (decl)
17446 	  {
17447 	    decl = tsubst (decl, args, complain, in_decl);
17448 	    /* Prevent instantiate_decl from trying to instantiate
17449 	       this variable.  We've already done all that needs to be
17450 	       done.  */
17451 	    if (decl != error_mark_node)
17452 	      DECL_TEMPLATE_INSTANTIATED (decl) = 1;
17453 	  }
17454 	stmt = begin_handler ();
17455 	finish_handler_parms (decl, stmt);
17456 	RECUR (HANDLER_BODY (t));
17457 	finish_handler (stmt);
17458       }
17459       break;
17460 
17461     case TAG_DEFN:
17462       tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
17463       if (CLASS_TYPE_P (tmp))
17464 	{
17465 	  /* Local classes are not independent templates; they are
17466 	     instantiated along with their containing function.  And this
17467 	     way we don't have to deal with pushing out of one local class
17468 	     to instantiate a member of another local class.  */
17469 	  /* Closures are handled by the LAMBDA_EXPR.  */
17470 	  gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
17471 	  complete_type (tmp);
17472 	  for (tree fld = TYPE_FIELDS (tmp); fld; fld = DECL_CHAIN (fld))
17473 	    if ((VAR_P (fld)
17474 		 || (TREE_CODE (fld) == FUNCTION_DECL
17475 		     && !DECL_ARTIFICIAL (fld)))
17476 		&& DECL_TEMPLATE_INSTANTIATION (fld))
17477 	      instantiate_decl (fld, /*defer_ok=*/false,
17478 				/*expl_inst_class=*/false);
17479 	}
17480       break;
17481 
17482     case STATIC_ASSERT:
17483       {
17484 	tree condition;
17485 
17486 	++c_inhibit_evaluation_warnings;
17487         condition =
17488           tsubst_expr (STATIC_ASSERT_CONDITION (t),
17489                        args,
17490                        complain, in_decl,
17491                        /*integral_constant_expression_p=*/true);
17492 	--c_inhibit_evaluation_warnings;
17493 
17494         finish_static_assert (condition,
17495                               STATIC_ASSERT_MESSAGE (t),
17496                               STATIC_ASSERT_SOURCE_LOCATION (t),
17497                               /*member_p=*/false);
17498       }
17499       break;
17500 
17501     case OACC_KERNELS:
17502     case OACC_PARALLEL:
17503       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), C_ORT_ACC, args, complain,
17504 				in_decl);
17505       stmt = begin_omp_parallel ();
17506       RECUR (OMP_BODY (t));
17507       finish_omp_construct (TREE_CODE (t), stmt, tmp);
17508       break;
17509 
17510     case OMP_PARALLEL:
17511       r = push_omp_privatization_clauses (OMP_PARALLEL_COMBINED (t));
17512       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), C_ORT_OMP, args,
17513 				complain, in_decl);
17514       if (OMP_PARALLEL_COMBINED (t))
17515 	omp_parallel_combined_clauses = &tmp;
17516       stmt = begin_omp_parallel ();
17517       RECUR (OMP_PARALLEL_BODY (t));
17518       gcc_assert (omp_parallel_combined_clauses == NULL);
17519       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
17520 	= OMP_PARALLEL_COMBINED (t);
17521       pop_omp_privatization_clauses (r);
17522       break;
17523 
17524     case OMP_TASK:
17525       if (OMP_TASK_BODY (t) == NULL_TREE)
17526 	{
17527 	  tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), C_ORT_OMP, args,
17528 				    complain, in_decl);
17529 	  t = copy_node (t);
17530 	  OMP_TASK_CLAUSES (t) = tmp;
17531 	  add_stmt (t);
17532 	  break;
17533 	}
17534       r = push_omp_privatization_clauses (false);
17535       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), C_ORT_OMP, args,
17536 				complain, in_decl);
17537       stmt = begin_omp_task ();
17538       RECUR (OMP_TASK_BODY (t));
17539       finish_omp_task (tmp, stmt);
17540       pop_omp_privatization_clauses (r);
17541       break;
17542 
17543     case OMP_FOR:
17544     case OMP_SIMD:
17545     case OMP_DISTRIBUTE:
17546     case OMP_TASKLOOP:
17547     case OACC_LOOP:
17548       {
17549 	tree clauses, body, pre_body;
17550 	tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
17551 	tree orig_declv = NULL_TREE;
17552 	tree incrv = NULL_TREE;
17553 	enum c_omp_region_type ort = C_ORT_OMP;
17554 	bool any_range_for = false;
17555 	int i;
17556 
17557 	if (TREE_CODE (t) == OACC_LOOP)
17558 	  ort = C_ORT_ACC;
17559 
17560 	r = push_omp_privatization_clauses (OMP_FOR_INIT (t) == NULL_TREE);
17561 	clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), ort, args, complain,
17562 				      in_decl);
17563 	if (OMP_FOR_INIT (t) != NULL_TREE)
17564 	  {
17565 	    declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
17566 	    if (OMP_FOR_ORIG_DECLS (t))
17567 	      orig_declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
17568 	    initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
17569 	    condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
17570 	    incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
17571 	  }
17572 
17573 	keep_next_level (true);
17574 	stmt = begin_omp_structured_block ();
17575 
17576 	pre_body = push_stmt_list ();
17577 	RECUR (OMP_FOR_PRE_BODY (t));
17578 	pre_body = pop_stmt_list (pre_body);
17579 
17580 	if (OMP_FOR_INIT (t) != NULL_TREE)
17581 	  for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
17582 	    any_range_for
17583 	      |= tsubst_omp_for_iterator (t, i, declv, orig_declv, initv,
17584 					  condv, incrv, &clauses, args,
17585 					  complain, in_decl,
17586 					  integral_constant_expression_p);
17587 	omp_parallel_combined_clauses = NULL;
17588 
17589 	if (any_range_for)
17590 	  {
17591 	    gcc_assert (orig_declv);
17592 	    body = begin_omp_structured_block ();
17593 	    for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
17594 	      if (TREE_VEC_ELT (orig_declv, i) != TREE_VEC_ELT (declv, i)
17595 		  && TREE_CODE (TREE_VEC_ELT (orig_declv, i)) == TREE_LIST
17596 		  && TREE_CHAIN (TREE_VEC_ELT (orig_declv, i)))
17597 		cp_finish_omp_range_for (TREE_VEC_ELT (orig_declv, i),
17598 					 TREE_VEC_ELT (declv, i));
17599 	  }
17600 	else
17601 	  body = push_stmt_list ();
17602 	RECUR (OMP_FOR_BODY (t));
17603 	if (any_range_for)
17604 	  body = finish_omp_structured_block (body);
17605 	else
17606 	  body = pop_stmt_list (body);
17607 
17608 	if (OMP_FOR_INIT (t) != NULL_TREE)
17609 	  t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv,
17610 			      orig_declv, initv, condv, incrv, body, pre_body,
17611 			      NULL, clauses);
17612 	else
17613 	  {
17614 	    t = make_node (TREE_CODE (t));
17615 	    TREE_TYPE (t) = void_type_node;
17616 	    OMP_FOR_BODY (t) = body;
17617 	    OMP_FOR_PRE_BODY (t) = pre_body;
17618 	    OMP_FOR_CLAUSES (t) = clauses;
17619 	    SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
17620 	    add_stmt (t);
17621 	  }
17622 
17623 	add_stmt (finish_omp_for_block (finish_omp_structured_block (stmt),
17624 					t));
17625 	pop_omp_privatization_clauses (r);
17626       }
17627       break;
17628 
17629     case OMP_SECTIONS:
17630       omp_parallel_combined_clauses = NULL;
17631       /* FALLTHRU */
17632     case OMP_SINGLE:
17633     case OMP_TEAMS:
17634     case OMP_CRITICAL:
17635     case OMP_TASKGROUP:
17636       r = push_omp_privatization_clauses (TREE_CODE (t) == OMP_TEAMS
17637 					  && OMP_TEAMS_COMBINED (t));
17638       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), C_ORT_OMP, args, complain,
17639 				in_decl);
17640       if (TREE_CODE (t) == OMP_TEAMS)
17641 	{
17642 	  keep_next_level (true);
17643 	  stmt = begin_omp_structured_block ();
17644 	  RECUR (OMP_BODY (t));
17645 	  stmt = finish_omp_structured_block (stmt);
17646 	}
17647       else
17648 	{
17649 	  stmt = push_stmt_list ();
17650 	  RECUR (OMP_BODY (t));
17651 	  stmt = pop_stmt_list (stmt);
17652 	}
17653 
17654       t = copy_node (t);
17655       OMP_BODY (t) = stmt;
17656       OMP_CLAUSES (t) = tmp;
17657       add_stmt (t);
17658       pop_omp_privatization_clauses (r);
17659       break;
17660 
17661     case OMP_DEPOBJ:
17662       r = RECUR (OMP_DEPOBJ_DEPOBJ (t));
17663       if (OMP_DEPOBJ_CLAUSES (t) && OMP_DEPOBJ_CLAUSES (t) != error_mark_node)
17664 	{
17665 	  enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_SOURCE;
17666 	  if (TREE_CODE (OMP_DEPOBJ_CLAUSES (t)) == OMP_CLAUSE)
17667 	    {
17668 	      tmp = tsubst_omp_clauses (OMP_DEPOBJ_CLAUSES (t), C_ORT_OMP,
17669 					args, complain, in_decl);
17670 	      if (tmp == NULL_TREE)
17671 		tmp = error_mark_node;
17672 	    }
17673 	  else
17674 	    {
17675 	      kind = (enum omp_clause_depend_kind)
17676 		     tree_to_uhwi (OMP_DEPOBJ_CLAUSES (t));
17677 	      tmp = NULL_TREE;
17678 	    }
17679 	  finish_omp_depobj (EXPR_LOCATION (t), r, kind, tmp);
17680 	}
17681       else
17682 	finish_omp_depobj (EXPR_LOCATION (t), r,
17683 			   OMP_CLAUSE_DEPEND_SOURCE,
17684 			   OMP_DEPOBJ_CLAUSES (t));
17685       break;
17686 
17687     case OACC_DATA:
17688     case OMP_TARGET_DATA:
17689     case OMP_TARGET:
17690       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), (TREE_CODE (t) == OACC_DATA)
17691 				? C_ORT_ACC : C_ORT_OMP, args, complain,
17692 				in_decl);
17693       keep_next_level (true);
17694       stmt = begin_omp_structured_block ();
17695 
17696       RECUR (OMP_BODY (t));
17697       stmt = finish_omp_structured_block (stmt);
17698 
17699       t = copy_node (t);
17700       OMP_BODY (t) = stmt;
17701       OMP_CLAUSES (t) = tmp;
17702       if (TREE_CODE (t) == OMP_TARGET && OMP_TARGET_COMBINED (t))
17703 	{
17704 	  tree teams = cp_walk_tree (&stmt, tsubst_find_omp_teams, NULL, NULL);
17705 	  if (teams)
17706 	    {
17707 	      /* For combined target teams, ensure the num_teams and
17708 		 thread_limit clause expressions are evaluated on the host,
17709 		 before entering the target construct.  */
17710 	      tree c;
17711 	      for (c = OMP_TEAMS_CLAUSES (teams);
17712 		   c; c = OMP_CLAUSE_CHAIN (c))
17713 		if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_NUM_TEAMS
17714 		     || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_THREAD_LIMIT)
17715 		    && TREE_CODE (OMP_CLAUSE_OPERAND (c, 0)) != INTEGER_CST)
17716 		  {
17717 		    tree expr = OMP_CLAUSE_OPERAND (c, 0);
17718 		    expr = force_target_expr (TREE_TYPE (expr), expr, tf_none);
17719 		    if (expr == error_mark_node)
17720 		      continue;
17721 		    tmp = TARGET_EXPR_SLOT (expr);
17722 		    add_stmt (expr);
17723 		    OMP_CLAUSE_OPERAND (c, 0) = expr;
17724 		    tree tc = build_omp_clause (OMP_CLAUSE_LOCATION (c),
17725 						OMP_CLAUSE_FIRSTPRIVATE);
17726 		    OMP_CLAUSE_DECL (tc) = tmp;
17727 		    OMP_CLAUSE_CHAIN (tc) = OMP_TARGET_CLAUSES (t);
17728 		    OMP_TARGET_CLAUSES (t) = tc;
17729 		  }
17730 	    }
17731 	}
17732       add_stmt (t);
17733       break;
17734 
17735     case OACC_DECLARE:
17736       t = copy_node (t);
17737       tmp = tsubst_omp_clauses (OACC_DECLARE_CLAUSES (t), C_ORT_ACC, args,
17738 				complain, in_decl);
17739       OACC_DECLARE_CLAUSES (t) = tmp;
17740       add_stmt (t);
17741       break;
17742 
17743     case OMP_TARGET_UPDATE:
17744     case OMP_TARGET_ENTER_DATA:
17745     case OMP_TARGET_EXIT_DATA:
17746       tmp = tsubst_omp_clauses (OMP_STANDALONE_CLAUSES (t), C_ORT_OMP, args,
17747 				complain, in_decl);
17748       t = copy_node (t);
17749       OMP_STANDALONE_CLAUSES (t) = tmp;
17750       add_stmt (t);
17751       break;
17752 
17753     case OACC_ENTER_DATA:
17754     case OACC_EXIT_DATA:
17755     case OACC_UPDATE:
17756       tmp = tsubst_omp_clauses (OMP_STANDALONE_CLAUSES (t), C_ORT_ACC, args,
17757 				complain, in_decl);
17758       t = copy_node (t);
17759       OMP_STANDALONE_CLAUSES (t) = tmp;
17760       add_stmt (t);
17761       break;
17762 
17763     case OMP_ORDERED:
17764       tmp = tsubst_omp_clauses (OMP_ORDERED_CLAUSES (t), C_ORT_OMP, args,
17765 				complain, in_decl);
17766       stmt = push_stmt_list ();
17767       RECUR (OMP_BODY (t));
17768       stmt = pop_stmt_list (stmt);
17769 
17770       t = copy_node (t);
17771       OMP_BODY (t) = stmt;
17772       OMP_ORDERED_CLAUSES (t) = tmp;
17773       add_stmt (t);
17774       break;
17775 
17776     case OMP_SECTION:
17777     case OMP_MASTER:
17778       stmt = push_stmt_list ();
17779       RECUR (OMP_BODY (t));
17780       stmt = pop_stmt_list (stmt);
17781 
17782       t = copy_node (t);
17783       OMP_BODY (t) = stmt;
17784       add_stmt (t);
17785       break;
17786 
17787     case OMP_ATOMIC:
17788       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
17789       tmp = NULL_TREE;
17790       if (TREE_CODE (TREE_OPERAND (t, 0)) == OMP_CLAUSE)
17791 	tmp = tsubst_omp_clauses (TREE_OPERAND (t, 0), C_ORT_OMP, args,
17792 				  complain, in_decl);
17793       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
17794 	{
17795 	  tree op1 = TREE_OPERAND (t, 1);
17796 	  tree rhs1 = NULL_TREE;
17797 	  tree lhs, rhs;
17798 	  if (TREE_CODE (op1) == COMPOUND_EXPR)
17799 	    {
17800 	      rhs1 = RECUR (TREE_OPERAND (op1, 0));
17801 	      op1 = TREE_OPERAND (op1, 1);
17802 	    }
17803 	  lhs = RECUR (TREE_OPERAND (op1, 0));
17804 	  rhs = RECUR (TREE_OPERAND (op1, 1));
17805 	  finish_omp_atomic (EXPR_LOCATION (t), OMP_ATOMIC, TREE_CODE (op1),
17806 			     lhs, rhs, NULL_TREE, NULL_TREE, rhs1, tmp,
17807 			     OMP_ATOMIC_MEMORY_ORDER (t));
17808 	}
17809       else
17810 	{
17811 	  tree op1 = TREE_OPERAND (t, 1);
17812 	  tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
17813 	  tree rhs1 = NULL_TREE;
17814 	  enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
17815 	  enum tree_code opcode = NOP_EXPR;
17816 	  if (code == OMP_ATOMIC_READ)
17817 	    {
17818 	      v = RECUR (TREE_OPERAND (op1, 0));
17819 	      lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
17820 	    }
17821 	  else if (code == OMP_ATOMIC_CAPTURE_OLD
17822 		   || code == OMP_ATOMIC_CAPTURE_NEW)
17823 	    {
17824 	      tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
17825 	      v = RECUR (TREE_OPERAND (op1, 0));
17826 	      lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
17827 	      if (TREE_CODE (op11) == COMPOUND_EXPR)
17828 		{
17829 		  rhs1 = RECUR (TREE_OPERAND (op11, 0));
17830 		  op11 = TREE_OPERAND (op11, 1);
17831 		}
17832 	      lhs = RECUR (TREE_OPERAND (op11, 0));
17833 	      rhs = RECUR (TREE_OPERAND (op11, 1));
17834 	      opcode = TREE_CODE (op11);
17835 	      if (opcode == MODIFY_EXPR)
17836 		opcode = NOP_EXPR;
17837 	    }
17838 	  else
17839 	    {
17840 	      code = OMP_ATOMIC;
17841 	      lhs = RECUR (TREE_OPERAND (op1, 0));
17842 	      rhs = RECUR (TREE_OPERAND (op1, 1));
17843 	    }
17844 	  finish_omp_atomic (EXPR_LOCATION (t), code, opcode, lhs, rhs, v,
17845 			     lhs1, rhs1, tmp, OMP_ATOMIC_MEMORY_ORDER (t));
17846 	}
17847       break;
17848 
17849     case TRANSACTION_EXPR:
17850       {
17851 	int flags = 0;
17852 	flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
17853 	flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
17854 
17855         if (TRANSACTION_EXPR_IS_STMT (t))
17856           {
17857 	    tree body = TRANSACTION_EXPR_BODY (t);
17858 	    tree noex = NULL_TREE;
17859 	    if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
17860 	      {
17861 		noex = MUST_NOT_THROW_COND (body);
17862 		if (noex == NULL_TREE)
17863 		  noex = boolean_true_node;
17864 		body = TREE_OPERAND (body, 0);
17865 	      }
17866             stmt = begin_transaction_stmt (input_location, NULL, flags);
17867             RECUR (body);
17868             finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
17869           }
17870         else
17871           {
17872             stmt = build_transaction_expr (EXPR_LOCATION (t),
17873 					   RECUR (TRANSACTION_EXPR_BODY (t)),
17874 					   flags, NULL_TREE);
17875             RETURN (stmt);
17876           }
17877       }
17878       break;
17879 
17880     case MUST_NOT_THROW_EXPR:
17881       {
17882 	tree op0 = RECUR (TREE_OPERAND (t, 0));
17883 	tree cond = RECUR (MUST_NOT_THROW_COND (t));
17884 	RETURN (build_must_not_throw_expr (op0, cond));
17885       }
17886 
17887     case EXPR_PACK_EXPANSION:
17888       error ("invalid use of pack expansion expression");
17889       RETURN (error_mark_node);
17890 
17891     case NONTYPE_ARGUMENT_PACK:
17892       error ("use %<...%> to expand argument pack");
17893       RETURN (error_mark_node);
17894 
17895     case COMPOUND_EXPR:
17896       tmp = RECUR (TREE_OPERAND (t, 0));
17897       if (tmp == NULL_TREE)
17898 	/* If the first operand was a statement, we're done with it.  */
17899 	RETURN (RECUR (TREE_OPERAND (t, 1)));
17900       RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
17901 				    RECUR (TREE_OPERAND (t, 1)),
17902 				    complain));
17903 
17904     case ANNOTATE_EXPR:
17905       tmp = RECUR (TREE_OPERAND (t, 0));
17906       RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
17907 			  TREE_TYPE (tmp), tmp,
17908 			  RECUR (TREE_OPERAND (t, 1)),
17909 			  RECUR (TREE_OPERAND (t, 2))));
17910 
17911     case PREDICT_EXPR:
17912       RETURN (add_stmt (copy_node (t)));
17913 
17914     default:
17915       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
17916 
17917       RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
17918 				    /*function_p=*/false,
17919 				    integral_constant_expression_p));
17920     }
17921 
17922   RETURN (NULL_TREE);
17923  out:
17924   input_location = loc;
17925   return r;
17926 #undef RECUR
17927 #undef RETURN
17928 }
17929 
17930 /* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
17931    function.  For description of the body see comment above
17932    cp_parser_omp_declare_reduction_exprs.  */
17933 
17934 static void
tsubst_omp_udr(tree t,tree args,tsubst_flags_t complain,tree in_decl)17935 tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
17936 {
17937   if (t == NULL_TREE || t == error_mark_node)
17938     return;
17939 
17940   gcc_assert (TREE_CODE (t) == STATEMENT_LIST);
17941 
17942   tree_stmt_iterator tsi;
17943   int i;
17944   tree stmts[7];
17945   memset (stmts, 0, sizeof stmts);
17946   for (i = 0, tsi = tsi_start (t);
17947        i < 7 && !tsi_end_p (tsi);
17948        i++, tsi_next (&tsi))
17949     stmts[i] = tsi_stmt (tsi);
17950   gcc_assert (tsi_end_p (tsi));
17951 
17952   if (i >= 3)
17953     {
17954       gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
17955 		  && TREE_CODE (stmts[1]) == DECL_EXPR);
17956       tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
17957 			     args, complain, in_decl);
17958       tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
17959 			    args, complain, in_decl);
17960       DECL_CONTEXT (omp_out) = current_function_decl;
17961       DECL_CONTEXT (omp_in) = current_function_decl;
17962       keep_next_level (true);
17963       tree block = begin_omp_structured_block ();
17964       tsubst_expr (stmts[2], args, complain, in_decl, false);
17965       block = finish_omp_structured_block (block);
17966       block = maybe_cleanup_point_expr_void (block);
17967       add_decl_expr (omp_out);
17968       if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
17969 	TREE_NO_WARNING (omp_out) = 1;
17970       add_decl_expr (omp_in);
17971       finish_expr_stmt (block);
17972     }
17973   if (i >= 6)
17974     {
17975       gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
17976 		  && TREE_CODE (stmts[4]) == DECL_EXPR);
17977       tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
17978 			      args, complain, in_decl);
17979       tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
17980 			      args, complain, in_decl);
17981       DECL_CONTEXT (omp_priv) = current_function_decl;
17982       DECL_CONTEXT (omp_orig) = current_function_decl;
17983       keep_next_level (true);
17984       tree block = begin_omp_structured_block ();
17985       tsubst_expr (stmts[5], args, complain, in_decl, false);
17986       block = finish_omp_structured_block (block);
17987       block = maybe_cleanup_point_expr_void (block);
17988       cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
17989       add_decl_expr (omp_priv);
17990       add_decl_expr (omp_orig);
17991       finish_expr_stmt (block);
17992       if (i == 7)
17993 	add_decl_expr (omp_orig);
17994     }
17995 }
17996 
17997 /* T is a postfix-expression that is not being used in a function
17998    call.  Return the substituted version of T.  */
17999 
18000 static tree
tsubst_non_call_postfix_expression(tree t,tree args,tsubst_flags_t complain,tree in_decl)18001 tsubst_non_call_postfix_expression (tree t, tree args,
18002 				    tsubst_flags_t complain,
18003 				    tree in_decl)
18004 {
18005   if (TREE_CODE (t) == SCOPE_REF)
18006     t = tsubst_qualified_id (t, args, complain, in_decl,
18007 			     /*done=*/false, /*address_p=*/false);
18008   else
18009     t = tsubst_copy_and_build (t, args, complain, in_decl,
18010 			       /*function_p=*/false,
18011 			       /*integral_constant_expression_p=*/false);
18012 
18013   return t;
18014 }
18015 
18016 /* T is a LAMBDA_EXPR.  Generate a new LAMBDA_EXPR for the current
18017    instantiation context.  Instantiating a pack expansion containing a lambda
18018    might result in multiple lambdas all based on the same lambda in the
18019    template.  */
18020 
18021 tree
tsubst_lambda_expr(tree t,tree args,tsubst_flags_t complain,tree in_decl)18022 tsubst_lambda_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
18023 {
18024   tree oldfn = lambda_function (t);
18025   in_decl = oldfn;
18026 
18027   /* If we have already specialized this lambda expr, reuse it.  See
18028      PR c++/87322.  */
18029   if (local_specializations)
18030     if (tree r = retrieve_local_specialization (t))
18031       return r;
18032 
18033   tree r = build_lambda_expr ();
18034 
18035   if (local_specializations)
18036     register_local_specialization (r, t);
18037 
18038   LAMBDA_EXPR_LOCATION (r)
18039     = LAMBDA_EXPR_LOCATION (t);
18040   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
18041     = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
18042   LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
18043   LAMBDA_EXPR_INSTANTIATED (r) = true;
18044 
18045   if (LAMBDA_EXPR_EXTRA_SCOPE (t) == NULL_TREE)
18046     /* A lambda in a default argument outside a class gets no
18047        LAMBDA_EXPR_EXTRA_SCOPE, as specified by the ABI.  But
18048        tsubst_default_argument calls start_lambda_scope, so we need to
18049        specifically ignore it here, and use the global scope.  */
18050     record_null_lambda_scope (r);
18051   else
18052     record_lambda_scope (r);
18053 
18054   gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
18055 	      && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
18056 
18057   vec<tree,va_gc>* field_packs = NULL;
18058 
18059   for (tree cap = LAMBDA_EXPR_CAPTURE_LIST (t); cap;
18060        cap = TREE_CHAIN (cap))
18061     {
18062       tree ofield = TREE_PURPOSE (cap);
18063       if (PACK_EXPANSION_P (ofield))
18064 	ofield = PACK_EXPANSION_PATTERN (ofield);
18065       tree field = tsubst_decl (ofield, args, complain);
18066 
18067       if (DECL_PACK_P (ofield) && !DECL_NORMAL_CAPTURE_P (ofield))
18068 	{
18069 	  /* Remember these for when we've pushed local_specializations.  */
18070 	  vec_safe_push (field_packs, ofield);
18071 	  vec_safe_push (field_packs, field);
18072 	}
18073 
18074       if (field == error_mark_node)
18075 	return error_mark_node;
18076 
18077       tree init = TREE_VALUE (cap);
18078       if (PACK_EXPANSION_P (init))
18079 	init = tsubst_pack_expansion (init, args, complain, in_decl);
18080       else
18081 	init = tsubst_copy_and_build (init, args, complain, in_decl,
18082 				      /*fn*/false, /*constexpr*/false);
18083 
18084       if (TREE_CODE (field) == TREE_VEC)
18085 	{
18086 	  int len = TREE_VEC_LENGTH (field);
18087 	  gcc_assert (TREE_CODE (init) == TREE_VEC
18088 		      && TREE_VEC_LENGTH (init) == len);
18089 	  for (int i = 0; i < len; ++i)
18090 	    LAMBDA_EXPR_CAPTURE_LIST (r)
18091 	      = tree_cons (TREE_VEC_ELT (field, i),
18092 			   TREE_VEC_ELT (init, i),
18093 			   LAMBDA_EXPR_CAPTURE_LIST (r));
18094 	}
18095       else
18096 	{
18097 	  LAMBDA_EXPR_CAPTURE_LIST (r)
18098 	    = tree_cons (field, init, LAMBDA_EXPR_CAPTURE_LIST (r));
18099 
18100 	  if (id_equal (DECL_NAME (field), "__this"))
18101 	    LAMBDA_EXPR_THIS_CAPTURE (r) = field;
18102 	}
18103     }
18104 
18105   tree type = begin_lambda_type (r);
18106   if (type == error_mark_node)
18107     return error_mark_node;
18108 
18109   /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
18110   determine_visibility (TYPE_NAME (type));
18111 
18112   register_capture_members (LAMBDA_EXPR_CAPTURE_LIST (r));
18113 
18114   tree oldtmpl = (generic_lambda_fn_p (oldfn)
18115 		  ? DECL_TI_TEMPLATE (oldfn)
18116 		  : NULL_TREE);
18117 
18118   tree fntype = static_fn_type (oldfn);
18119   if (oldtmpl)
18120     ++processing_template_decl;
18121   fntype = tsubst (fntype, args, complain, in_decl);
18122   if (oldtmpl)
18123     --processing_template_decl;
18124 
18125   if (fntype == error_mark_node)
18126     r = error_mark_node;
18127   else
18128     {
18129       /* The body of a lambda-expression is not a subexpression of the
18130 	 enclosing expression.  Parms are to have DECL_CHAIN tsubsted,
18131 	 which would be skipped if cp_unevaluated_operand.  */
18132       cp_evaluated ev;
18133 
18134       /* Fix the type of 'this'.  */
18135       fntype = build_memfn_type (fntype, type,
18136 				 type_memfn_quals (fntype),
18137 				 type_memfn_rqual (fntype));
18138       tree fn, tmpl;
18139       if (oldtmpl)
18140 	{
18141 	  tmpl = tsubst_template_decl (oldtmpl, args, complain, fntype);
18142 	  fn = DECL_TEMPLATE_RESULT (tmpl);
18143 	  finish_member_declaration (tmpl);
18144 	}
18145       else
18146 	{
18147 	  tmpl = NULL_TREE;
18148 	  fn = tsubst_function_decl (oldfn, args, complain, fntype);
18149 	  finish_member_declaration (fn);
18150 	}
18151 
18152       /* Let finish_function set this.  */
18153       DECL_DECLARED_CONSTEXPR_P (fn) = false;
18154 
18155       bool nested = cfun;
18156       if (nested)
18157 	push_function_context ();
18158       else
18159 	/* Still increment function_depth so that we don't GC in the
18160 	   middle of an expression.  */
18161 	++function_depth;
18162 
18163       local_specialization_stack s (lss_copy);
18164 
18165       tree body = start_lambda_function (fn, r);
18166 
18167       /* Now record them for lookup_init_capture_pack.  */
18168       int fplen = vec_safe_length (field_packs);
18169       for (int i = 0; i < fplen; )
18170 	{
18171 	  tree pack = (*field_packs)[i++];
18172 	  tree inst = (*field_packs)[i++];
18173 	  register_local_specialization (inst, pack);
18174 	}
18175       release_tree_vector (field_packs);
18176 
18177       register_parameter_specializations (oldfn, fn);
18178 
18179       if (oldtmpl)
18180 	{
18181 	  /* We might not partially instantiate some parts of the function, so
18182 	     copy these flags from the original template.  */
18183 	  language_function *ol = DECL_STRUCT_FUNCTION (oldfn)->language;
18184 	  current_function_returns_value = ol->returns_value;
18185 	  current_function_returns_null = ol->returns_null;
18186 	  current_function_returns_abnormally = ol->returns_abnormally;
18187 	  current_function_infinite_loop = ol->infinite_loop;
18188 	}
18189 
18190       /* [temp.deduct] A lambda-expression appearing in a function type or a
18191 	 template parameter is not considered part of the immediate context for
18192 	 the purposes of template argument deduction. */
18193       complain = tf_warning_or_error;
18194 
18195       tsubst_expr (DECL_SAVED_TREE (oldfn), args, complain, r,
18196 		   /*constexpr*/false);
18197 
18198       finish_lambda_function (body);
18199 
18200       if (nested)
18201 	pop_function_context ();
18202       else
18203 	--function_depth;
18204 
18205       /* The capture list was built up in reverse order; fix that now.  */
18206       LAMBDA_EXPR_CAPTURE_LIST (r)
18207 	= nreverse (LAMBDA_EXPR_CAPTURE_LIST (r));
18208 
18209       LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
18210 
18211       maybe_add_lambda_conv_op (type);
18212     }
18213 
18214   finish_struct (type, /*attr*/NULL_TREE);
18215 
18216   insert_pending_capture_proxies ();
18217 
18218   return r;
18219 }
18220 
18221 /* Like tsubst but deals with expressions and performs semantic
18222    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
18223 
18224 tree
tsubst_copy_and_build(tree t,tree args,tsubst_flags_t complain,tree in_decl,bool function_p,bool integral_constant_expression_p)18225 tsubst_copy_and_build (tree t,
18226 		       tree args,
18227 		       tsubst_flags_t complain,
18228 		       tree in_decl,
18229 		       bool function_p,
18230 		       bool integral_constant_expression_p)
18231 {
18232 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
18233 #define RECUR(NODE)						\
18234   tsubst_copy_and_build (NODE, args, complain, in_decl, 	\
18235 			 /*function_p=*/false,			\
18236 			 integral_constant_expression_p)
18237 
18238   tree retval, op1;
18239   location_t loc;
18240 
18241   if (t == NULL_TREE || t == error_mark_node)
18242     return t;
18243 
18244   loc = input_location;
18245   if (location_t eloc = cp_expr_location (t))
18246     input_location = eloc;
18247 
18248   /* N3276 decltype magic only applies to calls at the top level or on the
18249      right side of a comma.  */
18250   tsubst_flags_t decltype_flag = (complain & tf_decltype);
18251   complain &= ~tf_decltype;
18252 
18253   switch (TREE_CODE (t))
18254     {
18255     case USING_DECL:
18256       t = DECL_NAME (t);
18257       /* Fall through.  */
18258     case IDENTIFIER_NODE:
18259       {
18260 	tree decl;
18261 	cp_id_kind idk;
18262 	bool non_integral_constant_expression_p;
18263 	const char *error_msg;
18264 
18265 	if (IDENTIFIER_CONV_OP_P (t))
18266 	  {
18267 	    tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
18268 	    t = make_conv_op_name (new_type);
18269 	  }
18270 
18271 	/* Look up the name.  */
18272 	decl = lookup_name (t);
18273 
18274 	/* By convention, expressions use ERROR_MARK_NODE to indicate
18275 	   failure, not NULL_TREE.  */
18276 	if (decl == NULL_TREE)
18277 	  decl = error_mark_node;
18278 
18279 	decl = finish_id_expression (t, decl, NULL_TREE,
18280 				     &idk,
18281 				     integral_constant_expression_p,
18282           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
18283 				     &non_integral_constant_expression_p,
18284 				     /*template_p=*/false,
18285 				     /*done=*/true,
18286 				     /*address_p=*/false,
18287 				     /*template_arg_p=*/false,
18288 				     &error_msg,
18289 				     input_location);
18290 	if (error_msg)
18291 	  error (error_msg);
18292 	if (!function_p && identifier_p (decl))
18293 	  {
18294 	    if (complain & tf_error)
18295 	      unqualified_name_lookup_error (decl);
18296 	    decl = error_mark_node;
18297 	  }
18298 	RETURN (decl);
18299       }
18300 
18301     case TEMPLATE_ID_EXPR:
18302       {
18303 	tree object;
18304 	tree templ = RECUR (TREE_OPERAND (t, 0));
18305 	tree targs = TREE_OPERAND (t, 1);
18306 
18307 	if (targs)
18308 	  targs = tsubst_template_args (targs, args, complain, in_decl);
18309 	if (targs == error_mark_node)
18310 	  RETURN (error_mark_node);
18311 
18312 	if (TREE_CODE (templ) == SCOPE_REF)
18313 	  {
18314 	    tree name = TREE_OPERAND (templ, 1);
18315 	    tree tid = lookup_template_function (name, targs);
18316 	    TREE_OPERAND (templ, 1) = tid;
18317 	    RETURN (templ);
18318 	  }
18319 
18320 	if (variable_template_p (templ))
18321 	  RETURN (lookup_and_finish_template_variable (templ, targs, complain));
18322 
18323 	if (TREE_CODE (templ) == COMPONENT_REF)
18324 	  {
18325 	    object = TREE_OPERAND (templ, 0);
18326 	    templ = TREE_OPERAND (templ, 1);
18327 	  }
18328 	else
18329 	  object = NULL_TREE;
18330 	templ = lookup_template_function (templ, targs);
18331 
18332 	if (object)
18333 	  RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
18334 			 object, templ, NULL_TREE));
18335 	else
18336 	  RETURN (baselink_for_fns (templ));
18337       }
18338 
18339     case INDIRECT_REF:
18340       {
18341 	tree r = RECUR (TREE_OPERAND (t, 0));
18342 
18343 	if (REFERENCE_REF_P (t))
18344 	  {
18345 	    /* A type conversion to reference type will be enclosed in
18346 	       such an indirect ref, but the substitution of the cast
18347 	       will have also added such an indirect ref.  */
18348 	    r = convert_from_reference (r);
18349 	  }
18350 	else
18351 	  r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
18352 				    complain|decltype_flag);
18353 
18354 	if (REF_PARENTHESIZED_P (t))
18355 	  r = force_paren_expr (r);
18356 
18357 	RETURN (r);
18358       }
18359 
18360     case NOP_EXPR:
18361       {
18362 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
18363 	tree op0 = RECUR (TREE_OPERAND (t, 0));
18364 	RETURN (build_nop (type, op0));
18365       }
18366 
18367     case IMPLICIT_CONV_EXPR:
18368       {
18369 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
18370 	tree expr = RECUR (TREE_OPERAND (t, 0));
18371 	if (dependent_type_p (type) || type_dependent_expression_p (expr))
18372 	  {
18373 	    retval = copy_node (t);
18374 	    TREE_TYPE (retval) = type;
18375 	    TREE_OPERAND (retval, 0) = expr;
18376 	    RETURN (retval);
18377 	  }
18378 	if (IMPLICIT_CONV_EXPR_NONTYPE_ARG (t))
18379 	  /* We'll pass this to convert_nontype_argument again, we don't need
18380 	     to actually perform any conversion here.  */
18381 	  RETURN (expr);
18382 	int flags = LOOKUP_IMPLICIT;
18383 	if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
18384 	  flags = LOOKUP_NORMAL;
18385 	if (IMPLICIT_CONV_EXPR_BRACED_INIT (t))
18386 	  flags |= LOOKUP_NO_NARROWING;
18387 	RETURN (perform_implicit_conversion_flags (type, expr, complain,
18388 						  flags));
18389       }
18390 
18391     case CONVERT_EXPR:
18392       {
18393 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
18394 	tree op0 = RECUR (TREE_OPERAND (t, 0));
18395 	if (op0 == error_mark_node)
18396 	  RETURN (error_mark_node);
18397 	RETURN (build1 (CONVERT_EXPR, type, op0));
18398       }
18399 
18400     case CAST_EXPR:
18401     case REINTERPRET_CAST_EXPR:
18402     case CONST_CAST_EXPR:
18403     case DYNAMIC_CAST_EXPR:
18404     case STATIC_CAST_EXPR:
18405       {
18406 	tree type;
18407 	tree op, r = NULL_TREE;
18408 
18409 	type = tsubst (TREE_TYPE (t), args, complain, in_decl);
18410 	if (integral_constant_expression_p
18411 	    && !cast_valid_in_integral_constant_expression_p (type))
18412 	  {
18413             if (complain & tf_error)
18414               error ("a cast to a type other than an integral or "
18415                      "enumeration type cannot appear in a constant-expression");
18416 	    RETURN (error_mark_node);
18417 	  }
18418 
18419 	op = RECUR (TREE_OPERAND (t, 0));
18420 
18421 	warning_sentinel s(warn_useless_cast);
18422 	warning_sentinel s2(warn_ignored_qualifiers);
18423 	switch (TREE_CODE (t))
18424 	  {
18425 	  case CAST_EXPR:
18426 	    r = build_functional_cast (type, op, complain);
18427 	    break;
18428 	  case REINTERPRET_CAST_EXPR:
18429 	    r = build_reinterpret_cast (type, op, complain);
18430 	    break;
18431 	  case CONST_CAST_EXPR:
18432 	    r = build_const_cast (type, op, complain);
18433 	    break;
18434 	  case DYNAMIC_CAST_EXPR:
18435 	    r = build_dynamic_cast (type, op, complain);
18436 	    break;
18437 	  case STATIC_CAST_EXPR:
18438 	    r = build_static_cast (type, op, complain);
18439 	    break;
18440 	  default:
18441 	    gcc_unreachable ();
18442 	  }
18443 
18444 	RETURN (r);
18445       }
18446 
18447     case POSTDECREMENT_EXPR:
18448     case POSTINCREMENT_EXPR:
18449       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
18450 						args, complain, in_decl);
18451       RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
18452 				complain|decltype_flag));
18453 
18454     case PREDECREMENT_EXPR:
18455     case PREINCREMENT_EXPR:
18456     case NEGATE_EXPR:
18457     case BIT_NOT_EXPR:
18458     case ABS_EXPR:
18459     case TRUTH_NOT_EXPR:
18460     case UNARY_PLUS_EXPR:  /* Unary + */
18461     case REALPART_EXPR:
18462     case IMAGPART_EXPR:
18463       RETURN (build_x_unary_op (input_location, TREE_CODE (t),
18464 				RECUR (TREE_OPERAND (t, 0)),
18465 				complain|decltype_flag));
18466 
18467     case FIX_TRUNC_EXPR:
18468       gcc_unreachable ();
18469 
18470     case ADDR_EXPR:
18471       op1 = TREE_OPERAND (t, 0);
18472       if (TREE_CODE (op1) == LABEL_DECL)
18473 	RETURN (finish_label_address_expr (DECL_NAME (op1),
18474 					  EXPR_LOCATION (op1)));
18475       if (TREE_CODE (op1) == SCOPE_REF)
18476 	op1 = tsubst_qualified_id (op1, args, complain, in_decl,
18477 				   /*done=*/true, /*address_p=*/true);
18478       else
18479 	op1 = tsubst_non_call_postfix_expression (op1, args, complain,
18480 						  in_decl);
18481       RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
18482 				complain|decltype_flag));
18483 
18484     case PLUS_EXPR:
18485     case MINUS_EXPR:
18486     case MULT_EXPR:
18487     case TRUNC_DIV_EXPR:
18488     case CEIL_DIV_EXPR:
18489     case FLOOR_DIV_EXPR:
18490     case ROUND_DIV_EXPR:
18491     case EXACT_DIV_EXPR:
18492     case BIT_AND_EXPR:
18493     case BIT_IOR_EXPR:
18494     case BIT_XOR_EXPR:
18495     case TRUNC_MOD_EXPR:
18496     case FLOOR_MOD_EXPR:
18497     case TRUTH_ANDIF_EXPR:
18498     case TRUTH_ORIF_EXPR:
18499     case TRUTH_AND_EXPR:
18500     case TRUTH_OR_EXPR:
18501     case RSHIFT_EXPR:
18502     case LSHIFT_EXPR:
18503     case RROTATE_EXPR:
18504     case LROTATE_EXPR:
18505     case EQ_EXPR:
18506     case NE_EXPR:
18507     case MAX_EXPR:
18508     case MIN_EXPR:
18509     case LE_EXPR:
18510     case GE_EXPR:
18511     case LT_EXPR:
18512     case GT_EXPR:
18513     case MEMBER_REF:
18514     case DOTSTAR_EXPR:
18515       {
18516 	warning_sentinel s1(warn_type_limits);
18517 	warning_sentinel s2(warn_div_by_zero);
18518 	warning_sentinel s3(warn_logical_op);
18519 	warning_sentinel s4(warn_tautological_compare);
18520 	tree op0 = RECUR (TREE_OPERAND (t, 0));
18521 	tree op1 = RECUR (TREE_OPERAND (t, 1));
18522 	tree r = build_x_binary_op
18523 	  (input_location, TREE_CODE (t),
18524 	   op0,
18525 	   (TREE_NO_WARNING (TREE_OPERAND (t, 0))
18526 	    ? ERROR_MARK
18527 	    : TREE_CODE (TREE_OPERAND (t, 0))),
18528 	   op1,
18529 	   (TREE_NO_WARNING (TREE_OPERAND (t, 1))
18530 	    ? ERROR_MARK
18531 	    : TREE_CODE (TREE_OPERAND (t, 1))),
18532 	   /*overload=*/NULL,
18533 	   complain|decltype_flag);
18534 	if (EXPR_P (r) && TREE_NO_WARNING (t))
18535 	  TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
18536 
18537 	RETURN (r);
18538       }
18539 
18540     case POINTER_PLUS_EXPR:
18541       {
18542 	tree op0 = RECUR (TREE_OPERAND (t, 0));
18543 	tree op1 = RECUR (TREE_OPERAND (t, 1));
18544 	RETURN (fold_build_pointer_plus (op0, op1));
18545       }
18546 
18547     case SCOPE_REF:
18548       RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
18549 				  /*address_p=*/false));
18550     case ARRAY_REF:
18551       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
18552 						args, complain, in_decl);
18553       RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
18554 				 RECUR (TREE_OPERAND (t, 1)),
18555 				 complain|decltype_flag));
18556 
18557     case SIZEOF_EXPR:
18558       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
18559 	  || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
18560 	RETURN (tsubst_copy (t, args, complain, in_decl));
18561       /* Fall through */
18562 
18563     case ALIGNOF_EXPR:
18564       {
18565 	tree r;
18566 
18567 	op1 = TREE_OPERAND (t, 0);
18568 	if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
18569 	  op1 = TREE_TYPE (op1);
18570 	bool std_alignof = (TREE_CODE (t) == ALIGNOF_EXPR
18571 			    && ALIGNOF_EXPR_STD_P (t));
18572         if (!args)
18573 	  {
18574 	    /* When there are no ARGS, we are trying to evaluate a
18575 	       non-dependent expression from the parser.  Trying to do
18576 	       the substitutions may not work.  */
18577 	    if (!TYPE_P (op1))
18578 	      op1 = TREE_TYPE (op1);
18579 	  }
18580 	else
18581 	  {
18582 	    ++cp_unevaluated_operand;
18583 	    ++c_inhibit_evaluation_warnings;
18584 	    if (TYPE_P (op1))
18585 	      op1 = tsubst (op1, args, complain, in_decl);
18586 	    else
18587 	      op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
18588 					   /*function_p=*/false,
18589 					   /*integral_constant_expression_p=*/
18590 					   false);
18591 	    --cp_unevaluated_operand;
18592 	    --c_inhibit_evaluation_warnings;
18593 	  }
18594         if (TYPE_P (op1))
18595 	  r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), std_alignof,
18596 					  complain & tf_error);
18597 	else
18598 	  r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
18599 					  complain & tf_error);
18600 	if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
18601 	  {
18602 	    if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
18603 	      {
18604 		if (!processing_template_decl && TYPE_P (op1))
18605 		  {
18606 		    r = build_min (SIZEOF_EXPR, size_type_node,
18607 				   build1 (NOP_EXPR, op1, error_mark_node));
18608 		    SIZEOF_EXPR_TYPE_P (r) = 1;
18609 		  }
18610 		else
18611 		  r = build_min (SIZEOF_EXPR, size_type_node, op1);
18612 		TREE_SIDE_EFFECTS (r) = 0;
18613 		TREE_READONLY (r) = 1;
18614 	      }
18615 	    SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
18616 	  }
18617 	RETURN (r);
18618       }
18619 
18620     case AT_ENCODE_EXPR:
18621       {
18622 	op1 = TREE_OPERAND (t, 0);
18623 	++cp_unevaluated_operand;
18624 	++c_inhibit_evaluation_warnings;
18625 	op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
18626 				     /*function_p=*/false,
18627 				     /*integral_constant_expression_p=*/false);
18628 	--cp_unevaluated_operand;
18629 	--c_inhibit_evaluation_warnings;
18630 	RETURN (objc_build_encode_expr (op1));
18631       }
18632 
18633     case NOEXCEPT_EXPR:
18634       op1 = TREE_OPERAND (t, 0);
18635       ++cp_unevaluated_operand;
18636       ++c_inhibit_evaluation_warnings;
18637       ++cp_noexcept_operand;
18638       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
18639 				   /*function_p=*/false,
18640 				   /*integral_constant_expression_p=*/false);
18641       --cp_unevaluated_operand;
18642       --c_inhibit_evaluation_warnings;
18643       --cp_noexcept_operand;
18644       RETURN (finish_noexcept_expr (op1, complain));
18645 
18646     case MODOP_EXPR:
18647       {
18648 	warning_sentinel s(warn_div_by_zero);
18649 	tree lhs = RECUR (TREE_OPERAND (t, 0));
18650 	tree rhs = RECUR (TREE_OPERAND (t, 2));
18651 	tree r = build_x_modify_expr
18652 	  (EXPR_LOCATION (t), lhs, TREE_CODE (TREE_OPERAND (t, 1)), rhs,
18653 	   complain|decltype_flag);
18654 	/* TREE_NO_WARNING must be set if either the expression was
18655 	   parenthesized or it uses an operator such as >>= rather
18656 	   than plain assignment.  In the former case, it was already
18657 	   set and must be copied.  In the latter case,
18658 	   build_x_modify_expr sets it and it must not be reset
18659 	   here.  */
18660 	if (TREE_NO_WARNING (t))
18661 	  TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
18662 
18663 	RETURN (r);
18664       }
18665 
18666     case ARROW_EXPR:
18667       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
18668 						args, complain, in_decl);
18669       /* Remember that there was a reference to this entity.  */
18670       if (DECL_P (op1)
18671 	  && !mark_used (op1, complain) && !(complain & tf_error))
18672 	RETURN (error_mark_node);
18673       RETURN (build_x_arrow (input_location, op1, complain));
18674 
18675     case NEW_EXPR:
18676       {
18677 	tree placement = RECUR (TREE_OPERAND (t, 0));
18678 	tree init = RECUR (TREE_OPERAND (t, 3));
18679 	vec<tree, va_gc> *placement_vec;
18680 	vec<tree, va_gc> *init_vec;
18681 	tree ret;
18682 
18683 	if (placement == NULL_TREE)
18684 	  placement_vec = NULL;
18685 	else
18686 	  {
18687 	    placement_vec = make_tree_vector ();
18688 	    for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
18689 	      vec_safe_push (placement_vec, TREE_VALUE (placement));
18690 	  }
18691 
18692 	/* If there was an initializer in the original tree, but it
18693 	   instantiated to an empty list, then we should pass a
18694 	   non-NULL empty vector to tell build_new that it was an
18695 	   empty initializer() rather than no initializer.  This can
18696 	   only happen when the initializer is a pack expansion whose
18697 	   parameter packs are of length zero.  */
18698 	if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
18699 	  init_vec = NULL;
18700 	else
18701 	  {
18702 	    init_vec = make_tree_vector ();
18703 	    if (init == void_node)
18704 	      gcc_assert (init_vec != NULL);
18705 	    else
18706 	      {
18707 		for (; init != NULL_TREE; init = TREE_CHAIN (init))
18708 		  vec_safe_push (init_vec, TREE_VALUE (init));
18709 	      }
18710 	  }
18711 
18712 	/* Avoid passing an enclosing decl to valid_array_size_p.  */
18713 	in_decl = NULL_TREE;
18714 
18715 	tree op1 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
18716 	tree op2 = RECUR (TREE_OPERAND (t, 2));
18717 	ret = build_new (&placement_vec, op1, op2, &init_vec,
18718 			 NEW_EXPR_USE_GLOBAL (t),
18719 			 complain);
18720 
18721 	if (placement_vec != NULL)
18722 	  release_tree_vector (placement_vec);
18723 	if (init_vec != NULL)
18724 	  release_tree_vector (init_vec);
18725 
18726 	RETURN (ret);
18727       }
18728 
18729     case DELETE_EXPR:
18730       {
18731 	tree op0 = RECUR (TREE_OPERAND (t, 0));
18732 	tree op1 = RECUR (TREE_OPERAND (t, 1));
18733 	RETURN (delete_sanity (op0, op1,
18734 			       DELETE_EXPR_USE_VEC (t),
18735 			       DELETE_EXPR_USE_GLOBAL (t),
18736 			       complain));
18737       }
18738 
18739     case COMPOUND_EXPR:
18740       {
18741 	tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
18742 					  complain & ~tf_decltype, in_decl,
18743 					  /*function_p=*/false,
18744 					  integral_constant_expression_p);
18745 	RETURN (build_x_compound_expr (EXPR_LOCATION (t),
18746 				       op0,
18747 				       RECUR (TREE_OPERAND (t, 1)),
18748 				       complain|decltype_flag));
18749       }
18750 
18751     case CALL_EXPR:
18752       {
18753 	tree function;
18754 	vec<tree, va_gc> *call_args;
18755 	unsigned int nargs, i;
18756 	bool qualified_p;
18757 	bool koenig_p;
18758 	tree ret;
18759 
18760 	function = CALL_EXPR_FN (t);
18761 	/* Internal function with no arguments.  */
18762 	if (function == NULL_TREE && call_expr_nargs (t) == 0)
18763 	  RETURN (t);
18764 
18765 	/* When we parsed the expression, we determined whether or
18766 	   not Koenig lookup should be performed.  */
18767 	koenig_p = KOENIG_LOOKUP_P (t);
18768 	if (function == NULL_TREE)
18769 	  {
18770 	    koenig_p = false;
18771 	    qualified_p = false;
18772 	  }
18773 	else if (TREE_CODE (function) == SCOPE_REF)
18774 	  {
18775 	    qualified_p = true;
18776 	    function = tsubst_qualified_id (function, args, complain, in_decl,
18777 					    /*done=*/false,
18778 					    /*address_p=*/false);
18779 	  }
18780 	else if (koenig_p && identifier_p (function))
18781 	  {
18782 	    /* Do nothing; calling tsubst_copy_and_build on an identifier
18783 	       would incorrectly perform unqualified lookup again.
18784 
18785 	       Note that we can also have an IDENTIFIER_NODE if the earlier
18786 	       unqualified lookup found a member function; in that case
18787 	       koenig_p will be false and we do want to do the lookup
18788 	       again to find the instantiated member function.
18789 
18790 	       FIXME but doing that causes c++/15272, so we need to stop
18791 	       using IDENTIFIER_NODE in that situation.  */
18792 	    qualified_p = false;
18793 	  }
18794 	else
18795 	  {
18796 	    if (TREE_CODE (function) == COMPONENT_REF)
18797 	      {
18798 		tree op = TREE_OPERAND (function, 1);
18799 
18800 		qualified_p = (TREE_CODE (op) == SCOPE_REF
18801 			       || (BASELINK_P (op)
18802 				   && BASELINK_QUALIFIED_P (op)));
18803 	      }
18804 	    else
18805 	      qualified_p = false;
18806 
18807 	    if (TREE_CODE (function) == ADDR_EXPR
18808 		&& TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
18809 	      /* Avoid error about taking the address of a constructor.  */
18810 	      function = TREE_OPERAND (function, 0);
18811 
18812 	    function = tsubst_copy_and_build (function, args, complain,
18813 					      in_decl,
18814 					      !qualified_p,
18815 					      integral_constant_expression_p);
18816 
18817 	    if (BASELINK_P (function))
18818 	      qualified_p = true;
18819 	  }
18820 
18821 	nargs = call_expr_nargs (t);
18822 	call_args = make_tree_vector ();
18823 	for (i = 0; i < nargs; ++i)
18824 	  {
18825 	    tree arg = CALL_EXPR_ARG (t, i);
18826 
18827 	    if (!PACK_EXPANSION_P (arg))
18828 	      vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
18829 	    else
18830 	      {
18831 		/* Expand the pack expansion and push each entry onto
18832 		   CALL_ARGS.  */
18833 		arg = tsubst_pack_expansion (arg, args, complain, in_decl);
18834 		if (TREE_CODE (arg) == TREE_VEC)
18835 		  {
18836 		    unsigned int len, j;
18837 
18838 		    len = TREE_VEC_LENGTH (arg);
18839 		    for (j = 0; j < len; ++j)
18840 		      {
18841 			tree value = TREE_VEC_ELT (arg, j);
18842 			if (value != NULL_TREE)
18843 			  value = convert_from_reference (value);
18844 			vec_safe_push (call_args, value);
18845 		      }
18846 		  }
18847 		else
18848 		  {
18849 		    /* A partial substitution.  Add one entry.  */
18850 		    vec_safe_push (call_args, arg);
18851 		  }
18852 	      }
18853 	  }
18854 
18855 	/* Stripped-down processing for a call in a thunk.  Specifically, in
18856 	   the thunk template for a generic lambda.  */
18857 	if (CALL_FROM_THUNK_P (t))
18858 	  {
18859 	    tree thisarg = NULL_TREE;
18860 	    if (TREE_CODE (function) == COMPONENT_REF)
18861 	      {
18862 		thisarg = TREE_OPERAND (function, 0);
18863 		if (TREE_CODE (thisarg) == INDIRECT_REF)
18864 		  thisarg = TREE_OPERAND (thisarg, 0);
18865 		function = TREE_OPERAND (function, 1);
18866 		if (TREE_CODE (function) == BASELINK)
18867 		  function = BASELINK_FUNCTIONS (function);
18868 	      }
18869 	    /* We aren't going to do normal overload resolution, so force the
18870 	       template-id to resolve.  */
18871 	    function = resolve_nondeduced_context (function, complain);
18872 	    for (unsigned i = 0; i < nargs; ++i)
18873 	      {
18874 		/* In a thunk, pass through args directly, without any
18875 		   conversions.  */
18876 		tree arg = (*call_args)[i];
18877 		while (TREE_CODE (arg) != PARM_DECL)
18878 		  arg = TREE_OPERAND (arg, 0);
18879 		(*call_args)[i] = arg;
18880 	      }
18881 	    if (thisarg)
18882 	      {
18883 		/* Shift the other args over to make room.  */
18884 		vec_safe_push (call_args, (*call_args)[nargs-1]);
18885 		for (int i = nargs-1; i > 0; --i)
18886 		  (*call_args)[i] = (*call_args)[i-1];
18887 		(*call_args)[0] = thisarg;
18888 	      }
18889 	    ret = build_call_a (function, call_args->length (),
18890 				call_args->address ());
18891 	    /* The thunk location is not interesting.  */
18892 	    SET_EXPR_LOCATION (ret, UNKNOWN_LOCATION);
18893 	    CALL_FROM_THUNK_P (ret) = true;
18894 	    if (CLASS_TYPE_P (TREE_TYPE (ret)))
18895 	      CALL_EXPR_RETURN_SLOT_OPT (ret) = true;
18896 
18897 	    release_tree_vector (call_args);
18898 	    RETURN (ret);
18899 	  }
18900 
18901 	/* We do not perform argument-dependent lookup if normal
18902 	   lookup finds a non-function, in accordance with the
18903 	   expected resolution of DR 218.  */
18904 	if (koenig_p
18905 	    && ((is_overloaded_fn (function)
18906 		 /* If lookup found a member function, the Koenig lookup is
18907 		    not appropriate, even if an unqualified-name was used
18908 		    to denote the function.  */
18909 		 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
18910 		|| identifier_p (function))
18911 	    /* Only do this when substitution turns a dependent call
18912 	       into a non-dependent call.  */
18913 	    && type_dependent_expression_p_push (t)
18914 	    && !any_type_dependent_arguments_p (call_args))
18915 	  function = perform_koenig_lookup (function, call_args, tf_none);
18916 
18917 	if (function != NULL_TREE
18918 	    && identifier_p (function)
18919 	    && !any_type_dependent_arguments_p (call_args))
18920 	  {
18921 	    if (koenig_p && (complain & tf_warning_or_error))
18922 	      {
18923 		/* For backwards compatibility and good diagnostics, try
18924 		   the unqualified lookup again if we aren't in SFINAE
18925 		   context.  */
18926 		tree unq = (tsubst_copy_and_build
18927 			    (function, args, complain, in_decl, true,
18928 			     integral_constant_expression_p));
18929 		if (unq == error_mark_node)
18930 		  {
18931 		    release_tree_vector (call_args);
18932 		    RETURN (error_mark_node);
18933 		  }
18934 
18935 		if (unq != function)
18936 		  {
18937 		    /* In a lambda fn, we have to be careful to not
18938 		       introduce new this captures.  Legacy code can't
18939 		       be using lambdas anyway, so it's ok to be
18940 		       stricter.  */
18941 		    bool in_lambda = (current_class_type
18942 				      && LAMBDA_TYPE_P (current_class_type));
18943 		    char const *const msg
18944 		      = G_("%qD was not declared in this scope, "
18945 			   "and no declarations were found by "
18946 			   "argument-dependent lookup at the point "
18947 			   "of instantiation");
18948 
18949 		    bool diag = true;
18950 		    if (in_lambda)
18951 		      error_at (cp_expr_loc_or_loc (t, input_location),
18952 				msg, function);
18953 		    else
18954 		      diag = permerror (cp_expr_loc_or_loc (t, input_location),
18955 					msg, function);
18956 		    if (diag)
18957 		      {
18958 			tree fn = unq;
18959 
18960 			if (INDIRECT_REF_P (fn))
18961 			  fn = TREE_OPERAND (fn, 0);
18962 			if (is_overloaded_fn (fn))
18963 			  fn = get_first_fn (fn);
18964 
18965 			if (!DECL_P (fn))
18966 			  /* Can't say anything more.  */;
18967 			else if (DECL_CLASS_SCOPE_P (fn))
18968 			  {
18969 			    location_t loc = cp_expr_loc_or_loc (t,
18970 							      input_location);
18971 			    inform (loc,
18972 				    "declarations in dependent base %qT are "
18973 				    "not found by unqualified lookup",
18974 				    DECL_CLASS_CONTEXT (fn));
18975 			    if (current_class_ptr)
18976 			      inform (loc,
18977 				      "use %<this->%D%> instead", function);
18978 			    else
18979 			      inform (loc,
18980 				      "use %<%T::%D%> instead",
18981 				      current_class_name, function);
18982 			  }
18983 			else
18984 			  inform (DECL_SOURCE_LOCATION (fn),
18985 				  "%qD declared here, later in the "
18986 				  "translation unit", fn);
18987 			if (in_lambda)
18988 			  {
18989 			    release_tree_vector (call_args);
18990 			    RETURN (error_mark_node);
18991 			  }
18992 		      }
18993 
18994 		    function = unq;
18995 		  }
18996 	      }
18997 	    if (identifier_p (function))
18998 	      {
18999 		if (complain & tf_error)
19000 		  unqualified_name_lookup_error (function);
19001 		release_tree_vector (call_args);
19002 		RETURN (error_mark_node);
19003 	      }
19004 	  }
19005 
19006 	/* Remember that there was a reference to this entity.  */
19007 	if (function != NULL_TREE
19008 	    && DECL_P (function)
19009 	    && !mark_used (function, complain) && !(complain & tf_error))
19010 	  {
19011 	    release_tree_vector (call_args);
19012 	    RETURN (error_mark_node);
19013 	  }
19014 
19015 	/* Put back tf_decltype for the actual call.  */
19016 	complain |= decltype_flag;
19017 
19018 	if (function == NULL_TREE)
19019 	  switch (CALL_EXPR_IFN (t))
19020 	    {
19021 	    case IFN_LAUNDER:
19022 	      gcc_assert (nargs == 1);
19023 	      if (vec_safe_length (call_args) != 1)
19024 		{
19025 		  error_at (cp_expr_loc_or_loc (t, input_location),
19026 			    "wrong number of arguments to "
19027 			    "%<__builtin_launder%>");
19028 		  ret = error_mark_node;
19029 		}
19030 	      else
19031 		ret = finish_builtin_launder (cp_expr_loc_or_loc (t,
19032 							       input_location),
19033 					      (*call_args)[0], complain);
19034 	      break;
19035 
19036 	    case IFN_VEC_CONVERT:
19037 	      gcc_assert (nargs == 1);
19038 	      if (vec_safe_length (call_args) != 1)
19039 		{
19040 		  error_at (cp_expr_loc_or_loc (t, input_location),
19041 			    "wrong number of arguments to "
19042 			    "%<__builtin_convertvector%>");
19043 		  ret = error_mark_node;
19044 		  break;
19045 		}
19046 	      ret = cp_build_vec_convert ((*call_args)[0], input_location,
19047 					  tsubst (TREE_TYPE (t), args,
19048 						  complain, in_decl),
19049 					  complain);
19050 	      if (TREE_CODE (ret) == VIEW_CONVERT_EXPR)
19051 		{
19052 		  release_tree_vector (call_args);
19053 		  RETURN (ret);
19054 		}
19055 	      break;
19056 
19057 	    default:
19058 	      /* Unsupported internal function with arguments.  */
19059 	      gcc_unreachable ();
19060 	    }
19061 	else if (TREE_CODE (function) == OFFSET_REF
19062 		 || TREE_CODE (function) == DOTSTAR_EXPR
19063 		 || TREE_CODE (function) == MEMBER_REF)
19064 	  ret = build_offset_ref_call_from_tree (function, &call_args,
19065 						 complain);
19066 	else if (TREE_CODE (function) == COMPONENT_REF)
19067 	  {
19068 	    tree instance = TREE_OPERAND (function, 0);
19069 	    tree fn = TREE_OPERAND (function, 1);
19070 
19071 	    if (processing_template_decl
19072 		&& (type_dependent_expression_p (instance)
19073 		    || (!BASELINK_P (fn)
19074 			&& TREE_CODE (fn) != FIELD_DECL)
19075 		    || type_dependent_expression_p (fn)
19076 		    || any_type_dependent_arguments_p (call_args)))
19077 	      ret = build_min_nt_call_vec (function, call_args);
19078 	    else if (!BASELINK_P (fn))
19079 	      ret = finish_call_expr (function, &call_args,
19080 				       /*disallow_virtual=*/false,
19081 				       /*koenig_p=*/false,
19082 				       complain);
19083 	    else
19084 	      ret = (build_new_method_call
19085 		      (instance, fn,
19086 		       &call_args, NULL_TREE,
19087 		       qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
19088 		       /*fn_p=*/NULL,
19089 		       complain));
19090 	  }
19091 	else
19092 	  ret = finish_call_expr (function, &call_args,
19093 				  /*disallow_virtual=*/qualified_p,
19094 				  koenig_p,
19095 				  complain);
19096 
19097 	release_tree_vector (call_args);
19098 
19099 	if (ret != error_mark_node)
19100 	  {
19101 	    bool op = CALL_EXPR_OPERATOR_SYNTAX (t);
19102 	    bool ord = CALL_EXPR_ORDERED_ARGS (t);
19103 	    bool rev = CALL_EXPR_REVERSE_ARGS (t);
19104 	    if (op || ord || rev)
19105 	      {
19106 		function = extract_call_expr (ret);
19107 		CALL_EXPR_OPERATOR_SYNTAX (function) = op;
19108 		CALL_EXPR_ORDERED_ARGS (function) = ord;
19109 		CALL_EXPR_REVERSE_ARGS (function) = rev;
19110 	      }
19111 	  }
19112 
19113 	RETURN (ret);
19114       }
19115 
19116     case COND_EXPR:
19117       {
19118 	tree cond = RECUR (TREE_OPERAND (t, 0));
19119 	cond = mark_rvalue_use (cond);
19120 	tree folded_cond = fold_non_dependent_expr (cond, complain);
19121 	tree exp1, exp2;
19122 
19123 	if (TREE_CODE (folded_cond) == INTEGER_CST)
19124 	  {
19125 	    if (integer_zerop (folded_cond))
19126 	      {
19127 		++c_inhibit_evaluation_warnings;
19128 		exp1 = RECUR (TREE_OPERAND (t, 1));
19129 		--c_inhibit_evaluation_warnings;
19130 		exp2 = RECUR (TREE_OPERAND (t, 2));
19131 	      }
19132 	    else
19133 	      {
19134 		exp1 = RECUR (TREE_OPERAND (t, 1));
19135 		++c_inhibit_evaluation_warnings;
19136 		exp2 = RECUR (TREE_OPERAND (t, 2));
19137 		--c_inhibit_evaluation_warnings;
19138 	      }
19139 	    cond = folded_cond;
19140 	  }
19141 	else
19142 	  {
19143 	    exp1 = RECUR (TREE_OPERAND (t, 1));
19144 	    exp2 = RECUR (TREE_OPERAND (t, 2));
19145 	  }
19146 
19147 	warning_sentinel s(warn_duplicated_branches);
19148 	RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
19149 					 cond, exp1, exp2, complain));
19150       }
19151 
19152     case PSEUDO_DTOR_EXPR:
19153       {
19154 	tree op0 = RECUR (TREE_OPERAND (t, 0));
19155 	tree op1 = RECUR (TREE_OPERAND (t, 1));
19156 	tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
19157 	RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
19158 					       input_location));
19159       }
19160 
19161     case TREE_LIST:
19162       {
19163 	tree purpose, value, chain;
19164 
19165 	if (t == void_list_node)
19166 	  RETURN (t);
19167 
19168         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
19169             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
19170           {
19171             /* We have pack expansions, so expand those and
19172                create a new list out of it.  */
19173             tree purposevec = NULL_TREE;
19174             tree valuevec = NULL_TREE;
19175             tree chain;
19176             int i, len = -1;
19177 
19178             /* Expand the argument expressions.  */
19179             if (TREE_PURPOSE (t))
19180               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
19181                                                  complain, in_decl);
19182             if (TREE_VALUE (t))
19183               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
19184                                                complain, in_decl);
19185 
19186             /* Build the rest of the list.  */
19187             chain = TREE_CHAIN (t);
19188             if (chain && chain != void_type_node)
19189               chain = RECUR (chain);
19190 
19191             /* Determine the number of arguments.  */
19192             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
19193               {
19194                 len = TREE_VEC_LENGTH (purposevec);
19195                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
19196               }
19197             else if (TREE_CODE (valuevec) == TREE_VEC)
19198               len = TREE_VEC_LENGTH (valuevec);
19199             else
19200               {
19201                 /* Since we only performed a partial substitution into
19202                    the argument pack, we only RETURN (a single list
19203                    node.  */
19204                 if (purposevec == TREE_PURPOSE (t)
19205                     && valuevec == TREE_VALUE (t)
19206                     && chain == TREE_CHAIN (t))
19207                   RETURN (t);
19208 
19209                 RETURN (tree_cons (purposevec, valuevec, chain));
19210               }
19211 
19212             /* Convert the argument vectors into a TREE_LIST */
19213             i = len;
19214             while (i > 0)
19215               {
19216                 /* Grab the Ith values.  */
19217                 i--;
19218                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
19219 		                     : NULL_TREE;
19220                 value
19221 		  = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
19222                              : NULL_TREE;
19223 
19224                 /* Build the list (backwards).  */
19225                 chain = tree_cons (purpose, value, chain);
19226               }
19227 
19228             RETURN (chain);
19229           }
19230 
19231 	purpose = TREE_PURPOSE (t);
19232 	if (purpose)
19233 	  purpose = RECUR (purpose);
19234 	value = TREE_VALUE (t);
19235 	if (value)
19236 	  value = RECUR (value);
19237 	chain = TREE_CHAIN (t);
19238 	if (chain && chain != void_type_node)
19239 	  chain = RECUR (chain);
19240 	if (purpose == TREE_PURPOSE (t)
19241 	    && value == TREE_VALUE (t)
19242 	    && chain == TREE_CHAIN (t))
19243 	  RETURN (t);
19244 	RETURN (tree_cons (purpose, value, chain));
19245       }
19246 
19247     case COMPONENT_REF:
19248       {
19249 	tree object;
19250 	tree object_type;
19251 	tree member;
19252 	tree r;
19253 
19254 	object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
19255 						     args, complain, in_decl);
19256 	/* Remember that there was a reference to this entity.  */
19257 	if (DECL_P (object)
19258 	    && !mark_used (object, complain) && !(complain & tf_error))
19259 	  RETURN (error_mark_node);
19260 	object_type = TREE_TYPE (object);
19261 
19262 	member = TREE_OPERAND (t, 1);
19263 	if (BASELINK_P (member))
19264 	  member = tsubst_baselink (member,
19265 				    non_reference (TREE_TYPE (object)),
19266 				    args, complain, in_decl);
19267 	else
19268 	  member = tsubst_copy (member, args, complain, in_decl);
19269 	if (member == error_mark_node)
19270 	  RETURN (error_mark_node);
19271 
19272 	if (TREE_CODE (member) == FIELD_DECL)
19273 	  {
19274 	    r = finish_non_static_data_member (member, object, NULL_TREE);
19275 	    if (TREE_CODE (r) == COMPONENT_REF)
19276 	      REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
19277 	    RETURN (r);
19278 	  }
19279 	else if (type_dependent_expression_p (object))
19280 	  /* We can't do much here.  */;
19281 	else if (!CLASS_TYPE_P (object_type))
19282 	  {
19283 	    if (scalarish_type_p (object_type))
19284 	      {
19285 		tree s = NULL_TREE;
19286 		tree dtor = member;
19287 
19288 		if (TREE_CODE (dtor) == SCOPE_REF)
19289 		  {
19290 		    s = TREE_OPERAND (dtor, 0);
19291 		    dtor = TREE_OPERAND (dtor, 1);
19292 		  }
19293 		if (TREE_CODE (dtor) == BIT_NOT_EXPR)
19294 		  {
19295 		    dtor = TREE_OPERAND (dtor, 0);
19296 		    if (TYPE_P (dtor))
19297 		      RETURN (finish_pseudo_destructor_expr
19298 			      (object, s, dtor, input_location));
19299 		  }
19300 	      }
19301 	  }
19302 	else if (TREE_CODE (member) == SCOPE_REF
19303 		 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
19304 	  {
19305 	    /* Lookup the template functions now that we know what the
19306 	       scope is.  */
19307 	    tree scope = TREE_OPERAND (member, 0);
19308 	    tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
19309 	    tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
19310 	    member = lookup_qualified_name (scope, tmpl,
19311 					    /*is_type_p=*/false,
19312 					    /*complain=*/false);
19313 	    if (BASELINK_P (member))
19314 	      {
19315 		BASELINK_FUNCTIONS (member)
19316 		  = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
19317 			      args);
19318 		member = (adjust_result_of_qualified_name_lookup
19319 			  (member, BINFO_TYPE (BASELINK_BINFO (member)),
19320 			   object_type));
19321 	      }
19322 	    else
19323 	      {
19324 		qualified_name_lookup_error (scope, tmpl, member,
19325 					     input_location);
19326 		RETURN (error_mark_node);
19327 	      }
19328 	  }
19329 	else if (TREE_CODE (member) == SCOPE_REF
19330 		 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
19331 		 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
19332 	  {
19333 	    if (complain & tf_error)
19334 	      {
19335 		if (TYPE_P (TREE_OPERAND (member, 0)))
19336 		  error ("%qT is not a class or namespace",
19337 			 TREE_OPERAND (member, 0));
19338 		else
19339 		  error ("%qD is not a class or namespace",
19340 			 TREE_OPERAND (member, 0));
19341 	      }
19342 	    RETURN (error_mark_node);
19343 	  }
19344 
19345 	r = finish_class_member_access_expr (object, member,
19346 					     /*template_p=*/false,
19347 					     complain);
19348 	if (TREE_CODE (r) == COMPONENT_REF)
19349 	  REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
19350 	RETURN (r);
19351       }
19352 
19353     case THROW_EXPR:
19354       RETURN (build_throw
19355 	(RECUR (TREE_OPERAND (t, 0))));
19356 
19357     case CONSTRUCTOR:
19358       {
19359 	vec<constructor_elt, va_gc> *n;
19360 	constructor_elt *ce;
19361 	unsigned HOST_WIDE_INT idx;
19362 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
19363 	bool process_index_p;
19364         int newlen;
19365         bool need_copy_p = false;
19366 	tree r;
19367 
19368 	if (type == error_mark_node)
19369 	  RETURN (error_mark_node);
19370 
19371 	/* We do not want to process the index of aggregate
19372 	   initializers as they are identifier nodes which will be
19373 	   looked up by digest_init.  */
19374 	process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
19375 
19376 	if (null_member_pointer_value_p (t))
19377 	  {
19378 	    gcc_assert (same_type_p (type, TREE_TYPE (t)));
19379 	    RETURN (t);
19380 	  }
19381 
19382 	n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
19383         newlen = vec_safe_length (n);
19384 	FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
19385 	  {
19386 	    if (ce->index && process_index_p
19387 		/* An identifier index is looked up in the type
19388 		   being initialized, not the current scope.  */
19389 		&& TREE_CODE (ce->index) != IDENTIFIER_NODE)
19390 	      ce->index = RECUR (ce->index);
19391 
19392             if (PACK_EXPANSION_P (ce->value))
19393               {
19394                 /* Substitute into the pack expansion.  */
19395                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
19396                                                   in_decl);
19397 
19398 		if (ce->value == error_mark_node
19399 		    || PACK_EXPANSION_P (ce->value))
19400 		  ;
19401 		else if (TREE_VEC_LENGTH (ce->value) == 1)
19402                   /* Just move the argument into place.  */
19403                   ce->value = TREE_VEC_ELT (ce->value, 0);
19404                 else
19405                   {
19406                     /* Update the length of the final CONSTRUCTOR
19407                        arguments vector, and note that we will need to
19408                        copy.*/
19409                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
19410                     need_copy_p = true;
19411                   }
19412               }
19413             else
19414               ce->value = RECUR (ce->value);
19415 	  }
19416 
19417         if (need_copy_p)
19418           {
19419             vec<constructor_elt, va_gc> *old_n = n;
19420 
19421             vec_alloc (n, newlen);
19422             FOR_EACH_VEC_ELT (*old_n, idx, ce)
19423               {
19424                 if (TREE_CODE (ce->value) == TREE_VEC)
19425                   {
19426                     int i, len = TREE_VEC_LENGTH (ce->value);
19427                     for (i = 0; i < len; ++i)
19428                       CONSTRUCTOR_APPEND_ELT (n, 0,
19429                                               TREE_VEC_ELT (ce->value, i));
19430                   }
19431                 else
19432                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
19433               }
19434           }
19435 
19436 	r = build_constructor (init_list_type_node, n);
19437 	CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
19438 	CONSTRUCTOR_IS_DESIGNATED_INIT (r)
19439 	  = CONSTRUCTOR_IS_DESIGNATED_INIT (t);
19440 
19441 	if (TREE_HAS_CONSTRUCTOR (t))
19442 	  {
19443 	    fcl_t cl = fcl_functional;
19444 	    if (CONSTRUCTOR_C99_COMPOUND_LITERAL (t))
19445 	      cl = fcl_c99;
19446 	    RETURN (finish_compound_literal (type, r, complain, cl));
19447 	  }
19448 
19449 	TREE_TYPE (r) = type;
19450 	RETURN (r);
19451       }
19452 
19453     case TYPEID_EXPR:
19454       {
19455 	tree operand_0 = TREE_OPERAND (t, 0);
19456 	if (TYPE_P (operand_0))
19457 	  {
19458 	    operand_0 = tsubst (operand_0, args, complain, in_decl);
19459 	    RETURN (get_typeid (operand_0, complain));
19460 	  }
19461 	else
19462 	  {
19463 	    operand_0 = RECUR (operand_0);
19464 	    RETURN (build_typeid (operand_0, complain));
19465 	  }
19466       }
19467 
19468     case VAR_DECL:
19469       if (!args)
19470 	RETURN (t);
19471       /* Fall through */
19472 
19473     case PARM_DECL:
19474       {
19475 	tree r = tsubst_copy (t, args, complain, in_decl);
19476 	/* ??? We're doing a subset of finish_id_expression here.  */
19477 	if (tree wrap = maybe_get_tls_wrapper_call (r))
19478 	  /* Replace an evaluated use of the thread_local variable with
19479 	     a call to its wrapper.  */
19480 	  r = wrap;
19481 	else if (outer_automatic_var_p (r))
19482 	  r = process_outer_var_ref (r, complain);
19483 
19484 	if (!TYPE_REF_P (TREE_TYPE (t)))
19485 	  /* If the original type was a reference, we'll be wrapped in
19486 	     the appropriate INDIRECT_REF.  */
19487 	  r = convert_from_reference (r);
19488 	RETURN (r);
19489       }
19490 
19491     case VA_ARG_EXPR:
19492       {
19493 	tree op0 = RECUR (TREE_OPERAND (t, 0));
19494 	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
19495 	RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
19496       }
19497 
19498     case OFFSETOF_EXPR:
19499       {
19500 	tree object_ptr
19501 	  = tsubst_copy_and_build (TREE_OPERAND (t, 1), args, complain,
19502 				   in_decl, /*function_p=*/false,
19503 				   /*integral_constant_expression_p=*/false);
19504 	RETURN (finish_offsetof (object_ptr,
19505 				 RECUR (TREE_OPERAND (t, 0)),
19506 				 EXPR_LOCATION (t)));
19507       }
19508 
19509     case ADDRESSOF_EXPR:
19510       RETURN (cp_build_addressof (EXPR_LOCATION (t),
19511 				  RECUR (TREE_OPERAND (t, 0)), complain));
19512 
19513     case TRAIT_EXPR:
19514       {
19515 	tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
19516 			     complain, in_decl);
19517 
19518 	tree type2 = TRAIT_EXPR_TYPE2 (t);
19519 	if (type2 && TREE_CODE (type2) == TREE_LIST)
19520 	  type2 = RECUR (type2);
19521 	else if (type2)
19522 	  type2 = tsubst (type2, args, complain, in_decl);
19523 
19524 	RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
19525       }
19526 
19527     case STMT_EXPR:
19528       {
19529 	tree old_stmt_expr = cur_stmt_expr;
19530 	tree stmt_expr = begin_stmt_expr ();
19531 
19532 	cur_stmt_expr = stmt_expr;
19533 	tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
19534 		     integral_constant_expression_p);
19535 	stmt_expr = finish_stmt_expr (stmt_expr, false);
19536 	cur_stmt_expr = old_stmt_expr;
19537 
19538 	/* If the resulting list of expression statement is empty,
19539 	   fold it further into void_node.  */
19540 	if (empty_expr_stmt_p (stmt_expr))
19541 	  stmt_expr = void_node;
19542 
19543 	RETURN (stmt_expr);
19544       }
19545 
19546     case LAMBDA_EXPR:
19547       {
19548 	if (complain & tf_partial)
19549 	  {
19550 	    /* We don't have a full set of template arguments yet; don't touch
19551 	       the lambda at all.  */
19552 	    gcc_assert (processing_template_decl);
19553 	    return t;
19554 	  }
19555 	tree r = tsubst_lambda_expr (t, args, complain, in_decl);
19556 
19557 	RETURN (build_lambda_object (r));
19558       }
19559 
19560     case TARGET_EXPR:
19561       /* We can get here for a constant initializer of non-dependent type.
19562          FIXME stop folding in cp_parser_initializer_clause.  */
19563       {
19564 	tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
19565 					 complain);
19566 	RETURN (r);
19567       }
19568 
19569     case TRANSACTION_EXPR:
19570       RETURN (tsubst_expr(t, args, complain, in_decl,
19571 	     integral_constant_expression_p));
19572 
19573     case PAREN_EXPR:
19574       RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
19575 
19576     case VEC_PERM_EXPR:
19577       {
19578 	tree op0 = RECUR (TREE_OPERAND (t, 0));
19579 	tree op1 = RECUR (TREE_OPERAND (t, 1));
19580 	tree op2 = RECUR (TREE_OPERAND (t, 2));
19581 	RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
19582 				       complain));
19583       }
19584 
19585     case REQUIRES_EXPR:
19586       RETURN (tsubst_requires_expr (t, args, complain, in_decl));
19587 
19588     case RANGE_EXPR:
19589       /* No need to substitute further, a RANGE_EXPR will always be built
19590 	 with constant operands.  */
19591       RETURN (t);
19592 
19593     case NON_LVALUE_EXPR:
19594     case VIEW_CONVERT_EXPR:
19595       if (location_wrapper_p (t))
19596 	/* We need to do this here as well as in tsubst_copy so we get the
19597 	   other tsubst_copy_and_build semantics for a PARM_DECL operand.  */
19598 	RETURN (maybe_wrap_with_location (RECUR (TREE_OPERAND (t, 0)),
19599 					  EXPR_LOCATION (t)));
19600       /* fallthrough.  */
19601 
19602     default:
19603       /* Handle Objective-C++ constructs, if appropriate.  */
19604       {
19605 	tree subst
19606 	  = objcp_tsubst_copy_and_build (t, args, complain,
19607 					 in_decl, /*function_p=*/false);
19608 	if (subst)
19609 	  RETURN (subst);
19610       }
19611       RETURN (tsubst_copy (t, args, complain, in_decl));
19612     }
19613 
19614 #undef RECUR
19615 #undef RETURN
19616  out:
19617   input_location = loc;
19618   return retval;
19619 }
19620 
19621 /* Verify that the instantiated ARGS are valid. For type arguments,
19622    make sure that the type's linkage is ok. For non-type arguments,
19623    make sure they are constants if they are integral or enumerations.
19624    Emit an error under control of COMPLAIN, and return TRUE on error.  */
19625 
19626 static bool
check_instantiated_arg(tree tmpl,tree t,tsubst_flags_t complain)19627 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
19628 {
19629   if (dependent_template_arg_p (t))
19630     return false;
19631   if (ARGUMENT_PACK_P (t))
19632     {
19633       tree vec = ARGUMENT_PACK_ARGS (t);
19634       int len = TREE_VEC_LENGTH (vec);
19635       bool result = false;
19636       int i;
19637 
19638       for (i = 0; i < len; ++i)
19639 	if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
19640 	  result = true;
19641       return result;
19642     }
19643   else if (TYPE_P (t))
19644     {
19645       /* [basic.link]: A name with no linkage (notably, the name
19646 	 of a class or enumeration declared in a local scope)
19647 	 shall not be used to declare an entity with linkage.
19648 	 This implies that names with no linkage cannot be used as
19649 	 template arguments
19650 
19651 	 DR 757 relaxes this restriction for C++0x.  */
19652       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
19653 		 : no_linkage_check (t, /*relaxed_p=*/false));
19654 
19655       if (nt)
19656 	{
19657 	  /* DR 488 makes use of a type with no linkage cause
19658 	     type deduction to fail.  */
19659 	  if (complain & tf_error)
19660 	    {
19661 	      if (TYPE_UNNAMED_P (nt))
19662 		error ("%qT is/uses unnamed type", t);
19663 	      else
19664 		error ("template argument for %qD uses local type %qT",
19665 		       tmpl, t);
19666 	    }
19667 	  return true;
19668 	}
19669       /* In order to avoid all sorts of complications, we do not
19670 	 allow variably-modified types as template arguments.  */
19671       else if (variably_modified_type_p (t, NULL_TREE))
19672 	{
19673 	  if (complain & tf_error)
19674 	    error ("%qT is a variably modified type", t);
19675 	  return true;
19676 	}
19677     }
19678   /* Class template and alias template arguments should be OK.  */
19679   else if (DECL_TYPE_TEMPLATE_P (t))
19680     ;
19681   /* A non-type argument of integral or enumerated type must be a
19682      constant.  */
19683   else if (TREE_TYPE (t)
19684 	   && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
19685 	   && !REFERENCE_REF_P (t)
19686 	   && !TREE_CONSTANT (t))
19687     {
19688       if (complain & tf_error)
19689 	error ("integral expression %qE is not constant", t);
19690       return true;
19691     }
19692   return false;
19693 }
19694 
19695 static bool
check_instantiated_args(tree tmpl,tree args,tsubst_flags_t complain)19696 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
19697 {
19698   int ix, len = DECL_NTPARMS (tmpl);
19699   bool result = false;
19700 
19701   for (ix = 0; ix != len; ix++)
19702     {
19703       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
19704 	result = true;
19705     }
19706   if (result && (complain & tf_error))
19707     error ("  trying to instantiate %qD", tmpl);
19708   return result;
19709 }
19710 
19711 /* We're out of SFINAE context now, so generate diagnostics for the access
19712    errors we saw earlier when instantiating D from TMPL and ARGS.  */
19713 
19714 static void
recheck_decl_substitution(tree d,tree tmpl,tree args)19715 recheck_decl_substitution (tree d, tree tmpl, tree args)
19716 {
19717   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
19718   tree type = TREE_TYPE (pattern);
19719   location_t loc = input_location;
19720 
19721   push_access_scope (d);
19722   push_deferring_access_checks (dk_no_deferred);
19723   input_location = DECL_SOURCE_LOCATION (pattern);
19724   tsubst (type, args, tf_warning_or_error, d);
19725   input_location = loc;
19726   pop_deferring_access_checks ();
19727   pop_access_scope (d);
19728 }
19729 
19730 /* Instantiate the indicated variable, function, or alias template TMPL with
19731    the template arguments in TARG_PTR.  */
19732 
19733 static tree
instantiate_template_1(tree tmpl,tree orig_args,tsubst_flags_t complain)19734 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
19735 {
19736   tree targ_ptr = orig_args;
19737   tree fndecl;
19738   tree gen_tmpl;
19739   tree spec;
19740   bool access_ok = true;
19741 
19742   if (tmpl == error_mark_node)
19743     return error_mark_node;
19744 
19745   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
19746 
19747   /* If this function is a clone, handle it specially.  */
19748   if (DECL_CLONED_FUNCTION_P (tmpl))
19749     {
19750       tree spec;
19751       tree clone;
19752 
19753       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
19754 	 DECL_CLONED_FUNCTION.  */
19755       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
19756 				   targ_ptr, complain);
19757       if (spec == error_mark_node)
19758 	return error_mark_node;
19759 
19760       /* Look for the clone.  */
19761       FOR_EACH_CLONE (clone, spec)
19762 	if (DECL_NAME (clone) == DECL_NAME (tmpl))
19763 	  return clone;
19764       /* We should always have found the clone by now.  */
19765       gcc_unreachable ();
19766       return NULL_TREE;
19767     }
19768 
19769   if (targ_ptr == error_mark_node)
19770     return error_mark_node;
19771 
19772   /* Check to see if we already have this specialization.  */
19773   gen_tmpl = most_general_template (tmpl);
19774   if (TMPL_ARGS_DEPTH (targ_ptr)
19775       < TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl)))
19776     /* targ_ptr only has the innermost template args, so add the outer ones
19777        from tmpl, which could be either a partial instantiation or gen_tmpl (in
19778        the case of a non-dependent call within a template definition).  */
19779     targ_ptr = (add_outermost_template_args
19780 		(DECL_TI_ARGS (DECL_TEMPLATE_RESULT (tmpl)),
19781 		 targ_ptr));
19782 
19783   /* It would be nice to avoid hashing here and then again in tsubst_decl,
19784      but it doesn't seem to be on the hot path.  */
19785   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
19786 
19787   gcc_assert (tmpl == gen_tmpl
19788 	      || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
19789 		  == spec)
19790 	      || fndecl == NULL_TREE);
19791 
19792   if (spec != NULL_TREE)
19793     {
19794       if (FNDECL_HAS_ACCESS_ERRORS (spec))
19795 	{
19796 	  if (complain & tf_error)
19797 	    recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
19798 	  return error_mark_node;
19799 	}
19800       return spec;
19801     }
19802 
19803   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
19804 			       complain))
19805     return error_mark_node;
19806 
19807   /* We are building a FUNCTION_DECL, during which the access of its
19808      parameters and return types have to be checked.  However this
19809      FUNCTION_DECL which is the desired context for access checking
19810      is not built yet.  We solve this chicken-and-egg problem by
19811      deferring all checks until we have the FUNCTION_DECL.  */
19812   push_deferring_access_checks (dk_deferred);
19813 
19814   /* Instantiation of the function happens in the context of the function
19815      template, not the context of the overload resolution we're doing.  */
19816   push_to_top_level ();
19817   /* If there are dependent arguments, e.g. because we're doing partial
19818      ordering, make sure processing_template_decl stays set.  */
19819   if (uses_template_parms (targ_ptr))
19820     ++processing_template_decl;
19821   if (DECL_CLASS_SCOPE_P (gen_tmpl))
19822     {
19823       tree ctx = tsubst_aggr_type (DECL_CONTEXT (gen_tmpl), targ_ptr,
19824 				   complain, gen_tmpl, true);
19825       push_nested_class (ctx);
19826     }
19827 
19828   tree pattern = DECL_TEMPLATE_RESULT (gen_tmpl);
19829 
19830   fndecl = NULL_TREE;
19831   if (VAR_P (pattern))
19832     {
19833       /* We need to determine if we're using a partial or explicit
19834 	 specialization now, because the type of the variable could be
19835 	 different.  */
19836       tree tid = lookup_template_variable (gen_tmpl, targ_ptr);
19837       tree elt = most_specialized_partial_spec (tid, complain);
19838       if (elt == error_mark_node)
19839 	pattern = error_mark_node;
19840       else if (elt)
19841 	{
19842 	  tree partial_tmpl = TREE_VALUE (elt);
19843 	  tree partial_args = TREE_PURPOSE (elt);
19844 	  tree partial_pat = DECL_TEMPLATE_RESULT (partial_tmpl);
19845 	  fndecl = tsubst (partial_pat, partial_args, complain, gen_tmpl);
19846 	}
19847     }
19848 
19849   /* Substitute template parameters to obtain the specialization.  */
19850   if (fndecl == NULL_TREE)
19851     fndecl = tsubst (pattern, targ_ptr, complain, gen_tmpl);
19852   if (DECL_CLASS_SCOPE_P (gen_tmpl))
19853     pop_nested_class ();
19854   pop_from_top_level ();
19855 
19856   if (fndecl == error_mark_node)
19857     {
19858       pop_deferring_access_checks ();
19859       return error_mark_node;
19860     }
19861 
19862   /* The DECL_TI_TEMPLATE should always be the immediate parent
19863      template, not the most general template.  */
19864   DECL_TI_TEMPLATE (fndecl) = tmpl;
19865   DECL_TI_ARGS (fndecl) = targ_ptr;
19866 
19867   /* Now we know the specialization, compute access previously
19868      deferred.  Do no access control for inheriting constructors,
19869      as we already checked access for the inherited constructor.  */
19870   if (!(flag_new_inheriting_ctors
19871 	&& DECL_INHERITED_CTOR (fndecl)))
19872     {
19873       push_access_scope (fndecl);
19874       if (!perform_deferred_access_checks (complain))
19875 	access_ok = false;
19876       pop_access_scope (fndecl);
19877     }
19878   pop_deferring_access_checks ();
19879 
19880   /* If we've just instantiated the main entry point for a function,
19881      instantiate all the alternate entry points as well.  We do this
19882      by cloning the instantiation of the main entry point, not by
19883      instantiating the template clones.  */
19884   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
19885     clone_function_decl (fndecl, /*update_methods=*/false);
19886 
19887   if (!access_ok)
19888     {
19889       if (!(complain & tf_error))
19890 	{
19891 	  /* Remember to reinstantiate when we're out of SFINAE so the user
19892 	     can see the errors.  */
19893 	  FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
19894 	}
19895       return error_mark_node;
19896     }
19897   return fndecl;
19898 }
19899 
19900 /* Wrapper for instantiate_template_1.  */
19901 
19902 tree
instantiate_template(tree tmpl,tree orig_args,tsubst_flags_t complain)19903 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
19904 {
19905   tree ret;
19906   timevar_push (TV_TEMPLATE_INST);
19907   ret = instantiate_template_1 (tmpl, orig_args,  complain);
19908   timevar_pop (TV_TEMPLATE_INST);
19909   return ret;
19910 }
19911 
19912 /* Instantiate the alias template TMPL with ARGS.  Also push a template
19913    instantiation level, which instantiate_template doesn't do because
19914    functions and variables have sufficient context established by the
19915    callers.  */
19916 
19917 static tree
instantiate_alias_template(tree tmpl,tree args,tsubst_flags_t complain)19918 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
19919 {
19920   if (tmpl == error_mark_node || args == error_mark_node)
19921     return error_mark_node;
19922   if (!push_tinst_level (tmpl, args))
19923     return error_mark_node;
19924 
19925   args =
19926     coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
19927 				     args, tmpl, complain,
19928 				     /*require_all_args=*/true,
19929 				     /*use_default_args=*/true);
19930 
19931   tree r = instantiate_template (tmpl, args, complain);
19932   pop_tinst_level ();
19933 
19934   return r;
19935 }
19936 
19937 /* PARM is a template parameter pack for FN.  Returns true iff
19938    PARM is used in a deducible way in the argument list of FN.  */
19939 
19940 static bool
pack_deducible_p(tree parm,tree fn)19941 pack_deducible_p (tree parm, tree fn)
19942 {
19943   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
19944   for (; t; t = TREE_CHAIN (t))
19945     {
19946       tree type = TREE_VALUE (t);
19947       tree packs;
19948       if (!PACK_EXPANSION_P (type))
19949 	continue;
19950       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
19951 	   packs; packs = TREE_CHAIN (packs))
19952 	if (template_args_equal (TREE_VALUE (packs), parm))
19953 	  {
19954 	    /* The template parameter pack is used in a function parameter
19955 	       pack.  If this is the end of the parameter list, the
19956 	       template parameter pack is deducible.  */
19957 	    if (TREE_CHAIN (t) == void_list_node)
19958 	      return true;
19959 	    else
19960 	      /* Otherwise, not.  Well, it could be deduced from
19961 		 a non-pack parameter, but doing so would end up with
19962 		 a deduction mismatch, so don't bother.  */
19963 	      return false;
19964 	  }
19965     }
19966   /* The template parameter pack isn't used in any function parameter
19967      packs, but it might be used deeper, e.g. tuple<Args...>.  */
19968   return true;
19969 }
19970 
19971 /* Subroutine of fn_type_unification: check non-dependent parms for
19972    convertibility.  */
19973 
19974 static int
check_non_deducible_conversions(tree parms,const tree * args,unsigned nargs,tree fn,unification_kind_t strict,int flags,struct conversion ** convs,bool explain_p)19975 check_non_deducible_conversions (tree parms, const tree *args, unsigned nargs,
19976 				 tree fn, unification_kind_t strict, int flags,
19977 				 struct conversion **convs, bool explain_p)
19978 {
19979   /* Non-constructor methods need to leave a conversion for 'this', which
19980      isn't included in nargs here.  */
19981   unsigned offset = (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19982 		     && !DECL_CONSTRUCTOR_P (fn));
19983 
19984   for (unsigned ia = 0;
19985        parms && parms != void_list_node && ia < nargs; )
19986     {
19987       tree parm = TREE_VALUE (parms);
19988 
19989       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
19990 	  && (!TREE_CHAIN (parms)
19991 	      || TREE_CHAIN (parms) == void_list_node))
19992 	/* For a function parameter pack that occurs at the end of the
19993 	   parameter-declaration-list, the type A of each remaining
19994 	   argument of the call is compared with the type P of the
19995 	   declarator-id of the function parameter pack.  */
19996 	break;
19997 
19998       parms = TREE_CHAIN (parms);
19999 
20000       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
20001 	/* For a function parameter pack that does not occur at the
20002 	   end of the parameter-declaration-list, the type of the
20003 	   parameter pack is a non-deduced context.  */
20004 	continue;
20005 
20006       if (!uses_template_parms (parm))
20007 	{
20008 	  tree arg = args[ia];
20009 	  conversion **conv_p = convs ? &convs[ia+offset] : NULL;
20010 	  int lflags = conv_flags (ia, nargs, fn, arg, flags);
20011 
20012 	  if (check_non_deducible_conversion (parm, arg, strict, lflags,
20013 					      conv_p, explain_p))
20014 	    return 1;
20015 	}
20016 
20017       ++ia;
20018     }
20019 
20020   return 0;
20021 }
20022 
20023 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
20024    NARGS elements of the arguments that are being used when calling
20025    it.  TARGS is a vector into which the deduced template arguments
20026    are placed.
20027 
20028    Returns either a FUNCTION_DECL for the matching specialization of FN or
20029    NULL_TREE if no suitable specialization can be found.  If EXPLAIN_P is
20030    true, diagnostics will be printed to explain why it failed.
20031 
20032    If FN is a conversion operator, or we are trying to produce a specific
20033    specialization, RETURN_TYPE is the return type desired.
20034 
20035    The EXPLICIT_TARGS are explicit template arguments provided via a
20036    template-id.
20037 
20038    The parameter STRICT is one of:
20039 
20040    DEDUCE_CALL:
20041      We are deducing arguments for a function call, as in
20042      [temp.deduct.call].  If RETURN_TYPE is non-null, we are
20043      deducing arguments for a call to the result of a conversion
20044      function template, as in [over.call.object].
20045 
20046    DEDUCE_CONV:
20047      We are deducing arguments for a conversion function, as in
20048      [temp.deduct.conv].
20049 
20050    DEDUCE_EXACT:
20051      We are deducing arguments when doing an explicit instantiation
20052      as in [temp.explicit], when determining an explicit specialization
20053      as in [temp.expl.spec], or when taking the address of a function
20054      template, as in [temp.deduct.funcaddr].  */
20055 
20056 tree
fn_type_unification(tree fn,tree explicit_targs,tree targs,const tree * args,unsigned int nargs,tree return_type,unification_kind_t strict,int flags,struct conversion ** convs,bool explain_p,bool decltype_p)20057 fn_type_unification (tree fn,
20058 		     tree explicit_targs,
20059 		     tree targs,
20060 		     const tree *args,
20061 		     unsigned int nargs,
20062 		     tree return_type,
20063 		     unification_kind_t strict,
20064 		     int flags,
20065 		     struct conversion **convs,
20066 		     bool explain_p,
20067 		     bool decltype_p)
20068 {
20069   tree parms;
20070   tree fntype;
20071   tree decl = NULL_TREE;
20072   tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
20073   bool ok;
20074   static int deduction_depth;
20075   /* type_unification_real will pass back any access checks from default
20076      template argument substitution.  */
20077   vec<deferred_access_check, va_gc> *checks = NULL;
20078   /* We don't have all the template args yet.  */
20079   bool incomplete = true;
20080 
20081   tree orig_fn = fn;
20082   if (flag_new_inheriting_ctors)
20083     fn = strip_inheriting_ctors (fn);
20084 
20085   tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
20086   tree r = error_mark_node;
20087 
20088   tree full_targs = targs;
20089   if (TMPL_ARGS_DEPTH (targs)
20090       < TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (fn)))
20091     full_targs = (add_outermost_template_args
20092 		  (DECL_TI_ARGS (DECL_TEMPLATE_RESULT (fn)),
20093 		   targs));
20094 
20095   if (decltype_p)
20096     complain |= tf_decltype;
20097 
20098   /* In C++0x, it's possible to have a function template whose type depends
20099      on itself recursively.  This is most obvious with decltype, but can also
20100      occur with enumeration scope (c++/48969).  So we need to catch infinite
20101      recursion and reject the substitution at deduction time; this function
20102      will return error_mark_node for any repeated substitution.
20103 
20104      This also catches excessive recursion such as when f<N> depends on
20105      f<N-1> across all integers, and returns error_mark_node for all the
20106      substitutions back up to the initial one.
20107 
20108      This is, of course, not reentrant.  */
20109   if (excessive_deduction_depth)
20110     return error_mark_node;
20111   ++deduction_depth;
20112 
20113   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
20114 
20115   fntype = TREE_TYPE (fn);
20116   if (explicit_targs)
20117     {
20118       /* [temp.deduct]
20119 
20120 	 The specified template arguments must match the template
20121 	 parameters in kind (i.e., type, nontype, template), and there
20122 	 must not be more arguments than there are parameters;
20123 	 otherwise type deduction fails.
20124 
20125 	 Nontype arguments must match the types of the corresponding
20126 	 nontype template parameters, or must be convertible to the
20127 	 types of the corresponding nontype parameters as specified in
20128 	 _temp.arg.nontype_, otherwise type deduction fails.
20129 
20130 	 All references in the function type of the function template
20131 	 to the corresponding template parameters are replaced by the
20132 	 specified template argument values.  If a substitution in a
20133 	 template parameter or in the function type of the function
20134 	 template results in an invalid type, type deduction fails.  */
20135       int i, len = TREE_VEC_LENGTH (tparms);
20136       location_t loc = input_location;
20137       incomplete = false;
20138 
20139       if (explicit_targs == error_mark_node)
20140 	goto fail;
20141 
20142       if (TMPL_ARGS_DEPTH (explicit_targs)
20143 	  < TMPL_ARGS_DEPTH (full_targs))
20144 	explicit_targs = add_outermost_template_args (full_targs,
20145 						      explicit_targs);
20146 
20147       /* Adjust any explicit template arguments before entering the
20148 	 substitution context.  */
20149       explicit_targs
20150 	= (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
20151 				  complain|tf_partial,
20152 				  /*require_all_args=*/false,
20153 				  /*use_default_args=*/false));
20154       if (explicit_targs == error_mark_node)
20155 	goto fail;
20156 
20157       /* Substitute the explicit args into the function type.  This is
20158 	 necessary so that, for instance, explicitly declared function
20159 	 arguments can match null pointed constants.  If we were given
20160 	 an incomplete set of explicit args, we must not do semantic
20161 	 processing during substitution as we could create partial
20162 	 instantiations.  */
20163       for (i = 0; i < len; i++)
20164         {
20165           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
20166           bool parameter_pack = false;
20167 	  tree targ = TREE_VEC_ELT (explicit_targs, i);
20168 
20169           /* Dig out the actual parm.  */
20170           if (TREE_CODE (parm) == TYPE_DECL
20171               || TREE_CODE (parm) == TEMPLATE_DECL)
20172             {
20173               parm = TREE_TYPE (parm);
20174               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
20175             }
20176           else if (TREE_CODE (parm) == PARM_DECL)
20177             {
20178               parm = DECL_INITIAL (parm);
20179               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
20180             }
20181 
20182 	  if (targ == NULL_TREE)
20183 	    /* No explicit argument for this template parameter.  */
20184 	    incomplete = true;
20185 	  else if (parameter_pack && pack_deducible_p (parm, fn))
20186             {
20187               /* Mark the argument pack as "incomplete". We could
20188                  still deduce more arguments during unification.
20189 	         We remove this mark in type_unification_real.  */
20190 	      ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
20191 	      ARGUMENT_PACK_EXPLICIT_ARGS (targ)
20192 		= ARGUMENT_PACK_ARGS (targ);
20193 
20194               /* We have some incomplete argument packs.  */
20195               incomplete = true;
20196             }
20197         }
20198 
20199       if (incomplete)
20200 	{
20201 	  if (!push_tinst_level (fn, explicit_targs))
20202 	    {
20203 	      excessive_deduction_depth = true;
20204 	      goto fail;
20205 	    }
20206 	  ++processing_template_decl;
20207 	  input_location = DECL_SOURCE_LOCATION (fn);
20208 	  /* Ignore any access checks; we'll see them again in
20209 	     instantiate_template and they might have the wrong
20210 	     access path at this point.  */
20211 	  push_deferring_access_checks (dk_deferred);
20212 	  tsubst_flags_t ecomplain = complain | tf_partial | tf_fndecl_type;
20213 	  fntype = tsubst (TREE_TYPE (fn), explicit_targs, ecomplain, NULL_TREE);
20214 	  pop_deferring_access_checks ();
20215 	  input_location = loc;
20216 	  --processing_template_decl;
20217 	  pop_tinst_level ();
20218 
20219 	  if (fntype == error_mark_node)
20220 	    goto fail;
20221 	}
20222 
20223       /* Place the explicitly specified arguments in TARGS.  */
20224       explicit_targs = INNERMOST_TEMPLATE_ARGS (explicit_targs);
20225       for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
20226 	TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
20227       if (!incomplete && CHECKING_P
20228 	  && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
20229 	SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
20230 	  (targs, NUM_TMPL_ARGS (explicit_targs));
20231     }
20232 
20233   if (return_type && strict != DEDUCE_CALL)
20234     {
20235       tree *new_args = XALLOCAVEC (tree, nargs + 1);
20236       new_args[0] = return_type;
20237       memcpy (new_args + 1, args, nargs * sizeof (tree));
20238       args = new_args;
20239       ++nargs;
20240     }
20241 
20242   if (!incomplete)
20243     goto deduced;
20244 
20245   /* Never do unification on the 'this' parameter.  */
20246   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
20247 
20248   if (return_type && strict == DEDUCE_CALL)
20249     {
20250       /* We're deducing for a call to the result of a template conversion
20251          function.  The parms we really want are in return_type.  */
20252       if (INDIRECT_TYPE_P (return_type))
20253 	return_type = TREE_TYPE (return_type);
20254       parms = TYPE_ARG_TYPES (return_type);
20255     }
20256   else if (return_type)
20257     {
20258       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
20259     }
20260 
20261   /* We allow incomplete unification without an error message here
20262      because the standard doesn't seem to explicitly prohibit it.  Our
20263      callers must be ready to deal with unification failures in any
20264      event.  */
20265 
20266   /* If we aren't explaining yet, push tinst context so we can see where
20267      any errors (e.g. from class instantiations triggered by instantiation
20268      of default template arguments) come from.  If we are explaining, this
20269      context is redundant.  */
20270   if (!explain_p && !push_tinst_level (fn, targs))
20271     {
20272       excessive_deduction_depth = true;
20273       goto fail;
20274     }
20275 
20276   ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
20277 			       full_targs, parms, args, nargs, /*subr=*/0,
20278 			       strict, &checks, explain_p);
20279   if (!explain_p)
20280     pop_tinst_level ();
20281   if (!ok)
20282     goto fail;
20283 
20284   /* Now that we have bindings for all of the template arguments,
20285      ensure that the arguments deduced for the template template
20286      parameters have compatible template parameter lists.  We cannot
20287      check this property before we have deduced all template
20288      arguments, because the template parameter types of a template
20289      template parameter might depend on prior template parameters
20290      deduced after the template template parameter.  The following
20291      ill-formed example illustrates this issue:
20292 
20293        template<typename T, template<T> class C> void f(C<5>, T);
20294 
20295        template<int N> struct X {};
20296 
20297        void g() {
20298          f(X<5>(), 5l); // error: template argument deduction fails
20299        }
20300 
20301      The template parameter list of 'C' depends on the template type
20302      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
20303      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
20304      time that we deduce 'C'.  */
20305   if (!template_template_parm_bindings_ok_p
20306            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
20307     {
20308       unify_inconsistent_template_template_parameters (explain_p);
20309       goto fail;
20310     }
20311 
20312   /* DR 1391: All parameters have args, now check non-dependent parms for
20313      convertibility.  */
20314   if (check_non_deducible_conversions (parms, args, nargs, fn, strict, flags,
20315 				       convs, explain_p))
20316     goto fail;
20317 
20318  deduced:
20319   /* All is well so far.  Now, check:
20320 
20321      [temp.deduct]
20322 
20323      When all template arguments have been deduced, all uses of
20324      template parameters in nondeduced contexts are replaced with
20325      the corresponding deduced argument values.  If the
20326      substitution results in an invalid type, as described above,
20327      type deduction fails.  */
20328   if (!push_tinst_level (fn, targs))
20329     {
20330       excessive_deduction_depth = true;
20331       goto fail;
20332     }
20333 
20334   /* Also collect access checks from the instantiation.  */
20335   reopen_deferring_access_checks (checks);
20336 
20337   decl = instantiate_template (fn, targs, complain);
20338 
20339   checks = get_deferred_access_checks ();
20340   pop_deferring_access_checks ();
20341 
20342   pop_tinst_level ();
20343 
20344   if (decl == error_mark_node)
20345     goto fail;
20346 
20347   /* Now perform any access checks encountered during substitution.  */
20348   push_access_scope (decl);
20349   ok = perform_access_checks (checks, complain);
20350   pop_access_scope (decl);
20351   if (!ok)
20352     goto fail;
20353 
20354   /* If we're looking for an exact match, check that what we got
20355      is indeed an exact match.  It might not be if some template
20356      parameters are used in non-deduced contexts.  But don't check
20357      for an exact match if we have dependent template arguments;
20358      in that case we're doing partial ordering, and we already know
20359      that we have two candidates that will provide the actual type.  */
20360   if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
20361     {
20362       tree substed = TREE_TYPE (decl);
20363       unsigned int i;
20364 
20365       tree sarg
20366 	= skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
20367       if (return_type)
20368 	sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
20369       for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
20370 	if (!same_type_p (args[i], TREE_VALUE (sarg)))
20371 	  {
20372 	    unify_type_mismatch (explain_p, args[i],
20373 				 TREE_VALUE (sarg));
20374 	    goto fail;
20375 	  }
20376     }
20377 
20378   /* After doing deduction with the inherited constructor, actually return an
20379      instantiation of the inheriting constructor.  */
20380   if (orig_fn != fn)
20381     decl = instantiate_template (orig_fn, targs, complain);
20382 
20383   r = decl;
20384 
20385  fail:
20386   --deduction_depth;
20387   if (excessive_deduction_depth)
20388     {
20389       if (deduction_depth == 0)
20390 	/* Reset once we're all the way out.  */
20391 	excessive_deduction_depth = false;
20392     }
20393 
20394   return r;
20395 }
20396 
20397 /* Adjust types before performing type deduction, as described in
20398    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
20399    sections are symmetric.  PARM is the type of a function parameter
20400    or the return type of the conversion function.  ARG is the type of
20401    the argument passed to the call, or the type of the value
20402    initialized with the result of the conversion function.
20403    ARG_EXPR is the original argument expression, which may be null.  */
20404 
20405 static int
maybe_adjust_types_for_deduction(unification_kind_t strict,tree * parm,tree * arg,tree arg_expr)20406 maybe_adjust_types_for_deduction (unification_kind_t strict,
20407 				  tree* parm,
20408 				  tree* arg,
20409 				  tree arg_expr)
20410 {
20411   int result = 0;
20412 
20413   switch (strict)
20414     {
20415     case DEDUCE_CALL:
20416       break;
20417 
20418     case DEDUCE_CONV:
20419       /* Swap PARM and ARG throughout the remainder of this
20420 	 function; the handling is precisely symmetric since PARM
20421 	 will initialize ARG rather than vice versa.  */
20422       std::swap (parm, arg);
20423       break;
20424 
20425     case DEDUCE_EXACT:
20426       /* Core issue #873: Do the DR606 thing (see below) for these cases,
20427 	 too, but here handle it by stripping the reference from PARM
20428 	 rather than by adding it to ARG.  */
20429       if (TYPE_REF_P (*parm)
20430 	  && TYPE_REF_IS_RVALUE (*parm)
20431 	  && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
20432 	  && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
20433 	  && TYPE_REF_P (*arg)
20434 	  && !TYPE_REF_IS_RVALUE (*arg))
20435 	*parm = TREE_TYPE (*parm);
20436       /* Nothing else to do in this case.  */
20437       return 0;
20438 
20439     default:
20440       gcc_unreachable ();
20441     }
20442 
20443   if (!TYPE_REF_P (*parm))
20444     {
20445       /* [temp.deduct.call]
20446 
20447 	 If P is not a reference type:
20448 
20449 	 --If A is an array type, the pointer type produced by the
20450 	 array-to-pointer standard conversion (_conv.array_) is
20451 	 used in place of A for type deduction; otherwise,
20452 
20453 	 --If A is a function type, the pointer type produced by
20454 	 the function-to-pointer standard conversion
20455 	 (_conv.func_) is used in place of A for type deduction;
20456 	 otherwise,
20457 
20458 	 --If A is a cv-qualified type, the top level
20459 	 cv-qualifiers of A's type are ignored for type
20460 	 deduction.  */
20461       if (TREE_CODE (*arg) == ARRAY_TYPE)
20462 	*arg = build_pointer_type (TREE_TYPE (*arg));
20463       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
20464 	*arg = build_pointer_type (*arg);
20465       else
20466 	*arg = TYPE_MAIN_VARIANT (*arg);
20467     }
20468 
20469   /* [14.8.2.1/3 temp.deduct.call], "A forwarding reference is an rvalue
20470      reference to a cv-unqualified template parameter that does not represent a
20471      template parameter of a class template (during class template argument
20472      deduction (13.3.1.8)). If P is a forwarding reference and the argument is
20473      an lvalue, the type "lvalue reference to A" is used in place of A for type
20474      deduction. */
20475   if (TYPE_REF_P (*parm)
20476       && TYPE_REF_IS_RVALUE (*parm)
20477       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
20478       && !TEMPLATE_TYPE_PARM_FOR_CLASS (TREE_TYPE (*parm))
20479       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
20480       && (arg_expr ? lvalue_p (arg_expr)
20481 	  /* try_one_overload doesn't provide an arg_expr, but
20482 	     functions are always lvalues.  */
20483 	  : TREE_CODE (*arg) == FUNCTION_TYPE))
20484     *arg = build_reference_type (*arg);
20485 
20486   /* [temp.deduct.call]
20487 
20488      If P is a cv-qualified type, the top level cv-qualifiers
20489      of P's type are ignored for type deduction.  If P is a
20490      reference type, the type referred to by P is used for
20491      type deduction.  */
20492   *parm = TYPE_MAIN_VARIANT (*parm);
20493   if (TYPE_REF_P (*parm))
20494     {
20495       *parm = TREE_TYPE (*parm);
20496       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
20497     }
20498 
20499   /* DR 322. For conversion deduction, remove a reference type on parm
20500      too (which has been swapped into ARG).  */
20501   if (strict == DEDUCE_CONV && TYPE_REF_P (*arg))
20502     *arg = TREE_TYPE (*arg);
20503 
20504   return result;
20505 }
20506 
20507 /* Subroutine of fn_type_unification.  PARM is a function parameter of a
20508    template which doesn't contain any deducible template parameters; check if
20509    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
20510    unify_one_argument.  */
20511 
20512 static int
check_non_deducible_conversion(tree parm,tree arg,int strict,int flags,struct conversion ** conv_p,bool explain_p)20513 check_non_deducible_conversion (tree parm, tree arg, int strict,
20514 				int flags, struct conversion **conv_p,
20515 				bool explain_p)
20516 {
20517   tree type;
20518 
20519   if (!TYPE_P (arg))
20520     type = TREE_TYPE (arg);
20521   else
20522     type = arg;
20523 
20524   if (same_type_p (parm, type))
20525     return unify_success (explain_p);
20526 
20527   tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
20528   if (strict == DEDUCE_CONV)
20529     {
20530       if (can_convert_arg (type, parm, NULL_TREE, flags, complain))
20531 	return unify_success (explain_p);
20532     }
20533   else if (strict != DEDUCE_EXACT)
20534     {
20535       bool ok = false;
20536       tree conv_arg = TYPE_P (arg) ? NULL_TREE : arg;
20537       if (conv_p)
20538 	/* Avoid recalculating this in add_function_candidate.  */
20539 	ok = (*conv_p
20540 	      = good_conversion (parm, type, conv_arg, flags, complain));
20541       else
20542 	ok = can_convert_arg (parm, type, conv_arg, flags, complain);
20543       if (ok)
20544 	return unify_success (explain_p);
20545     }
20546 
20547   if (strict == DEDUCE_EXACT)
20548     return unify_type_mismatch (explain_p, parm, arg);
20549   else
20550     return unify_arg_conversion (explain_p, parm, type, arg);
20551 }
20552 
20553 static bool uses_deducible_template_parms (tree type);
20554 
20555 /* Returns true iff the expression EXPR is one from which a template
20556    argument can be deduced.  In other words, if it's an undecorated
20557    use of a template non-type parameter.  */
20558 
20559 static bool
deducible_expression(tree expr)20560 deducible_expression (tree expr)
20561 {
20562   /* Strip implicit conversions.  */
20563   while (CONVERT_EXPR_P (expr))
20564     expr = TREE_OPERAND (expr, 0);
20565   return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
20566 }
20567 
20568 /* Returns true iff the array domain DOMAIN uses a template parameter in a
20569    deducible way; that is, if it has a max value of <PARM> - 1.  */
20570 
20571 static bool
deducible_array_bound(tree domain)20572 deducible_array_bound (tree domain)
20573 {
20574   if (domain == NULL_TREE)
20575     return false;
20576 
20577   tree max = TYPE_MAX_VALUE (domain);
20578   if (TREE_CODE (max) != MINUS_EXPR)
20579     return false;
20580 
20581   return deducible_expression (TREE_OPERAND (max, 0));
20582 }
20583 
20584 /* Returns true iff the template arguments ARGS use a template parameter
20585    in a deducible way.  */
20586 
20587 static bool
deducible_template_args(tree args)20588 deducible_template_args (tree args)
20589 {
20590   for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
20591     {
20592       bool deducible;
20593       tree elt = TREE_VEC_ELT (args, i);
20594       if (ARGUMENT_PACK_P (elt))
20595 	deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
20596       else
20597 	{
20598 	  if (PACK_EXPANSION_P (elt))
20599 	    elt = PACK_EXPANSION_PATTERN (elt);
20600 	  if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
20601 	    deducible = true;
20602 	  else if (TYPE_P (elt))
20603 	    deducible = uses_deducible_template_parms (elt);
20604 	  else
20605 	    deducible = deducible_expression (elt);
20606 	}
20607       if (deducible)
20608 	return true;
20609     }
20610   return false;
20611 }
20612 
20613 /* Returns true iff TYPE contains any deducible references to template
20614    parameters, as per 14.8.2.5.  */
20615 
20616 static bool
uses_deducible_template_parms(tree type)20617 uses_deducible_template_parms (tree type)
20618 {
20619   if (PACK_EXPANSION_P (type))
20620     type = PACK_EXPANSION_PATTERN (type);
20621 
20622   /* T
20623      cv-list T
20624      TT<T>
20625      TT<i>
20626      TT<> */
20627   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20628       || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
20629     return true;
20630 
20631   /* T*
20632      T&
20633      T&&  */
20634   if (INDIRECT_TYPE_P (type))
20635     return uses_deducible_template_parms (TREE_TYPE (type));
20636 
20637   /* T[integer-constant ]
20638      type [i]  */
20639   if (TREE_CODE (type) == ARRAY_TYPE)
20640     return (uses_deducible_template_parms (TREE_TYPE (type))
20641 	    || deducible_array_bound (TYPE_DOMAIN (type)));
20642 
20643   /* T type ::*
20644      type T::*
20645      T T::*
20646      T (type ::*)()
20647      type (T::*)()
20648      type (type ::*)(T)
20649      type (T::*)(T)
20650      T (type ::*)(T)
20651      T (T::*)()
20652      T (T::*)(T) */
20653   if (TYPE_PTRMEM_P (type))
20654     return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
20655 	    || (uses_deducible_template_parms
20656 		(TYPE_PTRMEM_POINTED_TO_TYPE (type))));
20657 
20658   /* template-name <T> (where template-name refers to a class template)
20659      template-name <i> (where template-name refers to a class template) */
20660   if (CLASS_TYPE_P (type)
20661       && CLASSTYPE_TEMPLATE_INFO (type)
20662       && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
20663     return deducible_template_args (INNERMOST_TEMPLATE_ARGS
20664 				    (CLASSTYPE_TI_ARGS (type)));
20665 
20666   /* type (T)
20667      T()
20668      T(T)  */
20669   if (TREE_CODE (type) == FUNCTION_TYPE
20670       || TREE_CODE (type) == METHOD_TYPE)
20671     {
20672       if (uses_deducible_template_parms (TREE_TYPE (type)))
20673 	return true;
20674       tree parm = TYPE_ARG_TYPES (type);
20675       if (TREE_CODE (type) == METHOD_TYPE)
20676 	parm = TREE_CHAIN (parm);
20677       for (; parm; parm = TREE_CHAIN (parm))
20678 	if (uses_deducible_template_parms (TREE_VALUE (parm)))
20679 	  return true;
20680     }
20681 
20682   return false;
20683 }
20684 
20685 /* Subroutine of type_unification_real and unify_pack_expansion to
20686    handle unification of a single P/A pair.  Parameters are as
20687    for those functions.  */
20688 
20689 static int
unify_one_argument(tree tparms,tree targs,tree parm,tree arg,int subr,unification_kind_t strict,bool explain_p)20690 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
20691 		    int subr, unification_kind_t strict,
20692 		    bool explain_p)
20693 {
20694   tree arg_expr = NULL_TREE;
20695   int arg_strict;
20696 
20697   if (arg == error_mark_node || parm == error_mark_node)
20698     return unify_invalid (explain_p);
20699   if (arg == unknown_type_node)
20700     /* We can't deduce anything from this, but we might get all the
20701        template args from other function args.  */
20702     return unify_success (explain_p);
20703 
20704   /* Implicit conversions (Clause 4) will be performed on a function
20705      argument to convert it to the type of the corresponding function
20706      parameter if the parameter type contains no template-parameters that
20707      participate in template argument deduction.  */
20708   if (strict != DEDUCE_EXACT
20709       && TYPE_P (parm) && !uses_deducible_template_parms (parm))
20710     /* For function parameters with no deducible template parameters,
20711        just return.  We'll check non-dependent conversions later.  */
20712     return unify_success (explain_p);
20713 
20714   switch (strict)
20715     {
20716     case DEDUCE_CALL:
20717       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
20718 		    | UNIFY_ALLOW_MORE_CV_QUAL
20719 		    | UNIFY_ALLOW_DERIVED);
20720       break;
20721 
20722     case DEDUCE_CONV:
20723       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
20724       break;
20725 
20726     case DEDUCE_EXACT:
20727       arg_strict = UNIFY_ALLOW_NONE;
20728       break;
20729 
20730     default:
20731       gcc_unreachable ();
20732     }
20733 
20734   /* We only do these transformations if this is the top-level
20735      parameter_type_list in a call or declaration matching; in other
20736      situations (nested function declarators, template argument lists) we
20737      won't be comparing a type to an expression, and we don't do any type
20738      adjustments.  */
20739   if (!subr)
20740     {
20741       if (!TYPE_P (arg))
20742 	{
20743 	  gcc_assert (TREE_TYPE (arg) != NULL_TREE);
20744 	  if (type_unknown_p (arg))
20745 	    {
20746 	      /* [temp.deduct.type] A template-argument can be
20747 		 deduced from a pointer to function or pointer
20748 		 to member function argument if the set of
20749 		 overloaded functions does not contain function
20750 		 templates and at most one of a set of
20751 		 overloaded functions provides a unique
20752 		 match.  */
20753 	      resolve_overloaded_unification (tparms, targs, parm,
20754 					      arg, strict,
20755 					      arg_strict, explain_p);
20756 	      /* If a unique match was not found, this is a
20757 	         non-deduced context, so we still succeed. */
20758 	      return unify_success (explain_p);
20759 	    }
20760 
20761 	  arg_expr = arg;
20762 	  arg = unlowered_expr_type (arg);
20763 	  if (arg == error_mark_node)
20764 	    return unify_invalid (explain_p);
20765 	}
20766 
20767       arg_strict |=
20768 	maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
20769     }
20770   else
20771     if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
20772 	!= (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
20773       return unify_template_argument_mismatch (explain_p, parm, arg);
20774 
20775   /* For deduction from an init-list we need the actual list.  */
20776   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
20777     arg = arg_expr;
20778   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
20779 }
20780 
20781 /* for_each_template_parm callback that always returns 0.  */
20782 
20783 static int
zero_r(tree,void *)20784 zero_r (tree, void *)
20785 {
20786   return 0;
20787 }
20788 
20789 /* for_each_template_parm any_fn callback to handle deduction of a template
20790    type argument from the type of an array bound.  */
20791 
20792 static int
array_deduction_r(tree t,void * data)20793 array_deduction_r (tree t, void *data)
20794 {
20795   tree_pair_p d = (tree_pair_p)data;
20796   tree &tparms = d->purpose;
20797   tree &targs = d->value;
20798 
20799   if (TREE_CODE (t) == ARRAY_TYPE)
20800     if (tree dom = TYPE_DOMAIN (t))
20801       if (tree max = TYPE_MAX_VALUE (dom))
20802 	{
20803 	  if (TREE_CODE (max) == MINUS_EXPR)
20804 	    max = TREE_OPERAND (max, 0);
20805 	  if (TREE_CODE (max) == TEMPLATE_PARM_INDEX)
20806 	    unify (tparms, targs, TREE_TYPE (max), size_type_node,
20807 		   UNIFY_ALLOW_NONE, /*explain*/false);
20808 	}
20809 
20810   /* Keep walking.  */
20811   return 0;
20812 }
20813 
20814 /* Try to deduce any not-yet-deduced template type arguments from the type of
20815    an array bound.  This is handled separately from unify because 14.8.2.5 says
20816    "The type of a type parameter is only deduced from an array bound if it is
20817    not otherwise deduced."  */
20818 
20819 static void
try_array_deduction(tree tparms,tree targs,tree parm)20820 try_array_deduction (tree tparms, tree targs, tree parm)
20821 {
20822   tree_pair_s data = { tparms, targs };
20823   hash_set<tree> visited;
20824   for_each_template_parm (parm, zero_r, &data, &visited,
20825 			  /*nondeduced*/false, array_deduction_r);
20826 }
20827 
20828 /* Most parms like fn_type_unification.
20829 
20830    If SUBR is 1, we're being called recursively (to unify the
20831    arguments of a function or method parameter of a function
20832    template).
20833 
20834    CHECKS is a pointer to a vector of access checks encountered while
20835    substituting default template arguments.  */
20836 
20837 static int
type_unification_real(tree tparms,tree full_targs,tree xparms,const tree * xargs,unsigned int xnargs,int subr,unification_kind_t strict,vec<deferred_access_check,va_gc> ** checks,bool explain_p)20838 type_unification_real (tree tparms,
20839 		       tree full_targs,
20840 		       tree xparms,
20841 		       const tree *xargs,
20842 		       unsigned int xnargs,
20843 		       int subr,
20844 		       unification_kind_t strict,
20845 		       vec<deferred_access_check, va_gc> **checks,
20846 		       bool explain_p)
20847 {
20848   tree parm, arg;
20849   int i;
20850   int ntparms = TREE_VEC_LENGTH (tparms);
20851   int saw_undeduced = 0;
20852   tree parms;
20853   const tree *args;
20854   unsigned int nargs;
20855   unsigned int ia;
20856 
20857   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
20858   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
20859   gcc_assert (ntparms > 0);
20860 
20861   tree targs = INNERMOST_TEMPLATE_ARGS (full_targs);
20862 
20863   /* Reset the number of non-defaulted template arguments contained
20864      in TARGS.  */
20865   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
20866 
20867  again:
20868   parms = xparms;
20869   args = xargs;
20870   nargs = xnargs;
20871 
20872   ia = 0;
20873   while (parms && parms != void_list_node
20874 	 && ia < nargs)
20875     {
20876       parm = TREE_VALUE (parms);
20877 
20878       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
20879 	  && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
20880 	/* For a function parameter pack that occurs at the end of the
20881 	   parameter-declaration-list, the type A of each remaining
20882 	   argument of the call is compared with the type P of the
20883 	   declarator-id of the function parameter pack.  */
20884 	break;
20885 
20886       parms = TREE_CHAIN (parms);
20887 
20888       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
20889 	/* For a function parameter pack that does not occur at the
20890 	   end of the parameter-declaration-list, the type of the
20891 	   parameter pack is a non-deduced context.  */
20892 	continue;
20893 
20894       arg = args[ia];
20895       ++ia;
20896 
20897       if (unify_one_argument (tparms, full_targs, parm, arg, subr, strict,
20898 			      explain_p))
20899 	return 1;
20900     }
20901 
20902   if (parms
20903       && parms != void_list_node
20904       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
20905     {
20906       /* Unify the remaining arguments with the pack expansion type.  */
20907       tree argvec;
20908       tree parmvec = make_tree_vec (1);
20909 
20910       /* Allocate a TREE_VEC and copy in all of the arguments */
20911       argvec = make_tree_vec (nargs - ia);
20912       for (i = 0; ia < nargs; ++ia, ++i)
20913 	TREE_VEC_ELT (argvec, i) = args[ia];
20914 
20915       /* Copy the parameter into parmvec.  */
20916       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
20917       if (unify_pack_expansion (tparms, full_targs, parmvec, argvec, strict,
20918                                 /*subr=*/subr, explain_p))
20919         return 1;
20920 
20921       /* Advance to the end of the list of parameters.  */
20922       parms = TREE_CHAIN (parms);
20923     }
20924 
20925   /* Fail if we've reached the end of the parm list, and more args
20926      are present, and the parm list isn't variadic.  */
20927   if (ia < nargs && parms == void_list_node)
20928     return unify_too_many_arguments (explain_p, nargs, ia);
20929   /* Fail if parms are left and they don't have default values and
20930      they aren't all deduced as empty packs (c++/57397).  This is
20931      consistent with sufficient_parms_p.  */
20932   if (parms && parms != void_list_node
20933       && TREE_PURPOSE (parms) == NULL_TREE)
20934     {
20935       unsigned int count = nargs;
20936       tree p = parms;
20937       bool type_pack_p;
20938       do
20939 	{
20940 	  type_pack_p = TREE_CODE (TREE_VALUE (p)) == TYPE_PACK_EXPANSION;
20941 	  if (!type_pack_p)
20942 	    count++;
20943 	  p = TREE_CHAIN (p);
20944 	}
20945       while (p && p != void_list_node);
20946       if (count != nargs)
20947 	return unify_too_few_arguments (explain_p, ia, count,
20948 					type_pack_p);
20949     }
20950 
20951   if (!subr)
20952     {
20953       tsubst_flags_t complain = (explain_p
20954 				 ? tf_warning_or_error
20955 				 : tf_none);
20956       bool tried_array_deduction = (cxx_dialect < cxx17);
20957 
20958       for (i = 0; i < ntparms; i++)
20959 	{
20960 	  tree targ = TREE_VEC_ELT (targs, i);
20961 	  tree tparm = TREE_VEC_ELT (tparms, i);
20962 
20963 	  /* Clear the "incomplete" flags on all argument packs now so that
20964 	     substituting them into later default arguments works.  */
20965 	  if (targ && ARGUMENT_PACK_P (targ))
20966             {
20967               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
20968               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
20969             }
20970 
20971 	  if (targ || tparm == error_mark_node)
20972 	    continue;
20973 	  tparm = TREE_VALUE (tparm);
20974 
20975 	  if (TREE_CODE (tparm) == TYPE_DECL
20976 	      && !tried_array_deduction)
20977 	    {
20978 	      try_array_deduction (tparms, targs, xparms);
20979 	      tried_array_deduction = true;
20980 	      if (TREE_VEC_ELT (targs, i))
20981 		continue;
20982 	    }
20983 
20984 	  /* If this is an undeduced nontype parameter that depends on
20985 	     a type parameter, try another pass; its type may have been
20986 	     deduced from a later argument than the one from which
20987 	     this parameter can be deduced.  */
20988 	  if (TREE_CODE (tparm) == PARM_DECL
20989 	      && uses_template_parms (TREE_TYPE (tparm))
20990 	      && saw_undeduced < 2)
20991 	    {
20992 	      saw_undeduced = 1;
20993 	      continue;
20994 	    }
20995 
20996 	  /* Core issue #226 (C++0x) [temp.deduct]:
20997 
20998 	     If a template argument has not been deduced, its
20999 	     default template argument, if any, is used.
21000 
21001 	     When we are in C++98 mode, TREE_PURPOSE will either
21002 	     be NULL_TREE or ERROR_MARK_NODE, so we do not need
21003 	     to explicitly check cxx_dialect here.  */
21004 	  if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
21005 	    /* OK, there is a default argument.  Wait until after the
21006 	       conversion check to do substitution.  */
21007 	    continue;
21008 
21009 	  /* If the type parameter is a parameter pack, then it will
21010 	     be deduced to an empty parameter pack.  */
21011 	  if (template_parameter_pack_p (tparm))
21012 	    {
21013 	      tree arg;
21014 
21015 	      if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
21016 		{
21017 		  arg = make_node (NONTYPE_ARGUMENT_PACK);
21018 		  TREE_CONSTANT (arg) = 1;
21019 		}
21020 	      else
21021 		arg = cxx_make_type (TYPE_ARGUMENT_PACK);
21022 
21023 	      SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
21024 
21025 	      TREE_VEC_ELT (targs, i) = arg;
21026 	      continue;
21027 	    }
21028 
21029 	  return unify_parameter_deduction_failure (explain_p, tparm);
21030 	}
21031 
21032       /* Now substitute into the default template arguments.  */
21033       for (i = 0; i < ntparms; i++)
21034 	{
21035 	  tree targ = TREE_VEC_ELT (targs, i);
21036 	  tree tparm = TREE_VEC_ELT (tparms, i);
21037 
21038 	  if (targ || tparm == error_mark_node)
21039 	    continue;
21040 	  tree parm = TREE_VALUE (tparm);
21041 	  tree arg = TREE_PURPOSE (tparm);
21042 	  reopen_deferring_access_checks (*checks);
21043 	  location_t save_loc = input_location;
21044 	  if (DECL_P (parm))
21045 	    input_location = DECL_SOURCE_LOCATION (parm);
21046 
21047 	  if (saw_undeduced == 1
21048 	      && TREE_CODE (parm) == PARM_DECL
21049 	      && uses_template_parms (TREE_TYPE (parm)))
21050 	    {
21051 	      /* The type of this non-type parameter depends on undeduced
21052 		 parameters.  Don't try to use its default argument yet,
21053 		 since we might deduce an argument for it on the next pass,
21054 		 but do check whether the arguments we already have cause
21055 		 substitution failure, so that that happens before we try
21056 		 later default arguments (78489).  */
21057 	      ++processing_template_decl;
21058 	      tree type = tsubst (TREE_TYPE (parm), full_targs, complain,
21059 				  NULL_TREE);
21060 	      --processing_template_decl;
21061 	      if (type == error_mark_node)
21062 		arg = error_mark_node;
21063 	      else
21064 		arg = NULL_TREE;
21065 	    }
21066 	  else
21067 	    {
21068 	      /* Even if the call is happening in template context, getting
21069 		 here means it's non-dependent, and a default argument is
21070 		 considered a separate definition under [temp.decls], so we can
21071 		 do this substitution without processing_template_decl.  This
21072 		 is important if the default argument contains something that
21073 		 might be instantiation-dependent like access (87480).  */
21074 	      processing_template_decl_sentinel s;
21075 	      tree substed = NULL_TREE;
21076 	      if (saw_undeduced == 1)
21077 		{
21078 		  /* First instatiate in template context, in case we still
21079 		     depend on undeduced template parameters.  */
21080 		  ++processing_template_decl;
21081 		  substed = tsubst_template_arg (arg, full_targs, complain,
21082 						 NULL_TREE);
21083 		  --processing_template_decl;
21084 		  if (substed != error_mark_node
21085 		      && !uses_template_parms (substed))
21086 		    /* We replaced all the tparms, substitute again out of
21087 		       template context.  */
21088 		    substed = NULL_TREE;
21089 		}
21090 	      if (!substed)
21091 		substed = tsubst_template_arg (arg, full_targs, complain,
21092 					       NULL_TREE);
21093 
21094 	      if (!uses_template_parms (substed))
21095 		arg = convert_template_argument (parm, substed, full_targs,
21096 						 complain, i, NULL_TREE);
21097 	      else if (saw_undeduced == 1)
21098 		arg = NULL_TREE;
21099 	      else
21100 		arg = error_mark_node;
21101 	    }
21102 
21103 	  input_location = save_loc;
21104 	  *checks = get_deferred_access_checks ();
21105 	  pop_deferring_access_checks ();
21106 
21107 	  if (arg == error_mark_node)
21108 	    return 1;
21109 	  else if (arg)
21110 	    {
21111 	      TREE_VEC_ELT (targs, i) = arg;
21112 	      /* The position of the first default template argument,
21113 		 is also the number of non-defaulted arguments in TARGS.
21114 		 Record that.  */
21115 	      if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
21116 		SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
21117 	    }
21118 	}
21119 
21120       if (saw_undeduced++ == 1)
21121 	goto again;
21122     }
21123 
21124   if (CHECKING_P && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
21125     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
21126 
21127   return unify_success (explain_p);
21128 }
21129 
21130 /* Subroutine of type_unification_real.  Args are like the variables
21131    at the call site.  ARG is an overloaded function (or template-id);
21132    we try deducing template args from each of the overloads, and if
21133    only one succeeds, we go with that.  Modifies TARGS and returns
21134    true on success.  */
21135 
21136 static bool
resolve_overloaded_unification(tree tparms,tree targs,tree parm,tree arg,unification_kind_t strict,int sub_strict,bool explain_p)21137 resolve_overloaded_unification (tree tparms,
21138 				tree targs,
21139 				tree parm,
21140 				tree arg,
21141 				unification_kind_t strict,
21142 				int sub_strict,
21143 			        bool explain_p)
21144 {
21145   tree tempargs = copy_node (targs);
21146   int good = 0;
21147   tree goodfn = NULL_TREE;
21148   bool addr_p;
21149 
21150   if (TREE_CODE (arg) == ADDR_EXPR)
21151     {
21152       arg = TREE_OPERAND (arg, 0);
21153       addr_p = true;
21154     }
21155   else
21156     addr_p = false;
21157 
21158   if (TREE_CODE (arg) == COMPONENT_REF)
21159     /* Handle `&x' where `x' is some static or non-static member
21160        function name.  */
21161     arg = TREE_OPERAND (arg, 1);
21162 
21163   if (TREE_CODE (arg) == OFFSET_REF)
21164     arg = TREE_OPERAND (arg, 1);
21165 
21166   /* Strip baselink information.  */
21167   if (BASELINK_P (arg))
21168     arg = BASELINK_FUNCTIONS (arg);
21169 
21170   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
21171     {
21172       /* If we got some explicit template args, we need to plug them into
21173 	 the affected templates before we try to unify, in case the
21174 	 explicit args will completely resolve the templates in question.  */
21175 
21176       int ok = 0;
21177       tree expl_subargs = TREE_OPERAND (arg, 1);
21178       arg = TREE_OPERAND (arg, 0);
21179 
21180       for (lkp_iterator iter (arg); iter; ++iter)
21181 	{
21182 	  tree fn = *iter;
21183 	  tree subargs, elem;
21184 
21185 	  if (TREE_CODE (fn) != TEMPLATE_DECL)
21186 	    continue;
21187 
21188 	  subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
21189 					   expl_subargs, NULL_TREE, tf_none,
21190 					   /*require_all_args=*/true,
21191 					   /*use_default_args=*/true);
21192 	  if (subargs != error_mark_node
21193 	      && !any_dependent_template_arguments_p (subargs))
21194 	    {
21195 	      elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
21196 	      if (try_one_overload (tparms, targs, tempargs, parm,
21197 				    elem, strict, sub_strict, addr_p, explain_p)
21198 		  && (!goodfn || !same_type_p (goodfn, elem)))
21199 		{
21200 		  goodfn = elem;
21201 		  ++good;
21202 		}
21203 	    }
21204 	  else if (subargs)
21205 	    ++ok;
21206 	}
21207       /* If no templates (or more than one) are fully resolved by the
21208 	 explicit arguments, this template-id is a non-deduced context; it
21209 	 could still be OK if we deduce all template arguments for the
21210 	 enclosing call through other arguments.  */
21211       if (good != 1)
21212 	good = ok;
21213     }
21214   else if (TREE_CODE (arg) != OVERLOAD
21215 	   && TREE_CODE (arg) != FUNCTION_DECL)
21216     /* If ARG is, for example, "(0, &f)" then its type will be unknown
21217        -- but the deduction does not succeed because the expression is
21218        not just the function on its own.  */
21219     return false;
21220   else
21221     for (lkp_iterator iter (arg); iter; ++iter)
21222       {
21223 	tree fn = *iter;
21224 	if (try_one_overload (tparms, targs, tempargs, parm, TREE_TYPE (fn),
21225 			      strict, sub_strict, addr_p, explain_p)
21226 	    && (!goodfn || !decls_match (goodfn, fn)))
21227 	  {
21228 	    goodfn = fn;
21229 	    ++good;
21230 	  }
21231       }
21232 
21233   /* [temp.deduct.type] A template-argument can be deduced from a pointer
21234      to function or pointer to member function argument if the set of
21235      overloaded functions does not contain function templates and at most
21236      one of a set of overloaded functions provides a unique match.
21237 
21238      So if we found multiple possibilities, we return success but don't
21239      deduce anything.  */
21240 
21241   if (good == 1)
21242     {
21243       int i = TREE_VEC_LENGTH (targs);
21244       for (; i--; )
21245 	if (TREE_VEC_ELT (tempargs, i))
21246 	  {
21247 	    tree old = TREE_VEC_ELT (targs, i);
21248 	    tree new_ = TREE_VEC_ELT (tempargs, i);
21249 	    if (new_ && old && ARGUMENT_PACK_P (old)
21250 		&& ARGUMENT_PACK_EXPLICIT_ARGS (old))
21251 	      /* Don't forget explicit template arguments in a pack.  */
21252 	      ARGUMENT_PACK_EXPLICIT_ARGS (new_)
21253 		= ARGUMENT_PACK_EXPLICIT_ARGS (old);
21254 	    TREE_VEC_ELT (targs, i) = new_;
21255 	  }
21256     }
21257   if (good)
21258     return true;
21259 
21260   return false;
21261 }
21262 
21263 /* Core DR 115: In contexts where deduction is done and fails, or in
21264    contexts where deduction is not done, if a template argument list is
21265    specified and it, along with any default template arguments, identifies
21266    a single function template specialization, then the template-id is an
21267    lvalue for the function template specialization.  */
21268 
21269 tree
resolve_nondeduced_context(tree orig_expr,tsubst_flags_t complain)21270 resolve_nondeduced_context (tree orig_expr, tsubst_flags_t complain)
21271 {
21272   tree expr, offset, baselink;
21273   bool addr;
21274 
21275   if (!type_unknown_p (orig_expr))
21276     return orig_expr;
21277 
21278   expr = orig_expr;
21279   addr = false;
21280   offset = NULL_TREE;
21281   baselink = NULL_TREE;
21282 
21283   if (TREE_CODE (expr) == ADDR_EXPR)
21284     {
21285       expr = TREE_OPERAND (expr, 0);
21286       addr = true;
21287     }
21288   if (TREE_CODE (expr) == OFFSET_REF)
21289     {
21290       offset = expr;
21291       expr = TREE_OPERAND (expr, 1);
21292     }
21293   if (BASELINK_P (expr))
21294     {
21295       baselink = expr;
21296       expr = BASELINK_FUNCTIONS (expr);
21297     }
21298 
21299   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
21300     {
21301       int good = 0;
21302       tree goodfn = NULL_TREE;
21303 
21304       /* If we got some explicit template args, we need to plug them into
21305 	 the affected templates before we try to unify, in case the
21306 	 explicit args will completely resolve the templates in question.  */
21307 
21308       tree expl_subargs = TREE_OPERAND (expr, 1);
21309       tree arg = TREE_OPERAND (expr, 0);
21310       tree badfn = NULL_TREE;
21311       tree badargs = NULL_TREE;
21312 
21313       for (lkp_iterator iter (arg); iter; ++iter)
21314 	{
21315 	  tree fn = *iter;
21316 	  tree subargs, elem;
21317 
21318 	  if (TREE_CODE (fn) != TEMPLATE_DECL)
21319 	    continue;
21320 
21321 	  subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
21322 					   expl_subargs, NULL_TREE, tf_none,
21323 					   /*require_all_args=*/true,
21324 					   /*use_default_args=*/true);
21325 	  if (subargs != error_mark_node
21326 	      && !any_dependent_template_arguments_p (subargs))
21327 	    {
21328 	      elem = instantiate_template (fn, subargs, tf_none);
21329 	      if (elem == error_mark_node)
21330 		{
21331 		  badfn = fn;
21332 		  badargs = subargs;
21333 		}
21334 	      else if (elem && (!goodfn || !decls_match (goodfn, elem)))
21335 		{
21336 		  goodfn = elem;
21337 		  ++good;
21338 		}
21339 	    }
21340 	}
21341       if (good == 1)
21342 	{
21343 	  mark_used (goodfn);
21344 	  expr = goodfn;
21345 	  if (baselink)
21346 	    expr = build_baselink (BASELINK_BINFO (baselink),
21347 				   BASELINK_ACCESS_BINFO (baselink),
21348 				   expr, BASELINK_OPTYPE (baselink));
21349 	  if (offset)
21350 	    {
21351 	      tree base
21352 		= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
21353 	      expr = build_offset_ref (base, expr, addr, complain);
21354 	    }
21355 	  if (addr)
21356 	    expr = cp_build_addr_expr (expr, complain);
21357 	  return expr;
21358 	}
21359       else if (good == 0 && badargs && (complain & tf_error))
21360 	/* There were no good options and at least one bad one, so let the
21361 	   user know what the problem is.  */
21362 	instantiate_template (badfn, badargs, complain);
21363     }
21364   return orig_expr;
21365 }
21366 
21367 /* As above, but error out if the expression remains overloaded.  */
21368 
21369 tree
resolve_nondeduced_context_or_error(tree exp,tsubst_flags_t complain)21370 resolve_nondeduced_context_or_error (tree exp, tsubst_flags_t complain)
21371 {
21372   exp = resolve_nondeduced_context (exp, complain);
21373   if (type_unknown_p (exp))
21374     {
21375       if (complain & tf_error)
21376 	cxx_incomplete_type_error (exp, TREE_TYPE (exp));
21377       return error_mark_node;
21378     }
21379   return exp;
21380 }
21381 
21382 /* Subroutine of resolve_overloaded_unification; does deduction for a single
21383    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
21384    different overloads deduce different arguments for a given parm.
21385    ADDR_P is true if the expression for which deduction is being
21386    performed was of the form "& fn" rather than simply "fn".
21387 
21388    Returns 1 on success.  */
21389 
21390 static int
try_one_overload(tree tparms,tree orig_targs,tree targs,tree parm,tree arg,unification_kind_t strict,int sub_strict,bool addr_p,bool explain_p)21391 try_one_overload (tree tparms,
21392 		  tree orig_targs,
21393 		  tree targs,
21394 		  tree parm,
21395 		  tree arg,
21396 		  unification_kind_t strict,
21397 		  int sub_strict,
21398 		  bool addr_p,
21399 		  bool explain_p)
21400 {
21401   int nargs;
21402   tree tempargs;
21403   int i;
21404 
21405   if (arg == error_mark_node)
21406     return 0;
21407 
21408   /* [temp.deduct.type] A template-argument can be deduced from a pointer
21409      to function or pointer to member function argument if the set of
21410      overloaded functions does not contain function templates and at most
21411      one of a set of overloaded functions provides a unique match.
21412 
21413      So if this is a template, just return success.  */
21414 
21415   if (uses_template_parms (arg))
21416     return 1;
21417 
21418   if (TREE_CODE (arg) == METHOD_TYPE)
21419     arg = build_ptrmemfunc_type (build_pointer_type (arg));
21420   else if (addr_p)
21421     arg = build_pointer_type (arg);
21422 
21423   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
21424 
21425   /* We don't copy orig_targs for this because if we have already deduced
21426      some template args from previous args, unify would complain when we
21427      try to deduce a template parameter for the same argument, even though
21428      there isn't really a conflict.  */
21429   nargs = TREE_VEC_LENGTH (targs);
21430   tempargs = make_tree_vec (nargs);
21431 
21432   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
21433     return 0;
21434 
21435   /* First make sure we didn't deduce anything that conflicts with
21436      explicitly specified args.  */
21437   for (i = nargs; i--; )
21438     {
21439       tree elt = TREE_VEC_ELT (tempargs, i);
21440       tree oldelt = TREE_VEC_ELT (orig_targs, i);
21441 
21442       if (!elt)
21443 	/*NOP*/;
21444       else if (uses_template_parms (elt))
21445 	/* Since we're unifying against ourselves, we will fill in
21446 	   template args used in the function parm list with our own
21447 	   template parms.  Discard them.  */
21448 	TREE_VEC_ELT (tempargs, i) = NULL_TREE;
21449       else if (oldelt && ARGUMENT_PACK_P (oldelt))
21450 	{
21451 	  /* Check that the argument at each index of the deduced argument pack
21452 	     is equivalent to the corresponding explicitly specified argument.
21453 	     We may have deduced more arguments than were explicitly specified,
21454 	     and that's OK.  */
21455 
21456 	  /* We used to assert ARGUMENT_PACK_INCOMPLETE_P (oldelt) here, but
21457 	     that's wrong if we deduce the same argument pack from multiple
21458 	     function arguments: it's only incomplete the first time.  */
21459 
21460 	  tree explicit_pack = ARGUMENT_PACK_ARGS (oldelt);
21461 	  tree deduced_pack = ARGUMENT_PACK_ARGS (elt);
21462 
21463 	  if (TREE_VEC_LENGTH (deduced_pack)
21464 	      < TREE_VEC_LENGTH (explicit_pack))
21465 	    return 0;
21466 
21467 	  for (int j = 0; j < TREE_VEC_LENGTH (explicit_pack); j++)
21468 	    if (!template_args_equal (TREE_VEC_ELT (explicit_pack, j),
21469 				      TREE_VEC_ELT (deduced_pack, j)))
21470 	      return 0;
21471 	}
21472       else if (oldelt && !template_args_equal (oldelt, elt))
21473 	return 0;
21474     }
21475 
21476   for (i = nargs; i--; )
21477     {
21478       tree elt = TREE_VEC_ELT (tempargs, i);
21479 
21480       if (elt)
21481 	TREE_VEC_ELT (targs, i) = elt;
21482     }
21483 
21484   return 1;
21485 }
21486 
21487 /* PARM is a template class (perhaps with unbound template
21488    parameters).  ARG is a fully instantiated type.  If ARG can be
21489    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
21490    TARGS are as for unify.  */
21491 
21492 static tree
try_class_unification(tree tparms,tree targs,tree parm,tree arg,bool explain_p)21493 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
21494 		       bool explain_p)
21495 {
21496   tree copy_of_targs;
21497 
21498   if (!CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
21499     return NULL_TREE;
21500   else if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
21501     /* Matches anything.  */;
21502   else if (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
21503 	   != most_general_template (CLASSTYPE_TI_TEMPLATE (parm)))
21504     return NULL_TREE;
21505 
21506   /* We need to make a new template argument vector for the call to
21507      unify.  If we used TARGS, we'd clutter it up with the result of
21508      the attempted unification, even if this class didn't work out.
21509      We also don't want to commit ourselves to all the unifications
21510      we've already done, since unification is supposed to be done on
21511      an argument-by-argument basis.  In other words, consider the
21512      following pathological case:
21513 
21514        template <int I, int J, int K>
21515        struct S {};
21516 
21517        template <int I, int J>
21518        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
21519 
21520        template <int I, int J, int K>
21521        void f(S<I, J, K>, S<I, I, I>);
21522 
21523        void g() {
21524 	 S<0, 0, 0> s0;
21525 	 S<0, 1, 2> s2;
21526 
21527 	 f(s0, s2);
21528        }
21529 
21530      Now, by the time we consider the unification involving `s2', we
21531      already know that we must have `f<0, 0, 0>'.  But, even though
21532      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
21533      because there are two ways to unify base classes of S<0, 1, 2>
21534      with S<I, I, I>.  If we kept the already deduced knowledge, we
21535      would reject the possibility I=1.  */
21536   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
21537 
21538   if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
21539     {
21540       if (unify_bound_ttp_args (tparms, copy_of_targs, parm, arg, explain_p))
21541 	return NULL_TREE;
21542       return arg;
21543     }
21544 
21545   /* If unification failed, we're done.  */
21546   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
21547 	     CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
21548     return NULL_TREE;
21549 
21550   return arg;
21551 }
21552 
21553 /* Given a template type PARM and a class type ARG, find the unique
21554    base type in ARG that is an instance of PARM.  We do not examine
21555    ARG itself; only its base-classes.  If there is not exactly one
21556    appropriate base class, return NULL_TREE.  PARM may be the type of
21557    a partial specialization, as well as a plain template type.  Used
21558    by unify.  */
21559 
21560 static enum template_base_result
get_template_base(tree tparms,tree targs,tree parm,tree arg,bool explain_p,tree * result)21561 get_template_base (tree tparms, tree targs, tree parm, tree arg,
21562 		   bool explain_p, tree *result)
21563 {
21564   tree rval = NULL_TREE;
21565   tree binfo;
21566 
21567   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
21568 
21569   binfo = TYPE_BINFO (complete_type (arg));
21570   if (!binfo)
21571     {
21572       /* The type could not be completed.  */
21573       *result = NULL_TREE;
21574       return tbr_incomplete_type;
21575     }
21576 
21577   /* Walk in inheritance graph order.  The search order is not
21578      important, and this avoids multiple walks of virtual bases.  */
21579   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
21580     {
21581       tree r = try_class_unification (tparms, targs, parm,
21582 				      BINFO_TYPE (binfo), explain_p);
21583 
21584       if (r)
21585 	{
21586 	  /* If there is more than one satisfactory baseclass, then:
21587 
21588 	       [temp.deduct.call]
21589 
21590 	      If they yield more than one possible deduced A, the type
21591 	      deduction fails.
21592 
21593 	     applies.  */
21594 	  if (rval && !same_type_p (r, rval))
21595 	    {
21596 	      *result = NULL_TREE;
21597 	      return tbr_ambiguous_baseclass;
21598 	    }
21599 
21600 	  rval = r;
21601 	}
21602     }
21603 
21604   *result = rval;
21605   return tbr_success;
21606 }
21607 
21608 /* Returns the level of DECL, which declares a template parameter.  */
21609 
21610 static int
template_decl_level(tree decl)21611 template_decl_level (tree decl)
21612 {
21613   switch (TREE_CODE (decl))
21614     {
21615     case TYPE_DECL:
21616     case TEMPLATE_DECL:
21617       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
21618 
21619     case PARM_DECL:
21620       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
21621 
21622     default:
21623       gcc_unreachable ();
21624     }
21625   return 0;
21626 }
21627 
21628 /* Decide whether ARG can be unified with PARM, considering only the
21629    cv-qualifiers of each type, given STRICT as documented for unify.
21630    Returns nonzero iff the unification is OK on that basis.  */
21631 
21632 static int
check_cv_quals_for_unify(int strict,tree arg,tree parm)21633 check_cv_quals_for_unify (int strict, tree arg, tree parm)
21634 {
21635   int arg_quals = cp_type_quals (arg);
21636   int parm_quals = cp_type_quals (parm);
21637 
21638   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
21639       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
21640     {
21641       /*  Although a CVR qualifier is ignored when being applied to a
21642 	  substituted template parameter ([8.3.2]/1 for example), that
21643 	  does not allow us to unify "const T" with "int&" because both
21644 	  types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
21645 	  It is ok when we're allowing additional CV qualifiers
21646 	  at the outer level [14.8.2.1]/3,1st bullet.  */
21647       if ((TYPE_REF_P (arg)
21648 	   || TREE_CODE (arg) == FUNCTION_TYPE
21649 	   || TREE_CODE (arg) == METHOD_TYPE)
21650 	  && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
21651 	return 0;
21652 
21653       if ((!INDIRECT_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
21654 	  && (parm_quals & TYPE_QUAL_RESTRICT))
21655 	return 0;
21656     }
21657 
21658   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
21659       && (arg_quals & parm_quals) != parm_quals)
21660     return 0;
21661 
21662   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
21663       && (parm_quals & arg_quals) != arg_quals)
21664     return 0;
21665 
21666   return 1;
21667 }
21668 
21669 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
21670 void
template_parm_level_and_index(tree parm,int * level,int * index)21671 template_parm_level_and_index (tree parm, int* level, int* index)
21672 {
21673   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
21674       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
21675       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
21676     {
21677       *index = TEMPLATE_TYPE_IDX (parm);
21678       *level = TEMPLATE_TYPE_LEVEL (parm);
21679     }
21680   else
21681     {
21682       *index = TEMPLATE_PARM_IDX (parm);
21683       *level = TEMPLATE_PARM_LEVEL (parm);
21684     }
21685 }
21686 
21687 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)			\
21688   do {									\
21689     if (unify (TP, TA, P, A, S, EP))					\
21690       return 1;								\
21691   } while (0)
21692 
21693 /* Unifies the remaining arguments in PACKED_ARGS with the pack
21694    expansion at the end of PACKED_PARMS. Returns 0 if the type
21695    deduction succeeds, 1 otherwise. STRICT is the same as in
21696    fn_type_unification. CALL_ARGS_P is true iff PACKED_ARGS is actually a
21697    function call argument list. We'll need to adjust the arguments to make them
21698    types. SUBR tells us if this is from a recursive call to
21699    type_unification_real, or for comparing two template argument
21700    lists. */
21701 
21702 static int
unify_pack_expansion(tree tparms,tree targs,tree packed_parms,tree packed_args,unification_kind_t strict,bool subr,bool explain_p)21703 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
21704                       tree packed_args, unification_kind_t strict,
21705                       bool subr, bool explain_p)
21706 {
21707   tree parm
21708     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
21709   tree pattern = PACK_EXPANSION_PATTERN (parm);
21710   tree pack, packs = NULL_TREE;
21711   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
21712 
21713   /* Add in any args remembered from an earlier partial instantiation.  */
21714   targs = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (parm), targs);
21715   int levels = TMPL_ARGS_DEPTH (targs);
21716 
21717   packed_args = expand_template_argument_pack (packed_args);
21718 
21719   int len = TREE_VEC_LENGTH (packed_args);
21720 
21721   /* Determine the parameter packs we will be deducing from the
21722      pattern, and record their current deductions.  */
21723   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
21724        pack; pack = TREE_CHAIN (pack))
21725     {
21726       tree parm_pack = TREE_VALUE (pack);
21727       int idx, level;
21728 
21729       /* Only template parameter packs can be deduced, not e.g. function
21730 	 parameter packs or __bases or __integer_pack.  */
21731       if (!TEMPLATE_PARM_P (parm_pack))
21732 	continue;
21733 
21734       /* Determine the index and level of this parameter pack.  */
21735       template_parm_level_and_index (parm_pack, &level, &idx);
21736       if (level < levels)
21737 	continue;
21738 
21739       /* Keep track of the parameter packs and their corresponding
21740          argument packs.  */
21741       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
21742       TREE_TYPE (packs) = make_tree_vec (len - start);
21743     }
21744 
21745   /* Loop through all of the arguments that have not yet been
21746      unified and unify each with the pattern.  */
21747   for (i = start; i < len; i++)
21748     {
21749       tree parm;
21750       bool any_explicit = false;
21751       tree arg = TREE_VEC_ELT (packed_args, i);
21752 
21753       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
21754 	 or the element of its argument pack at the current index if
21755 	 this argument was explicitly specified.  */
21756       for (pack = packs; pack; pack = TREE_CHAIN (pack))
21757         {
21758           int idx, level;
21759           tree arg, pargs;
21760           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
21761 
21762           arg = NULL_TREE;
21763           if (TREE_VALUE (pack)
21764               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
21765               && (i - start < TREE_VEC_LENGTH (pargs)))
21766             {
21767               any_explicit = true;
21768               arg = TREE_VEC_ELT (pargs, i - start);
21769             }
21770           TMPL_ARG (targs, level, idx) = arg;
21771         }
21772 
21773       /* If we had explicit template arguments, substitute them into the
21774 	 pattern before deduction.  */
21775       if (any_explicit)
21776 	{
21777 	  /* Some arguments might still be unspecified or dependent.  */
21778 	  bool dependent;
21779 	  ++processing_template_decl;
21780 	  dependent = any_dependent_template_arguments_p (targs);
21781 	  if (!dependent)
21782 	    --processing_template_decl;
21783 	  parm = tsubst (pattern, targs,
21784 			 explain_p ? tf_warning_or_error : tf_none,
21785 			 NULL_TREE);
21786 	  if (dependent)
21787 	    --processing_template_decl;
21788 	  if (parm == error_mark_node)
21789 	    return 1;
21790 	}
21791       else
21792 	parm = pattern;
21793 
21794       /* Unify the pattern with the current argument.  */
21795       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
21796 			      explain_p))
21797 	return 1;
21798 
21799       /* For each parameter pack, collect the deduced value.  */
21800       for (pack = packs; pack; pack = TREE_CHAIN (pack))
21801         {
21802           int idx, level;
21803           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
21804 
21805           TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
21806             TMPL_ARG (targs, level, idx);
21807         }
21808     }
21809 
21810   /* Verify that the results of unification with the parameter packs
21811      produce results consistent with what we've seen before, and make
21812      the deduced argument packs available.  */
21813   for (pack = packs; pack; pack = TREE_CHAIN (pack))
21814     {
21815       tree old_pack = TREE_VALUE (pack);
21816       tree new_args = TREE_TYPE (pack);
21817       int i, len = TREE_VEC_LENGTH (new_args);
21818       int idx, level;
21819       bool nondeduced_p = false;
21820 
21821       /* By default keep the original deduced argument pack.
21822 	 If necessary, more specific code is going to update the
21823 	 resulting deduced argument later down in this function.  */
21824       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
21825       TMPL_ARG (targs, level, idx) = old_pack;
21826 
21827       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
21828 	 actually deduce anything.  */
21829       for (i = 0; i < len && !nondeduced_p; ++i)
21830 	if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
21831 	  nondeduced_p = true;
21832       if (nondeduced_p)
21833 	continue;
21834 
21835       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
21836         {
21837           /* If we had fewer function args than explicit template args,
21838              just use the explicits.  */
21839           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
21840           int explicit_len = TREE_VEC_LENGTH (explicit_args);
21841           if (len < explicit_len)
21842             new_args = explicit_args;
21843         }
21844 
21845       if (!old_pack)
21846         {
21847           tree result;
21848           /* Build the deduced *_ARGUMENT_PACK.  */
21849           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
21850             {
21851               result = make_node (NONTYPE_ARGUMENT_PACK);
21852               TREE_CONSTANT (result) = 1;
21853             }
21854           else
21855             result = cxx_make_type (TYPE_ARGUMENT_PACK);
21856 
21857           SET_ARGUMENT_PACK_ARGS (result, new_args);
21858 
21859           /* Note the deduced argument packs for this parameter
21860              pack.  */
21861           TMPL_ARG (targs, level, idx) = result;
21862         }
21863       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
21864                && (ARGUMENT_PACK_ARGS (old_pack)
21865                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
21866         {
21867           /* We only had the explicitly-provided arguments before, but
21868              now we have a complete set of arguments.  */
21869           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
21870 
21871           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
21872           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
21873           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
21874         }
21875       else
21876 	{
21877 	  tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
21878 	  tree old_args = ARGUMENT_PACK_ARGS (old_pack);
21879 
21880 	  if (!comp_template_args (old_args, new_args,
21881 				   &bad_old_arg, &bad_new_arg))
21882 	    /* Inconsistent unification of this parameter pack.  */
21883 	    return unify_parameter_pack_inconsistent (explain_p,
21884 						      bad_old_arg,
21885 						      bad_new_arg);
21886 	}
21887     }
21888 
21889   return unify_success (explain_p);
21890 }
21891 
21892 /* Handle unification of the domain of an array.  PARM_DOM and ARG_DOM are
21893    INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs.  The other
21894    parameters and return value are as for unify.  */
21895 
21896 static int
unify_array_domain(tree tparms,tree targs,tree parm_dom,tree arg_dom,bool explain_p)21897 unify_array_domain (tree tparms, tree targs,
21898 		    tree parm_dom, tree arg_dom,
21899 		    bool explain_p)
21900 {
21901   tree parm_max;
21902   tree arg_max;
21903   bool parm_cst;
21904   bool arg_cst;
21905 
21906   /* Our representation of array types uses "N - 1" as the
21907      TYPE_MAX_VALUE for an array with "N" elements, if "N" is
21908      not an integer constant.  We cannot unify arbitrarily
21909      complex expressions, so we eliminate the MINUS_EXPRs
21910      here.  */
21911   parm_max = TYPE_MAX_VALUE (parm_dom);
21912   parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
21913   if (!parm_cst)
21914     {
21915       gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
21916       parm_max = TREE_OPERAND (parm_max, 0);
21917     }
21918   arg_max = TYPE_MAX_VALUE (arg_dom);
21919   arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
21920   if (!arg_cst)
21921     {
21922       /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
21923 	 trying to unify the type of a variable with the type
21924 	 of a template parameter.  For example:
21925 
21926 	   template <unsigned int N>
21927 	   void f (char (&) [N]);
21928 	   int g();
21929 	   void h(int i) {
21930 	     char a[g(i)];
21931 	     f(a);
21932 	   }
21933 
21934 	 Here, the type of the ARG will be "int [g(i)]", and
21935 	 may be a SAVE_EXPR, etc.  */
21936       if (TREE_CODE (arg_max) != MINUS_EXPR)
21937 	return unify_vla_arg (explain_p, arg_dom);
21938       arg_max = TREE_OPERAND (arg_max, 0);
21939     }
21940 
21941   /* If only one of the bounds used a MINUS_EXPR, compensate
21942      by adding one to the other bound.  */
21943   if (parm_cst && !arg_cst)
21944     parm_max = fold_build2_loc (input_location, PLUS_EXPR,
21945 				integer_type_node,
21946 				parm_max,
21947 				integer_one_node);
21948   else if (arg_cst && !parm_cst)
21949     arg_max = fold_build2_loc (input_location, PLUS_EXPR,
21950 			       integer_type_node,
21951 			       arg_max,
21952 			       integer_one_node);
21953 
21954   return unify (tparms, targs, parm_max, arg_max,
21955 		UNIFY_ALLOW_INTEGER, explain_p);
21956 }
21957 
21958 /* Returns whether T, a P or A in unify, is a type, template or expression.  */
21959 
21960 enum pa_kind_t { pa_type, pa_tmpl, pa_expr };
21961 
21962 static pa_kind_t
pa_kind(tree t)21963 pa_kind (tree t)
21964 {
21965   if (PACK_EXPANSION_P (t))
21966     t = PACK_EXPANSION_PATTERN (t);
21967   if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
21968       || TREE_CODE (t) == UNBOUND_CLASS_TEMPLATE
21969       || DECL_TYPE_TEMPLATE_P (t))
21970     return pa_tmpl;
21971   else if (TYPE_P (t))
21972     return pa_type;
21973   else
21974     return pa_expr;
21975 }
21976 
21977 /* Deduce the value of template parameters.  TPARMS is the (innermost)
21978    set of template parameters to a template.  TARGS is the bindings
21979    for those template parameters, as determined thus far; TARGS may
21980    include template arguments for outer levels of template parameters
21981    as well.  PARM is a parameter to a template function, or a
21982    subcomponent of that parameter; ARG is the corresponding argument.
21983    This function attempts to match PARM with ARG in a manner
21984    consistent with the existing assignments in TARGS.  If more values
21985    are deduced, then TARGS is updated.
21986 
21987    Returns 0 if the type deduction succeeds, 1 otherwise.  The
21988    parameter STRICT is a bitwise or of the following flags:
21989 
21990      UNIFY_ALLOW_NONE:
21991        Require an exact match between PARM and ARG.
21992      UNIFY_ALLOW_MORE_CV_QUAL:
21993        Allow the deduced ARG to be more cv-qualified (by qualification
21994        conversion) than ARG.
21995      UNIFY_ALLOW_LESS_CV_QUAL:
21996        Allow the deduced ARG to be less cv-qualified than ARG.
21997      UNIFY_ALLOW_DERIVED:
21998        Allow the deduced ARG to be a template base class of ARG,
21999        or a pointer to a template base class of the type pointed to by
22000        ARG.
22001      UNIFY_ALLOW_INTEGER:
22002        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
22003        case for more information.
22004      UNIFY_ALLOW_OUTER_LEVEL:
22005        This is the outermost level of a deduction. Used to determine validity
22006        of qualification conversions. A valid qualification conversion must
22007        have const qualified pointers leading up to the inner type which
22008        requires additional CV quals, except at the outer level, where const
22009        is not required [conv.qual]. It would be normal to set this flag in
22010        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
22011      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
22012        This is the outermost level of a deduction, and PARM can be more CV
22013        qualified at this point.
22014      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
22015        This is the outermost level of a deduction, and PARM can be less CV
22016        qualified at this point.  */
22017 
22018 static int
unify(tree tparms,tree targs,tree parm,tree arg,int strict,bool explain_p)22019 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
22020        bool explain_p)
22021 {
22022   int idx;
22023   tree targ;
22024   tree tparm;
22025   int strict_in = strict;
22026   tsubst_flags_t complain = (explain_p
22027 			     ? tf_warning_or_error
22028 			     : tf_none);
22029 
22030   /* I don't think this will do the right thing with respect to types.
22031      But the only case I've seen it in so far has been array bounds, where
22032      signedness is the only information lost, and I think that will be
22033      okay.  */
22034   while (CONVERT_EXPR_P (parm))
22035     parm = TREE_OPERAND (parm, 0);
22036 
22037   if (arg == error_mark_node)
22038     return unify_invalid (explain_p);
22039   if (arg == unknown_type_node
22040       || arg == init_list_type_node)
22041     /* We can't deduce anything from this, but we might get all the
22042        template args from other function args.  */
22043     return unify_success (explain_p);
22044 
22045   if (parm == any_targ_node || arg == any_targ_node)
22046     return unify_success (explain_p);
22047 
22048   /* If PARM uses template parameters, then we can't bail out here,
22049      even if ARG == PARM, since we won't record unifications for the
22050      template parameters.  We might need them if we're trying to
22051      figure out which of two things is more specialized.  */
22052   if (arg == parm && !uses_template_parms (parm))
22053     return unify_success (explain_p);
22054 
22055   /* Handle init lists early, so the rest of the function can assume
22056      we're dealing with a type. */
22057   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
22058     {
22059       tree elt, elttype;
22060       unsigned i;
22061       tree orig_parm = parm;
22062 
22063       /* Replace T with std::initializer_list<T> for deduction.  */
22064       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
22065 	  && flag_deduce_init_list)
22066 	parm = listify (parm);
22067 
22068       if (!is_std_init_list (parm)
22069 	  && TREE_CODE (parm) != ARRAY_TYPE)
22070 	/* We can only deduce from an initializer list argument if the
22071 	   parameter is std::initializer_list or an array; otherwise this
22072 	   is a non-deduced context. */
22073 	return unify_success (explain_p);
22074 
22075       if (TREE_CODE (parm) == ARRAY_TYPE)
22076 	elttype = TREE_TYPE (parm);
22077       else
22078 	{
22079 	  elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
22080 	  /* Deduction is defined in terms of a single type, so just punt
22081 	     on the (bizarre) std::initializer_list<T...>.  */
22082 	  if (PACK_EXPANSION_P (elttype))
22083 	    return unify_success (explain_p);
22084 	}
22085 
22086       if (strict != DEDUCE_EXACT
22087 	  && TYPE_P (elttype)
22088 	  && !uses_deducible_template_parms (elttype))
22089 	/* If ELTTYPE has no deducible template parms, skip deduction from
22090 	   the list elements.  */;
22091       else
22092 	FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
22093 	  {
22094 	    int elt_strict = strict;
22095 
22096 	    if (elt == error_mark_node)
22097 	      return unify_invalid (explain_p);
22098 
22099 	    if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
22100 	      {
22101 		tree type = TREE_TYPE (elt);
22102 		if (type == error_mark_node)
22103 		  return unify_invalid (explain_p);
22104 		/* It should only be possible to get here for a call.  */
22105 		gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
22106 		elt_strict |= maybe_adjust_types_for_deduction
22107 		  (DEDUCE_CALL, &elttype, &type, elt);
22108 		elt = type;
22109 	      }
22110 
22111 	  RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
22112 				   explain_p);
22113 	}
22114 
22115       if (TREE_CODE (parm) == ARRAY_TYPE
22116 	  && deducible_array_bound (TYPE_DOMAIN (parm)))
22117 	{
22118 	  /* Also deduce from the length of the initializer list.  */
22119 	  tree max = size_int (CONSTRUCTOR_NELTS (arg));
22120 	  tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
22121 	  if (idx == error_mark_node)
22122 	    return unify_invalid (explain_p);
22123 	  return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
22124 				     idx, explain_p);
22125 	}
22126 
22127       /* If the std::initializer_list<T> deduction worked, replace the
22128 	 deduced A with std::initializer_list<A>.  */
22129       if (orig_parm != parm)
22130 	{
22131 	  idx = TEMPLATE_TYPE_IDX (orig_parm);
22132 	  targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
22133 	  targ = listify (targ);
22134 	  TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
22135 	}
22136       return unify_success (explain_p);
22137     }
22138 
22139   /* If parm and arg aren't the same kind of thing (template, type, or
22140      expression), fail early.  */
22141   if (pa_kind (parm) != pa_kind (arg))
22142     return unify_invalid (explain_p);
22143 
22144   /* Immediately reject some pairs that won't unify because of
22145      cv-qualification mismatches.  */
22146   if (TREE_CODE (arg) == TREE_CODE (parm)
22147       && TYPE_P (arg)
22148       /* It is the elements of the array which hold the cv quals of an array
22149 	 type, and the elements might be template type parms. We'll check
22150 	 when we recurse.  */
22151       && TREE_CODE (arg) != ARRAY_TYPE
22152       /* We check the cv-qualifiers when unifying with template type
22153 	 parameters below.  We want to allow ARG `const T' to unify with
22154 	 PARM `T' for example, when computing which of two templates
22155 	 is more specialized, for example.  */
22156       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
22157       && !check_cv_quals_for_unify (strict_in, arg, parm))
22158     return unify_cv_qual_mismatch (explain_p, parm, arg);
22159 
22160   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
22161       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
22162     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
22163   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
22164   strict &= ~UNIFY_ALLOW_DERIVED;
22165   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
22166   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
22167 
22168   switch (TREE_CODE (parm))
22169     {
22170     case TYPENAME_TYPE:
22171     case SCOPE_REF:
22172     case UNBOUND_CLASS_TEMPLATE:
22173       /* In a type which contains a nested-name-specifier, template
22174 	 argument values cannot be deduced for template parameters used
22175 	 within the nested-name-specifier.  */
22176       return unify_success (explain_p);
22177 
22178     case TEMPLATE_TYPE_PARM:
22179     case TEMPLATE_TEMPLATE_PARM:
22180     case BOUND_TEMPLATE_TEMPLATE_PARM:
22181       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
22182       if (error_operand_p (tparm))
22183 	return unify_invalid (explain_p);
22184 
22185       if (TEMPLATE_TYPE_LEVEL (parm)
22186 	  != template_decl_level (tparm))
22187 	/* The PARM is not one we're trying to unify.  Just check
22188 	   to see if it matches ARG.  */
22189 	{
22190 	  if (TREE_CODE (arg) == TREE_CODE (parm)
22191 	      && (is_auto (parm) ? is_auto (arg)
22192 		  : same_type_p (parm, arg)))
22193 	    return unify_success (explain_p);
22194 	  else
22195 	    return unify_type_mismatch (explain_p, parm, arg);
22196 	}
22197       idx = TEMPLATE_TYPE_IDX (parm);
22198       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
22199       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
22200       if (error_operand_p (tparm))
22201 	return unify_invalid (explain_p);
22202 
22203       /* Check for mixed types and values.  */
22204       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
22205 	   && TREE_CODE (tparm) != TYPE_DECL)
22206 	  || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
22207 	      && TREE_CODE (tparm) != TEMPLATE_DECL))
22208 	gcc_unreachable ();
22209 
22210       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
22211 	{
22212 	  if ((strict_in & UNIFY_ALLOW_DERIVED)
22213 	      && CLASS_TYPE_P (arg))
22214 	    {
22215 	      /* First try to match ARG directly.  */
22216 	      tree t = try_class_unification (tparms, targs, parm, arg,
22217 					      explain_p);
22218 	      if (!t)
22219 		{
22220 		  /* Otherwise, look for a suitable base of ARG, as below.  */
22221 		  enum template_base_result r;
22222 		  r = get_template_base (tparms, targs, parm, arg,
22223 					 explain_p, &t);
22224 		  if (!t)
22225 		    return unify_no_common_base (explain_p, r, parm, arg);
22226 		  arg = t;
22227 		}
22228 	    }
22229 	  /* ARG must be constructed from a template class or a template
22230 	     template parameter.  */
22231 	  else if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
22232 		   && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
22233 	    return unify_template_deduction_failure (explain_p, parm, arg);
22234 
22235 	  /* Deduce arguments T, i from TT<T> or TT<i>.  */
22236 	  if (unify_bound_ttp_args (tparms, targs, parm, arg, explain_p))
22237 	    return 1;
22238 
22239 	  arg = TYPE_TI_TEMPLATE (arg);
22240 
22241 	  /* Fall through to deduce template name.  */
22242 	}
22243 
22244       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
22245 	  || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
22246 	{
22247 	  /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
22248 
22249 	  /* Simple cases: Value already set, does match or doesn't.  */
22250 	  if (targ != NULL_TREE && template_args_equal (targ, arg))
22251 	    return unify_success (explain_p);
22252 	  else if (targ)
22253 	    return unify_inconsistency (explain_p, parm, targ, arg);
22254 	}
22255       else
22256 	{
22257 	  /* If PARM is `const T' and ARG is only `int', we don't have
22258 	     a match unless we are allowing additional qualification.
22259 	     If ARG is `const int' and PARM is just `T' that's OK;
22260 	     that binds `const int' to `T'.  */
22261 	  if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
22262 					 arg, parm))
22263 	    return unify_cv_qual_mismatch (explain_p, parm, arg);
22264 
22265 	  /* Consider the case where ARG is `const volatile int' and
22266 	     PARM is `const T'.  Then, T should be `volatile int'.  */
22267 	  arg = cp_build_qualified_type_real
22268 	    (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
22269 	  if (arg == error_mark_node)
22270 	    return unify_invalid (explain_p);
22271 
22272 	  /* Simple cases: Value already set, does match or doesn't.  */
22273 	  if (targ != NULL_TREE && same_type_p (targ, arg))
22274 	    return unify_success (explain_p);
22275 	  else if (targ)
22276 	    return unify_inconsistency (explain_p, parm, targ, arg);
22277 
22278 	  /* Make sure that ARG is not a variable-sized array.  (Note
22279 	     that were talking about variable-sized arrays (like
22280 	     `int[n]'), rather than arrays of unknown size (like
22281 	     `int[]').)  We'll get very confused by such a type since
22282 	     the bound of the array is not constant, and therefore
22283 	     not mangleable.  Besides, such types are not allowed in
22284 	     ISO C++, so we can do as we please here.  We do allow
22285 	     them for 'auto' deduction, since that isn't ABI-exposed.  */
22286 	  if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
22287 	    return unify_vla_arg (explain_p, arg);
22288 
22289 	  /* Strip typedefs as in convert_template_argument.  */
22290 	  arg = canonicalize_type_argument (arg, tf_none);
22291 	}
22292 
22293       /* If ARG is a parameter pack or an expansion, we cannot unify
22294 	 against it unless PARM is also a parameter pack.  */
22295       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
22296 	  && !template_parameter_pack_p (parm))
22297 	return unify_parameter_pack_mismatch (explain_p, parm, arg);
22298 
22299       /* If the argument deduction results is a METHOD_TYPE,
22300          then there is a problem.
22301          METHOD_TYPE doesn't map to any real C++ type the result of
22302 	 the deduction cannot be of that type.  */
22303       if (TREE_CODE (arg) == METHOD_TYPE)
22304 	return unify_method_type_error (explain_p, arg);
22305 
22306       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
22307       return unify_success (explain_p);
22308 
22309     case TEMPLATE_PARM_INDEX:
22310       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
22311       if (error_operand_p (tparm))
22312 	return unify_invalid (explain_p);
22313 
22314       if (TEMPLATE_PARM_LEVEL (parm)
22315 	  != template_decl_level (tparm))
22316 	{
22317 	  /* The PARM is not one we're trying to unify.  Just check
22318 	     to see if it matches ARG.  */
22319 	  int result = !(TREE_CODE (arg) == TREE_CODE (parm)
22320 			 && cp_tree_equal (parm, arg));
22321 	  if (result)
22322 	    unify_expression_unequal (explain_p, parm, arg);
22323 	  return result;
22324 	}
22325 
22326       idx = TEMPLATE_PARM_IDX (parm);
22327       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
22328 
22329       if (targ)
22330 	{
22331 	  if ((strict & UNIFY_ALLOW_INTEGER)
22332 	      && TREE_TYPE (targ) && TREE_TYPE (arg)
22333 	      && CP_INTEGRAL_TYPE_P (TREE_TYPE (targ)))
22334 	    /* We're deducing from an array bound, the type doesn't matter.  */
22335 	    arg = fold_convert (TREE_TYPE (targ), arg);
22336 	  int x = !cp_tree_equal (targ, arg);
22337 	  if (x)
22338 	    unify_inconsistency (explain_p, parm, targ, arg);
22339 	  return x;
22340 	}
22341 
22342       /* [temp.deduct.type] If, in the declaration of a function template
22343 	 with a non-type template-parameter, the non-type
22344 	 template-parameter is used in an expression in the function
22345 	 parameter-list and, if the corresponding template-argument is
22346 	 deduced, the template-argument type shall match the type of the
22347 	 template-parameter exactly, except that a template-argument
22348 	 deduced from an array bound may be of any integral type.
22349 	 The non-type parameter might use already deduced type parameters.  */
22350       tparm = TREE_TYPE (parm);
22351       if (TEMPLATE_PARM_LEVEL (parm) > TMPL_ARGS_DEPTH (targs))
22352 	/* We don't have enough levels of args to do any substitution.  This
22353 	   can happen in the context of -fnew-ttp-matching.  */;
22354       else
22355 	{
22356 	  ++processing_template_decl;
22357 	  tparm = tsubst (tparm, targs, tf_none, NULL_TREE);
22358 	  --processing_template_decl;
22359 
22360 	  if (tree a = type_uses_auto (tparm))
22361 	    {
22362 	      tparm = do_auto_deduction (tparm, arg, a, complain, adc_unify);
22363 	      if (tparm == error_mark_node)
22364 		return 1;
22365 	    }
22366 	}
22367 
22368       if (!TREE_TYPE (arg))
22369 	/* Template-parameter dependent expression.  Just accept it for now.
22370 	   It will later be processed in convert_template_argument.  */
22371 	;
22372       else if (same_type_p (non_reference (TREE_TYPE (arg)),
22373 			    non_reference (tparm)))
22374 	/* OK */;
22375       else if ((strict & UNIFY_ALLOW_INTEGER)
22376 	       && CP_INTEGRAL_TYPE_P (tparm))
22377 	/* Convert the ARG to the type of PARM; the deduced non-type
22378 	   template argument must exactly match the types of the
22379 	   corresponding parameter.  */
22380 	arg = fold (build_nop (tparm, arg));
22381       else if (uses_template_parms (tparm))
22382 	{
22383 	  /* We haven't deduced the type of this parameter yet.  */
22384 	  if (cxx_dialect >= cxx17
22385 	      /* We deduce from array bounds in try_array_deduction.  */
22386 	      && !(strict & UNIFY_ALLOW_INTEGER))
22387 	    {
22388 	      /* Deduce it from the non-type argument.  */
22389 	      tree atype = TREE_TYPE (arg);
22390 	      RECUR_AND_CHECK_FAILURE (tparms, targs,
22391 				       tparm, atype,
22392 				       UNIFY_ALLOW_NONE, explain_p);
22393 	    }
22394 	  else
22395 	    /* Try again later.  */
22396 	    return unify_success (explain_p);
22397 	}
22398       else
22399 	return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
22400 
22401       /* If ARG is a parameter pack or an expansion, we cannot unify
22402 	 against it unless PARM is also a parameter pack.  */
22403       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
22404 	  && !TEMPLATE_PARM_PARAMETER_PACK (parm))
22405 	return unify_parameter_pack_mismatch (explain_p, parm, arg);
22406 
22407       {
22408 	bool removed_attr = false;
22409 	arg = strip_typedefs_expr (arg, &removed_attr);
22410       }
22411       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
22412       return unify_success (explain_p);
22413 
22414     case PTRMEM_CST:
22415      {
22416 	/* A pointer-to-member constant can be unified only with
22417 	 another constant.  */
22418       if (TREE_CODE (arg) != PTRMEM_CST)
22419 	return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
22420 
22421       /* Just unify the class member. It would be useless (and possibly
22422 	 wrong, depending on the strict flags) to unify also
22423 	 PTRMEM_CST_CLASS, because we want to be sure that both parm and
22424 	 arg refer to the same variable, even if through different
22425 	 classes. For instance:
22426 
22427 	 struct A { int x; };
22428 	 struct B : A { };
22429 
22430 	 Unification of &A::x and &B::x must succeed.  */
22431       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
22432 		    PTRMEM_CST_MEMBER (arg), strict, explain_p);
22433      }
22434 
22435     case POINTER_TYPE:
22436       {
22437 	if (!TYPE_PTR_P (arg))
22438 	  return unify_type_mismatch (explain_p, parm, arg);
22439 
22440 	/* [temp.deduct.call]
22441 
22442 	   A can be another pointer or pointer to member type that can
22443 	   be converted to the deduced A via a qualification
22444 	   conversion (_conv.qual_).
22445 
22446 	   We pass down STRICT here rather than UNIFY_ALLOW_NONE.
22447 	   This will allow for additional cv-qualification of the
22448 	   pointed-to types if appropriate.  */
22449 
22450 	if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
22451 	  /* The derived-to-base conversion only persists through one
22452 	     level of pointers.  */
22453 	  strict |= (strict_in & UNIFY_ALLOW_DERIVED);
22454 
22455 	return unify (tparms, targs, TREE_TYPE (parm),
22456 		      TREE_TYPE (arg), strict, explain_p);
22457       }
22458 
22459     case REFERENCE_TYPE:
22460       if (!TYPE_REF_P (arg))
22461 	return unify_type_mismatch (explain_p, parm, arg);
22462       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
22463 		    strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
22464 
22465     case ARRAY_TYPE:
22466       if (TREE_CODE (arg) != ARRAY_TYPE)
22467 	return unify_type_mismatch (explain_p, parm, arg);
22468       if ((TYPE_DOMAIN (parm) == NULL_TREE)
22469 	  != (TYPE_DOMAIN (arg) == NULL_TREE))
22470 	return unify_type_mismatch (explain_p, parm, arg);
22471       RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
22472 			       strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
22473       if (TYPE_DOMAIN (parm) != NULL_TREE)
22474 	return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
22475 				   TYPE_DOMAIN (arg), explain_p);
22476       return unify_success (explain_p);
22477 
22478     case REAL_TYPE:
22479     case COMPLEX_TYPE:
22480     case VECTOR_TYPE:
22481     case INTEGER_TYPE:
22482     case BOOLEAN_TYPE:
22483     case ENUMERAL_TYPE:
22484     case VOID_TYPE:
22485     case NULLPTR_TYPE:
22486       if (TREE_CODE (arg) != TREE_CODE (parm))
22487 	return unify_type_mismatch (explain_p, parm, arg);
22488 
22489       /* We have already checked cv-qualification at the top of the
22490 	 function.  */
22491       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
22492 	return unify_type_mismatch (explain_p, parm, arg);
22493 
22494       /* As far as unification is concerned, this wins.	 Later checks
22495 	 will invalidate it if necessary.  */
22496       return unify_success (explain_p);
22497 
22498       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
22499       /* Type INTEGER_CST can come from ordinary constant template args.  */
22500     case INTEGER_CST:
22501       while (CONVERT_EXPR_P (arg))
22502 	arg = TREE_OPERAND (arg, 0);
22503 
22504       if (TREE_CODE (arg) != INTEGER_CST)
22505 	return unify_template_argument_mismatch (explain_p, parm, arg);
22506       return (tree_int_cst_equal (parm, arg)
22507 	      ? unify_success (explain_p)
22508 	      : unify_template_argument_mismatch (explain_p, parm, arg));
22509 
22510     case TREE_VEC:
22511       {
22512 	int i, len, argslen;
22513 	int parm_variadic_p = 0;
22514 
22515 	if (TREE_CODE (arg) != TREE_VEC)
22516 	  return unify_template_argument_mismatch (explain_p, parm, arg);
22517 
22518 	len = TREE_VEC_LENGTH (parm);
22519 	argslen = TREE_VEC_LENGTH (arg);
22520 
22521 	/* Check for pack expansions in the parameters.  */
22522 	for (i = 0; i < len; ++i)
22523 	  {
22524 	    if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
22525 	      {
22526 		if (i == len - 1)
22527 		  /* We can unify against something with a trailing
22528 		     parameter pack.  */
22529 		  parm_variadic_p = 1;
22530 		else
22531 		  /* [temp.deduct.type]/9: If the template argument list of
22532 		     P contains a pack expansion that is not the last
22533 		     template argument, the entire template argument list
22534 		     is a non-deduced context.  */
22535 		  return unify_success (explain_p);
22536 	      }
22537 	  }
22538 
22539         /* If we don't have enough arguments to satisfy the parameters
22540            (not counting the pack expression at the end), or we have
22541            too many arguments for a parameter list that doesn't end in
22542            a pack expression, we can't unify.  */
22543 	if (parm_variadic_p
22544 	    ? argslen < len - parm_variadic_p
22545 	    : argslen != len)
22546 	  return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
22547 
22548 	/* Unify all of the parameters that precede the (optional)
22549 	   pack expression.  */
22550 	for (i = 0; i < len - parm_variadic_p; ++i)
22551 	  {
22552 	    RECUR_AND_CHECK_FAILURE (tparms, targs,
22553 				     TREE_VEC_ELT (parm, i),
22554 				     TREE_VEC_ELT (arg, i),
22555 				     UNIFY_ALLOW_NONE, explain_p);
22556 	  }
22557 	if (parm_variadic_p)
22558 	  return unify_pack_expansion (tparms, targs, parm, arg,
22559 				       DEDUCE_EXACT,
22560 				       /*subr=*/true, explain_p);
22561 	return unify_success (explain_p);
22562       }
22563 
22564     case RECORD_TYPE:
22565     case UNION_TYPE:
22566       if (TREE_CODE (arg) != TREE_CODE (parm))
22567 	return unify_type_mismatch (explain_p, parm, arg);
22568 
22569       if (TYPE_PTRMEMFUNC_P (parm))
22570 	{
22571 	  if (!TYPE_PTRMEMFUNC_P (arg))
22572 	    return unify_type_mismatch (explain_p, parm, arg);
22573 
22574 	  return unify (tparms, targs,
22575 			TYPE_PTRMEMFUNC_FN_TYPE (parm),
22576 			TYPE_PTRMEMFUNC_FN_TYPE (arg),
22577 			strict, explain_p);
22578 	}
22579       else if (TYPE_PTRMEMFUNC_P (arg))
22580 	return unify_type_mismatch (explain_p, parm, arg);
22581 
22582       if (CLASSTYPE_TEMPLATE_INFO (parm))
22583 	{
22584 	  tree t = NULL_TREE;
22585 
22586 	  if (strict_in & UNIFY_ALLOW_DERIVED)
22587 	    {
22588 	      /* First, we try to unify the PARM and ARG directly.  */
22589 	      t = try_class_unification (tparms, targs,
22590 					 parm, arg, explain_p);
22591 
22592 	      if (!t)
22593 		{
22594 		  /* Fallback to the special case allowed in
22595 		     [temp.deduct.call]:
22596 
22597 		       If P is a class, and P has the form
22598 		       template-id, then A can be a derived class of
22599 		       the deduced A.  Likewise, if P is a pointer to
22600 		       a class of the form template-id, A can be a
22601 		       pointer to a derived class pointed to by the
22602 		       deduced A.  */
22603 		  enum template_base_result r;
22604 		  r = get_template_base (tparms, targs, parm, arg,
22605 					 explain_p, &t);
22606 
22607 		  if (!t)
22608 		    {
22609 		      /* Don't give the derived diagnostic if we're
22610 			 already dealing with the same template.  */
22611 		      bool same_template
22612 			= (CLASSTYPE_TEMPLATE_INFO (arg)
22613 			   && (CLASSTYPE_TI_TEMPLATE (parm)
22614 			       == CLASSTYPE_TI_TEMPLATE (arg)));
22615 		      return unify_no_common_base (explain_p && !same_template,
22616 						   r, parm, arg);
22617 		    }
22618 		}
22619 	    }
22620 	  else if (CLASSTYPE_TEMPLATE_INFO (arg)
22621 		   && (CLASSTYPE_TI_TEMPLATE (parm)
22622 		       == CLASSTYPE_TI_TEMPLATE (arg)))
22623 	    /* Perhaps PARM is something like S<U> and ARG is S<int>.
22624 	       Then, we should unify `int' and `U'.  */
22625 	    t = arg;
22626 	  else
22627 	    /* There's no chance of unification succeeding.  */
22628 	    return unify_type_mismatch (explain_p, parm, arg);
22629 
22630 	  return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
22631 			CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
22632 	}
22633       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
22634 	return unify_type_mismatch (explain_p, parm, arg);
22635       return unify_success (explain_p);
22636 
22637     case METHOD_TYPE:
22638     case FUNCTION_TYPE:
22639       {
22640 	unsigned int nargs;
22641 	tree *args;
22642 	tree a;
22643 	unsigned int i;
22644 
22645 	if (TREE_CODE (arg) != TREE_CODE (parm))
22646 	  return unify_type_mismatch (explain_p, parm, arg);
22647 
22648 	/* CV qualifications for methods can never be deduced, they must
22649 	   match exactly.  We need to check them explicitly here,
22650 	   because type_unification_real treats them as any other
22651 	   cv-qualified parameter.  */
22652 	if (TREE_CODE (parm) == METHOD_TYPE
22653 	    && (!check_cv_quals_for_unify
22654 		(UNIFY_ALLOW_NONE,
22655 		 class_of_this_parm (arg),
22656 		 class_of_this_parm (parm))))
22657 	  return unify_cv_qual_mismatch (explain_p, parm, arg);
22658 	if (TREE_CODE (arg) == FUNCTION_TYPE
22659 	    && type_memfn_quals (parm) != type_memfn_quals (arg))
22660 	  return unify_cv_qual_mismatch (explain_p, parm, arg);
22661 	if (type_memfn_rqual (parm) != type_memfn_rqual (arg))
22662 	  return unify_type_mismatch (explain_p, parm, arg);
22663 
22664 	RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
22665 				 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
22666 
22667 	nargs = list_length (TYPE_ARG_TYPES (arg));
22668 	args = XALLOCAVEC (tree, nargs);
22669 	for (a = TYPE_ARG_TYPES (arg), i = 0;
22670 	     a != NULL_TREE && a != void_list_node;
22671 	     a = TREE_CHAIN (a), ++i)
22672 	  args[i] = TREE_VALUE (a);
22673 	nargs = i;
22674 
22675 	if (type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
22676 				   args, nargs, 1, DEDUCE_EXACT,
22677 				   NULL, explain_p))
22678 	  return 1;
22679 
22680 	if (flag_noexcept_type)
22681 	  {
22682 	    tree pspec = TYPE_RAISES_EXCEPTIONS (parm);
22683 	    tree aspec = canonical_eh_spec (TYPE_RAISES_EXCEPTIONS (arg));
22684 	    if (pspec == NULL_TREE) pspec = noexcept_false_spec;
22685 	    if (aspec == NULL_TREE) aspec = noexcept_false_spec;
22686 	    if (TREE_PURPOSE (pspec) && TREE_PURPOSE (aspec)
22687 		&& uses_template_parms (TREE_PURPOSE (pspec)))
22688 	      RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_PURPOSE (pspec),
22689 				       TREE_PURPOSE (aspec),
22690 				       UNIFY_ALLOW_NONE, explain_p);
22691 	    else if (nothrow_spec_p (pspec) && !nothrow_spec_p (aspec))
22692 	      return unify_type_mismatch (explain_p, parm, arg);
22693 	  }
22694 
22695 	return 0;
22696       }
22697 
22698     case OFFSET_TYPE:
22699       /* Unify a pointer to member with a pointer to member function, which
22700 	 deduces the type of the member as a function type. */
22701       if (TYPE_PTRMEMFUNC_P (arg))
22702 	{
22703 	  /* Check top-level cv qualifiers */
22704 	  if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
22705 	    return unify_cv_qual_mismatch (explain_p, parm, arg);
22706 
22707 	  RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
22708 				   TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
22709 				   UNIFY_ALLOW_NONE, explain_p);
22710 
22711 	  /* Determine the type of the function we are unifying against. */
22712 	  tree fntype = static_fn_type (arg);
22713 
22714 	  return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
22715 	}
22716 
22717       if (TREE_CODE (arg) != OFFSET_TYPE)
22718 	return unify_type_mismatch (explain_p, parm, arg);
22719       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
22720 			       TYPE_OFFSET_BASETYPE (arg),
22721 			       UNIFY_ALLOW_NONE, explain_p);
22722       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
22723 		    strict, explain_p);
22724 
22725     case CONST_DECL:
22726       if (DECL_TEMPLATE_PARM_P (parm))
22727 	return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
22728       if (arg != scalar_constant_value (parm))
22729 	return unify_template_argument_mismatch (explain_p, parm, arg);
22730       return unify_success (explain_p);
22731 
22732     case FIELD_DECL:
22733     case TEMPLATE_DECL:
22734       /* Matched cases are handled by the ARG == PARM test above.  */
22735       return unify_template_argument_mismatch (explain_p, parm, arg);
22736 
22737     case VAR_DECL:
22738       /* We might get a variable as a non-type template argument in parm if the
22739 	 corresponding parameter is type-dependent.  Make any necessary
22740 	 adjustments based on whether arg is a reference.  */
22741       if (CONSTANT_CLASS_P (arg))
22742 	parm = fold_non_dependent_expr (parm, complain);
22743       else if (REFERENCE_REF_P (arg))
22744 	{
22745 	  tree sub = TREE_OPERAND (arg, 0);
22746 	  STRIP_NOPS (sub);
22747 	  if (TREE_CODE (sub) == ADDR_EXPR)
22748 	    arg = TREE_OPERAND (sub, 0);
22749 	}
22750       /* Now use the normal expression code to check whether they match.  */
22751       goto expr;
22752 
22753     case TYPE_ARGUMENT_PACK:
22754     case NONTYPE_ARGUMENT_PACK:
22755       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
22756 		    ARGUMENT_PACK_ARGS (arg), strict, explain_p);
22757 
22758     case TYPEOF_TYPE:
22759     case DECLTYPE_TYPE:
22760     case UNDERLYING_TYPE:
22761       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
22762 	 or UNDERLYING_TYPE nodes.  */
22763       return unify_success (explain_p);
22764 
22765     case ERROR_MARK:
22766       /* Unification fails if we hit an error node.  */
22767       return unify_invalid (explain_p);
22768 
22769     case INDIRECT_REF:
22770       if (REFERENCE_REF_P (parm))
22771 	{
22772 	  bool pexp = PACK_EXPANSION_P (arg);
22773 	  if (pexp)
22774 	    arg = PACK_EXPANSION_PATTERN (arg);
22775 	  if (REFERENCE_REF_P (arg))
22776 	    arg = TREE_OPERAND (arg, 0);
22777 	  if (pexp)
22778 	    arg = make_pack_expansion (arg, complain);
22779 	  return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
22780 			strict, explain_p);
22781 	}
22782       /* FALLTHRU */
22783 
22784     default:
22785       /* An unresolved overload is a nondeduced context.  */
22786       if (is_overloaded_fn (parm) || type_unknown_p (parm))
22787 	return unify_success (explain_p);
22788       gcc_assert (EXPR_P (parm) || TREE_CODE (parm) == TRAIT_EXPR);
22789     expr:
22790       /* We must be looking at an expression.  This can happen with
22791 	 something like:
22792 
22793 	   template <int I>
22794 	   void foo(S<I>, S<I + 2>);
22795 
22796 	 This is a "nondeduced context":
22797 
22798 	   [deduct.type]
22799 
22800 	   The nondeduced contexts are:
22801 
22802 	   --A type that is a template-id in which one or more of
22803 	     the template-arguments is an expression that references
22804 	     a template-parameter.
22805 
22806 	 In these cases, we assume deduction succeeded, but don't
22807 	 actually infer any unifications.  */
22808 
22809       if (!uses_template_parms (parm)
22810 	  && !template_args_equal (parm, arg))
22811 	return unify_expression_unequal (explain_p, parm, arg);
22812       else
22813 	return unify_success (explain_p);
22814     }
22815 }
22816 #undef RECUR_AND_CHECK_FAILURE
22817 
22818 /* Note that DECL can be defined in this translation unit, if
22819    required.  */
22820 
22821 static void
mark_definable(tree decl)22822 mark_definable (tree decl)
22823 {
22824   tree clone;
22825   DECL_NOT_REALLY_EXTERN (decl) = 1;
22826   FOR_EACH_CLONE (clone, decl)
22827     DECL_NOT_REALLY_EXTERN (clone) = 1;
22828 }
22829 
22830 /* Called if RESULT is explicitly instantiated, or is a member of an
22831    explicitly instantiated class.  */
22832 
22833 void
mark_decl_instantiated(tree result,int extern_p)22834 mark_decl_instantiated (tree result, int extern_p)
22835 {
22836   SET_DECL_EXPLICIT_INSTANTIATION (result);
22837 
22838   /* If this entity has already been written out, it's too late to
22839      make any modifications.  */
22840   if (TREE_ASM_WRITTEN (result))
22841     return;
22842 
22843   /* For anonymous namespace we don't need to do anything.  */
22844   if (decl_anon_ns_mem_p (result))
22845     {
22846       gcc_assert (!TREE_PUBLIC (result));
22847       return;
22848     }
22849 
22850   if (TREE_CODE (result) != FUNCTION_DECL)
22851     /* The TREE_PUBLIC flag for function declarations will have been
22852        set correctly by tsubst.  */
22853     TREE_PUBLIC (result) = 1;
22854 
22855   /* This might have been set by an earlier implicit instantiation.  */
22856   DECL_COMDAT (result) = 0;
22857 
22858   if (extern_p)
22859     DECL_NOT_REALLY_EXTERN (result) = 0;
22860   else
22861     {
22862       mark_definable (result);
22863       mark_needed (result);
22864       /* Always make artificials weak.  */
22865       if (DECL_ARTIFICIAL (result) && flag_weak)
22866 	comdat_linkage (result);
22867       /* For WIN32 we also want to put explicit instantiations in
22868 	 linkonce sections.  */
22869       else if (TREE_PUBLIC (result))
22870 	maybe_make_one_only (result);
22871       if (TREE_CODE (result) == FUNCTION_DECL
22872 	  && DECL_TEMPLATE_INSTANTIATED (result))
22873 	/* If the function has already been instantiated, clear DECL_EXTERNAL,
22874 	   since start_preparsed_function wouldn't have if we had an earlier
22875 	   extern explicit instantiation.  */
22876 	DECL_EXTERNAL (result) = 0;
22877     }
22878 
22879   /* If EXTERN_P, then this function will not be emitted -- unless
22880      followed by an explicit instantiation, at which point its linkage
22881      will be adjusted.  If !EXTERN_P, then this function will be
22882      emitted here.  In neither circumstance do we want
22883      import_export_decl to adjust the linkage.  */
22884   DECL_INTERFACE_KNOWN (result) = 1;
22885 }
22886 
22887 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
22888    important template arguments.  If any are missing, we check whether
22889    they're important by using error_mark_node for substituting into any
22890    args that were used for partial ordering (the ones between ARGS and END)
22891    and seeing if it bubbles up.  */
22892 
22893 static bool
check_undeduced_parms(tree targs,tree args,tree end)22894 check_undeduced_parms (tree targs, tree args, tree end)
22895 {
22896   bool found = false;
22897   int i;
22898   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
22899     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
22900       {
22901 	found = true;
22902 	TREE_VEC_ELT (targs, i) = error_mark_node;
22903       }
22904   if (found)
22905     {
22906       tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
22907       if (substed == error_mark_node)
22908 	return true;
22909     }
22910   return false;
22911 }
22912 
22913 /* Given two function templates PAT1 and PAT2, return:
22914 
22915    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
22916    -1 if PAT2 is more specialized than PAT1.
22917    0 if neither is more specialized.
22918 
22919    LEN indicates the number of parameters we should consider
22920    (defaulted parameters should not be considered).
22921 
22922    The 1998 std underspecified function template partial ordering, and
22923    DR214 addresses the issue.  We take pairs of arguments, one from
22924    each of the templates, and deduce them against each other.  One of
22925    the templates will be more specialized if all the *other*
22926    template's arguments deduce against its arguments and at least one
22927    of its arguments *does* *not* deduce against the other template's
22928    corresponding argument.  Deduction is done as for class templates.
22929    The arguments used in deduction have reference and top level cv
22930    qualifiers removed.  Iff both arguments were originally reference
22931    types *and* deduction succeeds in both directions, an lvalue reference
22932    wins against an rvalue reference and otherwise the template
22933    with the more cv-qualified argument wins for that pairing (if
22934    neither is more cv-qualified, they both are equal).  Unlike regular
22935    deduction, after all the arguments have been deduced in this way,
22936    we do *not* verify the deduced template argument values can be
22937    substituted into non-deduced contexts.
22938 
22939    The logic can be a bit confusing here, because we look at deduce1 and
22940    targs1 to see if pat2 is at least as specialized, and vice versa; if we
22941    can find template arguments for pat1 to make arg1 look like arg2, that
22942    means that arg2 is at least as specialized as arg1.  */
22943 
22944 int
more_specialized_fn(tree pat1,tree pat2,int len)22945 more_specialized_fn (tree pat1, tree pat2, int len)
22946 {
22947   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
22948   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
22949   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
22950   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
22951   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
22952   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
22953   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
22954   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
22955   tree origs1, origs2;
22956   bool lose1 = false;
22957   bool lose2 = false;
22958 
22959   /* Remove the this parameter from non-static member functions.  If
22960      one is a non-static member function and the other is not a static
22961      member function, remove the first parameter from that function
22962      also.  This situation occurs for operator functions where we
22963      locate both a member function (with this pointer) and non-member
22964      operator (with explicit first operand).  */
22965   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
22966     {
22967       len--; /* LEN is the number of significant arguments for DECL1 */
22968       args1 = TREE_CHAIN (args1);
22969       if (!DECL_STATIC_FUNCTION_P (decl2))
22970 	args2 = TREE_CHAIN (args2);
22971     }
22972   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
22973     {
22974       args2 = TREE_CHAIN (args2);
22975       if (!DECL_STATIC_FUNCTION_P (decl1))
22976 	{
22977 	  len--;
22978 	  args1 = TREE_CHAIN (args1);
22979 	}
22980     }
22981 
22982   /* If only one is a conversion operator, they are unordered.  */
22983   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
22984     return 0;
22985 
22986   /* Consider the return type for a conversion function */
22987   if (DECL_CONV_FN_P (decl1))
22988     {
22989       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
22990       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
22991       len++;
22992     }
22993 
22994   processing_template_decl++;
22995 
22996   origs1 = args1;
22997   origs2 = args2;
22998 
22999   while (len--
23000 	 /* Stop when an ellipsis is seen.  */
23001 	 && args1 != NULL_TREE && args2 != NULL_TREE)
23002     {
23003       tree arg1 = TREE_VALUE (args1);
23004       tree arg2 = TREE_VALUE (args2);
23005       int deduce1, deduce2;
23006       int quals1 = -1;
23007       int quals2 = -1;
23008       int ref1 = 0;
23009       int ref2 = 0;
23010 
23011       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
23012           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
23013         {
23014           /* When both arguments are pack expansions, we need only
23015              unify the patterns themselves.  */
23016           arg1 = PACK_EXPANSION_PATTERN (arg1);
23017           arg2 = PACK_EXPANSION_PATTERN (arg2);
23018 
23019           /* This is the last comparison we need to do.  */
23020           len = 0;
23021         }
23022 
23023       /* DR 1847: If a particular P contains no template-parameters that
23024 	 participate in template argument deduction, that P is not used to
23025 	 determine the ordering.  */
23026       if (!uses_deducible_template_parms (arg1)
23027 	  && !uses_deducible_template_parms (arg2))
23028 	goto next;
23029 
23030       if (TYPE_REF_P (arg1))
23031 	{
23032 	  ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
23033 	  arg1 = TREE_TYPE (arg1);
23034 	  quals1 = cp_type_quals (arg1);
23035 	}
23036 
23037       if (TYPE_REF_P (arg2))
23038 	{
23039 	  ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
23040 	  arg2 = TREE_TYPE (arg2);
23041 	  quals2 = cp_type_quals (arg2);
23042 	}
23043 
23044       arg1 = TYPE_MAIN_VARIANT (arg1);
23045       arg2 = TYPE_MAIN_VARIANT (arg2);
23046 
23047       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
23048         {
23049           int i, len2 = remaining_arguments (args2);
23050           tree parmvec = make_tree_vec (1);
23051           tree argvec = make_tree_vec (len2);
23052           tree ta = args2;
23053 
23054           /* Setup the parameter vector, which contains only ARG1.  */
23055           TREE_VEC_ELT (parmvec, 0) = arg1;
23056 
23057           /* Setup the argument vector, which contains the remaining
23058              arguments.  */
23059           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
23060             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
23061 
23062           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
23063 					   argvec, DEDUCE_EXACT,
23064 					   /*subr=*/true, /*explain_p=*/false)
23065 		     == 0);
23066 
23067           /* We cannot deduce in the other direction, because ARG1 is
23068              a pack expansion but ARG2 is not.  */
23069           deduce2 = 0;
23070         }
23071       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
23072         {
23073           int i, len1 = remaining_arguments (args1);
23074           tree parmvec = make_tree_vec (1);
23075           tree argvec = make_tree_vec (len1);
23076           tree ta = args1;
23077 
23078           /* Setup the parameter vector, which contains only ARG1.  */
23079           TREE_VEC_ELT (parmvec, 0) = arg2;
23080 
23081           /* Setup the argument vector, which contains the remaining
23082              arguments.  */
23083           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
23084             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
23085 
23086           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
23087 					   argvec, DEDUCE_EXACT,
23088 					   /*subr=*/true, /*explain_p=*/false)
23089 		     == 0);
23090 
23091           /* We cannot deduce in the other direction, because ARG2 is
23092              a pack expansion but ARG1 is not.*/
23093           deduce1 = 0;
23094         }
23095 
23096       else
23097         {
23098           /* The normal case, where neither argument is a pack
23099              expansion.  */
23100           deduce1 = (unify (tparms1, targs1, arg1, arg2,
23101 			    UNIFY_ALLOW_NONE, /*explain_p=*/false)
23102 		     == 0);
23103           deduce2 = (unify (tparms2, targs2, arg2, arg1,
23104 			    UNIFY_ALLOW_NONE, /*explain_p=*/false)
23105 		     == 0);
23106         }
23107 
23108       /* If we couldn't deduce arguments for tparms1 to make arg1 match
23109 	 arg2, then arg2 is not as specialized as arg1.  */
23110       if (!deduce1)
23111 	lose2 = true;
23112       if (!deduce2)
23113 	lose1 = true;
23114 
23115       /* "If, for a given type, deduction succeeds in both directions
23116 	 (i.e., the types are identical after the transformations above)
23117 	 and both P and A were reference types (before being replaced with
23118 	 the type referred to above):
23119 	 - if the type from the argument template was an lvalue reference and
23120 	 the type from the parameter template was not, the argument type is
23121 	 considered to be more specialized than the other; otherwise,
23122 	 - if the type from the argument template is more cv-qualified
23123 	 than the type from the parameter template (as described above),
23124 	 the argument type is considered to be more specialized than the other;
23125 	 otherwise,
23126 	 - neither type is more specialized than the other."  */
23127 
23128       if (deduce1 && deduce2)
23129 	{
23130 	  if (ref1 && ref2 && ref1 != ref2)
23131 	    {
23132 	      if (ref1 > ref2)
23133 		lose1 = true;
23134 	      else
23135 		lose2 = true;
23136 	    }
23137 	  else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
23138 	    {
23139 	      if ((quals1 & quals2) == quals2)
23140 		lose2 = true;
23141 	      if ((quals1 & quals2) == quals1)
23142 		lose1 = true;
23143 	    }
23144 	}
23145 
23146       if (lose1 && lose2)
23147 	/* We've failed to deduce something in either direction.
23148 	   These must be unordered.  */
23149 	break;
23150 
23151     next:
23152 
23153       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
23154           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
23155         /* We have already processed all of the arguments in our
23156            handing of the pack expansion type.  */
23157         len = 0;
23158 
23159       args1 = TREE_CHAIN (args1);
23160       args2 = TREE_CHAIN (args2);
23161     }
23162 
23163   /* "In most cases, all template parameters must have values in order for
23164      deduction to succeed, but for partial ordering purposes a template
23165      parameter may remain without a value provided it is not used in the
23166      types being used for partial ordering."
23167 
23168      Thus, if we are missing any of the targs1 we need to substitute into
23169      origs1, then pat2 is not as specialized as pat1.  This can happen when
23170      there is a nondeduced context.  */
23171   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
23172     lose2 = true;
23173   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
23174     lose1 = true;
23175 
23176   processing_template_decl--;
23177 
23178   /* If both deductions succeed, the partial ordering selects the more
23179      constrained template.  */
23180   if (!lose1 && !lose2)
23181     {
23182       tree c1 = get_constraints (DECL_TEMPLATE_RESULT (pat1));
23183       tree c2 = get_constraints (DECL_TEMPLATE_RESULT (pat2));
23184       lose1 = !subsumes_constraints (c1, c2);
23185       lose2 = !subsumes_constraints (c2, c1);
23186     }
23187 
23188   /* All things being equal, if the next argument is a pack expansion
23189      for one function but not for the other, prefer the
23190      non-variadic function.  FIXME this is bogus; see c++/41958.  */
23191   if (lose1 == lose2
23192       && args1 && TREE_VALUE (args1)
23193       && args2 && TREE_VALUE (args2))
23194     {
23195       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
23196       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
23197     }
23198 
23199   if (lose1 == lose2)
23200     return 0;
23201   else if (!lose1)
23202     return 1;
23203   else
23204     return -1;
23205 }
23206 
23207 /* Determine which of two partial specializations of TMPL is more
23208    specialized.
23209 
23210    PAT1 is a TREE_LIST whose TREE_VALUE is the TEMPLATE_DECL corresponding
23211    to the first partial specialization.  The TREE_PURPOSE is the
23212    innermost set of template parameters for the partial
23213    specialization.  PAT2 is similar, but for the second template.
23214 
23215    Return 1 if the first partial specialization is more specialized;
23216    -1 if the second is more specialized; 0 if neither is more
23217    specialized.
23218 
23219    See [temp.class.order] for information about determining which of
23220    two templates is more specialized.  */
23221 
23222 static int
more_specialized_partial_spec(tree tmpl,tree pat1,tree pat2)23223 more_specialized_partial_spec (tree tmpl, tree pat1, tree pat2)
23224 {
23225   tree targs;
23226   int winner = 0;
23227   bool any_deductions = false;
23228 
23229   tree tmpl1 = TREE_VALUE (pat1);
23230   tree tmpl2 = TREE_VALUE (pat2);
23231   tree specargs1 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl1)));
23232   tree specargs2 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl2)));
23233 
23234   /* Just like what happens for functions, if we are ordering between
23235      different template specializations, we may encounter dependent
23236      types in the arguments, and we need our dependency check functions
23237      to behave correctly.  */
23238   ++processing_template_decl;
23239   targs = get_partial_spec_bindings (tmpl, tmpl1, specargs2);
23240   if (targs)
23241     {
23242       --winner;
23243       any_deductions = true;
23244     }
23245 
23246   targs = get_partial_spec_bindings (tmpl, tmpl2, specargs1);
23247   if (targs)
23248     {
23249       ++winner;
23250       any_deductions = true;
23251     }
23252   --processing_template_decl;
23253 
23254   /* If both deductions succeed, the partial ordering selects the more
23255      constrained template.  */
23256   if (!winner && any_deductions)
23257     return more_constrained (tmpl1, tmpl2);
23258 
23259   /* In the case of a tie where at least one of the templates
23260      has a parameter pack at the end, the template with the most
23261      non-packed parameters wins.  */
23262   if (winner == 0
23263       && any_deductions
23264       && (template_args_variadic_p (TREE_PURPOSE (pat1))
23265           || template_args_variadic_p (TREE_PURPOSE (pat2))))
23266     {
23267       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
23268       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
23269       int len1 = TREE_VEC_LENGTH (args1);
23270       int len2 = TREE_VEC_LENGTH (args2);
23271 
23272       /* We don't count the pack expansion at the end.  */
23273       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
23274         --len1;
23275       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
23276         --len2;
23277 
23278       if (len1 > len2)
23279         return 1;
23280       else if (len1 < len2)
23281         return -1;
23282     }
23283 
23284   return winner;
23285 }
23286 
23287 /* Return the template arguments that will produce the function signature
23288    DECL from the function template FN, with the explicit template
23289    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
23290    also match.  Return NULL_TREE if no satisfactory arguments could be
23291    found.  */
23292 
23293 static tree
get_bindings(tree fn,tree decl,tree explicit_args,bool check_rettype)23294 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
23295 {
23296   int ntparms = DECL_NTPARMS (fn);
23297   tree targs = make_tree_vec (ntparms);
23298   tree decl_type = TREE_TYPE (decl);
23299   tree decl_arg_types;
23300   tree *args;
23301   unsigned int nargs, ix;
23302   tree arg;
23303 
23304   gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
23305 
23306   /* Never do unification on the 'this' parameter.  */
23307   decl_arg_types = skip_artificial_parms_for (decl,
23308 					      TYPE_ARG_TYPES (decl_type));
23309 
23310   nargs = list_length (decl_arg_types);
23311   args = XALLOCAVEC (tree, nargs);
23312   for (arg = decl_arg_types, ix = 0;
23313        arg != NULL_TREE && arg != void_list_node;
23314        arg = TREE_CHAIN (arg), ++ix)
23315     args[ix] = TREE_VALUE (arg);
23316 
23317   if (fn_type_unification (fn, explicit_args, targs,
23318 			   args, ix,
23319 			   (check_rettype || DECL_CONV_FN_P (fn)
23320 			    ? TREE_TYPE (decl_type) : NULL_TREE),
23321 			   DEDUCE_EXACT, LOOKUP_NORMAL, NULL,
23322 			   /*explain_p=*/false,
23323 			   /*decltype*/false)
23324       == error_mark_node)
23325     return NULL_TREE;
23326 
23327   return targs;
23328 }
23329 
23330 /* Return the innermost template arguments that, when applied to a partial
23331    specialization SPEC_TMPL of TMPL, yield the ARGS.
23332 
23333    For example, suppose we have:
23334 
23335      template <class T, class U> struct S {};
23336      template <class T> struct S<T*, int> {};
23337 
23338    Then, suppose we want to get `S<double*, int>'.  SPEC_TMPL will be the
23339    partial specialization and the ARGS will be {double*, int}.  The resulting
23340    vector will be {double}, indicating that `T' is bound to `double'.  */
23341 
23342 static tree
get_partial_spec_bindings(tree tmpl,tree spec_tmpl,tree args)23343 get_partial_spec_bindings (tree tmpl, tree spec_tmpl, tree args)
23344 {
23345   tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
23346   tree spec_args
23347     = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (spec_tmpl)));
23348   int i, ntparms = TREE_VEC_LENGTH (tparms);
23349   tree deduced_args;
23350   tree innermost_deduced_args;
23351 
23352   innermost_deduced_args = make_tree_vec (ntparms);
23353   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
23354     {
23355       deduced_args = copy_node (args);
23356       SET_TMPL_ARGS_LEVEL (deduced_args,
23357 			   TMPL_ARGS_DEPTH (deduced_args),
23358 			   innermost_deduced_args);
23359     }
23360   else
23361     deduced_args = innermost_deduced_args;
23362 
23363   bool tried_array_deduction = (cxx_dialect < cxx17);
23364  again:
23365   if (unify (tparms, deduced_args,
23366 	     INNERMOST_TEMPLATE_ARGS (spec_args),
23367 	     INNERMOST_TEMPLATE_ARGS (args),
23368 	     UNIFY_ALLOW_NONE, /*explain_p=*/false))
23369     return NULL_TREE;
23370 
23371   for (i =  0; i < ntparms; ++i)
23372     if (! TREE_VEC_ELT (innermost_deduced_args, i))
23373       {
23374 	if (!tried_array_deduction)
23375 	  {
23376 	    try_array_deduction (tparms, innermost_deduced_args,
23377 				 INNERMOST_TEMPLATE_ARGS (spec_args));
23378 	    tried_array_deduction = true;
23379 	    if (TREE_VEC_ELT (innermost_deduced_args, i))
23380 	      goto again;
23381 	  }
23382 	return NULL_TREE;
23383       }
23384 
23385   if (!push_tinst_level (spec_tmpl, deduced_args))
23386     {
23387       excessive_deduction_depth = true;
23388       return NULL_TREE;
23389     }
23390 
23391   /* Verify that nondeduced template arguments agree with the type
23392      obtained from argument deduction.
23393 
23394      For example:
23395 
23396        struct A { typedef int X; };
23397        template <class T, class U> struct C {};
23398        template <class T> struct C<T, typename T::X> {};
23399 
23400      Then with the instantiation `C<A, int>', we can deduce that
23401      `T' is `A' but unify () does not check whether `typename T::X'
23402      is `int'.  */
23403   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
23404 
23405   if (spec_args != error_mark_node)
23406     spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
23407 				       INNERMOST_TEMPLATE_ARGS (spec_args),
23408 				       tmpl, tf_none, false, false);
23409 
23410   pop_tinst_level ();
23411 
23412   if (spec_args == error_mark_node
23413       /* We only need to check the innermost arguments; the other
23414 	 arguments will always agree.  */
23415       || !comp_template_args_porder (INNERMOST_TEMPLATE_ARGS (spec_args),
23416 				     INNERMOST_TEMPLATE_ARGS (args)))
23417     return NULL_TREE;
23418 
23419   /* Now that we have bindings for all of the template arguments,
23420      ensure that the arguments deduced for the template template
23421      parameters have compatible template parameter lists.  See the use
23422      of template_template_parm_bindings_ok_p in fn_type_unification
23423      for more information.  */
23424   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
23425     return NULL_TREE;
23426 
23427   return deduced_args;
23428 }
23429 
23430 // Compare two function templates T1 and T2 by deducing bindings
23431 // from one against the other. If both deductions succeed, compare
23432 // constraints to see which is more constrained.
23433 static int
more_specialized_inst(tree t1,tree t2)23434 more_specialized_inst (tree t1, tree t2)
23435 {
23436   int fate = 0;
23437   int count = 0;
23438 
23439   if (get_bindings (t1, DECL_TEMPLATE_RESULT (t2), NULL_TREE, true))
23440     {
23441       --fate;
23442       ++count;
23443     }
23444 
23445   if (get_bindings (t2, DECL_TEMPLATE_RESULT (t1), NULL_TREE, true))
23446     {
23447       ++fate;
23448       ++count;
23449     }
23450 
23451   // If both deductions succeed, then one may be more constrained.
23452   if (count == 2 && fate == 0)
23453     fate = more_constrained (t1, t2);
23454 
23455   return fate;
23456 }
23457 
23458 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
23459    Return the TREE_LIST node with the most specialized template, if
23460    any.  If there is no most specialized template, the error_mark_node
23461    is returned.
23462 
23463    Note that this function does not look at, or modify, the
23464    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
23465    returned is one of the elements of INSTANTIATIONS, callers may
23466    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
23467    and retrieve it from the value returned.  */
23468 
23469 tree
most_specialized_instantiation(tree templates)23470 most_specialized_instantiation (tree templates)
23471 {
23472   tree fn, champ;
23473 
23474   ++processing_template_decl;
23475 
23476   champ = templates;
23477   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
23478     {
23479       gcc_assert (TREE_VALUE (champ) != TREE_VALUE (fn));
23480       int fate = more_specialized_inst (TREE_VALUE (champ), TREE_VALUE (fn));
23481       if (fate == -1)
23482 	champ = fn;
23483       else if (!fate)
23484 	{
23485 	  /* Equally specialized, move to next function.  If there
23486 	     is no next function, nothing's most specialized.  */
23487 	  fn = TREE_CHAIN (fn);
23488 	  champ = fn;
23489 	  if (!fn)
23490 	    break;
23491 	}
23492     }
23493 
23494   if (champ)
23495     /* Now verify that champ is better than everything earlier in the
23496        instantiation list.  */
23497     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn)) {
23498       if (more_specialized_inst (TREE_VALUE (champ), TREE_VALUE (fn)) != 1)
23499       {
23500         champ = NULL_TREE;
23501         break;
23502       }
23503     }
23504 
23505   processing_template_decl--;
23506 
23507   if (!champ)
23508     return error_mark_node;
23509 
23510   return champ;
23511 }
23512 
23513 /* If DECL is a specialization of some template, return the most
23514    general such template.  Otherwise, returns NULL_TREE.
23515 
23516    For example, given:
23517 
23518      template <class T> struct S { template <class U> void f(U); };
23519 
23520    if TMPL is `template <class U> void S<int>::f(U)' this will return
23521    the full template.  This function will not trace past partial
23522    specializations, however.  For example, given in addition:
23523 
23524      template <class T> struct S<T*> { template <class U> void f(U); };
23525 
23526    if TMPL is `template <class U> void S<int*>::f(U)' this will return
23527    `template <class T> template <class U> S<T*>::f(U)'.  */
23528 
23529 tree
most_general_template(tree decl)23530 most_general_template (tree decl)
23531 {
23532   if (TREE_CODE (decl) != TEMPLATE_DECL)
23533     {
23534       if (tree tinfo = get_template_info (decl))
23535 	decl = TI_TEMPLATE (tinfo);
23536       /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
23537 	 template friend, or a FIELD_DECL for a capture pack.  */
23538       if (TREE_CODE (decl) != TEMPLATE_DECL)
23539 	return NULL_TREE;
23540     }
23541 
23542   /* Look for more and more general templates.  */
23543   while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
23544     {
23545       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
23546 	 (See cp-tree.h for details.)  */
23547       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
23548 	break;
23549 
23550       if (CLASS_TYPE_P (TREE_TYPE (decl))
23551 	  && !TYPE_DECL_ALIAS_P (TYPE_NAME (TREE_TYPE (decl)))
23552 	  && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
23553 	break;
23554 
23555       /* Stop if we run into an explicitly specialized class template.  */
23556       if (!DECL_NAMESPACE_SCOPE_P (decl)
23557 	  && DECL_CONTEXT (decl)
23558 	  && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
23559 	break;
23560 
23561       decl = DECL_TI_TEMPLATE (decl);
23562     }
23563 
23564   return decl;
23565 }
23566 
23567 /* Return the most specialized of the template partial specializations
23568    which can produce TARGET, a specialization of some class or variable
23569    template.  The value returned is actually a TREE_LIST; the TREE_VALUE is
23570    a TEMPLATE_DECL node corresponding to the partial specialization, while
23571    the TREE_PURPOSE is the set of template arguments that must be
23572    substituted into the template pattern in order to generate TARGET.
23573 
23574    If the choice of partial specialization is ambiguous, a diagnostic
23575    is issued, and the error_mark_node is returned.  If there are no
23576    partial specializations matching TARGET, then NULL_TREE is
23577    returned, indicating that the primary template should be used.  */
23578 
23579 static tree
most_specialized_partial_spec(tree target,tsubst_flags_t complain)23580 most_specialized_partial_spec (tree target, tsubst_flags_t complain)
23581 {
23582   tree list = NULL_TREE;
23583   tree t;
23584   tree champ;
23585   int fate;
23586   bool ambiguous_p;
23587   tree outer_args = NULL_TREE;
23588   tree tmpl, args;
23589 
23590   if (TYPE_P (target))
23591     {
23592       tree tinfo = CLASSTYPE_TEMPLATE_INFO (target);
23593       tmpl = TI_TEMPLATE (tinfo);
23594       args = TI_ARGS (tinfo);
23595     }
23596   else if (TREE_CODE (target) == TEMPLATE_ID_EXPR)
23597     {
23598       tmpl = TREE_OPERAND (target, 0);
23599       args = TREE_OPERAND (target, 1);
23600     }
23601   else if (VAR_P (target))
23602     {
23603       tree tinfo = DECL_TEMPLATE_INFO (target);
23604       tmpl = TI_TEMPLATE (tinfo);
23605       args = TI_ARGS (tinfo);
23606     }
23607   else
23608     gcc_unreachable ();
23609 
23610   tree main_tmpl = most_general_template (tmpl);
23611 
23612   /* For determining which partial specialization to use, only the
23613      innermost args are interesting.  */
23614   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
23615     {
23616       outer_args = strip_innermost_template_args (args, 1);
23617       args = INNERMOST_TEMPLATE_ARGS (args);
23618     }
23619 
23620   /* The caller hasn't called push_to_top_level yet, but we need
23621      get_partial_spec_bindings to be done in non-template context so that we'll
23622      fully resolve everything.  */
23623   processing_template_decl_sentinel ptds;
23624 
23625   for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
23626     {
23627       tree spec_args;
23628       tree spec_tmpl = TREE_VALUE (t);
23629 
23630       if (outer_args)
23631 	{
23632 	  /* Substitute in the template args from the enclosing class.  */
23633 	  ++processing_template_decl;
23634 	  spec_tmpl = tsubst (spec_tmpl, outer_args, tf_none, NULL_TREE);
23635 	  --processing_template_decl;
23636 	}
23637 
23638       if (spec_tmpl == error_mark_node)
23639 	return error_mark_node;
23640 
23641       spec_args = get_partial_spec_bindings (tmpl, spec_tmpl, args);
23642       if (spec_args)
23643 	{
23644 	  if (outer_args)
23645 	    spec_args = add_to_template_args (outer_args, spec_args);
23646 
23647           /* Keep the candidate only if the constraints are satisfied,
23648              or if we're not compiling with concepts.  */
23649           if (!flag_concepts
23650               || constraints_satisfied_p (spec_tmpl, spec_args))
23651             {
23652               list = tree_cons (spec_args, TREE_VALUE (t), list);
23653               TREE_TYPE (list) = TREE_TYPE (t);
23654             }
23655 	}
23656     }
23657 
23658   if (! list)
23659     return NULL_TREE;
23660 
23661   ambiguous_p = false;
23662   t = list;
23663   champ = t;
23664   t = TREE_CHAIN (t);
23665   for (; t; t = TREE_CHAIN (t))
23666     {
23667       fate = more_specialized_partial_spec (tmpl, champ, t);
23668       if (fate == 1)
23669 	;
23670       else
23671 	{
23672 	  if (fate == 0)
23673 	    {
23674 	      t = TREE_CHAIN (t);
23675 	      if (! t)
23676 		{
23677 		  ambiguous_p = true;
23678 		  break;
23679 		}
23680 	    }
23681 	  champ = t;
23682 	}
23683     }
23684 
23685   if (!ambiguous_p)
23686     for (t = list; t && t != champ; t = TREE_CHAIN (t))
23687       {
23688 	fate = more_specialized_partial_spec (tmpl, champ, t);
23689 	if (fate != 1)
23690 	  {
23691 	    ambiguous_p = true;
23692 	    break;
23693 	  }
23694       }
23695 
23696   if (ambiguous_p)
23697     {
23698       const char *str;
23699       char *spaces = NULL;
23700       if (!(complain & tf_error))
23701 	return error_mark_node;
23702       if (TYPE_P (target))
23703 	error ("ambiguous template instantiation for %q#T", target);
23704       else
23705 	error ("ambiguous template instantiation for %q#D", target);
23706       str = ngettext ("candidate is:", "candidates are:", list_length (list));
23707       for (t = list; t; t = TREE_CHAIN (t))
23708         {
23709 	  tree subst = build_tree_list (TREE_VALUE (t), TREE_PURPOSE (t));
23710           inform (DECL_SOURCE_LOCATION (TREE_VALUE (t)),
23711 		  "%s %#qS", spaces ? spaces : str, subst);
23712           spaces = spaces ? spaces : get_spaces (str);
23713         }
23714       free (spaces);
23715       return error_mark_node;
23716     }
23717 
23718   return champ;
23719 }
23720 
23721 /* Explicitly instantiate DECL.  */
23722 
23723 void
do_decl_instantiation(tree decl,tree storage)23724 do_decl_instantiation (tree decl, tree storage)
23725 {
23726   tree result = NULL_TREE;
23727   int extern_p = 0;
23728 
23729   if (!decl || decl == error_mark_node)
23730     /* An error occurred, for which grokdeclarator has already issued
23731        an appropriate message.  */
23732     return;
23733   else if (! DECL_LANG_SPECIFIC (decl))
23734     {
23735       error ("explicit instantiation of non-template %q#D", decl);
23736       return;
23737     }
23738   else if (DECL_DECLARED_CONCEPT_P (decl))
23739     {
23740       if (VAR_P (decl))
23741 	error ("explicit instantiation of variable concept %q#D", decl);
23742       else
23743 	error ("explicit instantiation of function concept %q#D", decl);
23744       return;
23745     }
23746 
23747   bool var_templ = (DECL_TEMPLATE_INFO (decl)
23748                     && variable_template_p (DECL_TI_TEMPLATE (decl)));
23749 
23750   if (VAR_P (decl) && !var_templ)
23751     {
23752       /* There is an asymmetry here in the way VAR_DECLs and
23753 	 FUNCTION_DECLs are handled by grokdeclarator.  In the case of
23754 	 the latter, the DECL we get back will be marked as a
23755 	 template instantiation, and the appropriate
23756 	 DECL_TEMPLATE_INFO will be set up.  This does not happen for
23757 	 VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
23758 	 should handle VAR_DECLs as it currently handles
23759 	 FUNCTION_DECLs.  */
23760       if (!DECL_CLASS_SCOPE_P (decl))
23761 	{
23762 	  error ("%qD is not a static data member of a class template", decl);
23763 	  return;
23764 	}
23765       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
23766       if (!result || !VAR_P (result))
23767 	{
23768 	  error ("no matching template for %qD found", decl);
23769 	  return;
23770 	}
23771       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
23772 	{
23773 	  error ("type %qT for explicit instantiation %qD does not match "
23774 		 "declared type %qT", TREE_TYPE (result), decl,
23775 		 TREE_TYPE (decl));
23776 	  return;
23777 	}
23778     }
23779   else if (TREE_CODE (decl) != FUNCTION_DECL && !var_templ)
23780     {
23781       error ("explicit instantiation of %q#D", decl);
23782       return;
23783     }
23784   else
23785     result = decl;
23786 
23787   /* Check for various error cases.  Note that if the explicit
23788      instantiation is valid the RESULT will currently be marked as an
23789      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
23790      until we get here.  */
23791 
23792   if (DECL_TEMPLATE_SPECIALIZATION (result))
23793     {
23794       /* DR 259 [temp.spec].
23795 
23796 	 Both an explicit instantiation and a declaration of an explicit
23797 	 specialization shall not appear in a program unless the explicit
23798 	 instantiation follows a declaration of the explicit specialization.
23799 
23800 	 For a given set of template parameters, if an explicit
23801 	 instantiation of a template appears after a declaration of an
23802 	 explicit specialization for that template, the explicit
23803 	 instantiation has no effect.  */
23804       return;
23805     }
23806   else if (DECL_EXPLICIT_INSTANTIATION (result))
23807     {
23808       /* [temp.spec]
23809 
23810 	 No program shall explicitly instantiate any template more
23811 	 than once.
23812 
23813 	 We check DECL_NOT_REALLY_EXTERN so as not to complain when
23814 	 the first instantiation was `extern' and the second is not,
23815 	 and EXTERN_P for the opposite case.  */
23816       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
23817 	permerror (input_location, "duplicate explicit instantiation of %q#D", result);
23818       /* If an "extern" explicit instantiation follows an ordinary
23819 	 explicit instantiation, the template is instantiated.  */
23820       if (extern_p)
23821 	return;
23822     }
23823   else if (!DECL_IMPLICIT_INSTANTIATION (result))
23824     {
23825       error ("no matching template for %qD found", result);
23826       return;
23827     }
23828   else if (!DECL_TEMPLATE_INFO (result))
23829     {
23830       permerror (input_location, "explicit instantiation of non-template %q#D", result);
23831       return;
23832     }
23833 
23834   if (storage == NULL_TREE)
23835     ;
23836   else if (storage == ridpointers[(int) RID_EXTERN])
23837     {
23838       if (!in_system_header_at (input_location) && (cxx_dialect == cxx98))
23839 	pedwarn (input_location, OPT_Wpedantic,
23840 		 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
23841 		 "instantiations");
23842       extern_p = 1;
23843     }
23844   else
23845     error ("storage class %qD applied to template instantiation", storage);
23846 
23847   check_explicit_instantiation_namespace (result);
23848   mark_decl_instantiated (result, extern_p);
23849   if (! extern_p)
23850     instantiate_decl (result, /*defer_ok=*/true,
23851 		      /*expl_inst_class_mem_p=*/false);
23852 }
23853 
23854 static void
mark_class_instantiated(tree t,int extern_p)23855 mark_class_instantiated (tree t, int extern_p)
23856 {
23857   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
23858   SET_CLASSTYPE_INTERFACE_KNOWN (t);
23859   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
23860   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
23861   if (! extern_p)
23862     {
23863       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
23864       rest_of_type_compilation (t, 1);
23865     }
23866 }
23867 
23868 /* Called from do_type_instantiation through binding_table_foreach to
23869    do recursive instantiation for the type bound in ENTRY.  */
23870 static void
bt_instantiate_type_proc(binding_entry entry,void * data)23871 bt_instantiate_type_proc (binding_entry entry, void *data)
23872 {
23873   tree storage = *(tree *) data;
23874 
23875   if (MAYBE_CLASS_TYPE_P (entry->type)
23876       && CLASSTYPE_TEMPLATE_INFO (entry->type)
23877       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
23878     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
23879 }
23880 
23881 /* Perform an explicit instantiation of template class T.  STORAGE, if
23882    non-null, is the RID for extern, inline or static.  COMPLAIN is
23883    nonzero if this is called from the parser, zero if called recursively,
23884    since the standard is unclear (as detailed below).  */
23885 
23886 void
do_type_instantiation(tree t,tree storage,tsubst_flags_t complain)23887 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
23888 {
23889   int extern_p = 0;
23890   int nomem_p = 0;
23891   int static_p = 0;
23892   int previous_instantiation_extern_p = 0;
23893 
23894   if (TREE_CODE (t) == TYPE_DECL)
23895     t = TREE_TYPE (t);
23896 
23897   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
23898     {
23899       tree tmpl =
23900 	(TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
23901       if (tmpl)
23902 	error ("explicit instantiation of non-class template %qD", tmpl);
23903       else
23904 	error ("explicit instantiation of non-template type %qT", t);
23905       return;
23906     }
23907 
23908   complete_type (t);
23909 
23910   if (!COMPLETE_TYPE_P (t))
23911     {
23912       if (complain & tf_error)
23913 	error ("explicit instantiation of %q#T before definition of template",
23914 	       t);
23915       return;
23916     }
23917 
23918   if (storage != NULL_TREE)
23919     {
23920       if (!in_system_header_at (input_location))
23921 	{
23922 	  if (storage == ridpointers[(int) RID_EXTERN])
23923 	    {
23924 	      if (cxx_dialect == cxx98)
23925 		pedwarn (input_location, OPT_Wpedantic,
23926 			 "ISO C++ 1998 forbids the use of %<extern%> on "
23927 			 "explicit instantiations");
23928 	    }
23929 	  else
23930 	    pedwarn (input_location, OPT_Wpedantic,
23931 		     "ISO C++ forbids the use of %qE"
23932 		     " on explicit instantiations", storage);
23933 	}
23934 
23935       if (storage == ridpointers[(int) RID_INLINE])
23936 	nomem_p = 1;
23937       else if (storage == ridpointers[(int) RID_EXTERN])
23938 	extern_p = 1;
23939       else if (storage == ridpointers[(int) RID_STATIC])
23940 	static_p = 1;
23941       else
23942 	{
23943 	  error ("storage class %qD applied to template instantiation",
23944 		 storage);
23945 	  extern_p = 0;
23946 	}
23947     }
23948 
23949   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
23950     {
23951       /* DR 259 [temp.spec].
23952 
23953 	 Both an explicit instantiation and a declaration of an explicit
23954 	 specialization shall not appear in a program unless the explicit
23955 	 instantiation follows a declaration of the explicit specialization.
23956 
23957 	 For a given set of template parameters, if an explicit
23958 	 instantiation of a template appears after a declaration of an
23959 	 explicit specialization for that template, the explicit
23960 	 instantiation has no effect.  */
23961       return;
23962     }
23963   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
23964     {
23965       /* [temp.spec]
23966 
23967 	 No program shall explicitly instantiate any template more
23968 	 than once.
23969 
23970 	 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
23971 	 instantiation was `extern'.  If EXTERN_P then the second is.
23972 	 These cases are OK.  */
23973       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
23974 
23975       if (!previous_instantiation_extern_p && !extern_p
23976 	  && (complain & tf_error))
23977 	permerror (input_location, "duplicate explicit instantiation of %q#T", t);
23978 
23979       /* If we've already instantiated the template, just return now.  */
23980       if (!CLASSTYPE_INTERFACE_ONLY (t))
23981 	return;
23982     }
23983 
23984   check_explicit_instantiation_namespace (TYPE_NAME (t));
23985   mark_class_instantiated (t, extern_p);
23986 
23987   if (nomem_p)
23988     return;
23989 
23990   /* In contrast to implicit instantiation, where only the
23991      declarations, and not the definitions, of members are
23992      instantiated, we have here:
23993 
23994 	 [temp.explicit]
23995 
23996 	 The explicit instantiation of a class template specialization
23997 	 implies the instantiation of all of its members not
23998 	 previously explicitly specialized in the translation unit
23999 	 containing the explicit instantiation.
24000 
24001      Of course, we can't instantiate member template classes, since we
24002      don't have any arguments for them.  Note that the standard is
24003      unclear on whether the instantiation of the members are
24004      *explicit* instantiations or not.  However, the most natural
24005      interpretation is that it should be an explicit
24006      instantiation.  */
24007   for (tree fld = TYPE_FIELDS (t); fld; fld = DECL_CHAIN (fld))
24008     if ((VAR_P (fld)
24009 	 || (TREE_CODE (fld) == FUNCTION_DECL
24010 	     && !static_p
24011 	     && user_provided_p (fld)))
24012 	&& DECL_TEMPLATE_INSTANTIATION (fld))
24013       {
24014 	mark_decl_instantiated (fld, extern_p);
24015 	if (! extern_p)
24016 	  instantiate_decl (fld, /*defer_ok=*/true,
24017 			    /*expl_inst_class_mem_p=*/true);
24018       }
24019 
24020   if (CLASSTYPE_NESTED_UTDS (t))
24021     binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
24022 			   bt_instantiate_type_proc, &storage);
24023 }
24024 
24025 /* Given a function DECL, which is a specialization of TMPL, modify
24026    DECL to be a re-instantiation of TMPL with the same template
24027    arguments.  TMPL should be the template into which tsubst'ing
24028    should occur for DECL, not the most general template.
24029 
24030    One reason for doing this is a scenario like this:
24031 
24032      template <class T>
24033      void f(const T&, int i);
24034 
24035      void g() { f(3, 7); }
24036 
24037      template <class T>
24038      void f(const T& t, const int i) { }
24039 
24040    Note that when the template is first instantiated, with
24041    instantiate_template, the resulting DECL will have no name for the
24042    first parameter, and the wrong type for the second.  So, when we go
24043    to instantiate the DECL, we regenerate it.  */
24044 
24045 static void
regenerate_decl_from_template(tree decl,tree tmpl,tree args)24046 regenerate_decl_from_template (tree decl, tree tmpl, tree args)
24047 {
24048   /* The arguments used to instantiate DECL, from the most general
24049      template.  */
24050   tree code_pattern;
24051 
24052   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
24053 
24054   /* Make sure that we can see identifiers, and compute access
24055      correctly.  */
24056   push_access_scope (decl);
24057 
24058   if (TREE_CODE (decl) == FUNCTION_DECL)
24059     {
24060       tree decl_parm;
24061       tree pattern_parm;
24062       tree specs;
24063       int args_depth;
24064       int parms_depth;
24065 
24066       args_depth = TMPL_ARGS_DEPTH (args);
24067       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
24068       if (args_depth > parms_depth)
24069 	args = get_innermost_template_args (args, parms_depth);
24070 
24071       /* Instantiate a dynamic exception-specification.  noexcept will be
24072 	 handled below.  */
24073       if (tree raises = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (code_pattern)))
24074 	if (TREE_VALUE (raises))
24075 	  {
24076 	    specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
24077 						    args, tf_error, NULL_TREE,
24078 						    /*defer_ok*/false);
24079 	    if (specs && specs != error_mark_node)
24080 	      TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
24081 							  specs);
24082 	  }
24083 
24084       /* Merge parameter declarations.  */
24085       decl_parm = skip_artificial_parms_for (decl,
24086 					     DECL_ARGUMENTS (decl));
24087       pattern_parm
24088 	= skip_artificial_parms_for (code_pattern,
24089 				     DECL_ARGUMENTS (code_pattern));
24090       while (decl_parm && !DECL_PACK_P (pattern_parm))
24091 	{
24092 	  tree parm_type;
24093 	  tree attributes;
24094 
24095 	  if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
24096 	    DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
24097 	  parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
24098 			      NULL_TREE);
24099 	  parm_type = type_decays_to (parm_type);
24100 	  if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
24101 	    TREE_TYPE (decl_parm) = parm_type;
24102 	  attributes = DECL_ATTRIBUTES (pattern_parm);
24103 	  if (DECL_ATTRIBUTES (decl_parm) != attributes)
24104 	    {
24105 	      DECL_ATTRIBUTES (decl_parm) = attributes;
24106 	      cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
24107 	    }
24108 	  decl_parm = DECL_CHAIN (decl_parm);
24109 	  pattern_parm = DECL_CHAIN (pattern_parm);
24110 	}
24111       /* Merge any parameters that match with the function parameter
24112          pack.  */
24113       if (pattern_parm && DECL_PACK_P (pattern_parm))
24114         {
24115           int i, len;
24116           tree expanded_types;
24117           /* Expand the TYPE_PACK_EXPANSION that provides the types for
24118              the parameters in this function parameter pack.  */
24119           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
24120                                                  args, tf_error, NULL_TREE);
24121           len = TREE_VEC_LENGTH (expanded_types);
24122           for (i = 0; i < len; i++)
24123             {
24124               tree parm_type;
24125               tree attributes;
24126 
24127               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
24128                 /* Rename the parameter to include the index.  */
24129                 DECL_NAME (decl_parm) =
24130                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
24131               parm_type = TREE_VEC_ELT (expanded_types, i);
24132               parm_type = type_decays_to (parm_type);
24133               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
24134                 TREE_TYPE (decl_parm) = parm_type;
24135               attributes = DECL_ATTRIBUTES (pattern_parm);
24136               if (DECL_ATTRIBUTES (decl_parm) != attributes)
24137                 {
24138                   DECL_ATTRIBUTES (decl_parm) = attributes;
24139                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
24140                 }
24141               decl_parm = DECL_CHAIN (decl_parm);
24142             }
24143         }
24144       /* Merge additional specifiers from the CODE_PATTERN.  */
24145       if (DECL_DECLARED_INLINE_P (code_pattern)
24146 	  && !DECL_DECLARED_INLINE_P (decl))
24147 	DECL_DECLARED_INLINE_P (decl) = 1;
24148 
24149       maybe_instantiate_noexcept (decl, tf_error);
24150     }
24151   else if (VAR_P (decl))
24152     {
24153       start_lambda_scope (decl);
24154       DECL_INITIAL (decl) =
24155 	tsubst_init (DECL_INITIAL (code_pattern), decl, args,
24156 		     tf_error, DECL_TI_TEMPLATE (decl));
24157       finish_lambda_scope ();
24158       if (VAR_HAD_UNKNOWN_BOUND (decl))
24159 	TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
24160 				   tf_error, DECL_TI_TEMPLATE (decl));
24161     }
24162   else
24163     gcc_unreachable ();
24164 
24165   pop_access_scope (decl);
24166 }
24167 
24168 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
24169    substituted to get DECL.  */
24170 
24171 tree
template_for_substitution(tree decl)24172 template_for_substitution (tree decl)
24173 {
24174   tree tmpl = DECL_TI_TEMPLATE (decl);
24175 
24176   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
24177      for the instantiation.  This is not always the most general
24178      template.  Consider, for example:
24179 
24180 	template <class T>
24181 	struct S { template <class U> void f();
24182 		   template <> void f<int>(); };
24183 
24184      and an instantiation of S<double>::f<int>.  We want TD to be the
24185      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
24186   while (/* An instantiation cannot have a definition, so we need a
24187 	    more general template.  */
24188 	 DECL_TEMPLATE_INSTANTIATION (tmpl)
24189 	   /* We must also deal with friend templates.  Given:
24190 
24191 		template <class T> struct S {
24192 		  template <class U> friend void f() {};
24193 		};
24194 
24195 	      S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
24196 	      so far as the language is concerned, but that's still
24197 	      where we get the pattern for the instantiation from.  On
24198 	      other hand, if the definition comes outside the class, say:
24199 
24200 		template <class T> struct S {
24201 		  template <class U> friend void f();
24202 		};
24203 		template <class U> friend void f() {}
24204 
24205 	      we don't need to look any further.  That's what the check for
24206 	      DECL_INITIAL is for.  */
24207 	  || (TREE_CODE (decl) == FUNCTION_DECL
24208 	      && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
24209 	      && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
24210     {
24211       /* The present template, TD, should not be a definition.  If it
24212 	 were a definition, we should be using it!  Note that we
24213 	 cannot restructure the loop to just keep going until we find
24214 	 a template with a definition, since that might go too far if
24215 	 a specialization was declared, but not defined.  */
24216 
24217       /* Fetch the more general template.  */
24218       tmpl = DECL_TI_TEMPLATE (tmpl);
24219     }
24220 
24221   return tmpl;
24222 }
24223 
24224 /* Returns true if we need to instantiate this template instance even if we
24225    know we aren't going to emit it.  */
24226 
24227 bool
always_instantiate_p(tree decl)24228 always_instantiate_p (tree decl)
24229 {
24230   /* We always instantiate inline functions so that we can inline them.  An
24231      explicit instantiation declaration prohibits implicit instantiation of
24232      non-inline functions.  With high levels of optimization, we would
24233      normally inline non-inline functions -- but we're not allowed to do
24234      that for "extern template" functions.  Therefore, we check
24235      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
24236   return ((TREE_CODE (decl) == FUNCTION_DECL
24237 	   && (DECL_DECLARED_INLINE_P (decl)
24238 	       || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
24239 	  /* And we need to instantiate static data members so that
24240 	     their initializers are available in integral constant
24241 	     expressions.  */
24242 	  || (VAR_P (decl)
24243 	      && decl_maybe_constant_var_p (decl)));
24244 }
24245 
24246 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
24247    instantiate it now, modifying TREE_TYPE (fn).  Returns false on
24248    error, true otherwise.  */
24249 
24250 bool
maybe_instantiate_noexcept(tree fn,tsubst_flags_t complain)24251 maybe_instantiate_noexcept (tree fn, tsubst_flags_t complain)
24252 {
24253   tree fntype, spec, noex, clone;
24254 
24255   /* Don't instantiate a noexcept-specification from template context.  */
24256   if (processing_template_decl
24257       && (!flag_noexcept_type || type_dependent_expression_p (fn)))
24258     return true;
24259 
24260   if (DECL_CLONED_FUNCTION_P (fn))
24261     fn = DECL_CLONED_FUNCTION (fn);
24262 
24263   tree orig_fn = NULL_TREE;
24264   /* For a member friend template we can get a TEMPLATE_DECL.  Let's use
24265      its FUNCTION_DECL for the rest of this function -- push_access_scope
24266      doesn't accept TEMPLATE_DECLs.  */
24267   if (DECL_FUNCTION_TEMPLATE_P (fn))
24268     {
24269       orig_fn = fn;
24270       fn = DECL_TEMPLATE_RESULT (fn);
24271     }
24272 
24273   fntype = TREE_TYPE (fn);
24274   spec = TYPE_RAISES_EXCEPTIONS (fntype);
24275 
24276   if (!spec || !TREE_PURPOSE (spec))
24277     return true;
24278 
24279   noex = TREE_PURPOSE (spec);
24280 
24281   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
24282     {
24283       static hash_set<tree>* fns = new hash_set<tree>;
24284       bool added = false;
24285       if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
24286 	{
24287 	  spec = get_defaulted_eh_spec (fn, complain);
24288 	  if (spec == error_mark_node)
24289 	    /* This might have failed because of an unparsed DMI, so
24290 	       let's try again later.  */
24291 	    return false;
24292 	}
24293       else if (!(added = !fns->add (fn)))
24294 	{
24295 	  /* If hash_set::add returns true, the element was already there.  */
24296 	  location_t loc = cp_expr_loc_or_loc (DEFERRED_NOEXCEPT_PATTERN (noex),
24297 					    DECL_SOURCE_LOCATION (fn));
24298 	  error_at (loc,
24299 		    "exception specification of %qD depends on itself",
24300 		    fn);
24301 	  spec = noexcept_false_spec;
24302 	}
24303       else if (push_tinst_level (fn))
24304 	{
24305 	  push_access_scope (fn);
24306 	  push_deferring_access_checks (dk_no_deferred);
24307 	  input_location = DECL_SOURCE_LOCATION (fn);
24308 
24309 	  tree save_ccp = current_class_ptr;
24310 	  tree save_ccr = current_class_ref;
24311 	  /* If needed, set current_class_ptr for the benefit of
24312 	     tsubst_copy/PARM_DECL.  */
24313 	  tree tdecl = DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (fn));
24314 	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tdecl))
24315 	    {
24316 	      tree this_parm = DECL_ARGUMENTS (tdecl);
24317 	      current_class_ptr = NULL_TREE;
24318 	      current_class_ref = cp_build_fold_indirect_ref (this_parm);
24319 	      current_class_ptr = this_parm;
24320 	    }
24321 
24322 	  /* If this function is represented by a TEMPLATE_DECL, then
24323 	     the deferred noexcept-specification might still contain
24324 	     dependent types, even after substitution.  And we need the
24325 	     dependency check functions to work in build_noexcept_spec.  */
24326 	  if (orig_fn)
24327 	    ++processing_template_decl;
24328 
24329 	  /* Do deferred instantiation of the noexcept-specifier.  */
24330 	  noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
24331 					DEFERRED_NOEXCEPT_ARGS (noex),
24332 					tf_warning_or_error, fn,
24333 					/*function_p=*/false,
24334 					/*i_c_e_p=*/true);
24335 
24336 	  current_class_ptr = save_ccp;
24337 	  current_class_ref = save_ccr;
24338 
24339 	  /* Build up the noexcept-specification.  */
24340 	  spec = build_noexcept_spec (noex, tf_warning_or_error);
24341 
24342 	  if (orig_fn)
24343 	    --processing_template_decl;
24344 
24345 	  pop_deferring_access_checks ();
24346 	  pop_access_scope (fn);
24347 	  pop_tinst_level ();
24348 	}
24349       else
24350 	spec = noexcept_false_spec;
24351 
24352       if (added)
24353 	fns->remove (fn);
24354 
24355       if (spec == error_mark_node)
24356 	{
24357 	  /* This failed with a hard error, so let's go with false.  */
24358 	  gcc_assert (seen_error ());
24359 	  spec = noexcept_false_spec;
24360 	}
24361 
24362       TREE_TYPE (fn) = build_exception_variant (fntype, spec);
24363       if (orig_fn)
24364 	TREE_TYPE (orig_fn) = TREE_TYPE (fn);
24365     }
24366 
24367   FOR_EACH_CLONE (clone, fn)
24368     {
24369       if (TREE_TYPE (clone) == fntype)
24370 	TREE_TYPE (clone) = TREE_TYPE (fn);
24371       else
24372 	TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
24373     }
24374 
24375   return true;
24376 }
24377 
24378 /* We're starting to process the function INST, an instantiation of PATTERN;
24379    add their parameters to local_specializations.  */
24380 
24381 static void
register_parameter_specializations(tree pattern,tree inst)24382 register_parameter_specializations (tree pattern, tree inst)
24383 {
24384   tree tmpl_parm = DECL_ARGUMENTS (pattern);
24385   tree spec_parm = DECL_ARGUMENTS (inst);
24386   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (inst))
24387     {
24388       register_local_specialization (spec_parm, tmpl_parm);
24389       spec_parm = skip_artificial_parms_for (inst, spec_parm);
24390       tmpl_parm = skip_artificial_parms_for (pattern, tmpl_parm);
24391     }
24392   for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
24393     {
24394       if (!DECL_PACK_P (tmpl_parm))
24395 	{
24396 	  register_local_specialization (spec_parm, tmpl_parm);
24397 	  spec_parm = DECL_CHAIN (spec_parm);
24398 	}
24399       else
24400 	{
24401 	  /* Register the (value) argument pack as a specialization of
24402 	     TMPL_PARM, then move on.  */
24403 	  tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
24404 	  register_local_specialization (argpack, tmpl_parm);
24405 	}
24406     }
24407   gcc_assert (!spec_parm);
24408 }
24409 
24410 /* Produce the definition of D, a _DECL generated from a template.  If
24411    DEFER_OK is true, then we don't have to actually do the
24412    instantiation now; we just have to do it sometime.  Normally it is
24413    an error if this is an explicit instantiation but D is undefined.
24414    EXPL_INST_CLASS_MEM_P is true iff D is a member of an explicitly
24415    instantiated class template.  */
24416 
24417 tree
instantiate_decl(tree d,bool defer_ok,bool expl_inst_class_mem_p)24418 instantiate_decl (tree d, bool defer_ok, bool expl_inst_class_mem_p)
24419 {
24420   tree tmpl = DECL_TI_TEMPLATE (d);
24421   tree gen_args;
24422   tree args;
24423   tree td;
24424   tree code_pattern;
24425   tree spec;
24426   tree gen_tmpl;
24427   bool pattern_defined;
24428   location_t saved_loc = input_location;
24429   int saved_unevaluated_operand = cp_unevaluated_operand;
24430   int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
24431   bool external_p;
24432   bool deleted_p;
24433 
24434   /* This function should only be used to instantiate templates for
24435      functions and static member variables.  */
24436   gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
24437 
24438   /* A concept is never instantiated. */
24439   gcc_assert (!DECL_DECLARED_CONCEPT_P (d));
24440 
24441   /* Variables are never deferred; if instantiation is required, they
24442      are instantiated right away.  That allows for better code in the
24443      case that an expression refers to the value of the variable --
24444      if the variable has a constant value the referring expression can
24445      take advantage of that fact.  */
24446   if (VAR_P (d))
24447     defer_ok = false;
24448 
24449   /* Don't instantiate cloned functions.  Instead, instantiate the
24450      functions they cloned.  */
24451   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
24452     d = DECL_CLONED_FUNCTION (d);
24453 
24454   if (DECL_TEMPLATE_INSTANTIATED (d)
24455       || (TREE_CODE (d) == FUNCTION_DECL
24456 	  && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
24457       || DECL_TEMPLATE_SPECIALIZATION (d))
24458     /* D has already been instantiated or explicitly specialized, so
24459        there's nothing for us to do here.
24460 
24461        It might seem reasonable to check whether or not D is an explicit
24462        instantiation, and, if so, stop here.  But when an explicit
24463        instantiation is deferred until the end of the compilation,
24464        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
24465        the instantiation.  */
24466     return d;
24467 
24468   /* Check to see whether we know that this template will be
24469      instantiated in some other file, as with "extern template"
24470      extension.  */
24471   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
24472 
24473   /* In general, we do not instantiate such templates.  */
24474   if (external_p && !always_instantiate_p (d))
24475     return d;
24476 
24477   gen_tmpl = most_general_template (tmpl);
24478   gen_args = DECL_TI_ARGS (d);
24479 
24480   if (tmpl != gen_tmpl)
24481     /* We should already have the extra args.  */
24482     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
24483 		== TMPL_ARGS_DEPTH (gen_args));
24484   /* And what's in the hash table should match D.  */
24485   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
24486 	      || spec == NULL_TREE);
24487 
24488   /* This needs to happen before any tsubsting.  */
24489   if (! push_tinst_level (d))
24490     return d;
24491 
24492   timevar_push (TV_TEMPLATE_INST);
24493 
24494   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
24495      for the instantiation.  */
24496   td = template_for_substitution (d);
24497   args = gen_args;
24498 
24499   if (VAR_P (d))
24500     {
24501       /* Look up an explicit specialization, if any.  */
24502       tree tid = lookup_template_variable (gen_tmpl, gen_args);
24503       tree elt = most_specialized_partial_spec (tid, tf_warning_or_error);
24504       if (elt && elt != error_mark_node)
24505 	{
24506 	  td = TREE_VALUE (elt);
24507 	  args = TREE_PURPOSE (elt);
24508 	}
24509     }
24510 
24511   code_pattern = DECL_TEMPLATE_RESULT (td);
24512 
24513   /* We should never be trying to instantiate a member of a class
24514      template or partial specialization.  */
24515   gcc_assert (d != code_pattern);
24516 
24517   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
24518       || DECL_TEMPLATE_SPECIALIZATION (td))
24519     /* In the case of a friend template whose definition is provided
24520        outside the class, we may have too many arguments.  Drop the
24521        ones we don't need.  The same is true for specializations.  */
24522     args = get_innermost_template_args
24523       (args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
24524 
24525   if (TREE_CODE (d) == FUNCTION_DECL)
24526     {
24527       deleted_p = DECL_DELETED_FN (code_pattern);
24528       pattern_defined = ((DECL_SAVED_TREE (code_pattern) != NULL_TREE
24529 			  && DECL_INITIAL (code_pattern) != error_mark_node)
24530 			 || DECL_DEFAULTED_FN (code_pattern)
24531 			 || deleted_p);
24532     }
24533   else
24534     {
24535       deleted_p = false;
24536       if (DECL_CLASS_SCOPE_P (code_pattern))
24537 	pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
24538       else
24539 	pattern_defined = ! DECL_EXTERNAL (code_pattern);
24540     }
24541 
24542   /* We may be in the middle of deferred access check.  Disable it now.  */
24543   push_deferring_access_checks (dk_no_deferred);
24544 
24545   /* Unless an explicit instantiation directive has already determined
24546      the linkage of D, remember that a definition is available for
24547      this entity.  */
24548   if (pattern_defined
24549       && !DECL_INTERFACE_KNOWN (d)
24550       && !DECL_NOT_REALLY_EXTERN (d))
24551     mark_definable (d);
24552 
24553   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
24554   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
24555   input_location = DECL_SOURCE_LOCATION (d);
24556 
24557   /* If D is a member of an explicitly instantiated class template,
24558      and no definition is available, treat it like an implicit
24559      instantiation.  */
24560   if (!pattern_defined && expl_inst_class_mem_p
24561       && DECL_EXPLICIT_INSTANTIATION (d))
24562     {
24563       /* Leave linkage flags alone on instantiations with anonymous
24564 	 visibility.  */
24565       if (TREE_PUBLIC (d))
24566 	{
24567 	  DECL_NOT_REALLY_EXTERN (d) = 0;
24568 	  DECL_INTERFACE_KNOWN (d) = 0;
24569 	}
24570       SET_DECL_IMPLICIT_INSTANTIATION (d);
24571     }
24572 
24573   /* Defer all other templates, unless we have been explicitly
24574      forbidden from doing so.  */
24575   if (/* If there is no definition, we cannot instantiate the
24576 	 template.  */
24577       ! pattern_defined
24578       /* If it's OK to postpone instantiation, do so.  */
24579       || defer_ok
24580       /* If this is a static data member that will be defined
24581 	 elsewhere, we don't want to instantiate the entire data
24582 	 member, but we do want to instantiate the initializer so that
24583 	 we can substitute that elsewhere.  */
24584       || (external_p && VAR_P (d))
24585       /* Handle here a deleted function too, avoid generating
24586 	 its body (c++/61080).  */
24587       || deleted_p)
24588     {
24589       /* The definition of the static data member is now required so
24590 	 we must substitute the initializer.  */
24591       if (VAR_P (d)
24592 	  && !DECL_INITIAL (d)
24593 	  && DECL_INITIAL (code_pattern))
24594 	{
24595 	  tree ns;
24596 	  tree init;
24597 	  bool const_init = false;
24598 	  bool enter_context = DECL_CLASS_SCOPE_P (d);
24599 
24600 	  ns = decl_namespace_context (d);
24601 	  push_nested_namespace (ns);
24602 	  if (enter_context)
24603 	    push_nested_class (DECL_CONTEXT (d));
24604 	  init = tsubst_expr (DECL_INITIAL (code_pattern),
24605 			      args,
24606 			      tf_warning_or_error, NULL_TREE,
24607 			      /*integral_constant_expression_p=*/false);
24608 	  /* If instantiating the initializer involved instantiating this
24609 	     again, don't call cp_finish_decl twice.  */
24610 	  if (!DECL_INITIAL (d))
24611 	    {
24612 	      /* Make sure the initializer is still constant, in case of
24613 		 circular dependency (template/instantiate6.C). */
24614 	      const_init
24615 		= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
24616 	      cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
24617 			      /*asmspec_tree=*/NULL_TREE,
24618 			      LOOKUP_ONLYCONVERTING);
24619 	    }
24620 	  if (enter_context)
24621 	    pop_nested_class ();
24622 	  pop_nested_namespace (ns);
24623 	}
24624 
24625       /* We restore the source position here because it's used by
24626 	 add_pending_template.  */
24627       input_location = saved_loc;
24628 
24629       if (at_eof && !pattern_defined
24630 	  && DECL_EXPLICIT_INSTANTIATION (d)
24631 	  && DECL_NOT_REALLY_EXTERN (d))
24632 	/* [temp.explicit]
24633 
24634 	   The definition of a non-exported function template, a
24635 	   non-exported member function template, or a non-exported
24636 	   member function or static data member of a class template
24637 	   shall be present in every translation unit in which it is
24638 	   explicitly instantiated.  */
24639 	permerror (input_location,  "explicit instantiation of %qD "
24640 		   "but no definition available", d);
24641 
24642       /* If we're in unevaluated context, we just wanted to get the
24643 	 constant value; this isn't an odr use, so don't queue
24644 	 a full instantiation.  */
24645       if (cp_unevaluated_operand != 0)
24646 	goto out;
24647       /* ??? Historically, we have instantiated inline functions, even
24648 	 when marked as "extern template".  */
24649       if (!(external_p && VAR_P (d)))
24650 	add_pending_template (d);
24651       goto out;
24652     }
24653   /* Tell the repository that D is available in this translation unit
24654      -- and see if it is supposed to be instantiated here.  */
24655   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
24656     {
24657       /* In a PCH file, despite the fact that the repository hasn't
24658 	 requested instantiation in the PCH it is still possible that
24659 	 an instantiation will be required in a file that includes the
24660 	 PCH.  */
24661       if (pch_file)
24662 	add_pending_template (d);
24663       /* Instantiate inline functions so that the inliner can do its
24664 	 job, even though we'll not be emitting a copy of this
24665 	 function.  */
24666       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
24667 	goto out;
24668     }
24669 
24670   bool push_to_top, nested;
24671   tree fn_context;
24672   fn_context = decl_function_context (d);
24673   if (LAMBDA_FUNCTION_P (d))
24674     /* tsubst_lambda_expr resolved any references to enclosing functions.  */
24675     fn_context = NULL_TREE;
24676   nested = current_function_decl != NULL_TREE;
24677   push_to_top = !(nested && fn_context == current_function_decl);
24678 
24679   vec<tree> omp_privatization_save;
24680   if (nested)
24681     save_omp_privatization_clauses (omp_privatization_save);
24682 
24683   if (push_to_top)
24684     push_to_top_level ();
24685   else
24686     {
24687       gcc_assert (!processing_template_decl);
24688       push_function_context ();
24689       cp_unevaluated_operand = 0;
24690       c_inhibit_evaluation_warnings = 0;
24691     }
24692 
24693   /* Mark D as instantiated so that recursive calls to
24694      instantiate_decl do not try to instantiate it again.  */
24695   DECL_TEMPLATE_INSTANTIATED (d) = 1;
24696 
24697   /* Regenerate the declaration in case the template has been modified
24698      by a subsequent redeclaration.  */
24699   regenerate_decl_from_template (d, td, args);
24700 
24701   /* We already set the file and line above.  Reset them now in case
24702      they changed as a result of calling regenerate_decl_from_template.  */
24703   input_location = DECL_SOURCE_LOCATION (d);
24704 
24705   if (VAR_P (d))
24706     {
24707       tree init;
24708       bool const_init = false;
24709 
24710       /* Clear out DECL_RTL; whatever was there before may not be right
24711 	 since we've reset the type of the declaration.  */
24712       SET_DECL_RTL (d, NULL);
24713       DECL_IN_AGGR_P (d) = 0;
24714 
24715       /* The initializer is placed in DECL_INITIAL by
24716 	 regenerate_decl_from_template so we don't need to
24717 	 push/pop_access_scope again here.  Pull it out so that
24718 	 cp_finish_decl can process it.  */
24719       init = DECL_INITIAL (d);
24720       DECL_INITIAL (d) = NULL_TREE;
24721       DECL_INITIALIZED_P (d) = 0;
24722 
24723       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
24724 	 initializer.  That function will defer actual emission until
24725 	 we have a chance to determine linkage.  */
24726       DECL_EXTERNAL (d) = 0;
24727 
24728       /* Enter the scope of D so that access-checking works correctly.  */
24729       bool enter_context = DECL_CLASS_SCOPE_P (d);
24730       if (enter_context)
24731         push_nested_class (DECL_CONTEXT (d));
24732 
24733       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
24734       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
24735 
24736       if (enter_context)
24737         pop_nested_class ();
24738 
24739       if (variable_template_p (gen_tmpl))
24740 	note_variable_template_instantiation (d);
24741     }
24742   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
24743     synthesize_method (d);
24744   else if (TREE_CODE (d) == FUNCTION_DECL)
24745     {
24746       /* Set up the list of local specializations.  */
24747       local_specialization_stack lss (push_to_top ? lss_blank : lss_copy);
24748       tree block = NULL_TREE;
24749 
24750       /* Set up context.  */
24751       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
24752 	  && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
24753 	block = push_stmt_list ();
24754       else
24755 	start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
24756 
24757       /* Some typedefs referenced from within the template code need to be
24758 	 access checked at template instantiation time, i.e now. These
24759 	 types were added to the template at parsing time. Let's get those
24760 	 and perform the access checks then.  */
24761       perform_typedefs_access_check (DECL_TEMPLATE_RESULT (td),
24762 				     args);
24763 
24764       /* Create substitution entries for the parameters.  */
24765       register_parameter_specializations (code_pattern, d);
24766 
24767       /* Substitute into the body of the function.  */
24768       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
24769 	tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
24770 			tf_warning_or_error, tmpl);
24771       else
24772 	{
24773 	  tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
24774 		       tf_warning_or_error, tmpl,
24775 		       /*integral_constant_expression_p=*/false);
24776 
24777 	  /* Set the current input_location to the end of the function
24778 	     so that finish_function knows where we are.  */
24779 	  input_location
24780 	    = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
24781 
24782 	  /* Remember if we saw an infinite loop in the template.  */
24783 	  current_function_infinite_loop
24784 	    = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
24785 	}
24786 
24787       /* Finish the function.  */
24788       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
24789 	  && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
24790 	DECL_SAVED_TREE (d) = pop_stmt_list (block);
24791       else
24792 	{
24793 	  d = finish_function (/*inline_p=*/false);
24794 	  expand_or_defer_fn (d);
24795 	}
24796 
24797       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
24798 	cp_check_omp_declare_reduction (d);
24799     }
24800 
24801   /* We're not deferring instantiation any more.  */
24802   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
24803 
24804   if (push_to_top)
24805     pop_from_top_level ();
24806   else
24807     pop_function_context ();
24808 
24809   if (nested)
24810     restore_omp_privatization_clauses (omp_privatization_save);
24811 
24812 out:
24813   pop_deferring_access_checks ();
24814   timevar_pop (TV_TEMPLATE_INST);
24815   pop_tinst_level ();
24816   input_location = saved_loc;
24817   cp_unevaluated_operand = saved_unevaluated_operand;
24818   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
24819 
24820   return d;
24821 }
24822 
24823 /* Run through the list of templates that we wish we could
24824    instantiate, and instantiate any we can.  RETRIES is the
24825    number of times we retry pending template instantiation.  */
24826 
24827 void
instantiate_pending_templates(int retries)24828 instantiate_pending_templates (int retries)
24829 {
24830   int reconsider;
24831   location_t saved_loc = input_location;
24832 
24833   /* Instantiating templates may trigger vtable generation.  This in turn
24834      may require further template instantiations.  We place a limit here
24835      to avoid infinite loop.  */
24836   if (pending_templates && retries >= max_tinst_depth)
24837     {
24838       tree decl = pending_templates->tinst->maybe_get_node ();
24839 
24840       fatal_error (input_location,
24841 		   "template instantiation depth exceeds maximum of %d"
24842 		   " instantiating %q+D, possibly from virtual table generation"
24843 		   " (use %<-ftemplate-depth=%> to increase the maximum)",
24844 		   max_tinst_depth, decl);
24845       if (TREE_CODE (decl) == FUNCTION_DECL)
24846 	/* Pretend that we defined it.  */
24847 	DECL_INITIAL (decl) = error_mark_node;
24848       return;
24849     }
24850 
24851   do
24852     {
24853       struct pending_template **t = &pending_templates;
24854       struct pending_template *last = NULL;
24855       reconsider = 0;
24856       while (*t)
24857 	{
24858 	  tree instantiation = reopen_tinst_level ((*t)->tinst);
24859 	  bool complete = false;
24860 
24861 	  if (TYPE_P (instantiation))
24862 	    {
24863 	      if (!COMPLETE_TYPE_P (instantiation))
24864 		{
24865 		  instantiate_class_template (instantiation);
24866 		  if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
24867 		    for (tree fld = TYPE_FIELDS (instantiation);
24868 			 fld; fld = TREE_CHAIN (fld))
24869 		      if ((VAR_P (fld)
24870 			   || (TREE_CODE (fld) == FUNCTION_DECL
24871 			       && !DECL_ARTIFICIAL (fld)))
24872 			  && DECL_TEMPLATE_INSTANTIATION (fld))
24873 			instantiate_decl (fld,
24874 					  /*defer_ok=*/false,
24875 					  /*expl_inst_class_mem_p=*/false);
24876 
24877 		  if (COMPLETE_TYPE_P (instantiation))
24878 		    reconsider = 1;
24879 		}
24880 
24881 	      complete = COMPLETE_TYPE_P (instantiation);
24882 	    }
24883 	  else
24884 	    {
24885 	      if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
24886 		  && !DECL_TEMPLATE_INSTANTIATED (instantiation))
24887 		{
24888 		  instantiation
24889 		    = instantiate_decl (instantiation,
24890 					/*defer_ok=*/false,
24891 					/*expl_inst_class_mem_p=*/false);
24892 		  if (DECL_TEMPLATE_INSTANTIATED (instantiation))
24893 		    reconsider = 1;
24894 		}
24895 
24896 	      complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
24897 			  || DECL_TEMPLATE_INSTANTIATED (instantiation));
24898 	    }
24899 
24900 	  if (complete)
24901 	    {
24902 	      /* If INSTANTIATION has been instantiated, then we don't
24903 		 need to consider it again in the future.  */
24904 	      struct pending_template *drop = *t;
24905 	      *t = (*t)->next;
24906 	      set_refcount_ptr (drop->tinst);
24907 	      pending_template_freelist ().free (drop);
24908 	    }
24909 	  else
24910 	    {
24911 	      last = *t;
24912 	      t = &(*t)->next;
24913 	    }
24914 	  tinst_depth = 0;
24915 	  set_refcount_ptr (current_tinst_level);
24916 	}
24917       last_pending_template = last;
24918     }
24919   while (reconsider);
24920 
24921   input_location = saved_loc;
24922 }
24923 
24924 /* Substitute ARGVEC into T, which is a list of initializers for
24925    either base class or a non-static data member.  The TREE_PURPOSEs
24926    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
24927    instantiate_decl.  */
24928 
24929 static tree
tsubst_initializer_list(tree t,tree argvec)24930 tsubst_initializer_list (tree t, tree argvec)
24931 {
24932   tree inits = NULL_TREE;
24933   tree target_ctor = error_mark_node;
24934 
24935   for (; t; t = TREE_CHAIN (t))
24936     {
24937       tree decl;
24938       tree init;
24939       tree expanded_bases = NULL_TREE;
24940       tree expanded_arguments = NULL_TREE;
24941       int i, len = 1;
24942 
24943       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
24944         {
24945           tree expr;
24946           tree arg;
24947 
24948           /* Expand the base class expansion type into separate base
24949              classes.  */
24950           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
24951                                                  tf_warning_or_error,
24952                                                  NULL_TREE);
24953           if (expanded_bases == error_mark_node)
24954             continue;
24955 
24956           /* We'll be building separate TREE_LISTs of arguments for
24957              each base.  */
24958           len = TREE_VEC_LENGTH (expanded_bases);
24959           expanded_arguments = make_tree_vec (len);
24960           for (i = 0; i < len; i++)
24961             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
24962 
24963           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
24964              expand each argument in the TREE_VALUE of t.  */
24965           expr = make_node (EXPR_PACK_EXPANSION);
24966 	  PACK_EXPANSION_LOCAL_P (expr) = true;
24967           PACK_EXPANSION_PARAMETER_PACKS (expr) =
24968             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
24969 
24970 	  if (TREE_VALUE (t) == void_type_node)
24971 	    /* VOID_TYPE_NODE is used to indicate
24972 	       value-initialization.  */
24973 	    {
24974 	      for (i = 0; i < len; i++)
24975 		TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
24976 	    }
24977 	  else
24978 	    {
24979 	      /* Substitute parameter packs into each argument in the
24980 		 TREE_LIST.  */
24981 	      in_base_initializer = 1;
24982 	      for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
24983 		{
24984 		  tree expanded_exprs;
24985 
24986 		  /* Expand the argument.  */
24987 		  SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
24988 		  expanded_exprs
24989 		    = tsubst_pack_expansion (expr, argvec,
24990 					     tf_warning_or_error,
24991 					     NULL_TREE);
24992 		  if (expanded_exprs == error_mark_node)
24993 		    continue;
24994 
24995 		  /* Prepend each of the expanded expressions to the
24996 		     corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
24997 		  for (i = 0; i < len; i++)
24998 		    {
24999 		      TREE_VEC_ELT (expanded_arguments, i) =
25000 			tree_cons (NULL_TREE,
25001 				   TREE_VEC_ELT (expanded_exprs, i),
25002 				   TREE_VEC_ELT (expanded_arguments, i));
25003 		    }
25004 		}
25005 	      in_base_initializer = 0;
25006 
25007 	      /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
25008 		 since we built them backwards.  */
25009 	      for (i = 0; i < len; i++)
25010 		{
25011 		  TREE_VEC_ELT (expanded_arguments, i) =
25012 		    nreverse (TREE_VEC_ELT (expanded_arguments, i));
25013 		}
25014 	    }
25015         }
25016 
25017       for (i = 0; i < len; ++i)
25018         {
25019           if (expanded_bases)
25020             {
25021               decl = TREE_VEC_ELT (expanded_bases, i);
25022               decl = expand_member_init (decl);
25023               init = TREE_VEC_ELT (expanded_arguments, i);
25024             }
25025           else
25026             {
25027 	      tree tmp;
25028               decl = tsubst_copy (TREE_PURPOSE (t), argvec,
25029                                   tf_warning_or_error, NULL_TREE);
25030 
25031               decl = expand_member_init (decl);
25032               if (decl && !DECL_P (decl))
25033                 in_base_initializer = 1;
25034 
25035 	      init = TREE_VALUE (t);
25036 	      tmp = init;
25037 	      if (init != void_type_node)
25038 		init = tsubst_expr (init, argvec,
25039 				    tf_warning_or_error, NULL_TREE,
25040 				    /*integral_constant_expression_p=*/false);
25041 	      if (init == NULL_TREE && tmp != NULL_TREE)
25042 		/* If we had an initializer but it instantiated to nothing,
25043 		   value-initialize the object.  This will only occur when
25044 		   the initializer was a pack expansion where the parameter
25045 		   packs used in that expansion were of length zero.  */
25046 		init = void_type_node;
25047               in_base_initializer = 0;
25048             }
25049 
25050 	  if (target_ctor != error_mark_node
25051 	      && init != error_mark_node)
25052 	    {
25053 	      error ("mem-initializer for %qD follows constructor delegation",
25054 		     decl);
25055 	      return inits;
25056 	    }
25057 	  /* Look for a target constructor. */
25058 	  if (init != error_mark_node
25059 	      && decl && CLASS_TYPE_P (decl)
25060 	      && same_type_p (decl, current_class_type))
25061 	    {
25062 	      maybe_warn_cpp0x (CPP0X_DELEGATING_CTORS);
25063 	      if (inits)
25064 		{
25065 		  error ("constructor delegation follows mem-initializer for %qD",
25066 			 TREE_PURPOSE (inits));
25067 		  continue;
25068 		}
25069 	      target_ctor = init;
25070 	    }
25071 
25072           if (decl)
25073             {
25074               init = build_tree_list (decl, init);
25075               TREE_CHAIN (init) = inits;
25076               inits = init;
25077             }
25078         }
25079     }
25080   return inits;
25081 }
25082 
25083 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
25084 
25085 static void
set_current_access_from_decl(tree decl)25086 set_current_access_from_decl (tree decl)
25087 {
25088   if (TREE_PRIVATE (decl))
25089     current_access_specifier = access_private_node;
25090   else if (TREE_PROTECTED (decl))
25091     current_access_specifier = access_protected_node;
25092   else
25093     current_access_specifier = access_public_node;
25094 }
25095 
25096 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
25097    is the instantiation (which should have been created with
25098    start_enum) and ARGS are the template arguments to use.  */
25099 
25100 static void
tsubst_enum(tree tag,tree newtag,tree args)25101 tsubst_enum (tree tag, tree newtag, tree args)
25102 {
25103   tree e;
25104 
25105   if (SCOPED_ENUM_P (newtag))
25106     begin_scope (sk_scoped_enum, newtag);
25107 
25108   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
25109     {
25110       tree value;
25111       tree decl;
25112 
25113       decl = TREE_VALUE (e);
25114       /* Note that in a template enum, the TREE_VALUE is the
25115 	 CONST_DECL, not the corresponding INTEGER_CST.  */
25116       value = tsubst_expr (DECL_INITIAL (decl),
25117 			   args, tf_warning_or_error, NULL_TREE,
25118 			   /*integral_constant_expression_p=*/true);
25119 
25120       /* Give this enumeration constant the correct access.  */
25121       set_current_access_from_decl (decl);
25122 
25123       /* Actually build the enumerator itself.  Here we're assuming that
25124 	 enumerators can't have dependent attributes.  */
25125       build_enumerator (DECL_NAME (decl), value, newtag,
25126 			DECL_ATTRIBUTES (decl), DECL_SOURCE_LOCATION (decl));
25127     }
25128 
25129   if (SCOPED_ENUM_P (newtag))
25130     finish_scope ();
25131 
25132   finish_enum_value_list (newtag);
25133   finish_enum (newtag);
25134 
25135   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
25136     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
25137 }
25138 
25139 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
25140    its type -- but without substituting the innermost set of template
25141    arguments.  So, innermost set of template parameters will appear in
25142    the type.  */
25143 
25144 tree
get_mostly_instantiated_function_type(tree decl)25145 get_mostly_instantiated_function_type (tree decl)
25146 {
25147   /* For a function, DECL_TI_TEMPLATE is partially instantiated.  */
25148   return TREE_TYPE (DECL_TI_TEMPLATE (decl));
25149 }
25150 
25151 /* Return truthvalue if we're processing a template different from
25152    the last one involved in diagnostics.  */
25153 bool
problematic_instantiation_changed(void)25154 problematic_instantiation_changed (void)
25155 {
25156   return current_tinst_level != last_error_tinst_level;
25157 }
25158 
25159 /* Remember current template involved in diagnostics.  */
25160 void
record_last_problematic_instantiation(void)25161 record_last_problematic_instantiation (void)
25162 {
25163   set_refcount_ptr (last_error_tinst_level, current_tinst_level);
25164 }
25165 
25166 struct tinst_level *
current_instantiation(void)25167 current_instantiation (void)
25168 {
25169   return current_tinst_level;
25170 }
25171 
25172 /* Return TRUE if current_function_decl is being instantiated, false
25173    otherwise.  */
25174 
25175 bool
instantiating_current_function_p(void)25176 instantiating_current_function_p (void)
25177 {
25178   return (current_instantiation ()
25179 	  && (current_instantiation ()->maybe_get_node ()
25180 	      == current_function_decl));
25181 }
25182 
25183 /* [temp.param] Check that template non-type parm TYPE is of an allowable
25184    type.  Return false for ok, true for disallowed.  Issue error and
25185    inform messages under control of COMPLAIN.  */
25186 
25187 static bool
invalid_nontype_parm_type_p(tree type,tsubst_flags_t complain)25188 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
25189 {
25190   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
25191     return false;
25192   else if (TYPE_PTR_P (type))
25193     return false;
25194   else if (TYPE_REF_P (type)
25195 	   && !TYPE_REF_IS_RVALUE (type))
25196     return false;
25197   else if (TYPE_PTRMEM_P (type))
25198     return false;
25199   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
25200     return false;
25201   else if (TREE_CODE (type) == TYPENAME_TYPE)
25202     return false;
25203   else if (TREE_CODE (type) == DECLTYPE_TYPE)
25204     return false;
25205   else if (TREE_CODE (type) == NULLPTR_TYPE)
25206     return false;
25207   /* A bound template template parm could later be instantiated to have a valid
25208      nontype parm type via an alias template.  */
25209   else if (cxx_dialect >= cxx11
25210 	   && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
25211     return false;
25212   else if (CLASS_TYPE_P (type))
25213     {
25214       if (cxx_dialect < cxx2a)
25215 	{
25216 	  error ("non-type template parameters of class type only available "
25217 		 "with %<-std=c++2a%> or %<-std=gnu++2a%>");
25218 	  return true;
25219 	}
25220       if (!complete_type_or_else (type, NULL_TREE))
25221 	return true;
25222       if (!literal_type_p (type))
25223 	{
25224 	  error ("%qT is not a valid type for a template non-type parameter "
25225 		 "because it is not literal", type);
25226 	  explain_non_literal_class (type);
25227 	  return true;
25228 	}
25229       if (cp_has_mutable_p (type))
25230 	{
25231 	  error ("%qT is not a valid type for a template non-type parameter "
25232 		 "because it has a mutable member", type);
25233 	  return true;
25234 	}
25235       /* FIXME check op<=> and strong structural equality once spaceship is
25236 	 implemented.  */
25237       return false;
25238     }
25239 
25240   if (complain & tf_error)
25241     {
25242       if (type == error_mark_node)
25243 	inform (input_location, "invalid template non-type parameter");
25244       else
25245 	error ("%q#T is not a valid type for a template non-type parameter",
25246 	       type);
25247     }
25248   return true;
25249 }
25250 
25251 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
25252    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
25253 
25254 static bool
dependent_type_p_r(tree type)25255 dependent_type_p_r (tree type)
25256 {
25257   tree scope;
25258 
25259   /* [temp.dep.type]
25260 
25261      A type is dependent if it is:
25262 
25263      -- a template parameter. Template template parameters are types
25264 	for us (since TYPE_P holds true for them) so we handle
25265 	them here.  */
25266   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
25267       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
25268     return true;
25269   /* -- a qualified-id with a nested-name-specifier which contains a
25270 	class-name that names a dependent type or whose unqualified-id
25271 	names a dependent type.  */
25272   if (TREE_CODE (type) == TYPENAME_TYPE)
25273     return true;
25274 
25275   /* An alias template specialization can be dependent even if the
25276      resulting type is not.  */
25277   if (dependent_alias_template_spec_p (type))
25278     return true;
25279 
25280   /* -- a cv-qualified type where the cv-unqualified type is
25281 	dependent.
25282      No code is necessary for this bullet; the code below handles
25283      cv-qualified types, and we don't want to strip aliases with
25284      TYPE_MAIN_VARIANT because of DR 1558.  */
25285   /* -- a compound type constructed from any dependent type.  */
25286   if (TYPE_PTRMEM_P (type))
25287     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
25288 	    || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
25289 					   (type)));
25290   else if (INDIRECT_TYPE_P (type))
25291     return dependent_type_p (TREE_TYPE (type));
25292   else if (TREE_CODE (type) == FUNCTION_TYPE
25293 	   || TREE_CODE (type) == METHOD_TYPE)
25294     {
25295       tree arg_type;
25296 
25297       if (dependent_type_p (TREE_TYPE (type)))
25298 	return true;
25299       for (arg_type = TYPE_ARG_TYPES (type);
25300 	   arg_type;
25301 	   arg_type = TREE_CHAIN (arg_type))
25302 	if (dependent_type_p (TREE_VALUE (arg_type)))
25303 	  return true;
25304       if (cxx_dialect >= cxx17)
25305 	/* A value-dependent noexcept-specifier makes the type dependent.  */
25306 	if (tree spec = TYPE_RAISES_EXCEPTIONS (type))
25307 	  if (tree noex = TREE_PURPOSE (spec))
25308 	    /* Treat DEFERRED_NOEXCEPT as non-dependent, since it doesn't
25309 	       affect overload resolution and treating it as dependent breaks
25310 	       things.  */
25311 	    if (TREE_CODE (noex) != DEFERRED_NOEXCEPT
25312 		&& value_dependent_expression_p (noex))
25313 	      return true;
25314       return false;
25315     }
25316   /* -- an array type constructed from any dependent type or whose
25317 	size is specified by a constant expression that is
25318 	value-dependent.
25319 
25320         We checked for type- and value-dependence of the bounds in
25321         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
25322   if (TREE_CODE (type) == ARRAY_TYPE)
25323     {
25324       if (TYPE_DOMAIN (type)
25325 	  && dependent_type_p (TYPE_DOMAIN (type)))
25326 	return true;
25327       return dependent_type_p (TREE_TYPE (type));
25328     }
25329 
25330   /* -- a template-id in which either the template name is a template
25331      parameter ...  */
25332   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
25333     return true;
25334   /* ... or any of the template arguments is a dependent type or
25335 	an expression that is type-dependent or value-dependent.  */
25336   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
25337 	   && (any_dependent_template_arguments_p
25338 	       (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
25339     return true;
25340 
25341   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
25342      dependent; if the argument of the `typeof' expression is not
25343      type-dependent, then it should already been have resolved.  */
25344   if (TREE_CODE (type) == TYPEOF_TYPE
25345       || TREE_CODE (type) == DECLTYPE_TYPE
25346       || TREE_CODE (type) == UNDERLYING_TYPE)
25347     return true;
25348 
25349   /* A template argument pack is dependent if any of its packed
25350      arguments are.  */
25351   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
25352     {
25353       tree args = ARGUMENT_PACK_ARGS (type);
25354       int i, len = TREE_VEC_LENGTH (args);
25355       for (i = 0; i < len; ++i)
25356         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
25357           return true;
25358     }
25359 
25360   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
25361      be template parameters.  */
25362   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
25363     return true;
25364 
25365   if (any_dependent_type_attributes_p (TYPE_ATTRIBUTES (type)))
25366     return true;
25367 
25368   /* The standard does not specifically mention types that are local
25369      to template functions or local classes, but they should be
25370      considered dependent too.  For example:
25371 
25372        template <int I> void f() {
25373 	 enum E { a = I };
25374 	 S<sizeof (E)> s;
25375        }
25376 
25377      The size of `E' cannot be known until the value of `I' has been
25378      determined.  Therefore, `E' must be considered dependent.  */
25379   scope = TYPE_CONTEXT (type);
25380   if (scope && TYPE_P (scope))
25381     return dependent_type_p (scope);
25382   /* Don't use type_dependent_expression_p here, as it can lead
25383      to infinite recursion trying to determine whether a lambda
25384      nested in a lambda is dependent (c++/47687).  */
25385   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
25386 	   && DECL_LANG_SPECIFIC (scope)
25387 	   && DECL_TEMPLATE_INFO (scope)
25388 	   && (any_dependent_template_arguments_p
25389 	       (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
25390     return true;
25391 
25392   /* Other types are non-dependent.  */
25393   return false;
25394 }
25395 
25396 /* Returns TRUE if TYPE is dependent, in the sense of
25397    [temp.dep.type].  Note that a NULL type is considered dependent.  */
25398 
25399 bool
dependent_type_p(tree type)25400 dependent_type_p (tree type)
25401 {
25402   /* If there are no template parameters in scope, then there can't be
25403      any dependent types.  */
25404   if (!processing_template_decl)
25405     {
25406       /* If we are not processing a template, then nobody should be
25407 	 providing us with a dependent type.  */
25408       gcc_assert (type);
25409       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
25410       return false;
25411     }
25412 
25413   /* If the type is NULL, we have not computed a type for the entity
25414      in question; in that case, the type is dependent.  */
25415   if (!type)
25416     return true;
25417 
25418   /* Erroneous types can be considered non-dependent.  */
25419   if (type == error_mark_node)
25420     return false;
25421 
25422   /* Getting here with global_type_node means we improperly called this
25423      function on the TREE_TYPE of an IDENTIFIER_NODE.  */
25424   gcc_checking_assert (type != global_type_node);
25425 
25426   /* If we have not already computed the appropriate value for TYPE,
25427      do so now.  */
25428   if (!TYPE_DEPENDENT_P_VALID (type))
25429     {
25430       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
25431       TYPE_DEPENDENT_P_VALID (type) = 1;
25432     }
25433 
25434   return TYPE_DEPENDENT_P (type);
25435 }
25436 
25437 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
25438    lookup.  In other words, a dependent type that is not the current
25439    instantiation.  */
25440 
25441 bool
dependent_scope_p(tree scope)25442 dependent_scope_p (tree scope)
25443 {
25444   return (scope && TYPE_P (scope) && dependent_type_p (scope)
25445 	  && !currently_open_class (scope));
25446 }
25447 
25448 /* T is a SCOPE_REF.  Return whether it represents a non-static member of
25449    an unknown base of 'this' (and is therefore instantiation-dependent).  */
25450 
25451 static bool
unknown_base_ref_p(tree t)25452 unknown_base_ref_p (tree t)
25453 {
25454   if (!current_class_ptr)
25455     return false;
25456 
25457   tree mem = TREE_OPERAND (t, 1);
25458   if (shared_member_p (mem))
25459     return false;
25460 
25461   tree cur = current_nonlambda_class_type ();
25462   if (!any_dependent_bases_p (cur))
25463     return false;
25464 
25465   tree ctx = TREE_OPERAND (t, 0);
25466   if (DERIVED_FROM_P (ctx, cur))
25467     return false;
25468 
25469   return true;
25470 }
25471 
25472 /* T is a SCOPE_REF; return whether we need to consider it
25473     instantiation-dependent so that we can check access at instantiation
25474     time even though we know which member it resolves to.  */
25475 
25476 static bool
instantiation_dependent_scope_ref_p(tree t)25477 instantiation_dependent_scope_ref_p (tree t)
25478 {
25479   if (DECL_P (TREE_OPERAND (t, 1))
25480       && CLASS_TYPE_P (TREE_OPERAND (t, 0))
25481       && !unknown_base_ref_p (t)
25482       && accessible_in_template_p (TREE_OPERAND (t, 0),
25483 				   TREE_OPERAND (t, 1)))
25484     return false;
25485   else
25486     return true;
25487 }
25488 
25489 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
25490    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
25491    expression.  */
25492 
25493 /* Note that this predicate is not appropriate for general expressions;
25494    only constant expressions (that satisfy potential_constant_expression)
25495    can be tested for value dependence.  */
25496 
25497 bool
value_dependent_expression_p(tree expression)25498 value_dependent_expression_p (tree expression)
25499 {
25500   if (!processing_template_decl || expression == NULL_TREE)
25501     return false;
25502 
25503   /* A type-dependent expression is also value-dependent.  */
25504   if (type_dependent_expression_p (expression))
25505     return true;
25506 
25507   switch (TREE_CODE (expression))
25508     {
25509     case BASELINK:
25510       /* A dependent member function of the current instantiation.  */
25511       return dependent_type_p (BINFO_TYPE (BASELINK_BINFO (expression)));
25512 
25513     case FUNCTION_DECL:
25514       /* A dependent member function of the current instantiation.  */
25515       if (DECL_CLASS_SCOPE_P (expression)
25516 	  && dependent_type_p (DECL_CONTEXT (expression)))
25517 	return true;
25518       break;
25519 
25520     case IDENTIFIER_NODE:
25521       /* A name that has not been looked up -- must be dependent.  */
25522       return true;
25523 
25524     case TEMPLATE_PARM_INDEX:
25525       /* A non-type template parm.  */
25526       return true;
25527 
25528     case CONST_DECL:
25529       /* A non-type template parm.  */
25530       if (DECL_TEMPLATE_PARM_P (expression))
25531 	return true;
25532       return value_dependent_expression_p (DECL_INITIAL (expression));
25533 
25534     case VAR_DECL:
25535        /* A constant with literal type and is initialized
25536 	  with an expression that is value-dependent.  */
25537       if (DECL_DEPENDENT_INIT_P (expression)
25538 	  /* FIXME cp_finish_decl doesn't fold reference initializers.  */
25539 	  || TYPE_REF_P (TREE_TYPE (expression)))
25540 	return true;
25541       if (DECL_HAS_VALUE_EXPR_P (expression))
25542 	{
25543 	  tree value_expr = DECL_VALUE_EXPR (expression);
25544 	  if (value_dependent_expression_p (value_expr))
25545 	    return true;
25546 	}
25547       return false;
25548 
25549     case DYNAMIC_CAST_EXPR:
25550     case STATIC_CAST_EXPR:
25551     case CONST_CAST_EXPR:
25552     case REINTERPRET_CAST_EXPR:
25553     case CAST_EXPR:
25554     case IMPLICIT_CONV_EXPR:
25555       /* These expressions are value-dependent if the type to which
25556 	 the cast occurs is dependent or the expression being casted
25557 	 is value-dependent.  */
25558       {
25559 	tree type = TREE_TYPE (expression);
25560 
25561 	if (dependent_type_p (type))
25562 	  return true;
25563 
25564 	/* A functional cast has a list of operands.  */
25565 	expression = TREE_OPERAND (expression, 0);
25566 	if (!expression)
25567 	  {
25568 	    /* If there are no operands, it must be an expression such
25569 	       as "int()". This should not happen for aggregate types
25570 	       because it would form non-constant expressions.  */
25571 	    gcc_assert (cxx_dialect >= cxx11
25572 			|| INTEGRAL_OR_ENUMERATION_TYPE_P (type));
25573 
25574 	    return false;
25575 	  }
25576 
25577 	if (TREE_CODE (expression) == TREE_LIST)
25578 	  return any_value_dependent_elements_p (expression);
25579 
25580 	return value_dependent_expression_p (expression);
25581       }
25582 
25583     case SIZEOF_EXPR:
25584       if (SIZEOF_EXPR_TYPE_P (expression))
25585 	return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
25586       /* FALLTHRU */
25587     case ALIGNOF_EXPR:
25588     case TYPEID_EXPR:
25589       /* A `sizeof' expression is value-dependent if the operand is
25590 	 type-dependent or is a pack expansion.  */
25591       expression = TREE_OPERAND (expression, 0);
25592       if (PACK_EXPANSION_P (expression))
25593         return true;
25594       else if (TYPE_P (expression))
25595 	return dependent_type_p (expression);
25596       return instantiation_dependent_uneval_expression_p (expression);
25597 
25598     case AT_ENCODE_EXPR:
25599       /* An 'encode' expression is value-dependent if the operand is
25600 	 type-dependent.  */
25601       expression = TREE_OPERAND (expression, 0);
25602       return dependent_type_p (expression);
25603 
25604     case NOEXCEPT_EXPR:
25605       expression = TREE_OPERAND (expression, 0);
25606       return instantiation_dependent_uneval_expression_p (expression);
25607 
25608     case SCOPE_REF:
25609       /* All instantiation-dependent expressions should also be considered
25610 	 value-dependent.  */
25611       return instantiation_dependent_scope_ref_p (expression);
25612 
25613     case COMPONENT_REF:
25614       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
25615 	      || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
25616 
25617     case NONTYPE_ARGUMENT_PACK:
25618       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
25619          is value-dependent.  */
25620       {
25621         tree values = ARGUMENT_PACK_ARGS (expression);
25622         int i, len = TREE_VEC_LENGTH (values);
25623 
25624         for (i = 0; i < len; ++i)
25625           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
25626             return true;
25627 
25628         return false;
25629       }
25630 
25631     case TRAIT_EXPR:
25632       {
25633 	tree type2 = TRAIT_EXPR_TYPE2 (expression);
25634 
25635 	if (dependent_type_p (TRAIT_EXPR_TYPE1 (expression)))
25636 	  return true;
25637 
25638 	if (!type2)
25639 	  return false;
25640 
25641 	if (TREE_CODE (type2) != TREE_LIST)
25642 	  return dependent_type_p (type2);
25643 
25644 	for (; type2; type2 = TREE_CHAIN (type2))
25645 	  if (dependent_type_p (TREE_VALUE (type2)))
25646 	    return true;
25647 
25648 	return false;
25649       }
25650 
25651     case MODOP_EXPR:
25652       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
25653 	      || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
25654 
25655     case ARRAY_REF:
25656       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
25657 	      || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
25658 
25659     case ADDR_EXPR:
25660       {
25661 	tree op = TREE_OPERAND (expression, 0);
25662 	return (value_dependent_expression_p (op)
25663 		|| has_value_dependent_address (op));
25664       }
25665 
25666     case REQUIRES_EXPR:
25667       /* Treat all requires-expressions as value-dependent so
25668          we don't try to fold them.  */
25669       return true;
25670 
25671     case TYPE_REQ:
25672       return dependent_type_p (TREE_OPERAND (expression, 0));
25673 
25674     case CALL_EXPR:
25675       {
25676 	if (value_dependent_expression_p (CALL_EXPR_FN (expression)))
25677 	  return true;
25678 	tree fn = get_callee_fndecl (expression);
25679 	int i, nargs;
25680 	nargs = call_expr_nargs (expression);
25681 	for (i = 0; i < nargs; ++i)
25682 	  {
25683 	    tree op = CALL_EXPR_ARG (expression, i);
25684 	    /* In a call to a constexpr member function, look through the
25685 	       implicit ADDR_EXPR on the object argument so that it doesn't
25686 	       cause the call to be considered value-dependent.  We also
25687 	       look through it in potential_constant_expression.  */
25688 	    if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
25689 		&& DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
25690 		&& TREE_CODE (op) == ADDR_EXPR)
25691 	      op = TREE_OPERAND (op, 0);
25692 	    if (value_dependent_expression_p (op))
25693 	      return true;
25694 	  }
25695 	return false;
25696       }
25697 
25698     case TEMPLATE_ID_EXPR:
25699       return variable_concept_p (TREE_OPERAND (expression, 0));
25700 
25701     case CONSTRUCTOR:
25702       {
25703 	unsigned ix;
25704 	tree val;
25705 	if (dependent_type_p (TREE_TYPE (expression)))
25706 	  return true;
25707 	FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
25708 	  if (value_dependent_expression_p (val))
25709 	    return true;
25710 	return false;
25711       }
25712 
25713     case STMT_EXPR:
25714       /* Treat a GNU statement expression as dependent to avoid crashing
25715 	 under instantiate_non_dependent_expr; it can't be constant.  */
25716       return true;
25717 
25718     default:
25719       /* A constant expression is value-dependent if any subexpression is
25720 	 value-dependent.  */
25721       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
25722 	{
25723 	case tcc_reference:
25724 	case tcc_unary:
25725 	case tcc_comparison:
25726 	case tcc_binary:
25727 	case tcc_expression:
25728 	case tcc_vl_exp:
25729 	  {
25730 	    int i, len = cp_tree_operand_length (expression);
25731 
25732 	    for (i = 0; i < len; i++)
25733 	      {
25734 		tree t = TREE_OPERAND (expression, i);
25735 
25736 		/* In some cases, some of the operands may be missing.
25737 		   (For example, in the case of PREDECREMENT_EXPR, the
25738 		   amount to increment by may be missing.)  That doesn't
25739 		   make the expression dependent.  */
25740 		if (t && value_dependent_expression_p (t))
25741 		  return true;
25742 	      }
25743 	  }
25744 	  break;
25745 	default:
25746 	  break;
25747 	}
25748       break;
25749     }
25750 
25751   /* The expression is not value-dependent.  */
25752   return false;
25753 }
25754 
25755 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
25756    [temp.dep.expr].  Note that an expression with no type is
25757    considered dependent.  Other parts of the compiler arrange for an
25758    expression with type-dependent subexpressions to have no type, so
25759    this function doesn't have to be fully recursive.  */
25760 
25761 bool
type_dependent_expression_p(tree expression)25762 type_dependent_expression_p (tree expression)
25763 {
25764   if (!processing_template_decl)
25765     return false;
25766 
25767   if (expression == NULL_TREE || expression == error_mark_node)
25768     return false;
25769 
25770   STRIP_ANY_LOCATION_WRAPPER (expression);
25771 
25772   /* An unresolved name is always dependent.  */
25773   if (identifier_p (expression)
25774       || TREE_CODE (expression) == USING_DECL
25775       || TREE_CODE (expression) == WILDCARD_DECL)
25776     return true;
25777 
25778   /* A lambda-expression in template context is dependent.  dependent_type_p is
25779      true for a lambda in the scope of a class or function template, but that
25780      doesn't cover all template contexts, like a default template argument.  */
25781   if (TREE_CODE (expression) == LAMBDA_EXPR)
25782     return true;
25783 
25784   /* A fold expression is type-dependent. */
25785   if (TREE_CODE (expression) == UNARY_LEFT_FOLD_EXPR
25786       || TREE_CODE (expression) == UNARY_RIGHT_FOLD_EXPR
25787       || TREE_CODE (expression) == BINARY_LEFT_FOLD_EXPR
25788       || TREE_CODE (expression) == BINARY_RIGHT_FOLD_EXPR)
25789     return true;
25790 
25791   /* Some expression forms are never type-dependent.  */
25792   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
25793       || TREE_CODE (expression) == SIZEOF_EXPR
25794       || TREE_CODE (expression) == ALIGNOF_EXPR
25795       || TREE_CODE (expression) == AT_ENCODE_EXPR
25796       || TREE_CODE (expression) == NOEXCEPT_EXPR
25797       || TREE_CODE (expression) == TRAIT_EXPR
25798       || TREE_CODE (expression) == TYPEID_EXPR
25799       || TREE_CODE (expression) == DELETE_EXPR
25800       || TREE_CODE (expression) == VEC_DELETE_EXPR
25801       || TREE_CODE (expression) == THROW_EXPR
25802       || TREE_CODE (expression) == REQUIRES_EXPR)
25803     return false;
25804 
25805   /* The types of these expressions depends only on the type to which
25806      the cast occurs.  */
25807   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
25808       || TREE_CODE (expression) == STATIC_CAST_EXPR
25809       || TREE_CODE (expression) == CONST_CAST_EXPR
25810       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
25811       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
25812       || TREE_CODE (expression) == CAST_EXPR)
25813     return dependent_type_p (TREE_TYPE (expression));
25814 
25815   /* The types of these expressions depends only on the type created
25816      by the expression.  */
25817   if (TREE_CODE (expression) == NEW_EXPR
25818       || TREE_CODE (expression) == VEC_NEW_EXPR)
25819     {
25820       /* For NEW_EXPR tree nodes created inside a template, either
25821 	 the object type itself or a TREE_LIST may appear as the
25822 	 operand 1.  */
25823       tree type = TREE_OPERAND (expression, 1);
25824       if (TREE_CODE (type) == TREE_LIST)
25825 	/* This is an array type.  We need to check array dimensions
25826 	   as well.  */
25827 	return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
25828 	       || value_dependent_expression_p
25829 		    (TREE_OPERAND (TREE_VALUE (type), 1));
25830       else
25831 	return dependent_type_p (type);
25832     }
25833 
25834   if (TREE_CODE (expression) == SCOPE_REF)
25835     {
25836       tree scope = TREE_OPERAND (expression, 0);
25837       tree name = TREE_OPERAND (expression, 1);
25838 
25839       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
25840 	 contains an identifier associated by name lookup with one or more
25841 	 declarations declared with a dependent type, or...a
25842 	 nested-name-specifier or qualified-id that names a member of an
25843 	 unknown specialization.  */
25844       return (type_dependent_expression_p (name)
25845 	      || dependent_scope_p (scope));
25846     }
25847 
25848   if (TREE_CODE (expression) == TEMPLATE_DECL
25849       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
25850     return uses_outer_template_parms (expression);
25851 
25852   if (TREE_CODE (expression) == STMT_EXPR)
25853     expression = stmt_expr_value_expr (expression);
25854 
25855   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
25856     {
25857       tree elt;
25858       unsigned i;
25859 
25860       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
25861 	{
25862 	  if (type_dependent_expression_p (elt))
25863 	    return true;
25864 	}
25865       return false;
25866     }
25867 
25868   /* A static data member of the current instantiation with incomplete
25869      array type is type-dependent, as the definition and specializations
25870      can have different bounds.  */
25871   if (VAR_P (expression)
25872       && DECL_CLASS_SCOPE_P (expression)
25873       && dependent_type_p (DECL_CONTEXT (expression))
25874       && VAR_HAD_UNKNOWN_BOUND (expression))
25875     return true;
25876 
25877   /* An array of unknown bound depending on a variadic parameter, eg:
25878 
25879      template<typename... Args>
25880        void foo (Args... args)
25881        {
25882          int arr[] = { args... };
25883        }
25884 
25885      template<int... vals>
25886        void bar ()
25887        {
25888          int arr[] = { vals... };
25889        }
25890 
25891      If the array has no length and has an initializer, it must be that
25892      we couldn't determine its length in cp_complete_array_type because
25893      it is dependent.  */
25894   if (VAR_P (expression)
25895       && TREE_TYPE (expression) != NULL_TREE
25896       && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
25897       && !TYPE_DOMAIN (TREE_TYPE (expression))
25898       && DECL_INITIAL (expression))
25899    return true;
25900 
25901   /* A function or variable template-id is type-dependent if it has any
25902      dependent template arguments.  */
25903   if (VAR_OR_FUNCTION_DECL_P (expression)
25904       && DECL_LANG_SPECIFIC (expression)
25905       && DECL_TEMPLATE_INFO (expression))
25906     {
25907       /* Consider the innermost template arguments, since those are the ones
25908 	 that come from the template-id; the template arguments for the
25909 	 enclosing class do not make it type-dependent unless they are used in
25910 	 the type of the decl.  */
25911       if (instantiates_primary_template_p (expression)
25912 	  && (any_dependent_template_arguments_p
25913 	      (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
25914 	return true;
25915     }
25916 
25917   /* Otherwise, if the function decl isn't from a dependent scope, it can't be
25918      type-dependent.  Checking this is important for functions with auto return
25919      type, which looks like a dependent type.  */
25920   if (TREE_CODE (expression) == FUNCTION_DECL
25921       && !(DECL_CLASS_SCOPE_P (expression)
25922 	   && dependent_type_p (DECL_CONTEXT (expression)))
25923       && !(DECL_LANG_SPECIFIC (expression)
25924 	   && DECL_FRIEND_P (expression)
25925 	   && (!DECL_FRIEND_CONTEXT (expression)
25926 	       || dependent_type_p (DECL_FRIEND_CONTEXT (expression))))
25927       && !DECL_LOCAL_FUNCTION_P (expression))
25928     {
25929       gcc_assert (!dependent_type_p (TREE_TYPE (expression))
25930 		  || undeduced_auto_decl (expression));
25931       return false;
25932     }
25933 
25934   /* Always dependent, on the number of arguments if nothing else.  */
25935   if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
25936     return true;
25937 
25938   if (TREE_TYPE (expression) == unknown_type_node)
25939     {
25940       if (TREE_CODE (expression) == ADDR_EXPR)
25941 	return type_dependent_expression_p (TREE_OPERAND (expression, 0));
25942       if (TREE_CODE (expression) == COMPONENT_REF
25943 	  || TREE_CODE (expression) == OFFSET_REF)
25944 	{
25945 	  if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
25946 	    return true;
25947 	  expression = TREE_OPERAND (expression, 1);
25948 	  if (identifier_p (expression))
25949 	    return false;
25950 	}
25951       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
25952       if (TREE_CODE (expression) == SCOPE_REF)
25953 	return false;
25954 
25955       if (BASELINK_P (expression))
25956 	{
25957 	  if (BASELINK_OPTYPE (expression)
25958 	      && dependent_type_p (BASELINK_OPTYPE (expression)))
25959 	    return true;
25960 	  expression = BASELINK_FUNCTIONS (expression);
25961 	}
25962 
25963       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
25964 	{
25965 	  if (any_dependent_template_arguments_p
25966 	      (TREE_OPERAND (expression, 1)))
25967 	    return true;
25968 	  expression = TREE_OPERAND (expression, 0);
25969 	  if (identifier_p (expression))
25970 	    return true;
25971 	}
25972 
25973       gcc_assert (TREE_CODE (expression) == OVERLOAD
25974 		  || TREE_CODE (expression) == FUNCTION_DECL);
25975 
25976       for (lkp_iterator iter (expression); iter; ++iter)
25977 	if (type_dependent_expression_p (*iter))
25978 	  return true;
25979 
25980       return false;
25981     }
25982 
25983   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
25984 
25985   /* Dependent type attributes might not have made it from the decl to
25986      the type yet.  */
25987   if (DECL_P (expression)
25988       && any_dependent_type_attributes_p (DECL_ATTRIBUTES (expression)))
25989     return true;
25990 
25991   return (dependent_type_p (TREE_TYPE (expression)));
25992 }
25993 
25994 /* [temp.dep.expr]/5: A class member access expression (5.2.5) is
25995    type-dependent if the expression refers to a member of the current
25996    instantiation and the type of the referenced member is dependent, or the
25997    class member access expression refers to a member of an unknown
25998    specialization.
25999 
26000    This function returns true if the OBJECT in such a class member access
26001    expression is of an unknown specialization.  */
26002 
26003 bool
type_dependent_object_expression_p(tree object)26004 type_dependent_object_expression_p (tree object)
26005 {
26006   /* An IDENTIFIER_NODE can sometimes have a TREE_TYPE, but it's still
26007      dependent.  */
26008   if (TREE_CODE (object) == IDENTIFIER_NODE)
26009     return true;
26010   tree scope = TREE_TYPE (object);
26011   return (!scope || dependent_scope_p (scope));
26012 }
26013 
26014 /* walk_tree callback function for instantiation_dependent_expression_p,
26015    below.  Returns non-zero if a dependent subexpression is found.  */
26016 
26017 static tree
instantiation_dependent_r(tree * tp,int * walk_subtrees,void *)26018 instantiation_dependent_r (tree *tp, int *walk_subtrees,
26019 			   void * /*data*/)
26020 {
26021   if (TYPE_P (*tp))
26022     {
26023       /* We don't have to worry about decltype currently because decltype
26024 	 of an instantiation-dependent expr is a dependent type.  This
26025 	 might change depending on the resolution of DR 1172.  */
26026       *walk_subtrees = false;
26027       return NULL_TREE;
26028     }
26029   enum tree_code code = TREE_CODE (*tp);
26030   switch (code)
26031     {
26032       /* Don't treat an argument list as dependent just because it has no
26033 	 TREE_TYPE.  */
26034     case TREE_LIST:
26035     case TREE_VEC:
26036     case NONTYPE_ARGUMENT_PACK:
26037       return NULL_TREE;
26038 
26039     case TEMPLATE_PARM_INDEX:
26040       if (dependent_type_p (TREE_TYPE (*tp)))
26041 	return *tp;
26042       if (TEMPLATE_PARM_PARAMETER_PACK (*tp))
26043 	return *tp;
26044       /* We'll check value-dependence separately.  */
26045       return NULL_TREE;
26046 
26047       /* Handle expressions with type operands.  */
26048     case SIZEOF_EXPR:
26049     case ALIGNOF_EXPR:
26050     case TYPEID_EXPR:
26051     case AT_ENCODE_EXPR:
26052       {
26053 	tree op = TREE_OPERAND (*tp, 0);
26054 	if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
26055 	  op = TREE_TYPE (op);
26056 	if (TYPE_P (op))
26057 	  {
26058 	    if (dependent_type_p (op))
26059 	      return *tp;
26060 	    else
26061 	      {
26062 		*walk_subtrees = false;
26063 		return NULL_TREE;
26064 	      }
26065 	  }
26066 	break;
26067       }
26068 
26069     case COMPONENT_REF:
26070       if (identifier_p (TREE_OPERAND (*tp, 1)))
26071 	/* In a template, finish_class_member_access_expr creates a
26072 	   COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
26073 	   type-dependent, so that we can check access control at
26074 	   instantiation time (PR 42277).  See also Core issue 1273.  */
26075 	return *tp;
26076       break;
26077 
26078     case SCOPE_REF:
26079       if (instantiation_dependent_scope_ref_p (*tp))
26080 	return *tp;
26081       else
26082 	break;
26083 
26084       /* Treat statement-expressions as dependent.  */
26085     case BIND_EXPR:
26086       return *tp;
26087 
26088       /* Treat requires-expressions as dependent. */
26089     case REQUIRES_EXPR:
26090       return *tp;
26091 
26092     case CALL_EXPR:
26093       /* Treat calls to function concepts as dependent. */
26094       if (function_concept_check_p (*tp))
26095         return *tp;
26096       break;
26097 
26098     case TEMPLATE_ID_EXPR:
26099       /* And variable concepts.  */
26100       if (variable_concept_p (TREE_OPERAND (*tp, 0)))
26101 	return *tp;
26102       break;
26103 
26104     case CONSTRUCTOR:
26105       if (CONSTRUCTOR_IS_DEPENDENT (*tp))
26106 	return *tp;
26107       break;
26108 
26109     default:
26110       break;
26111     }
26112 
26113   if (type_dependent_expression_p (*tp))
26114     return *tp;
26115   else
26116     return NULL_TREE;
26117 }
26118 
26119 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
26120    sense defined by the ABI:
26121 
26122    "An expression is instantiation-dependent if it is type-dependent
26123    or value-dependent, or it has a subexpression that is type-dependent
26124    or value-dependent."
26125 
26126    Except don't actually check value-dependence for unevaluated expressions,
26127    because in sizeof(i) we don't care about the value of i.  Checking
26128    type-dependence will in turn check value-dependence of array bounds/template
26129    arguments as needed.  */
26130 
26131 bool
instantiation_dependent_uneval_expression_p(tree expression)26132 instantiation_dependent_uneval_expression_p (tree expression)
26133 {
26134   tree result;
26135 
26136   if (!processing_template_decl)
26137     return false;
26138 
26139   if (expression == error_mark_node)
26140     return false;
26141 
26142   result = cp_walk_tree_without_duplicates (&expression,
26143 					    instantiation_dependent_r, NULL);
26144   return result != NULL_TREE;
26145 }
26146 
26147 /* As above, but also check value-dependence of the expression as a whole.  */
26148 
26149 bool
instantiation_dependent_expression_p(tree expression)26150 instantiation_dependent_expression_p (tree expression)
26151 {
26152   return (instantiation_dependent_uneval_expression_p (expression)
26153 	  || value_dependent_expression_p (expression));
26154 }
26155 
26156 /* Like type_dependent_expression_p, but it also works while not processing
26157    a template definition, i.e. during substitution or mangling.  */
26158 
26159 bool
type_dependent_expression_p_push(tree expr)26160 type_dependent_expression_p_push (tree expr)
26161 {
26162   bool b;
26163   ++processing_template_decl;
26164   b = type_dependent_expression_p (expr);
26165   --processing_template_decl;
26166   return b;
26167 }
26168 
26169 /* Returns TRUE if ARGS contains a type-dependent expression.  */
26170 
26171 bool
any_type_dependent_arguments_p(const vec<tree,va_gc> * args)26172 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
26173 {
26174   unsigned int i;
26175   tree arg;
26176 
26177   FOR_EACH_VEC_SAFE_ELT (args, i, arg)
26178     {
26179       if (type_dependent_expression_p (arg))
26180 	return true;
26181     }
26182   return false;
26183 }
26184 
26185 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
26186    expressions) contains any type-dependent expressions.  */
26187 
26188 bool
any_type_dependent_elements_p(const_tree list)26189 any_type_dependent_elements_p (const_tree list)
26190 {
26191   for (; list; list = TREE_CHAIN (list))
26192     if (type_dependent_expression_p (TREE_VALUE (list)))
26193       return true;
26194 
26195   return false;
26196 }
26197 
26198 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
26199    expressions) contains any value-dependent expressions.  */
26200 
26201 bool
any_value_dependent_elements_p(const_tree list)26202 any_value_dependent_elements_p (const_tree list)
26203 {
26204   for (; list; list = TREE_CHAIN (list))
26205     if (value_dependent_expression_p (TREE_VALUE (list)))
26206       return true;
26207 
26208   return false;
26209 }
26210 
26211 /* Returns TRUE if the ARG (a template argument) is dependent.  */
26212 
26213 bool
dependent_template_arg_p(tree arg)26214 dependent_template_arg_p (tree arg)
26215 {
26216   if (!processing_template_decl)
26217     return false;
26218 
26219   /* Assume a template argument that was wrongly written by the user
26220      is dependent. This is consistent with what
26221      any_dependent_template_arguments_p [that calls this function]
26222      does.  */
26223   if (!arg || arg == error_mark_node)
26224     return true;
26225 
26226   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
26227     arg = argument_pack_select_arg (arg);
26228 
26229   if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
26230     return true;
26231   if (TREE_CODE (arg) == TEMPLATE_DECL)
26232     {
26233       if (DECL_TEMPLATE_PARM_P (arg))
26234 	return true;
26235       /* A member template of a dependent class is not necessarily
26236 	 type-dependent, but it is a dependent template argument because it
26237 	 will be a member of an unknown specialization to that template.  */
26238       tree scope = CP_DECL_CONTEXT (arg);
26239       return TYPE_P (scope) && dependent_type_p (scope);
26240     }
26241   else if (ARGUMENT_PACK_P (arg))
26242     {
26243       tree args = ARGUMENT_PACK_ARGS (arg);
26244       int i, len = TREE_VEC_LENGTH (args);
26245       for (i = 0; i < len; ++i)
26246         {
26247           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
26248             return true;
26249         }
26250 
26251       return false;
26252     }
26253   else if (TYPE_P (arg))
26254     return dependent_type_p (arg);
26255   else
26256     return (type_dependent_expression_p (arg)
26257 	    || value_dependent_expression_p (arg));
26258 }
26259 
26260 /* Returns true if ARGS (a collection of template arguments) contains
26261    any types that require structural equality testing.  */
26262 
26263 bool
any_template_arguments_need_structural_equality_p(tree args)26264 any_template_arguments_need_structural_equality_p (tree args)
26265 {
26266   int i;
26267   int j;
26268 
26269   if (!args)
26270     return false;
26271   if (args == error_mark_node)
26272     return true;
26273 
26274   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
26275     {
26276       tree level = TMPL_ARGS_LEVEL (args, i + 1);
26277       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
26278 	{
26279 	  tree arg = TREE_VEC_ELT (level, j);
26280 	  tree packed_args = NULL_TREE;
26281 	  int k, len = 1;
26282 
26283 	  if (ARGUMENT_PACK_P (arg))
26284 	    {
26285 	      /* Look inside the argument pack.  */
26286 	      packed_args = ARGUMENT_PACK_ARGS (arg);
26287 	      len = TREE_VEC_LENGTH (packed_args);
26288 	    }
26289 
26290 	  for (k = 0; k < len; ++k)
26291 	    {
26292 	      if (packed_args)
26293 		arg = TREE_VEC_ELT (packed_args, k);
26294 
26295 	      if (error_operand_p (arg))
26296 		return true;
26297 	      else if (TREE_CODE (arg) == TEMPLATE_DECL)
26298 		continue;
26299 	      else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
26300 		return true;
26301 	      else if (!TYPE_P (arg) && TREE_TYPE (arg)
26302 		       && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
26303 		return true;
26304 	    }
26305 	}
26306     }
26307 
26308   return false;
26309 }
26310 
26311 /* Returns true if ARGS (a collection of template arguments) contains
26312    any dependent arguments.  */
26313 
26314 bool
any_dependent_template_arguments_p(const_tree args)26315 any_dependent_template_arguments_p (const_tree args)
26316 {
26317   int i;
26318   int j;
26319 
26320   if (!args)
26321     return false;
26322   if (args == error_mark_node)
26323     return true;
26324 
26325   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
26326     {
26327       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
26328       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
26329 	if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
26330 	  return true;
26331     }
26332 
26333   return false;
26334 }
26335 
26336 /* Returns true if ARGS contains any errors.  */
26337 
26338 bool
any_erroneous_template_args_p(const_tree args)26339 any_erroneous_template_args_p (const_tree args)
26340 {
26341   int i;
26342   int j;
26343 
26344   if (args == error_mark_node)
26345     return true;
26346 
26347   if (args && TREE_CODE (args) != TREE_VEC)
26348     {
26349       if (tree ti = get_template_info (args))
26350 	args = TI_ARGS (ti);
26351       else
26352 	args = NULL_TREE;
26353     }
26354 
26355   if (!args)
26356     return false;
26357 
26358   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
26359     {
26360       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
26361       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
26362 	if (error_operand_p (TREE_VEC_ELT (level, j)))
26363 	  return true;
26364     }
26365 
26366   return false;
26367 }
26368 
26369 /* Returns TRUE if the template TMPL is type-dependent.  */
26370 
26371 bool
dependent_template_p(tree tmpl)26372 dependent_template_p (tree tmpl)
26373 {
26374   if (TREE_CODE (tmpl) == OVERLOAD)
26375     {
26376       for (lkp_iterator iter (tmpl); iter; ++iter)
26377 	if (dependent_template_p (*iter))
26378 	  return true;
26379       return false;
26380     }
26381 
26382   /* Template template parameters are dependent.  */
26383   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
26384       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
26385     return true;
26386   /* So are names that have not been looked up.  */
26387   if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
26388     return true;
26389   return false;
26390 }
26391 
26392 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
26393 
26394 bool
dependent_template_id_p(tree tmpl,tree args)26395 dependent_template_id_p (tree tmpl, tree args)
26396 {
26397   return (dependent_template_p (tmpl)
26398 	  || any_dependent_template_arguments_p (args));
26399 }
26400 
26401 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
26402    are dependent.  */
26403 
26404 bool
dependent_omp_for_p(tree declv,tree initv,tree condv,tree incrv)26405 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
26406 {
26407   int i;
26408 
26409   if (!processing_template_decl)
26410     return false;
26411 
26412   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
26413     {
26414       tree decl = TREE_VEC_ELT (declv, i);
26415       tree init = TREE_VEC_ELT (initv, i);
26416       tree cond = TREE_VEC_ELT (condv, i);
26417       tree incr = TREE_VEC_ELT (incrv, i);
26418 
26419       if (type_dependent_expression_p (decl)
26420 	  || TREE_CODE (decl) == SCOPE_REF)
26421 	return true;
26422 
26423       if (init && type_dependent_expression_p (init))
26424 	return true;
26425 
26426       if (cond == global_namespace)
26427 	return true;
26428 
26429       if (type_dependent_expression_p (cond))
26430 	return true;
26431 
26432       if (COMPARISON_CLASS_P (cond)
26433 	  && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
26434 	      || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
26435 	return true;
26436 
26437       if (TREE_CODE (incr) == MODOP_EXPR)
26438 	{
26439 	  if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
26440 	      || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
26441 	    return true;
26442 	}
26443       else if (type_dependent_expression_p (incr))
26444 	return true;
26445       else if (TREE_CODE (incr) == MODIFY_EXPR)
26446 	{
26447 	  if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
26448 	    return true;
26449 	  else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
26450 	    {
26451 	      tree t = TREE_OPERAND (incr, 1);
26452 	      if (type_dependent_expression_p (TREE_OPERAND (t, 0))
26453 		  || type_dependent_expression_p (TREE_OPERAND (t, 1)))
26454 		return true;
26455 
26456 	      /* If this loop has a class iterator with != comparison
26457 		 with increment other than i++/++i/i--/--i, make sure the
26458 		 increment is constant.  */
26459 	      if (CLASS_TYPE_P (TREE_TYPE (decl))
26460 		  && TREE_CODE (cond) == NE_EXPR)
26461 		{
26462 		  if (TREE_OPERAND (t, 0) == decl)
26463 		    t = TREE_OPERAND (t, 1);
26464 		  else
26465 		    t = TREE_OPERAND (t, 0);
26466 		  if (TREE_CODE (t) != INTEGER_CST)
26467 		    return true;
26468 		}
26469 	    }
26470 	}
26471     }
26472 
26473   return false;
26474 }
26475 
26476 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
26477    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
26478    no such TYPE can be found.  Note that this function peers inside
26479    uninstantiated templates and therefore should be used only in
26480    extremely limited situations.  ONLY_CURRENT_P restricts this
26481    peering to the currently open classes hierarchy (which is required
26482    when comparing types).  */
26483 
26484 tree
resolve_typename_type(tree type,bool only_current_p)26485 resolve_typename_type (tree type, bool only_current_p)
26486 {
26487   tree scope;
26488   tree name;
26489   tree decl;
26490   int quals;
26491   tree pushed_scope;
26492   tree result;
26493 
26494   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
26495 
26496   scope = TYPE_CONTEXT (type);
26497   /* We shouldn't have built a TYPENAME_TYPE with a non-dependent scope.  */
26498   gcc_checking_assert (uses_template_parms (scope));
26499 
26500   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
26501      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
26502      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
26503      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
26504      identifier  of the TYPENAME_TYPE anymore.
26505      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
26506      TYPENAME_TYPE instead, we avoid messing up with a possible
26507      typedef variant case.  */
26508   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
26509 
26510   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
26511      it first before we can figure out what NAME refers to.  */
26512   if (TREE_CODE (scope) == TYPENAME_TYPE)
26513     {
26514       if (TYPENAME_IS_RESOLVING_P (scope))
26515 	/* Given a class template A with a dependent base with nested type C,
26516 	   typedef typename A::C::C C will land us here, as trying to resolve
26517 	   the initial A::C leads to the local C typedef, which leads back to
26518 	   A::C::C.  So we break the recursion now.  */
26519 	return type;
26520       else
26521 	scope = resolve_typename_type (scope, only_current_p);
26522     }
26523   /* If we don't know what SCOPE refers to, then we cannot resolve the
26524      TYPENAME_TYPE.  */
26525   if (!CLASS_TYPE_P (scope))
26526     return type;
26527   /* If this is a typedef, we don't want to look inside (c++/11987).  */
26528   if (typedef_variant_p (type))
26529     return type;
26530   /* If SCOPE isn't the template itself, it will not have a valid
26531      TYPE_FIELDS list.  */
26532   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
26533     /* scope is either the template itself or a compatible instantiation
26534        like X<T>, so look up the name in the original template.  */
26535     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
26536   /* If scope has no fields, it can't be a current instantiation.  Check this
26537      before currently_open_class to avoid infinite recursion (71515).  */
26538   if (!TYPE_FIELDS (scope))
26539     return type;
26540   /* If the SCOPE is not the current instantiation, there's no reason
26541      to look inside it.  */
26542   if (only_current_p && !currently_open_class (scope))
26543     return type;
26544   /* Enter the SCOPE so that name lookup will be resolved as if we
26545      were in the class definition.  In particular, SCOPE will no
26546      longer be considered a dependent type.  */
26547   pushed_scope = push_scope (scope);
26548   /* Look up the declaration.  */
26549   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
26550 			tf_warning_or_error);
26551 
26552   result = NULL_TREE;
26553 
26554   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
26555      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
26556   tree fullname = TYPENAME_TYPE_FULLNAME (type);
26557   if (!decl)
26558     /*nop*/;
26559   else if (identifier_p (fullname)
26560 	   && TREE_CODE (decl) == TYPE_DECL)
26561     {
26562       result = TREE_TYPE (decl);
26563       if (result == error_mark_node)
26564 	result = NULL_TREE;
26565     }
26566   else if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR
26567 	   && DECL_CLASS_TEMPLATE_P (decl))
26568     {
26569       /* Obtain the template and the arguments.  */
26570       tree tmpl = TREE_OPERAND (fullname, 0);
26571       if (TREE_CODE (tmpl) == IDENTIFIER_NODE)
26572 	{
26573 	  /* We get here with a plain identifier because a previous tentative
26574 	     parse of the nested-name-specifier as part of a ptr-operator saw
26575 	     ::template X<A>.  The use of ::template is necessary in a
26576 	     ptr-operator, but wrong in a declarator-id.
26577 
26578 	     [temp.names]: In a qualified-id of a declarator-id, the keyword
26579 	     template shall not appear at the top level.  */
26580 	  pedwarn (cp_expr_loc_or_loc (fullname, input_location), OPT_Wpedantic,
26581 		   "keyword %<template%> not allowed in declarator-id");
26582 	  tmpl = decl;
26583 	}
26584       tree args = TREE_OPERAND (fullname, 1);
26585       /* Instantiate the template.  */
26586       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
26587 				      /*entering_scope=*/true,
26588 				      tf_error | tf_user);
26589       if (result == error_mark_node)
26590 	result = NULL_TREE;
26591     }
26592 
26593   /* Leave the SCOPE.  */
26594   if (pushed_scope)
26595     pop_scope (pushed_scope);
26596 
26597   /* If we failed to resolve it, return the original typename.  */
26598   if (!result)
26599     return type;
26600 
26601   /* If lookup found a typename type, resolve that too.  */
26602   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
26603     {
26604       /* Ill-formed programs can cause infinite recursion here, so we
26605 	 must catch that.  */
26606       TYPENAME_IS_RESOLVING_P (result) = 1;
26607       result = resolve_typename_type (result, only_current_p);
26608       TYPENAME_IS_RESOLVING_P (result) = 0;
26609     }
26610 
26611   /* Qualify the resulting type.  */
26612   quals = cp_type_quals (type);
26613   if (quals)
26614     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
26615 
26616   return result;
26617 }
26618 
26619 /* EXPR is an expression which is not type-dependent.  Return a proxy
26620    for EXPR that can be used to compute the types of larger
26621    expressions containing EXPR.  */
26622 
26623 tree
build_non_dependent_expr(tree expr)26624 build_non_dependent_expr (tree expr)
26625 {
26626   tree orig_expr = expr;
26627   tree inner_expr;
26628 
26629   /* When checking, try to get a constant value for all non-dependent
26630      expressions in order to expose bugs in *_dependent_expression_p
26631      and constexpr.  This can affect code generation, see PR70704, so
26632      only do this for -fchecking=2.  */
26633   if (flag_checking > 1
26634       && cxx_dialect >= cxx11
26635       /* Don't do this during nsdmi parsing as it can lead to
26636 	 unexpected recursive instantiations.  */
26637       && !parsing_nsdmi ()
26638       /* Don't do this during concept expansion either and for
26639          the same reason.  */
26640       && !expanding_concept ())
26641     fold_non_dependent_expr (expr, tf_none);
26642 
26643   STRIP_ANY_LOCATION_WRAPPER (expr);
26644 
26645   /* Preserve OVERLOADs; the functions must be available to resolve
26646      types.  */
26647   inner_expr = expr;
26648   if (TREE_CODE (inner_expr) == STMT_EXPR)
26649     inner_expr = stmt_expr_value_expr (inner_expr);
26650   if (TREE_CODE (inner_expr) == ADDR_EXPR)
26651     inner_expr = TREE_OPERAND (inner_expr, 0);
26652   if (TREE_CODE (inner_expr) == COMPONENT_REF)
26653     inner_expr = TREE_OPERAND (inner_expr, 1);
26654   if (is_overloaded_fn (inner_expr)
26655       || TREE_CODE (inner_expr) == OFFSET_REF)
26656     return orig_expr;
26657   /* There is no need to return a proxy for a variable or enumerator.  */
26658   if (VAR_P (expr) || TREE_CODE (expr) == CONST_DECL)
26659     return orig_expr;
26660   /* Preserve string constants; conversions from string constants to
26661      "char *" are allowed, even though normally a "const char *"
26662      cannot be used to initialize a "char *".  */
26663   if (TREE_CODE (expr) == STRING_CST)
26664     return orig_expr;
26665   /* Preserve void and arithmetic constants, as an optimization -- there is no
26666      reason to create a new node.  */
26667   if (TREE_CODE (expr) == VOID_CST
26668       || TREE_CODE (expr) == INTEGER_CST
26669       || TREE_CODE (expr) == REAL_CST)
26670     return orig_expr;
26671   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
26672      There is at least one place where we want to know that a
26673      particular expression is a throw-expression: when checking a ?:
26674      expression, there are special rules if the second or third
26675      argument is a throw-expression.  */
26676   if (TREE_CODE (expr) == THROW_EXPR)
26677     return orig_expr;
26678 
26679   /* Don't wrap an initializer list, we need to be able to look inside.  */
26680   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
26681     return orig_expr;
26682 
26683   /* Don't wrap a dummy object, we need to be able to test for it.  */
26684   if (is_dummy_object (expr))
26685     return orig_expr;
26686 
26687   if (TREE_CODE (expr) == COND_EXPR)
26688     return build3 (COND_EXPR,
26689 		   TREE_TYPE (expr),
26690 		   TREE_OPERAND (expr, 0),
26691 		   (TREE_OPERAND (expr, 1)
26692 		    ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
26693 		    : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
26694 		   build_non_dependent_expr (TREE_OPERAND (expr, 2)));
26695   if (TREE_CODE (expr) == COMPOUND_EXPR
26696       && !COMPOUND_EXPR_OVERLOADED (expr))
26697     return build2 (COMPOUND_EXPR,
26698 		   TREE_TYPE (expr),
26699 		   TREE_OPERAND (expr, 0),
26700 		   build_non_dependent_expr (TREE_OPERAND (expr, 1)));
26701 
26702   /* If the type is unknown, it can't really be non-dependent */
26703   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
26704 
26705   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
26706   return build1_loc (EXPR_LOCATION (orig_expr), NON_DEPENDENT_EXPR,
26707 		     TREE_TYPE (expr), expr);
26708 }
26709 
26710 /* ARGS is a vector of expressions as arguments to a function call.
26711    Replace the arguments with equivalent non-dependent expressions.
26712    This modifies ARGS in place.  */
26713 
26714 void
make_args_non_dependent(vec<tree,va_gc> * args)26715 make_args_non_dependent (vec<tree, va_gc> *args)
26716 {
26717   unsigned int ix;
26718   tree arg;
26719 
26720   FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
26721     {
26722       tree newarg = build_non_dependent_expr (arg);
26723       if (newarg != arg)
26724 	(*args)[ix] = newarg;
26725     }
26726 }
26727 
26728 /* Returns a type which represents 'auto' or 'decltype(auto)'.  We use a
26729    TEMPLATE_TYPE_PARM with a level one deeper than the actual template
26730    parms.  If set_canonical is true, we set TYPE_CANONICAL on it.  */
26731 
26732 static tree
make_auto_1(tree name,bool set_canonical)26733 make_auto_1 (tree name, bool set_canonical)
26734 {
26735   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
26736   TYPE_NAME (au) = build_decl (input_location,
26737 			       TYPE_DECL, name, au);
26738   TYPE_STUB_DECL (au) = TYPE_NAME (au);
26739   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
26740     (0, processing_template_decl + 1, processing_template_decl + 1,
26741      TYPE_NAME (au), NULL_TREE);
26742   if (set_canonical)
26743     TYPE_CANONICAL (au) = canonical_type_parameter (au);
26744   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
26745   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
26746 
26747   return au;
26748 }
26749 
26750 tree
make_decltype_auto(void)26751 make_decltype_auto (void)
26752 {
26753   return make_auto_1 (decltype_auto_identifier, true);
26754 }
26755 
26756 tree
make_auto(void)26757 make_auto (void)
26758 {
26759   return make_auto_1 (auto_identifier, true);
26760 }
26761 
26762 /* Return a C++17 deduction placeholder for class template TMPL.  */
26763 
26764 tree
make_template_placeholder(tree tmpl)26765 make_template_placeholder (tree tmpl)
26766 {
26767   tree t = make_auto_1 (auto_identifier, false);
26768   CLASS_PLACEHOLDER_TEMPLATE (t) = tmpl;
26769   /* Our canonical type depends on the placeholder.  */
26770   TYPE_CANONICAL (t) = canonical_type_parameter (t);
26771   return t;
26772 }
26773 
26774 /* True iff T is a C++17 class template deduction placeholder.  */
26775 
26776 bool
template_placeholder_p(tree t)26777 template_placeholder_p (tree t)
26778 {
26779   return is_auto (t) && CLASS_PLACEHOLDER_TEMPLATE (t);
26780 }
26781 
26782 /* Make a "constrained auto" type-specifier. This is an
26783    auto type with constraints that must be associated after
26784    deduction.  The constraint is formed from the given
26785    CONC and its optional sequence of arguments, which are
26786    non-null if written as partial-concept-id.  */
26787 
26788 tree
make_constrained_auto(tree con,tree args)26789 make_constrained_auto (tree con, tree args)
26790 {
26791   tree type = make_auto_1 (auto_identifier, false);
26792 
26793   /* Build the constraint. */
26794   tree tmpl = DECL_TI_TEMPLATE (con);
26795   tree expr = VAR_P (con) ? tmpl : ovl_make (tmpl);
26796   expr = build_concept_check (expr, type, args);
26797 
26798   tree constr = normalize_expression (expr);
26799   PLACEHOLDER_TYPE_CONSTRAINTS (type) = constr;
26800 
26801   /* Our canonical type depends on the constraint.  */
26802   TYPE_CANONICAL (type) = canonical_type_parameter (type);
26803 
26804   /* Attach the constraint to the type declaration. */
26805   tree decl = TYPE_NAME (type);
26806   return decl;
26807 }
26808 
26809 /* Given type ARG, return std::initializer_list<ARG>.  */
26810 
26811 static tree
listify(tree arg)26812 listify (tree arg)
26813 {
26814   tree std_init_list = get_namespace_binding (std_node, init_list_identifier);
26815 
26816   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
26817     {
26818       gcc_rich_location richloc (input_location);
26819       maybe_add_include_fixit (&richloc, "<initializer_list>", false);
26820       error_at (&richloc,
26821 		"deducing from brace-enclosed initializer list"
26822 		" requires %<#include <initializer_list>%>");
26823 
26824       return error_mark_node;
26825     }
26826   tree argvec = make_tree_vec (1);
26827   TREE_VEC_ELT (argvec, 0) = arg;
26828 
26829   return lookup_template_class (std_init_list, argvec, NULL_TREE,
26830 				NULL_TREE, 0, tf_warning_or_error);
26831 }
26832 
26833 /* Replace auto in TYPE with std::initializer_list<auto>.  */
26834 
26835 static tree
listify_autos(tree type,tree auto_node)26836 listify_autos (tree type, tree auto_node)
26837 {
26838   tree init_auto = listify (auto_node);
26839   tree argvec = make_tree_vec (1);
26840   TREE_VEC_ELT (argvec, 0) = init_auto;
26841   if (processing_template_decl)
26842     argvec = add_to_template_args (current_template_args (), argvec);
26843   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
26844 }
26845 
26846 /* Hash traits for hashing possibly constrained 'auto'
26847    TEMPLATE_TYPE_PARMs for use by do_auto_deduction.  */
26848 
26849 struct auto_hash : default_hash_traits<tree>
26850 {
26851   static inline hashval_t hash (tree);
26852   static inline bool equal (tree, tree);
26853 };
26854 
26855 /* Hash the 'auto' T.  */
26856 
26857 inline hashval_t
hash(tree t)26858 auto_hash::hash (tree t)
26859 {
26860   if (tree c = NON_ERROR (PLACEHOLDER_TYPE_CONSTRAINTS (t)))
26861     /* Matching constrained-type-specifiers denote the same template
26862        parameter, so hash the constraint.  */
26863     return hash_placeholder_constraint (c);
26864   else
26865     /* But unconstrained autos are all separate, so just hash the pointer.  */
26866     return iterative_hash_object (t, 0);
26867 }
26868 
26869 /* Compare two 'auto's.  */
26870 
26871 inline bool
equal(tree t1,tree t2)26872 auto_hash::equal (tree t1, tree t2)
26873 {
26874   if (t1 == t2)
26875     return true;
26876 
26877   tree c1 = PLACEHOLDER_TYPE_CONSTRAINTS (t1);
26878   tree c2 = PLACEHOLDER_TYPE_CONSTRAINTS (t2);
26879 
26880   /* Two unconstrained autos are distinct.  */
26881   if (!c1 || !c2)
26882     return false;
26883 
26884   return equivalent_placeholder_constraints (c1, c2);
26885 }
26886 
26887 /* for_each_template_parm callback for extract_autos: if t is a (possibly
26888    constrained) auto, add it to the vector.  */
26889 
26890 static int
extract_autos_r(tree t,void * data)26891 extract_autos_r (tree t, void *data)
26892 {
26893   hash_table<auto_hash> &hash = *(hash_table<auto_hash>*)data;
26894   if (is_auto (t))
26895     {
26896       /* All the autos were built with index 0; fix that up now.  */
26897       tree *p = hash.find_slot (t, INSERT);
26898       unsigned idx;
26899       if (*p)
26900 	/* If this is a repeated constrained-type-specifier, use the index we
26901 	   chose before.  */
26902 	idx = TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (*p));
26903       else
26904 	{
26905 	  /* Otherwise this is new, so use the current count.  */
26906 	  *p = t;
26907 	  idx = hash.elements () - 1;
26908 	}
26909       TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (t)) = idx;
26910     }
26911 
26912   /* Always keep walking.  */
26913   return 0;
26914 }
26915 
26916 /* Return a TREE_VEC of the 'auto's used in type under the Concepts TS, which
26917    says they can appear anywhere in the type.  */
26918 
26919 static tree
extract_autos(tree type)26920 extract_autos (tree type)
26921 {
26922   hash_set<tree> visited;
26923   hash_table<auto_hash> hash (2);
26924 
26925   for_each_template_parm (type, extract_autos_r, &hash, &visited, true);
26926 
26927   tree tree_vec = make_tree_vec (hash.elements());
26928   for (hash_table<auto_hash>::iterator iter = hash.begin();
26929        iter != hash.end(); ++iter)
26930     {
26931       tree elt = *iter;
26932       unsigned i = TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (elt));
26933       TREE_VEC_ELT (tree_vec, i)
26934 	= build_tree_list (NULL_TREE, TYPE_NAME (elt));
26935     }
26936 
26937   return tree_vec;
26938 }
26939 
26940 /* The stem for deduction guide names.  */
26941 const char *const dguide_base = "__dguide_";
26942 
26943 /* Return the name for a deduction guide for class template TMPL.  */
26944 
26945 tree
dguide_name(tree tmpl)26946 dguide_name (tree tmpl)
26947 {
26948   tree type = (TYPE_P (tmpl) ? tmpl : TREE_TYPE (tmpl));
26949   tree tname = TYPE_IDENTIFIER (type);
26950   char *buf = (char *) alloca (1 + strlen (dguide_base)
26951 			       + IDENTIFIER_LENGTH (tname));
26952   memcpy (buf, dguide_base, strlen (dguide_base));
26953   memcpy (buf + strlen (dguide_base), IDENTIFIER_POINTER (tname),
26954 	  IDENTIFIER_LENGTH (tname) + 1);
26955   tree dname = get_identifier (buf);
26956   TREE_TYPE (dname) = type;
26957   return dname;
26958 }
26959 
26960 /* True if NAME is the name of a deduction guide.  */
26961 
26962 bool
dguide_name_p(tree name)26963 dguide_name_p (tree name)
26964 {
26965   return (TREE_CODE (name) == IDENTIFIER_NODE
26966 	  && TREE_TYPE (name)
26967 	  && !strncmp (IDENTIFIER_POINTER (name), dguide_base,
26968 		       strlen (dguide_base)));
26969 }
26970 
26971 /* True if FN is a deduction guide.  */
26972 
26973 bool
deduction_guide_p(const_tree fn)26974 deduction_guide_p (const_tree fn)
26975 {
26976   if (DECL_P (fn))
26977     if (tree name = DECL_NAME (fn))
26978       return dguide_name_p (name);
26979   return false;
26980 }
26981 
26982 /* True if FN is the copy deduction guide, i.e. A(A)->A.  */
26983 
26984 bool
copy_guide_p(const_tree fn)26985 copy_guide_p (const_tree fn)
26986 {
26987   gcc_assert (deduction_guide_p (fn));
26988   if (!DECL_ARTIFICIAL (fn))
26989     return false;
26990   tree parms = FUNCTION_FIRST_USER_PARMTYPE (DECL_TI_TEMPLATE (fn));
26991   return (TREE_CHAIN (parms) == void_list_node
26992 	  && same_type_p (TREE_VALUE (parms), TREE_TYPE (DECL_NAME (fn))));
26993 }
26994 
26995 /* True if FN is a guide generated from a constructor template.  */
26996 
26997 bool
template_guide_p(const_tree fn)26998 template_guide_p (const_tree fn)
26999 {
27000   gcc_assert (deduction_guide_p (fn));
27001   if (!DECL_ARTIFICIAL (fn))
27002     return false;
27003   tree tmpl = DECL_TI_TEMPLATE (fn);
27004   if (tree org = DECL_ABSTRACT_ORIGIN (tmpl))
27005     return PRIMARY_TEMPLATE_P (org);
27006   return false;
27007 }
27008 
27009 /* OLDDECL is a _DECL for a template parameter.  Return a similar parameter at
27010    LEVEL:INDEX, using tsubst_args and complain for substitution into non-type
27011    template parameter types.  Note that the handling of template template
27012    parameters relies on current_template_parms being set appropriately for the
27013    new template.  */
27014 
27015 static tree
rewrite_template_parm(tree olddecl,unsigned index,unsigned level,tree tsubst_args,tsubst_flags_t complain)27016 rewrite_template_parm (tree olddecl, unsigned index, unsigned level,
27017 		       tree tsubst_args, tsubst_flags_t complain)
27018 {
27019   if (olddecl == error_mark_node)
27020     return error_mark_node;
27021 
27022   tree oldidx = get_template_parm_index (olddecl);
27023 
27024   tree newtype;
27025   if (TREE_CODE (olddecl) == TYPE_DECL
27026       || TREE_CODE (olddecl) == TEMPLATE_DECL)
27027     {
27028       tree oldtype = TREE_TYPE (olddecl);
27029       newtype = cxx_make_type (TREE_CODE (oldtype));
27030       TYPE_MAIN_VARIANT (newtype) = newtype;
27031       if (TREE_CODE (oldtype) == TEMPLATE_TYPE_PARM)
27032 	TEMPLATE_TYPE_PARM_FOR_CLASS (newtype)
27033 	  = TEMPLATE_TYPE_PARM_FOR_CLASS (oldtype);
27034     }
27035   else
27036     {
27037       newtype = TREE_TYPE (olddecl);
27038       if (type_uses_auto (newtype))
27039 	{
27040 	  // Substitute once to fix references to other template parameters.
27041 	  newtype = tsubst (newtype, tsubst_args,
27042 			    complain|tf_partial, NULL_TREE);
27043 	  // Now substitute again to reduce the level of the auto.
27044 	  newtype = tsubst (newtype, current_template_args (),
27045 			    complain, NULL_TREE);
27046 	}
27047       else
27048 	newtype = tsubst (newtype, tsubst_args,
27049 			  complain, NULL_TREE);
27050     }
27051 
27052   tree newdecl
27053     = build_decl (DECL_SOURCE_LOCATION (olddecl), TREE_CODE (olddecl),
27054 		  DECL_NAME (olddecl), newtype);
27055   SET_DECL_TEMPLATE_PARM_P (newdecl);
27056 
27057   tree newidx;
27058   if (TREE_CODE (olddecl) == TYPE_DECL
27059       || TREE_CODE (olddecl) == TEMPLATE_DECL)
27060     {
27061       newidx = TEMPLATE_TYPE_PARM_INDEX (newtype)
27062 	= build_template_parm_index (index, level, level,
27063 				     newdecl, newtype);
27064       TEMPLATE_PARM_PARAMETER_PACK (newidx)
27065 	= TEMPLATE_PARM_PARAMETER_PACK (oldidx);
27066       TYPE_STUB_DECL (newtype) = TYPE_NAME (newtype) = newdecl;
27067       TYPE_CANONICAL (newtype) = canonical_type_parameter (newtype);
27068 
27069       if (TREE_CODE (olddecl) == TEMPLATE_DECL)
27070 	{
27071 	  DECL_TEMPLATE_RESULT (newdecl)
27072 	    = build_decl (DECL_SOURCE_LOCATION (olddecl), TYPE_DECL,
27073 			  DECL_NAME (olddecl), newtype);
27074 	  DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (newdecl)) = true;
27075 	  // First create a copy (ttargs) of tsubst_args with an
27076 	  // additional level for the template template parameter's own
27077 	  // template parameters (ttparms).
27078 	  tree ttparms = (INNERMOST_TEMPLATE_PARMS
27079 			  (DECL_TEMPLATE_PARMS (olddecl)));
27080 	  const int depth = TMPL_ARGS_DEPTH (tsubst_args);
27081 	  tree ttargs = make_tree_vec (depth + 1);
27082 	  for (int i = 0; i < depth; ++i)
27083 	    TREE_VEC_ELT (ttargs, i) = TREE_VEC_ELT (tsubst_args, i);
27084 	  TREE_VEC_ELT (ttargs, depth)
27085 	    = template_parms_level_to_args (ttparms);
27086 	  // Substitute ttargs into ttparms to fix references to
27087 	  // other template parameters.
27088 	  ttparms = tsubst_template_parms_level (ttparms, ttargs,
27089 						 complain|tf_partial);
27090 	  // Now substitute again with args based on tparms, to reduce
27091 	  // the level of the ttparms.
27092 	  ttargs = current_template_args ();
27093 	  ttparms = tsubst_template_parms_level (ttparms, ttargs,
27094 						 complain);
27095 	  // Finally, tack the adjusted parms onto tparms.
27096 	  ttparms = tree_cons (size_int (depth), ttparms,
27097 			       current_template_parms);
27098 	  DECL_TEMPLATE_PARMS (newdecl) = ttparms;
27099 	}
27100     }
27101   else
27102     {
27103       tree oldconst = TEMPLATE_PARM_DECL (oldidx);
27104       tree newconst
27105 	= build_decl (DECL_SOURCE_LOCATION (oldconst),
27106 		      TREE_CODE (oldconst),
27107 		      DECL_NAME (oldconst), newtype);
27108       TREE_CONSTANT (newconst) = TREE_CONSTANT (newdecl)
27109 	= TREE_READONLY (newconst) = TREE_READONLY (newdecl) = true;
27110       SET_DECL_TEMPLATE_PARM_P (newconst);
27111       newidx = build_template_parm_index (index, level, level,
27112 					  newconst, newtype);
27113       TEMPLATE_PARM_PARAMETER_PACK (newidx)
27114 	= TEMPLATE_PARM_PARAMETER_PACK (oldidx);
27115       DECL_INITIAL (newdecl) = DECL_INITIAL (newconst) = newidx;
27116     }
27117 
27118   return newdecl;
27119 }
27120 
27121 /* Returns a C++17 class deduction guide template based on the constructor
27122    CTOR.  As a special case, CTOR can be a RECORD_TYPE for an implicit default
27123    guide, or REFERENCE_TYPE for an implicit copy/move guide.  */
27124 
27125 static tree
build_deduction_guide(tree ctor,tree outer_args,tsubst_flags_t complain)27126 build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain)
27127 {
27128   tree type, tparms, targs, fparms, fargs, ci;
27129   bool memtmpl = false;
27130   bool explicit_p;
27131   location_t loc;
27132   tree fn_tmpl = NULL_TREE;
27133 
27134   if (TYPE_P (ctor))
27135     {
27136       type = ctor;
27137       bool copy_p = TYPE_REF_P (type);
27138       if (copy_p)
27139 	{
27140 	  type = TREE_TYPE (type);
27141 	  fparms = tree_cons (NULL_TREE, type, void_list_node);
27142 	}
27143       else
27144 	fparms = void_list_node;
27145 
27146       tree ctmpl = CLASSTYPE_TI_TEMPLATE (type);
27147       tparms = DECL_TEMPLATE_PARMS (ctmpl);
27148       targs = CLASSTYPE_TI_ARGS (type);
27149       ci = NULL_TREE;
27150       fargs = NULL_TREE;
27151       loc = DECL_SOURCE_LOCATION (ctmpl);
27152       explicit_p = false;
27153     }
27154   else
27155     {
27156       ++processing_template_decl;
27157       bool ok = true;
27158 
27159       fn_tmpl
27160 	= (TREE_CODE (ctor) == TEMPLATE_DECL ? ctor
27161 	   : DECL_TI_TEMPLATE (ctor));
27162       if (outer_args)
27163 	fn_tmpl = tsubst (fn_tmpl, outer_args, complain, ctor);
27164       ctor = DECL_TEMPLATE_RESULT (fn_tmpl);
27165 
27166       type = DECL_CONTEXT (ctor);
27167 
27168       tparms = DECL_TEMPLATE_PARMS (fn_tmpl);
27169       /* If type is a member class template, DECL_TI_ARGS (ctor) will have
27170 	 fully specialized args for the enclosing class.  Strip those off, as
27171 	 the deduction guide won't have those template parameters.  */
27172       targs = get_innermost_template_args (DECL_TI_ARGS (ctor),
27173 						TMPL_PARMS_DEPTH (tparms));
27174       /* Discard the 'this' parameter.  */
27175       fparms = FUNCTION_ARG_CHAIN (ctor);
27176       fargs = TREE_CHAIN (DECL_ARGUMENTS (ctor));
27177       ci = get_constraints (ctor);
27178       loc = DECL_SOURCE_LOCATION (ctor);
27179       explicit_p = DECL_NONCONVERTING_P (ctor);
27180 
27181       if (PRIMARY_TEMPLATE_P (fn_tmpl))
27182 	{
27183 	  memtmpl = true;
27184 
27185 	  /* For a member template constructor, we need to flatten the two
27186 	     template parameter lists into one, and then adjust the function
27187 	     signature accordingly.  This gets...complicated.  */
27188 	  tree save_parms = current_template_parms;
27189 
27190 	  /* For a member template we should have two levels of parms/args, one
27191 	     for the class and one for the constructor.  We stripped
27192 	     specialized args for further enclosing classes above.  */
27193 	  const int depth = 2;
27194 	  gcc_assert (TMPL_ARGS_DEPTH (targs) == depth);
27195 
27196 	  /* Template args for translating references to the two-level template
27197 	     parameters into references to the one-level template parameters we
27198 	     are creating.  */
27199 	  tree tsubst_args = copy_node (targs);
27200 	  TMPL_ARGS_LEVEL (tsubst_args, depth)
27201 	    = copy_node (TMPL_ARGS_LEVEL (tsubst_args, depth));
27202 
27203 	  /* Template parms for the constructor template.  */
27204 	  tree ftparms = TREE_VALUE (tparms);
27205 	  unsigned flen = TREE_VEC_LENGTH (ftparms);
27206 	  /* Template parms for the class template.  */
27207 	  tparms = TREE_CHAIN (tparms);
27208 	  tree ctparms = TREE_VALUE (tparms);
27209 	  unsigned clen = TREE_VEC_LENGTH (ctparms);
27210 	  /* Template parms for the deduction guide start as a copy of the
27211 	     template parms for the class.  We set current_template_parms for
27212 	     lookup_template_class_1.  */
27213 	  current_template_parms = tparms = copy_node (tparms);
27214 	  tree new_vec = TREE_VALUE (tparms) = make_tree_vec (flen + clen);
27215 	  for (unsigned i = 0; i < clen; ++i)
27216 	    TREE_VEC_ELT (new_vec, i) = TREE_VEC_ELT (ctparms, i);
27217 
27218 	  /* Now we need to rewrite the constructor parms to append them to the
27219 	     class parms.  */
27220 	  for (unsigned i = 0; i < flen; ++i)
27221 	    {
27222 	      unsigned index = i + clen;
27223 	      unsigned level = 1;
27224 	      tree oldelt = TREE_VEC_ELT (ftparms, i);
27225 	      tree olddecl = TREE_VALUE (oldelt);
27226 	      tree newdecl = rewrite_template_parm (olddecl, index, level,
27227 						    tsubst_args, complain);
27228 	      if (newdecl == error_mark_node)
27229 		ok = false;
27230 	      tree newdef = tsubst_template_arg (TREE_PURPOSE (oldelt),
27231 						 tsubst_args, complain, ctor);
27232 	      tree list = build_tree_list (newdef, newdecl);
27233 	      TEMPLATE_PARM_CONSTRAINTS (list)
27234 		= tsubst_constraint_info (TEMPLATE_PARM_CONSTRAINTS (oldelt),
27235 					  tsubst_args, complain, ctor);
27236 	      TREE_VEC_ELT (new_vec, index) = list;
27237 	      TMPL_ARG (tsubst_args, depth, i) = template_parm_to_arg (list);
27238 	    }
27239 
27240 	  /* Now we have a final set of template parms to substitute into the
27241 	     function signature.  */
27242 	  targs = template_parms_to_args (tparms);
27243 	  fparms = tsubst_arg_types (fparms, tsubst_args, NULL_TREE,
27244 				     complain, ctor);
27245 	  if (fparms == error_mark_node)
27246 	    ok = false;
27247 	  fargs = tsubst (fargs, tsubst_args, complain, ctor);
27248 	  if (ci)
27249 	    ci = tsubst_constraint_info (ci, tsubst_args, complain, ctor);
27250 
27251 	  current_template_parms = save_parms;
27252 	}
27253 
27254       --processing_template_decl;
27255       if (!ok)
27256 	return error_mark_node;
27257     }
27258 
27259   if (!memtmpl)
27260     {
27261       /* Copy the parms so we can set DECL_PRIMARY_TEMPLATE.  */
27262       tparms = copy_node (tparms);
27263       INNERMOST_TEMPLATE_PARMS (tparms)
27264 	= copy_node (INNERMOST_TEMPLATE_PARMS (tparms));
27265     }
27266 
27267   tree fntype = build_function_type (type, fparms);
27268   tree ded_fn = build_lang_decl_loc (loc,
27269 				     FUNCTION_DECL,
27270 				     dguide_name (type), fntype);
27271   DECL_ARGUMENTS (ded_fn) = fargs;
27272   DECL_ARTIFICIAL (ded_fn) = true;
27273   DECL_NONCONVERTING_P (ded_fn) = explicit_p;
27274   tree ded_tmpl = build_template_decl (ded_fn, tparms, /*member*/false);
27275   DECL_ARTIFICIAL (ded_tmpl) = true;
27276   DECL_TEMPLATE_RESULT (ded_tmpl) = ded_fn;
27277   TREE_TYPE (ded_tmpl) = TREE_TYPE (ded_fn);
27278   DECL_TEMPLATE_INFO (ded_fn) = build_template_info (ded_tmpl, targs);
27279   DECL_PRIMARY_TEMPLATE (ded_tmpl) = ded_tmpl;
27280   if (DECL_P (ctor))
27281     DECL_ABSTRACT_ORIGIN (ded_tmpl) = fn_tmpl;
27282   if (ci)
27283     set_constraints (ded_tmpl, ci);
27284 
27285   return ded_tmpl;
27286 }
27287 
27288 /* Deduce template arguments for the class template placeholder PTYPE for
27289    template TMPL based on the initializer INIT, and return the resulting
27290    type.  */
27291 
27292 static tree
do_class_deduction(tree ptype,tree tmpl,tree init,int flags,tsubst_flags_t complain)27293 do_class_deduction (tree ptype, tree tmpl, tree init, int flags,
27294 		    tsubst_flags_t complain)
27295 {
27296   if (!DECL_CLASS_TEMPLATE_P (tmpl))
27297     {
27298       /* We should have handled this in the caller.  */
27299       if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl))
27300 	return ptype;
27301       if (complain & tf_error)
27302 	error ("non-class template %qT used without template arguments", tmpl);
27303       return error_mark_node;
27304     }
27305   if (init && TREE_TYPE (init) == ptype)
27306     /* Using the template parm as its own argument.  */
27307     return ptype;
27308 
27309   tree type = TREE_TYPE (tmpl);
27310 
27311   bool try_list_ctor = false;
27312 
27313   vec<tree,va_gc> *args;
27314   if (init == NULL_TREE
27315       || TREE_CODE (init) == TREE_LIST)
27316     args = make_tree_vector_from_list (init);
27317   else if (BRACE_ENCLOSED_INITIALIZER_P (init))
27318     {
27319       try_list_ctor = TYPE_HAS_LIST_CTOR (type);
27320       if (try_list_ctor && CONSTRUCTOR_NELTS (init) == 1)
27321 	{
27322 	  /* As an exception, the first phase in 16.3.1.7 (considering the
27323 	     initializer list as a single argument) is omitted if the
27324 	     initializer list consists of a single expression of type cv U,
27325 	     where U is a specialization of C or a class derived from a
27326 	     specialization of C.  */
27327 	  tree elt = CONSTRUCTOR_ELT (init, 0)->value;
27328 	  if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
27329 	    {
27330 	      tree etype = TREE_TYPE (elt);
27331 	      tree tparms = (INNERMOST_TEMPLATE_PARMS
27332 			     (DECL_TEMPLATE_PARMS (tmpl)));
27333 	      tree targs = make_tree_vec (TREE_VEC_LENGTH (tparms));
27334 	      int err = unify (tparms, targs, type, etype,
27335 			       UNIFY_ALLOW_DERIVED, /*explain*/false);
27336 	      if (err == 0)
27337 		try_list_ctor = false;
27338 	      ggc_free (targs);
27339 	    }
27340 	}
27341       if (try_list_ctor || is_std_init_list (type))
27342 	args = make_tree_vector_single (init);
27343       else
27344 	args = make_tree_vector_from_ctor (init);
27345     }
27346   else
27347     args = make_tree_vector_single (init);
27348 
27349   tree dname = dguide_name (tmpl);
27350   tree cands = lookup_qualified_name (CP_DECL_CONTEXT (tmpl), dname,
27351 				      /*type*/false, /*complain*/false,
27352 				      /*hidden*/false);
27353   bool elided = false;
27354   if (cands == error_mark_node)
27355     cands = NULL_TREE;
27356 
27357   /* Prune explicit deduction guides in copy-initialization context.  */
27358   if (flags & LOOKUP_ONLYCONVERTING)
27359     {
27360       for (lkp_iterator iter (cands); !elided && iter; ++iter)
27361 	if (DECL_NONCONVERTING_P (STRIP_TEMPLATE (*iter)))
27362 	  elided = true;
27363 
27364       if (elided)
27365 	{
27366 	  /* Found a nonconverting guide, prune the candidates.  */
27367 	  tree pruned = NULL_TREE;
27368 	  for (lkp_iterator iter (cands); iter; ++iter)
27369 	    if (!DECL_NONCONVERTING_P (STRIP_TEMPLATE (*iter)))
27370 	      pruned = lookup_add (*iter, pruned);
27371 
27372 	  cands = pruned;
27373 	}
27374     }
27375 
27376   tree outer_args = NULL_TREE;
27377   if (DECL_CLASS_SCOPE_P (tmpl)
27378       && CLASSTYPE_TEMPLATE_INSTANTIATION (DECL_CONTEXT (tmpl)))
27379     {
27380       outer_args = CLASSTYPE_TI_ARGS (DECL_CONTEXT (tmpl));
27381       type = TREE_TYPE (most_general_template (tmpl));
27382     }
27383 
27384   bool saw_ctor = false;
27385   // FIXME cache artificial deduction guides
27386   for (ovl_iterator iter (CLASSTYPE_CONSTRUCTORS (type)); iter; ++iter)
27387     {
27388       /* Skip inherited constructors.  */
27389       if (iter.using_p ())
27390 	continue;
27391 
27392       tree guide = build_deduction_guide (*iter, outer_args, complain);
27393       if (guide == error_mark_node)
27394 	return error_mark_node;
27395       if ((flags & LOOKUP_ONLYCONVERTING)
27396 	  && DECL_NONCONVERTING_P (STRIP_TEMPLATE (guide)))
27397 	elided = true;
27398       else
27399 	cands = lookup_add (guide, cands);
27400 
27401       saw_ctor = true;
27402     }
27403 
27404   tree call = error_mark_node;
27405 
27406   /* If this is list-initialization and the class has a list constructor, first
27407      try deducing from the list as a single argument, as [over.match.list].  */
27408   tree list_cands = NULL_TREE;
27409   if (try_list_ctor && cands)
27410     for (lkp_iterator iter (cands); iter; ++iter)
27411       {
27412 	tree dg = *iter;
27413 	if (is_list_ctor (dg))
27414 	  list_cands = lookup_add (dg, list_cands);
27415       }
27416   if (list_cands)
27417     {
27418       ++cp_unevaluated_operand;
27419       call = build_new_function_call (list_cands, &args, tf_decltype);
27420       --cp_unevaluated_operand;
27421 
27422       if (call == error_mark_node)
27423 	{
27424 	  /* That didn't work, now try treating the list as a sequence of
27425 	     arguments.  */
27426 	  release_tree_vector (args);
27427 	  args = make_tree_vector_from_ctor (init);
27428 	}
27429     }
27430 
27431   /* Maybe generate an implicit deduction guide.  */
27432   if (call == error_mark_node && args->length () < 2)
27433     {
27434       tree gtype = NULL_TREE;
27435 
27436       if (args->length () == 1)
27437 	/* Generate a copy guide.  */
27438 	gtype = build_reference_type (type);
27439       else if (!saw_ctor)
27440 	/* Generate a default guide.  */
27441 	gtype = type;
27442 
27443       if (gtype)
27444 	{
27445 	  tree guide = build_deduction_guide (gtype, outer_args, complain);
27446 	  if (guide == error_mark_node)
27447 	    return error_mark_node;
27448 	  cands = lookup_add (guide, cands);
27449 	}
27450     }
27451 
27452   if (elided && !cands)
27453     {
27454       error ("cannot deduce template arguments for copy-initialization"
27455 	     " of %qT, as it has no non-explicit deduction guides or "
27456 	     "user-declared constructors", type);
27457       return error_mark_node;
27458     }
27459   else if (!cands && call == error_mark_node)
27460     {
27461       error ("cannot deduce template arguments of %qT, as it has no viable "
27462 	     "deduction guides", type);
27463       return error_mark_node;
27464     }
27465 
27466   if (call == error_mark_node)
27467     {
27468       ++cp_unevaluated_operand;
27469       call = build_new_function_call (cands, &args, tf_decltype);
27470       --cp_unevaluated_operand;
27471     }
27472 
27473   if (call == error_mark_node && (complain & tf_warning_or_error))
27474     {
27475       error ("class template argument deduction failed:");
27476 
27477       ++cp_unevaluated_operand;
27478       call = build_new_function_call (cands, &args, complain | tf_decltype);
27479       --cp_unevaluated_operand;
27480 
27481       if (elided)
27482 	inform (input_location, "explicit deduction guides not considered "
27483 		"for copy-initialization");
27484     }
27485 
27486   release_tree_vector (args);
27487 
27488   return cp_build_qualified_type (TREE_TYPE (call), cp_type_quals (ptype));
27489 }
27490 
27491 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
27492    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.
27493    The CONTEXT determines the context in which auto deduction is performed
27494    and is used to control error diagnostics.  FLAGS are the LOOKUP_* flags.
27495    OUTER_TARGS are used during template argument deduction
27496    (context == adc_unify) to properly substitute the result, and is ignored
27497    in other contexts.
27498 
27499    For partial-concept-ids, extra args may be appended to the list of deduced
27500    template arguments prior to determining constraint satisfaction.  */
27501 
27502 tree
do_auto_deduction(tree type,tree init,tree auto_node,tsubst_flags_t complain,auto_deduction_context context,tree outer_targs,int flags)27503 do_auto_deduction (tree type, tree init, tree auto_node,
27504                    tsubst_flags_t complain, auto_deduction_context context,
27505 		   tree outer_targs, int flags)
27506 {
27507   tree targs;
27508 
27509   if (init == error_mark_node)
27510     return error_mark_node;
27511 
27512   if (init && type_dependent_expression_p (init)
27513       && context != adc_unify)
27514     /* Defining a subset of type-dependent expressions that we can deduce
27515        from ahead of time isn't worth the trouble.  */
27516     return type;
27517 
27518   /* Similarly, we can't deduce from another undeduced decl.  */
27519   if (init && undeduced_auto_decl (init))
27520     return type;
27521 
27522   /* We may be doing a partial substitution, but we still want to replace
27523      auto_node.  */
27524   complain &= ~tf_partial;
27525 
27526   if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
27527     /* C++17 class template argument deduction.  */
27528     return do_class_deduction (type, tmpl, init, flags, complain);
27529 
27530   if (init == NULL_TREE || TREE_TYPE (init) == NULL_TREE)
27531     /* Nothing we can do with this, even in deduction context.  */
27532     return type;
27533 
27534   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
27535      with either a new invented type template parameter U or, if the
27536      initializer is a braced-init-list (8.5.4), with
27537      std::initializer_list<U>.  */
27538   if (BRACE_ENCLOSED_INITIALIZER_P (init))
27539     {
27540       if (!DIRECT_LIST_INIT_P (init))
27541 	type = listify_autos (type, auto_node);
27542       else if (CONSTRUCTOR_NELTS (init) == 1)
27543 	init = CONSTRUCTOR_ELT (init, 0)->value;
27544       else
27545 	{
27546           if (complain & tf_warning_or_error)
27547             {
27548 	      if (permerror (input_location, "direct-list-initialization of "
27549 			     "%<auto%> requires exactly one element"))
27550 	        inform (input_location,
27551 		        "for deduction to %<std::initializer_list%>, use copy-"
27552 		        "list-initialization (i.e. add %<=%> before the %<{%>)");
27553             }
27554 	  type = listify_autos (type, auto_node);
27555 	}
27556     }
27557 
27558   if (type == error_mark_node)
27559     return error_mark_node;
27560 
27561   init = resolve_nondeduced_context (init, complain);
27562 
27563   if (context == adc_decomp_type
27564       && auto_node == type
27565       && init != error_mark_node
27566       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
27567     /* [dcl.decomp]/1 - if decomposition declaration has no ref-qualifiers
27568        and initializer has array type, deduce cv-qualified array type.  */
27569     return cp_build_qualified_type_real (TREE_TYPE (init), TYPE_QUALS (type),
27570 					 complain);
27571   else if (AUTO_IS_DECLTYPE (auto_node))
27572     {
27573       tree stripped_init = tree_strip_any_location_wrapper (init);
27574       bool id = (DECL_P (stripped_init)
27575 		 || ((TREE_CODE (init) == COMPONENT_REF
27576 		      || TREE_CODE (init) == SCOPE_REF)
27577 		     && !REF_PARENTHESIZED_P (init)));
27578       targs = make_tree_vec (1);
27579       TREE_VEC_ELT (targs, 0)
27580 	= finish_decltype_type (init, id, tf_warning_or_error);
27581       if (type != auto_node)
27582 	{
27583           if (complain & tf_error)
27584 	    error ("%qT as type rather than plain %<decltype(auto)%>", type);
27585 	  return error_mark_node;
27586 	}
27587     }
27588   else
27589     {
27590       tree parms = build_tree_list (NULL_TREE, type);
27591       tree tparms;
27592 
27593       if (flag_concepts)
27594 	tparms = extract_autos (type);
27595       else
27596 	{
27597 	  tparms = make_tree_vec (1);
27598 	  TREE_VEC_ELT (tparms, 0)
27599 	    = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
27600 	}
27601 
27602       targs = make_tree_vec (TREE_VEC_LENGTH (tparms));
27603       int val = type_unification_real (tparms, targs, parms, &init, 1, 0,
27604 				       DEDUCE_CALL,
27605 				       NULL, /*explain_p=*/false);
27606       if (val > 0)
27607 	{
27608 	  if (processing_template_decl)
27609 	    /* Try again at instantiation time.  */
27610 	    return type;
27611 	  if (type && type != error_mark_node
27612 	      && (complain & tf_error))
27613 	    /* If type is error_mark_node a diagnostic must have been
27614 	       emitted by now.  Also, having a mention to '<type error>'
27615 	       in the diagnostic is not really useful to the user.  */
27616 	    {
27617 	      if (cfun && auto_node == current_function_auto_return_pattern
27618 		  && LAMBDA_FUNCTION_P (current_function_decl))
27619 		error ("unable to deduce lambda return type from %qE", init);
27620 	      else
27621 		error ("unable to deduce %qT from %qE", type, init);
27622 	      type_unification_real (tparms, targs, parms, &init, 1, 0,
27623 				     DEDUCE_CALL,
27624 				     NULL, /*explain_p=*/true);
27625 	    }
27626 	  return error_mark_node;
27627 	}
27628     }
27629 
27630   /* Check any placeholder constraints against the deduced type. */
27631   if (flag_concepts && !processing_template_decl)
27632     if (tree constr = NON_ERROR (PLACEHOLDER_TYPE_CONSTRAINTS (auto_node)))
27633       {
27634         /* Use the deduced type to check the associated constraints. If we
27635            have a partial-concept-id, rebuild the argument list so that
27636            we check using the extra arguments. */
27637         gcc_assert (TREE_CODE (constr) == CHECK_CONSTR);
27638         tree cargs = CHECK_CONSTR_ARGS (constr);
27639         if (TREE_VEC_LENGTH (cargs) > 1)
27640           {
27641             cargs = copy_node (cargs);
27642             TREE_VEC_ELT (cargs, 0) = TREE_VEC_ELT (targs, 0);
27643           }
27644         else
27645           cargs = targs;
27646         if (!constraints_satisfied_p (constr, cargs))
27647           {
27648             if (complain & tf_warning_or_error)
27649               {
27650 		auto_diagnostic_group d;
27651                 switch (context)
27652                   {
27653                   case adc_unspecified:
27654 		  case adc_unify:
27655                     error("placeholder constraints not satisfied");
27656                     break;
27657                   case adc_variable_type:
27658 		  case adc_decomp_type:
27659                     error ("deduced initializer does not satisfy "
27660                            "placeholder constraints");
27661                     break;
27662                   case adc_return_type:
27663                     error ("deduced return type does not satisfy "
27664                            "placeholder constraints");
27665                     break;
27666                   case adc_requirement:
27667 		    error ("deduced expression type does not satisfy "
27668                            "placeholder constraints");
27669                     break;
27670                   }
27671                 diagnose_constraints (input_location, constr, targs);
27672               }
27673             return error_mark_node;
27674           }
27675       }
27676 
27677   if (processing_template_decl && context != adc_unify)
27678     outer_targs = current_template_args ();
27679   targs = add_to_template_args (outer_targs, targs);
27680   return tsubst (type, targs, complain, NULL_TREE);
27681 }
27682 
27683 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
27684    result.  */
27685 
27686 tree
splice_late_return_type(tree type,tree late_return_type)27687 splice_late_return_type (tree type, tree late_return_type)
27688 {
27689   if (is_auto (type))
27690     {
27691       if (late_return_type)
27692 	return late_return_type;
27693 
27694       tree idx = get_template_parm_index (type);
27695       if (TEMPLATE_PARM_LEVEL (idx) <= processing_template_decl)
27696 	/* In an abbreviated function template we didn't know we were dealing
27697 	   with a function template when we saw the auto return type, so update
27698 	   it to have the correct level.  */
27699 	return make_auto_1 (TYPE_IDENTIFIER (type), true);
27700     }
27701   return type;
27702 }
27703 
27704 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
27705    'decltype(auto)' or a deduced class template.  */
27706 
27707 bool
is_auto(const_tree type)27708 is_auto (const_tree type)
27709 {
27710   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
27711       && (TYPE_IDENTIFIER (type) == auto_identifier
27712 	  || TYPE_IDENTIFIER (type) == decltype_auto_identifier))
27713     return true;
27714   else
27715     return false;
27716 }
27717 
27718 /* for_each_template_parm callback for type_uses_auto.  */
27719 
27720 int
is_auto_r(tree tp,void *)27721 is_auto_r (tree tp, void */*data*/)
27722 {
27723   return is_auto (tp);
27724 }
27725 
27726 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
27727    a use of `auto'.  Returns NULL_TREE otherwise.  */
27728 
27729 tree
type_uses_auto(tree type)27730 type_uses_auto (tree type)
27731 {
27732   if (type == NULL_TREE)
27733     return NULL_TREE;
27734   else if (flag_concepts)
27735     {
27736       /* The Concepts TS allows multiple autos in one type-specifier; just
27737 	 return the first one we find, do_auto_deduction will collect all of
27738 	 them.  */
27739       if (uses_template_parms (type))
27740 	return for_each_template_parm (type, is_auto_r, /*data*/NULL,
27741 				       /*visited*/NULL, /*nondeduced*/false);
27742       else
27743 	return NULL_TREE;
27744     }
27745   else
27746     return find_type_usage (type, is_auto);
27747 }
27748 
27749 /* Report ill-formed occurrences of auto types in ARGUMENTS.  If
27750    concepts are enabled, auto is acceptable in template arguments, but
27751    only when TEMPL identifies a template class.  Return TRUE if any
27752    such errors were reported.  */
27753 
27754 bool
check_auto_in_tmpl_args(tree tmpl,tree args)27755 check_auto_in_tmpl_args (tree tmpl, tree args)
27756 {
27757   /* If there were previous errors, nevermind.  */
27758   if (!args || TREE_CODE (args) != TREE_VEC)
27759     return false;
27760 
27761   /* If TMPL is an identifier, we're parsing and we can't tell yet
27762      whether TMPL is supposed to be a type, a function or a variable.
27763      We'll only be able to tell during template substitution, so we
27764      expect to be called again then.  If concepts are enabled and we
27765      know we have a type, we're ok.  */
27766   if (flag_concepts
27767       && (identifier_p (tmpl)
27768 	  || (DECL_P (tmpl)
27769 	      &&  (DECL_TYPE_TEMPLATE_P (tmpl)
27770 		   || DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)))))
27771     return false;
27772 
27773   /* Quickly search for any occurrences of auto; usually there won't
27774      be any, and then we'll avoid allocating the vector.  */
27775   if (!type_uses_auto (args))
27776     return false;
27777 
27778   bool errors = false;
27779 
27780   tree vec = extract_autos (args);
27781   for (int i = 0; i < TREE_VEC_LENGTH (vec); i++)
27782     {
27783       tree xauto = TREE_VALUE (TREE_VEC_ELT (vec, i));
27784       error_at (DECL_SOURCE_LOCATION (xauto),
27785 		"invalid use of %qT in template argument", xauto);
27786       errors = true;
27787     }
27788 
27789   return errors;
27790 }
27791 
27792 /* For a given template T, return the vector of typedefs referenced
27793    in T for which access check is needed at T instantiation time.
27794    T is either  a FUNCTION_DECL or a RECORD_TYPE.
27795    Those typedefs were added to T by the function
27796    append_type_to_template_for_access_check.  */
27797 
27798 vec<qualified_typedef_usage_t, va_gc> *
get_types_needing_access_check(tree t)27799 get_types_needing_access_check (tree t)
27800 {
27801   tree ti;
27802   vec<qualified_typedef_usage_t, va_gc> *result = NULL;
27803 
27804   if (!t || t == error_mark_node)
27805     return NULL;
27806 
27807   if (!(ti = get_template_info (t)))
27808     return NULL;
27809 
27810   if (CLASS_TYPE_P (t)
27811       || TREE_CODE (t) == FUNCTION_DECL)
27812     {
27813       if (!TI_TEMPLATE (ti))
27814 	return NULL;
27815 
27816       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
27817     }
27818 
27819   return result;
27820 }
27821 
27822 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
27823    tied to T. That list of typedefs will be access checked at
27824    T instantiation time.
27825    T is either a FUNCTION_DECL or a RECORD_TYPE.
27826    TYPE_DECL is a TYPE_DECL node representing a typedef.
27827    SCOPE is the scope through which TYPE_DECL is accessed.
27828    LOCATION is the location of the usage point of TYPE_DECL.
27829 
27830    This function is a subroutine of
27831    append_type_to_template_for_access_check.  */
27832 
27833 static void
append_type_to_template_for_access_check_1(tree t,tree type_decl,tree scope,location_t location)27834 append_type_to_template_for_access_check_1 (tree t,
27835 					    tree type_decl,
27836 					    tree scope,
27837 					    location_t location)
27838 {
27839   qualified_typedef_usage_t typedef_usage;
27840   tree ti;
27841 
27842   if (!t || t == error_mark_node)
27843     return;
27844 
27845   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
27846 	       || CLASS_TYPE_P (t))
27847 	      && type_decl
27848 	      && TREE_CODE (type_decl) == TYPE_DECL
27849 	      && scope);
27850 
27851   if (!(ti = get_template_info (t)))
27852     return;
27853 
27854   gcc_assert (TI_TEMPLATE (ti));
27855 
27856   typedef_usage.typedef_decl = type_decl;
27857   typedef_usage.context = scope;
27858   typedef_usage.locus = location;
27859 
27860   vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
27861 }
27862 
27863 /* Append TYPE_DECL to the template TEMPL.
27864    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
27865    At TEMPL instanciation time, TYPE_DECL will be checked to see
27866    if it can be accessed through SCOPE.
27867    LOCATION is the location of the usage point of TYPE_DECL.
27868 
27869    e.g. consider the following code snippet:
27870 
27871      class C
27872      {
27873        typedef int myint;
27874      };
27875 
27876      template<class U> struct S
27877      {
27878        C::myint mi; // <-- usage point of the typedef C::myint
27879      };
27880 
27881      S<char> s;
27882 
27883    At S<char> instantiation time, we need to check the access of C::myint
27884    In other words, we need to check the access of the myint typedef through
27885    the C scope. For that purpose, this function will add the myint typedef
27886    and the scope C through which its being accessed to a list of typedefs
27887    tied to the template S. That list will be walked at template instantiation
27888    time and access check performed on each typedefs it contains.
27889    Note that this particular code snippet should yield an error because
27890    myint is private to C.  */
27891 
27892 void
append_type_to_template_for_access_check(tree templ,tree type_decl,tree scope,location_t location)27893 append_type_to_template_for_access_check (tree templ,
27894                                           tree type_decl,
27895 					  tree scope,
27896 					  location_t location)
27897 {
27898   qualified_typedef_usage_t *iter;
27899   unsigned i;
27900 
27901   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
27902 
27903   /* Make sure we don't append the type to the template twice.  */
27904   FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
27905     if (iter->typedef_decl == type_decl && scope == iter->context)
27906       return;
27907 
27908   append_type_to_template_for_access_check_1 (templ, type_decl,
27909 					      scope, location);
27910 }
27911 
27912 /* Convert the generic type parameters in PARM that match the types given in the
27913    range [START_IDX, END_IDX) from the current_template_parms into generic type
27914    packs.  */
27915 
27916 tree
convert_generic_types_to_packs(tree parm,int start_idx,int end_idx)27917 convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
27918 {
27919   tree current = current_template_parms;
27920   int depth = TMPL_PARMS_DEPTH (current);
27921   current = INNERMOST_TEMPLATE_PARMS (current);
27922   tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
27923 
27924   for (int i = 0; i < start_idx; ++i)
27925     TREE_VEC_ELT (replacement, i)
27926       = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
27927 
27928   for (int i = start_idx; i < end_idx; ++i)
27929     {
27930       /* Create a distinct parameter pack type from the current parm and add it
27931 	 to the replacement args to tsubst below into the generic function
27932 	 parameter.  */
27933 
27934       tree o = TREE_TYPE (TREE_VALUE
27935 			  (TREE_VEC_ELT (current, i)));
27936       tree t = copy_type (o);
27937       TEMPLATE_TYPE_PARM_INDEX (t)
27938 	= reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
27939 				      o, 0, 0, tf_none);
27940       TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
27941       TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
27942       TYPE_MAIN_VARIANT (t) = t;
27943       TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
27944       TYPE_CANONICAL (t) = canonical_type_parameter (t);
27945       TREE_VEC_ELT (replacement, i) = t;
27946       TREE_VALUE (TREE_VEC_ELT (current, i)) = TREE_CHAIN (t);
27947     }
27948 
27949   for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
27950     TREE_VEC_ELT (replacement, i)
27951       = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
27952 
27953   /* If there are more levels then build up the replacement with the outer
27954      template parms.  */
27955   if (depth > 1)
27956     replacement = add_to_template_args (template_parms_to_args
27957 					(TREE_CHAIN (current_template_parms)),
27958 					replacement);
27959 
27960   return tsubst (parm, replacement, tf_none, NULL_TREE);
27961 }
27962 
27963 /* Entries in the decl_constraint hash table. */
27964 struct GTY((for_user)) constr_entry
27965 {
27966   tree decl;
27967   tree ci;
27968 };
27969 
27970 /* Hashing function and equality for constraint entries. */
27971 struct constr_hasher : ggc_ptr_hash<constr_entry>
27972 {
hashconstr_hasher27973   static hashval_t hash (constr_entry *e)
27974   {
27975     return (hashval_t)DECL_UID (e->decl);
27976   }
27977 
equalconstr_hasher27978   static bool equal (constr_entry *e1, constr_entry *e2)
27979   {
27980     return e1->decl == e2->decl;
27981   }
27982 };
27983 
27984 /* A mapping from declarations to constraint information. Note that
27985    both templates and their underlying declarations are mapped to the
27986    same constraint information.
27987 
27988    FIXME: This is defined in pt.c because garbage collection
27989    code is not being generated for constraint.cc. */
27990 
27991 static GTY (()) hash_table<constr_hasher> *decl_constraints;
27992 
27993 /* Returns the template constraints of declaration T. If T is not
27994    constrained, return NULL_TREE. Note that T must be non-null. */
27995 
27996 tree
get_constraints(tree t)27997 get_constraints (tree t)
27998 {
27999   if (!flag_concepts)
28000     return NULL_TREE;
28001 
28002   gcc_assert (DECL_P (t));
28003   if (TREE_CODE (t) == TEMPLATE_DECL)
28004     t = DECL_TEMPLATE_RESULT (t);
28005   constr_entry elt = { t, NULL_TREE };
28006   constr_entry* found = decl_constraints->find (&elt);
28007   if (found)
28008     return found->ci;
28009   else
28010     return NULL_TREE;
28011 }
28012 
28013 /* Associate the given constraint information CI with the declaration
28014    T. If T is a template, then the constraints are associated with
28015    its underlying declaration. Don't build associations if CI is
28016    NULL_TREE.  */
28017 
28018 void
set_constraints(tree t,tree ci)28019 set_constraints (tree t, tree ci)
28020 {
28021   if (!ci)
28022     return;
28023   gcc_assert (t && flag_concepts);
28024   if (TREE_CODE (t) == TEMPLATE_DECL)
28025     t = DECL_TEMPLATE_RESULT (t);
28026   gcc_assert (!get_constraints (t));
28027   constr_entry elt = {t, ci};
28028   constr_entry** slot = decl_constraints->find_slot (&elt, INSERT);
28029   constr_entry* entry = ggc_alloc<constr_entry> ();
28030   *entry = elt;
28031   *slot = entry;
28032 }
28033 
28034 /* Remove the associated constraints of the declaration T.  */
28035 
28036 void
remove_constraints(tree t)28037 remove_constraints (tree t)
28038 {
28039   gcc_assert (DECL_P (t));
28040   if (TREE_CODE (t) == TEMPLATE_DECL)
28041     t = DECL_TEMPLATE_RESULT (t);
28042 
28043   constr_entry elt = {t, NULL_TREE};
28044   constr_entry** slot = decl_constraints->find_slot (&elt, NO_INSERT);
28045   if (slot)
28046     decl_constraints->clear_slot (slot);
28047 }
28048 
28049 /* Memoized satisfaction results for declarations. This
28050    maps the pair (constraint_info, arguments) to the result computed
28051    by constraints_satisfied_p.  */
28052 
28053 struct GTY((for_user)) constraint_sat_entry
28054 {
28055   tree ci;
28056   tree args;
28057   tree result;
28058 };
28059 
28060 /* Hashing function and equality for constraint entries. */
28061 
28062 struct constraint_sat_hasher : ggc_ptr_hash<constraint_sat_entry>
28063 {
hashconstraint_sat_hasher28064   static hashval_t hash (constraint_sat_entry *e)
28065   {
28066     hashval_t val = iterative_hash_object(e->ci, 0);
28067     return iterative_hash_template_arg (e->args, val);
28068   }
28069 
equalconstraint_sat_hasher28070   static bool equal (constraint_sat_entry *e1, constraint_sat_entry *e2)
28071   {
28072     return e1->ci == e2->ci && comp_template_args (e1->args, e2->args);
28073   }
28074 };
28075 
28076 /* Memoized satisfaction results for concept checks. */
28077 
28078 struct GTY((for_user)) concept_spec_entry
28079 {
28080   tree tmpl;
28081   tree args;
28082   tree result;
28083 };
28084 
28085 /* Hashing function and equality for constraint entries.  */
28086 
28087 struct concept_spec_hasher : ggc_ptr_hash<concept_spec_entry>
28088 {
hashconcept_spec_hasher28089   static hashval_t hash (concept_spec_entry *e)
28090   {
28091     return hash_tmpl_and_args (e->tmpl, e->args);
28092   }
28093 
equalconcept_spec_hasher28094   static bool equal (concept_spec_entry *e1, concept_spec_entry *e2)
28095   {
28096     ++comparing_specializations;
28097     bool eq = e1->tmpl == e2->tmpl && comp_template_args (e1->args, e2->args);
28098     --comparing_specializations;
28099     return eq;
28100   }
28101 };
28102 
28103 static GTY (()) hash_table<constraint_sat_hasher> *constraint_memos;
28104 static GTY (()) hash_table<concept_spec_hasher> *concept_memos;
28105 
28106 /* Search for a memoized satisfaction result. Returns one of the
28107    truth value nodes if previously memoized, or NULL_TREE otherwise.   */
28108 
28109 tree
lookup_constraint_satisfaction(tree ci,tree args)28110 lookup_constraint_satisfaction (tree ci, tree args)
28111 {
28112   constraint_sat_entry elt = { ci, args, NULL_TREE };
28113   constraint_sat_entry* found = constraint_memos->find (&elt);
28114   if (found)
28115     return found->result;
28116   else
28117     return NULL_TREE;
28118 }
28119 
28120 /* Memoize the result of a satisfication test. Returns the saved result.  */
28121 
28122 tree
memoize_constraint_satisfaction(tree ci,tree args,tree result)28123 memoize_constraint_satisfaction (tree ci, tree args, tree result)
28124 {
28125   constraint_sat_entry elt = {ci, args, result};
28126   constraint_sat_entry** slot = constraint_memos->find_slot (&elt, INSERT);
28127   constraint_sat_entry* entry = ggc_alloc<constraint_sat_entry> ();
28128   *entry = elt;
28129   *slot = entry;
28130   return result;
28131 }
28132 
28133 /* Search for a memoized satisfaction result for a concept. */
28134 
28135 tree
lookup_concept_satisfaction(tree tmpl,tree args)28136 lookup_concept_satisfaction (tree tmpl, tree args)
28137 {
28138   concept_spec_entry elt = { tmpl, args, NULL_TREE };
28139   concept_spec_entry* found = concept_memos->find (&elt);
28140   if (found)
28141     return found->result;
28142   else
28143     return NULL_TREE;
28144 }
28145 
28146 /* Memoize the result of a concept check. Returns the saved result.  */
28147 
28148 tree
memoize_concept_satisfaction(tree tmpl,tree args,tree result)28149 memoize_concept_satisfaction (tree tmpl, tree args, tree result)
28150 {
28151   concept_spec_entry elt = {tmpl, args, result};
28152   concept_spec_entry** slot = concept_memos->find_slot (&elt, INSERT);
28153   concept_spec_entry* entry = ggc_alloc<concept_spec_entry> ();
28154   *entry = elt;
28155   *slot = entry;
28156   return result;
28157 }
28158 
28159 static GTY (()) hash_table<concept_spec_hasher> *concept_expansions;
28160 
28161 /* Returns a prior concept specialization. This returns the substituted
28162    and normalized constraints defined by the concept.  */
28163 
28164 tree
get_concept_expansion(tree tmpl,tree args)28165 get_concept_expansion (tree tmpl, tree args)
28166 {
28167   concept_spec_entry elt = { tmpl, args, NULL_TREE };
28168   concept_spec_entry* found = concept_expansions->find (&elt);
28169   if (found)
28170     return found->result;
28171   else
28172     return NULL_TREE;
28173 }
28174 
28175 /* Save a concept expansion for later.  */
28176 
28177 tree
save_concept_expansion(tree tmpl,tree args,tree def)28178 save_concept_expansion (tree tmpl, tree args, tree def)
28179 {
28180   concept_spec_entry elt = {tmpl, args, def};
28181   concept_spec_entry** slot = concept_expansions->find_slot (&elt, INSERT);
28182   concept_spec_entry* entry = ggc_alloc<concept_spec_entry> ();
28183   *entry = elt;
28184   *slot = entry;
28185   return def;
28186 }
28187 
28188 static hashval_t
hash_subsumption_args(tree t1,tree t2)28189 hash_subsumption_args (tree t1, tree t2)
28190 {
28191   gcc_assert (TREE_CODE (t1) == CHECK_CONSTR);
28192   gcc_assert (TREE_CODE (t2) == CHECK_CONSTR);
28193   int val = 0;
28194   val = iterative_hash_object (CHECK_CONSTR_CONCEPT (t1), val);
28195   val = iterative_hash_template_arg (CHECK_CONSTR_ARGS (t1), val);
28196   val = iterative_hash_object (CHECK_CONSTR_CONCEPT (t2), val);
28197   val = iterative_hash_template_arg (CHECK_CONSTR_ARGS (t2), val);
28198   return val;
28199 }
28200 
28201 /* Compare the constraints of two subsumption entries.  The LEFT1 and
28202    LEFT2 arguments comprise the first subsumption pair and the RIGHT1
28203    and RIGHT2 arguments comprise the second. These are all CHECK_CONSTRs. */
28204 
28205 static bool
comp_subsumption_args(tree left1,tree left2,tree right1,tree right2)28206 comp_subsumption_args (tree left1, tree left2, tree right1, tree right2)
28207 {
28208   if (CHECK_CONSTR_CONCEPT (left1) == CHECK_CONSTR_CONCEPT (right1))
28209     if (CHECK_CONSTR_CONCEPT (left2) == CHECK_CONSTR_CONCEPT (right2))
28210       if (comp_template_args (CHECK_CONSTR_ARGS (left1),
28211                              CHECK_CONSTR_ARGS (right1)))
28212         return comp_template_args (CHECK_CONSTR_ARGS (left2),
28213                                   CHECK_CONSTR_ARGS (right2));
28214   return false;
28215 }
28216 
28217 /* Key/value pair for learning and memoizing subsumption results. This
28218    associates a pair of check constraints (including arguments) with
28219    a boolean value indicating the result.  */
28220 
28221 struct GTY((for_user)) subsumption_entry
28222 {
28223   tree t1;
28224   tree t2;
28225   bool result;
28226 };
28227 
28228 /* Hashing function and equality for constraint entries.  */
28229 
28230 struct subsumption_hasher : ggc_ptr_hash<subsumption_entry>
28231 {
hashsubsumption_hasher28232   static hashval_t hash (subsumption_entry *e)
28233   {
28234     return hash_subsumption_args (e->t1, e->t2);
28235   }
28236 
equalsubsumption_hasher28237   static bool equal (subsumption_entry *e1, subsumption_entry *e2)
28238   {
28239     ++comparing_specializations;
28240     bool eq = comp_subsumption_args(e1->t1, e1->t2, e2->t1, e2->t2);
28241     --comparing_specializations;
28242     return eq;
28243   }
28244 };
28245 
28246 static GTY (()) hash_table<subsumption_hasher> *subsumption_table;
28247 
28248 /* Search for a previously cached subsumption result. */
28249 
28250 bool*
lookup_subsumption_result(tree t1,tree t2)28251 lookup_subsumption_result (tree t1, tree t2)
28252 {
28253   subsumption_entry elt = { t1, t2, false };
28254   subsumption_entry* found = subsumption_table->find (&elt);
28255   if (found)
28256     return &found->result;
28257   else
28258     return 0;
28259 }
28260 
28261 /* Save a subsumption result. */
28262 
28263 bool
save_subsumption_result(tree t1,tree t2,bool result)28264 save_subsumption_result (tree t1, tree t2, bool result)
28265 {
28266   subsumption_entry elt = {t1, t2, result};
28267   subsumption_entry** slot = subsumption_table->find_slot (&elt, INSERT);
28268   subsumption_entry* entry = ggc_alloc<subsumption_entry> ();
28269   *entry = elt;
28270   *slot = entry;
28271   return result;
28272 }
28273 
28274 /* Set up the hash table for constraint association. */
28275 
28276 void
init_constraint_processing(void)28277 init_constraint_processing (void)
28278 {
28279   if (!flag_concepts)
28280     return;
28281 
28282   decl_constraints = hash_table<constr_hasher>::create_ggc(37);
28283   constraint_memos = hash_table<constraint_sat_hasher>::create_ggc(37);
28284   concept_memos = hash_table<concept_spec_hasher>::create_ggc(37);
28285   concept_expansions = hash_table<concept_spec_hasher>::create_ggc(37);
28286   subsumption_table = hash_table<subsumption_hasher>::create_ggc(37);
28287 }
28288 
28289 /* __integer_pack(N) in a pack expansion expands to a sequence of numbers from
28290    0..N-1.  */
28291 
28292 void
declare_integer_pack(void)28293 declare_integer_pack (void)
28294 {
28295   tree ipfn = push_library_fn (get_identifier ("__integer_pack"),
28296 			       build_function_type_list (integer_type_node,
28297 							 integer_type_node,
28298 							 NULL_TREE),
28299 			       NULL_TREE, ECF_CONST);
28300   DECL_DECLARED_CONSTEXPR_P (ipfn) = true;
28301   DECL_BUILT_IN_CLASS (ipfn) = BUILT_IN_FRONTEND;
28302   DECL_FUNCTION_CODE (ipfn)
28303     = (enum built_in_function) (int) CP_BUILT_IN_INTEGER_PACK;
28304 }
28305 
28306 /* Set up the hash tables for template instantiations.  */
28307 
28308 void
init_template_processing(void)28309 init_template_processing (void)
28310 {
28311   decl_specializations = hash_table<spec_hasher>::create_ggc (37);
28312   type_specializations = hash_table<spec_hasher>::create_ggc (37);
28313 
28314   if (cxx_dialect >= cxx11)
28315     declare_integer_pack ();
28316 }
28317 
28318 /* Print stats about the template hash tables for -fstats.  */
28319 
28320 void
print_template_statistics(void)28321 print_template_statistics (void)
28322 {
28323   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
28324 	   "%f collisions\n", (long) decl_specializations->size (),
28325 	   (long) decl_specializations->elements (),
28326 	   decl_specializations->collisions ());
28327   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
28328 	   "%f collisions\n", (long) type_specializations->size (),
28329 	   (long) type_specializations->elements (),
28330 	   type_specializations->collisions ());
28331 }
28332 
28333 #if CHECKING_P
28334 
28335 namespace selftest {
28336 
28337 /* Verify that build_non_dependent_expr () works, for various expressions,
28338    and that location wrappers don't affect the results.  */
28339 
28340 static void
test_build_non_dependent_expr()28341 test_build_non_dependent_expr ()
28342 {
28343   location_t loc = BUILTINS_LOCATION;
28344 
28345   /* Verify constants, without and with location wrappers.  */
28346   tree int_cst = build_int_cst (integer_type_node, 42);
28347   ASSERT_EQ (int_cst, build_non_dependent_expr (int_cst));
28348 
28349   tree wrapped_int_cst = maybe_wrap_with_location (int_cst, loc);
28350   ASSERT_TRUE (location_wrapper_p (wrapped_int_cst));
28351   ASSERT_EQ (wrapped_int_cst, build_non_dependent_expr (wrapped_int_cst));
28352 
28353   tree string_lit = build_string (4, "foo");
28354   TREE_TYPE (string_lit) = char_array_type_node;
28355   string_lit = fix_string_type (string_lit);
28356   ASSERT_EQ (string_lit, build_non_dependent_expr (string_lit));
28357 
28358   tree wrapped_string_lit = maybe_wrap_with_location (string_lit, loc);
28359   ASSERT_TRUE (location_wrapper_p (wrapped_string_lit));
28360   ASSERT_EQ (wrapped_string_lit,
28361 	     build_non_dependent_expr (wrapped_string_lit));
28362 }
28363 
28364 /* Verify that type_dependent_expression_p () works correctly, even
28365    in the presence of location wrapper nodes.  */
28366 
28367 static void
test_type_dependent_expression_p()28368 test_type_dependent_expression_p ()
28369 {
28370   location_t loc = BUILTINS_LOCATION;
28371 
28372   tree name = get_identifier ("foo");
28373 
28374   /* If no templates are involved, nothing is type-dependent.  */
28375   gcc_assert (!processing_template_decl);
28376   ASSERT_FALSE (type_dependent_expression_p (name));
28377 
28378   ++processing_template_decl;
28379 
28380   /* Within a template, an unresolved name is always type-dependent.  */
28381   ASSERT_TRUE (type_dependent_expression_p (name));
28382 
28383   /* Ensure it copes with NULL_TREE and errors.  */
28384   ASSERT_FALSE (type_dependent_expression_p (NULL_TREE));
28385   ASSERT_FALSE (type_dependent_expression_p (error_mark_node));
28386 
28387   /* A USING_DECL in a template should be type-dependent, even if wrapped
28388      with a location wrapper (PR c++/83799).  */
28389   tree using_decl = build_lang_decl (USING_DECL, name, NULL_TREE);
28390   TREE_TYPE (using_decl) = integer_type_node;
28391   ASSERT_TRUE (type_dependent_expression_p (using_decl));
28392   tree wrapped_using_decl = maybe_wrap_with_location (using_decl, loc);
28393   ASSERT_TRUE (location_wrapper_p (wrapped_using_decl));
28394   ASSERT_TRUE (type_dependent_expression_p (wrapped_using_decl));
28395 
28396   --processing_template_decl;
28397 }
28398 
28399 /* Run all of the selftests within this file.  */
28400 
28401 void
cp_pt_c_tests()28402 cp_pt_c_tests ()
28403 {
28404   test_build_non_dependent_expr ();
28405   test_type_dependent_expression_p ();
28406 }
28407 
28408 } // namespace selftest
28409 
28410 #endif /* #if CHECKING_P */
28411 
28412 #include "gt-cp-pt.h"
28413