4e212620eaf061087383c2551329d0cca9c8e06d
[platform/upstream/gcc.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU -*- C++ -*-.
2    Copyright (C) 1992-2020 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 #include "target.h"
46
47 /* The type of functions taking a tree, and some additional data, and
48    returning an int.  */
49 typedef int (*tree_fn_t) (tree, void*);
50
51 /* The PENDING_TEMPLATES is a list of templates whose instantiations
52    have been deferred, either because their definitions were not yet
53    available, or because we were putting off doing the work.  */
54 struct GTY ((chain_next ("%h.next"))) pending_template
55 {
56   struct pending_template *next;
57   struct tinst_level *tinst;
58 };
59
60 static GTY(()) struct pending_template *pending_templates;
61 static GTY(()) struct pending_template *last_pending_template;
62
63 int processing_template_parmlist;
64 static int template_header_count;
65
66 static GTY(()) tree saved_trees;
67 static vec<int> inline_parm_levels;
68
69 static GTY(()) struct tinst_level *current_tinst_level;
70
71 static GTY(()) vec<tree, va_gc> *saved_access_scope;
72
73 /* Live only within one (recursive) call to tsubst_expr.  We use
74    this to pass the statement expression node from the STMT_EXPR
75    to the EXPR_STMT that is its result.  */
76 static tree cur_stmt_expr;
77
78 // -------------------------------------------------------------------------- //
79 // Local Specialization Stack
80 //
81 // Implementation of the RAII helper for creating new local
82 // specializations.
83 local_specialization_stack::local_specialization_stack (lss_policy policy)
84   : saved (local_specializations)
85 {
86   if (policy == lss_nop)
87     ;
88   else if (policy == lss_blank || !saved)
89     local_specializations = new hash_map<tree, tree>;
90   else
91     local_specializations = new hash_map<tree, tree>(*saved);
92 }
93
94 local_specialization_stack::~local_specialization_stack ()
95 {
96   if (local_specializations != saved)
97     {
98       delete local_specializations;
99       local_specializations = saved;
100     }
101 }
102
103 /* True if we've recursed into fn_type_unification too many times.  */
104 static bool excessive_deduction_depth;
105
106 struct GTY((for_user)) spec_entry
107 {
108   tree tmpl;
109   tree args;
110   tree spec;
111 };
112
113 struct spec_hasher : ggc_ptr_hash<spec_entry>
114 {
115   static hashval_t hash (spec_entry *);
116   static bool equal (spec_entry *, spec_entry *);
117 };
118
119 /* The general template is not in these tables.  */
120 typedef hash_table<spec_hasher> spec_hash_table;
121 static GTY (()) spec_hash_table *decl_specializations;
122 static GTY (()) spec_hash_table *type_specializations;
123
124 /* Contains canonical template parameter types. The vector is indexed by
125    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
126    TREE_LIST, whose TREE_VALUEs contain the canonical template
127    parameters of various types and levels.  */
128 static GTY(()) vec<tree, va_gc> *canonical_template_parms;
129
130 #define UNIFY_ALLOW_NONE 0
131 #define UNIFY_ALLOW_MORE_CV_QUAL 1
132 #define UNIFY_ALLOW_LESS_CV_QUAL 2
133 #define UNIFY_ALLOW_DERIVED 4
134 #define UNIFY_ALLOW_INTEGER 8
135 #define UNIFY_ALLOW_OUTER_LEVEL 16
136 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
137 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
138
139 enum template_base_result {
140   tbr_incomplete_type,
141   tbr_ambiguous_baseclass,
142   tbr_success
143 };
144
145 static bool resolve_overloaded_unification (tree, tree, tree, tree,
146                                             unification_kind_t, int,
147                                             bool);
148 static int try_one_overload (tree, tree, tree, tree, tree,
149                              unification_kind_t, int, bool, bool);
150 static int unify (tree, tree, tree, tree, int, bool);
151 static void add_pending_template (tree);
152 static tree reopen_tinst_level (struct tinst_level *);
153 static tree tsubst_initializer_list (tree, tree);
154 static tree get_partial_spec_bindings (tree, tree, tree);
155 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
156                                    bool, bool);
157 static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
158                                               bool, bool);
159 static void tsubst_enum (tree, tree, tree);
160 static tree add_to_template_args (tree, tree);
161 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
162 static int check_non_deducible_conversion (tree, tree, int, int,
163                                            struct conversion **, bool);
164 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
165                                              tree);
166 static int type_unification_real (tree, tree, tree, const tree *,
167                                   unsigned int, int, unification_kind_t,
168                                   vec<deferred_access_check, va_gc> **,
169                                   bool);
170 static void note_template_header (int);
171 static tree convert_nontype_argument_function (tree, tree, tsubst_flags_t);
172 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
173 static tree convert_template_argument (tree, tree, tree,
174                                        tsubst_flags_t, int, tree);
175 static tree for_each_template_parm (tree, tree_fn_t, void*,
176                                     hash_set<tree> *, bool, tree_fn_t = NULL);
177 static tree expand_template_argument_pack (tree);
178 static tree build_template_parm_index (int, int, int, tree, tree);
179 static bool inline_needs_template_parms (tree, bool);
180 static void push_inline_template_parms_recursive (tree, int);
181 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
182 static int mark_template_parm (tree, void *);
183 static int template_parm_this_level_p (tree, void *);
184 static tree tsubst_friend_function (tree, tree);
185 static tree tsubst_friend_class (tree, tree);
186 static int can_complete_type_without_circularity (tree);
187 static tree get_bindings (tree, tree, tree, bool);
188 static int template_decl_level (tree);
189 static int check_cv_quals_for_unify (int, tree, tree);
190 static int unify_pack_expansion (tree, tree, tree,
191                                  tree, unification_kind_t, bool, bool);
192 static tree copy_template_args (tree);
193 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
194 tree most_specialized_partial_spec (tree, tsubst_flags_t);
195 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
196 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
197 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
198 static bool check_specialization_scope (void);
199 static tree process_partial_specialization (tree);
200 static void set_current_access_from_decl (tree);
201 static enum template_base_result get_template_base (tree, tree, tree, tree,
202                                                     bool , tree *);
203 static tree try_class_unification (tree, tree, tree, tree, bool);
204 static bool class_nttp_const_wrapper_p (tree t);
205 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
206                                            tree, tree);
207 static bool template_template_parm_bindings_ok_p (tree, tree);
208 static void tsubst_default_arguments (tree, tsubst_flags_t);
209 static tree for_each_template_parm_r (tree *, int *, void *);
210 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
211 static void copy_default_args_to_explicit_spec (tree);
212 static bool invalid_nontype_parm_type_p (tree, tsubst_flags_t);
213 static bool dependent_template_arg_p (tree);
214 static bool any_template_arguments_need_structural_equality_p (tree);
215 static bool dependent_type_p_r (tree);
216 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
217 static tree tsubst_decl (tree, tree, tsubst_flags_t);
218 static void perform_instantiation_time_access_checks (tree, tree);
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 get_underlying_template (tree);
225 static tree tsubst_attributes (tree, tree, tsubst_flags_t, tree);
226 static tree canonicalize_expr_argument (tree, tsubst_flags_t);
227 static tree make_argument_pack (tree);
228 static void register_parameter_specializations (tree, tree);
229 static tree enclosing_instantiation_of (tree tctx);
230
231 /* Make the current scope suitable for access checking when we are
232    processing T.  T can be FUNCTION_DECL for instantiated function
233    template, VAR_DECL for static member variable, or TYPE_DECL for
234    alias template (needed by instantiate_decl).  */
235
236 void
237 push_access_scope (tree t)
238 {
239   gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
240               || TREE_CODE (t) == TYPE_DECL);
241
242   if (DECL_FRIEND_CONTEXT (t))
243     push_nested_class (DECL_FRIEND_CONTEXT (t));
244   else if (DECL_CLASS_SCOPE_P (t))
245     push_nested_class (DECL_CONTEXT (t));
246   else
247     push_to_top_level ();
248
249   if (TREE_CODE (t) == FUNCTION_DECL)
250     {
251       vec_safe_push (saved_access_scope, current_function_decl);
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 void
260 pop_access_scope (tree t)
261 {
262   if (TREE_CODE (t) == FUNCTION_DECL)
263     current_function_decl = saved_access_scope->pop();
264
265   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
266     pop_nested_class ();
267   else
268     pop_from_top_level ();
269 }
270
271 /* Do any processing required when DECL (a member template
272    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
273    to DECL, unless it is a specialization, in which case the DECL
274    itself is returned.  */
275
276 tree
277 finish_member_template_decl (tree decl)
278 {
279   if (decl == error_mark_node)
280     return error_mark_node;
281
282   gcc_assert (DECL_P (decl));
283
284   if (TREE_CODE (decl) == TYPE_DECL)
285     {
286       tree type;
287
288       type = TREE_TYPE (decl);
289       if (type == error_mark_node)
290         return error_mark_node;
291       if (MAYBE_CLASS_TYPE_P (type)
292           && CLASSTYPE_TEMPLATE_INFO (type)
293           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
294         {
295           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
296           check_member_template (tmpl);
297           return tmpl;
298         }
299       return NULL_TREE;
300     }
301   else if (TREE_CODE (decl) == FIELD_DECL)
302     error_at (DECL_SOURCE_LOCATION (decl),
303               "data member %qD cannot be a member template", decl);
304   else if (DECL_TEMPLATE_INFO (decl))
305     {
306       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
307         {
308           check_member_template (DECL_TI_TEMPLATE (decl));
309           return DECL_TI_TEMPLATE (decl);
310         }
311       else
312         return decl;
313     }
314   else
315     error_at (DECL_SOURCE_LOCATION (decl),
316               "invalid member template declaration %qD", decl);
317
318   return error_mark_node;
319 }
320
321 /* Create a template info node.  */
322
323 tree
324 build_template_info (tree template_decl, tree template_args)
325 {
326   tree result = make_node (TEMPLATE_INFO);
327   TI_TEMPLATE (result) = template_decl;
328   TI_ARGS (result) = template_args;
329   return result;
330 }
331
332 /* Return the template info node corresponding to T, whatever T is.  */
333
334 tree
335 get_template_info (const_tree t)
336 {
337   tree tinfo = NULL_TREE;
338
339   if (!t || t == error_mark_node)
340     return NULL;
341
342   if (TREE_CODE (t) == NAMESPACE_DECL
343       || TREE_CODE (t) == PARM_DECL)
344     return NULL;
345
346   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
347     tinfo = DECL_TEMPLATE_INFO (t);
348
349   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
350     t = TREE_TYPE (t);
351
352   if (OVERLOAD_TYPE_P (t))
353     tinfo = TYPE_TEMPLATE_INFO (t);
354   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
355     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
356
357   return tinfo;
358 }
359
360 /* Returns the template nesting level of the indicated class TYPE.
361
362    For example, in:
363      template <class T>
364      struct A
365      {
366        template <class U>
367        struct B {};
368      };
369
370    A<T>::B<U> has depth two, while A<T> has depth one.
371    Both A<T>::B<int> and A<int>::B<U> have depth one, if
372    they are instantiations, not specializations.
373
374    This function is guaranteed to return 0 if passed NULL_TREE so
375    that, for example, `template_class_depth (current_class_type)' is
376    always safe.  */
377
378 int
379 template_class_depth (tree type)
380 {
381   int depth;
382
383   for (depth = 0; type && TREE_CODE (type) != NAMESPACE_DECL; )
384     {
385       tree tinfo = get_template_info (type);
386
387       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
388           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
389         ++depth;
390
391       if (DECL_P (type))
392         {
393           if (tree fctx = DECL_FRIEND_CONTEXT (type))
394             type = fctx;
395           else
396             type = CP_DECL_CONTEXT (type);
397         }
398       else if (LAMBDA_TYPE_P (type) && LAMBDA_TYPE_EXTRA_SCOPE (type))
399         type = LAMBDA_TYPE_EXTRA_SCOPE (type);
400       else
401         type = CP_TYPE_CONTEXT (type);
402     }
403
404   return depth;
405 }
406
407 /* Return TRUE if NODE instantiates a template that has arguments of
408    its own, be it directly a primary template or indirectly through a
409    partial specializations.  */
410 static bool
411 instantiates_primary_template_p (tree node)
412 {
413   tree tinfo = get_template_info (node);
414   if (!tinfo)
415     return false;
416
417   tree tmpl = TI_TEMPLATE (tinfo);
418   if (PRIMARY_TEMPLATE_P (tmpl))
419     return true;
420
421   if (!DECL_TEMPLATE_SPECIALIZATION (tmpl))
422     return false;
423
424   /* So now we know we have a specialization, but it could be a full
425      or a partial specialization.  To tell which, compare the depth of
426      its template arguments with those of its context.  */
427
428   tree ctxt = DECL_CONTEXT (tmpl);
429   tree ctinfo = get_template_info (ctxt);
430   if (!ctinfo)
431     return true;
432
433   return (TMPL_ARGS_DEPTH (TI_ARGS (tinfo))
434           > TMPL_ARGS_DEPTH (TI_ARGS (ctinfo)));
435 }
436
437 /* Subroutine of maybe_begin_member_template_processing.
438    Returns true if processing DECL needs us to push template parms.  */
439
440 static bool
441 inline_needs_template_parms (tree decl, bool nsdmi)
442 {
443   if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
444     return false;
445
446   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
447           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
448 }
449
450 /* Subroutine of maybe_begin_member_template_processing.
451    Push the template parms in PARMS, starting from LEVELS steps into the
452    chain, and ending at the beginning, since template parms are listed
453    innermost first.  */
454
455 static void
456 push_inline_template_parms_recursive (tree parmlist, int levels)
457 {
458   tree parms = TREE_VALUE (parmlist);
459   int i;
460
461   if (levels > 1)
462     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
463
464   ++processing_template_decl;
465   current_template_parms
466     = tree_cons (size_int (processing_template_decl),
467                  parms, current_template_parms);
468   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
469
470   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
471                NULL);
472   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
473     {
474       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
475
476       if (error_operand_p (parm))
477         continue;
478
479       gcc_assert (DECL_P (parm));
480
481       switch (TREE_CODE (parm))
482         {
483         case TYPE_DECL:
484         case TEMPLATE_DECL:
485           pushdecl (parm);
486           break;
487
488         case PARM_DECL:
489           /* Push the CONST_DECL.  */
490           pushdecl (TEMPLATE_PARM_DECL (DECL_INITIAL (parm)));
491           break;
492
493         default:
494           gcc_unreachable ();
495         }
496     }
497 }
498
499 /* Restore the template parameter context for a member template, a
500    friend template defined in a class definition, or a non-template
501    member of template class.  */
502
503 void
504 maybe_begin_member_template_processing (tree decl)
505 {
506   tree parms;
507   int levels = 0;
508   bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
509
510   if (nsdmi)
511     {
512       tree ctx = DECL_CONTEXT (decl);
513       decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
514               /* Disregard full specializations (c++/60999).  */
515               && uses_template_parms (ctx)
516               ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
517     }
518
519   if (inline_needs_template_parms (decl, nsdmi))
520     {
521       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
522       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
523
524       if (DECL_TEMPLATE_SPECIALIZATION (decl))
525         {
526           --levels;
527           parms = TREE_CHAIN (parms);
528         }
529
530       push_inline_template_parms_recursive (parms, levels);
531     }
532
533   /* Remember how many levels of template parameters we pushed so that
534      we can pop them later.  */
535   inline_parm_levels.safe_push (levels);
536 }
537
538 /* Undo the effects of maybe_begin_member_template_processing.  */
539
540 void
541 maybe_end_member_template_processing (void)
542 {
543   int i;
544   int last;
545
546   if (inline_parm_levels.length () == 0)
547     return;
548
549   last = inline_parm_levels.pop ();
550   for (i = 0; i < last; ++i)
551     {
552       --processing_template_decl;
553       current_template_parms = TREE_CHAIN (current_template_parms);
554       poplevel (0, 0, 0);
555     }
556 }
557
558 /* Return a new template argument vector which contains all of ARGS,
559    but has as its innermost set of arguments the EXTRA_ARGS.  */
560
561 static tree
562 add_to_template_args (tree args, tree extra_args)
563 {
564   tree new_args;
565   int extra_depth;
566   int i;
567   int j;
568
569   if (args == NULL_TREE || extra_args == error_mark_node)
570     return extra_args;
571
572   extra_depth = TMPL_ARGS_DEPTH (extra_args);
573   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
574
575   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
576     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
577
578   for (j = 1; j <= extra_depth; ++j, ++i)
579     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
580
581   return new_args;
582 }
583
584 /* Like add_to_template_args, but only the outermost ARGS are added to
585    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
586    (EXTRA_ARGS) levels are added.  This function is used to combine
587    the template arguments from a partial instantiation with the
588    template arguments used to attain the full instantiation from the
589    partial instantiation.
590
591    If ARGS is a TEMPLATE_DECL, use its parameters as args.  */
592
593 tree
594 add_outermost_template_args (tree args, tree extra_args)
595 {
596   tree new_args;
597
598   if (!args)
599     return extra_args;
600   if (TREE_CODE (args) == TEMPLATE_DECL)
601     {
602       tree ti = get_template_info (DECL_TEMPLATE_RESULT (args));
603       args = TI_ARGS (ti);
604     }
605
606   /* If there are more levels of EXTRA_ARGS than there are ARGS,
607      something very fishy is going on.  */
608   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
609
610   /* If *all* the new arguments will be the EXTRA_ARGS, just return
611      them.  */
612   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
613     return extra_args;
614
615   /* For the moment, we make ARGS look like it contains fewer levels.  */
616   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
617
618   new_args = add_to_template_args (args, extra_args);
619
620   /* Now, we restore ARGS to its full dimensions.  */
621   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
622
623   return new_args;
624 }
625
626 /* Return the N levels of innermost template arguments from the ARGS.  */
627
628 tree
629 get_innermost_template_args (tree args, int n)
630 {
631   tree new_args;
632   int extra_levels;
633   int i;
634
635   gcc_assert (n >= 0);
636
637   /* If N is 1, just return the innermost set of template arguments.  */
638   if (n == 1)
639     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
640
641   /* If we're not removing anything, just return the arguments we were
642      given.  */
643   extra_levels = TMPL_ARGS_DEPTH (args) - n;
644   gcc_assert (extra_levels >= 0);
645   if (extra_levels == 0)
646     return args;
647
648   /* Make a new set of arguments, not containing the outer arguments.  */
649   new_args = make_tree_vec (n);
650   for (i = 1; i <= n; ++i)
651     SET_TMPL_ARGS_LEVEL (new_args, i,
652                          TMPL_ARGS_LEVEL (args, i + extra_levels));
653
654   return new_args;
655 }
656
657 /* The inverse of get_innermost_template_args: Return all but the innermost
658    EXTRA_LEVELS levels of template arguments from the ARGS.  */
659
660 static tree
661 strip_innermost_template_args (tree args, int extra_levels)
662 {
663   tree new_args;
664   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
665   int i;
666
667   gcc_assert (n >= 0);
668
669   /* If N is 1, just return the outermost set of template arguments.  */
670   if (n == 1)
671     return TMPL_ARGS_LEVEL (args, 1);
672
673   /* If we're not removing anything, just return the arguments we were
674      given.  */
675   gcc_assert (extra_levels >= 0);
676   if (extra_levels == 0)
677     return args;
678
679   /* Make a new set of arguments, not containing the inner arguments.  */
680   new_args = make_tree_vec (n);
681   for (i = 1; i <= n; ++i)
682     SET_TMPL_ARGS_LEVEL (new_args, i,
683                          TMPL_ARGS_LEVEL (args, i));
684
685   return new_args;
686 }
687
688 /* We've got a template header coming up; push to a new level for storing
689    the parms.  */
690
691 void
692 begin_template_parm_list (void)
693 {
694   /* We use a non-tag-transparent scope here, which causes pushtag to
695      put tags in this scope, rather than in the enclosing class or
696      namespace scope.  This is the right thing, since we want
697      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
698      global template class, push_template_decl handles putting the
699      TEMPLATE_DECL into top-level scope.  For a nested template class,
700      e.g.:
701
702        template <class T> struct S1 {
703          template <class T> struct S2 {};
704        };
705
706      pushtag contains special code to insert the TEMPLATE_DECL for S2
707      at the right scope.  */
708   begin_scope (sk_template_parms, NULL);
709   ++processing_template_decl;
710   ++processing_template_parmlist;
711   note_template_header (0);
712
713   /* Add a dummy parameter level while we process the parameter list.  */
714   current_template_parms
715     = tree_cons (size_int (processing_template_decl),
716                  make_tree_vec (0),
717                  current_template_parms);
718 }
719
720 /* This routine is called when a specialization is declared.  If it is
721    invalid to declare a specialization here, an error is reported and
722    false is returned, otherwise this routine will return true.  */
723
724 static bool
725 check_specialization_scope (void)
726 {
727   tree scope = current_scope ();
728
729   /* [temp.expl.spec]
730
731      An explicit specialization shall be declared in the namespace of
732      which the template is a member, or, for member templates, in the
733      namespace of which the enclosing class or enclosing class
734      template is a member.  An explicit specialization of a member
735      function, member class or static data member of a class template
736      shall be declared in the namespace of which the class template
737      is a member.  */
738   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
739     {
740       error ("explicit specialization in non-namespace scope %qD", scope);
741       return false;
742     }
743
744   /* [temp.expl.spec]
745
746      In an explicit specialization declaration for a member of a class
747      template or a member template that appears in namespace scope,
748      the member template and some of its enclosing class templates may
749      remain unspecialized, except that the declaration shall not
750      explicitly specialize a class member template if its enclosing
751      class templates are not explicitly specialized as well.  */
752   if (current_template_parms)
753     {
754       error ("enclosing class templates are not explicitly specialized");
755       return false;
756     }
757
758   return true;
759 }
760
761 /* We've just seen template <>.  */
762
763 bool
764 begin_specialization (void)
765 {
766   begin_scope (sk_template_spec, NULL);
767   note_template_header (1);
768   return check_specialization_scope ();
769 }
770
771 /* Called at then end of processing a declaration preceded by
772    template<>.  */
773
774 void
775 end_specialization (void)
776 {
777   finish_scope ();
778   reset_specialization ();
779 }
780
781 /* Any template <>'s that we have seen thus far are not referring to a
782    function specialization.  */
783
784 void
785 reset_specialization (void)
786 {
787   processing_specialization = 0;
788   template_header_count = 0;
789 }
790
791 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
792    it was of the form template <>.  */
793
794 static void
795 note_template_header (int specialization)
796 {
797   processing_specialization = specialization;
798   template_header_count++;
799 }
800
801 /* We're beginning an explicit instantiation.  */
802
803 void
804 begin_explicit_instantiation (void)
805 {
806   gcc_assert (!processing_explicit_instantiation);
807   processing_explicit_instantiation = true;
808 }
809
810
811 void
812 end_explicit_instantiation (void)
813 {
814   gcc_assert (processing_explicit_instantiation);
815   processing_explicit_instantiation = false;
816 }
817
818 /* An explicit specialization or partial specialization of TMPL is being
819    declared.  Check that the namespace in which the specialization is
820    occurring is permissible.  Returns false iff it is invalid to
821    specialize TMPL in the current namespace.  */
822
823 static bool
824 check_specialization_namespace (tree tmpl)
825 {
826   tree tpl_ns = decl_namespace_context (tmpl);
827
828   /* [tmpl.expl.spec]
829
830      An explicit specialization shall be declared in a namespace enclosing the
831      specialized template. An explicit specialization whose declarator-id is
832      not qualified shall be declared in the nearest enclosing namespace of the
833      template, or, if the namespace is inline (7.3.1), any namespace from its
834      enclosing namespace set.  */
835   if (current_scope() != DECL_CONTEXT (tmpl)
836       && !at_namespace_scope_p ())
837     {
838       error ("specialization of %qD must appear at namespace scope", tmpl);
839       return false;
840     }
841
842   if (is_nested_namespace (current_namespace, tpl_ns, cxx_dialect < cxx11))
843     /* Same or enclosing namespace.  */
844     return true;
845   else
846     {
847       auto_diagnostic_group d;
848       if (permerror (input_location,
849                      "specialization of %qD in different namespace", tmpl))
850         inform (DECL_SOURCE_LOCATION (tmpl),
851                 "  from definition of %q#D", tmpl);
852       return false;
853     }
854 }
855
856 /* SPEC is an explicit instantiation.  Check that it is valid to
857    perform this explicit instantiation in the current namespace.  */
858
859 static void
860 check_explicit_instantiation_namespace (tree spec)
861 {
862   tree ns;
863
864   /* DR 275: An explicit instantiation shall appear in an enclosing
865      namespace of its template.  */
866   ns = decl_namespace_context (spec);
867   if (!is_nested_namespace (current_namespace, ns))
868     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
869                "(which does not enclose namespace %qD)",
870                spec, current_namespace, ns);
871 }
872
873 /* Returns the type of a template specialization only if that
874    specialization needs to be defined. Otherwise (e.g., if the type has
875    already been defined), the function returns NULL_TREE.  */
876
877 static tree
878 maybe_new_partial_specialization (tree type)
879 {
880   /* An implicit instantiation of an incomplete type implies
881      the definition of a new class template.
882
883         template<typename T>
884           struct S;
885
886         template<typename T>
887           struct S<T*>;
888
889      Here, S<T*> is an implicit instantiation of S whose type
890      is incomplete.  */
891   if (CLASSTYPE_IMPLICIT_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
892     return type;
893
894   /* It can also be the case that TYPE is a completed specialization.
895      Continuing the previous example, suppose we also declare:
896
897         template<typename T>
898           requires Integral<T>
899             struct S<T*>;
900
901      Here, S<T*> refers to the specialization S<T*> defined
902      above. However, we need to differentiate definitions because
903      we intend to define a new partial specialization. In this case,
904      we rely on the fact that the constraints are different for
905      this declaration than that above.
906
907      Note that we also get here for injected class names and
908      late-parsed template definitions. We must ensure that we
909      do not create new type declarations for those cases.  */
910   if (flag_concepts && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
911     {
912       tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
913       tree args = CLASSTYPE_TI_ARGS (type);
914
915       /* If there are no template parameters, this cannot be a new
916          partial template specialization?  */
917       if (!current_template_parms)
918         return NULL_TREE;
919
920       /* The injected-class-name is not a new partial specialization.  */
921       if (DECL_SELF_REFERENCE_P (TYPE_NAME (type)))
922         return NULL_TREE;
923
924       /* If the constraints are not the same as those of the primary
925          then, we can probably create a new specialization.  */
926       tree type_constr = current_template_constraints ();
927
928       if (type == TREE_TYPE (tmpl))
929         {
930           tree main_constr = get_constraints (tmpl);
931           if (equivalent_constraints (type_constr, main_constr))
932             return NULL_TREE;
933         }
934
935       /* Also, if there's a pre-existing specialization with matching
936          constraints, then this also isn't new.  */
937       tree specs = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
938       while (specs)
939         {
940           tree spec_tmpl = TREE_VALUE (specs);
941           tree spec_args = TREE_PURPOSE (specs);
942           tree spec_constr = get_constraints (spec_tmpl);
943           if (comp_template_args (args, spec_args)
944               && equivalent_constraints (type_constr, spec_constr))
945             return NULL_TREE;
946           specs = TREE_CHAIN (specs);
947         }
948
949       /* Create a new type node (and corresponding type decl)
950          for the newly declared specialization.  */
951       tree t = make_class_type (TREE_CODE (type));
952       CLASSTYPE_DECLARED_CLASS (t) = CLASSTYPE_DECLARED_CLASS (type);
953       SET_TYPE_TEMPLATE_INFO (t, build_template_info (tmpl, args));
954
955       /* We only need a separate type node for storing the definition of this
956          partial specialization; uses of S<T*> are unconstrained, so all are
957          equivalent.  So keep TYPE_CANONICAL the same.  */
958       TYPE_CANONICAL (t) = TYPE_CANONICAL (type);
959
960       /* Build the corresponding type decl.  */
961       tree d = create_implicit_typedef (DECL_NAME (tmpl), t);
962       DECL_CONTEXT (d) = TYPE_CONTEXT (t);
963       DECL_SOURCE_LOCATION (d) = input_location;
964       TREE_PRIVATE (d) = (current_access_specifier == access_private_node);
965       TREE_PROTECTED (d) = (current_access_specifier == access_protected_node);
966
967       return t;
968     }
969
970   return NULL_TREE;
971 }
972
973 /* The TYPE is being declared.  If it is a template type, that means it
974    is a partial specialization.  Do appropriate error-checking.  */
975
976 tree
977 maybe_process_partial_specialization (tree type)
978 {
979   tree context;
980
981   if (type == error_mark_node)
982     return error_mark_node;
983
984   /* A lambda that appears in specialization context is not itself a
985      specialization.  */
986   if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
987     return type;
988
989   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
990     {
991       error ("name of class shadows template template parameter %qD",
992              TYPE_NAME (type));
993       return error_mark_node;
994     }
995
996   context = TYPE_CONTEXT (type);
997
998   if (TYPE_ALIAS_P (type))
999     {
1000       tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (type);
1001
1002       if (tinfo && DECL_ALIAS_TEMPLATE_P (TI_TEMPLATE (tinfo)))
1003         error ("specialization of alias template %qD",
1004                TI_TEMPLATE (tinfo));
1005       else
1006         error ("explicit specialization of non-template %qT", type);
1007       return error_mark_node;
1008     }
1009   else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
1010     {
1011       /* This is for ordinary explicit specialization and partial
1012          specialization of a template class such as:
1013
1014            template <> class C<int>;
1015
1016          or:
1017
1018            template <class T> class C<T*>;
1019
1020          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
1021
1022       if (tree t = maybe_new_partial_specialization (type))
1023         {
1024           if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (t))
1025               && !at_namespace_scope_p ())
1026             return error_mark_node;
1027           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (t);
1028           DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (t)) = input_location;
1029           if (processing_template_decl)
1030             {
1031               tree decl = push_template_decl (TYPE_MAIN_DECL (t));
1032               if (decl == error_mark_node)
1033                 return error_mark_node;
1034               return TREE_TYPE (decl);
1035             }
1036         }
1037       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
1038         error ("specialization of %qT after instantiation", type);
1039       else if (errorcount && !processing_specialization
1040                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
1041                && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
1042         /* Trying to define a specialization either without a template<> header
1043            or in an inappropriate place.  We've already given an error, so just
1044            bail now so we don't actually define the specialization.  */
1045         return error_mark_node;
1046     }
1047   else if (CLASS_TYPE_P (type)
1048            && !CLASSTYPE_USE_TEMPLATE (type)
1049            && CLASSTYPE_TEMPLATE_INFO (type)
1050            && context && CLASS_TYPE_P (context)
1051            && CLASSTYPE_TEMPLATE_INFO (context))
1052     {
1053       /* This is for an explicit specialization of member class
1054          template according to [temp.expl.spec/18]:
1055
1056            template <> template <class U> class C<int>::D;
1057
1058          The context `C<int>' must be an implicit instantiation.
1059          Otherwise this is just a member class template declared
1060          earlier like:
1061
1062            template <> class C<int> { template <class U> class D; };
1063            template <> template <class U> class C<int>::D;
1064
1065          In the first case, `C<int>::D' is a specialization of `C<T>::D'
1066          while in the second case, `C<int>::D' is a primary template
1067          and `C<T>::D' may not exist.  */
1068
1069       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
1070           && !COMPLETE_TYPE_P (type))
1071         {
1072           tree t;
1073           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
1074
1075           if (current_namespace
1076               != decl_namespace_context (tmpl))
1077             {
1078               if (permerror (input_location,
1079                              "specialization of %qD in different namespace",
1080                              type))
1081                 inform (DECL_SOURCE_LOCATION (tmpl),
1082                         "from definition of %q#D", tmpl);
1083             }
1084
1085           /* Check for invalid specialization after instantiation:
1086
1087                template <> template <> class C<int>::D<int>;
1088                template <> template <class U> class C<int>::D;  */
1089
1090           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
1091                t; t = TREE_CHAIN (t))
1092             {
1093               tree inst = TREE_VALUE (t);
1094               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
1095                   || !COMPLETE_OR_OPEN_TYPE_P (inst))
1096                 {
1097                   /* We already have a full specialization of this partial
1098                      instantiation, or a full specialization has been
1099                      looked up but not instantiated.  Reassign it to the
1100                      new member specialization template.  */
1101                   spec_entry elt;
1102                   spec_entry *entry;
1103
1104                   elt.tmpl = most_general_template (tmpl);
1105                   elt.args = CLASSTYPE_TI_ARGS (inst);
1106                   elt.spec = inst;
1107
1108                   type_specializations->remove_elt (&elt);
1109
1110                   elt.tmpl = tmpl;
1111                   CLASSTYPE_TI_ARGS (inst)
1112                     = elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
1113
1114                   spec_entry **slot
1115                     = type_specializations->find_slot (&elt, INSERT);
1116                   entry = ggc_alloc<spec_entry> ();
1117                   *entry = elt;
1118                   *slot = entry;
1119                 }
1120               else
1121                 /* But if we've had an implicit instantiation, that's a
1122                    problem ([temp.expl.spec]/6).  */
1123                 error ("specialization %qT after instantiation %qT",
1124                        type, inst);
1125             }
1126
1127           /* Mark TYPE as a specialization.  And as a result, we only
1128              have one level of template argument for the innermost
1129              class template.  */
1130           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
1131           DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
1132           CLASSTYPE_TI_ARGS (type)
1133             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
1134         }
1135     }
1136   else if (processing_specialization)
1137     {
1138        /* Someday C++0x may allow for enum template specialization.  */
1139       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
1140           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
1141         pedwarn (input_location, OPT_Wpedantic, "template specialization "
1142                  "of %qD not allowed by ISO C++", type);
1143       else
1144         {
1145           error ("explicit specialization of non-template %qT", type);
1146           return error_mark_node;
1147         }
1148     }
1149
1150   return type;
1151 }
1152
1153 /* Returns nonzero if we can optimize the retrieval of specializations
1154    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
1155    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
1156
1157 static inline bool
1158 optimize_specialization_lookup_p (tree tmpl)
1159 {
1160   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
1161           && DECL_CLASS_SCOPE_P (tmpl)
1162           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
1163              parameter.  */
1164           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1165           /* The optimized lookup depends on the fact that the
1166              template arguments for the member function template apply
1167              purely to the containing class, which is not true if the
1168              containing class is an explicit or partial
1169              specialization.  */
1170           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1171           && !DECL_MEMBER_TEMPLATE_P (tmpl)
1172           && !DECL_CONV_FN_P (tmpl)
1173           /* It is possible to have a template that is not a member
1174              template and is not a member of a template class:
1175
1176              template <typename T>
1177              struct S { friend A::f(); };
1178
1179              Here, the friend function is a template, but the context does
1180              not have template information.  The optimized lookup relies
1181              on having ARGS be the template arguments for both the class
1182              and the function template.  */
1183           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1184 }
1185
1186 /* Make sure ARGS doesn't use any inappropriate typedefs; we should have
1187    gone through coerce_template_parms by now.  */
1188
1189 static void
1190 verify_unstripped_args_1 (tree inner)
1191 {
1192   for (int i = 0; i < TREE_VEC_LENGTH (inner); ++i)
1193     {
1194       tree arg = TREE_VEC_ELT (inner, i);
1195       if (TREE_CODE (arg) == TEMPLATE_DECL)
1196         /* OK */;
1197       else if (TYPE_P (arg))
1198         gcc_assert (strip_typedefs (arg, NULL) == arg);
1199       else if (ARGUMENT_PACK_P (arg))
1200         verify_unstripped_args_1 (ARGUMENT_PACK_ARGS (arg));
1201       else if (strip_typedefs (TREE_TYPE (arg), NULL) != TREE_TYPE (arg))
1202         /* Allow typedefs on the type of a non-type argument, since a
1203            parameter can have them.  */;
1204       else
1205         gcc_assert (strip_typedefs_expr (arg, NULL) == arg);
1206     }
1207 }
1208
1209 static void
1210 verify_unstripped_args (tree args)
1211 {
1212   ++processing_template_decl;
1213   if (!any_dependent_template_arguments_p (args))
1214     verify_unstripped_args_1 (INNERMOST_TEMPLATE_ARGS (args));
1215   --processing_template_decl;
1216 }
1217
1218 /* Retrieve the specialization (in the sense of [temp.spec] - a
1219    specialization is either an instantiation or an explicit
1220    specialization) of TMPL for the given template ARGS.  If there is
1221    no such specialization, return NULL_TREE.  The ARGS are a vector of
1222    arguments, or a vector of vectors of arguments, in the case of
1223    templates with more than one level of parameters.
1224
1225    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1226    then we search for a partial specialization matching ARGS.  This
1227    parameter is ignored if TMPL is not a class template.
1228
1229    We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1230    result is a NONTYPE_ARGUMENT_PACK.  */
1231
1232 static tree
1233 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1234 {
1235   if (tmpl == NULL_TREE)
1236     return NULL_TREE;
1237
1238   if (args == error_mark_node)
1239     return NULL_TREE;
1240
1241   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1242               || TREE_CODE (tmpl) == FIELD_DECL);
1243
1244   /* There should be as many levels of arguments as there are
1245      levels of parameters.  */
1246   gcc_assert (TMPL_ARGS_DEPTH (args)
1247               == (TREE_CODE (tmpl) == TEMPLATE_DECL
1248                   ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1249                   : template_class_depth (DECL_CONTEXT (tmpl))));
1250
1251   if (flag_checking)
1252     verify_unstripped_args (args);
1253
1254   /* Lambda functions in templates aren't instantiated normally, but through
1255      tsubst_lambda_expr.  */
1256   if (lambda_fn_in_template_p (tmpl))
1257     return NULL_TREE;
1258
1259   if (optimize_specialization_lookup_p (tmpl))
1260     {
1261       /* The template arguments actually apply to the containing
1262          class.  Find the class specialization with those
1263          arguments.  */
1264       tree class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1265       tree class_specialization
1266         = retrieve_specialization (class_template, args, 0);
1267       if (!class_specialization)
1268         return NULL_TREE;
1269
1270       /* Find the instance of TMPL.  */
1271       tree fns = get_class_binding (class_specialization, DECL_NAME (tmpl));
1272       for (ovl_iterator iter (fns); iter; ++iter)
1273         {
1274           tree fn = *iter;
1275           if (tree ti = get_template_info (fn))
1276             if (TI_TEMPLATE (ti) == tmpl
1277                 /* using-declarations can bring in a different
1278                    instantiation of tmpl as a member of a different
1279                    instantiation of tmpl's class.  We don't want those
1280                    here.  */
1281                 && DECL_CONTEXT (fn) == class_specialization)
1282               return fn;
1283         }
1284       return NULL_TREE;
1285     }
1286   else
1287     {
1288       spec_entry *found;
1289       spec_entry elt;
1290       spec_hash_table *specializations;
1291
1292       elt.tmpl = tmpl;
1293       elt.args = args;
1294       elt.spec = NULL_TREE;
1295
1296       if (DECL_CLASS_TEMPLATE_P (tmpl))
1297         specializations = type_specializations;
1298       else
1299         specializations = decl_specializations;
1300
1301       if (hash == 0)
1302         hash = spec_hasher::hash (&elt);
1303       found = specializations->find_with_hash (&elt, hash);
1304       if (found)
1305         return found->spec;
1306     }
1307
1308   return NULL_TREE;
1309 }
1310
1311 /* Like retrieve_specialization, but for local declarations.  */
1312
1313 tree
1314 retrieve_local_specialization (tree tmpl)
1315 {
1316   if (local_specializations == NULL)
1317     return NULL_TREE;
1318
1319   tree *slot = local_specializations->get (tmpl);
1320   return slot ? *slot : NULL_TREE;
1321 }
1322
1323 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1324
1325 int
1326 is_specialization_of (tree decl, tree tmpl)
1327 {
1328   tree t;
1329
1330   if (TREE_CODE (decl) == FUNCTION_DECL)
1331     {
1332       for (t = decl;
1333            t != NULL_TREE;
1334            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1335         if (t == tmpl)
1336           return 1;
1337     }
1338   else
1339     {
1340       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1341
1342       for (t = TREE_TYPE (decl);
1343            t != NULL_TREE;
1344            t = CLASSTYPE_USE_TEMPLATE (t)
1345              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1346         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1347           return 1;
1348     }
1349
1350   return 0;
1351 }
1352
1353 /* Returns nonzero iff DECL is a specialization of friend declaration
1354    FRIEND_DECL according to [temp.friend].  */
1355
1356 bool
1357 is_specialization_of_friend (tree decl, tree friend_decl)
1358 {
1359   bool need_template = true;
1360   int template_depth;
1361
1362   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1363               || TREE_CODE (decl) == TYPE_DECL);
1364
1365   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1366      of a template class, we want to check if DECL is a specialization
1367      if this.  */
1368   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1369       && DECL_TEMPLATE_INFO (friend_decl)
1370       && !DECL_USE_TEMPLATE (friend_decl))
1371     {
1372       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1373       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1374       need_template = false;
1375     }
1376   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1377            && !PRIMARY_TEMPLATE_P (friend_decl))
1378     need_template = false;
1379
1380   /* There is nothing to do if this is not a template friend.  */
1381   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1382     return false;
1383
1384   if (is_specialization_of (decl, friend_decl))
1385     return true;
1386
1387   /* [temp.friend/6]
1388      A member of a class template may be declared to be a friend of a
1389      non-template class.  In this case, the corresponding member of
1390      every specialization of the class template is a friend of the
1391      class granting friendship.
1392
1393      For example, given a template friend declaration
1394
1395        template <class T> friend void A<T>::f();
1396
1397      the member function below is considered a friend
1398
1399        template <> struct A<int> {
1400          void f();
1401        };
1402
1403      For this type of template friend, TEMPLATE_DEPTH below will be
1404      nonzero.  To determine if DECL is a friend of FRIEND, we first
1405      check if the enclosing class is a specialization of another.  */
1406
1407   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1408   if (template_depth
1409       && DECL_CLASS_SCOPE_P (decl)
1410       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1411                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1412     {
1413       /* Next, we check the members themselves.  In order to handle
1414          a few tricky cases, such as when FRIEND_DECL's are
1415
1416            template <class T> friend void A<T>::g(T t);
1417            template <class T> template <T t> friend void A<T>::h();
1418
1419          and DECL's are
1420
1421            void A<int>::g(int);
1422            template <int> void A<int>::h();
1423
1424          we need to figure out ARGS, the template arguments from
1425          the context of DECL.  This is required for template substitution
1426          of `T' in the function parameter of `g' and template parameter
1427          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1428
1429       tree context = DECL_CONTEXT (decl);
1430       tree args = NULL_TREE;
1431       int current_depth = 0;
1432
1433       while (current_depth < template_depth)
1434         {
1435           if (CLASSTYPE_TEMPLATE_INFO (context))
1436             {
1437               if (current_depth == 0)
1438                 args = TYPE_TI_ARGS (context);
1439               else
1440                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1441               current_depth++;
1442             }
1443           context = TYPE_CONTEXT (context);
1444         }
1445
1446       if (TREE_CODE (decl) == FUNCTION_DECL)
1447         {
1448           bool is_template;
1449           tree friend_type;
1450           tree decl_type;
1451           tree friend_args_type;
1452           tree decl_args_type;
1453
1454           /* Make sure that both DECL and FRIEND_DECL are templates or
1455              non-templates.  */
1456           is_template = DECL_TEMPLATE_INFO (decl)
1457                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1458           if (need_template ^ is_template)
1459             return false;
1460           else if (is_template)
1461             {
1462               /* If both are templates, check template parameter list.  */
1463               tree friend_parms
1464                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1465                                          args, tf_none);
1466               if (!comp_template_parms
1467                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1468                       friend_parms))
1469                 return false;
1470
1471               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1472             }
1473           else
1474             decl_type = TREE_TYPE (decl);
1475
1476           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1477                                               tf_none, NULL_TREE);
1478           if (friend_type == error_mark_node)
1479             return false;
1480
1481           /* Check if return types match.  */
1482           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1483             return false;
1484
1485           /* Check if function parameter types match, ignoring the
1486              `this' parameter.  */
1487           friend_args_type = TYPE_ARG_TYPES (friend_type);
1488           decl_args_type = TYPE_ARG_TYPES (decl_type);
1489           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1490             friend_args_type = TREE_CHAIN (friend_args_type);
1491           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1492             decl_args_type = TREE_CHAIN (decl_args_type);
1493
1494           return compparms (decl_args_type, friend_args_type);
1495         }
1496       else
1497         {
1498           /* DECL is a TYPE_DECL */
1499           bool is_template;
1500           tree decl_type = TREE_TYPE (decl);
1501
1502           /* Make sure that both DECL and FRIEND_DECL are templates or
1503              non-templates.  */
1504           is_template
1505             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1506               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1507
1508           if (need_template ^ is_template)
1509             return false;
1510           else if (is_template)
1511             {
1512               tree friend_parms;
1513               /* If both are templates, check the name of the two
1514                  TEMPLATE_DECL's first because is_friend didn't.  */
1515               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1516                   != DECL_NAME (friend_decl))
1517                 return false;
1518
1519               /* Now check template parameter list.  */
1520               friend_parms
1521                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1522                                          args, tf_none);
1523               return comp_template_parms
1524                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1525                  friend_parms);
1526             }
1527           else
1528             return (DECL_NAME (decl)
1529                     == DECL_NAME (friend_decl));
1530         }
1531     }
1532   return false;
1533 }
1534
1535 /* Register the specialization SPEC as a specialization of TMPL with
1536    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1537    is actually just a friend declaration.  ATTRLIST is the list of
1538    attributes that the specialization is declared with or NULL when
1539    it isn't.  Returns SPEC, or an equivalent prior declaration, if
1540    available.
1541
1542    We also store instantiations of field packs in the hash table, even
1543    though they are not themselves templates, to make lookup easier.  */
1544
1545 static tree
1546 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1547                          hashval_t hash)
1548 {
1549   tree fn;
1550   spec_entry **slot = NULL;
1551   spec_entry elt;
1552
1553   gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1554               || (TREE_CODE (tmpl) == FIELD_DECL
1555                   && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1556
1557   if (TREE_CODE (spec) == FUNCTION_DECL
1558       && uses_template_parms (DECL_TI_ARGS (spec)))
1559     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1560        register it; we want the corresponding TEMPLATE_DECL instead.
1561        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1562        the more obvious `uses_template_parms (spec)' to avoid problems
1563        with default function arguments.  In particular, given
1564        something like this:
1565
1566           template <class T> void f(T t1, T t = T())
1567
1568        the default argument expression is not substituted for in an
1569        instantiation unless and until it is actually needed.  */
1570     return spec;
1571
1572   if (optimize_specialization_lookup_p (tmpl))
1573     /* We don't put these specializations in the hash table, but we might
1574        want to give an error about a mismatch.  */
1575     fn = retrieve_specialization (tmpl, args, 0);
1576   else
1577     {
1578       elt.tmpl = tmpl;
1579       elt.args = args;
1580       elt.spec = spec;
1581
1582       if (hash == 0)
1583         hash = spec_hasher::hash (&elt);
1584
1585       slot = decl_specializations->find_slot_with_hash (&elt, hash, INSERT);
1586       if (*slot)
1587         fn = (*slot)->spec;
1588       else
1589         fn = NULL_TREE;
1590     }
1591
1592   /* We can sometimes try to re-register a specialization that we've
1593      already got.  In particular, regenerate_decl_from_template calls
1594      duplicate_decls which will update the specialization list.  But,
1595      we'll still get called again here anyhow.  It's more convenient
1596      to simply allow this than to try to prevent it.  */
1597   if (fn == spec)
1598     return spec;
1599   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1600     {
1601       if (DECL_TEMPLATE_INSTANTIATION (fn))
1602         {
1603           if (DECL_ODR_USED (fn)
1604               || DECL_EXPLICIT_INSTANTIATION (fn))
1605             {
1606               error ("specialization of %qD after instantiation",
1607                      fn);
1608               return error_mark_node;
1609             }
1610           else
1611             {
1612               tree clone;
1613               /* This situation should occur only if the first
1614                  specialization is an implicit instantiation, the
1615                  second is an explicit specialization, and the
1616                  implicit instantiation has not yet been used.  That
1617                  situation can occur if we have implicitly
1618                  instantiated a member function and then specialized
1619                  it later.
1620
1621                  We can also wind up here if a friend declaration that
1622                  looked like an instantiation turns out to be a
1623                  specialization:
1624
1625                    template <class T> void foo(T);
1626                    class S { friend void foo<>(int) };
1627                    template <> void foo(int);
1628
1629                  We transform the existing DECL in place so that any
1630                  pointers to it become pointers to the updated
1631                  declaration.
1632
1633                  If there was a definition for the template, but not
1634                  for the specialization, we want this to look as if
1635                  there were no definition, and vice versa.  */
1636               DECL_INITIAL (fn) = NULL_TREE;
1637               duplicate_decls (spec, fn, is_friend);
1638               /* The call to duplicate_decls will have applied
1639                  [temp.expl.spec]:
1640
1641                    An explicit specialization of a function template
1642                    is inline only if it is explicitly declared to be,
1643                    and independently of whether its function template
1644                    is.
1645
1646                 to the primary function; now copy the inline bits to
1647                 the various clones.  */
1648               FOR_EACH_CLONE (clone, fn)
1649                 {
1650                   DECL_DECLARED_INLINE_P (clone)
1651                     = DECL_DECLARED_INLINE_P (fn);
1652                   DECL_SOURCE_LOCATION (clone)
1653                     = DECL_SOURCE_LOCATION (fn);
1654                   DECL_DELETED_FN (clone)
1655                     = DECL_DELETED_FN (fn);
1656                 }
1657               check_specialization_namespace (tmpl);
1658
1659               return fn;
1660             }
1661         }
1662       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1663         {
1664           tree dd = duplicate_decls (spec, fn, is_friend);
1665           if (dd == error_mark_node)
1666             /* We've already complained in duplicate_decls.  */
1667             return error_mark_node;
1668
1669           if (dd == NULL_TREE && DECL_INITIAL (spec))
1670             /* Dup decl failed, but this is a new definition. Set the
1671                line number so any errors match this new
1672                definition.  */
1673             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1674
1675           return fn;
1676         }
1677     }
1678   else if (fn)
1679     return duplicate_decls (spec, fn, is_friend);
1680
1681   /* A specialization must be declared in the same namespace as the
1682      template it is specializing.  */
1683   if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1684       && !check_specialization_namespace (tmpl))
1685     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1686
1687   if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1688     {
1689       spec_entry *entry = ggc_alloc<spec_entry> ();
1690       gcc_assert (tmpl && args && spec);
1691       *entry = elt;
1692       *slot = entry;
1693       if ((TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1694            && PRIMARY_TEMPLATE_P (tmpl)
1695            && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1696           || variable_template_p (tmpl))
1697         /* If TMPL is a forward declaration of a template function, keep a list
1698            of all specializations in case we need to reassign them to a friend
1699            template later in tsubst_friend_function.
1700
1701            Also keep a list of all variable template instantiations so that
1702            process_partial_specialization can check whether a later partial
1703            specialization would have used it.  */
1704         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1705           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1706     }
1707
1708   return spec;
1709 }
1710
1711 /* Returns true iff two spec_entry nodes are equivalent.  */
1712
1713 int comparing_specializations;
1714
1715 bool
1716 spec_hasher::equal (spec_entry *e1, spec_entry *e2)
1717 {
1718   int equal;
1719
1720   ++comparing_specializations;
1721   equal = (e1->tmpl == e2->tmpl
1722            && comp_template_args (e1->args, e2->args));
1723   if (equal && flag_concepts
1724       /* tmpl could be a FIELD_DECL for a capture pack.  */
1725       && TREE_CODE (e1->tmpl) == TEMPLATE_DECL
1726       && VAR_P (DECL_TEMPLATE_RESULT (e1->tmpl))
1727       && uses_template_parms (e1->args))
1728     {
1729       /* Partial specializations of a variable template can be distinguished by
1730          constraints.  */
1731       tree c1 = e1->spec ? get_constraints (e1->spec) : NULL_TREE;
1732       tree c2 = e2->spec ? get_constraints (e2->spec) : NULL_TREE;
1733       equal = equivalent_constraints (c1, c2);
1734     }
1735   --comparing_specializations;
1736
1737   return equal;
1738 }
1739
1740 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1741
1742 static hashval_t
1743 hash_tmpl_and_args (tree tmpl, tree args)
1744 {
1745   hashval_t val = iterative_hash_object (DECL_UID (tmpl), 0);
1746   return iterative_hash_template_arg (args, val);
1747 }
1748
1749 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1750    ignoring SPEC.  */
1751
1752 hashval_t
1753 spec_hasher::hash (spec_entry *e)
1754 {
1755   return hash_tmpl_and_args (e->tmpl, e->args);
1756 }
1757
1758 /* Recursively calculate a hash value for a template argument ARG, for use
1759    in the hash tables of template specializations.   We must be
1760    careful to (at least) skip the same entities template_args_equal
1761    does.  */
1762
1763 hashval_t
1764 iterative_hash_template_arg (tree arg, hashval_t val)
1765 {
1766   if (arg == NULL_TREE)
1767     return iterative_hash_object (arg, val);
1768
1769   if (!TYPE_P (arg))
1770     /* Strip nop-like things, but not the same as STRIP_NOPS.  */
1771     while (CONVERT_EXPR_P (arg)
1772            || TREE_CODE (arg) == NON_LVALUE_EXPR
1773            || class_nttp_const_wrapper_p (arg))
1774       arg = TREE_OPERAND (arg, 0);
1775
1776   enum tree_code code = TREE_CODE (arg);
1777
1778   val = iterative_hash_object (code, val);
1779
1780   switch (code)
1781     {
1782     case ARGUMENT_PACK_SELECT:
1783       gcc_unreachable ();
1784
1785     case ERROR_MARK:
1786       return val;
1787
1788     case IDENTIFIER_NODE:
1789       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1790
1791     case TREE_VEC:
1792       for (int i = 0, len = TREE_VEC_LENGTH (arg); i < len; ++i)
1793         val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1794       return val;
1795
1796     case TYPE_PACK_EXPANSION:
1797     case EXPR_PACK_EXPANSION:
1798       val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1799       return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1800
1801     case TYPE_ARGUMENT_PACK:
1802     case NONTYPE_ARGUMENT_PACK:
1803       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1804
1805     case TREE_LIST:
1806       for (; arg; arg = TREE_CHAIN (arg))
1807         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1808       return val;
1809
1810     case OVERLOAD:
1811       for (lkp_iterator iter (arg); iter; ++iter)
1812         val = iterative_hash_template_arg (*iter, val);
1813       return val;
1814
1815     case CONSTRUCTOR:
1816       {
1817         tree field, value;
1818         unsigned i;
1819         iterative_hash_template_arg (TREE_TYPE (arg), val);
1820         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1821           {
1822             val = iterative_hash_template_arg (field, val);
1823             val = iterative_hash_template_arg (value, val);
1824           }
1825         return val;
1826       }
1827
1828     case PARM_DECL:
1829       if (!DECL_ARTIFICIAL (arg))
1830         {
1831           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1832           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1833         }
1834       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1835
1836     case TARGET_EXPR:
1837       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1838
1839     case PTRMEM_CST:
1840       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1841       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1842
1843     case TEMPLATE_PARM_INDEX:
1844       val = iterative_hash_template_arg
1845         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1846       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1847       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1848
1849     case TRAIT_EXPR:
1850       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1851       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1852       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1853
1854     case BASELINK:
1855       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1856                                          val);
1857       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1858                                           val);
1859
1860     case MODOP_EXPR:
1861       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1862       code = TREE_CODE (TREE_OPERAND (arg, 1));
1863       val = iterative_hash_object (code, val);
1864       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1865
1866     case LAMBDA_EXPR:
1867       /* [temp.over.link] Two lambda-expressions are never considered
1868          equivalent.
1869
1870          So just hash the closure type.  */
1871       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1872
1873     case CAST_EXPR:
1874     case IMPLICIT_CONV_EXPR:
1875     case STATIC_CAST_EXPR:
1876     case REINTERPRET_CAST_EXPR:
1877     case CONST_CAST_EXPR:
1878     case DYNAMIC_CAST_EXPR:
1879     case NEW_EXPR:
1880       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1881       /* Now hash operands as usual.  */
1882       break;
1883
1884     case CALL_EXPR:
1885       {
1886         tree fn = CALL_EXPR_FN (arg);
1887         if (tree name = dependent_name (fn))
1888           {
1889             if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1890               val = iterative_hash_template_arg (TREE_OPERAND (fn, 1), val);
1891             fn = name;
1892           }
1893         val = iterative_hash_template_arg (fn, val);
1894         call_expr_arg_iterator ai;
1895         for (tree x = first_call_expr_arg (arg, &ai); x;
1896              x = next_call_expr_arg (&ai))
1897           val = iterative_hash_template_arg (x, val);
1898         return val;
1899       }
1900
1901     default:
1902       break;
1903     }
1904
1905   char tclass = TREE_CODE_CLASS (code);
1906   switch (tclass)
1907     {
1908     case tcc_type:
1909       if (tree ats = alias_template_specialization_p (arg, nt_transparent))
1910         {
1911           // We want an alias specialization that survived strip_typedefs
1912           // to hash differently from its TYPE_CANONICAL, to avoid hash
1913           // collisions that compare as different in template_args_equal.
1914           // These could be dependent specializations that strip_typedefs
1915           // left alone, or untouched specializations because
1916           // coerce_template_parms returns the unconverted template
1917           // arguments if it sees incomplete argument packs.
1918           tree ti = TYPE_ALIAS_TEMPLATE_INFO (ats);
1919           return hash_tmpl_and_args (TI_TEMPLATE (ti), TI_ARGS (ti));
1920         }
1921
1922       switch (TREE_CODE (arg))
1923         {
1924         case TEMPLATE_TEMPLATE_PARM:
1925           {
1926             tree tpi = TEMPLATE_TYPE_PARM_INDEX (arg);
1927
1928             /* Do not recurse with TPI directly, as that is unbounded
1929                recursion.  */
1930             val = iterative_hash_object (TEMPLATE_PARM_LEVEL (tpi), val);
1931             val = iterative_hash_object (TEMPLATE_PARM_IDX (tpi), val);
1932           }
1933           break;
1934
1935         case  DECLTYPE_TYPE:
1936           val = iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1937           break;
1938
1939         default:
1940           if (tree canonical = TYPE_CANONICAL (arg))
1941             val = iterative_hash_object (TYPE_HASH (canonical), val);
1942           break;
1943         }
1944
1945       return val;
1946
1947     case tcc_declaration:
1948     case tcc_constant:
1949       return iterative_hash_expr (arg, val);
1950
1951     default:
1952       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1953       for (int i = 0, n = cp_tree_operand_length (arg); i < n; ++i)
1954         val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1955       return val;
1956     }
1957
1958   gcc_unreachable ();
1959   return 0;
1960 }
1961
1962 /* Unregister the specialization SPEC as a specialization of TMPL.
1963    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1964    if the SPEC was listed as a specialization of TMPL.
1965
1966    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1967
1968 bool
1969 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1970 {
1971   spec_entry *entry;
1972   spec_entry elt;
1973
1974   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1975   elt.args = TI_ARGS (tinfo);
1976   elt.spec = NULL_TREE;
1977
1978   entry = decl_specializations->find (&elt);
1979   if (entry != NULL)
1980     {
1981       gcc_assert (entry->spec == spec || entry->spec == new_spec);
1982       gcc_assert (new_spec != NULL_TREE);
1983       entry->spec = new_spec;
1984       return 1;
1985     }
1986
1987   return 0;
1988 }
1989
1990 /* Like register_specialization, but for local declarations.  We are
1991    registering SPEC, an instantiation of TMPL.  */
1992
1993 void
1994 register_local_specialization (tree spec, tree tmpl)
1995 {
1996   gcc_assert (tmpl != spec);
1997   local_specializations->put (tmpl, spec);
1998 }
1999
2000 /* TYPE is a class type.  Returns true if TYPE is an explicitly
2001    specialized class.  */
2002
2003 bool
2004 explicit_class_specialization_p (tree type)
2005 {
2006   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
2007     return false;
2008   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
2009 }
2010
2011 /* Print the list of functions at FNS, going through all the overloads
2012    for each element of the list.  Alternatively, FNS cannot be a
2013    TREE_LIST, in which case it will be printed together with all the
2014    overloads.
2015
2016    MORE and *STR should respectively be FALSE and NULL when the function
2017    is called from the outside.  They are used internally on recursive
2018    calls.  print_candidates manages the two parameters and leaves NULL
2019    in *STR when it ends.  */
2020
2021 static void
2022 print_candidates_1 (tree fns, char **str, bool more = false)
2023 {
2024   if (TREE_CODE (fns) == TREE_LIST)
2025     for (; fns; fns = TREE_CHAIN (fns))
2026       print_candidates_1 (TREE_VALUE (fns), str, more || TREE_CHAIN (fns));
2027   else
2028     for (lkp_iterator iter (fns); iter;)
2029       {
2030         tree cand = *iter;
2031         ++iter;
2032
2033         const char *pfx = *str;
2034         if (!pfx)
2035           {
2036             if (more || iter)
2037               pfx = _("candidates are:");
2038             else
2039               pfx = _("candidate is:");
2040             *str = get_spaces (pfx);
2041           }
2042         inform (DECL_SOURCE_LOCATION (cand), "%s %#qD", pfx, cand);
2043       }
2044 }
2045
2046 /* Print the list of candidate FNS in an error message.  FNS can also
2047    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
2048
2049 void
2050 print_candidates (tree fns)
2051 {
2052   char *str = NULL;
2053   print_candidates_1 (fns, &str);
2054   free (str);
2055 }
2056
2057 /* Get a (possibly) constrained template declaration for the
2058    purpose of ordering candidates.  */
2059 static tree
2060 get_template_for_ordering (tree list)
2061 {
2062   gcc_assert (TREE_CODE (list) == TREE_LIST);
2063   tree f = TREE_VALUE (list);
2064   if (tree ti = DECL_TEMPLATE_INFO (f))
2065     return TI_TEMPLATE (ti);
2066   return f;
2067 }
2068
2069 /* Among candidates having the same signature, return the
2070    most constrained or NULL_TREE if there is no best candidate.
2071    If the signatures of candidates vary (e.g., template
2072    specialization vs. member function), then there can be no
2073    most constrained.
2074
2075    Note that we don't compare constraints on the functions
2076    themselves, but rather those of their templates. */
2077 static tree
2078 most_constrained_function (tree candidates)
2079 {
2080   // Try to find the best candidate in a first pass.
2081   tree champ = candidates;
2082   for (tree c = TREE_CHAIN (champ); c; c = TREE_CHAIN (c))
2083     {
2084       int winner = more_constrained (get_template_for_ordering (champ),
2085                                      get_template_for_ordering (c));
2086       if (winner == -1)
2087         champ = c; // The candidate is more constrained
2088       else if (winner == 0)
2089         return NULL_TREE; // Neither is more constrained
2090     }
2091
2092   // Verify that the champ is better than previous candidates.
2093   for (tree c = candidates; c != champ; c = TREE_CHAIN (c)) {
2094     if (!more_constrained (get_template_for_ordering (champ),
2095                            get_template_for_ordering (c)))
2096       return NULL_TREE;
2097   }
2098
2099   return champ;
2100 }
2101
2102
2103 /* Returns the template (one of the functions given by TEMPLATE_ID)
2104    which can be specialized to match the indicated DECL with the
2105    explicit template args given in TEMPLATE_ID.  The DECL may be
2106    NULL_TREE if none is available.  In that case, the functions in
2107    TEMPLATE_ID are non-members.
2108
2109    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
2110    specialization of a member template.
2111
2112    The TEMPLATE_COUNT is the number of references to qualifying
2113    template classes that appeared in the name of the function. See
2114    check_explicit_specialization for a more accurate description.
2115
2116    TSK indicates what kind of template declaration (if any) is being
2117    declared.  TSK_TEMPLATE indicates that the declaration given by
2118    DECL, though a FUNCTION_DECL, has template parameters, and is
2119    therefore a template function.
2120
2121    The template args (those explicitly specified and those deduced)
2122    are output in a newly created vector *TARGS_OUT.
2123
2124    If it is impossible to determine the result, an error message is
2125    issued.  The error_mark_node is returned to indicate failure.  */
2126
2127 static tree
2128 determine_specialization (tree template_id,
2129                           tree decl,
2130                           tree* targs_out,
2131                           int need_member_template,
2132                           int template_count,
2133                           tmpl_spec_kind tsk)
2134 {
2135   tree fns;
2136   tree targs;
2137   tree explicit_targs;
2138   tree candidates = NULL_TREE;
2139
2140   /* A TREE_LIST of templates of which DECL may be a specialization.
2141      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
2142      corresponding TREE_PURPOSE is the set of template arguments that,
2143      when used to instantiate the template, would produce a function
2144      with the signature of DECL.  */
2145   tree templates = NULL_TREE;
2146   int header_count;
2147   cp_binding_level *b;
2148
2149   *targs_out = NULL_TREE;
2150
2151   if (template_id == error_mark_node || decl == error_mark_node)
2152     return error_mark_node;
2153
2154   /* We shouldn't be specializing a member template of an
2155      unspecialized class template; we already gave an error in
2156      check_specialization_scope, now avoid crashing.  */
2157   if (!VAR_P (decl)
2158       && template_count && DECL_CLASS_SCOPE_P (decl)
2159       && template_class_depth (DECL_CONTEXT (decl)) > 0)
2160     {
2161       gcc_assert (errorcount);
2162       return error_mark_node;
2163     }
2164
2165   fns = TREE_OPERAND (template_id, 0);
2166   explicit_targs = TREE_OPERAND (template_id, 1);
2167
2168   if (fns == error_mark_node)
2169     return error_mark_node;
2170
2171   /* Check for baselinks.  */
2172   if (BASELINK_P (fns))
2173     fns = BASELINK_FUNCTIONS (fns);
2174
2175   if (TREE_CODE (decl) == FUNCTION_DECL && !is_overloaded_fn (fns))
2176     {
2177       error_at (DECL_SOURCE_LOCATION (decl),
2178                 "%qD is not a function template", fns);
2179       return error_mark_node;
2180     }
2181   else if (VAR_P (decl) && !variable_template_p (fns))
2182     {
2183       error ("%qD is not a variable template", fns);
2184       return error_mark_node;
2185     }
2186
2187   /* Count the number of template headers specified for this
2188      specialization.  */
2189   header_count = 0;
2190   for (b = current_binding_level;
2191        b->kind == sk_template_parms;
2192        b = b->level_chain)
2193     ++header_count;
2194
2195   tree orig_fns = fns;
2196
2197   if (variable_template_p (fns))
2198     {
2199       tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (fns));
2200       targs = coerce_template_parms (parms, explicit_targs, fns,
2201                                      tf_warning_or_error,
2202                                      /*req_all*/true, /*use_defarg*/true);
2203       if (targs != error_mark_node)
2204         templates = tree_cons (targs, fns, templates);
2205     }
2206   else for (lkp_iterator iter (fns); iter; ++iter)
2207     {
2208       tree fn = *iter;
2209
2210       if (TREE_CODE (fn) == TEMPLATE_DECL)
2211         {
2212           tree decl_arg_types;
2213           tree fn_arg_types;
2214           tree insttype;
2215
2216           /* In case of explicit specialization, we need to check if
2217              the number of template headers appearing in the specialization
2218              is correct. This is usually done in check_explicit_specialization,
2219              but the check done there cannot be exhaustive when specializing
2220              member functions. Consider the following code:
2221
2222              template <> void A<int>::f(int);
2223              template <> template <> void A<int>::f(int);
2224
2225              Assuming that A<int> is not itself an explicit specialization
2226              already, the first line specializes "f" which is a non-template
2227              member function, whilst the second line specializes "f" which
2228              is a template member function. So both lines are syntactically
2229              correct, and check_explicit_specialization does not reject
2230              them.
2231
2232              Here, we can do better, as we are matching the specialization
2233              against the declarations. We count the number of template
2234              headers, and we check if they match TEMPLATE_COUNT + 1
2235              (TEMPLATE_COUNT is the number of qualifying template classes,
2236              plus there must be another header for the member template
2237              itself).
2238
2239              Notice that if header_count is zero, this is not a
2240              specialization but rather a template instantiation, so there
2241              is no check we can perform here.  */
2242           if (header_count && header_count != template_count + 1)
2243             continue;
2244
2245           /* Check that the number of template arguments at the
2246              innermost level for DECL is the same as for FN.  */
2247           if (current_binding_level->kind == sk_template_parms
2248               && !current_binding_level->explicit_spec_p
2249               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
2250                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
2251                                       (current_template_parms))))
2252             continue;
2253
2254           /* DECL might be a specialization of FN.  */
2255           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2256           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
2257
2258           /* For a non-static member function, we need to make sure
2259              that the const qualification is the same.  Since
2260              get_bindings does not try to merge the "this" parameter,
2261              we must do the comparison explicitly.  */
2262           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
2263             {
2264               if (!same_type_p (TREE_VALUE (fn_arg_types),
2265                                 TREE_VALUE (decl_arg_types)))
2266                 continue;
2267
2268               /* And the ref-qualification.  */
2269               if (type_memfn_rqual (TREE_TYPE (decl))
2270                   != type_memfn_rqual (TREE_TYPE (fn)))
2271                 continue;
2272             }
2273
2274           /* Skip the "this" parameter and, for constructors of
2275              classes with virtual bases, the VTT parameter.  A
2276              full specialization of a constructor will have a VTT
2277              parameter, but a template never will.  */
2278           decl_arg_types
2279             = skip_artificial_parms_for (decl, decl_arg_types);
2280           fn_arg_types
2281             = skip_artificial_parms_for (fn, fn_arg_types);
2282
2283           /* Function templates cannot be specializations; there are
2284              no partial specializations of functions.  Therefore, if
2285              the type of DECL does not match FN, there is no
2286              match.
2287
2288              Note that it should never be the case that we have both
2289              candidates added here, and for regular member functions
2290              below. */
2291           if (tsk == tsk_template)
2292             {
2293               if (!comp_template_parms (DECL_TEMPLATE_PARMS (fn),
2294                                         current_template_parms))
2295                 continue;
2296               if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2297                                 TREE_TYPE (TREE_TYPE (fn))))
2298                 continue;
2299               if (!compparms (fn_arg_types, decl_arg_types))
2300                 continue;
2301
2302               tree freq = get_trailing_function_requirements (fn);
2303               tree dreq = get_trailing_function_requirements (decl);
2304               if (!freq != !dreq)
2305                 continue;
2306               if (freq)
2307                 {
2308                   tree fargs = DECL_TI_ARGS (fn);
2309                   tsubst_flags_t complain = tf_none;
2310                   freq = tsubst_constraint (freq, fargs, complain, fn);
2311                   if (!cp_tree_equal (freq, dreq))
2312                     continue;
2313                 }
2314
2315               candidates = tree_cons (NULL_TREE, fn, candidates);
2316               continue;
2317             }
2318
2319           /* See whether this function might be a specialization of this
2320              template.  Suppress access control because we might be trying
2321              to make this specialization a friend, and we have already done
2322              access control for the declaration of the specialization.  */
2323           push_deferring_access_checks (dk_no_check);
2324           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
2325           pop_deferring_access_checks ();
2326
2327           if (!targs)
2328             /* We cannot deduce template arguments that when used to
2329                specialize TMPL will produce DECL.  */
2330             continue;
2331
2332           if (uses_template_parms (targs))
2333             /* We deduced something involving 'auto', which isn't a valid
2334                template argument.  */
2335             continue;
2336
2337           /* Remove, from the set of candidates, all those functions
2338              whose constraints are not satisfied. */
2339           if (flag_concepts && !constraints_satisfied_p (fn, targs))
2340             continue;
2341
2342           // Then, try to form the new function type.
2343           insttype = tsubst (TREE_TYPE (fn), targs, tf_fndecl_type, NULL_TREE);
2344           if (insttype == error_mark_node)
2345             continue;
2346           fn_arg_types
2347             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
2348           if (!compparms (fn_arg_types, decl_arg_types))
2349             continue;
2350
2351           /* Save this template, and the arguments deduced.  */
2352           templates = tree_cons (targs, fn, templates);
2353         }
2354       else if (need_member_template)
2355         /* FN is an ordinary member function, and we need a
2356            specialization of a member template.  */
2357         ;
2358       else if (TREE_CODE (fn) != FUNCTION_DECL)
2359         /* We can get IDENTIFIER_NODEs here in certain erroneous
2360            cases.  */
2361         ;
2362       else if (!DECL_FUNCTION_MEMBER_P (fn))
2363         /* This is just an ordinary non-member function.  Nothing can
2364            be a specialization of that.  */
2365         ;
2366       else if (DECL_ARTIFICIAL (fn))
2367         /* Cannot specialize functions that are created implicitly.  */
2368         ;
2369       else
2370         {
2371           tree decl_arg_types;
2372
2373           /* This is an ordinary member function.  However, since
2374              we're here, we can assume its enclosing class is a
2375              template class.  For example,
2376
2377                template <typename T> struct S { void f(); };
2378                template <> void S<int>::f() {}
2379
2380              Here, S<int>::f is a non-template, but S<int> is a
2381              template class.  If FN has the same type as DECL, we
2382              might be in business.  */
2383
2384           if (!DECL_TEMPLATE_INFO (fn))
2385             /* Its enclosing class is an explicit specialization
2386                of a template class.  This is not a candidate.  */
2387             continue;
2388
2389           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2390                             TREE_TYPE (TREE_TYPE (fn))))
2391             /* The return types differ.  */
2392             continue;
2393
2394           /* Adjust the type of DECL in case FN is a static member.  */
2395           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2396           if (DECL_STATIC_FUNCTION_P (fn)
2397               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2398             decl_arg_types = TREE_CHAIN (decl_arg_types);
2399
2400           if (!compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2401                          decl_arg_types))
2402             continue;
2403
2404           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
2405               && (type_memfn_rqual (TREE_TYPE (decl))
2406                   != type_memfn_rqual (TREE_TYPE (fn))))
2407             continue;
2408
2409           // If the deduced arguments do not satisfy the constraints,
2410           // this is not a candidate.
2411           if (flag_concepts && !constraints_satisfied_p (fn))
2412             continue;
2413
2414           // Add the candidate.
2415           candidates = tree_cons (NULL_TREE, fn, candidates);
2416         }
2417     }
2418
2419   if (templates && TREE_CHAIN (templates))
2420     {
2421       /* We have:
2422
2423            [temp.expl.spec]
2424
2425            It is possible for a specialization with a given function
2426            signature to be instantiated from more than one function
2427            template.  In such cases, explicit specification of the
2428            template arguments must be used to uniquely identify the
2429            function template specialization being specialized.
2430
2431          Note that here, there's no suggestion that we're supposed to
2432          determine which of the candidate templates is most
2433          specialized.  However, we, also have:
2434
2435            [temp.func.order]
2436
2437            Partial ordering of overloaded function template
2438            declarations is used in the following contexts to select
2439            the function template to which a function template
2440            specialization refers:
2441
2442            -- when an explicit specialization refers to a function
2443               template.
2444
2445          So, we do use the partial ordering rules, at least for now.
2446          This extension can only serve to make invalid programs valid,
2447          so it's safe.  And, there is strong anecdotal evidence that
2448          the committee intended the partial ordering rules to apply;
2449          the EDG front end has that behavior, and John Spicer claims
2450          that the committee simply forgot to delete the wording in
2451          [temp.expl.spec].  */
2452       tree tmpl = most_specialized_instantiation (templates);
2453       if (tmpl != error_mark_node)
2454         {
2455           templates = tmpl;
2456           TREE_CHAIN (templates) = NULL_TREE;
2457         }
2458     }
2459
2460   // Concepts allows multiple declarations of member functions
2461   // with the same signature. Like above, we need to rely on
2462   // on the partial ordering of those candidates to determine which
2463   // is the best.
2464   if (flag_concepts && candidates && TREE_CHAIN (candidates))
2465     {
2466       if (tree cand = most_constrained_function (candidates))
2467         {
2468           candidates = cand;
2469           TREE_CHAIN (cand) = NULL_TREE;
2470         }
2471     }
2472
2473   if (templates == NULL_TREE && candidates == NULL_TREE)
2474     {
2475       error ("template-id %qD for %q+D does not match any template "
2476              "declaration", template_id, decl);
2477       if (header_count && header_count != template_count + 1)
2478         inform (DECL_SOURCE_LOCATION (decl),
2479                 "saw %d %<template<>%>, need %d for "
2480                 "specializing a member function template",
2481                 header_count, template_count + 1);
2482       else
2483         print_candidates (orig_fns);
2484       return error_mark_node;
2485     }
2486   else if ((templates && TREE_CHAIN (templates))
2487            || (candidates && TREE_CHAIN (candidates))
2488            || (templates && candidates))
2489     {
2490       error ("ambiguous template specialization %qD for %q+D",
2491              template_id, decl);
2492       candidates = chainon (candidates, templates);
2493       print_candidates (candidates);
2494       return error_mark_node;
2495     }
2496
2497   /* We have one, and exactly one, match.  */
2498   if (candidates)
2499     {
2500       tree fn = TREE_VALUE (candidates);
2501       *targs_out = copy_node (DECL_TI_ARGS (fn));
2502
2503       /* Propagate the candidate's constraints to the declaration.  */
2504       if (tsk != tsk_template)
2505         set_constraints (decl, get_constraints (fn));
2506
2507       /* DECL is a re-declaration or partial instantiation of a template
2508          function.  */
2509       if (TREE_CODE (fn) == TEMPLATE_DECL)
2510         return fn;
2511       /* It was a specialization of an ordinary member function in a
2512          template class.  */
2513       return DECL_TI_TEMPLATE (fn);
2514     }
2515
2516   /* It was a specialization of a template.  */
2517   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2518   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2519     {
2520       *targs_out = copy_node (targs);
2521       SET_TMPL_ARGS_LEVEL (*targs_out,
2522                            TMPL_ARGS_DEPTH (*targs_out),
2523                            TREE_PURPOSE (templates));
2524     }
2525   else
2526     *targs_out = TREE_PURPOSE (templates);
2527   return TREE_VALUE (templates);
2528 }
2529
2530 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2531    but with the default argument values filled in from those in the
2532    TMPL_TYPES.  */
2533
2534 static tree
2535 copy_default_args_to_explicit_spec_1 (tree spec_types,
2536                                       tree tmpl_types)
2537 {
2538   tree new_spec_types;
2539
2540   if (!spec_types)
2541     return NULL_TREE;
2542
2543   if (spec_types == void_list_node)
2544     return void_list_node;
2545
2546   /* Substitute into the rest of the list.  */
2547   new_spec_types =
2548     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2549                                           TREE_CHAIN (tmpl_types));
2550
2551   /* Add the default argument for this parameter.  */
2552   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2553                          TREE_VALUE (spec_types),
2554                          new_spec_types);
2555 }
2556
2557 /* DECL is an explicit specialization.  Replicate default arguments
2558    from the template it specializes.  (That way, code like:
2559
2560      template <class T> void f(T = 3);
2561      template <> void f(double);
2562      void g () { f (); }
2563
2564    works, as required.)  An alternative approach would be to look up
2565    the correct default arguments at the call-site, but this approach
2566    is consistent with how implicit instantiations are handled.  */
2567
2568 static void
2569 copy_default_args_to_explicit_spec (tree decl)
2570 {
2571   tree tmpl;
2572   tree spec_types;
2573   tree tmpl_types;
2574   tree new_spec_types;
2575   tree old_type;
2576   tree new_type;
2577   tree t;
2578   tree object_type = NULL_TREE;
2579   tree in_charge = NULL_TREE;
2580   tree vtt = NULL_TREE;
2581
2582   /* See if there's anything we need to do.  */
2583   tmpl = DECL_TI_TEMPLATE (decl);
2584   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2585   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2586     if (TREE_PURPOSE (t))
2587       break;
2588   if (!t)
2589     return;
2590
2591   old_type = TREE_TYPE (decl);
2592   spec_types = TYPE_ARG_TYPES (old_type);
2593
2594   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2595     {
2596       /* Remove the this pointer, but remember the object's type for
2597          CV quals.  */
2598       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2599       spec_types = TREE_CHAIN (spec_types);
2600       tmpl_types = TREE_CHAIN (tmpl_types);
2601
2602       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2603         {
2604           /* DECL may contain more parameters than TMPL due to the extra
2605              in-charge parameter in constructors and destructors.  */
2606           in_charge = spec_types;
2607           spec_types = TREE_CHAIN (spec_types);
2608         }
2609       if (DECL_HAS_VTT_PARM_P (decl))
2610         {
2611           vtt = spec_types;
2612           spec_types = TREE_CHAIN (spec_types);
2613         }
2614     }
2615
2616   /* Compute the merged default arguments.  */
2617   new_spec_types =
2618     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2619
2620   /* Compute the new FUNCTION_TYPE.  */
2621   if (object_type)
2622     {
2623       if (vtt)
2624         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2625                                          TREE_VALUE (vtt),
2626                                          new_spec_types);
2627
2628       if (in_charge)
2629         /* Put the in-charge parameter back.  */
2630         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2631                                          TREE_VALUE (in_charge),
2632                                          new_spec_types);
2633
2634       new_type = build_method_type_directly (object_type,
2635                                              TREE_TYPE (old_type),
2636                                              new_spec_types);
2637     }
2638   else
2639     new_type = build_function_type (TREE_TYPE (old_type),
2640                                     new_spec_types);
2641   new_type = cp_build_type_attribute_variant (new_type,
2642                                               TYPE_ATTRIBUTES (old_type));
2643   new_type = cxx_copy_lang_qualifiers (new_type, old_type);
2644
2645   TREE_TYPE (decl) = new_type;
2646 }
2647
2648 /* Return the number of template headers we expect to see for a definition
2649    or specialization of CTYPE or one of its non-template members.  */
2650
2651 int
2652 num_template_headers_for_class (tree ctype)
2653 {
2654   int num_templates = 0;
2655
2656   while (ctype && CLASS_TYPE_P (ctype))
2657     {
2658       /* You're supposed to have one `template <...>' for every
2659          template class, but you don't need one for a full
2660          specialization.  For example:
2661
2662          template <class T> struct S{};
2663          template <> struct S<int> { void f(); };
2664          void S<int>::f () {}
2665
2666          is correct; there shouldn't be a `template <>' for the
2667          definition of `S<int>::f'.  */
2668       if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2669         /* If CTYPE does not have template information of any
2670            kind,  then it is not a template, nor is it nested
2671            within a template.  */
2672         break;
2673       if (explicit_class_specialization_p (ctype))
2674         break;
2675       if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2676         ++num_templates;
2677
2678       ctype = TYPE_CONTEXT (ctype);
2679     }
2680
2681   return num_templates;
2682 }
2683
2684 /* Do a simple sanity check on the template headers that precede the
2685    variable declaration DECL.  */
2686
2687 void
2688 check_template_variable (tree decl)
2689 {
2690   tree ctx = CP_DECL_CONTEXT (decl);
2691   int wanted = num_template_headers_for_class (ctx);
2692   if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
2693       && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
2694     {
2695       if (cxx_dialect < cxx14)
2696         pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2697                  "variable templates only available with "
2698                  "%<-std=c++14%> or %<-std=gnu++14%>");
2699
2700       // Namespace-scope variable templates should have a template header.
2701       ++wanted;
2702     }
2703   if (template_header_count > wanted)
2704     {
2705       auto_diagnostic_group d;
2706       bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2707                              "too many template headers for %qD "
2708                              "(should be %d)",
2709                              decl, wanted);
2710       if (warned && CLASS_TYPE_P (ctx)
2711           && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2712         inform (DECL_SOURCE_LOCATION (decl),
2713                 "members of an explicitly specialized class are defined "
2714                 "without a template header");
2715     }
2716 }
2717
2718 /* An explicit specialization whose declarator-id or class-head-name is not
2719    qualified shall be declared in the nearest enclosing namespace of the
2720    template, or, if the namespace is inline (7.3.1), any namespace from its
2721    enclosing namespace set.
2722
2723    If the name declared in the explicit instantiation is an unqualified name,
2724    the explicit instantiation shall appear in the namespace where its template
2725    is declared or, if that namespace is inline (7.3.1), any namespace from its
2726    enclosing namespace set.  */
2727
2728 void
2729 check_unqualified_spec_or_inst (tree t, location_t loc)
2730 {
2731   tree tmpl = most_general_template (t);
2732   if (DECL_NAMESPACE_SCOPE_P (tmpl)
2733       && !is_nested_namespace (current_namespace,
2734                                CP_DECL_CONTEXT (tmpl), true))
2735     {
2736       if (processing_specialization)
2737         permerror (loc, "explicit specialization of %qD outside its "
2738                    "namespace must use a nested-name-specifier", tmpl);
2739       else if (processing_explicit_instantiation
2740                && cxx_dialect >= cxx11)
2741         /* This was allowed in C++98, so only pedwarn.  */
2742         pedwarn (loc, OPT_Wpedantic, "explicit instantiation of %qD "
2743                  "outside its namespace must use a nested-name-"
2744                  "specifier", tmpl);
2745     }
2746 }
2747
2748 /* Warn for a template specialization SPEC that is missing some of a set
2749    of function or type attributes that the template TEMPL is declared with.
2750    ATTRLIST is a list of additional attributes that SPEC should be taken
2751    to ultimately be declared with.  */
2752
2753 static void
2754 warn_spec_missing_attributes (tree tmpl, tree spec, tree attrlist)
2755 {
2756   if (DECL_FUNCTION_TEMPLATE_P (tmpl))
2757     tmpl = DECL_TEMPLATE_RESULT (tmpl);
2758
2759   /* Avoid warning if the difference between the primary and
2760      the specialization is not in one of the attributes below.  */
2761   const char* const blacklist[] = {
2762     "alloc_align", "alloc_size", "assume_aligned", "format",
2763     "format_arg", "malloc", "nonnull", NULL
2764   };
2765
2766   /* Put together a list of the black listed attributes that the primary
2767      template is declared with that the specialization is not, in case
2768      it's not apparent from the most recent declaration of the primary.  */
2769   pretty_printer str;
2770   unsigned nattrs = decls_mismatched_attributes (tmpl, spec, attrlist,
2771                                                  blacklist, &str);
2772
2773   if (!nattrs)
2774     return;
2775
2776   auto_diagnostic_group d;
2777   if (warning_at (DECL_SOURCE_LOCATION (spec), OPT_Wmissing_attributes,
2778                   "explicit specialization %q#D may be missing attributes",
2779                   spec))
2780     inform (DECL_SOURCE_LOCATION (tmpl),
2781             nattrs > 1
2782             ? G_("missing primary template attributes %s")
2783             : G_("missing primary template attribute %s"),
2784             pp_formatted_text (&str));
2785 }
2786
2787 /* Check to see if the function just declared, as indicated in
2788    DECLARATOR, and in DECL, is a specialization of a function
2789    template.  We may also discover that the declaration is an explicit
2790    instantiation at this point.
2791
2792    Returns DECL, or an equivalent declaration that should be used
2793    instead if all goes well.  Issues an error message if something is
2794    amiss.  Returns error_mark_node if the error is not easily
2795    recoverable.
2796
2797    FLAGS is a bitmask consisting of the following flags:
2798
2799    2: The function has a definition.
2800    4: The function is a friend.
2801
2802    The TEMPLATE_COUNT is the number of references to qualifying
2803    template classes that appeared in the name of the function.  For
2804    example, in
2805
2806      template <class T> struct S { void f(); };
2807      void S<int>::f();
2808
2809    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2810    classes are not counted in the TEMPLATE_COUNT, so that in
2811
2812      template <class T> struct S {};
2813      template <> struct S<int> { void f(); }
2814      template <> void S<int>::f();
2815
2816    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2817    invalid; there should be no template <>.)
2818
2819    If the function is a specialization, it is marked as such via
2820    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2821    is set up correctly, and it is added to the list of specializations
2822    for that template.  */
2823
2824 tree
2825 check_explicit_specialization (tree declarator,
2826                                tree decl,
2827                                int template_count,
2828                                int flags,
2829                                tree attrlist)
2830 {
2831   int have_def = flags & 2;
2832   int is_friend = flags & 4;
2833   bool is_concept = flags & 8;
2834   int specialization = 0;
2835   int explicit_instantiation = 0;
2836   int member_specialization = 0;
2837   tree ctype = DECL_CLASS_CONTEXT (decl);
2838   tree dname = DECL_NAME (decl);
2839   tmpl_spec_kind tsk;
2840
2841   if (is_friend)
2842     {
2843       if (!processing_specialization)
2844         tsk = tsk_none;
2845       else
2846         tsk = tsk_excessive_parms;
2847     }
2848   else
2849     tsk = current_tmpl_spec_kind (template_count);
2850
2851   switch (tsk)
2852     {
2853     case tsk_none:
2854       if (processing_specialization && !VAR_P (decl))
2855         {
2856           specialization = 1;
2857           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2858         }
2859       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2860         {
2861           if (is_friend)
2862             /* This could be something like:
2863
2864                template <class T> void f(T);
2865                class S { friend void f<>(int); }  */
2866             specialization = 1;
2867           else
2868             {
2869               /* This case handles bogus declarations like template <>
2870                  template <class T> void f<int>(); */
2871
2872               error_at (cp_expr_loc_or_input_loc (declarator),
2873                         "template-id %qE in declaration of primary template",
2874                         declarator);
2875               return decl;
2876             }
2877         }
2878       break;
2879
2880     case tsk_invalid_member_spec:
2881       /* The error has already been reported in
2882          check_specialization_scope.  */
2883       return error_mark_node;
2884
2885     case tsk_invalid_expl_inst:
2886       error ("template parameter list used in explicit instantiation");
2887
2888       /* Fall through.  */
2889
2890     case tsk_expl_inst:
2891       if (have_def)
2892         error ("definition provided for explicit instantiation");
2893
2894       explicit_instantiation = 1;
2895       break;
2896
2897     case tsk_excessive_parms:
2898     case tsk_insufficient_parms:
2899       if (tsk == tsk_excessive_parms)
2900         error ("too many template parameter lists in declaration of %qD",
2901                decl);
2902       else if (template_header_count)
2903         error("too few template parameter lists in declaration of %qD", decl);
2904       else
2905         error("explicit specialization of %qD must be introduced by "
2906               "%<template <>%>", decl);
2907
2908       /* Fall through.  */
2909     case tsk_expl_spec:
2910       if (is_concept)
2911         error ("explicit specialization declared %<concept%>");
2912
2913       if (VAR_P (decl) && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2914         /* In cases like template<> constexpr bool v = true;
2915            We'll give an error in check_template_variable.  */
2916         break;
2917
2918       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2919       if (ctype)
2920         member_specialization = 1;
2921       else
2922         specialization = 1;
2923       break;
2924
2925     case tsk_template:
2926       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2927         {
2928           /* This case handles bogus declarations like template <>
2929              template <class T> void f<int>(); */
2930
2931           if (!uses_template_parms (TREE_OPERAND (declarator, 1)))
2932             error_at (cp_expr_loc_or_input_loc (declarator),
2933                       "template-id %qE in declaration of primary template",
2934                       declarator);
2935           else if (variable_template_p (TREE_OPERAND (declarator, 0)))
2936             {
2937               /* Partial specialization of variable template.  */
2938               SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2939               specialization = 1;
2940               goto ok;
2941             }
2942           else if (cxx_dialect < cxx14)
2943             error_at (cp_expr_loc_or_input_loc (declarator),
2944                       "non-type partial specialization %qE "
2945                       "is not allowed", declarator);
2946           else
2947             error_at (cp_expr_loc_or_input_loc (declarator),
2948                       "non-class, non-variable partial specialization %qE "
2949                       "is not allowed", declarator);
2950           return decl;
2951         ok:;
2952         }
2953
2954       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2955         /* This is a specialization of a member template, without
2956            specialization the containing class.  Something like:
2957
2958              template <class T> struct S {
2959                template <class U> void f (U);
2960              };
2961              template <> template <class U> void S<int>::f(U) {}
2962
2963            That's a specialization -- but of the entire template.  */
2964         specialization = 1;
2965       break;
2966
2967     default:
2968       gcc_unreachable ();
2969     }
2970
2971   if ((specialization || member_specialization)
2972       /* This doesn't apply to variable templates.  */
2973       && FUNC_OR_METHOD_TYPE_P (TREE_TYPE (decl)))
2974     {
2975       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2976       for (; t; t = TREE_CHAIN (t))
2977         if (TREE_PURPOSE (t))
2978           {
2979             permerror (input_location,
2980                        "default argument specified in explicit specialization");
2981             break;
2982           }
2983     }
2984
2985   if (specialization || member_specialization || explicit_instantiation)
2986     {
2987       tree tmpl = NULL_TREE;
2988       tree targs = NULL_TREE;
2989       bool was_template_id = (TREE_CODE (declarator) == TEMPLATE_ID_EXPR);
2990
2991       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2992       if (!was_template_id)
2993         {
2994           tree fns;
2995
2996           gcc_assert (identifier_p (declarator));
2997           if (ctype)
2998             fns = dname;
2999           else
3000             {
3001               /* If there is no class context, the explicit instantiation
3002                  must be at namespace scope.  */
3003               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
3004
3005               /* Find the namespace binding, using the declaration
3006                  context.  */
3007               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
3008                                            LOOK_want::NORMAL, true);
3009               if (fns == error_mark_node)
3010                 /* If lookup fails, look for a friend declaration so we can
3011                    give a better diagnostic.  */
3012                 fns = (lookup_qualified_name
3013                        (CP_DECL_CONTEXT (decl), dname,
3014                         LOOK_want::NORMAL | LOOK_want::HIDDEN_FRIEND,
3015                         /*complain*/true));
3016
3017               if (fns == error_mark_node || !is_overloaded_fn (fns))
3018                 {
3019                   error ("%qD is not a template function", dname);
3020                   fns = error_mark_node;
3021                 }
3022             }
3023
3024           declarator = lookup_template_function (fns, NULL_TREE);
3025         }
3026
3027       if (declarator == error_mark_node)
3028         return error_mark_node;
3029
3030       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
3031         {
3032           if (!explicit_instantiation)
3033             /* A specialization in class scope.  This is invalid,
3034                but the error will already have been flagged by
3035                check_specialization_scope.  */
3036             return error_mark_node;
3037           else
3038             {
3039               /* It's not valid to write an explicit instantiation in
3040                  class scope, e.g.:
3041
3042                    class C { template void f(); }
3043
3044                    This case is caught by the parser.  However, on
3045                    something like:
3046
3047                    template class C { void f(); };
3048
3049                    (which is invalid) we can get here.  The error will be
3050                    issued later.  */
3051               ;
3052             }
3053
3054           return decl;
3055         }
3056       else if (ctype != NULL_TREE
3057                && (identifier_p (TREE_OPERAND (declarator, 0))))
3058         {
3059           // We'll match variable templates in start_decl.
3060           if (VAR_P (decl))
3061             return decl;
3062
3063           /* Find the list of functions in ctype that have the same
3064              name as the declared function.  */
3065           tree name = TREE_OPERAND (declarator, 0);
3066
3067           if (constructor_name_p (name, ctype))
3068             {
3069               if (DECL_CONSTRUCTOR_P (decl)
3070                   ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
3071                   : !CLASSTYPE_DESTRUCTOR (ctype))
3072                 {
3073                   /* From [temp.expl.spec]:
3074
3075                      If such an explicit specialization for the member
3076                      of a class template names an implicitly-declared
3077                      special member function (clause _special_), the
3078                      program is ill-formed.
3079
3080                      Similar language is found in [temp.explicit].  */
3081                   error ("specialization of implicitly-declared special member function");
3082                   return error_mark_node;
3083                 }
3084
3085               name = DECL_NAME (decl);
3086             }
3087
3088           /* For a type-conversion operator, We might be looking for
3089              `operator int' which will be a specialization of
3090              `operator T'.  Grab all the conversion operators, and
3091              then select from them.  */
3092           tree fns = get_class_binding (ctype, IDENTIFIER_CONV_OP_P (name)
3093                                         ? conv_op_identifier : name);
3094
3095           if (fns == NULL_TREE)
3096             {
3097               error ("no member function %qD declared in %qT", name, ctype);
3098               return error_mark_node;
3099             }
3100           else
3101             TREE_OPERAND (declarator, 0) = fns;
3102         }
3103
3104       /* Figure out what exactly is being specialized at this point.
3105          Note that for an explicit instantiation, even one for a
3106          member function, we cannot tell a priori whether the
3107          instantiation is for a member template, or just a member
3108          function of a template class.  Even if a member template is
3109          being instantiated, the member template arguments may be
3110          elided if they can be deduced from the rest of the
3111          declaration.  */
3112       tmpl = determine_specialization (declarator, decl,
3113                                        &targs,
3114                                        member_specialization,
3115                                        template_count,
3116                                        tsk);
3117
3118       if (!tmpl || tmpl == error_mark_node)
3119         /* We couldn't figure out what this declaration was
3120            specializing.  */
3121         return error_mark_node;
3122       else
3123         {
3124           if (TREE_CODE (decl) == FUNCTION_DECL
3125               && DECL_HIDDEN_FRIEND_P (tmpl))
3126             {
3127               auto_diagnostic_group d;
3128               if (pedwarn (DECL_SOURCE_LOCATION (decl), 0,
3129                            "friend declaration %qD is not visible to "
3130                            "explicit specialization", tmpl))
3131                 inform (DECL_SOURCE_LOCATION (tmpl),
3132                         "friend declaration here");
3133             }
3134           else if (!ctype && !is_friend
3135                    && CP_DECL_CONTEXT (decl) == current_namespace)
3136             check_unqualified_spec_or_inst (tmpl, DECL_SOURCE_LOCATION (decl));
3137
3138           tree gen_tmpl = most_general_template (tmpl);
3139
3140           if (explicit_instantiation)
3141             {
3142               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
3143                  is done by do_decl_instantiation later.  */
3144
3145               int arg_depth = TMPL_ARGS_DEPTH (targs);
3146               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3147
3148               if (arg_depth > parm_depth)
3149                 {
3150                   /* If TMPL is not the most general template (for
3151                      example, if TMPL is a friend template that is
3152                      injected into namespace scope), then there will
3153                      be too many levels of TARGS.  Remove some of them
3154                      here.  */
3155                   int i;
3156                   tree new_targs;
3157
3158                   new_targs = make_tree_vec (parm_depth);
3159                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
3160                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
3161                       = TREE_VEC_ELT (targs, i);
3162                   targs = new_targs;
3163                 }
3164
3165               return instantiate_template (tmpl, targs, tf_error);
3166             }
3167
3168           /* If we thought that the DECL was a member function, but it
3169              turns out to be specializing a static member function,
3170              make DECL a static member function as well.  */
3171           if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3172               && DECL_STATIC_FUNCTION_P (tmpl)
3173               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
3174             revert_static_member_fn (decl);
3175
3176           /* If this is a specialization of a member template of a
3177              template class, we want to return the TEMPLATE_DECL, not
3178              the specialization of it.  */
3179           if (tsk == tsk_template && !was_template_id)
3180             {
3181               tree result = DECL_TEMPLATE_RESULT (tmpl);
3182               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3183               DECL_INITIAL (result) = NULL_TREE;
3184               if (have_def)
3185                 {
3186                   tree parm;
3187                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
3188                   DECL_SOURCE_LOCATION (result)
3189                     = DECL_SOURCE_LOCATION (decl);
3190                   /* We want to use the argument list specified in the
3191                      definition, not in the original declaration.  */
3192                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
3193                   for (parm = DECL_ARGUMENTS (result); parm;
3194                        parm = DECL_CHAIN (parm))
3195                     DECL_CONTEXT (parm) = result;
3196                 }
3197               return register_specialization (tmpl, gen_tmpl, targs,
3198                                               is_friend, 0);
3199             }
3200
3201           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
3202           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
3203
3204           if (was_template_id)
3205             TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl)) = true;
3206
3207           /* Inherit default function arguments from the template
3208              DECL is specializing.  */
3209           if (DECL_FUNCTION_TEMPLATE_P (tmpl))
3210             copy_default_args_to_explicit_spec (decl);
3211
3212           /* This specialization has the same protection as the
3213              template it specializes.  */
3214           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
3215           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
3216
3217           /* 7.1.1-1 [dcl.stc]
3218
3219              A storage-class-specifier shall not be specified in an
3220              explicit specialization...
3221
3222              The parser rejects these, so unless action is taken here,
3223              explicit function specializations will always appear with
3224              global linkage.
3225
3226              The action recommended by the C++ CWG in response to C++
3227              defect report 605 is to make the storage class and linkage
3228              of the explicit specialization match the templated function:
3229
3230              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
3231            */
3232           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
3233             {
3234               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
3235               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
3236
3237               /* A concept cannot be specialized.  */
3238               if (DECL_DECLARED_CONCEPT_P (tmpl_func))
3239                 {
3240                   error ("explicit specialization of function concept %qD",
3241                          gen_tmpl);
3242                   return error_mark_node;
3243                 }
3244
3245               /* This specialization has the same linkage and visibility as
3246                  the function template it specializes.  */
3247               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
3248               if (! TREE_PUBLIC (decl))
3249                 {
3250                   DECL_INTERFACE_KNOWN (decl) = 1;
3251                   DECL_NOT_REALLY_EXTERN (decl) = 1;
3252                 }
3253               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
3254               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
3255                 {
3256                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
3257                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
3258                 }
3259             }
3260
3261           /* If DECL is a friend declaration, declared using an
3262              unqualified name, the namespace associated with DECL may
3263              have been set incorrectly.  For example, in:
3264
3265                template <typename T> void f(T);
3266                namespace N {
3267                  struct S { friend void f<int>(int); }
3268                }
3269
3270              we will have set the DECL_CONTEXT for the friend
3271              declaration to N, rather than to the global namespace.  */
3272           if (DECL_NAMESPACE_SCOPE_P (decl))
3273             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
3274
3275           if (is_friend && !have_def)
3276             /* This is not really a declaration of a specialization.
3277                It's just the name of an instantiation.  But, it's not
3278                a request for an instantiation, either.  */
3279             SET_DECL_IMPLICIT_INSTANTIATION (decl);
3280           else if (TREE_CODE (decl) == FUNCTION_DECL)
3281             /* A specialization is not necessarily COMDAT.  */
3282             DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
3283                                   && DECL_DECLARED_INLINE_P (decl));
3284           else if (VAR_P (decl))
3285             DECL_COMDAT (decl) = false;
3286
3287           /* If this is a full specialization, register it so that we can find
3288              it again.  Partial specializations will be registered in
3289              process_partial_specialization.  */
3290           if (!processing_template_decl)
3291             {
3292               warn_spec_missing_attributes (gen_tmpl, decl, attrlist);
3293
3294               decl = register_specialization (decl, gen_tmpl, targs,
3295                                               is_friend, 0);
3296             }
3297
3298
3299           /* A 'structor should already have clones.  */
3300           gcc_assert (decl == error_mark_node
3301                       || variable_template_p (tmpl)
3302                       || !(DECL_CONSTRUCTOR_P (decl)
3303                            || DECL_DESTRUCTOR_P (decl))
3304                       || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
3305         }
3306     }
3307
3308   return decl;
3309 }
3310
3311 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
3312    parameters.  These are represented in the same format used for
3313    DECL_TEMPLATE_PARMS.  */
3314
3315 int
3316 comp_template_parms (const_tree parms1, const_tree parms2)
3317 {
3318   const_tree p1;
3319   const_tree p2;
3320
3321   if (parms1 == parms2)
3322     return 1;
3323
3324   for (p1 = parms1, p2 = parms2;
3325        p1 != NULL_TREE && p2 != NULL_TREE;
3326        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
3327     {
3328       tree t1 = TREE_VALUE (p1);
3329       tree t2 = TREE_VALUE (p2);
3330       int i;
3331
3332       gcc_assert (TREE_CODE (t1) == TREE_VEC);
3333       gcc_assert (TREE_CODE (t2) == TREE_VEC);
3334
3335       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
3336         return 0;
3337
3338       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
3339         {
3340           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
3341           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
3342
3343           /* If either of the template parameters are invalid, assume
3344              they match for the sake of error recovery. */
3345           if (error_operand_p (parm1) || error_operand_p (parm2))
3346             return 1;
3347
3348           if (TREE_CODE (parm1) != TREE_CODE (parm2))
3349             return 0;
3350
3351           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
3352               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
3353                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
3354             continue;
3355           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
3356             return 0;
3357         }
3358     }
3359
3360   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
3361     /* One set of parameters has more parameters lists than the
3362        other.  */
3363     return 0;
3364
3365   return 1;
3366 }
3367
3368 /* Returns true if two template parameters are declared with
3369    equivalent constraints.  */
3370
3371 static bool
3372 template_parameter_constraints_equivalent_p (const_tree parm1, const_tree parm2)
3373 {
3374   tree req1 = TREE_TYPE (parm1);
3375   tree req2 = TREE_TYPE (parm2);
3376   if (!req1 != !req2)
3377     return false;
3378   if (req1)
3379     return cp_tree_equal (req1, req2);
3380   return true;
3381 }
3382
3383 /* Returns true when two template parameters are equivalent.  */
3384
3385 static bool
3386 template_parameters_equivalent_p (const_tree parm1, const_tree parm2)
3387 {
3388   tree decl1 = TREE_VALUE (parm1);
3389   tree decl2 = TREE_VALUE (parm2);
3390
3391   /* If either of the template parameters are invalid, assume
3392      they match for the sake of error recovery. */
3393   if (error_operand_p (decl1) || error_operand_p (decl2))
3394     return true;
3395
3396   /* ... they declare parameters of the same kind.  */
3397   if (TREE_CODE (decl1) != TREE_CODE (decl2))
3398     return false;
3399
3400   /* ... one parameter was introduced by a parameter declaration, then
3401      both are. This case arises as a result of eagerly rewriting declarations
3402      during parsing.  */
3403   if (DECL_VIRTUAL_P (decl1) != DECL_VIRTUAL_P (decl2))
3404     return false;
3405
3406   /* ... if either declares a pack, they both do.  */
3407   if (template_parameter_pack_p (decl1) != template_parameter_pack_p (decl2))
3408     return false;
3409
3410   if (TREE_CODE (decl1) == PARM_DECL)
3411     {
3412       /* ... if they declare non-type parameters, the types are equivalent.  */
3413       if (!same_type_p (TREE_TYPE (decl1), TREE_TYPE (decl2)))
3414         return false;
3415     }
3416   else if (TREE_CODE (decl2) == TEMPLATE_DECL)
3417     {
3418       /* ... if they declare template template parameters, their template
3419          parameter lists are equivalent.  */
3420       if (!template_heads_equivalent_p (decl1, decl2))
3421         return false;
3422     }
3423
3424   /* ... if they are declared with a qualified-concept name, they both
3425      are, and those names are equivalent.  */
3426   return template_parameter_constraints_equivalent_p (parm1, parm2);
3427 }
3428
3429 /* Returns true if two template parameters lists are equivalent.
3430    Two template parameter lists are equivalent if they have the
3431    same length and their corresponding parameters are equivalent.
3432
3433    PARMS1 and PARMS2 are TREE_LISTs containing TREE_VECs: the
3434    data structure returned by DECL_TEMPLATE_PARMS.
3435
3436    This is generally the same implementation as comp_template_parms
3437    except that it also the concept names and arguments used to
3438    introduce parameters.  */
3439
3440 static bool
3441 template_parameter_lists_equivalent_p (const_tree parms1, const_tree parms2)
3442 {
3443   if (parms1 == parms2)
3444     return true;
3445
3446   const_tree p1 = parms1;
3447   const_tree p2 = parms2;
3448   while (p1 != NULL_TREE && p2 != NULL_TREE)
3449     {
3450       tree list1 = TREE_VALUE (p1);
3451       tree list2 = TREE_VALUE (p2);
3452
3453       if (TREE_VEC_LENGTH (list1) != TREE_VEC_LENGTH (list2))
3454         return 0;
3455
3456       for (int i = 0; i < TREE_VEC_LENGTH (list2); ++i)
3457         {
3458           tree parm1 = TREE_VEC_ELT (list1, i);
3459           tree parm2 = TREE_VEC_ELT (list2, i);
3460           if (!template_parameters_equivalent_p (parm1, parm2))
3461             return false;
3462         }
3463
3464       p1 = TREE_CHAIN (p1);
3465       p2 = TREE_CHAIN (p2);
3466     }
3467
3468   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
3469     return false;
3470
3471   return true;
3472 }
3473
3474 /* Return true if the requires-clause of the template parameter lists are
3475    equivalent and false otherwise.  */
3476 static bool
3477 template_requirements_equivalent_p (const_tree parms1, const_tree parms2)
3478 {
3479   tree req1 = TEMPLATE_PARMS_CONSTRAINTS (parms1);
3480   tree req2 = TEMPLATE_PARMS_CONSTRAINTS (parms2);
3481   if ((req1 != NULL_TREE) != (req2 != NULL_TREE))
3482     return false;
3483   if (!cp_tree_equal (req1, req2))
3484     return false;
3485   return true;
3486 }
3487
3488 /* Returns true if two template heads are equivalent. 17.6.6.1p6:
3489    Two template heads are equivalent if their template parameter
3490    lists are equivalent and their requires clauses are equivalent.
3491
3492    In pre-C++20, this is equivalent to calling comp_template_parms
3493    for the template parameters of TMPL1 and TMPL2.  */
3494
3495 bool
3496 template_heads_equivalent_p (const_tree tmpl1, const_tree tmpl2)
3497 {
3498   tree parms1 = DECL_TEMPLATE_PARMS (tmpl1);
3499   tree parms2 = DECL_TEMPLATE_PARMS (tmpl2);
3500
3501   /* Don't change the matching rules for pre-C++20.  */
3502   if (cxx_dialect < cxx20)
3503     return comp_template_parms (parms1, parms2);
3504
3505   /* ... have the same number of template parameters, and their
3506      corresponding parameters are equivalent.  */
3507   if (!template_parameter_lists_equivalent_p (parms1, parms2))
3508     return false;
3509
3510   /* ... if either has a requires-clause, they both do and their
3511      corresponding constraint-expressions are equivalent.  */
3512   return template_requirements_equivalent_p (parms1, parms2);
3513 }
3514
3515 /* Determine whether PARM is a parameter pack.  */
3516
3517 bool
3518 template_parameter_pack_p (const_tree parm)
3519 {
3520   /* Determine if we have a non-type template parameter pack.  */
3521   if (TREE_CODE (parm) == PARM_DECL)
3522     return (DECL_TEMPLATE_PARM_P (parm)
3523             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
3524   if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
3525     return TEMPLATE_PARM_PARAMETER_PACK (parm);
3526
3527   /* If this is a list of template parameters, we could get a
3528      TYPE_DECL or a TEMPLATE_DECL.  */
3529   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
3530     parm = TREE_TYPE (parm);
3531
3532   /* Otherwise it must be a type template parameter.  */
3533   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
3534            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
3535           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
3536 }
3537
3538 /* Determine if T is a function parameter pack.  */
3539
3540 bool
3541 function_parameter_pack_p (const_tree t)
3542 {
3543   if (t && TREE_CODE (t) == PARM_DECL)
3544     return DECL_PACK_P (t);
3545   return false;
3546 }
3547
3548 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
3549    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
3550
3551 tree
3552 get_function_template_decl (const_tree primary_func_tmpl_inst)
3553 {
3554   if (! primary_func_tmpl_inst
3555       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
3556       || ! primary_template_specialization_p (primary_func_tmpl_inst))
3557     return NULL;
3558
3559   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
3560 }
3561
3562 /* Return true iff the function parameter PARAM_DECL was expanded
3563    from the function parameter pack PACK.  */
3564
3565 bool
3566 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
3567 {
3568   if (DECL_ARTIFICIAL (param_decl)
3569       || !function_parameter_pack_p (pack))
3570     return false;
3571
3572   /* The parameter pack and its pack arguments have the same
3573      DECL_PARM_INDEX.  */
3574   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
3575 }
3576
3577 /* Determine whether ARGS describes a variadic template args list,
3578    i.e., one that is terminated by a template argument pack.  */
3579
3580 static bool
3581 template_args_variadic_p (tree args)
3582 {
3583   int nargs;
3584   tree last_parm;
3585
3586   if (args == NULL_TREE)
3587     return false;
3588
3589   args = INNERMOST_TEMPLATE_ARGS (args);
3590   nargs = TREE_VEC_LENGTH (args);
3591
3592   if (nargs == 0)
3593     return false;
3594
3595   last_parm = TREE_VEC_ELT (args, nargs - 1);
3596
3597   return ARGUMENT_PACK_P (last_parm);
3598 }
3599
3600 /* Generate a new name for the parameter pack name NAME (an
3601    IDENTIFIER_NODE) that incorporates its */
3602
3603 static tree
3604 make_ith_pack_parameter_name (tree name, int i)
3605 {
3606   /* Munge the name to include the parameter index.  */
3607 #define NUMBUF_LEN 128
3608   char numbuf[NUMBUF_LEN];
3609   char* newname;
3610   int newname_len;
3611
3612   if (name == NULL_TREE)
3613     return name;
3614   snprintf (numbuf, NUMBUF_LEN, "%i", i);
3615   newname_len = IDENTIFIER_LENGTH (name)
3616                 + strlen (numbuf) + 2;
3617   newname = (char*)alloca (newname_len);
3618   snprintf (newname, newname_len,
3619             "%s#%i", IDENTIFIER_POINTER (name), i);
3620   return get_identifier (newname);
3621 }
3622
3623 /* Return true if T is a primary function, class or alias template
3624    specialization, not including the template pattern.  */
3625
3626 bool
3627 primary_template_specialization_p (const_tree t)
3628 {
3629   if (!t)
3630     return false;
3631
3632   if (TREE_CODE (t) == FUNCTION_DECL || VAR_P (t))
3633     return (DECL_LANG_SPECIFIC (t)
3634             && DECL_USE_TEMPLATE (t)
3635             && DECL_TEMPLATE_INFO (t)
3636             && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t)));
3637   else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3638     return (CLASSTYPE_TEMPLATE_INFO (t)
3639             && CLASSTYPE_USE_TEMPLATE (t)
3640             && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)));
3641   else if (alias_template_specialization_p (t, nt_transparent))
3642     return true;
3643   return false;
3644 }
3645
3646 /* Return true if PARM is a template template parameter.  */
3647
3648 bool
3649 template_template_parameter_p (const_tree parm)
3650 {
3651   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
3652 }
3653
3654 /* Return true iff PARM is a DECL representing a type template
3655    parameter.  */
3656
3657 bool
3658 template_type_parameter_p (const_tree parm)
3659 {
3660   return (parm
3661           && (TREE_CODE (parm) == TYPE_DECL
3662               || TREE_CODE (parm) == TEMPLATE_DECL)
3663           && DECL_TEMPLATE_PARM_P (parm));
3664 }
3665
3666 /* Return the template parameters of T if T is a
3667    primary template instantiation, NULL otherwise.  */
3668
3669 tree
3670 get_primary_template_innermost_parameters (const_tree t)
3671 {
3672   tree parms = NULL, template_info = NULL;
3673
3674   if ((template_info = get_template_info (t))
3675       && primary_template_specialization_p (t))
3676     parms = INNERMOST_TEMPLATE_PARMS
3677         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3678
3679   return parms;
3680 }
3681
3682 /* Return the template parameters of the LEVELth level from the full list
3683    of template parameters PARMS.  */
3684
3685 tree
3686 get_template_parms_at_level (tree parms, int level)
3687 {
3688   tree p;
3689   if (!parms
3690       || TREE_CODE (parms) != TREE_LIST
3691       || level > TMPL_PARMS_DEPTH (parms))
3692     return NULL_TREE;
3693
3694   for (p = parms; p; p = TREE_CHAIN (p))
3695     if (TMPL_PARMS_DEPTH (p) == level)
3696       return p;
3697
3698   return NULL_TREE;
3699 }
3700
3701 /* Returns the template arguments of T if T is a template instantiation,
3702    NULL otherwise.  */
3703
3704 tree
3705 get_template_innermost_arguments (const_tree t)
3706 {
3707   tree args = NULL, template_info = NULL;
3708
3709   if ((template_info = get_template_info (t))
3710       && TI_ARGS (template_info))
3711     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3712
3713   return args;
3714 }
3715
3716 /* Return the argument pack elements of T if T is a template argument pack,
3717    NULL otherwise.  */
3718
3719 tree
3720 get_template_argument_pack_elems (const_tree t)
3721 {
3722   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3723       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3724     return NULL;
3725
3726   return ARGUMENT_PACK_ARGS (t);
3727 }
3728
3729 /* In an ARGUMENT_PACK_SELECT, the actual underlying argument that the
3730    ARGUMENT_PACK_SELECT represents. */
3731
3732 static tree
3733 argument_pack_select_arg (tree t)
3734 {
3735   tree args = ARGUMENT_PACK_ARGS (ARGUMENT_PACK_SELECT_FROM_PACK (t));
3736   tree arg = TREE_VEC_ELT (args, ARGUMENT_PACK_SELECT_INDEX (t));
3737
3738   /* If the selected argument is an expansion E, that most likely means we were
3739      called from gen_elem_of_pack_expansion_instantiation during the
3740      substituting of an argument pack (of which the Ith element is a pack
3741      expansion, where I is ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
3742      In this case, the Ith element resulting from this substituting is going to
3743      be a pack expansion, which pattern is the pattern of E.  Let's return the
3744      pattern of E, and gen_elem_of_pack_expansion_instantiation will build the
3745      resulting pack expansion from it.  */
3746   if (PACK_EXPANSION_P (arg))
3747     {
3748       /* Make sure we aren't throwing away arg info.  */
3749       gcc_assert (!PACK_EXPANSION_EXTRA_ARGS (arg));
3750       arg = PACK_EXPANSION_PATTERN (arg);
3751     }
3752
3753   return arg;
3754 }
3755
3756
3757 /* True iff FN is a function representing a built-in variadic parameter
3758    pack.  */
3759
3760 bool
3761 builtin_pack_fn_p (tree fn)
3762 {
3763   if (!fn
3764       || TREE_CODE (fn) != FUNCTION_DECL
3765       || !DECL_IS_BUILTIN (fn))
3766     return false;
3767
3768   if (id_equal (DECL_NAME (fn), "__integer_pack"))
3769     return true;
3770
3771   return false;
3772 }
3773
3774 /* True iff CALL is a call to a function representing a built-in variadic
3775    parameter pack.  */
3776
3777 static bool
3778 builtin_pack_call_p (tree call)
3779 {
3780   if (TREE_CODE (call) != CALL_EXPR)
3781     return false;
3782   return builtin_pack_fn_p (CALL_EXPR_FN (call));
3783 }
3784
3785 /* Return a TREE_VEC for the expansion of __integer_pack(HI).  */
3786
3787 static tree
3788 expand_integer_pack (tree call, tree args, tsubst_flags_t complain,
3789                      tree in_decl)
3790 {
3791   tree ohi = CALL_EXPR_ARG (call, 0);
3792   tree hi = tsubst_copy_and_build (ohi, args, complain, in_decl,
3793                                    false/*fn*/, true/*int_cst*/);
3794
3795   if (value_dependent_expression_p (hi))
3796     {
3797       if (hi != ohi)
3798         {
3799           call = copy_node (call);
3800           CALL_EXPR_ARG (call, 0) = hi;
3801         }
3802       tree ex = make_pack_expansion (call, complain);
3803       tree vec = make_tree_vec (1);
3804       TREE_VEC_ELT (vec, 0) = ex;
3805       return vec;
3806     }
3807   else
3808     {
3809       hi = cxx_constant_value (hi);
3810       int len = valid_constant_size_p (hi) ? tree_to_shwi (hi) : -1;
3811
3812       /* Calculate the largest value of len that won't make the size of the vec
3813          overflow an int.  The compiler will exceed resource limits long before
3814          this, but it seems a decent place to diagnose.  */
3815       int max = ((INT_MAX - sizeof (tree_vec)) / sizeof (tree)) + 1;
3816
3817       if (len < 0 || len > max)
3818         {
3819           if ((complain & tf_error)
3820               && hi != error_mark_node)
3821             error ("argument to %<__integer_pack%> must be between 0 and %d",
3822                    max);
3823           return error_mark_node;
3824         }
3825
3826       tree vec = make_tree_vec (len);
3827
3828       for (int i = 0; i < len; ++i)
3829         TREE_VEC_ELT (vec, i) = size_int (i);
3830
3831       return vec;
3832     }
3833 }
3834
3835 /* Return a TREE_VEC for the expansion of built-in template parameter pack
3836    CALL.  */
3837
3838 static tree
3839 expand_builtin_pack_call (tree call, tree args, tsubst_flags_t complain,
3840                           tree in_decl)
3841 {
3842   if (!builtin_pack_call_p (call))
3843     return NULL_TREE;
3844
3845   tree fn = CALL_EXPR_FN (call);
3846
3847   if (id_equal (DECL_NAME (fn), "__integer_pack"))
3848     return expand_integer_pack (call, args, complain, in_decl);
3849
3850   return NULL_TREE;
3851 }
3852
3853 /* Structure used to track the progress of find_parameter_packs_r.  */
3854 struct find_parameter_pack_data
3855 {
3856   /* TREE_LIST that will contain all of the parameter packs found by
3857      the traversal.  */
3858   tree* parameter_packs;
3859
3860   /* Set of AST nodes that have been visited by the traversal.  */
3861   hash_set<tree> *visited;
3862
3863   /* True iff we're making a type pack expansion.  */
3864   bool type_pack_expansion_p;
3865 };
3866
3867 /* Identifies all of the argument packs that occur in a template
3868    argument and appends them to the TREE_LIST inside DATA, which is a
3869    find_parameter_pack_data structure. This is a subroutine of
3870    make_pack_expansion and uses_parameter_packs.  */
3871 static tree
3872 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3873 {
3874   tree t = *tp;
3875   struct find_parameter_pack_data* ppd =
3876     (struct find_parameter_pack_data*)data;
3877   bool parameter_pack_p = false;
3878
3879   /* Don't look through typedefs; we are interested in whether a
3880      parameter pack is actually written in the expression/type we're
3881      looking at, not the target type.  */
3882   if (TYPE_P (t) && typedef_variant_p (t))
3883     {
3884       /* But do look at arguments for an alias template.  */
3885       if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
3886         cp_walk_tree (&TI_ARGS (tinfo),
3887                       &find_parameter_packs_r,
3888                       ppd, ppd->visited);
3889       *walk_subtrees = 0;
3890       return NULL_TREE;
3891     }
3892
3893   /* Identify whether this is a parameter pack or not.  */
3894   switch (TREE_CODE (t))
3895     {
3896     case TEMPLATE_PARM_INDEX:
3897       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3898         parameter_pack_p = true;
3899       break;
3900
3901     case TEMPLATE_TYPE_PARM:
3902       t = TYPE_MAIN_VARIANT (t);
3903       /* FALLTHRU */
3904     case TEMPLATE_TEMPLATE_PARM:
3905       /* If the placeholder appears in the decl-specifier-seq of a function
3906          parameter pack (14.6.3), or the type-specifier-seq of a type-id that
3907          is a pack expansion, the invented template parameter is a template
3908          parameter pack.  */
3909       if (ppd->type_pack_expansion_p && is_auto (t))
3910         TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
3911       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3912         parameter_pack_p = true;
3913       break;
3914
3915     case FIELD_DECL:
3916     case PARM_DECL:
3917       if (DECL_PACK_P (t))
3918         {
3919           /* We don't want to walk into the type of a PARM_DECL,
3920              because we don't want to see the type parameter pack.  */
3921           *walk_subtrees = 0;
3922           parameter_pack_p = true;
3923         }
3924       break;
3925
3926     case VAR_DECL:
3927       if (DECL_PACK_P (t))
3928         {
3929           /* We don't want to walk into the type of a variadic capture proxy,
3930              because we don't want to see the type parameter pack.  */
3931           *walk_subtrees = 0;
3932           parameter_pack_p = true;
3933         }
3934       else if (variable_template_specialization_p (t))
3935         {
3936           cp_walk_tree (&DECL_TI_ARGS (t),
3937                         find_parameter_packs_r,
3938                         ppd, ppd->visited);
3939           *walk_subtrees = 0;
3940         }
3941       break;
3942
3943     case CALL_EXPR:
3944       if (builtin_pack_call_p (t))
3945         parameter_pack_p = true;
3946       break;
3947
3948     case BASES:
3949       parameter_pack_p = true;
3950       break;
3951     default:
3952       /* Not a parameter pack.  */
3953       break;
3954     }
3955
3956   if (parameter_pack_p)
3957     {
3958       /* Add this parameter pack to the list.  */
3959       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3960     }
3961
3962   if (TYPE_P (t))
3963     cp_walk_tree (&TYPE_CONTEXT (t),
3964                   &find_parameter_packs_r, ppd, ppd->visited);
3965
3966   /* This switch statement will return immediately if we don't find a
3967      parameter pack.  ??? Should some of these be in cp_walk_subtrees?  */
3968   switch (TREE_CODE (t))
3969     {
3970     case BOUND_TEMPLATE_TEMPLATE_PARM:
3971       /* Check the template itself.  */
3972       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3973                     &find_parameter_packs_r, ppd, ppd->visited);
3974       return NULL_TREE;
3975
3976     case DECL_EXPR:
3977       {
3978         tree decl = DECL_EXPR_DECL (t);
3979         /* Ignore the declaration of a capture proxy for a parameter pack.  */
3980         if (is_capture_proxy (decl))
3981           *walk_subtrees = 0;
3982         if (is_typedef_decl (decl))
3983           /* Since we stop at typedefs above, we need to look through them at
3984              the point of the DECL_EXPR.  */
3985           cp_walk_tree (&DECL_ORIGINAL_TYPE (decl),
3986                         &find_parameter_packs_r, ppd, ppd->visited);
3987         return NULL_TREE;
3988       }
3989
3990     case TEMPLATE_DECL:
3991       if (!DECL_TEMPLATE_TEMPLATE_PARM_P (t))
3992         return NULL_TREE;
3993       cp_walk_tree (&TREE_TYPE (t),
3994                     &find_parameter_packs_r, ppd, ppd->visited);
3995       return NULL_TREE;
3996
3997     case TYPE_PACK_EXPANSION:
3998     case EXPR_PACK_EXPANSION:
3999       *walk_subtrees = 0;
4000       return NULL_TREE;
4001
4002     case INTEGER_TYPE:
4003       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
4004                     ppd, ppd->visited);
4005       *walk_subtrees = 0;
4006       return NULL_TREE;
4007
4008     case IDENTIFIER_NODE:
4009       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
4010                     ppd->visited);
4011       *walk_subtrees = 0;
4012       return NULL_TREE;
4013
4014     case LAMBDA_EXPR:
4015       {
4016         /* Since we defer implicit capture, look in the parms and body.  */
4017         tree fn = lambda_function (t);
4018         cp_walk_tree (&TREE_TYPE (fn), &find_parameter_packs_r, ppd,
4019                       ppd->visited);
4020         cp_walk_tree (&DECL_SAVED_TREE (fn), &find_parameter_packs_r, ppd,
4021                       ppd->visited);
4022         return NULL_TREE;
4023       }
4024
4025     case DECLTYPE_TYPE:
4026       {
4027         /* When traversing a DECLTYPE_TYPE_EXPR, we need to set
4028            type_pack_expansion_p to false so that any placeholders
4029            within the expression don't get marked as parameter packs.  */
4030         bool type_pack_expansion_p = ppd->type_pack_expansion_p;
4031         ppd->type_pack_expansion_p = false;
4032         cp_walk_tree (&DECLTYPE_TYPE_EXPR (t), &find_parameter_packs_r,
4033                       ppd, ppd->visited);
4034         ppd->type_pack_expansion_p = type_pack_expansion_p;
4035         *walk_subtrees = 0;
4036         return NULL_TREE;
4037       }
4038
4039     case IF_STMT:
4040       cp_walk_tree (&IF_COND (t), &find_parameter_packs_r,
4041                     ppd, ppd->visited);
4042       cp_walk_tree (&THEN_CLAUSE (t), &find_parameter_packs_r,
4043                     ppd, ppd->visited);
4044       cp_walk_tree (&ELSE_CLAUSE (t), &find_parameter_packs_r,
4045                     ppd, ppd->visited);
4046       /* Don't walk into IF_STMT_EXTRA_ARGS.  */
4047       *walk_subtrees = 0;
4048       return NULL_TREE;
4049
4050     default:
4051       return NULL_TREE;
4052     }
4053
4054   return NULL_TREE;
4055 }
4056
4057 /* Determines if the expression or type T uses any parameter packs.  */
4058 tree
4059 uses_parameter_packs (tree t)
4060 {
4061   tree parameter_packs = NULL_TREE;
4062   struct find_parameter_pack_data ppd;
4063   ppd.parameter_packs = &parameter_packs;
4064   ppd.visited = new hash_set<tree>;
4065   ppd.type_pack_expansion_p = false;
4066   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
4067   delete ppd.visited;
4068   return parameter_packs;
4069 }
4070
4071 /* Turn ARG, which may be an expression, type, or a TREE_LIST
4072    representation a base-class initializer into a parameter pack
4073    expansion. If all goes well, the resulting node will be an
4074    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
4075    respectively.  */
4076 tree
4077 make_pack_expansion (tree arg, tsubst_flags_t complain)
4078 {
4079   tree result;
4080   tree parameter_packs = NULL_TREE;
4081   bool for_types = false;
4082   struct find_parameter_pack_data ppd;
4083
4084   if (!arg || arg == error_mark_node)
4085     return arg;
4086
4087   if (TREE_CODE (arg) == TREE_LIST && TREE_PURPOSE (arg))
4088     {
4089       /* A TREE_LIST with a non-null TREE_PURPOSE is for a base
4090          class initializer.  In this case, the TREE_PURPOSE will be a
4091          _TYPE node (representing the base class expansion we're
4092          initializing) and the TREE_VALUE will be a TREE_LIST
4093          containing the initialization arguments. 
4094
4095          The resulting expansion looks somewhat different from most
4096          expansions. Rather than returning just one _EXPANSION, we
4097          return a TREE_LIST whose TREE_PURPOSE is a
4098          TYPE_PACK_EXPANSION containing the bases that will be
4099          initialized.  The TREE_VALUE will be identical to the
4100          original TREE_VALUE, which is a list of arguments that will
4101          be passed to each base.  We do not introduce any new pack
4102          expansion nodes into the TREE_VALUE (although it is possible
4103          that some already exist), because the TREE_PURPOSE and
4104          TREE_VALUE all need to be expanded together with the same
4105          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
4106          resulting TREE_PURPOSE will mention the parameter packs in
4107          both the bases and the arguments to the bases.  */
4108       tree purpose;
4109       tree value;
4110       tree parameter_packs = NULL_TREE;
4111
4112       /* Determine which parameter packs will be used by the base
4113          class expansion.  */
4114       ppd.visited = new hash_set<tree>;
4115       ppd.parameter_packs = &parameter_packs;
4116       ppd.type_pack_expansion_p = false;
4117       gcc_assert (TYPE_P (TREE_PURPOSE (arg)));
4118       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
4119                     &ppd, ppd.visited);
4120
4121       if (parameter_packs == NULL_TREE)
4122         {
4123           if (complain & tf_error)
4124             error ("base initializer expansion %qT contains no parameter packs",
4125                    arg);
4126           delete ppd.visited;
4127           return error_mark_node;
4128         }
4129
4130       if (TREE_VALUE (arg) != void_type_node)
4131         {
4132           /* Collect the sets of parameter packs used in each of the
4133              initialization arguments.  */
4134           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
4135             {
4136               /* Determine which parameter packs will be expanded in this
4137                  argument.  */
4138               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
4139                             &ppd, ppd.visited);
4140             }
4141         }
4142
4143       delete ppd.visited;
4144
4145       /* Create the pack expansion type for the base type.  */
4146       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
4147       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
4148       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
4149       PACK_EXPANSION_LOCAL_P (purpose) = at_function_scope_p ();
4150
4151       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
4152          they will rarely be compared to anything.  */
4153       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
4154
4155       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
4156     }
4157
4158   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
4159     for_types = true;
4160
4161   /* Build the PACK_EXPANSION_* node.  */
4162   result = for_types
4163      ? cxx_make_type (TYPE_PACK_EXPANSION)
4164      : make_node (EXPR_PACK_EXPANSION);
4165   SET_PACK_EXPANSION_PATTERN (result, arg);
4166   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
4167     {
4168       /* Propagate type and const-expression information.  */
4169       TREE_TYPE (result) = TREE_TYPE (arg);
4170       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
4171       /* Mark this read now, since the expansion might be length 0.  */
4172       mark_exp_read (arg);
4173     }
4174   else
4175     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
4176        they will rarely be compared to anything.  */
4177     SET_TYPE_STRUCTURAL_EQUALITY (result);
4178
4179   /* Determine which parameter packs will be expanded.  */
4180   ppd.parameter_packs = &parameter_packs;
4181   ppd.visited = new hash_set<tree>;
4182   ppd.type_pack_expansion_p = TYPE_P (arg);
4183   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
4184   delete ppd.visited;
4185
4186   /* Make sure we found some parameter packs.  */
4187   if (parameter_packs == NULL_TREE)
4188     {
4189       if (complain & tf_error)
4190         {
4191           if (TYPE_P (arg))
4192             error ("expansion pattern %qT contains no parameter packs", arg);
4193           else
4194             error ("expansion pattern %qE contains no parameter packs", arg);
4195         }
4196       return error_mark_node;
4197     }
4198   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
4199
4200   PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
4201
4202   return result;
4203 }
4204
4205 /* Checks T for any "bare" parameter packs, which have not yet been
4206    expanded, and issues an error if any are found. This operation can
4207    only be done on full expressions or types (e.g., an expression
4208    statement, "if" condition, etc.), because we could have expressions like:
4209
4210      foo(f(g(h(args)))...)
4211
4212    where "args" is a parameter pack. check_for_bare_parameter_packs
4213    should not be called for the subexpressions args, h(args),
4214    g(h(args)), or f(g(h(args))), because we would produce erroneous
4215    error messages.
4216
4217    Returns TRUE and emits an error if there were bare parameter packs,
4218    returns FALSE otherwise.  */
4219 bool
4220 check_for_bare_parameter_packs (tree t, location_t loc /* = UNKNOWN_LOCATION */)
4221 {
4222   tree parameter_packs = NULL_TREE;
4223   struct find_parameter_pack_data ppd;
4224
4225   if (!processing_template_decl || !t || t == error_mark_node)
4226     return false;
4227
4228   /* A lambda might use a parameter pack from the containing context.  */
4229   if (current_class_type && LAMBDA_TYPE_P (current_class_type)
4230       && CLASSTYPE_TEMPLATE_INFO (current_class_type))
4231     return false;
4232
4233   if (TREE_CODE (t) == TYPE_DECL)
4234     t = TREE_TYPE (t);
4235
4236   ppd.parameter_packs = &parameter_packs;
4237   ppd.visited = new hash_set<tree>;
4238   ppd.type_pack_expansion_p = false;
4239   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
4240   delete ppd.visited;
4241
4242   if (parameter_packs)
4243     {
4244       if (loc == UNKNOWN_LOCATION)
4245         loc = cp_expr_loc_or_input_loc (t);
4246       error_at (loc, "parameter packs not expanded with %<...%>:");
4247       while (parameter_packs)
4248         {
4249           tree pack = TREE_VALUE (parameter_packs);
4250           tree name = NULL_TREE;
4251
4252           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
4253               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
4254             name = TYPE_NAME (pack);
4255           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
4256             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
4257           else if (TREE_CODE (pack) == CALL_EXPR)
4258             name = DECL_NAME (CALL_EXPR_FN (pack));
4259           else
4260             name = DECL_NAME (pack);
4261
4262           if (name)
4263             inform (loc, "        %qD", name);
4264           else
4265             inform (loc, "        %s", "<anonymous>");
4266
4267           parameter_packs = TREE_CHAIN (parameter_packs);
4268         }
4269
4270       return true;
4271     }
4272
4273   return false;
4274 }
4275
4276 /* Expand any parameter packs that occur in the template arguments in
4277    ARGS.  */
4278 tree
4279 expand_template_argument_pack (tree args)
4280 {
4281   if (args == error_mark_node)
4282     return error_mark_node;
4283
4284   tree result_args = NULL_TREE;
4285   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
4286   int num_result_args = -1;
4287   int non_default_args_count = -1;
4288
4289   /* First, determine if we need to expand anything, and the number of
4290      slots we'll need.  */
4291   for (in_arg = 0; in_arg < nargs; ++in_arg)
4292     {
4293       tree arg = TREE_VEC_ELT (args, in_arg);
4294       if (arg == NULL_TREE)
4295         return args;
4296       if (ARGUMENT_PACK_P (arg))
4297         {
4298           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
4299           if (num_result_args < 0)
4300             num_result_args = in_arg + num_packed;
4301           else
4302             num_result_args += num_packed;
4303         }
4304       else
4305         {
4306           if (num_result_args >= 0)
4307             num_result_args++;
4308         }
4309     }
4310
4311   /* If no expansion is necessary, we're done.  */
4312   if (num_result_args < 0)
4313     return args;
4314
4315   /* Expand arguments.  */
4316   result_args = make_tree_vec (num_result_args);
4317   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
4318     non_default_args_count =
4319       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
4320   for (in_arg = 0; in_arg < nargs; ++in_arg)
4321     {
4322       tree arg = TREE_VEC_ELT (args, in_arg);
4323       if (ARGUMENT_PACK_P (arg))
4324         {
4325           tree packed = ARGUMENT_PACK_ARGS (arg);
4326           int i, num_packed = TREE_VEC_LENGTH (packed);
4327           for (i = 0; i < num_packed; ++i, ++out_arg)
4328             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
4329           if (non_default_args_count > 0)
4330             non_default_args_count += num_packed - 1;
4331         }
4332       else
4333         {
4334           TREE_VEC_ELT (result_args, out_arg) = arg;
4335           ++out_arg;
4336         }
4337     }
4338   if (non_default_args_count >= 0)
4339     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
4340   return result_args;
4341 }
4342
4343 /* Checks if DECL shadows a template parameter.
4344
4345    [temp.local]: A template-parameter shall not be redeclared within its
4346    scope (including nested scopes).
4347
4348    Emits an error and returns TRUE if the DECL shadows a parameter,
4349    returns FALSE otherwise.  */
4350
4351 bool
4352 check_template_shadow (tree decl)
4353 {
4354   tree olddecl;
4355
4356   /* If we're not in a template, we can't possibly shadow a template
4357      parameter.  */
4358   if (!current_template_parms)
4359     return true;
4360
4361   /* Figure out what we're shadowing.  */
4362   decl = OVL_FIRST (decl);
4363   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
4364
4365   /* If there's no previous binding for this name, we're not shadowing
4366      anything, let alone a template parameter.  */
4367   if (!olddecl)
4368     return true;
4369
4370   /* If we're not shadowing a template parameter, we're done.  Note
4371      that OLDDECL might be an OVERLOAD (or perhaps even an
4372      ERROR_MARK), so we can't just blithely assume it to be a _DECL
4373      node.  */
4374   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
4375     return true;
4376
4377   /* We check for decl != olddecl to avoid bogus errors for using a
4378      name inside a class.  We check TPFI to avoid duplicate errors for
4379      inline member templates.  */
4380   if (decl == olddecl
4381       || (DECL_TEMPLATE_PARM_P (decl)
4382           && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
4383     return true;
4384
4385   /* Don't complain about the injected class name, as we've already
4386      complained about the class itself.  */
4387   if (DECL_SELF_REFERENCE_P (decl))
4388     return false;
4389
4390   if (DECL_TEMPLATE_PARM_P (decl))
4391     error ("declaration of template parameter %q+D shadows "
4392            "template parameter", decl);
4393   else
4394     error ("declaration of %q+#D shadows template parameter", decl);
4395   inform (DECL_SOURCE_LOCATION (olddecl),
4396           "template parameter %qD declared here", olddecl);
4397   return false;
4398 }
4399
4400 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
4401    ORIG_LEVEL, DECL, and TYPE.  */
4402
4403 static tree
4404 build_template_parm_index (int index,
4405                            int level,
4406                            int orig_level,
4407                            tree decl,
4408                            tree type)
4409 {
4410   tree t = make_node (TEMPLATE_PARM_INDEX);
4411   TEMPLATE_PARM_IDX (t) = index;
4412   TEMPLATE_PARM_LEVEL (t) = level;
4413   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
4414   TEMPLATE_PARM_DECL (t) = decl;
4415   TREE_TYPE (t) = type;
4416   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
4417   TREE_READONLY (t) = TREE_READONLY (decl);
4418
4419   return t;
4420 }
4421
4422 /* Find the canonical type parameter for the given template type
4423    parameter.  Returns the canonical type parameter, which may be TYPE
4424    if no such parameter existed.  */
4425
4426 static tree
4427 canonical_type_parameter (tree type)
4428 {
4429   int idx = TEMPLATE_TYPE_IDX (type);
4430
4431   gcc_assert (TREE_CODE (type) != TEMPLATE_TEMPLATE_PARM);
4432
4433   if (vec_safe_length (canonical_template_parms) <= (unsigned) idx)
4434     vec_safe_grow_cleared (canonical_template_parms, idx + 1, true);
4435
4436   for (tree list = (*canonical_template_parms)[idx];
4437        list; list = TREE_CHAIN (list))
4438     if (comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
4439       return TREE_VALUE (list);
4440
4441   (*canonical_template_parms)[idx]
4442     = tree_cons (NULL_TREE, type, (*canonical_template_parms)[idx]);
4443   return type;
4444 }
4445
4446 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
4447    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
4448    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
4449    new one is created.  */
4450
4451 static tree
4452 reduce_template_parm_level (tree index, tree type, int levels, tree args,
4453                             tsubst_flags_t complain)
4454 {
4455   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
4456       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
4457           != TEMPLATE_PARM_LEVEL (index) - levels)
4458       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
4459     {
4460       tree orig_decl = TEMPLATE_PARM_DECL (index);
4461
4462       tree decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
4463                               TREE_CODE (orig_decl), DECL_NAME (orig_decl),
4464                               type);
4465       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
4466       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
4467       DECL_VIRTUAL_P (decl) = DECL_VIRTUAL_P (orig_decl);
4468       DECL_ARTIFICIAL (decl) = 1;
4469       SET_DECL_TEMPLATE_PARM_P (decl);
4470
4471       tree tpi = build_template_parm_index (TEMPLATE_PARM_IDX (index),
4472                                             TEMPLATE_PARM_LEVEL (index) - levels,
4473                                             TEMPLATE_PARM_ORIG_LEVEL (index),
4474                                             decl, type);
4475       TEMPLATE_PARM_DESCENDANTS (index) = tpi;
4476       TEMPLATE_PARM_PARAMETER_PACK (tpi)
4477         = TEMPLATE_PARM_PARAMETER_PACK (index);
4478
4479       /* Template template parameters need this.  */
4480       tree inner = decl;
4481       if (TREE_CODE (decl) == TEMPLATE_DECL)
4482         {
4483           inner = build_decl (DECL_SOURCE_LOCATION (decl),
4484                               TYPE_DECL, DECL_NAME (decl), type);
4485           DECL_TEMPLATE_RESULT (decl) = inner;
4486           DECL_ARTIFICIAL (inner) = true;
4487           DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
4488             (DECL_TEMPLATE_PARMS (orig_decl), args, complain);
4489         }
4490
4491       /* Attach the TPI to the decl.  */
4492       if (TREE_CODE (inner) == TYPE_DECL)
4493         TEMPLATE_TYPE_PARM_INDEX (type) = tpi;
4494       else
4495         DECL_INITIAL (decl) = tpi;
4496     }
4497
4498   return TEMPLATE_PARM_DESCENDANTS (index);
4499 }
4500
4501 /* Process information from new template parameter PARM and append it
4502    to the LIST being built.  This new parameter is a non-type
4503    parameter iff IS_NON_TYPE is true. This new parameter is a
4504    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
4505    is in PARM_LOC.  */
4506
4507 tree
4508 process_template_parm (tree list, location_t parm_loc, tree parm,
4509                        bool is_non_type, bool is_parameter_pack)
4510 {
4511   gcc_assert (TREE_CODE (parm) == TREE_LIST);
4512   tree prev = NULL_TREE;
4513   int idx = 0;
4514
4515   if (list)
4516     {
4517       prev = tree_last (list);
4518
4519       tree p = TREE_VALUE (prev);
4520       if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
4521         idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
4522       else if (TREE_CODE (p) == PARM_DECL)
4523         idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
4524
4525       ++idx;
4526     }
4527
4528   tree decl = NULL_TREE;
4529   tree defval = TREE_PURPOSE (parm);
4530   tree constr = TREE_TYPE (parm);
4531
4532   if (is_non_type)
4533     {
4534       parm = TREE_VALUE (parm);
4535
4536       SET_DECL_TEMPLATE_PARM_P (parm);
4537
4538       if (TREE_TYPE (parm) != error_mark_node)
4539         {
4540           /* [temp.param]
4541
4542              The top-level cv-qualifiers on the template-parameter are
4543              ignored when determining its type.  */
4544           TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
4545           if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
4546             TREE_TYPE (parm) = error_mark_node;
4547           else if (uses_parameter_packs (TREE_TYPE (parm))
4548                    && !is_parameter_pack
4549                    /* If we're in a nested template parameter list, the template
4550                       template parameter could be a parameter pack.  */
4551                    && processing_template_parmlist == 1)
4552             {
4553               /* This template parameter is not a parameter pack, but it
4554                  should be. Complain about "bare" parameter packs.  */
4555               check_for_bare_parameter_packs (TREE_TYPE (parm));
4556
4557               /* Recover by calling this a parameter pack.  */
4558               is_parameter_pack = true;
4559             }
4560         }
4561
4562       /* A template parameter is not modifiable.  */
4563       TREE_CONSTANT (parm) = 1;
4564       TREE_READONLY (parm) = 1;
4565       decl = build_decl (parm_loc,
4566                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
4567       TREE_CONSTANT (decl) = 1;
4568       TREE_READONLY (decl) = 1;
4569       DECL_INITIAL (parm) = DECL_INITIAL (decl)
4570         = build_template_parm_index (idx, processing_template_decl,
4571                                      processing_template_decl,
4572                                      decl, TREE_TYPE (parm));
4573
4574       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4575         = is_parameter_pack;
4576     }
4577   else
4578     {
4579       tree t;
4580       parm = TREE_VALUE (TREE_VALUE (parm));
4581
4582       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
4583         {
4584           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
4585           /* This is for distinguishing between real templates and template
4586              template parameters */
4587           TREE_TYPE (parm) = t;
4588
4589           /* any_template_parm_r expects to be able to get the targs of a
4590              DECL_TEMPLATE_RESULT.  */
4591           tree result = DECL_TEMPLATE_RESULT (parm);
4592           TREE_TYPE (result) = t;
4593           tree args = template_parms_to_args (DECL_TEMPLATE_PARMS (parm));
4594           tree tinfo = build_template_info (parm, args);
4595           retrofit_lang_decl (result);
4596           DECL_TEMPLATE_INFO (result) = tinfo;
4597
4598           decl = parm;
4599         }
4600       else
4601         {
4602           t = cxx_make_type (TEMPLATE_TYPE_PARM);
4603           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
4604           decl = build_decl (parm_loc,
4605                              TYPE_DECL, parm, t);
4606         }
4607
4608       TYPE_NAME (t) = decl;
4609       TYPE_STUB_DECL (t) = decl;
4610       parm = decl;
4611       TEMPLATE_TYPE_PARM_INDEX (t)
4612         = build_template_parm_index (idx, processing_template_decl,
4613                                      processing_template_decl,
4614                                      decl, TREE_TYPE (parm));
4615       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
4616       if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
4617         SET_TYPE_STRUCTURAL_EQUALITY (t);
4618       else
4619         TYPE_CANONICAL (t) = canonical_type_parameter (t);
4620     }
4621   DECL_ARTIFICIAL (decl) = 1;
4622   SET_DECL_TEMPLATE_PARM_P (decl);
4623
4624   /* Build requirements for the type/template parameter.
4625      This must be done after SET_DECL_TEMPLATE_PARM_P or
4626      process_template_parm could fail. */
4627   tree reqs = finish_shorthand_constraint (parm, constr);
4628
4629   decl = pushdecl (decl);
4630   if (!is_non_type)
4631     parm = decl;
4632
4633   /* Build the parameter node linking the parameter declaration,
4634      its default argument (if any), and its constraints (if any). */
4635   parm = build_tree_list (defval, parm);
4636   TEMPLATE_PARM_CONSTRAINTS (parm) = reqs;
4637
4638   if (prev)
4639     TREE_CHAIN (prev) = parm;
4640   else
4641     list = parm;
4642
4643   return list;
4644 }
4645
4646 /* The end of a template parameter list has been reached.  Process the
4647    tree list into a parameter vector, converting each parameter into a more
4648    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
4649    as PARM_DECLs.  */
4650
4651 tree
4652 end_template_parm_list (tree parms)
4653 {
4654   tree saved_parmlist = make_tree_vec (list_length (parms));
4655
4656   /* Pop the dummy parameter level and add the real one.  We do not
4657      morph the dummy parameter in place, as it might have been
4658      captured by a (nested) template-template-parm.  */
4659   current_template_parms = TREE_CHAIN (current_template_parms);
4660
4661   current_template_parms
4662     = tree_cons (size_int (processing_template_decl),
4663                  saved_parmlist, current_template_parms);
4664
4665   for (unsigned ix = 0; parms; ix++)
4666     {
4667       tree parm = parms;
4668       parms = TREE_CHAIN (parms);
4669       TREE_CHAIN (parm) = NULL_TREE;
4670
4671       TREE_VEC_ELT (saved_parmlist, ix) = parm;
4672     }
4673
4674   --processing_template_parmlist;
4675
4676   return saved_parmlist;
4677 }
4678
4679 // Explicitly indicate the end of the template parameter list. We assume
4680 // that the current template parameters have been constructed and/or
4681 // managed explicitly, as when creating new template template parameters
4682 // from a shorthand constraint.
4683 void
4684 end_template_parm_list ()
4685 {
4686   --processing_template_parmlist;
4687 }
4688
4689 /* end_template_decl is called after a template declaration is seen.  */
4690
4691 void
4692 end_template_decl (void)
4693 {
4694   reset_specialization ();
4695
4696   if (! processing_template_decl)
4697     return;
4698
4699   /* This matches the pushlevel in begin_template_parm_list.  */
4700   finish_scope ();
4701
4702   --processing_template_decl;
4703   current_template_parms = TREE_CHAIN (current_template_parms);
4704 }
4705
4706 /* Takes a TREE_LIST representing a template parameter and convert it
4707    into an argument suitable to be passed to the type substitution
4708    functions.  Note that If the TREE_LIST contains an error_mark
4709    node, the returned argument is error_mark_node.  */
4710
4711 tree
4712 template_parm_to_arg (tree t)
4713 {
4714
4715   if (t == NULL_TREE
4716       || TREE_CODE (t) != TREE_LIST)
4717     return t;
4718
4719   if (error_operand_p (TREE_VALUE (t)))
4720     return error_mark_node;
4721
4722   t = TREE_VALUE (t);
4723
4724   if (TREE_CODE (t) == TYPE_DECL
4725       || TREE_CODE (t) == TEMPLATE_DECL)
4726     {
4727       t = TREE_TYPE (t);
4728
4729       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
4730         {
4731           /* Turn this argument into a TYPE_ARGUMENT_PACK
4732              with a single element, which expands T.  */
4733           tree vec = make_tree_vec (1);
4734           if (CHECKING_P)
4735             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
4736
4737           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4738
4739           t = cxx_make_type (TYPE_ARGUMENT_PACK);
4740           SET_ARGUMENT_PACK_ARGS (t, vec);
4741         }
4742     }
4743   else
4744     {
4745       t = DECL_INITIAL (t);
4746
4747       if (TEMPLATE_PARM_PARAMETER_PACK (t))
4748         {
4749           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
4750              with a single element, which expands T.  */
4751           tree vec = make_tree_vec (1);
4752           if (CHECKING_P)
4753             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (vec, TREE_VEC_LENGTH (vec));
4754
4755           t = convert_from_reference (t);
4756           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
4757
4758           t  = make_node (NONTYPE_ARGUMENT_PACK);
4759           SET_ARGUMENT_PACK_ARGS (t, vec);
4760         }
4761       else
4762         t = convert_from_reference (t);
4763     }
4764   return t;
4765 }
4766
4767 /* Given a single level of template parameters (a TREE_VEC), return it
4768    as a set of template arguments.  */
4769
4770 tree
4771 template_parms_level_to_args (tree parms)
4772 {
4773   tree a = copy_node (parms);
4774   TREE_TYPE (a) = NULL_TREE;
4775   for (int i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4776     TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4777
4778   if (CHECKING_P)
4779     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4780
4781   return a;
4782 }
4783
4784 /* Given a set of template parameters, return them as a set of template
4785    arguments.  The template parameters are represented as a TREE_VEC, in
4786    the form documented in cp-tree.h for template arguments.  */
4787
4788 tree
4789 template_parms_to_args (tree parms)
4790 {
4791   tree header;
4792   tree args = NULL_TREE;
4793   int length = TMPL_PARMS_DEPTH (parms);
4794   int l = length;
4795
4796   /* If there is only one level of template parameters, we do not
4797      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4798      TREE_VEC containing the arguments.  */
4799   if (length > 1)
4800     args = make_tree_vec (length);
4801
4802   for (header = parms; header; header = TREE_CHAIN (header))
4803     {
4804       tree a = template_parms_level_to_args (TREE_VALUE (header));
4805
4806       if (length > 1)
4807         TREE_VEC_ELT (args, --l) = a;
4808       else
4809         args = a;
4810     }
4811
4812   return args;
4813 }
4814
4815 /* Within the declaration of a template, return the currently active
4816    template parameters as an argument TREE_VEC.  */
4817
4818 static tree
4819 current_template_args (void)
4820 {
4821   return template_parms_to_args (current_template_parms);
4822 }
4823
4824 /* Return the fully generic arguments for of TMPL, i.e. what
4825    current_template_args would be while parsing it.  */
4826
4827 tree
4828 generic_targs_for (tree tmpl)
4829 {
4830   if (tmpl == NULL_TREE)
4831     return NULL_TREE;
4832   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
4833       || DECL_TEMPLATE_SPECIALIZATION (tmpl))
4834     /* DECL_TEMPLATE_RESULT doesn't have the arguments we want.  For a template
4835        template parameter, it has no TEMPLATE_INFO; for a partial
4836        specialization, it has the arguments for the primary template, and we
4837        want the arguments for the partial specialization.  */;
4838   else if (tree result = DECL_TEMPLATE_RESULT (tmpl))
4839     if (tree ti = get_template_info (result))
4840       return TI_ARGS (ti);
4841   return template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl));
4842 }
4843
4844 /* Update the declared TYPE by doing any lookups which were thought to be
4845    dependent, but are not now that we know the SCOPE of the declarator.  */
4846
4847 tree
4848 maybe_update_decl_type (tree orig_type, tree scope)
4849 {
4850   tree type = orig_type;
4851
4852   if (type == NULL_TREE)
4853     return type;
4854
4855   if (TREE_CODE (orig_type) == TYPE_DECL)
4856     type = TREE_TYPE (type);
4857
4858   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4859       && dependent_type_p (type)
4860       /* Don't bother building up the args in this case.  */
4861       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4862     {
4863       /* tsubst in the args corresponding to the template parameters,
4864          including auto if present.  Most things will be unchanged, but
4865          make_typename_type and tsubst_qualified_id will resolve
4866          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4867       tree args = current_template_args ();
4868       tree auto_node = type_uses_auto (type);
4869       tree pushed;
4870       if (auto_node)
4871         {
4872           tree auto_vec = make_tree_vec (1);
4873           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4874           args = add_to_template_args (args, auto_vec);
4875         }
4876       pushed = push_scope (scope);
4877       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4878       if (pushed)
4879         pop_scope (scope);
4880     }
4881
4882   if (type == error_mark_node)
4883     return orig_type;
4884
4885   if (TREE_CODE (orig_type) == TYPE_DECL)
4886     {
4887       if (same_type_p (type, TREE_TYPE (orig_type)))
4888         type = orig_type;
4889       else
4890         type = TYPE_NAME (type);
4891     }
4892   return type;
4893 }
4894
4895 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4896    template PARMS and constraints, CONSTR.  If MEMBER_TEMPLATE_P is true,
4897    the new  template is a member template. */
4898
4899 static tree
4900 build_template_decl (tree decl, tree parms, bool member_template_p)
4901 {
4902   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4903   SET_DECL_LANGUAGE (tmpl, DECL_LANGUAGE (decl));
4904   DECL_TEMPLATE_PARMS (tmpl) = parms;
4905   DECL_TEMPLATE_RESULT (tmpl) = decl;
4906   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4907   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4908   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4909   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4910
4911   return tmpl;
4912 }
4913
4914 struct template_parm_data
4915 {
4916   /* The level of the template parameters we are currently
4917      processing.  */
4918   int level;
4919
4920   /* The index of the specialization argument we are currently
4921      processing.  */
4922   int current_arg;
4923
4924   /* An array whose size is the number of template parameters.  The
4925      elements are nonzero if the parameter has been used in any one
4926      of the arguments processed so far.  */
4927   int* parms;
4928
4929   /* An array whose size is the number of template arguments.  The
4930      elements are nonzero if the argument makes use of template
4931      parameters of this level.  */
4932   int* arg_uses_template_parms;
4933 };
4934
4935 /* Subroutine of push_template_decl used to see if each template
4936    parameter in a partial specialization is used in the explicit
4937    argument list.  If T is of the LEVEL given in DATA (which is
4938    treated as a template_parm_data*), then DATA->PARMS is marked
4939    appropriately.  */
4940
4941 static int
4942 mark_template_parm (tree t, void* data)
4943 {
4944   int level;
4945   int idx;
4946   struct template_parm_data* tpd = (struct template_parm_data*) data;
4947
4948   template_parm_level_and_index (t, &level, &idx);
4949
4950   if (level == tpd->level)
4951     {
4952       tpd->parms[idx] = 1;
4953       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4954     }
4955
4956   /* In C++17 the type of a non-type argument is a deduced context.  */
4957   if (cxx_dialect >= cxx17
4958       && TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4959     for_each_template_parm (TREE_TYPE (t),
4960                             &mark_template_parm,
4961                             data,
4962                             NULL,
4963                             /*include_nondeduced_p=*/false);
4964
4965   /* Return zero so that for_each_template_parm will continue the
4966      traversal of the tree; we want to mark *every* template parm.  */
4967   return 0;
4968 }
4969
4970 /* Process the partial specialization DECL.  */
4971
4972 static tree
4973 process_partial_specialization (tree decl)
4974 {
4975   tree type = TREE_TYPE (decl);
4976   tree tinfo = get_template_info (decl);
4977   tree maintmpl = TI_TEMPLATE (tinfo);
4978   tree specargs = TI_ARGS (tinfo);
4979   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4980   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4981   tree inner_parms;
4982   tree inst;
4983   int nargs = TREE_VEC_LENGTH (inner_args);
4984   int ntparms;
4985   int  i;
4986   bool did_error_intro = false;
4987   struct template_parm_data tpd;
4988   struct template_parm_data tpd2;
4989
4990   gcc_assert (current_template_parms);
4991
4992   /* A concept cannot be specialized.  */
4993   if (flag_concepts && variable_concept_p (maintmpl))
4994     {
4995       error ("specialization of variable concept %q#D", maintmpl);
4996       return error_mark_node;
4997     }
4998
4999   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
5000   ntparms = TREE_VEC_LENGTH (inner_parms);
5001
5002   /* We check that each of the template parameters given in the
5003      partial specialization is used in the argument list to the
5004      specialization.  For example:
5005
5006        template <class T> struct S;
5007        template <class T> struct S<T*>;
5008
5009      The second declaration is OK because `T*' uses the template
5010      parameter T, whereas
5011
5012        template <class T> struct S<int>;
5013
5014      is no good.  Even trickier is:
5015
5016        template <class T>
5017        struct S1
5018        {
5019           template <class U>
5020           struct S2;
5021           template <class U>
5022           struct S2<T>;
5023        };
5024
5025      The S2<T> declaration is actually invalid; it is a
5026      full-specialization.  Of course,
5027
5028           template <class U>
5029           struct S2<T (*)(U)>;
5030
5031      or some such would have been OK.  */
5032   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
5033   tpd.parms = XALLOCAVEC (int, ntparms);
5034   memset (tpd.parms, 0, sizeof (int) * ntparms);
5035
5036   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
5037   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
5038   for (i = 0; i < nargs; ++i)
5039     {
5040       tpd.current_arg = i;
5041       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
5042                               &mark_template_parm,
5043                               &tpd,
5044                               NULL,
5045                               /*include_nondeduced_p=*/false);
5046     }
5047   for (i = 0; i < ntparms; ++i)
5048     if (tpd.parms[i] == 0)
5049       {
5050         /* One of the template parms was not used in a deduced context in the
5051            specialization.  */
5052         if (!did_error_intro)
5053           {
5054             error ("template parameters not deducible in "
5055                    "partial specialization:");
5056             did_error_intro = true;
5057           }
5058
5059         inform (input_location, "        %qD",
5060                 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
5061       }
5062
5063   if (did_error_intro)
5064     return error_mark_node;
5065
5066   /* [temp.class.spec]
5067
5068      The argument list of the specialization shall not be identical to
5069      the implicit argument list of the primary template.  */
5070   tree main_args
5071     = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (maintmpl)));
5072   if (comp_template_args (inner_args, INNERMOST_TEMPLATE_ARGS (main_args))
5073       && (!flag_concepts
5074           || !strictly_subsumes (current_template_constraints (),
5075                                  main_args, maintmpl)))
5076     {
5077       if (!flag_concepts)
5078         error ("partial specialization %q+D does not specialize "
5079                "any template arguments; to define the primary template, "
5080                "remove the template argument list", decl);
5081       else
5082         error ("partial specialization %q+D does not specialize any "
5083                "template arguments and is not more constrained than "
5084                "the primary template; to define the primary template, "
5085                "remove the template argument list", decl);
5086       inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
5087     }
5088
5089   /* A partial specialization that replaces multiple parameters of the
5090      primary template with a pack expansion is less specialized for those
5091      parameters.  */
5092   if (nargs < DECL_NTPARMS (maintmpl))
5093     {
5094       error ("partial specialization is not more specialized than the "
5095              "primary template because it replaces multiple parameters "
5096              "with a pack expansion");
5097       inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
5098       /* Avoid crash in process_partial_specialization.  */
5099       return decl;
5100     }
5101
5102   else if (nargs > DECL_NTPARMS (maintmpl))
5103     {
5104       error ("too many arguments for partial specialization %qT", type);
5105       inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
5106       /* Avoid crash below.  */
5107       return decl;
5108     }
5109
5110   /* If we aren't in a dependent class, we can actually try deduction.  */
5111   else if (tpd.level == 1
5112            /* FIXME we should be able to handle a partial specialization of a
5113               partial instantiation, but currently we can't (c++/41727).  */
5114            && TMPL_ARGS_DEPTH (specargs) == 1
5115            && !get_partial_spec_bindings (maintmpl, maintmpl, specargs))
5116     {
5117       auto_diagnostic_group d;
5118       if (permerror (input_location, "partial specialization %qD is not "
5119                      "more specialized than", decl))
5120         inform (DECL_SOURCE_LOCATION (maintmpl), "primary template %qD",
5121                 maintmpl);
5122     }
5123
5124   /* [temp.class.spec]
5125
5126      A partially specialized non-type argument expression shall not
5127      involve template parameters of the partial specialization except
5128      when the argument expression is a simple identifier.
5129
5130      The type of a template parameter corresponding to a specialized
5131      non-type argument shall not be dependent on a parameter of the
5132      specialization.
5133
5134      Also, we verify that pack expansions only occur at the
5135      end of the argument list.  */
5136   tpd2.parms = 0;
5137   for (i = 0; i < nargs; ++i)
5138     {
5139       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
5140       tree arg = TREE_VEC_ELT (inner_args, i);
5141       tree packed_args = NULL_TREE;
5142       int j, len = 1;
5143
5144       if (ARGUMENT_PACK_P (arg))
5145         {
5146           /* Extract the arguments from the argument pack. We'll be
5147              iterating over these in the following loop.  */
5148           packed_args = ARGUMENT_PACK_ARGS (arg);
5149           len = TREE_VEC_LENGTH (packed_args);
5150         }
5151
5152       for (j = 0; j < len; j++)
5153         {
5154           if (packed_args)
5155             /* Get the Jth argument in the parameter pack.  */
5156             arg = TREE_VEC_ELT (packed_args, j);
5157
5158           if (PACK_EXPANSION_P (arg))
5159             {
5160               /* Pack expansions must come at the end of the
5161                  argument list.  */
5162               if ((packed_args && j < len - 1)
5163                   || (!packed_args && i < nargs - 1))
5164                 {
5165                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5166                     error ("parameter pack argument %qE must be at the "
5167                            "end of the template argument list", arg);
5168                   else
5169                     error ("parameter pack argument %qT must be at the "
5170                            "end of the template argument list", arg);
5171                 }
5172             }
5173
5174           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5175             /* We only care about the pattern.  */
5176             arg = PACK_EXPANSION_PATTERN (arg);
5177
5178           if (/* These first two lines are the `non-type' bit.  */
5179               !TYPE_P (arg)
5180               && TREE_CODE (arg) != TEMPLATE_DECL
5181               /* This next two lines are the `argument expression is not just a
5182                  simple identifier' condition and also the `specialized
5183                  non-type argument' bit.  */
5184               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
5185               && !((REFERENCE_REF_P (arg)
5186                     || TREE_CODE (arg) == VIEW_CONVERT_EXPR)
5187                    && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
5188             {
5189               if ((!packed_args && tpd.arg_uses_template_parms[i])
5190                   || (packed_args && uses_template_parms (arg)))
5191                 error_at (cp_expr_loc_or_input_loc (arg),
5192                           "template argument %qE involves template "
5193                           "parameter(s)", arg);
5194               else 
5195                 {
5196                   /* Look at the corresponding template parameter,
5197                      marking which template parameters its type depends
5198                      upon.  */
5199                   tree type = TREE_TYPE (parm);
5200
5201                   if (!tpd2.parms)
5202                     {
5203                       /* We haven't yet initialized TPD2.  Do so now.  */
5204                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
5205                       /* The number of parameters here is the number in the
5206                          main template, which, as checked in the assertion
5207                          above, is NARGS.  */
5208                       tpd2.parms = XALLOCAVEC (int, nargs);
5209                       tpd2.level = 
5210                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
5211                     }
5212
5213                   /* Mark the template parameters.  But this time, we're
5214                      looking for the template parameters of the main
5215                      template, not in the specialization.  */
5216                   tpd2.current_arg = i;
5217                   tpd2.arg_uses_template_parms[i] = 0;
5218                   memset (tpd2.parms, 0, sizeof (int) * nargs);
5219                   for_each_template_parm (type,
5220                                           &mark_template_parm,
5221                                           &tpd2,
5222                                           NULL,
5223                                           /*include_nondeduced_p=*/false);
5224
5225                   if (tpd2.arg_uses_template_parms [i])
5226                     {
5227                       /* The type depended on some template parameters.
5228                          If they are fully specialized in the
5229                          specialization, that's OK.  */
5230                       int j;
5231                       int count = 0;
5232                       for (j = 0; j < nargs; ++j)
5233                         if (tpd2.parms[j] != 0
5234                             && tpd.arg_uses_template_parms [j])
5235                           ++count;
5236                       if (count != 0)
5237                         error_n (input_location, count,
5238                                  "type %qT of template argument %qE depends "
5239                                  "on a template parameter",
5240                                  "type %qT of template argument %qE depends "
5241                                  "on template parameters",
5242                                  type,
5243                                  arg);
5244                     }
5245                 }
5246             }
5247         }
5248     }
5249
5250   /* We should only get here once.  */
5251   if (TREE_CODE (decl) == TYPE_DECL)
5252     gcc_assert (!COMPLETE_TYPE_P (type));
5253
5254   // Build the template decl.
5255   tree tmpl = build_template_decl (decl, current_template_parms,
5256                                    DECL_MEMBER_TEMPLATE_P (maintmpl));
5257   SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
5258   DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
5259   DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
5260
5261   /* Give template template parms a DECL_CONTEXT of the template
5262      for which they are a parameter.  */
5263   for (i = 0; i < ntparms; ++i)
5264     {
5265       tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
5266       if (TREE_CODE (parm) == TEMPLATE_DECL)
5267         DECL_CONTEXT (parm) = tmpl;
5268     }
5269
5270   if (VAR_P (decl))
5271     /* We didn't register this in check_explicit_specialization so we could
5272        wait until the constraints were set.  */
5273     decl = register_specialization (decl, maintmpl, specargs, false, 0);
5274   else
5275     associate_classtype_constraints (type);
5276
5277   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
5278     = tree_cons (specargs, tmpl,
5279                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
5280   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
5281
5282   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
5283        inst = TREE_CHAIN (inst))
5284     {
5285       tree instance = TREE_VALUE (inst);
5286       if (TYPE_P (instance)
5287           ? (COMPLETE_TYPE_P (instance)
5288              && CLASSTYPE_IMPLICIT_INSTANTIATION (instance))
5289           : DECL_TEMPLATE_INSTANTIATION (instance))
5290         {
5291           tree spec = most_specialized_partial_spec (instance, tf_none);
5292           tree inst_decl = (DECL_P (instance)
5293                             ? instance : TYPE_NAME (instance));
5294           if (!spec)
5295             /* OK */;
5296           else if (spec == error_mark_node)
5297             permerror (input_location,
5298                        "declaration of %qD ambiguates earlier template "
5299                        "instantiation for %qD", decl, inst_decl);
5300           else if (TREE_VALUE (spec) == tmpl)
5301             permerror (input_location,
5302                        "partial specialization of %qD after instantiation "
5303                        "of %qD", decl, inst_decl);
5304         }
5305     }
5306
5307   return decl;
5308 }
5309
5310 /* PARM is a template parameter of some form; return the corresponding
5311    TEMPLATE_PARM_INDEX.  */
5312
5313 static tree
5314 get_template_parm_index (tree parm)
5315 {
5316   if (TREE_CODE (parm) == PARM_DECL
5317       || TREE_CODE (parm) == CONST_DECL)
5318     parm = DECL_INITIAL (parm);
5319   else if (TREE_CODE (parm) == TYPE_DECL
5320            || TREE_CODE (parm) == TEMPLATE_DECL)
5321     parm = TREE_TYPE (parm);
5322   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
5323       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM
5324       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
5325     parm = TEMPLATE_TYPE_PARM_INDEX (parm);
5326   gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
5327   return parm;
5328 }
5329
5330 /* Subroutine of fixed_parameter_pack_p below.  Look for any template
5331    parameter packs used by the template parameter PARM.  */
5332
5333 static void
5334 fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
5335 {
5336   /* A type parm can't refer to another parm.  */
5337   if (TREE_CODE (parm) == TYPE_DECL || parm == error_mark_node)
5338     return;
5339   else if (TREE_CODE (parm) == PARM_DECL)
5340     {
5341       cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
5342                     ppd, ppd->visited);
5343       return;
5344     }
5345
5346   gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
5347
5348   tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
5349   for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
5350     {
5351       tree p = TREE_VALUE (TREE_VEC_ELT (vec, i));
5352       if (template_parameter_pack_p (p))
5353         /* Any packs in the type are expanded by this parameter.  */;
5354       else
5355         fixed_parameter_pack_p_1 (p, ppd);
5356     }
5357 }
5358
5359 /* PARM is a template parameter pack.  Return any parameter packs used in
5360    its type or the type of any of its template parameters.  If there are
5361    any such packs, it will be instantiated into a fixed template parameter
5362    list by partial instantiation rather than be fully deduced.  */
5363
5364 tree
5365 fixed_parameter_pack_p (tree parm)
5366 {
5367   /* This can only be true in a member template.  */
5368   if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
5369     return NULL_TREE;
5370   /* This can only be true for a parameter pack.  */
5371   if (!template_parameter_pack_p (parm))
5372     return NULL_TREE;
5373   /* A type parm can't refer to another parm.  */
5374   if (TREE_CODE (parm) == TYPE_DECL)
5375     return NULL_TREE;
5376
5377   tree parameter_packs = NULL_TREE;
5378   struct find_parameter_pack_data ppd;
5379   ppd.parameter_packs = &parameter_packs;
5380   ppd.visited = new hash_set<tree>;
5381   ppd.type_pack_expansion_p = false;
5382
5383   fixed_parameter_pack_p_1 (parm, &ppd);
5384
5385   delete ppd.visited;
5386   return parameter_packs;
5387 }
5388
5389 /* Check that a template declaration's use of default arguments and
5390    parameter packs is not invalid.  Here, PARMS are the template
5391    parameters.  IS_PRIMARY is true if DECL is the thing declared by
5392    a primary template.  IS_PARTIAL is true if DECL is a partial
5393    specialization.
5394
5395    IS_FRIEND_DECL is nonzero if DECL is either a non-defining friend
5396    function template declaration or a friend class template
5397    declaration.  In the function case, 1 indicates a declaration, 2
5398    indicates a redeclaration.  When IS_FRIEND_DECL=2, no errors are
5399    emitted for extraneous default arguments.
5400
5401    Returns TRUE if there were no errors found, FALSE otherwise. */
5402
5403 bool
5404 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
5405                          bool is_partial, int is_friend_decl)
5406 {
5407   const char *msg;
5408   int last_level_to_check;
5409   tree parm_level;
5410   bool no_errors = true;
5411
5412   /* [temp.param]
5413
5414      A default template-argument shall not be specified in a
5415      function template declaration or a function template definition, nor
5416      in the template-parameter-list of the definition of a member of a
5417      class template.  */
5418
5419   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
5420       || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
5421     /* You can't have a function template declaration in a local
5422        scope, nor you can you define a member of a class template in a
5423        local scope.  */
5424     return true;
5425
5426   if ((TREE_CODE (decl) == TYPE_DECL
5427        && TREE_TYPE (decl)
5428        && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5429       || (TREE_CODE (decl) == FUNCTION_DECL
5430           && LAMBDA_FUNCTION_P (decl)))
5431     /* A lambda doesn't have an explicit declaration; don't complain
5432        about the parms of the enclosing class.  */
5433     return true;
5434
5435   if (current_class_type
5436       && !TYPE_BEING_DEFINED (current_class_type)
5437       && DECL_LANG_SPECIFIC (decl)
5438       && DECL_DECLARES_FUNCTION_P (decl)
5439       /* If this is either a friend defined in the scope of the class
5440          or a member function.  */
5441       && (DECL_FUNCTION_MEMBER_P (decl)
5442           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
5443           : DECL_FRIEND_CONTEXT (decl)
5444           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
5445           : false)
5446       /* And, if it was a member function, it really was defined in
5447          the scope of the class.  */
5448       && (!DECL_FUNCTION_MEMBER_P (decl)
5449           || DECL_INITIALIZED_IN_CLASS_P (decl)))
5450     /* We already checked these parameters when the template was
5451        declared, so there's no need to do it again now.  This function
5452        was defined in class scope, but we're processing its body now
5453        that the class is complete.  */
5454     return true;
5455
5456   /* Core issue 226 (C++0x only): the following only applies to class
5457      templates.  */
5458   if (is_primary
5459       && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
5460     {
5461       /* [temp.param]
5462
5463          If a template-parameter has a default template-argument, all
5464          subsequent template-parameters shall have a default
5465          template-argument supplied.  */
5466       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
5467         {
5468           tree inner_parms = TREE_VALUE (parm_level);
5469           int ntparms = TREE_VEC_LENGTH (inner_parms);
5470           int seen_def_arg_p = 0;
5471           int i;
5472
5473           for (i = 0; i < ntparms; ++i)
5474             {
5475               tree parm = TREE_VEC_ELT (inner_parms, i);
5476
5477               if (parm == error_mark_node)
5478                 continue;
5479
5480               if (TREE_PURPOSE (parm))
5481                 seen_def_arg_p = 1;
5482               else if (seen_def_arg_p
5483                        && !template_parameter_pack_p (TREE_VALUE (parm)))
5484                 {
5485                   error ("no default argument for %qD", TREE_VALUE (parm));
5486                   /* For better subsequent error-recovery, we indicate that
5487                      there should have been a default argument.  */
5488                   TREE_PURPOSE (parm) = error_mark_node;
5489                   no_errors = false;
5490                 }
5491               else if (!is_partial
5492                        && !is_friend_decl
5493                        /* Don't complain about an enclosing partial
5494                           specialization.  */
5495                        && parm_level == parms
5496                        && (TREE_CODE (decl) == TYPE_DECL || VAR_P (decl))
5497                        && i < ntparms - 1
5498                        && template_parameter_pack_p (TREE_VALUE (parm))
5499                        /* A fixed parameter pack will be partially
5500                           instantiated into a fixed length list.  */
5501                        && !fixed_parameter_pack_p (TREE_VALUE (parm)))
5502                 {
5503                   /* A primary class template, primary variable template
5504                      (DR 2032), or alias template can only have one
5505                      parameter pack, at the end of the template
5506                      parameter list.  */
5507
5508                   error ("parameter pack %q+D must be at the end of the"
5509                          " template parameter list", TREE_VALUE (parm));
5510
5511                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
5512                     = error_mark_node;
5513                   no_errors = false;
5514                 }
5515             }
5516         }
5517     }
5518
5519   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
5520       || is_partial
5521       || !is_primary
5522       || is_friend_decl)
5523     /* For an ordinary class template, default template arguments are
5524        allowed at the innermost level, e.g.:
5525          template <class T = int>
5526          struct S {};
5527        but, in a partial specialization, they're not allowed even
5528        there, as we have in [temp.class.spec]:
5529
5530          The template parameter list of a specialization shall not
5531          contain default template argument values.
5532
5533        So, for a partial specialization, or for a function template
5534        (in C++98/C++03), we look at all of them.  */
5535     ;
5536   else
5537     /* But, for a primary class template that is not a partial
5538        specialization we look at all template parameters except the
5539        innermost ones.  */
5540     parms = TREE_CHAIN (parms);
5541
5542   /* Figure out what error message to issue.  */
5543   if (is_friend_decl == 2)
5544     msg = G_("default template arguments may not be used in function template "
5545              "friend re-declaration");
5546   else if (is_friend_decl)
5547     msg = G_("default template arguments may not be used in template "
5548              "friend declarations");
5549   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
5550     msg = G_("default template arguments may not be used in function templates "
5551              "without %<-std=c++11%> or %<-std=gnu++11%>");
5552   else if (is_partial)
5553     msg = G_("default template arguments may not be used in "
5554              "partial specializations");
5555   else if (current_class_type && CLASSTYPE_IS_TEMPLATE (current_class_type))
5556     msg = G_("default argument for template parameter for class enclosing %qD");
5557   else
5558     /* Per [temp.param]/9, "A default template-argument shall not be
5559        specified in the template-parameter-lists of the definition of
5560        a member of a class template that appears outside of the member's
5561        class.", thus if we aren't handling a member of a class template
5562        there is no need to examine the parameters.  */
5563     return true;
5564
5565   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
5566     /* If we're inside a class definition, there's no need to
5567        examine the parameters to the class itself.  On the one
5568        hand, they will be checked when the class is defined, and,
5569        on the other, default arguments are valid in things like:
5570          template <class T = double>
5571          struct S { template <class U> void f(U); };
5572        Here the default argument for `S' has no bearing on the
5573        declaration of `f'.  */
5574     last_level_to_check = template_class_depth (current_class_type) + 1;
5575   else
5576     /* Check everything.  */
5577     last_level_to_check = 0;
5578
5579   for (parm_level = parms;
5580        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
5581        parm_level = TREE_CHAIN (parm_level))
5582     {
5583       tree inner_parms = TREE_VALUE (parm_level);
5584       int i;
5585       int ntparms;
5586
5587       ntparms = TREE_VEC_LENGTH (inner_parms);
5588       for (i = 0; i < ntparms; ++i)
5589         {
5590           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
5591             continue;
5592
5593           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
5594             {
5595               if (msg)
5596                 {
5597                   no_errors = false;
5598                   if (is_friend_decl == 2)
5599                     return no_errors;
5600
5601                   error (msg, decl);
5602                   msg = 0;
5603                 }
5604
5605               /* Clear out the default argument so that we are not
5606                  confused later.  */
5607               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
5608             }
5609         }
5610
5611       /* At this point, if we're still interested in issuing messages,
5612          they must apply to classes surrounding the object declared.  */
5613       if (msg)
5614         msg = G_("default argument for template parameter for class "
5615                  "enclosing %qD");
5616     }
5617
5618   return no_errors;
5619 }
5620
5621 /* Worker for push_template_decl_real, called via
5622    for_each_template_parm.  DATA is really an int, indicating the
5623    level of the parameters we are interested in.  If T is a template
5624    parameter of that level, return nonzero.  */
5625
5626 static int
5627 template_parm_this_level_p (tree t, void* data)
5628 {
5629   int this_level = *(int *)data;
5630   int level;
5631
5632   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
5633     level = TEMPLATE_PARM_LEVEL (t);
5634   else
5635     level = TEMPLATE_TYPE_LEVEL (t);
5636   return level == this_level;
5637 }
5638
5639 /* Worker for uses_outer_template_parms, called via for_each_template_parm.
5640    DATA is really an int, indicating the innermost outer level of parameters.
5641    If T is a template parameter of that level or further out, return
5642    nonzero.  */
5643
5644 static int
5645 template_parm_outer_level (tree t, void *data)
5646 {
5647   int this_level = *(int *)data;
5648   int level;
5649
5650   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
5651     level = TEMPLATE_PARM_LEVEL (t);
5652   else
5653     level = TEMPLATE_TYPE_LEVEL (t);
5654   return level <= this_level;
5655 }
5656
5657 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
5658    parameters given by current_template_args, or reuses a
5659    previously existing one, if appropriate.  Returns the DECL, or an
5660    equivalent one, if it is replaced via a call to duplicate_decls.
5661
5662    If IS_FRIEND is true, DECL is a friend declaration.  */
5663
5664 tree
5665 push_template_decl_real (tree decl, bool is_friend)
5666 {
5667   tree tmpl;
5668   tree args;
5669   tree info;
5670   tree ctx;
5671   bool is_primary;
5672   bool is_partial;
5673   int new_template_p = 0;
5674   /* True if the template is a member template, in the sense of
5675      [temp.mem].  */
5676   bool member_template_p = false;
5677
5678   if (decl == error_mark_node || !current_template_parms)
5679     return error_mark_node;
5680
5681   /* See if this is a partial specialization.  */
5682   is_partial = ((DECL_IMPLICIT_TYPEDEF_P (decl)
5683                  && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
5684                  && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
5685                 || (VAR_P (decl)
5686                     && DECL_LANG_SPECIFIC (decl)
5687                     && DECL_TEMPLATE_SPECIALIZATION (decl)
5688                     && TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl))));
5689
5690   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
5691     is_friend = true;
5692
5693   if (is_friend)
5694     /* For a friend, we want the context of the friend, not
5695        the type of which it is a friend.  */
5696     ctx = CP_DECL_CONTEXT (decl);
5697   else if (CP_DECL_CONTEXT (decl)
5698            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
5699     /* In the case of a virtual function, we want the class in which
5700        it is defined.  */
5701     ctx = CP_DECL_CONTEXT (decl);
5702   else
5703     /* Otherwise, if we're currently defining some class, the DECL
5704        is assumed to be a member of the class.  */
5705     ctx = current_scope ();
5706
5707   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
5708     ctx = NULL_TREE;
5709
5710   if (!DECL_CONTEXT (decl))
5711     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
5712
5713   /* See if this is a primary template.  */
5714   if (is_friend && ctx
5715       && uses_template_parms_level (ctx, processing_template_decl))
5716     /* A friend template that specifies a class context, i.e.
5717          template <typename T> friend void A<T>::f();
5718        is not primary.  */
5719     is_primary = false;
5720   else if (TREE_CODE (decl) == TYPE_DECL && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5721     is_primary = false;
5722   else
5723     is_primary = template_parm_scope_p ();
5724
5725   if (is_primary)
5726     {
5727       warning (OPT_Wtemplates, "template %qD declared", decl);
5728
5729       if (DECL_CLASS_SCOPE_P (decl))
5730         member_template_p = true;
5731       if (TREE_CODE (decl) == TYPE_DECL
5732           && IDENTIFIER_ANON_P (DECL_NAME (decl)))
5733         {
5734           error ("template class without a name");
5735           return error_mark_node;
5736         }
5737       else if (TREE_CODE (decl) == FUNCTION_DECL)
5738         {
5739           if (member_template_p)
5740             {
5741               if (DECL_OVERRIDE_P (decl) || DECL_FINAL_P (decl))
5742                 error ("member template %qD may not have virt-specifiers", decl);
5743             }
5744           if (DECL_DESTRUCTOR_P (decl))
5745             {
5746               /* [temp.mem]
5747
5748                  A destructor shall not be a member template.  */
5749               error_at (DECL_SOURCE_LOCATION (decl),
5750                         "destructor %qD declared as member template", decl);
5751               return error_mark_node;
5752             }
5753           if (IDENTIFIER_NEWDEL_OP_P (DECL_NAME (decl))
5754               && (!prototype_p (TREE_TYPE (decl))
5755                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
5756                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
5757                   || (TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
5758                       == void_list_node)))
5759             {
5760               /* [basic.stc.dynamic.allocation]
5761
5762                  An allocation function can be a function
5763                  template. ... Template allocation functions shall
5764                  have two or more parameters.  */
5765               error ("invalid template declaration of %qD", decl);
5766               return error_mark_node;
5767             }
5768         }
5769       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
5770                && CLASS_TYPE_P (TREE_TYPE (decl)))
5771         {
5772           /* Class template, set TEMPLATE_TYPE_PARM_FOR_CLASS.  */
5773           tree parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
5774           for (int i = 0; i < TREE_VEC_LENGTH (parms); ++i)
5775             {
5776               tree t = TREE_VALUE (TREE_VEC_ELT (parms, i));
5777               if (TREE_CODE (t) == TYPE_DECL)
5778                 t = TREE_TYPE (t);
5779               if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
5780                 TEMPLATE_TYPE_PARM_FOR_CLASS (t) = true;
5781             }
5782         }
5783       else if (TREE_CODE (decl) == TYPE_DECL
5784                && TYPE_DECL_ALIAS_P (decl))
5785         /* alias-declaration */
5786         gcc_assert (!DECL_ARTIFICIAL (decl));
5787       else if (VAR_P (decl))
5788         /* C++14 variable template. */;
5789       else if (TREE_CODE (decl) == CONCEPT_DECL)
5790         /* C++20 concept definitions.  */;
5791       else
5792         {
5793           error ("template declaration of %q#D", decl);
5794           return error_mark_node;
5795         }
5796     }
5797
5798   /* Check to see that the rules regarding the use of default
5799      arguments are not being violated.  We check args for a friend
5800      functions when we know whether it's a definition, introducing
5801      declaration or re-declaration.  */
5802   if (!is_friend || TREE_CODE (decl) != FUNCTION_DECL)
5803     check_default_tmpl_args (decl, current_template_parms,
5804                              is_primary, is_partial, is_friend);
5805
5806   /* Ensure that there are no parameter packs in the type of this
5807      declaration that have not been expanded.  */
5808   if (TREE_CODE (decl) == FUNCTION_DECL)
5809     {
5810       /* Check each of the arguments individually to see if there are
5811          any bare parameter packs.  */
5812       tree type = TREE_TYPE (decl);
5813       tree arg = DECL_ARGUMENTS (decl);
5814       tree argtype = TYPE_ARG_TYPES (type);
5815
5816       while (arg && argtype)
5817         {
5818           if (!DECL_PACK_P (arg)
5819               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
5820             {
5821             /* This is a PARM_DECL that contains unexpanded parameter
5822                packs. We have already complained about this in the
5823                check_for_bare_parameter_packs call, so just replace
5824                these types with ERROR_MARK_NODE.  */
5825               TREE_TYPE (arg) = error_mark_node;
5826               TREE_VALUE (argtype) = error_mark_node;
5827             }
5828
5829           arg = DECL_CHAIN (arg);
5830           argtype = TREE_CHAIN (argtype);
5831         }
5832
5833       /* Check for bare parameter packs in the return type and the
5834          exception specifiers.  */
5835       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
5836         /* Errors were already issued, set return type to int
5837            as the frontend doesn't expect error_mark_node as
5838            the return type.  */
5839         TREE_TYPE (type) = integer_type_node;
5840       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
5841         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
5842     }
5843   else if (check_for_bare_parameter_packs (is_typedef_decl (decl)
5844                                            ? DECL_ORIGINAL_TYPE (decl)
5845                                            : TREE_TYPE (decl)))
5846     {
5847       TREE_TYPE (decl) = error_mark_node;
5848       return error_mark_node;
5849     }
5850
5851   if (is_partial)
5852     return process_partial_specialization (decl);
5853
5854   args = current_template_args ();
5855
5856   if (!ctx
5857       || TREE_CODE (ctx) == FUNCTION_DECL
5858       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
5859       || (TREE_CODE (decl) == TYPE_DECL && LAMBDA_TYPE_P (TREE_TYPE (decl)))
5860       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
5861     {
5862       if (DECL_LANG_SPECIFIC (decl)
5863           && DECL_TEMPLATE_INFO (decl)
5864           && DECL_TI_TEMPLATE (decl))
5865         tmpl = DECL_TI_TEMPLATE (decl);
5866       /* If DECL is a TYPE_DECL for a class-template, then there won't
5867          be DECL_LANG_SPECIFIC.  The information equivalent to
5868          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
5869       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
5870                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
5871                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
5872         {
5873           /* Since a template declaration already existed for this
5874              class-type, we must be redeclaring it here.  Make sure
5875              that the redeclaration is valid.  */
5876           redeclare_class_template (TREE_TYPE (decl),
5877                                     current_template_parms,
5878                                     current_template_constraints ());
5879           /* We don't need to create a new TEMPLATE_DECL; just use the
5880              one we already had.  */
5881           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
5882         }
5883       else
5884         {
5885           tmpl = build_template_decl (decl, current_template_parms,
5886                                       member_template_p);
5887           new_template_p = 1;
5888
5889           if (DECL_LANG_SPECIFIC (decl)
5890               && DECL_TEMPLATE_SPECIALIZATION (decl))
5891             {
5892               /* A specialization of a member template of a template
5893                  class.  */
5894               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
5895               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
5896               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
5897             }
5898         }
5899     }
5900   else
5901     {
5902       tree a, t, current, parms;
5903       int i;
5904       tree tinfo = get_template_info (decl);
5905
5906       if (!tinfo)
5907         {
5908           error ("template definition of non-template %q#D", decl);
5909           return error_mark_node;
5910         }
5911
5912       tmpl = TI_TEMPLATE (tinfo);
5913
5914       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
5915           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
5916           && DECL_TEMPLATE_SPECIALIZATION (decl)
5917           && DECL_MEMBER_TEMPLATE_P (tmpl))
5918         {
5919           tree new_tmpl;
5920
5921           /* The declaration is a specialization of a member
5922              template, declared outside the class.  Therefore, the
5923              innermost template arguments will be NULL, so we
5924              replace them with the arguments determined by the
5925              earlier call to check_explicit_specialization.  */
5926           args = DECL_TI_ARGS (decl);
5927
5928           new_tmpl
5929             = build_template_decl (decl, current_template_parms,
5930                                    member_template_p);
5931           DECL_TI_TEMPLATE (decl) = new_tmpl;
5932           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
5933           DECL_TEMPLATE_INFO (new_tmpl)
5934             = build_template_info (tmpl, args);
5935
5936           register_specialization (new_tmpl,
5937                                    most_general_template (tmpl),
5938                                    args,
5939                                    is_friend, 0);
5940           return decl;
5941         }
5942
5943       /* Make sure the template headers we got make sense.  */
5944
5945       parms = DECL_TEMPLATE_PARMS (tmpl);
5946       i = TMPL_PARMS_DEPTH (parms);
5947       if (TMPL_ARGS_DEPTH (args) != i)
5948         {
5949           error ("expected %d levels of template parms for %q#D, got %d",
5950                  i, decl, TMPL_ARGS_DEPTH (args));
5951           DECL_INTERFACE_KNOWN (decl) = 1;
5952           return error_mark_node;
5953         }
5954       else
5955         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5956           {
5957             a = TMPL_ARGS_LEVEL (args, i);
5958             t = INNERMOST_TEMPLATE_PARMS (parms);
5959
5960             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5961               {
5962                 if (current == decl)
5963                   error ("got %d template parameters for %q#D",
5964                          TREE_VEC_LENGTH (a), decl);
5965                 else
5966                   error ("got %d template parameters for %q#T",
5967                          TREE_VEC_LENGTH (a), current);
5968                 error ("  but %d required", TREE_VEC_LENGTH (t));
5969                 /* Avoid crash in import_export_decl.  */
5970                 DECL_INTERFACE_KNOWN (decl) = 1;
5971                 return error_mark_node;
5972               }
5973
5974             if (current == decl)
5975               current = ctx;
5976             else if (current == NULL_TREE)
5977               /* Can happen in erroneous input.  */
5978               break;
5979             else
5980               current = get_containing_scope (current);
5981           }
5982
5983       /* Check that the parms are used in the appropriate qualifying scopes
5984          in the declarator.  */
5985       if (!comp_template_args
5986           (TI_ARGS (tinfo),
5987            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5988         {
5989           error ("template arguments to %qD do not match original "
5990                  "template %qD", decl, DECL_TEMPLATE_RESULT (tmpl));
5991           if (!uses_template_parms (TI_ARGS (tinfo)))
5992             inform (input_location, "use %<template<>%> for"
5993                     " an explicit specialization");
5994           /* Avoid crash in import_export_decl.  */
5995           DECL_INTERFACE_KNOWN (decl) = 1;
5996           return error_mark_node;
5997         }
5998     }
5999
6000   gcc_checking_assert (DECL_TEMPLATE_RESULT (tmpl) == decl);
6001
6002   if (new_template_p)
6003     {
6004       /* Push template declarations for global functions and types.
6005          Note that we do not try to push a global template friend
6006          declared in a template class; such a thing may well depend on
6007          the template parameters of the class and we'll push it when
6008          instantiating the befriending class.  */
6009       if (!ctx
6010           && !(is_friend && template_class_depth (current_class_type) > 0))
6011         {
6012           tmpl = pushdecl_namespace_level (tmpl, is_friend);
6013           if (tmpl == error_mark_node)
6014             return error_mark_node;
6015
6016           /* Hide template friend classes that haven't been declared yet.  */
6017           if (is_friend && TREE_CODE (decl) == TYPE_DECL)
6018             {
6019               DECL_ANTICIPATED (tmpl) = 1;
6020               DECL_FRIEND_P (tmpl) = 1;
6021             }
6022         }
6023     }
6024   else
6025     /* The type may have been completed, or (erroneously) changed.  */
6026     TREE_TYPE (tmpl) = TREE_TYPE (decl);
6027
6028   if (is_primary)
6029     {
6030       tree parms = DECL_TEMPLATE_PARMS (tmpl);
6031
6032       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
6033
6034       /* Give template template parms a DECL_CONTEXT of the template
6035          for which they are a parameter.  */
6036       parms = INNERMOST_TEMPLATE_PARMS (parms);
6037       for (int i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
6038         {
6039           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
6040           if (TREE_CODE (parm) == TEMPLATE_DECL)
6041             DECL_CONTEXT (parm) = tmpl;
6042         }
6043
6044       if (TREE_CODE (decl) == TYPE_DECL
6045           && TYPE_DECL_ALIAS_P (decl))
6046         {
6047           if (tree constr
6048               = TEMPLATE_PARMS_CONSTRAINTS (DECL_TEMPLATE_PARMS (tmpl)))
6049             {
6050               /* ??? Why don't we do this here for all templates?  */
6051               constr = build_constraints (constr, NULL_TREE);
6052               set_constraints (decl, constr);
6053             }
6054           if (complex_alias_template_p (tmpl))
6055             TEMPLATE_DECL_COMPLEX_ALIAS_P (tmpl) = true;
6056         }
6057     }
6058
6059   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
6060      back to its most general template.  If TMPL is a specialization,
6061      ARGS may only have the innermost set of arguments.  Add the missing
6062      argument levels if necessary.  */
6063   if (DECL_TEMPLATE_INFO (tmpl))
6064     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
6065
6066   info = build_template_info (tmpl, args);
6067
6068   if (DECL_IMPLICIT_TYPEDEF_P (decl))
6069     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
6070   else
6071     {
6072       if (is_primary)
6073         retrofit_lang_decl (decl);
6074       if (DECL_LANG_SPECIFIC (decl))
6075         DECL_TEMPLATE_INFO (decl) = info;
6076     }
6077
6078   if (flag_implicit_templates
6079       && !is_friend
6080       && TREE_PUBLIC (decl)
6081       && VAR_OR_FUNCTION_DECL_P (decl))
6082     /* Set DECL_COMDAT on template instantiations; if we force
6083        them to be emitted by explicit instantiation,
6084        mark_needed will tell cgraph to do the right thing.  */
6085     DECL_COMDAT (decl) = true;
6086
6087   return DECL_TEMPLATE_RESULT (tmpl);
6088 }
6089
6090 tree
6091 push_template_decl (tree decl)
6092 {
6093   return push_template_decl_real (decl, false);
6094 }
6095
6096 /* FN is an inheriting constructor that inherits from the constructor
6097    template INHERITED; turn FN into a constructor template with a matching
6098    template header.  */
6099
6100 tree
6101 add_inherited_template_parms (tree fn, tree inherited)
6102 {
6103   tree inner_parms
6104     = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
6105   inner_parms = copy_node (inner_parms);
6106   tree parms
6107     = tree_cons (size_int (processing_template_decl + 1),
6108                  inner_parms, current_template_parms);
6109   tree tmpl = build_template_decl (fn, parms, /*member*/true);
6110   tree args = template_parms_to_args (parms);
6111   DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
6112   DECL_ARTIFICIAL (tmpl) = true;
6113   DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
6114   return tmpl;
6115 }
6116
6117 /* Called when a class template TYPE is redeclared with the indicated
6118    template PARMS, e.g.:
6119
6120      template <class T> struct S;
6121      template <class T> struct S {};  */
6122
6123 bool
6124 redeclare_class_template (tree type, tree parms, tree cons)
6125 {
6126   tree tmpl;
6127   tree tmpl_parms;
6128   int i;
6129
6130   if (!TYPE_TEMPLATE_INFO (type))
6131     {
6132       error ("%qT is not a template type", type);
6133       return false;
6134     }
6135
6136   tmpl = TYPE_TI_TEMPLATE (type);
6137   if (!PRIMARY_TEMPLATE_P (tmpl))
6138     /* The type is nested in some template class.  Nothing to worry
6139        about here; there are no new template parameters for the nested
6140        type.  */
6141     return true;
6142
6143   if (!parms)
6144     {
6145       error ("template specifiers not specified in declaration of %qD",
6146              tmpl);
6147       return false;
6148     }
6149
6150   parms = INNERMOST_TEMPLATE_PARMS (parms);
6151   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
6152
6153   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
6154     {
6155       error_n (input_location, TREE_VEC_LENGTH (parms),
6156                "redeclared with %d template parameter",
6157                "redeclared with %d template parameters",
6158                TREE_VEC_LENGTH (parms));
6159       inform_n (DECL_SOURCE_LOCATION (tmpl), TREE_VEC_LENGTH (tmpl_parms),
6160                 "previous declaration %qD used %d template parameter",
6161                 "previous declaration %qD used %d template parameters",
6162                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
6163       return false;
6164     }
6165
6166   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
6167     {
6168       tree tmpl_parm;
6169       tree parm;
6170       tree tmpl_default;
6171       tree parm_default;
6172
6173       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
6174           || TREE_VEC_ELT (parms, i) == error_mark_node)
6175         continue;
6176
6177       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
6178       if (error_operand_p (tmpl_parm))
6179         return false;
6180
6181       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
6182       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
6183       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
6184
6185       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
6186          TEMPLATE_DECL.  */
6187       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
6188           || (TREE_CODE (tmpl_parm) != TYPE_DECL
6189               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
6190           || (TREE_CODE (tmpl_parm) != PARM_DECL
6191               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
6192                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
6193           || (TREE_CODE (tmpl_parm) == PARM_DECL
6194               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
6195                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
6196         {
6197           auto_diagnostic_group d;
6198           error ("template parameter %q+#D", tmpl_parm);
6199           inform (input_location, "redeclared here as %q#D", parm);
6200           return false;
6201         }
6202
6203       /* The parameters can be declared to introduce different
6204          constraints.  */
6205       tree p1 = TREE_VEC_ELT (tmpl_parms, i);
6206       tree p2 = TREE_VEC_ELT (parms, i);
6207       if (!template_parameter_constraints_equivalent_p (p1, p2))
6208         {
6209           auto_diagnostic_group d;
6210           error ("declaration of template parameter %q+#D with different "
6211                  "constraints", parm);
6212           inform (DECL_SOURCE_LOCATION (tmpl_parm),
6213                   "original declaration appeared here");
6214           return false;
6215         }
6216
6217       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
6218         {
6219           /* We have in [temp.param]:
6220
6221              A template-parameter may not be given default arguments
6222              by two different declarations in the same scope.  */
6223           auto_diagnostic_group d;
6224           error_at (input_location, "redefinition of default argument for %q#D", parm);
6225           inform (DECL_SOURCE_LOCATION (tmpl_parm),
6226                   "original definition appeared here");
6227           return false;
6228         }
6229
6230       if (parm_default != NULL_TREE)
6231         /* Update the previous template parameters (which are the ones
6232            that will really count) with the new default value.  */
6233         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
6234       else if (tmpl_default != NULL_TREE)
6235         /* Update the new parameters, too; they'll be used as the
6236            parameters for any members.  */
6237         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
6238
6239       /* Give each template template parm in this redeclaration a
6240          DECL_CONTEXT of the template for which they are a parameter.  */
6241       if (TREE_CODE (parm) == TEMPLATE_DECL)
6242         {
6243           gcc_assert (DECL_CONTEXT (parm) == NULL_TREE);
6244           DECL_CONTEXT (parm) = tmpl;
6245         }
6246
6247       if (TREE_CODE (parm) == TYPE_DECL)
6248         TEMPLATE_TYPE_PARM_FOR_CLASS (TREE_TYPE (parm)) = true;
6249     }
6250
6251   tree ci = get_constraints (tmpl);
6252   tree req1 = ci ? CI_TEMPLATE_REQS (ci) : NULL_TREE;
6253   tree req2 = cons ? CI_TEMPLATE_REQS (cons) : NULL_TREE;
6254
6255   /* Two classes with different constraints declare different entities.  */
6256   if (!cp_tree_equal (req1, req2))
6257     {
6258       auto_diagnostic_group d;
6259       error_at (input_location, "redeclaration %q#D with different "
6260                                 "constraints", tmpl);
6261       inform (DECL_SOURCE_LOCATION (tmpl),
6262               "original declaration appeared here");
6263       return false;
6264     }
6265
6266     return true;
6267 }
6268
6269 /* The actual substitution part of instantiate_non_dependent_expr_sfinae,
6270    to be used when the caller has already checked
6271    (processing_template_decl
6272     && !instantiation_dependent_expression_p (expr)
6273     && potential_constant_expression (expr))
6274    and cleared processing_template_decl.  */
6275
6276 tree
6277 instantiate_non_dependent_expr_internal (tree expr, tsubst_flags_t complain)
6278 {
6279   return tsubst_copy_and_build (expr,
6280                                 /*args=*/NULL_TREE,
6281                                 complain,
6282                                 /*in_decl=*/NULL_TREE,
6283                                 /*function_p=*/false,
6284                                 /*integral_constant_expression_p=*/true);
6285 }
6286
6287 /* Simplify EXPR if it is a non-dependent expression.  Returns the
6288    (possibly simplified) expression.  */
6289
6290 tree
6291 instantiate_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
6292 {
6293   if (expr == NULL_TREE)
6294     return NULL_TREE;
6295
6296   /* If we're in a template, but EXPR isn't value dependent, simplify
6297      it.  We're supposed to treat:
6298
6299        template <typename T> void f(T[1 + 1]);
6300        template <typename T> void f(T[2]);
6301
6302      as two declarations of the same function, for example.  */
6303   if (processing_template_decl
6304       && is_nondependent_constant_expression (expr))
6305     {
6306       processing_template_decl_sentinel s;
6307       expr = instantiate_non_dependent_expr_internal (expr, complain);
6308     }
6309   return expr;
6310 }
6311
6312 tree
6313 instantiate_non_dependent_expr (tree expr)
6314 {
6315   return instantiate_non_dependent_expr_sfinae (expr, tf_error);
6316 }
6317
6318 /* Like instantiate_non_dependent_expr, but return NULL_TREE rather than
6319    an uninstantiated expression.  */
6320
6321 tree
6322 instantiate_non_dependent_or_null (tree expr)
6323 {
6324   if (expr == NULL_TREE)
6325     return NULL_TREE;
6326   if (processing_template_decl)
6327     {
6328       if (!is_nondependent_constant_expression (expr))
6329         expr = NULL_TREE;
6330       else
6331         {
6332           processing_template_decl_sentinel s;
6333           expr = instantiate_non_dependent_expr_internal (expr, tf_error);
6334         }
6335     }
6336   return expr;
6337 }
6338
6339 /* True iff T is a specialization of a variable template.  */
6340
6341 bool
6342 variable_template_specialization_p (tree t)
6343 {
6344   if (!VAR_P (t) || !DECL_LANG_SPECIFIC (t) || !DECL_TEMPLATE_INFO (t))
6345     return false;
6346   tree tmpl = DECL_TI_TEMPLATE (t);
6347   return variable_template_p (tmpl);
6348 }
6349
6350 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
6351    template declaration, or a TYPE_DECL for an alias declaration.  */
6352
6353 bool
6354 alias_type_or_template_p (tree t)
6355 {
6356   if (t == NULL_TREE)
6357     return false;
6358   return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
6359           || (TYPE_P (t)
6360               && TYPE_NAME (t)
6361               && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
6362           || DECL_ALIAS_TEMPLATE_P (t));
6363 }
6364
6365 /* If T is a specialization of an alias template, return it; otherwise return
6366    NULL_TREE.  If TRANSPARENT_TYPEDEFS is true, look through other aliases.  */
6367
6368 tree
6369 alias_template_specialization_p (const_tree t,
6370                                  bool transparent_typedefs)
6371 {
6372   if (!TYPE_P (t))
6373     return NULL_TREE;
6374
6375   /* It's an alias template specialization if it's an alias and its
6376      TYPE_NAME is a specialization of a primary template.  */
6377   if (typedef_variant_p (t))
6378     {
6379       if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
6380         if (PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo)))
6381           return CONST_CAST_TREE (t);
6382       if (transparent_typedefs)
6383         return alias_template_specialization_p (DECL_ORIGINAL_TYPE
6384                                                 (TYPE_NAME (t)),
6385                                                 transparent_typedefs);
6386     }
6387
6388   return NULL_TREE;
6389 }
6390
6391 /* An alias template is complex from a SFINAE perspective if a template-id
6392    using that alias can be ill-formed when the expansion is not, as with
6393    the void_t template.  We determine this by checking whether the
6394    expansion for the alias template uses all its template parameters.  */
6395
6396 struct uses_all_template_parms_data
6397 {
6398   int level;
6399   bool *seen;
6400 };
6401
6402 static int
6403 uses_all_template_parms_r (tree t, void *data_)
6404 {
6405   struct uses_all_template_parms_data &data
6406     = *(struct uses_all_template_parms_data*)data_;
6407   tree idx = get_template_parm_index (t);
6408
6409   if (TEMPLATE_PARM_LEVEL (idx) == data.level)
6410     data.seen[TEMPLATE_PARM_IDX (idx)] = true;
6411   return 0;
6412 }
6413
6414 /* for_each_template_parm any_fn callback for complex_alias_template_p.  */
6415
6416 static int
6417 complex_pack_expansion_r (tree t, void *data_)
6418 {
6419   /* An alias template with a pack expansion that expands a pack from the
6420      enclosing class needs to be considered complex, to avoid confusion with
6421      the same pack being used as an argument to the alias's own template
6422      parameter (91966).  */
6423   if (!PACK_EXPANSION_P (t))
6424     return 0;
6425   struct uses_all_template_parms_data &data
6426     = *(struct uses_all_template_parms_data*)data_;
6427   for (tree pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
6428        pack = TREE_CHAIN (pack))
6429     {
6430       tree parm_pack = TREE_VALUE (pack);
6431       if (!TEMPLATE_PARM_P (parm_pack))
6432         continue;
6433       int idx, level;
6434       template_parm_level_and_index (parm_pack, &level, &idx);
6435       if (level < data.level)
6436         return 1;
6437     }
6438   return 0;
6439 }
6440
6441 static bool
6442 complex_alias_template_p (const_tree tmpl)
6443 {
6444   /* A renaming alias isn't complex.  */
6445   if (get_underlying_template (CONST_CAST_TREE (tmpl)) != tmpl)
6446     return false;
6447
6448   /* Any other constrained alias is complex.  */
6449   if (get_constraints (tmpl))
6450     return true;
6451
6452   struct uses_all_template_parms_data data;
6453   tree pat = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
6454   tree parms = DECL_TEMPLATE_PARMS (tmpl);
6455   data.level = TMPL_PARMS_DEPTH (parms);
6456   int len = TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (parms));
6457   data.seen = XALLOCAVEC (bool, len);
6458   for (int i = 0; i < len; ++i)
6459     data.seen[i] = false;
6460
6461   if (for_each_template_parm (pat, uses_all_template_parms_r, &data,
6462                               NULL, true, complex_pack_expansion_r))
6463     return true;
6464   for (int i = 0; i < len; ++i)
6465     if (!data.seen[i])
6466       return true;
6467   return false;
6468 }
6469
6470 /* If T is a specialization of a complex alias template with dependent
6471    template-arguments, return it; otherwise return NULL_TREE.  If T is a
6472    typedef to such a specialization, return the specialization.  */
6473
6474 tree
6475 dependent_alias_template_spec_p (const_tree t, bool transparent_typedefs)
6476 {
6477   if (!TYPE_P (t) || !typedef_variant_p (t))
6478     return NULL_TREE;
6479
6480   tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t);
6481   if (tinfo
6482       && TEMPLATE_DECL_COMPLEX_ALIAS_P (TI_TEMPLATE (tinfo))
6483       && (any_dependent_template_arguments_p
6484           (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo)))))
6485     return CONST_CAST_TREE (t);
6486
6487   if (transparent_typedefs)
6488     {
6489       tree utype = DECL_ORIGINAL_TYPE (TYPE_NAME (t));
6490       return dependent_alias_template_spec_p (utype, transparent_typedefs);
6491     }
6492
6493   return NULL_TREE;
6494 }
6495
6496 /* Return the number of innermost template parameters in TMPL.  */
6497
6498 static int
6499 num_innermost_template_parms (const_tree tmpl)
6500 {
6501   tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
6502   return TREE_VEC_LENGTH (parms);
6503 }
6504
6505 /* Return either TMPL or another template that it is equivalent to under DR
6506    1286: An alias that just changes the name of a template is equivalent to
6507    the other template.  */
6508
6509 static tree
6510 get_underlying_template (tree tmpl)
6511 {
6512   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
6513   while (DECL_ALIAS_TEMPLATE_P (tmpl))
6514     {
6515       /* Determine if the alias is equivalent to an underlying template.  */
6516       tree orig_type = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
6517       /* The underlying type may have been ill-formed. Don't proceed.  */
6518       if (!orig_type)
6519         break;
6520       tree tinfo = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (orig_type);
6521       if (!tinfo)
6522         break;
6523
6524       tree underlying = TI_TEMPLATE (tinfo);
6525       if (!PRIMARY_TEMPLATE_P (underlying)
6526           || (num_innermost_template_parms (tmpl)
6527               != num_innermost_template_parms (underlying)))
6528         break;
6529
6530       tree alias_args = INNERMOST_TEMPLATE_ARGS (generic_targs_for (tmpl));
6531       if (!comp_template_args (TI_ARGS (tinfo), alias_args))
6532         break;
6533
6534       /* If TMPL adds or changes any constraints, it isn't equivalent.  I think
6535          it's appropriate to treat a less-constrained alias as equivalent.  */
6536       if (!at_least_as_constrained (underlying, tmpl))
6537         break;
6538
6539       /* Alias is equivalent.  Strip it and repeat.  */
6540       tmpl = underlying;
6541     }
6542
6543   return tmpl;
6544 }
6545
6546 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
6547    must be a reference-to-function or a pointer-to-function type, as specified
6548    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
6549    and check that the resulting function has external linkage.  */
6550
6551 static tree
6552 convert_nontype_argument_function (tree type, tree expr,
6553                                    tsubst_flags_t complain)
6554 {
6555   tree fns = expr;
6556   tree fn, fn_no_ptr;
6557   linkage_kind linkage;
6558
6559   fn = instantiate_type (type, fns, tf_none);
6560   if (fn == error_mark_node)
6561     return error_mark_node;
6562
6563   if (value_dependent_expression_p (fn))
6564     goto accept;
6565
6566   fn_no_ptr = strip_fnptr_conv (fn);
6567   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
6568     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
6569   if (BASELINK_P (fn_no_ptr))
6570     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
6571
6572   /* [temp.arg.nontype]/1
6573
6574      A template-argument for a non-type, non-template template-parameter
6575      shall be one of:
6576      [...]
6577      -- the address of an object or function with external [C++11: or
6578         internal] linkage.  */
6579
6580   STRIP_ANY_LOCATION_WRAPPER (fn_no_ptr);
6581   if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
6582     {
6583       if (complain & tf_error)
6584         {
6585           location_t loc = cp_expr_loc_or_input_loc (expr);
6586           error_at (loc, "%qE is not a valid template argument for type %qT",
6587                     expr, type);
6588           if (TYPE_PTR_P (type))
6589             inform (loc, "it must be the address of a function "
6590                     "with external linkage");
6591           else
6592             inform (loc, "it must be the name of a function with "
6593                     "external linkage");
6594         }
6595       return NULL_TREE;
6596     }
6597
6598   linkage = decl_linkage (fn_no_ptr);
6599   if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
6600     {
6601       if (complain & tf_error)
6602         {
6603           location_t loc = cp_expr_loc_or_input_loc (expr);
6604           if (cxx_dialect >= cxx11)
6605             error_at (loc, "%qE is not a valid template argument for type "
6606                       "%qT because %qD has no linkage",
6607                       expr, type, fn_no_ptr);
6608           else
6609             error_at (loc, "%qE is not a valid template argument for type "
6610                       "%qT because %qD does not have external linkage",
6611                       expr, type, fn_no_ptr);
6612         }
6613       return NULL_TREE;
6614     }
6615
6616  accept:
6617   if (TYPE_REF_P (type))
6618     {
6619       if (REFERENCE_REF_P (fn))
6620         fn = TREE_OPERAND (fn, 0);
6621       else
6622         fn = build_address (fn);
6623     }
6624   if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (fn)))
6625     fn = build_nop (type, fn);
6626
6627   return fn;
6628 }
6629
6630 /* Subroutine of convert_nontype_argument.
6631    Check if EXPR of type TYPE is a valid pointer-to-member constant.
6632    Emit an error otherwise.  */
6633
6634 static bool
6635 check_valid_ptrmem_cst_expr (tree type, tree expr,
6636                              tsubst_flags_t complain)
6637 {
6638   tree orig_expr = expr;
6639   STRIP_NOPS (expr);
6640   if (null_ptr_cst_p (expr))
6641     return true;
6642   if (TREE_CODE (expr) == PTRMEM_CST
6643       && same_type_p (TYPE_PTRMEM_CLASS_TYPE (type),
6644                       PTRMEM_CST_CLASS (expr)))
6645     return true;
6646   if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
6647     return true;
6648   if (processing_template_decl
6649       && TREE_CODE (expr) == ADDR_EXPR
6650       && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
6651     return true;
6652   if (complain & tf_error)
6653     {
6654       location_t loc = cp_expr_loc_or_input_loc (orig_expr);
6655       error_at (loc, "%qE is not a valid template argument for type %qT",
6656                 orig_expr, type);
6657       if (TREE_CODE (expr) != PTRMEM_CST)
6658         inform (loc, "it must be a pointer-to-member of the form %<&X::Y%>");
6659       else
6660         inform (loc, "because it is a member of %qT", PTRMEM_CST_CLASS (expr));
6661     }
6662   return false;
6663 }
6664
6665 /* Returns TRUE iff the address of OP is value-dependent.
6666
6667    14.6.2.4 [temp.dep.temp]:
6668    A non-integral non-type template-argument is dependent if its type is
6669    dependent or it has either of the following forms
6670      qualified-id
6671      & qualified-id
6672    and contains a nested-name-specifier which specifies a class-name that
6673    names a dependent type.
6674
6675    We generalize this to just say that the address of a member of a
6676    dependent class is value-dependent; the above doesn't cover the
6677    address of a static data member named with an unqualified-id.  */
6678
6679 static bool
6680 has_value_dependent_address (tree op)
6681 {
6682   STRIP_ANY_LOCATION_WRAPPER (op);
6683
6684   /* We could use get_inner_reference here, but there's no need;
6685      this is only relevant for template non-type arguments, which
6686      can only be expressed as &id-expression.  */
6687   if (DECL_P (op))
6688     {
6689       tree ctx = CP_DECL_CONTEXT (op);
6690       if (TYPE_P (ctx) && dependent_type_p (ctx))
6691         return true;
6692     }
6693
6694   return false;
6695 }
6696
6697 /* The next set of functions are used for providing helpful explanatory
6698    diagnostics for failed overload resolution.  Their messages should be
6699    indented by two spaces for consistency with the messages in
6700    call.c  */
6701
6702 static int
6703 unify_success (bool /*explain_p*/)
6704 {
6705   return 0;
6706 }
6707
6708 /* Other failure functions should call this one, to provide a single function
6709    for setting a breakpoint on.  */
6710
6711 static int
6712 unify_invalid (bool /*explain_p*/)
6713 {
6714   return 1;
6715 }
6716
6717 static int
6718 unify_parameter_deduction_failure (bool explain_p, tree parm)
6719 {
6720   if (explain_p)
6721     inform (input_location,
6722             "  couldn%'t deduce template parameter %qD", parm);
6723   return unify_invalid (explain_p);
6724 }
6725
6726 static int
6727 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
6728 {
6729   if (explain_p)
6730     inform (input_location,
6731             "  types %qT and %qT have incompatible cv-qualifiers",
6732             parm, arg);
6733   return unify_invalid (explain_p);
6734 }
6735
6736 static int
6737 unify_type_mismatch (bool explain_p, tree parm, tree arg)
6738 {
6739   if (explain_p)
6740     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
6741   return unify_invalid (explain_p);
6742 }
6743
6744 static int
6745 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
6746 {
6747   if (explain_p)
6748     inform (input_location,
6749             "  template parameter %qD is not a parameter pack, but "
6750             "argument %qD is",
6751             parm, arg);
6752   return unify_invalid (explain_p);
6753 }
6754
6755 static int
6756 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
6757 {
6758   if (explain_p)
6759     inform (input_location,
6760             "  template argument %qE does not match "
6761             "pointer-to-member constant %qE",
6762             arg, parm);
6763   return unify_invalid (explain_p);
6764 }
6765
6766 static int
6767 unify_expression_unequal (bool explain_p, tree parm, tree arg)
6768 {
6769   if (explain_p)
6770     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
6771   return unify_invalid (explain_p);
6772 }
6773
6774 static int
6775 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
6776 {
6777   if (explain_p)
6778     inform (input_location,
6779             "  inconsistent parameter pack deduction with %qT and %qT",
6780             old_arg, new_arg);
6781   return unify_invalid (explain_p);
6782 }
6783
6784 static int
6785 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
6786 {
6787   if (explain_p)
6788     {
6789       if (TYPE_P (parm))
6790         inform (input_location,
6791                 "  deduced conflicting types for parameter %qT (%qT and %qT)",
6792                 parm, first, second);
6793       else
6794         inform (input_location,
6795                 "  deduced conflicting values for non-type parameter "
6796                 "%qE (%qE and %qE)", parm, first, second);
6797     }
6798   return unify_invalid (explain_p);
6799 }
6800
6801 static int
6802 unify_vla_arg (bool explain_p, tree arg)
6803 {
6804   if (explain_p)
6805     inform (input_location,
6806             "  variable-sized array type %qT is not "
6807             "a valid template argument",
6808             arg);
6809   return unify_invalid (explain_p);
6810 }
6811
6812 static int
6813 unify_method_type_error (bool explain_p, tree arg)
6814 {
6815   if (explain_p)
6816     inform (input_location,
6817             "  member function type %qT is not a valid template argument",
6818             arg);
6819   return unify_invalid (explain_p);
6820 }
6821
6822 static int
6823 unify_arity (bool explain_p, int have, int wanted, bool least_p = false)
6824 {
6825   if (explain_p)
6826     {
6827       if (least_p)
6828         inform_n (input_location, wanted,
6829                   "  candidate expects at least %d argument, %d provided",
6830                   "  candidate expects at least %d arguments, %d provided",
6831                   wanted, have);
6832       else
6833         inform_n (input_location, wanted,
6834                   "  candidate expects %d argument, %d provided",
6835                   "  candidate expects %d arguments, %d provided",
6836                   wanted, have);
6837     }
6838   return unify_invalid (explain_p);
6839 }
6840
6841 static int
6842 unify_too_many_arguments (bool explain_p, int have, int wanted)
6843 {
6844   return unify_arity (explain_p, have, wanted);
6845 }
6846
6847 static int
6848 unify_too_few_arguments (bool explain_p, int have, int wanted,
6849                          bool least_p = false)
6850 {
6851   return unify_arity (explain_p, have, wanted, least_p);
6852 }
6853
6854 static int
6855 unify_arg_conversion (bool explain_p, tree to_type,
6856                       tree from_type, tree arg)
6857 {
6858   if (explain_p)
6859     inform (cp_expr_loc_or_input_loc (arg),
6860             "  cannot convert %qE (type %qT) to type %qT",
6861             arg, from_type, to_type);
6862   return unify_invalid (explain_p);
6863 }
6864
6865 static int
6866 unify_no_common_base (bool explain_p, enum template_base_result r,
6867                       tree parm, tree arg)
6868 {
6869   if (explain_p)
6870     switch (r)
6871       {
6872       case tbr_ambiguous_baseclass:
6873         inform (input_location, "  %qT is an ambiguous base class of %qT",
6874                 parm, arg);
6875         break;
6876       default:
6877         inform (input_location, "  %qT is not derived from %qT", arg, parm);
6878         break;
6879       }
6880   return unify_invalid (explain_p);
6881 }
6882
6883 static int
6884 unify_inconsistent_template_template_parameters (bool explain_p)
6885 {
6886   if (explain_p)
6887     inform (input_location,
6888             "  template parameters of a template template argument are "
6889             "inconsistent with other deduced template arguments");
6890   return unify_invalid (explain_p);
6891 }
6892
6893 static int
6894 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
6895 {
6896   if (explain_p)
6897     inform (input_location,
6898             "  cannot deduce a template for %qT from non-template type %qT",
6899             parm, arg);
6900   return unify_invalid (explain_p);
6901 }
6902
6903 static int
6904 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
6905 {
6906   if (explain_p)
6907     inform (input_location,
6908             "  template argument %qE does not match %qE", arg, parm);
6909   return unify_invalid (explain_p);
6910 }
6911
6912 /* True if T is a C++20 template parameter object to store the argument for a
6913    template parameter of class type.  */
6914
6915 bool
6916 template_parm_object_p (const_tree t)
6917 {
6918   return (TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t) && DECL_NAME (t)
6919           && !strncmp (IDENTIFIER_POINTER (DECL_NAME (t)), "_ZTA", 4));
6920 }
6921
6922 /* Subroutine of convert_nontype_argument, to check whether EXPR, as an
6923    argument for TYPE, points to an unsuitable object.
6924
6925    Also adjust the type of the index in C++20 array subobject references.  */
6926
6927 static bool
6928 invalid_tparm_referent_p (tree type, tree expr, tsubst_flags_t complain)
6929 {
6930   switch (TREE_CODE (expr))
6931     {
6932     CASE_CONVERT:
6933       return invalid_tparm_referent_p (type, TREE_OPERAND (expr, 0),
6934                                        complain);
6935
6936     case TARGET_EXPR:
6937       return invalid_tparm_referent_p (type, TARGET_EXPR_INITIAL (expr),
6938                                        complain);
6939
6940     case CONSTRUCTOR:
6941       {
6942         unsigned i; tree elt;
6943         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), i, elt)
6944           if (invalid_tparm_referent_p (TREE_TYPE (elt), elt, complain))
6945             return true;
6946       }
6947       break;
6948
6949     case ADDR_EXPR:
6950       {
6951         tree decl = TREE_OPERAND (expr, 0);
6952
6953         if (cxx_dialect >= cxx20)
6954           while (TREE_CODE (decl) == COMPONENT_REF
6955                  || TREE_CODE (decl) == ARRAY_REF)
6956             {
6957               tree &op = TREE_OPERAND (decl, 1);
6958               if (TREE_CODE (decl) == ARRAY_REF
6959                   && TREE_CODE (op) == INTEGER_CST)
6960                 /* Canonicalize array offsets to ptrdiff_t; how they were
6961                    written doesn't matter for subobject identity.  */
6962                 op = fold_convert (ptrdiff_type_node, op);
6963               decl = TREE_OPERAND (decl, 0);
6964             }
6965
6966         if (!VAR_P (decl))
6967           {
6968             if (complain & tf_error)
6969               error_at (cp_expr_loc_or_input_loc (expr),
6970                         "%qE is not a valid template argument of type %qT "
6971                         "because %qE is not a variable", expr, type, decl);
6972             return true;
6973           }
6974         else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
6975           {
6976             if (complain & tf_error)
6977               error_at (cp_expr_loc_or_input_loc (expr),
6978                         "%qE is not a valid template argument of type %qT "
6979                         "in C++98 because %qD does not have external linkage",
6980                         expr, type, decl);
6981             return true;
6982           }
6983         else if ((cxx_dialect >= cxx11 && cxx_dialect < cxx17)
6984                  && decl_linkage (decl) == lk_none)
6985           {
6986             if (complain & tf_error)
6987               error_at (cp_expr_loc_or_input_loc (expr),
6988                         "%qE is not a valid template argument of type %qT "
6989                         "because %qD has no linkage", expr, type, decl);
6990             return true;
6991           }
6992         /* C++17: For a non-type template-parameter of reference or pointer
6993            type, the value of the constant expression shall not refer to (or
6994            for a pointer type, shall not be the address of):
6995            * a subobject (4.5),
6996            * a temporary object (15.2),
6997            * a string literal (5.13.5),
6998            * the result of a typeid expression (8.2.8), or
6999            * a predefined __func__ variable (11.4.1).  */
7000         else if (DECL_ARTIFICIAL (decl))
7001           {
7002             if (complain & tf_error)
7003               error ("the address of %qD is not a valid template argument",
7004                      decl);
7005             return true;
7006           }
7007         else if (cxx_dialect < cxx20
7008                  && !(same_type_ignoring_top_level_qualifiers_p
7009                       (strip_array_types (TREE_TYPE (type)),
7010                        strip_array_types (TREE_TYPE (decl)))))
7011           {
7012             if (complain & tf_error)
7013               error ("the address of the %qT subobject of %qD is not a "
7014                      "valid template argument", TREE_TYPE (type), decl);
7015             return true;
7016           }
7017         else if (!TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
7018           {
7019             if (complain & tf_error)
7020               error ("the address of %qD is not a valid template argument "
7021                      "because it does not have static storage duration",
7022                      decl);
7023             return true;
7024           }
7025       }
7026       break;
7027
7028     default:
7029       if (!INDIRECT_TYPE_P (type))
7030         /* We're only concerned about pointers and references here.  */;
7031       else if (cxx_dialect >= cxx11 && integer_zerop (expr))
7032         /* Null pointer values are OK in C++11.  */;
7033       else
7034         {
7035           if (VAR_P (expr))
7036             {
7037               if (complain & tf_error)
7038                 error ("%qD is not a valid template argument "
7039                        "because %qD is a variable, not the address of "
7040                        "a variable", expr, expr);
7041               return true;
7042             }
7043           else
7044             {
7045               if (complain & tf_error)
7046                 error ("%qE is not a valid template argument for %qT "
7047                        "because it is not the address of a variable",
7048                        expr, type);
7049               return true;
7050             }
7051         }
7052     }
7053   return false;
7054
7055 }
7056
7057 /* The template arguments corresponding to template parameter objects of types
7058    that contain pointers to members.  */
7059
7060 static GTY(()) hash_map<tree, tree> *tparm_obj_values;
7061
7062 /* Return a VAR_DECL for the C++20 template parameter object corresponding to
7063    template argument EXPR.  */
7064
7065 static tree
7066 get_template_parm_object (tree expr, tsubst_flags_t complain)
7067 {
7068   if (TREE_CODE (expr) == TARGET_EXPR)
7069     expr = TARGET_EXPR_INITIAL (expr);
7070
7071   if (!TREE_CONSTANT (expr))
7072     {
7073       if ((complain & tf_error)
7074           && require_rvalue_constant_expression (expr))
7075         cxx_constant_value (expr);
7076       return error_mark_node;
7077     }
7078   if (invalid_tparm_referent_p (TREE_TYPE (expr), expr, complain))
7079     return error_mark_node;
7080
7081   tree name = mangle_template_parm_object (expr);
7082   tree decl = get_global_binding (name);
7083   if (decl)
7084     return decl;
7085
7086   tree type = cp_build_qualified_type (TREE_TYPE (expr), TYPE_QUAL_CONST);
7087   decl = create_temporary_var (type);
7088   TREE_STATIC (decl) = true;
7089   DECL_DECLARED_CONSTEXPR_P (decl) = true;
7090   TREE_READONLY (decl) = true;
7091   DECL_NAME (decl) = name;
7092   SET_DECL_ASSEMBLER_NAME (decl, name);
7093   DECL_CONTEXT (decl) = global_namespace;
7094   comdat_linkage (decl);
7095
7096   if (!zero_init_p (type))
7097     {
7098       /* If EXPR contains any PTRMEM_CST, they will get clobbered by
7099          lower_var_init before we're done mangling.  So store the original
7100          value elsewhere.  */
7101       tree copy = unshare_constructor (expr);
7102       hash_map_safe_put<hm_ggc> (tparm_obj_values, decl, copy);
7103     }
7104
7105   pushdecl_top_level_and_finish (decl, expr);
7106
7107   return decl;
7108 }
7109
7110 /* Return the actual template argument corresponding to template parameter
7111    object VAR.  */
7112
7113 tree
7114 tparm_object_argument (tree var)
7115 {
7116   if (zero_init_p (TREE_TYPE (var)))
7117     return DECL_INITIAL (var);
7118   return *(tparm_obj_values->get (var));
7119 }
7120
7121 /* Attempt to convert the non-type template parameter EXPR to the
7122    indicated TYPE.  If the conversion is successful, return the
7123    converted value.  If the conversion is unsuccessful, return
7124    NULL_TREE if we issued an error message, or error_mark_node if we
7125    did not.  We issue error messages for out-and-out bad template
7126    parameters, but not simply because the conversion failed, since we
7127    might be just trying to do argument deduction.  Both TYPE and EXPR
7128    must be non-dependent.
7129
7130    The conversion follows the special rules described in
7131    [temp.arg.nontype], and it is much more strict than an implicit
7132    conversion.
7133
7134    This function is called twice for each template argument (see
7135    lookup_template_class for a more accurate description of this
7136    problem). This means that we need to handle expressions which
7137    are not valid in a C++ source, but can be created from the
7138    first call (for instance, casts to perform conversions). These
7139    hacks can go away after we fix the double coercion problem.  */
7140
7141 static tree
7142 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
7143 {
7144   tree expr_type;
7145   location_t loc = cp_expr_loc_or_input_loc (expr);
7146
7147   /* Detect immediately string literals as invalid non-type argument.
7148      This special-case is not needed for correctness (we would easily
7149      catch this later), but only to provide better diagnostic for this
7150      common user mistake. As suggested by DR 100, we do not mention
7151      linkage issues in the diagnostic as this is not the point.  */
7152   if (TREE_CODE (expr) == STRING_CST && !CLASS_TYPE_P (type))
7153     {
7154       if (complain & tf_error)
7155         error ("%qE is not a valid template argument for type %qT "
7156                "because string literals can never be used in this context",
7157                expr, type);
7158       return NULL_TREE;
7159     }
7160
7161   /* Add the ADDR_EXPR now for the benefit of
7162      value_dependent_expression_p.  */
7163   if (TYPE_PTROBV_P (type)
7164       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
7165     {
7166       expr = decay_conversion (expr, complain);
7167       if (expr == error_mark_node)
7168         return error_mark_node;
7169     }
7170
7171   /* If we are in a template, EXPR may be non-dependent, but still
7172      have a syntactic, rather than semantic, form.  For example, EXPR
7173      might be a SCOPE_REF, rather than the VAR_DECL to which the
7174      SCOPE_REF refers.  Preserving the qualifying scope is necessary
7175      so that access checking can be performed when the template is
7176      instantiated -- but here we need the resolved form so that we can
7177      convert the argument.  */
7178   bool non_dep = false;
7179   if (TYPE_REF_OBJ_P (type)
7180       && has_value_dependent_address (expr))
7181     /* If we want the address and it's value-dependent, don't fold.  */;
7182   else if (processing_template_decl
7183            && is_nondependent_constant_expression (expr))
7184     non_dep = true;
7185   if (error_operand_p (expr))
7186     return error_mark_node;
7187   expr_type = TREE_TYPE (expr);
7188
7189   /* If the argument is non-dependent, perform any conversions in
7190      non-dependent context as well.  */
7191   processing_template_decl_sentinel s (non_dep);
7192   if (non_dep)
7193     expr = instantiate_non_dependent_expr_internal (expr, complain);
7194
7195   const bool val_dep_p = value_dependent_expression_p (expr);
7196   if (val_dep_p)
7197     expr = canonicalize_expr_argument (expr, complain);
7198
7199   /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
7200      to a non-type argument of "nullptr".  */
7201   if (NULLPTR_TYPE_P (expr_type) && TYPE_PTR_OR_PTRMEM_P (type))
7202     expr = fold_simple (convert (type, expr));
7203
7204   /* In C++11, integral or enumeration non-type template arguments can be
7205      arbitrary constant expressions.  Pointer and pointer to
7206      member arguments can be general constant expressions that evaluate
7207      to a null value, but otherwise still need to be of a specific form.  */
7208   if (cxx_dialect >= cxx11)
7209     {
7210       if (TREE_CODE (expr) == PTRMEM_CST && TYPE_PTRMEM_P (type))
7211         /* A PTRMEM_CST is already constant, and a valid template
7212            argument for a parameter of pointer to member type, we just want
7213            to leave it in that form rather than lower it to a
7214            CONSTRUCTOR.  */;
7215       else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
7216                || cxx_dialect >= cxx17)
7217         {
7218           /* C++17: A template-argument for a non-type template-parameter shall
7219              be a converted constant expression (8.20) of the type of the
7220              template-parameter.  */
7221           expr = build_converted_constant_expr (type, expr, complain);
7222           if (expr == error_mark_node)
7223             /* Make sure we return NULL_TREE only if we have really issued
7224                an error, as described above.  */
7225             return (complain & tf_error) ? NULL_TREE : error_mark_node;
7226           else if (TREE_CODE (expr) == IMPLICIT_CONV_EXPR)
7227             {
7228               IMPLICIT_CONV_EXPR_NONTYPE_ARG (expr) = true;
7229               return expr;
7230             }
7231           expr = maybe_constant_value (expr, NULL_TREE,
7232                                        /*manifestly_const_eval=*/true);
7233           expr = convert_from_reference (expr);
7234         }
7235       else if (TYPE_PTR_OR_PTRMEM_P (type))
7236         {
7237           tree folded = maybe_constant_value (expr, NULL_TREE,
7238                                               /*manifestly_const_eval=*/true);
7239           if (TYPE_PTR_P (type) ? integer_zerop (folded)
7240               : null_member_pointer_value_p (folded))
7241             expr = folded;
7242         }
7243     }
7244
7245   if (TYPE_REF_P (type))
7246     expr = mark_lvalue_use (expr);
7247   else
7248     expr = mark_rvalue_use (expr);
7249
7250   /* HACK: Due to double coercion, we can get a
7251      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
7252      which is the tree that we built on the first call (see
7253      below when coercing to reference to object or to reference to
7254      function). We just strip everything and get to the arg.
7255      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
7256      for examples.  */
7257   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
7258     {
7259       tree probe_type, probe = expr;
7260       if (REFERENCE_REF_P (probe))
7261         probe = TREE_OPERAND (probe, 0);
7262       probe_type = TREE_TYPE (probe);
7263       if (TREE_CODE (probe) == NOP_EXPR)
7264         {
7265           /* ??? Maybe we could use convert_from_reference here, but we
7266              would need to relax its constraints because the NOP_EXPR
7267              could actually change the type to something more cv-qualified,
7268              and this is not folded by convert_from_reference.  */
7269           tree addr = TREE_OPERAND (probe, 0);
7270           if (TYPE_REF_P (probe_type)
7271               && TREE_CODE (addr) == ADDR_EXPR
7272               && TYPE_PTR_P (TREE_TYPE (addr))
7273               && (same_type_ignoring_top_level_qualifiers_p
7274                   (TREE_TYPE (probe_type),
7275                    TREE_TYPE (TREE_TYPE (addr)))))
7276             {
7277               expr = TREE_OPERAND (addr, 0);
7278               expr_type = TREE_TYPE (probe_type);
7279             }
7280         }
7281     }
7282
7283   /* [temp.arg.nontype]/5, bullet 1
7284
7285      For a non-type template-parameter of integral or enumeration type,
7286      integral promotions (_conv.prom_) and integral conversions
7287      (_conv.integral_) are applied.  */
7288   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type)
7289       || TREE_CODE (type) == REAL_TYPE)
7290     {
7291       if (cxx_dialect < cxx11)
7292         {
7293           tree t = build_converted_constant_expr (type, expr, complain);
7294           t = maybe_constant_value (t);
7295           if (t != error_mark_node)
7296             expr = t;
7297         }
7298
7299       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
7300         return error_mark_node;
7301
7302       /* Notice that there are constant expressions like '4 % 0' which
7303          do not fold into integer constants.  */
7304       if (!CONSTANT_CLASS_P (expr) && !val_dep_p)
7305         {
7306           if (complain & tf_error)
7307             {
7308               int errs = errorcount, warns = warningcount + werrorcount;
7309               if (!require_potential_constant_expression (expr))
7310                 expr = error_mark_node;
7311               else
7312                 expr = cxx_constant_value (expr);
7313               if (errorcount > errs || warningcount + werrorcount > warns)
7314                 inform (loc, "in template argument for type %qT", type);
7315               if (expr == error_mark_node)
7316                 return NULL_TREE;
7317               /* else cxx_constant_value complained but gave us
7318                  a real constant, so go ahead.  */
7319               if (!CONSTANT_CLASS_P (expr))
7320                 {
7321                   /* Some assemble time constant expressions like
7322                      (intptr_t)&&lab1 - (intptr_t)&&lab2 or
7323                      4 + (intptr_t)&&var satisfy reduced_constant_expression_p
7324                      as we can emit them into .rodata initializers of
7325                      variables, yet they can't fold into an INTEGER_CST at
7326                      compile time.  Refuse them here.  */
7327                   gcc_checking_assert (reduced_constant_expression_p (expr));
7328                   error_at (loc, "template argument %qE for type %qT not "
7329                                  "a compile-time constant", expr, type);
7330                   return NULL_TREE;
7331                 }
7332             }
7333           else
7334             return NULL_TREE;
7335         }
7336
7337       /* Avoid typedef problems.  */
7338       if (TREE_TYPE (expr) != type)
7339         expr = fold_convert (type, expr);
7340     }
7341   /* [temp.arg.nontype]/5, bullet 2
7342
7343      For a non-type template-parameter of type pointer to object,
7344      qualification conversions (_conv.qual_) and the array-to-pointer
7345      conversion (_conv.array_) are applied.  */
7346   else if (TYPE_PTROBV_P (type))
7347     {
7348       tree decayed = expr;
7349
7350       /* Look through any NOP_EXPRs around an ADDR_EXPR, whether they come from
7351          decay_conversion or an explicit cast.  If it's a problematic cast,
7352          we'll complain about it below.  */
7353       if (TREE_CODE (expr) == NOP_EXPR)
7354         {
7355           tree probe = expr;
7356           STRIP_NOPS (probe);
7357           if (TREE_CODE (probe) == ADDR_EXPR
7358               && TYPE_PTR_P (TREE_TYPE (probe)))
7359             {
7360               expr = probe;
7361               expr_type = TREE_TYPE (expr);
7362             }
7363         }
7364
7365       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
7366
7367          A template-argument for a non-type, non-template template-parameter
7368          shall be one of: [...]
7369
7370          -- the name of a non-type template-parameter;
7371          -- the address of an object or function with external linkage, [...]
7372             expressed as "& id-expression" where the & is optional if the name
7373             refers to a function or array, or if the corresponding
7374             template-parameter is a reference.
7375
7376         Here, we do not care about functions, as they are invalid anyway
7377         for a parameter of type pointer-to-object.  */
7378
7379       if (val_dep_p)
7380         /* Non-type template parameters are OK.  */
7381         ;
7382       else if (cxx_dialect >= cxx11 && integer_zerop (expr))
7383         /* Null pointer values are OK in C++11.  */;
7384       else if (TREE_CODE (expr) != ADDR_EXPR
7385                && !INDIRECT_TYPE_P (expr_type))
7386         /* Other values, like integer constants, might be valid
7387            non-type arguments of some other type.  */
7388         return error_mark_node;
7389       else if (invalid_tparm_referent_p (type, expr, complain))
7390         return NULL_TREE;
7391
7392       expr = decayed;
7393
7394       expr = perform_qualification_conversions (type, expr);
7395       if (expr == error_mark_node)
7396         return error_mark_node;
7397     }
7398   /* [temp.arg.nontype]/5, bullet 3
7399
7400      For a non-type template-parameter of type reference to object, no
7401      conversions apply. The type referred to by the reference may be more
7402      cv-qualified than the (otherwise identical) type of the
7403      template-argument. The template-parameter is bound directly to the
7404      template-argument, which must be an lvalue.  */
7405   else if (TYPE_REF_OBJ_P (type))
7406     {
7407       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
7408                                                       expr_type))
7409         return error_mark_node;
7410
7411       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
7412         {
7413           if (complain & tf_error)
7414             error ("%qE is not a valid template argument for type %qT "
7415                    "because of conflicts in cv-qualification", expr, type);
7416           return NULL_TREE;
7417         }
7418
7419       if (!lvalue_p (expr))
7420         {
7421           if (complain & tf_error)
7422             error ("%qE is not a valid template argument for type %qT "
7423                    "because it is not an lvalue", expr, type);
7424           return NULL_TREE;
7425         }
7426
7427       /* [temp.arg.nontype]/1
7428
7429          A template-argument for a non-type, non-template template-parameter
7430          shall be one of: [...]
7431
7432          -- the address of an object or function with external linkage.  */
7433       if (INDIRECT_REF_P (expr)
7434           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
7435         {
7436           expr = TREE_OPERAND (expr, 0);
7437           if (DECL_P (expr))
7438             {
7439               if (complain & tf_error)
7440                 error ("%q#D is not a valid template argument for type %qT "
7441                        "because a reference variable does not have a constant "
7442                        "address", expr, type);
7443               return NULL_TREE;
7444             }
7445         }
7446
7447       if (TYPE_REF_OBJ_P (TREE_TYPE (expr)) && val_dep_p)
7448         /* OK, dependent reference.  We don't want to ask whether a DECL is
7449            itself value-dependent, since what we want here is its address.  */;
7450       else
7451         {
7452           expr = build_address (expr);
7453
7454           if (invalid_tparm_referent_p (type, expr, complain))
7455             return NULL_TREE;
7456         }
7457
7458       if (!same_type_p (type, TREE_TYPE (expr)))
7459         expr = build_nop (type, expr);
7460     }
7461   /* [temp.arg.nontype]/5, bullet 4
7462
7463      For a non-type template-parameter of type pointer to function, only
7464      the function-to-pointer conversion (_conv.func_) is applied. If the
7465      template-argument represents a set of overloaded functions (or a
7466      pointer to such), the matching function is selected from the set
7467      (_over.over_).  */
7468   else if (TYPE_PTRFN_P (type))
7469     {
7470       /* If the argument is a template-id, we might not have enough
7471          context information to decay the pointer.  */
7472       if (!type_unknown_p (expr_type))
7473         {
7474           expr = decay_conversion (expr, complain);
7475           if (expr == error_mark_node)
7476             return error_mark_node;
7477         }
7478
7479       if (cxx_dialect >= cxx11 && integer_zerop (expr))
7480         /* Null pointer values are OK in C++11.  */
7481         return perform_qualification_conversions (type, expr);
7482
7483       expr = convert_nontype_argument_function (type, expr, complain);
7484       if (!expr || expr == error_mark_node)
7485         return expr;
7486     }
7487   /* [temp.arg.nontype]/5, bullet 5
7488
7489      For a non-type template-parameter of type reference to function, no
7490      conversions apply. If the template-argument represents a set of
7491      overloaded functions, the matching function is selected from the set
7492      (_over.over_).  */
7493   else if (TYPE_REFFN_P (type))
7494     {
7495       if (TREE_CODE (expr) == ADDR_EXPR)
7496         {
7497           if (complain & tf_error)
7498             {
7499               error ("%qE is not a valid template argument for type %qT "
7500                      "because it is a pointer", expr, type);
7501               inform (input_location, "try using %qE instead",
7502                       TREE_OPERAND (expr, 0));
7503             }
7504           return NULL_TREE;
7505         }
7506
7507       expr = convert_nontype_argument_function (type, expr, complain);
7508       if (!expr || expr == error_mark_node)
7509         return expr;
7510     }
7511   /* [temp.arg.nontype]/5, bullet 6
7512
7513      For a non-type template-parameter of type pointer to member function,
7514      no conversions apply. If the template-argument represents a set of
7515      overloaded member functions, the matching member function is selected
7516      from the set (_over.over_).  */
7517   else if (TYPE_PTRMEMFUNC_P (type))
7518     {
7519       expr = instantiate_type (type, expr, tf_none);
7520       if (expr == error_mark_node)
7521         return error_mark_node;
7522
7523       /* [temp.arg.nontype] bullet 1 says the pointer to member
7524          expression must be a pointer-to-member constant.  */
7525       if (!val_dep_p
7526           && !check_valid_ptrmem_cst_expr (type, expr, complain))
7527         return NULL_TREE;
7528
7529       /* Repeated conversion can't deal with a conversion that turns PTRMEM_CST
7530          into a CONSTRUCTOR, so build up a new PTRMEM_CST instead.  */
7531       if (fnptr_conv_p (type, TREE_TYPE (expr)))
7532         expr = make_ptrmem_cst (type, PTRMEM_CST_MEMBER (expr));
7533     }
7534   /* [temp.arg.nontype]/5, bullet 7
7535
7536      For a non-type template-parameter of type pointer to data member,
7537      qualification conversions (_conv.qual_) are applied.  */
7538   else if (TYPE_PTRDATAMEM_P (type))
7539     {
7540       /* [temp.arg.nontype] bullet 1 says the pointer to member
7541          expression must be a pointer-to-member constant.  */
7542       if (!val_dep_p
7543           && !check_valid_ptrmem_cst_expr (type, expr, complain))
7544         return NULL_TREE;
7545
7546       expr = perform_qualification_conversions (type, expr);
7547       if (expr == error_mark_node)
7548         return expr;
7549     }
7550   else if (NULLPTR_TYPE_P (type))
7551     {
7552       if (!NULLPTR_TYPE_P (TREE_TYPE (expr)))
7553         {
7554           if (complain & tf_error)
7555             error ("%qE is not a valid template argument for type %qT "
7556                    "because it is of type %qT", expr, type, TREE_TYPE (expr));
7557           return NULL_TREE;
7558         }
7559       return expr;
7560     }
7561   else if (CLASS_TYPE_P (type))
7562     {
7563       /* Replace the argument with a reference to the corresponding template
7564          parameter object.  */
7565       if (!val_dep_p)
7566         expr = get_template_parm_object (expr, complain);
7567       if (expr == error_mark_node)
7568         return NULL_TREE;
7569     }
7570   /* A template non-type parameter must be one of the above.  */
7571   else
7572     gcc_unreachable ();
7573
7574   /* Sanity check: did we actually convert the argument to the
7575      right type?  */
7576   gcc_assert (same_type_ignoring_top_level_qualifiers_p
7577               (type, TREE_TYPE (expr)));
7578   return convert_from_reference (expr);
7579 }
7580
7581 /* Subroutine of coerce_template_template_parms, which returns 1 if
7582    PARM_PARM and ARG_PARM match using the rule for the template
7583    parameters of template template parameters. Both PARM and ARG are
7584    template parameters; the rest of the arguments are the same as for
7585    coerce_template_template_parms.
7586  */
7587 static int
7588 coerce_template_template_parm (tree parm,
7589                               tree arg,
7590                               tsubst_flags_t complain,
7591                               tree in_decl,
7592                               tree outer_args)
7593 {
7594   if (arg == NULL_TREE || error_operand_p (arg)
7595       || parm == NULL_TREE || error_operand_p (parm))
7596     return 0;
7597
7598   if (TREE_CODE (arg) != TREE_CODE (parm))
7599     return 0;
7600
7601   switch (TREE_CODE (parm))
7602     {
7603     case TEMPLATE_DECL:
7604       /* We encounter instantiations of templates like
7605          template <template <template <class> class> class TT>
7606          class C;  */
7607       {
7608         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
7609         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
7610
7611         if (!coerce_template_template_parms
7612             (parmparm, argparm, complain, in_decl, outer_args))
7613           return 0;
7614       }
7615       /* Fall through.  */
7616
7617     case TYPE_DECL:
7618       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
7619           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
7620         /* Argument is a parameter pack but parameter is not.  */
7621         return 0;
7622       break;
7623
7624     case PARM_DECL:
7625       /* The tsubst call is used to handle cases such as
7626
7627            template <int> class C {};
7628            template <class T, template <T> class TT> class D {};
7629            D<int, C> d;
7630
7631          i.e. the parameter list of TT depends on earlier parameters.  */
7632       if (!uses_template_parms (TREE_TYPE (arg)))
7633         {
7634           tree t = tsubst (TREE_TYPE (parm), outer_args, complain, in_decl);
7635           if (!uses_template_parms (t)
7636               && !same_type_p (t, TREE_TYPE (arg)))
7637             return 0;
7638         }
7639
7640       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
7641           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
7642         /* Argument is a parameter pack but parameter is not.  */
7643         return 0;
7644
7645       break;
7646
7647     default:
7648       gcc_unreachable ();
7649     }
7650
7651   return 1;
7652 }
7653
7654 /* Coerce template argument list ARGLIST for use with template
7655    template-parameter TEMPL.  */
7656
7657 static tree
7658 coerce_template_args_for_ttp (tree templ, tree arglist,
7659                               tsubst_flags_t complain)
7660 {
7661   /* Consider an example where a template template parameter declared as
7662
7663      template <class T, class U = std::allocator<T> > class TT
7664
7665      The template parameter level of T and U are one level larger than
7666      of TT.  To proper process the default argument of U, say when an
7667      instantiation `TT<int>' is seen, we need to build the full
7668      arguments containing {int} as the innermost level.  Outer levels,
7669      available when not appearing as default template argument, can be
7670      obtained from the arguments of the enclosing template.
7671
7672      Suppose that TT is later substituted with std::vector.  The above
7673      instantiation is `TT<int, std::allocator<T> >' with TT at
7674      level 1, and T at level 2, while the template arguments at level 1
7675      becomes {std::vector} and the inner level 2 is {int}.  */
7676
7677   tree outer = DECL_CONTEXT (templ);
7678   if (outer)
7679     outer = generic_targs_for (outer);
7680   else if (current_template_parms)
7681     {
7682       /* This is an argument of the current template, so we haven't set
7683          DECL_CONTEXT yet.  */
7684       tree relevant_template_parms;
7685
7686       /* Parameter levels that are greater than the level of the given
7687          template template parm are irrelevant.  */
7688       relevant_template_parms = current_template_parms;
7689       while (TMPL_PARMS_DEPTH (relevant_template_parms)
7690              != TEMPLATE_TYPE_LEVEL (TREE_TYPE (templ)))
7691         relevant_template_parms = TREE_CHAIN (relevant_template_parms);
7692
7693       outer = template_parms_to_args (relevant_template_parms);
7694     }
7695
7696   if (outer)
7697     arglist = add_to_template_args (outer, arglist);
7698
7699   tree parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7700   return coerce_template_parms (parmlist, arglist, templ,
7701                                 complain,
7702                                 /*require_all_args=*/true,
7703                                 /*use_default_args=*/true);
7704 }
7705
7706 /* A cache of template template parameters with match-all default
7707    arguments.  */
7708 static GTY((deletable)) hash_map<tree,tree> *defaulted_ttp_cache;
7709
7710 /* T is a bound template template-parameter.  Copy its arguments into default
7711    arguments of the template template-parameter's template parameters.  */
7712
7713 static tree
7714 add_defaults_to_ttp (tree otmpl)
7715 {
7716   if (tree *c = hash_map_safe_get (defaulted_ttp_cache, otmpl))
7717     return *c;
7718
7719   tree ntmpl = copy_node (otmpl);
7720
7721   tree ntype = copy_node (TREE_TYPE (otmpl));
7722   TYPE_STUB_DECL (ntype) = TYPE_NAME (ntype) = ntmpl;
7723   TYPE_MAIN_VARIANT (ntype) = ntype;
7724   TYPE_POINTER_TO (ntype) = TYPE_REFERENCE_TO (ntype) = NULL_TREE;
7725   TYPE_NAME (ntype) = ntmpl;
7726   SET_TYPE_STRUCTURAL_EQUALITY (ntype);
7727
7728   tree idx = TEMPLATE_TYPE_PARM_INDEX (ntype)
7729     = copy_node (TEMPLATE_TYPE_PARM_INDEX (ntype));
7730   TEMPLATE_PARM_DECL (idx) = ntmpl;
7731   TREE_TYPE (ntmpl) = TREE_TYPE (idx) = ntype;
7732
7733   tree oparms = DECL_TEMPLATE_PARMS (otmpl);
7734   tree parms = DECL_TEMPLATE_PARMS (ntmpl) = copy_node (oparms);
7735   TREE_CHAIN (parms) = TREE_CHAIN (oparms);
7736   tree vec = TREE_VALUE (parms) = copy_node (TREE_VALUE (parms));
7737   for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
7738     {
7739       tree o = TREE_VEC_ELT (vec, i);
7740       if (!template_parameter_pack_p (TREE_VALUE (o)))
7741         {
7742           tree n = TREE_VEC_ELT (vec, i) = copy_node (o);
7743           TREE_PURPOSE (n) = any_targ_node;
7744         }
7745     }
7746
7747   hash_map_safe_put<hm_ggc> (defaulted_ttp_cache, otmpl, ntmpl);
7748   return ntmpl;
7749 }
7750
7751 /* ARG is a bound potential template template-argument, and PARGS is a list
7752    of arguments for the corresponding template template-parameter.  Adjust
7753    PARGS as appropriate for application to ARG's template, and if ARG is a
7754    BOUND_TEMPLATE_TEMPLATE_PARM, possibly adjust it to add default template
7755    arguments to the template template parameter.  */
7756
7757 static tree
7758 coerce_ttp_args_for_tta (tree& arg, tree pargs, tsubst_flags_t complain)
7759 {
7760   ++processing_template_decl;
7761   tree arg_tmpl = TYPE_TI_TEMPLATE (arg);
7762   if (DECL_TEMPLATE_TEMPLATE_PARM_P (arg_tmpl))
7763     {
7764       /* When comparing two template template-parameters in partial ordering,
7765          rewrite the one currently being used as an argument to have default
7766          arguments for all parameters.  */
7767       arg_tmpl = add_defaults_to_ttp (arg_tmpl);
7768       pargs = coerce_template_args_for_ttp (arg_tmpl, pargs, complain);
7769       if (pargs != error_mark_node)
7770         arg = bind_template_template_parm (TREE_TYPE (arg_tmpl),
7771                                            TYPE_TI_ARGS (arg));
7772     }
7773   else
7774     {
7775       tree aparms
7776         = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (arg_tmpl));
7777       pargs = coerce_template_parms (aparms, pargs, arg_tmpl, complain,
7778                                        /*require_all*/true,
7779                                        /*use_default*/true);
7780     }
7781   --processing_template_decl;
7782   return pargs;
7783 }
7784
7785 /* Subroutine of unify for the case when PARM is a
7786    BOUND_TEMPLATE_TEMPLATE_PARM.  */
7787
7788 static int
7789 unify_bound_ttp_args (tree tparms, tree targs, tree parm, tree& arg,
7790                       bool explain_p)
7791 {
7792   tree parmvec = TYPE_TI_ARGS (parm);
7793   tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
7794
7795   /* The template template parm might be variadic and the argument
7796      not, so flatten both argument lists.  */
7797   parmvec = expand_template_argument_pack (parmvec);
7798   argvec = expand_template_argument_pack (argvec);
7799
7800   if (flag_new_ttp)
7801     {
7802       /* In keeping with P0522R0, adjust P's template arguments
7803          to apply to A's template; then flatten it again.  */
7804       tree nparmvec = coerce_ttp_args_for_tta (arg, parmvec, tf_none);
7805       nparmvec = expand_template_argument_pack (nparmvec);
7806
7807       if (unify (tparms, targs, nparmvec, argvec,
7808                  UNIFY_ALLOW_NONE, explain_p))
7809         return 1;
7810
7811       /* If the P0522 adjustment eliminated a pack expansion, deduce
7812          empty packs.  */
7813       if (flag_new_ttp
7814           && TREE_VEC_LENGTH (nparmvec) < TREE_VEC_LENGTH (parmvec)
7815           && unify_pack_expansion (tparms, targs, parmvec, argvec,
7816                                    DEDUCE_EXACT, /*sub*/true, explain_p))
7817         return 1;
7818     }
7819   else
7820     {
7821       /* Deduce arguments T, i from TT<T> or TT<i>.
7822          We check each element of PARMVEC and ARGVEC individually
7823          rather than the whole TREE_VEC since they can have
7824          different number of elements, which is allowed under N2555.  */
7825
7826       int len = TREE_VEC_LENGTH (parmvec);
7827
7828       /* Check if the parameters end in a pack, making them
7829          variadic.  */
7830       int parm_variadic_p = 0;
7831       if (len > 0
7832           && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
7833         parm_variadic_p = 1;
7834
7835       for (int i = 0; i < len - parm_variadic_p; ++i)
7836         /* If the template argument list of P contains a pack
7837            expansion that is not the last template argument, the
7838            entire template argument list is a non-deduced
7839            context.  */
7840         if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
7841           return unify_success (explain_p);
7842
7843       if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
7844         return unify_too_few_arguments (explain_p,
7845                                         TREE_VEC_LENGTH (argvec), len);
7846
7847       for (int i = 0; i < len - parm_variadic_p; ++i)
7848         if (unify (tparms, targs,
7849                    TREE_VEC_ELT (parmvec, i),
7850                    TREE_VEC_ELT (argvec, i),
7851                    UNIFY_ALLOW_NONE, explain_p))
7852           return 1;
7853
7854       if (parm_variadic_p
7855           && unify_pack_expansion (tparms, targs,
7856                                    parmvec, argvec,
7857                                    DEDUCE_EXACT,
7858                                    /*subr=*/true, explain_p))
7859         return 1;
7860     }
7861
7862   return 0;
7863 }
7864
7865 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
7866    template template parameters.  Both PARM_PARMS and ARG_PARMS are
7867    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
7868    or PARM_DECL.
7869
7870    Consider the example:
7871      template <class T> class A;
7872      template<template <class U> class TT> class B;
7873
7874    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
7875    the parameters to A, and OUTER_ARGS contains A.  */
7876
7877 static int
7878 coerce_template_template_parms (tree parm_parms,
7879                                 tree arg_parms,
7880                                 tsubst_flags_t complain,
7881                                 tree in_decl,
7882                                 tree outer_args)
7883 {
7884   int nparms, nargs, i;
7885   tree parm, arg;
7886   int variadic_p = 0;
7887
7888   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
7889   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
7890
7891   nparms = TREE_VEC_LENGTH (parm_parms);
7892   nargs = TREE_VEC_LENGTH (arg_parms);
7893
7894   if (flag_new_ttp)
7895     {
7896       /* P0522R0: A template template-parameter P is at least as specialized as
7897          a template template-argument A if, given the following rewrite to two
7898          function templates, the function template corresponding to P is at
7899          least as specialized as the function template corresponding to A
7900          according to the partial ordering rules for function templates
7901          ([temp.func.order]). Given an invented class template X with the
7902          template parameter list of A (including default arguments):
7903
7904          * Each of the two function templates has the same template parameters,
7905          respectively, as P or A.
7906
7907          * Each function template has a single function parameter whose type is
7908          a specialization of X with template arguments corresponding to the
7909          template parameters from the respective function template where, for
7910          each template parameter PP in the template parameter list of the
7911          function template, a corresponding template argument AA is formed. If
7912          PP declares a parameter pack, then AA is the pack expansion
7913          PP... ([temp.variadic]); otherwise, AA is the id-expression PP.
7914
7915          If the rewrite produces an invalid type, then P is not at least as
7916          specialized as A.  */
7917
7918       /* So coerce P's args to apply to A's parms, and then deduce between A's
7919          args and the converted args.  If that succeeds, A is at least as
7920          specialized as P, so they match.*/
7921       tree pargs = template_parms_level_to_args (parm_parms);
7922       pargs = add_outermost_template_args (outer_args, pargs);
7923       ++processing_template_decl;
7924       pargs = coerce_template_parms (arg_parms, pargs, NULL_TREE, tf_none,
7925                                      /*require_all*/true, /*use_default*/true);
7926       --processing_template_decl;
7927       if (pargs != error_mark_node)
7928         {
7929           tree targs = make_tree_vec (nargs);
7930           tree aargs = template_parms_level_to_args (arg_parms);
7931           if (!unify (arg_parms, targs, aargs, pargs, UNIFY_ALLOW_NONE,
7932                       /*explain*/false))
7933             return 1;
7934         }
7935     }
7936
7937   /* Determine whether we have a parameter pack at the end of the
7938      template template parameter's template parameter list.  */
7939   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
7940     {
7941       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
7942
7943       if (error_operand_p (parm))
7944         return 0;
7945
7946       switch (TREE_CODE (parm))
7947         {
7948         case TEMPLATE_DECL:
7949         case TYPE_DECL:
7950           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
7951             variadic_p = 1;
7952           break;
7953
7954         case PARM_DECL:
7955           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
7956             variadic_p = 1;
7957           break;
7958
7959         default:
7960           gcc_unreachable ();
7961         }
7962     }
7963
7964   if (nargs != nparms
7965       && !(variadic_p && nargs >= nparms - 1))
7966     return 0;
7967
7968   /* Check all of the template parameters except the parameter pack at
7969      the end (if any).  */
7970   for (i = 0; i < nparms - variadic_p; ++i)
7971     {
7972       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
7973           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
7974         continue;
7975
7976       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
7977       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
7978
7979       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
7980                                           outer_args))
7981         return 0;
7982
7983     }
7984
7985   if (variadic_p)
7986     {
7987       /* Check each of the template parameters in the template
7988          argument against the template parameter pack at the end of
7989          the template template parameter.  */
7990       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
7991         return 0;
7992
7993       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
7994
7995       for (; i < nargs; ++i)
7996         {
7997           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
7998             continue;
7999
8000           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
8001
8002           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
8003                                               outer_args))
8004             return 0;
8005         }
8006     }
8007
8008   return 1;
8009 }
8010
8011 /* Verifies that the deduced template arguments (in TARGS) for the
8012    template template parameters (in TPARMS) represent valid bindings,
8013    by comparing the template parameter list of each template argument
8014    to the template parameter list of its corresponding template
8015    template parameter, in accordance with DR150. This
8016    routine can only be called after all template arguments have been
8017    deduced. It will return TRUE if all of the template template
8018    parameter bindings are okay, FALSE otherwise.  */
8019 bool
8020 template_template_parm_bindings_ok_p (tree tparms, tree targs)
8021 {
8022   int i, ntparms = TREE_VEC_LENGTH (tparms);
8023   bool ret = true;
8024
8025   /* We're dealing with template parms in this process.  */
8026   ++processing_template_decl;
8027
8028   targs = INNERMOST_TEMPLATE_ARGS (targs);
8029
8030   for (i = 0; i < ntparms; ++i)
8031     {
8032       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
8033       tree targ = TREE_VEC_ELT (targs, i);
8034
8035       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
8036         {
8037           tree packed_args = NULL_TREE;
8038           int idx, len = 1;
8039
8040           if (ARGUMENT_PACK_P (targ))
8041             {
8042               /* Look inside the argument pack.  */
8043               packed_args = ARGUMENT_PACK_ARGS (targ);
8044               len = TREE_VEC_LENGTH (packed_args);
8045             }
8046
8047           for (idx = 0; idx < len; ++idx)
8048             {
8049               tree targ_parms = NULL_TREE;
8050
8051               if (packed_args)
8052                 /* Extract the next argument from the argument
8053                    pack.  */
8054                 targ = TREE_VEC_ELT (packed_args, idx);
8055
8056               if (PACK_EXPANSION_P (targ))
8057                 /* Look at the pattern of the pack expansion.  */
8058                 targ = PACK_EXPANSION_PATTERN (targ);
8059
8060               /* Extract the template parameters from the template
8061                  argument.  */
8062               if (TREE_CODE (targ) == TEMPLATE_DECL)
8063                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
8064               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
8065                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
8066
8067               /* Verify that we can coerce the template template
8068                  parameters from the template argument to the template
8069                  parameter.  This requires an exact match.  */
8070               if (targ_parms
8071                   && !coerce_template_template_parms
8072                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
8073                         targ_parms,
8074                         tf_none,
8075                         tparm,
8076                         targs))
8077                 {
8078                   ret = false;
8079                   goto out;
8080                 }
8081             }
8082         }
8083     }
8084
8085  out:
8086
8087   --processing_template_decl;
8088   return ret;
8089 }
8090
8091 /* Since type attributes aren't mangled, we need to strip them from
8092    template type arguments.  */
8093
8094 tree
8095 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
8096 {
8097   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
8098     return arg;
8099   bool removed_attributes = false;
8100   tree canon = strip_typedefs (arg, &removed_attributes);
8101   if (removed_attributes
8102       && (complain & tf_warning))
8103     warning (OPT_Wignored_attributes,
8104              "ignoring attributes on template argument %qT", arg);
8105   return canon;
8106 }
8107
8108 /* And from inside dependent non-type arguments like sizeof(Type).  */
8109
8110 static tree
8111 canonicalize_expr_argument (tree arg, tsubst_flags_t complain)
8112 {
8113   if (!arg || arg == error_mark_node)
8114     return arg;
8115   bool removed_attributes = false;
8116   tree canon = strip_typedefs_expr (arg, &removed_attributes);
8117   if (removed_attributes
8118       && (complain & tf_warning))
8119     warning (OPT_Wignored_attributes,
8120              "ignoring attributes in template argument %qE", arg);
8121   return canon;
8122 }
8123
8124 // A template declaration can be substituted for a constrained
8125 // template template parameter only when the argument is more
8126 // constrained than the parameter.
8127 static bool
8128 is_compatible_template_arg (tree parm, tree arg)
8129 {
8130   tree parm_cons = get_constraints (parm);
8131
8132   /* For now, allow constrained template template arguments
8133      and unconstrained template template parameters.  */
8134   if (parm_cons == NULL_TREE)
8135     return true;
8136
8137   /* If the template parameter is constrained, we need to rewrite its
8138      constraints in terms of the ARG's template parameters. This ensures
8139      that all of the template parameter types will have the same depth.
8140
8141      Note that this is only valid when coerce_template_template_parm is
8142      true for the innermost template parameters of PARM and ARG. In other
8143      words, because coercion is successful, this conversion will be valid.  */
8144   tree new_args = NULL_TREE;
8145   if (parm_cons)
8146     {
8147       tree aparms = DECL_INNERMOST_TEMPLATE_PARMS (arg);
8148       new_args = template_parms_level_to_args (aparms);
8149       parm_cons = tsubst_constraint_info (parm_cons, new_args,
8150                                           tf_none, NULL_TREE);
8151       if (parm_cons == error_mark_node)
8152         return false;
8153     }
8154
8155   return weakly_subsumes (parm_cons, new_args, arg);
8156 }
8157
8158 // Convert a placeholder argument into a binding to the original
8159 // parameter. The original parameter is saved as the TREE_TYPE of
8160 // ARG.
8161 static inline tree
8162 convert_wildcard_argument (tree parm, tree arg)
8163 {
8164   TREE_TYPE (arg) = parm;
8165   return arg;
8166 }
8167
8168 /* We can't fully resolve ARG given as a non-type template argument to TYPE,
8169    because one of them is dependent.  But we need to represent the
8170    conversion for the benefit of cp_tree_equal.  */
8171
8172 static tree
8173 maybe_convert_nontype_argument (tree type, tree arg)
8174 {
8175   /* Auto parms get no conversion.  */
8176   if (type_uses_auto (type))
8177     return arg;
8178   /* We don't need or want to add this conversion now if we're going to use the
8179      argument for deduction.  */
8180   if (value_dependent_expression_p (arg))
8181     return arg;
8182
8183   type = cv_unqualified (type);
8184   tree argtype = TREE_TYPE (arg);
8185   if (same_type_p (type, argtype))
8186     return arg;
8187
8188   arg = build1 (IMPLICIT_CONV_EXPR, type, arg);
8189   IMPLICIT_CONV_EXPR_NONTYPE_ARG (arg) = true;
8190   return arg;
8191 }
8192
8193 /* Convert the indicated template ARG as necessary to match the
8194    indicated template PARM.  Returns the converted ARG, or
8195    error_mark_node if the conversion was unsuccessful.  Error and
8196    warning messages are issued under control of COMPLAIN.  This
8197    conversion is for the Ith parameter in the parameter list.  ARGS is
8198    the full set of template arguments deduced so far.  */
8199
8200 static tree
8201 convert_template_argument (tree parm,
8202                            tree arg,
8203                            tree args,
8204                            tsubst_flags_t complain,
8205                            int i,
8206                            tree in_decl)
8207 {
8208   tree orig_arg;
8209   tree val;
8210   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
8211
8212   if (parm == error_mark_node || error_operand_p (arg))
8213     return error_mark_node;
8214
8215   /* Trivially convert placeholders. */
8216   if (TREE_CODE (arg) == WILDCARD_DECL)
8217     return convert_wildcard_argument (parm, arg);
8218
8219   if (arg == any_targ_node)
8220     return arg;
8221
8222   if (TREE_CODE (arg) == TREE_LIST
8223       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
8224     {
8225       /* The template argument was the name of some
8226          member function.  That's usually
8227          invalid, but static members are OK.  In any
8228          case, grab the underlying fields/functions
8229          and issue an error later if required.  */
8230       TREE_TYPE (arg) = unknown_type_node;
8231     }
8232
8233   orig_arg = arg;
8234
8235   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
8236   requires_type = (TREE_CODE (parm) == TYPE_DECL
8237                    || requires_tmpl_type);
8238
8239   /* When determining whether an argument pack expansion is a template,
8240      look at the pattern.  */
8241   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
8242     arg = PACK_EXPANSION_PATTERN (arg);
8243
8244   /* Deal with an injected-class-name used as a template template arg.  */
8245   if (requires_tmpl_type && CLASS_TYPE_P (arg))
8246     {
8247       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
8248       if (TREE_CODE (t) == TEMPLATE_DECL)
8249         {
8250           if (cxx_dialect >= cxx11)
8251             /* OK under DR 1004.  */;
8252           else if (complain & tf_warning_or_error)
8253             pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
8254                      " used as template template argument", TYPE_NAME (arg));
8255           else if (flag_pedantic_errors)
8256             t = arg;
8257
8258           arg = t;
8259         }
8260     }
8261
8262   is_tmpl_type =
8263     ((TREE_CODE (arg) == TEMPLATE_DECL
8264       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
8265      || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
8266      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
8267      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
8268
8269   if (is_tmpl_type
8270       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
8271           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
8272     arg = TYPE_STUB_DECL (arg);
8273
8274   is_type = TYPE_P (arg) || is_tmpl_type;
8275
8276   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
8277       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
8278     {
8279       if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
8280         {
8281           if (complain & tf_error)
8282             error ("invalid use of destructor %qE as a type", orig_arg);
8283           return error_mark_node;
8284         }
8285
8286       permerror (input_location,
8287                  "to refer to a type member of a template parameter, "
8288                  "use %<typename %E%>", orig_arg);
8289
8290       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
8291                                      TREE_OPERAND (arg, 1),
8292                                      typename_type,
8293                                      complain);
8294       arg = orig_arg;
8295       is_type = 1;
8296     }
8297   if (is_type != requires_type)
8298     {
8299       if (in_decl)
8300         {
8301           if (complain & tf_error)
8302             {
8303               error ("type/value mismatch at argument %d in template "
8304                      "parameter list for %qD",
8305                      i + 1, in_decl);
8306               if (is_type)
8307                 {
8308                   /* The template argument is a type, but we're expecting
8309                      an expression.  */
8310                   inform (input_location,
8311                           "  expected a constant of type %qT, got %qT",
8312                           TREE_TYPE (parm),
8313                           (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
8314                   /* [temp.arg]/2: "In a template-argument, an ambiguity
8315                      between a type-id and an expression is resolved to a
8316                      type-id, regardless of the form of the corresponding
8317                      template-parameter."  So give the user a clue.  */
8318                   if (TREE_CODE (arg) == FUNCTION_TYPE)
8319                     inform (input_location, "  ambiguous template argument "
8320                             "for non-type template parameter is treated as "
8321                             "function type");
8322                 }
8323               else if (requires_tmpl_type)
8324                 inform (input_location,
8325                         "  expected a class template, got %qE", orig_arg);
8326               else
8327                 inform (input_location,
8328                         "  expected a type, got %qE", orig_arg);
8329             }
8330         }
8331       return error_mark_node;
8332     }
8333   if (is_tmpl_type ^ requires_tmpl_type)
8334     {
8335       if (in_decl && (complain & tf_error))
8336         {
8337           error ("type/value mismatch at argument %d in template "
8338                  "parameter list for %qD",
8339                  i + 1, in_decl);
8340           if (is_tmpl_type)
8341             inform (input_location,
8342                     "  expected a type, got %qT", DECL_NAME (arg));
8343           else
8344             inform (input_location,
8345                     "  expected a class template, got %qT", orig_arg);
8346         }
8347       return error_mark_node;
8348     }
8349
8350   if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
8351     /* We already did the appropriate conversion when packing args.  */
8352     val = orig_arg;
8353   else if (is_type)
8354     {
8355       if (requires_tmpl_type)
8356         {
8357           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
8358             /* The number of argument required is not known yet.
8359                Just accept it for now.  */
8360             val = orig_arg;
8361           else
8362             {
8363               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
8364               tree argparm;
8365
8366               /* Strip alias templates that are equivalent to another
8367                  template.  */
8368               arg = get_underlying_template (arg);
8369               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
8370
8371               if (coerce_template_template_parms (parmparm, argparm,
8372                                                   complain, in_decl,
8373                                                   args))
8374                 {
8375                   val = arg;
8376
8377                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
8378                      TEMPLATE_DECL.  */
8379                   if (val != error_mark_node)
8380                     {
8381                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
8382                         val = TREE_TYPE (val);
8383                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
8384                         val = make_pack_expansion (val, complain);
8385                     }
8386                 }
8387               else
8388                 {
8389                   if (in_decl && (complain & tf_error))
8390                     {
8391                       error ("type/value mismatch at argument %d in "
8392                              "template parameter list for %qD",
8393                              i + 1, in_decl);
8394                       inform (input_location,
8395                               "  expected a template of type %qD, got %qT",
8396                               parm, orig_arg);
8397                     }
8398
8399                   val = error_mark_node;
8400                 }
8401
8402               // Check that the constraints are compatible before allowing the
8403               // substitution.
8404               if (val != error_mark_node)
8405                 if (!is_compatible_template_arg (parm, arg))
8406                   {
8407                     if (in_decl && (complain & tf_error))
8408                       {
8409                         error ("constraint mismatch at argument %d in "
8410                                "template parameter list for %qD",
8411                                i + 1, in_decl);
8412                         inform (input_location, "  expected %qD but got %qD",
8413                                 parm, arg);
8414                       }
8415                     val = error_mark_node;
8416                   }
8417             }
8418         }
8419       else
8420         val = orig_arg;
8421       /* We only form one instance of each template specialization.
8422          Therefore, if we use a non-canonical variant (i.e., a
8423          typedef), any future messages referring to the type will use
8424          the typedef, which is confusing if those future uses do not
8425          themselves also use the typedef.  */
8426       if (TYPE_P (val))
8427         val = canonicalize_type_argument (val, complain);
8428     }
8429   else
8430     {
8431       tree t = TREE_TYPE (parm);
8432
8433       if (TEMPLATE_PARM_LEVEL (get_template_parm_index (parm))
8434           > TMPL_ARGS_DEPTH (args))
8435         /* We don't have enough levels of args to do any substitution.  This
8436            can happen in the context of -fnew-ttp-matching.  */;
8437       else if (tree a = type_uses_auto (t))
8438         {
8439           t = do_auto_deduction (t, arg, a, complain, adc_unify, args);
8440           if (t == error_mark_node)
8441             return error_mark_node;
8442         }
8443       else
8444         t = tsubst (t, args, complain, in_decl);
8445
8446       if (invalid_nontype_parm_type_p (t, complain))
8447         return error_mark_node;
8448
8449       if (t != TREE_TYPE (parm))
8450         t = canonicalize_type_argument (t, complain);
8451
8452       if (!type_dependent_expression_p (orig_arg)
8453           && !uses_template_parms (t))
8454         /* We used to call digest_init here.  However, digest_init
8455            will report errors, which we don't want when complain
8456            is zero.  More importantly, digest_init will try too
8457            hard to convert things: for example, `0' should not be
8458            converted to pointer type at this point according to
8459            the standard.  Accepting this is not merely an
8460            extension, since deciding whether or not these
8461            conversions can occur is part of determining which
8462            function template to call, or whether a given explicit
8463            argument specification is valid.  */
8464         val = convert_nontype_argument (t, orig_arg, complain);
8465       else
8466         {
8467           val = canonicalize_expr_argument (orig_arg, complain);
8468           val = maybe_convert_nontype_argument (t, val);
8469         }
8470
8471
8472       if (val == NULL_TREE)
8473         val = error_mark_node;
8474       else if (val == error_mark_node && (complain & tf_error))
8475         error_at (cp_expr_loc_or_input_loc (orig_arg),
8476                   "could not convert template argument %qE from %qT to %qT",
8477                   orig_arg, TREE_TYPE (orig_arg), t);
8478
8479       if (INDIRECT_REF_P (val))
8480         {
8481           /* Reject template arguments that are references to built-in
8482              functions with no library fallbacks.  */
8483           const_tree inner = TREE_OPERAND (val, 0);
8484           const_tree innertype = TREE_TYPE (inner);
8485           if (innertype
8486               && TYPE_REF_P (innertype)
8487               && TREE_CODE (TREE_TYPE (innertype)) == FUNCTION_TYPE
8488               && TREE_OPERAND_LENGTH (inner) > 0
8489               && reject_gcc_builtin (TREE_OPERAND (inner, 0)))
8490               return error_mark_node;
8491         }
8492
8493       if (TREE_CODE (val) == SCOPE_REF)
8494         {
8495           /* Strip typedefs from the SCOPE_REF.  */
8496           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
8497           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
8498                                                    complain);
8499           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
8500                                       QUALIFIED_NAME_IS_TEMPLATE (val));
8501         }
8502     }
8503
8504   return val;
8505 }
8506
8507 /* Coerces the remaining template arguments in INNER_ARGS (from
8508    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
8509    Returns the coerced argument pack. PARM_IDX is the position of this
8510    parameter in the template parameter list. ARGS is the original
8511    template argument list.  */
8512 static tree
8513 coerce_template_parameter_pack (tree parms,
8514                                 int parm_idx,
8515                                 tree args,
8516                                 tree inner_args,
8517                                 int arg_idx,
8518                                 tree new_args,
8519                                 int* lost,
8520                                 tree in_decl,
8521                                 tsubst_flags_t complain)
8522 {
8523   tree parm = TREE_VEC_ELT (parms, parm_idx);
8524   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
8525   tree packed_args;
8526   tree argument_pack;
8527   tree packed_parms = NULL_TREE;
8528
8529   if (arg_idx > nargs)
8530     arg_idx = nargs;
8531
8532   if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
8533     {
8534       /* When the template parameter is a non-type template parameter pack
8535          or template template parameter pack whose type or template
8536          parameters use parameter packs, we know exactly how many arguments
8537          we are looking for.  Build a vector of the instantiated decls for
8538          these template parameters in PACKED_PARMS.  */
8539       /* We can't use make_pack_expansion here because it would interpret a
8540          _DECL as a use rather than a declaration.  */
8541       tree decl = TREE_VALUE (parm);
8542       tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
8543       SET_PACK_EXPANSION_PATTERN (exp, decl);
8544       PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
8545       SET_TYPE_STRUCTURAL_EQUALITY (exp);
8546
8547       TREE_VEC_LENGTH (args)--;
8548       packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
8549       TREE_VEC_LENGTH (args)++;
8550
8551       if (packed_parms == error_mark_node)
8552         return error_mark_node;
8553
8554       /* If we're doing a partial instantiation of a member template,
8555          verify that all of the types used for the non-type
8556          template parameter pack are, in fact, valid for non-type
8557          template parameters.  */
8558       if (arg_idx < nargs
8559           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
8560         {
8561           int j, len = TREE_VEC_LENGTH (packed_parms);
8562           for (j = 0; j < len; ++j)
8563             {
8564               tree t = TREE_VEC_ELT (packed_parms, j);
8565               if (TREE_CODE (t) == PARM_DECL
8566                   && invalid_nontype_parm_type_p (TREE_TYPE (t), complain))
8567                 return error_mark_node;
8568             }
8569           /* We don't know how many args we have yet, just
8570              use the unconverted ones for now.  */
8571           return NULL_TREE;
8572         }
8573
8574       packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
8575     }
8576   /* Check if we have a placeholder pack, which indicates we're
8577      in the context of a introduction list.  In that case we want
8578      to match this pack to the single placeholder.  */
8579   else if (arg_idx < nargs
8580            && TREE_CODE (TREE_VEC_ELT (inner_args, arg_idx)) == WILDCARD_DECL
8581            && WILDCARD_PACK_P (TREE_VEC_ELT (inner_args, arg_idx)))
8582     {
8583       nargs = arg_idx + 1;
8584       packed_args = make_tree_vec (1);
8585     }
8586   else
8587     packed_args = make_tree_vec (nargs - arg_idx);
8588
8589   /* Convert the remaining arguments, which will be a part of the
8590      parameter pack "parm".  */
8591   int first_pack_arg = arg_idx;
8592   for (; arg_idx < nargs; ++arg_idx)
8593     {
8594       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
8595       tree actual_parm = TREE_VALUE (parm);
8596       int pack_idx = arg_idx - first_pack_arg;
8597
8598       if (packed_parms)
8599         {
8600           /* Once we've packed as many args as we have types, stop.  */
8601           if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
8602             break;
8603           else if (PACK_EXPANSION_P (arg))
8604             /* We don't know how many args we have yet, just
8605                use the unconverted ones for now.  */
8606             return NULL_TREE;
8607           else
8608             actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
8609         }
8610
8611       if (arg == error_mark_node)
8612         {
8613           if (complain & tf_error)
8614             error ("template argument %d is invalid", arg_idx + 1);
8615         }
8616       else
8617         arg = convert_template_argument (actual_parm,
8618                                          arg, new_args, complain, parm_idx,
8619                                          in_decl);
8620       if (arg == error_mark_node)
8621         (*lost)++;
8622       TREE_VEC_ELT (packed_args, pack_idx) = arg;
8623     }
8624
8625   if (arg_idx - first_pack_arg < TREE_VEC_LENGTH (packed_args)
8626       && TREE_VEC_LENGTH (packed_args) > 0)
8627     {
8628       if (complain & tf_error)
8629         error ("wrong number of template arguments (%d, should be %d)",
8630                arg_idx - first_pack_arg, TREE_VEC_LENGTH (packed_args));
8631       return error_mark_node;
8632     }
8633
8634   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
8635       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
8636     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
8637   else
8638     {
8639       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
8640       TREE_CONSTANT (argument_pack) = 1;
8641     }
8642
8643   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
8644   if (CHECKING_P)
8645     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
8646                                          TREE_VEC_LENGTH (packed_args));
8647   return argument_pack;
8648 }
8649
8650 /* Returns the number of pack expansions in the template argument vector
8651    ARGS.  */
8652
8653 static int
8654 pack_expansion_args_count (tree args)
8655 {
8656   int i;
8657   int count = 0;
8658   if (args)
8659     for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
8660       {
8661         tree elt = TREE_VEC_ELT (args, i);
8662         if (elt && PACK_EXPANSION_P (elt))
8663           ++count;
8664       }
8665   return count;
8666 }
8667
8668 /* Convert all template arguments to their appropriate types, and
8669    return a vector containing the innermost resulting template
8670    arguments.  If any error occurs, return error_mark_node. Error and
8671    warning messages are issued under control of COMPLAIN.
8672
8673    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
8674    for arguments not specified in ARGS.  Otherwise, if
8675    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
8676    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
8677    USE_DEFAULT_ARGS is false, then all arguments must be specified in
8678    ARGS.  */
8679
8680 static tree
8681 coerce_template_parms (tree parms,
8682                        tree args,
8683                        tree in_decl,
8684                        tsubst_flags_t complain,
8685                        bool require_all_args,
8686                        bool use_default_args)
8687 {
8688   int nparms, nargs, parm_idx, arg_idx, lost = 0;
8689   tree orig_inner_args;
8690   tree inner_args;
8691   tree new_args;
8692   tree new_inner_args;
8693
8694   /* When used as a boolean value, indicates whether this is a
8695      variadic template parameter list. Since it's an int, we can also
8696      subtract it from nparms to get the number of non-variadic
8697      parameters.  */
8698   int variadic_p = 0;
8699   int variadic_args_p = 0;
8700   int post_variadic_parms = 0;
8701
8702   /* Adjustment to nparms for fixed parameter packs.  */
8703   int fixed_pack_adjust = 0;
8704   int fixed_packs = 0;
8705   int missing = 0;
8706
8707   /* Likewise for parameters with default arguments.  */
8708   int default_p = 0;
8709
8710   if (args == error_mark_node)
8711     return error_mark_node;
8712
8713   nparms = TREE_VEC_LENGTH (parms);
8714
8715   /* Determine if there are any parameter packs or default arguments.  */
8716   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
8717     {
8718       tree parm = TREE_VEC_ELT (parms, parm_idx);
8719       if (variadic_p)
8720         ++post_variadic_parms;
8721       if (template_parameter_pack_p (TREE_VALUE (parm)))
8722         ++variadic_p;
8723       if (TREE_PURPOSE (parm))
8724         ++default_p;
8725     }
8726
8727   inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
8728   /* If there are no parameters that follow a parameter pack, we need to
8729      expand any argument packs so that we can deduce a parameter pack from
8730      some non-packed args followed by an argument pack, as in variadic85.C.
8731      If there are such parameters, we need to leave argument packs intact
8732      so the arguments are assigned properly.  This can happen when dealing
8733      with a nested class inside a partial specialization of a class
8734      template, as in variadic92.C, or when deducing a template parameter pack
8735      from a sub-declarator, as in variadic114.C.  */
8736   if (!post_variadic_parms)
8737     inner_args = expand_template_argument_pack (inner_args);
8738
8739   /* Count any pack expansion args.  */
8740   variadic_args_p = pack_expansion_args_count (inner_args);
8741
8742   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
8743   if ((nargs - variadic_args_p > nparms && !variadic_p)
8744       || (nargs < nparms - variadic_p
8745           && require_all_args
8746           && !variadic_args_p
8747           && (!use_default_args
8748               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
8749                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
8750     {
8751     bad_nargs:
8752       if (complain & tf_error)
8753         {
8754           if (variadic_p || default_p)
8755             {
8756               nparms -= variadic_p + default_p;
8757               error ("wrong number of template arguments "
8758                      "(%d, should be at least %d)", nargs, nparms);
8759             }
8760           else
8761              error ("wrong number of template arguments "
8762                     "(%d, should be %d)", nargs, nparms);
8763
8764           if (in_decl)
8765             inform (DECL_SOURCE_LOCATION (in_decl),
8766                     "provided for %qD", in_decl);
8767         }
8768
8769       return error_mark_node;
8770     }
8771   /* We can't pass a pack expansion to a non-pack parameter of an alias
8772      template (DR 1430).  */
8773   else if (in_decl
8774            && (DECL_ALIAS_TEMPLATE_P (in_decl)
8775                || concept_definition_p (in_decl))
8776            && variadic_args_p
8777            && nargs - variadic_args_p < nparms - variadic_p)
8778     {
8779       if (complain & tf_error)
8780         {
8781           for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
8782             {
8783               tree arg = TREE_VEC_ELT (inner_args, i);
8784               tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
8785
8786               if (PACK_EXPANSION_P (arg)
8787                   && !template_parameter_pack_p (parm))
8788                 {
8789                   if (DECL_ALIAS_TEMPLATE_P (in_decl))
8790                     error_at (location_of (arg),
8791                               "pack expansion argument for non-pack parameter "
8792                               "%qD of alias template %qD", parm, in_decl);
8793                   else
8794                     error_at (location_of (arg),
8795                               "pack expansion argument for non-pack parameter "
8796                               "%qD of concept %qD", parm, in_decl);
8797                   inform (DECL_SOURCE_LOCATION (parm), "declared here");
8798                   goto found;
8799                 }
8800             }
8801           gcc_unreachable ();
8802         found:;
8803         }
8804       return error_mark_node;
8805     }
8806
8807   /* We need to evaluate the template arguments, even though this
8808      template-id may be nested within a "sizeof".  */
8809   cp_evaluated ev;
8810
8811   new_inner_args = make_tree_vec (nparms);
8812   new_args = add_outermost_template_args (args, new_inner_args);
8813   int pack_adjust = 0;
8814   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
8815     {
8816       tree arg;
8817       tree parm;
8818
8819       /* Get the Ith template parameter.  */
8820       parm = TREE_VEC_ELT (parms, parm_idx);
8821
8822       if (parm == error_mark_node)
8823         {
8824           TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
8825           continue;
8826         }
8827
8828       /* Calculate the next argument.  */
8829       if (arg_idx < nargs)
8830         arg = TREE_VEC_ELT (inner_args, arg_idx);
8831       else
8832         arg = NULL_TREE;
8833
8834       if (template_parameter_pack_p (TREE_VALUE (parm))
8835           && (arg || require_all_args || !(complain & tf_partial))
8836           && !(arg && ARGUMENT_PACK_P (arg)))
8837         {
8838           /* Some arguments will be placed in the
8839              template parameter pack PARM.  */
8840           arg = coerce_template_parameter_pack (parms, parm_idx, args,
8841                                                 inner_args, arg_idx,
8842                                                 new_args, &lost,
8843                                                 in_decl, complain);
8844
8845           if (arg == NULL_TREE)
8846             {
8847               /* We don't know how many args we have yet, just use the
8848                  unconverted (and still packed) ones for now.  */
8849               new_inner_args = orig_inner_args;
8850               arg_idx = nargs;
8851               break;
8852             }
8853
8854           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
8855
8856           /* Store this argument.  */
8857           if (arg == error_mark_node)
8858             {
8859               lost++;
8860               /* We are done with all of the arguments.  */
8861               arg_idx = nargs;
8862               break;
8863             }
8864           else
8865             {
8866               pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
8867               arg_idx += pack_adjust;
8868               if (fixed_parameter_pack_p (TREE_VALUE (parm)))
8869                 {
8870                   ++fixed_packs;
8871                   fixed_pack_adjust += pack_adjust;
8872                 }
8873             }
8874
8875           continue;
8876         }
8877       else if (arg)
8878         {
8879           if (PACK_EXPANSION_P (arg))
8880             {
8881               /* "If every valid specialization of a variadic template
8882                  requires an empty template parameter pack, the template is
8883                  ill-formed, no diagnostic required."  So check that the
8884                  pattern works with this parameter.  */
8885               tree pattern = PACK_EXPANSION_PATTERN (arg);
8886               tree conv = convert_template_argument (TREE_VALUE (parm),
8887                                                      pattern, new_args,
8888                                                      complain, parm_idx,
8889                                                      in_decl);
8890               if (conv == error_mark_node)
8891                 {
8892                   if (complain & tf_error)
8893                     inform (input_location, "so any instantiation with a "
8894                             "non-empty parameter pack would be ill-formed");
8895                   ++lost;
8896                 }
8897               else if (TYPE_P (conv) && !TYPE_P (pattern))
8898                 /* Recover from missing typename.  */
8899                 TREE_VEC_ELT (inner_args, arg_idx)
8900                   = make_pack_expansion (conv, complain);
8901
8902               /* We don't know how many args we have yet, just
8903                  use the unconverted ones for now.  */
8904               new_inner_args = inner_args;
8905               arg_idx = nargs;
8906               break;
8907             }
8908         }
8909       else if (require_all_args)
8910         {
8911           /* There must be a default arg in this case.  */
8912           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
8913                                      complain, in_decl);
8914           /* The position of the first default template argument,
8915              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
8916              Record that.  */
8917           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
8918             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
8919                                                  arg_idx - pack_adjust);
8920         }
8921       else
8922         break;
8923
8924       if (arg == error_mark_node)
8925         {
8926           if (complain & tf_error)
8927             error ("template argument %d is invalid", arg_idx + 1);
8928         }
8929       else if (!arg)
8930         {
8931           /* This can occur if there was an error in the template
8932              parameter list itself (which we would already have
8933              reported) that we are trying to recover from, e.g., a class
8934              template with a parameter list such as
8935              template<typename..., typename> (cpp0x/variadic150.C).  */
8936           ++lost;
8937
8938           /* This can also happen with a fixed parameter pack (71834).  */
8939           if (arg_idx >= nargs)
8940             ++missing;
8941         }
8942       else
8943         arg = convert_template_argument (TREE_VALUE (parm),
8944                                          arg, new_args, complain,
8945                                          parm_idx, in_decl);
8946
8947       if (arg == error_mark_node)
8948         lost++;
8949
8950       TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
8951     }
8952
8953   if (missing || arg_idx < nargs - variadic_args_p)
8954     {
8955       /* If we had fixed parameter packs, we didn't know how many arguments we
8956          actually needed earlier; now we do.  */
8957       nparms += fixed_pack_adjust;
8958       variadic_p -= fixed_packs;
8959       goto bad_nargs;
8960     }
8961
8962   if (arg_idx < nargs)
8963     {
8964       /* We had some pack expansion arguments that will only work if the packs
8965          are empty, but wait until instantiation time to complain.
8966          See variadic-ttp3.C.  */
8967
8968       /* Except that we can't provide empty packs to alias templates or
8969          concepts when there are no corresponding parameters. Basically,
8970          we can get here with this:
8971
8972              template<typename T> concept C = true;
8973
8974              template<typename... Args>
8975                requires C<Args...>
8976              void f();
8977
8978          When parsing C<Args...>, we try to form a concept check of
8979          C<?, Args...>. Without the extra check for substituting an empty
8980          pack past the last parameter, we can accept the check as valid.
8981
8982          FIXME: This may be valid for alias templates (but I doubt it).
8983
8984          FIXME: The error could be better also.   */
8985       if (in_decl && concept_definition_p (in_decl))
8986         {
8987           if (complain & tf_error)
8988             error_at (location_of (TREE_VEC_ELT (args, arg_idx)),
8989                       "too many arguments");
8990           return error_mark_node;
8991         }
8992
8993       int len = nparms + (nargs - arg_idx);
8994       tree args = make_tree_vec (len);
8995       int i = 0;
8996       for (; i < nparms; ++i)
8997         TREE_VEC_ELT (args, i) = TREE_VEC_ELT (new_inner_args, i);
8998       for (; i < len; ++i, ++arg_idx)
8999         TREE_VEC_ELT (args, i) = TREE_VEC_ELT (inner_args,
9000                                                arg_idx - pack_adjust);
9001       new_inner_args = args;
9002     }
9003
9004   if (lost)
9005     {
9006       gcc_assert (!(complain & tf_error) || seen_error ());
9007       return error_mark_node;
9008     }
9009
9010   if (CHECKING_P && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
9011     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
9012                                          TREE_VEC_LENGTH (new_inner_args));
9013
9014   return new_inner_args;
9015 }
9016
9017 /* Convert all template arguments to their appropriate types, and
9018    return a vector containing the innermost resulting template
9019    arguments.  If any error occurs, return error_mark_node. Error and
9020    warning messages are not issued.
9021
9022    Note that no function argument deduction is performed, and default
9023    arguments are used to fill in unspecified arguments. */
9024 tree
9025 coerce_template_parms (tree parms, tree args, tree in_decl)
9026 {
9027   return coerce_template_parms (parms, args, in_decl, tf_none, true, true);
9028 }
9029
9030 /* Convert all template arguments to their appropriate type, and
9031    instantiate default arguments as needed. This returns a vector
9032    containing the innermost resulting template arguments, or
9033    error_mark_node if unsuccessful.  */
9034 tree
9035 coerce_template_parms (tree parms, tree args, tree in_decl,
9036                        tsubst_flags_t complain)
9037 {
9038   return coerce_template_parms (parms, args, in_decl, complain, true, true);
9039 }
9040
9041 /* Like coerce_template_parms.  If PARMS represents all template
9042    parameters levels, this function returns a vector of vectors
9043    representing all the resulting argument levels.  Note that in this
9044    case, only the innermost arguments are coerced because the
9045    outermost ones are supposed to have been coerced already.
9046
9047    Otherwise, if PARMS represents only (the innermost) vector of
9048    parameters, this function returns a vector containing just the
9049    innermost resulting arguments.  */
9050
9051 static tree
9052 coerce_innermost_template_parms (tree parms,
9053                                   tree args,
9054                                   tree in_decl,
9055                                   tsubst_flags_t complain,
9056                                   bool require_all_args,
9057                                   bool use_default_args)
9058 {
9059   int parms_depth = TMPL_PARMS_DEPTH (parms);
9060   int args_depth = TMPL_ARGS_DEPTH (args);
9061   tree coerced_args;
9062
9063   if (parms_depth > 1)
9064     {
9065       coerced_args = make_tree_vec (parms_depth);
9066       tree level;
9067       int cur_depth;
9068
9069       for (level = parms, cur_depth = parms_depth;
9070            parms_depth > 0 && level != NULL_TREE;
9071            level = TREE_CHAIN (level), --cur_depth)
9072         {
9073           tree l;
9074           if (cur_depth == args_depth)
9075             l = coerce_template_parms (TREE_VALUE (level),
9076                                        args, in_decl, complain,
9077                                        require_all_args,
9078                                        use_default_args);
9079           else
9080             l = TMPL_ARGS_LEVEL (args, cur_depth);
9081
9082           if (l == error_mark_node)
9083             return error_mark_node;
9084
9085           SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
9086         }
9087     }
9088   else
9089     coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
9090                                           args, in_decl, complain,
9091                                           require_all_args,
9092                                           use_default_args);
9093   return coerced_args;
9094 }
9095
9096 /* Returns true if T is a wrapper to make a C++20 template parameter
9097    object const.  */
9098
9099 static bool
9100 class_nttp_const_wrapper_p (tree t)
9101 {
9102   if (cxx_dialect < cxx20)
9103     return false;
9104   return (TREE_CODE (t) == VIEW_CONVERT_EXPR
9105           && CP_TYPE_CONST_P (TREE_TYPE (t))
9106           && TREE_CODE (TREE_OPERAND (t, 0)) == TEMPLATE_PARM_INDEX);
9107 }
9108
9109 /* Returns 1 if template args OT and NT are equivalent.  */
9110
9111 int
9112 template_args_equal (tree ot, tree nt, bool partial_order /* = false */)
9113 {
9114   if (nt == ot)
9115     return 1;
9116   if (nt == NULL_TREE || ot == NULL_TREE)
9117     return false;
9118   if (nt == any_targ_node || ot == any_targ_node)
9119     return true;
9120
9121   if (class_nttp_const_wrapper_p (nt))
9122     nt = TREE_OPERAND (nt, 0);
9123   if (class_nttp_const_wrapper_p (ot))
9124     ot = TREE_OPERAND (ot, 0);
9125
9126   if (TREE_CODE (nt) == TREE_VEC || TREE_CODE (ot) == TREE_VEC)
9127     /* For member templates */
9128     return TREE_CODE (ot) == TREE_CODE (nt) && comp_template_args (ot, nt);
9129   else if (PACK_EXPANSION_P (ot) || PACK_EXPANSION_P (nt))
9130     return (PACK_EXPANSION_P (ot) && PACK_EXPANSION_P (nt)
9131             && template_args_equal (PACK_EXPANSION_PATTERN (ot),
9132                                     PACK_EXPANSION_PATTERN (nt))
9133             && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
9134                                     PACK_EXPANSION_EXTRA_ARGS (nt)));
9135   else if (ARGUMENT_PACK_P (ot) || ARGUMENT_PACK_P (nt))
9136     return cp_tree_equal (ot, nt);
9137   else if (TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
9138     gcc_unreachable ();
9139   else if (TYPE_P (nt) || TYPE_P (ot))
9140     {
9141       if (!(TYPE_P (nt) && TYPE_P (ot)))
9142         return false;
9143       /* Don't treat an alias template specialization with dependent
9144          arguments as equivalent to its underlying type when used as a
9145          template argument; we need them to be distinct so that we
9146          substitute into the specialization arguments at instantiation
9147          time.  And aliases can't be equivalent without being ==, so
9148          we don't need to look any deeper.
9149
9150          During partial ordering, however, we need to treat them normally so
9151          that we can order uses of the same alias with different
9152          cv-qualification (79960).  */
9153       if (!partial_order
9154           && (TYPE_ALIAS_P (nt) || TYPE_ALIAS_P (ot)))
9155         return false;
9156       else
9157         return same_type_p (ot, nt);
9158     }
9159   else
9160     {
9161       /* Try to treat a template non-type argument that has been converted
9162          to the parameter type as equivalent to one that hasn't yet.  */
9163       for (enum tree_code code1 = TREE_CODE (ot);
9164            CONVERT_EXPR_CODE_P (code1)
9165              || code1 == NON_LVALUE_EXPR;
9166            code1 = TREE_CODE (ot))
9167         ot = TREE_OPERAND (ot, 0);
9168
9169       for (enum tree_code code2 = TREE_CODE (nt);
9170            CONVERT_EXPR_CODE_P (code2)
9171              || code2 == NON_LVALUE_EXPR;
9172            code2 = TREE_CODE (nt))
9173         nt = TREE_OPERAND (nt, 0);
9174
9175       return cp_tree_equal (ot, nt);
9176     }
9177 }
9178
9179 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
9180    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
9181    NEWARG_PTR with the offending arguments if they are non-NULL.  */
9182
9183 int
9184 comp_template_args (tree oldargs, tree newargs,
9185                     tree *oldarg_ptr, tree *newarg_ptr,
9186                     bool partial_order)
9187 {
9188   int i;
9189
9190   if (oldargs == newargs)
9191     return 1;
9192
9193   if (!oldargs || !newargs)
9194     return 0;
9195
9196   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
9197     return 0;
9198
9199   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
9200     {
9201       tree nt = TREE_VEC_ELT (newargs, i);
9202       tree ot = TREE_VEC_ELT (oldargs, i);
9203
9204       if (! template_args_equal (ot, nt, partial_order))
9205         {
9206           if (oldarg_ptr != NULL)
9207             *oldarg_ptr = ot;
9208           if (newarg_ptr != NULL)
9209             *newarg_ptr = nt;
9210           return 0;
9211         }
9212     }
9213   return 1;
9214 }
9215
9216 inline bool
9217 comp_template_args_porder (tree oargs, tree nargs)
9218 {
9219   return comp_template_args (oargs, nargs, NULL, NULL, true);
9220 }
9221
9222 /* Implement a freelist interface for objects of type T.
9223
9224    Head is a separate object, rather than a regular member, so that we
9225    can define it as a GTY deletable pointer, which is highly
9226    desirable.  A data member could be declared that way, but then the
9227    containing object would implicitly get GTY((user)), which would
9228    prevent us from instantiating freelists as global objects.
9229    Although this way we can create freelist global objects, they're
9230    such thin wrappers that instantiating temporaries at every use
9231    loses nothing and saves permanent storage for the freelist object.
9232
9233    Member functions next, anew, poison and reinit have default
9234    implementations that work for most of the types we're interested
9235    in, but if they don't work for some type, they should be explicitly
9236    specialized.  See the comments before them for requirements, and
9237    the example specializations for the tree_list_freelist.  */
9238 template <typename T>
9239 class freelist
9240 {
9241   /* Return the next object in a chain.  We could just do type
9242      punning, but if we access the object with its underlying type, we
9243      avoid strict-aliasing trouble.  This needs only work between
9244      poison and reinit.  */
9245   static T *&next (T *obj) { return obj->next; }
9246
9247   /* Return a newly allocated, uninitialized or minimally-initialized
9248      object of type T.  Any initialization performed by anew should
9249      either remain across the life of the object and the execution of
9250      poison, or be redone by reinit.  */
9251   static T *anew () { return ggc_alloc<T> (); }
9252
9253   /* Optionally scribble all over the bits holding the object, so that
9254      they become (mostly?) uninitialized memory.  This is called while
9255      preparing to make the object part of the free list.  */
9256   static void poison (T *obj) {
9257     T *p ATTRIBUTE_UNUSED = obj;
9258     T **q ATTRIBUTE_UNUSED = &next (obj);
9259
9260 #ifdef ENABLE_GC_CHECKING
9261     /* Poison the data, to indicate the data is garbage.  */
9262     VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (p, sizeof (*p)));
9263     memset (p, 0xa5, sizeof (*p));
9264 #endif
9265     /* Let valgrind know the object is free.  */
9266     VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (p, sizeof (*p)));
9267
9268     /* Let valgrind know the next portion of the object is available,
9269        but uninitialized.  */
9270     VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (q, sizeof (*q)));
9271   }
9272
9273   /* Bring an object that underwent at least one lifecycle after anew
9274      and before the most recent free and poison, back to a usable
9275      state, reinitializing whatever is needed for it to be
9276      functionally equivalent to an object just allocated and returned
9277      by anew.  This may poison or clear the next field, used by
9278      freelist housekeeping after poison was called.  */
9279   static void reinit (T *obj) {
9280     T **q ATTRIBUTE_UNUSED = &next (obj);
9281
9282 #ifdef ENABLE_GC_CHECKING
9283     memset (q, 0xa5, sizeof (*q));
9284 #endif
9285     /* Let valgrind know the entire object is available, but
9286        uninitialized.  */
9287     VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (obj, sizeof (*obj)));
9288   }
9289
9290   /* Reference a GTY-deletable pointer that points to the first object
9291      in the free list proper.  */
9292   T *&head;
9293 public:
9294   /* Construct a freelist object chaining objects off of HEAD.  */
9295   freelist (T *&head) : head(head) {}
9296
9297   /* Add OBJ to the free object list.  The former head becomes OBJ's
9298      successor.  */
9299   void free (T *obj)
9300   {
9301     poison (obj);
9302     next (obj) = head;
9303     head = obj;
9304   }
9305
9306   /* Take an object from the free list, if one is available, or
9307      allocate a new one.  Objects taken from the free list should be
9308      regarded as filled with garbage, except for bits that are
9309      configured to be preserved across free and alloc.  */
9310   T *alloc ()
9311   {
9312     if (head)
9313       {
9314         T *obj = head;
9315         head = next (head);
9316         reinit (obj);
9317         return obj;
9318       }
9319     else
9320       return anew ();
9321   }
9322 };
9323
9324 /* Explicitly specialize the interfaces for freelist<tree_node>: we
9325    want to allocate a TREE_LIST using the usual interface, and ensure
9326    TREE_CHAIN remains functional.  Alas, we have to duplicate a bit of
9327    build_tree_list logic in reinit, so this could go out of sync.  */
9328 template <>
9329 inline tree &
9330 freelist<tree_node>::next (tree obj)
9331 {
9332   return TREE_CHAIN (obj);
9333 }
9334 template <>
9335 inline tree
9336 freelist<tree_node>::anew ()
9337 {
9338   return build_tree_list (NULL, NULL);
9339 }
9340 template <>
9341 inline void
9342 freelist<tree_node>::poison (tree obj ATTRIBUTE_UNUSED)
9343 {
9344   int size ATTRIBUTE_UNUSED = sizeof (tree_list);
9345   tree p ATTRIBUTE_UNUSED = obj;
9346   tree_base *b ATTRIBUTE_UNUSED = &obj->base;
9347   tree *q ATTRIBUTE_UNUSED = &next (obj);
9348
9349 #ifdef ENABLE_GC_CHECKING
9350   gcc_checking_assert (TREE_CODE (obj) == TREE_LIST);
9351
9352   /* Poison the data, to indicate the data is garbage.  */
9353   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (p, size));
9354   memset (p, 0xa5, size);
9355 #endif
9356   /* Let valgrind know the object is free.  */
9357   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (p, size));
9358   /* But we still want to use the TREE_CODE and TREE_CHAIN parts.  */
9359   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_DEFINED (b, sizeof (*b)));
9360   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (q, sizeof (*q)));
9361
9362 #ifdef ENABLE_GC_CHECKING
9363   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (b, sizeof (*b)));
9364   /* Keep TREE_CHAIN functional.  */
9365   TREE_SET_CODE (obj, TREE_LIST);
9366 #else
9367   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_DEFINED (b, sizeof (*b)));
9368 #endif
9369 }
9370 template <>
9371 inline void
9372 freelist<tree_node>::reinit (tree obj ATTRIBUTE_UNUSED)
9373 {
9374   tree_base *b ATTRIBUTE_UNUSED = &obj->base;
9375
9376 #ifdef ENABLE_GC_CHECKING
9377   gcc_checking_assert (TREE_CODE (obj) == TREE_LIST);
9378   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (obj, sizeof (tree_list)));
9379   memset (obj, 0, sizeof (tree_list));
9380 #endif
9381
9382   /* Let valgrind know the entire object is available, but
9383      uninitialized.  */
9384   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (obj, sizeof (tree_list)));
9385
9386 #ifdef ENABLE_GC_CHECKING
9387   TREE_SET_CODE (obj, TREE_LIST);
9388 #else
9389   VALGRIND_DISCARD (VALGRIND_MAKE_MEM_DEFINED (b, sizeof (*b)));
9390 #endif
9391 }
9392
9393 /* Point to the first object in the TREE_LIST freelist.  */
9394 static GTY((deletable)) tree tree_list_freelist_head;
9395 /* Return the/an actual TREE_LIST freelist.  */
9396 static inline freelist<tree_node>
9397 tree_list_freelist ()
9398 {
9399   return tree_list_freelist_head;
9400 }
9401
9402 /* Point to the first object in the tinst_level freelist.  */
9403 static GTY((deletable)) tinst_level *tinst_level_freelist_head;
9404 /* Return the/an actual tinst_level freelist.  */
9405 static inline freelist<tinst_level>
9406 tinst_level_freelist ()
9407 {
9408   return tinst_level_freelist_head;
9409 }
9410
9411 /* Point to the first object in the pending_template freelist.  */
9412 static GTY((deletable)) pending_template *pending_template_freelist_head;
9413 /* Return the/an actual pending_template freelist.  */
9414 static inline freelist<pending_template>
9415 pending_template_freelist ()
9416 {
9417   return pending_template_freelist_head;
9418 }
9419
9420 /* Build the TREE_LIST object out of a split list, store it
9421    permanently, and return it.  */
9422 tree
9423 tinst_level::to_list ()
9424 {
9425   gcc_assert (split_list_p ());
9426   tree ret = tree_list_freelist ().alloc ();
9427   TREE_PURPOSE (ret) = tldcl;
9428   TREE_VALUE (ret) = targs;
9429   tldcl = ret;
9430   targs = NULL;
9431   gcc_assert (tree_list_p ());
9432   return ret;
9433 }
9434
9435 const unsigned short tinst_level::refcount_infinity;
9436
9437 /* Increment OBJ's refcount unless it is already infinite.  */
9438 static tinst_level *
9439 inc_refcount_use (tinst_level *obj)
9440 {
9441   if (obj && obj->refcount != tinst_level::refcount_infinity)
9442     ++obj->refcount;
9443   return obj;
9444 }
9445
9446 /* Release storage for OBJ and node, if it's a TREE_LIST.  */
9447 void
9448 tinst_level::free (tinst_level *obj)
9449 {
9450   if (obj->tree_list_p ())
9451     tree_list_freelist ().free (obj->get_node ());
9452   tinst_level_freelist ().free (obj);
9453 }
9454
9455 /* Decrement OBJ's refcount if not infinite.  If it reaches zero, release
9456    OBJ's DECL and OBJ, and start over with the tinst_level object that
9457    used to be referenced by OBJ's NEXT.  */
9458 static void
9459 dec_refcount_use (tinst_level *obj)
9460 {
9461   while (obj
9462          && obj->refcount != tinst_level::refcount_infinity
9463          && !--obj->refcount)
9464     {
9465       tinst_level *next = obj->next;
9466       tinst_level::free (obj);
9467       obj = next;
9468     }
9469 }
9470
9471 /* Modify PTR so that it points to OBJ, adjusting the refcounts of OBJ
9472    and of the former PTR.  Omitting the second argument is equivalent
9473    to passing (T*)NULL; this is allowed because passing the
9474    zero-valued integral constant NULL confuses type deduction and/or
9475    overload resolution.  */
9476 template <typename T>
9477 static void
9478 set_refcount_ptr (T *& ptr, T *obj = NULL)
9479 {
9480   T *save = ptr;
9481   ptr = inc_refcount_use (obj);
9482   dec_refcount_use (save);
9483 }
9484
9485 static void
9486 add_pending_template (tree d)
9487 {
9488   tree ti = (TYPE_P (d)
9489              ? CLASSTYPE_TEMPLATE_INFO (d)
9490              : DECL_TEMPLATE_INFO (d));
9491   struct pending_template *pt;
9492   int level;
9493
9494   if (TI_PENDING_TEMPLATE_FLAG (ti))
9495     return;
9496
9497   /* We are called both from instantiate_decl, where we've already had a
9498      tinst_level pushed, and instantiate_template, where we haven't.
9499      Compensate.  */
9500   gcc_assert (TREE_CODE (d) != TREE_LIST);
9501   level = !current_tinst_level
9502     || current_tinst_level->maybe_get_node () != d;
9503
9504   if (level)
9505     push_tinst_level (d);
9506
9507   pt = pending_template_freelist ().alloc ();
9508   pt->next = NULL;
9509   pt->tinst = NULL;
9510   set_refcount_ptr (pt->tinst, current_tinst_level);
9511   if (last_pending_template)
9512     last_pending_template->next = pt;
9513   else
9514     pending_templates = pt;
9515
9516   last_pending_template = pt;
9517
9518   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
9519
9520   if (level)
9521     pop_tinst_level ();
9522 }
9523
9524
9525 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
9526    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
9527    documentation for TEMPLATE_ID_EXPR.  */
9528
9529 tree
9530 lookup_template_function (tree fns, tree arglist)
9531 {
9532   if (fns == error_mark_node || arglist == error_mark_node)
9533     return error_mark_node;
9534
9535   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
9536
9537   if (!is_overloaded_fn (fns) && !identifier_p (fns))
9538     {
9539       error ("%q#D is not a function template", fns);
9540       return error_mark_node;
9541     }
9542
9543   if (BASELINK_P (fns))
9544     {
9545       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
9546                                          unknown_type_node,
9547                                          BASELINK_FUNCTIONS (fns),
9548                                          arglist);
9549       return fns;
9550     }
9551
9552   return build2 (TEMPLATE_ID_EXPR, unknown_type_node, fns, arglist);
9553 }
9554
9555 /* Within the scope of a template class S<T>, the name S gets bound
9556    (in build_self_reference) to a TYPE_DECL for the class, not a
9557    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
9558    or one of its enclosing classes, and that type is a template,
9559    return the associated TEMPLATE_DECL.  Otherwise, the original
9560    DECL is returned.
9561
9562    Also handle the case when DECL is a TREE_LIST of ambiguous
9563    injected-class-names from different bases.  */
9564
9565 tree
9566 maybe_get_template_decl_from_type_decl (tree decl)
9567 {
9568   if (decl == NULL_TREE)
9569     return decl;
9570
9571   /* DR 176: A lookup that finds an injected-class-name (10.2
9572      [class.member.lookup]) can result in an ambiguity in certain cases
9573      (for example, if it is found in more than one base class). If all of
9574      the injected-class-names that are found refer to specializations of
9575      the same class template, and if the name is followed by a
9576      template-argument-list, the reference refers to the class template
9577      itself and not a specialization thereof, and is not ambiguous.  */
9578   if (TREE_CODE (decl) == TREE_LIST)
9579     {
9580       tree t, tmpl = NULL_TREE;
9581       for (t = decl; t; t = TREE_CHAIN (t))
9582         {
9583           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
9584           if (!tmpl)
9585             tmpl = elt;
9586           else if (tmpl != elt)
9587             break;
9588         }
9589       if (tmpl && t == NULL_TREE)
9590         return tmpl;
9591       else
9592         return decl;
9593     }
9594
9595   return (decl != NULL_TREE
9596           && DECL_SELF_REFERENCE_P (decl)
9597           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
9598     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
9599 }
9600
9601 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
9602    parameters, find the desired type.
9603
9604    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
9605
9606    IN_DECL, if non-NULL, is the template declaration we are trying to
9607    instantiate.
9608
9609    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
9610    the class we are looking up.
9611
9612    Issue error and warning messages under control of COMPLAIN.
9613
9614    If the template class is really a local class in a template
9615    function, then the FUNCTION_CONTEXT is the function in which it is
9616    being instantiated.
9617
9618    ??? Note that this function is currently called *twice* for each
9619    template-id: the first time from the parser, while creating the
9620    incomplete type (finish_template_type), and the second type during the
9621    real instantiation (instantiate_template_class). This is surely something
9622    that we want to avoid. It also causes some problems with argument
9623    coercion (see convert_nontype_argument for more information on this).  */
9624
9625 static tree
9626 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
9627                          int entering_scope, tsubst_flags_t complain)
9628 {
9629   tree templ = NULL_TREE, parmlist;
9630   tree t;
9631   spec_entry **slot;
9632   spec_entry *entry;
9633   spec_entry elt;
9634   hashval_t hash;
9635
9636   if (identifier_p (d1))
9637     {
9638       tree value = innermost_non_namespace_value (d1);
9639       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
9640         templ = value;
9641       else
9642         {
9643           if (context)
9644             push_decl_namespace (context);
9645           templ = lookup_name (d1);
9646           templ = maybe_get_template_decl_from_type_decl (templ);
9647           if (context)
9648             pop_decl_namespace ();
9649         }
9650       if (templ)
9651         context = DECL_CONTEXT (templ);
9652     }
9653   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
9654     {
9655       tree type = TREE_TYPE (d1);
9656
9657       /* If we are declaring a constructor, say A<T>::A<T>, we will get
9658          an implicit typename for the second A.  Deal with it.  */
9659       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
9660         type = TREE_TYPE (type);
9661
9662       if (CLASSTYPE_TEMPLATE_INFO (type))
9663         {
9664           templ = CLASSTYPE_TI_TEMPLATE (type);
9665           d1 = DECL_NAME (templ);
9666         }
9667     }
9668   else if (TREE_CODE (d1) == ENUMERAL_TYPE
9669            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
9670     {
9671       templ = TYPE_TI_TEMPLATE (d1);
9672       d1 = DECL_NAME (templ);
9673     }
9674   else if (DECL_TYPE_TEMPLATE_P (d1))
9675     {
9676       templ = d1;
9677       d1 = DECL_NAME (templ);
9678       context = DECL_CONTEXT (templ);
9679     }
9680   else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
9681     {
9682       templ = d1;
9683       d1 = DECL_NAME (templ);
9684     }
9685
9686   /* Issue an error message if we didn't find a template.  */
9687   if (! templ)
9688     {
9689       if (complain & tf_error)
9690         error ("%qT is not a template", d1);
9691       return error_mark_node;
9692     }
9693
9694   if (TREE_CODE (templ) != TEMPLATE_DECL
9695          /* Make sure it's a user visible template, if it was named by
9696             the user.  */
9697       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
9698           && !PRIMARY_TEMPLATE_P (templ)))
9699     {
9700       if (complain & tf_error)
9701         {
9702           error ("non-template type %qT used as a template", d1);
9703           if (in_decl)
9704             error ("for template declaration %q+D", in_decl);
9705         }
9706       return error_mark_node;
9707     }
9708
9709   complain &= ~tf_user;
9710
9711   /* An alias that just changes the name of a template is equivalent to the
9712      other template, so if any of the arguments are pack expansions, strip
9713      the alias to avoid problems with a pack expansion passed to a non-pack
9714      alias template parameter (DR 1430).  */
9715   if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
9716     templ = get_underlying_template (templ);
9717
9718   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
9719     {
9720       tree parm;
9721       tree arglist2 = coerce_template_args_for_ttp (templ, arglist, complain);
9722       if (arglist2 == error_mark_node
9723           || (!uses_template_parms (arglist2)
9724               && check_instantiated_args (templ, arglist2, complain)))
9725         return error_mark_node;
9726
9727       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
9728       return parm;
9729     }
9730   else
9731     {
9732       tree template_type = TREE_TYPE (templ);
9733       tree gen_tmpl;
9734       tree type_decl;
9735       tree found = NULL_TREE;
9736       int arg_depth;
9737       int parm_depth;
9738       int is_dependent_type;
9739       int use_partial_inst_tmpl = false;
9740
9741       if (template_type == error_mark_node)
9742         /* An error occurred while building the template TEMPL, and a
9743            diagnostic has most certainly been emitted for that
9744            already.  Let's propagate that error.  */
9745         return error_mark_node;
9746
9747       gen_tmpl = most_general_template (templ);
9748       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
9749       parm_depth = TMPL_PARMS_DEPTH (parmlist);
9750       arg_depth = TMPL_ARGS_DEPTH (arglist);
9751
9752       if (arg_depth == 1 && parm_depth > 1)
9753         {
9754           /* We've been given an incomplete set of template arguments.
9755              For example, given:
9756
9757                template <class T> struct S1 {
9758                  template <class U> struct S2 {};
9759                  template <class U> struct S2<U*> {};
9760                 };
9761
9762              we will be called with an ARGLIST of `U*', but the
9763              TEMPLATE will be `template <class T> template
9764              <class U> struct S1<T>::S2'.  We must fill in the missing
9765              arguments.  */
9766           tree ti = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (TREE_TYPE (templ));
9767           arglist = add_outermost_template_args (TI_ARGS (ti), arglist);
9768           arg_depth = TMPL_ARGS_DEPTH (arglist);
9769         }
9770
9771       /* Now we should have enough arguments.  */
9772       gcc_assert (parm_depth == arg_depth);
9773
9774       /* From here on, we're only interested in the most general
9775          template.  */
9776
9777       /* Calculate the BOUND_ARGS.  These will be the args that are
9778          actually tsubst'd into the definition to create the
9779          instantiation.  */
9780       arglist = coerce_innermost_template_parms (parmlist, arglist, gen_tmpl,
9781                                                  complain,
9782                                                  /*require_all_args=*/true,
9783                                                  /*use_default_args=*/true);
9784
9785       if (arglist == error_mark_node)
9786         /* We were unable to bind the arguments.  */
9787         return error_mark_node;
9788
9789       /* In the scope of a template class, explicit references to the
9790          template class refer to the type of the template, not any
9791          instantiation of it.  For example, in:
9792
9793            template <class T> class C { void f(C<T>); }
9794
9795          the `C<T>' is just the same as `C'.  Outside of the
9796          class, however, such a reference is an instantiation.  */
9797       if (entering_scope
9798           || !PRIMARY_TEMPLATE_P (gen_tmpl)
9799           || currently_open_class (template_type))
9800         {
9801           tree tinfo = TYPE_TEMPLATE_INFO (template_type);
9802
9803           if (tinfo && comp_template_args (TI_ARGS (tinfo), arglist))
9804             return template_type;
9805         }
9806
9807       /* If we already have this specialization, return it.  */
9808       elt.tmpl = gen_tmpl;
9809       elt.args = arglist;
9810       elt.spec = NULL_TREE;
9811       hash = spec_hasher::hash (&elt);
9812       entry = type_specializations->find_with_hash (&elt, hash);
9813
9814       if (entry)
9815         return entry->spec;
9816
9817       /* If the template's constraints are not satisfied,
9818          then we cannot form a valid type.
9819
9820          Note that the check is deferred until after the hash
9821          lookup. This prevents redundant checks on previously
9822          instantiated specializations. */
9823       if (flag_concepts
9824           && !DECL_ALIAS_TEMPLATE_P (gen_tmpl)
9825           && !constraints_satisfied_p (gen_tmpl, arglist))
9826         {
9827           if (complain & tf_error)
9828             {
9829               auto_diagnostic_group d;
9830               error ("template constraint failure for %qD", gen_tmpl);
9831               diagnose_constraints (input_location, gen_tmpl, arglist);
9832             }
9833           return error_mark_node;
9834         }
9835
9836       is_dependent_type = uses_template_parms (arglist);
9837
9838       /* If the deduced arguments are invalid, then the binding
9839          failed.  */
9840       if (!is_dependent_type
9841           && check_instantiated_args (gen_tmpl,
9842                                       INNERMOST_TEMPLATE_ARGS (arglist),
9843                                       complain))
9844         return error_mark_node;
9845
9846       if (!is_dependent_type
9847           && !PRIMARY_TEMPLATE_P (gen_tmpl)
9848           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
9849           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
9850         {
9851           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
9852                                       DECL_NAME (gen_tmpl),
9853                                       /*tag_scope=*/ts_global);
9854           return found;
9855         }
9856
9857       context = DECL_CONTEXT (gen_tmpl);
9858       if (context && TYPE_P (context))
9859         {
9860           context = tsubst_aggr_type (context, arglist, complain, in_decl, true);
9861           context = complete_type (context);
9862         }
9863       else
9864         context = tsubst (context, arglist, complain, in_decl);
9865
9866       if (context == error_mark_node)
9867         return error_mark_node;
9868
9869       if (!context)
9870         context = global_namespace;
9871
9872       /* Create the type.  */
9873       if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
9874         {
9875           /* The user referred to a specialization of an alias
9876             template represented by GEN_TMPL.
9877
9878             [temp.alias]/2 says:
9879
9880                 When a template-id refers to the specialization of an
9881                 alias template, it is equivalent to the associated
9882                 type obtained by substitution of its
9883                 template-arguments for the template-parameters in the
9884                 type-id of the alias template.  */
9885
9886           t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
9887           /* Note that the call above (by indirectly calling
9888              register_specialization in tsubst_decl) registers the
9889              TYPE_DECL representing the specialization of the alias
9890              template.  So next time someone substitutes ARGLIST for
9891              the template parms into the alias template (GEN_TMPL),
9892              she'll get that TYPE_DECL back.  */
9893
9894           if (t == error_mark_node)
9895             return t;
9896         }
9897       else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
9898         {
9899           if (!is_dependent_type)
9900             {
9901               set_current_access_from_decl (TYPE_NAME (template_type));
9902               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
9903                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
9904                                       arglist, complain, in_decl),
9905                               tsubst_attributes (TYPE_ATTRIBUTES (template_type),
9906                                                  arglist, complain, in_decl),
9907                               SCOPED_ENUM_P (template_type), NULL);
9908
9909               if (t == error_mark_node)
9910                 return t;
9911             }
9912           else
9913             {
9914               /* We don't want to call start_enum for this type, since
9915                  the values for the enumeration constants may involve
9916                  template parameters.  And, no one should be interested
9917                  in the enumeration constants for such a type.  */
9918               t = cxx_make_type (ENUMERAL_TYPE);
9919               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
9920             }
9921           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
9922           ENUM_FIXED_UNDERLYING_TYPE_P (t)
9923             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
9924         }
9925       else if (CLASS_TYPE_P (template_type))
9926         {
9927           /* Lambda closures are regenerated in tsubst_lambda_expr, not
9928              instantiated here.  */
9929           gcc_assert (!LAMBDA_TYPE_P (template_type));
9930
9931           t = make_class_type (TREE_CODE (template_type));
9932           CLASSTYPE_DECLARED_CLASS (t)
9933             = CLASSTYPE_DECLARED_CLASS (template_type);
9934           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
9935
9936           /* A local class.  Make sure the decl gets registered properly.  */
9937           if (context == current_function_decl)
9938             if (pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current)
9939                 == error_mark_node)
9940               return error_mark_node;
9941
9942           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
9943             /* This instantiation is another name for the primary
9944                template type. Set the TYPE_CANONICAL field
9945                appropriately. */
9946             TYPE_CANONICAL (t) = template_type;
9947           else if (any_template_arguments_need_structural_equality_p (arglist))
9948             /* Some of the template arguments require structural
9949                equality testing, so this template class requires
9950                structural equality testing. */
9951             SET_TYPE_STRUCTURAL_EQUALITY (t);
9952         }
9953       else
9954         gcc_unreachable ();
9955
9956       /* If we called start_enum or pushtag above, this information
9957          will already be set up.  */
9958       type_decl = TYPE_NAME (t);
9959       if (!type_decl)
9960         {
9961           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
9962
9963           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
9964           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
9965           DECL_SOURCE_LOCATION (type_decl)
9966             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
9967         }
9968
9969       if (CLASS_TYPE_P (template_type))
9970         {
9971           TREE_PRIVATE (type_decl)
9972             = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
9973           TREE_PROTECTED (type_decl)
9974             = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
9975           if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
9976             {
9977               DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
9978               DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
9979             }
9980         }
9981
9982       if (OVERLOAD_TYPE_P (t)
9983           && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
9984         {
9985           static const char *tags[] = {"abi_tag", "may_alias"};
9986
9987           for (unsigned ix = 0; ix != 2; ix++)
9988             {
9989               tree attributes
9990                 = lookup_attribute (tags[ix], TYPE_ATTRIBUTES (template_type));
9991
9992               if (attributes)
9993                 TYPE_ATTRIBUTES (t)
9994                   = tree_cons (TREE_PURPOSE (attributes),
9995                                TREE_VALUE (attributes),
9996                                TYPE_ATTRIBUTES (t));
9997             }
9998         }
9999
10000       /* Let's consider the explicit specialization of a member
10001          of a class template specialization that is implicitly instantiated,
10002          e.g.:
10003              template<class T>
10004              struct S
10005              {
10006                template<class U> struct M {}; //#0
10007              };
10008
10009              template<>
10010              template<>
10011              struct S<int>::M<char> //#1
10012              {
10013                int i;
10014              };
10015         [temp.expl.spec]/4 says this is valid.
10016
10017         In this case, when we write:
10018         S<int>::M<char> m;
10019
10020         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
10021         the one of #0.
10022
10023         When we encounter #1, we want to store the partial instantiation
10024         of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
10025
10026         For all cases other than this "explicit specialization of member of a
10027         class template", we just want to store the most general template into
10028         the CLASSTYPE_TI_TEMPLATE of M.
10029
10030         This case of "explicit specialization of member of a class template"
10031         only happens when:
10032         1/ the enclosing class is an instantiation of, and therefore not
10033         the same as, the context of the most general template, and
10034         2/ we aren't looking at the partial instantiation itself, i.e.
10035         the innermost arguments are not the same as the innermost parms of
10036         the most general template.
10037
10038         So it's only when 1/ and 2/ happens that we want to use the partial
10039         instantiation of the member template in lieu of its most general
10040         template.  */
10041
10042       if (PRIMARY_TEMPLATE_P (gen_tmpl)
10043           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
10044           /* the enclosing class must be an instantiation...  */
10045           && CLASS_TYPE_P (context)
10046           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
10047         {
10048           TREE_VEC_LENGTH (arglist)--;
10049           ++processing_template_decl;
10050           tree tinfo = TYPE_TEMPLATE_INFO_MAYBE_ALIAS (TREE_TYPE (gen_tmpl));
10051           tree partial_inst_args =
10052             tsubst (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo)),
10053                     arglist, complain, NULL_TREE);
10054           --processing_template_decl;
10055           TREE_VEC_LENGTH (arglist)++;
10056           if (partial_inst_args == error_mark_node)
10057             return error_mark_node;
10058           use_partial_inst_tmpl =
10059             /*...and we must not be looking at the partial instantiation
10060              itself. */
10061             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
10062                                  partial_inst_args);
10063         }
10064
10065       if (!use_partial_inst_tmpl)
10066         /* This case is easy; there are no member templates involved.  */
10067         found = gen_tmpl;
10068       else
10069         {
10070           /* This is a full instantiation of a member template.  Find
10071              the partial instantiation of which this is an instance.  */
10072
10073           /* Temporarily reduce by one the number of levels in the ARGLIST
10074              so as to avoid comparing the last set of arguments.  */
10075           TREE_VEC_LENGTH (arglist)--;
10076           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
10077           TREE_VEC_LENGTH (arglist)++;
10078           /* FOUND is either a proper class type, or an alias
10079              template specialization.  In the later case, it's a
10080              TYPE_DECL, resulting from the substituting of arguments
10081              for parameters in the TYPE_DECL of the alias template
10082              done earlier.  So be careful while getting the template
10083              of FOUND.  */
10084           found = (TREE_CODE (found) == TEMPLATE_DECL
10085                    ? found
10086                    : (TREE_CODE (found) == TYPE_DECL
10087                       ? DECL_TI_TEMPLATE (found)
10088                       : CLASSTYPE_TI_TEMPLATE (found)));
10089
10090           if (DECL_CLASS_TEMPLATE_P (found)
10091               && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (found)))
10092             {
10093               /* If this partial instantiation is specialized, we want to
10094                  use it for hash table lookup.  */
10095               elt.tmpl = found;
10096               elt.args = arglist = INNERMOST_TEMPLATE_ARGS (arglist);
10097               hash = spec_hasher::hash (&elt);
10098             }
10099         }
10100
10101       /* Build template info for the new specialization.  */
10102       if (TYPE_ALIAS_P (t))
10103         {
10104           /* This is constructed during instantiation of the alias
10105              decl.  But for member templates of template classes, that
10106              is not correct as we need to refer to the partially
10107              instantiated template, not the most general template.
10108              The incorrect knowledge will not have escaped this
10109              instantiation process, so we're good just updating the
10110              template_info we made then.  */
10111           tree ti = DECL_TEMPLATE_INFO (TYPE_NAME (t));
10112           gcc_checking_assert (template_args_equal (TI_ARGS (ti), arglist));
10113           if (TI_TEMPLATE (ti) != found)
10114             {
10115               gcc_checking_assert (DECL_TI_TEMPLATE (found) == TI_TEMPLATE (ti));
10116               TI_TEMPLATE (ti) = found;
10117             }
10118         }
10119       else
10120         SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
10121
10122       elt.spec = t;
10123       slot = type_specializations->find_slot_with_hash (&elt, hash, INSERT);
10124       gcc_checking_assert (*slot == NULL);
10125       entry = ggc_alloc<spec_entry> ();
10126       *entry = elt;
10127       *slot = entry;
10128
10129       /* Note this use of the partial instantiation so we can check it
10130          later in maybe_process_partial_specialization.  */
10131       DECL_TEMPLATE_INSTANTIATIONS (found)
10132         = tree_cons (arglist, t,
10133                      DECL_TEMPLATE_INSTANTIATIONS (found));
10134
10135       if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
10136           && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
10137         /* Now that the type has been registered on the instantiations
10138            list, we set up the enumerators.  Because the enumeration
10139            constants may involve the enumeration type itself, we make
10140            sure to register the type first, and then create the
10141            constants.  That way, doing tsubst_expr for the enumeration
10142            constants won't result in recursive calls here; we'll find
10143            the instantiation and exit above.  */
10144         tsubst_enum (template_type, t, arglist);
10145
10146       if (CLASS_TYPE_P (template_type) && is_dependent_type)
10147         /* If the type makes use of template parameters, the
10148            code that generates debugging information will crash.  */
10149         DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
10150
10151       /* Possibly limit visibility based on template args.  */
10152       TREE_PUBLIC (type_decl) = 1;
10153       determine_visibility (type_decl);
10154
10155       inherit_targ_abi_tags (t);
10156
10157       return t;
10158     }
10159 }
10160
10161 /* Wrapper for lookup_template_class_1.  */
10162
10163 tree
10164 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
10165                        int entering_scope, tsubst_flags_t complain)
10166 {
10167   tree ret;
10168   timevar_push (TV_TEMPLATE_INST);
10169   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
10170                                  entering_scope, complain);
10171   timevar_pop (TV_TEMPLATE_INST);
10172   return ret;
10173 }
10174
10175 /* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST.  */
10176
10177 tree
10178 lookup_template_variable (tree templ, tree arglist)
10179 {
10180   if (flag_concepts && variable_concept_p (templ))
10181     return build_concept_check (templ, arglist, tf_none);
10182
10183   /* The type of the expression is NULL_TREE since the template-id could refer
10184      to an explicit or partial specialization. */
10185   return build2 (TEMPLATE_ID_EXPR, NULL_TREE, templ, arglist);
10186 }
10187
10188 /* Instantiate a variable declaration from a TEMPLATE_ID_EXPR for use. */
10189
10190 tree
10191 finish_template_variable (tree var, tsubst_flags_t complain)
10192 {
10193   tree templ = TREE_OPERAND (var, 0);
10194   tree arglist = TREE_OPERAND (var, 1);
10195
10196   tree tmpl_args = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (templ));
10197   arglist = add_outermost_template_args (tmpl_args, arglist);
10198
10199   templ = most_general_template (templ);
10200   tree parms = DECL_TEMPLATE_PARMS (templ);
10201   arglist = coerce_innermost_template_parms (parms, arglist, templ, complain,
10202                                              /*req_all*/true,
10203                                              /*use_default*/true);
10204   if (arglist == error_mark_node)
10205     return error_mark_node;
10206
10207   if (flag_concepts && !constraints_satisfied_p (templ, arglist))
10208     {
10209       if (complain & tf_error)
10210         {
10211           auto_diagnostic_group d;
10212           error ("use of invalid variable template %qE", var);
10213           diagnose_constraints (location_of (var), templ, arglist);
10214         }
10215       return error_mark_node;
10216     }
10217
10218   return instantiate_template (templ, arglist, complain);
10219 }
10220
10221 /* Construct a TEMPLATE_ID_EXPR for the given variable template TEMPL having
10222    TARGS template args, and instantiate it if it's not dependent.  */
10223
10224 tree
10225 lookup_and_finish_template_variable (tree templ, tree targs,
10226                                      tsubst_flags_t complain)
10227 {
10228   templ = lookup_template_variable (templ, targs);
10229   if (!any_dependent_template_arguments_p (targs))
10230     {
10231       templ = finish_template_variable (templ, complain);
10232       mark_used (templ);
10233     }
10234
10235   return convert_from_reference (templ);
10236 }
10237
10238 \f
10239 struct pair_fn_data
10240 {
10241   tree_fn_t fn;
10242   tree_fn_t any_fn;
10243   void *data;
10244   /* True when we should also visit template parameters that occur in
10245      non-deduced contexts.  */
10246   bool include_nondeduced_p;
10247   hash_set<tree> *visited;
10248 };
10249
10250 /* Called from for_each_template_parm via walk_tree.  */
10251
10252 static tree
10253 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
10254 {
10255   tree t = *tp;
10256   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
10257   tree_fn_t fn = pfd->fn;
10258   void *data = pfd->data;
10259   tree result = NULL_TREE;
10260
10261 #define WALK_SUBTREE(NODE)                                              \
10262   do                                                                    \
10263     {                                                                   \
10264       result = for_each_template_parm (NODE, fn, data, pfd->visited,    \
10265                                        pfd->include_nondeduced_p,       \
10266                                        pfd->any_fn);                    \
10267       if (result) goto out;                                             \
10268     }                                                                   \
10269   while (0)
10270
10271   if (pfd->any_fn && (*pfd->any_fn)(t, data))
10272     return t;
10273
10274   if (TYPE_P (t)
10275       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE))
10276     WALK_SUBTREE (TYPE_CONTEXT (t));
10277
10278   switch (TREE_CODE (t))
10279     {
10280     case RECORD_TYPE:
10281       if (TYPE_PTRMEMFUNC_P (t))
10282         break;
10283       /* Fall through.  */
10284
10285     case UNION_TYPE:
10286     case ENUMERAL_TYPE:
10287       if (!TYPE_TEMPLATE_INFO (t))
10288         *walk_subtrees = 0;
10289       else
10290         WALK_SUBTREE (TYPE_TI_ARGS (t));
10291       break;
10292
10293     case INTEGER_TYPE:
10294       WALK_SUBTREE (TYPE_MIN_VALUE (t));
10295       WALK_SUBTREE (TYPE_MAX_VALUE (t));
10296       break;
10297
10298     case METHOD_TYPE:
10299       /* Since we're not going to walk subtrees, we have to do this
10300          explicitly here.  */
10301       WALK_SUBTREE (TYPE_METHOD_BASETYPE (t));
10302       /* Fall through.  */
10303
10304     case FUNCTION_TYPE:
10305       /* Check the return type.  */
10306       WALK_SUBTREE (TREE_TYPE (t));
10307
10308       /* Check the parameter types.  Since default arguments are not
10309          instantiated until they are needed, the TYPE_ARG_TYPES may
10310          contain expressions that involve template parameters.  But,
10311          no-one should be looking at them yet.  And, once they're
10312          instantiated, they don't contain template parameters, so
10313          there's no point in looking at them then, either.  */
10314       {
10315         tree parm;
10316
10317         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
10318           WALK_SUBTREE (TREE_VALUE (parm));
10319
10320         /* Since we've already handled the TYPE_ARG_TYPES, we don't
10321            want walk_tree walking into them itself.  */
10322         *walk_subtrees = 0;
10323       }
10324
10325       if (flag_noexcept_type)
10326         {
10327           tree spec = TYPE_RAISES_EXCEPTIONS (t);
10328           if (spec)
10329             WALK_SUBTREE (TREE_PURPOSE (spec));
10330         }
10331       break;
10332
10333     case TYPEOF_TYPE:
10334     case DECLTYPE_TYPE:
10335     case UNDERLYING_TYPE:
10336       if (pfd->include_nondeduced_p
10337           && for_each_template_parm (TYPE_VALUES_RAW (t), fn, data,
10338                                      pfd->visited,
10339                                      pfd->include_nondeduced_p,
10340                                      pfd->any_fn))
10341         return error_mark_node;
10342       *walk_subtrees = false;
10343       break;
10344
10345     case FUNCTION_DECL:
10346     case VAR_DECL:
10347       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
10348         WALK_SUBTREE (DECL_TI_ARGS (t));
10349       /* Fall through.  */
10350
10351     case PARM_DECL:
10352     case CONST_DECL:
10353       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t))
10354         WALK_SUBTREE (DECL_INITIAL (t));
10355       if (DECL_CONTEXT (t)
10356           && pfd->include_nondeduced_p)
10357         WALK_SUBTREE (DECL_CONTEXT (t));
10358       break;
10359
10360     case BOUND_TEMPLATE_TEMPLATE_PARM:
10361       /* Record template parameters such as `T' inside `TT<T>'.  */
10362       WALK_SUBTREE (TYPE_TI_ARGS (t));
10363       /* Fall through.  */
10364
10365     case TEMPLATE_TEMPLATE_PARM:
10366     case TEMPLATE_TYPE_PARM:
10367     case TEMPLATE_PARM_INDEX:
10368       if (fn && (*fn)(t, data))
10369         return t;
10370       else if (!fn)
10371         return t;
10372       break;
10373
10374     case TEMPLATE_DECL:
10375       /* A template template parameter is encountered.  */
10376       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10377         WALK_SUBTREE (TREE_TYPE (t));
10378
10379       /* Already substituted template template parameter */
10380       *walk_subtrees = 0;
10381       break;
10382
10383     case TYPENAME_TYPE:
10384       /* A template-id in a TYPENAME_TYPE might be a deduced context after
10385          partial instantiation.  */
10386       WALK_SUBTREE (TYPENAME_TYPE_FULLNAME (t));
10387       *walk_subtrees = 0;
10388       break;
10389
10390     case CONSTRUCTOR:
10391       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
10392           && pfd->include_nondeduced_p)
10393         WALK_SUBTREE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (t)));
10394       break;
10395
10396     case INDIRECT_REF:
10397     case COMPONENT_REF:
10398       /* If there's no type, then this thing must be some expression
10399          involving template parameters.  */
10400       if (!fn && !TREE_TYPE (t))
10401         return error_mark_node;
10402       break;
10403
10404     case MODOP_EXPR:
10405     case CAST_EXPR:
10406     case IMPLICIT_CONV_EXPR:
10407     case REINTERPRET_CAST_EXPR:
10408     case CONST_CAST_EXPR:
10409     case STATIC_CAST_EXPR:
10410     case DYNAMIC_CAST_EXPR:
10411     case ARROW_EXPR:
10412     case DOTSTAR_EXPR:
10413     case TYPEID_EXPR:
10414     case PSEUDO_DTOR_EXPR:
10415       if (!fn)
10416         return error_mark_node;
10417       break;
10418
10419     case SCOPE_REF:
10420       if (pfd->include_nondeduced_p)
10421         WALK_SUBTREE (TREE_OPERAND (t, 0));
10422       break;
10423
10424     case REQUIRES_EXPR:
10425       {
10426         if (!fn)
10427           return error_mark_node;
10428
10429         /* Recursively walk the type of each constraint variable.  */
10430         tree p = TREE_OPERAND (t, 0);
10431         while (p)
10432           {
10433             WALK_SUBTREE (TREE_TYPE (p));
10434             p = TREE_CHAIN (p);
10435           }
10436       }
10437       break;
10438
10439     default:
10440       break;
10441     }
10442
10443   #undef WALK_SUBTREE
10444
10445   /* We didn't find any template parameters we liked.  */
10446  out:
10447   return result;
10448 }
10449
10450 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
10451    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
10452    call FN with the parameter and the DATA.
10453    If FN returns nonzero, the iteration is terminated, and
10454    for_each_template_parm returns 1.  Otherwise, the iteration
10455    continues.  If FN never returns a nonzero value, the value
10456    returned by for_each_template_parm is 0.  If FN is NULL, it is
10457    considered to be the function which always returns 1.
10458
10459    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
10460    parameters that occur in non-deduced contexts.  When false, only
10461    visits those template parameters that can be deduced.  */
10462
10463 static tree
10464 for_each_template_parm (tree t, tree_fn_t fn, void* data,
10465                         hash_set<tree> *visited,
10466                         bool include_nondeduced_p,
10467                         tree_fn_t any_fn)
10468 {
10469   struct pair_fn_data pfd;
10470   tree result;
10471
10472   /* Set up.  */
10473   pfd.fn = fn;
10474   pfd.any_fn = any_fn;
10475   pfd.data = data;
10476   pfd.include_nondeduced_p = include_nondeduced_p;
10477
10478   /* Walk the tree.  (Conceptually, we would like to walk without
10479      duplicates, but for_each_template_parm_r recursively calls
10480      for_each_template_parm, so we would need to reorganize a fair
10481      bit to use walk_tree_without_duplicates, so we keep our own
10482      visited list.)  */
10483   if (visited)
10484     pfd.visited = visited;
10485   else
10486     pfd.visited = new hash_set<tree>;
10487   result = cp_walk_tree (&t,
10488                          for_each_template_parm_r,
10489                          &pfd,
10490                          pfd.visited);
10491
10492   /* Clean up.  */
10493   if (!visited)
10494     {
10495       delete pfd.visited;
10496       pfd.visited = 0;
10497     }
10498
10499   return result;
10500 }
10501
10502 struct find_template_parameter_info
10503 {
10504   explicit find_template_parameter_info (tree ctx_parms)
10505     : parm_list (NULL_TREE),
10506       ctx_parms (ctx_parms),
10507       max_depth (TMPL_PARMS_DEPTH (ctx_parms))
10508   {}
10509
10510   hash_set<tree> visited;
10511   hash_set<tree> parms;
10512   tree parm_list;
10513   tree ctx_parms;
10514   int max_depth;
10515 };
10516
10517 /* Appends the declaration of T to the list in DATA.  */
10518
10519 static int
10520 keep_template_parm (tree t, void* data)
10521 {
10522   find_template_parameter_info *ftpi = (find_template_parameter_info*)data;
10523
10524   /* Template parameters declared within the expression are not part of
10525      the parameter mapping. For example, in this concept:
10526
10527        template<typename T>
10528        concept C = requires { <expr> } -> same_as<int>;
10529
10530      the return specifier same_as<int> declares a new decltype parameter
10531      that must not be part of the parameter mapping. The same is true
10532      for generic lambda parameters, lambda template parameters, etc.  */
10533   int level;
10534   int index;
10535   template_parm_level_and_index (t, &level, &index);
10536   if (level > ftpi->max_depth)
10537     return 0;
10538
10539   /* Arguments like const T yield parameters like const T. This means that
10540      a template-id like X<T, const T> would yield two distinct parameters:
10541      T and const T. Adjust types to their unqualified versions.  */
10542   if (TYPE_P (t))
10543     t = TYPE_MAIN_VARIANT (t);
10544   if (!ftpi->parms.add (t))
10545     ftpi->parm_list = tree_cons (NULL_TREE, t, ftpi->parm_list);
10546
10547   return 0;
10548 }
10549
10550 /* Ensure that we recursively examine certain terms that are not normally
10551    visited in for_each_template_parm_r.  */
10552
10553 static int
10554 any_template_parm_r (tree t, void *data)
10555 {
10556   find_template_parameter_info *ftpi = (find_template_parameter_info*)data;
10557
10558 #define WALK_SUBTREE(NODE)                                              \
10559   do                                                                    \
10560     {                                                                   \
10561       for_each_template_parm (NODE, keep_template_parm, data,           \
10562                               &ftpi->visited, true,                     \
10563                               any_template_parm_r);                     \
10564     }                                                                   \
10565   while (0)
10566
10567   /* A mention of a member alias/typedef is a use of all of its template
10568      arguments, including those from the enclosing class, so we don't use
10569      alias_template_specialization_p here.  */
10570   if (TYPE_P (t) && typedef_variant_p (t))
10571     if (tree tinfo = TYPE_ALIAS_TEMPLATE_INFO (t))
10572       WALK_SUBTREE (TI_ARGS (tinfo));
10573
10574   switch (TREE_CODE (t))
10575     {
10576     case TEMPLATE_TYPE_PARM:
10577       /* Type constraints of a placeholder type may contain parameters.  */
10578       if (is_auto (t))
10579         if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (t))
10580           WALK_SUBTREE (constr);
10581       break;
10582
10583     case TEMPLATE_ID_EXPR:
10584       /* Search through references to variable templates.  */
10585       WALK_SUBTREE (TREE_OPERAND (t, 0));
10586       WALK_SUBTREE (TREE_OPERAND (t, 1));
10587       break;
10588
10589     case TEMPLATE_PARM_INDEX:
10590     case PARM_DECL:
10591       /* A parameter or constraint variable may also depend on a template
10592          parameter without explicitly naming it.  */
10593       WALK_SUBTREE (TREE_TYPE (t));
10594       break;
10595
10596     case TEMPLATE_DECL:
10597       {
10598         /* If T is a member template that shares template parameters with
10599            ctx_parms, we need to mark all those parameters for mapping.  */
10600         tree dparms = DECL_TEMPLATE_PARMS (t);
10601         tree cparms = ftpi->ctx_parms;
10602         while (TMPL_PARMS_DEPTH (dparms) > ftpi->max_depth)
10603           dparms = TREE_CHAIN (dparms);
10604         while (TMPL_PARMS_DEPTH (cparms) > TMPL_PARMS_DEPTH (dparms))
10605           cparms = TREE_CHAIN (cparms);
10606         while (dparms
10607                && (TREE_TYPE (TREE_VALUE (dparms))
10608                    != TREE_TYPE (TREE_VALUE (cparms))))
10609           dparms = TREE_CHAIN (dparms),
10610             cparms = TREE_CHAIN (cparms);
10611         if (dparms)
10612           {
10613             int ddepth = TMPL_PARMS_DEPTH (dparms);
10614             tree dargs = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (t)));
10615             for (int i = 0; i < ddepth; ++i)
10616               WALK_SUBTREE (TMPL_ARGS_LEVEL (dargs, i+1));
10617           }
10618       }
10619       break;
10620
10621     case LAMBDA_EXPR:
10622       {
10623         /* Look in the parms and body.  */
10624         tree fn = lambda_function (t);
10625         WALK_SUBTREE (TREE_TYPE (fn));
10626         WALK_SUBTREE (DECL_SAVED_TREE (fn));
10627       }
10628       break;
10629
10630     case IDENTIFIER_NODE:
10631       if (IDENTIFIER_CONV_OP_P (t))
10632         /* The conversion-type-id of a conversion operator may be dependent.  */
10633         WALK_SUBTREE (TREE_TYPE (t));
10634       break;
10635
10636     default:
10637       break;
10638     }
10639
10640   /* Keep walking.  */
10641   return 0;
10642 }
10643
10644 /* Returns a list of unique template parameters found within T, where CTX_PARMS
10645    are the template parameters in scope.  */
10646
10647 tree
10648 find_template_parameters (tree t, tree ctx_parms)
10649 {
10650   if (!ctx_parms)
10651     return NULL_TREE;
10652
10653   find_template_parameter_info ftpi (ctx_parms);
10654   for_each_template_parm (t, keep_template_parm, &ftpi, &ftpi.visited,
10655                           /*include_nondeduced*/true, any_template_parm_r);
10656   return ftpi.parm_list;
10657 }
10658
10659 /* Returns true if T depends on any template parameter.  */
10660
10661 int
10662 uses_template_parms (tree t)
10663 {
10664   if (t == NULL_TREE)
10665     return false;
10666
10667   bool dependent_p;
10668   int saved_processing_template_decl;
10669
10670   saved_processing_template_decl = processing_template_decl;
10671   if (!saved_processing_template_decl)
10672     processing_template_decl = 1;
10673   if (TYPE_P (t))
10674     dependent_p = dependent_type_p (t);
10675   else if (TREE_CODE (t) == TREE_VEC)
10676     dependent_p = any_dependent_template_arguments_p (t);
10677   else if (TREE_CODE (t) == TREE_LIST)
10678     dependent_p = (uses_template_parms (TREE_VALUE (t))
10679                    || uses_template_parms (TREE_CHAIN (t)));
10680   else if (TREE_CODE (t) == TYPE_DECL)
10681     dependent_p = dependent_type_p (TREE_TYPE (t));
10682   else if (t == error_mark_node)
10683     dependent_p = false;
10684   else
10685     dependent_p = value_dependent_expression_p (t);
10686
10687   processing_template_decl = saved_processing_template_decl;
10688
10689   return dependent_p;
10690 }
10691
10692 /* Returns true iff current_function_decl is an incompletely instantiated
10693    template.  Useful instead of processing_template_decl because the latter
10694    is set to 0 during instantiate_non_dependent_expr.  */
10695
10696 bool
10697 in_template_function (void)
10698 {
10699   tree fn = current_function_decl;
10700   bool ret;
10701   ++processing_template_decl;
10702   ret = (fn && DECL_LANG_SPECIFIC (fn)
10703          && DECL_TEMPLATE_INFO (fn)
10704          && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
10705   --processing_template_decl;
10706   return ret;
10707 }
10708
10709 /* Returns true if T depends on any template parameter with level LEVEL.  */
10710
10711 bool
10712 uses_template_parms_level (tree t, int level)
10713 {
10714   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
10715                                  /*include_nondeduced_p=*/true);
10716 }
10717
10718 /* Returns true if the signature of DECL depends on any template parameter from
10719    its enclosing class.  */
10720
10721 bool
10722 uses_outer_template_parms (tree decl)
10723 {
10724   int depth = template_class_depth (CP_DECL_CONTEXT (decl));
10725   if (depth == 0)
10726     return false;
10727   if (for_each_template_parm (TREE_TYPE (decl), template_parm_outer_level,
10728                               &depth, NULL, /*include_nondeduced_p=*/true))
10729     return true;
10730   if (PRIMARY_TEMPLATE_P (decl)
10731       && for_each_template_parm (INNERMOST_TEMPLATE_PARMS
10732                                  (DECL_TEMPLATE_PARMS (decl)),
10733                                  template_parm_outer_level,
10734                                  &depth, NULL, /*include_nondeduced_p=*/true))
10735     return true;
10736   tree ci = get_constraints (decl);
10737   if (ci)
10738     ci = CI_ASSOCIATED_CONSTRAINTS (ci);
10739   if (ci && for_each_template_parm (ci, template_parm_outer_level,
10740                                     &depth, NULL, /*nondeduced*/true))
10741     return true;
10742   return false;
10743 }
10744
10745 /* Returns TRUE iff INST is an instantiation we don't need to do in an
10746    ill-formed translation unit, i.e. a variable or function that isn't
10747    usable in a constant expression.  */
10748
10749 static inline bool
10750 neglectable_inst_p (tree d)
10751 {
10752   return (d && DECL_P (d)
10753           && !undeduced_auto_decl (d)
10754           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
10755                : decl_maybe_constant_var_p (d)));
10756 }
10757
10758 /* Returns TRUE iff we should refuse to instantiate DECL because it's
10759    neglectable and instantiated from within an erroneous instantiation.  */
10760
10761 static bool
10762 limit_bad_template_recursion (tree decl)
10763 {
10764   struct tinst_level *lev = current_tinst_level;
10765   int errs = errorcount + sorrycount;
10766   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
10767     return false;
10768
10769   for (; lev; lev = lev->next)
10770     if (neglectable_inst_p (lev->maybe_get_node ()))
10771       break;
10772
10773   return (lev && errs > lev->errors);
10774 }
10775
10776 static int tinst_depth;
10777 extern int max_tinst_depth;
10778 int depth_reached;
10779
10780 static GTY(()) struct tinst_level *last_error_tinst_level;
10781
10782 /* We're starting to instantiate D; record the template instantiation context
10783    at LOC for diagnostics and to restore it later.  */
10784
10785 bool
10786 push_tinst_level_loc (tree tldcl, tree targs, location_t loc)
10787 {
10788   struct tinst_level *new_level;
10789
10790   if (tinst_depth >= max_tinst_depth)
10791     {
10792       /* Tell error.c not to try to instantiate any templates.  */
10793       at_eof = 2;
10794       fatal_error (input_location,
10795                    "template instantiation depth exceeds maximum of %d"
10796                    " (use %<-ftemplate-depth=%> to increase the maximum)",
10797                    max_tinst_depth);
10798       return false;
10799     }
10800
10801   /* If the current instantiation caused problems, don't let it instantiate
10802      anything else.  Do allow deduction substitution and decls usable in
10803      constant expressions.  */
10804   if (!targs && limit_bad_template_recursion (tldcl))
10805     {
10806       /* Avoid no_linkage_errors and unused function warnings for this
10807          decl.  */
10808       TREE_NO_WARNING (tldcl) = 1;
10809       return false;
10810     }
10811
10812   /* When not -quiet, dump template instantiations other than functions, since
10813      announce_function will take care of those.  */
10814   if (!quiet_flag && !targs
10815       && TREE_CODE (tldcl) != TREE_LIST
10816       && TREE_CODE (tldcl) != FUNCTION_DECL)
10817     fprintf (stderr, " %s", decl_as_string (tldcl, TFF_DECL_SPECIFIERS));
10818
10819   new_level = tinst_level_freelist ().alloc ();
10820   new_level->tldcl = tldcl;
10821   new_level->targs = targs;
10822   new_level->locus = loc;
10823   new_level->errors = errorcount + sorrycount;
10824   new_level->next = NULL;
10825   new_level->refcount = 0;
10826   set_refcount_ptr (new_level->next, current_tinst_level);
10827   set_refcount_ptr (current_tinst_level, new_level);
10828
10829   ++tinst_depth;
10830   if (GATHER_STATISTICS && (tinst_depth > depth_reached))
10831     depth_reached = tinst_depth;
10832
10833   return true;
10834 }
10835
10836 /* We're starting substitution of TMPL<ARGS>; record the template
10837    substitution context for diagnostics and to restore it later.  */
10838
10839 bool
10840 push_tinst_level (tree tmpl, tree args)
10841 {
10842   return push_tinst_level_loc (tmpl, args, input_location);
10843 }
10844
10845 /* We're starting to instantiate D; record INPUT_LOCATION and the
10846    template instantiation context for diagnostics and to restore it
10847    later.  */
10848
10849 bool
10850 push_tinst_level (tree d)
10851 {
10852   return push_tinst_level_loc (d, input_location);
10853 }
10854
10855 /* Likewise, but record LOC as the program location.  */
10856
10857 bool
10858 push_tinst_level_loc (tree d, location_t loc)
10859 {
10860   gcc_assert (TREE_CODE (d) != TREE_LIST);
10861   return push_tinst_level_loc (d, NULL, loc);
10862 }
10863
10864 /* We're done instantiating this template; return to the instantiation
10865    context.  */
10866
10867 void
10868 pop_tinst_level (void)
10869 {
10870   /* Restore the filename and line number stashed away when we started
10871      this instantiation.  */
10872   input_location = current_tinst_level->locus;
10873   set_refcount_ptr (current_tinst_level, current_tinst_level->next);
10874   --tinst_depth;
10875 }
10876
10877 /* We're instantiating a deferred template; restore the template
10878    instantiation context in which the instantiation was requested, which
10879    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
10880
10881 static tree
10882 reopen_tinst_level (struct tinst_level *level)
10883 {
10884   struct tinst_level *t;
10885
10886   tinst_depth = 0;
10887   for (t = level; t; t = t->next)
10888     ++tinst_depth;
10889
10890   set_refcount_ptr (current_tinst_level, level);
10891   pop_tinst_level ();
10892   if (current_tinst_level)
10893     current_tinst_level->errors = errorcount+sorrycount;
10894   return level->maybe_get_node ();
10895 }
10896
10897 /* Returns the TINST_LEVEL which gives the original instantiation
10898    context.  */
10899
10900 struct tinst_level *
10901 outermost_tinst_level (void)
10902 {
10903   struct tinst_level *level = current_tinst_level;
10904   if (level)
10905     while (level->next)
10906       level = level->next;
10907   return level;
10908 }
10909
10910 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
10911    vector of template arguments, as for tsubst.
10912
10913    Returns an appropriate tsubst'd friend declaration.  */
10914
10915 static tree
10916 tsubst_friend_function (tree decl, tree args)
10917 {
10918   tree new_friend;
10919
10920   if (TREE_CODE (decl) == FUNCTION_DECL
10921       && DECL_TEMPLATE_INSTANTIATION (decl)
10922       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10923     /* This was a friend declared with an explicit template
10924        argument list, e.g.:
10925
10926        friend void f<>(T);
10927
10928        to indicate that f was a template instantiation, not a new
10929        function declaration.  Now, we have to figure out what
10930        instantiation of what template.  */
10931     {
10932       tree template_id, arglist, fns;
10933       tree new_args;
10934       tree tmpl;
10935       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
10936
10937       /* Friend functions are looked up in the containing namespace scope.
10938          We must enter that scope, to avoid finding member functions of the
10939          current class with same name.  */
10940       push_nested_namespace (ns);
10941       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
10942                          tf_warning_or_error, NULL_TREE,
10943                          /*integral_constant_expression_p=*/false);
10944       pop_nested_namespace (ns);
10945       arglist = tsubst (DECL_TI_ARGS (decl), args,
10946                         tf_warning_or_error, NULL_TREE);
10947       template_id = lookup_template_function (fns, arglist);
10948
10949       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
10950       tmpl = determine_specialization (template_id, new_friend,
10951                                        &new_args,
10952                                        /*need_member_template=*/0,
10953                                        TREE_VEC_LENGTH (args),
10954                                        tsk_none);
10955       return instantiate_template (tmpl, new_args, tf_error);
10956     }
10957
10958   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
10959   if (new_friend == error_mark_node)
10960     return error_mark_node;
10961
10962   /* The NEW_FRIEND will look like an instantiation, to the
10963      compiler, but is not an instantiation from the point of view of
10964      the language.  For example, we might have had:
10965
10966      template <class T> struct S {
10967        template <class U> friend void f(T, U);
10968      };
10969
10970      Then, in S<int>, template <class U> void f(int, U) is not an
10971      instantiation of anything.  */
10972
10973   DECL_USE_TEMPLATE (new_friend) = 0;
10974   if (TREE_CODE (new_friend) == TEMPLATE_DECL)
10975     {
10976       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
10977       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
10978         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
10979
10980       /* Substitute TEMPLATE_PARMS_CONSTRAINTS so that parameter levels will
10981          match in decls_match.  */
10982       tree parms = DECL_TEMPLATE_PARMS (new_friend);
10983       tree treqs = TEMPLATE_PARMS_CONSTRAINTS (parms);
10984       treqs = maybe_substitute_reqs_for (treqs, new_friend);
10985       TEMPLATE_PARMS_CONSTRAINTS (parms) = treqs;
10986     }
10987
10988   /* The mangled name for the NEW_FRIEND is incorrect.  The function
10989      is not a template instantiation and should not be mangled like
10990      one.  Therefore, we forget the mangling here; we'll recompute it
10991      later if we need it.  */
10992   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
10993     {
10994       SET_DECL_RTL (new_friend, NULL);
10995       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
10996     }
10997
10998   if (DECL_NAMESPACE_SCOPE_P (new_friend))
10999     {
11000       tree old_decl;
11001       tree ns;
11002
11003       /* We must save some information from NEW_FRIEND before calling
11004          duplicate decls since that function will free NEW_FRIEND if
11005          possible.  */
11006       tree new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
11007       tree new_friend_result_template_info = NULL_TREE;
11008       bool new_friend_is_defn =
11009         (DECL_INITIAL (DECL_TEMPLATE_RESULT
11010                        (template_for_substitution (new_friend)))
11011          != NULL_TREE);
11012       tree not_tmpl = new_friend;
11013
11014       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
11015         {
11016           /* This declaration is a `primary' template.  */
11017           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
11018
11019           not_tmpl = DECL_TEMPLATE_RESULT (new_friend);
11020           new_friend_result_template_info = DECL_TEMPLATE_INFO (not_tmpl);
11021         }
11022
11023       /* Inside pushdecl_namespace_level, we will push into the
11024          current namespace. However, the friend function should go
11025          into the namespace of the template.  */
11026       ns = decl_namespace_context (new_friend);
11027       push_nested_namespace (ns);
11028       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
11029       pop_nested_namespace (ns);
11030
11031       if (old_decl == error_mark_node)
11032         return error_mark_node;
11033
11034       if (old_decl != new_friend)
11035         {
11036           /* This new friend declaration matched an existing
11037              declaration.  For example, given:
11038
11039                template <class T> void f(T);
11040                template <class U> class C {
11041                  template <class T> friend void f(T) {}
11042                };
11043
11044              the friend declaration actually provides the definition
11045              of `f', once C has been instantiated for some type.  So,
11046              old_decl will be the out-of-class template declaration,
11047              while new_friend is the in-class definition.
11048
11049              But, if `f' was called before this point, the
11050              instantiation of `f' will have DECL_TI_ARGS corresponding
11051              to `T' but not to `U', references to which might appear
11052              in the definition of `f'.  Previously, the most general
11053              template for an instantiation of `f' was the out-of-class
11054              version; now it is the in-class version.  Therefore, we
11055              run through all specialization of `f', adding to their
11056              DECL_TI_ARGS appropriately.  In particular, they need a
11057              new set of outer arguments, corresponding to the
11058              arguments for this class instantiation.
11059
11060              The same situation can arise with something like this:
11061
11062                friend void f(int);
11063                template <class T> class C {
11064                  friend void f(T) {}
11065                };
11066
11067              when `C<int>' is instantiated.  Now, `f(int)' is defined
11068              in the class.  */
11069
11070           if (!new_friend_is_defn)
11071             /* On the other hand, if the in-class declaration does
11072                *not* provide a definition, then we don't want to alter
11073                existing definitions.  We can just leave everything
11074                alone.  */
11075             ;
11076           else
11077             {
11078               tree new_template = TI_TEMPLATE (new_friend_template_info);
11079               tree new_args = TI_ARGS (new_friend_template_info);
11080
11081               /* Overwrite whatever template info was there before, if
11082                  any, with the new template information pertaining to
11083                  the declaration.  */
11084               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
11085
11086               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
11087                 {
11088                   /* We should have called reregister_specialization in
11089                      duplicate_decls.  */
11090                   gcc_assert (retrieve_specialization (new_template,
11091                                                        new_args, 0)
11092                               == old_decl);
11093
11094                   /* Instantiate it if the global has already been used.  */
11095                   if (DECL_ODR_USED (old_decl))
11096                     instantiate_decl (old_decl, /*defer_ok=*/true,
11097                                       /*expl_inst_class_mem_p=*/false);
11098                 }
11099               else
11100                 {
11101                   tree t;
11102
11103                   /* Indicate that the old function template is a partial
11104                      instantiation.  */
11105                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
11106                     = new_friend_result_template_info;
11107
11108                   gcc_assert (new_template
11109                               == most_general_template (new_template));
11110                   gcc_assert (new_template != old_decl);
11111
11112                   /* Reassign any specializations already in the hash table
11113                      to the new more general template, and add the
11114                      additional template args.  */
11115                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
11116                        t != NULL_TREE;
11117                        t = TREE_CHAIN (t))
11118                     {
11119                       tree spec = TREE_VALUE (t);
11120                       spec_entry elt;
11121
11122                       elt.tmpl = old_decl;
11123                       elt.args = DECL_TI_ARGS (spec);
11124                       elt.spec = NULL_TREE;
11125
11126                       decl_specializations->remove_elt (&elt);
11127
11128                       DECL_TI_ARGS (spec)
11129                         = add_outermost_template_args (new_args,
11130                                                        DECL_TI_ARGS (spec));
11131
11132                       register_specialization
11133                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
11134
11135                     }
11136                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
11137                 }
11138             }
11139
11140           /* The information from NEW_FRIEND has been merged into OLD_DECL
11141              by duplicate_decls.  */
11142           new_friend = old_decl;
11143         }
11144     }
11145   else
11146     {
11147       tree context = DECL_CONTEXT (new_friend);
11148       bool dependent_p;
11149
11150       /* In the code
11151            template <class T> class C {
11152              template <class U> friend void C1<U>::f (); // case 1
11153              friend void C2<T>::f ();                    // case 2
11154            };
11155          we only need to make sure CONTEXT is a complete type for
11156          case 2.  To distinguish between the two cases, we note that
11157          CONTEXT of case 1 remains dependent type after tsubst while
11158          this isn't true for case 2.  */
11159       ++processing_template_decl;
11160       dependent_p = dependent_type_p (context);
11161       --processing_template_decl;
11162
11163       if (!dependent_p
11164           && !complete_type_or_else (context, NULL_TREE))
11165         return error_mark_node;
11166
11167       if (COMPLETE_TYPE_P (context))
11168         {
11169           tree fn = new_friend;
11170           /* do_friend adds the TEMPLATE_DECL for any member friend
11171              template even if it isn't a member template, i.e.
11172                template <class T> friend A<T>::f();
11173              Look through it in that case.  */
11174           if (TREE_CODE (fn) == TEMPLATE_DECL
11175               && !PRIMARY_TEMPLATE_P (fn))
11176             fn = DECL_TEMPLATE_RESULT (fn);
11177           /* Check to see that the declaration is really present, and,
11178              possibly obtain an improved declaration.  */
11179           fn = check_classfn (context, fn, NULL_TREE);
11180
11181           if (fn)
11182             new_friend = fn;
11183         }
11184     }
11185
11186   return new_friend;
11187 }
11188
11189 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
11190    template arguments, as for tsubst.
11191
11192    Returns an appropriate tsubst'd friend type or error_mark_node on
11193    failure.  */
11194
11195 static tree
11196 tsubst_friend_class (tree friend_tmpl, tree args)
11197 {
11198   tree tmpl;
11199
11200   if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
11201     {
11202       tmpl = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
11203       return TREE_TYPE (tmpl);
11204     }
11205
11206   tree context = CP_DECL_CONTEXT (friend_tmpl);
11207   if (TREE_CODE (context) == NAMESPACE_DECL)
11208     push_nested_namespace (context);
11209   else
11210     {
11211       context = tsubst (context, args, tf_error, NULL_TREE);
11212       push_nested_class (context);
11213     }
11214
11215   tmpl = lookup_name (DECL_NAME (friend_tmpl), LOOK_where::CLASS_NAMESPACE,
11216                       LOOK_want::NORMAL | LOOK_want::HIDDEN_FRIEND);
11217
11218   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
11219     {
11220       /* The friend template has already been declared.  Just
11221          check to see that the declarations match, and install any new
11222          default parameters.  We must tsubst the default parameters,
11223          of course.  We only need the innermost template parameters
11224          because that is all that redeclare_class_template will look
11225          at.  */
11226       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
11227           > TMPL_ARGS_DEPTH (args))
11228         {
11229           tree parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
11230                                               args, tf_warning_or_error);
11231           location_t saved_input_location = input_location;
11232           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
11233           tree cons = get_constraints (tmpl);
11234           redeclare_class_template (TREE_TYPE (tmpl), parms, cons);
11235           input_location = saved_input_location;
11236         }
11237     }
11238   else
11239     {
11240       /* The friend template has not already been declared.  In this
11241          case, the instantiation of the template class will cause the
11242          injection of this template into the namespace scope.  */
11243       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
11244
11245       if (tmpl != error_mark_node)
11246         {
11247           /* The new TMPL is not an instantiation of anything, so we
11248              forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE
11249              for the new type because that is supposed to be the
11250              corresponding template decl, i.e., TMPL.  */
11251           DECL_USE_TEMPLATE (tmpl) = 0;
11252           DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
11253           CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
11254           CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
11255             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
11256
11257           /* It is hidden.  */
11258           retrofit_lang_decl (DECL_TEMPLATE_RESULT (tmpl));
11259           DECL_ANTICIPATED (tmpl)
11260             = DECL_ANTICIPATED (DECL_TEMPLATE_RESULT (tmpl)) = true;
11261
11262           /* Substitute into and set the constraints on the new declaration.  */
11263           if (tree ci = get_constraints (friend_tmpl))
11264             {
11265               ++processing_template_decl;
11266               ci = tsubst_constraint_info (ci, args, tf_warning_or_error,
11267                                            DECL_FRIEND_CONTEXT (friend_tmpl));
11268               --processing_template_decl;
11269               set_constraints (tmpl, ci);
11270             }
11271
11272           /* Inject this template into the enclosing namspace scope.  */
11273           tmpl = pushdecl_namespace_level (tmpl, true);
11274         }
11275     }
11276
11277   if (TREE_CODE (context) == NAMESPACE_DECL)
11278     pop_nested_namespace (context);
11279   else
11280     pop_nested_class ();
11281
11282   return TREE_TYPE (tmpl);
11283 }
11284
11285 /* Returns zero if TYPE cannot be completed later due to circularity.
11286    Otherwise returns one.  */
11287
11288 static int
11289 can_complete_type_without_circularity (tree type)
11290 {
11291   if (type == NULL_TREE || type == error_mark_node)
11292     return 0;
11293   else if (COMPLETE_TYPE_P (type))
11294     return 1;
11295   else if (TREE_CODE (type) == ARRAY_TYPE)
11296     return can_complete_type_without_circularity (TREE_TYPE (type));
11297   else if (CLASS_TYPE_P (type)
11298            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
11299     return 0;
11300   else
11301     return 1;
11302 }
11303
11304 static tree tsubst_omp_clauses (tree, enum c_omp_region_type, tree,
11305                                 tsubst_flags_t, tree);
11306
11307 /* Instantiate a single dependent attribute T (a TREE_LIST), and return either
11308    T or a new TREE_LIST, possibly a chain in the case of a pack expansion.  */
11309
11310 static tree
11311 tsubst_attribute (tree t, tree *decl_p, tree args,
11312                   tsubst_flags_t complain, tree in_decl)
11313 {
11314   gcc_assert (ATTR_IS_DEPENDENT (t));
11315
11316   tree val = TREE_VALUE (t);
11317   if (val == NULL_TREE)
11318     /* Nothing to do.  */;
11319   else if ((flag_openmp || flag_openmp_simd)
11320            && is_attribute_p ("omp declare simd",
11321                               get_attribute_name (t)))
11322     {
11323       tree clauses = TREE_VALUE (val);
11324       clauses = tsubst_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD, args,
11325                                     complain, in_decl);
11326       c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
11327       clauses = finish_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD);
11328       tree parms = DECL_ARGUMENTS (*decl_p);
11329       clauses
11330         = c_omp_declare_simd_clauses_to_numbers (parms, clauses);
11331       if (clauses)
11332         val = build_tree_list (NULL_TREE, clauses);
11333       else
11334         val = NULL_TREE;
11335     }
11336   else if (flag_openmp
11337            && is_attribute_p ("omp declare variant base",
11338                               get_attribute_name (t)))
11339     {
11340       ++cp_unevaluated_operand;
11341       tree varid
11342         = tsubst_expr (TREE_PURPOSE (val), args, complain,
11343                        in_decl, /*integral_constant_expression_p=*/false);
11344       --cp_unevaluated_operand;
11345       tree chain = TREE_CHAIN (val);
11346       location_t match_loc = cp_expr_loc_or_input_loc (TREE_PURPOSE (chain));
11347       tree ctx = copy_list (TREE_VALUE (val));
11348       tree simd = get_identifier ("simd");
11349       tree score = get_identifier (" score");
11350       tree condition = get_identifier ("condition");
11351       for (tree t1 = ctx; t1; t1 = TREE_CHAIN (t1))
11352         {
11353           const char *set = IDENTIFIER_POINTER (TREE_PURPOSE (t1));
11354           TREE_VALUE (t1) = copy_list (TREE_VALUE (t1));
11355           for (tree t2 = TREE_VALUE (t1); t2; t2 = TREE_CHAIN (t2))
11356             {
11357               if (TREE_PURPOSE (t2) == simd && set[0] == 'c')
11358                 {
11359                   tree clauses = TREE_VALUE (t2);
11360                   clauses = tsubst_omp_clauses (clauses,
11361                                                 C_ORT_OMP_DECLARE_SIMD, args,
11362                                                 complain, in_decl);
11363                   c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
11364                   clauses = finish_omp_clauses (clauses, C_ORT_OMP_DECLARE_SIMD);
11365                   TREE_VALUE (t2) = clauses;
11366                 }
11367               else
11368                 {
11369                   TREE_VALUE (t2) = copy_list (TREE_VALUE (t2));
11370                   for (tree t3 = TREE_VALUE (t2); t3; t3 = TREE_CHAIN (t3))
11371                     if (TREE_VALUE (t3))
11372                       {
11373                         bool allow_string
11374                           = ((TREE_PURPOSE (t2) != condition || set[0] != 'u')
11375                              && TREE_PURPOSE (t3) != score);
11376                         tree v = TREE_VALUE (t3);
11377                         if (TREE_CODE (v) == STRING_CST && allow_string)
11378                           continue;
11379                         v = tsubst_expr (v, args, complain, in_decl, true);
11380                         v = fold_non_dependent_expr (v);
11381                         if (!INTEGRAL_TYPE_P (TREE_TYPE (v))
11382                             || (TREE_PURPOSE (t3) == score
11383                                 ? TREE_CODE (v) != INTEGER_CST
11384                                 : !tree_fits_shwi_p (v)))
11385                           {
11386                             location_t loc
11387                               = cp_expr_loc_or_loc (TREE_VALUE (t3),
11388                                                     match_loc);
11389                             if (TREE_PURPOSE (t3) == score)
11390                               error_at (loc, "score argument must be "
11391                                              "constant integer expression");
11392                             else if (allow_string)
11393                               error_at (loc, "property must be constant "
11394                                              "integer expression or string "
11395                                              "literal");
11396                             else
11397                               error_at (loc, "property must be constant "
11398                                              "integer expression");
11399                             return NULL_TREE;
11400                           }
11401                         else if (TREE_PURPOSE (t3) == score
11402                                  && tree_int_cst_sgn (v) < 0)
11403                           {
11404                             location_t loc
11405                               = cp_expr_loc_or_loc (TREE_VALUE (t3),
11406                                                     match_loc);
11407                             error_at (loc, "score argument must be "
11408                                            "non-negative");
11409                             return NULL_TREE;
11410                           }
11411                         TREE_VALUE (t3) = v;
11412                       }
11413                 }
11414             }
11415         }
11416       val = tree_cons (varid, ctx, chain);
11417     }
11418   /* If the first attribute argument is an identifier, don't
11419      pass it through tsubst.  Attributes like mode, format,
11420      cleanup and several target specific attributes expect it
11421      unmodified.  */
11422   else if (attribute_takes_identifier_p (get_attribute_name (t)))
11423     {
11424       tree chain
11425         = tsubst_expr (TREE_CHAIN (val), args, complain, in_decl,
11426                        /*integral_constant_expression_p=*/false);
11427       if (chain != TREE_CHAIN (val))
11428         val = tree_cons (NULL_TREE, TREE_VALUE (val), chain);
11429     }
11430   else if (PACK_EXPANSION_P (val))
11431     {
11432       /* An attribute pack expansion.  */
11433       tree purp = TREE_PURPOSE (t);
11434       tree pack = tsubst_pack_expansion (val, args, complain, in_decl);
11435       if (pack == error_mark_node)
11436         return error_mark_node;
11437       int len = TREE_VEC_LENGTH (pack);
11438       tree list = NULL_TREE;
11439       tree *q = &list;
11440       for (int i = 0; i < len; ++i)
11441         {
11442           tree elt = TREE_VEC_ELT (pack, i);
11443           *q = build_tree_list (purp, elt);
11444           q = &TREE_CHAIN (*q);
11445         }
11446       return list;
11447     }
11448   else
11449     val = tsubst_expr (val, args, complain, in_decl,
11450                        /*integral_constant_expression_p=*/false);
11451
11452   if (val != TREE_VALUE (t))
11453     return build_tree_list (TREE_PURPOSE (t), val);
11454   return t;
11455 }
11456
11457 /* Instantiate any dependent attributes in ATTRIBUTES, returning either it
11458    unchanged or a new TREE_LIST chain.  */
11459
11460 static tree
11461 tsubst_attributes (tree attributes, tree args,
11462                    tsubst_flags_t complain, tree in_decl)
11463 {
11464   tree last_dep = NULL_TREE;
11465
11466   for (tree t = attributes; t; t = TREE_CHAIN (t))
11467     if (ATTR_IS_DEPENDENT (t))
11468       {
11469         last_dep = t;
11470         attributes = copy_list (attributes);
11471         break;
11472       }
11473
11474   if (last_dep)
11475     for (tree *p = &attributes; *p; )
11476       {
11477         tree t = *p;
11478         if (ATTR_IS_DEPENDENT (t))
11479           {
11480             tree subst = tsubst_attribute (t, NULL, args, complain, in_decl);
11481             if (subst != t)
11482               {
11483                 *p = subst;
11484                 while (*p)
11485                   p = &TREE_CHAIN (*p);
11486                 *p = TREE_CHAIN (t);
11487                 continue;
11488               }
11489           }
11490         p = &TREE_CHAIN (*p);
11491       }
11492
11493   return attributes;
11494 }
11495
11496 /* Apply any attributes which had to be deferred until instantiation
11497    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
11498    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
11499
11500 static void
11501 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
11502                                 tree args, tsubst_flags_t complain, tree in_decl)
11503 {
11504   tree last_dep = NULL_TREE;
11505   tree t;
11506   tree *p;
11507
11508   if (attributes == NULL_TREE)
11509     return;
11510
11511   if (DECL_P (*decl_p))
11512     {
11513       if (TREE_TYPE (*decl_p) == error_mark_node)
11514         return;
11515       p = &DECL_ATTRIBUTES (*decl_p);
11516       /* DECL_ATTRIBUTES comes from copy_node in tsubst_decl, and is identical
11517          to our attributes parameter.  */
11518       gcc_assert (*p == attributes);
11519     }
11520   else
11521     {
11522       p = &TYPE_ATTRIBUTES (*decl_p);
11523       /* TYPE_ATTRIBUTES was set up (with abi_tag and may_alias) in
11524          lookup_template_class_1, and should be preserved.  */
11525       gcc_assert (*p != attributes);
11526       while (*p)
11527         p = &TREE_CHAIN (*p);
11528     }
11529
11530   for (t = attributes; t; t = TREE_CHAIN (t))
11531     if (ATTR_IS_DEPENDENT (t))
11532       {
11533         last_dep = t;
11534         attributes = copy_list (attributes);
11535         break;
11536       }
11537
11538   *p = attributes;
11539   if (last_dep)
11540     {
11541       tree late_attrs = NULL_TREE;
11542       tree *q = &late_attrs;
11543
11544       for (; *p; )
11545         {
11546           t = *p;
11547           if (ATTR_IS_DEPENDENT (t))
11548             {
11549               *p = TREE_CHAIN (t);
11550               TREE_CHAIN (t) = NULL_TREE;
11551               *q = tsubst_attribute (t, decl_p, args, complain, in_decl);
11552               while (*q)
11553                 q = &TREE_CHAIN (*q);
11554             }
11555           else
11556             p = &TREE_CHAIN (t);
11557         }
11558
11559       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
11560     }
11561 }
11562
11563 /* The template TMPL is being instantiated with the template arguments TARGS.
11564    Perform the access checks that we deferred when parsing the template.  */
11565
11566 static void
11567 perform_instantiation_time_access_checks (tree tmpl, tree targs)
11568 {
11569   unsigned i;
11570   deferred_access_check *chk;
11571
11572   if (!CLASS_TYPE_P (tmpl) && TREE_CODE (tmpl) != FUNCTION_DECL)
11573     return;
11574
11575   if (vec<deferred_access_check, va_gc> *access_checks
11576       = TI_DEFERRED_ACCESS_CHECKS (get_template_info (tmpl)))
11577     FOR_EACH_VEC_ELT (*access_checks, i, chk)
11578       {
11579         tree decl = chk->decl;
11580         tree diag_decl = chk->diag_decl;
11581         tree type_scope = TREE_TYPE (chk->binfo);
11582
11583         if (uses_template_parms (type_scope))
11584           type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
11585
11586         /* Make access check error messages point to the location
11587            of the use of the typedef.  */
11588         iloc_sentinel ils (chk->loc);
11589         perform_or_defer_access_check (TYPE_BINFO (type_scope),
11590                                        decl, diag_decl, tf_warning_or_error);
11591       }
11592 }
11593
11594 static tree
11595 instantiate_class_template_1 (tree type)
11596 {
11597   tree templ, args, pattern, t, member;
11598   tree typedecl;
11599   tree pbinfo;
11600   tree base_list;
11601   unsigned int saved_maximum_field_alignment;
11602   tree fn_context;
11603
11604   if (type == error_mark_node)
11605     return error_mark_node;
11606
11607   if (COMPLETE_OR_OPEN_TYPE_P (type)
11608       || uses_template_parms (type))
11609     return type;
11610
11611   /* Figure out which template is being instantiated.  */
11612   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
11613   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
11614
11615   /* Mark the type as in the process of being defined.  */
11616   TYPE_BEING_DEFINED (type) = 1;
11617
11618   /* We may be in the middle of deferred access check.  Disable
11619      it now.  */
11620   deferring_access_check_sentinel acs (dk_no_deferred);
11621
11622   /* Determine what specialization of the original template to
11623      instantiate.  */
11624   t = most_specialized_partial_spec (type, tf_warning_or_error);
11625   if (t == error_mark_node)
11626     return error_mark_node;
11627   else if (t)
11628     {
11629       /* This TYPE is actually an instantiation of a partial
11630          specialization.  We replace the innermost set of ARGS with
11631          the arguments appropriate for substitution.  For example,
11632          given:
11633
11634            template <class T> struct S {};
11635            template <class T> struct S<T*> {};
11636
11637          and supposing that we are instantiating S<int*>, ARGS will
11638          presently be {int*} -- but we need {int}.  */
11639       pattern = TREE_TYPE (t);
11640       args = TREE_PURPOSE (t);
11641     }
11642   else
11643     {
11644       pattern = TREE_TYPE (templ);
11645       args = CLASSTYPE_TI_ARGS (type);
11646     }
11647
11648   /* If the template we're instantiating is incomplete, then clearly
11649      there's nothing we can do.  */
11650   if (!COMPLETE_TYPE_P (pattern))
11651     {
11652       /* We can try again later.  */
11653       TYPE_BEING_DEFINED (type) = 0;
11654       return type;
11655     }
11656
11657   /* If we've recursively instantiated too many templates, stop.  */
11658   if (! push_tinst_level (type))
11659     return type;
11660
11661   int saved_unevaluated_operand = cp_unevaluated_operand;
11662   int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
11663
11664   fn_context = decl_function_context (TYPE_MAIN_DECL (type));
11665   /* Also avoid push_to_top_level for a lambda in an NSDMI.  */
11666   if (!fn_context && LAMBDA_TYPE_P (type) && TYPE_CLASS_SCOPE_P (type))
11667     fn_context = error_mark_node;
11668   if (!fn_context)
11669     push_to_top_level ();
11670   else
11671     {
11672       cp_unevaluated_operand = 0;
11673       c_inhibit_evaluation_warnings = 0;
11674     }
11675   /* Use #pragma pack from the template context.  */
11676   saved_maximum_field_alignment = maximum_field_alignment;
11677   maximum_field_alignment = TYPE_PRECISION (pattern);
11678
11679   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
11680
11681   /* Set the input location to the most specialized template definition.
11682      This is needed if tsubsting causes an error.  */
11683   typedecl = TYPE_MAIN_DECL (pattern);
11684   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
11685     DECL_SOURCE_LOCATION (typedecl);
11686
11687   TYPE_PACKED (type) = TYPE_PACKED (pattern);
11688   SET_TYPE_ALIGN (type, TYPE_ALIGN (pattern));
11689   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
11690   CLASSTYPE_NON_AGGREGATE (type) = CLASSTYPE_NON_AGGREGATE (pattern);
11691   if (ANON_AGGR_TYPE_P (pattern))
11692     SET_ANON_AGGR_TYPE_P (type);
11693   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
11694     {
11695       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
11696       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
11697       /* Adjust visibility for template arguments.  */
11698       determine_visibility (TYPE_MAIN_DECL (type));
11699     }
11700   if (CLASS_TYPE_P (type))
11701     CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
11702
11703   pbinfo = TYPE_BINFO (pattern);
11704
11705   /* We should never instantiate a nested class before its enclosing
11706      class; we need to look up the nested class by name before we can
11707      instantiate it, and that lookup should instantiate the enclosing
11708      class.  */
11709   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
11710               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
11711
11712   base_list = NULL_TREE;
11713   if (BINFO_N_BASE_BINFOS (pbinfo))
11714     {
11715       tree pbase_binfo;
11716       tree pushed_scope;
11717       int i;
11718
11719       /* We must enter the scope containing the type, as that is where
11720          the accessibility of types named in dependent bases are
11721          looked up from.  */
11722       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
11723
11724       /* Substitute into each of the bases to determine the actual
11725          basetypes.  */
11726       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
11727         {
11728           tree base;
11729           tree access = BINFO_BASE_ACCESS (pbinfo, i);
11730           tree expanded_bases = NULL_TREE;
11731           int idx, len = 1;
11732
11733           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
11734             {
11735               expanded_bases = 
11736                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
11737                                        args, tf_error, NULL_TREE);
11738               if (expanded_bases == error_mark_node)
11739                 continue;
11740
11741               len = TREE_VEC_LENGTH (expanded_bases);
11742             }
11743
11744           for (idx = 0; idx < len; idx++)
11745             {
11746               if (expanded_bases)
11747                 /* Extract the already-expanded base class.  */
11748                 base = TREE_VEC_ELT (expanded_bases, idx);
11749               else
11750                 /* Substitute to figure out the base class.  */
11751                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
11752                                NULL_TREE);
11753
11754               if (base == error_mark_node)
11755                 continue;
11756
11757               base_list = tree_cons (access, base, base_list);
11758               if (BINFO_VIRTUAL_P (pbase_binfo))
11759                 TREE_TYPE (base_list) = integer_type_node;
11760             }
11761         }
11762
11763       /* The list is now in reverse order; correct that.  */
11764       base_list = nreverse (base_list);
11765
11766       if (pushed_scope)
11767         pop_scope (pushed_scope);
11768     }
11769   /* Now call xref_basetypes to set up all the base-class
11770      information.  */
11771   xref_basetypes (type, base_list);
11772
11773   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
11774                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
11775                                   args, tf_error, NULL_TREE);
11776   fixup_attribute_variants (type);
11777
11778   /* Now that our base classes are set up, enter the scope of the
11779      class, so that name lookups into base classes, etc. will work
11780      correctly.  This is precisely analogous to what we do in
11781      begin_class_definition when defining an ordinary non-template
11782      class, except we also need to push the enclosing classes.  */
11783   push_nested_class (type);
11784
11785   /* Now members are processed in the order of declaration.  */
11786   for (member = CLASSTYPE_DECL_LIST (pattern);
11787        member; member = TREE_CHAIN (member))
11788     {
11789       tree t = TREE_VALUE (member);
11790
11791       if (TREE_PURPOSE (member))
11792         {
11793           if (TYPE_P (t))
11794             {
11795               if (LAMBDA_TYPE_P (t))
11796                 /* A closure type for a lambda in an NSDMI or default argument.
11797                    Ignore it; it will be regenerated when needed.  */
11798                 continue;
11799
11800               /* Build new CLASSTYPE_NESTED_UTDS.  */
11801               bool class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
11802                                        && TYPE_LANG_SPECIFIC (t)
11803                                        && CLASSTYPE_IS_TEMPLATE (t));
11804
11805               /* If the member is a class template, then -- even after
11806                  substitution -- there may be dependent types in the
11807                  template argument list for the class.  We increment
11808                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
11809                  that function will assume that no types are dependent
11810                  when outside of a template.  */
11811               if (class_template_p)
11812                 ++processing_template_decl;
11813               tree newtag = tsubst (t, args, tf_error, NULL_TREE);
11814               if (class_template_p)
11815                 --processing_template_decl;
11816               if (newtag == error_mark_node)
11817                 continue;
11818
11819               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
11820                 {
11821                   tree name = TYPE_IDENTIFIER (t);
11822
11823                   if (class_template_p)
11824                     /* Unfortunately, lookup_template_class sets
11825                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
11826                        instantiation (i.e., for the type of a member
11827                        template class nested within a template class.)
11828                        This behavior is required for
11829                        maybe_process_partial_specialization to work
11830                        correctly, but is not accurate in this case;
11831                        the TAG is not an instantiation of anything.
11832                        (The corresponding TEMPLATE_DECL is an
11833                        instantiation, but the TYPE is not.) */
11834                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
11835
11836                   /* Now, we call pushtag to put this NEWTAG into the scope of
11837                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
11838                      pushtag calling push_template_decl.  We don't have to do
11839                      this for enums because it will already have been done in
11840                      tsubst_enum.  */
11841                   if (name)
11842                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
11843                   pushtag (name, newtag, /*tag_scope=*/ts_current);
11844                 }
11845             }
11846           else if (DECL_DECLARES_FUNCTION_P (t))
11847             {
11848               tree r;
11849
11850               if (TREE_CODE (t) == TEMPLATE_DECL)
11851                 ++processing_template_decl;
11852               r = tsubst (t, args, tf_error, NULL_TREE);
11853               if (TREE_CODE (t) == TEMPLATE_DECL)
11854                 --processing_template_decl;
11855               set_current_access_from_decl (r);
11856               finish_member_declaration (r);
11857               /* Instantiate members marked with attribute used.  */
11858               if (r != error_mark_node && DECL_PRESERVE_P (r))
11859                 mark_used (r);
11860               if (TREE_CODE (r) == FUNCTION_DECL
11861                   && DECL_OMP_DECLARE_REDUCTION_P (r))
11862                 cp_check_omp_declare_reduction (r);
11863             }
11864           else if ((DECL_CLASS_TEMPLATE_P (t) || DECL_IMPLICIT_TYPEDEF_P (t))
11865                    && LAMBDA_TYPE_P (TREE_TYPE (t)))
11866             /* A closure type for a lambda in an NSDMI or default argument.
11867                Ignore it; it will be regenerated when needed.  */;
11868           else
11869             {
11870               /* Build new TYPE_FIELDS.  */
11871               if (TREE_CODE (t) == STATIC_ASSERT)
11872                 tsubst_expr (t, args, tf_warning_or_error, NULL_TREE,
11873                              /*integral_constant_expression_p=*/true);
11874               else if (TREE_CODE (t) != CONST_DECL)
11875                 {
11876                   tree r;
11877                   tree vec = NULL_TREE;
11878                   int len = 1;
11879
11880                   gcc_checking_assert (TREE_CODE (t) != CONST_DECL);
11881                   /* The file and line for this declaration, to
11882                      assist in error message reporting.  Since we
11883                      called push_tinst_level above, we don't need to
11884                      restore these.  */
11885                   input_location = DECL_SOURCE_LOCATION (t);
11886
11887                   if (TREE_CODE (t) == TEMPLATE_DECL)
11888                     ++processing_template_decl;
11889                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
11890                   if (TREE_CODE (t) == TEMPLATE_DECL)
11891                     --processing_template_decl;
11892
11893                   if (TREE_CODE (r) == TREE_VEC)
11894                     {
11895                       /* A capture pack became multiple fields.  */
11896                       vec = r;
11897                       len = TREE_VEC_LENGTH (vec);
11898                     }
11899
11900                   for (int i = 0; i < len; ++i)
11901                     {
11902                       if (vec)
11903                         r = TREE_VEC_ELT (vec, i);
11904                       if (VAR_P (r))
11905                         {
11906                           /* In [temp.inst]:
11907
11908                              [t]he initialization (and any associated
11909                              side-effects) of a static data member does
11910                              not occur unless the static data member is
11911                              itself used in a way that requires the
11912                              definition of the static data member to
11913                              exist.
11914
11915                              Therefore, we do not substitute into the
11916                              initialized for the static data member here.  */
11917                           finish_static_data_member_decl
11918                             (r,
11919                              /*init=*/NULL_TREE,
11920                              /*init_const_expr_p=*/false,
11921                              /*asmspec_tree=*/NULL_TREE,
11922                              /*flags=*/0);
11923                           /* Instantiate members marked with attribute used. */
11924                           if (r != error_mark_node && DECL_PRESERVE_P (r))
11925                             mark_used (r);
11926                         }
11927                       else if (TREE_CODE (r) == FIELD_DECL)
11928                         {
11929                           /* Determine whether R has a valid type and can be
11930                              completed later.  If R is invalid, then its type
11931                              is replaced by error_mark_node.  */
11932                           tree rtype = TREE_TYPE (r);
11933                           if (can_complete_type_without_circularity (rtype))
11934                             complete_type (rtype);
11935
11936                           if (!complete_or_array_type_p (rtype))
11937                             {
11938                               /* If R's type couldn't be completed and
11939                                  it isn't a flexible array member (whose
11940                                  type is incomplete by definition) give
11941                                  an error.  */
11942                               cxx_incomplete_type_error (r, rtype);
11943                               TREE_TYPE (r) = error_mark_node;
11944                             }
11945                           else if (TREE_CODE (rtype) == ARRAY_TYPE
11946                                    && TYPE_DOMAIN (rtype) == NULL_TREE
11947                                    && (TREE_CODE (type) == UNION_TYPE
11948                                        || TREE_CODE (type) == QUAL_UNION_TYPE))
11949                             {
11950                               error ("flexible array member %qD in union", r);
11951                               TREE_TYPE (r) = error_mark_node;
11952                             }
11953                           else if (!verify_type_context (input_location,
11954                                                          TCTX_FIELD, rtype))
11955                             TREE_TYPE (r) = error_mark_node;
11956                         }
11957
11958                       /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
11959                          such a thing will already have been added to the field
11960                          list by tsubst_enum in finish_member_declaration in the
11961                          CLASSTYPE_NESTED_UTDS case above.  */
11962                       if (!(TREE_CODE (r) == TYPE_DECL
11963                             && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
11964                             && DECL_ARTIFICIAL (r)))
11965                         {
11966                           set_current_access_from_decl (r);
11967                           finish_member_declaration (r);
11968                         }
11969                     }
11970                 }
11971             }
11972         }
11973       else
11974         {
11975           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
11976               || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11977             {
11978               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
11979
11980               tree friend_type = t;
11981               bool adjust_processing_template_decl = false;
11982
11983               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
11984                 {
11985                   /* template <class T> friend class C;  */
11986                   friend_type = tsubst_friend_class (friend_type, args);
11987                   adjust_processing_template_decl = true;
11988                 }
11989               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
11990                 {
11991                   /* template <class T> friend class C::D;  */
11992                   friend_type = tsubst (friend_type, args,
11993                                         tf_warning_or_error, NULL_TREE);
11994                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
11995                     friend_type = TREE_TYPE (friend_type);
11996                   adjust_processing_template_decl = true;
11997                 }
11998               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
11999                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
12000                 {
12001                   /* This could be either
12002
12003                        friend class T::C;
12004
12005                      when dependent_type_p is false or
12006
12007                        template <class U> friend class T::C;
12008
12009                      otherwise.  */
12010                   /* Bump processing_template_decl in case this is something like
12011                      template <class T> friend struct A<T>::B.  */
12012                   ++processing_template_decl;
12013                   friend_type = tsubst (friend_type, args,
12014                                         tf_warning_or_error, NULL_TREE);
12015                   if (dependent_type_p (friend_type))
12016                     adjust_processing_template_decl = true;
12017                   --processing_template_decl;
12018                 }
12019               else if (TREE_CODE (friend_type) != BOUND_TEMPLATE_TEMPLATE_PARM
12020                        && !CLASSTYPE_USE_TEMPLATE (friend_type)
12021                        && TYPE_HIDDEN_P (friend_type))
12022                 {
12023                   /* friend class C;
12024
12025                      where C hasn't been declared yet.  Let's lookup name
12026                      from namespace scope directly, bypassing any name that
12027                      come from dependent base class.  */
12028                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
12029
12030                   /* The call to xref_tag_from_type does injection for friend
12031                      classes.  */
12032                   push_nested_namespace (ns);
12033                   friend_type =
12034                     xref_tag_from_type (friend_type, NULL_TREE,
12035                                         /*tag_scope=*/ts_current);
12036                   pop_nested_namespace (ns);
12037                 }
12038               else if (uses_template_parms (friend_type))
12039                 /* friend class C<T>;  */
12040                 friend_type = tsubst (friend_type, args,
12041                                       tf_warning_or_error, NULL_TREE);
12042               /* Otherwise it's
12043
12044                    friend class C;
12045
12046                  where C is already declared or
12047
12048                    friend class C<int>;
12049
12050                  We don't have to do anything in these cases.  */
12051
12052               if (adjust_processing_template_decl)
12053                 /* Trick make_friend_class into realizing that the friend
12054                    we're adding is a template, not an ordinary class.  It's
12055                    important that we use make_friend_class since it will
12056                    perform some error-checking and output cross-reference
12057                    information.  */
12058                 ++processing_template_decl;
12059
12060               if (friend_type != error_mark_node)
12061                 make_friend_class (type, friend_type, /*complain=*/false);
12062
12063               if (adjust_processing_template_decl)
12064                 --processing_template_decl;
12065             }
12066           else
12067             {
12068               /* Build new DECL_FRIENDLIST.  */
12069               tree r;
12070
12071               /* The file and line for this declaration, to
12072                  assist in error message reporting.  Since we
12073                  called push_tinst_level above, we don't need to
12074                  restore these.  */
12075               input_location = DECL_SOURCE_LOCATION (t);
12076
12077               if (TREE_CODE (t) == TEMPLATE_DECL)
12078                 {
12079                   ++processing_template_decl;
12080                   push_deferring_access_checks (dk_no_check);
12081                 }
12082
12083               r = tsubst_friend_function (t, args);
12084               add_friend (type, r, /*complain=*/false);
12085               if (TREE_CODE (t) == TEMPLATE_DECL)
12086                 {
12087                   pop_deferring_access_checks ();
12088                   --processing_template_decl;
12089                 }
12090             }
12091         }
12092     }
12093
12094   if (fn_context)
12095     {
12096       /* Restore these before substituting into the lambda capture
12097          initializers.  */
12098       cp_unevaluated_operand = saved_unevaluated_operand;
12099       c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
12100     }
12101
12102   /* Set the file and line number information to whatever is given for
12103      the class itself.  This puts error messages involving generated
12104      implicit functions at a predictable point, and the same point
12105      that would be used for non-template classes.  */
12106   input_location = DECL_SOURCE_LOCATION (typedecl);
12107
12108   unreverse_member_declarations (type);
12109   finish_struct_1 (type);
12110   TYPE_BEING_DEFINED (type) = 0;
12111
12112   /* We don't instantiate default arguments for member functions.  14.7.1:
12113
12114      The implicit instantiation of a class template specialization causes
12115      the implicit instantiation of the declarations, but not of the
12116      definitions or default arguments, of the class member functions,
12117      member classes, static data members and member templates....  */
12118
12119   perform_instantiation_time_access_checks (pattern, args);
12120   perform_deferred_access_checks (tf_warning_or_error);
12121   pop_nested_class ();
12122   maximum_field_alignment = saved_maximum_field_alignment;
12123   if (!fn_context)
12124     pop_from_top_level ();
12125   pop_tinst_level ();
12126
12127   /* The vtable for a template class can be emitted in any translation
12128      unit in which the class is instantiated.  When there is no key
12129      method, however, finish_struct_1 will already have added TYPE to
12130      the keyed_classes.  */
12131   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
12132     vec_safe_push (keyed_classes, type);
12133
12134   return type;
12135 }
12136
12137 /* Wrapper for instantiate_class_template_1.  */
12138
12139 tree
12140 instantiate_class_template (tree type)
12141 {
12142   tree ret;
12143   timevar_push (TV_TEMPLATE_INST);
12144   ret = instantiate_class_template_1 (type);
12145   timevar_pop (TV_TEMPLATE_INST);
12146   return ret;
12147 }
12148
12149 tree
12150 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12151 {
12152   tree r;
12153
12154   if (!t)
12155     r = t;
12156   else if (TYPE_P (t))
12157     r = tsubst (t, args, complain, in_decl);
12158   else
12159     {
12160       if (!(complain & tf_warning))
12161         ++c_inhibit_evaluation_warnings;
12162       r = tsubst_expr (t, args, complain, in_decl,
12163                        /*integral_constant_expression_p=*/true);
12164       if (!(complain & tf_warning))
12165         --c_inhibit_evaluation_warnings;
12166     }
12167
12168   return r;
12169 }
12170
12171 /* Given a function parameter pack TMPL_PARM and some function parameters
12172    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
12173    and set *SPEC_P to point at the next point in the list.  */
12174
12175 tree
12176 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
12177 {
12178   /* Collect all of the extra "packed" parameters into an
12179      argument pack.  */
12180   tree parmvec;
12181   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
12182   tree spec_parm = *spec_p;
12183   int i, len;
12184
12185   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
12186     if (tmpl_parm
12187         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
12188       break;
12189
12190   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
12191   parmvec = make_tree_vec (len);
12192   spec_parm = *spec_p;
12193   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
12194     {
12195       tree elt = spec_parm;
12196       if (DECL_PACK_P (elt))
12197         elt = make_pack_expansion (elt);
12198       TREE_VEC_ELT (parmvec, i) = elt;
12199     }
12200
12201   /* Build the argument packs.  */
12202   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
12203   *spec_p = spec_parm;
12204
12205   return argpack;
12206 }
12207
12208 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
12209    NONTYPE_ARGUMENT_PACK.  */
12210
12211 static tree
12212 make_fnparm_pack (tree spec_parm)
12213 {
12214   return extract_fnparm_pack (NULL_TREE, &spec_parm);
12215 }
12216
12217 /* Return 1 if the Ith element of the argument pack ARG_PACK is a
12218    pack expansion with no extra args, 2 if it has extra args, or 0
12219    if it is not a pack expansion.  */
12220
12221 static int
12222 argument_pack_element_is_expansion_p (tree arg_pack, int i)
12223 {
12224   if (TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
12225     /* We're being called before this happens in tsubst_pack_expansion.  */
12226     arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
12227   tree vec = ARGUMENT_PACK_ARGS (arg_pack);
12228   if (i >= TREE_VEC_LENGTH (vec))
12229     return 0;
12230   tree elt = TREE_VEC_ELT (vec, i);
12231   if (DECL_P (elt))
12232     /* A decl pack is itself an expansion.  */
12233     elt = TREE_TYPE (elt);
12234   if (!PACK_EXPANSION_P (elt))
12235     return 0;
12236   if (PACK_EXPANSION_EXTRA_ARGS (elt))
12237     return 2;
12238   return 1;
12239 }
12240
12241
12242 /* Creates and return an ARGUMENT_PACK_SELECT tree node.  */
12243
12244 static tree
12245 make_argument_pack_select (tree arg_pack, unsigned index)
12246 {
12247   tree aps = make_node (ARGUMENT_PACK_SELECT);
12248
12249   ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
12250   ARGUMENT_PACK_SELECT_INDEX (aps) = index;
12251
12252   return aps;
12253 }
12254
12255 /*  This is a subroutine of tsubst_pack_expansion.
12256
12257     It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
12258     mechanism to store the (non complete list of) arguments of the
12259     substitution and return a non substituted pack expansion, in order
12260     to wait for when we have enough arguments to really perform the
12261     substitution.  */
12262
12263 static bool
12264 use_pack_expansion_extra_args_p (tree parm_packs,
12265                                  int arg_pack_len,
12266                                  bool has_empty_arg)
12267 {
12268   /* If one pack has an expansion and another pack has a normal
12269      argument or if one pack has an empty argument and an another
12270      one hasn't then tsubst_pack_expansion cannot perform the
12271      substitution and need to fall back on the
12272      PACK_EXPANSION_EXTRA mechanism.  */
12273   if (parm_packs == NULL_TREE)
12274     return false;
12275   else if (has_empty_arg)
12276     {
12277       /* If all the actual packs are pack expansions, we can still
12278          subsitute directly.  */
12279       for (tree p = parm_packs; p; p = TREE_CHAIN (p))
12280         {
12281           tree a = TREE_VALUE (p);
12282           if (TREE_CODE (a) == ARGUMENT_PACK_SELECT)
12283             a = ARGUMENT_PACK_SELECT_FROM_PACK (a);
12284           a = ARGUMENT_PACK_ARGS (a);
12285           if (TREE_VEC_LENGTH (a) == 1)
12286             a = TREE_VEC_ELT (a, 0);
12287           if (PACK_EXPANSION_P (a))
12288             continue;
12289           return true;
12290         }
12291       return false;
12292     }
12293
12294   bool has_expansion_arg = false;
12295   for (int i = 0 ; i < arg_pack_len; ++i)
12296     {
12297       bool has_non_expansion_arg = false;
12298       for (tree parm_pack = parm_packs;
12299            parm_pack;
12300            parm_pack = TREE_CHAIN (parm_pack))
12301         {
12302           tree arg = TREE_VALUE (parm_pack);
12303
12304           int exp = argument_pack_element_is_expansion_p (arg, i);
12305           if (exp == 2)
12306             /* We can't substitute a pack expansion with extra args into
12307                our pattern.  */
12308             return true;
12309           else if (exp)
12310             has_expansion_arg = true;
12311           else
12312             has_non_expansion_arg = true;
12313         }
12314
12315       if (has_expansion_arg && has_non_expansion_arg)
12316         return true;
12317     }
12318   return false;
12319 }
12320
12321 /* [temp.variadic]/6 says that:
12322
12323        The instantiation of a pack expansion [...]
12324        produces a list E1,E2, ..., En, where N is the number of elements
12325        in the pack expansion parameters.
12326
12327    This subroutine of tsubst_pack_expansion produces one of these Ei.
12328
12329    PATTERN is the pattern of the pack expansion.  PARM_PACKS is a
12330    TREE_LIST in which each TREE_PURPOSE is a parameter pack of
12331    PATTERN, and each TREE_VALUE is its corresponding argument pack.
12332    INDEX is the index 'i' of the element Ei to produce.  ARGS,
12333    COMPLAIN, and IN_DECL are the same parameters as for the
12334    tsubst_pack_expansion function.
12335
12336    The function returns the resulting Ei upon successful completion,
12337    or error_mark_node.
12338
12339    Note that this function possibly modifies the ARGS parameter, so
12340    it's the responsibility of the caller to restore it.  */
12341
12342 static tree
12343 gen_elem_of_pack_expansion_instantiation (tree pattern,
12344                                           tree parm_packs,
12345                                           unsigned index,
12346                                           tree args /* This parm gets
12347                                                        modified.  */,
12348                                           tsubst_flags_t complain,
12349                                           tree in_decl)
12350 {
12351   tree t;
12352   bool ith_elem_is_expansion = false;
12353
12354   /* For each parameter pack, change the substitution of the parameter
12355      pack to the ith argument in its argument pack, then expand the
12356      pattern.  */
12357   for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
12358     {
12359       tree parm = TREE_PURPOSE (pack);
12360       tree arg_pack = TREE_VALUE (pack);
12361       tree aps;                 /* instance of ARGUMENT_PACK_SELECT.  */
12362
12363       ith_elem_is_expansion |=
12364         argument_pack_element_is_expansion_p (arg_pack, index);
12365
12366       /* Select the Ith argument from the pack.  */
12367       if (TREE_CODE (parm) == PARM_DECL
12368           || VAR_P (parm)
12369           || TREE_CODE (parm) == FIELD_DECL)
12370         {
12371           if (index == 0)
12372             {
12373               aps = make_argument_pack_select (arg_pack, index);
12374               if (!mark_used (parm, complain) && !(complain & tf_error))
12375                 return error_mark_node;
12376               register_local_specialization (aps, parm);
12377             }
12378           else
12379             aps = retrieve_local_specialization (parm);
12380         }
12381       else
12382         {
12383           int idx, level;
12384           template_parm_level_and_index (parm, &level, &idx);
12385
12386           if (index == 0)
12387             {
12388               aps = make_argument_pack_select (arg_pack, index);
12389               /* Update the corresponding argument.  */
12390               TMPL_ARG (args, level, idx) = aps;
12391             }
12392           else
12393             /* Re-use the ARGUMENT_PACK_SELECT.  */
12394             aps = TMPL_ARG (args, level, idx);
12395         }
12396       ARGUMENT_PACK_SELECT_INDEX (aps) = index;
12397     }
12398
12399   /* Substitute into the PATTERN with the (possibly altered)
12400      arguments.  */
12401   if (pattern == in_decl)
12402     /* Expanding a fixed parameter pack from
12403        coerce_template_parameter_pack.  */
12404     t = tsubst_decl (pattern, args, complain);
12405   else if (pattern == error_mark_node)
12406     t = error_mark_node;
12407   else if (!TYPE_P (pattern))
12408     t = tsubst_expr (pattern, args, complain, in_decl,
12409                      /*integral_constant_expression_p=*/false);
12410   else
12411     t = tsubst (pattern, args, complain, in_decl);
12412
12413   /*  If the Ith argument pack element is a pack expansion, then
12414       the Ith element resulting from the substituting is going to
12415       be a pack expansion as well.  */
12416   if (ith_elem_is_expansion)
12417     t = make_pack_expansion (t, complain);
12418
12419   return t;
12420 }
12421
12422 /* When the unexpanded parameter pack in a fold expression expands to an empty
12423    sequence, the value of the expression is as follows; the program is
12424    ill-formed if the operator is not listed in this table.
12425
12426    &&   true
12427    ||   false
12428    ,    void()  */
12429
12430 tree
12431 expand_empty_fold (tree t, tsubst_flags_t complain)
12432 {
12433   tree_code code = (tree_code)TREE_INT_CST_LOW (TREE_OPERAND (t, 0));
12434   if (!FOLD_EXPR_MODIFY_P (t))
12435     switch (code)
12436       {
12437       case TRUTH_ANDIF_EXPR:
12438         return boolean_true_node;
12439       case TRUTH_ORIF_EXPR:
12440         return boolean_false_node;
12441       case COMPOUND_EXPR:
12442         return void_node;
12443       default:
12444         break;
12445       }
12446
12447   if (complain & tf_error)
12448     error_at (location_of (t),
12449               "fold of empty expansion over %O", code);
12450   return error_mark_node;
12451 }
12452
12453 /* Given a fold-expression T and a current LEFT and RIGHT operand,
12454    form an expression that combines the two terms using the
12455    operator of T. */
12456
12457 static tree
12458 fold_expression (tree t, tree left, tree right, tsubst_flags_t complain)
12459 {
12460   tree op = FOLD_EXPR_OP (t);
12461   tree_code code = (tree_code)TREE_INT_CST_LOW (op);
12462
12463   // Handle compound assignment operators.
12464   if (FOLD_EXPR_MODIFY_P (t))
12465     return build_x_modify_expr (input_location, left, code, right, complain);
12466
12467   warning_sentinel s(warn_parentheses);
12468   switch (code)
12469     {
12470     case COMPOUND_EXPR:
12471       return build_x_compound_expr (input_location, left, right, complain);
12472     default:
12473       return build_x_binary_op (input_location, code,
12474                                 left, TREE_CODE (left),
12475                                 right, TREE_CODE (right),
12476                                 /*overload=*/NULL,
12477                                 complain);
12478     }
12479 }
12480
12481 /* Substitute ARGS into the pack of a fold expression T. */
12482
12483 static inline tree
12484 tsubst_fold_expr_pack (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12485 {
12486   return tsubst_pack_expansion (FOLD_EXPR_PACK (t), args, complain, in_decl);
12487 }
12488
12489 /* Substitute ARGS into the pack of a fold expression T. */
12490
12491 static inline tree
12492 tsubst_fold_expr_init (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12493 {
12494   return tsubst_expr (FOLD_EXPR_INIT (t), args, complain, in_decl, false);
12495 }
12496
12497 /* Expand a PACK of arguments into a grouped as left fold.
12498    Given a pack containing elements A0, A1, ..., An and an
12499    operator @, this builds the expression:
12500
12501       ((A0 @ A1) @ A2) ... @ An
12502
12503    Note that PACK must not be empty.
12504
12505    The operator is defined by the original fold expression T. */
12506
12507 static tree
12508 expand_left_fold (tree t, tree pack, tsubst_flags_t complain)
12509 {
12510   tree left = TREE_VEC_ELT (pack, 0);
12511   for (int i = 1; i < TREE_VEC_LENGTH (pack); ++i)
12512     {
12513       tree right = TREE_VEC_ELT (pack, i);
12514       left = fold_expression (t, left, right, complain);
12515     }
12516   return left;
12517 }
12518
12519 /* Substitute into a unary left fold expression. */
12520
12521 static tree
12522 tsubst_unary_left_fold (tree t, tree args, tsubst_flags_t complain,
12523                         tree in_decl)
12524 {
12525   tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
12526   if (pack == error_mark_node)
12527     return error_mark_node;
12528   if (PACK_EXPANSION_P (pack))
12529     {
12530       tree r = copy_node (t);
12531       FOLD_EXPR_PACK (r) = pack;
12532       return r;
12533     }
12534   if (TREE_VEC_LENGTH (pack) == 0)
12535     return expand_empty_fold (t, complain);
12536   else
12537     return expand_left_fold (t, pack, complain);
12538 }
12539
12540 /* Substitute into a binary left fold expression.
12541
12542    Do ths by building a single (non-empty) vector of argumnts and
12543    building the expression from those elements. */
12544
12545 static tree
12546 tsubst_binary_left_fold (tree t, tree args, tsubst_flags_t complain,
12547                          tree in_decl)
12548 {
12549   tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
12550   if (pack == error_mark_node)
12551     return error_mark_node;
12552   tree init = tsubst_fold_expr_init (t, args, complain, in_decl);
12553   if (init == error_mark_node)
12554     return error_mark_node;
12555
12556   if (PACK_EXPANSION_P (pack))
12557     {
12558       tree r = copy_node (t);
12559       FOLD_EXPR_PACK (r) = pack;
12560       FOLD_EXPR_INIT (r) = init;
12561       return r;
12562     }
12563
12564   tree vec = make_tree_vec (TREE_VEC_LENGTH (pack) + 1);
12565   TREE_VEC_ELT (vec, 0) = init;
12566   for (int i = 0; i < TREE_VEC_LENGTH (pack); ++i)
12567     TREE_VEC_ELT (vec, i + 1) = TREE_VEC_ELT (pack, i);
12568
12569   return expand_left_fold (t, vec, complain);
12570 }
12571
12572 /* Expand a PACK of arguments into a grouped as right fold.
12573    Given a pack containing elementns A0, A1, ..., and an
12574    operator @, this builds the expression:
12575
12576       A0@ ... (An-2 @ (An-1 @ An))
12577
12578    Note that PACK must not be empty.
12579
12580    The operator is defined by the original fold expression T. */
12581
12582 tree
12583 expand_right_fold (tree t, tree pack, tsubst_flags_t complain)
12584 {
12585   // Build the expression.
12586   int n = TREE_VEC_LENGTH (pack);
12587   tree right = TREE_VEC_ELT (pack, n - 1);
12588   for (--n; n != 0; --n)
12589     {
12590       tree left = TREE_VEC_ELT (pack, n - 1);
12591       right = fold_expression (t, left, right, complain);
12592     }
12593   return right;
12594 }
12595
12596 /* Substitute into a unary right fold expression. */
12597
12598 static tree
12599 tsubst_unary_right_fold (tree t, tree args, tsubst_flags_t complain,
12600                          tree in_decl)
12601 {
12602   tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
12603   if (pack == error_mark_node)
12604     return error_mark_node;
12605   if (PACK_EXPANSION_P (pack))
12606     {
12607       tree r = copy_node (t);
12608       FOLD_EXPR_PACK (r) = pack;
12609       return r;
12610     }
12611   if (TREE_VEC_LENGTH (pack) == 0)
12612     return expand_empty_fold (t, complain);
12613   else
12614     return expand_right_fold (t, pack, complain);
12615 }
12616
12617 /* Substitute into a binary right fold expression.
12618
12619    Do ths by building a single (non-empty) vector of arguments and
12620    building the expression from those elements. */
12621
12622 static tree
12623 tsubst_binary_right_fold (tree t, tree args, tsubst_flags_t complain,
12624                          tree in_decl)
12625 {
12626   tree pack = tsubst_fold_expr_pack (t, args, complain, in_decl);
12627   if (pack == error_mark_node)
12628     return error_mark_node;
12629   tree init = tsubst_fold_expr_init (t, args, complain, in_decl);
12630   if (init == error_mark_node)
12631     return error_mark_node;
12632
12633   if (PACK_EXPANSION_P (pack))
12634     {
12635       tree r = copy_node (t);
12636       FOLD_EXPR_PACK (r) = pack;
12637       FOLD_EXPR_INIT (r) = init;
12638       return r;
12639     }
12640
12641   int n = TREE_VEC_LENGTH (pack);
12642   tree vec = make_tree_vec (n + 1);
12643   for (int i = 0; i < n; ++i)
12644     TREE_VEC_ELT (vec, i) = TREE_VEC_ELT (pack, i);
12645   TREE_VEC_ELT (vec, n) = init;
12646
12647   return expand_right_fold (t, vec, complain);
12648 }
12649
12650 /* Walk through the pattern of a pack expansion, adding everything in
12651    local_specializations to a list.  */
12652
12653 class el_data
12654 {
12655 public:
12656   hash_set<tree> internal;
12657   tree extra;
12658   tsubst_flags_t complain;
12659
12660   el_data (tsubst_flags_t c)
12661     : extra (NULL_TREE), complain (c) {}
12662 };
12663 static tree
12664 extract_locals_r (tree *tp, int */*walk_subtrees*/, void *data_)
12665 {
12666   el_data &data = *reinterpret_cast<el_data*>(data_);
12667   tree *extra = &data.extra;
12668   tsubst_flags_t complain = data.complain;
12669
12670   if (TYPE_P (*tp) && typedef_variant_p (*tp))
12671     /* Remember local typedefs (85214).  */
12672     tp = &TYPE_NAME (*tp);
12673
12674   if (TREE_CODE (*tp) == DECL_EXPR)
12675     data.internal.add (DECL_EXPR_DECL (*tp));
12676   else if (tree spec = retrieve_local_specialization (*tp))
12677     {
12678       if (data.internal.contains (*tp))
12679         /* Don't mess with variables declared within the pattern.  */
12680         return NULL_TREE;
12681       if (TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK)
12682         {
12683           /* Maybe pull out the PARM_DECL for a partial instantiation.  */
12684           tree args = ARGUMENT_PACK_ARGS (spec);
12685           if (TREE_VEC_LENGTH (args) == 1)
12686             {
12687               tree elt = TREE_VEC_ELT (args, 0);
12688               if (PACK_EXPANSION_P (elt))
12689                 elt = PACK_EXPANSION_PATTERN (elt);
12690               if (DECL_PACK_P (elt))
12691                 spec = elt;
12692             }
12693           if (TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK)
12694             {
12695               /* Handle lambda capture here, since we aren't doing any
12696                  substitution now, and so tsubst_copy won't call
12697                  process_outer_var_ref.  */
12698               tree args = ARGUMENT_PACK_ARGS (spec);
12699               int len = TREE_VEC_LENGTH (args);
12700               for (int i = 0; i < len; ++i)
12701                 {
12702                   tree arg = TREE_VEC_ELT (args, i);
12703                   tree carg = arg;
12704                   if (outer_automatic_var_p (arg))
12705                     carg = process_outer_var_ref (arg, complain);
12706                   if (carg != arg)
12707                     {
12708                       /* Make a new NONTYPE_ARGUMENT_PACK of the capture
12709                          proxies.  */
12710                       if (i == 0)
12711                         {
12712                           spec = copy_node (spec);
12713                           args = copy_node (args);
12714                           SET_ARGUMENT_PACK_ARGS (spec, args);
12715                           register_local_specialization (spec, *tp);
12716                         }
12717                       TREE_VEC_ELT (args, i) = carg;
12718                     }
12719                 }
12720             }
12721         }
12722       if (outer_automatic_var_p (spec))
12723         spec = process_outer_var_ref (spec, complain);
12724       *extra = tree_cons (*tp, spec, *extra);
12725     }
12726   return NULL_TREE;
12727 }
12728 static tree
12729 extract_local_specs (tree pattern, tsubst_flags_t complain)
12730 {
12731   el_data data (complain);
12732   cp_walk_tree_without_duplicates (&pattern, extract_locals_r, &data);
12733   return data.extra;
12734 }
12735
12736 /* Extract any uses of local_specializations from PATTERN and add them to ARGS
12737    for use in PACK_EXPANSION_EXTRA_ARGS.  */
12738
12739 tree
12740 build_extra_args (tree pattern, tree args, tsubst_flags_t complain)
12741 {
12742   tree extra = args;
12743   if (local_specializations)
12744     if (tree locals = extract_local_specs (pattern, complain))
12745       extra = tree_cons (NULL_TREE, extra, locals);
12746   return extra;
12747 }
12748
12749 /* Apply any local specializations from PACK_EXPANSION_EXTRA_ARGS and add the
12750    normal template args to ARGS.  */
12751
12752 tree
12753 add_extra_args (tree extra, tree args)
12754 {
12755   if (extra && TREE_CODE (extra) == TREE_LIST)
12756     {
12757       for (tree elt = TREE_CHAIN (extra); elt; elt = TREE_CHAIN (elt))
12758         {
12759           /* The partial instantiation involved local declarations collected in
12760              extract_local_specs; map from the general template to our local
12761              context.  */
12762           tree gen = TREE_PURPOSE (elt);
12763           tree inst = TREE_VALUE (elt);
12764           if (DECL_P (inst))
12765             if (tree local = retrieve_local_specialization (inst))
12766               inst = local;
12767           /* else inst is already a full instantiation of the pack.  */
12768           register_local_specialization (inst, gen);
12769         }
12770       gcc_assert (!TREE_PURPOSE (extra));
12771       extra = TREE_VALUE (extra);
12772     }
12773 #if 1
12774   /* I think we should always be able to substitute dependent args into the
12775      pattern.  If that turns out to be incorrect in some cases, enable the
12776      alternate code (and add complain/in_decl parms to this function).  */
12777   gcc_checking_assert (!uses_template_parms (extra));
12778 #else
12779   if (!uses_template_parms (extra))
12780     {
12781       gcc_unreachable ();
12782       extra = tsubst_template_args (extra, args, complain, in_decl);
12783       args = add_outermost_template_args (args, extra);
12784     }
12785   else
12786 #endif
12787     args = add_to_template_args (extra, args);
12788   return args;
12789 }
12790
12791 /* Substitute ARGS into T, which is an pack expansion
12792    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
12793    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
12794    (if only a partial substitution could be performed) or
12795    ERROR_MARK_NODE if there was an error.  */
12796 tree
12797 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
12798                        tree in_decl)
12799 {
12800   tree pattern;
12801   tree pack, packs = NULL_TREE;
12802   bool unsubstituted_packs = false;
12803   int i, len = -1;
12804   tree result;
12805   bool need_local_specializations = false;
12806   int levels;
12807
12808   gcc_assert (PACK_EXPANSION_P (t));
12809   pattern = PACK_EXPANSION_PATTERN (t);
12810
12811   /* Add in any args remembered from an earlier partial instantiation.  */
12812   args = add_extra_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
12813
12814   levels = TMPL_ARGS_DEPTH (args);
12815
12816   /* Determine the argument packs that will instantiate the parameter
12817      packs used in the expansion expression. While we're at it,
12818      compute the number of arguments to be expanded and make sure it
12819      is consistent.  */
12820   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
12821        pack = TREE_CHAIN (pack))
12822     {
12823       tree parm_pack = TREE_VALUE (pack);
12824       tree arg_pack = NULL_TREE;
12825       tree orig_arg = NULL_TREE;
12826       int level = 0;
12827
12828       if (TREE_CODE (parm_pack) == BASES)
12829         {
12830           gcc_assert (parm_pack == pattern);
12831           if (BASES_DIRECT (parm_pack))
12832             return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
12833                                                         args, complain,
12834                                                         in_decl, false),
12835                                            complain);
12836           else
12837             return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
12838                                                  args, complain, in_decl,
12839                                                  false), complain);
12840         }
12841       else if (builtin_pack_call_p (parm_pack))
12842         {
12843           if (parm_pack != pattern)
12844             {
12845               if (complain & tf_error)
12846                 sorry ("%qE is not the entire pattern of the pack expansion",
12847                        parm_pack);
12848               return error_mark_node;
12849             }
12850           return expand_builtin_pack_call (parm_pack, args,
12851                                            complain, in_decl);
12852         }
12853       else if (TREE_CODE (parm_pack) == PARM_DECL)
12854         {
12855           /* We know we have correct local_specializations if this
12856              expansion is at function scope, or if we're dealing with a
12857              local parameter in a requires expression; for the latter,
12858              tsubst_requires_expr set it up appropriately.  */
12859           if (PACK_EXPANSION_LOCAL_P (t) || CONSTRAINT_VAR_P (parm_pack))
12860             arg_pack = retrieve_local_specialization (parm_pack);
12861           else
12862             /* We can't rely on local_specializations for a parameter
12863                name used later in a function declaration (such as in a
12864                late-specified return type).  Even if it exists, it might
12865                have the wrong value for a recursive call.  */
12866             need_local_specializations = true;
12867
12868           if (!arg_pack)
12869             {
12870               /* This parameter pack was used in an unevaluated context.  Just
12871                  make a dummy decl, since it's only used for its type.  */
12872               ++cp_unevaluated_operand;
12873               arg_pack = tsubst_decl (parm_pack, args, complain);
12874               --cp_unevaluated_operand;
12875               if (arg_pack && DECL_PACK_P (arg_pack))
12876                 /* Partial instantiation of the parm_pack, we can't build
12877                    up an argument pack yet.  */
12878                 arg_pack = NULL_TREE;
12879               else
12880                 arg_pack = make_fnparm_pack (arg_pack);
12881             }
12882           else if (DECL_PACK_P (arg_pack))
12883             /* This argument pack isn't fully instantiated yet.  */
12884             arg_pack = NULL_TREE;
12885         }
12886       else if (is_capture_proxy (parm_pack))
12887         {
12888           arg_pack = retrieve_local_specialization (parm_pack);
12889           if (DECL_PACK_P (arg_pack))
12890             arg_pack = NULL_TREE;
12891         }
12892       else
12893         {
12894           int idx;
12895           template_parm_level_and_index (parm_pack, &level, &idx);
12896           if (level <= levels)
12897             arg_pack = TMPL_ARG (args, level, idx);
12898
12899           if (arg_pack && TREE_CODE (arg_pack) == TEMPLATE_TYPE_PARM
12900               && TEMPLATE_TYPE_PARAMETER_PACK (arg_pack))
12901             arg_pack = NULL_TREE;
12902         }
12903
12904       orig_arg = arg_pack;
12905       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
12906         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
12907
12908       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
12909         /* This can only happen if we forget to expand an argument
12910            pack somewhere else. Just return an error, silently.  */
12911         {
12912           result = make_tree_vec (1);
12913           TREE_VEC_ELT (result, 0) = error_mark_node;
12914           return result;
12915         }
12916
12917       if (arg_pack)
12918         {
12919           int my_len = 
12920             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
12921
12922           /* Don't bother trying to do a partial substitution with
12923              incomplete packs; we'll try again after deduction.  */
12924           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
12925             return t;
12926
12927           if (len < 0)
12928             len = my_len;
12929           else if (len != my_len)
12930             {
12931               if (!(complain & tf_error))
12932                 /* Fail quietly.  */;
12933               else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
12934                 error ("mismatched argument pack lengths while expanding %qT",
12935                        pattern);
12936               else
12937                 error ("mismatched argument pack lengths while expanding %qE",
12938                        pattern);
12939               return error_mark_node;
12940             }
12941
12942           /* Keep track of the parameter packs and their corresponding
12943              argument packs.  */
12944           packs = tree_cons (parm_pack, arg_pack, packs);
12945           TREE_TYPE (packs) = orig_arg;
12946         }
12947       else
12948         {
12949           /* We can't substitute for this parameter pack.  We use a flag as
12950              well as the missing_level counter because function parameter
12951              packs don't have a level.  */
12952           gcc_assert (processing_template_decl || is_auto (parm_pack));
12953           unsubstituted_packs = true;
12954         }
12955     }
12956
12957   /* If the expansion is just T..., return the matching argument pack, unless
12958      we need to call convert_from_reference on all the elements.  This is an
12959      important optimization; see c++/68422.  */
12960   if (!unsubstituted_packs
12961       && TREE_PURPOSE (packs) == pattern)
12962     {
12963       tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
12964
12965       /* If the argument pack is a single pack expansion, pull it out.  */
12966       if (TREE_VEC_LENGTH (args) == 1
12967           && pack_expansion_args_count (args))
12968         return TREE_VEC_ELT (args, 0);
12969
12970       /* Types need no adjustment, nor does sizeof..., and if we still have
12971          some pack expansion args we won't do anything yet.  */
12972       if (TREE_CODE (t) == TYPE_PACK_EXPANSION
12973           || PACK_EXPANSION_SIZEOF_P (t)
12974           || pack_expansion_args_count (args))
12975         return args;
12976       /* Also optimize expression pack expansions if we can tell that the
12977          elements won't have reference type.  */
12978       tree type = TREE_TYPE (pattern);
12979       if (type && !TYPE_REF_P (type)
12980           && !PACK_EXPANSION_P (type)
12981           && !WILDCARD_TYPE_P (type))
12982         return args;
12983       /* Otherwise use the normal path so we get convert_from_reference.  */
12984     }
12985
12986   /* We cannot expand this expansion expression, because we don't have
12987      all of the argument packs we need.  */
12988   if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
12989     {
12990       /* We got some full packs, but we can't substitute them in until we
12991          have values for all the packs.  So remember these until then.  */
12992
12993       t = make_pack_expansion (pattern, complain);
12994       PACK_EXPANSION_EXTRA_ARGS (t)
12995         = build_extra_args (pattern, args, complain);
12996       return t;
12997     }
12998
12999   /* If NEED_LOCAL_SPECIALIZATIONS then we're in a late-specified return
13000      type, so create our own local specializations map; the current map is
13001      either NULL or (in the case of recursive unification) might have
13002      bindings that we don't want to use or alter.  */
13003   local_specialization_stack lss (need_local_specializations
13004                                   ? lss_blank : lss_nop);
13005
13006   if (unsubstituted_packs)
13007     {
13008       /* There were no real arguments, we're just replacing a parameter
13009          pack with another version of itself. Substitute into the
13010          pattern and return a PACK_EXPANSION_*. The caller will need to
13011          deal with that.  */
13012       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
13013         t = tsubst_expr (pattern, args, complain, in_decl,
13014                          /*integral_constant_expression_p=*/false);
13015       else
13016         t = tsubst (pattern, args, complain, in_decl);
13017       t = make_pack_expansion (t, complain);
13018       return t;
13019     }
13020
13021   gcc_assert (len >= 0);
13022
13023   /* For each argument in each argument pack, substitute into the
13024      pattern.  */
13025   result = make_tree_vec (len);
13026   tree elem_args = copy_template_args (args);
13027   for (i = 0; i < len; ++i)
13028     {
13029       t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
13030                                                     i,
13031                                                     elem_args, complain,
13032                                                     in_decl);
13033       TREE_VEC_ELT (result, i) = t;
13034       if (t == error_mark_node)
13035         {
13036           result = error_mark_node;
13037           break;
13038         }
13039     }
13040
13041   /* Update ARGS to restore the substitution from parameter packs to
13042      their argument packs.  */
13043   for (pack = packs; pack; pack = TREE_CHAIN (pack))
13044     {
13045       tree parm = TREE_PURPOSE (pack);
13046
13047       if (TREE_CODE (parm) == PARM_DECL
13048           || VAR_P (parm)
13049           || TREE_CODE (parm) == FIELD_DECL)
13050         register_local_specialization (TREE_TYPE (pack), parm);
13051       else
13052         {
13053           int idx, level;
13054
13055           if (TREE_VALUE (pack) == NULL_TREE)
13056             continue;
13057
13058           template_parm_level_and_index (parm, &level, &idx);
13059
13060           /* Update the corresponding argument.  */
13061           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13062             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
13063               TREE_TYPE (pack);
13064           else
13065             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
13066         }
13067     }
13068
13069   /* If the dependent pack arguments were such that we end up with only a
13070      single pack expansion again, there's no need to keep it in a TREE_VEC.  */
13071   if (len == 1 && TREE_CODE (result) == TREE_VEC
13072       && PACK_EXPANSION_P (TREE_VEC_ELT (result, 0)))
13073     return TREE_VEC_ELT (result, 0);
13074
13075   return result;
13076 }
13077
13078 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
13079    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
13080    parameter packs; all parms generated from a function parameter pack will
13081    have the same DECL_PARM_INDEX.  */
13082
13083 tree
13084 get_pattern_parm (tree parm, tree tmpl)
13085 {
13086   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
13087   tree patparm;
13088
13089   if (DECL_ARTIFICIAL (parm))
13090     {
13091       for (patparm = DECL_ARGUMENTS (pattern);
13092            patparm; patparm = DECL_CHAIN (patparm))
13093         if (DECL_ARTIFICIAL (patparm)
13094             && DECL_NAME (parm) == DECL_NAME (patparm))
13095           break;
13096     }
13097   else
13098     {
13099       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
13100       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
13101       gcc_assert (DECL_PARM_INDEX (patparm)
13102                   == DECL_PARM_INDEX (parm));
13103     }
13104
13105   return patparm;
13106 }
13107
13108 /* Make an argument pack out of the TREE_VEC VEC.  */
13109
13110 static tree
13111 make_argument_pack (tree vec)
13112 {
13113   tree pack;
13114
13115   if (TYPE_P (TREE_VEC_ELT (vec, 0)))
13116     pack = cxx_make_type (TYPE_ARGUMENT_PACK);
13117   else
13118     {
13119       pack = make_node (NONTYPE_ARGUMENT_PACK);
13120       TREE_CONSTANT (pack) = 1;
13121     }
13122   SET_ARGUMENT_PACK_ARGS (pack, vec);
13123   return pack;
13124 }
13125
13126 /* Return an exact copy of template args T that can be modified
13127    independently.  */
13128
13129 static tree
13130 copy_template_args (tree t)
13131 {
13132   if (t == error_mark_node)
13133     return t;
13134
13135   int len = TREE_VEC_LENGTH (t);
13136   tree new_vec = make_tree_vec (len);
13137
13138   for (int i = 0; i < len; ++i)
13139     {
13140       tree elt = TREE_VEC_ELT (t, i);
13141       if (elt && TREE_CODE (elt) == TREE_VEC)
13142         elt = copy_template_args (elt);
13143       TREE_VEC_ELT (new_vec, i) = elt;
13144     }
13145
13146   NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_vec)
13147     = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
13148
13149   return new_vec;
13150 }
13151
13152 /* Substitute ARGS into the *_ARGUMENT_PACK orig_arg.  */
13153
13154 tree
13155 tsubst_argument_pack (tree orig_arg, tree args, tsubst_flags_t complain,
13156                       tree in_decl)
13157 {
13158   /* Substitute into each of the arguments.  */
13159   tree new_arg = TYPE_P (orig_arg)
13160     ? cxx_make_type (TREE_CODE (orig_arg))
13161     : make_node (TREE_CODE (orig_arg));
13162
13163   tree pack_args = tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
13164                                          args, complain, in_decl);
13165   if (pack_args == error_mark_node)
13166     new_arg = error_mark_node;
13167   else
13168     SET_ARGUMENT_PACK_ARGS (new_arg, pack_args);
13169
13170   if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK)
13171     TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
13172
13173   return new_arg;
13174 }
13175
13176 /* Substitute ARGS into the vector or list of template arguments T.  */
13177
13178 tree
13179 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
13180 {
13181   tree orig_t = t;
13182   int len, need_new = 0, i, expanded_len_adjust = 0, out;
13183   tree *elts;
13184
13185   if (t == error_mark_node)
13186     return error_mark_node;
13187
13188   len = TREE_VEC_LENGTH (t);
13189   elts = XALLOCAVEC (tree, len);
13190
13191   for (i = 0; i < len; i++)
13192     {
13193       tree orig_arg = TREE_VEC_ELT (t, i);
13194       tree new_arg;
13195
13196       if (TREE_CODE (orig_arg) == TREE_VEC)
13197         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
13198       else if (PACK_EXPANSION_P (orig_arg))
13199         {
13200           /* Substitute into an expansion expression.  */
13201           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
13202
13203           if (TREE_CODE (new_arg) == TREE_VEC)
13204             /* Add to the expanded length adjustment the number of
13205                expanded arguments. We subtract one from this
13206                measurement, because the argument pack expression
13207                itself is already counted as 1 in
13208                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
13209                the argument pack is empty.  */
13210             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
13211         }
13212       else if (ARGUMENT_PACK_P (orig_arg))
13213         new_arg = tsubst_argument_pack (orig_arg, args, complain, in_decl);
13214       else
13215         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
13216
13217       if (new_arg == error_mark_node)
13218         return error_mark_node;
13219
13220       elts[i] = new_arg;
13221       if (new_arg != orig_arg)
13222         need_new = 1;
13223     }
13224
13225   if (!need_new)
13226     return t;
13227
13228   /* Make space for the expanded arguments coming from template
13229      argument packs.  */
13230   t = make_tree_vec (len + expanded_len_adjust);
13231   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
13232      arguments for a member template.
13233      In that case each TREE_VEC in ORIG_T represents a level of template
13234      arguments, and ORIG_T won't carry any non defaulted argument count.
13235      It will rather be the nested TREE_VECs that will carry one.
13236      In other words, ORIG_T carries a non defaulted argument count only
13237      if it doesn't contain any nested TREE_VEC.  */
13238   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
13239     {
13240       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
13241       count += expanded_len_adjust;
13242       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
13243     }
13244   for (i = 0, out = 0; i < len; i++)
13245     {
13246       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
13247            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
13248           && TREE_CODE (elts[i]) == TREE_VEC)
13249         {
13250           int idx;
13251
13252           /* Now expand the template argument pack "in place".  */
13253           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
13254             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
13255         }
13256       else
13257         {
13258           TREE_VEC_ELT (t, out) = elts[i];
13259           out++;
13260         }
13261     }
13262
13263   return t;
13264 }
13265
13266 /* Substitute ARGS into one level PARMS of template parameters.  */
13267
13268 static tree
13269 tsubst_template_parms_level (tree parms, tree args, tsubst_flags_t complain)
13270 {
13271   if (parms == error_mark_node)
13272     return error_mark_node;
13273
13274   tree new_vec = make_tree_vec (TREE_VEC_LENGTH (parms));
13275
13276   for (int i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
13277     {
13278       tree tuple = TREE_VEC_ELT (parms, i);
13279
13280       if (tuple == error_mark_node)
13281         continue;
13282
13283       TREE_VEC_ELT (new_vec, i) =
13284         tsubst_template_parm (tuple, args, complain);
13285     }
13286
13287   return new_vec;
13288 }
13289
13290 /* Return the result of substituting ARGS into the template parameters
13291    given by PARMS.  If there are m levels of ARGS and m + n levels of
13292    PARMS, then the result will contain n levels of PARMS.  For
13293    example, if PARMS is `template <class T> template <class U>
13294    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
13295    result will be `template <int*, double, class V>'.  */
13296
13297 static tree
13298 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
13299 {
13300   tree r = NULL_TREE;
13301   tree* new_parms;
13302
13303   /* When substituting into a template, we must set
13304      PROCESSING_TEMPLATE_DECL as the template parameters may be
13305      dependent if they are based on one-another, and the dependency
13306      predicates are short-circuit outside of templates.  */
13307   ++processing_template_decl;
13308
13309   for (new_parms = &r;
13310        parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
13311        new_parms = &(TREE_CHAIN (*new_parms)),
13312          parms = TREE_CHAIN (parms))
13313     {
13314       tree new_vec = tsubst_template_parms_level (TREE_VALUE (parms),
13315                                                   args, complain);
13316       *new_parms =
13317         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
13318                              - TMPL_ARGS_DEPTH (args)),
13319                    new_vec, NULL_TREE);
13320       TEMPLATE_PARMS_CONSTRAINTS (*new_parms)
13321         = TEMPLATE_PARMS_CONSTRAINTS (parms);
13322     }
13323
13324   --processing_template_decl;
13325
13326   return r;
13327 }
13328
13329 /* Return the result of substituting ARGS into one template parameter
13330    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
13331    parameter and which TREE_PURPOSE is the default argument of the
13332    template parameter.  */
13333
13334 static tree
13335 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
13336 {
13337   tree default_value, parm_decl;
13338
13339   if (args == NULL_TREE
13340       || t == NULL_TREE
13341       || t == error_mark_node)
13342     return t;
13343
13344   gcc_assert (TREE_CODE (t) == TREE_LIST);
13345
13346   default_value = TREE_PURPOSE (t);
13347   parm_decl = TREE_VALUE (t);
13348   tree constraint = TEMPLATE_PARM_CONSTRAINTS (t);
13349
13350   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
13351   if (TREE_CODE (parm_decl) == PARM_DECL
13352       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
13353     parm_decl = error_mark_node;
13354   default_value = tsubst_template_arg (default_value, args,
13355                                        complain, NULL_TREE);
13356   constraint = tsubst_constraint (constraint, args, complain, NULL_TREE);
13357
13358   tree r = build_tree_list (default_value, parm_decl);
13359   TEMPLATE_PARM_CONSTRAINTS (r) = constraint;
13360   return r;
13361 }
13362
13363 /* Substitute the ARGS into the indicated aggregate (or enumeration)
13364    type T.  If T is not an aggregate or enumeration type, it is
13365    handled as if by tsubst.  IN_DECL is as for tsubst.  If
13366    ENTERING_SCOPE is nonzero, T is the context for a template which
13367    we are presently tsubst'ing.  Return the substituted value.  */
13368
13369 static tree
13370 tsubst_aggr_type (tree t,
13371                   tree args,
13372                   tsubst_flags_t complain,
13373                   tree in_decl,
13374                   int entering_scope)
13375 {
13376   if (t == NULL_TREE)
13377     return NULL_TREE;
13378
13379   switch (TREE_CODE (t))
13380     {
13381     case RECORD_TYPE:
13382       if (TYPE_PTRMEMFUNC_P (t))
13383         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
13384
13385       /* Fall through.  */
13386     case ENUMERAL_TYPE:
13387     case UNION_TYPE:
13388       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
13389         {
13390           tree argvec;
13391           tree context;
13392           tree r;
13393
13394           /* In "sizeof(X<I>)" we need to evaluate "I".  */
13395           cp_evaluated ev;
13396
13397           /* First, determine the context for the type we are looking
13398              up.  */
13399           context = TYPE_CONTEXT (t);
13400           if (context && TYPE_P (context))
13401             {
13402               context = tsubst_aggr_type (context, args, complain,
13403                                           in_decl, /*entering_scope=*/1);
13404               /* If context is a nested class inside a class template,
13405                  it may still need to be instantiated (c++/33959).  */
13406               context = complete_type (context);
13407             }
13408
13409           /* Then, figure out what arguments are appropriate for the
13410              type we are trying to find.  For example, given:
13411
13412                template <class T> struct S;
13413                template <class T, class U> void f(T, U) { S<U> su; }
13414
13415              and supposing that we are instantiating f<int, double>,
13416              then our ARGS will be {int, double}, but, when looking up
13417              S we only want {double}.  */
13418           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
13419                                          complain, in_decl);
13420           if (argvec == error_mark_node)
13421             r = error_mark_node;
13422           else if (cxx_dialect >= cxx17 && dependent_scope_p (context))
13423             {
13424               /* See maybe_dependent_member_ref.  */
13425               tree name = TYPE_IDENTIFIER (t);
13426               tree fullname = name;
13427               if (instantiates_primary_template_p (t))
13428                 fullname = build_nt (TEMPLATE_ID_EXPR, name,
13429                                      INNERMOST_TEMPLATE_ARGS (argvec));
13430               return build_typename_type (context, name, fullname,
13431                                           typename_type);
13432             }
13433           else
13434             {
13435               r = lookup_template_class (t, argvec, in_decl, context,
13436                                          entering_scope, complain);
13437               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
13438             }
13439
13440           return r;
13441         }
13442       else
13443         /* This is not a template type, so there's nothing to do.  */
13444         return t;
13445
13446     default:
13447       return tsubst (t, args, complain, in_decl);
13448     }
13449 }
13450
13451 static GTY((cache)) decl_tree_cache_map *defarg_inst;
13452
13453 /* Substitute into the default argument ARG (a default argument for
13454    FN), which has the indicated TYPE.  */
13455
13456 tree
13457 tsubst_default_argument (tree fn, int parmnum, tree type, tree arg,
13458                          tsubst_flags_t complain)
13459 {
13460   int errs = errorcount + sorrycount;
13461
13462   /* This can happen in invalid code.  */
13463   if (TREE_CODE (arg) == DEFERRED_PARSE)
13464     return arg;
13465
13466   /* Shortcut {}.  */
13467   if (BRACE_ENCLOSED_INITIALIZER_P (arg)
13468       && CONSTRUCTOR_NELTS (arg) == 0)
13469     return arg;
13470
13471   tree parm = FUNCTION_FIRST_USER_PARM (fn);
13472   parm = chain_index (parmnum, parm);
13473   tree parmtype = TREE_TYPE (parm);
13474   if (DECL_BY_REFERENCE (parm))
13475     parmtype = TREE_TYPE (parmtype);
13476   if (parmtype == error_mark_node)
13477     return error_mark_node;
13478
13479   gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, parmtype));
13480
13481   tree *slot;
13482   if (defarg_inst && (slot = defarg_inst->get (parm)))
13483     return *slot;
13484
13485   /* This default argument came from a template.  Instantiate the
13486      default argument here, not in tsubst.  In the case of
13487      something like:
13488
13489        template <class T>
13490        struct S {
13491          static T t();
13492          void f(T = t());
13493        };
13494
13495      we must be careful to do name lookup in the scope of S<T>,
13496      rather than in the current class.  */
13497   push_to_top_level ();
13498   push_access_scope (fn);
13499   push_deferring_access_checks (dk_no_deferred);
13500   start_lambda_scope (parm);
13501
13502   /* The default argument expression may cause implicitly defined
13503      member functions to be synthesized, which will result in garbage
13504      collection.  We must treat this situation as if we were within
13505      the body of function so as to avoid collecting live data on the
13506      stack.  */
13507   ++function_depth;
13508   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
13509                      complain, NULL_TREE,
13510                      /*integral_constant_expression_p=*/false);
13511   --function_depth;
13512
13513   finish_lambda_scope ();
13514
13515   /* Make sure the default argument is reasonable.  */
13516   arg = check_default_argument (type, arg, complain);
13517
13518   if (errorcount+sorrycount > errs
13519       && (complain & tf_warning_or_error))
13520     inform (input_location,
13521             "  when instantiating default argument for call to %qD", fn);
13522
13523   pop_deferring_access_checks ();
13524   pop_access_scope (fn);
13525   pop_from_top_level ();
13526
13527   if (arg != error_mark_node && !cp_unevaluated_operand)
13528     {
13529       if (!defarg_inst)
13530         defarg_inst = decl_tree_cache_map::create_ggc (37);
13531       defarg_inst->put (parm, arg);
13532     }
13533
13534   return arg;
13535 }
13536
13537 /* Substitute into all the default arguments for FN.  */
13538
13539 static void
13540 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
13541 {
13542   tree arg;
13543   tree tmpl_args;
13544
13545   tmpl_args = DECL_TI_ARGS (fn);
13546
13547   /* If this function is not yet instantiated, we certainly don't need
13548      its default arguments.  */
13549   if (uses_template_parms (tmpl_args))
13550     return;
13551   /* Don't do this again for clones.  */
13552   if (DECL_CLONED_FUNCTION_P (fn))
13553     return;
13554
13555   int i = 0;
13556   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
13557        arg;
13558        arg = TREE_CHAIN (arg), ++i)
13559     if (TREE_PURPOSE (arg))
13560       TREE_PURPOSE (arg) = tsubst_default_argument (fn, i,
13561                                                     TREE_VALUE (arg),
13562                                                     TREE_PURPOSE (arg),
13563                                                     complain);
13564 }
13565
13566 /* Hash table mapping a FUNCTION_DECL to its dependent explicit-specifier.  */
13567 static GTY((cache)) decl_tree_cache_map *explicit_specifier_map;
13568
13569 /* Store a pair to EXPLICIT_SPECIFIER_MAP.  */
13570
13571 void
13572 store_explicit_specifier (tree v, tree t)
13573 {
13574   if (!explicit_specifier_map)
13575     explicit_specifier_map = decl_tree_cache_map::create_ggc (37);
13576   DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P (v) = true;
13577   explicit_specifier_map->put (v, t);
13578 }
13579
13580 /* Lookup an element in EXPLICIT_SPECIFIER_MAP.  */
13581
13582 static tree
13583 lookup_explicit_specifier (tree v)
13584 {
13585   return *explicit_specifier_map->get (v);
13586 }
13587
13588 /* Given T, a FUNCTION_TYPE or METHOD_TYPE, construct and return a corresponding
13589    FUNCTION_TYPE or METHOD_TYPE whose return type is RETURN_TYPE, argument types
13590    are ARG_TYPES, and exception specification is RAISES, and otherwise is
13591    identical to T.  */
13592
13593 static tree
13594 rebuild_function_or_method_type (tree t, tree return_type, tree arg_types,
13595                                  tree raises, tsubst_flags_t complain)
13596 {
13597   gcc_assert (FUNC_OR_METHOD_TYPE_P (t));
13598
13599   tree new_type;
13600   if (TREE_CODE (t) == FUNCTION_TYPE)
13601     {
13602       new_type = build_function_type (return_type, arg_types);
13603       new_type = apply_memfn_quals (new_type, type_memfn_quals (t));
13604     }
13605   else
13606     {
13607       tree r = TREE_TYPE (TREE_VALUE (arg_types));
13608       /* Don't pick up extra function qualifiers from the basetype.  */
13609       r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
13610       if (! MAYBE_CLASS_TYPE_P (r))
13611         {
13612           /* [temp.deduct]
13613
13614              Type deduction may fail for any of the following
13615              reasons:
13616
13617              -- Attempting to create "pointer to member of T" when T
13618              is not a class type.  */
13619           if (complain & tf_error)
13620             error ("creating pointer to member function of non-class type %qT",
13621                    r);
13622           return error_mark_node;
13623         }
13624
13625       new_type = build_method_type_directly (r, return_type,
13626                                              TREE_CHAIN (arg_types));
13627     }
13628   new_type = cp_build_type_attribute_variant (new_type, TYPE_ATTRIBUTES (t));
13629
13630   cp_ref_qualifier rqual = type_memfn_rqual (t);
13631   bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
13632   return build_cp_fntype_variant (new_type, rqual, raises, late_return_type_p);
13633 }
13634
13635 /* Check if the function type of DECL, a FUNCTION_DECL, agrees with the type of
13636    each of its formal parameters.  If there is a disagreement then rebuild
13637    DECL's function type according to its formal parameter types, as part of a
13638    resolution for Core issues 1001/1322.  */
13639
13640 static void
13641 maybe_rebuild_function_decl_type (tree decl)
13642 {
13643   bool function_type_needs_rebuilding = false;
13644   if (tree parm_list = FUNCTION_FIRST_USER_PARM (decl))
13645     {
13646       tree parm_type_list = FUNCTION_FIRST_USER_PARMTYPE (decl);
13647       while (parm_type_list && parm_type_list != void_list_node)
13648         {
13649           tree parm_type = TREE_VALUE (parm_type_list);
13650           tree formal_parm_type_unqual = strip_top_quals (TREE_TYPE (parm_list));
13651           if (!same_type_p (parm_type, formal_parm_type_unqual))
13652             {
13653               function_type_needs_rebuilding = true;
13654               break;
13655             }
13656
13657           parm_list = DECL_CHAIN (parm_list);
13658           parm_type_list = TREE_CHAIN (parm_type_list);
13659         }
13660     }
13661
13662   if (!function_type_needs_rebuilding)
13663     return;
13664
13665   const tree fntype = TREE_TYPE (decl);
13666   tree parm_list = DECL_ARGUMENTS (decl);
13667   tree old_parm_type_list = TYPE_ARG_TYPES (fntype);
13668   tree new_parm_type_list = NULL_TREE;
13669   tree *q = &new_parm_type_list;
13670   for (int skip = num_artificial_parms_for (decl); skip > 0; skip--)
13671     {
13672       *q = copy_node (old_parm_type_list);
13673       parm_list = DECL_CHAIN (parm_list);
13674       old_parm_type_list = TREE_CHAIN (old_parm_type_list);
13675       q = &TREE_CHAIN (*q);
13676     }
13677   while (old_parm_type_list && old_parm_type_list != void_list_node)
13678     {
13679       *q = copy_node (old_parm_type_list);
13680       tree *new_parm_type = &TREE_VALUE (*q);
13681       tree formal_parm_type_unqual = strip_top_quals (TREE_TYPE (parm_list));
13682       if (!same_type_p (*new_parm_type, formal_parm_type_unqual))
13683         *new_parm_type = formal_parm_type_unqual;
13684
13685       parm_list = DECL_CHAIN (parm_list);
13686       old_parm_type_list = TREE_CHAIN (old_parm_type_list);
13687       q = &TREE_CHAIN (*q);
13688     }
13689   if (old_parm_type_list == void_list_node)
13690     *q = void_list_node;
13691
13692   TREE_TYPE (decl)
13693     = rebuild_function_or_method_type (fntype,
13694                                        TREE_TYPE (fntype), new_parm_type_list,
13695                                        TYPE_RAISES_EXCEPTIONS (fntype), tf_none);
13696 }
13697
13698 /* Subroutine of tsubst_decl for the case when T is a FUNCTION_DECL.  */
13699
13700 static tree
13701 tsubst_function_decl (tree t, tree args, tsubst_flags_t complain,
13702                       tree lambda_fntype)
13703 {
13704   tree gen_tmpl, argvec;
13705   hashval_t hash = 0;
13706   tree in_decl = t;
13707
13708   /* Nobody should be tsubst'ing into non-template functions.  */
13709   gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
13710
13711   if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
13712     {
13713       /* If T is not dependent, just return it.  */
13714       if (!uses_template_parms (DECL_TI_ARGS (t))
13715           && !LAMBDA_FUNCTION_P (t))
13716         return t;
13717
13718       /* Calculate the most general template of which R is a
13719          specialization.  */
13720       gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
13721
13722       /* We're substituting a lambda function under tsubst_lambda_expr but not
13723          directly from it; find the matching function we're already inside.
13724          But don't do this if T is a generic lambda with a single level of
13725          template parms, as in that case we're doing a normal instantiation. */
13726       if (LAMBDA_FUNCTION_P (t) && !lambda_fntype
13727           && (!generic_lambda_fn_p (t)
13728               || TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl)) > 1))
13729         return enclosing_instantiation_of (t);
13730
13731       /* Calculate the complete set of arguments used to
13732          specialize R.  */
13733       argvec = tsubst_template_args (DECL_TI_ARGS
13734                                      (DECL_TEMPLATE_RESULT
13735                                       (DECL_TI_TEMPLATE (t))),
13736                                      args, complain, in_decl);
13737       if (argvec == error_mark_node)
13738         return error_mark_node;
13739
13740       /* Check to see if we already have this specialization.  */
13741       if (!lambda_fntype)
13742         {
13743           hash = hash_tmpl_and_args (gen_tmpl, argvec);
13744           if (tree spec = retrieve_specialization (gen_tmpl, argvec, hash))
13745             return spec;
13746         }
13747
13748       /* We can see more levels of arguments than parameters if
13749          there was a specialization of a member template, like
13750          this:
13751
13752          template <class T> struct S { template <class U> void f(); }
13753          template <> template <class U> void S<int>::f(U);
13754
13755          Here, we'll be substituting into the specialization,
13756          because that's where we can find the code we actually
13757          want to generate, but we'll have enough arguments for
13758          the most general template.
13759
13760          We also deal with the peculiar case:
13761
13762          template <class T> struct S {
13763            template <class U> friend void f();
13764          };
13765          template <class U> void f() {}
13766          template S<int>;
13767          template void f<double>();
13768
13769          Here, the ARGS for the instantiation of will be {int,
13770          double}.  But, we only need as many ARGS as there are
13771          levels of template parameters in CODE_PATTERN.  We are
13772          careful not to get fooled into reducing the ARGS in
13773          situations like:
13774
13775          template <class T> struct S { template <class U> void f(U); }
13776          template <class T> template <> void S<T>::f(int) {}
13777
13778          which we can spot because the pattern will be a
13779          specialization in this case.  */
13780       int args_depth = TMPL_ARGS_DEPTH (args);
13781       int parms_depth =
13782         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
13783
13784       if (args_depth > parms_depth && !DECL_TEMPLATE_SPECIALIZATION (t))
13785         args = get_innermost_template_args (args, parms_depth);
13786     }
13787   else
13788     {
13789       /* This special case arises when we have something like this:
13790
13791          template <class T> struct S {
13792          friend void f<int>(int, double);
13793          };
13794
13795          Here, the DECL_TI_TEMPLATE for the friend declaration
13796          will be an IDENTIFIER_NODE.  We are being called from
13797          tsubst_friend_function, and we want only to create a
13798          new decl (R) with appropriate types so that we can call
13799          determine_specialization.  */
13800       gen_tmpl = NULL_TREE;
13801       argvec = NULL_TREE;
13802     }
13803
13804   tree closure = (lambda_fntype ? TYPE_METHOD_BASETYPE (lambda_fntype)
13805                   : NULL_TREE);
13806   tree ctx = closure ? closure : DECL_CONTEXT (t);
13807   bool member = ctx && TYPE_P (ctx);
13808
13809   if (member && !closure)
13810     ctx = tsubst_aggr_type (ctx, args,
13811                             complain, t, /*entering_scope=*/1);
13812
13813   tree type = (lambda_fntype ? lambda_fntype
13814                : tsubst (TREE_TYPE (t), args,
13815                          complain | tf_fndecl_type, in_decl));
13816   if (type == error_mark_node)
13817     return error_mark_node;
13818
13819   /* If we hit excessive deduction depth, the type is bogus even if
13820      it isn't error_mark_node, so don't build a decl.  */
13821   if (excessive_deduction_depth)
13822     return error_mark_node;
13823
13824   /* We do NOT check for matching decls pushed separately at this
13825      point, as they may not represent instantiations of this
13826      template, and in any case are considered separate under the
13827      discrete model.  */
13828   tree r = copy_decl (t);
13829   DECL_USE_TEMPLATE (r) = 0;
13830   TREE_TYPE (r) = type;
13831   /* Clear out the mangled name and RTL for the instantiation.  */
13832   SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
13833   SET_DECL_RTL (r, NULL);
13834   /* Leave DECL_INITIAL set on deleted instantiations.  */
13835   if (!DECL_DELETED_FN (r))
13836     DECL_INITIAL (r) = NULL_TREE;
13837   DECL_CONTEXT (r) = ctx;
13838
13839   /* Handle explicit(dependent-expr).  */
13840   if (DECL_HAS_DEPENDENT_EXPLICIT_SPEC_P (t))
13841     {
13842       tree spec = lookup_explicit_specifier (t);
13843       spec = tsubst_copy_and_build (spec, args, complain, in_decl,
13844                                     /*function_p=*/false,
13845                                     /*i_c_e_p=*/true);
13846       spec = build_explicit_specifier (spec, complain);
13847       DECL_NONCONVERTING_P (r) = (spec == boolean_true_node);
13848     }
13849
13850   /* OpenMP UDRs have the only argument a reference to the declared
13851      type.  We want to diagnose if the declared type is a reference,
13852      which is invalid, but as references to references are usually
13853      quietly merged, diagnose it here.  */
13854   if (DECL_OMP_DECLARE_REDUCTION_P (t))
13855     {
13856       tree argtype
13857         = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
13858       argtype = tsubst (argtype, args, complain, in_decl);
13859       if (TYPE_REF_P (argtype))
13860         error_at (DECL_SOURCE_LOCATION (t),
13861                   "reference type %qT in "
13862                   "%<#pragma omp declare reduction%>", argtype);
13863       if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
13864         DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
13865                                           argtype);
13866     }
13867
13868   if (member && DECL_CONV_FN_P (r))
13869     /* Type-conversion operator.  Reconstruct the name, in
13870        case it's the name of one of the template's parameters.  */
13871     DECL_NAME (r) = make_conv_op_name (TREE_TYPE (type));
13872
13873   tree parms = DECL_ARGUMENTS (t);
13874   if (closure)
13875     parms = DECL_CHAIN (parms);
13876   parms = tsubst (parms, args, complain, t);
13877   for (tree parm = parms; parm; parm = DECL_CHAIN (parm))
13878     DECL_CONTEXT (parm) = r;
13879   if (closure)
13880     {
13881       tree tparm = build_this_parm (r, closure, type_memfn_quals (type));
13882       DECL_NAME (tparm) = closure_identifier;
13883       DECL_CHAIN (tparm) = parms;
13884       parms = tparm;
13885     }
13886   DECL_ARGUMENTS (r) = parms;
13887   DECL_RESULT (r) = NULL_TREE;
13888
13889   maybe_rebuild_function_decl_type (r);
13890
13891   TREE_STATIC (r) = 0;
13892   TREE_PUBLIC (r) = TREE_PUBLIC (t);
13893   DECL_EXTERNAL (r) = 1;
13894   /* If this is an instantiation of a function with internal
13895      linkage, we already know what object file linkage will be
13896      assigned to the instantiation.  */
13897   DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
13898   DECL_DEFER_OUTPUT (r) = 0;
13899   DECL_CHAIN (r) = NULL_TREE;
13900   DECL_PENDING_INLINE_INFO (r) = 0;
13901   DECL_PENDING_INLINE_P (r) = 0;
13902   DECL_SAVED_TREE (r) = NULL_TREE;
13903   DECL_STRUCT_FUNCTION (r) = NULL;
13904   TREE_USED (r) = 0;
13905   /* We'll re-clone as appropriate in instantiate_template.  */
13906   DECL_CLONED_FUNCTION (r) = NULL_TREE;
13907
13908   /* If we aren't complaining now, return on error before we register
13909      the specialization so that we'll complain eventually.  */
13910   if ((complain & tf_error) == 0
13911       && IDENTIFIER_ANY_OP_P (DECL_NAME (r))
13912       && !grok_op_properties (r, /*complain=*/false))
13913     return error_mark_node;
13914
13915   /* Associate the constraints directly with the instantiation. We
13916      don't substitute through the constraints; that's only done when
13917      they are checked.  */
13918   if (tree ci = get_constraints (t))
13919     /* Unless we're regenerating a lambda, in which case we'll set the
13920        lambda's constraints in tsubst_lambda_expr.  */
13921     if (!lambda_fntype)
13922       set_constraints (r, ci);
13923
13924   if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
13925     SET_DECL_FRIEND_CONTEXT (r,
13926                              tsubst (DECL_FRIEND_CONTEXT (t),
13927                                      args, complain, in_decl));
13928
13929   /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
13930      this in the special friend case mentioned above where
13931      GEN_TMPL is NULL.  */
13932   if (gen_tmpl && !closure)
13933     {
13934       DECL_TEMPLATE_INFO (r)
13935         = build_template_info (gen_tmpl, argvec);
13936       SET_DECL_IMPLICIT_INSTANTIATION (r);
13937
13938       tree new_r
13939         = register_specialization (r, gen_tmpl, argvec, false, hash);
13940       if (new_r != r)
13941         /* We instantiated this while substituting into
13942            the type earlier (template/friend54.C).  */
13943         return new_r;
13944
13945       /* We're not supposed to instantiate default arguments
13946          until they are called, for a template.  But, for a
13947          declaration like:
13948
13949          template <class T> void f ()
13950          { extern void g(int i = T()); }
13951
13952          we should do the substitution when the template is
13953          instantiated.  We handle the member function case in
13954          instantiate_class_template since the default arguments
13955          might refer to other members of the class.  */
13956       if (!member
13957           && !PRIMARY_TEMPLATE_P (gen_tmpl)
13958           && !uses_template_parms (argvec))
13959         tsubst_default_arguments (r, complain);
13960     }
13961   else
13962     DECL_TEMPLATE_INFO (r) = NULL_TREE;
13963
13964   /* Copy the list of befriending classes.  */
13965   for (tree *friends = &DECL_BEFRIENDING_CLASSES (r);
13966        *friends;
13967        friends = &TREE_CHAIN (*friends))
13968     {
13969       *friends = copy_node (*friends);
13970       TREE_VALUE (*friends)
13971         = tsubst (TREE_VALUE (*friends), args, complain, in_decl);
13972     }
13973
13974   if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
13975     {
13976       maybe_retrofit_in_chrg (r);
13977       if (DECL_CONSTRUCTOR_P (r) && !grok_ctor_properties (ctx, r))
13978         return error_mark_node;
13979       /* If this is an instantiation of a member template, clone it.
13980          If it isn't, that'll be handled by
13981          clone_constructors_and_destructors.  */
13982       if (PRIMARY_TEMPLATE_P (gen_tmpl))
13983         clone_cdtor (r, /*update_methods=*/false);
13984     }
13985   else if ((complain & tf_error) != 0
13986            && IDENTIFIER_ANY_OP_P (DECL_NAME (r))
13987            && !grok_op_properties (r, /*complain=*/true))
13988     return error_mark_node;
13989
13990   /* Possibly limit visibility based on template args.  */
13991   DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
13992   if (DECL_VISIBILITY_SPECIFIED (t))
13993     {
13994       DECL_VISIBILITY_SPECIFIED (r) = 0;
13995       DECL_ATTRIBUTES (r)
13996         = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
13997     }
13998   determine_visibility (r);
13999   if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
14000       && !processing_template_decl)
14001     defaulted_late_check (r);
14002
14003   apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
14004                                   args, complain, in_decl);
14005   if (flag_openmp)
14006     if (tree attr = lookup_attribute ("omp declare variant base",
14007                                       DECL_ATTRIBUTES (r)))
14008       omp_declare_variant_finalize (r, attr);
14009
14010   return r;
14011 }
14012
14013 /* Subroutine of tsubst_decl for the case when T is a TEMPLATE_DECL.  */
14014
14015 static tree
14016 tsubst_template_decl (tree t, tree args, tsubst_flags_t complain,
14017                       tree lambda_fntype)
14018 {
14019   /* We can get here when processing a member function template,
14020      member class template, or template template parameter.  */
14021   tree decl = DECL_TEMPLATE_RESULT (t);
14022   tree in_decl = t;
14023   tree spec;
14024   tree tmpl_args;
14025   tree full_args;
14026   tree r;
14027   hashval_t hash = 0;
14028
14029   if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
14030     {
14031       /* Template template parameter is treated here.  */
14032       tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14033       if (new_type == error_mark_node)
14034         r = error_mark_node;
14035       /* If we get a real template back, return it.  This can happen in
14036          the context of most_specialized_partial_spec.  */
14037       else if (TREE_CODE (new_type) == TEMPLATE_DECL)
14038         r = new_type;
14039       else
14040         /* The new TEMPLATE_DECL was built in
14041            reduce_template_parm_level.  */
14042         r = TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (new_type);
14043       return r;
14044     }
14045
14046   if (!lambda_fntype)
14047     {
14048       /* We might already have an instance of this template.
14049          The ARGS are for the surrounding class type, so the
14050          full args contain the tsubst'd args for the context,
14051          plus the innermost args from the template decl.  */
14052       tmpl_args = DECL_CLASS_TEMPLATE_P (t)
14053         ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
14054         : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
14055       /* Because this is a template, the arguments will still be
14056          dependent, even after substitution.  If
14057          PROCESSING_TEMPLATE_DECL is not set, the dependency
14058          predicates will short-circuit.  */
14059       ++processing_template_decl;
14060       full_args = tsubst_template_args (tmpl_args, args,
14061                                         complain, in_decl);
14062       --processing_template_decl;
14063       if (full_args == error_mark_node)
14064         return error_mark_node;
14065
14066       /* If this is a default template template argument,
14067          tsubst might not have changed anything.  */
14068       if (full_args == tmpl_args)
14069         return t;
14070
14071       hash = hash_tmpl_and_args (t, full_args);
14072       spec = retrieve_specialization (t, full_args, hash);
14073       if (spec != NULL_TREE)
14074         {
14075           if (TYPE_P (spec))
14076             /* Type partial instantiations are stored as the type by
14077                lookup_template_class_1, not here as the template.  */
14078             spec = CLASSTYPE_TI_TEMPLATE (spec);
14079           return spec;
14080         }
14081     }
14082
14083   /* Make a new template decl.  It will be similar to the
14084      original, but will record the current template arguments.
14085      We also create a new function declaration, which is just
14086      like the old one, but points to this new template, rather
14087      than the old one.  */
14088   r = copy_decl (t);
14089   gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
14090   DECL_CHAIN (r) = NULL_TREE;
14091
14092   // Build new template info linking to the original template decl.
14093   if (!lambda_fntype)
14094     {
14095       DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
14096       SET_DECL_IMPLICIT_INSTANTIATION (r);
14097     }
14098   else
14099     DECL_TEMPLATE_INFO (r) = NULL_TREE;
14100
14101   /* The template parameters for this new template are all the
14102      template parameters for the old template, except the
14103      outermost level of parameters.  */
14104   DECL_TEMPLATE_PARMS (r)
14105     = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
14106                              complain);
14107
14108   bool class_p = false;
14109   tree inner = decl;
14110   ++processing_template_decl;
14111   if (TREE_CODE (inner) == FUNCTION_DECL)
14112     inner = tsubst_function_decl (inner, args, complain, lambda_fntype);
14113   else
14114     {
14115       if (TREE_CODE (inner) == TYPE_DECL && !TYPE_DECL_ALIAS_P (inner))
14116         {
14117           class_p = true;
14118           inner = TREE_TYPE (inner);
14119         }
14120       inner = tsubst (inner, args, complain, in_decl);
14121     }
14122   --processing_template_decl;
14123   if (inner == error_mark_node)
14124     return error_mark_node;
14125
14126   if (class_p)
14127     {
14128       /* For a partial specialization, we need to keep pointing to
14129          the primary template.  */
14130       if (!DECL_TEMPLATE_SPECIALIZATION (t))
14131         CLASSTYPE_TI_TEMPLATE (inner) = r;
14132
14133       DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (inner);
14134       inner = TYPE_MAIN_DECL (inner);
14135     }
14136   else if (lambda_fntype)
14137     {
14138       tree args = template_parms_to_args (DECL_TEMPLATE_PARMS (r));
14139       DECL_TEMPLATE_INFO (inner) = build_template_info (r, args);
14140     }
14141   else
14142     {
14143       if (TREE_CODE (decl) != TYPE_DECL || !TYPE_DECL_ALIAS_P (decl))
14144         DECL_TI_TEMPLATE (inner) = r;
14145       DECL_TI_ARGS (r) = DECL_TI_ARGS (inner);
14146     }
14147
14148   DECL_TEMPLATE_RESULT (r) = inner;
14149   TREE_TYPE (r) = TREE_TYPE (inner);
14150   DECL_CONTEXT (r) = DECL_CONTEXT (inner);
14151
14152   DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
14153   DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
14154
14155   if (PRIMARY_TEMPLATE_P (t))
14156     DECL_PRIMARY_TEMPLATE (r) = r;
14157
14158   if (TREE_CODE (decl) != TYPE_DECL && !VAR_P (decl)
14159       && !lambda_fntype)
14160     /* Record this non-type partial instantiation.  */
14161     register_specialization (r, t,
14162                              DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
14163                              false, hash);
14164
14165   return r;
14166 }
14167
14168 /* True if FN is the op() for a lambda in an uninstantiated template.  */
14169
14170 bool
14171 lambda_fn_in_template_p (tree fn)
14172 {
14173   if (!fn || !LAMBDA_FUNCTION_P (fn))
14174     return false;
14175   tree closure = DECL_CONTEXT (fn);
14176   return CLASSTYPE_TEMPLATE_INFO (closure) != NULL_TREE;
14177 }
14178
14179 /* True if FN is the substitution (via tsubst_lambda_expr) of a function for
14180    which the above is true.  */
14181
14182 bool
14183 instantiated_lambda_fn_p (tree fn)
14184 {
14185   if (!fn || !LAMBDA_FUNCTION_P (fn))
14186     return false;
14187   tree closure = DECL_CONTEXT (fn);
14188   tree lam = CLASSTYPE_LAMBDA_EXPR (closure);
14189   return LAMBDA_EXPR_INSTANTIATED (lam);
14190 }
14191
14192 /* We're instantiating a variable from template function TCTX.  Return the
14193    corresponding current enclosing scope.  This gets complicated because lambda
14194    functions in templates are regenerated rather than instantiated, but generic
14195    lambda functions are subsequently instantiated.  */
14196
14197 static tree
14198 enclosing_instantiation_of (tree otctx)
14199 {
14200   tree tctx = otctx;
14201   tree fn = current_function_decl;
14202   int lambda_count = 0;
14203
14204   for (; tctx && (lambda_fn_in_template_p (tctx)
14205                   || instantiated_lambda_fn_p (tctx));
14206        tctx = decl_function_context (tctx))
14207     ++lambda_count;
14208   for (; fn; fn = decl_function_context (fn))
14209     {
14210       tree ofn = fn;
14211       int flambda_count = 0;
14212       for (; fn && instantiated_lambda_fn_p (fn);
14213            fn = decl_function_context (fn))
14214         ++flambda_count;
14215       if ((fn && DECL_TEMPLATE_INFO (fn))
14216           ? most_general_template (fn) != most_general_template (tctx)
14217           : fn != tctx)
14218         continue;
14219       if (flambda_count != lambda_count)
14220         {
14221           gcc_assert (flambda_count > lambda_count);
14222           for (; flambda_count > lambda_count; --flambda_count)
14223             ofn = decl_function_context (ofn);
14224         }
14225       gcc_assert (DECL_NAME (ofn) == DECL_NAME (otctx)
14226                   || DECL_CONV_FN_P (ofn));
14227       return ofn;
14228     }
14229   gcc_unreachable ();
14230 }
14231
14232 /* Substitute the ARGS into the T, which is a _DECL.  Return the
14233    result of the substitution.  Issue error and warning messages under
14234    control of COMPLAIN.  */
14235
14236 static tree
14237 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
14238 {
14239 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
14240   location_t saved_loc;
14241   tree r = NULL_TREE;
14242   tree in_decl = t;
14243   hashval_t hash = 0;
14244
14245   /* Set the filename and linenumber to improve error-reporting.  */
14246   saved_loc = input_location;
14247   input_location = DECL_SOURCE_LOCATION (t);
14248
14249   switch (TREE_CODE (t))
14250     {
14251     case TEMPLATE_DECL:
14252       r = tsubst_template_decl (t, args, complain, /*lambda*/NULL_TREE);
14253       break;
14254
14255     case FUNCTION_DECL:
14256       r = tsubst_function_decl (t, args, complain, /*lambda*/NULL_TREE);
14257       break;
14258
14259     case PARM_DECL:
14260       {
14261         tree type = NULL_TREE;
14262         int i, len = 1;
14263         tree expanded_types = NULL_TREE;
14264         tree prev_r = NULL_TREE;
14265         tree first_r = NULL_TREE;
14266
14267         if (DECL_PACK_P (t))
14268           {
14269             /* If there is a local specialization that isn't a
14270                parameter pack, it means that we're doing a "simple"
14271                substitution from inside tsubst_pack_expansion. Just
14272                return the local specialization (which will be a single
14273                parm).  */
14274             tree spec = retrieve_local_specialization (t);
14275             if (spec 
14276                 && TREE_CODE (spec) == PARM_DECL
14277                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
14278               RETURN (spec);
14279
14280             /* Expand the TYPE_PACK_EXPANSION that provides the types for
14281                the parameters in this function parameter pack.  */
14282             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
14283                                                     complain, in_decl);
14284             if (TREE_CODE (expanded_types) == TREE_VEC)
14285               {
14286                 len = TREE_VEC_LENGTH (expanded_types);
14287
14288                 /* Zero-length parameter packs are boring. Just substitute
14289                    into the chain.  */
14290                 if (len == 0 && !cp_unevaluated_operand)
14291                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
14292                                   TREE_CHAIN (t)));
14293               }
14294             else
14295               {
14296                 /* All we did was update the type. Make a note of that.  */
14297                 type = expanded_types;
14298                 expanded_types = NULL_TREE;
14299               }
14300           }
14301
14302         /* Loop through all of the parameters we'll build. When T is
14303            a function parameter pack, LEN is the number of expanded
14304            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
14305         r = NULL_TREE;
14306         for (i = 0; i < len; ++i)
14307           {
14308             prev_r = r;
14309             r = copy_node (t);
14310             if (DECL_TEMPLATE_PARM_P (t))
14311               SET_DECL_TEMPLATE_PARM_P (r);
14312
14313             if (expanded_types)
14314               /* We're on the Ith parameter of the function parameter
14315                  pack.  */
14316               {
14317                 /* Get the Ith type.  */
14318                 type = TREE_VEC_ELT (expanded_types, i);
14319
14320                 /* Rename the parameter to include the index.  */
14321                 DECL_NAME (r)
14322                   = make_ith_pack_parameter_name (DECL_NAME (r), i);
14323               }
14324             else if (!type)
14325               /* We're dealing with a normal parameter.  */
14326               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14327
14328             type = type_decays_to (type);
14329             TREE_TYPE (r) = type;
14330             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
14331
14332             if (DECL_INITIAL (r))
14333               {
14334                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
14335                   DECL_INITIAL (r) = TREE_TYPE (r);
14336                 else
14337                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
14338                                              complain, in_decl);
14339               }
14340
14341             DECL_CONTEXT (r) = NULL_TREE;
14342
14343             if (!DECL_TEMPLATE_PARM_P (r))
14344               DECL_ARG_TYPE (r) = type_passed_as (type);
14345
14346             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
14347                                             args, complain, in_decl);
14348
14349             /* Keep track of the first new parameter we
14350                generate. That's what will be returned to the
14351                caller.  */
14352             if (!first_r)
14353               first_r = r;
14354
14355             /* Build a proper chain of parameters when substituting
14356                into a function parameter pack.  */
14357             if (prev_r)
14358               DECL_CHAIN (prev_r) = r;
14359           }
14360
14361         /* If cp_unevaluated_operand is set, we're just looking for a
14362            single dummy parameter, so don't keep going.  */
14363         if (DECL_CHAIN (t) && !cp_unevaluated_operand)
14364           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
14365                                    complain, DECL_CHAIN (t));
14366
14367         /* FIRST_R contains the start of the chain we've built.  */
14368         r = first_r;
14369       }
14370       break;
14371
14372     case FIELD_DECL:
14373       {
14374         tree type = NULL_TREE;
14375         tree vec = NULL_TREE;
14376         tree expanded_types = NULL_TREE;
14377         int len = 1;
14378
14379         if (PACK_EXPANSION_P (TREE_TYPE (t)))
14380           {
14381             /* This field is a lambda capture pack.  Return a TREE_VEC of
14382                the expanded fields to instantiate_class_template_1.  */
14383             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
14384                                                     complain, in_decl);
14385             if (TREE_CODE (expanded_types) == TREE_VEC)
14386               {
14387                 len = TREE_VEC_LENGTH (expanded_types);
14388                 vec = make_tree_vec (len);
14389               }
14390             else
14391               {
14392                 /* All we did was update the type. Make a note of that.  */
14393                 type = expanded_types;
14394                 expanded_types = NULL_TREE;
14395               }
14396           }
14397
14398         for (int i = 0; i < len; ++i)
14399           {
14400             r = copy_decl (t);
14401             if (expanded_types)
14402               {
14403                 type = TREE_VEC_ELT (expanded_types, i);
14404                 DECL_NAME (r)
14405                   = make_ith_pack_parameter_name (DECL_NAME (r), i);
14406               }
14407             else if (!type)
14408               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14409
14410             if (type == error_mark_node)
14411               RETURN (error_mark_node);
14412             TREE_TYPE (r) = type;
14413             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
14414
14415             if (DECL_C_BIT_FIELD (r))
14416               /* For bit-fields, DECL_BIT_FIELD_REPRESENTATIVE gives the
14417                  number of bits.  */
14418               DECL_BIT_FIELD_REPRESENTATIVE (r)
14419                 = tsubst_expr (DECL_BIT_FIELD_REPRESENTATIVE (t), args,
14420                                complain, in_decl,
14421                                /*integral_constant_expression_p=*/true);
14422             if (DECL_INITIAL (t))
14423               {
14424                 /* Set up DECL_TEMPLATE_INFO so that we can get at the
14425                    NSDMI in perform_member_init.  Still set DECL_INITIAL
14426                    so that we know there is one.  */
14427                 DECL_INITIAL (r) = void_node;
14428                 gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
14429                 retrofit_lang_decl (r);
14430                 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
14431               }
14432             /* We don't have to set DECL_CONTEXT here; it is set by
14433                finish_member_declaration.  */
14434             DECL_CHAIN (r) = NULL_TREE;
14435
14436             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
14437                                             args, complain, in_decl);
14438
14439             if (vec)
14440               TREE_VEC_ELT (vec, i) = r;
14441           }
14442
14443         if (vec)
14444           r = vec;
14445       }
14446       break;
14447
14448     case USING_DECL:
14449       /* We reach here only for member using decls.  We also need to check
14450          uses_template_parms because DECL_DEPENDENT_P is not set for a
14451          using-declaration that designates a member of the current
14452          instantiation (c++/53549).  */
14453       if (DECL_DEPENDENT_P (t)
14454           || uses_template_parms (USING_DECL_SCOPE (t)))
14455         {
14456           tree scope = USING_DECL_SCOPE (t);
14457           tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
14458           if (PACK_EXPANSION_P (scope))
14459             {
14460               tree vec = tsubst_pack_expansion (scope, args, complain, in_decl);
14461               int len = TREE_VEC_LENGTH (vec);
14462               r = make_tree_vec (len);
14463               for (int i = 0; i < len; ++i)
14464                 {
14465                   tree escope = TREE_VEC_ELT (vec, i);
14466                   tree elt = do_class_using_decl (escope, name);
14467                   if (!elt)
14468                     {
14469                       r = error_mark_node;
14470                       break;
14471                     }
14472                   else
14473                     {
14474                       TREE_PROTECTED (elt) = TREE_PROTECTED (t);
14475                       TREE_PRIVATE (elt) = TREE_PRIVATE (t);
14476                     }
14477                   TREE_VEC_ELT (r, i) = elt;
14478                 }
14479             }
14480           else
14481             {
14482               tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
14483                                              complain, in_decl);
14484               r = do_class_using_decl (inst_scope, name);
14485               if (!r)
14486                 r = error_mark_node;
14487               else
14488                 {
14489                   TREE_PROTECTED (r) = TREE_PROTECTED (t);
14490                   TREE_PRIVATE (r) = TREE_PRIVATE (t);
14491                 }
14492             }
14493         }
14494       else
14495         {
14496           r = copy_node (t);
14497           DECL_CHAIN (r) = NULL_TREE;
14498         }
14499       break;
14500
14501     case TYPE_DECL:
14502     case VAR_DECL:
14503       {
14504         tree argvec = NULL_TREE;
14505         tree gen_tmpl = NULL_TREE;
14506         tree spec;
14507         tree tmpl = NULL_TREE;
14508         tree ctx;
14509         tree type = NULL_TREE;
14510         bool local_p;
14511
14512         if (TREE_TYPE (t) == error_mark_node)
14513           RETURN (error_mark_node);
14514
14515         if (TREE_CODE (t) == TYPE_DECL
14516             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
14517           {
14518             /* If this is the canonical decl, we don't have to
14519                mess with instantiations, and often we can't (for
14520                typename, template type parms and such).  Note that
14521                TYPE_NAME is not correct for the above test if
14522                we've copied the type for a typedef.  */
14523             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14524             if (type == error_mark_node)
14525               RETURN (error_mark_node);
14526             r = TYPE_NAME (type);
14527             break;
14528           }
14529
14530         /* Check to see if we already have the specialization we
14531            need.  */
14532         spec = NULL_TREE;
14533         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
14534           {
14535             /* T is a static data member or namespace-scope entity.
14536                We have to substitute into namespace-scope variables
14537                (not just variable templates) because of cases like:
14538
14539                  template <class T> void f() { extern T t; }
14540
14541                where the entity referenced is not known until
14542                instantiation time.  */
14543             local_p = false;
14544             ctx = DECL_CONTEXT (t);
14545             if (DECL_CLASS_SCOPE_P (t))
14546               {
14547                 ctx = tsubst_aggr_type (ctx, args,
14548                                         complain,
14549                                         in_decl, /*entering_scope=*/1);
14550                 /* If CTX is unchanged, then T is in fact the
14551                    specialization we want.  That situation occurs when
14552                    referencing a static data member within in its own
14553                    class.  We can use pointer equality, rather than
14554                    same_type_p, because DECL_CONTEXT is always
14555                    canonical...  */
14556                 if (ctx == DECL_CONTEXT (t)
14557                     /* ... unless T is a member template; in which
14558                        case our caller can be willing to create a
14559                        specialization of that template represented
14560                        by T.  */
14561                     && !(DECL_TI_TEMPLATE (t)
14562                          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t))))
14563                   spec = t;
14564               }
14565
14566             if (!spec)
14567               {
14568                 tmpl = DECL_TI_TEMPLATE (t);
14569                 gen_tmpl = most_general_template (tmpl);
14570                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
14571                 if (argvec != error_mark_node)
14572                   argvec = (coerce_innermost_template_parms
14573                             (DECL_TEMPLATE_PARMS (gen_tmpl),
14574                              argvec, t, complain,
14575                              /*all*/true, /*defarg*/true));
14576                 if (argvec == error_mark_node)
14577                   RETURN (error_mark_node);
14578                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
14579                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
14580               }
14581           }
14582         else
14583           {
14584             /* A local variable.  */
14585             local_p = true;
14586             /* Subsequent calls to pushdecl will fill this in.  */
14587             ctx = NULL_TREE;
14588             /* Unless this is a reference to a static variable from an
14589                enclosing function, in which case we need to fill it in now.  */
14590             if (TREE_STATIC (t))
14591               {
14592                 tree fn = enclosing_instantiation_of (DECL_CONTEXT (t));
14593                 if (fn != current_function_decl)
14594                   ctx = fn;
14595               }
14596             spec = retrieve_local_specialization (t);
14597           }
14598         /* If we already have the specialization we need, there is
14599            nothing more to do.  */
14600         if (spec)
14601           {
14602             r = spec;
14603             break;
14604           }
14605
14606         /* Create a new node for the specialization we need.  */
14607         if (type == NULL_TREE)
14608           {
14609             if (is_typedef_decl (t))
14610               type = DECL_ORIGINAL_TYPE (t);
14611             else
14612               type = TREE_TYPE (t);
14613             if (VAR_P (t)
14614                 && VAR_HAD_UNKNOWN_BOUND (t)
14615                 && type != error_mark_node)
14616               type = strip_array_domain (type);
14617             tree sub_args = args;
14618             if (tree auto_node = type_uses_auto (type))
14619               {
14620                 /* Mask off any template args past the variable's context so we
14621                    don't replace the auto with an unrelated argument.  */
14622                 int nouter = TEMPLATE_TYPE_LEVEL (auto_node) - 1;
14623                 int extra = TMPL_ARGS_DEPTH (args) - nouter;
14624                 if (extra > 0)
14625                   /* This should never happen with the new lambda instantiation
14626                      model, but keep the handling just in case.  */
14627                   gcc_assert (!CHECKING_P),
14628                   sub_args = strip_innermost_template_args (args, extra);
14629               }
14630             type = tsubst (type, sub_args, complain, in_decl);
14631             /* Substituting the type might have recursively instantiated this
14632                same alias (c++/86171).  */
14633             if (gen_tmpl && DECL_ALIAS_TEMPLATE_P (gen_tmpl)
14634                 && (spec = retrieve_specialization (gen_tmpl, argvec, hash)))
14635               {
14636                 r = spec;
14637                 break;
14638               }
14639           }
14640         r = copy_decl (t);
14641         if (VAR_P (r))
14642           {
14643             DECL_INITIALIZED_P (r) = 0;
14644             DECL_TEMPLATE_INSTANTIATED (r) = 0;
14645             if (type == error_mark_node)
14646               RETURN (error_mark_node);
14647             if (TREE_CODE (type) == FUNCTION_TYPE)
14648               {
14649                 /* It may seem that this case cannot occur, since:
14650
14651                    typedef void f();
14652                    void g() { f x; }
14653
14654                    declares a function, not a variable.  However:
14655
14656                    typedef void f();
14657                    template <typename T> void g() { T t; }
14658                    template void g<f>();
14659
14660                    is an attempt to declare a variable with function
14661                    type.  */
14662                 error ("variable %qD has function type",
14663                        /* R is not yet sufficiently initialized, so we
14664                           just use its name.  */
14665                        DECL_NAME (r));
14666                 RETURN (error_mark_node);
14667               }
14668             type = complete_type (type);
14669             /* Wait until cp_finish_decl to set this again, to handle
14670                circular dependency (template/instantiate6.C). */
14671             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
14672             type = check_var_type (DECL_NAME (r), type,
14673                                    DECL_SOURCE_LOCATION (r));
14674             if (DECL_HAS_VALUE_EXPR_P (t))
14675               {
14676                 tree ve = DECL_VALUE_EXPR (t);
14677                 /* If the DECL_VALUE_EXPR is converted to the declared type,
14678                    preserve the identity so that gimplify_type_sizes works.  */
14679                 bool nop = (TREE_CODE (ve) == NOP_EXPR);
14680                 if (nop)
14681                   ve = TREE_OPERAND (ve, 0);
14682                 ve = tsubst_expr (ve, args, complain, in_decl,
14683                                   /*constant_expression_p=*/false);
14684                 if (REFERENCE_REF_P (ve))
14685                   {
14686                     gcc_assert (TYPE_REF_P (type));
14687                     ve = TREE_OPERAND (ve, 0);
14688                   }
14689                 if (nop)
14690                   ve = build_nop (type, ve);
14691                 else if (DECL_LANG_SPECIFIC (t)
14692                          && DECL_OMP_PRIVATIZED_MEMBER (t)
14693                          && TREE_CODE (ve) == COMPONENT_REF
14694                          && TREE_CODE (TREE_OPERAND (ve, 1)) == FIELD_DECL
14695                          && DECL_BIT_FIELD_TYPE (TREE_OPERAND (ve, 1)) == type)
14696                   type = TREE_TYPE (ve);
14697                 else
14698                   gcc_checking_assert (TYPE_MAIN_VARIANT (TREE_TYPE (ve))
14699                                        == TYPE_MAIN_VARIANT (type));
14700                 SET_DECL_VALUE_EXPR (r, ve);
14701               }
14702             if (CP_DECL_THREAD_LOCAL_P (r)
14703                 && !processing_template_decl)
14704               set_decl_tls_model (r, decl_default_tls_model (r));
14705           }
14706         else if (DECL_SELF_REFERENCE_P (t))
14707           SET_DECL_SELF_REFERENCE_P (r);
14708         TREE_TYPE (r) = type;
14709         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
14710         DECL_CONTEXT (r) = ctx;
14711         /* Clear out the mangled name and RTL for the instantiation.  */
14712         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
14713         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
14714           SET_DECL_RTL (r, NULL);
14715         /* The initializer must not be expanded until it is required;
14716            see [temp.inst].  */
14717         DECL_INITIAL (r) = NULL_TREE;
14718         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
14719         if (VAR_P (r))
14720           {
14721             if (DECL_LANG_SPECIFIC (r))
14722               SET_DECL_DEPENDENT_INIT_P (r, false);
14723
14724             SET_DECL_MODE (r, VOIDmode);
14725
14726             /* Possibly limit visibility based on template args.  */
14727             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
14728             if (DECL_VISIBILITY_SPECIFIED (t))
14729               {
14730                 DECL_VISIBILITY_SPECIFIED (r) = 0;
14731                 DECL_ATTRIBUTES (r)
14732                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
14733               }
14734             determine_visibility (r);
14735           }
14736
14737         if (!local_p)
14738           {
14739             /* A static data member declaration is always marked
14740                external when it is declared in-class, even if an
14741                initializer is present.  We mimic the non-template
14742                processing here.  */
14743             DECL_EXTERNAL (r) = 1;
14744             if (DECL_NAMESPACE_SCOPE_P (t))
14745               DECL_NOT_REALLY_EXTERN (r) = 1;
14746
14747             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
14748             SET_DECL_IMPLICIT_INSTANTIATION (r);
14749             /* Remember whether we require constant initialization of
14750                a non-constant template variable.  */
14751             TINFO_VAR_DECLARED_CONSTINIT (DECL_TEMPLATE_INFO (r))
14752               = TINFO_VAR_DECLARED_CONSTINIT (DECL_TEMPLATE_INFO (t));
14753             if (!error_operand_p (r) || (complain & tf_error))
14754               register_specialization (r, gen_tmpl, argvec, false, hash);
14755           }
14756         else
14757           {
14758             if (DECL_LANG_SPECIFIC (r))
14759               DECL_TEMPLATE_INFO (r) = NULL_TREE;
14760             if (!cp_unevaluated_operand)
14761               register_local_specialization (r, t);
14762           }
14763
14764         DECL_CHAIN (r) = NULL_TREE;
14765
14766         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
14767                                         /*flags=*/0,
14768                                         args, complain, in_decl);
14769
14770         /* Preserve a typedef that names a type.  */
14771         if (is_typedef_decl (r) && type != error_mark_node)
14772           {
14773             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
14774             set_underlying_type (r);
14775             if (TYPE_DECL_ALIAS_P (r))
14776               /* An alias template specialization can be dependent
14777                  even if its underlying type is not.  */
14778               TYPE_DEPENDENT_P_VALID (TREE_TYPE (r)) = false;
14779           }
14780
14781         layout_decl (r, 0);
14782       }
14783       break;
14784
14785     default:
14786       gcc_unreachable ();
14787     }
14788 #undef RETURN
14789
14790  out:
14791   /* Restore the file and line information.  */
14792   input_location = saved_loc;
14793
14794   return r;
14795 }
14796
14797 /* Substitute into the complete parameter type list PARMS.  */
14798
14799 tree
14800 tsubst_function_parms (tree parms,
14801                        tree args,
14802                        tsubst_flags_t complain,
14803                        tree in_decl)
14804 {
14805   return tsubst_arg_types (parms, args, NULL_TREE, complain, in_decl);
14806 }
14807
14808 /* Substitute into the ARG_TYPES of a function type.
14809    If END is a TREE_CHAIN, leave it and any following types
14810    un-substituted.  */
14811
14812 static tree
14813 tsubst_arg_types (tree arg_types,
14814                   tree args,
14815                   tree end,
14816                   tsubst_flags_t complain,
14817                   tree in_decl)
14818 {
14819   tree remaining_arg_types;
14820   tree type = NULL_TREE;
14821   int i = 1;
14822   tree expanded_args = NULL_TREE;
14823   tree default_arg;
14824
14825   if (!arg_types || arg_types == void_list_node || arg_types == end)
14826     return arg_types;
14827
14828   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
14829                                           args, end, complain, in_decl);
14830   if (remaining_arg_types == error_mark_node)
14831     return error_mark_node;
14832
14833   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
14834     {
14835       /* For a pack expansion, perform substitution on the
14836          entire expression. Later on, we'll handle the arguments
14837          one-by-one.  */
14838       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
14839                                             args, complain, in_decl);
14840
14841       if (TREE_CODE (expanded_args) == TREE_VEC)
14842         /* So that we'll spin through the parameters, one by one.  */
14843         i = TREE_VEC_LENGTH (expanded_args);
14844       else
14845         {
14846           /* We only partially substituted into the parameter
14847              pack. Our type is TYPE_PACK_EXPANSION.  */
14848           type = expanded_args;
14849           expanded_args = NULL_TREE;
14850         }
14851     }
14852
14853   while (i > 0) {
14854     --i;
14855
14856     if (expanded_args)
14857       type = TREE_VEC_ELT (expanded_args, i);
14858     else if (!type)
14859       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
14860
14861     if (type == error_mark_node)
14862       return error_mark_node;
14863     if (VOID_TYPE_P (type))
14864       {
14865         if (complain & tf_error)
14866           {
14867             error ("invalid parameter type %qT", type);
14868             if (in_decl)
14869               error ("in declaration %q+D", in_decl);
14870           }
14871         return error_mark_node;
14872     }
14873     /* DR 657. */
14874     if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
14875       return error_mark_node;
14876
14877     /* Do array-to-pointer, function-to-pointer conversion, and ignore
14878        top-level qualifiers as required.  */
14879     type = cv_unqualified (type_decays_to (type));
14880
14881     /* We do not substitute into default arguments here.  The standard
14882        mandates that they be instantiated only when needed, which is
14883        done in build_over_call.  */
14884     default_arg = TREE_PURPOSE (arg_types);
14885
14886     /* Except that we do substitute default arguments under tsubst_lambda_expr,
14887        since the new op() won't have any associated template arguments for us
14888        to refer to later.  */
14889     if (lambda_fn_in_template_p (in_decl))
14890       default_arg = tsubst_copy_and_build (default_arg, args, complain, in_decl,
14891                                            false/*fn*/, false/*constexpr*/);
14892
14893     if (default_arg && TREE_CODE (default_arg) == DEFERRED_PARSE)
14894       {
14895         /* We've instantiated a template before its default arguments
14896            have been parsed.  This can happen for a nested template
14897            class, and is not an error unless we require the default
14898            argument in a call of this function.  */
14899         remaining_arg_types = 
14900           tree_cons (default_arg, type, remaining_arg_types);
14901         vec_safe_push (DEFPARSE_INSTANTIATIONS (default_arg),
14902                        remaining_arg_types);
14903       }
14904     else
14905       remaining_arg_types =
14906         hash_tree_cons (default_arg, type, remaining_arg_types);
14907   }
14908
14909   return remaining_arg_types;
14910 }
14911
14912 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
14913    *not* handle the exception-specification for FNTYPE, because the
14914    initial substitution of explicitly provided template parameters
14915    during argument deduction forbids substitution into the
14916    exception-specification:
14917
14918      [temp.deduct]
14919
14920      All references in the function type of the function template to  the
14921      corresponding template parameters are replaced by the specified tem-
14922      plate argument values.  If a substitution in a template parameter or
14923      in  the function type of the function template results in an invalid
14924      type, type deduction fails.  [Note: The equivalent  substitution  in
14925      exception specifications is done only when the function is instanti-
14926      ated, at which point a program is  ill-formed  if  the  substitution
14927      results in an invalid type.]  */
14928
14929 static tree
14930 tsubst_function_type (tree t,
14931                       tree args,
14932                       tsubst_flags_t complain,
14933                       tree in_decl)
14934 {
14935   tree return_type;
14936   tree arg_types = NULL_TREE;
14937
14938   /* The TYPE_CONTEXT is not used for function/method types.  */
14939   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
14940
14941   /* DR 1227: Mixing immediate and non-immediate contexts in deduction
14942      failure.  */
14943   bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
14944
14945   if (late_return_type_p)
14946     {
14947       /* Substitute the argument types.  */
14948       arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
14949                                     complain, in_decl);
14950       if (arg_types == error_mark_node)
14951         return error_mark_node;
14952
14953       tree save_ccp = current_class_ptr;
14954       tree save_ccr = current_class_ref;
14955       tree this_type = (TREE_CODE (t) == METHOD_TYPE
14956                         ? TREE_TYPE (TREE_VALUE (arg_types)) : NULL_TREE);
14957       bool do_inject = this_type && CLASS_TYPE_P (this_type);
14958       if (do_inject)
14959         {
14960           /* DR 1207: 'this' is in scope in the trailing return type.  */
14961           inject_this_parameter (this_type, cp_type_quals (this_type));
14962         }
14963
14964       /* Substitute the return type.  */
14965       return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14966
14967       if (do_inject)
14968         {
14969           current_class_ptr = save_ccp;
14970           current_class_ref = save_ccr;
14971         }
14972     }
14973   else
14974     /* Substitute the return type.  */
14975     return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14976
14977   if (return_type == error_mark_node)
14978     return error_mark_node;
14979   /* DR 486 clarifies that creation of a function type with an
14980      invalid return type is a deduction failure.  */
14981   if (TREE_CODE (return_type) == ARRAY_TYPE
14982       || TREE_CODE (return_type) == FUNCTION_TYPE)
14983     {
14984       if (complain & tf_error)
14985         {
14986           if (TREE_CODE (return_type) == ARRAY_TYPE)
14987             error ("function returning an array");
14988           else
14989             error ("function returning a function");
14990         }
14991       return error_mark_node;
14992     }
14993   /* And DR 657. */
14994   if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
14995     return error_mark_node;
14996
14997   if (!late_return_type_p)
14998     {
14999       /* Substitute the argument types.  */
15000       arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
15001                                     complain, in_decl);
15002       if (arg_types == error_mark_node)
15003         return error_mark_node;
15004     }
15005
15006   /* Construct a new type node and return it.  */
15007   return rebuild_function_or_method_type (t, return_type, arg_types,
15008                                           /*raises=*/NULL_TREE, complain);
15009 }
15010
15011 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
15012    ARGS into that specification, and return the substituted
15013    specification.  If there is no specification, return NULL_TREE.  */
15014
15015 static tree
15016 tsubst_exception_specification (tree fntype,
15017                                 tree args,
15018                                 tsubst_flags_t complain,
15019                                 tree in_decl,
15020                                 bool defer_ok)
15021 {
15022   tree specs;
15023   tree new_specs;
15024
15025   specs = TYPE_RAISES_EXCEPTIONS (fntype);
15026   new_specs = NULL_TREE;
15027   if (specs && TREE_PURPOSE (specs))
15028     {
15029       /* A noexcept-specifier.  */
15030       tree expr = TREE_PURPOSE (specs);
15031       if (TREE_CODE (expr) == INTEGER_CST)
15032         new_specs = expr;
15033       else if (defer_ok)
15034         {
15035           /* Defer instantiation of noexcept-specifiers to avoid
15036              excessive instantiations (c++/49107).  */
15037           new_specs = make_node (DEFERRED_NOEXCEPT);
15038           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
15039             {
15040               /* We already partially instantiated this member template,
15041                  so combine the new args with the old.  */
15042               DEFERRED_NOEXCEPT_PATTERN (new_specs)
15043                 = DEFERRED_NOEXCEPT_PATTERN (expr);
15044               DEFERRED_NOEXCEPT_ARGS (new_specs)
15045                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
15046             }
15047           else
15048             {
15049               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
15050               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
15051             }
15052         }
15053       else
15054         {
15055           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
15056             {
15057               args = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr),
15058                                            args);
15059               expr = DEFERRED_NOEXCEPT_PATTERN (expr);
15060             }
15061           new_specs = tsubst_copy_and_build
15062             (expr, args, complain, in_decl, /*function_p=*/false,
15063              /*integral_constant_expression_p=*/true);
15064         }
15065       new_specs = build_noexcept_spec (new_specs, complain);
15066     }
15067   else if (specs)
15068     {
15069       if (! TREE_VALUE (specs))
15070         new_specs = specs;
15071       else
15072         while (specs)
15073           {
15074             tree spec;
15075             int i, len = 1;
15076             tree expanded_specs = NULL_TREE;
15077
15078             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
15079               {
15080                 /* Expand the pack expansion type.  */
15081                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
15082                                                        args, complain,
15083                                                        in_decl);
15084
15085                 if (expanded_specs == error_mark_node)
15086                   return error_mark_node;
15087                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
15088                   len = TREE_VEC_LENGTH (expanded_specs);
15089                 else
15090                   {
15091                     /* We're substituting into a member template, so
15092                        we got a TYPE_PACK_EXPANSION back.  Add that
15093                        expansion and move on.  */
15094                     gcc_assert (TREE_CODE (expanded_specs)
15095                                 == TYPE_PACK_EXPANSION);
15096                     new_specs = add_exception_specifier (new_specs,
15097                                                          expanded_specs,
15098                                                          complain);
15099                     specs = TREE_CHAIN (specs);
15100                     continue;
15101                   }
15102               }
15103
15104             for (i = 0; i < len; ++i)
15105               {
15106                 if (expanded_specs)
15107                   spec = TREE_VEC_ELT (expanded_specs, i);
15108                 else
15109                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
15110                 if (spec == error_mark_node)
15111                   return spec;
15112                 new_specs = add_exception_specifier (new_specs, spec, 
15113                                                      complain);
15114               }
15115
15116             specs = TREE_CHAIN (specs);
15117           }
15118     }
15119   return new_specs;
15120 }
15121
15122 /* Substitute through a TREE_LIST of types or expressions, handling pack
15123    expansions.  */
15124
15125 tree
15126 tsubst_tree_list (tree t, tree args, tsubst_flags_t complain, tree in_decl)
15127 {
15128   if (t == void_list_node)
15129     return t;
15130
15131   tree purpose = TREE_PURPOSE (t);
15132   tree purposevec = NULL_TREE;
15133   if (!purpose)
15134     ;
15135   else if (PACK_EXPANSION_P (purpose))
15136     {
15137       purpose = tsubst_pack_expansion (purpose, args, complain, in_decl);
15138       if (TREE_CODE (purpose) == TREE_VEC)
15139         purposevec = purpose;
15140     }
15141   else if (TYPE_P (purpose))
15142     purpose = tsubst (purpose, args, complain, in_decl);
15143   else
15144     purpose = tsubst_copy_and_build (purpose, args, complain, in_decl);
15145   if (purpose == error_mark_node || purposevec == error_mark_node)
15146     return error_mark_node;
15147
15148   tree value = TREE_VALUE (t);
15149   tree valuevec = NULL_TREE;
15150   if (!value)
15151     ;
15152   else if (PACK_EXPANSION_P (value))
15153     {
15154       value = tsubst_pack_expansion (value, args, complain, in_decl);
15155       if (TREE_CODE (value) == TREE_VEC)
15156         valuevec = value;
15157     }
15158   else if (TYPE_P (value))
15159     value = tsubst (value, args, complain, in_decl);
15160   else
15161     value = tsubst_copy_and_build (value, args, complain, in_decl);
15162   if (value == error_mark_node || valuevec == error_mark_node)
15163     return error_mark_node;
15164
15165   tree chain = TREE_CHAIN (t);
15166   if (!chain)
15167     ;
15168   else if (TREE_CODE (chain) == TREE_LIST)
15169     chain = tsubst_tree_list (chain, args, complain, in_decl);
15170   else if (TYPE_P (chain))
15171     chain = tsubst (chain, args, complain, in_decl);
15172   else
15173     chain = tsubst_copy_and_build (chain, args, complain, in_decl);
15174   if (chain == error_mark_node)
15175     return error_mark_node;
15176
15177   if (purpose == TREE_PURPOSE (t)
15178       && value == TREE_VALUE (t)
15179       && chain == TREE_CHAIN (t))
15180     return t;
15181
15182   int len;
15183   /* Determine the number of arguments.  */
15184   if (purposevec)
15185     {
15186       len = TREE_VEC_LENGTH (purposevec);
15187       gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
15188     }
15189   else if (valuevec)
15190     len = TREE_VEC_LENGTH (valuevec);
15191   else
15192     len = 1;
15193
15194   for (int i = len; i-- > 0; )
15195     {
15196       if (purposevec)
15197         purpose = TREE_VEC_ELT (purposevec, i);
15198       if (valuevec)
15199         value = TREE_VEC_ELT (valuevec, i);
15200
15201       if (value && TYPE_P (value))
15202         chain = hash_tree_cons (purpose, value, chain);
15203       else
15204         chain = tree_cons (purpose, value, chain);
15205     }
15206
15207   return chain;
15208 }
15209
15210 /* Take the tree structure T and replace template parameters used
15211    therein with the argument vector ARGS.  IN_DECL is an associated
15212    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
15213    Issue error and warning messages under control of COMPLAIN.  Note
15214    that we must be relatively non-tolerant of extensions here, in
15215    order to preserve conformance; if we allow substitutions that
15216    should not be allowed, we may allow argument deductions that should
15217    not succeed, and therefore report ambiguous overload situations
15218    where there are none.  In theory, we could allow the substitution,
15219    but indicate that it should have failed, and allow our caller to
15220    make sure that the right thing happens, but we don't try to do this
15221    yet.
15222
15223    This function is used for dealing with types, decls and the like;
15224    for expressions, use tsubst_expr or tsubst_copy.  */
15225
15226 tree
15227 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
15228 {
15229   enum tree_code code;
15230   tree type, r = NULL_TREE;
15231
15232   if (t == NULL_TREE || t == error_mark_node
15233       || t == integer_type_node
15234       || t == void_type_node
15235       || t == char_type_node
15236       || t == unknown_type_node
15237       || TREE_CODE (t) == NAMESPACE_DECL
15238       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
15239     return t;
15240
15241   if (DECL_P (t))
15242     return tsubst_decl (t, args, complain);
15243
15244   if (args == NULL_TREE)
15245     return t;
15246
15247   code = TREE_CODE (t);
15248
15249   if (code == IDENTIFIER_NODE)
15250     type = IDENTIFIER_TYPE_VALUE (t);
15251   else
15252     type = TREE_TYPE (t);
15253
15254   gcc_assert (type != unknown_type_node);
15255
15256   /* Reuse typedefs.  We need to do this to handle dependent attributes,
15257      such as attribute aligned.  */
15258   if (TYPE_P (t)
15259       && typedef_variant_p (t))
15260     {
15261       tree decl = TYPE_NAME (t);
15262
15263       if (alias_template_specialization_p (t, nt_opaque))
15264         {
15265           /* DECL represents an alias template and we want to
15266              instantiate it.  */
15267           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15268           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
15269           r = instantiate_alias_template (tmpl, gen_args, complain);
15270         }
15271       else if (DECL_CLASS_SCOPE_P (decl)
15272                && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
15273                && uses_template_parms (DECL_CONTEXT (decl)))
15274         {
15275           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
15276           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
15277           r = retrieve_specialization (tmpl, gen_args, 0);
15278         }
15279       else if (DECL_FUNCTION_SCOPE_P (decl)
15280                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
15281                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
15282         r = retrieve_local_specialization (decl);
15283       else
15284         /* The typedef is from a non-template context.  */
15285         return t;
15286
15287       if (r)
15288         {
15289           r = TREE_TYPE (r);
15290           r = cp_build_qualified_type_real
15291             (r, cp_type_quals (t) | cp_type_quals (r),
15292              complain | tf_ignore_bad_quals);
15293           return r;
15294         }
15295       else
15296         {
15297           /* We don't have an instantiation yet, so drop the typedef.  */
15298           int quals = cp_type_quals (t);
15299           t = DECL_ORIGINAL_TYPE (decl);
15300           t = cp_build_qualified_type_real (t, quals,
15301                                             complain | tf_ignore_bad_quals);
15302         }
15303     }
15304
15305   bool fndecl_type = (complain & tf_fndecl_type);
15306   complain &= ~tf_fndecl_type;
15307
15308   if (type
15309       && code != TYPENAME_TYPE
15310       && code != TEMPLATE_TYPE_PARM
15311       && code != TEMPLATE_PARM_INDEX
15312       && code != IDENTIFIER_NODE
15313       && code != FUNCTION_TYPE
15314       && code != METHOD_TYPE)
15315     type = tsubst (type, args, complain, in_decl);
15316   if (type == error_mark_node)
15317     return error_mark_node;
15318
15319   switch (code)
15320     {
15321     case RECORD_TYPE:
15322     case UNION_TYPE:
15323     case ENUMERAL_TYPE:
15324       return tsubst_aggr_type (t, args, complain, in_decl,
15325                                /*entering_scope=*/0);
15326
15327     case ERROR_MARK:
15328     case IDENTIFIER_NODE:
15329     case VOID_TYPE:
15330     case REAL_TYPE:
15331     case COMPLEX_TYPE:
15332     case VECTOR_TYPE:
15333     case BOOLEAN_TYPE:
15334     case NULLPTR_TYPE:
15335     case LANG_TYPE:
15336       return t;
15337
15338     case INTEGER_TYPE:
15339       if (t == integer_type_node)
15340         return t;
15341
15342       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
15343           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
15344         return t;
15345
15346       {
15347         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
15348
15349         max = tsubst_expr (omax, args, complain, in_decl,
15350                            /*integral_constant_expression_p=*/false);
15351
15352         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
15353            needed.  */
15354         if (TREE_CODE (max) == NOP_EXPR
15355             && TREE_SIDE_EFFECTS (omax)
15356             && !TREE_TYPE (max))
15357           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
15358
15359         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
15360            with TREE_SIDE_EFFECTS that indicates this is not an integral
15361            constant expression.  */
15362         if (processing_template_decl
15363             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
15364           {
15365             gcc_assert (TREE_CODE (max) == NOP_EXPR);
15366             TREE_SIDE_EFFECTS (max) = 1;
15367           }
15368
15369         return compute_array_index_type (NULL_TREE, max, complain);
15370       }
15371
15372     case TEMPLATE_TYPE_PARM:
15373     case TEMPLATE_TEMPLATE_PARM:
15374     case BOUND_TEMPLATE_TEMPLATE_PARM:
15375     case TEMPLATE_PARM_INDEX:
15376       {
15377         int idx;
15378         int level;
15379         int levels;
15380         tree arg = NULL_TREE;
15381
15382         r = NULL_TREE;
15383
15384         gcc_assert (TREE_VEC_LENGTH (args) > 0);
15385         template_parm_level_and_index (t, &level, &idx);
15386
15387         levels = TMPL_ARGS_DEPTH (args);
15388         if (level <= levels
15389             && TREE_VEC_LENGTH (TMPL_ARGS_LEVEL (args, level)) > 0)
15390           {
15391             arg = TMPL_ARG (args, level, idx);
15392
15393             /* See through ARGUMENT_PACK_SELECT arguments. */
15394             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
15395               arg = argument_pack_select_arg (arg);
15396           }
15397
15398         if (arg == error_mark_node)
15399           return error_mark_node;
15400         else if (arg != NULL_TREE)
15401           {
15402             if (ARGUMENT_PACK_P (arg))
15403               /* If ARG is an argument pack, we don't actually want to
15404                  perform a substitution here, because substitutions
15405                  for argument packs are only done
15406                  element-by-element. We can get to this point when
15407                  substituting the type of a non-type template
15408                  parameter pack, when that type actually contains
15409                  template parameter packs from an outer template, e.g.,
15410
15411                  template<typename... Types> struct A {
15412                    template<Types... Values> struct B { };
15413                  };  */
15414               return t;
15415
15416             if (code == TEMPLATE_TYPE_PARM)
15417               {
15418                 int quals;
15419
15420                 /* When building concept checks for the purpose of
15421                    deducing placeholders, we can end up with wildcards
15422                    where types are expected. Adjust this to the deduced
15423                    value.  */
15424                 if (TREE_CODE (arg) == WILDCARD_DECL)
15425                   arg = TREE_TYPE (TREE_TYPE (arg));
15426
15427                 gcc_assert (TYPE_P (arg));
15428
15429                 quals = cp_type_quals (arg) | cp_type_quals (t);
15430
15431                 return cp_build_qualified_type_real
15432                   (arg, quals, complain | tf_ignore_bad_quals);
15433               }
15434             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
15435               {
15436                 /* We are processing a type constructed from a
15437                    template template parameter.  */
15438                 tree argvec = tsubst (TYPE_TI_ARGS (t),
15439                                       args, complain, in_decl);
15440                 if (argvec == error_mark_node)
15441                   return error_mark_node;
15442
15443                 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
15444                             || TREE_CODE (arg) == TEMPLATE_DECL
15445                             || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
15446
15447                 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
15448                   /* Consider this code:
15449
15450                         template <template <class> class Template>
15451                         struct Internal {
15452                         template <class Arg> using Bind = Template<Arg>;
15453                         };
15454
15455                         template <template <class> class Template, class Arg>
15456                         using Instantiate = Template<Arg>; //#0
15457
15458                         template <template <class> class Template,
15459                                   class Argument>
15460                         using Bind =
15461                           Instantiate<Internal<Template>::template Bind,
15462                                       Argument>; //#1
15463
15464                      When #1 is parsed, the
15465                      BOUND_TEMPLATE_TEMPLATE_PARM representing the
15466                      parameter `Template' in #0 matches the
15467                      UNBOUND_CLASS_TEMPLATE representing the argument
15468                      `Internal<Template>::template Bind'; We then want
15469                      to assemble the type `Bind<Argument>' that can't
15470                      be fully created right now, because
15471                      `Internal<Template>' not being complete, the Bind
15472                      template cannot be looked up in that context.  So
15473                      we need to "store" `Bind<Argument>' for later
15474                      when the context of Bind becomes complete.  Let's
15475                      store that in a TYPENAME_TYPE.  */
15476                   return make_typename_type (TYPE_CONTEXT (arg),
15477                                              build_nt (TEMPLATE_ID_EXPR,
15478                                                        TYPE_IDENTIFIER (arg),
15479                                                        argvec),
15480                                              typename_type,
15481                                              complain);
15482
15483                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
15484                    are resolving nested-types in the signature of a
15485                    member function templates.  Otherwise ARG is a
15486                    TEMPLATE_DECL and is the real template to be
15487                    instantiated.  */
15488                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15489                   arg = TYPE_NAME (arg);
15490
15491                 r = lookup_template_class (arg,
15492                                            argvec, in_decl,
15493                                            DECL_CONTEXT (arg),
15494                                             /*entering_scope=*/0,
15495                                            complain);
15496                 return cp_build_qualified_type_real
15497                   (r, cp_type_quals (t) | cp_type_quals (r), complain);
15498               }
15499             else if (code == TEMPLATE_TEMPLATE_PARM)
15500               return arg;
15501             else
15502               /* TEMPLATE_PARM_INDEX.  */
15503               return convert_from_reference (unshare_expr (arg));
15504           }
15505
15506         if (level == 1)
15507           /* This can happen during the attempted tsubst'ing in
15508              unify.  This means that we don't yet have any information
15509              about the template parameter in question.  */
15510           return t;
15511
15512         /* Early in template argument deduction substitution, we don't
15513            want to reduce the level of 'auto', or it will be confused
15514            with a normal template parm in subsequent deduction.
15515            Similarly, don't reduce the level of template parameters to
15516            avoid mismatches when deducing their types.  */
15517         if (complain & tf_partial)
15518           return t;
15519
15520         /* If we get here, we must have been looking at a parm for a
15521            more deeply nested template.  Make a new version of this
15522            template parameter, but with a lower level.  */
15523         switch (code)
15524           {
15525           case TEMPLATE_TYPE_PARM:
15526           case TEMPLATE_TEMPLATE_PARM:
15527           case BOUND_TEMPLATE_TEMPLATE_PARM:
15528             if (cp_type_quals (t))
15529               {
15530                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
15531                 r = cp_build_qualified_type_real
15532                   (r, cp_type_quals (t),
15533                    complain | (code == TEMPLATE_TYPE_PARM
15534                                ? tf_ignore_bad_quals : 0));
15535               }
15536             else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
15537                      && PLACEHOLDER_TYPE_CONSTRAINTS (t)
15538                      && (r = (TEMPLATE_PARM_DESCENDANTS
15539                               (TEMPLATE_TYPE_PARM_INDEX (t))))
15540                      && (r = TREE_TYPE (r))
15541                      && !PLACEHOLDER_TYPE_CONSTRAINTS (r))
15542               /* Break infinite recursion when substituting the constraints
15543                  of a constrained placeholder.  */;
15544             else if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
15545                      && !PLACEHOLDER_TYPE_CONSTRAINTS (t)
15546                      && !CLASS_PLACEHOLDER_TEMPLATE (t)
15547                      && (arg = TEMPLATE_TYPE_PARM_INDEX (t),
15548                          r = TEMPLATE_PARM_DESCENDANTS (arg))
15549                      && (TEMPLATE_PARM_LEVEL (r)
15550                          == TEMPLATE_PARM_LEVEL (arg) - levels))
15551                 /* Cache the simple case of lowering a type parameter.  */
15552               r = TREE_TYPE (r);
15553             else
15554               {
15555                 r = copy_type (t);
15556                 TEMPLATE_TYPE_PARM_INDEX (r)
15557                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
15558                                                 r, levels, args, complain);
15559                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
15560                 TYPE_MAIN_VARIANT (r) = r;
15561                 TYPE_POINTER_TO (r) = NULL_TREE;
15562                 TYPE_REFERENCE_TO (r) = NULL_TREE;
15563
15564                 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
15565                   {
15566                     /* Propagate constraints on placeholders since they are
15567                        only instantiated during satisfaction.  */
15568                     if (tree constr = PLACEHOLDER_TYPE_CONSTRAINTS (t))
15569                       PLACEHOLDER_TYPE_CONSTRAINTS (r) = constr;
15570                     else if (tree pl = CLASS_PLACEHOLDER_TEMPLATE (t))
15571                       {
15572                         pl = tsubst_copy (pl, args, complain, in_decl);
15573                         CLASS_PLACEHOLDER_TEMPLATE (r) = pl;
15574                       }
15575                   }
15576
15577                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
15578                   /* We have reduced the level of the template
15579                      template parameter, but not the levels of its
15580                      template parameters, so canonical_type_parameter
15581                      will not be able to find the canonical template
15582                      template parameter for this level. Thus, we
15583                      require structural equality checking to compare
15584                      TEMPLATE_TEMPLATE_PARMs. */
15585                   SET_TYPE_STRUCTURAL_EQUALITY (r);
15586                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
15587                   SET_TYPE_STRUCTURAL_EQUALITY (r);
15588                 else
15589                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
15590
15591                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
15592                   {
15593                     tree tinfo = TYPE_TEMPLATE_INFO (t);
15594                     /* We might need to substitute into the types of non-type
15595                        template parameters.  */
15596                     tree tmpl = tsubst (TI_TEMPLATE (tinfo), args,
15597                                         complain, in_decl);
15598                     if (tmpl == error_mark_node)
15599                       return error_mark_node;
15600                     tree argvec = tsubst (TI_ARGS (tinfo), args,
15601                                           complain, in_decl);
15602                     if (argvec == error_mark_node)
15603                       return error_mark_node;
15604
15605                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
15606                       = build_template_info (tmpl, argvec);
15607                   }
15608               }
15609             break;
15610
15611           case TEMPLATE_PARM_INDEX:
15612             /* OK, now substitute the type of the non-type parameter.  We
15613                couldn't do it earlier because it might be an auto parameter,
15614                and we wouldn't need to if we had an argument.  */
15615             type = tsubst (type, args, complain, in_decl);
15616             if (type == error_mark_node)
15617               return error_mark_node;
15618             r = reduce_template_parm_level (t, type, levels, args, complain);
15619             break;
15620
15621           default:
15622             gcc_unreachable ();
15623           }
15624
15625         return r;
15626       }
15627
15628     case TREE_LIST:
15629       return tsubst_tree_list (t, args, complain, in_decl);
15630
15631     case TREE_BINFO:
15632       /* We should never be tsubsting a binfo.  */
15633       gcc_unreachable ();
15634
15635     case TREE_VEC:
15636       /* A vector of template arguments.  */
15637       gcc_assert (!type);
15638       return tsubst_template_args (t, args, complain, in_decl);
15639
15640     case POINTER_TYPE:
15641     case REFERENCE_TYPE:
15642       {
15643         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
15644           return t;
15645
15646         /* [temp.deduct]
15647
15648            Type deduction may fail for any of the following
15649            reasons:
15650
15651            -- Attempting to create a pointer to reference type.
15652            -- Attempting to create a reference to a reference type or
15653               a reference to void.
15654
15655           Core issue 106 says that creating a reference to a reference
15656           during instantiation is no longer a cause for failure. We
15657           only enforce this check in strict C++98 mode.  */
15658         if ((TYPE_REF_P (type)
15659              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
15660             || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
15661           {
15662             static location_t last_loc;
15663
15664             /* We keep track of the last time we issued this error
15665                message to avoid spewing a ton of messages during a
15666                single bad template instantiation.  */
15667             if (complain & tf_error
15668                 && last_loc != input_location)
15669               {
15670                 if (VOID_TYPE_P (type))
15671                   error ("forming reference to void");
15672                else if (code == POINTER_TYPE)
15673                  error ("forming pointer to reference type %qT", type);
15674                else
15675                   error ("forming reference to reference type %qT", type);
15676                 last_loc = input_location;
15677               }
15678
15679             return error_mark_node;
15680           }
15681         else if (TREE_CODE (type) == FUNCTION_TYPE
15682                  && (type_memfn_quals (type) != TYPE_UNQUALIFIED
15683                      || type_memfn_rqual (type) != REF_QUAL_NONE))
15684           {
15685             if (complain & tf_error)
15686               {
15687                 if (code == POINTER_TYPE)
15688                   error ("forming pointer to qualified function type %qT",
15689                          type);
15690                 else
15691                   error ("forming reference to qualified function type %qT",
15692                          type);
15693               }
15694             return error_mark_node;
15695           }
15696         else if (code == POINTER_TYPE)
15697           {
15698             r = build_pointer_type (type);
15699             if (TREE_CODE (type) == METHOD_TYPE)
15700               r = build_ptrmemfunc_type (r);
15701           }
15702         else if (TYPE_REF_P (type))
15703           /* In C++0x, during template argument substitution, when there is an
15704              attempt to create a reference to a reference type, reference
15705              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
15706
15707              "If a template-argument for a template-parameter T names a type
15708              that is a reference to a type A, an attempt to create the type
15709              'lvalue reference to cv T' creates the type 'lvalue reference to
15710              A,' while an attempt to create the type type rvalue reference to
15711              cv T' creates the type T"
15712           */
15713           r = cp_build_reference_type
15714               (TREE_TYPE (type),
15715                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
15716         else
15717           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
15718         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
15719
15720         if (r != error_mark_node)
15721           /* Will this ever be needed for TYPE_..._TO values?  */
15722           layout_type (r);
15723
15724         return r;
15725       }
15726     case OFFSET_TYPE:
15727       {
15728         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
15729         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
15730           {
15731             /* [temp.deduct]
15732
15733                Type deduction may fail for any of the following
15734                reasons:
15735
15736                -- Attempting to create "pointer to member of T" when T
15737                   is not a class type.  */
15738             if (complain & tf_error)
15739               error ("creating pointer to member of non-class type %qT", r);
15740             return error_mark_node;
15741           }
15742         if (TYPE_REF_P (type))
15743           {
15744             if (complain & tf_error)
15745               error ("creating pointer to member reference type %qT", type);
15746             return error_mark_node;
15747           }
15748         if (VOID_TYPE_P (type))
15749           {
15750             if (complain & tf_error)
15751               error ("creating pointer to member of type void");
15752             return error_mark_node;
15753           }
15754         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
15755         if (TREE_CODE (type) == FUNCTION_TYPE)
15756           {
15757             /* The type of the implicit object parameter gets its
15758                cv-qualifiers from the FUNCTION_TYPE. */
15759             tree memptr;
15760             tree method_type
15761               = build_memfn_type (type, r, type_memfn_quals (type),
15762                                   type_memfn_rqual (type));
15763             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
15764             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
15765                                                  complain);
15766           }
15767         else
15768           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
15769                                                cp_type_quals (t),
15770                                                complain);
15771       }
15772     case FUNCTION_TYPE:
15773     case METHOD_TYPE:
15774       {
15775         tree fntype;
15776         tree specs;
15777         fntype = tsubst_function_type (t, args, complain, in_decl);
15778         if (fntype == error_mark_node)
15779           return error_mark_node;
15780
15781         /* Substitute the exception specification.  */
15782         specs = tsubst_exception_specification (t, args, complain, in_decl,
15783                                                 /*defer_ok*/fndecl_type);
15784         if (specs == error_mark_node)
15785           return error_mark_node;
15786         if (specs)
15787           fntype = build_exception_variant (fntype, specs);
15788         return fntype;
15789       }
15790     case ARRAY_TYPE:
15791       {
15792         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
15793         if (domain == error_mark_node)
15794           return error_mark_node;
15795
15796         /* As an optimization, we avoid regenerating the array type if
15797            it will obviously be the same as T.  */
15798         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
15799           return t;
15800
15801         /* These checks should match the ones in create_array_type_for_decl.
15802
15803            [temp.deduct]
15804
15805            The deduction may fail for any of the following reasons:
15806
15807            -- Attempting to create an array with an element type that
15808               is void, a function type, or a reference type, or [DR337]
15809               an abstract class type.  */
15810         if (VOID_TYPE_P (type)
15811             || TREE_CODE (type) == FUNCTION_TYPE
15812             || (TREE_CODE (type) == ARRAY_TYPE
15813                 && TYPE_DOMAIN (type) == NULL_TREE)
15814             || TYPE_REF_P (type))
15815           {
15816             if (complain & tf_error)
15817               error ("creating array of %qT", type);
15818             return error_mark_node;
15819           }
15820
15821         if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
15822           return error_mark_node;
15823
15824         r = build_cplus_array_type (type, domain);
15825
15826         if (!valid_array_size_p (input_location, r, in_decl,
15827                                  (complain & tf_error)))
15828           return error_mark_node;
15829
15830         if (TYPE_USER_ALIGN (t))
15831           {
15832             SET_TYPE_ALIGN (r, TYPE_ALIGN (t));
15833             TYPE_USER_ALIGN (r) = 1;
15834           }
15835
15836         return r;
15837       }
15838
15839     case TYPENAME_TYPE:
15840       {
15841         tree ctx = TYPE_CONTEXT (t);
15842         if (TREE_CODE (ctx) == TYPE_PACK_EXPANSION)
15843           {
15844             ctx = tsubst_pack_expansion (ctx, args, complain, in_decl);
15845             if (ctx == error_mark_node
15846                 || TREE_VEC_LENGTH (ctx) > 1)
15847               return error_mark_node;
15848             if (TREE_VEC_LENGTH (ctx) == 0)
15849               {
15850                 if (complain & tf_error)
15851                   error ("%qD is instantiated for an empty pack",
15852                          TYPENAME_TYPE_FULLNAME (t));
15853                 return error_mark_node;
15854               }
15855             ctx = TREE_VEC_ELT (ctx, 0);
15856           }
15857         else
15858           ctx = tsubst_aggr_type (ctx, args, complain, in_decl,
15859                                   /*entering_scope=*/1);
15860         if (ctx == error_mark_node)
15861           return error_mark_node;
15862
15863         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
15864                               complain, in_decl);
15865         if (f == error_mark_node)
15866           return error_mark_node;
15867
15868         if (!MAYBE_CLASS_TYPE_P (ctx))
15869           {
15870             if (complain & tf_error)
15871               error ("%qT is not a class, struct, or union type", ctx);
15872             return error_mark_node;
15873           }
15874         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
15875           {
15876             /* Normally, make_typename_type does not require that the CTX
15877                have complete type in order to allow things like:
15878
15879                  template <class T> struct S { typename S<T>::X Y; };
15880
15881                But, such constructs have already been resolved by this
15882                point, so here CTX really should have complete type, unless
15883                it's a partial instantiation.  */
15884             ctx = complete_type (ctx);
15885             if (!COMPLETE_TYPE_P (ctx))
15886               {
15887                 if (complain & tf_error)
15888                   cxx_incomplete_type_error (NULL_TREE, ctx);
15889                 return error_mark_node;
15890               }
15891           }
15892
15893         f = make_typename_type (ctx, f, typename_type,
15894                                 complain | tf_keep_type_decl);
15895         if (f == error_mark_node)
15896           return f;
15897         if (TREE_CODE (f) == TYPE_DECL)
15898           {
15899             complain |= tf_ignore_bad_quals;
15900             f = TREE_TYPE (f);
15901           }
15902
15903         if (TREE_CODE (f) != TYPENAME_TYPE)
15904           {
15905             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
15906               {
15907                 if (complain & tf_error)
15908                   error ("%qT resolves to %qT, which is not an enumeration type",
15909                          t, f);
15910                 else
15911                   return error_mark_node;
15912               }
15913             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
15914               {
15915                 if (complain & tf_error)
15916                   error ("%qT resolves to %qT, which is not a class type",
15917                          t, f);
15918                 else
15919                   return error_mark_node;
15920               }
15921           }
15922
15923         return cp_build_qualified_type_real
15924           (f, cp_type_quals (f) | cp_type_quals (t), complain);
15925       }
15926
15927     case UNBOUND_CLASS_TEMPLATE:
15928       {
15929         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
15930                                      in_decl, /*entering_scope=*/1);
15931         tree name = TYPE_IDENTIFIER (t);
15932         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
15933
15934         if (ctx == error_mark_node || name == error_mark_node)
15935           return error_mark_node;
15936
15937         if (parm_list)
15938           parm_list = tsubst_template_parms (parm_list, args, complain);
15939         return make_unbound_class_template (ctx, name, parm_list, complain);
15940       }
15941
15942     case TYPEOF_TYPE:
15943       {
15944         tree type;
15945
15946         ++cp_unevaluated_operand;
15947         ++c_inhibit_evaluation_warnings;
15948
15949         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
15950                             complain, in_decl,
15951                             /*integral_constant_expression_p=*/false);
15952
15953         --cp_unevaluated_operand;
15954         --c_inhibit_evaluation_warnings;
15955
15956         type = finish_typeof (type);
15957         return cp_build_qualified_type_real (type,
15958                                              cp_type_quals (t)
15959                                              | cp_type_quals (type),
15960                                              complain);
15961       }
15962
15963     case DECLTYPE_TYPE:
15964       {
15965         tree type;
15966
15967         ++cp_unevaluated_operand;
15968         ++c_inhibit_evaluation_warnings;
15969
15970         type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
15971                                       complain|tf_decltype, in_decl,
15972                                       /*function_p*/false,
15973                                       /*integral_constant_expression*/false);
15974
15975         --cp_unevaluated_operand;
15976         --c_inhibit_evaluation_warnings;
15977
15978         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
15979           type = lambda_capture_field_type (type,
15980                                             false /*explicit_init*/,
15981                                             DECLTYPE_FOR_REF_CAPTURE (t));
15982         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
15983           type = lambda_proxy_type (type);
15984         else
15985           {
15986             bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
15987             if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
15988                 && EXPR_P (type))
15989               /* In a template ~id could be either a complement expression
15990                  or an unqualified-id naming a destructor; if instantiating
15991                  it produces an expression, it's not an id-expression or
15992                  member access.  */
15993               id = false;
15994             type = finish_decltype_type (type, id, complain);
15995           }
15996         return cp_build_qualified_type_real (type,
15997                                              cp_type_quals (t)
15998                                              | cp_type_quals (type),
15999                                              complain | tf_ignore_bad_quals);
16000       }
16001
16002     case UNDERLYING_TYPE:
16003       {
16004         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
16005                             complain, in_decl);
16006         return finish_underlying_type (type);
16007       }
16008
16009     case TYPE_ARGUMENT_PACK:
16010     case NONTYPE_ARGUMENT_PACK:
16011       {
16012         tree r;
16013
16014         if (code == NONTYPE_ARGUMENT_PACK)
16015           r = make_node (code);
16016         else
16017           r = cxx_make_type (code);
16018
16019         tree pack_args = ARGUMENT_PACK_ARGS (t);
16020         pack_args = tsubst_template_args (pack_args, args, complain, in_decl);
16021         SET_ARGUMENT_PACK_ARGS (r, pack_args);
16022
16023         return r;
16024       }
16025
16026     case VOID_CST:
16027     case INTEGER_CST:
16028     case REAL_CST:
16029     case STRING_CST:
16030     case PLUS_EXPR:
16031     case MINUS_EXPR:
16032     case NEGATE_EXPR:
16033     case NOP_EXPR:
16034     case INDIRECT_REF:
16035     case ADDR_EXPR:
16036     case CALL_EXPR:
16037     case ARRAY_REF:
16038     case SCOPE_REF:
16039       /* We should use one of the expression tsubsts for these codes.  */
16040       gcc_unreachable ();
16041
16042     default:
16043       sorry ("use of %qs in template", get_tree_code_name (code));
16044       return error_mark_node;
16045     }
16046 }
16047
16048 /* tsubst a BASELINK.  OBJECT_TYPE, if non-NULL, is the type of the
16049    expression on the left-hand side of the "." or "->" operator.  We
16050    only do the lookup if we had a dependent BASELINK.  Otherwise we
16051    adjust it onto the instantiated heirarchy.  */
16052
16053 static tree
16054 tsubst_baselink (tree baselink, tree object_type,
16055                  tree args, tsubst_flags_t complain, tree in_decl)
16056 {
16057   bool qualified_p = BASELINK_QUALIFIED_P (baselink);
16058   tree qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
16059   qualifying_scope = tsubst (qualifying_scope, args, complain, in_decl);
16060
16061   tree optype = BASELINK_OPTYPE (baselink);
16062   optype = tsubst (optype, args, complain, in_decl);
16063
16064   tree template_args = NULL_TREE;
16065   bool template_id_p = false;
16066   tree fns = BASELINK_FUNCTIONS (baselink);
16067   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
16068     {
16069       template_id_p = true;
16070       template_args = TREE_OPERAND (fns, 1);
16071       fns = TREE_OPERAND (fns, 0);
16072       if (template_args)
16073         template_args = tsubst_template_args (template_args, args,
16074                                               complain, in_decl);
16075     }
16076
16077   tree binfo_type = BINFO_TYPE (BASELINK_BINFO (baselink));
16078   binfo_type = tsubst (binfo_type, args, complain, in_decl);
16079   bool dependent_p = binfo_type != BINFO_TYPE (BASELINK_BINFO (baselink));
16080
16081   if (dependent_p)
16082     {
16083       tree name = OVL_NAME (fns);
16084       if (IDENTIFIER_CONV_OP_P (name))
16085         name = make_conv_op_name (optype);
16086
16087       if (name == complete_dtor_identifier)
16088         /* Treat as-if non-dependent below.  */
16089         dependent_p = false;
16090
16091       baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1,
16092                                   complain);
16093       if (!baselink)
16094         {
16095           if ((complain & tf_error)
16096               && constructor_name_p (name, qualifying_scope))
16097             error ("cannot call constructor %<%T::%D%> directly",
16098                    qualifying_scope, name);
16099           return error_mark_node;
16100         }
16101
16102       if (BASELINK_P (baselink))
16103         fns = BASELINK_FUNCTIONS (baselink);
16104     }
16105   else
16106     /* We're going to overwrite pieces below, make a duplicate.  */
16107     baselink = copy_node (baselink);
16108
16109   /* If lookup found a single function, mark it as used at this point.
16110      (If lookup found multiple functions the one selected later by
16111      overload resolution will be marked as used at that point.)  */
16112   if (!template_id_p && !really_overloaded_fn (fns))
16113     {
16114       tree fn = OVL_FIRST (fns);
16115       bool ok = mark_used (fn, complain);
16116       if (!ok && !(complain & tf_error))
16117         return error_mark_node;
16118       if (ok && BASELINK_P (baselink))
16119         /* We might have instantiated an auto function.  */
16120         TREE_TYPE (baselink) = TREE_TYPE (fn);
16121     }
16122
16123   if (BASELINK_P (baselink))
16124     {
16125       /* Add back the template arguments, if present.  */
16126       if (template_id_p)
16127         BASELINK_FUNCTIONS (baselink)
16128           = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fns, template_args);
16129
16130       /* Update the conversion operator type.  */
16131       BASELINK_OPTYPE (baselink) = optype;
16132     }
16133
16134   if (!object_type)
16135     object_type = current_class_type;
16136
16137   if (qualified_p || !dependent_p)
16138     {
16139       baselink = adjust_result_of_qualified_name_lookup (baselink,
16140                                                          qualifying_scope,
16141                                                          object_type);
16142       if (!qualified_p)
16143         /* We need to call adjust_result_of_qualified_name_lookup in case the
16144            destructor names a base class, but we unset BASELINK_QUALIFIED_P
16145            so that we still get virtual function binding.  */
16146         BASELINK_QUALIFIED_P (baselink) = false;
16147     }
16148
16149   return baselink;
16150 }
16151
16152 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
16153    true if the qualified-id will be a postfix-expression in-and-of
16154    itself; false if more of the postfix-expression follows the
16155    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
16156    of "&".  */
16157
16158 static tree
16159 tsubst_qualified_id (tree qualified_id, tree args,
16160                      tsubst_flags_t complain, tree in_decl,
16161                      bool done, bool address_p)
16162 {
16163   tree expr;
16164   tree scope;
16165   tree name;
16166   bool is_template;
16167   tree template_args;
16168   location_t loc = UNKNOWN_LOCATION;
16169
16170   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
16171
16172   /* Figure out what name to look up.  */
16173   name = TREE_OPERAND (qualified_id, 1);
16174   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
16175     {
16176       is_template = true;
16177       loc = EXPR_LOCATION (name);
16178       template_args = TREE_OPERAND (name, 1);
16179       if (template_args)
16180         template_args = tsubst_template_args (template_args, args,
16181                                               complain, in_decl);
16182       if (template_args == error_mark_node)
16183         return error_mark_node;
16184       name = TREE_OPERAND (name, 0);
16185     }
16186   else
16187     {
16188       is_template = false;
16189       template_args = NULL_TREE;
16190     }
16191
16192   /* Substitute into the qualifying scope.  When there are no ARGS, we
16193      are just trying to simplify a non-dependent expression.  In that
16194      case the qualifying scope may be dependent, and, in any case,
16195      substituting will not help.  */
16196   scope = TREE_OPERAND (qualified_id, 0);
16197   if (args)
16198     {
16199       scope = tsubst (scope, args, complain, in_decl);
16200       expr = tsubst_copy (name, args, complain, in_decl);
16201     }
16202   else
16203     expr = name;
16204
16205   if (dependent_scope_p (scope))
16206     {
16207       if (is_template)
16208         expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
16209       tree r = build_qualified_name (NULL_TREE, scope, expr,
16210                                      QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
16211       REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (qualified_id);
16212       return r;
16213     }
16214
16215   if (!BASELINK_P (name) && !DECL_P (expr))
16216     {
16217       if (TREE_CODE (expr) == BIT_NOT_EXPR)
16218         {
16219           /* A BIT_NOT_EXPR is used to represent a destructor.  */
16220           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
16221             {
16222               error ("qualifying type %qT does not match destructor name ~%qT",
16223                      scope, TREE_OPERAND (expr, 0));
16224               expr = error_mark_node;
16225             }
16226           else
16227             expr = lookup_qualified_name (scope, complete_dtor_identifier,
16228                                           LOOK_want::NORMAL, false);
16229         }
16230       else
16231         expr = lookup_qualified_name (scope, expr, LOOK_want::NORMAL, false);
16232       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
16233                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
16234         {
16235           if (complain & tf_error)
16236             {
16237               error ("dependent-name %qE is parsed as a non-type, but "
16238                      "instantiation yields a type", qualified_id);
16239               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
16240             }
16241           return error_mark_node;
16242         }
16243     }
16244
16245   if (DECL_P (expr))
16246     {
16247       if (!check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
16248                                                 scope, complain))
16249         return error_mark_node;
16250       /* Remember that there was a reference to this entity.  */
16251       if (!mark_used (expr, complain) && !(complain & tf_error))
16252         return error_mark_node;
16253     }
16254
16255   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
16256     {
16257       if (complain & tf_error)
16258         qualified_name_lookup_error (scope,
16259                                      TREE_OPERAND (qualified_id, 1),
16260                                      expr, input_location);
16261       return error_mark_node;
16262     }
16263
16264   if (is_template)
16265     {
16266       /* We may be repeating a check already done during parsing, but
16267          if it was well-formed and passed then, it will pass again
16268          now, and if it didn't, we wouldn't have got here.  The case
16269          we want to catch is when we couldn't tell then, and can now,
16270          namely when templ prior to substitution was an
16271          identifier.  */
16272       if (flag_concepts && check_auto_in_tmpl_args (expr, template_args))
16273         return error_mark_node;
16274
16275       if (variable_template_p (expr))
16276         expr = lookup_and_finish_template_variable (expr, template_args,
16277                                                     complain);
16278       else
16279         expr = lookup_template_function (expr, template_args);
16280     }
16281
16282   if (expr == error_mark_node && complain & tf_error)
16283     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
16284                                  expr, input_location);
16285   else if (TYPE_P (scope))
16286     {
16287       expr = (adjust_result_of_qualified_name_lookup
16288               (expr, scope, current_nonlambda_class_type ()));
16289       expr = (finish_qualified_id_expr
16290               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
16291                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
16292                /*template_arg_p=*/false, complain));
16293     }
16294
16295   /* Expressions do not generally have reference type.  */
16296   if (TREE_CODE (expr) != SCOPE_REF
16297       /* However, if we're about to form a pointer-to-member, we just
16298          want the referenced member referenced.  */
16299       && TREE_CODE (expr) != OFFSET_REF)
16300     expr = convert_from_reference (expr);
16301
16302   if (REF_PARENTHESIZED_P (qualified_id))
16303     expr = force_paren_expr (expr);
16304
16305   return expr;
16306 }
16307
16308 /* tsubst the initializer for a VAR_DECL.  INIT is the unsubstituted
16309    initializer, DECL is the substituted VAR_DECL.  Other arguments are as
16310    for tsubst.  */
16311
16312 static tree
16313 tsubst_init (tree init, tree decl, tree args,
16314              tsubst_flags_t complain, tree in_decl)
16315 {
16316   if (!init)
16317     return NULL_TREE;
16318
16319   init = tsubst_expr (init, args, complain, in_decl, false);
16320
16321   tree type = TREE_TYPE (decl);
16322
16323   if (!init && type != error_mark_node)
16324     {
16325       if (tree auto_node = type_uses_auto (type))
16326         {
16327           if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
16328             {
16329               if (complain & tf_error)
16330                 error ("initializer for %q#D expands to an empty list "
16331                        "of expressions", decl);
16332               return error_mark_node;
16333             }
16334         }
16335       else if (!dependent_type_p (type))
16336         {
16337           /* If we had an initializer but it
16338              instantiated to nothing,
16339              value-initialize the object.  This will
16340              only occur when the initializer was a
16341              pack expansion where the parameter packs
16342              used in that expansion were of length
16343              zero.  */
16344           init = build_value_init (type, complain);
16345           if (TREE_CODE (init) == AGGR_INIT_EXPR)
16346             init = get_target_expr_sfinae (init, complain);
16347           if (TREE_CODE (init) == TARGET_EXPR)
16348             TARGET_EXPR_DIRECT_INIT_P (init) = true;
16349         }
16350     }
16351
16352   return init;
16353 }
16354
16355 /* If T is a reference to a dependent member of the current instantiation C and
16356    we are trying to refer to that member in a partial instantiation of C,
16357    return a SCOPE_REF; otherwise, return NULL_TREE.
16358
16359    This can happen when forming a C++17 deduction guide, as in PR96199.  */
16360
16361 static tree
16362 maybe_dependent_member_ref (tree t, tree args, tsubst_flags_t complain,
16363                             tree in_decl)
16364 {
16365   if (cxx_dialect < cxx17)
16366     return NULL_TREE;
16367
16368   tree ctx = context_for_name_lookup (t);
16369   if (!CLASS_TYPE_P (ctx))
16370     return NULL_TREE;
16371
16372   ctx = tsubst (ctx, args, complain, in_decl);
16373   if (dependent_scope_p (ctx))
16374     return build_qualified_name (NULL_TREE, ctx, DECL_NAME (t),
16375                                  /*template_p=*/false);
16376
16377   return NULL_TREE;
16378 }
16379
16380 /* Like tsubst, but deals with expressions.  This function just replaces
16381    template parms; to finish processing the resultant expression, use
16382    tsubst_copy_and_build or tsubst_expr.  */
16383
16384 static tree
16385 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
16386 {
16387   enum tree_code code;
16388   tree r;
16389
16390   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
16391     return t;
16392
16393   code = TREE_CODE (t);
16394
16395   switch (code)
16396     {
16397     case PARM_DECL:
16398       r = retrieve_local_specialization (t);
16399
16400       if (r == NULL_TREE)
16401         {
16402           /* We get here for a use of 'this' in an NSDMI.  */
16403           if (DECL_NAME (t) == this_identifier && current_class_ptr)
16404             return current_class_ptr;
16405
16406           /* This can happen for a parameter name used later in a function
16407              declaration (such as in a late-specified return type).  Just
16408              make a dummy decl, since it's only used for its type.  */
16409           gcc_assert (cp_unevaluated_operand != 0);
16410           r = tsubst_decl (t, args, complain);
16411           /* Give it the template pattern as its context; its true context
16412              hasn't been instantiated yet and this is good enough for
16413              mangling.  */
16414           DECL_CONTEXT (r) = DECL_CONTEXT (t);
16415         }
16416
16417       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
16418         r = argument_pack_select_arg (r);
16419       if (!mark_used (r, complain) && !(complain & tf_error))
16420         return error_mark_node;
16421       return r;
16422
16423     case CONST_DECL:
16424       {
16425         tree enum_type;
16426         tree v;
16427
16428         if (DECL_TEMPLATE_PARM_P (t))
16429           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
16430         /* There is no need to substitute into namespace-scope
16431            enumerators.  */
16432         if (DECL_NAMESPACE_SCOPE_P (t))
16433           return t;
16434         /* If ARGS is NULL, then T is known to be non-dependent.  */
16435         if (args == NULL_TREE)
16436           return scalar_constant_value (t);
16437
16438         if (tree ref = maybe_dependent_member_ref (t, args, complain, in_decl))
16439           return ref;
16440
16441         /* Unfortunately, we cannot just call lookup_name here.
16442            Consider:
16443
16444              template <int I> int f() {
16445              enum E { a = I };
16446              struct S { void g() { E e = a; } };
16447              };
16448
16449            When we instantiate f<7>::S::g(), say, lookup_name is not
16450            clever enough to find f<7>::a.  */
16451         enum_type
16452           = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
16453                               /*entering_scope=*/0);
16454
16455         for (v = TYPE_VALUES (enum_type);
16456              v != NULL_TREE;
16457              v = TREE_CHAIN (v))
16458           if (TREE_PURPOSE (v) == DECL_NAME (t))
16459             return TREE_VALUE (v);
16460
16461           /* We didn't find the name.  That should never happen; if
16462              name-lookup found it during preliminary parsing, we
16463              should find it again here during instantiation.  */
16464         gcc_unreachable ();
16465       }
16466       return t;
16467
16468     case FIELD_DECL:
16469       if (DECL_CONTEXT (t))
16470         {
16471           tree ctx;
16472
16473           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
16474                                   /*entering_scope=*/1);
16475           if (ctx != DECL_CONTEXT (t))
16476             {
16477               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
16478               if (!r)
16479                 {
16480                   if (complain & tf_error)
16481                     error ("using invalid field %qD", t);
16482                   return error_mark_node;
16483                 }
16484               return r;
16485             }
16486         }
16487
16488       return t;
16489
16490     case VAR_DECL:
16491       if (tree ref = maybe_dependent_member_ref (t, args, complain, in_decl))
16492         return ref;
16493       gcc_fallthrough();
16494     case FUNCTION_DECL:
16495       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
16496         r = tsubst (t, args, complain, in_decl);
16497       else if (local_variable_p (t)
16498                && uses_template_parms (DECL_CONTEXT (t)))
16499         {
16500           r = retrieve_local_specialization (t);
16501           if (r == NULL_TREE)
16502             {
16503               /* First try name lookup to find the instantiation.  */
16504               r = lookup_name (DECL_NAME (t));
16505               if (r)
16506                 {
16507                   if (!VAR_P (r))
16508                     {
16509                       /* During error-recovery we may find a non-variable,
16510                          even an OVERLOAD: just bail out and avoid ICEs and
16511                          duplicate diagnostics (c++/62207).  */
16512                       gcc_assert (seen_error ());
16513                       return error_mark_node;
16514                     }
16515                   if (!is_capture_proxy (r))
16516                     {
16517                       /* Make sure the one we found is the one we want.  */
16518                       tree ctx = enclosing_instantiation_of (DECL_CONTEXT (t));
16519                       if (ctx != DECL_CONTEXT (r))
16520                         r = NULL_TREE;
16521                     }
16522                 }
16523
16524               if (r)
16525                 /* OK */;
16526               else
16527                 {
16528                   /* This can happen for a variable used in a
16529                      late-specified return type of a local lambda, or for a
16530                      local static or constant.  Building a new VAR_DECL
16531                      should be OK in all those cases.  */
16532                   r = tsubst_decl (t, args, complain);
16533                   if (local_specializations)
16534                     /* Avoid infinite recursion (79640).  */
16535                     register_local_specialization (r, t);
16536                   if (decl_maybe_constant_var_p (r))
16537                     {
16538                       /* We can't call cp_finish_decl, so handle the
16539                          initializer by hand.  */
16540                       tree init = tsubst_init (DECL_INITIAL (t), r, args,
16541                                                complain, in_decl);
16542                       if (!processing_template_decl)
16543                         init = maybe_constant_init (init);
16544                       if (processing_template_decl
16545                           ? potential_constant_expression (init)
16546                           : reduced_constant_expression_p (init))
16547                         DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
16548                           = TREE_CONSTANT (r) = true;
16549                       DECL_INITIAL (r) = init;
16550                       if (tree auto_node = type_uses_auto (TREE_TYPE (r)))
16551                         TREE_TYPE (r)
16552                           = do_auto_deduction (TREE_TYPE (r), init, auto_node,
16553                                                complain, adc_variable_type);
16554                     }
16555                   gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
16556                               || decl_constant_var_p (r)
16557                               || seen_error ());
16558                   if (!processing_template_decl
16559                       && !TREE_STATIC (r))
16560                     r = process_outer_var_ref (r, complain);
16561                 }
16562               /* Remember this for subsequent uses.  */
16563               if (local_specializations)
16564                 register_local_specialization (r, t);
16565             }
16566           if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
16567             r = argument_pack_select_arg (r);
16568         }
16569       else
16570         r = t;
16571       if (!mark_used (r, complain))
16572         return error_mark_node;
16573       return r;
16574
16575     case NAMESPACE_DECL:
16576       return t;
16577
16578     case OVERLOAD:
16579       return t;
16580
16581     case BASELINK:
16582       return tsubst_baselink (t, current_nonlambda_class_type (),
16583                               args, complain, in_decl);
16584
16585     case TEMPLATE_DECL:
16586       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
16587         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
16588                        args, complain, in_decl);
16589       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
16590         return tsubst (t, args, complain, in_decl);
16591       else if (DECL_CLASS_SCOPE_P (t)
16592                && uses_template_parms (DECL_CONTEXT (t)))
16593         {
16594           /* Template template argument like the following example need
16595              special treatment:
16596
16597                template <template <class> class TT> struct C {};
16598                template <class T> struct D {
16599                  template <class U> struct E {};
16600                  C<E> c;                                // #1
16601                };
16602                D<int> d;                                // #2
16603
16604              We are processing the template argument `E' in #1 for
16605              the template instantiation #2.  Originally, `E' is a
16606              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
16607              have to substitute this with one having context `D<int>'.  */
16608
16609           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
16610           if (dependent_scope_p (context))
16611             {
16612               /* When rewriting a constructor into a deduction guide, a
16613                  non-dependent name can become dependent, so memtmpl<args>
16614                  becomes context::template memtmpl<args>.  */
16615               tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16616               return build_qualified_name (type, context, DECL_NAME (t),
16617                                            /*template*/true);
16618             }
16619           return lookup_field (context, DECL_NAME(t), 0, false);
16620         }
16621       else
16622         /* Ordinary template template argument.  */
16623         return t;
16624
16625     case NON_LVALUE_EXPR:
16626     case VIEW_CONVERT_EXPR:
16627         {
16628           /* Handle location wrappers by substituting the wrapped node
16629              first, *then* reusing the resulting type.  Doing the type
16630              first ensures that we handle template parameters and
16631              parameter pack expansions.  */
16632           if (location_wrapper_p (t))
16633             {
16634               tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args,
16635                                       complain, in_decl);
16636               return maybe_wrap_with_location (op0, EXPR_LOCATION (t));
16637             }
16638           tree op = TREE_OPERAND (t, 0);
16639           if (code == VIEW_CONVERT_EXPR
16640               && TREE_CODE (op) == TEMPLATE_PARM_INDEX)
16641             {
16642               /* Wrapper to make a C++20 template parameter object const.  */
16643               op = tsubst_copy (op, args, complain, in_decl);
16644               if (TREE_CODE (op) == TEMPLATE_PARM_INDEX)
16645                 {
16646                   tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16647                   return build1 (code, type, op);
16648                 }
16649               else
16650                 {
16651                   gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (op))
16652                               || (TREE_CODE (op) == IMPLICIT_CONV_EXPR
16653                                   && IMPLICIT_CONV_EXPR_NONTYPE_ARG (op)));
16654                   return op;
16655                 }
16656             }
16657           /* force_paren_expr can also create a VIEW_CONVERT_EXPR.  */
16658           else if (code == VIEW_CONVERT_EXPR && REF_PARENTHESIZED_P (t))
16659             {
16660               op = tsubst_copy (op, args, complain, in_decl);
16661               op = build1 (code, TREE_TYPE (op), op);
16662               REF_PARENTHESIZED_P (op) = true;
16663               return op;
16664             }
16665           /* We shouldn't see any other uses of these in templates.  */
16666           gcc_unreachable ();
16667         }
16668
16669     case CAST_EXPR:
16670     case REINTERPRET_CAST_EXPR:
16671     case CONST_CAST_EXPR:
16672     case STATIC_CAST_EXPR:
16673     case DYNAMIC_CAST_EXPR:
16674     case IMPLICIT_CONV_EXPR:
16675     case CONVERT_EXPR:
16676     case NOP_EXPR:
16677       {
16678         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16679         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16680         return build1 (code, type, op0);
16681       }
16682
16683     case SIZEOF_EXPR:
16684       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
16685           || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
16686         {
16687           tree expanded, op = TREE_OPERAND (t, 0);
16688           int len = 0;
16689
16690           if (SIZEOF_EXPR_TYPE_P (t))
16691             op = TREE_TYPE (op);
16692
16693           ++cp_unevaluated_operand;
16694           ++c_inhibit_evaluation_warnings;
16695           /* We only want to compute the number of arguments.  */
16696           if (PACK_EXPANSION_P (op))
16697             expanded = tsubst_pack_expansion (op, args, complain, in_decl);
16698           else
16699             expanded = tsubst_template_args (ARGUMENT_PACK_ARGS (op),
16700                                              args, complain, in_decl);
16701           --cp_unevaluated_operand;
16702           --c_inhibit_evaluation_warnings;
16703
16704           if (TREE_CODE (expanded) == TREE_VEC)
16705             {
16706               len = TREE_VEC_LENGTH (expanded);
16707               /* Set TREE_USED for the benefit of -Wunused.  */
16708               for (int i = 0; i < len; i++)
16709                 if (DECL_P (TREE_VEC_ELT (expanded, i)))
16710                   TREE_USED (TREE_VEC_ELT (expanded, i)) = true;
16711             }
16712
16713           if (expanded == error_mark_node)
16714             return error_mark_node;
16715           else if (PACK_EXPANSION_P (expanded)
16716                    || (TREE_CODE (expanded) == TREE_VEC
16717                        && pack_expansion_args_count (expanded)))
16718
16719             {
16720               if (PACK_EXPANSION_P (expanded))
16721                 /* OK.  */;
16722               else if (TREE_VEC_LENGTH (expanded) == 1)
16723                 expanded = TREE_VEC_ELT (expanded, 0);
16724               else
16725                 expanded = make_argument_pack (expanded);
16726
16727               if (TYPE_P (expanded))
16728                 return cxx_sizeof_or_alignof_type (input_location,
16729                                                    expanded, SIZEOF_EXPR,
16730                                                    false,
16731                                                    complain & tf_error);
16732               else
16733                 return cxx_sizeof_or_alignof_expr (input_location,
16734                                                    expanded, SIZEOF_EXPR,
16735                                                    complain & tf_error);
16736             }
16737           else
16738             return build_int_cst (size_type_node, len);
16739         }
16740       if (SIZEOF_EXPR_TYPE_P (t))
16741         {
16742           r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
16743                       args, complain, in_decl);
16744           r = build1 (NOP_EXPR, r, error_mark_node);
16745           r = build1 (SIZEOF_EXPR,
16746                       tsubst (TREE_TYPE (t), args, complain, in_decl), r);
16747           SIZEOF_EXPR_TYPE_P (r) = 1;
16748           return r;
16749         }
16750       /* Fall through */
16751
16752     case INDIRECT_REF:
16753     case NEGATE_EXPR:
16754     case TRUTH_NOT_EXPR:
16755     case BIT_NOT_EXPR:
16756     case ADDR_EXPR:
16757     case UNARY_PLUS_EXPR:      /* Unary + */
16758     case ALIGNOF_EXPR:
16759     case AT_ENCODE_EXPR:
16760     case ARROW_EXPR:
16761     case THROW_EXPR:
16762     case TYPEID_EXPR:
16763     case REALPART_EXPR:
16764     case IMAGPART_EXPR:
16765     case PAREN_EXPR:
16766       {
16767         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16768         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16769         r = build1 (code, type, op0);
16770         if (code == ALIGNOF_EXPR)
16771           ALIGNOF_EXPR_STD_P (r) = ALIGNOF_EXPR_STD_P (t);
16772         return r;
16773       }
16774
16775     case COMPONENT_REF:
16776       {
16777         tree object;
16778         tree name;
16779
16780         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16781         name = TREE_OPERAND (t, 1);
16782         if (TREE_CODE (name) == BIT_NOT_EXPR)
16783           {
16784             name = tsubst_copy (TREE_OPERAND (name, 0), args,
16785                                 complain, in_decl);
16786             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
16787           }
16788         else if (TREE_CODE (name) == SCOPE_REF
16789                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
16790           {
16791             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
16792                                      complain, in_decl);
16793             name = TREE_OPERAND (name, 1);
16794             name = tsubst_copy (TREE_OPERAND (name, 0), args,
16795                                 complain, in_decl);
16796             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
16797             name = build_qualified_name (/*type=*/NULL_TREE,
16798                                          base, name,
16799                                          /*template_p=*/false);
16800           }
16801         else if (BASELINK_P (name))
16802           name = tsubst_baselink (name,
16803                                   non_reference (TREE_TYPE (object)),
16804                                   args, complain,
16805                                   in_decl);
16806         else
16807           name = tsubst_copy (name, args, complain, in_decl);
16808         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
16809       }
16810
16811     case PLUS_EXPR:
16812     case MINUS_EXPR:
16813     case MULT_EXPR:
16814     case TRUNC_DIV_EXPR:
16815     case CEIL_DIV_EXPR:
16816     case FLOOR_DIV_EXPR:
16817     case ROUND_DIV_EXPR:
16818     case EXACT_DIV_EXPR:
16819     case BIT_AND_EXPR:
16820     case BIT_IOR_EXPR:
16821     case BIT_XOR_EXPR:
16822     case TRUNC_MOD_EXPR:
16823     case FLOOR_MOD_EXPR:
16824     case TRUTH_ANDIF_EXPR:
16825     case TRUTH_ORIF_EXPR:
16826     case TRUTH_AND_EXPR:
16827     case TRUTH_OR_EXPR:
16828     case RSHIFT_EXPR:
16829     case LSHIFT_EXPR:
16830     case EQ_EXPR:
16831     case NE_EXPR:
16832     case MAX_EXPR:
16833     case MIN_EXPR:
16834     case LE_EXPR:
16835     case GE_EXPR:
16836     case LT_EXPR:
16837     case GT_EXPR:
16838     case COMPOUND_EXPR:
16839     case DOTSTAR_EXPR:
16840     case MEMBER_REF:
16841     case PREDECREMENT_EXPR:
16842     case PREINCREMENT_EXPR:
16843     case POSTDECREMENT_EXPR:
16844     case POSTINCREMENT_EXPR:
16845       {
16846         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16847         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
16848         return build_nt (code, op0, op1);
16849       }
16850
16851     case SCOPE_REF:
16852       {
16853         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16854         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
16855         return build_qualified_name (/*type=*/NULL_TREE, op0, op1,
16856                                      QUALIFIED_NAME_IS_TEMPLATE (t));
16857       }
16858
16859     case ARRAY_REF:
16860       {
16861         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16862         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
16863         return build_nt (ARRAY_REF, op0, op1, NULL_TREE, NULL_TREE);
16864       }
16865
16866     case CALL_EXPR:
16867       {
16868         int n = VL_EXP_OPERAND_LENGTH (t);
16869         tree result = build_vl_exp (CALL_EXPR, n);
16870         int i;
16871         for (i = 0; i < n; i++)
16872           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
16873                                              complain, in_decl);
16874         return result;
16875       }
16876
16877     case COND_EXPR:
16878     case MODOP_EXPR:
16879     case PSEUDO_DTOR_EXPR:
16880     case VEC_PERM_EXPR:
16881       {
16882         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16883         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
16884         tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
16885         r = build_nt (code, op0, op1, op2);
16886         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
16887         return r;
16888       }
16889
16890     case NEW_EXPR:
16891       {
16892         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16893         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
16894         tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
16895         r = build_nt (code, op0, op1, op2);
16896         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
16897         return r;
16898       }
16899
16900     case DELETE_EXPR:
16901       {
16902         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16903         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
16904         r = build_nt (code, op0, op1);
16905         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
16906         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
16907         return r;
16908       }
16909
16910     case TEMPLATE_ID_EXPR:
16911       {
16912         /* Substituted template arguments */
16913         tree fn = TREE_OPERAND (t, 0);
16914         tree targs = TREE_OPERAND (t, 1);
16915
16916         fn = tsubst_copy (fn, args, complain, in_decl);
16917         if (targs)
16918           targs = tsubst_template_args (targs, args, complain, in_decl);
16919
16920         return lookup_template_function (fn, targs);
16921       }
16922
16923     case TREE_LIST:
16924       {
16925         tree purpose, value, chain;
16926
16927         if (t == void_list_node)
16928           return t;
16929
16930         purpose = TREE_PURPOSE (t);
16931         if (purpose)
16932           purpose = tsubst_copy (purpose, args, complain, in_decl);
16933         value = TREE_VALUE (t);
16934         if (value)
16935           value = tsubst_copy (value, args, complain, in_decl);
16936         chain = TREE_CHAIN (t);
16937         if (chain && chain != void_type_node)
16938           chain = tsubst_copy (chain, args, complain, in_decl);
16939         if (purpose == TREE_PURPOSE (t)
16940             && value == TREE_VALUE (t)
16941             && chain == TREE_CHAIN (t))
16942           return t;
16943         return tree_cons (purpose, value, chain);
16944       }
16945
16946     case RECORD_TYPE:
16947     case UNION_TYPE:
16948     case ENUMERAL_TYPE:
16949     case INTEGER_TYPE:
16950     case TEMPLATE_TYPE_PARM:
16951     case TEMPLATE_TEMPLATE_PARM:
16952     case BOUND_TEMPLATE_TEMPLATE_PARM:
16953     case TEMPLATE_PARM_INDEX:
16954     case POINTER_TYPE:
16955     case REFERENCE_TYPE:
16956     case OFFSET_TYPE:
16957     case FUNCTION_TYPE:
16958     case METHOD_TYPE:
16959     case ARRAY_TYPE:
16960     case TYPENAME_TYPE:
16961     case UNBOUND_CLASS_TEMPLATE:
16962     case TYPEOF_TYPE:
16963     case DECLTYPE_TYPE:
16964     case TYPE_DECL:
16965       return tsubst (t, args, complain, in_decl);
16966
16967     case USING_DECL:
16968       t = DECL_NAME (t);
16969       /* Fall through.  */
16970     case IDENTIFIER_NODE:
16971       if (IDENTIFIER_CONV_OP_P (t))
16972         {
16973           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16974           return make_conv_op_name (new_type);
16975         }
16976       else
16977         return t;
16978
16979     case CONSTRUCTOR:
16980       /* This is handled by tsubst_copy_and_build.  */
16981       gcc_unreachable ();
16982
16983     case VA_ARG_EXPR:
16984       {
16985         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
16986         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16987         return build_x_va_arg (EXPR_LOCATION (t), op0, type);
16988       }
16989
16990     case CLEANUP_POINT_EXPR:
16991       /* We shouldn't have built any of these during initial template
16992          generation.  Instead, they should be built during instantiation
16993          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
16994       gcc_unreachable ();
16995
16996     case OFFSET_REF:
16997       {
16998         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
16999         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
17000         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
17001         r = build2 (code, type, op0, op1);
17002         PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
17003         if (!mark_used (TREE_OPERAND (r, 1), complain)
17004             && !(complain & tf_error))
17005           return error_mark_node;
17006         return r;
17007       }
17008
17009     case EXPR_PACK_EXPANSION:
17010       error ("invalid use of pack expansion expression");
17011       return error_mark_node;
17012
17013     case NONTYPE_ARGUMENT_PACK:
17014       error ("use %<...%> to expand argument pack");
17015       return error_mark_node;
17016
17017     case VOID_CST:
17018       gcc_checking_assert (t == void_node && VOID_TYPE_P (TREE_TYPE (t)));
17019       return t;
17020
17021     case INTEGER_CST:
17022     case REAL_CST:
17023     case COMPLEX_CST:
17024       {
17025         /* Instantiate any typedefs in the type.  */
17026         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17027         r = fold_convert (type, t);
17028         gcc_assert (TREE_CODE (r) == code);
17029         return r;
17030       }
17031
17032     case STRING_CST:
17033       {
17034         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
17035         r = t;
17036         if (type != TREE_TYPE (t))
17037           {
17038             r = copy_node (t);
17039             TREE_TYPE (r) = type;
17040           }
17041         return r;
17042       }
17043
17044     case PTRMEM_CST:
17045       /* These can sometimes show up in a partial instantiation, but never
17046          involve template parms.  */
17047       gcc_assert (!uses_template_parms (t));
17048       return t;
17049
17050     case UNARY_LEFT_FOLD_EXPR:
17051       return tsubst_unary_left_fold (t, args, complain, in_decl);
17052     case UNARY_RIGHT_FOLD_EXPR:
17053       return tsubst_unary_right_fold (t, args, complain, in_decl);
17054     case BINARY_LEFT_FOLD_EXPR:
17055       return tsubst_binary_left_fold (t, args, complain, in_decl);
17056     case BINARY_RIGHT_FOLD_EXPR:
17057       return tsubst_binary_right_fold (t, args, complain, in_decl);
17058     case PREDICT_EXPR:
17059       return t;
17060
17061     case DEBUG_BEGIN_STMT:
17062       /* ??? There's no point in copying it for now, but maybe some
17063          day it will contain more information, such as a pointer back
17064          to the containing function, inlined copy or so.  */
17065       return t;
17066
17067     case CO_AWAIT_EXPR:
17068       return tsubst_expr (t, args, complain, in_decl,
17069                           /*integral_constant_expression_p=*/false);
17070       break;
17071
17072     default:
17073       /* We shouldn't get here, but keep going if !flag_checking.  */
17074       if (flag_checking)
17075         gcc_unreachable ();
17076       return t;
17077     }
17078 }
17079
17080 /* Helper function for tsubst_omp_clauses, used for instantiation of
17081    OMP_CLAUSE_DECL of clauses.  */
17082
17083 static tree
17084 tsubst_omp_clause_decl (tree decl, tree args, tsubst_flags_t complain,
17085                         tree in_decl, tree *iterator_cache)
17086 {
17087   if (decl == NULL_TREE)
17088     return NULL_TREE;
17089
17090   /* Handle OpenMP iterators.  */
17091   if (TREE_CODE (decl) == TREE_LIST
17092       && TREE_PURPOSE (decl)
17093       && TREE_CODE (TREE_PURPOSE (decl)) == TREE_VEC)
17094     {
17095       tree ret;
17096       if (iterator_cache[0] == TREE_PURPOSE (decl))
17097         ret = iterator_cache[1];
17098       else
17099         {
17100           tree *tp = &ret;
17101           begin_scope (sk_omp, NULL);
17102           for (tree it = TREE_PURPOSE (decl); it; it = TREE_CHAIN (it))
17103             {
17104               *tp = copy_node (it);
17105               TREE_VEC_ELT (*tp, 0)
17106                 = tsubst_decl (TREE_VEC_ELT (it, 0), args, complain);
17107               TREE_VEC_ELT (*tp, 1)
17108                 = tsubst_expr (TREE_VEC_ELT (it, 1), args, complain, in_decl,
17109                                /*integral_constant_expression_p=*/false);
17110               TREE_VEC_ELT (*tp, 2)
17111                 = tsubst_expr (TREE_VEC_ELT (it, 2), args, complain, in_decl,
17112                                /*integral_constant_expression_p=*/false);
17113               TREE_VEC_ELT (*tp, 3)
17114                 = tsubst_expr (TREE_VEC_ELT (it, 3), args, complain, in_decl,
17115                                /*integral_constant_expression_p=*/false);
17116               TREE_CHAIN (*tp) = NULL_TREE;
17117               tp = &TREE_CHAIN (*tp);
17118             }
17119           TREE_VEC_ELT (ret, 5) = poplevel (1, 1, 0);
17120           iterator_cache[0] = TREE_PURPOSE (decl);
17121           iterator_cache[1] = ret;
17122         }
17123       return build_tree_list (ret, tsubst_omp_clause_decl (TREE_VALUE (decl),
17124                                                            args, complain,
17125                                                            in_decl, NULL));
17126     }
17127
17128   /* Handle an OpenMP array section represented as a TREE_LIST (or
17129      OMP_CLAUSE_DEPEND_KIND).  An OMP_CLAUSE_DEPEND (with a depend
17130      kind of OMP_CLAUSE_DEPEND_SINK) can also be represented as a
17131      TREE_LIST.  We can handle it exactly the same as an array section
17132      (purpose, value, and a chain), even though the nomenclature
17133      (low_bound, length, etc) is different.  */
17134   if (TREE_CODE (decl) == TREE_LIST)
17135     {
17136       tree low_bound
17137         = tsubst_expr (TREE_PURPOSE (decl), args, complain, in_decl,
17138                        /*integral_constant_expression_p=*/false);
17139       tree length = tsubst_expr (TREE_VALUE (decl), args, complain, in_decl,
17140                                  /*integral_constant_expression_p=*/false);
17141       tree chain = tsubst_omp_clause_decl (TREE_CHAIN (decl), args, complain,
17142                                            in_decl, NULL);
17143       if (TREE_PURPOSE (decl) == low_bound
17144           && TREE_VALUE (decl) == length
17145           && TREE_CHAIN (decl) == chain)
17146         return decl;
17147       tree ret = tree_cons (low_bound, length, chain);
17148       OMP_CLAUSE_DEPEND_SINK_NEGATIVE (ret)
17149         = OMP_CLAUSE_DEPEND_SINK_NEGATIVE (decl);
17150       return ret;
17151     }
17152   tree ret = tsubst_expr (decl, args, complain, in_decl,
17153                           /*integral_constant_expression_p=*/false);
17154   /* Undo convert_from_reference tsubst_expr could have called.  */
17155   if (decl
17156       && REFERENCE_REF_P (ret)
17157       && !REFERENCE_REF_P (decl))
17158     ret = TREE_OPERAND (ret, 0);
17159   return ret;
17160 }
17161
17162 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
17163
17164 static tree
17165 tsubst_omp_clauses (tree clauses, enum c_omp_region_type ort,
17166                     tree args, tsubst_flags_t complain, tree in_decl)
17167 {
17168   tree new_clauses = NULL_TREE, nc, oc;
17169   tree linear_no_step = NULL_TREE;
17170   tree iterator_cache[2] = { NULL_TREE, NULL_TREE };
17171
17172   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
17173     {
17174       nc = copy_node (oc);
17175       OMP_CLAUSE_CHAIN (nc) = new_clauses;
17176       new_clauses = nc;
17177
17178       switch (OMP_CLAUSE_CODE (nc))
17179         {
17180         case OMP_CLAUSE_LASTPRIVATE:
17181           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
17182             {
17183               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
17184               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
17185                            in_decl, /*integral_constant_expression_p=*/false);
17186               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
17187                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
17188             }
17189           /* FALLTHRU */
17190         case OMP_CLAUSE_PRIVATE:
17191         case OMP_CLAUSE_SHARED:
17192         case OMP_CLAUSE_FIRSTPRIVATE:
17193         case OMP_CLAUSE_COPYIN:
17194         case OMP_CLAUSE_COPYPRIVATE:
17195         case OMP_CLAUSE_UNIFORM:
17196         case OMP_CLAUSE_DEPEND:
17197         case OMP_CLAUSE_FROM:
17198         case OMP_CLAUSE_TO:
17199         case OMP_CLAUSE_MAP:
17200         case OMP_CLAUSE_NONTEMPORAL:
17201         case OMP_CLAUSE_USE_DEVICE_PTR:
17202         case OMP_CLAUSE_USE_DEVICE_ADDR:
17203         case OMP_CLAUSE_IS_DEVICE_PTR:
17204         case OMP_CLAUSE_INCLUSIVE:
17205         case OMP_CLAUSE_EXCLUSIVE:
17206           OMP_CLAUSE_DECL (nc)
17207             = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
17208                                       in_decl, iterator_cache);
17209           break;
17210         case OMP_CLAUSE_TILE:
17211         case OMP_CLAUSE_IF:
17212         case OMP_CLAUSE_NUM_THREADS:
17213         case OMP_CLAUSE_SCHEDULE:
17214         case OMP_CLAUSE_COLLAPSE:
17215         case OMP_CLAUSE_FINAL:
17216         case OMP_CLAUSE_DEVICE:
17217         case OMP_CLAUSE_DIST_SCHEDULE:
17218         case OMP_CLAUSE_NUM_TEAMS:
17219         case OMP_CLAUSE_THREAD_LIMIT:
17220         case OMP_CLAUSE_SAFELEN:
17221         case OMP_CLAUSE_SIMDLEN:
17222         case OMP_CLAUSE_NUM_TASKS:
17223         case OMP_CLAUSE_GRAINSIZE:
17224         case OMP_CLAUSE_PRIORITY:
17225         case OMP_CLAUSE_ORDERED:
17226         case OMP_CLAUSE_HINT:
17227         case OMP_CLAUSE_NUM_GANGS:
17228         case OMP_CLAUSE_NUM_WORKERS:
17229         case OMP_CLAUSE_VECTOR_LENGTH:
17230         case OMP_CLAUSE_WORKER:
17231         case OMP_CLAUSE_VECTOR:
17232         case OMP_CLAUSE_ASYNC:
17233         case OMP_CLAUSE_WAIT:
17234           OMP_CLAUSE_OPERAND (nc, 0)
17235             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
17236                            in_decl, /*integral_constant_expression_p=*/false);
17237           break;
17238         case OMP_CLAUSE_REDUCTION:
17239         case OMP_CLAUSE_IN_REDUCTION:
17240         case OMP_CLAUSE_TASK_REDUCTION:
17241           if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
17242             {
17243               tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
17244               if (TREE_CODE (placeholder) == SCOPE_REF)
17245                 {
17246                   tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
17247                                        complain, in_decl);
17248                   OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
17249                     = build_qualified_name (NULL_TREE, scope,
17250                                             TREE_OPERAND (placeholder, 1),
17251                                             false);
17252                 }
17253               else
17254                 gcc_assert (identifier_p (placeholder));
17255             }
17256           OMP_CLAUSE_DECL (nc)
17257             = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
17258                                       in_decl, NULL);
17259           break;
17260         case OMP_CLAUSE_GANG:
17261         case OMP_CLAUSE_ALIGNED:
17262           OMP_CLAUSE_DECL (nc)
17263             = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
17264                                       in_decl, NULL);
17265           OMP_CLAUSE_OPERAND (nc, 1)
17266             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
17267                            in_decl, /*integral_constant_expression_p=*/false);
17268           break;
17269         case OMP_CLAUSE_LINEAR:
17270           OMP_CLAUSE_DECL (nc)
17271             = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
17272                                       in_decl, NULL);
17273           if (OMP_CLAUSE_LINEAR_STEP (oc) == NULL_TREE)
17274             {
17275               gcc_assert (!linear_no_step);
17276               linear_no_step = nc;
17277             }
17278           else if (OMP_CLAUSE_LINEAR_VARIABLE_STRIDE (oc))
17279             OMP_CLAUSE_LINEAR_STEP (nc)
17280               = tsubst_omp_clause_decl (OMP_CLAUSE_LINEAR_STEP (oc), args,
17281                                         complain, in_decl, NULL);
17282           else
17283             OMP_CLAUSE_LINEAR_STEP (nc)
17284               = tsubst_expr (OMP_CLAUSE_LINEAR_STEP (oc), args, complain,
17285                              in_decl,
17286                              /*integral_constant_expression_p=*/false);
17287           break;
17288         case OMP_CLAUSE_NOWAIT:
17289         case OMP_CLAUSE_DEFAULT:
17290         case OMP_CLAUSE_UNTIED:
17291         case OMP_CLAUSE_MERGEABLE:
17292         case OMP_CLAUSE_INBRANCH:
17293         case OMP_CLAUSE_NOTINBRANCH:
17294         case OMP_CLAUSE_PROC_BIND:
17295         case OMP_CLAUSE_FOR:
17296         case OMP_CLAUSE_PARALLEL:
17297         case OMP_CLAUSE_SECTIONS:
17298         case OMP_CLAUSE_TASKGROUP:
17299         case OMP_CLAUSE_NOGROUP:
17300         case OMP_CLAUSE_THREADS:
17301         case OMP_CLAUSE_SIMD:
17302         case OMP_CLAUSE_DEFAULTMAP:
17303         case OMP_CLAUSE_ORDER:
17304         case OMP_CLAUSE_BIND:
17305         case OMP_CLAUSE_INDEPENDENT:
17306         case OMP_CLAUSE_AUTO:
17307         case OMP_CLAUSE_SEQ:
17308         case OMP_CLAUSE_IF_PRESENT:
17309         case OMP_CLAUSE_FINALIZE:
17310           break;
17311         default:
17312           gcc_unreachable ();
17313         }
17314       if ((ort & C_ORT_OMP_DECLARE_SIMD) == C_ORT_OMP)
17315         switch (OMP_CLAUSE_CODE (nc))
17316           {
17317           case OMP_CLAUSE_SHARED:
17318           case OMP_CLAUSE_PRIVATE:
17319           case OMP_CLAUSE_FIRSTPRIVATE:
17320           case OMP_CLAUSE_LASTPRIVATE:
17321           case OMP_CLAUSE_COPYPRIVATE:
17322           case OMP_CLAUSE_LINEAR:
17323           case OMP_CLAUSE_REDUCTION:
17324           case OMP_CLAUSE_IN_REDUCTION:
17325           case OMP_CLAUSE_TASK_REDUCTION:
17326           case OMP_CLAUSE_USE_DEVICE_PTR:
17327           case OMP_CLAUSE_USE_DEVICE_ADDR:
17328           case OMP_CLAUSE_IS_DEVICE_PTR:
17329           case OMP_CLAUSE_INCLUSIVE:
17330           case OMP_CLAUSE_EXCLUSIVE:
17331             /* tsubst_expr on SCOPE_REF results in returning
17332                finish_non_static_data_member result.  Undo that here.  */
17333             if (TREE_CODE (OMP_CLAUSE_DECL (oc)) == SCOPE_REF
17334                 && (TREE_CODE (TREE_OPERAND (OMP_CLAUSE_DECL (oc), 1))
17335                     == IDENTIFIER_NODE))
17336               {
17337                 tree t = OMP_CLAUSE_DECL (nc);
17338                 tree v = t;
17339                 while (v)
17340                   switch (TREE_CODE (v))
17341                     {
17342                     case COMPONENT_REF:
17343                     case MEM_REF:
17344                     case INDIRECT_REF:
17345                     CASE_CONVERT:
17346                     case POINTER_PLUS_EXPR:
17347                       v = TREE_OPERAND (v, 0);
17348                       continue;
17349                     case PARM_DECL:
17350                       if (DECL_CONTEXT (v) == current_function_decl
17351                           && DECL_ARTIFICIAL (v)
17352                           && DECL_NAME (v) == this_identifier)
17353                         OMP_CLAUSE_DECL (nc) = TREE_OPERAND (t, 1);
17354                       /* FALLTHRU */
17355                     default:
17356                       v = NULL_TREE;
17357                       break;
17358                     }
17359               }
17360             else if (VAR_P (OMP_CLAUSE_DECL (oc))
17361                      && DECL_HAS_VALUE_EXPR_P (OMP_CLAUSE_DECL (oc))
17362                      && DECL_ARTIFICIAL (OMP_CLAUSE_DECL (oc))
17363                      && DECL_LANG_SPECIFIC (OMP_CLAUSE_DECL (oc))
17364                      && DECL_OMP_PRIVATIZED_MEMBER (OMP_CLAUSE_DECL (oc)))
17365               {
17366                 tree decl = OMP_CLAUSE_DECL (nc);
17367                 if (VAR_P (decl))
17368                   {
17369                     retrofit_lang_decl (decl);
17370                     DECL_OMP_PRIVATIZED_MEMBER (decl) = 1;
17371                   }
17372               }
17373             break;
17374           default:
17375             break;
17376           }
17377     }
17378
17379   new_clauses = nreverse (new_clauses);
17380   if (ort != C_ORT_OMP_DECLARE_SIMD)
17381     {
17382       new_clauses = finish_omp_clauses (new_clauses, ort);
17383       if (linear_no_step)
17384         for (nc = new_clauses; nc; nc = OMP_CLAUSE_CHAIN (nc))
17385           if (nc == linear_no_step)
17386             {
17387               OMP_CLAUSE_LINEAR_STEP (nc) = NULL_TREE;
17388               break;
17389             }
17390     }
17391   return new_clauses;
17392 }
17393
17394 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
17395
17396 static tree
17397 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
17398                           tree in_decl)
17399 {
17400 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
17401
17402   tree purpose, value, chain;
17403
17404   if (t == NULL)
17405     return t;
17406
17407   if (TREE_CODE (t) != TREE_LIST)
17408     return tsubst_copy_and_build (t, args, complain, in_decl,
17409                                   /*function_p=*/false,
17410                                   /*integral_constant_expression_p=*/false);
17411
17412   if (t == void_list_node)
17413     return t;
17414
17415   purpose = TREE_PURPOSE (t);
17416   if (purpose)
17417     purpose = RECUR (purpose);
17418   value = TREE_VALUE (t);
17419   if (value)
17420     {
17421       if (TREE_CODE (value) != LABEL_DECL)
17422         value = RECUR (value);
17423       else
17424         {
17425           value = lookup_label (DECL_NAME (value));
17426           gcc_assert (TREE_CODE (value) == LABEL_DECL);
17427           TREE_USED (value) = 1;
17428         }
17429     }
17430   chain = TREE_CHAIN (t);
17431   if (chain && chain != void_type_node)
17432     chain = RECUR (chain);
17433   return tree_cons (purpose, value, chain);
17434 #undef RECUR
17435 }
17436
17437 /* Used to temporarily communicate the list of #pragma omp parallel
17438    clauses to #pragma omp for instantiation if they are combined
17439    together.  */
17440
17441 static tree *omp_parallel_combined_clauses;
17442
17443 static tree tsubst_decomp_names (tree, tree, tree, tsubst_flags_t, tree,
17444                                  tree *, unsigned int *);
17445
17446 /* Substitute one OMP_FOR iterator.  */
17447
17448 static bool
17449 tsubst_omp_for_iterator (tree t, int i, tree declv, tree &orig_declv,
17450                          tree initv, tree condv, tree incrv, tree *clauses,
17451                          tree args, tsubst_flags_t complain, tree in_decl,
17452                          bool integral_constant_expression_p)
17453 {
17454 #define RECUR(NODE)                             \
17455   tsubst_expr ((NODE), args, complain, in_decl, \
17456                integral_constant_expression_p)
17457   tree decl, init, cond = NULL_TREE, incr = NULL_TREE;
17458   bool ret = false;
17459
17460   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
17461   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
17462
17463   decl = TREE_OPERAND (init, 0);
17464   init = TREE_OPERAND (init, 1);
17465   tree decl_expr = NULL_TREE;
17466   bool range_for = TREE_VEC_ELT (OMP_FOR_COND (t), i) == global_namespace;
17467   if (range_for)
17468     {
17469       bool decomp = false;
17470       if (decl != error_mark_node && DECL_HAS_VALUE_EXPR_P (decl))
17471         {
17472           tree v = DECL_VALUE_EXPR (decl);
17473           if (TREE_CODE (v) == ARRAY_REF
17474               && VAR_P (TREE_OPERAND (v, 0))
17475               && DECL_DECOMPOSITION_P (TREE_OPERAND (v, 0)))
17476             {
17477               tree decomp_first = NULL_TREE;
17478               unsigned decomp_cnt = 0;
17479               tree d = tsubst_decl (TREE_OPERAND (v, 0), args, complain);
17480               maybe_push_decl (d);
17481               d = tsubst_decomp_names (d, TREE_OPERAND (v, 0), args, complain,
17482                                        in_decl, &decomp_first, &decomp_cnt);
17483               decomp = true;
17484               if (d == error_mark_node)
17485                 decl = error_mark_node;
17486               else
17487                 for (unsigned int i = 0; i < decomp_cnt; i++)
17488                   {
17489                     if (!DECL_HAS_VALUE_EXPR_P (decomp_first))
17490                       {
17491                         tree v = build_nt (ARRAY_REF, d,
17492                                            size_int (decomp_cnt - i - 1),
17493                                            NULL_TREE, NULL_TREE);
17494                         SET_DECL_VALUE_EXPR (decomp_first, v);
17495                         DECL_HAS_VALUE_EXPR_P (decomp_first) = 1;
17496                       }
17497                     fit_decomposition_lang_decl (decomp_first, d);
17498                     decomp_first = DECL_CHAIN (decomp_first);
17499                   }
17500             }
17501         }
17502       decl = tsubst_decl (decl, args, complain);
17503       if (!decomp)
17504         maybe_push_decl (decl);
17505     }
17506   else if (init && TREE_CODE (init) == DECL_EXPR)
17507     {
17508       /* We need to jump through some hoops to handle declarations in the
17509          init-statement, since we might need to handle auto deduction,
17510          but we need to keep control of initialization.  */
17511       decl_expr = init;
17512       init = DECL_INITIAL (DECL_EXPR_DECL (init));
17513       decl = tsubst_decl (decl, args, complain);
17514     }
17515   else
17516     {
17517       if (TREE_CODE (decl) == SCOPE_REF)
17518         {
17519           decl = RECUR (decl);
17520           if (TREE_CODE (decl) == COMPONENT_REF)
17521             {
17522               tree v = decl;
17523               while (v)
17524                 switch (TREE_CODE (v))
17525                   {
17526                   case COMPONENT_REF:
17527                   case MEM_REF:
17528                   case INDIRECT_REF:
17529                   CASE_CONVERT:
17530                   case POINTER_PLUS_EXPR:
17531                     v = TREE_OPERAND (v, 0);
17532                     continue;
17533                   case PARM_DECL:
17534                     if (DECL_CONTEXT (v) == current_function_decl
17535                         && DECL_ARTIFICIAL (v)
17536                         && DECL_NAME (v) == this_identifier)
17537                       {
17538                         decl = TREE_OPERAND (decl, 1);
17539                         decl = omp_privatize_field (decl, false);
17540                       }
17541                     /* FALLTHRU */
17542                   default:
17543                     v = NULL_TREE;
17544                     break;
17545                   }
17546             }
17547         }
17548       else
17549         decl = RECUR (decl);
17550     }
17551   if (init && TREE_CODE (init) == TREE_VEC)
17552     {
17553       init = copy_node (init);
17554       TREE_VEC_ELT (init, 0)
17555         = tsubst_decl (TREE_VEC_ELT (init, 0), args, complain);
17556       TREE_VEC_ELT (init, 1) = RECUR (TREE_VEC_ELT (init, 1));
17557       TREE_VEC_ELT (init, 2) = RECUR (TREE_VEC_ELT (init, 2));
17558     }
17559   else
17560     init = RECUR (init);
17561
17562   if (orig_declv && OMP_FOR_ORIG_DECLS (t))
17563     {
17564       tree o = TREE_VEC_ELT (OMP_FOR_ORIG_DECLS (t), i);
17565       if (TREE_CODE (o) == TREE_LIST)
17566         TREE_VEC_ELT (orig_declv, i)
17567           = tree_cons (RECUR (TREE_PURPOSE (o)),
17568                        RECUR (TREE_VALUE (o)),
17569                        NULL_TREE);
17570       else
17571         TREE_VEC_ELT (orig_declv, i) = RECUR (o);
17572     }
17573
17574   if (range_for)
17575     {
17576       tree this_pre_body = NULL_TREE;
17577       tree orig_init = NULL_TREE;
17578       tree orig_decl = NULL_TREE;
17579       cp_convert_omp_range_for (this_pre_body, NULL, decl, orig_decl, init,
17580                                 orig_init, cond, incr);
17581       if (orig_decl)
17582         {
17583           if (orig_declv == NULL_TREE)
17584             orig_declv = copy_node (declv);
17585           TREE_VEC_ELT (orig_declv, i) = orig_decl;
17586           ret = true;
17587         }
17588       else if (orig_declv)
17589         TREE_VEC_ELT (orig_declv, i) = decl;
17590     }
17591
17592   tree auto_node = type_uses_auto (TREE_TYPE (decl));
17593   if (!range_for && auto_node && init)
17594     TREE_TYPE (decl)
17595       = do_auto_deduction (TREE_TYPE (decl), init, auto_node, complain);
17596
17597   gcc_assert (!type_dependent_expression_p (decl));
17598
17599   if (!CLASS_TYPE_P (TREE_TYPE (decl)) || range_for)
17600     {
17601       if (decl_expr)
17602         {
17603           /* Declare the variable, but don't let that initialize it.  */
17604           tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
17605           DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
17606           RECUR (decl_expr);
17607           DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
17608         }
17609
17610       if (!range_for)
17611         {
17612           cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
17613           if (COMPARISON_CLASS_P (cond)
17614               && TREE_CODE (TREE_OPERAND (cond, 1)) == TREE_VEC)
17615             {
17616               tree lhs = RECUR (TREE_OPERAND (cond, 0));
17617               tree rhs = copy_node (TREE_OPERAND (cond, 1));
17618               TREE_VEC_ELT (rhs, 0)
17619                 = tsubst_decl (TREE_VEC_ELT (rhs, 0), args, complain);
17620               TREE_VEC_ELT (rhs, 1) = RECUR (TREE_VEC_ELT (rhs, 1));
17621               TREE_VEC_ELT (rhs, 2) = RECUR (TREE_VEC_ELT (rhs, 2));
17622               cond = build2 (TREE_CODE (cond), TREE_TYPE (cond),
17623                              lhs, rhs);       
17624             }
17625           else
17626             cond = RECUR (cond);
17627           incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
17628           if (TREE_CODE (incr) == MODIFY_EXPR)
17629             {
17630               tree lhs = RECUR (TREE_OPERAND (incr, 0));
17631               tree rhs = RECUR (TREE_OPERAND (incr, 1));
17632               incr = build_x_modify_expr (EXPR_LOCATION (incr), lhs,
17633                                           NOP_EXPR, rhs, complain);
17634             }
17635           else
17636             incr = RECUR (incr);
17637           if (orig_declv && !OMP_FOR_ORIG_DECLS (t))
17638             TREE_VEC_ELT (orig_declv, i) = decl;
17639         }
17640       TREE_VEC_ELT (declv, i) = decl;
17641       TREE_VEC_ELT (initv, i) = init;
17642       TREE_VEC_ELT (condv, i) = cond;
17643       TREE_VEC_ELT (incrv, i) = incr;
17644       return ret;
17645     }
17646
17647   if (decl_expr)
17648     {
17649       /* Declare and initialize the variable.  */
17650       RECUR (decl_expr);
17651       init = NULL_TREE;
17652     }
17653   else if (init)
17654     {
17655       tree *pc;
17656       int j;
17657       for (j = ((omp_parallel_combined_clauses == NULL
17658                 || TREE_CODE (t) == OMP_LOOP) ? 1 : 0); j < 2; j++)
17659         {
17660           for (pc = j ? clauses : omp_parallel_combined_clauses; *pc; )
17661             {
17662               if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_PRIVATE
17663                   && OMP_CLAUSE_DECL (*pc) == decl)
17664                 break;
17665               else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_LASTPRIVATE
17666                        && OMP_CLAUSE_DECL (*pc) == decl)
17667                 {
17668                   if (j)
17669                     break;
17670                   /* Move lastprivate (decl) clause to OMP_FOR_CLAUSES.  */
17671                   tree c = *pc;
17672                   *pc = OMP_CLAUSE_CHAIN (c);
17673                   OMP_CLAUSE_CHAIN (c) = *clauses;
17674                   *clauses = c;
17675                 }
17676               else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_FIRSTPRIVATE
17677                        && OMP_CLAUSE_DECL (*pc) == decl)
17678                 {
17679                   error ("iteration variable %qD should not be firstprivate",
17680                          decl);
17681                   *pc = OMP_CLAUSE_CHAIN (*pc);
17682                 }
17683               else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_REDUCTION
17684                        && OMP_CLAUSE_DECL (*pc) == decl)
17685                 {
17686                   error ("iteration variable %qD should not be reduction",
17687                          decl);
17688                   *pc = OMP_CLAUSE_CHAIN (*pc);
17689                 }
17690               else
17691                 pc = &OMP_CLAUSE_CHAIN (*pc);
17692             }
17693           if (*pc)
17694             break;
17695         }
17696       if (*pc == NULL_TREE)
17697         {
17698           tree c = build_omp_clause (input_location,
17699                                      TREE_CODE (t) == OMP_LOOP
17700                                      ? OMP_CLAUSE_LASTPRIVATE
17701                                      : OMP_CLAUSE_PRIVATE);
17702           OMP_CLAUSE_DECL (c) = decl;
17703           c = finish_omp_clauses (c, C_ORT_OMP);
17704           if (c)
17705             {
17706               OMP_CLAUSE_CHAIN (c) = *clauses;
17707               *clauses = c;
17708             }
17709         }
17710     }
17711   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
17712   if (COMPARISON_CLASS_P (cond))
17713     {
17714       tree op0 = RECUR (TREE_OPERAND (cond, 0));
17715       tree op1 = RECUR (TREE_OPERAND (cond, 1));
17716       cond = build2 (TREE_CODE (cond), boolean_type_node, op0, op1);
17717     }
17718   else
17719     cond = RECUR (cond);
17720   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
17721   switch (TREE_CODE (incr))
17722     {
17723     case PREINCREMENT_EXPR:
17724     case PREDECREMENT_EXPR:
17725     case POSTINCREMENT_EXPR:
17726     case POSTDECREMENT_EXPR:
17727       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
17728                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
17729       break;
17730     case MODIFY_EXPR:
17731       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
17732           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
17733         {
17734           tree rhs = TREE_OPERAND (incr, 1);
17735           tree lhs = RECUR (TREE_OPERAND (incr, 0));
17736           tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
17737           tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
17738           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
17739                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
17740                                  rhs0, rhs1));
17741         }
17742       else
17743         incr = RECUR (incr);
17744       break;
17745     case MODOP_EXPR:
17746       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
17747           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
17748         {
17749           tree lhs = RECUR (TREE_OPERAND (incr, 0));
17750           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
17751                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
17752                                  TREE_TYPE (decl), lhs,
17753                                  RECUR (TREE_OPERAND (incr, 2))));
17754         }
17755       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
17756                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
17757                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
17758         {
17759           tree rhs = TREE_OPERAND (incr, 2);
17760           tree lhs = RECUR (TREE_OPERAND (incr, 0));
17761           tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
17762           tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
17763           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
17764                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
17765                                  rhs0, rhs1));
17766         }
17767       else
17768         incr = RECUR (incr);
17769       break;
17770     default:
17771       incr = RECUR (incr);
17772       break;
17773     }
17774
17775   if (orig_declv && !OMP_FOR_ORIG_DECLS (t))
17776     TREE_VEC_ELT (orig_declv, i) = decl;
17777   TREE_VEC_ELT (declv, i) = decl;
17778   TREE_VEC_ELT (initv, i) = init;
17779   TREE_VEC_ELT (condv, i) = cond;
17780   TREE_VEC_ELT (incrv, i) = incr;
17781   return false;
17782 #undef RECUR
17783 }
17784
17785 /* Helper function of tsubst_expr, find OMP_TEAMS inside
17786    of OMP_TARGET's body.  */
17787
17788 static tree
17789 tsubst_find_omp_teams (tree *tp, int *walk_subtrees, void *)
17790 {
17791   *walk_subtrees = 0;
17792   switch (TREE_CODE (*tp))
17793     {
17794     case OMP_TEAMS:
17795       return *tp;
17796     case BIND_EXPR:
17797     case STATEMENT_LIST:
17798       *walk_subtrees = 1;
17799       break;
17800     default:
17801       break;
17802     }
17803   return NULL_TREE;
17804 }
17805
17806 /* Helper function for tsubst_expr.  For decomposition declaration
17807    artificial base DECL, which is tsubsted PATTERN_DECL, tsubst
17808    also the corresponding decls representing the identifiers
17809    of the decomposition declaration.  Return DECL if successful
17810    or error_mark_node otherwise, set *FIRST to the first decl
17811    in the list chained through DECL_CHAIN and *CNT to the number
17812    of such decls.  */
17813
17814 static tree
17815 tsubst_decomp_names (tree decl, tree pattern_decl, tree args,
17816                      tsubst_flags_t complain, tree in_decl, tree *first,
17817                      unsigned int *cnt)
17818 {
17819   tree decl2, decl3, prev = decl;
17820   *cnt = 0;
17821   gcc_assert (DECL_NAME (decl) == NULL_TREE);
17822   for (decl2 = DECL_CHAIN (pattern_decl);
17823        decl2
17824        && VAR_P (decl2)
17825        && DECL_DECOMPOSITION_P (decl2)
17826        && DECL_NAME (decl2);
17827        decl2 = DECL_CHAIN (decl2))
17828     {
17829       if (TREE_TYPE (decl2) == error_mark_node && *cnt == 0)
17830         {
17831           gcc_assert (errorcount);
17832           return error_mark_node;
17833         }
17834       (*cnt)++;
17835       gcc_assert (DECL_DECOMP_BASE (decl2) == pattern_decl);
17836       gcc_assert (DECL_HAS_VALUE_EXPR_P (decl2));
17837       tree v = DECL_VALUE_EXPR (decl2);
17838       DECL_HAS_VALUE_EXPR_P (decl2) = 0;
17839       SET_DECL_VALUE_EXPR (decl2, NULL_TREE);
17840       decl3 = tsubst (decl2, args, complain, in_decl);
17841       SET_DECL_VALUE_EXPR (decl2, v);
17842       DECL_HAS_VALUE_EXPR_P (decl2) = 1;
17843       if (VAR_P (decl3))
17844         DECL_TEMPLATE_INSTANTIATED (decl3) = 1;
17845       else
17846         {
17847           gcc_assert (errorcount);
17848           decl = error_mark_node;
17849           continue;
17850         }
17851       maybe_push_decl (decl3);
17852       if (error_operand_p (decl3))
17853         decl = error_mark_node;
17854       else if (decl != error_mark_node
17855                && DECL_CHAIN (decl3) != prev
17856                && decl != prev)
17857         {
17858           gcc_assert (errorcount);
17859           decl = error_mark_node;
17860         }
17861       else
17862         prev = decl3;
17863     }
17864   *first = prev;
17865   return decl;
17866 }
17867
17868 /* Return the proper local_specialization for init-capture pack DECL.  */
17869
17870 static tree
17871 lookup_init_capture_pack (tree decl)
17872 {
17873   /* We handle normal pack captures by forwarding to the specialization of the
17874      captured parameter.  We can't do that for pack init-captures; we need them
17875      to have their own local_specialization.  We created the individual
17876      VAR_DECLs (if any) under build_capture_proxy, and we need to collect them
17877      when we process the DECL_EXPR for the pack init-capture in the template.
17878      So, how do we find them?  We don't know the capture proxy pack when
17879      building the individual resulting proxies, and we don't know the
17880      individual proxies when instantiating the pack.  What we have in common is
17881      the FIELD_DECL.
17882
17883      So...when we instantiate the FIELD_DECL, we stick the result in
17884      local_specializations.  Then at the DECL_EXPR we look up that result, see
17885      how many elements it has, synthesize the names, and look them up.  */
17886
17887   tree cname = DECL_NAME (decl);
17888   tree val = DECL_VALUE_EXPR (decl);
17889   tree field = TREE_OPERAND (val, 1);
17890   gcc_assert (TREE_CODE (field) == FIELD_DECL);
17891   tree fpack = retrieve_local_specialization (field);
17892   if (fpack == error_mark_node)
17893     return error_mark_node;
17894
17895   int len = 1;
17896   tree vec = NULL_TREE;
17897   tree r = NULL_TREE;
17898   if (TREE_CODE (fpack) == TREE_VEC)
17899     {
17900       len = TREE_VEC_LENGTH (fpack);
17901       vec = make_tree_vec (len);
17902       r = make_node (NONTYPE_ARGUMENT_PACK);
17903       SET_ARGUMENT_PACK_ARGS (r, vec);
17904     }
17905   for (int i = 0; i < len; ++i)
17906     {
17907       tree ename = vec ? make_ith_pack_parameter_name (cname, i) : cname;
17908       tree elt = lookup_name (ename);
17909       if (vec)
17910         TREE_VEC_ELT (vec, i) = elt;
17911       else
17912         r = elt;
17913     }
17914   return r;
17915 }
17916
17917 /* Like tsubst_copy for expressions, etc. but also does semantic
17918    processing.  */
17919
17920 tree
17921 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
17922              bool integral_constant_expression_p)
17923 {
17924 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
17925 #define RECUR(NODE)                             \
17926   tsubst_expr ((NODE), args, complain, in_decl, \
17927                integral_constant_expression_p)
17928
17929   tree stmt, tmp;
17930   tree r;
17931   location_t loc;
17932
17933   if (t == NULL_TREE || t == error_mark_node)
17934     return t;
17935
17936   loc = input_location;
17937   if (location_t eloc = cp_expr_location (t))
17938     input_location = eloc;
17939   if (STATEMENT_CODE_P (TREE_CODE (t)))
17940     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
17941
17942   switch (TREE_CODE (t))
17943     {
17944     case STATEMENT_LIST:
17945       {
17946         tree_stmt_iterator i;
17947         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
17948           RECUR (tsi_stmt (i));
17949         break;
17950       }
17951
17952     case CTOR_INITIALIZER:
17953       finish_mem_initializers (tsubst_initializer_list
17954                                (TREE_OPERAND (t, 0), args));
17955       break;
17956
17957     case RETURN_EXPR:
17958       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
17959       break;
17960
17961     case CO_RETURN_EXPR:
17962       finish_co_return_stmt (input_location, RECUR (TREE_OPERAND (t, 0)));
17963       break;
17964
17965     case CO_YIELD_EXPR:
17966       stmt = finish_co_yield_expr (input_location,
17967                                    RECUR (TREE_OPERAND (t, 0)));
17968       RETURN (stmt);
17969       break;
17970
17971     case CO_AWAIT_EXPR:
17972       stmt = finish_co_await_expr (input_location,
17973                                    RECUR (TREE_OPERAND (t, 0)));
17974       RETURN (stmt);
17975       break;
17976
17977     case EXPR_STMT:
17978       tmp = RECUR (EXPR_STMT_EXPR (t));
17979       if (EXPR_STMT_STMT_EXPR_RESULT (t))
17980         finish_stmt_expr_expr (tmp, cur_stmt_expr);
17981       else
17982         finish_expr_stmt (tmp);
17983       break;
17984
17985     case USING_STMT:
17986       finish_using_directive (USING_STMT_NAMESPACE (t), /*attribs=*/NULL_TREE);
17987       break;
17988
17989     case DECL_EXPR:
17990       {
17991         tree decl, pattern_decl;
17992         tree init;
17993
17994         pattern_decl = decl = DECL_EXPR_DECL (t);
17995         if (TREE_CODE (decl) == LABEL_DECL)
17996           finish_label_decl (DECL_NAME (decl));
17997         else if (TREE_CODE (decl) == USING_DECL)
17998           {
17999             tree scope = USING_DECL_SCOPE (decl);
18000             tree name = DECL_NAME (decl);
18001
18002             scope = tsubst (scope, args, complain, in_decl);
18003             finish_nonmember_using_decl (scope, name);
18004           }
18005         else if (is_capture_proxy (decl)
18006                  && !DECL_TEMPLATE_INSTANTIATION (current_function_decl))
18007           {
18008             /* We're in tsubst_lambda_expr, we've already inserted a new
18009                capture proxy, so look it up and register it.  */
18010             tree inst;
18011             if (!DECL_PACK_P (decl))
18012               {
18013                 inst = lookup_name (DECL_NAME (decl), LOOK_where::BLOCK,
18014                                     LOOK_want::HIDDEN_LAMBDA);
18015                 gcc_assert (inst != decl && is_capture_proxy (inst));
18016               }
18017             else if (is_normal_capture_proxy (decl))
18018               {
18019                 inst = (retrieve_local_specialization
18020                         (DECL_CAPTURED_VARIABLE (decl)));
18021                 gcc_assert (TREE_CODE (inst) == NONTYPE_ARGUMENT_PACK
18022                             || DECL_PACK_P (inst));
18023               }
18024             else
18025               inst = lookup_init_capture_pack (decl);
18026
18027             register_local_specialization (inst, decl);
18028             break;
18029           }
18030         else if (DECL_PRETTY_FUNCTION_P (decl))
18031           decl = make_fname_decl (DECL_SOURCE_LOCATION (decl),
18032                                   DECL_NAME (decl),
18033                                   true/*DECL_PRETTY_FUNCTION_P (decl)*/);
18034         else if (DECL_IMPLICIT_TYPEDEF_P (decl)
18035                  && LAMBDA_TYPE_P (TREE_TYPE (decl)))
18036           /* Don't copy the old closure; we'll create a new one in
18037              tsubst_lambda_expr.  */
18038           break;
18039         else
18040           {
18041             init = DECL_INITIAL (decl);
18042             /* The following tsubst call will clear the DECL_TEMPLATE_INFO
18043                for local variables, so save if DECL was declared constinit.  */
18044             const bool constinit_p
18045               = (VAR_P (decl)
18046                  && DECL_LANG_SPECIFIC (decl)
18047                  && DECL_TEMPLATE_INFO (decl)
18048                  && TINFO_VAR_DECLARED_CONSTINIT (DECL_TEMPLATE_INFO (decl)));
18049             decl = tsubst (decl, args, complain, in_decl);
18050             if (decl != error_mark_node)
18051               {
18052                 /* By marking the declaration as instantiated, we avoid
18053                    trying to instantiate it.  Since instantiate_decl can't
18054                    handle local variables, and since we've already done
18055                    all that needs to be done, that's the right thing to
18056                    do.  */
18057                 if (VAR_P (decl))
18058                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
18059                 if (VAR_P (decl) && !DECL_NAME (decl)
18060                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
18061                   /* Anonymous aggregates are a special case.  */
18062                   finish_anon_union (decl);
18063                 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
18064                   {
18065                     DECL_CONTEXT (decl) = current_function_decl;
18066                     if (DECL_NAME (decl) == this_identifier)
18067                       {
18068                         tree lam = DECL_CONTEXT (current_function_decl);
18069                         lam = CLASSTYPE_LAMBDA_EXPR (lam);
18070                         LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
18071                       }
18072                     insert_capture_proxy (decl);
18073                   }
18074                 else if (DECL_IMPLICIT_TYPEDEF_P (t))
18075                   /* We already did a pushtag.  */;
18076                 else if (TREE_CODE (decl) == FUNCTION_DECL
18077                          && DECL_OMP_DECLARE_REDUCTION_P (decl)
18078                          && DECL_FUNCTION_SCOPE_P (pattern_decl))
18079                   {
18080                     /* We pretend this is regular local extern decl of
18081                        a namespace-scope fn.  Then we make it really
18082                        local, it is a nested function.  */
18083                     DECL_CONTEXT (decl) = global_namespace;
18084                     pushdecl (decl);
18085                     DECL_CONTEXT (decl) = current_function_decl;
18086                     cp_check_omp_declare_reduction (decl);
18087                   }
18088                 else
18089                   {
18090                     bool const_init = false;
18091                     unsigned int cnt = 0;
18092                     tree first = NULL_TREE, ndecl = error_mark_node;
18093                     maybe_push_decl (decl);
18094
18095                     if (VAR_P (decl)
18096                         && DECL_DECOMPOSITION_P (decl)
18097                         && TREE_TYPE (pattern_decl) != error_mark_node)
18098                       ndecl = tsubst_decomp_names (decl, pattern_decl, args,
18099                                                    complain, in_decl, &first,
18100                                                    &cnt);
18101
18102                     init = tsubst_init (init, decl, args, complain, in_decl);
18103
18104                     if (VAR_P (decl))
18105                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
18106                                     (pattern_decl));
18107
18108                     if (ndecl != error_mark_node)
18109                       cp_maybe_mangle_decomp (ndecl, first, cnt);
18110
18111                     /* In a non-template function, VLA type declarations are
18112                        handled in grokdeclarator; for templates, handle them
18113                        now.  */
18114                     predeclare_vla (decl);
18115
18116                     cp_finish_decl (decl, init, const_init, NULL_TREE,
18117                                     constinit_p ? LOOKUP_CONSTINIT : 0);
18118
18119                     if (ndecl != error_mark_node)
18120                       cp_finish_decomp (ndecl, first, cnt);
18121                   }
18122               }
18123           }
18124
18125         break;
18126       }
18127
18128     case FOR_STMT:
18129       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
18130       RECUR (FOR_INIT_STMT (t));
18131       finish_init_stmt (stmt);
18132       tmp = RECUR (FOR_COND (t));
18133       finish_for_cond (tmp, stmt, false, 0);
18134       tmp = RECUR (FOR_EXPR (t));
18135       finish_for_expr (tmp, stmt);
18136       {
18137         bool prev = note_iteration_stmt_body_start ();
18138         RECUR (FOR_BODY (t));
18139         note_iteration_stmt_body_end (prev);
18140       }
18141       finish_for_stmt (stmt);
18142       break;
18143
18144     case RANGE_FOR_STMT:
18145       {
18146         /* Construct another range_for, if this is not a final
18147            substitution (for inside a generic lambda of a
18148            template).  Otherwise convert to a regular for.  */
18149         tree decl, expr;
18150         stmt = (processing_template_decl
18151                 ? begin_range_for_stmt (NULL_TREE, NULL_TREE)
18152                 : begin_for_stmt (NULL_TREE, NULL_TREE));
18153         RECUR (RANGE_FOR_INIT_STMT (t));
18154         decl = RANGE_FOR_DECL (t);
18155         decl = tsubst (decl, args, complain, in_decl);
18156         maybe_push_decl (decl);
18157         expr = RECUR (RANGE_FOR_EXPR (t));
18158
18159         tree decomp_first = NULL_TREE;
18160         unsigned decomp_cnt = 0;
18161         if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
18162           decl = tsubst_decomp_names (decl, RANGE_FOR_DECL (t), args,
18163                                       complain, in_decl,
18164                                       &decomp_first, &decomp_cnt);
18165
18166         if (processing_template_decl)
18167           {
18168             RANGE_FOR_IVDEP (stmt) = RANGE_FOR_IVDEP (t);
18169             RANGE_FOR_UNROLL (stmt) = RANGE_FOR_UNROLL (t);
18170             finish_range_for_decl (stmt, decl, expr);
18171             if (decomp_first && decl != error_mark_node)
18172               cp_finish_decomp (decl, decomp_first, decomp_cnt);
18173           }
18174         else
18175           {
18176             unsigned short unroll = (RANGE_FOR_UNROLL (t)
18177                                      ? tree_to_uhwi (RANGE_FOR_UNROLL (t)) : 0);
18178             stmt = cp_convert_range_for (stmt, decl, expr,
18179                                          decomp_first, decomp_cnt,
18180                                          RANGE_FOR_IVDEP (t), unroll);
18181           }
18182
18183         bool prev = note_iteration_stmt_body_start ();
18184         RECUR (RANGE_FOR_BODY (t));
18185         note_iteration_stmt_body_end (prev);
18186         finish_for_stmt (stmt);
18187       }
18188       break;
18189
18190     case WHILE_STMT:
18191       stmt = begin_while_stmt ();
18192       tmp = RECUR (WHILE_COND (t));
18193       finish_while_stmt_cond (tmp, stmt, false, 0);
18194       {
18195         bool prev = note_iteration_stmt_body_start ();
18196         RECUR (WHILE_BODY (t));
18197         note_iteration_stmt_body_end (prev);
18198       }
18199       finish_while_stmt (stmt);
18200       break;
18201
18202     case DO_STMT:
18203       stmt = begin_do_stmt ();
18204       {
18205         bool prev = note_iteration_stmt_body_start ();
18206         RECUR (DO_BODY (t));
18207         note_iteration_stmt_body_end (prev);
18208       }
18209       finish_do_body (stmt);
18210       tmp = RECUR (DO_COND (t));
18211       finish_do_stmt (tmp, stmt, false, 0);
18212       break;
18213
18214     case IF_STMT:
18215       stmt = begin_if_stmt ();
18216       IF_STMT_CONSTEXPR_P (stmt) = IF_STMT_CONSTEXPR_P (t);
18217       if (IF_STMT_CONSTEXPR_P (t))
18218         args = add_extra_args (IF_STMT_EXTRA_ARGS (t), args);
18219       tmp = RECUR (IF_COND (t));
18220       tmp = finish_if_stmt_cond (tmp, stmt);
18221       if (IF_STMT_CONSTEXPR_P (t)
18222           && instantiation_dependent_expression_p (tmp))
18223         {
18224           /* We're partially instantiating a generic lambda, but the condition
18225              of the constexpr if is still dependent.  Don't substitute into the
18226              branches now, just remember the template arguments.  */
18227           do_poplevel (IF_SCOPE (stmt));
18228           IF_COND (stmt) = IF_COND (t);
18229           THEN_CLAUSE (stmt) = THEN_CLAUSE (t);
18230           ELSE_CLAUSE (stmt) = ELSE_CLAUSE (t);
18231           IF_STMT_EXTRA_ARGS (stmt) = build_extra_args (t, args, complain);
18232           add_stmt (stmt);
18233           break;
18234         }
18235       if (IF_STMT_CONSTEXPR_P (t) && integer_zerop (tmp))
18236         /* Don't instantiate the THEN_CLAUSE. */;
18237       else
18238         {
18239           tree folded = fold_non_dependent_expr (tmp, complain);
18240           bool inhibit = integer_zerop (folded);
18241           if (inhibit)
18242             ++c_inhibit_evaluation_warnings;
18243           RECUR (THEN_CLAUSE (t));
18244           if (inhibit)
18245             --c_inhibit_evaluation_warnings;
18246         }
18247       finish_then_clause (stmt);
18248
18249       if (IF_STMT_CONSTEXPR_P (t) && integer_nonzerop (tmp))
18250         /* Don't instantiate the ELSE_CLAUSE. */;
18251       else if (ELSE_CLAUSE (t))
18252         {
18253           tree folded = fold_non_dependent_expr (tmp, complain);
18254           bool inhibit = integer_nonzerop (folded);
18255           begin_else_clause (stmt);
18256           if (inhibit)
18257             ++c_inhibit_evaluation_warnings;
18258           RECUR (ELSE_CLAUSE (t));
18259           if (inhibit)
18260             --c_inhibit_evaluation_warnings;
18261           finish_else_clause (stmt);
18262         }
18263
18264       finish_if_stmt (stmt);
18265       break;
18266
18267     case BIND_EXPR:
18268       if (BIND_EXPR_BODY_BLOCK (t))
18269         stmt = begin_function_body ();
18270       else
18271         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
18272                                     ? BCS_TRY_BLOCK : 0);
18273
18274       RECUR (BIND_EXPR_BODY (t));
18275
18276       if (BIND_EXPR_BODY_BLOCK (t))
18277         finish_function_body (stmt);
18278       else
18279         finish_compound_stmt (stmt);
18280       break;
18281
18282     case BREAK_STMT:
18283       finish_break_stmt ();
18284       break;
18285
18286     case CONTINUE_STMT:
18287       finish_continue_stmt ();
18288       break;
18289
18290     case SWITCH_STMT:
18291       stmt = begin_switch_stmt ();
18292       tmp = RECUR (SWITCH_STMT_COND (t));
18293       finish_switch_cond (tmp, stmt);
18294       RECUR (SWITCH_STMT_BODY (t));
18295       finish_switch_stmt (stmt);
18296       break;
18297
18298     case CASE_LABEL_EXPR:
18299       {
18300         tree decl = CASE_LABEL (t);
18301         tree low = RECUR (CASE_LOW (t));
18302         tree high = RECUR (CASE_HIGH (t));
18303         tree l = finish_case_label (EXPR_LOCATION (t), low, high);
18304         if (l && TREE_CODE (l) == CASE_LABEL_EXPR)
18305           {
18306             tree label = CASE_LABEL (l);
18307             FALLTHROUGH_LABEL_P (label) = FALLTHROUGH_LABEL_P (decl);
18308             if (DECL_ATTRIBUTES (decl) != NULL_TREE)
18309               cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
18310           }
18311       }
18312       break;
18313
18314     case LABEL_EXPR:
18315       {
18316         tree decl = LABEL_EXPR_LABEL (t);
18317         tree label;
18318
18319         label = finish_label_stmt (DECL_NAME (decl));
18320         if (TREE_CODE (label) == LABEL_DECL)
18321           FALLTHROUGH_LABEL_P (label) = FALLTHROUGH_LABEL_P (decl);
18322         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
18323           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
18324       }
18325       break;
18326
18327     case GOTO_EXPR:
18328       tmp = GOTO_DESTINATION (t);
18329       if (TREE_CODE (tmp) != LABEL_DECL)
18330         /* Computed goto's must be tsubst'd into.  On the other hand,
18331            non-computed gotos must not be; the identifier in question
18332            will have no binding.  */
18333         tmp = RECUR (tmp);
18334       else
18335         tmp = DECL_NAME (tmp);
18336       finish_goto_stmt (tmp);
18337       break;
18338
18339     case ASM_EXPR:
18340       {
18341         tree string = RECUR (ASM_STRING (t));
18342         tree outputs = tsubst_copy_asm_operands (ASM_OUTPUTS (t), args,
18343                                                  complain, in_decl);
18344         tree inputs = tsubst_copy_asm_operands (ASM_INPUTS (t), args,
18345                                                 complain, in_decl);
18346         tree clobbers = tsubst_copy_asm_operands (ASM_CLOBBERS (t), args,
18347                                                   complain, in_decl);
18348         tree labels = tsubst_copy_asm_operands (ASM_LABELS (t), args,
18349                                                 complain, in_decl);
18350         tmp = finish_asm_stmt (EXPR_LOCATION (t), ASM_VOLATILE_P (t), string,
18351                                outputs, inputs, clobbers, labels,
18352                                ASM_INLINE_P (t));
18353         tree asm_expr = tmp;
18354         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
18355           asm_expr = TREE_OPERAND (asm_expr, 0);
18356         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
18357       }
18358       break;
18359
18360     case TRY_BLOCK:
18361       if (CLEANUP_P (t))
18362         {
18363           stmt = begin_try_block ();
18364           RECUR (TRY_STMTS (t));
18365           finish_cleanup_try_block (stmt);
18366           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
18367         }
18368       else
18369         {
18370           tree compound_stmt = NULL_TREE;
18371
18372           if (FN_TRY_BLOCK_P (t))
18373             stmt = begin_function_try_block (&compound_stmt);
18374           else
18375             stmt = begin_try_block ();
18376
18377           RECUR (TRY_STMTS (t));
18378
18379           if (FN_TRY_BLOCK_P (t))
18380             finish_function_try_block (stmt);
18381           else
18382             finish_try_block (stmt);
18383
18384           RECUR (TRY_HANDLERS (t));
18385           if (FN_TRY_BLOCK_P (t))
18386             finish_function_handler_sequence (stmt, compound_stmt);
18387           else
18388             finish_handler_sequence (stmt);
18389         }
18390       break;
18391
18392     case HANDLER:
18393       {
18394         tree decl = HANDLER_PARMS (t);
18395
18396         if (decl)
18397           {
18398             decl = tsubst (decl, args, complain, in_decl);
18399             /* Prevent instantiate_decl from trying to instantiate
18400                this variable.  We've already done all that needs to be
18401                done.  */
18402             if (decl != error_mark_node)
18403               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
18404           }
18405         stmt = begin_handler ();
18406         finish_handler_parms (decl, stmt);
18407         RECUR (HANDLER_BODY (t));
18408         finish_handler (stmt);
18409       }
18410       break;
18411
18412     case TAG_DEFN:
18413       tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
18414       if (CLASS_TYPE_P (tmp))
18415         {
18416           /* Local classes are not independent templates; they are
18417              instantiated along with their containing function.  And this
18418              way we don't have to deal with pushing out of one local class
18419              to instantiate a member of another local class.  */
18420           /* Closures are handled by the LAMBDA_EXPR.  */
18421           gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
18422           complete_type (tmp);
18423           for (tree fld = TYPE_FIELDS (tmp); fld; fld = DECL_CHAIN (fld))
18424             if ((VAR_P (fld)
18425                  || (TREE_CODE (fld) == FUNCTION_DECL
18426                      && !DECL_ARTIFICIAL (fld)))
18427                 && DECL_TEMPLATE_INSTANTIATION (fld))
18428               instantiate_decl (fld, /*defer_ok=*/false,
18429                                 /*expl_inst_class=*/false);
18430         }
18431       break;
18432
18433     case STATIC_ASSERT:
18434       {
18435         tree condition;
18436
18437         ++c_inhibit_evaluation_warnings;
18438         condition = 
18439           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
18440                        args,
18441                        complain, in_decl,
18442                        /*integral_constant_expression_p=*/true);
18443         --c_inhibit_evaluation_warnings;
18444
18445         finish_static_assert (condition,
18446                               STATIC_ASSERT_MESSAGE (t),
18447                               STATIC_ASSERT_SOURCE_LOCATION (t),
18448                               /*member_p=*/false);
18449       }
18450       break;
18451
18452     case OACC_KERNELS:
18453     case OACC_PARALLEL:
18454     case OACC_SERIAL:
18455       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), C_ORT_ACC, args, complain,
18456                                 in_decl);
18457       stmt = begin_omp_parallel ();
18458       RECUR (OMP_BODY (t));
18459       finish_omp_construct (TREE_CODE (t), stmt, tmp);
18460       break;
18461
18462     case OMP_PARALLEL:
18463       r = push_omp_privatization_clauses (OMP_PARALLEL_COMBINED (t));
18464       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), C_ORT_OMP, args,
18465                                 complain, in_decl);
18466       if (OMP_PARALLEL_COMBINED (t))
18467         omp_parallel_combined_clauses = &tmp;
18468       stmt = begin_omp_parallel ();
18469       RECUR (OMP_PARALLEL_BODY (t));
18470       gcc_assert (omp_parallel_combined_clauses == NULL);
18471       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
18472         = OMP_PARALLEL_COMBINED (t);
18473       pop_omp_privatization_clauses (r);
18474       break;
18475
18476     case OMP_TASK:
18477       if (OMP_TASK_BODY (t) == NULL_TREE)
18478         {
18479           tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), C_ORT_OMP, args,
18480                                     complain, in_decl);
18481           t = copy_node (t);
18482           OMP_TASK_CLAUSES (t) = tmp;
18483           add_stmt (t);
18484           break;
18485         }
18486       r = push_omp_privatization_clauses (false);
18487       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), C_ORT_OMP, args,
18488                                 complain, in_decl);
18489       stmt = begin_omp_task ();
18490       RECUR (OMP_TASK_BODY (t));
18491       finish_omp_task (tmp, stmt);
18492       pop_omp_privatization_clauses (r);
18493       break;
18494
18495     case OMP_FOR:
18496     case OMP_LOOP:
18497     case OMP_SIMD:
18498     case OMP_DISTRIBUTE:
18499     case OMP_TASKLOOP:
18500     case OACC_LOOP:
18501       {
18502         tree clauses, body, pre_body;
18503         tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
18504         tree orig_declv = NULL_TREE;
18505         tree incrv = NULL_TREE;
18506         enum c_omp_region_type ort = C_ORT_OMP;
18507         bool any_range_for = false;
18508         int i;
18509
18510         if (TREE_CODE (t) == OACC_LOOP)
18511           ort = C_ORT_ACC;
18512
18513         r = push_omp_privatization_clauses (OMP_FOR_INIT (t) == NULL_TREE);
18514         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), ort, args, complain,
18515                                       in_decl);
18516         if (OMP_FOR_INIT (t) != NULL_TREE)
18517           {
18518             declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
18519             if (OMP_FOR_ORIG_DECLS (t))
18520               orig_declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
18521             initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
18522             condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
18523             incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
18524           }
18525
18526         keep_next_level (true);
18527         stmt = begin_omp_structured_block ();
18528
18529         pre_body = push_stmt_list ();
18530         RECUR (OMP_FOR_PRE_BODY (t));
18531         pre_body = pop_stmt_list (pre_body);
18532
18533         if (OMP_FOR_INIT (t) != NULL_TREE)
18534           for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
18535             any_range_for
18536               |= tsubst_omp_for_iterator (t, i, declv, orig_declv, initv,
18537                                           condv, incrv, &clauses, args,
18538                                           complain, in_decl,
18539                                           integral_constant_expression_p);
18540         omp_parallel_combined_clauses = NULL;
18541
18542         if (any_range_for)
18543           {
18544             gcc_assert (orig_declv);
18545             body = begin_omp_structured_block ();
18546             for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
18547               if (TREE_VEC_ELT (orig_declv, i) != TREE_VEC_ELT (declv, i)
18548                   && TREE_CODE (TREE_VEC_ELT (orig_declv, i)) == TREE_LIST
18549                   && TREE_CHAIN (TREE_VEC_ELT (orig_declv, i)))
18550                 cp_finish_omp_range_for (TREE_VEC_ELT (orig_declv, i),
18551                                          TREE_VEC_ELT (declv, i));
18552           }
18553         else
18554           body = push_stmt_list ();
18555         RECUR (OMP_FOR_BODY (t));
18556         if (any_range_for)
18557           body = finish_omp_structured_block (body);
18558         else
18559           body = pop_stmt_list (body);
18560
18561         if (OMP_FOR_INIT (t) != NULL_TREE)
18562           t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv,
18563                               orig_declv, initv, condv, incrv, body, pre_body,
18564                               NULL, clauses);
18565         else
18566           {
18567             t = make_node (TREE_CODE (t));
18568             TREE_TYPE (t) = void_type_node;
18569             OMP_FOR_BODY (t) = body;
18570             OMP_FOR_PRE_BODY (t) = pre_body;
18571             OMP_FOR_CLAUSES (t) = clauses;
18572             SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
18573             add_stmt (t);
18574           }
18575
18576         add_stmt (finish_omp_for_block (finish_omp_structured_block (stmt),
18577                                         t));
18578         pop_omp_privatization_clauses (r);
18579       }
18580       break;
18581
18582     case OMP_SECTIONS:
18583       omp_parallel_combined_clauses = NULL;
18584       /* FALLTHRU */
18585     case OMP_SINGLE:
18586     case OMP_TEAMS:
18587     case OMP_CRITICAL:
18588     case OMP_TASKGROUP:
18589     case OMP_SCAN:
18590       r = push_omp_privatization_clauses (TREE_CODE (t) == OMP_TEAMS
18591                                           && OMP_TEAMS_COMBINED (t));
18592       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), C_ORT_OMP, args, complain,
18593                                 in_decl);
18594       if (TREE_CODE (t) == OMP_TEAMS)
18595         {
18596           keep_next_level (true);
18597           stmt = begin_omp_structured_block ();
18598           RECUR (OMP_BODY (t));
18599           stmt = finish_omp_structured_block (stmt);
18600         }
18601       else
18602         {
18603           stmt = push_stmt_list ();
18604           RECUR (OMP_BODY (t));
18605           stmt = pop_stmt_list (stmt);
18606         }
18607
18608       if (TREE_CODE (t) == OMP_CRITICAL
18609           && tmp != NULL_TREE
18610           && integer_nonzerop (OMP_CLAUSE_HINT_EXPR (tmp)))
18611         {
18612           error_at (OMP_CLAUSE_LOCATION (tmp),
18613                     "%<#pragma omp critical%> with %<hint%> clause requires "
18614                     "a name, except when %<omp_sync_hint_none%> is used");
18615           RETURN (error_mark_node);
18616         }
18617       t = copy_node (t);
18618       OMP_BODY (t) = stmt;
18619       OMP_CLAUSES (t) = tmp;
18620       add_stmt (t);
18621       pop_omp_privatization_clauses (r);
18622       break;
18623
18624     case OMP_DEPOBJ:
18625       r = RECUR (OMP_DEPOBJ_DEPOBJ (t));
18626       if (OMP_DEPOBJ_CLAUSES (t) && OMP_DEPOBJ_CLAUSES (t) != error_mark_node)
18627         {
18628           enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_SOURCE;
18629           if (TREE_CODE (OMP_DEPOBJ_CLAUSES (t)) == OMP_CLAUSE)
18630             {
18631               tmp = tsubst_omp_clauses (OMP_DEPOBJ_CLAUSES (t), C_ORT_OMP,
18632                                         args, complain, in_decl);
18633               if (tmp == NULL_TREE)
18634                 tmp = error_mark_node;
18635             }
18636           else
18637             {
18638               kind = (enum omp_clause_depend_kind)
18639                      tree_to_uhwi (OMP_DEPOBJ_CLAUSES (t));
18640               tmp = NULL_TREE;
18641             }
18642           finish_omp_depobj (EXPR_LOCATION (t), r, kind, tmp);
18643         }
18644       else
18645         finish_omp_depobj (EXPR_LOCATION (t), r,
18646                            OMP_CLAUSE_DEPEND_SOURCE,
18647                            OMP_DEPOBJ_CLAUSES (t));
18648       break;
18649
18650     case OACC_DATA:
18651     case OMP_TARGET_DATA:
18652     case OMP_TARGET:
18653       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), (TREE_CODE (t) == OACC_DATA)
18654                                 ? C_ORT_ACC : C_ORT_OMP, args, complain,
18655                                 in_decl);
18656       keep_next_level (true);
18657       stmt = begin_omp_structured_block ();
18658
18659       RECUR (OMP_BODY (t));
18660       stmt = finish_omp_structured_block (stmt);
18661
18662       t = copy_node (t);
18663       OMP_BODY (t) = stmt;
18664       OMP_CLAUSES (t) = tmp;
18665       if (TREE_CODE (t) == OMP_TARGET && OMP_TARGET_COMBINED (t))
18666         {
18667           tree teams = cp_walk_tree (&stmt, tsubst_find_omp_teams, NULL, NULL);
18668           if (teams)
18669             {
18670               /* For combined target teams, ensure the num_teams and
18671                  thread_limit clause expressions are evaluated on the host,
18672                  before entering the target construct.  */
18673               tree c;
18674               for (c = OMP_TEAMS_CLAUSES (teams);
18675                    c; c = OMP_CLAUSE_CHAIN (c))
18676                 if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_NUM_TEAMS
18677                      || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_THREAD_LIMIT)
18678                     && TREE_CODE (OMP_CLAUSE_OPERAND (c, 0)) != INTEGER_CST)
18679                   {
18680                     tree expr = OMP_CLAUSE_OPERAND (c, 0);
18681                     expr = force_target_expr (TREE_TYPE (expr), expr, tf_none);
18682                     if (expr == error_mark_node)
18683                       continue;
18684                     tmp = TARGET_EXPR_SLOT (expr);
18685                     add_stmt (expr);
18686                     OMP_CLAUSE_OPERAND (c, 0) = expr;
18687                     tree tc = build_omp_clause (OMP_CLAUSE_LOCATION (c),
18688                                                 OMP_CLAUSE_FIRSTPRIVATE);
18689                     OMP_CLAUSE_DECL (tc) = tmp;
18690                     OMP_CLAUSE_CHAIN (tc) = OMP_TARGET_CLAUSES (t);
18691                     OMP_TARGET_CLAUSES (t) = tc;
18692                   }
18693             }
18694         }
18695       add_stmt (t);
18696       break;
18697
18698     case OACC_DECLARE:
18699       t = copy_node (t);
18700       tmp = tsubst_omp_clauses (OACC_DECLARE_CLAUSES (t), C_ORT_ACC, args,
18701                                 complain, in_decl);
18702       OACC_DECLARE_CLAUSES (t) = tmp;
18703       add_stmt (t);
18704       break;
18705
18706     case OMP_TARGET_UPDATE:
18707     case OMP_TARGET_ENTER_DATA:
18708     case OMP_TARGET_EXIT_DATA:
18709       tmp = tsubst_omp_clauses (OMP_STANDALONE_CLAUSES (t), C_ORT_OMP, args,
18710                                 complain, in_decl);
18711       t = copy_node (t);
18712       OMP_STANDALONE_CLAUSES (t) = tmp;
18713       add_stmt (t);
18714       break;
18715
18716     case OACC_ENTER_DATA:
18717     case OACC_EXIT_DATA:
18718     case OACC_UPDATE:
18719       tmp = tsubst_omp_clauses (OMP_STANDALONE_CLAUSES (t), C_ORT_ACC, args,
18720                                 complain, in_decl);
18721       t = copy_node (t);
18722       OMP_STANDALONE_CLAUSES (t) = tmp;
18723       add_stmt (t);
18724       break;
18725
18726     case OMP_ORDERED:
18727       tmp = tsubst_omp_clauses (OMP_ORDERED_CLAUSES (t), C_ORT_OMP, args,
18728                                 complain, in_decl);
18729       stmt = push_stmt_list ();
18730       RECUR (OMP_BODY (t));
18731       stmt = pop_stmt_list (stmt);
18732
18733       t = copy_node (t);
18734       OMP_BODY (t) = stmt;
18735       OMP_ORDERED_CLAUSES (t) = tmp;
18736       add_stmt (t);
18737       break;
18738
18739     case OMP_MASTER:
18740       omp_parallel_combined_clauses = NULL;
18741       /* FALLTHRU */
18742     case OMP_SECTION:
18743       stmt = push_stmt_list ();
18744       RECUR (OMP_BODY (t));
18745       stmt = pop_stmt_list (stmt);
18746
18747       t = copy_node (t);
18748       OMP_BODY (t) = stmt;
18749       add_stmt (t);
18750       break;
18751
18752     case OMP_ATOMIC:
18753       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
18754       tmp = NULL_TREE;
18755       if (TREE_CODE (TREE_OPERAND (t, 0)) == OMP_CLAUSE)
18756         tmp = tsubst_omp_clauses (TREE_OPERAND (t, 0), C_ORT_OMP, args,
18757                                   complain, in_decl);
18758       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
18759         {
18760           tree op1 = TREE_OPERAND (t, 1);
18761           tree rhs1 = NULL_TREE;
18762           tree lhs, rhs;
18763           if (TREE_CODE (op1) == COMPOUND_EXPR)
18764             {
18765               rhs1 = RECUR (TREE_OPERAND (op1, 0));
18766               op1 = TREE_OPERAND (op1, 1);
18767             }
18768           lhs = RECUR (TREE_OPERAND (op1, 0));
18769           rhs = RECUR (TREE_OPERAND (op1, 1));
18770           finish_omp_atomic (EXPR_LOCATION (t), OMP_ATOMIC, TREE_CODE (op1),
18771                              lhs, rhs, NULL_TREE, NULL_TREE, rhs1, tmp,
18772                              OMP_ATOMIC_MEMORY_ORDER (t));
18773         }
18774       else
18775         {
18776           tree op1 = TREE_OPERAND (t, 1);
18777           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
18778           tree rhs1 = NULL_TREE;
18779           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
18780           enum tree_code opcode = NOP_EXPR;
18781           if (code == OMP_ATOMIC_READ)
18782             {
18783               v = RECUR (TREE_OPERAND (op1, 0));
18784               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
18785             }
18786           else if (code == OMP_ATOMIC_CAPTURE_OLD
18787                    || code == OMP_ATOMIC_CAPTURE_NEW)
18788             {
18789               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
18790               v = RECUR (TREE_OPERAND (op1, 0));
18791               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
18792               if (TREE_CODE (op11) == COMPOUND_EXPR)
18793                 {
18794                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
18795                   op11 = TREE_OPERAND (op11, 1);
18796                 }
18797               lhs = RECUR (TREE_OPERAND (op11, 0));
18798               rhs = RECUR (TREE_OPERAND (op11, 1));
18799               opcode = TREE_CODE (op11);
18800               if (opcode == MODIFY_EXPR)
18801                 opcode = NOP_EXPR;
18802             }
18803           else
18804             {
18805               code = OMP_ATOMIC;
18806               lhs = RECUR (TREE_OPERAND (op1, 0));
18807               rhs = RECUR (TREE_OPERAND (op1, 1));
18808             }
18809           finish_omp_atomic (EXPR_LOCATION (t), code, opcode, lhs, rhs, v,
18810                              lhs1, rhs1, tmp, OMP_ATOMIC_MEMORY_ORDER (t));
18811         }
18812       break;
18813
18814     case TRANSACTION_EXPR:
18815       {
18816         int flags = 0;
18817         flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
18818         flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
18819
18820         if (TRANSACTION_EXPR_IS_STMT (t))
18821           {
18822             tree body = TRANSACTION_EXPR_BODY (t);
18823             tree noex = NULL_TREE;
18824             if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
18825               {
18826                 noex = MUST_NOT_THROW_COND (body);
18827                 if (noex == NULL_TREE)
18828                   noex = boolean_true_node;
18829                 body = TREE_OPERAND (body, 0);
18830               }
18831             stmt = begin_transaction_stmt (input_location, NULL, flags);
18832             RECUR (body);
18833             finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
18834           }
18835         else
18836           {
18837             stmt = build_transaction_expr (EXPR_LOCATION (t),
18838                                            RECUR (TRANSACTION_EXPR_BODY (t)),
18839                                            flags, NULL_TREE);
18840             RETURN (stmt);
18841           }
18842       }
18843       break;
18844
18845     case MUST_NOT_THROW_EXPR:
18846       {
18847         tree op0 = RECUR (TREE_OPERAND (t, 0));
18848         tree cond = RECUR (MUST_NOT_THROW_COND (t));
18849         RETURN (build_must_not_throw_expr (op0, cond));
18850       }
18851
18852     case EXPR_PACK_EXPANSION:
18853       error ("invalid use of pack expansion expression");
18854       RETURN (error_mark_node);
18855
18856     case NONTYPE_ARGUMENT_PACK:
18857       error ("use %<...%> to expand argument pack");
18858       RETURN (error_mark_node);
18859
18860     case COMPOUND_EXPR:
18861       tmp = RECUR (TREE_OPERAND (t, 0));
18862       if (tmp == NULL_TREE)
18863         /* If the first operand was a statement, we're done with it.  */
18864         RETURN (RECUR (TREE_OPERAND (t, 1)));
18865       RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
18866                                     RECUR (TREE_OPERAND (t, 1)),
18867                                     complain));
18868
18869     case ANNOTATE_EXPR:
18870       tmp = RECUR (TREE_OPERAND (t, 0));
18871       RETURN (build3_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
18872                           TREE_TYPE (tmp), tmp,
18873                           RECUR (TREE_OPERAND (t, 1)),
18874                           RECUR (TREE_OPERAND (t, 2))));
18875
18876     case PREDICT_EXPR:
18877       RETURN (add_stmt (copy_node (t)));
18878
18879     default:
18880       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
18881
18882       RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
18883                                     /*function_p=*/false,
18884                                     integral_constant_expression_p));
18885     }
18886
18887   RETURN (NULL_TREE);
18888  out:
18889   input_location = loc;
18890   return r;
18891 #undef RECUR
18892 #undef RETURN
18893 }
18894
18895 /* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
18896    function.  For description of the body see comment above
18897    cp_parser_omp_declare_reduction_exprs.  */
18898
18899 static void
18900 tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
18901 {
18902   if (t == NULL_TREE || t == error_mark_node)
18903     return;
18904
18905   gcc_assert (TREE_CODE (t) == STATEMENT_LIST && current_function_decl);
18906
18907   tree_stmt_iterator tsi;
18908   int i;
18909   tree stmts[7];
18910   memset (stmts, 0, sizeof stmts);
18911   for (i = 0, tsi = tsi_start (t);
18912        i < 7 && !tsi_end_p (tsi);
18913        i++, tsi_next (&tsi))
18914     stmts[i] = tsi_stmt (tsi);
18915   gcc_assert (tsi_end_p (tsi));
18916
18917   if (i >= 3)
18918     {
18919       gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
18920                   && TREE_CODE (stmts[1]) == DECL_EXPR);
18921       tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
18922                              args, complain, in_decl);
18923       tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
18924                             args, complain, in_decl);
18925       /* tsubsting a local var_decl leaves DECL_CONTEXT null, as we
18926          expect to be pushing it.  */
18927       DECL_CONTEXT (omp_out) = current_function_decl;
18928       DECL_CONTEXT (omp_in) = current_function_decl;
18929       keep_next_level (true);
18930       tree block = begin_omp_structured_block ();
18931       tsubst_expr (stmts[2], args, complain, in_decl, false);
18932       block = finish_omp_structured_block (block);
18933       block = maybe_cleanup_point_expr_void (block);
18934       add_decl_expr (omp_out);
18935       if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
18936         TREE_NO_WARNING (omp_out) = 1;
18937       add_decl_expr (omp_in);
18938       finish_expr_stmt (block);
18939     }
18940   if (i >= 6)
18941     {
18942       gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
18943                   && TREE_CODE (stmts[4]) == DECL_EXPR);
18944       tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
18945                               args, complain, in_decl);
18946       tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
18947                               args, complain, in_decl);
18948       DECL_CONTEXT (omp_priv) = current_function_decl;
18949       DECL_CONTEXT (omp_orig) = current_function_decl;
18950       keep_next_level (true);
18951       tree block = begin_omp_structured_block ();
18952       tsubst_expr (stmts[5], args, complain, in_decl, false);
18953       block = finish_omp_structured_block (block);
18954       block = maybe_cleanup_point_expr_void (block);
18955       cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
18956       add_decl_expr (omp_priv);
18957       add_decl_expr (omp_orig);
18958       finish_expr_stmt (block);
18959       if (i == 7)
18960         add_decl_expr (omp_orig);
18961     }
18962 }
18963
18964 /* T is a postfix-expression that is not being used in a function
18965    call.  Return the substituted version of T.  */
18966
18967 static tree
18968 tsubst_non_call_postfix_expression (tree t, tree args,
18969                                     tsubst_flags_t complain,
18970                                     tree in_decl)
18971 {
18972   if (TREE_CODE (t) == SCOPE_REF)
18973     t = tsubst_qualified_id (t, args, complain, in_decl,
18974                              /*done=*/false, /*address_p=*/false);
18975   else
18976     t = tsubst_copy_and_build (t, args, complain, in_decl,
18977                                /*function_p=*/false,
18978                                /*integral_constant_expression_p=*/false);
18979
18980   return t;
18981 }
18982
18983 /* Subroutine of tsubst_lambda_expr: add the FIELD/INIT capture pair to the
18984    LAMBDA_EXPR_CAPTURE_LIST passed in LIST.  Do deduction for a previously
18985    dependent init-capture.  */
18986
18987 static void
18988 prepend_one_capture (tree field, tree init, tree &list,
18989                      tsubst_flags_t complain)
18990 {
18991   if (tree auto_node = type_uses_auto (TREE_TYPE (field)))
18992     {
18993       tree type = NULL_TREE;
18994       if (!init)
18995         {
18996           if (complain & tf_error)
18997             error ("empty initializer in lambda init-capture");
18998           init = error_mark_node;
18999         }
19000       else if (TREE_CODE (init) == TREE_LIST)
19001         init = build_x_compound_expr_from_list (init, ELK_INIT, complain);
19002       if (!type)
19003         type = do_auto_deduction (TREE_TYPE (field), init, auto_node, complain);
19004       TREE_TYPE (field) = type;
19005       cp_apply_type_quals_to_decl (cp_type_quals (type), field);
19006     }
19007   list = tree_cons (field, init, list);
19008 }
19009
19010 /* T is a LAMBDA_EXPR.  Generate a new LAMBDA_EXPR for the current
19011    instantiation context.  Instantiating a pack expansion containing a lambda
19012    might result in multiple lambdas all based on the same lambda in the
19013    template.  */
19014
19015 tree
19016 tsubst_lambda_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
19017 {
19018   tree oldfn = lambda_function (t);
19019   in_decl = oldfn;
19020
19021   tree r = build_lambda_expr ();
19022
19023   LAMBDA_EXPR_LOCATION (r)
19024     = LAMBDA_EXPR_LOCATION (t);
19025   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
19026     = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
19027   LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
19028   LAMBDA_EXPR_INSTANTIATED (r) = true;
19029
19030   if (LAMBDA_EXPR_EXTRA_SCOPE (t) == NULL_TREE)
19031     /* A lambda in a default argument outside a class gets no
19032        LAMBDA_EXPR_EXTRA_SCOPE, as specified by the ABI.  But
19033        tsubst_default_argument calls start_lambda_scope, so we need to
19034        specifically ignore it here, and use the global scope.  */
19035     record_null_lambda_scope (r);
19036   else
19037     record_lambda_scope (r);
19038
19039   gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
19040               && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
19041
19042   vec<tree,va_gc>* field_packs = NULL;
19043
19044   for (tree cap = LAMBDA_EXPR_CAPTURE_LIST (t); cap;
19045        cap = TREE_CHAIN (cap))
19046     {
19047       tree ofield = TREE_PURPOSE (cap);
19048       tree init = TREE_VALUE (cap);
19049       if (PACK_EXPANSION_P (init))
19050         init = tsubst_pack_expansion (init, args, complain, in_decl);
19051       else
19052         init = tsubst_copy_and_build (init, args, complain, in_decl,
19053                                       /*fn*/false, /*constexpr*/false);
19054
19055       if (init == error_mark_node)
19056         return error_mark_node;
19057
19058       if (init && TREE_CODE (init) == TREE_LIST)
19059         init = build_x_compound_expr_from_list (init, ELK_INIT, complain);
19060
19061       if (!processing_template_decl
19062           && init && TREE_CODE (init) != TREE_VEC
19063           && variably_modified_type_p (TREE_TYPE (init), NULL_TREE))
19064         {
19065           /* For a VLA, simply tsubsting the field type won't work, we need to
19066              go through add_capture again.  XXX do we want to do this for all
19067              captures?  */
19068           tree name = (get_identifier
19069                        (IDENTIFIER_POINTER (DECL_NAME (ofield)) + 2));
19070           tree ftype = TREE_TYPE (ofield);
19071           bool by_ref = (TYPE_REF_P (ftype)
19072                          || (TREE_CODE (ftype) == DECLTYPE_TYPE
19073                              && DECLTYPE_FOR_REF_CAPTURE (ftype)));
19074           add_capture (r, name, init, by_ref, !DECL_NORMAL_CAPTURE_P (ofield));
19075           continue;
19076         }
19077
19078       if (PACK_EXPANSION_P (ofield))
19079         ofield = PACK_EXPANSION_PATTERN (ofield);
19080       tree field = tsubst_decl (ofield, args, complain);
19081
19082       if (DECL_PACK_P (ofield) && !DECL_NORMAL_CAPTURE_P (ofield))
19083         {
19084           /* Remember these for when we've pushed local_specializations.  */
19085           vec_safe_push (field_packs, ofield);
19086           vec_safe_push (field_packs, field);
19087         }
19088
19089       if (field == error_mark_node)
19090         return error_mark_node;
19091
19092       if (TREE_CODE (field) == TREE_VEC)
19093         {
19094           int len = TREE_VEC_LENGTH (field);
19095           gcc_assert (TREE_CODE (init) == TREE_VEC
19096                       && TREE_VEC_LENGTH (init) == len);
19097           for (int i = 0; i < len; ++i)
19098             prepend_one_capture (TREE_VEC_ELT (field, i),
19099                                  TREE_VEC_ELT (init, i),
19100                                  LAMBDA_EXPR_CAPTURE_LIST (r),
19101                                  complain);
19102         }
19103       else
19104         {
19105           prepend_one_capture (field, init, LAMBDA_EXPR_CAPTURE_LIST (r),
19106                                complain);
19107
19108           if (id_equal (DECL_NAME (field), "__this"))
19109             LAMBDA_EXPR_THIS_CAPTURE (r) = field;
19110         }
19111     }
19112
19113   tree type = begin_lambda_type (r);
19114   if (type == error_mark_node)
19115     return error_mark_node;
19116
19117   /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
19118   determine_visibility (TYPE_NAME (type));
19119
19120   register_capture_members (LAMBDA_EXPR_CAPTURE_LIST (r));
19121
19122   tree oldtmpl = (generic_lambda_fn_p (oldfn)
19123                   ? DECL_TI_TEMPLATE (oldfn)
19124                   : NULL_TREE);
19125
19126   tree fntype = static_fn_type (oldfn);
19127   if (oldtmpl)
19128     ++processing_template_decl;
19129   fntype = tsubst (fntype, args, complain, in_decl);
19130   if (oldtmpl)
19131     --processing_template_decl;
19132
19133   if (fntype == error_mark_node)
19134     r = error_mark_node;
19135   else
19136     {
19137       /* The body of a lambda-expression is not a subexpression of the
19138          enclosing expression.  Parms are to have DECL_CHAIN tsubsted,
19139          which would be skipped if cp_unevaluated_operand.  */
19140       cp_evaluated ev;
19141
19142       /* Fix the type of 'this'.  */
19143       fntype = build_memfn_type (fntype, type,
19144                                  type_memfn_quals (fntype),
19145                                  type_memfn_rqual (fntype));
19146       tree fn, tmpl;
19147       if (oldtmpl)
19148         {
19149           tmpl = tsubst_template_decl (oldtmpl, args, complain, fntype);
19150           if (tmpl == error_mark_node)
19151             {
19152               r = error_mark_node;
19153               goto out;
19154             }
19155           fn = DECL_TEMPLATE_RESULT (tmpl);
19156           finish_member_declaration (tmpl);
19157         }
19158       else
19159         {
19160           tmpl = NULL_TREE;
19161           fn = tsubst_function_decl (oldfn, args, complain, fntype);
19162           if (fn == error_mark_node)
19163             {
19164               r = error_mark_node;
19165               goto out;
19166             }
19167           finish_member_declaration (fn);
19168         }
19169
19170       if (tree ci = get_constraints (oldfn))
19171         {
19172           /* Substitute into the lambda's constraints.  */
19173           if (oldtmpl)
19174             ++processing_template_decl;
19175           ci = tsubst_constraint_info (ci, args, complain, in_decl);
19176           if (oldtmpl)
19177             --processing_template_decl;
19178           set_constraints (fn, ci);
19179         }
19180
19181       /* Let finish_function set this.  */
19182       DECL_DECLARED_CONSTEXPR_P (fn) = false;
19183
19184       bool nested = cfun;
19185       if (nested)
19186         push_function_context ();
19187       else
19188         /* Still increment function_depth so that we don't GC in the
19189            middle of an expression.  */
19190         ++function_depth;
19191
19192       local_specialization_stack s (lss_copy);
19193
19194       tree body = start_lambda_function (fn, r);
19195
19196       /* Now record them for lookup_init_capture_pack.  */
19197       int fplen = vec_safe_length (field_packs);
19198       for (int i = 0; i < fplen; )
19199         {
19200           tree pack = (*field_packs)[i++];
19201           tree inst = (*field_packs)[i++];
19202           register_local_specialization (inst, pack);
19203         }
19204       release_tree_vector (field_packs);
19205
19206       register_parameter_specializations (oldfn, fn);
19207
19208       if (oldtmpl)
19209         {
19210           /* We might not partially instantiate some parts of the function, so
19211              copy these flags from the original template.  */
19212           language_function *ol = DECL_STRUCT_FUNCTION (oldfn)->language;
19213           current_function_returns_value = ol->returns_value;
19214           current_function_returns_null = ol->returns_null;
19215           current_function_returns_abnormally = ol->returns_abnormally;
19216           current_function_infinite_loop = ol->infinite_loop;
19217         }
19218
19219       /* [temp.deduct] A lambda-expression appearing in a function type or a
19220          template parameter is not considered part of the immediate context for
19221          the purposes of template argument deduction. */
19222       complain = tf_warning_or_error;
19223
19224       tsubst_expr (DECL_SAVED_TREE (oldfn), args, complain, r,
19225                    /*constexpr*/false);
19226
19227       finish_lambda_function (body);
19228
19229       if (nested)
19230         pop_function_context ();
19231       else
19232         --function_depth;
19233
19234       /* The capture list was built up in reverse order; fix that now.  */
19235       LAMBDA_EXPR_CAPTURE_LIST (r)
19236         = nreverse (LAMBDA_EXPR_CAPTURE_LIST (r));
19237
19238       LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
19239
19240       maybe_add_lambda_conv_op (type);
19241     }
19242
19243 out:
19244   finish_struct (type, /*attr*/NULL_TREE);
19245
19246   insert_pending_capture_proxies ();
19247
19248   return r;
19249 }
19250
19251 /* Like tsubst but deals with expressions and performs semantic
19252    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
19253
19254 tree
19255 tsubst_copy_and_build (tree t,
19256                        tree args,
19257                        tsubst_flags_t complain,
19258                        tree in_decl,
19259                        bool function_p,
19260                        bool integral_constant_expression_p)
19261 {
19262 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
19263 #define RECUR(NODE)                                             \
19264   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
19265                          /*function_p=*/false,                  \
19266                          integral_constant_expression_p)
19267
19268   tree retval, op1;
19269   location_t save_loc;
19270
19271   if (t == NULL_TREE || t == error_mark_node)
19272     return t;
19273
19274   save_loc = input_location;
19275   if (location_t eloc = cp_expr_location (t))
19276     input_location = eloc;
19277
19278   /* N3276 decltype magic only applies to calls at the top level or on the
19279      right side of a comma.  */
19280   tsubst_flags_t decltype_flag = (complain & tf_decltype);
19281   complain &= ~tf_decltype;
19282
19283   switch (TREE_CODE (t))
19284     {
19285     case USING_DECL:
19286       t = DECL_NAME (t);
19287       /* Fall through.  */
19288     case IDENTIFIER_NODE:
19289       {
19290         tree decl;
19291         cp_id_kind idk;
19292         bool non_integral_constant_expression_p;
19293         const char *error_msg;
19294
19295         if (IDENTIFIER_CONV_OP_P (t))
19296           {
19297             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
19298             t = make_conv_op_name (new_type);
19299           }
19300
19301         /* Look up the name.  */
19302         decl = lookup_name (t);
19303
19304         /* By convention, expressions use ERROR_MARK_NODE to indicate
19305            failure, not NULL_TREE.  */
19306         if (decl == NULL_TREE)
19307           decl = error_mark_node;
19308
19309         decl = finish_id_expression (t, decl, NULL_TREE,
19310                                      &idk,
19311                                      integral_constant_expression_p,
19312           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
19313                                      &non_integral_constant_expression_p,
19314                                      /*template_p=*/false,
19315                                      /*done=*/true,
19316                                      /*address_p=*/false,
19317                                      /*template_arg_p=*/false,
19318                                      &error_msg,
19319                                      input_location);
19320         if (error_msg)
19321           error (error_msg);
19322         if (!function_p && identifier_p (decl))
19323           {
19324             if (complain & tf_error)
19325               unqualified_name_lookup_error (decl);
19326             decl = error_mark_node;
19327           }
19328         RETURN (decl);
19329       }
19330
19331     case TEMPLATE_ID_EXPR:
19332       {
19333         tree object;
19334         tree templ = RECUR (TREE_OPERAND (t, 0));
19335         tree targs = TREE_OPERAND (t, 1);
19336
19337         if (targs)
19338           targs = tsubst_template_args (targs, args, complain, in_decl);
19339         if (targs == error_mark_node)
19340           RETURN (error_mark_node);
19341
19342         if (TREE_CODE (templ) == SCOPE_REF)
19343           {
19344             tree name = TREE_OPERAND (templ, 1);
19345             tree tid = lookup_template_function (name, targs);
19346             TREE_OPERAND (templ, 1) = tid;
19347             RETURN (templ);
19348           }
19349
19350         if (concept_definition_p (templ))
19351           {
19352             tree check = build_concept_check (templ, targs, complain);
19353             if (check == error_mark_node)
19354               RETURN (error_mark_node);
19355
19356             tree id = unpack_concept_check (check);
19357
19358             /* If we built a function concept check, return the underlying
19359                template-id. So we can evaluate it as a function call.  */
19360             if (function_concept_p (TREE_OPERAND (id, 0)))
19361               RETURN (id);
19362
19363             RETURN (check);
19364           }
19365
19366         if (variable_template_p (templ))
19367           {
19368             tree r = lookup_and_finish_template_variable (templ, targs,
19369                                                           complain);
19370             r = maybe_wrap_with_location (r, EXPR_LOCATION (t));
19371             RETURN (r);
19372           }
19373
19374         if (TREE_CODE (templ) == COMPONENT_REF)
19375           {
19376             object = TREE_OPERAND (templ, 0);
19377             templ = TREE_OPERAND (templ, 1);
19378           }
19379         else
19380           object = NULL_TREE;
19381         templ = lookup_template_function (templ, targs);
19382
19383         if (object)
19384           RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
19385                          object, templ, NULL_TREE));
19386         else
19387           RETURN (baselink_for_fns (templ));
19388       }
19389
19390     case INDIRECT_REF:
19391       {
19392         tree r = RECUR (TREE_OPERAND (t, 0));
19393
19394         if (REFERENCE_REF_P (t))
19395           {
19396             /* A type conversion to reference type will be enclosed in
19397                such an indirect ref, but the substitution of the cast
19398                will have also added such an indirect ref.  */
19399             r = convert_from_reference (r);
19400           }
19401         else
19402           r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
19403                                     complain|decltype_flag);
19404
19405         if (REF_PARENTHESIZED_P (t))
19406           r = force_paren_expr (r);
19407
19408         RETURN (r);
19409       }
19410
19411     case NOP_EXPR:
19412       {
19413         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
19414         tree op0 = RECUR (TREE_OPERAND (t, 0));
19415         RETURN (build_nop (type, op0));
19416       }
19417
19418     case IMPLICIT_CONV_EXPR:
19419       {
19420         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
19421         tree expr = RECUR (TREE_OPERAND (t, 0));
19422         if (dependent_type_p (type) || type_dependent_expression_p (expr))
19423           {
19424             retval = copy_node (t);
19425             TREE_TYPE (retval) = type;
19426             TREE_OPERAND (retval, 0) = expr;
19427             RETURN (retval);
19428           }
19429         if (IMPLICIT_CONV_EXPR_NONTYPE_ARG (t))
19430           /* We'll pass this to convert_nontype_argument again, we don't need
19431              to actually perform any conversion here.  */
19432           RETURN (expr);
19433         int flags = LOOKUP_IMPLICIT;
19434         if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
19435           flags = LOOKUP_NORMAL;
19436         if (IMPLICIT_CONV_EXPR_BRACED_INIT (t))
19437           flags |= LOOKUP_NO_NARROWING;
19438         RETURN (perform_implicit_conversion_flags (type, expr, complain,
19439                                                   flags));
19440       }
19441
19442     case CONVERT_EXPR:
19443       {
19444         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
19445         tree op0 = RECUR (TREE_OPERAND (t, 0));
19446         if (op0 == error_mark_node)
19447           RETURN (error_mark_node);
19448         RETURN (build1 (CONVERT_EXPR, type, op0));
19449       }
19450
19451     case CAST_EXPR:
19452     case REINTERPRET_CAST_EXPR:
19453     case CONST_CAST_EXPR:
19454     case DYNAMIC_CAST_EXPR:
19455     case STATIC_CAST_EXPR:
19456       {
19457         tree type;
19458         tree op, r = NULL_TREE;
19459
19460         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
19461         if (integral_constant_expression_p
19462             && !cast_valid_in_integral_constant_expression_p (type))
19463           {
19464             if (complain & tf_error)
19465               error ("a cast to a type other than an integral or "
19466                      "enumeration type cannot appear in a constant-expression");
19467             RETURN (error_mark_node);
19468           }
19469
19470         op = RECUR (TREE_OPERAND (t, 0));
19471
19472         warning_sentinel s(warn_useless_cast);
19473         warning_sentinel s2(warn_ignored_qualifiers);
19474         switch (TREE_CODE (t))
19475           {
19476           case CAST_EXPR:
19477             r = build_functional_cast (input_location, type, op, complain);
19478             break;
19479           case REINTERPRET_CAST_EXPR:
19480             r = build_reinterpret_cast (input_location, type, op, complain);
19481             break;
19482           case CONST_CAST_EXPR:
19483             r = build_const_cast (input_location, type, op, complain);
19484             break;
19485           case DYNAMIC_CAST_EXPR:
19486             r = build_dynamic_cast (input_location, type, op, complain);
19487             break;
19488           case STATIC_CAST_EXPR:
19489             r = build_static_cast (input_location, type, op, complain);
19490             if (IMPLICIT_RVALUE_P (t))
19491               set_implicit_rvalue_p (r);
19492             break;
19493           default:
19494             gcc_unreachable ();
19495           }
19496
19497         RETURN (r);
19498       }
19499
19500     case POSTDECREMENT_EXPR:
19501     case POSTINCREMENT_EXPR:
19502       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
19503                                                 args, complain, in_decl);
19504       RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
19505                                 complain|decltype_flag));
19506
19507     case PREDECREMENT_EXPR:
19508     case PREINCREMENT_EXPR:
19509     case NEGATE_EXPR:
19510     case BIT_NOT_EXPR:
19511     case ABS_EXPR:
19512     case TRUTH_NOT_EXPR:
19513     case UNARY_PLUS_EXPR:  /* Unary + */
19514     case REALPART_EXPR:
19515     case IMAGPART_EXPR:
19516       RETURN (build_x_unary_op (input_location, TREE_CODE (t),
19517                                 RECUR (TREE_OPERAND (t, 0)),
19518                                 complain|decltype_flag));
19519
19520     case FIX_TRUNC_EXPR:
19521       gcc_unreachable ();
19522
19523     case ADDR_EXPR:
19524       op1 = TREE_OPERAND (t, 0);
19525       if (TREE_CODE (op1) == LABEL_DECL)
19526         RETURN (finish_label_address_expr (DECL_NAME (op1),
19527                                           EXPR_LOCATION (op1)));
19528       if (TREE_CODE (op1) == SCOPE_REF)
19529         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
19530                                    /*done=*/true, /*address_p=*/true);
19531       else
19532         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
19533                                                   in_decl);
19534       RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
19535                                 complain|decltype_flag));
19536
19537     case PLUS_EXPR:
19538     case MINUS_EXPR:
19539     case MULT_EXPR:
19540     case TRUNC_DIV_EXPR:
19541     case CEIL_DIV_EXPR:
19542     case FLOOR_DIV_EXPR:
19543     case ROUND_DIV_EXPR:
19544     case EXACT_DIV_EXPR:
19545     case BIT_AND_EXPR:
19546     case BIT_IOR_EXPR:
19547     case BIT_XOR_EXPR:
19548     case TRUNC_MOD_EXPR:
19549     case FLOOR_MOD_EXPR:
19550     case TRUTH_ANDIF_EXPR:
19551     case TRUTH_ORIF_EXPR:
19552     case TRUTH_AND_EXPR:
19553     case TRUTH_OR_EXPR:
19554     case RSHIFT_EXPR:
19555     case LSHIFT_EXPR:
19556     case EQ_EXPR:
19557     case NE_EXPR:
19558     case MAX_EXPR:
19559     case MIN_EXPR:
19560     case LE_EXPR:
19561     case GE_EXPR:
19562     case LT_EXPR:
19563     case GT_EXPR:
19564     case SPACESHIP_EXPR:
19565     case MEMBER_REF:
19566     case DOTSTAR_EXPR:
19567       {
19568         /* If T was type-dependent, suppress warnings that depend on the range
19569            of the types involved.  */
19570         bool was_dep = type_dependent_expression_p_push (t);
19571
19572         tree op0 = RECUR (TREE_OPERAND (t, 0));
19573         tree op1 = RECUR (TREE_OPERAND (t, 1));
19574
19575         warning_sentinel s1(warn_type_limits, was_dep);
19576         warning_sentinel s2(warn_div_by_zero, was_dep);
19577         warning_sentinel s3(warn_logical_op, was_dep);
19578         warning_sentinel s4(warn_tautological_compare, was_dep);
19579
19580         tree r = build_x_binary_op
19581           (input_location, TREE_CODE (t),
19582            op0,
19583            (TREE_NO_WARNING (TREE_OPERAND (t, 0))
19584             ? ERROR_MARK
19585             : TREE_CODE (TREE_OPERAND (t, 0))),
19586            op1,
19587            (TREE_NO_WARNING (TREE_OPERAND (t, 1))
19588             ? ERROR_MARK
19589             : TREE_CODE (TREE_OPERAND (t, 1))),
19590            /*overload=*/NULL,
19591            complain|decltype_flag);
19592         if (EXPR_P (r) && TREE_NO_WARNING (t))
19593           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
19594
19595         RETURN (r);
19596       }
19597
19598     case POINTER_PLUS_EXPR:
19599       {
19600         tree op0 = RECUR (TREE_OPERAND (t, 0));
19601         if (op0 == error_mark_node)
19602           RETURN (error_mark_node);
19603         tree op1 = RECUR (TREE_OPERAND (t, 1));
19604         if (op1 == error_mark_node)
19605           RETURN (error_mark_node);
19606         RETURN (fold_build_pointer_plus (op0, op1));
19607       }
19608
19609     case SCOPE_REF:
19610       RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
19611                                   /*address_p=*/false));
19612     case ARRAY_REF:
19613       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
19614                                                 args, complain, in_decl);
19615       RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
19616                                  RECUR (TREE_OPERAND (t, 1)),
19617                                  complain|decltype_flag));
19618
19619     case SIZEOF_EXPR:
19620       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0))
19621           || ARGUMENT_PACK_P (TREE_OPERAND (t, 0)))
19622         RETURN (tsubst_copy (t, args, complain, in_decl));
19623       /* Fall through */
19624
19625     case ALIGNOF_EXPR:
19626       {
19627         tree r;
19628
19629         op1 = TREE_OPERAND (t, 0);
19630         if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
19631           op1 = TREE_TYPE (op1);
19632         bool std_alignof = (TREE_CODE (t) == ALIGNOF_EXPR
19633                             && ALIGNOF_EXPR_STD_P (t));
19634         if (!args)
19635           {
19636             /* When there are no ARGS, we are trying to evaluate a
19637                non-dependent expression from the parser.  Trying to do
19638                the substitutions may not work.  */
19639             if (!TYPE_P (op1))
19640               op1 = TREE_TYPE (op1);
19641           }
19642         else
19643           {
19644             ++cp_unevaluated_operand;
19645             ++c_inhibit_evaluation_warnings;
19646             if (TYPE_P (op1))
19647               op1 = tsubst (op1, args, complain, in_decl);
19648             else
19649               op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
19650                                            /*function_p=*/false,
19651                                            /*integral_constant_expression_p=*/
19652                                            false);
19653             --cp_unevaluated_operand;
19654             --c_inhibit_evaluation_warnings;
19655           }
19656         if (TYPE_P (op1))
19657           r = cxx_sizeof_or_alignof_type (input_location,
19658                                           op1, TREE_CODE (t), std_alignof,
19659                                           complain & tf_error);
19660         else
19661           r = cxx_sizeof_or_alignof_expr (input_location,
19662                                           op1, TREE_CODE (t),
19663                                           complain & tf_error);
19664         if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
19665           {
19666             if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
19667               {
19668                 if (!processing_template_decl && TYPE_P (op1))
19669                   {
19670                     r = build_min (SIZEOF_EXPR, size_type_node,
19671                                    build1 (NOP_EXPR, op1, error_mark_node));
19672                     SIZEOF_EXPR_TYPE_P (r) = 1;
19673                   }
19674                 else
19675                   r = build_min (SIZEOF_EXPR, size_type_node, op1);
19676                 TREE_SIDE_EFFECTS (r) = 0;
19677                 TREE_READONLY (r) = 1;
19678               }
19679             SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
19680           }
19681         RETURN (r);
19682       }
19683
19684     case AT_ENCODE_EXPR:
19685       {
19686         op1 = TREE_OPERAND (t, 0);
19687         ++cp_unevaluated_operand;
19688         ++c_inhibit_evaluation_warnings;
19689         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
19690                                      /*function_p=*/false,
19691                                      /*integral_constant_expression_p=*/false);
19692         --cp_unevaluated_operand;
19693         --c_inhibit_evaluation_warnings;
19694         RETURN (objc_build_encode_expr (op1));
19695       }
19696
19697     case NOEXCEPT_EXPR:
19698       op1 = TREE_OPERAND (t, 0);
19699       ++cp_unevaluated_operand;
19700       ++c_inhibit_evaluation_warnings;
19701       ++cp_noexcept_operand;
19702       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
19703                                    /*function_p=*/false,
19704                                    /*integral_constant_expression_p=*/false);
19705       --cp_unevaluated_operand;
19706       --c_inhibit_evaluation_warnings;
19707       --cp_noexcept_operand;
19708       RETURN (finish_noexcept_expr (op1, complain));
19709
19710     case MODOP_EXPR:
19711       {
19712         warning_sentinel s(warn_div_by_zero);
19713         tree lhs = RECUR (TREE_OPERAND (t, 0));
19714         tree rhs = RECUR (TREE_OPERAND (t, 2));
19715         tree r = build_x_modify_expr
19716           (EXPR_LOCATION (t), lhs, TREE_CODE (TREE_OPERAND (t, 1)), rhs,
19717            complain|decltype_flag);
19718         /* TREE_NO_WARNING must be set if either the expression was
19719            parenthesized or it uses an operator such as >>= rather
19720            than plain assignment.  In the former case, it was already
19721            set and must be copied.  In the latter case,
19722            build_x_modify_expr sets it and it must not be reset
19723            here.  */
19724         if (TREE_NO_WARNING (t))
19725           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
19726
19727         RETURN (r);
19728       }
19729
19730     case ARROW_EXPR:
19731       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
19732                                                 args, complain, in_decl);
19733       /* Remember that there was a reference to this entity.  */
19734       if (DECL_P (op1)
19735           && !mark_used (op1, complain) && !(complain & tf_error))
19736         RETURN (error_mark_node);
19737       RETURN (build_x_arrow (input_location, op1, complain));
19738
19739     case NEW_EXPR:
19740       {
19741         tree placement = RECUR (TREE_OPERAND (t, 0));
19742         tree init = RECUR (TREE_OPERAND (t, 3));
19743         vec<tree, va_gc> *placement_vec;
19744         vec<tree, va_gc> *init_vec;
19745         tree ret;
19746         location_t loc = EXPR_LOCATION (t);
19747
19748         if (placement == NULL_TREE)
19749           placement_vec = NULL;
19750         else if (placement == error_mark_node)
19751           RETURN (error_mark_node);
19752         else
19753           {
19754             placement_vec = make_tree_vector ();
19755             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
19756               vec_safe_push (placement_vec, TREE_VALUE (placement));
19757           }
19758
19759         /* If there was an initializer in the original tree, but it
19760            instantiated to an empty list, then we should pass a
19761            non-NULL empty vector to tell build_new that it was an
19762            empty initializer() rather than no initializer.  This can
19763            only happen when the initializer is a pack expansion whose
19764            parameter packs are of length zero.  */
19765         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
19766           init_vec = NULL;
19767         else
19768           {
19769             init_vec = make_tree_vector ();
19770             if (init == void_node)
19771               gcc_assert (init_vec != NULL);
19772             else
19773               {
19774                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
19775                   vec_safe_push (init_vec, TREE_VALUE (init));
19776               }
19777           }
19778
19779         /* Avoid passing an enclosing decl to valid_array_size_p.  */
19780         in_decl = NULL_TREE;
19781
19782         tree op1 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
19783         tree op2 = RECUR (TREE_OPERAND (t, 2));
19784         ret = build_new (loc, &placement_vec, op1, op2,
19785                          &init_vec, NEW_EXPR_USE_GLOBAL (t),
19786                          complain);
19787
19788         if (placement_vec != NULL)
19789           release_tree_vector (placement_vec);
19790         if (init_vec != NULL)
19791           release_tree_vector (init_vec);
19792
19793         RETURN (ret);
19794       }
19795
19796     case DELETE_EXPR:
19797       {
19798         tree op0 = RECUR (TREE_OPERAND (t, 0));
19799         tree op1 = RECUR (TREE_OPERAND (t, 1));
19800         RETURN (delete_sanity (input_location, op0, op1,
19801                                DELETE_EXPR_USE_VEC (t),
19802                                DELETE_EXPR_USE_GLOBAL (t),
19803                                complain));
19804       }
19805
19806     case COMPOUND_EXPR:
19807       {
19808         tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
19809                                           complain & ~tf_decltype, in_decl,
19810                                           /*function_p=*/false,
19811                                           integral_constant_expression_p);
19812         RETURN (build_x_compound_expr (EXPR_LOCATION (t),
19813                                        op0,
19814                                        RECUR (TREE_OPERAND (t, 1)),
19815                                        complain|decltype_flag));
19816       }
19817
19818     case CALL_EXPR:
19819       {
19820         tree function;
19821         unsigned int nargs, i;
19822         bool qualified_p;
19823         bool koenig_p;
19824         tree ret;
19825
19826         function = CALL_EXPR_FN (t);
19827         /* Internal function with no arguments.  */
19828         if (function == NULL_TREE && call_expr_nargs (t) == 0)
19829           RETURN (t);
19830
19831         /* When we parsed the expression, we determined whether or
19832            not Koenig lookup should be performed.  */
19833         koenig_p = KOENIG_LOOKUP_P (t);
19834         if (function == NULL_TREE)
19835           {
19836             koenig_p = false;
19837             qualified_p = false;
19838           }
19839         else if (TREE_CODE (function) == SCOPE_REF)
19840           {
19841             qualified_p = true;
19842             function = tsubst_qualified_id (function, args, complain, in_decl,
19843                                             /*done=*/false,
19844                                             /*address_p=*/false);
19845           }
19846         else if (koenig_p && identifier_p (function))
19847           {
19848             /* Do nothing; calling tsubst_copy_and_build on an identifier
19849                would incorrectly perform unqualified lookup again.
19850
19851                Note that we can also have an IDENTIFIER_NODE if the earlier
19852                unqualified lookup found a member function; in that case
19853                koenig_p will be false and we do want to do the lookup
19854                again to find the instantiated member function.
19855
19856                FIXME but doing that causes c++/15272, so we need to stop
19857                using IDENTIFIER_NODE in that situation.  */
19858             qualified_p = false;
19859           }
19860         else
19861           {
19862             if (TREE_CODE (function) == COMPONENT_REF)
19863               {
19864                 tree op = TREE_OPERAND (function, 1);
19865
19866                 qualified_p = (TREE_CODE (op) == SCOPE_REF
19867                                || (BASELINK_P (op)
19868                                    && BASELINK_QUALIFIED_P (op)));
19869               }
19870             else
19871               qualified_p = false;
19872
19873             if (TREE_CODE (function) == ADDR_EXPR
19874                 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
19875               /* Avoid error about taking the address of a constructor.  */
19876               function = TREE_OPERAND (function, 0);
19877
19878             function = tsubst_copy_and_build (function, args, complain,
19879                                               in_decl,
19880                                               !qualified_p,
19881                                               integral_constant_expression_p);
19882
19883             if (BASELINK_P (function))
19884               qualified_p = true;
19885           }
19886
19887         nargs = call_expr_nargs (t);
19888         releasing_vec call_args;
19889         for (i = 0; i < nargs; ++i)
19890           {
19891             tree arg = CALL_EXPR_ARG (t, i);
19892
19893             if (!PACK_EXPANSION_P (arg))
19894               vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
19895             else
19896               {
19897                 /* Expand the pack expansion and push each entry onto
19898                    CALL_ARGS.  */
19899                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
19900                 if (TREE_CODE (arg) == TREE_VEC)
19901                   {
19902                     unsigned int len, j;
19903
19904                     len = TREE_VEC_LENGTH (arg);
19905                     for (j = 0; j < len; ++j)
19906                       {
19907                         tree value = TREE_VEC_ELT (arg, j);
19908                         if (value != NULL_TREE)
19909                           value = convert_from_reference (value);
19910                         vec_safe_push (call_args, value);
19911                       }
19912                   }
19913                 else
19914                   {
19915                     /* A partial substitution.  Add one entry.  */
19916                     vec_safe_push (call_args, arg);
19917                   }
19918               }
19919           }
19920
19921         /* Stripped-down processing for a call in a thunk.  Specifically, in
19922            the thunk template for a generic lambda.  */
19923         if (CALL_FROM_THUNK_P (t))
19924           {
19925             /* Now that we've expanded any packs, the number of call args
19926                might be different.  */
19927             unsigned int cargs = call_args->length ();
19928             tree thisarg = NULL_TREE;
19929             if (TREE_CODE (function) == COMPONENT_REF)
19930               {
19931                 thisarg = TREE_OPERAND (function, 0);
19932                 if (TREE_CODE (thisarg) == INDIRECT_REF)
19933                   thisarg = TREE_OPERAND (thisarg, 0);
19934                 function = TREE_OPERAND (function, 1);
19935                 if (TREE_CODE (function) == BASELINK)
19936                   function = BASELINK_FUNCTIONS (function);
19937               }
19938             /* We aren't going to do normal overload resolution, so force the
19939                template-id to resolve.  */
19940             function = resolve_nondeduced_context (function, complain);
19941             for (unsigned i = 0; i < cargs; ++i)
19942               {
19943                 /* In a thunk, pass through args directly, without any
19944                    conversions.  */
19945                 tree arg = (*call_args)[i];
19946                 while (TREE_CODE (arg) != PARM_DECL)
19947                   arg = TREE_OPERAND (arg, 0);
19948                 (*call_args)[i] = arg;
19949               }
19950             if (thisarg)
19951               {
19952                 /* If there are no other args, just push 'this'.  */
19953                 if (cargs == 0)
19954                   vec_safe_push (call_args, thisarg);
19955                 else
19956                   {
19957                     /* Otherwise, shift the other args over to make room.  */
19958                     tree last = (*call_args)[cargs - 1];
19959                     vec_safe_push (call_args, last);
19960                     for (int i = cargs - 1; i > 0; --i)
19961                       (*call_args)[i] = (*call_args)[i - 1];
19962                     (*call_args)[0] = thisarg;
19963                   }
19964               }
19965             ret = build_call_a (function, call_args->length (),
19966                                 call_args->address ());
19967             /* The thunk location is not interesting.  */
19968             SET_EXPR_LOCATION (ret, UNKNOWN_LOCATION);
19969             CALL_FROM_THUNK_P (ret) = true;
19970             if (CLASS_TYPE_P (TREE_TYPE (ret)))
19971               CALL_EXPR_RETURN_SLOT_OPT (ret) = true;
19972
19973             RETURN (ret);
19974           }
19975
19976         /* We do not perform argument-dependent lookup if normal
19977            lookup finds a non-function, in accordance with the
19978            expected resolution of DR 218.  */
19979         if (koenig_p
19980             && ((is_overloaded_fn (function)
19981                  /* If lookup found a member function, the Koenig lookup is
19982                     not appropriate, even if an unqualified-name was used
19983                     to denote the function.  */
19984                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
19985                 || identifier_p (function))
19986             /* Only do this when substitution turns a dependent call
19987                into a non-dependent call.  */
19988             && type_dependent_expression_p_push (t)
19989             && !any_type_dependent_arguments_p (call_args))
19990           function = perform_koenig_lookup (function, call_args, tf_none);
19991
19992         if (function != NULL_TREE
19993             && identifier_p (function)
19994             && !any_type_dependent_arguments_p (call_args))
19995           {
19996             if (koenig_p && (complain & tf_warning_or_error))
19997               {
19998                 /* For backwards compatibility and good diagnostics, try
19999                    the unqualified lookup again if we aren't in SFINAE
20000                    context.  */
20001                 tree unq = (tsubst_copy_and_build
20002                             (function, args, complain, in_decl, true,
20003                              integral_constant_expression_p));
20004                 if (unq == error_mark_node)
20005                   RETURN (error_mark_node);
20006
20007                 if (unq != function)
20008                   {
20009                     /* In a lambda fn, we have to be careful to not
20010                        introduce new this captures.  Legacy code can't
20011                        be using lambdas anyway, so it's ok to be
20012                        stricter.  */
20013                     bool in_lambda = (current_class_type
20014                                       && LAMBDA_TYPE_P (current_class_type));
20015                     char const *const msg
20016                       = G_("%qD was not declared in this scope, "
20017                            "and no declarations were found by "
20018                            "argument-dependent lookup at the point "
20019                            "of instantiation");
20020
20021                     bool diag = true;
20022                     if (in_lambda)
20023                       error_at (cp_expr_loc_or_input_loc (t),
20024                                 msg, function);
20025                     else
20026                       diag = permerror (cp_expr_loc_or_input_loc (t),
20027                                         msg, function);
20028                     if (diag)
20029                       {
20030                         tree fn = unq;
20031
20032                         if (INDIRECT_REF_P (fn))
20033                           fn = TREE_OPERAND (fn, 0);
20034                         if (is_overloaded_fn (fn))
20035                           fn = get_first_fn (fn);
20036
20037                         if (!DECL_P (fn))
20038                           /* Can't say anything more.  */;
20039                         else if (DECL_CLASS_SCOPE_P (fn))
20040                           {
20041                             location_t loc = cp_expr_loc_or_input_loc (t);
20042                             inform (loc,
20043                                     "declarations in dependent base %qT are "
20044                                     "not found by unqualified lookup",
20045                                     DECL_CLASS_CONTEXT (fn));
20046                             if (current_class_ptr)
20047                               inform (loc,
20048                                       "use %<this->%D%> instead", function);
20049                             else
20050                               inform (loc,
20051                                       "use %<%T::%D%> instead",
20052                                       current_class_name, function);
20053                           }
20054                         else
20055                           inform (DECL_SOURCE_LOCATION (fn),
20056                                   "%qD declared here, later in the "
20057                                   "translation unit", fn);
20058                         if (in_lambda)
20059                           RETURN (error_mark_node);
20060                       }
20061
20062                     function = unq;
20063                   }
20064               }
20065             if (identifier_p (function))
20066               {
20067                 if (complain & tf_error)
20068                   unqualified_name_lookup_error (function);
20069                 RETURN (error_mark_node);
20070               }
20071           }
20072
20073         /* Remember that there was a reference to this entity.  */
20074         if (function != NULL_TREE
20075             && DECL_P (function)
20076             && !mark_used (function, complain) && !(complain & tf_error))
20077           RETURN (error_mark_node);
20078
20079         /* Put back tf_decltype for the actual call.  */
20080         complain |= decltype_flag;
20081
20082         if (function == NULL_TREE)
20083           switch (CALL_EXPR_IFN (t))
20084             {
20085             case IFN_LAUNDER:
20086               gcc_assert (nargs == 1);
20087               if (vec_safe_length (call_args) != 1)
20088                 {
20089                   error_at (cp_expr_loc_or_input_loc (t),
20090                             "wrong number of arguments to "
20091                             "%<__builtin_launder%>");
20092                   ret = error_mark_node;
20093                 }
20094               else
20095                 ret = finish_builtin_launder (cp_expr_loc_or_input_loc (t),
20096                                               (*call_args)[0], complain);
20097               break;
20098
20099             case IFN_VEC_CONVERT:
20100               gcc_assert (nargs == 1);
20101               if (vec_safe_length (call_args) != 1)
20102                 {
20103                   error_at (cp_expr_loc_or_input_loc (t),
20104                             "wrong number of arguments to "
20105                             "%<__builtin_convertvector%>");
20106                   ret = error_mark_node;
20107                   break;
20108                 }
20109               ret = cp_build_vec_convert ((*call_args)[0], input_location,
20110                                           tsubst (TREE_TYPE (t), args,
20111                                                   complain, in_decl),
20112                                           complain);
20113               if (TREE_CODE (ret) == VIEW_CONVERT_EXPR)
20114                 RETURN (ret);
20115               break;
20116
20117             default:
20118               /* Unsupported internal function with arguments.  */
20119               gcc_unreachable ();
20120             }
20121         else if (TREE_CODE (function) == OFFSET_REF
20122                  || TREE_CODE (function) == DOTSTAR_EXPR
20123                  || TREE_CODE (function) == MEMBER_REF)
20124           ret = build_offset_ref_call_from_tree (function, &call_args,
20125                                                  complain);
20126         else if (TREE_CODE (function) == COMPONENT_REF)
20127           {
20128             tree instance = TREE_OPERAND (function, 0);
20129             tree fn = TREE_OPERAND (function, 1);
20130
20131             if (processing_template_decl
20132                 && (type_dependent_expression_p (instance)
20133                     || (!BASELINK_P (fn)
20134                         && TREE_CODE (fn) != FIELD_DECL)
20135                     || type_dependent_expression_p (fn)
20136                     || any_type_dependent_arguments_p (call_args)))
20137               ret = build_min_nt_call_vec (function, call_args);
20138             else if (!BASELINK_P (fn))
20139               ret = finish_call_expr (function, &call_args,
20140                                        /*disallow_virtual=*/false,
20141                                        /*koenig_p=*/false,
20142                                        complain);
20143             else
20144               ret = (build_new_method_call
20145                       (instance, fn,
20146                        &call_args, NULL_TREE,
20147                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
20148                        /*fn_p=*/NULL,
20149                        complain));
20150           }
20151         else if (concept_check_p (function))
20152           {
20153             /* FUNCTION is a template-id referring to a concept definition.  */
20154             tree id = unpack_concept_check (function);
20155             tree tmpl = TREE_OPERAND (id, 0);
20156             tree args = TREE_OPERAND (id, 1);
20157
20158             /* Calls to standard and variable concepts should have been
20159                previously diagnosed.  */
20160             gcc_assert (function_concept_p (tmpl));
20161
20162             /* Ensure the result is wrapped as a call expression.  */
20163             ret = build_concept_check (tmpl, args, tf_warning_or_error);
20164           }
20165         else
20166           ret = finish_call_expr (function, &call_args,
20167                                   /*disallow_virtual=*/qualified_p,
20168                                   koenig_p,
20169                                   complain);
20170
20171         if (ret != error_mark_node)
20172           {
20173             bool op = CALL_EXPR_OPERATOR_SYNTAX (t);
20174             bool ord = CALL_EXPR_ORDERED_ARGS (t);
20175             bool rev = CALL_EXPR_REVERSE_ARGS (t);
20176             if (op || ord || rev)
20177               {
20178                 function = extract_call_expr (ret);
20179                 CALL_EXPR_OPERATOR_SYNTAX (function) = op;
20180                 CALL_EXPR_ORDERED_ARGS (function) = ord;
20181                 CALL_EXPR_REVERSE_ARGS (function) = rev;
20182               }
20183           }
20184
20185         RETURN (ret);
20186       }
20187
20188     case COND_EXPR:
20189       {
20190         tree cond = RECUR (TREE_OPERAND (t, 0));
20191         cond = mark_rvalue_use (cond);
20192         tree folded_cond = fold_non_dependent_expr (cond, complain);
20193         tree exp1, exp2;
20194
20195         if (TREE_CODE (folded_cond) == INTEGER_CST)
20196           {
20197             if (integer_zerop (folded_cond))
20198               {
20199                 ++c_inhibit_evaluation_warnings;
20200                 exp1 = RECUR (TREE_OPERAND (t, 1));
20201                 --c_inhibit_evaluation_warnings;
20202                 exp2 = RECUR (TREE_OPERAND (t, 2));
20203               }
20204             else
20205               {
20206                 exp1 = RECUR (TREE_OPERAND (t, 1));
20207                 ++c_inhibit_evaluation_warnings;
20208                 exp2 = RECUR (TREE_OPERAND (t, 2));
20209                 --c_inhibit_evaluation_warnings;
20210               }
20211             cond = folded_cond;
20212           }
20213         else
20214           {
20215             exp1 = RECUR (TREE_OPERAND (t, 1));
20216             exp2 = RECUR (TREE_OPERAND (t, 2));
20217           }
20218
20219         warning_sentinel s(warn_duplicated_branches);
20220         RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
20221                                          cond, exp1, exp2, complain));
20222       }
20223
20224     case PSEUDO_DTOR_EXPR:
20225       {
20226         tree op0 = RECUR (TREE_OPERAND (t, 0));
20227         tree op1 = RECUR (TREE_OPERAND (t, 1));
20228         tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
20229         RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
20230                                                input_location));
20231       }
20232
20233     case TREE_LIST:
20234       RETURN (tsubst_tree_list (t, args, complain, in_decl));
20235
20236     case COMPONENT_REF:
20237       {
20238         tree object;
20239         tree object_type;
20240         tree member;
20241         tree r;
20242
20243         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
20244                                                      args, complain, in_decl);
20245         /* Remember that there was a reference to this entity.  */
20246         if (DECL_P (object)
20247             && !mark_used (object, complain) && !(complain & tf_error))
20248           RETURN (error_mark_node);
20249         object_type = TREE_TYPE (object);
20250
20251         member = TREE_OPERAND (t, 1);
20252         if (BASELINK_P (member))
20253           member = tsubst_baselink (member,
20254                                     non_reference (TREE_TYPE (object)),
20255                                     args, complain, in_decl);
20256         else
20257           member = tsubst_copy (member, args, complain, in_decl);
20258         if (member == error_mark_node)
20259           RETURN (error_mark_node);
20260
20261         if (TREE_CODE (member) == FIELD_DECL)
20262           {
20263             r = finish_non_static_data_member (member, object, NULL_TREE);
20264             if (TREE_CODE (r) == COMPONENT_REF)
20265               REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
20266             RETURN (r);
20267           }
20268         else if (type_dependent_expression_p (object))
20269           /* We can't do much here.  */;
20270         else if (!CLASS_TYPE_P (object_type))
20271           {
20272             if (scalarish_type_p (object_type))
20273               {
20274                 tree s = NULL_TREE;
20275                 tree dtor = member;
20276
20277                 if (TREE_CODE (dtor) == SCOPE_REF)
20278                   {
20279                     s = TREE_OPERAND (dtor, 0);
20280                     dtor = TREE_OPERAND (dtor, 1);
20281                   }
20282                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
20283                   {
20284                     dtor = TREE_OPERAND (dtor, 0);
20285                     if (TYPE_P (dtor))
20286                       RETURN (finish_pseudo_destructor_expr
20287                               (object, s, dtor, input_location));
20288                   }
20289               }
20290           }
20291         else if (TREE_CODE (member) == SCOPE_REF
20292                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
20293           {
20294             /* Lookup the template functions now that we know what the
20295                scope is.  */
20296             tree scope = TREE_OPERAND (member, 0);
20297             tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
20298             tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
20299             member = lookup_qualified_name (scope, tmpl, LOOK_want::NORMAL,
20300                                             /*complain=*/false);
20301             if (BASELINK_P (member))
20302               {
20303                 BASELINK_FUNCTIONS (member)
20304                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
20305                               args);
20306                 member = (adjust_result_of_qualified_name_lookup
20307                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
20308                            object_type));
20309               }
20310             else
20311               {
20312                 qualified_name_lookup_error (scope, tmpl, member,
20313                                              input_location);
20314                 RETURN (error_mark_node);
20315               }
20316           }
20317         else if (TREE_CODE (member) == SCOPE_REF
20318                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
20319                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
20320           {
20321             if (complain & tf_error)
20322               {
20323                 if (TYPE_P (TREE_OPERAND (member, 0)))
20324                   error ("%qT is not a class or namespace",
20325                          TREE_OPERAND (member, 0));
20326                 else
20327                   error ("%qD is not a class or namespace",
20328                          TREE_OPERAND (member, 0));
20329               }
20330             RETURN (error_mark_node);
20331           }
20332
20333         r = finish_class_member_access_expr (object, member,
20334                                              /*template_p=*/false,
20335                                              complain);
20336         if (TREE_CODE (r) == COMPONENT_REF)
20337           REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
20338         RETURN (r);
20339       }
20340
20341     case THROW_EXPR:
20342       RETURN (build_throw
20343        (input_location, RECUR (TREE_OPERAND (t, 0))));
20344
20345     case CONSTRUCTOR:
20346       {
20347         vec<constructor_elt, va_gc> *n;
20348         constructor_elt *ce;
20349         unsigned HOST_WIDE_INT idx;
20350         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
20351         bool process_index_p;
20352         int newlen;
20353         bool need_copy_p = false;
20354         tree r;
20355
20356         if (type == error_mark_node)
20357           RETURN (error_mark_node);
20358
20359         /* We do not want to process the index of aggregate
20360            initializers as they are identifier nodes which will be
20361            looked up by digest_init.  */
20362         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
20363
20364         if (null_member_pointer_value_p (t))
20365           {
20366             gcc_assert (same_type_p (type, TREE_TYPE (t)));
20367             RETURN (t);
20368           }
20369
20370         n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
20371         newlen = vec_safe_length (n);
20372         FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
20373           {
20374             if (ce->index && process_index_p
20375                 /* An identifier index is looked up in the type
20376                    being initialized, not the current scope.  */
20377                 && TREE_CODE (ce->index) != IDENTIFIER_NODE)
20378               ce->index = RECUR (ce->index);
20379
20380             if (PACK_EXPANSION_P (ce->value))
20381               {
20382                 /* Substitute into the pack expansion.  */
20383                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
20384                                                   in_decl);
20385
20386                 if (ce->value == error_mark_node
20387                     || PACK_EXPANSION_P (ce->value))
20388                   ;
20389                 else if (TREE_VEC_LENGTH (ce->value) == 1)
20390                   /* Just move the argument into place.  */
20391                   ce->value = TREE_VEC_ELT (ce->value, 0);
20392                 else
20393                   {
20394                     /* Update the length of the final CONSTRUCTOR
20395                        arguments vector, and note that we will need to
20396                        copy.*/
20397                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
20398                     need_copy_p = true;
20399                   }
20400               }
20401             else
20402               ce->value = RECUR (ce->value);
20403           }
20404
20405         if (need_copy_p)
20406           {
20407             vec<constructor_elt, va_gc> *old_n = n;
20408
20409             vec_alloc (n, newlen);
20410             FOR_EACH_VEC_ELT (*old_n, idx, ce)
20411               {
20412                 if (TREE_CODE (ce->value) == TREE_VEC)
20413                   {
20414                     int i, len = TREE_VEC_LENGTH (ce->value);
20415                     for (i = 0; i < len; ++i)
20416                       CONSTRUCTOR_APPEND_ELT (n, 0,
20417                                               TREE_VEC_ELT (ce->value, i));
20418                   }
20419                 else
20420                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
20421               }
20422           }
20423
20424         r = build_constructor (init_list_type_node, n);
20425         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
20426         CONSTRUCTOR_IS_DESIGNATED_INIT (r)
20427           = CONSTRUCTOR_IS_DESIGNATED_INIT (t);
20428
20429         if (TREE_HAS_CONSTRUCTOR (t))
20430           {
20431             fcl_t cl = fcl_functional;
20432             if (CONSTRUCTOR_C99_COMPOUND_LITERAL (t))
20433               cl = fcl_c99;
20434             RETURN (finish_compound_literal (type, r, complain, cl));
20435           }
20436
20437         TREE_TYPE (r) = type;
20438         RETURN (r);
20439       }
20440
20441     case TYPEID_EXPR:
20442       {
20443         tree operand_0 = TREE_OPERAND (t, 0);
20444         if (TYPE_P (operand_0))
20445           {
20446             operand_0 = tsubst (operand_0, args, complain, in_decl);
20447             RETURN (get_typeid (operand_0, complain));
20448           }
20449         else
20450           {
20451             operand_0 = RECUR (operand_0);
20452             RETURN (build_typeid (operand_0, complain));
20453           }
20454       }
20455
20456     case VAR_DECL:
20457       if (!args)
20458         RETURN (t);
20459       /* Fall through */
20460
20461     case PARM_DECL:
20462       {
20463         tree r = tsubst_copy (t, args, complain, in_decl);
20464         /* ??? We're doing a subset of finish_id_expression here.  */
20465         if (tree wrap = maybe_get_tls_wrapper_call (r))
20466           /* Replace an evaluated use of the thread_local variable with
20467              a call to its wrapper.  */
20468           r = wrap;
20469         else if (outer_automatic_var_p (r))
20470           r = process_outer_var_ref (r, complain);
20471
20472         if (!TYPE_REF_P (TREE_TYPE (t)))
20473           /* If the original type was a reference, we'll be wrapped in
20474              the appropriate INDIRECT_REF.  */
20475           r = convert_from_reference (r);
20476         RETURN (r);
20477       }
20478
20479     case VA_ARG_EXPR:
20480       {
20481         tree op0 = RECUR (TREE_OPERAND (t, 0));
20482         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
20483         RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
20484       }
20485
20486     case OFFSETOF_EXPR:
20487       {
20488         tree object_ptr
20489           = tsubst_copy_and_build (TREE_OPERAND (t, 1), args, complain,
20490                                    in_decl, /*function_p=*/false,
20491                                    /*integral_constant_expression_p=*/false);
20492         RETURN (finish_offsetof (object_ptr,
20493                                  RECUR (TREE_OPERAND (t, 0)),
20494                                  EXPR_LOCATION (t)));
20495       }
20496
20497     case ADDRESSOF_EXPR:
20498       RETURN (cp_build_addressof (EXPR_LOCATION (t),
20499                                   RECUR (TREE_OPERAND (t, 0)), complain));
20500
20501     case TRAIT_EXPR:
20502       {
20503         tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
20504                              complain, in_decl);
20505         tree type2 = tsubst (TRAIT_EXPR_TYPE2 (t), args,
20506                              complain, in_decl);
20507         RETURN (finish_trait_expr (TRAIT_EXPR_LOCATION (t),
20508                                    TRAIT_EXPR_KIND (t), type1, type2));
20509       }
20510
20511     case STMT_EXPR:
20512       {
20513         tree old_stmt_expr = cur_stmt_expr;
20514         tree stmt_expr = begin_stmt_expr ();
20515
20516         cur_stmt_expr = stmt_expr;
20517         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
20518                      integral_constant_expression_p);
20519         stmt_expr = finish_stmt_expr (stmt_expr, false);
20520         cur_stmt_expr = old_stmt_expr;
20521
20522         /* If the resulting list of expression statement is empty,
20523            fold it further into void_node.  */
20524         if (empty_expr_stmt_p (stmt_expr))
20525           stmt_expr = void_node;
20526
20527         RETURN (stmt_expr);
20528       }
20529
20530     case LAMBDA_EXPR:
20531       {
20532         if (complain & tf_partial)
20533           {
20534             /* We don't have a full set of template arguments yet; don't touch
20535                the lambda at all.  */
20536             gcc_assert (processing_template_decl);
20537             return t;
20538           }
20539         tree r = tsubst_lambda_expr (t, args, complain, in_decl);
20540
20541         RETURN (build_lambda_object (r));
20542       }
20543
20544     case TARGET_EXPR:
20545       /* We can get here for a constant initializer of non-dependent type.
20546          FIXME stop folding in cp_parser_initializer_clause.  */
20547       {
20548         tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
20549                                          complain);
20550         RETURN (r);
20551       }
20552
20553     case TRANSACTION_EXPR:
20554       RETURN (tsubst_expr(t, args, complain, in_decl,
20555              integral_constant_expression_p));
20556
20557     case PAREN_EXPR:
20558       RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
20559
20560     case VEC_PERM_EXPR:
20561       {
20562         tree op0 = RECUR (TREE_OPERAND (t, 0));
20563         tree op1 = RECUR (TREE_OPERAND (t, 1));
20564         tree op2 = RECUR (TREE_OPERAND (t, 2));
20565         RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
20566                                        complain));
20567       }
20568
20569     case REQUIRES_EXPR:
20570       {
20571         tree r = tsubst_requires_expr (t, args, tf_none, in_decl);
20572         RETURN (r);
20573       }
20574
20575     case RANGE_EXPR:
20576       /* No need to substitute further, a RANGE_EXPR will always be built
20577          with constant operands.  */
20578       RETURN (t);
20579
20580     case NON_LVALUE_EXPR:
20581     case VIEW_CONVERT_EXPR:
20582       if (location_wrapper_p (t))
20583         /* We need to do this here as well as in tsubst_copy so we get the
20584            other tsubst_copy_and_build semantics for a PARM_DECL operand.  */
20585         RETURN (maybe_wrap_with_location (RECUR (TREE_OPERAND (t, 0)),
20586                                           EXPR_LOCATION (t)));
20587       /* fallthrough.  */
20588
20589     default:
20590       /* Handle Objective-C++ constructs, if appropriate.  */
20591       {
20592         tree subst
20593           = objcp_tsubst_copy_and_build (t, args, complain,
20594                                          in_decl, /*function_p=*/false);
20595         if (subst)
20596           RETURN (subst);
20597       }
20598       RETURN (tsubst_copy (t, args, complain, in_decl));
20599     }
20600
20601 #undef RECUR
20602 #undef RETURN
20603  out:
20604   input_location = save_loc;
20605   return retval;
20606 }
20607
20608 /* Verify that the instantiated ARGS are valid. For type arguments,
20609    make sure that the type's linkage is ok. For non-type arguments,
20610    make sure they are constants if they are integral or enumerations.
20611    Emit an error under control of COMPLAIN, and return TRUE on error.  */
20612
20613 static bool
20614 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
20615 {
20616   if (dependent_template_arg_p (t))
20617     return false;
20618   if (ARGUMENT_PACK_P (t))
20619     {
20620       tree vec = ARGUMENT_PACK_ARGS (t);
20621       int len = TREE_VEC_LENGTH (vec);
20622       bool result = false;
20623       int i;
20624
20625       for (i = 0; i < len; ++i)
20626         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
20627           result = true;
20628       return result;
20629     }
20630   else if (TYPE_P (t))
20631     {
20632       /* [basic.link]: A name with no linkage (notably, the name
20633          of a class or enumeration declared in a local scope)
20634          shall not be used to declare an entity with linkage.
20635          This implies that names with no linkage cannot be used as
20636          template arguments
20637
20638          DR 757 relaxes this restriction for C++0x.  */
20639       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
20640                  : no_linkage_check (t, /*relaxed_p=*/false));
20641
20642       if (nt)
20643         {
20644           /* DR 488 makes use of a type with no linkage cause
20645              type deduction to fail.  */
20646           if (complain & tf_error)
20647             {
20648               if (TYPE_UNNAMED_P (nt))
20649                 error ("%qT is/uses unnamed type", t);
20650               else
20651                 error ("template argument for %qD uses local type %qT",
20652                        tmpl, t);
20653             }
20654           return true;
20655         }
20656       /* In order to avoid all sorts of complications, we do not
20657          allow variably-modified types as template arguments.  */
20658       else if (variably_modified_type_p (t, NULL_TREE))
20659         {
20660           if (complain & tf_error)
20661             error ("%qT is a variably modified type", t);
20662           return true;
20663         }
20664     }
20665   /* Class template and alias template arguments should be OK.  */
20666   else if (DECL_TYPE_TEMPLATE_P (t))
20667     ;
20668   /* A non-type argument of integral or enumerated type must be a
20669      constant.  */
20670   else if (TREE_TYPE (t)
20671            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
20672            && !REFERENCE_REF_P (t)
20673            && !TREE_CONSTANT (t))
20674     {
20675       if (complain & tf_error)
20676         error ("integral expression %qE is not constant", t);
20677       return true;
20678     }
20679   return false;
20680 }
20681
20682 static bool
20683 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
20684 {
20685   int ix, len = DECL_NTPARMS (tmpl);
20686   bool result = false;
20687
20688   for (ix = 0; ix != len; ix++)
20689     {
20690       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
20691         result = true;
20692     }
20693   if (result && (complain & tf_error))
20694     error ("  trying to instantiate %qD", tmpl);
20695   return result;
20696 }
20697
20698 /* We're out of SFINAE context now, so generate diagnostics for the access
20699    errors we saw earlier when instantiating D from TMPL and ARGS.  */
20700
20701 static void
20702 recheck_decl_substitution (tree d, tree tmpl, tree args)
20703 {
20704   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
20705   tree type = TREE_TYPE (pattern);
20706   location_t loc = input_location;
20707
20708   push_access_scope (d);
20709   push_deferring_access_checks (dk_no_deferred);
20710   input_location = DECL_SOURCE_LOCATION (pattern);
20711   tsubst (type, args, tf_warning_or_error, d);
20712   input_location = loc;
20713   pop_deferring_access_checks ();
20714   pop_access_scope (d);
20715 }
20716
20717 /* Instantiate the indicated variable, function, or alias template TMPL with
20718    the template arguments in TARG_PTR.  */
20719
20720 static tree
20721 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
20722 {
20723   tree targ_ptr = orig_args;
20724   tree fndecl;
20725   tree gen_tmpl;
20726   tree spec;
20727   bool access_ok = true;
20728
20729   if (tmpl == error_mark_node)
20730     return error_mark_node;
20731
20732   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
20733
20734   /* If this function is a clone, handle it specially.  */
20735   if (DECL_CLONED_FUNCTION_P (tmpl))
20736     {
20737       tree spec;
20738       tree clone;
20739
20740       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
20741          DECL_CLONED_FUNCTION.  */
20742       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
20743                                    targ_ptr, complain);
20744       if (spec == error_mark_node)
20745         return error_mark_node;
20746
20747       /* Look for the clone.  */
20748       FOR_EACH_CLONE (clone, spec)
20749         if (DECL_NAME (clone) == DECL_NAME (tmpl))
20750           return clone;
20751       /* We should always have found the clone by now.  */
20752       gcc_unreachable ();
20753       return NULL_TREE;
20754     }
20755
20756   if (targ_ptr == error_mark_node)
20757     return error_mark_node;
20758
20759   /* Check to see if we already have this specialization.  */
20760   gen_tmpl = most_general_template (tmpl);
20761   if (TMPL_ARGS_DEPTH (targ_ptr)
20762       < TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl)))
20763     /* targ_ptr only has the innermost template args, so add the outer ones
20764        from tmpl, which could be either a partial instantiation or gen_tmpl (in
20765        the case of a non-dependent call within a template definition).  */
20766     targ_ptr = (add_outermost_template_args
20767                 (DECL_TI_ARGS (DECL_TEMPLATE_RESULT (tmpl)),
20768                  targ_ptr));
20769
20770   /* It would be nice to avoid hashing here and then again in tsubst_decl,
20771      but it doesn't seem to be on the hot path.  */
20772   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
20773
20774   gcc_checking_assert (tmpl == gen_tmpl
20775                        || ((fndecl
20776                             = retrieve_specialization (tmpl, orig_args, 0))
20777                            == spec)
20778                        || fndecl == NULL_TREE);
20779
20780   if (spec != NULL_TREE)
20781     {
20782       if (FNDECL_HAS_ACCESS_ERRORS (spec))
20783         {
20784           if (complain & tf_error)
20785             recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
20786           return error_mark_node;
20787         }
20788       return spec;
20789     }
20790
20791   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
20792                                complain))
20793     return error_mark_node;
20794
20795   /* We are building a FUNCTION_DECL, during which the access of its
20796      parameters and return types have to be checked.  However this
20797      FUNCTION_DECL which is the desired context for access checking
20798      is not built yet.  We solve this chicken-and-egg problem by
20799      deferring all checks until we have the FUNCTION_DECL.  */
20800   push_deferring_access_checks (dk_deferred);
20801
20802   /* Instantiation of the function happens in the context of the function
20803      template, not the context of the overload resolution we're doing.  */
20804   push_to_top_level ();
20805   /* If there are dependent arguments, e.g. because we're doing partial
20806      ordering, make sure processing_template_decl stays set.  */
20807   if (uses_template_parms (targ_ptr))
20808     ++processing_template_decl;
20809   if (DECL_CLASS_SCOPE_P (gen_tmpl))
20810     {
20811       tree ctx = tsubst_aggr_type (DECL_CONTEXT (gen_tmpl), targ_ptr,
20812                                    complain, gen_tmpl, true);
20813       push_nested_class (ctx);
20814     }
20815
20816   tree pattern = DECL_TEMPLATE_RESULT (gen_tmpl);
20817
20818   fndecl = NULL_TREE;
20819   if (VAR_P (pattern))
20820     {
20821       /* We need to determine if we're using a partial or explicit
20822          specialization now, because the type of the variable could be
20823          different.  */
20824       tree tid = lookup_template_variable (gen_tmpl, targ_ptr);
20825       tree elt = most_specialized_partial_spec (tid, complain);
20826       if (elt == error_mark_node)
20827         pattern = error_mark_node;
20828       else if (elt)
20829         {
20830           tree partial_tmpl = TREE_VALUE (elt);
20831           tree partial_args = TREE_PURPOSE (elt);
20832           tree partial_pat = DECL_TEMPLATE_RESULT (partial_tmpl);
20833           fndecl = tsubst (partial_pat, partial_args, complain, gen_tmpl);
20834         }
20835     }
20836
20837   /* Substitute template parameters to obtain the specialization.  */
20838   if (fndecl == NULL_TREE)
20839     fndecl = tsubst (pattern, targ_ptr, complain, gen_tmpl);
20840   if (DECL_CLASS_SCOPE_P (gen_tmpl))
20841     pop_nested_class ();
20842   pop_from_top_level ();
20843
20844   if (fndecl == error_mark_node)
20845     {
20846       pop_deferring_access_checks ();
20847       return error_mark_node;
20848     }
20849
20850   /* The DECL_TI_TEMPLATE should always be the immediate parent
20851      template, not the most general template.  */
20852   DECL_TI_TEMPLATE (fndecl) = tmpl;
20853   DECL_TI_ARGS (fndecl) = targ_ptr;
20854
20855   /* Now we know the specialization, compute access previously
20856      deferred.  Do no access control for inheriting constructors,
20857      as we already checked access for the inherited constructor.  */
20858   if (!(flag_new_inheriting_ctors
20859         && DECL_INHERITED_CTOR (fndecl)))
20860     {
20861       push_access_scope (fndecl);
20862       if (!perform_deferred_access_checks (complain))
20863         access_ok = false;
20864       pop_access_scope (fndecl);
20865     }
20866   pop_deferring_access_checks ();
20867
20868   /* If we've just instantiated the main entry point for a function,
20869      instantiate all the alternate entry points as well.  We do this
20870      by cloning the instantiation of the main entry point, not by
20871      instantiating the template clones.  */
20872   if (tree chain = DECL_CHAIN (gen_tmpl))
20873     if (DECL_P (chain) && DECL_CLONED_FUNCTION_P (chain))
20874       clone_cdtor (fndecl, /*update_methods=*/false);
20875
20876   if (!access_ok)
20877     {
20878       if (!(complain & tf_error))
20879         {
20880           /* Remember to reinstantiate when we're out of SFINAE so the user
20881              can see the errors.  */
20882           FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
20883         }
20884       return error_mark_node;
20885     }
20886   return fndecl;
20887 }
20888
20889 /* Wrapper for instantiate_template_1.  */
20890
20891 tree
20892 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
20893 {
20894   tree ret;
20895   timevar_push (TV_TEMPLATE_INST);
20896   ret = instantiate_template_1 (tmpl, orig_args,  complain);
20897   timevar_pop (TV_TEMPLATE_INST);
20898   return ret;
20899 }
20900
20901 /* Instantiate the alias template TMPL with ARGS.  Also push a template
20902    instantiation level, which instantiate_template doesn't do because
20903    functions and variables have sufficient context established by the
20904    callers.  */
20905
20906 static tree
20907 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
20908 {
20909   if (tmpl == error_mark_node || args == error_mark_node)
20910     return error_mark_node;
20911
20912   args =
20913     coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
20914                                      args, tmpl, complain,
20915                                      /*require_all_args=*/true,
20916                                      /*use_default_args=*/true);
20917
20918   /* FIXME check for satisfaction in check_instantiated_args.  */
20919   if (flag_concepts
20920       && !any_dependent_template_arguments_p (args)
20921       && !constraints_satisfied_p (tmpl, args))
20922     {
20923       if (complain & tf_error)
20924         {
20925           auto_diagnostic_group d;
20926           error ("template constraint failure for %qD", tmpl);
20927           diagnose_constraints (input_location, tmpl, args);
20928         }
20929       return error_mark_node;
20930     }
20931
20932   if (!push_tinst_level (tmpl, args))
20933     return error_mark_node;
20934   tree r = instantiate_template (tmpl, args, complain);
20935   pop_tinst_level ();
20936
20937   return r;
20938 }
20939
20940 /* PARM is a template parameter pack for FN.  Returns true iff
20941    PARM is used in a deducible way in the argument list of FN.  */
20942
20943 static bool
20944 pack_deducible_p (tree parm, tree fn)
20945 {
20946   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
20947   for (; t; t = TREE_CHAIN (t))
20948     {
20949       tree type = TREE_VALUE (t);
20950       tree packs;
20951       if (!PACK_EXPANSION_P (type))
20952         continue;
20953       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
20954            packs; packs = TREE_CHAIN (packs))
20955         if (template_args_equal (TREE_VALUE (packs), parm))
20956           {
20957             /* The template parameter pack is used in a function parameter
20958                pack.  If this is the end of the parameter list, the
20959                template parameter pack is deducible.  */
20960             if (TREE_CHAIN (t) == void_list_node)
20961               return true;
20962             else
20963               /* Otherwise, not.  Well, it could be deduced from
20964                  a non-pack parameter, but doing so would end up with
20965                  a deduction mismatch, so don't bother.  */
20966               return false;
20967           }
20968     }
20969   /* The template parameter pack isn't used in any function parameter
20970      packs, but it might be used deeper, e.g. tuple<Args...>.  */
20971   return true;
20972 }
20973
20974 /* Subroutine of fn_type_unification: check non-dependent parms for
20975    convertibility.  */
20976
20977 static int
20978 check_non_deducible_conversions (tree parms, const tree *args, unsigned nargs,
20979                                  tree fn, unification_kind_t strict, int flags,
20980                                  struct conversion **convs, bool explain_p)
20981 {
20982   /* Non-constructor methods need to leave a conversion for 'this', which
20983      isn't included in nargs here.  */
20984   unsigned offset = (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
20985                      && !DECL_CONSTRUCTOR_P (fn));
20986
20987   for (unsigned ia = 0;
20988        parms && parms != void_list_node && ia < nargs; )
20989     {
20990       tree parm = TREE_VALUE (parms);
20991
20992       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
20993           && (!TREE_CHAIN (parms)
20994               || TREE_CHAIN (parms) == void_list_node))
20995         /* For a function parameter pack that occurs at the end of the
20996            parameter-declaration-list, the type A of each remaining
20997            argument of the call is compared with the type P of the
20998            declarator-id of the function parameter pack.  */
20999         break;
21000
21001       parms = TREE_CHAIN (parms);
21002
21003       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
21004         /* For a function parameter pack that does not occur at the
21005            end of the parameter-declaration-list, the type of the
21006            parameter pack is a non-deduced context.  */
21007         continue;
21008
21009       if (!uses_template_parms (parm))
21010         {
21011           tree arg = args[ia];
21012           conversion **conv_p = convs ? &convs[ia+offset] : NULL;
21013           int lflags = conv_flags (ia, nargs, fn, arg, flags);
21014
21015           if (check_non_deducible_conversion (parm, arg, strict, lflags,
21016                                               conv_p, explain_p))
21017             return 1;
21018         }
21019
21020       ++ia;
21021     }
21022
21023   return 0;
21024 }
21025
21026 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
21027    NARGS elements of the arguments that are being used when calling
21028    it.  TARGS is a vector into which the deduced template arguments
21029    are placed.
21030
21031    Returns either a FUNCTION_DECL for the matching specialization of FN or
21032    NULL_TREE if no suitable specialization can be found.  If EXPLAIN_P is
21033    true, diagnostics will be printed to explain why it failed.
21034
21035    If FN is a conversion operator, or we are trying to produce a specific
21036    specialization, RETURN_TYPE is the return type desired.
21037
21038    The EXPLICIT_TARGS are explicit template arguments provided via a
21039    template-id.
21040
21041    The parameter STRICT is one of:
21042
21043    DEDUCE_CALL:
21044      We are deducing arguments for a function call, as in
21045      [temp.deduct.call].  If RETURN_TYPE is non-null, we are
21046      deducing arguments for a call to the result of a conversion
21047      function template, as in [over.call.object].
21048
21049    DEDUCE_CONV:
21050      We are deducing arguments for a conversion function, as in
21051      [temp.deduct.conv].
21052
21053    DEDUCE_EXACT:
21054      We are deducing arguments when doing an explicit instantiation
21055      as in [temp.explicit], when determining an explicit specialization
21056      as in [temp.expl.spec], or when taking the address of a function
21057      template, as in [temp.deduct.funcaddr].  */
21058
21059 tree
21060 fn_type_unification (tree fn,
21061                      tree explicit_targs,
21062                      tree targs,
21063                      const tree *args,
21064                      unsigned int nargs,
21065                      tree return_type,
21066                      unification_kind_t strict,
21067                      int flags,
21068                      struct conversion **convs,
21069                      bool explain_p,
21070                      bool decltype_p)
21071 {
21072   tree parms;
21073   tree fntype;
21074   tree decl = NULL_TREE;
21075   tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
21076   bool ok;
21077   static int deduction_depth;
21078   /* type_unification_real will pass back any access checks from default
21079      template argument substitution.  */
21080   vec<deferred_access_check, va_gc> *checks = NULL;
21081   /* We don't have all the template args yet.  */
21082   bool incomplete = true;
21083
21084   tree orig_fn = fn;
21085   if (flag_new_inheriting_ctors)
21086     fn = strip_inheriting_ctors (fn);
21087
21088   tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
21089   tree r = error_mark_node;
21090
21091   tree full_targs = targs;
21092   if (TMPL_ARGS_DEPTH (targs)
21093       < TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (fn)))
21094     full_targs = (add_outermost_template_args
21095                   (DECL_TI_ARGS (DECL_TEMPLATE_RESULT (fn)),
21096                    targs));
21097
21098   if (decltype_p)
21099     complain |= tf_decltype;
21100
21101   /* In C++0x, it's possible to have a function template whose type depends
21102      on itself recursively.  This is most obvious with decltype, but can also
21103      occur with enumeration scope (c++/48969).  So we need to catch infinite
21104      recursion and reject the substitution at deduction time; this function
21105      will return error_mark_node for any repeated substitution.
21106
21107      This also catches excessive recursion such as when f<N> depends on
21108      f<N-1> across all integers, and returns error_mark_node for all the
21109      substitutions back up to the initial one.
21110
21111      This is, of course, not reentrant.  */
21112   if (excessive_deduction_depth)
21113     return error_mark_node;
21114   ++deduction_depth;
21115
21116   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
21117
21118   fntype = TREE_TYPE (fn);
21119   if (explicit_targs)
21120     {
21121       /* [temp.deduct]
21122
21123          The specified template arguments must match the template
21124          parameters in kind (i.e., type, nontype, template), and there
21125          must not be more arguments than there are parameters;
21126          otherwise type deduction fails.
21127
21128          Nontype arguments must match the types of the corresponding
21129          nontype template parameters, or must be convertible to the
21130          types of the corresponding nontype parameters as specified in
21131          _temp.arg.nontype_, otherwise type deduction fails.
21132
21133          All references in the function type of the function template
21134          to the corresponding template parameters are replaced by the
21135          specified template argument values.  If a substitution in a
21136          template parameter or in the function type of the function
21137          template results in an invalid type, type deduction fails.  */
21138       int i, len = TREE_VEC_LENGTH (tparms);
21139       location_t loc = input_location;
21140       incomplete = false;
21141
21142       if (explicit_targs == error_mark_node)
21143         goto fail;
21144
21145       if (TMPL_ARGS_DEPTH (explicit_targs)
21146           < TMPL_ARGS_DEPTH (full_targs))
21147         explicit_targs = add_outermost_template_args (full_targs,
21148                                                       explicit_targs);
21149
21150       /* Adjust any explicit template arguments before entering the
21151          substitution context.  */
21152       explicit_targs
21153         = (coerce_template_parms (tparms, explicit_targs, fn,
21154                                   complain|tf_partial,
21155                                   /*require_all_args=*/false,
21156                                   /*use_default_args=*/false));
21157       if (explicit_targs == error_mark_node)
21158         goto fail;
21159
21160       /* Substitute the explicit args into the function type.  This is
21161          necessary so that, for instance, explicitly declared function
21162          arguments can match null pointed constants.  If we were given
21163          an incomplete set of explicit args, we must not do semantic
21164          processing during substitution as we could create partial
21165          instantiations.  */
21166       for (i = 0; i < len; i++)
21167         {
21168           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
21169           bool parameter_pack = false;
21170           tree targ = TREE_VEC_ELT (explicit_targs, i);
21171
21172           /* Dig out the actual parm.  */
21173           if (TREE_CODE (parm) == TYPE_DECL
21174               || TREE_CODE (parm) == TEMPLATE_DECL)
21175             {
21176               parm = TREE_TYPE (parm);
21177               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
21178             }
21179           else if (TREE_CODE (parm) == PARM_DECL)
21180             {
21181               parm = DECL_INITIAL (parm);
21182               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
21183             }
21184
21185           if (targ == NULL_TREE)
21186             /* No explicit argument for this template parameter.  */
21187             incomplete = true;
21188           else if (parameter_pack && pack_deducible_p (parm, fn))
21189             {
21190               /* Mark the argument pack as "incomplete". We could
21191                  still deduce more arguments during unification.
21192                  We remove this mark in type_unification_real.  */
21193               ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
21194               ARGUMENT_PACK_EXPLICIT_ARGS (targ)
21195                 = ARGUMENT_PACK_ARGS (targ);
21196
21197               /* We have some incomplete argument packs.  */
21198               incomplete = true;
21199             }
21200         }
21201
21202       if (incomplete)
21203         {
21204           if (!push_tinst_level (fn, explicit_targs))
21205             {
21206               excessive_deduction_depth = true;
21207               goto fail;
21208             }
21209           ++processing_template_decl;
21210           input_location = DECL_SOURCE_LOCATION (fn);
21211           /* Ignore any access checks; we'll see them again in
21212              instantiate_template and they might have the wrong
21213              access path at this point.  */
21214           push_deferring_access_checks (dk_deferred);
21215           tsubst_flags_t ecomplain = complain | tf_partial | tf_fndecl_type;
21216           fntype = tsubst (TREE_TYPE (fn), explicit_targs, ecomplain, NULL_TREE);
21217           pop_deferring_access_checks ();
21218           input_location = loc;
21219           --processing_template_decl;
21220           pop_tinst_level ();
21221
21222           if (fntype == error_mark_node)
21223             goto fail;
21224         }
21225
21226       /* Place the explicitly specified arguments in TARGS.  */
21227       explicit_targs = INNERMOST_TEMPLATE_ARGS (explicit_targs);
21228       for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
21229         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
21230       if (!incomplete && CHECKING_P
21231           && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
21232         SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
21233           (targs, NUM_TMPL_ARGS (explicit_targs));
21234     }
21235
21236   if (return_type && strict != DEDUCE_CALL)
21237     {
21238       tree *new_args = XALLOCAVEC (tree, nargs + 1);
21239       new_args[0] = return_type;
21240       memcpy (new_args + 1, args, nargs * sizeof (tree));
21241       args = new_args;
21242       ++nargs;
21243     }
21244
21245   if (!incomplete)
21246     goto deduced;
21247
21248   /* Never do unification on the 'this' parameter.  */
21249   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
21250
21251   if (return_type && strict == DEDUCE_CALL)
21252     {
21253       /* We're deducing for a call to the result of a template conversion
21254          function.  The parms we really want are in return_type.  */
21255       if (INDIRECT_TYPE_P (return_type))
21256         return_type = TREE_TYPE (return_type);
21257       parms = TYPE_ARG_TYPES (return_type);
21258     }
21259   else if (return_type)
21260     {
21261       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
21262     }
21263
21264   /* We allow incomplete unification without an error message here
21265      because the standard doesn't seem to explicitly prohibit it.  Our
21266      callers must be ready to deal with unification failures in any
21267      event.  */
21268
21269   /* If we aren't explaining yet, push tinst context so we can see where
21270      any errors (e.g. from class instantiations triggered by instantiation
21271      of default template arguments) come from.  If we are explaining, this
21272      context is redundant.  */
21273   if (!explain_p && !push_tinst_level (fn, targs))
21274     {
21275       excessive_deduction_depth = true;
21276       goto fail;
21277     }
21278
21279   ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
21280                                full_targs, parms, args, nargs, /*subr=*/0,
21281                                strict, &checks, explain_p);
21282   if (!explain_p)
21283     pop_tinst_level ();
21284   if (!ok)
21285     goto fail;
21286
21287   /* Now that we have bindings for all of the template arguments,
21288      ensure that the arguments deduced for the template template
21289      parameters have compatible template parameter lists.  We cannot
21290      check this property before we have deduced all template
21291      arguments, because the template parameter types of a template
21292      template parameter might depend on prior template parameters
21293      deduced after the template template parameter.  The following
21294      ill-formed example illustrates this issue:
21295
21296        template<typename T, template<T> class C> void f(C<5>, T);
21297
21298        template<int N> struct X {};
21299
21300        void g() {
21301          f(X<5>(), 5l); // error: template argument deduction fails
21302        }
21303
21304      The template parameter list of 'C' depends on the template type
21305      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
21306      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
21307      time that we deduce 'C'.  */
21308   if (!template_template_parm_bindings_ok_p
21309            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
21310     {
21311       unify_inconsistent_template_template_parameters (explain_p);
21312       goto fail;
21313     }
21314
21315  deduced:
21316
21317   /* CWG2369: Check satisfaction before non-deducible conversions.  */
21318   if (!constraints_satisfied_p (fn, targs))
21319     {
21320       if (explain_p)
21321         diagnose_constraints (DECL_SOURCE_LOCATION (fn), fn, targs);
21322       goto fail;
21323     }
21324
21325   /* DR 1391: All parameters have args, now check non-dependent parms for
21326      convertibility.  We don't do this if all args were explicitly specified,
21327      as the standard says that we substitute explicit args immediately.  */
21328   if (incomplete
21329       && check_non_deducible_conversions (parms, args, nargs, fn, strict, flags,
21330                                           convs, explain_p))
21331     goto fail;
21332
21333   /* All is well so far.  Now, check:
21334
21335      [temp.deduct]
21336
21337      When all template arguments have been deduced, all uses of
21338      template parameters in nondeduced contexts are replaced with
21339      the corresponding deduced argument values.  If the
21340      substitution results in an invalid type, as described above,
21341      type deduction fails.  */
21342   if (!push_tinst_level (fn, targs))
21343     {
21344       excessive_deduction_depth = true;
21345       goto fail;
21346     }
21347
21348   /* Also collect access checks from the instantiation.  */
21349   reopen_deferring_access_checks (checks);
21350
21351   decl = instantiate_template (fn, targs, complain);
21352
21353   checks = get_deferred_access_checks ();
21354   pop_deferring_access_checks ();
21355
21356   pop_tinst_level ();
21357
21358   if (decl == error_mark_node)
21359     goto fail;
21360
21361   /* Now perform any access checks encountered during substitution.  */
21362   push_access_scope (decl);
21363   ok = perform_access_checks (checks, complain);
21364   pop_access_scope (decl);
21365   if (!ok)
21366     goto fail;
21367
21368   /* If we're looking for an exact match, check that what we got
21369      is indeed an exact match.  It might not be if some template
21370      parameters are used in non-deduced contexts.  But don't check
21371      for an exact match if we have dependent template arguments;
21372      in that case we're doing partial ordering, and we already know
21373      that we have two candidates that will provide the actual type.  */
21374   if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
21375     {
21376       tree substed = TREE_TYPE (decl);
21377       unsigned int i;
21378
21379       tree sarg
21380         = skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
21381       if (return_type)
21382         sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
21383       for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
21384         if (!same_type_p (args[i], TREE_VALUE (sarg)))
21385           {
21386             unify_type_mismatch (explain_p, args[i],
21387                                  TREE_VALUE (sarg));
21388             goto fail;
21389           }
21390     }
21391
21392   /* After doing deduction with the inherited constructor, actually return an
21393      instantiation of the inheriting constructor.  */
21394   if (orig_fn != fn)
21395     decl = instantiate_template (orig_fn, targs, complain);
21396
21397   r = decl;
21398
21399  fail:
21400   --deduction_depth;
21401   if (excessive_deduction_depth)
21402     {
21403       if (deduction_depth == 0)
21404         /* Reset once we're all the way out.  */
21405         excessive_deduction_depth = false;
21406     }
21407
21408   return r;
21409 }
21410
21411 /* Adjust types before performing type deduction, as described in
21412    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
21413    sections are symmetric.  PARM is the type of a function parameter
21414    or the return type of the conversion function.  ARG is the type of
21415    the argument passed to the call, or the type of the value
21416    initialized with the result of the conversion function.
21417    ARG_EXPR is the original argument expression, which may be null.  */
21418
21419 static int
21420 maybe_adjust_types_for_deduction (unification_kind_t strict,
21421                                   tree* parm,
21422                                   tree* arg,
21423                                   tree arg_expr)
21424 {
21425   int result = 0;
21426
21427   switch (strict)
21428     {
21429     case DEDUCE_CALL:
21430       break;
21431
21432     case DEDUCE_CONV:
21433       /* Swap PARM and ARG throughout the remainder of this
21434          function; the handling is precisely symmetric since PARM
21435          will initialize ARG rather than vice versa.  */
21436       std::swap (parm, arg);
21437       break;
21438
21439     case DEDUCE_EXACT:
21440       /* Core issue #873: Do the DR606 thing (see below) for these cases,
21441          too, but here handle it by stripping the reference from PARM
21442          rather than by adding it to ARG.  */
21443       if (TYPE_REF_P (*parm)
21444           && TYPE_REF_IS_RVALUE (*parm)
21445           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
21446           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
21447           && TYPE_REF_P (*arg)
21448           && !TYPE_REF_IS_RVALUE (*arg))
21449         *parm = TREE_TYPE (*parm);
21450       /* Nothing else to do in this case.  */
21451       return 0;
21452
21453     default:
21454       gcc_unreachable ();
21455     }
21456
21457   if (!TYPE_REF_P (*parm))
21458     {
21459       /* [temp.deduct.call]
21460
21461          If P is not a reference type:
21462
21463          --If A is an array type, the pointer type produced by the
21464          array-to-pointer standard conversion (_conv.array_) is
21465          used in place of A for type deduction; otherwise,
21466
21467          --If A is a function type, the pointer type produced by
21468          the function-to-pointer standard conversion
21469          (_conv.func_) is used in place of A for type deduction;
21470          otherwise,
21471
21472          --If A is a cv-qualified type, the top level
21473          cv-qualifiers of A's type are ignored for type
21474          deduction.  */
21475       if (TREE_CODE (*arg) == ARRAY_TYPE)
21476         *arg = build_pointer_type (TREE_TYPE (*arg));
21477       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
21478         *arg = build_pointer_type (*arg);
21479       else
21480         *arg = TYPE_MAIN_VARIANT (*arg);
21481     }
21482
21483   /* [14.8.2.1/3 temp.deduct.call], "A forwarding reference is an rvalue
21484      reference to a cv-unqualified template parameter that does not represent a
21485      template parameter of a class template (during class template argument
21486      deduction (13.3.1.8)). If P is a forwarding reference and the argument is
21487      an lvalue, the type "lvalue reference to A" is used in place of A for type
21488      deduction. */
21489   if (TYPE_REF_P (*parm)
21490       && TYPE_REF_IS_RVALUE (*parm)
21491       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
21492       && !TEMPLATE_TYPE_PARM_FOR_CLASS (TREE_TYPE (*parm))
21493       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
21494       && (arg_expr ? lvalue_p (arg_expr)
21495           /* try_one_overload doesn't provide an arg_expr, but
21496              functions are always lvalues.  */
21497           : TREE_CODE (*arg) == FUNCTION_TYPE))
21498     *arg = build_reference_type (*arg);
21499
21500   /* [temp.deduct.call]
21501
21502      If P is a cv-qualified type, the top level cv-qualifiers
21503      of P's type are ignored for type deduction.  If P is a
21504      reference type, the type referred to by P is used for
21505      type deduction.  */
21506   *parm = TYPE_MAIN_VARIANT (*parm);
21507   if (TYPE_REF_P (*parm))
21508     {
21509       *parm = TREE_TYPE (*parm);
21510       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
21511     }
21512
21513   /* DR 322. For conversion deduction, remove a reference type on parm
21514      too (which has been swapped into ARG).  */
21515   if (strict == DEDUCE_CONV && TYPE_REF_P (*arg))
21516     *arg = TREE_TYPE (*arg);
21517
21518   return result;
21519 }
21520
21521 /* Subroutine of fn_type_unification.  PARM is a function parameter of a
21522    template which doesn't contain any deducible template parameters; check if
21523    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
21524    unify_one_argument.  */
21525
21526 static int
21527 check_non_deducible_conversion (tree parm, tree arg, int strict,
21528                                 int flags, struct conversion **conv_p,
21529                                 bool explain_p)
21530 {
21531   tree type;
21532
21533   if (!TYPE_P (arg))
21534     type = TREE_TYPE (arg);
21535   else
21536     type = arg;
21537
21538   if (same_type_p (parm, type))
21539     return unify_success (explain_p);
21540
21541   tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
21542   if (strict == DEDUCE_CONV)
21543     {
21544       if (can_convert_arg (type, parm, NULL_TREE, flags, complain))
21545         return unify_success (explain_p);
21546     }
21547   else if (strict != DEDUCE_EXACT)
21548     {
21549       bool ok = false;
21550       tree conv_arg = TYPE_P (arg) ? NULL_TREE : arg;
21551       if (conv_p)
21552         /* Avoid recalculating this in add_function_candidate.  */
21553         ok = (*conv_p
21554               = good_conversion (parm, type, conv_arg, flags, complain));
21555       else
21556         ok = can_convert_arg (parm, type, conv_arg, flags, complain);
21557       if (ok)
21558         return unify_success (explain_p);
21559     }
21560
21561   if (strict == DEDUCE_EXACT)
21562     return unify_type_mismatch (explain_p, parm, arg);
21563   else
21564     return unify_arg_conversion (explain_p, parm, type, arg);
21565 }
21566
21567 static bool uses_deducible_template_parms (tree type);
21568
21569 /* Returns true iff the expression EXPR is one from which a template
21570    argument can be deduced.  In other words, if it's an undecorated
21571    use of a template non-type parameter.  */
21572
21573 static bool
21574 deducible_expression (tree expr)
21575 {
21576   /* Strip implicit conversions.  */
21577   while (CONVERT_EXPR_P (expr) || TREE_CODE (expr) == VIEW_CONVERT_EXPR)
21578     expr = TREE_OPERAND (expr, 0);
21579   return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
21580 }
21581
21582 /* Returns true iff the array domain DOMAIN uses a template parameter in a
21583    deducible way; that is, if it has a max value of <PARM> - 1.  */
21584
21585 static bool
21586 deducible_array_bound (tree domain)
21587 {
21588   if (domain == NULL_TREE)
21589     return false;
21590
21591   tree max = TYPE_MAX_VALUE (domain);
21592   if (TREE_CODE (max) != MINUS_EXPR)
21593     return false;
21594
21595   return deducible_expression (TREE_OPERAND (max, 0));
21596 }
21597
21598 /* Returns true iff the template arguments ARGS use a template parameter
21599    in a deducible way.  */
21600
21601 static bool
21602 deducible_template_args (tree args)
21603 {
21604   for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
21605     {
21606       bool deducible;
21607       tree elt = TREE_VEC_ELT (args, i);
21608       if (ARGUMENT_PACK_P (elt))
21609         deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
21610       else
21611         {
21612           if (PACK_EXPANSION_P (elt))
21613             elt = PACK_EXPANSION_PATTERN (elt);
21614           if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
21615             deducible = true;
21616           else if (TYPE_P (elt))
21617             deducible = uses_deducible_template_parms (elt);
21618           else
21619             deducible = deducible_expression (elt);
21620         }
21621       if (deducible)
21622         return true;
21623     }
21624   return false;
21625 }
21626
21627 /* Returns true iff TYPE contains any deducible references to template
21628    parameters, as per 14.8.2.5.  */
21629
21630 static bool
21631 uses_deducible_template_parms (tree type)
21632 {
21633   if (PACK_EXPANSION_P (type))
21634     type = PACK_EXPANSION_PATTERN (type);
21635
21636   /* T
21637      cv-list T
21638      TT<T>
21639      TT<i>
21640      TT<> */
21641   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
21642       || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
21643     return true;
21644
21645   /* T*
21646      T&
21647      T&&  */
21648   if (INDIRECT_TYPE_P (type))
21649     return uses_deducible_template_parms (TREE_TYPE (type));
21650
21651   /* T[integer-constant ]
21652      type [i]  */
21653   if (TREE_CODE (type) == ARRAY_TYPE)
21654     return (uses_deducible_template_parms (TREE_TYPE (type))
21655             || deducible_array_bound (TYPE_DOMAIN (type)));
21656
21657   /* T type ::*
21658      type T::*
21659      T T::*
21660      T (type ::*)()
21661      type (T::*)()
21662      type (type ::*)(T)
21663      type (T::*)(T)
21664      T (type ::*)(T)
21665      T (T::*)()
21666      T (T::*)(T) */
21667   if (TYPE_PTRMEM_P (type))
21668     return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
21669             || (uses_deducible_template_parms
21670                 (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
21671
21672   /* template-name <T> (where template-name refers to a class template)
21673      template-name <i> (where template-name refers to a class template) */
21674   if (CLASS_TYPE_P (type)
21675       && CLASSTYPE_TEMPLATE_INFO (type)
21676       && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
21677     return deducible_template_args (INNERMOST_TEMPLATE_ARGS
21678                                     (CLASSTYPE_TI_ARGS (type)));
21679
21680   /* type (T)
21681      T()
21682      T(T)  */
21683   if (FUNC_OR_METHOD_TYPE_P (type))
21684     {
21685       if (uses_deducible_template_parms (TREE_TYPE (type)))
21686         return true;
21687       tree parm = TYPE_ARG_TYPES (type);
21688       if (TREE_CODE (type) == METHOD_TYPE)
21689         parm = TREE_CHAIN (parm);
21690       for (; parm; parm = TREE_CHAIN (parm))
21691         if (uses_deducible_template_parms (TREE_VALUE (parm)))
21692           return true;
21693     }
21694
21695   return false;
21696 }
21697
21698 /* Subroutine of type_unification_real and unify_pack_expansion to
21699    handle unification of a single P/A pair.  Parameters are as
21700    for those functions.  */
21701
21702 static int
21703 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
21704                     int subr, unification_kind_t strict,
21705                     bool explain_p)
21706 {
21707   tree arg_expr = NULL_TREE;
21708   int arg_strict;
21709
21710   if (arg == error_mark_node || parm == error_mark_node)
21711     return unify_invalid (explain_p);
21712   if (arg == unknown_type_node)
21713     /* We can't deduce anything from this, but we might get all the
21714        template args from other function args.  */
21715     return unify_success (explain_p);
21716
21717   /* Implicit conversions (Clause 4) will be performed on a function
21718      argument to convert it to the type of the corresponding function
21719      parameter if the parameter type contains no template-parameters that
21720      participate in template argument deduction.  */
21721   if (strict != DEDUCE_EXACT
21722       && TYPE_P (parm) && !uses_deducible_template_parms (parm))
21723     /* For function parameters with no deducible template parameters,
21724        just return.  We'll check non-dependent conversions later.  */
21725     return unify_success (explain_p);
21726
21727   switch (strict)
21728     {
21729     case DEDUCE_CALL:
21730       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
21731                     | UNIFY_ALLOW_MORE_CV_QUAL
21732                     | UNIFY_ALLOW_DERIVED);
21733       break;
21734
21735     case DEDUCE_CONV:
21736       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
21737       break;
21738
21739     case DEDUCE_EXACT:
21740       arg_strict = UNIFY_ALLOW_NONE;
21741       break;
21742
21743     default:
21744       gcc_unreachable ();
21745     }
21746
21747   /* We only do these transformations if this is the top-level
21748      parameter_type_list in a call or declaration matching; in other
21749      situations (nested function declarators, template argument lists) we
21750      won't be comparing a type to an expression, and we don't do any type
21751      adjustments.  */
21752   if (!subr)
21753     {
21754       if (!TYPE_P (arg))
21755         {
21756           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
21757           if (type_unknown_p (arg))
21758             {
21759               /* [temp.deduct.type] A template-argument can be
21760                  deduced from a pointer to function or pointer
21761                  to member function argument if the set of
21762                  overloaded functions does not contain function
21763                  templates and at most one of a set of
21764                  overloaded functions provides a unique
21765                  match.  */
21766               resolve_overloaded_unification (tparms, targs, parm,
21767                                               arg, strict,
21768                                               arg_strict, explain_p);
21769               /* If a unique match was not found, this is a
21770                  non-deduced context, so we still succeed. */
21771               return unify_success (explain_p);
21772             }
21773
21774           arg_expr = arg;
21775           arg = unlowered_expr_type (arg);
21776           if (arg == error_mark_node)
21777             return unify_invalid (explain_p);
21778         }
21779
21780       arg_strict |=
21781         maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
21782     }
21783   else
21784     if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
21785         != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
21786       return unify_template_argument_mismatch (explain_p, parm, arg);
21787
21788   /* For deduction from an init-list we need the actual list.  */
21789   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
21790     arg = arg_expr;
21791   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
21792 }
21793
21794 /* for_each_template_parm callback that always returns 0.  */
21795
21796 static int
21797 zero_r (tree, void *)
21798 {
21799   return 0;
21800 }
21801
21802 /* for_each_template_parm any_fn callback to handle deduction of a template
21803    type argument from the type of an array bound.  */
21804
21805 static int
21806 array_deduction_r (tree t, void *data)
21807 {
21808   tree_pair_p d = (tree_pair_p)data;
21809   tree &tparms = d->purpose;
21810   tree &targs = d->value;
21811
21812   if (TREE_CODE (t) == ARRAY_TYPE)
21813     if (tree dom = TYPE_DOMAIN (t))
21814       if (tree max = TYPE_MAX_VALUE (dom))
21815         {
21816           if (TREE_CODE (max) == MINUS_EXPR)
21817             max = TREE_OPERAND (max, 0);
21818           if (TREE_CODE (max) == TEMPLATE_PARM_INDEX)
21819             unify (tparms, targs, TREE_TYPE (max), size_type_node,
21820                    UNIFY_ALLOW_NONE, /*explain*/false);
21821         }
21822
21823   /* Keep walking.  */
21824   return 0;
21825 }
21826
21827 /* Try to deduce any not-yet-deduced template type arguments from the type of
21828    an array bound.  This is handled separately from unify because 14.8.2.5 says
21829    "The type of a type parameter is only deduced from an array bound if it is
21830    not otherwise deduced."  */
21831
21832 static void
21833 try_array_deduction (tree tparms, tree targs, tree parm)
21834 {
21835   tree_pair_s data = { tparms, targs };
21836   hash_set<tree> visited;
21837   for_each_template_parm (parm, zero_r, &data, &visited,
21838                           /*nondeduced*/false, array_deduction_r);
21839 }
21840
21841 /* Most parms like fn_type_unification.
21842
21843    If SUBR is 1, we're being called recursively (to unify the
21844    arguments of a function or method parameter of a function
21845    template).
21846
21847    CHECKS is a pointer to a vector of access checks encountered while
21848    substituting default template arguments.  */
21849
21850 static int
21851 type_unification_real (tree tparms,
21852                        tree full_targs,
21853                        tree xparms,
21854                        const tree *xargs,
21855                        unsigned int xnargs,
21856                        int subr,
21857                        unification_kind_t strict,
21858                        vec<deferred_access_check, va_gc> **checks,
21859                        bool explain_p)
21860 {
21861   tree parm, arg;
21862   int i;
21863   int ntparms = TREE_VEC_LENGTH (tparms);
21864   int saw_undeduced = 0;
21865   tree parms;
21866   const tree *args;
21867   unsigned int nargs;
21868   unsigned int ia;
21869
21870   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
21871   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
21872   gcc_assert (ntparms > 0);
21873
21874   tree targs = INNERMOST_TEMPLATE_ARGS (full_targs);
21875
21876   /* Reset the number of non-defaulted template arguments contained
21877      in TARGS.  */
21878   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
21879
21880  again:
21881   parms = xparms;
21882   args = xargs;
21883   nargs = xnargs;
21884
21885   ia = 0;
21886   while (parms && parms != void_list_node
21887          && ia < nargs)
21888     {
21889       parm = TREE_VALUE (parms);
21890
21891       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
21892           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
21893         /* For a function parameter pack that occurs at the end of the
21894            parameter-declaration-list, the type A of each remaining
21895            argument of the call is compared with the type P of the
21896            declarator-id of the function parameter pack.  */
21897         break;
21898
21899       parms = TREE_CHAIN (parms);
21900
21901       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
21902         /* For a function parameter pack that does not occur at the
21903            end of the parameter-declaration-list, the type of the
21904            parameter pack is a non-deduced context.  */
21905         continue;
21906
21907       arg = args[ia];
21908       ++ia;
21909
21910       if (unify_one_argument (tparms, full_targs, parm, arg, subr, strict,
21911                               explain_p))
21912         return 1;
21913     }
21914
21915   if (parms
21916       && parms != void_list_node
21917       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
21918     {
21919       /* Unify the remaining arguments with the pack expansion type.  */
21920       tree argvec;
21921       tree parmvec = make_tree_vec (1);
21922
21923       /* Allocate a TREE_VEC and copy in all of the arguments */
21924       argvec = make_tree_vec (nargs - ia);
21925       for (i = 0; ia < nargs; ++ia, ++i)
21926         TREE_VEC_ELT (argvec, i) = args[ia];
21927
21928       /* Copy the parameter into parmvec.  */
21929       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
21930       if (unify_pack_expansion (tparms, full_targs, parmvec, argvec, strict,
21931                                 /*subr=*/subr, explain_p))
21932         return 1;
21933
21934       /* Advance to the end of the list of parameters.  */
21935       parms = TREE_CHAIN (parms);
21936     }
21937
21938   /* Fail if we've reached the end of the parm list, and more args
21939      are present, and the parm list isn't variadic.  */
21940   if (ia < nargs && parms == void_list_node)
21941     return unify_too_many_arguments (explain_p, nargs, ia);
21942   /* Fail if parms are left and they don't have default values and
21943      they aren't all deduced as empty packs (c++/57397).  This is
21944      consistent with sufficient_parms_p.  */
21945   if (parms && parms != void_list_node
21946       && TREE_PURPOSE (parms) == NULL_TREE)
21947     {
21948       unsigned int count = nargs;
21949       tree p = parms;
21950       bool type_pack_p;
21951       do
21952         {
21953           type_pack_p = TREE_CODE (TREE_VALUE (p)) == TYPE_PACK_EXPANSION;
21954           if (!type_pack_p)
21955             count++;
21956           p = TREE_CHAIN (p);
21957         }
21958       while (p && p != void_list_node);
21959       if (count != nargs)
21960         return unify_too_few_arguments (explain_p, ia, count,
21961                                         type_pack_p);
21962     }
21963
21964   if (!subr)
21965     {
21966       tsubst_flags_t complain = (explain_p
21967                                  ? tf_warning_or_error
21968                                  : tf_none);
21969       bool tried_array_deduction = (cxx_dialect < cxx17);
21970
21971       for (i = 0; i < ntparms; i++)
21972         {
21973           tree targ = TREE_VEC_ELT (targs, i);
21974           tree tparm = TREE_VEC_ELT (tparms, i);
21975
21976           /* Clear the "incomplete" flags on all argument packs now so that
21977              substituting them into later default arguments works.  */
21978           if (targ && ARGUMENT_PACK_P (targ))
21979             {
21980               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
21981               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
21982             }
21983
21984           if (targ || tparm == error_mark_node)
21985             continue;
21986           tparm = TREE_VALUE (tparm);
21987
21988           if (TREE_CODE (tparm) == TYPE_DECL
21989               && !tried_array_deduction)
21990             {
21991               try_array_deduction (tparms, targs, xparms);
21992               tried_array_deduction = true;
21993               if (TREE_VEC_ELT (targs, i))
21994                 continue;
21995             }
21996
21997           /* If this is an undeduced nontype parameter that depends on
21998              a type parameter, try another pass; its type may have been
21999              deduced from a later argument than the one from which
22000              this parameter can be deduced.  */
22001           if (TREE_CODE (tparm) == PARM_DECL
22002               && uses_template_parms (TREE_TYPE (tparm))
22003               && saw_undeduced < 2)
22004             {
22005               saw_undeduced = 1;
22006               continue;
22007             }
22008
22009           /* Core issue #226 (C++0x) [temp.deduct]:
22010
22011              If a template argument has not been deduced, its
22012              default template argument, if any, is used.
22013
22014              When we are in C++98 mode, TREE_PURPOSE will either
22015              be NULL_TREE or ERROR_MARK_NODE, so we do not need
22016              to explicitly check cxx_dialect here.  */
22017           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
22018             /* OK, there is a default argument.  Wait until after the
22019                conversion check to do substitution.  */
22020             continue;
22021
22022           /* If the type parameter is a parameter pack, then it will
22023              be deduced to an empty parameter pack.  */
22024           if (template_parameter_pack_p (tparm))
22025             {
22026               tree arg;
22027
22028               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
22029                 {
22030                   arg = make_node (NONTYPE_ARGUMENT_PACK);
22031                   TREE_CONSTANT (arg) = 1;
22032                 }
22033               else
22034                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
22035
22036               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
22037
22038               TREE_VEC_ELT (targs, i) = arg;
22039               continue;
22040             }
22041
22042           return unify_parameter_deduction_failure (explain_p, tparm);
22043         }
22044
22045       /* Now substitute into the default template arguments.  */
22046       for (i = 0; i < ntparms; i++)
22047         {
22048           tree targ = TREE_VEC_ELT (targs, i);
22049           tree tparm = TREE_VEC_ELT (tparms, i);
22050
22051           if (targ || tparm == error_mark_node)
22052             continue;
22053           tree parm = TREE_VALUE (tparm);
22054           tree arg = TREE_PURPOSE (tparm);
22055           reopen_deferring_access_checks (*checks);
22056           location_t save_loc = input_location;
22057           if (DECL_P (parm))
22058             input_location = DECL_SOURCE_LOCATION (parm);
22059
22060           if (saw_undeduced == 1
22061               && TREE_CODE (parm) == PARM_DECL
22062               && uses_template_parms (TREE_TYPE (parm)))
22063             {
22064               /* The type of this non-type parameter depends on undeduced
22065                  parameters.  Don't try to use its default argument yet,
22066                  since we might deduce an argument for it on the next pass,
22067                  but do check whether the arguments we already have cause
22068                  substitution failure, so that that happens before we try
22069                  later default arguments (78489).  */
22070               ++processing_template_decl;
22071               tree type = tsubst (TREE_TYPE (parm), full_targs, complain,
22072                                   NULL_TREE);
22073               --processing_template_decl;
22074               if (type == error_mark_node)
22075                 arg = error_mark_node;
22076               else
22077                 arg = NULL_TREE;
22078             }
22079           else
22080             {
22081               /* Even if the call is happening in template context, getting
22082                  here means it's non-dependent, and a default argument is
22083                  considered a separate definition under [temp.decls], so we can
22084                  do this substitution without processing_template_decl.  This
22085                  is important if the default argument contains something that
22086                  might be instantiation-dependent like access (87480).  */
22087               processing_template_decl_sentinel s;
22088               tree substed = NULL_TREE;
22089               if (saw_undeduced == 1)
22090                 {
22091                   /* First instatiate in template context, in case we still
22092                      depend on undeduced template parameters.  */
22093                   ++processing_template_decl;
22094                   substed = tsubst_template_arg (arg, full_targs, complain,
22095                                                  NULL_TREE);
22096                   --processing_template_decl;
22097                   if (substed != error_mark_node
22098                       && !uses_template_parms (substed))
22099                     /* We replaced all the tparms, substitute again out of
22100                        template context.  */
22101                     substed = NULL_TREE;
22102                 }
22103               if (!substed)
22104                 substed = tsubst_template_arg (arg, full_targs, complain,
22105                                                NULL_TREE);
22106
22107               if (!uses_template_parms (substed))
22108                 arg = convert_template_argument (parm, substed, full_targs,
22109                                                  complain, i, NULL_TREE);
22110               else if (saw_undeduced == 1)
22111                 arg = NULL_TREE;
22112               else
22113                 arg = error_mark_node;
22114             }
22115
22116           input_location = save_loc;
22117           *checks = get_deferred_access_checks ();
22118           pop_deferring_access_checks ();
22119
22120           if (arg == error_mark_node)
22121             return 1;
22122           else if (arg)
22123             {
22124               TREE_VEC_ELT (targs, i) = arg;
22125               /* The position of the first default template argument,
22126                  is also the number of non-defaulted arguments in TARGS.
22127                  Record that.  */
22128               if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
22129                 SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
22130             }
22131         }
22132
22133       if (saw_undeduced++ == 1)
22134         goto again;
22135     }
22136
22137   if (CHECKING_P && !NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
22138     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
22139
22140   return unify_success (explain_p);
22141 }
22142
22143 /* Subroutine of type_unification_real.  Args are like the variables
22144    at the call site.  ARG is an overloaded function (or template-id);
22145    we try deducing template args from each of the overloads, and if
22146    only one succeeds, we go with that.  Modifies TARGS and returns
22147    true on success.  */
22148
22149 static bool
22150 resolve_overloaded_unification (tree tparms,
22151                                 tree targs,
22152                                 tree parm,
22153                                 tree arg,
22154                                 unification_kind_t strict,
22155                                 int sub_strict,
22156                                 bool explain_p)
22157 {
22158   tree tempargs = copy_node (targs);
22159   int good = 0;
22160   tree goodfn = NULL_TREE;
22161   bool addr_p;
22162
22163   if (TREE_CODE (arg) == ADDR_EXPR)
22164     {
22165       arg = TREE_OPERAND (arg, 0);
22166       addr_p = true;
22167     }
22168   else
22169     addr_p = false;
22170
22171   if (TREE_CODE (arg) == COMPONENT_REF)
22172     /* Handle `&x' where `x' is some static or non-static member
22173        function name.  */
22174     arg = TREE_OPERAND (arg, 1);
22175
22176   if (TREE_CODE (arg) == OFFSET_REF)
22177     arg = TREE_OPERAND (arg, 1);
22178
22179   /* Strip baselink information.  */
22180   if (BASELINK_P (arg))
22181     arg = BASELINK_FUNCTIONS (arg);
22182
22183   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
22184     {
22185       /* If we got some explicit template args, we need to plug them into
22186          the affected templates before we try to unify, in case the
22187          explicit args will completely resolve the templates in question.  */
22188
22189       int ok = 0;
22190       tree expl_subargs = TREE_OPERAND (arg, 1);
22191       arg = TREE_OPERAND (arg, 0);
22192
22193       for (lkp_iterator iter (arg); iter; ++iter)
22194         {
22195           tree fn = *iter;
22196           tree subargs, elem;
22197
22198           if (TREE_CODE (fn) != TEMPLATE_DECL)
22199             continue;
22200
22201           subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
22202                                            expl_subargs, NULL_TREE, tf_none,
22203                                            /*require_all_args=*/true,
22204                                            /*use_default_args=*/true);
22205           if (subargs != error_mark_node
22206               && !any_dependent_template_arguments_p (subargs))
22207             {
22208               fn = instantiate_template (fn, subargs, tf_none);
22209               if (!constraints_satisfied_p (fn))
22210                 continue;
22211               if (undeduced_auto_decl (fn))
22212                 {
22213                   /* Instantiate the function to deduce its return type.  */
22214                   ++function_depth;
22215                   instantiate_decl (fn, /*defer*/false, /*class*/false);
22216                   --function_depth;
22217                 }
22218
22219               elem = TREE_TYPE (fn);
22220               if (try_one_overload (tparms, targs, tempargs, parm,
22221                                     elem, strict, sub_strict, addr_p, explain_p)
22222                   && (!goodfn || !same_type_p (goodfn, elem)))
22223                 {
22224                   goodfn = elem;
22225                   ++good;
22226                 }
22227             }
22228           else if (subargs)
22229             ++ok;
22230         }
22231       /* If no templates (or more than one) are fully resolved by the
22232          explicit arguments, this template-id is a non-deduced context; it
22233          could still be OK if we deduce all template arguments for the
22234          enclosing call through other arguments.  */
22235       if (good != 1)
22236         good = ok;
22237     }
22238   else if (!OVL_P (arg))
22239     /* If ARG is, for example, "(0, &f)" then its type will be unknown
22240        -- but the deduction does not succeed because the expression is
22241        not just the function on its own.  */
22242     return false;
22243   else
22244     for (lkp_iterator iter (arg); iter; ++iter)
22245       {
22246         tree fn = *iter;
22247         if (try_one_overload (tparms, targs, tempargs, parm, TREE_TYPE (fn),
22248                               strict, sub_strict, addr_p, explain_p)
22249             && (!goodfn || !decls_match (goodfn, fn)))
22250           {
22251             goodfn = fn;
22252             ++good;
22253           }
22254       }
22255
22256   /* [temp.deduct.type] A template-argument can be deduced from a pointer
22257      to function or pointer to member function argument if the set of
22258      overloaded functions does not contain function templates and at most
22259      one of a set of overloaded functions provides a unique match.
22260
22261      So if we found multiple possibilities, we return success but don't
22262      deduce anything.  */
22263
22264   if (good == 1)
22265     {
22266       int i = TREE_VEC_LENGTH (targs);
22267       for (; i--; )
22268         if (TREE_VEC_ELT (tempargs, i))
22269           {
22270             tree old = TREE_VEC_ELT (targs, i);
22271             tree new_ = TREE_VEC_ELT (tempargs, i);
22272             if (new_ && old && ARGUMENT_PACK_P (old)
22273                 && ARGUMENT_PACK_EXPLICIT_ARGS (old))
22274               /* Don't forget explicit template arguments in a pack.  */
22275               ARGUMENT_PACK_EXPLICIT_ARGS (new_)
22276                 = ARGUMENT_PACK_EXPLICIT_ARGS (old);
22277             TREE_VEC_ELT (targs, i) = new_;
22278           }
22279     }
22280   if (good)
22281     return true;
22282
22283   return false;
22284 }
22285
22286 /* Core DR 115: In contexts where deduction is done and fails, or in
22287    contexts where deduction is not done, if a template argument list is
22288    specified and it, along with any default template arguments, identifies
22289    a single function template specialization, then the template-id is an
22290    lvalue for the function template specialization.  */
22291
22292 tree
22293 resolve_nondeduced_context (tree orig_expr, tsubst_flags_t complain)
22294 {
22295   tree expr, offset, baselink;
22296   bool addr;
22297
22298   if (!type_unknown_p (orig_expr))
22299     return orig_expr;
22300
22301   expr = orig_expr;
22302   addr = false;
22303   offset = NULL_TREE;
22304   baselink = NULL_TREE;
22305
22306   if (TREE_CODE (expr) == ADDR_EXPR)
22307     {
22308       expr = TREE_OPERAND (expr, 0);
22309       addr = true;
22310     }
22311   if (TREE_CODE (expr) == OFFSET_REF)
22312     {
22313       offset = expr;
22314       expr = TREE_OPERAND (expr, 1);
22315     }
22316   if (BASELINK_P (expr))
22317     {
22318       baselink = expr;
22319       expr = BASELINK_FUNCTIONS (expr);
22320     }
22321
22322   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
22323     {
22324       int good = 0;
22325       tree goodfn = NULL_TREE;
22326
22327       /* If we got some explicit template args, we need to plug them into
22328          the affected templates before we try to unify, in case the
22329          explicit args will completely resolve the templates in question.  */
22330
22331       tree expl_subargs = TREE_OPERAND (expr, 1);
22332       tree arg = TREE_OPERAND (expr, 0);
22333       tree badfn = NULL_TREE;
22334       tree badargs = NULL_TREE;
22335
22336       for (lkp_iterator iter (arg); iter; ++iter)
22337         {
22338           tree fn = *iter;
22339           tree subargs, elem;
22340
22341           if (TREE_CODE (fn) != TEMPLATE_DECL)
22342             continue;
22343
22344           subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
22345                                            expl_subargs, NULL_TREE, tf_none,
22346                                            /*require_all_args=*/true,
22347                                            /*use_default_args=*/true);
22348           if (subargs != error_mark_node
22349               && !any_dependent_template_arguments_p (subargs))
22350             {
22351               elem = instantiate_template (fn, subargs, tf_none);
22352               if (elem == error_mark_node)
22353                 {
22354                   badfn = fn;
22355                   badargs = subargs;
22356                 }
22357               else if (elem && (!goodfn || !decls_match (goodfn, elem))
22358                        && constraints_satisfied_p (elem))
22359                 {
22360                   goodfn = elem;
22361                   ++good;
22362                 }
22363             }
22364         }
22365       if (good == 1)
22366         {
22367           mark_used (goodfn);
22368           expr = goodfn;
22369           if (baselink)
22370             expr = build_baselink (BASELINK_BINFO (baselink),
22371                                    BASELINK_ACCESS_BINFO (baselink),
22372                                    expr, BASELINK_OPTYPE (baselink));
22373           if (offset)
22374             {
22375               tree base
22376                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
22377               expr = build_offset_ref (base, expr, addr, complain);
22378             }
22379           if (addr)
22380             expr = cp_build_addr_expr (expr, complain);
22381           return expr;
22382         }
22383       else if (good == 0 && badargs && (complain & tf_error))
22384         /* There were no good options and at least one bad one, so let the
22385            user know what the problem is.  */
22386         instantiate_template (badfn, badargs, complain);
22387     }
22388   return orig_expr;
22389 }
22390
22391 /* As above, but error out if the expression remains overloaded.  */
22392
22393 tree
22394 resolve_nondeduced_context_or_error (tree exp, tsubst_flags_t complain)
22395 {
22396   exp = resolve_nondeduced_context (exp, complain);
22397   if (type_unknown_p (exp))
22398     {
22399       if (complain & tf_error)
22400         cxx_incomplete_type_error (exp, TREE_TYPE (exp));
22401       return error_mark_node;
22402     }
22403   return exp;
22404 }
22405
22406 /* Subroutine of resolve_overloaded_unification; does deduction for a single
22407    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
22408    different overloads deduce different arguments for a given parm.
22409    ADDR_P is true if the expression for which deduction is being
22410    performed was of the form "& fn" rather than simply "fn".
22411
22412    Returns 1 on success.  */
22413
22414 static int
22415 try_one_overload (tree tparms,
22416                   tree orig_targs,
22417                   tree targs,
22418                   tree parm,
22419                   tree arg,
22420                   unification_kind_t strict,
22421                   int sub_strict,
22422                   bool addr_p,
22423                   bool explain_p)
22424 {
22425   int nargs;
22426   tree tempargs;
22427   int i;
22428
22429   if (arg == error_mark_node)
22430     return 0;
22431
22432   /* [temp.deduct.type] A template-argument can be deduced from a pointer
22433      to function or pointer to member function argument if the set of
22434      overloaded functions does not contain function templates and at most
22435      one of a set of overloaded functions provides a unique match.
22436
22437      So if this is a template, just return success.  */
22438
22439   if (uses_template_parms (arg))
22440     return 1;
22441
22442   if (TREE_CODE (arg) == METHOD_TYPE)
22443     arg = build_ptrmemfunc_type (build_pointer_type (arg));
22444   else if (addr_p)
22445     arg = build_pointer_type (arg);
22446
22447   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
22448
22449   /* We don't copy orig_targs for this because if we have already deduced
22450      some template args from previous args, unify would complain when we
22451      try to deduce a template parameter for the same argument, even though
22452      there isn't really a conflict.  */
22453   nargs = TREE_VEC_LENGTH (targs);
22454   tempargs = make_tree_vec (nargs);
22455
22456   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
22457     return 0;
22458
22459   /* First make sure we didn't deduce anything that conflicts with
22460      explicitly specified args.  */
22461   for (i = nargs; i--; )
22462     {
22463       tree elt = TREE_VEC_ELT (tempargs, i);
22464       tree oldelt = TREE_VEC_ELT (orig_targs, i);
22465
22466       if (!elt)
22467         /*NOP*/;
22468       else if (uses_template_parms (elt))
22469         /* Since we're unifying against ourselves, we will fill in
22470            template args used in the function parm list with our own
22471            template parms.  Discard them.  */
22472         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
22473       else if (oldelt && ARGUMENT_PACK_P (oldelt))
22474         {
22475           /* Check that the argument at each index of the deduced argument pack
22476              is equivalent to the corresponding explicitly specified argument.
22477              We may have deduced more arguments than were explicitly specified,
22478              and that's OK.  */
22479
22480           /* We used to assert ARGUMENT_PACK_INCOMPLETE_P (oldelt) here, but
22481              that's wrong if we deduce the same argument pack from multiple
22482              function arguments: it's only incomplete the first time.  */
22483
22484           tree explicit_pack = ARGUMENT_PACK_ARGS (oldelt);
22485           tree deduced_pack = ARGUMENT_PACK_ARGS (elt);
22486
22487           if (TREE_VEC_LENGTH (deduced_pack)
22488               < TREE_VEC_LENGTH (explicit_pack))
22489             return 0;
22490
22491           for (int j = 0; j < TREE_VEC_LENGTH (explicit_pack); j++)
22492             if (!template_args_equal (TREE_VEC_ELT (explicit_pack, j),
22493                                       TREE_VEC_ELT (deduced_pack, j)))
22494               return 0;
22495         }
22496       else if (oldelt && !template_args_equal (oldelt, elt))
22497         return 0;
22498     }
22499
22500   for (i = nargs; i--; )
22501     {
22502       tree elt = TREE_VEC_ELT (tempargs, i);
22503
22504       if (elt)
22505         TREE_VEC_ELT (targs, i) = elt;
22506     }
22507
22508   return 1;
22509 }
22510
22511 /* PARM is a template class (perhaps with unbound template
22512    parameters).  ARG is a fully instantiated type.  If ARG can be
22513    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
22514    TARGS are as for unify.  */
22515
22516 static tree
22517 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
22518                        bool explain_p)
22519 {
22520   tree copy_of_targs;
22521
22522   if (!CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
22523     return NULL_TREE;
22524   else if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
22525     /* Matches anything.  */;
22526   else if (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
22527            != most_general_template (CLASSTYPE_TI_TEMPLATE (parm)))
22528     return NULL_TREE;
22529
22530   /* We need to make a new template argument vector for the call to
22531      unify.  If we used TARGS, we'd clutter it up with the result of
22532      the attempted unification, even if this class didn't work out.
22533      We also don't want to commit ourselves to all the unifications
22534      we've already done, since unification is supposed to be done on
22535      an argument-by-argument basis.  In other words, consider the
22536      following pathological case:
22537
22538        template <int I, int J, int K>
22539        struct S {};
22540
22541        template <int I, int J>
22542        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
22543
22544        template <int I, int J, int K>
22545        void f(S<I, J, K>, S<I, I, I>);
22546
22547        void g() {
22548          S<0, 0, 0> s0;
22549          S<0, 1, 2> s2;
22550
22551          f(s0, s2);
22552        }
22553
22554      Now, by the time we consider the unification involving `s2', we
22555      already know that we must have `f<0, 0, 0>'.  But, even though
22556      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
22557      because there are two ways to unify base classes of S<0, 1, 2>
22558      with S<I, I, I>.  If we kept the already deduced knowledge, we
22559      would reject the possibility I=1.  */
22560   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
22561
22562   if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
22563     {
22564       if (unify_bound_ttp_args (tparms, copy_of_targs, parm, arg, explain_p))
22565         return NULL_TREE;
22566       return arg;
22567     }
22568
22569   /* If unification failed, we're done.  */
22570   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
22571              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
22572     return NULL_TREE;
22573
22574   return arg;
22575 }
22576
22577 /* Given a template type PARM and a class type ARG, find the unique
22578    base type in ARG that is an instance of PARM.  We do not examine
22579    ARG itself; only its base-classes.  If there is not exactly one
22580    appropriate base class, return NULL_TREE.  PARM may be the type of
22581    a partial specialization, as well as a plain template type.  Used
22582    by unify.  */
22583
22584 static enum template_base_result
22585 get_template_base (tree tparms, tree targs, tree parm, tree arg,
22586                    bool explain_p, tree *result)
22587 {
22588   tree rval = NULL_TREE;
22589   tree binfo;
22590
22591   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
22592
22593   binfo = TYPE_BINFO (complete_type (arg));
22594   if (!binfo)
22595     {
22596       /* The type could not be completed.  */
22597       *result = NULL_TREE;
22598       return tbr_incomplete_type;
22599     }
22600
22601   /* Walk in inheritance graph order.  The search order is not
22602      important, and this avoids multiple walks of virtual bases.  */
22603   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
22604     {
22605       tree r = try_class_unification (tparms, targs, parm,
22606                                       BINFO_TYPE (binfo), explain_p);
22607
22608       if (r)
22609         {
22610           /* If there is more than one satisfactory baseclass, then:
22611
22612                [temp.deduct.call]
22613
22614               If they yield more than one possible deduced A, the type
22615               deduction fails.
22616
22617              applies.  */
22618           if (rval && !same_type_p (r, rval))
22619             {
22620               *result = NULL_TREE;
22621               return tbr_ambiguous_baseclass;
22622             }
22623
22624           rval = r;
22625         }
22626     }
22627
22628   *result = rval;
22629   return tbr_success;
22630 }
22631
22632 /* Returns the level of DECL, which declares a template parameter.  */
22633
22634 static int
22635 template_decl_level (tree decl)
22636 {
22637   switch (TREE_CODE (decl))
22638     {
22639     case TYPE_DECL:
22640     case TEMPLATE_DECL:
22641       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
22642
22643     case PARM_DECL:
22644       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
22645
22646     default:
22647       gcc_unreachable ();
22648     }
22649   return 0;
22650 }
22651
22652 /* Decide whether ARG can be unified with PARM, considering only the
22653    cv-qualifiers of each type, given STRICT as documented for unify.
22654    Returns nonzero iff the unification is OK on that basis.  */
22655
22656 static int
22657 check_cv_quals_for_unify (int strict, tree arg, tree parm)
22658 {
22659   int arg_quals = cp_type_quals (arg);
22660   int parm_quals = cp_type_quals (parm);
22661
22662   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
22663       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
22664     {
22665       /*  Although a CVR qualifier is ignored when being applied to a
22666           substituted template parameter ([8.3.2]/1 for example), that
22667           does not allow us to unify "const T" with "int&" because both
22668           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
22669           It is ok when we're allowing additional CV qualifiers
22670           at the outer level [14.8.2.1]/3,1st bullet.  */
22671       if ((TYPE_REF_P (arg)
22672            || FUNC_OR_METHOD_TYPE_P (arg))
22673           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
22674         return 0;
22675
22676       if ((!INDIRECT_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
22677           && (parm_quals & TYPE_QUAL_RESTRICT))
22678         return 0;
22679     }
22680
22681   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
22682       && (arg_quals & parm_quals) != parm_quals)
22683     return 0;
22684
22685   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
22686       && (parm_quals & arg_quals) != arg_quals)
22687     return 0;
22688
22689   return 1;
22690 }
22691
22692 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
22693 void
22694 template_parm_level_and_index (tree parm, int* level, int* index)
22695 {
22696   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
22697       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
22698       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
22699     {
22700       *index = TEMPLATE_TYPE_IDX (parm);
22701       *level = TEMPLATE_TYPE_LEVEL (parm);
22702     }
22703   else
22704     {
22705       *index = TEMPLATE_PARM_IDX (parm);
22706       *level = TEMPLATE_PARM_LEVEL (parm);
22707     }
22708 }
22709
22710 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
22711   do {                                                                  \
22712     if (unify (TP, TA, P, A, S, EP))                                    \
22713       return 1;                                                         \
22714   } while (0)
22715
22716 /* Unifies the remaining arguments in PACKED_ARGS with the pack
22717    expansion at the end of PACKED_PARMS. Returns 0 if the type
22718    deduction succeeds, 1 otherwise. STRICT is the same as in
22719    fn_type_unification. CALL_ARGS_P is true iff PACKED_ARGS is actually a
22720    function call argument list. We'll need to adjust the arguments to make them
22721    types. SUBR tells us if this is from a recursive call to
22722    type_unification_real, or for comparing two template argument
22723    lists. */
22724
22725 static int
22726 unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
22727                       tree packed_args, unification_kind_t strict,
22728                       bool subr, bool explain_p)
22729 {
22730   tree parm
22731     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
22732   tree pattern = PACK_EXPANSION_PATTERN (parm);
22733   tree pack, packs = NULL_TREE;
22734   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
22735
22736   /* Add in any args remembered from an earlier partial instantiation.  */
22737   targs = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (parm), targs);
22738   int levels = TMPL_ARGS_DEPTH (targs);
22739
22740   packed_args = expand_template_argument_pack (packed_args);
22741
22742   int len = TREE_VEC_LENGTH (packed_args);
22743
22744   /* Determine the parameter packs we will be deducing from the
22745      pattern, and record their current deductions.  */
22746   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
22747        pack; pack = TREE_CHAIN (pack))
22748     {
22749       tree parm_pack = TREE_VALUE (pack);
22750       int idx, level;
22751
22752       /* Only template parameter packs can be deduced, not e.g. function
22753          parameter packs or __bases or __integer_pack.  */
22754       if (!TEMPLATE_PARM_P (parm_pack))
22755         continue;
22756
22757       /* Determine the index and level of this parameter pack.  */
22758       template_parm_level_and_index (parm_pack, &level, &idx);
22759       if (level < levels)
22760         continue;
22761
22762       /* Keep track of the parameter packs and their corresponding
22763          argument packs.  */
22764       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
22765       TREE_TYPE (packs) = make_tree_vec (len - start);
22766     }
22767
22768   /* Loop through all of the arguments that have not yet been
22769      unified and unify each with the pattern.  */
22770   for (i = start; i < len; i++)
22771     {
22772       tree parm;
22773       bool any_explicit = false;
22774       tree arg = TREE_VEC_ELT (packed_args, i);
22775
22776       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
22777          or the element of its argument pack at the current index if
22778          this argument was explicitly specified.  */
22779       for (pack = packs; pack; pack = TREE_CHAIN (pack))
22780         {
22781           int idx, level;
22782           tree arg, pargs;
22783           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
22784
22785           arg = NULL_TREE;
22786           if (TREE_VALUE (pack)
22787               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
22788               && (i - start < TREE_VEC_LENGTH (pargs)))
22789             {
22790               any_explicit = true;
22791               arg = TREE_VEC_ELT (pargs, i - start);
22792             }
22793           TMPL_ARG (targs, level, idx) = arg;
22794         }
22795
22796       /* If we had explicit template arguments, substitute them into the
22797          pattern before deduction.  */
22798       if (any_explicit)
22799         {
22800           /* Some arguments might still be unspecified or dependent.  */
22801           bool dependent;
22802           ++processing_template_decl;
22803           dependent = any_dependent_template_arguments_p (targs);
22804           if (!dependent)
22805             --processing_template_decl;
22806           parm = tsubst (pattern, targs,
22807                          explain_p ? tf_warning_or_error : tf_none,
22808                          NULL_TREE);
22809           if (dependent)
22810             --processing_template_decl;
22811           if (parm == error_mark_node)
22812             return 1;
22813         }
22814       else
22815         parm = pattern;
22816
22817       /* Unify the pattern with the current argument.  */
22818       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
22819                               explain_p))
22820         return 1;
22821
22822       /* For each parameter pack, collect the deduced value.  */
22823       for (pack = packs; pack; pack = TREE_CHAIN (pack))
22824         {
22825           int idx, level;
22826           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
22827
22828           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
22829             TMPL_ARG (targs, level, idx);
22830         }
22831     }
22832
22833   /* Verify that the results of unification with the parameter packs
22834      produce results consistent with what we've seen before, and make
22835      the deduced argument packs available.  */
22836   for (pack = packs; pack; pack = TREE_CHAIN (pack))
22837     {
22838       tree old_pack = TREE_VALUE (pack);
22839       tree new_args = TREE_TYPE (pack);
22840       int i, len = TREE_VEC_LENGTH (new_args);
22841       int idx, level;
22842       bool nondeduced_p = false;
22843
22844       /* By default keep the original deduced argument pack.
22845          If necessary, more specific code is going to update the
22846          resulting deduced argument later down in this function.  */
22847       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
22848       TMPL_ARG (targs, level, idx) = old_pack;
22849
22850       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
22851          actually deduce anything.  */
22852       for (i = 0; i < len && !nondeduced_p; ++i)
22853         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
22854           nondeduced_p = true;
22855       if (nondeduced_p)
22856         continue;
22857
22858       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
22859         {
22860           /* If we had fewer function args than explicit template args,
22861              just use the explicits.  */
22862           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
22863           int explicit_len = TREE_VEC_LENGTH (explicit_args);
22864           if (len < explicit_len)
22865             new_args = explicit_args;
22866         }
22867
22868       if (!old_pack)
22869         {
22870           tree result;
22871           /* Build the deduced *_ARGUMENT_PACK.  */
22872           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
22873             {
22874               result = make_node (NONTYPE_ARGUMENT_PACK);
22875               TREE_CONSTANT (result) = 1;
22876             }
22877           else
22878             result = cxx_make_type (TYPE_ARGUMENT_PACK);
22879
22880           SET_ARGUMENT_PACK_ARGS (result, new_args);
22881
22882           /* Note the deduced argument packs for this parameter
22883              pack.  */
22884           TMPL_ARG (targs, level, idx) = result;
22885         }
22886       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
22887                && (ARGUMENT_PACK_ARGS (old_pack) 
22888                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
22889         {
22890           /* We only had the explicitly-provided arguments before, but
22891              now we have a complete set of arguments.  */
22892           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
22893
22894           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
22895           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
22896           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
22897         }
22898       else
22899         {
22900           tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
22901           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
22902           temp_override<int> ovl (TREE_VEC_LENGTH (old_args));
22903           /* During template argument deduction for the aggregate deduction
22904              candidate, the number of elements in a trailing parameter pack
22905              is only deduced from the number of remaining function
22906              arguments if it is not otherwise deduced.  */
22907           if (cxx_dialect >= cxx20
22908               && TREE_VEC_LENGTH (new_args) < TREE_VEC_LENGTH (old_args)
22909               && builtin_guide_p (TPARMS_PRIMARY_TEMPLATE (tparms)))
22910             TREE_VEC_LENGTH (old_args) = TREE_VEC_LENGTH (new_args);
22911           if (!comp_template_args (old_args, new_args,
22912                                    &bad_old_arg, &bad_new_arg))
22913             /* Inconsistent unification of this parameter pack.  */
22914             return unify_parameter_pack_inconsistent (explain_p,
22915                                                       bad_old_arg,
22916                                                       bad_new_arg);
22917         }
22918     }
22919
22920   return unify_success (explain_p);
22921 }
22922
22923 /* Handle unification of the domain of an array.  PARM_DOM and ARG_DOM are
22924    INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs.  The other
22925    parameters and return value are as for unify.  */
22926
22927 static int
22928 unify_array_domain (tree tparms, tree targs,
22929                     tree parm_dom, tree arg_dom,
22930                     bool explain_p)
22931 {
22932   tree parm_max;
22933   tree arg_max;
22934   bool parm_cst;
22935   bool arg_cst;
22936
22937   /* Our representation of array types uses "N - 1" as the
22938      TYPE_MAX_VALUE for an array with "N" elements, if "N" is
22939      not an integer constant.  We cannot unify arbitrarily
22940      complex expressions, so we eliminate the MINUS_EXPRs
22941      here.  */
22942   parm_max = TYPE_MAX_VALUE (parm_dom);
22943   parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
22944   if (!parm_cst)
22945     {
22946       gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
22947       parm_max = TREE_OPERAND (parm_max, 0);
22948     }
22949   arg_max = TYPE_MAX_VALUE (arg_dom);
22950   arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
22951   if (!arg_cst)
22952     {
22953       /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
22954          trying to unify the type of a variable with the type
22955          of a template parameter.  For example:
22956
22957            template <unsigned int N>
22958            void f (char (&) [N]);
22959            int g();
22960            void h(int i) {
22961              char a[g(i)];
22962              f(a);
22963            }
22964
22965          Here, the type of the ARG will be "int [g(i)]", and
22966          may be a SAVE_EXPR, etc.  */
22967       if (TREE_CODE (arg_max) != MINUS_EXPR)
22968         return unify_vla_arg (explain_p, arg_dom);
22969       arg_max = TREE_OPERAND (arg_max, 0);
22970     }
22971
22972   /* If only one of the bounds used a MINUS_EXPR, compensate
22973      by adding one to the other bound.  */
22974   if (parm_cst && !arg_cst)
22975     parm_max = fold_build2_loc (input_location, PLUS_EXPR,
22976                                 integer_type_node,
22977                                 parm_max,
22978                                 integer_one_node);
22979   else if (arg_cst && !parm_cst)
22980     arg_max = fold_build2_loc (input_location, PLUS_EXPR,
22981                                integer_type_node,
22982                                arg_max,
22983                                integer_one_node);
22984
22985   return unify (tparms, targs, parm_max, arg_max,
22986                 UNIFY_ALLOW_INTEGER, explain_p);
22987 }
22988
22989 /* Returns whether T, a P or A in unify, is a type, template or expression.  */
22990
22991 enum pa_kind_t { pa_type, pa_tmpl, pa_expr };
22992
22993 static pa_kind_t
22994 pa_kind (tree t)
22995 {
22996   if (PACK_EXPANSION_P (t))
22997     t = PACK_EXPANSION_PATTERN (t);
22998   if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
22999       || TREE_CODE (t) == UNBOUND_CLASS_TEMPLATE
23000       || DECL_TYPE_TEMPLATE_P (t))
23001     return pa_tmpl;
23002   else if (TYPE_P (t))
23003     return pa_type;
23004   else
23005     return pa_expr;
23006 }
23007
23008 /* Deduce the value of template parameters.  TPARMS is the (innermost)
23009    set of template parameters to a template.  TARGS is the bindings
23010    for those template parameters, as determined thus far; TARGS may
23011    include template arguments for outer levels of template parameters
23012    as well.  PARM is a parameter to a template function, or a
23013    subcomponent of that parameter; ARG is the corresponding argument.
23014    This function attempts to match PARM with ARG in a manner
23015    consistent with the existing assignments in TARGS.  If more values
23016    are deduced, then TARGS is updated.
23017
23018    Returns 0 if the type deduction succeeds, 1 otherwise.  The
23019    parameter STRICT is a bitwise or of the following flags:
23020
23021      UNIFY_ALLOW_NONE:
23022        Require an exact match between PARM and ARG.
23023      UNIFY_ALLOW_MORE_CV_QUAL:
23024        Allow the deduced ARG to be more cv-qualified (by qualification
23025        conversion) than ARG.
23026      UNIFY_ALLOW_LESS_CV_QUAL:
23027        Allow the deduced ARG to be less cv-qualified than ARG.
23028      UNIFY_ALLOW_DERIVED:
23029        Allow the deduced ARG to be a template base class of ARG,
23030        or a pointer to a template base class of the type pointed to by
23031        ARG.
23032      UNIFY_ALLOW_INTEGER:
23033        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
23034        case for more information.
23035      UNIFY_ALLOW_OUTER_LEVEL:
23036        This is the outermost level of a deduction. Used to determine validity
23037        of qualification conversions. A valid qualification conversion must
23038        have const qualified pointers leading up to the inner type which
23039        requires additional CV quals, except at the outer level, where const
23040        is not required [conv.qual]. It would be normal to set this flag in
23041        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
23042      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
23043        This is the outermost level of a deduction, and PARM can be more CV
23044        qualified at this point.
23045      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
23046        This is the outermost level of a deduction, and PARM can be less CV
23047        qualified at this point.  */
23048
23049 static int
23050 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
23051        bool explain_p)
23052 {
23053   int idx;
23054   tree targ;
23055   tree tparm;
23056   int strict_in = strict;
23057   tsubst_flags_t complain = (explain_p
23058                              ? tf_warning_or_error
23059                              : tf_none);
23060
23061   /* I don't think this will do the right thing with respect to types.
23062      But the only case I've seen it in so far has been array bounds, where
23063      signedness is the only information lost, and I think that will be
23064      okay.  VIEW_CONVERT_EXPR can appear with class NTTP, thanks to
23065      finish_id_expression_1, and are also OK.  */
23066   while (CONVERT_EXPR_P (parm) || TREE_CODE (parm) == VIEW_CONVERT_EXPR)
23067     parm = TREE_OPERAND (parm, 0);
23068
23069   if (arg == error_mark_node)
23070     return unify_invalid (explain_p);
23071   if (arg == unknown_type_node
23072       || arg == init_list_type_node)
23073     /* We can't deduce anything from this, but we might get all the
23074        template args from other function args.  */
23075     return unify_success (explain_p);
23076
23077   if (parm == any_targ_node || arg == any_targ_node)
23078     return unify_success (explain_p);
23079
23080   /* If PARM uses template parameters, then we can't bail out here,
23081      even if ARG == PARM, since we won't record unifications for the
23082      template parameters.  We might need them if we're trying to
23083      figure out which of two things is more specialized.  */
23084   if (arg == parm && !uses_template_parms (parm))
23085     return unify_success (explain_p);
23086
23087   /* Handle init lists early, so the rest of the function can assume
23088      we're dealing with a type. */
23089   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
23090     {
23091       tree elt, elttype;
23092       unsigned i;
23093       tree orig_parm = parm;
23094
23095       if (!is_std_init_list (parm)
23096           && TREE_CODE (parm) != ARRAY_TYPE)
23097         /* We can only deduce from an initializer list argument if the
23098            parameter is std::initializer_list or an array; otherwise this
23099            is a non-deduced context. */
23100         return unify_success (explain_p);
23101
23102       if (TREE_CODE (parm) == ARRAY_TYPE)
23103         elttype = TREE_TYPE (parm);
23104       else
23105         {
23106           elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
23107           /* Deduction is defined in terms of a single type, so just punt
23108              on the (bizarre) std::initializer_list<T...>.  */
23109           if (PACK_EXPANSION_P (elttype))
23110             return unify_success (explain_p);
23111         }
23112
23113       if (strict != DEDUCE_EXACT
23114           && TYPE_P (elttype)
23115           && !uses_deducible_template_parms (elttype))
23116         /* If ELTTYPE has no deducible template parms, skip deduction from
23117            the list elements.  */;
23118       else
23119         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
23120           {
23121             int elt_strict = strict;
23122
23123             if (elt == error_mark_node)
23124               return unify_invalid (explain_p);
23125
23126             if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
23127               {
23128                 tree type = TREE_TYPE (elt);
23129                 if (type == error_mark_node)
23130                   return unify_invalid (explain_p);
23131                 /* It should only be possible to get here for a call.  */
23132                 gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
23133                 elt_strict |= maybe_adjust_types_for_deduction
23134                   (DEDUCE_CALL, &elttype, &type, elt);
23135                 elt = type;
23136               }
23137
23138           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
23139                                    explain_p);
23140         }
23141
23142       if (TREE_CODE (parm) == ARRAY_TYPE
23143           && deducible_array_bound (TYPE_DOMAIN (parm)))
23144         {
23145           /* Also deduce from the length of the initializer list.  */
23146           tree max = size_int (CONSTRUCTOR_NELTS (arg));
23147           tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
23148           if (idx == error_mark_node)
23149             return unify_invalid (explain_p);
23150           return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
23151                                      idx, explain_p);
23152         }
23153
23154       /* If the std::initializer_list<T> deduction worked, replace the
23155          deduced A with std::initializer_list<A>.  */
23156       if (orig_parm != parm)
23157         {
23158           idx = TEMPLATE_TYPE_IDX (orig_parm);
23159           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
23160           targ = listify (targ);
23161           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
23162         }
23163       return unify_success (explain_p);
23164     }
23165
23166   /* If parm and arg aren't the same kind of thing (template, type, or
23167      expression), fail early.  */
23168   if (pa_kind (parm) != pa_kind (arg))
23169     return unify_invalid (explain_p);
23170
23171   /* Immediately reject some pairs that won't unify because of
23172      cv-qualification mismatches.  */
23173   if (TREE_CODE (arg) == TREE_CODE (parm)
23174       && TYPE_P (arg)
23175       /* It is the elements of the array which hold the cv quals of an array
23176          type, and the elements might be template type parms. We'll check
23177          when we recurse.  */
23178       && TREE_CODE (arg) != ARRAY_TYPE
23179       /* We check the cv-qualifiers when unifying with template type
23180          parameters below.  We want to allow ARG `const T' to unify with
23181          PARM `T' for example, when computing which of two templates
23182          is more specialized, for example.  */
23183       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
23184       && !check_cv_quals_for_unify (strict_in, arg, parm))
23185     return unify_cv_qual_mismatch (explain_p, parm, arg);
23186
23187   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
23188       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
23189     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
23190   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
23191   strict &= ~UNIFY_ALLOW_DERIVED;
23192   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
23193   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
23194
23195   switch (TREE_CODE (parm))
23196     {
23197     case TYPENAME_TYPE:
23198     case SCOPE_REF:
23199     case UNBOUND_CLASS_TEMPLATE:
23200       /* In a type which contains a nested-name-specifier, template
23201          argument values cannot be deduced for template parameters used
23202          within the nested-name-specifier.  */
23203       return unify_success (explain_p);
23204
23205     case TEMPLATE_TYPE_PARM:
23206     case TEMPLATE_TEMPLATE_PARM:
23207     case BOUND_TEMPLATE_TEMPLATE_PARM:
23208       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
23209       if (error_operand_p (tparm))
23210         return unify_invalid (explain_p);
23211
23212       if (TEMPLATE_TYPE_LEVEL (parm)
23213           != template_decl_level (tparm))
23214         /* The PARM is not one we're trying to unify.  Just check
23215            to see if it matches ARG.  */
23216         {
23217           if (TREE_CODE (arg) == TREE_CODE (parm)
23218               && (is_auto (parm) ? is_auto (arg)
23219                   : same_type_p (parm, arg)))
23220             return unify_success (explain_p);
23221           else
23222             return unify_type_mismatch (explain_p, parm, arg);
23223         }
23224       idx = TEMPLATE_TYPE_IDX (parm);
23225       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
23226       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
23227       if (error_operand_p (tparm))
23228         return unify_invalid (explain_p);
23229
23230       /* Check for mixed types and values.  */
23231       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
23232            && TREE_CODE (tparm) != TYPE_DECL)
23233           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
23234               && TREE_CODE (tparm) != TEMPLATE_DECL))
23235         gcc_unreachable ();
23236
23237       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
23238         {
23239           if ((strict_in & UNIFY_ALLOW_DERIVED)
23240               && CLASS_TYPE_P (arg))
23241             {
23242               /* First try to match ARG directly.  */
23243               tree t = try_class_unification (tparms, targs, parm, arg,
23244                                               explain_p);
23245               if (!t)
23246                 {
23247                   /* Otherwise, look for a suitable base of ARG, as below.  */
23248                   enum template_base_result r;
23249                   r = get_template_base (tparms, targs, parm, arg,
23250                                          explain_p, &t);
23251                   if (!t)
23252                     return unify_no_common_base (explain_p, r, parm, arg);
23253                   arg = t;
23254                 }
23255             }
23256           /* ARG must be constructed from a template class or a template
23257              template parameter.  */
23258           else if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
23259                    && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
23260             return unify_template_deduction_failure (explain_p, parm, arg);
23261
23262           /* Deduce arguments T, i from TT<T> or TT<i>.  */
23263           if (unify_bound_ttp_args (tparms, targs, parm, arg, explain_p))
23264             return 1;
23265
23266           arg = TYPE_TI_TEMPLATE (arg);
23267
23268           /* Fall through to deduce template name.  */
23269         }
23270
23271       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
23272           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
23273         {
23274           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
23275
23276           /* Simple cases: Value already set, does match or doesn't.  */
23277           if (targ != NULL_TREE && template_args_equal (targ, arg))
23278             return unify_success (explain_p);
23279           else if (targ)
23280             return unify_inconsistency (explain_p, parm, targ, arg);
23281         }
23282       else
23283         {
23284           /* If PARM is `const T' and ARG is only `int', we don't have
23285              a match unless we are allowing additional qualification.
23286              If ARG is `const int' and PARM is just `T' that's OK;
23287              that binds `const int' to `T'.  */
23288           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
23289                                          arg, parm))
23290             return unify_cv_qual_mismatch (explain_p, parm, arg);
23291
23292           /* Consider the case where ARG is `const volatile int' and
23293              PARM is `const T'.  Then, T should be `volatile int'.  */
23294           arg = cp_build_qualified_type_real
23295             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
23296           if (arg == error_mark_node)
23297             return unify_invalid (explain_p);
23298
23299           /* Simple cases: Value already set, does match or doesn't.  */
23300           if (targ != NULL_TREE && same_type_p (targ, arg))
23301             return unify_success (explain_p);
23302           else if (targ)
23303             return unify_inconsistency (explain_p, parm, targ, arg);
23304
23305           /* Make sure that ARG is not a variable-sized array.  (Note
23306              that were talking about variable-sized arrays (like
23307              `int[n]'), rather than arrays of unknown size (like
23308              `int[]').)  We'll get very confused by such a type since
23309              the bound of the array is not constant, and therefore
23310              not mangleable.  Besides, such types are not allowed in
23311              ISO C++, so we can do as we please here.  We do allow
23312              them for 'auto' deduction, since that isn't ABI-exposed.  */
23313           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
23314             return unify_vla_arg (explain_p, arg);
23315
23316           /* Strip typedefs as in convert_template_argument.  */
23317           arg = canonicalize_type_argument (arg, tf_none);
23318         }
23319
23320       /* If ARG is a parameter pack or an expansion, we cannot unify
23321          against it unless PARM is also a parameter pack.  */
23322       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
23323           && !template_parameter_pack_p (parm))
23324         return unify_parameter_pack_mismatch (explain_p, parm, arg);
23325
23326       /* If the argument deduction results is a METHOD_TYPE,
23327          then there is a problem.
23328          METHOD_TYPE doesn't map to any real C++ type the result of
23329          the deduction cannot be of that type.  */
23330       if (TREE_CODE (arg) == METHOD_TYPE)
23331         return unify_method_type_error (explain_p, arg);
23332
23333       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
23334       return unify_success (explain_p);
23335
23336     case TEMPLATE_PARM_INDEX:
23337       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
23338       if (error_operand_p (tparm))
23339         return unify_invalid (explain_p);
23340
23341       if (TEMPLATE_PARM_LEVEL (parm)
23342           != template_decl_level (tparm))
23343         {
23344           /* The PARM is not one we're trying to unify.  Just check
23345              to see if it matches ARG.  */
23346           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
23347                          && cp_tree_equal (parm, arg));
23348           if (result)
23349             unify_expression_unequal (explain_p, parm, arg);
23350           return result;
23351         }
23352
23353       idx = TEMPLATE_PARM_IDX (parm);
23354       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
23355
23356       if (targ)
23357         {
23358           if ((strict & UNIFY_ALLOW_INTEGER)
23359               && TREE_TYPE (targ) && TREE_TYPE (arg)
23360               && CP_INTEGRAL_TYPE_P (TREE_TYPE (targ)))
23361             /* We're deducing from an array bound, the type doesn't matter.  */
23362             arg = fold_convert (TREE_TYPE (targ), arg);
23363           int x = !cp_tree_equal (targ, arg);
23364           if (x)
23365             unify_inconsistency (explain_p, parm, targ, arg);
23366           return x;
23367         }
23368
23369       /* [temp.deduct.type] If, in the declaration of a function template
23370          with a non-type template-parameter, the non-type
23371          template-parameter is used in an expression in the function
23372          parameter-list and, if the corresponding template-argument is
23373          deduced, the template-argument type shall match the type of the
23374          template-parameter exactly, except that a template-argument
23375          deduced from an array bound may be of any integral type.
23376          The non-type parameter might use already deduced type parameters.  */
23377       tparm = TREE_TYPE (parm);
23378       if (TEMPLATE_PARM_LEVEL (parm) > TMPL_ARGS_DEPTH (targs))
23379         /* We don't have enough levels of args to do any substitution.  This
23380            can happen in the context of -fnew-ttp-matching.  */;
23381       else
23382         {
23383           ++processing_template_decl;
23384           tparm = tsubst (tparm, targs, tf_none, NULL_TREE);
23385           --processing_template_decl;
23386
23387           if (tree a = type_uses_auto (tparm))
23388             {
23389               tparm = do_auto_deduction (tparm, arg, a, complain, adc_unify);
23390               if (tparm == error_mark_node)
23391                 return 1;
23392             }
23393         }
23394
23395       if (!TREE_TYPE (arg))
23396         /* Template-parameter dependent expression.  Just accept it for now.
23397            It will later be processed in convert_template_argument.  */
23398         ;
23399       else if (same_type_ignoring_top_level_qualifiers_p
23400                (non_reference (TREE_TYPE (arg)),
23401                 non_reference (tparm)))
23402         /* OK.  Ignore top-level quals here because a class-type template
23403            parameter object is const.  */;
23404       else if ((strict & UNIFY_ALLOW_INTEGER)
23405                && CP_INTEGRAL_TYPE_P (tparm))
23406         /* Convert the ARG to the type of PARM; the deduced non-type
23407            template argument must exactly match the types of the
23408            corresponding parameter.  */
23409         arg = fold (build_nop (tparm, arg));
23410       else if (uses_template_parms (tparm))
23411         {
23412           /* We haven't deduced the type of this parameter yet.  */
23413           if (cxx_dialect >= cxx17
23414               /* We deduce from array bounds in try_array_deduction.  */
23415               && !(strict & UNIFY_ALLOW_INTEGER))
23416             {
23417               /* Deduce it from the non-type argument.  */
23418               tree atype = TREE_TYPE (arg);
23419               RECUR_AND_CHECK_FAILURE (tparms, targs,
23420                                        tparm, atype,
23421                                        UNIFY_ALLOW_NONE, explain_p);
23422             }
23423           else
23424             /* Try again later.  */
23425             return unify_success (explain_p);
23426         }
23427       else
23428         return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
23429
23430       /* If ARG is a parameter pack or an expansion, we cannot unify
23431          against it unless PARM is also a parameter pack.  */
23432       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
23433           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
23434         return unify_parameter_pack_mismatch (explain_p, parm, arg);
23435
23436       {
23437         bool removed_attr = false;
23438         arg = strip_typedefs_expr (arg, &removed_attr);
23439       }
23440       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
23441       return unify_success (explain_p);
23442
23443     case PTRMEM_CST:
23444      {
23445         /* A pointer-to-member constant can be unified only with
23446          another constant.  */
23447       if (TREE_CODE (arg) != PTRMEM_CST)
23448         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
23449
23450       /* Just unify the class member. It would be useless (and possibly
23451          wrong, depending on the strict flags) to unify also
23452          PTRMEM_CST_CLASS, because we want to be sure that both parm and
23453          arg refer to the same variable, even if through different
23454          classes. For instance:
23455
23456          struct A { int x; };
23457          struct B : A { };
23458
23459          Unification of &A::x and &B::x must succeed.  */
23460       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
23461                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
23462      }
23463
23464     case POINTER_TYPE:
23465       {
23466         if (!TYPE_PTR_P (arg))
23467           return unify_type_mismatch (explain_p, parm, arg);
23468
23469         /* [temp.deduct.call]
23470
23471            A can be another pointer or pointer to member type that can
23472            be converted to the deduced A via a qualification
23473            conversion (_conv.qual_).
23474
23475            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
23476            This will allow for additional cv-qualification of the
23477            pointed-to types if appropriate.  */
23478
23479         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
23480           /* The derived-to-base conversion only persists through one
23481              level of pointers.  */
23482           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
23483
23484         return unify (tparms, targs, TREE_TYPE (parm),
23485                       TREE_TYPE (arg), strict, explain_p);
23486       }
23487
23488     case REFERENCE_TYPE:
23489       if (!TYPE_REF_P (arg))
23490         return unify_type_mismatch (explain_p, parm, arg);
23491       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
23492                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
23493
23494     case ARRAY_TYPE:
23495       if (TREE_CODE (arg) != ARRAY_TYPE)
23496         return unify_type_mismatch (explain_p, parm, arg);
23497       if ((TYPE_DOMAIN (parm) == NULL_TREE)
23498           != (TYPE_DOMAIN (arg) == NULL_TREE))
23499         return unify_type_mismatch (explain_p, parm, arg);
23500       RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
23501                                strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
23502       if (TYPE_DOMAIN (parm) != NULL_TREE)
23503         return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
23504                                    TYPE_DOMAIN (arg), explain_p);
23505       return unify_success (explain_p);
23506
23507     case REAL_TYPE:
23508     case COMPLEX_TYPE:
23509     case VECTOR_TYPE:
23510     case INTEGER_TYPE:
23511     case BOOLEAN_TYPE:
23512     case ENUMERAL_TYPE:
23513     case VOID_TYPE:
23514     case NULLPTR_TYPE:
23515       if (TREE_CODE (arg) != TREE_CODE (parm))
23516         return unify_type_mismatch (explain_p, parm, arg);
23517
23518       /* We have already checked cv-qualification at the top of the
23519          function.  */
23520       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
23521         return unify_type_mismatch (explain_p, parm, arg);
23522
23523       /* As far as unification is concerned, this wins.  Later checks
23524          will invalidate it if necessary.  */
23525       return unify_success (explain_p);
23526
23527       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
23528       /* Type INTEGER_CST can come from ordinary constant template args.  */
23529     case INTEGER_CST:
23530       while (CONVERT_EXPR_P (arg))
23531         arg = TREE_OPERAND (arg, 0);
23532
23533       if (TREE_CODE (arg) != INTEGER_CST)
23534         return unify_template_argument_mismatch (explain_p, parm, arg);
23535       return (tree_int_cst_equal (parm, arg)
23536               ? unify_success (explain_p)
23537               : unify_template_argument_mismatch (explain_p, parm, arg));
23538
23539     case TREE_VEC:
23540       {
23541         int i, len, argslen;
23542         int parm_variadic_p = 0;
23543
23544         if (TREE_CODE (arg) != TREE_VEC)
23545           return unify_template_argument_mismatch (explain_p, parm, arg);
23546
23547         len = TREE_VEC_LENGTH (parm);
23548         argslen = TREE_VEC_LENGTH (arg);
23549
23550         /* Check for pack expansions in the parameters.  */
23551         for (i = 0; i < len; ++i)
23552           {
23553             if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
23554               {
23555                 if (i == len - 1)
23556                   /* We can unify against something with a trailing
23557                      parameter pack.  */
23558                   parm_variadic_p = 1;
23559                 else
23560                   /* [temp.deduct.type]/9: If the template argument list of
23561                      P contains a pack expansion that is not the last
23562                      template argument, the entire template argument list
23563                      is a non-deduced context.  */
23564                   return unify_success (explain_p);
23565               }
23566           }
23567
23568         /* If we don't have enough arguments to satisfy the parameters
23569            (not counting the pack expression at the end), or we have
23570            too many arguments for a parameter list that doesn't end in
23571            a pack expression, we can't unify.  */
23572         if (parm_variadic_p
23573             ? argslen < len - parm_variadic_p
23574             : argslen != len)
23575           return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
23576
23577         /* Unify all of the parameters that precede the (optional)
23578            pack expression.  */
23579         for (i = 0; i < len - parm_variadic_p; ++i)
23580           {
23581             RECUR_AND_CHECK_FAILURE (tparms, targs,
23582                                      TREE_VEC_ELT (parm, i),
23583                                      TREE_VEC_ELT (arg, i),
23584                                      UNIFY_ALLOW_NONE, explain_p);
23585           }
23586         if (parm_variadic_p)
23587           return unify_pack_expansion (tparms, targs, parm, arg,
23588                                        DEDUCE_EXACT,
23589                                        /*subr=*/true, explain_p);
23590         return unify_success (explain_p);
23591       }
23592
23593     case RECORD_TYPE:
23594     case UNION_TYPE:
23595       if (TREE_CODE (arg) != TREE_CODE (parm))
23596         return unify_type_mismatch (explain_p, parm, arg);
23597
23598       if (TYPE_PTRMEMFUNC_P (parm))
23599         {
23600           if (!TYPE_PTRMEMFUNC_P (arg))
23601             return unify_type_mismatch (explain_p, parm, arg);
23602
23603           return unify (tparms, targs,
23604                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
23605                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
23606                         strict, explain_p);
23607         }
23608       else if (TYPE_PTRMEMFUNC_P (arg))
23609         return unify_type_mismatch (explain_p, parm, arg);
23610
23611       if (CLASSTYPE_TEMPLATE_INFO (parm))
23612         {
23613           tree t = NULL_TREE;
23614
23615           if (strict_in & UNIFY_ALLOW_DERIVED)
23616             {
23617               /* First, we try to unify the PARM and ARG directly.  */
23618               t = try_class_unification (tparms, targs,
23619                                          parm, arg, explain_p);
23620
23621               if (!t)
23622                 {
23623                   /* Fallback to the special case allowed in
23624                      [temp.deduct.call]:
23625
23626                        If P is a class, and P has the form
23627                        template-id, then A can be a derived class of
23628                        the deduced A.  Likewise, if P is a pointer to
23629                        a class of the form template-id, A can be a
23630                        pointer to a derived class pointed to by the
23631                        deduced A.  */
23632                   enum template_base_result r;
23633                   r = get_template_base (tparms, targs, parm, arg,
23634                                          explain_p, &t);
23635
23636                   if (!t)
23637                     {
23638                       /* Don't give the derived diagnostic if we're
23639                          already dealing with the same template.  */
23640                       bool same_template
23641                         = (CLASSTYPE_TEMPLATE_INFO (arg)
23642                            && (CLASSTYPE_TI_TEMPLATE (parm)
23643                                == CLASSTYPE_TI_TEMPLATE (arg)));
23644                       return unify_no_common_base (explain_p && !same_template,
23645                                                    r, parm, arg);
23646                     }
23647                 }
23648             }
23649           else if (CLASSTYPE_TEMPLATE_INFO (arg)
23650                    && (CLASSTYPE_TI_TEMPLATE (parm)
23651                        == CLASSTYPE_TI_TEMPLATE (arg)))
23652             /* Perhaps PARM is something like S<U> and ARG is S<int>.
23653                Then, we should unify `int' and `U'.  */
23654             t = arg;
23655           else
23656             /* There's no chance of unification succeeding.  */
23657             return unify_type_mismatch (explain_p, parm, arg);
23658
23659           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
23660                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
23661         }
23662       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
23663         return unify_type_mismatch (explain_p, parm, arg);
23664       return unify_success (explain_p);
23665
23666     case METHOD_TYPE:
23667     case FUNCTION_TYPE:
23668       {
23669         unsigned int nargs;
23670         tree *args;
23671         tree a;
23672         unsigned int i;
23673
23674         if (TREE_CODE (arg) != TREE_CODE (parm))
23675           return unify_type_mismatch (explain_p, parm, arg);
23676
23677         /* CV qualifications for methods can never be deduced, they must
23678            match exactly.  We need to check them explicitly here,
23679            because type_unification_real treats them as any other
23680            cv-qualified parameter.  */
23681         if (TREE_CODE (parm) == METHOD_TYPE
23682             && (!check_cv_quals_for_unify
23683                 (UNIFY_ALLOW_NONE,
23684                  class_of_this_parm (arg),
23685                  class_of_this_parm (parm))))
23686           return unify_cv_qual_mismatch (explain_p, parm, arg);
23687         if (TREE_CODE (arg) == FUNCTION_TYPE
23688             && type_memfn_quals (parm) != type_memfn_quals (arg))
23689           return unify_cv_qual_mismatch (explain_p, parm, arg);
23690         if (type_memfn_rqual (parm) != type_memfn_rqual (arg))
23691           return unify_type_mismatch (explain_p, parm, arg);
23692
23693         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
23694                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
23695
23696         nargs = list_length (TYPE_ARG_TYPES (arg));
23697         args = XALLOCAVEC (tree, nargs);
23698         for (a = TYPE_ARG_TYPES (arg), i = 0;
23699              a != NULL_TREE && a != void_list_node;
23700              a = TREE_CHAIN (a), ++i)
23701           args[i] = TREE_VALUE (a);
23702         nargs = i;
23703
23704         if (type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
23705                                    args, nargs, 1, DEDUCE_EXACT,
23706                                    NULL, explain_p))
23707           return 1;
23708
23709         if (flag_noexcept_type)
23710           {
23711             tree pspec = TYPE_RAISES_EXCEPTIONS (parm);
23712             tree aspec = canonical_eh_spec (TYPE_RAISES_EXCEPTIONS (arg));
23713             if (pspec == NULL_TREE) pspec = noexcept_false_spec;
23714             if (aspec == NULL_TREE) aspec = noexcept_false_spec;
23715             if (TREE_PURPOSE (pspec) && TREE_PURPOSE (aspec)
23716                 && uses_template_parms (TREE_PURPOSE (pspec)))
23717               RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_PURPOSE (pspec),
23718                                        TREE_PURPOSE (aspec),
23719                                        UNIFY_ALLOW_NONE, explain_p);
23720             else if (nothrow_spec_p (pspec) && !nothrow_spec_p (aspec))
23721               return unify_type_mismatch (explain_p, parm, arg);
23722           }
23723
23724         return 0;
23725       }
23726
23727     case OFFSET_TYPE:
23728       /* Unify a pointer to member with a pointer to member function, which
23729          deduces the type of the member as a function type. */
23730       if (TYPE_PTRMEMFUNC_P (arg))
23731         {
23732           /* Check top-level cv qualifiers */
23733           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
23734             return unify_cv_qual_mismatch (explain_p, parm, arg);
23735
23736           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
23737                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
23738                                    UNIFY_ALLOW_NONE, explain_p);
23739
23740           /* Determine the type of the function we are unifying against. */
23741           tree fntype = static_fn_type (arg);
23742
23743           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
23744         }
23745
23746       if (TREE_CODE (arg) != OFFSET_TYPE)
23747         return unify_type_mismatch (explain_p, parm, arg);
23748       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
23749                                TYPE_OFFSET_BASETYPE (arg),
23750                                UNIFY_ALLOW_NONE, explain_p);
23751       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
23752                     strict, explain_p);
23753
23754     case CONST_DECL:
23755       if (DECL_TEMPLATE_PARM_P (parm))
23756         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
23757       if (arg != scalar_constant_value (parm))
23758         return unify_template_argument_mismatch (explain_p, parm, arg);
23759       return unify_success (explain_p);
23760
23761     case FIELD_DECL:
23762     case TEMPLATE_DECL:
23763       /* Matched cases are handled by the ARG == PARM test above.  */
23764       return unify_template_argument_mismatch (explain_p, parm, arg);
23765
23766     case VAR_DECL:
23767       /* We might get a variable as a non-type template argument in parm if the
23768          corresponding parameter is type-dependent.  Make any necessary
23769          adjustments based on whether arg is a reference.  */
23770       if (CONSTANT_CLASS_P (arg))
23771         parm = fold_non_dependent_expr (parm, complain);
23772       else if (REFERENCE_REF_P (arg))
23773         {
23774           tree sub = TREE_OPERAND (arg, 0);
23775           STRIP_NOPS (sub);
23776           if (TREE_CODE (sub) == ADDR_EXPR)
23777             arg = TREE_OPERAND (sub, 0);
23778         }
23779       /* Now use the normal expression code to check whether they match.  */
23780       goto expr;
23781
23782     case TYPE_ARGUMENT_PACK:
23783     case NONTYPE_ARGUMENT_PACK:
23784       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
23785                     ARGUMENT_PACK_ARGS (arg), strict, explain_p);
23786
23787     case TYPEOF_TYPE:
23788     case DECLTYPE_TYPE:
23789     case UNDERLYING_TYPE:
23790       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
23791          or UNDERLYING_TYPE nodes.  */
23792       return unify_success (explain_p);
23793
23794     case ERROR_MARK:
23795       /* Unification fails if we hit an error node.  */
23796       return unify_invalid (explain_p);
23797
23798     case INDIRECT_REF:
23799       if (REFERENCE_REF_P (parm))
23800         {
23801           bool pexp = PACK_EXPANSION_P (arg);
23802           if (pexp)
23803             arg = PACK_EXPANSION_PATTERN (arg);
23804           if (REFERENCE_REF_P (arg))
23805             arg = TREE_OPERAND (arg, 0);
23806           if (pexp)
23807             arg = make_pack_expansion (arg, complain);
23808           return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
23809                         strict, explain_p);
23810         }
23811       /* FALLTHRU */
23812
23813     default:
23814       /* An unresolved overload is a nondeduced context.  */
23815       if (is_overloaded_fn (parm) || type_unknown_p (parm))
23816         return unify_success (explain_p);
23817       gcc_assert (EXPR_P (parm)
23818                   || COMPOUND_LITERAL_P (parm)
23819                   || TREE_CODE (parm) == TRAIT_EXPR);
23820     expr:
23821       /* We must be looking at an expression.  This can happen with
23822          something like:
23823
23824            template <int I>
23825            void foo(S<I>, S<I + 2>);
23826
23827          or
23828
23829            template<typename T>
23830            void foo(A<T, T{}>);
23831
23832          This is a "non-deduced context":
23833
23834            [deduct.type]
23835
23836            The non-deduced contexts are:
23837
23838            --A non-type template argument or an array bound in which
23839              a subexpression references a template parameter.
23840
23841          In these cases, we assume deduction succeeded, but don't
23842          actually infer any unifications.  */
23843
23844       if (!uses_template_parms (parm)
23845           && !template_args_equal (parm, arg))
23846         return unify_expression_unequal (explain_p, parm, arg);
23847       else
23848         return unify_success (explain_p);
23849     }
23850 }
23851 #undef RECUR_AND_CHECK_FAILURE
23852 \f
23853 /* Note that DECL can be defined in this translation unit, if
23854    required.  */
23855
23856 static void
23857 mark_definable (tree decl)
23858 {
23859   tree clone;
23860   DECL_NOT_REALLY_EXTERN (decl) = 1;
23861   FOR_EACH_CLONE (clone, decl)
23862     DECL_NOT_REALLY_EXTERN (clone) = 1;
23863 }
23864
23865 /* Called if RESULT is explicitly instantiated, or is a member of an
23866    explicitly instantiated class.  */
23867
23868 void
23869 mark_decl_instantiated (tree result, int extern_p)
23870 {
23871   SET_DECL_EXPLICIT_INSTANTIATION (result);
23872
23873   /* If this entity has already been written out, it's too late to
23874      make any modifications.  */
23875   if (TREE_ASM_WRITTEN (result))
23876     return;
23877
23878   /* For anonymous namespace we don't need to do anything.  */
23879   if (decl_anon_ns_mem_p (result))
23880     {
23881       gcc_assert (!TREE_PUBLIC (result));
23882       return;
23883     }
23884
23885   if (TREE_CODE (result) != FUNCTION_DECL)
23886     /* The TREE_PUBLIC flag for function declarations will have been
23887        set correctly by tsubst.  */
23888     TREE_PUBLIC (result) = 1;
23889
23890   /* This might have been set by an earlier implicit instantiation.  */
23891   DECL_COMDAT (result) = 0;
23892
23893   if (extern_p)
23894     DECL_NOT_REALLY_EXTERN (result) = 0;
23895   else
23896     {
23897       mark_definable (result);
23898       mark_needed (result);
23899       /* Always make artificials weak.  */
23900       if (DECL_ARTIFICIAL (result) && flag_weak)
23901         comdat_linkage (result);
23902       /* For WIN32 we also want to put explicit instantiations in
23903          linkonce sections.  */
23904       else if (TREE_PUBLIC (result))
23905         maybe_make_one_only (result);
23906       if (TREE_CODE (result) == FUNCTION_DECL
23907           && DECL_TEMPLATE_INSTANTIATED (result))
23908         /* If the function has already been instantiated, clear DECL_EXTERNAL,
23909            since start_preparsed_function wouldn't have if we had an earlier
23910            extern explicit instantiation.  */
23911         DECL_EXTERNAL (result) = 0;
23912     }
23913
23914   /* If EXTERN_P, then this function will not be emitted -- unless
23915      followed by an explicit instantiation, at which point its linkage
23916      will be adjusted.  If !EXTERN_P, then this function will be
23917      emitted here.  In neither circumstance do we want
23918      import_export_decl to adjust the linkage.  */
23919   DECL_INTERFACE_KNOWN (result) = 1;
23920 }
23921
23922 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
23923    important template arguments.  If any are missing, we check whether
23924    they're important by using error_mark_node for substituting into any
23925    args that were used for partial ordering (the ones between ARGS and END)
23926    and seeing if it bubbles up.  */
23927
23928 static bool
23929 check_undeduced_parms (tree targs, tree args, tree end)
23930 {
23931   bool found = false;
23932   int i;
23933   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
23934     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
23935       {
23936         found = true;
23937         TREE_VEC_ELT (targs, i) = error_mark_node;
23938       }
23939   if (found)
23940     {
23941       tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
23942       if (substed == error_mark_node)
23943         return true;
23944     }
23945   return false;
23946 }
23947
23948 /* Given two function templates PAT1 and PAT2, return:
23949
23950    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
23951    -1 if PAT2 is more specialized than PAT1.
23952    0 if neither is more specialized.
23953
23954    LEN indicates the number of parameters we should consider
23955    (defaulted parameters should not be considered).
23956
23957    The 1998 std underspecified function template partial ordering, and
23958    DR214 addresses the issue.  We take pairs of arguments, one from
23959    each of the templates, and deduce them against each other.  One of
23960    the templates will be more specialized if all the *other*
23961    template's arguments deduce against its arguments and at least one
23962    of its arguments *does* *not* deduce against the other template's
23963    corresponding argument.  Deduction is done as for class templates.
23964    The arguments used in deduction have reference and top level cv
23965    qualifiers removed.  Iff both arguments were originally reference
23966    types *and* deduction succeeds in both directions, an lvalue reference
23967    wins against an rvalue reference and otherwise the template
23968    with the more cv-qualified argument wins for that pairing (if
23969    neither is more cv-qualified, they both are equal).  Unlike regular
23970    deduction, after all the arguments have been deduced in this way,
23971    we do *not* verify the deduced template argument values can be
23972    substituted into non-deduced contexts.
23973
23974    The logic can be a bit confusing here, because we look at deduce1 and
23975    targs1 to see if pat2 is at least as specialized, and vice versa; if we
23976    can find template arguments for pat1 to make arg1 look like arg2, that
23977    means that arg2 is at least as specialized as arg1.  */
23978
23979 int
23980 more_specialized_fn (tree pat1, tree pat2, int len)
23981 {
23982   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
23983   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
23984   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
23985   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
23986   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
23987   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
23988   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
23989   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
23990   tree origs1, origs2;
23991   bool lose1 = false;
23992   bool lose2 = false;
23993
23994   /* Remove the this parameter from non-static member functions.  If
23995      one is a non-static member function and the other is not a static
23996      member function, remove the first parameter from that function
23997      also.  This situation occurs for operator functions where we
23998      locate both a member function (with this pointer) and non-member
23999      operator (with explicit first operand).  */
24000   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
24001     {
24002       len--; /* LEN is the number of significant arguments for DECL1 */
24003       args1 = TREE_CHAIN (args1);
24004       if (!DECL_STATIC_FUNCTION_P (decl2))
24005         args2 = TREE_CHAIN (args2);
24006     }
24007   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
24008     {
24009       args2 = TREE_CHAIN (args2);
24010       if (!DECL_STATIC_FUNCTION_P (decl1))
24011         {
24012           len--;
24013           args1 = TREE_CHAIN (args1);
24014         }
24015     }
24016
24017   /* If only one is a conversion operator, they are unordered.  */
24018   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
24019     return 0;
24020
24021   /* Consider the return type for a conversion function */
24022   if (DECL_CONV_FN_P (decl1))
24023     {
24024       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
24025       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
24026       len++;
24027     }
24028
24029   processing_template_decl++;
24030
24031   origs1 = args1;
24032   origs2 = args2;
24033
24034   while (len--
24035          /* Stop when an ellipsis is seen.  */
24036          && args1 != NULL_TREE && args2 != NULL_TREE)
24037     {
24038       tree arg1 = TREE_VALUE (args1);
24039       tree arg2 = TREE_VALUE (args2);
24040       int deduce1, deduce2;
24041       int quals1 = -1;
24042       int quals2 = -1;
24043       int ref1 = 0;
24044       int ref2 = 0;
24045
24046       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
24047           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
24048         {
24049           /* When both arguments are pack expansions, we need only
24050              unify the patterns themselves.  */
24051           arg1 = PACK_EXPANSION_PATTERN (arg1);
24052           arg2 = PACK_EXPANSION_PATTERN (arg2);
24053
24054           /* This is the last comparison we need to do.  */
24055           len = 0;
24056         }
24057
24058       if (TYPE_REF_P (arg1))
24059         {
24060           ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
24061           arg1 = TREE_TYPE (arg1);
24062           quals1 = cp_type_quals (arg1);
24063         }
24064
24065       if (TYPE_REF_P (arg2))
24066         {
24067           ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
24068           arg2 = TREE_TYPE (arg2);
24069           quals2 = cp_type_quals (arg2);
24070         }
24071
24072       arg1 = TYPE_MAIN_VARIANT (arg1);
24073       arg2 = TYPE_MAIN_VARIANT (arg2);
24074
24075       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
24076         {
24077           int i, len2 = remaining_arguments (args2);
24078           tree parmvec = make_tree_vec (1);
24079           tree argvec = make_tree_vec (len2);
24080           tree ta = args2;
24081
24082           /* Setup the parameter vector, which contains only ARG1.  */
24083           TREE_VEC_ELT (parmvec, 0) = arg1;
24084
24085           /* Setup the argument vector, which contains the remaining
24086              arguments.  */
24087           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
24088             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
24089
24090           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
24091                                            argvec, DEDUCE_EXACT,
24092                                            /*subr=*/true, /*explain_p=*/false)
24093                      == 0);
24094
24095           /* We cannot deduce in the other direction, because ARG1 is
24096              a pack expansion but ARG2 is not.  */
24097           deduce2 = 0;
24098         }
24099       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
24100         {
24101           int i, len1 = remaining_arguments (args1);
24102           tree parmvec = make_tree_vec (1);
24103           tree argvec = make_tree_vec (len1);
24104           tree ta = args1;
24105
24106           /* Setup the parameter vector, which contains only ARG1.  */
24107           TREE_VEC_ELT (parmvec, 0) = arg2;
24108
24109           /* Setup the argument vector, which contains the remaining
24110              arguments.  */
24111           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
24112             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
24113
24114           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
24115                                            argvec, DEDUCE_EXACT,
24116                                            /*subr=*/true, /*explain_p=*/false)
24117                      == 0);
24118
24119           /* We cannot deduce in the other direction, because ARG2 is
24120              a pack expansion but ARG1 is not.*/
24121           deduce1 = 0;
24122         }
24123
24124       else
24125         {
24126           /* The normal case, where neither argument is a pack
24127              expansion.  */
24128           deduce1 = (unify (tparms1, targs1, arg1, arg2,
24129                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
24130                      == 0);
24131           deduce2 = (unify (tparms2, targs2, arg2, arg1,
24132                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
24133                      == 0);
24134         }
24135
24136       /* If we couldn't deduce arguments for tparms1 to make arg1 match
24137          arg2, then arg2 is not as specialized as arg1.  */
24138       if (!deduce1)
24139         lose2 = true;
24140       if (!deduce2)
24141         lose1 = true;
24142
24143       /* "If, for a given type, deduction succeeds in both directions
24144          (i.e., the types are identical after the transformations above)
24145          and both P and A were reference types (before being replaced with
24146          the type referred to above):
24147          - if the type from the argument template was an lvalue reference and
24148          the type from the parameter template was not, the argument type is
24149          considered to be more specialized than the other; otherwise,
24150          - if the type from the argument template is more cv-qualified
24151          than the type from the parameter template (as described above),
24152          the argument type is considered to be more specialized than the other;
24153          otherwise,
24154          - neither type is more specialized than the other."  */
24155
24156       if (deduce1 && deduce2)
24157         {
24158           if (ref1 && ref2 && ref1 != ref2)
24159             {
24160               if (ref1 > ref2)
24161                 lose1 = true;
24162               else
24163                 lose2 = true;
24164             }
24165           else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
24166             {
24167               if ((quals1 & quals2) == quals2)
24168                 lose2 = true;
24169               if ((quals1 & quals2) == quals1)
24170                 lose1 = true;
24171             }
24172         }
24173
24174       if (lose1 && lose2)
24175         /* We've failed to deduce something in either direction.
24176            These must be unordered.  */
24177         break;
24178
24179       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
24180           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
24181         /* We have already processed all of the arguments in our
24182            handing of the pack expansion type.  */
24183         len = 0;
24184
24185       args1 = TREE_CHAIN (args1);
24186       args2 = TREE_CHAIN (args2);
24187     }
24188
24189   /* "In most cases, all template parameters must have values in order for
24190      deduction to succeed, but for partial ordering purposes a template
24191      parameter may remain without a value provided it is not used in the
24192      types being used for partial ordering."
24193
24194      Thus, if we are missing any of the targs1 we need to substitute into
24195      origs1, then pat2 is not as specialized as pat1.  This can happen when
24196      there is a nondeduced context.  */
24197   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
24198     lose2 = true;
24199   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
24200     lose1 = true;
24201
24202   processing_template_decl--;
24203
24204   /* If both deductions succeed, the partial ordering selects the more
24205      constrained template.  */
24206   /* P2113: If the corresponding template-parameters of the
24207      template-parameter-lists are not equivalent ([temp.over.link]) or if
24208      the function parameters that positionally correspond between the two
24209      templates are not of the same type, neither template is more
24210      specialized than the other.  */
24211   if (!lose1 && !lose2
24212       && comp_template_parms (DECL_TEMPLATE_PARMS (pat1),
24213                               DECL_TEMPLATE_PARMS (pat2))
24214       && compparms (origs1, origs2))
24215     {
24216       int winner = more_constrained (decl1, decl2);
24217       if (winner > 0)
24218         lose2 = true;
24219       else if (winner < 0)
24220         lose1 = true;
24221     }
24222
24223   /* All things being equal, if the next argument is a pack expansion
24224      for one function but not for the other, prefer the
24225      non-variadic function.  FIXME this is bogus; see c++/41958.  */
24226   if (lose1 == lose2
24227       && args1 && TREE_VALUE (args1)
24228       && args2 && TREE_VALUE (args2))
24229     {
24230       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
24231       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
24232     }
24233
24234   if (lose1 == lose2)
24235     return 0;
24236   else if (!lose1)
24237     return 1;
24238   else
24239     return -1;
24240 }
24241
24242 /* Determine which of two partial specializations of TMPL is more
24243    specialized.
24244
24245    PAT1 is a TREE_LIST whose TREE_VALUE is the TEMPLATE_DECL corresponding
24246    to the first partial specialization.  The TREE_PURPOSE is the
24247    innermost set of template parameters for the partial
24248    specialization.  PAT2 is similar, but for the second template.
24249
24250    Return 1 if the first partial specialization is more specialized;
24251    -1 if the second is more specialized; 0 if neither is more
24252    specialized.
24253
24254    See [temp.class.order] for information about determining which of
24255    two templates is more specialized.  */
24256
24257 static int
24258 more_specialized_partial_spec (tree tmpl, tree pat1, tree pat2)
24259 {
24260   tree targs;
24261   int winner = 0;
24262   bool any_deductions = false;
24263
24264   tree tmpl1 = TREE_VALUE (pat1);
24265   tree tmpl2 = TREE_VALUE (pat2);
24266   tree specargs1 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl1)));
24267   tree specargs2 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl2)));
24268
24269   /* Just like what happens for functions, if we are ordering between
24270      different template specializations, we may encounter dependent
24271      types in the arguments, and we need our dependency check functions
24272      to behave correctly.  */
24273   ++processing_template_decl;
24274   targs = get_partial_spec_bindings (tmpl, tmpl1, specargs2);
24275   if (targs)
24276     {
24277       --winner;
24278       any_deductions = true;
24279     }
24280
24281   targs = get_partial_spec_bindings (tmpl, tmpl2, specargs1);
24282   if (targs)
24283     {
24284       ++winner;
24285       any_deductions = true;
24286     }
24287   --processing_template_decl;
24288
24289   /* If both deductions succeed, the partial ordering selects the more
24290      constrained template.  */
24291   if (!winner && any_deductions)
24292     winner = more_constrained (tmpl1, tmpl2);
24293
24294   /* In the case of a tie where at least one of the templates
24295      has a parameter pack at the end, the template with the most
24296      non-packed parameters wins.  */
24297   if (winner == 0
24298       && any_deductions
24299       && (template_args_variadic_p (TREE_PURPOSE (pat1))
24300           || template_args_variadic_p (TREE_PURPOSE (pat2))))
24301     {
24302       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
24303       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
24304       int len1 = TREE_VEC_LENGTH (args1);
24305       int len2 = TREE_VEC_LENGTH (args2);
24306
24307       /* We don't count the pack expansion at the end.  */
24308       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
24309         --len1;
24310       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
24311         --len2;
24312
24313       if (len1 > len2)
24314         return 1;
24315       else if (len1 < len2)
24316         return -1;
24317     }
24318
24319   return winner;
24320 }
24321
24322 /* Return the template arguments that will produce the function signature
24323    DECL from the function template FN, with the explicit template
24324    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
24325    also match.  Return NULL_TREE if no satisfactory arguments could be
24326    found.  */
24327
24328 static tree
24329 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
24330 {
24331   int ntparms = DECL_NTPARMS (fn);
24332   tree targs = make_tree_vec (ntparms);
24333   tree decl_type = TREE_TYPE (decl);
24334   tree decl_arg_types;
24335   tree *args;
24336   unsigned int nargs, ix;
24337   tree arg;
24338
24339   gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
24340
24341   /* Never do unification on the 'this' parameter.  */
24342   decl_arg_types = skip_artificial_parms_for (decl,
24343                                               TYPE_ARG_TYPES (decl_type));
24344
24345   nargs = list_length (decl_arg_types);
24346   args = XALLOCAVEC (tree, nargs);
24347   for (arg = decl_arg_types, ix = 0;
24348        arg != NULL_TREE && arg != void_list_node;
24349        arg = TREE_CHAIN (arg), ++ix)
24350     args[ix] = TREE_VALUE (arg);
24351
24352   if (fn_type_unification (fn, explicit_args, targs,
24353                            args, ix,
24354                            (check_rettype || DECL_CONV_FN_P (fn)
24355                             ? TREE_TYPE (decl_type) : NULL_TREE),
24356                            DEDUCE_EXACT, LOOKUP_NORMAL, NULL,
24357                            /*explain_p=*/false,
24358                            /*decltype*/false)
24359       == error_mark_node)
24360     return NULL_TREE;
24361
24362   return targs;
24363 }
24364
24365 /* Return the innermost template arguments that, when applied to a partial
24366    specialization SPEC_TMPL of TMPL, yield the ARGS.
24367
24368    For example, suppose we have:
24369
24370      template <class T, class U> struct S {};
24371      template <class T> struct S<T*, int> {};
24372
24373    Then, suppose we want to get `S<double*, int>'.  SPEC_TMPL will be the
24374    partial specialization and the ARGS will be {double*, int}.  The resulting
24375    vector will be {double}, indicating that `T' is bound to `double'.  */
24376
24377 static tree
24378 get_partial_spec_bindings (tree tmpl, tree spec_tmpl, tree args)
24379 {
24380   tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
24381   tree spec_args
24382     = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (spec_tmpl)));
24383   int i, ntparms = TREE_VEC_LENGTH (tparms);
24384   tree deduced_args;
24385   tree innermost_deduced_args;
24386
24387   innermost_deduced_args = make_tree_vec (ntparms);
24388   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
24389     {
24390       deduced_args = copy_node (args);
24391       SET_TMPL_ARGS_LEVEL (deduced_args,
24392                            TMPL_ARGS_DEPTH (deduced_args),
24393                            innermost_deduced_args);
24394     }
24395   else
24396     deduced_args = innermost_deduced_args;
24397
24398   bool tried_array_deduction = (cxx_dialect < cxx17);
24399  again:
24400   if (unify (tparms, deduced_args,
24401              INNERMOST_TEMPLATE_ARGS (spec_args),
24402              INNERMOST_TEMPLATE_ARGS (args),
24403              UNIFY_ALLOW_NONE, /*explain_p=*/false))
24404     return NULL_TREE;
24405
24406   for (i =  0; i < ntparms; ++i)
24407     if (! TREE_VEC_ELT (innermost_deduced_args, i))
24408       {
24409         if (!tried_array_deduction)
24410           {
24411             try_array_deduction (tparms, innermost_deduced_args,
24412                                  INNERMOST_TEMPLATE_ARGS (spec_args));
24413             tried_array_deduction = true;
24414             if (TREE_VEC_ELT (innermost_deduced_args, i))
24415               goto again;
24416           }
24417         return NULL_TREE;
24418       }
24419
24420   if (!push_tinst_level (spec_tmpl, deduced_args))
24421     {
24422       excessive_deduction_depth = true;
24423       return NULL_TREE;
24424     }
24425
24426   /* Verify that nondeduced template arguments agree with the type
24427      obtained from argument deduction.
24428
24429      For example:
24430
24431        struct A { typedef int X; };
24432        template <class T, class U> struct C {};
24433        template <class T> struct C<T, typename T::X> {};
24434
24435      Then with the instantiation `C<A, int>', we can deduce that
24436      `T' is `A' but unify () does not check whether `typename T::X'
24437      is `int'.  */
24438   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
24439
24440   if (spec_args != error_mark_node)
24441     spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
24442                                        INNERMOST_TEMPLATE_ARGS (spec_args),
24443                                        tmpl, tf_none, false, false);
24444
24445   pop_tinst_level ();
24446
24447   if (spec_args == error_mark_node
24448       /* We only need to check the innermost arguments; the other
24449          arguments will always agree.  */
24450       || !comp_template_args_porder (INNERMOST_TEMPLATE_ARGS (spec_args),
24451                                      INNERMOST_TEMPLATE_ARGS (args)))
24452     return NULL_TREE;
24453
24454   /* Now that we have bindings for all of the template arguments,
24455      ensure that the arguments deduced for the template template
24456      parameters have compatible template parameter lists.  See the use
24457      of template_template_parm_bindings_ok_p in fn_type_unification
24458      for more information.  */
24459   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
24460     return NULL_TREE;
24461
24462   return deduced_args;
24463 }
24464
24465 // Compare two function templates T1 and T2 by deducing bindings
24466 // from one against the other. If both deductions succeed, compare
24467 // constraints to see which is more constrained.
24468 static int
24469 more_specialized_inst (tree t1, tree t2)
24470 {
24471   int fate = 0;
24472   int count = 0;
24473
24474   if (get_bindings (t1, DECL_TEMPLATE_RESULT (t2), NULL_TREE, true))
24475     {
24476       --fate;
24477       ++count;
24478     }
24479
24480   if (get_bindings (t2, DECL_TEMPLATE_RESULT (t1), NULL_TREE, true))
24481     {
24482       ++fate;
24483       ++count;
24484     }
24485
24486   // If both deductions succeed, then one may be more constrained.
24487   if (count == 2 && fate == 0)
24488     fate = more_constrained (t1, t2);
24489
24490   return fate;
24491 }
24492
24493 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
24494    Return the TREE_LIST node with the most specialized template, if
24495    any.  If there is no most specialized template, the error_mark_node
24496    is returned.
24497
24498    Note that this function does not look at, or modify, the
24499    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
24500    returned is one of the elements of INSTANTIATIONS, callers may
24501    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
24502    and retrieve it from the value returned.  */
24503
24504 tree
24505 most_specialized_instantiation (tree templates)
24506 {
24507   tree fn, champ;
24508
24509   ++processing_template_decl;
24510
24511   champ = templates;
24512   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
24513     {
24514       gcc_assert (TREE_VALUE (champ) != TREE_VALUE (fn));
24515       int fate = more_specialized_inst (TREE_VALUE (champ), TREE_VALUE (fn));
24516       if (fate == -1)
24517         champ = fn;
24518       else if (!fate)
24519         {
24520           /* Equally specialized, move to next function.  If there
24521              is no next function, nothing's most specialized.  */
24522           fn = TREE_CHAIN (fn);
24523           champ = fn;
24524           if (!fn)
24525             break;
24526         }
24527     }
24528
24529   if (champ)
24530     /* Now verify that champ is better than everything earlier in the
24531        instantiation list.  */
24532     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn)) {
24533       if (more_specialized_inst (TREE_VALUE (champ), TREE_VALUE (fn)) != 1)
24534       {
24535         champ = NULL_TREE;
24536         break;
24537       }
24538     }
24539
24540   processing_template_decl--;
24541
24542   if (!champ)
24543     return error_mark_node;
24544
24545   return champ;
24546 }
24547
24548 /* If DECL is a specialization of some template, return the most
24549    general such template.  Otherwise, returns NULL_TREE.
24550
24551    For example, given:
24552
24553      template <class T> struct S { template <class U> void f(U); };
24554
24555    if TMPL is `template <class U> void S<int>::f(U)' this will return
24556    the full template.  This function will not trace past partial
24557    specializations, however.  For example, given in addition:
24558
24559      template <class T> struct S<T*> { template <class U> void f(U); };
24560
24561    if TMPL is `template <class U> void S<int*>::f(U)' this will return
24562    `template <class T> template <class U> S<T*>::f(U)'.  */
24563
24564 tree
24565 most_general_template (tree decl)
24566 {
24567   if (TREE_CODE (decl) != TEMPLATE_DECL)
24568     {
24569       if (tree tinfo = get_template_info (decl))
24570         decl = TI_TEMPLATE (tinfo);
24571       /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
24572          template friend, or a FIELD_DECL for a capture pack.  */
24573       if (TREE_CODE (decl) != TEMPLATE_DECL)
24574         return NULL_TREE;
24575     }
24576
24577   /* Look for more and more general templates.  */
24578   while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
24579     {
24580       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
24581          (See cp-tree.h for details.)  */
24582       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
24583         break;
24584
24585       if (CLASS_TYPE_P (TREE_TYPE (decl))
24586           && !TYPE_DECL_ALIAS_P (TYPE_NAME (TREE_TYPE (decl)))
24587           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
24588         break;
24589
24590       /* Stop if we run into an explicitly specialized class template.  */
24591       if (!DECL_NAMESPACE_SCOPE_P (decl)
24592           && DECL_CONTEXT (decl)
24593           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
24594         break;
24595
24596       decl = DECL_TI_TEMPLATE (decl);
24597     }
24598
24599   return decl;
24600 }
24601
24602 /* Return the most specialized of the template partial specializations
24603    which can produce TARGET, a specialization of some class or variable
24604    template.  The value returned is actually a TREE_LIST; the TREE_VALUE is
24605    a TEMPLATE_DECL node corresponding to the partial specialization, while
24606    the TREE_PURPOSE is the set of template arguments that must be
24607    substituted into the template pattern in order to generate TARGET.
24608
24609    If the choice of partial specialization is ambiguous, a diagnostic
24610    is issued, and the error_mark_node is returned.  If there are no
24611    partial specializations matching TARGET, then NULL_TREE is
24612    returned, indicating that the primary template should be used.  */
24613
24614 tree
24615 most_specialized_partial_spec (tree target, tsubst_flags_t complain)
24616 {
24617   tree list = NULL_TREE;
24618   tree t;
24619   tree champ;
24620   int fate;
24621   bool ambiguous_p;
24622   tree outer_args = NULL_TREE;
24623   tree tmpl, args;
24624
24625   if (TYPE_P (target))
24626     {
24627       tree tinfo = CLASSTYPE_TEMPLATE_INFO (target);
24628       tmpl = TI_TEMPLATE (tinfo);
24629       args = TI_ARGS (tinfo);
24630     }
24631   else if (TREE_CODE (target) == TEMPLATE_ID_EXPR)
24632     {
24633       tmpl = TREE_OPERAND (target, 0);
24634       args = TREE_OPERAND (target, 1);
24635     }
24636   else if (VAR_P (target))
24637     {
24638       tree tinfo = DECL_TEMPLATE_INFO (target);
24639       tmpl = TI_TEMPLATE (tinfo);
24640       args = TI_ARGS (tinfo);
24641     }
24642   else
24643     gcc_unreachable ();
24644
24645   tree main_tmpl = most_general_template (tmpl);
24646
24647   /* For determining which partial specialization to use, only the
24648      innermost args are interesting.  */
24649   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
24650     {
24651       outer_args = strip_innermost_template_args (args, 1);
24652       args = INNERMOST_TEMPLATE_ARGS (args);
24653     }
24654
24655   /* The caller hasn't called push_to_top_level yet, but we need
24656      get_partial_spec_bindings to be done in non-template context so that we'll
24657      fully resolve everything.  */
24658   processing_template_decl_sentinel ptds;
24659
24660   for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
24661     {
24662       const tree ospec_tmpl = TREE_VALUE (t);
24663
24664       tree spec_tmpl;
24665       if (outer_args)
24666         {
24667           /* Substitute in the template args from the enclosing class.  */
24668           ++processing_template_decl;
24669           spec_tmpl = tsubst (ospec_tmpl, outer_args, tf_none, NULL_TREE);
24670           --processing_template_decl;
24671           if (spec_tmpl == error_mark_node)
24672             return error_mark_node;
24673         }
24674       else
24675         spec_tmpl = ospec_tmpl;
24676
24677       tree spec_args = get_partial_spec_bindings (tmpl, spec_tmpl, args);
24678       if (spec_args)
24679         {
24680           if (outer_args)
24681             spec_args = add_to_template_args (outer_args, spec_args);
24682
24683           /* Keep the candidate only if the constraints are satisfied,
24684              or if we're not compiling with concepts.  */
24685           if (!flag_concepts
24686               || constraints_satisfied_p (ospec_tmpl, spec_args))
24687             {
24688               list = tree_cons (spec_args, ospec_tmpl, list);
24689               TREE_TYPE (list) = TREE_TYPE (t);
24690             }
24691         }
24692     }
24693
24694   if (! list)
24695     return NULL_TREE;
24696
24697   ambiguous_p = false;
24698   t = list;
24699   champ = t;
24700   t = TREE_CHAIN (t);
24701   for (; t; t = TREE_CHAIN (t))
24702     {
24703       fate = more_specialized_partial_spec (tmpl, champ, t);
24704       if (fate == 1)
24705         ;
24706       else
24707         {
24708           if (fate == 0)
24709             {
24710               t = TREE_CHAIN (t);
24711               if (! t)
24712                 {
24713                   ambiguous_p = true;
24714                   break;
24715                 }
24716             }
24717           champ = t;
24718         }
24719     }
24720
24721   if (!ambiguous_p)
24722     for (t = list; t && t != champ; t = TREE_CHAIN (t))
24723       {
24724         fate = more_specialized_partial_spec (tmpl, champ, t);
24725         if (fate != 1)
24726           {
24727             ambiguous_p = true;
24728             break;
24729           }
24730       }
24731
24732   if (ambiguous_p)
24733     {
24734       const char *str;
24735       char *spaces = NULL;
24736       if (!(complain & tf_error))
24737         return error_mark_node;
24738       if (TYPE_P (target))
24739         error ("ambiguous template instantiation for %q#T", target);
24740       else
24741         error ("ambiguous template instantiation for %q#D", target);
24742       str = ngettext ("candidate is:", "candidates are:", list_length (list));
24743       for (t = list; t; t = TREE_CHAIN (t))
24744         {
24745           tree subst = build_tree_list (TREE_VALUE (t), TREE_PURPOSE (t));
24746           inform (DECL_SOURCE_LOCATION (TREE_VALUE (t)),
24747                   "%s %#qS", spaces ? spaces : str, subst);
24748           spaces = spaces ? spaces : get_spaces (str);
24749         }
24750       free (spaces);
24751       return error_mark_node;
24752     }
24753
24754   return champ;
24755 }
24756
24757 /* Explicitly instantiate DECL.  */
24758
24759 void
24760 do_decl_instantiation (tree decl, tree storage)
24761 {
24762   tree result = NULL_TREE;
24763   int extern_p = 0;
24764
24765   if (!decl || decl == error_mark_node)
24766     /* An error occurred, for which grokdeclarator has already issued
24767        an appropriate message.  */
24768     return;
24769   else if (! DECL_LANG_SPECIFIC (decl))
24770     {
24771       error ("explicit instantiation of non-template %q#D", decl);
24772       return;
24773     }
24774   else if (DECL_DECLARED_CONCEPT_P (decl))
24775     {
24776       if (VAR_P (decl))
24777         error ("explicit instantiation of variable concept %q#D", decl);
24778       else
24779         error ("explicit instantiation of function concept %q#D", decl);
24780       return;
24781     }
24782
24783   bool var_templ = (DECL_TEMPLATE_INFO (decl)
24784                     && variable_template_p (DECL_TI_TEMPLATE (decl)));
24785
24786   if (VAR_P (decl) && !var_templ)
24787     {
24788       /* There is an asymmetry here in the way VAR_DECLs and
24789          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
24790          the latter, the DECL we get back will be marked as a
24791          template instantiation, and the appropriate
24792          DECL_TEMPLATE_INFO will be set up.  This does not happen for
24793          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
24794          should handle VAR_DECLs as it currently handles
24795          FUNCTION_DECLs.  */
24796       if (!DECL_CLASS_SCOPE_P (decl))
24797         {
24798           error ("%qD is not a static data member of a class template", decl);
24799           return;
24800         }
24801       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
24802       if (!result || !VAR_P (result))
24803         {
24804           error ("no matching template for %qD found", decl);
24805           return;
24806         }
24807       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
24808         {
24809           error ("type %qT for explicit instantiation %qD does not match "
24810                  "declared type %qT", TREE_TYPE (result), decl,
24811                  TREE_TYPE (decl));
24812           return;
24813         }
24814     }
24815   else if (TREE_CODE (decl) != FUNCTION_DECL && !var_templ)
24816     {
24817       error ("explicit instantiation of %q#D", decl);
24818       return;
24819     }
24820   else
24821     result = decl;
24822
24823   /* Check for various error cases.  Note that if the explicit
24824      instantiation is valid the RESULT will currently be marked as an
24825      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
24826      until we get here.  */
24827
24828   if (DECL_TEMPLATE_SPECIALIZATION (result))
24829     {
24830       /* DR 259 [temp.spec].
24831
24832          Both an explicit instantiation and a declaration of an explicit
24833          specialization shall not appear in a program unless the explicit
24834          instantiation follows a declaration of the explicit specialization.
24835
24836          For a given set of template parameters, if an explicit
24837          instantiation of a template appears after a declaration of an
24838          explicit specialization for that template, the explicit
24839          instantiation has no effect.  */
24840       return;
24841     }
24842   else if (DECL_EXPLICIT_INSTANTIATION (result))
24843     {
24844       /* [temp.spec]
24845
24846          No program shall explicitly instantiate any template more
24847          than once.
24848
24849          We check DECL_NOT_REALLY_EXTERN so as not to complain when
24850          the first instantiation was `extern' and the second is not,
24851          and EXTERN_P for the opposite case.  */
24852       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
24853         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
24854       /* If an "extern" explicit instantiation follows an ordinary
24855          explicit instantiation, the template is instantiated.  */
24856       if (extern_p)
24857         return;
24858     }
24859   else if (!DECL_IMPLICIT_INSTANTIATION (result))
24860     {
24861       error ("no matching template for %qD found", result);
24862       return;
24863     }
24864   else if (!DECL_TEMPLATE_INFO (result))
24865     {
24866       permerror (input_location, "explicit instantiation of non-template %q#D", result);
24867       return;
24868     }
24869
24870   if (storage == NULL_TREE)
24871     ;
24872   else if (storage == ridpointers[(int) RID_EXTERN])
24873     {
24874       if (cxx_dialect == cxx98)
24875         pedwarn (input_location, OPT_Wpedantic,
24876                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
24877                  "instantiations");
24878       extern_p = 1;
24879     }
24880   else
24881     error ("storage class %qD applied to template instantiation", storage);
24882
24883   check_explicit_instantiation_namespace (result);
24884   mark_decl_instantiated (result, extern_p);
24885   if (! extern_p)
24886     instantiate_decl (result, /*defer_ok=*/true,
24887                       /*expl_inst_class_mem_p=*/false);
24888 }
24889
24890 static void
24891 mark_class_instantiated (tree t, int extern_p)
24892 {
24893   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
24894   SET_CLASSTYPE_INTERFACE_KNOWN (t);
24895   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
24896   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
24897   if (! extern_p)
24898     {
24899       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
24900       rest_of_type_compilation (t, 1);
24901     }
24902 }
24903
24904 /* Called from do_type_instantiation through binding_table_foreach to
24905    do recursive instantiation for the type bound in ENTRY.  */
24906 static void
24907 bt_instantiate_type_proc (binding_entry entry, void *data)
24908 {
24909   tree storage = *(tree *) data;
24910
24911   if (MAYBE_CLASS_TYPE_P (entry->type)
24912       && CLASSTYPE_TEMPLATE_INFO (entry->type)
24913       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
24914     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
24915 }
24916
24917 /* Perform an explicit instantiation of template class T.  STORAGE, if
24918    non-null, is the RID for extern, inline or static.  COMPLAIN is
24919    nonzero if this is called from the parser, zero if called recursively,
24920    since the standard is unclear (as detailed below).  */
24921
24922 void
24923 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
24924 {
24925   int extern_p = 0;
24926   int nomem_p = 0;
24927   int static_p = 0;
24928   int previous_instantiation_extern_p = 0;
24929
24930   if (TREE_CODE (t) == TYPE_DECL)
24931     t = TREE_TYPE (t);
24932
24933   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
24934     {
24935       tree tmpl =
24936         (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
24937       if (tmpl)
24938         error ("explicit instantiation of non-class template %qD", tmpl);
24939       else
24940         error ("explicit instantiation of non-template type %qT", t);
24941       return;
24942     }
24943
24944   complete_type (t);
24945
24946   if (!COMPLETE_TYPE_P (t))
24947     {
24948       if (complain & tf_error)
24949         error ("explicit instantiation of %q#T before definition of template",
24950                t);
24951       return;
24952     }
24953
24954   if (storage != NULL_TREE)
24955     {
24956       if (storage == ridpointers[(int) RID_EXTERN])
24957         {
24958           if (cxx_dialect == cxx98)
24959             pedwarn (input_location, OPT_Wpedantic,
24960                      "ISO C++ 1998 forbids the use of %<extern%> on "
24961                      "explicit instantiations");
24962         }
24963       else
24964         pedwarn (input_location, OPT_Wpedantic,
24965                  "ISO C++ forbids the use of %qE"
24966                  " on explicit instantiations", storage);
24967
24968       if (storage == ridpointers[(int) RID_INLINE])
24969         nomem_p = 1;
24970       else if (storage == ridpointers[(int) RID_EXTERN])
24971         extern_p = 1;
24972       else if (storage == ridpointers[(int) RID_STATIC])
24973         static_p = 1;
24974       else
24975         {
24976           error ("storage class %qD applied to template instantiation",
24977                  storage);
24978           extern_p = 0;
24979         }
24980     }
24981
24982   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
24983     {
24984       /* DR 259 [temp.spec].
24985
24986          Both an explicit instantiation and a declaration of an explicit
24987          specialization shall not appear in a program unless the explicit
24988          instantiation follows a declaration of the explicit specialization.
24989
24990          For a given set of template parameters, if an explicit
24991          instantiation of a template appears after a declaration of an
24992          explicit specialization for that template, the explicit
24993          instantiation has no effect.  */
24994       return;
24995     }
24996   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
24997     {
24998       /* [temp.spec]
24999
25000          No program shall explicitly instantiate any template more
25001          than once.
25002
25003          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
25004          instantiation was `extern'.  If EXTERN_P then the second is.
25005          These cases are OK.  */
25006       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
25007
25008       if (!previous_instantiation_extern_p && !extern_p
25009           && (complain & tf_error))
25010         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
25011
25012       /* If we've already instantiated the template, just return now.  */
25013       if (!CLASSTYPE_INTERFACE_ONLY (t))
25014         return;
25015     }
25016
25017   check_explicit_instantiation_namespace (TYPE_NAME (t));
25018   mark_class_instantiated (t, extern_p);
25019
25020   if (nomem_p)
25021     return;
25022
25023   /* In contrast to implicit instantiation, where only the
25024      declarations, and not the definitions, of members are
25025      instantiated, we have here:
25026
25027          [temp.explicit]
25028
25029          An explicit instantiation that names a class template
25030          specialization is also an explicit instantiation of the same
25031          kind (declaration or definition) of each of its members (not
25032          including members inherited from base classes and members
25033          that are templates) that has not been previously explicitly
25034          specialized in the translation unit containing the explicit
25035          instantiation, provided that the associated constraints, if
25036          any, of that member are satisfied by the template arguments
25037          of the explicit instantiation.  */
25038   for (tree fld = TYPE_FIELDS (t); fld; fld = DECL_CHAIN (fld))
25039     if ((VAR_P (fld)
25040          || (TREE_CODE (fld) == FUNCTION_DECL
25041              && !static_p
25042              && user_provided_p (fld)))
25043         && DECL_TEMPLATE_INSTANTIATION (fld)
25044         && constraints_satisfied_p (fld))
25045       {
25046         mark_decl_instantiated (fld, extern_p);
25047         if (! extern_p)
25048           instantiate_decl (fld, /*defer_ok=*/true,
25049                             /*expl_inst_class_mem_p=*/true);
25050       }
25051
25052   if (CLASSTYPE_NESTED_UTDS (t))
25053     binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
25054                            bt_instantiate_type_proc, &storage);
25055 }
25056
25057 /* Given a function DECL, which is a specialization of TMPL, modify
25058    DECL to be a re-instantiation of TMPL with the same template
25059    arguments.  TMPL should be the template into which tsubst'ing
25060    should occur for DECL, not the most general template.
25061
25062    One reason for doing this is a scenario like this:
25063
25064      template <class T>
25065      void f(const T&, int i);
25066
25067      void g() { f(3, 7); }
25068
25069      template <class T>
25070      void f(const T& t, const int i) { }
25071
25072    Note that when the template is first instantiated, with
25073    instantiate_template, the resulting DECL will have no name for the
25074    first parameter, and the wrong type for the second.  So, when we go
25075    to instantiate the DECL, we regenerate it.  */
25076
25077 static void
25078 regenerate_decl_from_template (tree decl, tree tmpl, tree args)
25079 {
25080   /* The arguments used to instantiate DECL, from the most general
25081      template.  */
25082   tree code_pattern;
25083
25084   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
25085
25086   /* Make sure that we can see identifiers, and compute access
25087      correctly.  */
25088   push_access_scope (decl);
25089
25090   if (TREE_CODE (decl) == FUNCTION_DECL)
25091     {
25092       tree decl_parm;
25093       tree pattern_parm;
25094       tree specs;
25095       int args_depth;
25096       int parms_depth;
25097
25098       args_depth = TMPL_ARGS_DEPTH (args);
25099       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
25100       if (args_depth > parms_depth)
25101         args = get_innermost_template_args (args, parms_depth);
25102
25103       /* Instantiate a dynamic exception-specification.  noexcept will be
25104          handled below.  */
25105       if (tree raises = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (code_pattern)))
25106         if (TREE_VALUE (raises))
25107           {
25108             specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
25109                                                     args, tf_error, NULL_TREE,
25110                                                     /*defer_ok*/false);
25111             if (specs && specs != error_mark_node)
25112               TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
25113                                                           specs);
25114           }
25115
25116       /* Merge parameter declarations.  */
25117       decl_parm = skip_artificial_parms_for (decl,
25118                                              DECL_ARGUMENTS (decl));
25119       pattern_parm
25120         = skip_artificial_parms_for (code_pattern,
25121                                      DECL_ARGUMENTS (code_pattern));
25122       while (decl_parm && !DECL_PACK_P (pattern_parm))
25123         {
25124           tree parm_type;
25125           tree attributes;
25126
25127           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
25128             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
25129           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
25130                               NULL_TREE);
25131           parm_type = type_decays_to (parm_type);
25132           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
25133             TREE_TYPE (decl_parm) = parm_type;
25134           attributes = DECL_ATTRIBUTES (pattern_parm);
25135           if (DECL_ATTRIBUTES (decl_parm) != attributes)
25136             {
25137               DECL_ATTRIBUTES (decl_parm) = attributes;
25138               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
25139             }
25140           decl_parm = DECL_CHAIN (decl_parm);
25141           pattern_parm = DECL_CHAIN (pattern_parm);
25142         }
25143       /* Merge any parameters that match with the function parameter
25144          pack.  */
25145       if (pattern_parm && DECL_PACK_P (pattern_parm))
25146         {
25147           int i, len;
25148           tree expanded_types;
25149           /* Expand the TYPE_PACK_EXPANSION that provides the types for
25150              the parameters in this function parameter pack.  */
25151           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
25152                                                  args, tf_error, NULL_TREE);
25153           len = TREE_VEC_LENGTH (expanded_types);
25154           for (i = 0; i < len; i++)
25155             {
25156               tree parm_type;
25157               tree attributes;
25158
25159               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
25160                 /* Rename the parameter to include the index.  */
25161                 DECL_NAME (decl_parm) = 
25162                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
25163               parm_type = TREE_VEC_ELT (expanded_types, i);
25164               parm_type = type_decays_to (parm_type);
25165               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
25166                 TREE_TYPE (decl_parm) = parm_type;
25167               attributes = DECL_ATTRIBUTES (pattern_parm);
25168               if (DECL_ATTRIBUTES (decl_parm) != attributes)
25169                 {
25170                   DECL_ATTRIBUTES (decl_parm) = attributes;
25171                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
25172                 }
25173               decl_parm = DECL_CHAIN (decl_parm);
25174             }
25175         }
25176       /* Merge additional specifiers from the CODE_PATTERN.  */
25177       if (DECL_DECLARED_INLINE_P (code_pattern)
25178           && !DECL_DECLARED_INLINE_P (decl))
25179         DECL_DECLARED_INLINE_P (decl) = 1;
25180
25181       maybe_instantiate_noexcept (decl, tf_error);
25182     }
25183   else if (VAR_P (decl))
25184     {
25185       start_lambda_scope (decl);
25186       DECL_INITIAL (decl) =
25187         tsubst_init (DECL_INITIAL (code_pattern), decl, args,
25188                      tf_error, DECL_TI_TEMPLATE (decl));
25189       finish_lambda_scope ();
25190       if (VAR_HAD_UNKNOWN_BOUND (decl))
25191         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
25192                                    tf_error, DECL_TI_TEMPLATE (decl));
25193     }
25194   else
25195     gcc_unreachable ();
25196
25197   pop_access_scope (decl);
25198 }
25199
25200 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
25201    substituted to get DECL.  */
25202
25203 tree
25204 template_for_substitution (tree decl)
25205 {
25206   tree tmpl = DECL_TI_TEMPLATE (decl);
25207
25208   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
25209      for the instantiation.  This is not always the most general
25210      template.  Consider, for example:
25211
25212         template <class T>
25213         struct S { template <class U> void f();
25214                    template <> void f<int>(); };
25215
25216      and an instantiation of S<double>::f<int>.  We want TD to be the
25217      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
25218   while (/* An instantiation cannot have a definition, so we need a
25219             more general template.  */
25220          DECL_TEMPLATE_INSTANTIATION (tmpl)
25221            /* We must also deal with friend templates.  Given:
25222
25223                 template <class T> struct S {
25224                   template <class U> friend void f() {};
25225                 };
25226
25227               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
25228               so far as the language is concerned, but that's still
25229               where we get the pattern for the instantiation from.  On
25230               other hand, if the definition comes outside the class, say:
25231
25232                 template <class T> struct S {
25233                   template <class U> friend void f();
25234                 };
25235                 template <class U> friend void f() {}
25236
25237               we don't need to look any further.  That's what the check for
25238               DECL_INITIAL is for.  */
25239           || (TREE_CODE (decl) == FUNCTION_DECL
25240               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
25241               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
25242     {
25243       /* The present template, TD, should not be a definition.  If it
25244          were a definition, we should be using it!  Note that we
25245          cannot restructure the loop to just keep going until we find
25246          a template with a definition, since that might go too far if
25247          a specialization was declared, but not defined.  */
25248
25249       /* Fetch the more general template.  */
25250       tmpl = DECL_TI_TEMPLATE (tmpl);
25251     }
25252
25253   return tmpl;
25254 }
25255
25256 /* Returns true if we need to instantiate this template instance even if we
25257    know we aren't going to emit it.  */
25258
25259 bool
25260 always_instantiate_p (tree decl)
25261 {
25262   /* We always instantiate inline functions so that we can inline them.  An
25263      explicit instantiation declaration prohibits implicit instantiation of
25264      non-inline functions.  With high levels of optimization, we would
25265      normally inline non-inline functions -- but we're not allowed to do
25266      that for "extern template" functions.  Therefore, we check
25267      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
25268   return ((TREE_CODE (decl) == FUNCTION_DECL
25269            && (DECL_DECLARED_INLINE_P (decl)
25270                || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
25271           /* And we need to instantiate static data members so that
25272              their initializers are available in integral constant
25273              expressions.  */
25274           || (VAR_P (decl)
25275               && decl_maybe_constant_var_p (decl)));
25276 }
25277
25278 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
25279    instantiate it now, modifying TREE_TYPE (fn).  Returns false on
25280    error, true otherwise.  */
25281
25282 bool
25283 maybe_instantiate_noexcept (tree fn, tsubst_flags_t complain)
25284 {
25285   tree fntype, spec, noex;
25286
25287   /* Don't instantiate a noexcept-specification from template context.  */
25288   if (processing_template_decl
25289       && (!flag_noexcept_type || type_dependent_expression_p (fn)))
25290     return true;
25291
25292   if (DECL_MAYBE_DELETED (fn))
25293     {
25294       if (fn == current_function_decl)
25295         /* We're in start_preparsed_function, keep going.  */
25296         return true;
25297
25298       ++function_depth;
25299       synthesize_method (fn);
25300       --function_depth;
25301       return !DECL_MAYBE_DELETED (fn);
25302     }
25303
25304   fntype = TREE_TYPE (fn);
25305   spec = TYPE_RAISES_EXCEPTIONS (fntype);
25306
25307   if (!spec || !TREE_PURPOSE (spec))
25308     return true;
25309
25310   noex = TREE_PURPOSE (spec);
25311   if (TREE_CODE (noex) != DEFERRED_NOEXCEPT
25312       && TREE_CODE (noex) != DEFERRED_PARSE)
25313     return true;
25314
25315   tree orig_fn = NULL_TREE;
25316   /* For a member friend template we can get a TEMPLATE_DECL.  Let's use
25317      its FUNCTION_DECL for the rest of this function -- push_access_scope
25318      doesn't accept TEMPLATE_DECLs.  */
25319   if (DECL_FUNCTION_TEMPLATE_P (fn))
25320     {
25321       orig_fn = fn;
25322       fn = DECL_TEMPLATE_RESULT (fn);
25323     }
25324
25325   if (DECL_CLONED_FUNCTION_P (fn))
25326     {
25327       tree prime = DECL_CLONED_FUNCTION (fn);
25328       if (!maybe_instantiate_noexcept (prime, complain))
25329         return false;
25330       spec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (prime));
25331     }
25332   else if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
25333     {
25334       static hash_set<tree>* fns = new hash_set<tree>;
25335       bool added = false;
25336       if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
25337         {
25338           spec = get_defaulted_eh_spec (fn, complain);
25339           if (spec == error_mark_node)
25340             /* This might have failed because of an unparsed DMI, so
25341                let's try again later.  */
25342             return false;
25343         }
25344       else if (!(added = !fns->add (fn)))
25345         {
25346           /* If hash_set::add returns true, the element was already there.  */
25347           location_t loc = cp_expr_loc_or_loc (DEFERRED_NOEXCEPT_PATTERN (noex),
25348                                             DECL_SOURCE_LOCATION (fn));
25349           error_at (loc,
25350                     "exception specification of %qD depends on itself",
25351                     fn);
25352           spec = noexcept_false_spec;
25353         }
25354       else if (push_tinst_level (fn))
25355         {
25356           push_to_top_level ();
25357           push_access_scope (fn);
25358           push_deferring_access_checks (dk_no_deferred);
25359           input_location = DECL_SOURCE_LOCATION (fn);
25360
25361           /* If needed, set current_class_ptr for the benefit of
25362              tsubst_copy/PARM_DECL.  */
25363           tree tdecl = DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (fn));
25364           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (tdecl))
25365             {
25366               tree this_parm = DECL_ARGUMENTS (tdecl);
25367               current_class_ptr = NULL_TREE;
25368               current_class_ref = cp_build_fold_indirect_ref (this_parm);
25369               current_class_ptr = this_parm;
25370             }
25371
25372           /* If this function is represented by a TEMPLATE_DECL, then
25373              the deferred noexcept-specification might still contain
25374              dependent types, even after substitution.  And we need the
25375              dependency check functions to work in build_noexcept_spec.  */
25376           if (orig_fn)
25377             ++processing_template_decl;
25378
25379           /* Do deferred instantiation of the noexcept-specifier.  */
25380           noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
25381                                         DEFERRED_NOEXCEPT_ARGS (noex),
25382                                         tf_warning_or_error, fn,
25383                                         /*function_p=*/false,
25384                                         /*i_c_e_p=*/true);
25385
25386           /* Build up the noexcept-specification.  */
25387           spec = build_noexcept_spec (noex, tf_warning_or_error);
25388
25389           if (orig_fn)
25390             --processing_template_decl;
25391
25392           pop_deferring_access_checks ();
25393           pop_access_scope (fn);
25394           pop_tinst_level ();
25395           pop_from_top_level ();
25396         }
25397       else
25398         spec = noexcept_false_spec;
25399
25400       if (added)
25401         fns->remove (fn);
25402     }
25403
25404   if (spec == error_mark_node)
25405     {
25406       /* This failed with a hard error, so let's go with false.  */
25407       gcc_assert (seen_error ());
25408       spec = noexcept_false_spec;
25409     }
25410
25411   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
25412   if (orig_fn)
25413     TREE_TYPE (orig_fn) = TREE_TYPE (fn);
25414
25415   return true;
25416 }
25417
25418 /* We're starting to process the function INST, an instantiation of PATTERN;
25419    add their parameters to local_specializations.  */
25420
25421 static void
25422 register_parameter_specializations (tree pattern, tree inst)
25423 {
25424   tree tmpl_parm = DECL_ARGUMENTS (pattern);
25425   tree spec_parm = DECL_ARGUMENTS (inst);
25426   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (inst))
25427     {
25428       register_local_specialization (spec_parm, tmpl_parm);
25429       spec_parm = skip_artificial_parms_for (inst, spec_parm);
25430       tmpl_parm = skip_artificial_parms_for (pattern, tmpl_parm);
25431     }
25432   for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
25433     {
25434       if (!DECL_PACK_P (tmpl_parm)
25435           || (spec_parm && DECL_PACK_P (spec_parm)))
25436         {
25437           register_local_specialization (spec_parm, tmpl_parm);
25438           spec_parm = DECL_CHAIN (spec_parm);
25439         }
25440       else
25441         {
25442           /* Register the (value) argument pack as a specialization of
25443              TMPL_PARM, then move on.  */
25444           tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
25445           register_local_specialization (argpack, tmpl_parm);
25446         }
25447     }
25448   gcc_assert (!spec_parm);
25449 }
25450
25451 /* Produce the definition of D, a _DECL generated from a template.  If
25452    DEFER_OK is true, then we don't have to actually do the
25453    instantiation now; we just have to do it sometime.  Normally it is
25454    an error if this is an explicit instantiation but D is undefined.
25455    EXPL_INST_CLASS_MEM_P is true iff D is a member of an explicitly
25456    instantiated class template.  */
25457
25458 tree
25459 instantiate_decl (tree d, bool defer_ok, bool expl_inst_class_mem_p)
25460 {
25461   tree tmpl = DECL_TI_TEMPLATE (d);
25462   tree gen_args;
25463   tree args;
25464   tree td;
25465   tree code_pattern;
25466   tree spec;
25467   tree gen_tmpl;
25468   bool pattern_defined;
25469   location_t saved_loc = input_location;
25470   int saved_unevaluated_operand = cp_unevaluated_operand;
25471   int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
25472   bool external_p;
25473   bool deleted_p;
25474
25475   /* This function should only be used to instantiate templates for
25476      functions and static member variables.  */
25477   gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
25478
25479   /* A concept is never instantiated. */
25480   gcc_assert (!DECL_DECLARED_CONCEPT_P (d));
25481
25482   /* Variables are never deferred; if instantiation is required, they
25483      are instantiated right away.  That allows for better code in the
25484      case that an expression refers to the value of the variable --
25485      if the variable has a constant value the referring expression can
25486      take advantage of that fact.  */
25487   if (VAR_P (d))
25488     defer_ok = false;
25489
25490   /* Don't instantiate cloned functions.  Instead, instantiate the
25491      functions they cloned.  */
25492   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
25493     d = DECL_CLONED_FUNCTION (d);
25494
25495   if (DECL_TEMPLATE_INSTANTIATED (d)
25496       || TREE_TYPE (d) == error_mark_node
25497       || (TREE_CODE (d) == FUNCTION_DECL
25498           && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
25499       || DECL_TEMPLATE_SPECIALIZATION (d))
25500     /* D has already been instantiated or explicitly specialized, so
25501        there's nothing for us to do here.
25502
25503        It might seem reasonable to check whether or not D is an explicit
25504        instantiation, and, if so, stop here.  But when an explicit
25505        instantiation is deferred until the end of the compilation,
25506        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
25507        the instantiation.  */
25508     return d;
25509
25510   /* Check to see whether we know that this template will be
25511      instantiated in some other file, as with "extern template"
25512      extension.  */
25513   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
25514
25515   /* In general, we do not instantiate such templates.  */
25516   if (external_p && !always_instantiate_p (d))
25517     return d;
25518
25519   gen_tmpl = most_general_template (tmpl);
25520   gen_args = DECL_TI_ARGS (d);
25521
25522   /* We should already have the extra args.  */
25523   gcc_checking_assert (tmpl == gen_tmpl
25524                        || (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
25525                            == TMPL_ARGS_DEPTH (gen_args)));
25526   /* And what's in the hash table should match D.  */
25527   gcc_checking_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0))
25528                        == d
25529                        || spec == NULL_TREE);
25530
25531   /* This needs to happen before any tsubsting.  */
25532   if (! push_tinst_level (d))
25533     return d;
25534
25535   timevar_push (TV_TEMPLATE_INST);
25536
25537   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
25538      for the instantiation.  */
25539   td = template_for_substitution (d);
25540   args = gen_args;
25541
25542   if (VAR_P (d))
25543     {
25544       /* Look up an explicit specialization, if any.  */
25545       tree tid = lookup_template_variable (gen_tmpl, gen_args);
25546       tree elt = most_specialized_partial_spec (tid, tf_warning_or_error);
25547       if (elt && elt != error_mark_node)
25548         {
25549           td = TREE_VALUE (elt);
25550           args = TREE_PURPOSE (elt);
25551         }
25552     }
25553
25554   code_pattern = DECL_TEMPLATE_RESULT (td);
25555
25556   /* We should never be trying to instantiate a member of a class
25557      template or partial specialization.  */
25558   gcc_assert (d != code_pattern);
25559
25560   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
25561       || DECL_TEMPLATE_SPECIALIZATION (td))
25562     /* In the case of a friend template whose definition is provided
25563        outside the class, we may have too many arguments.  Drop the
25564        ones we don't need.  The same is true for specializations.  */
25565     args = get_innermost_template_args
25566       (args, TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (td)));
25567
25568   if (TREE_CODE (d) == FUNCTION_DECL)
25569     {
25570       deleted_p = DECL_DELETED_FN (code_pattern);
25571       pattern_defined = ((DECL_SAVED_TREE (code_pattern) != NULL_TREE
25572                           && DECL_INITIAL (code_pattern) != error_mark_node)
25573                          || DECL_DEFAULTED_FN (code_pattern)
25574                          || deleted_p);
25575     }
25576   else
25577     {
25578       deleted_p = false;
25579       if (DECL_CLASS_SCOPE_P (code_pattern))
25580         pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
25581       else
25582         pattern_defined = ! DECL_EXTERNAL (code_pattern);
25583     }
25584
25585   /* We may be in the middle of deferred access check.  Disable it now.  */
25586   push_deferring_access_checks (dk_no_deferred);
25587
25588   /* Unless an explicit instantiation directive has already determined
25589      the linkage of D, remember that a definition is available for
25590      this entity.  */
25591   if (pattern_defined
25592       && !DECL_INTERFACE_KNOWN (d)
25593       && !DECL_NOT_REALLY_EXTERN (d))
25594     mark_definable (d);
25595
25596   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
25597   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
25598   input_location = DECL_SOURCE_LOCATION (d);
25599
25600   /* If D is a member of an explicitly instantiated class template,
25601      and no definition is available, treat it like an implicit
25602      instantiation.  */
25603   if (!pattern_defined && expl_inst_class_mem_p
25604       && DECL_EXPLICIT_INSTANTIATION (d))
25605     {
25606       /* Leave linkage flags alone on instantiations with anonymous
25607          visibility.  */
25608       if (TREE_PUBLIC (d))
25609         {
25610           DECL_NOT_REALLY_EXTERN (d) = 0;
25611           DECL_INTERFACE_KNOWN (d) = 0;
25612         }
25613       SET_DECL_IMPLICIT_INSTANTIATION (d);
25614     }
25615
25616   /* Defer all other templates, unless we have been explicitly
25617      forbidden from doing so.  */
25618   if (/* If there is no definition, we cannot instantiate the
25619          template.  */
25620       ! pattern_defined
25621       /* If it's OK to postpone instantiation, do so.  */
25622       || defer_ok
25623       /* If this is a static data member that will be defined
25624          elsewhere, we don't want to instantiate the entire data
25625          member, but we do want to instantiate the initializer so that
25626          we can substitute that elsewhere.  */
25627       || (external_p && VAR_P (d))
25628       /* Handle here a deleted function too, avoid generating
25629          its body (c++/61080).  */
25630       || deleted_p)
25631     {
25632       /* The definition of the static data member is now required so
25633          we must substitute the initializer.  */
25634       if (VAR_P (d)
25635           && !DECL_INITIAL (d)
25636           && DECL_INITIAL (code_pattern))
25637         {
25638           tree ns;
25639           tree init;
25640           bool const_init = false;
25641           bool enter_context = DECL_CLASS_SCOPE_P (d);
25642
25643           ns = decl_namespace_context (d);
25644           push_nested_namespace (ns);
25645           if (enter_context)
25646             push_nested_class (DECL_CONTEXT (d));
25647           init = tsubst_expr (DECL_INITIAL (code_pattern),
25648                               args,
25649                               tf_warning_or_error, NULL_TREE,
25650                               /*integral_constant_expression_p=*/false);
25651           /* If instantiating the initializer involved instantiating this
25652              again, don't call cp_finish_decl twice.  */
25653           if (!DECL_INITIAL (d))
25654             {
25655               /* Make sure the initializer is still constant, in case of
25656                  circular dependency (template/instantiate6.C). */
25657               const_init
25658                 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
25659               cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
25660                               /*asmspec_tree=*/NULL_TREE,
25661                               LOOKUP_ONLYCONVERTING);
25662             }
25663           if (enter_context)
25664             pop_nested_class ();
25665           pop_nested_namespace (ns);
25666         }
25667
25668       /* We restore the source position here because it's used by
25669          add_pending_template.  */
25670       input_location = saved_loc;
25671
25672       if (at_eof && !pattern_defined
25673           && DECL_EXPLICIT_INSTANTIATION (d)
25674           && DECL_NOT_REALLY_EXTERN (d))
25675         /* [temp.explicit]
25676
25677            The definition of a non-exported function template, a
25678            non-exported member function template, or a non-exported
25679            member function or static data member of a class template
25680            shall be present in every translation unit in which it is
25681            explicitly instantiated.  */
25682         permerror (input_location,  "explicit instantiation of %qD "
25683                    "but no definition available", d);
25684
25685       /* If we're in unevaluated context, we just wanted to get the
25686          constant value; this isn't an odr use, so don't queue
25687          a full instantiation.  */
25688       if (cp_unevaluated_operand != 0)
25689         goto out;
25690       /* ??? Historically, we have instantiated inline functions, even
25691          when marked as "extern template".  */
25692       if (!(external_p && VAR_P (d)))
25693         add_pending_template (d);
25694       goto out;
25695     }
25696
25697   bool push_to_top, nested;
25698   tree fn_context;
25699   fn_context = decl_function_context (d);
25700   if (LAMBDA_FUNCTION_P (d))
25701     /* tsubst_lambda_expr resolved any references to enclosing functions.  */
25702     fn_context = NULL_TREE;
25703   nested = current_function_decl != NULL_TREE;
25704   push_to_top = !(nested && fn_context == current_function_decl);
25705
25706   vec<tree> omp_privatization_save;
25707   if (nested)
25708     save_omp_privatization_clauses (omp_privatization_save);
25709
25710   if (push_to_top)
25711     push_to_top_level ();
25712   else
25713     {
25714       gcc_assert (!processing_template_decl);
25715       push_function_context ();
25716       cp_unevaluated_operand = 0;
25717       c_inhibit_evaluation_warnings = 0;
25718     }
25719
25720   if (VAR_P (d))
25721     {
25722       /* The variable might be a lambda's extra scope, and that
25723          lambda's visibility depends on D's.  */
25724       maybe_commonize_var (d);
25725       determine_visibility (d);
25726     }
25727
25728   /* Mark D as instantiated so that recursive calls to
25729      instantiate_decl do not try to instantiate it again.  */
25730   DECL_TEMPLATE_INSTANTIATED (d) = 1;
25731
25732   /* Regenerate the declaration in case the template has been modified
25733      by a subsequent redeclaration.  */
25734   regenerate_decl_from_template (d, td, args);
25735
25736   /* We already set the file and line above.  Reset them now in case
25737      they changed as a result of calling regenerate_decl_from_template.  */
25738   input_location = DECL_SOURCE_LOCATION (d);
25739
25740   if (VAR_P (d))
25741     {
25742       tree init;
25743       bool const_init = false;
25744
25745       /* Clear out DECL_RTL; whatever was there before may not be right
25746          since we've reset the type of the declaration.  */
25747       SET_DECL_RTL (d, NULL);
25748       DECL_IN_AGGR_P (d) = 0;
25749
25750       /* The initializer is placed in DECL_INITIAL by
25751          regenerate_decl_from_template so we don't need to
25752          push/pop_access_scope again here.  Pull it out so that
25753          cp_finish_decl can process it.  */
25754       init = DECL_INITIAL (d);
25755       DECL_INITIAL (d) = NULL_TREE;
25756       DECL_INITIALIZED_P (d) = 0;
25757
25758       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
25759          initializer.  That function will defer actual emission until
25760          we have a chance to determine linkage.  */
25761       DECL_EXTERNAL (d) = 0;
25762
25763       /* Enter the scope of D so that access-checking works correctly.  */
25764       bool enter_context = DECL_CLASS_SCOPE_P (d);
25765       if (enter_context)
25766         push_nested_class (DECL_CONTEXT (d));
25767
25768       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
25769       int flags = (TINFO_VAR_DECLARED_CONSTINIT (DECL_TEMPLATE_INFO (d))
25770                    ? LOOKUP_CONSTINIT : 0);
25771       cp_finish_decl (d, init, const_init, NULL_TREE, flags);
25772
25773       if (enter_context)
25774         pop_nested_class ();
25775
25776       if (variable_template_p (gen_tmpl))
25777         note_variable_template_instantiation (d);
25778     }
25779   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
25780     synthesize_method (d);
25781   else if (TREE_CODE (d) == FUNCTION_DECL)
25782     {
25783       /* Set up the list of local specializations.  */
25784       local_specialization_stack lss (push_to_top ? lss_blank : lss_copy);
25785       tree block = NULL_TREE;
25786
25787       /* Set up context.  */
25788       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
25789           && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
25790         block = push_stmt_list ();
25791       else
25792         start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
25793
25794       perform_instantiation_time_access_checks (DECL_TEMPLATE_RESULT (td),
25795                                                 args);
25796
25797       /* Create substitution entries for the parameters.  */
25798       register_parameter_specializations (code_pattern, d);
25799
25800       /* Substitute into the body of the function.  */
25801       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
25802         tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
25803                         tf_warning_or_error, tmpl);
25804       else
25805         {
25806           tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
25807                        tf_warning_or_error, tmpl,
25808                        /*integral_constant_expression_p=*/false);
25809
25810           /* Set the current input_location to the end of the function
25811              so that finish_function knows where we are.  */
25812           input_location
25813             = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
25814
25815           /* Remember if we saw an infinite loop in the template.  */
25816           current_function_infinite_loop
25817             = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
25818         }
25819
25820       /* Finish the function.  */
25821       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
25822           && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
25823         DECL_SAVED_TREE (d) = pop_stmt_list (block);
25824       else
25825         {
25826           d = finish_function (/*inline_p=*/false);
25827           expand_or_defer_fn (d);
25828         }
25829
25830       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
25831         cp_check_omp_declare_reduction (d);
25832     }
25833
25834   /* We're not deferring instantiation any more.  */
25835   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
25836
25837   if (push_to_top)
25838     pop_from_top_level ();
25839   else
25840     pop_function_context ();
25841
25842   if (nested)
25843     restore_omp_privatization_clauses (omp_privatization_save);
25844
25845 out:
25846   pop_deferring_access_checks ();
25847   timevar_pop (TV_TEMPLATE_INST);
25848   pop_tinst_level ();
25849   input_location = saved_loc;
25850   cp_unevaluated_operand = saved_unevaluated_operand;
25851   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
25852
25853   return d;
25854 }
25855
25856 /* Run through the list of templates that we wish we could
25857    instantiate, and instantiate any we can.  RETRIES is the
25858    number of times we retry pending template instantiation.  */
25859
25860 void
25861 instantiate_pending_templates (int retries)
25862 {
25863   int reconsider;
25864   location_t saved_loc = input_location;
25865
25866   /* Instantiating templates may trigger vtable generation.  This in turn
25867      may require further template instantiations.  We place a limit here
25868      to avoid infinite loop.  */
25869   if (pending_templates && retries >= max_tinst_depth)
25870     {
25871       tree decl = pending_templates->tinst->maybe_get_node ();
25872
25873       fatal_error (input_location,
25874                    "template instantiation depth exceeds maximum of %d"
25875                    " instantiating %q+D, possibly from virtual table generation"
25876                    " (use %<-ftemplate-depth=%> to increase the maximum)",
25877                    max_tinst_depth, decl);
25878       if (TREE_CODE (decl) == FUNCTION_DECL)
25879         /* Pretend that we defined it.  */
25880         DECL_INITIAL (decl) = error_mark_node;
25881       return;
25882     }
25883
25884   do
25885     {
25886       struct pending_template **t = &pending_templates;
25887       struct pending_template *last = NULL;
25888       reconsider = 0;
25889       while (*t)
25890         {
25891           tree instantiation = reopen_tinst_level ((*t)->tinst);
25892           bool complete = false;
25893
25894           if (TYPE_P (instantiation))
25895             {
25896               if (!COMPLETE_TYPE_P (instantiation))
25897                 {
25898                   instantiate_class_template (instantiation);
25899                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
25900                     for (tree fld = TYPE_FIELDS (instantiation);
25901                          fld; fld = TREE_CHAIN (fld))
25902                       if ((VAR_P (fld)
25903                            || (TREE_CODE (fld) == FUNCTION_DECL
25904                                && !DECL_ARTIFICIAL (fld)))
25905                           && DECL_TEMPLATE_INSTANTIATION (fld))
25906                         instantiate_decl (fld,
25907                                           /*defer_ok=*/false,
25908                                           /*expl_inst_class_mem_p=*/false);
25909
25910                   if (COMPLETE_TYPE_P (instantiation))
25911                     reconsider = 1;
25912                 }
25913
25914               complete = COMPLETE_TYPE_P (instantiation);
25915             }
25916           else
25917             {
25918               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
25919                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
25920                 {
25921                   instantiation
25922                     = instantiate_decl (instantiation,
25923                                         /*defer_ok=*/false,
25924                                         /*expl_inst_class_mem_p=*/false);
25925                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
25926                     reconsider = 1;
25927                 }
25928
25929               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
25930                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
25931             }
25932
25933           if (complete)
25934             {
25935               /* If INSTANTIATION has been instantiated, then we don't
25936                  need to consider it again in the future.  */
25937               struct pending_template *drop = *t;
25938               *t = (*t)->next;
25939               set_refcount_ptr (drop->tinst);
25940               pending_template_freelist ().free (drop);
25941             }
25942           else
25943             {
25944               last = *t;
25945               t = &(*t)->next;
25946             }
25947           tinst_depth = 0;
25948           set_refcount_ptr (current_tinst_level);
25949         }
25950       last_pending_template = last;
25951     }
25952   while (reconsider);
25953
25954   input_location = saved_loc;
25955 }
25956
25957 /* Substitute ARGVEC into T, which is a list of initializers for
25958    either base class or a non-static data member.  The TREE_PURPOSEs
25959    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
25960    instantiate_decl.  */
25961
25962 static tree
25963 tsubst_initializer_list (tree t, tree argvec)
25964 {
25965   tree inits = NULL_TREE;
25966   tree target_ctor = error_mark_node;
25967
25968   for (; t; t = TREE_CHAIN (t))
25969     {
25970       tree decl;
25971       tree init;
25972       tree expanded_bases = NULL_TREE;
25973       tree expanded_arguments = NULL_TREE;
25974       int i, len = 1;
25975
25976       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
25977         {
25978           tree expr;
25979           tree arg;
25980
25981           /* Expand the base class expansion type into separate base
25982              classes.  */
25983           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
25984                                                  tf_warning_or_error,
25985                                                  NULL_TREE);
25986           if (expanded_bases == error_mark_node)
25987             continue;
25988
25989           /* We'll be building separate TREE_LISTs of arguments for
25990              each base.  */
25991           len = TREE_VEC_LENGTH (expanded_bases);
25992           expanded_arguments = make_tree_vec (len);
25993           for (i = 0; i < len; i++)
25994             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
25995
25996           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
25997              expand each argument in the TREE_VALUE of t.  */
25998           expr = make_node (EXPR_PACK_EXPANSION);
25999           PACK_EXPANSION_LOCAL_P (expr) = true;
26000           PACK_EXPANSION_PARAMETER_PACKS (expr) =
26001             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
26002
26003           if (TREE_VALUE (t) == void_type_node)
26004             /* VOID_TYPE_NODE is used to indicate
26005                value-initialization.  */
26006             {
26007               for (i = 0; i < len; i++)
26008                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
26009             }
26010           else
26011             {
26012               /* Substitute parameter packs into each argument in the
26013                  TREE_LIST.  */
26014               in_base_initializer = 1;
26015               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
26016                 {
26017                   tree expanded_exprs;
26018
26019                   /* Expand the argument.  */
26020                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
26021                   expanded_exprs
26022                     = tsubst_pack_expansion (expr, argvec,
26023                                              tf_warning_or_error,
26024                                              NULL_TREE);
26025                   if (expanded_exprs == error_mark_node)
26026                     continue;
26027
26028                   /* Prepend each of the expanded expressions to the
26029                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
26030                   for (i = 0; i < len; i++)
26031                     {
26032                       TREE_VEC_ELT (expanded_arguments, i) =
26033                         tree_cons (NULL_TREE,
26034                                    TREE_VEC_ELT (expanded_exprs, i),
26035                                    TREE_VEC_ELT (expanded_arguments, i));
26036                     }
26037                 }
26038               in_base_initializer = 0;
26039
26040               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
26041                  since we built them backwards.  */
26042               for (i = 0; i < len; i++)
26043                 {
26044                   TREE_VEC_ELT (expanded_arguments, i) =
26045                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
26046                 }
26047             }
26048         }
26049
26050       for (i = 0; i < len; ++i)
26051         {
26052           if (expanded_bases)
26053             {
26054               decl = TREE_VEC_ELT (expanded_bases, i);
26055               decl = expand_member_init (decl);
26056               init = TREE_VEC_ELT (expanded_arguments, i);
26057             }
26058           else
26059             {
26060               tree tmp;
26061               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
26062                                   tf_warning_or_error, NULL_TREE);
26063
26064               decl = expand_member_init (decl);
26065               if (decl && !DECL_P (decl))
26066                 in_base_initializer = 1;
26067
26068               init = TREE_VALUE (t);
26069               tmp = init;
26070               if (init != void_type_node)
26071                 init = tsubst_expr (init, argvec,
26072                                     tf_warning_or_error, NULL_TREE,
26073                                     /*integral_constant_expression_p=*/false);
26074               if (init == NULL_TREE && tmp != NULL_TREE)
26075                 /* If we had an initializer but it instantiated to nothing,
26076                    value-initialize the object.  This will only occur when
26077                    the initializer was a pack expansion where the parameter
26078                    packs used in that expansion were of length zero.  */
26079                 init = void_type_node;
26080               in_base_initializer = 0;
26081             }
26082
26083           if (target_ctor != error_mark_node
26084               && init != error_mark_node)
26085             {
26086               error ("mem-initializer for %qD follows constructor delegation",
26087                      decl);
26088               return inits;
26089             }
26090           /* Look for a target constructor. */
26091           if (init != error_mark_node
26092               && decl && CLASS_TYPE_P (decl)
26093               && same_type_p (decl, current_class_type))
26094             {
26095               maybe_warn_cpp0x (CPP0X_DELEGATING_CTORS);
26096               if (inits)
26097                 {
26098                   error ("constructor delegation follows mem-initializer for %qD",
26099                          TREE_PURPOSE (inits));
26100                   continue;
26101                 }
26102               target_ctor = init;
26103             }
26104
26105           if (decl)
26106             {
26107               init = build_tree_list (decl, init);
26108               /* Carry over the dummy TREE_TYPE node containing the source
26109                  location.  */
26110               TREE_TYPE (init) = TREE_TYPE (t);
26111               TREE_CHAIN (init) = inits;
26112               inits = init;
26113             }
26114         }
26115     }
26116   return inits;
26117 }
26118
26119 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
26120
26121 static void
26122 set_current_access_from_decl (tree decl)
26123 {
26124   if (TREE_PRIVATE (decl))
26125     current_access_specifier = access_private_node;
26126   else if (TREE_PROTECTED (decl))
26127     current_access_specifier = access_protected_node;
26128   else
26129     current_access_specifier = access_public_node;
26130 }
26131
26132 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
26133    is the instantiation (which should have been created with
26134    start_enum) and ARGS are the template arguments to use.  */
26135
26136 static void
26137 tsubst_enum (tree tag, tree newtag, tree args)
26138 {
26139   tree e;
26140
26141   if (SCOPED_ENUM_P (newtag))
26142     begin_scope (sk_scoped_enum, newtag);
26143
26144   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
26145     {
26146       tree value;
26147       tree decl;
26148
26149       decl = TREE_VALUE (e);
26150       /* Note that in a template enum, the TREE_VALUE is the
26151          CONST_DECL, not the corresponding INTEGER_CST.  */
26152       value = tsubst_expr (DECL_INITIAL (decl),
26153                            args, tf_warning_or_error, NULL_TREE,
26154                            /*integral_constant_expression_p=*/true);
26155
26156       /* Give this enumeration constant the correct access.  */
26157       set_current_access_from_decl (decl);
26158
26159       /* Actually build the enumerator itself.  Here we're assuming that
26160          enumerators can't have dependent attributes.  */
26161       build_enumerator (DECL_NAME (decl), value, newtag,
26162                         DECL_ATTRIBUTES (decl), DECL_SOURCE_LOCATION (decl));
26163     }
26164
26165   if (SCOPED_ENUM_P (newtag))
26166     finish_scope ();
26167
26168   finish_enum_value_list (newtag);
26169   finish_enum (newtag);
26170
26171   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
26172     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
26173 }
26174
26175 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
26176    its type -- but without substituting the innermost set of template
26177    arguments.  So, innermost set of template parameters will appear in
26178    the type.  */
26179
26180 tree
26181 get_mostly_instantiated_function_type (tree decl)
26182 {
26183   /* For a function, DECL_TI_TEMPLATE is partially instantiated.  */
26184   return TREE_TYPE (DECL_TI_TEMPLATE (decl));
26185 }
26186
26187 /* Return truthvalue if we're processing a template different from
26188    the last one involved in diagnostics.  */
26189 bool
26190 problematic_instantiation_changed (void)
26191 {
26192   return current_tinst_level != last_error_tinst_level;
26193 }
26194
26195 /* Remember current template involved in diagnostics.  */
26196 void
26197 record_last_problematic_instantiation (void)
26198 {
26199   set_refcount_ptr (last_error_tinst_level, current_tinst_level);
26200 }
26201
26202 struct tinst_level *
26203 current_instantiation (void)
26204 {
26205   return current_tinst_level;
26206 }
26207
26208 /* Return TRUE if current_function_decl is being instantiated, false
26209    otherwise.  */
26210
26211 bool
26212 instantiating_current_function_p (void)
26213 {
26214   return (current_instantiation ()
26215           && (current_instantiation ()->maybe_get_node ()
26216               == current_function_decl));
26217 }
26218
26219 /* [temp.param] Check that template non-type parm TYPE is of an allowable
26220    type.  Return false for ok, true for disallowed.  Issue error and
26221    inform messages under control of COMPLAIN.  */
26222
26223 static bool
26224 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
26225 {
26226   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
26227     return false;
26228   else if (TYPE_PTR_P (type))
26229     return false;
26230   else if (TYPE_REF_P (type)
26231            && !TYPE_REF_IS_RVALUE (type))
26232     return false;
26233   else if (TYPE_PTRMEM_P (type))
26234     return false;
26235   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
26236     {
26237       if (CLASS_PLACEHOLDER_TEMPLATE (type) && cxx_dialect < cxx20)
26238         {
26239           if (complain & tf_error)
26240             error ("non-type template parameters of deduced class type only "
26241                    "available with %<-std=c++20%> or %<-std=gnu++20%>");
26242           return true;
26243         }
26244       return false;
26245     }
26246   else if (TREE_CODE (type) == TYPENAME_TYPE)
26247     return false;
26248   else if (TREE_CODE (type) == DECLTYPE_TYPE)
26249     return false;
26250   else if (TREE_CODE (type) == NULLPTR_TYPE)
26251     return false;
26252   /* A bound template template parm could later be instantiated to have a valid
26253      nontype parm type via an alias template.  */
26254   else if (cxx_dialect >= cxx11
26255            && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
26256     return false;
26257   else if (VOID_TYPE_P (type))
26258     /* Fall through.  */;
26259   else if (cxx_dialect >= cxx20)
26260     {
26261       if (dependent_type_p (type))
26262         return false;
26263       if (!complete_type_or_maybe_complain (type, NULL_TREE, complain))
26264         return true;
26265       if (structural_type_p (type))
26266         return false;
26267       if (complain & tf_error)
26268         {
26269           auto_diagnostic_group d;
26270           error ("%qT is not a valid type for a template non-type "
26271                  "parameter because it is not structural", type);
26272           structural_type_p (type, true);
26273         }
26274       return true;
26275     }
26276   else if (CLASS_TYPE_P (type))
26277     {
26278       if (complain & tf_error)
26279         error ("non-type template parameters of class type only available "
26280                "with %<-std=c++20%> or %<-std=gnu++20%>");
26281       return true;
26282     }
26283
26284   if (complain & tf_error)
26285     {
26286       if (type == error_mark_node)
26287         inform (input_location, "invalid template non-type parameter");
26288       else
26289         error ("%q#T is not a valid type for a template non-type parameter",
26290                type);
26291     }
26292   return true;
26293 }
26294
26295 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
26296    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
26297
26298 static bool
26299 dependent_type_p_r (tree type)
26300 {
26301   tree scope;
26302
26303   /* [temp.dep.type]
26304
26305      A type is dependent if it is:
26306
26307      -- a template parameter. Template template parameters are types
26308         for us (since TYPE_P holds true for them) so we handle
26309         them here.  */
26310   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
26311       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
26312     return true;
26313   /* -- a qualified-id with a nested-name-specifier which contains a
26314         class-name that names a dependent type or whose unqualified-id
26315         names a dependent type.  */
26316   if (TREE_CODE (type) == TYPENAME_TYPE)
26317     return true;
26318
26319   /* An alias template specialization can be dependent even if the
26320      resulting type is not.  */
26321   if (dependent_alias_template_spec_p (type, nt_transparent))
26322     return true;
26323
26324   /* -- a cv-qualified type where the cv-unqualified type is
26325         dependent.
26326      No code is necessary for this bullet; the code below handles
26327      cv-qualified types, and we don't want to strip aliases with
26328      TYPE_MAIN_VARIANT because of DR 1558.  */
26329   /* -- a compound type constructed from any dependent type.  */
26330   if (TYPE_PTRMEM_P (type))
26331     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
26332             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
26333                                            (type)));
26334   else if (INDIRECT_TYPE_P (type))
26335     return dependent_type_p (TREE_TYPE (type));
26336   else if (FUNC_OR_METHOD_TYPE_P (type))
26337     {
26338       tree arg_type;
26339
26340       if (dependent_type_p (TREE_TYPE (type)))
26341         return true;
26342       for (arg_type = TYPE_ARG_TYPES (type);
26343            arg_type;
26344            arg_type = TREE_CHAIN (arg_type))
26345         if (dependent_type_p (TREE_VALUE (arg_type)))
26346           return true;
26347       if (cxx_dialect >= cxx17)
26348         /* A value-dependent noexcept-specifier makes the type dependent.  */
26349         if (tree spec = TYPE_RAISES_EXCEPTIONS (type))
26350           if (tree noex = TREE_PURPOSE (spec))
26351             /* Treat DEFERRED_NOEXCEPT as non-dependent, since it doesn't
26352                affect overload resolution and treating it as dependent breaks
26353                things.  Same for an unparsed noexcept expression.  */
26354             if (TREE_CODE (noex) != DEFERRED_NOEXCEPT
26355                 && TREE_CODE (noex) != DEFERRED_PARSE
26356                 && value_dependent_expression_p (noex))
26357               return true;
26358       return false;
26359     }
26360   /* -- an array type constructed from any dependent type or whose
26361         size is specified by a constant expression that is
26362         value-dependent.
26363
26364         We checked for type- and value-dependence of the bounds in
26365         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
26366   if (TREE_CODE (type) == ARRAY_TYPE)
26367     {
26368       if (TYPE_DOMAIN (type)
26369           && dependent_type_p (TYPE_DOMAIN (type)))
26370         return true;
26371       return dependent_type_p (TREE_TYPE (type));
26372     }
26373
26374   /* -- a template-id in which either the template name is a template
26375      parameter ...  */
26376   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
26377     return true;
26378   /* ... or any of the template arguments is a dependent type or
26379         an expression that is type-dependent or value-dependent.  */
26380   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
26381            && (any_dependent_template_arguments_p
26382                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
26383     return true;
26384
26385   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
26386      dependent; if the argument of the `typeof' expression is not
26387      type-dependent, then it should already been have resolved.  */
26388   if (TREE_CODE (type) == TYPEOF_TYPE
26389       || TREE_CODE (type) == DECLTYPE_TYPE
26390       || TREE_CODE (type) == UNDERLYING_TYPE)
26391     return true;
26392
26393   /* A template argument pack is dependent if any of its packed
26394      arguments are.  */
26395   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
26396     {
26397       tree args = ARGUMENT_PACK_ARGS (type);
26398       int i, len = TREE_VEC_LENGTH (args);
26399       for (i = 0; i < len; ++i)
26400         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
26401           return true;
26402     }
26403
26404   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
26405      be template parameters.  */
26406   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
26407     return true;
26408
26409   if (any_dependent_type_attributes_p (TYPE_ATTRIBUTES (type)))
26410     return true;
26411
26412   /* The standard does not specifically mention types that are local
26413      to template functions or local classes, but they should be
26414      considered dependent too.  For example:
26415
26416        template <int I> void f() {
26417          enum E { a = I };
26418          S<sizeof (E)> s;
26419        }
26420
26421      The size of `E' cannot be known until the value of `I' has been
26422      determined.  Therefore, `E' must be considered dependent.  */
26423   scope = TYPE_CONTEXT (type);
26424   if (scope && TYPE_P (scope))
26425     return dependent_type_p (scope);
26426   /* Don't use type_dependent_expression_p here, as it can lead
26427      to infinite recursion trying to determine whether a lambda
26428      nested in a lambda is dependent (c++/47687).  */
26429   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
26430            && DECL_LANG_SPECIFIC (scope)
26431            && DECL_TEMPLATE_INFO (scope)
26432            && (any_dependent_template_arguments_p
26433                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
26434     return true;
26435
26436   /* Other types are non-dependent.  */
26437   return false;
26438 }
26439
26440 /* Returns TRUE if TYPE is dependent, in the sense of
26441    [temp.dep.type].  Note that a NULL type is considered dependent.  */
26442
26443 bool
26444 dependent_type_p (tree type)
26445 {
26446   /* If there are no template parameters in scope, then there can't be
26447      any dependent types.  */
26448   if (!processing_template_decl)
26449     {
26450       /* If we are not processing a template, then nobody should be
26451          providing us with a dependent type.  */
26452       gcc_assert (type);
26453       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
26454       return false;
26455     }
26456
26457   /* If the type is NULL, we have not computed a type for the entity
26458      in question; in that case, the type is dependent.  */
26459   if (!type)
26460     return true;
26461
26462   /* Erroneous types can be considered non-dependent.  */
26463   if (type == error_mark_node)
26464     return false;
26465
26466   /* Getting here with global_type_node means we improperly called this
26467      function on the TREE_TYPE of an IDENTIFIER_NODE.  */
26468   gcc_checking_assert (type != global_type_node);
26469
26470   /* If we have not already computed the appropriate value for TYPE,
26471      do so now.  */
26472   if (!TYPE_DEPENDENT_P_VALID (type))
26473     {
26474       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
26475       TYPE_DEPENDENT_P_VALID (type) = 1;
26476     }
26477
26478   return TYPE_DEPENDENT_P (type);
26479 }
26480
26481 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
26482    lookup.  In other words, a dependent type that is not the current
26483    instantiation.  */
26484
26485 bool
26486 dependent_scope_p (tree scope)
26487 {
26488   return (scope && TYPE_P (scope) && dependent_type_p (scope)
26489           && !currently_open_class (scope));
26490 }
26491
26492 /* T is a SCOPE_REF.  Return whether it represents a non-static member of
26493    an unknown base of 'this' (and is therefore instantiation-dependent).  */
26494
26495 static bool
26496 unknown_base_ref_p (tree t)
26497 {
26498   if (!current_class_ptr)
26499     return false;
26500
26501   tree mem = TREE_OPERAND (t, 1);
26502   if (shared_member_p (mem))
26503     return false;
26504
26505   tree cur = current_nonlambda_class_type ();
26506   if (!any_dependent_bases_p (cur))
26507     return false;
26508
26509   tree ctx = TREE_OPERAND (t, 0);
26510   if (DERIVED_FROM_P (ctx, cur))
26511     return false;
26512
26513   return true;
26514 }
26515
26516 /* T is a SCOPE_REF; return whether we need to consider it
26517     instantiation-dependent so that we can check access at instantiation
26518     time even though we know which member it resolves to.  */
26519
26520 static bool
26521 instantiation_dependent_scope_ref_p (tree t)
26522 {
26523   if (DECL_P (TREE_OPERAND (t, 1))
26524       && CLASS_TYPE_P (TREE_OPERAND (t, 0))
26525       && !unknown_base_ref_p (t)
26526       && accessible_in_template_p (TREE_OPERAND (t, 0),
26527                                    TREE_OPERAND (t, 1)))
26528     return false;
26529   else
26530     return true;
26531 }
26532
26533 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
26534    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
26535    expression.  */
26536
26537 /* Note that this predicate is not appropriate for general expressions;
26538    only constant expressions (that satisfy potential_constant_expression)
26539    can be tested for value dependence.  */
26540
26541 bool
26542 value_dependent_expression_p (tree expression)
26543 {
26544   if (!processing_template_decl || expression == NULL_TREE)
26545     return false;
26546
26547   /* A type-dependent expression is also value-dependent.  */
26548   if (type_dependent_expression_p (expression))
26549     return true;
26550
26551   switch (TREE_CODE (expression))
26552     {
26553     case BASELINK:
26554       /* A dependent member function of the current instantiation.  */
26555       return dependent_type_p (BINFO_TYPE (BASELINK_BINFO (expression)));
26556
26557     case FUNCTION_DECL:
26558       /* A dependent member function of the current instantiation.  */
26559       if (DECL_CLASS_SCOPE_P (expression)
26560           && dependent_type_p (DECL_CONTEXT (expression)))
26561         return true;
26562       break;
26563
26564     case IDENTIFIER_NODE:
26565       /* A name that has not been looked up -- must be dependent.  */
26566       return true;
26567
26568     case TEMPLATE_PARM_INDEX:
26569       /* A non-type template parm.  */
26570       return true;
26571
26572     case CONST_DECL:
26573       /* A non-type template parm.  */
26574       if (DECL_TEMPLATE_PARM_P (expression))
26575         return true;
26576       return value_dependent_expression_p (DECL_INITIAL (expression));
26577
26578     case VAR_DECL:
26579        /* A constant with literal type and is initialized
26580           with an expression that is value-dependent.  */
26581       if (DECL_DEPENDENT_INIT_P (expression)
26582           /* FIXME cp_finish_decl doesn't fold reference initializers.  */
26583           || TYPE_REF_P (TREE_TYPE (expression)))
26584         return true;
26585       if (DECL_HAS_VALUE_EXPR_P (expression))
26586         {
26587           tree value_expr = DECL_VALUE_EXPR (expression);
26588           if (value_dependent_expression_p (value_expr)
26589               /* __PRETTY_FUNCTION__ inside a template function is dependent
26590                  on the name of the function.  */
26591               || (DECL_PRETTY_FUNCTION_P (expression)
26592                   /* It might be used in a template, but not a template
26593                      function, in which case its DECL_VALUE_EXPR will be
26594                      "top level".  */
26595                   && value_expr == error_mark_node))
26596             return true;
26597         }
26598       return false;
26599
26600     case DYNAMIC_CAST_EXPR:
26601     case STATIC_CAST_EXPR:
26602     case CONST_CAST_EXPR:
26603     case REINTERPRET_CAST_EXPR:
26604     case CAST_EXPR:
26605     case IMPLICIT_CONV_EXPR:
26606       /* These expressions are value-dependent if the type to which
26607          the cast occurs is dependent or the expression being casted
26608          is value-dependent.  */
26609       {
26610         tree type = TREE_TYPE (expression);
26611
26612         if (dependent_type_p (type))
26613           return true;
26614
26615         /* A functional cast has a list of operands.  */
26616         expression = TREE_OPERAND (expression, 0);
26617         if (!expression)
26618           {
26619             /* If there are no operands, it must be an expression such
26620                as "int()". This should not happen for aggregate types
26621                because it would form non-constant expressions.  */
26622             gcc_assert (cxx_dialect >= cxx11
26623                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
26624
26625             return false;
26626           }
26627
26628         if (TREE_CODE (expression) == TREE_LIST)
26629           return any_value_dependent_elements_p (expression);
26630
26631         return value_dependent_expression_p (expression);
26632       }
26633
26634     case SIZEOF_EXPR:
26635       if (SIZEOF_EXPR_TYPE_P (expression))
26636         return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
26637       /* FALLTHRU */
26638     case ALIGNOF_EXPR:
26639     case TYPEID_EXPR:
26640       /* A `sizeof' expression is value-dependent if the operand is
26641          type-dependent or is a pack expansion.  */
26642       expression = TREE_OPERAND (expression, 0);
26643       if (PACK_EXPANSION_P (expression))
26644         return true;
26645       else if (TYPE_P (expression))
26646         return dependent_type_p (expression);
26647       return instantiation_dependent_uneval_expression_p (expression);
26648
26649     case AT_ENCODE_EXPR:
26650       /* An 'encode' expression is value-dependent if the operand is
26651          type-dependent.  */
26652       expression = TREE_OPERAND (expression, 0);
26653       return dependent_type_p (expression);
26654
26655     case NOEXCEPT_EXPR:
26656       expression = TREE_OPERAND (expression, 0);
26657       return instantiation_dependent_uneval_expression_p (expression);
26658
26659     case SCOPE_REF:
26660       /* All instantiation-dependent expressions should also be considered
26661          value-dependent.  */
26662       return instantiation_dependent_scope_ref_p (expression);
26663
26664     case COMPONENT_REF:
26665       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
26666               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
26667
26668     case NONTYPE_ARGUMENT_PACK:
26669       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
26670          is value-dependent.  */
26671       {
26672         tree values = ARGUMENT_PACK_ARGS (expression);
26673         int i, len = TREE_VEC_LENGTH (values);
26674
26675         for (i = 0; i < len; ++i)
26676           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
26677             return true;
26678
26679         return false;
26680       }
26681
26682     case TRAIT_EXPR:
26683       {
26684         tree type2 = TRAIT_EXPR_TYPE2 (expression);
26685
26686         if (dependent_type_p (TRAIT_EXPR_TYPE1 (expression)))
26687           return true;
26688
26689         if (!type2)
26690           return false;
26691
26692         if (TREE_CODE (type2) != TREE_LIST)
26693           return dependent_type_p (type2);
26694
26695         for (; type2; type2 = TREE_CHAIN (type2))
26696           if (dependent_type_p (TREE_VALUE (type2)))
26697             return true;
26698
26699         return false;
26700       }
26701
26702     case MODOP_EXPR:
26703       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
26704               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
26705
26706     case ARRAY_REF:
26707       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
26708               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
26709
26710     case ADDR_EXPR:
26711       {
26712         tree op = TREE_OPERAND (expression, 0);
26713         return (value_dependent_expression_p (op)
26714                 || has_value_dependent_address (op));
26715       }
26716
26717     case REQUIRES_EXPR:
26718       /* Treat all requires-expressions as value-dependent so
26719          we don't try to fold them.  */
26720       return true;
26721
26722     case TYPE_REQ:
26723       return dependent_type_p (TREE_OPERAND (expression, 0));
26724
26725     case CALL_EXPR:
26726       {
26727         if (value_dependent_expression_p (CALL_EXPR_FN (expression)))
26728           return true;
26729         tree fn = get_callee_fndecl (expression);
26730         int i, nargs;
26731         nargs = call_expr_nargs (expression);
26732         for (i = 0; i < nargs; ++i)
26733           {
26734             tree op = CALL_EXPR_ARG (expression, i);
26735             /* In a call to a constexpr member function, look through the
26736                implicit ADDR_EXPR on the object argument so that it doesn't
26737                cause the call to be considered value-dependent.  We also
26738                look through it in potential_constant_expression.  */
26739             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
26740                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
26741                 && TREE_CODE (op) == ADDR_EXPR)
26742               op = TREE_OPERAND (op, 0);
26743             if (value_dependent_expression_p (op))
26744               return true;
26745           }
26746         return false;
26747       }
26748
26749     case TEMPLATE_ID_EXPR:
26750       return concept_definition_p (TREE_OPERAND (expression, 0));
26751
26752     case CONSTRUCTOR:
26753       {
26754         unsigned ix;
26755         tree val;
26756         if (dependent_type_p (TREE_TYPE (expression)))
26757           return true;
26758         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
26759           if (value_dependent_expression_p (val))
26760             return true;
26761         return false;
26762       }
26763
26764     case STMT_EXPR:
26765       /* Treat a GNU statement expression as dependent to avoid crashing
26766          under instantiate_non_dependent_expr; it can't be constant.  */
26767       return true;
26768
26769     default:
26770       /* A constant expression is value-dependent if any subexpression is
26771          value-dependent.  */
26772       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
26773         {
26774         case tcc_reference:
26775         case tcc_unary:
26776         case tcc_comparison:
26777         case tcc_binary:
26778         case tcc_expression:
26779         case tcc_vl_exp:
26780           {
26781             int i, len = cp_tree_operand_length (expression);
26782
26783             for (i = 0; i < len; i++)
26784               {
26785                 tree t = TREE_OPERAND (expression, i);
26786
26787                 /* In some cases, some of the operands may be missing.
26788                    (For example, in the case of PREDECREMENT_EXPR, the
26789                    amount to increment by may be missing.)  That doesn't
26790                    make the expression dependent.  */
26791                 if (t && value_dependent_expression_p (t))
26792                   return true;
26793               }
26794           }
26795           break;
26796         default:
26797           break;
26798         }
26799       break;
26800     }
26801
26802   /* The expression is not value-dependent.  */
26803   return false;
26804 }
26805
26806 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
26807    [temp.dep.expr].  Note that an expression with no type is
26808    considered dependent.  Other parts of the compiler arrange for an
26809    expression with type-dependent subexpressions to have no type, so
26810    this function doesn't have to be fully recursive.  */
26811
26812 bool
26813 type_dependent_expression_p (tree expression)
26814 {
26815   if (!processing_template_decl)
26816     return false;
26817
26818   if (expression == NULL_TREE || expression == error_mark_node)
26819     return false;
26820
26821   STRIP_ANY_LOCATION_WRAPPER (expression);
26822
26823   /* An unresolved name is always dependent.  */
26824   if (identifier_p (expression)
26825       || TREE_CODE (expression) == USING_DECL
26826       || TREE_CODE (expression) == WILDCARD_DECL)
26827     return true;
26828
26829   /* A lambda-expression in template context is dependent.  dependent_type_p is
26830      true for a lambda in the scope of a class or function template, but that
26831      doesn't cover all template contexts, like a default template argument.  */
26832   if (TREE_CODE (expression) == LAMBDA_EXPR)
26833     return true;
26834
26835   /* A fold expression is type-dependent. */
26836   if (TREE_CODE (expression) == UNARY_LEFT_FOLD_EXPR
26837       || TREE_CODE (expression) == UNARY_RIGHT_FOLD_EXPR
26838       || TREE_CODE (expression) == BINARY_LEFT_FOLD_EXPR
26839       || TREE_CODE (expression) == BINARY_RIGHT_FOLD_EXPR)
26840     return true;
26841
26842   /* Some expression forms are never type-dependent.  */
26843   if (TREE_CODE (expression) == SIZEOF_EXPR
26844       || TREE_CODE (expression) == ALIGNOF_EXPR
26845       || TREE_CODE (expression) == AT_ENCODE_EXPR
26846       || TREE_CODE (expression) == NOEXCEPT_EXPR
26847       || TREE_CODE (expression) == TRAIT_EXPR
26848       || TREE_CODE (expression) == TYPEID_EXPR
26849       || TREE_CODE (expression) == DELETE_EXPR
26850       || TREE_CODE (expression) == VEC_DELETE_EXPR
26851       || TREE_CODE (expression) == THROW_EXPR
26852       || TREE_CODE (expression) == REQUIRES_EXPR)
26853     return false;
26854
26855   /* The types of these expressions depends only on the type to which
26856      the cast occurs.  */
26857   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
26858       || TREE_CODE (expression) == STATIC_CAST_EXPR
26859       || TREE_CODE (expression) == CONST_CAST_EXPR
26860       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
26861       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
26862       || TREE_CODE (expression) == CAST_EXPR)
26863     return dependent_type_p (TREE_TYPE (expression));
26864
26865   /* The types of these expressions depends only on the type created
26866      by the expression.  */
26867   if (TREE_CODE (expression) == NEW_EXPR
26868       || TREE_CODE (expression) == VEC_NEW_EXPR)
26869     {
26870       /* For NEW_EXPR tree nodes created inside a template, either
26871          the object type itself or a TREE_LIST may appear as the
26872          operand 1.  */
26873       tree type = TREE_OPERAND (expression, 1);
26874       if (TREE_CODE (type) == TREE_LIST)
26875         /* This is an array type.  We need to check array dimensions
26876            as well.  */
26877         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
26878                || value_dependent_expression_p
26879                     (TREE_OPERAND (TREE_VALUE (type), 1));
26880       /* Array type whose dimension has to be deduced.  */
26881       else if (TREE_CODE (type) == ARRAY_TYPE
26882                && TREE_OPERAND (expression, 2) == NULL_TREE)
26883         return true;
26884       else
26885         return dependent_type_p (type);
26886     }
26887
26888   if (TREE_CODE (expression) == SCOPE_REF)
26889     {
26890       tree scope = TREE_OPERAND (expression, 0);
26891       tree name = TREE_OPERAND (expression, 1);
26892
26893       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
26894          contains an identifier associated by name lookup with one or more
26895          declarations declared with a dependent type, or...a
26896          nested-name-specifier or qualified-id that names a member of an
26897          unknown specialization.  */
26898       return (type_dependent_expression_p (name)
26899               || dependent_scope_p (scope));
26900     }
26901
26902   if (TREE_CODE (expression) == TEMPLATE_DECL
26903       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
26904     return uses_outer_template_parms (expression);
26905
26906   if (TREE_CODE (expression) == STMT_EXPR)
26907     expression = stmt_expr_value_expr (expression);
26908
26909   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
26910     {
26911       tree elt;
26912       unsigned i;
26913
26914       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
26915         {
26916           if (type_dependent_expression_p (elt))
26917             return true;
26918         }
26919       return false;
26920     }
26921
26922   /* A static data member of the current instantiation with incomplete
26923      array type is type-dependent, as the definition and specializations
26924      can have different bounds.  */
26925   if (VAR_P (expression)
26926       && DECL_CLASS_SCOPE_P (expression)
26927       && dependent_type_p (DECL_CONTEXT (expression))
26928       && VAR_HAD_UNKNOWN_BOUND (expression))
26929     return true;
26930
26931   /* An array of unknown bound depending on a variadic parameter, eg:
26932
26933      template<typename... Args>
26934        void foo (Args... args)
26935        {
26936          int arr[] = { args... };
26937        }
26938
26939      template<int... vals>
26940        void bar ()
26941        {
26942          int arr[] = { vals... };
26943        }
26944
26945      If the array has no length and has an initializer, it must be that
26946      we couldn't determine its length in cp_complete_array_type because
26947      it is dependent.  */
26948   if (VAR_P (expression)
26949       && TREE_TYPE (expression) != NULL_TREE
26950       && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
26951       && !TYPE_DOMAIN (TREE_TYPE (expression))
26952       && DECL_INITIAL (expression))
26953    return true;
26954
26955   /* A function or variable template-id is type-dependent if it has any
26956      dependent template arguments.  */
26957   if (VAR_OR_FUNCTION_DECL_P (expression)
26958       && DECL_LANG_SPECIFIC (expression)
26959       && DECL_TEMPLATE_INFO (expression))
26960     {
26961       /* Consider the innermost template arguments, since those are the ones
26962          that come from the template-id; the template arguments for the
26963          enclosing class do not make it type-dependent unless they are used in
26964          the type of the decl.  */
26965       if (instantiates_primary_template_p (expression)
26966           && (any_dependent_template_arguments_p
26967               (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
26968         return true;
26969     }
26970
26971   /* Otherwise, if the function decl isn't from a dependent scope, it can't be
26972      type-dependent.  Checking this is important for functions with auto return
26973      type, which looks like a dependent type.  */
26974   if (TREE_CODE (expression) == FUNCTION_DECL
26975       && !(DECL_CLASS_SCOPE_P (expression)
26976            && dependent_type_p (DECL_CONTEXT (expression)))
26977       && !(DECL_LANG_SPECIFIC (expression)
26978            && DECL_FRIEND_P (expression)
26979            && (!DECL_FRIEND_CONTEXT (expression)
26980                || dependent_type_p (DECL_FRIEND_CONTEXT (expression))))
26981       && !DECL_LOCAL_FUNCTION_P (expression))
26982     {
26983       gcc_assert (!dependent_type_p (TREE_TYPE (expression))
26984                   || undeduced_auto_decl (expression));
26985       return false;
26986     }
26987
26988   /* Always dependent, on the number of arguments if nothing else.  */
26989   if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
26990     return true;
26991
26992   if (TREE_TYPE (expression) == unknown_type_node)
26993     {
26994       if (TREE_CODE (expression) == ADDR_EXPR)
26995         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
26996       if (TREE_CODE (expression) == COMPONENT_REF
26997           || TREE_CODE (expression) == OFFSET_REF)
26998         {
26999           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
27000             return true;
27001           expression = TREE_OPERAND (expression, 1);
27002           if (identifier_p (expression))
27003             return false;
27004         }
27005       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
27006       if (TREE_CODE (expression) == SCOPE_REF)
27007         return false;
27008
27009       /* CO_AWAIT/YIELD_EXPR with unknown type is always dependent.  */
27010       if (TREE_CODE (expression) == CO_AWAIT_EXPR
27011           || TREE_CODE (expression) == CO_YIELD_EXPR)
27012         return true;
27013
27014       if (BASELINK_P (expression))
27015         {
27016           if (BASELINK_OPTYPE (expression)
27017               && dependent_type_p (BASELINK_OPTYPE (expression)))
27018             return true;
27019           expression = BASELINK_FUNCTIONS (expression);
27020         }
27021
27022       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
27023         {
27024           if (any_dependent_template_arguments_p
27025               (TREE_OPERAND (expression, 1)))
27026             return true;
27027           expression = TREE_OPERAND (expression, 0);
27028           if (identifier_p (expression))
27029             return true;
27030         }
27031
27032       gcc_assert (OVL_P (expression));
27033
27034       for (lkp_iterator iter (expression); iter; ++iter)
27035         if (type_dependent_expression_p (*iter))
27036           return true;
27037
27038       return false;
27039     }
27040
27041   /* The type of a non-type template parm declared with a placeholder type
27042      depends on the corresponding template argument, even though
27043      placeholders are not normally considered dependent.  */
27044   if (TREE_CODE (expression) == TEMPLATE_PARM_INDEX
27045       && is_auto (TREE_TYPE (expression)))
27046     return true;
27047
27048   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
27049
27050   /* Dependent type attributes might not have made it from the decl to
27051      the type yet.  */
27052   if (DECL_P (expression)
27053       && any_dependent_type_attributes_p (DECL_ATTRIBUTES (expression)))
27054     return true;
27055
27056   return (dependent_type_p (TREE_TYPE (expression)));
27057 }
27058
27059 /* [temp.dep.expr]/5: A class member access expression (5.2.5) is
27060    type-dependent if the expression refers to a member of the current
27061    instantiation and the type of the referenced member is dependent, or the
27062    class member access expression refers to a member of an unknown
27063    specialization.
27064
27065    This function returns true if the OBJECT in such a class member access
27066    expression is of an unknown specialization.  */
27067
27068 bool
27069 type_dependent_object_expression_p (tree object)
27070 {
27071   /* An IDENTIFIER_NODE can sometimes have a TREE_TYPE, but it's still
27072      dependent.  */
27073   if (TREE_CODE (object) == IDENTIFIER_NODE)
27074     return true;
27075   tree scope = TREE_TYPE (object);
27076   return (!scope || dependent_scope_p (scope));
27077 }
27078
27079 /* walk_tree callback function for instantiation_dependent_expression_p,
27080    below.  Returns non-zero if a dependent subexpression is found.  */
27081
27082 static tree
27083 instantiation_dependent_r (tree *tp, int *walk_subtrees,
27084                            void * /*data*/)
27085 {
27086   if (TYPE_P (*tp))
27087     {
27088       /* We don't have to worry about decltype currently because decltype
27089          of an instantiation-dependent expr is a dependent type.  This
27090          might change depending on the resolution of DR 1172.  */
27091       *walk_subtrees = false;
27092       return NULL_TREE;
27093     }
27094   enum tree_code code = TREE_CODE (*tp);
27095   switch (code)
27096     {
27097       /* Don't treat an argument list as dependent just because it has no
27098          TREE_TYPE.  */
27099     case TREE_LIST:
27100     case TREE_VEC:
27101     case NONTYPE_ARGUMENT_PACK:
27102       return NULL_TREE;
27103
27104     case TEMPLATE_PARM_INDEX:
27105       if (dependent_type_p (TREE_TYPE (*tp)))
27106         return *tp;
27107       if (TEMPLATE_PARM_PARAMETER_PACK (*tp))
27108         return *tp;
27109       /* We'll check value-dependence separately.  */
27110       return NULL_TREE;
27111
27112       /* Handle expressions with type operands.  */
27113     case SIZEOF_EXPR:
27114     case ALIGNOF_EXPR:
27115     case TYPEID_EXPR:
27116     case AT_ENCODE_EXPR:
27117       {
27118         tree op = TREE_OPERAND (*tp, 0);
27119         if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
27120           op = TREE_TYPE (op);
27121         if (TYPE_P (op))
27122           {
27123             if (dependent_type_p (op))
27124               return *tp;
27125             else
27126               {
27127                 *walk_subtrees = false;
27128                 return NULL_TREE;
27129               }
27130           }
27131         break;
27132       }
27133
27134     case COMPONENT_REF:
27135       if (identifier_p (TREE_OPERAND (*tp, 1)))
27136         /* In a template, finish_class_member_access_expr creates a
27137            COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
27138            type-dependent, so that we can check access control at
27139            instantiation time (PR 42277).  See also Core issue 1273.  */
27140         return *tp;
27141       break;
27142
27143     case SCOPE_REF:
27144       if (instantiation_dependent_scope_ref_p (*tp))
27145         return *tp;
27146       else
27147         break;
27148
27149       /* Treat statement-expressions as dependent.  */
27150     case BIND_EXPR:
27151       return *tp;
27152
27153       /* Treat requires-expressions as dependent. */
27154     case REQUIRES_EXPR:
27155       return *tp;
27156
27157     case CALL_EXPR:
27158       /* Treat concept checks as dependent. */
27159       if (concept_check_p (*tp))
27160         return *tp;
27161       break;
27162
27163     case TEMPLATE_ID_EXPR:
27164       /* Treat concept checks as dependent.  */
27165       if (concept_check_p (*tp))
27166         return *tp;
27167       break;
27168
27169     case CONSTRUCTOR:
27170       if (CONSTRUCTOR_IS_DEPENDENT (*tp))
27171         return *tp;
27172       break;
27173
27174     default:
27175       break;
27176     }
27177
27178   if (type_dependent_expression_p (*tp))
27179     return *tp;
27180   else
27181     return NULL_TREE;
27182 }
27183
27184 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
27185    sense defined by the ABI:
27186
27187    "An expression is instantiation-dependent if it is type-dependent
27188    or value-dependent, or it has a subexpression that is type-dependent
27189    or value-dependent."
27190
27191    Except don't actually check value-dependence for unevaluated expressions,
27192    because in sizeof(i) we don't care about the value of i.  Checking
27193    type-dependence will in turn check value-dependence of array bounds/template
27194    arguments as needed.  */
27195
27196 bool
27197 instantiation_dependent_uneval_expression_p (tree expression)
27198 {
27199   tree result;
27200
27201   if (!processing_template_decl)
27202     return false;
27203
27204   if (expression == error_mark_node)
27205     return false;
27206
27207   result = cp_walk_tree_without_duplicates (&expression,
27208                                             instantiation_dependent_r, NULL);
27209   return result != NULL_TREE;
27210 }
27211
27212 /* As above, but also check value-dependence of the expression as a whole.  */
27213
27214 bool
27215 instantiation_dependent_expression_p (tree expression)
27216 {
27217   return (instantiation_dependent_uneval_expression_p (expression)
27218           || value_dependent_expression_p (expression));
27219 }
27220
27221 /* Like type_dependent_expression_p, but it also works while not processing
27222    a template definition, i.e. during substitution or mangling.  */
27223
27224 bool
27225 type_dependent_expression_p_push (tree expr)
27226 {
27227   bool b;
27228   ++processing_template_decl;
27229   b = type_dependent_expression_p (expr);
27230   --processing_template_decl;
27231   return b;
27232 }
27233
27234 /* Returns TRUE if ARGS contains a type-dependent expression.  */
27235
27236 bool
27237 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
27238 {
27239   unsigned int i;
27240   tree arg;
27241
27242   FOR_EACH_VEC_SAFE_ELT (args, i, arg)
27243     {
27244       if (type_dependent_expression_p (arg))
27245         return true;
27246     }
27247   return false;
27248 }
27249
27250 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
27251    expressions) contains any type-dependent expressions.  */
27252
27253 bool
27254 any_type_dependent_elements_p (const_tree list)
27255 {
27256   for (; list; list = TREE_CHAIN (list))
27257     if (type_dependent_expression_p (TREE_VALUE (list)))
27258       return true;
27259
27260   return false;
27261 }
27262
27263 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
27264    expressions) contains any value-dependent expressions.  */
27265
27266 bool
27267 any_value_dependent_elements_p (const_tree list)
27268 {
27269   for (; list; list = TREE_CHAIN (list))
27270     if (value_dependent_expression_p (TREE_VALUE (list)))
27271       return true;
27272
27273   return false;
27274 }
27275
27276 /* Returns TRUE if the ARG (a template argument) is dependent.  */
27277
27278 bool
27279 dependent_template_arg_p (tree arg)
27280 {
27281   if (!processing_template_decl)
27282     return false;
27283
27284   /* Assume a template argument that was wrongly written by the user
27285      is dependent. This is consistent with what
27286      any_dependent_template_arguments_p [that calls this function]
27287      does.  */
27288   if (!arg || arg == error_mark_node)
27289     return true;
27290
27291   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
27292     arg = argument_pack_select_arg (arg);
27293
27294   if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
27295     return true;
27296   if (TREE_CODE (arg) == TEMPLATE_DECL)
27297     {
27298       if (DECL_TEMPLATE_PARM_P (arg))
27299         return true;
27300       /* A member template of a dependent class is not necessarily
27301          type-dependent, but it is a dependent template argument because it
27302          will be a member of an unknown specialization to that template.  */
27303       tree scope = CP_DECL_CONTEXT (arg);
27304       return TYPE_P (scope) && dependent_type_p (scope);
27305     }
27306   else if (ARGUMENT_PACK_P (arg))
27307     {
27308       tree args = ARGUMENT_PACK_ARGS (arg);
27309       int i, len = TREE_VEC_LENGTH (args);
27310       for (i = 0; i < len; ++i)
27311         {
27312           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
27313             return true;
27314         }
27315
27316       return false;
27317     }
27318   else if (TYPE_P (arg))
27319     return dependent_type_p (arg);
27320   else
27321     return value_dependent_expression_p (arg);
27322 }
27323
27324 /* Returns true if ARGS (a collection of template arguments) contains
27325    any types that require structural equality testing.  */
27326
27327 bool
27328 any_template_arguments_need_structural_equality_p (tree args)
27329 {
27330   int i;
27331   int j;
27332
27333   if (!args)
27334     return false;
27335   if (args == error_mark_node)
27336     return true;
27337
27338   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
27339     {
27340       tree level = TMPL_ARGS_LEVEL (args, i + 1);
27341       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
27342         {
27343           tree arg = TREE_VEC_ELT (level, j);
27344           tree packed_args = NULL_TREE;
27345           int k, len = 1;
27346
27347           if (ARGUMENT_PACK_P (arg))
27348             {
27349               /* Look inside the argument pack.  */
27350               packed_args = ARGUMENT_PACK_ARGS (arg);
27351               len = TREE_VEC_LENGTH (packed_args);
27352             }
27353
27354           for (k = 0; k < len; ++k)
27355             {
27356               if (packed_args)
27357                 arg = TREE_VEC_ELT (packed_args, k);
27358
27359               if (error_operand_p (arg))
27360                 return true;
27361               else if (TREE_CODE (arg) == TEMPLATE_DECL)
27362                 continue;
27363               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
27364                 return true;
27365               else if (!TYPE_P (arg) && TREE_TYPE (arg)
27366                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
27367                 return true;
27368             }
27369         }
27370     }
27371
27372   return false;
27373 }
27374
27375 /* Returns true if ARGS (a collection of template arguments) contains
27376    any dependent arguments.  */
27377
27378 bool
27379 any_dependent_template_arguments_p (const_tree args)
27380 {
27381   int i;
27382   int j;
27383
27384   if (!args)
27385     return false;
27386   if (args == error_mark_node)
27387     return true;
27388
27389   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
27390     {
27391       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
27392       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
27393         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
27394           return true;
27395     }
27396
27397   return false;
27398 }
27399
27400 /* Returns true if ARGS contains any errors.  */
27401
27402 bool
27403 any_erroneous_template_args_p (const_tree args)
27404 {
27405   int i;
27406   int j;
27407
27408   if (args == error_mark_node)
27409     return true;
27410
27411   if (args && TREE_CODE (args) != TREE_VEC)
27412     {
27413       if (tree ti = get_template_info (args))
27414         args = TI_ARGS (ti);
27415       else
27416         args = NULL_TREE;
27417     }
27418
27419   if (!args)
27420     return false;
27421
27422   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
27423     {
27424       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
27425       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
27426         if (error_operand_p (TREE_VEC_ELT (level, j)))
27427           return true;
27428     }
27429
27430   return false;
27431 }
27432
27433 /* Returns TRUE if the template TMPL is type-dependent.  */
27434
27435 bool
27436 dependent_template_p (tree tmpl)
27437 {
27438   if (TREE_CODE (tmpl) == OVERLOAD)
27439     {
27440       for (lkp_iterator iter (tmpl); iter; ++iter)
27441         if (dependent_template_p (*iter))
27442           return true;
27443       return false;
27444     }
27445
27446   /* Template template parameters are dependent.  */
27447   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
27448       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
27449     return true;
27450   /* So are names that have not been looked up.  */
27451   if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
27452     return true;
27453   return false;
27454 }
27455
27456 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
27457
27458 bool
27459 dependent_template_id_p (tree tmpl, tree args)
27460 {
27461   return (dependent_template_p (tmpl)
27462           || any_dependent_template_arguments_p (args));
27463 }
27464
27465 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
27466    are dependent.  */
27467
27468 bool
27469 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
27470 {
27471   int i;
27472
27473   if (!processing_template_decl)
27474     return false;
27475
27476   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
27477     {
27478       tree decl = TREE_VEC_ELT (declv, i);
27479       tree init = TREE_VEC_ELT (initv, i);
27480       tree cond = TREE_VEC_ELT (condv, i);
27481       tree incr = TREE_VEC_ELT (incrv, i);
27482
27483       if (type_dependent_expression_p (decl)
27484           || TREE_CODE (decl) == SCOPE_REF)
27485         return true;
27486
27487       if (init && type_dependent_expression_p (init))
27488         return true;
27489
27490       if (cond == global_namespace)
27491         return true;
27492
27493       if (type_dependent_expression_p (cond))
27494         return true;
27495
27496       if (COMPARISON_CLASS_P (cond)
27497           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
27498               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
27499         return true;
27500
27501       if (TREE_CODE (incr) == MODOP_EXPR)
27502         {
27503           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
27504               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
27505             return true;
27506         }
27507       else if (type_dependent_expression_p (incr))
27508         return true;
27509       else if (TREE_CODE (incr) == MODIFY_EXPR)
27510         {
27511           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
27512             return true;
27513           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
27514             {
27515               tree t = TREE_OPERAND (incr, 1);
27516               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
27517                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
27518                 return true;
27519
27520               /* If this loop has a class iterator with != comparison
27521                  with increment other than i++/++i/i--/--i, make sure the
27522                  increment is constant.  */
27523               if (CLASS_TYPE_P (TREE_TYPE (decl))
27524                   && TREE_CODE (cond) == NE_EXPR)
27525                 {
27526                   if (TREE_OPERAND (t, 0) == decl)
27527                     t = TREE_OPERAND (t, 1);
27528                   else
27529                     t = TREE_OPERAND (t, 0);
27530                   if (TREE_CODE (t) != INTEGER_CST)
27531                     return true;
27532                 }
27533             }
27534         }
27535     }
27536
27537   return false;
27538 }
27539
27540 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
27541    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
27542    no such TYPE can be found.  Note that this function peers inside
27543    uninstantiated templates and therefore should be used only in
27544    extremely limited situations.  ONLY_CURRENT_P restricts this
27545    peering to the currently open classes hierarchy (which is required
27546    when comparing types).  */
27547
27548 tree
27549 resolve_typename_type (tree type, bool only_current_p)
27550 {
27551   tree scope;
27552   tree name;
27553   tree decl;
27554   int quals;
27555   tree pushed_scope;
27556   tree result;
27557
27558   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
27559
27560   scope = TYPE_CONTEXT (type);
27561   /* We shouldn't have built a TYPENAME_TYPE with a non-dependent scope.  */
27562   gcc_checking_assert (uses_template_parms (scope));
27563
27564   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
27565      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of a
27566      TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL
27567      representing the typedef. In that case TYPE_IDENTIFIER (type) is
27568      not the non-qualified identifier of the TYPENAME_TYPE anymore.
27569      So by getting the TYPE_IDENTIFIER of the _main declaration_ of
27570      the TYPENAME_TYPE instead, we avoid messing up with a possible
27571      typedef variant case.  */
27572   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
27573
27574   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
27575      it first before we can figure out what NAME refers to.  */
27576   if (TREE_CODE (scope) == TYPENAME_TYPE)
27577     {
27578       if (TYPENAME_IS_RESOLVING_P (scope))
27579         /* Given a class template A with a dependent base with nested type C,
27580            typedef typename A::C::C C will land us here, as trying to resolve
27581            the initial A::C leads to the local C typedef, which leads back to
27582            A::C::C.  So we break the recursion now.  */
27583         return type;
27584       else
27585         scope = resolve_typename_type (scope, only_current_p);
27586     }
27587   /* If we don't know what SCOPE refers to, then we cannot resolve the
27588      TYPENAME_TYPE.  */
27589   if (!CLASS_TYPE_P (scope))
27590     return type;
27591   /* If this is a typedef, we don't want to look inside (c++/11987).  */
27592   if (typedef_variant_p (type))
27593     return type;
27594   /* If SCOPE isn't the template itself, it will not have a valid
27595      TYPE_FIELDS list.  */
27596   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
27597     /* scope is either the template itself or a compatible instantiation
27598        like X<T>, so look up the name in the original template.  */
27599     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
27600   /* If scope has no fields, it can't be a current instantiation.  Check this
27601      before currently_open_class to avoid infinite recursion (71515).  */
27602   if (!TYPE_FIELDS (scope))
27603     return type;
27604   /* If the SCOPE is not the current instantiation, there's no reason
27605      to look inside it.  */
27606   if (only_current_p && !currently_open_class (scope))
27607     return type;
27608   /* Enter the SCOPE so that name lookup will be resolved as if we
27609      were in the class definition.  In particular, SCOPE will no
27610      longer be considered a dependent type.  */
27611   pushed_scope = push_scope (scope);
27612   /* Look up the declaration.  */
27613   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
27614                         tf_warning_or_error);
27615
27616   result = NULL_TREE;
27617
27618   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
27619      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
27620   tree fullname = TYPENAME_TYPE_FULLNAME (type);
27621   if (!decl)
27622     /*nop*/;
27623   else if (identifier_p (fullname)
27624            && TREE_CODE (decl) == TYPE_DECL)
27625     {
27626       result = TREE_TYPE (decl);
27627       if (result == error_mark_node)
27628         result = NULL_TREE;
27629     }
27630   else if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR
27631            && DECL_CLASS_TEMPLATE_P (decl))
27632     {
27633       /* Obtain the template and the arguments.  */
27634       tree tmpl = TREE_OPERAND (fullname, 0);
27635       if (TREE_CODE (tmpl) == IDENTIFIER_NODE)
27636         {
27637           /* We get here with a plain identifier because a previous tentative
27638              parse of the nested-name-specifier as part of a ptr-operator saw
27639              ::template X<A>.  The use of ::template is necessary in a
27640              ptr-operator, but wrong in a declarator-id.
27641
27642              [temp.names]: In a qualified-id of a declarator-id, the keyword
27643              template shall not appear at the top level.  */
27644           pedwarn (cp_expr_loc_or_input_loc (fullname), OPT_Wpedantic,
27645                    "keyword %<template%> not allowed in declarator-id");
27646           tmpl = decl;
27647         }
27648       tree args = TREE_OPERAND (fullname, 1);
27649       /* Instantiate the template.  */
27650       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
27651                                       /*entering_scope=*/true,
27652                                       tf_error | tf_user);
27653       if (result == error_mark_node)
27654         result = NULL_TREE;
27655     }
27656
27657   /* Leave the SCOPE.  */
27658   if (pushed_scope)
27659     pop_scope (pushed_scope);
27660
27661   /* If we failed to resolve it, return the original typename.  */
27662   if (!result)
27663     return type;
27664
27665   /* If lookup found a typename type, resolve that too.  */
27666   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
27667     {
27668       /* Ill-formed programs can cause infinite recursion here, so we
27669          must catch that.  */
27670       TYPENAME_IS_RESOLVING_P (result) = 1;
27671       result = resolve_typename_type (result, only_current_p);
27672       TYPENAME_IS_RESOLVING_P (result) = 0;
27673     }
27674
27675   /* Qualify the resulting type.  */
27676   quals = cp_type_quals (type);
27677   if (quals)
27678     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
27679
27680   return result;
27681 }
27682
27683 /* EXPR is an expression which is not type-dependent.  Return a proxy
27684    for EXPR that can be used to compute the types of larger
27685    expressions containing EXPR.  */
27686
27687 tree
27688 build_non_dependent_expr (tree expr)
27689 {
27690   tree orig_expr = expr;
27691   tree inner_expr;
27692
27693   /* When checking, try to get a constant value for all non-dependent
27694      expressions in order to expose bugs in *_dependent_expression_p
27695      and constexpr.  This can affect code generation, see PR70704, so
27696      only do this for -fchecking=2.  */
27697   if (flag_checking > 1
27698       && cxx_dialect >= cxx11
27699       /* Don't do this during nsdmi parsing as it can lead to
27700          unexpected recursive instantiations.  */
27701       && !parsing_nsdmi ()
27702       /* Don't do this during concept processing either and for
27703          the same reason.  */
27704       && !processing_constraint_expression_p ())
27705     fold_non_dependent_expr (expr, tf_none);
27706
27707   STRIP_ANY_LOCATION_WRAPPER (expr);
27708
27709   /* Preserve OVERLOADs; the functions must be available to resolve
27710      types.  */
27711   inner_expr = expr;
27712   if (TREE_CODE (inner_expr) == STMT_EXPR)
27713     inner_expr = stmt_expr_value_expr (inner_expr);
27714   if (TREE_CODE (inner_expr) == ADDR_EXPR)
27715     inner_expr = TREE_OPERAND (inner_expr, 0);
27716   if (TREE_CODE (inner_expr) == COMPONENT_REF)
27717     inner_expr = TREE_OPERAND (inner_expr, 1);
27718   if (is_overloaded_fn (inner_expr)
27719       || TREE_CODE (inner_expr) == OFFSET_REF)
27720     return orig_expr;
27721   /* There is no need to return a proxy for a variable or enumerator.  */
27722   if (VAR_P (expr) || TREE_CODE (expr) == CONST_DECL)
27723     return orig_expr;
27724   /* Preserve string constants; conversions from string constants to
27725      "char *" are allowed, even though normally a "const char *"
27726      cannot be used to initialize a "char *".  */
27727   if (TREE_CODE (expr) == STRING_CST)
27728     return orig_expr;
27729   /* Preserve void and arithmetic constants, as an optimization -- there is no
27730      reason to create a new node.  */
27731   if (TREE_CODE (expr) == VOID_CST
27732       || TREE_CODE (expr) == INTEGER_CST
27733       || TREE_CODE (expr) == REAL_CST)
27734     return orig_expr;
27735   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
27736      There is at least one place where we want to know that a
27737      particular expression is a throw-expression: when checking a ?:
27738      expression, there are special rules if the second or third
27739      argument is a throw-expression.  */
27740   if (TREE_CODE (expr) == THROW_EXPR)
27741     return orig_expr;
27742
27743   /* Don't wrap an initializer list, we need to be able to look inside.  */
27744   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
27745     return orig_expr;
27746
27747   /* Don't wrap a dummy object, we need to be able to test for it.  */
27748   if (is_dummy_object (expr))
27749     return orig_expr;
27750
27751   if (TREE_CODE (expr) == COND_EXPR)
27752     return build3 (COND_EXPR,
27753                    TREE_TYPE (expr),
27754                    build_non_dependent_expr (TREE_OPERAND (expr, 0)),
27755                    (TREE_OPERAND (expr, 1)
27756                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
27757                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
27758                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
27759   if (TREE_CODE (expr) == COMPOUND_EXPR
27760       && !COMPOUND_EXPR_OVERLOADED (expr))
27761     return build2 (COMPOUND_EXPR,
27762                    TREE_TYPE (expr),
27763                    TREE_OPERAND (expr, 0),
27764                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
27765
27766   /* If the type is unknown, it can't really be non-dependent */
27767   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
27768
27769   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
27770   return build1_loc (EXPR_LOCATION (orig_expr), NON_DEPENDENT_EXPR,
27771                      TREE_TYPE (expr), expr);
27772 }
27773
27774 /* ARGS is a vector of expressions as arguments to a function call.
27775    Replace the arguments with equivalent non-dependent expressions.
27776    This modifies ARGS in place.  */
27777
27778 void
27779 make_args_non_dependent (vec<tree, va_gc> *args)
27780 {
27781   unsigned int ix;
27782   tree arg;
27783
27784   FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
27785     {
27786       tree newarg = build_non_dependent_expr (arg);
27787       if (newarg != arg)
27788         (*args)[ix] = newarg;
27789     }
27790 }
27791
27792 /* Returns a type which represents 'auto' or 'decltype(auto)'.  We use a
27793    TEMPLATE_TYPE_PARM with a level one deeper than the actual template
27794    parms.  If set_canonical is true, we set TYPE_CANONICAL on it.  */
27795
27796 static tree
27797 make_auto_1 (tree name, bool set_canonical)
27798 {
27799   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
27800   TYPE_NAME (au) = build_decl (input_location, TYPE_DECL, name, au);
27801   TYPE_STUB_DECL (au) = TYPE_NAME (au);
27802   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
27803     (0, processing_template_decl + 1, processing_template_decl + 1,
27804      TYPE_NAME (au), NULL_TREE);
27805   if (set_canonical)
27806     TYPE_CANONICAL (au) = canonical_type_parameter (au);
27807   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
27808   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
27809   if (name == decltype_auto_identifier)
27810     AUTO_IS_DECLTYPE (au) = true;
27811
27812   return au;
27813 }
27814
27815 tree
27816 make_decltype_auto (void)
27817 {
27818   return make_auto_1 (decltype_auto_identifier, true);
27819 }
27820
27821 tree
27822 make_auto (void)
27823 {
27824   return make_auto_1 (auto_identifier, true);
27825 }
27826
27827 /* Return a C++17 deduction placeholder for class template TMPL.  */
27828
27829 tree
27830 make_template_placeholder (tree tmpl)
27831 {
27832   tree t = make_auto_1 (auto_identifier, false);
27833   CLASS_PLACEHOLDER_TEMPLATE (t) = tmpl;
27834   /* Our canonical type depends on the placeholder.  */
27835   TYPE_CANONICAL (t) = canonical_type_parameter (t);
27836   return t;
27837 }
27838
27839 /* True iff T is a C++17 class template deduction placeholder.  */
27840
27841 bool
27842 template_placeholder_p (tree t)
27843 {
27844   return is_auto (t) && CLASS_PLACEHOLDER_TEMPLATE (t);
27845 }
27846
27847 /* Make a "constrained auto" type-specifier. This is an auto or
27848   decltype(auto) type with constraints that must be associated after
27849   deduction.  The constraint is formed from the given concept CON
27850   and its optional sequence of template arguments ARGS.
27851
27852   TYPE must be the result of make_auto_type or make_decltype_auto_type. */
27853
27854 static tree
27855 make_constrained_placeholder_type (tree type, tree con, tree args)
27856 {
27857   /* Build the constraint. */
27858   tree tmpl = DECL_TI_TEMPLATE (con);
27859   tree expr = tmpl;
27860   if (TREE_CODE (con) == FUNCTION_DECL)
27861     expr = ovl_make (tmpl);
27862   expr = build_concept_check (expr, type, args, tf_warning_or_error);
27863
27864   PLACEHOLDER_TYPE_CONSTRAINTS (type) = expr;
27865
27866   /* Our canonical type depends on the constraint.  */
27867   TYPE_CANONICAL (type) = canonical_type_parameter (type);
27868
27869   /* Attach the constraint to the type declaration. */
27870   return TYPE_NAME (type);
27871 }
27872
27873 /* Make a "constrained auto" type-specifier.  */
27874
27875 tree
27876 make_constrained_auto (tree con, tree args)
27877 {
27878   tree type = make_auto_1 (auto_identifier, false);
27879   return make_constrained_placeholder_type (type, con, args);
27880 }
27881
27882 /* Make a "constrained decltype(auto)" type-specifier.  */
27883
27884 tree
27885 make_constrained_decltype_auto (tree con, tree args)
27886 {
27887   tree type = make_auto_1 (decltype_auto_identifier, false);
27888   return make_constrained_placeholder_type (type, con, args);
27889 }
27890
27891 /* Build and return a concept definition. Like other templates, the
27892    CONCEPT_DECL node is wrapped by a TEMPLATE_DECL.  This returns the
27893    the TEMPLATE_DECL. */
27894
27895 tree
27896 finish_concept_definition (cp_expr id, tree init)
27897 {
27898   gcc_assert (identifier_p (id));
27899   gcc_assert (processing_template_decl);
27900
27901   location_t loc = id.get_location();
27902
27903   /* A concept-definition shall not have associated constraints.  */
27904   if (TEMPLATE_PARMS_CONSTRAINTS (current_template_parms))
27905     {
27906       error_at (loc, "a concept cannot be constrained");
27907       TEMPLATE_PARMS_CONSTRAINTS (current_template_parms) = NULL_TREE;
27908     }
27909
27910   /* A concept-definition shall appear in namespace scope.  Templates
27911      aren't allowed in block scope, so we only need to check for class
27912      scope.  */
27913   if (TYPE_P (current_scope()) || !DECL_NAMESPACE_SCOPE_P (current_scope ()))
27914     {
27915       error_at (loc, "concept %qE not in namespace scope", *id);
27916       return error_mark_node;
27917     }
27918
27919   /* Initially build the concept declaration; its type is bool.  */
27920   tree decl = build_lang_decl_loc (loc, CONCEPT_DECL, *id, boolean_type_node);
27921   DECL_CONTEXT (decl) = current_scope ();
27922   DECL_INITIAL (decl) = init;
27923
27924   /* Push the enclosing template.  */
27925   return push_template_decl (decl);
27926 }
27927
27928 /* Given type ARG, return std::initializer_list<ARG>.  */
27929
27930 static tree
27931 listify (tree arg)
27932 {
27933   tree std_init_list = get_namespace_binding (std_node, init_list_identifier);
27934
27935   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
27936     {
27937       gcc_rich_location richloc (input_location);
27938       maybe_add_include_fixit (&richloc, "<initializer_list>", false);
27939       error_at (&richloc,
27940                 "deducing from brace-enclosed initializer list"
27941                 " requires %<#include <initializer_list>%>");
27942
27943       return error_mark_node;
27944     }
27945   tree argvec = make_tree_vec (1);
27946   TREE_VEC_ELT (argvec, 0) = arg;
27947
27948   return lookup_template_class (std_init_list, argvec, NULL_TREE,
27949                                 NULL_TREE, 0, tf_warning_or_error);
27950 }
27951
27952 /* Replace auto in TYPE with std::initializer_list<auto>.  */
27953
27954 static tree
27955 listify_autos (tree type, tree auto_node)
27956 {
27957   tree init_auto = listify (strip_top_quals (auto_node));
27958   tree argvec = make_tree_vec (1);
27959   TREE_VEC_ELT (argvec, 0) = init_auto;
27960   if (processing_template_decl)
27961     argvec = add_to_template_args (current_template_args (), argvec);
27962   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
27963 }
27964
27965 /* Hash traits for hashing possibly constrained 'auto'
27966    TEMPLATE_TYPE_PARMs for use by do_auto_deduction.  */
27967
27968 struct auto_hash : default_hash_traits<tree>
27969 {
27970   static inline hashval_t hash (tree);
27971   static inline bool equal (tree, tree);
27972 };
27973
27974 /* Hash the 'auto' T.  */
27975
27976 inline hashval_t
27977 auto_hash::hash (tree t)
27978 {
27979   if (tree c = NON_ERROR (PLACEHOLDER_TYPE_CONSTRAINTS (t)))
27980     /* Matching constrained-type-specifiers denote the same template
27981        parameter, so hash the constraint.  */
27982     return hash_placeholder_constraint (c);
27983   else
27984     /* But unconstrained autos are all separate, so just hash the pointer.  */
27985     return iterative_hash_object (t, 0);
27986 }
27987
27988 /* Compare two 'auto's.  */
27989
27990 inline bool
27991 auto_hash::equal (tree t1, tree t2)
27992 {
27993   if (t1 == t2)
27994     return true;
27995
27996   tree c1 = PLACEHOLDER_TYPE_CONSTRAINTS (t1);
27997   tree c2 = PLACEHOLDER_TYPE_CONSTRAINTS (t2);
27998
27999   /* Two unconstrained autos are distinct.  */
28000   if (!c1 || !c2)
28001     return false;
28002
28003   return equivalent_placeholder_constraints (c1, c2);
28004 }
28005
28006 /* for_each_template_parm callback for extract_autos: if t is a (possibly
28007    constrained) auto, add it to the vector.  */
28008
28009 static int
28010 extract_autos_r (tree t, void *data)
28011 {
28012   hash_table<auto_hash> &hash = *(hash_table<auto_hash>*)data;
28013   if (is_auto (t))
28014     {
28015       /* All the autos were built with index 0; fix that up now.  */
28016       tree *p = hash.find_slot (t, INSERT);
28017       unsigned idx;
28018       if (*p)
28019         /* If this is a repeated constrained-type-specifier, use the index we
28020            chose before.  */
28021         idx = TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (*p));
28022       else
28023         {
28024           /* Otherwise this is new, so use the current count.  */
28025           *p = t;
28026           idx = hash.elements () - 1;
28027         }
28028       TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (t)) = idx;
28029     }
28030
28031   /* Always keep walking.  */
28032   return 0;
28033 }
28034
28035 /* Return a TREE_VEC of the 'auto's used in type under the Concepts TS, which
28036    says they can appear anywhere in the type.  */
28037
28038 static tree
28039 extract_autos (tree type)
28040 {
28041   hash_set<tree> visited;
28042   hash_table<auto_hash> hash (2);
28043
28044   for_each_template_parm (type, extract_autos_r, &hash, &visited, true);
28045
28046   tree tree_vec = make_tree_vec (hash.elements());
28047   for (hash_table<auto_hash>::iterator iter = hash.begin();
28048        iter != hash.end(); ++iter)
28049     {
28050       tree elt = *iter;
28051       unsigned i = TEMPLATE_PARM_IDX (TEMPLATE_TYPE_PARM_INDEX (elt));
28052       TREE_VEC_ELT (tree_vec, i)
28053         = build_tree_list (NULL_TREE, TYPE_NAME (elt));
28054     }
28055
28056   return tree_vec;
28057 }
28058
28059 /* The stem for deduction guide names.  */
28060 const char *const dguide_base = "__dguide_";
28061
28062 /* Return the name for a deduction guide for class template TMPL.  */
28063
28064 tree
28065 dguide_name (tree tmpl)
28066 {
28067   tree type = (TYPE_P (tmpl) ? tmpl : TREE_TYPE (tmpl));
28068   tree tname = TYPE_IDENTIFIER (type);
28069   char *buf = (char *) alloca (1 + strlen (dguide_base)
28070                                + IDENTIFIER_LENGTH (tname));
28071   memcpy (buf, dguide_base, strlen (dguide_base));
28072   memcpy (buf + strlen (dguide_base), IDENTIFIER_POINTER (tname),
28073           IDENTIFIER_LENGTH (tname) + 1);
28074   tree dname = get_identifier (buf);
28075   TREE_TYPE (dname) = type;
28076   return dname;
28077 }
28078
28079 /* True if NAME is the name of a deduction guide.  */
28080
28081 bool
28082 dguide_name_p (tree name)
28083 {
28084   return (TREE_CODE (name) == IDENTIFIER_NODE
28085           && TREE_TYPE (name)
28086           && !strncmp (IDENTIFIER_POINTER (name), dguide_base,
28087                        strlen (dguide_base)));
28088 }
28089
28090 /* True if FN is a deduction guide.  */
28091
28092 bool
28093 deduction_guide_p (const_tree fn)
28094 {
28095   if (DECL_P (fn))
28096     if (tree name = DECL_NAME (fn))
28097       return dguide_name_p (name);
28098   return false;
28099 }
28100
28101 /* True if FN is the copy deduction guide, i.e. A(A)->A.  */
28102
28103 bool
28104 copy_guide_p (const_tree fn)
28105 {
28106   gcc_assert (deduction_guide_p (fn));
28107   if (!DECL_ARTIFICIAL (fn))
28108     return false;
28109   tree parms = FUNCTION_FIRST_USER_PARMTYPE (DECL_TI_TEMPLATE (fn));
28110   return (TREE_CHAIN (parms) == void_list_node
28111           && same_type_p (TREE_VALUE (parms), TREE_TYPE (DECL_NAME (fn))));
28112 }
28113
28114 /* True if FN is a guide generated from a constructor template.  */
28115
28116 bool
28117 template_guide_p (const_tree fn)
28118 {
28119   gcc_assert (deduction_guide_p (fn));
28120   if (!DECL_ARTIFICIAL (fn))
28121     return false;
28122   tree tmpl = DECL_TI_TEMPLATE (fn);
28123   if (tree org = DECL_ABSTRACT_ORIGIN (tmpl))
28124     return PRIMARY_TEMPLATE_P (org);
28125   return false;
28126 }
28127
28128 /* True if FN is an aggregate initialization guide or the copy deduction
28129    guide.  */
28130
28131 bool
28132 builtin_guide_p (const_tree fn)
28133 {
28134   if (!deduction_guide_p (fn))
28135     return false;
28136   if (!DECL_ARTIFICIAL (fn))
28137     /* Explicitly declared.  */
28138     return false;
28139   if (DECL_ABSTRACT_ORIGIN (fn))
28140     /* Derived from a constructor.  */
28141     return false;
28142   return true;
28143 }
28144
28145 /* OLDDECL is a _DECL for a template parameter.  Return a similar parameter at
28146    LEVEL:INDEX, using tsubst_args and complain for substitution into non-type
28147    template parameter types.  Note that the handling of template template
28148    parameters relies on current_template_parms being set appropriately for the
28149    new template.  */
28150
28151 static tree
28152 rewrite_template_parm (tree olddecl, unsigned index, unsigned level,
28153                        tree tsubst_args, tsubst_flags_t complain)
28154 {
28155   if (olddecl == error_mark_node)
28156     return error_mark_node;
28157
28158   tree oldidx = get_template_parm_index (olddecl);
28159
28160   tree newtype;
28161   if (TREE_CODE (olddecl) == TYPE_DECL
28162       || TREE_CODE (olddecl) == TEMPLATE_DECL)
28163     {
28164       tree oldtype = TREE_TYPE (olddecl);
28165       newtype = cxx_make_type (TREE_CODE (oldtype));
28166       TYPE_MAIN_VARIANT (newtype) = newtype;
28167       if (TREE_CODE (oldtype) == TEMPLATE_TYPE_PARM)
28168         TEMPLATE_TYPE_PARM_FOR_CLASS (newtype)
28169           = TEMPLATE_TYPE_PARM_FOR_CLASS (oldtype);
28170     }
28171   else
28172     {
28173       newtype = TREE_TYPE (olddecl);
28174       if (type_uses_auto (newtype))
28175         {
28176           // Substitute once to fix references to other template parameters.
28177           newtype = tsubst (newtype, tsubst_args,
28178                             complain|tf_partial, NULL_TREE);
28179           // Now substitute again to reduce the level of the auto.
28180           newtype = tsubst (newtype, current_template_args (),
28181                             complain, NULL_TREE);
28182         }
28183       else
28184         newtype = tsubst (newtype, tsubst_args,
28185                           complain, NULL_TREE);
28186     }
28187
28188   tree newdecl
28189     = build_decl (DECL_SOURCE_LOCATION (olddecl), TREE_CODE (olddecl),
28190                   DECL_NAME (olddecl), newtype);
28191   SET_DECL_TEMPLATE_PARM_P (newdecl);
28192
28193   tree newidx;
28194   if (TREE_CODE (olddecl) == TYPE_DECL
28195       || TREE_CODE (olddecl) == TEMPLATE_DECL)
28196     {
28197       newidx = TEMPLATE_TYPE_PARM_INDEX (newtype)
28198         = build_template_parm_index (index, level, level,
28199                                      newdecl, newtype);
28200       TEMPLATE_PARM_PARAMETER_PACK (newidx)
28201         = TEMPLATE_PARM_PARAMETER_PACK (oldidx);
28202       TYPE_STUB_DECL (newtype) = TYPE_NAME (newtype) = newdecl;
28203       if (TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (olddecl)))
28204         SET_TYPE_STRUCTURAL_EQUALITY (newtype);
28205       else
28206         TYPE_CANONICAL (newtype) = canonical_type_parameter (newtype);
28207
28208       if (TREE_CODE (olddecl) == TEMPLATE_DECL)
28209         {
28210           DECL_TEMPLATE_RESULT (newdecl)
28211             = build_decl (DECL_SOURCE_LOCATION (olddecl), TYPE_DECL,
28212                           DECL_NAME (olddecl), newtype);
28213           DECL_ARTIFICIAL (DECL_TEMPLATE_RESULT (newdecl)) = true;
28214           // First create a copy (ttargs) of tsubst_args with an
28215           // additional level for the template template parameter's own
28216           // template parameters (ttparms).
28217           tree ttparms = (INNERMOST_TEMPLATE_PARMS
28218                           (DECL_TEMPLATE_PARMS (olddecl)));
28219           const int depth = TMPL_ARGS_DEPTH (tsubst_args);
28220           tree ttargs = make_tree_vec (depth + 1);
28221           for (int i = 0; i < depth; ++i)
28222             TREE_VEC_ELT (ttargs, i) = TREE_VEC_ELT (tsubst_args, i);
28223           TREE_VEC_ELT (ttargs, depth)
28224             = template_parms_level_to_args (ttparms);
28225           // Substitute ttargs into ttparms to fix references to
28226           // other template parameters.
28227           ttparms = tsubst_template_parms_level (ttparms, ttargs,
28228                                                  complain|tf_partial);
28229           // Now substitute again with args based on tparms, to reduce
28230           // the level of the ttparms.
28231           ttargs = current_template_args ();
28232           ttparms = tsubst_template_parms_level (ttparms, ttargs,
28233                                                  complain);
28234           // Finally, tack the adjusted parms onto tparms.
28235           ttparms = tree_cons (size_int (depth), ttparms,
28236                                current_template_parms);
28237           DECL_TEMPLATE_PARMS (newdecl) = ttparms;
28238         }
28239     }
28240   else
28241     {
28242       tree oldconst = TEMPLATE_PARM_DECL (oldidx);
28243       tree newconst
28244         = build_decl (DECL_SOURCE_LOCATION (oldconst),
28245                       TREE_CODE (oldconst),
28246                       DECL_NAME (oldconst), newtype);
28247       TREE_CONSTANT (newconst) = TREE_CONSTANT (newdecl)
28248         = TREE_READONLY (newconst) = TREE_READONLY (newdecl) = true;
28249       SET_DECL_TEMPLATE_PARM_P (newconst);
28250       newidx = build_template_parm_index (index, level, level,
28251                                           newconst, newtype);
28252       TEMPLATE_PARM_PARAMETER_PACK (newidx)
28253         = TEMPLATE_PARM_PARAMETER_PACK (oldidx);
28254       DECL_INITIAL (newdecl) = DECL_INITIAL (newconst) = newidx;
28255     }
28256
28257   return newdecl;
28258 }
28259
28260 /* As rewrite_template_parm, but for the whole TREE_LIST representing a
28261    template parameter.  */
28262
28263 static tree
28264 rewrite_tparm_list (tree oldelt, unsigned index, unsigned level,
28265                     tree targs, unsigned targs_index, tsubst_flags_t complain)
28266 {
28267   tree olddecl = TREE_VALUE (oldelt);
28268   tree newdecl = rewrite_template_parm (olddecl, index, level,
28269                                         targs, complain);
28270   if (newdecl == error_mark_node)
28271     return error_mark_node;
28272   tree newdef = tsubst_template_arg (TREE_PURPOSE (oldelt),
28273                                      targs, complain, NULL_TREE);
28274   tree list = build_tree_list (newdef, newdecl);
28275   TEMPLATE_PARM_CONSTRAINTS (list)
28276     = tsubst_constraint_info (TEMPLATE_PARM_CONSTRAINTS (oldelt),
28277                               targs, complain, NULL_TREE);
28278   int depth = TMPL_ARGS_DEPTH (targs);
28279   TMPL_ARG (targs, depth, targs_index) = template_parm_to_arg (list);
28280   return list;
28281 }
28282
28283 /* Returns a C++17 class deduction guide template based on the constructor
28284    CTOR.  As a special case, CTOR can be a RECORD_TYPE for an implicit default
28285    guide, REFERENCE_TYPE for an implicit copy/move guide, or TREE_LIST for an
28286    aggregate initialization guide.  */
28287
28288 static tree
28289 build_deduction_guide (tree type, tree ctor, tree outer_args, tsubst_flags_t complain)
28290 {
28291   tree tparms, targs, fparms, fargs, ci;
28292   bool memtmpl = false;
28293   bool explicit_p;
28294   location_t loc;
28295   tree fn_tmpl = NULL_TREE;
28296
28297   if (outer_args)
28298     {
28299       ++processing_template_decl;
28300       type = tsubst (type, outer_args, complain, CLASSTYPE_TI_TEMPLATE (type));
28301       --processing_template_decl;
28302     }
28303
28304   if (!DECL_DECLARES_FUNCTION_P (ctor))
28305     {
28306       if (TYPE_P (ctor))
28307         {
28308           bool copy_p = TYPE_REF_P (ctor);
28309           if (copy_p)
28310             fparms = tree_cons (NULL_TREE, type, void_list_node);
28311           else
28312             fparms = void_list_node;
28313         }
28314       else if (TREE_CODE (ctor) == TREE_LIST)
28315         fparms = ctor;
28316       else
28317         gcc_unreachable ();
28318
28319       tree ctmpl = CLASSTYPE_TI_TEMPLATE (type);
28320       tparms = DECL_TEMPLATE_PARMS (ctmpl);
28321       targs = CLASSTYPE_TI_ARGS (type);
28322       ci = NULL_TREE;
28323       fargs = NULL_TREE;
28324       loc = DECL_SOURCE_LOCATION (ctmpl);
28325       explicit_p = false;
28326     }
28327   else
28328     {
28329       ++processing_template_decl;
28330       bool ok = true;
28331
28332       fn_tmpl
28333         = (TREE_CODE (ctor) == TEMPLATE_DECL ? ctor
28334            : DECL_TI_TEMPLATE (ctor));
28335       if (outer_args)
28336         fn_tmpl = tsubst (fn_tmpl, outer_args, complain, ctor);
28337       ctor = DECL_TEMPLATE_RESULT (fn_tmpl);
28338
28339       tparms = DECL_TEMPLATE_PARMS (fn_tmpl);
28340       /* If type is a member class template, DECL_TI_ARGS (ctor) will have
28341          fully specialized args for the enclosing class.  Strip those off, as
28342          the deduction guide won't have those template parameters.  */
28343       targs = get_innermost_template_args (DECL_TI_ARGS (ctor),
28344                                                 TMPL_PARMS_DEPTH (tparms));
28345       /* Discard the 'this' parameter.  */
28346       fparms = FUNCTION_ARG_CHAIN (ctor);
28347       fargs = TREE_CHAIN (DECL_ARGUMENTS (ctor));
28348       ci = get_constraints (ctor);
28349       loc = DECL_SOURCE_LOCATION (ctor);
28350       explicit_p = DECL_NONCONVERTING_P (ctor);
28351
28352       if (PRIMARY_TEMPLATE_P (fn_tmpl))
28353         {
28354           memtmpl = true;
28355
28356           /* For a member template constructor, we need to flatten the two
28357              template parameter lists into one, and then adjust the function
28358              signature accordingly.  This gets...complicated.  */
28359           tree save_parms = current_template_parms;
28360
28361           /* For a member template we should have two levels of parms/args, one
28362              for the class and one for the constructor.  We stripped
28363              specialized args for further enclosing classes above.  */
28364           const int depth = 2;
28365           gcc_assert (TMPL_ARGS_DEPTH (targs) == depth);
28366
28367           /* Template args for translating references to the two-level template
28368              parameters into references to the one-level template parameters we
28369              are creating.  */
28370           tree tsubst_args = copy_node (targs);
28371           TMPL_ARGS_LEVEL (tsubst_args, depth)
28372             = copy_node (TMPL_ARGS_LEVEL (tsubst_args, depth));
28373
28374           /* Template parms for the constructor template.  */
28375           tree ftparms = TREE_VALUE (tparms);
28376           unsigned flen = TREE_VEC_LENGTH (ftparms);
28377           /* Template parms for the class template.  */
28378           tparms = TREE_CHAIN (tparms);
28379           tree ctparms = TREE_VALUE (tparms);
28380           unsigned clen = TREE_VEC_LENGTH (ctparms);
28381           /* Template parms for the deduction guide start as a copy of the
28382              template parms for the class.  We set current_template_parms for
28383              lookup_template_class_1.  */
28384           current_template_parms = tparms = copy_node (tparms);
28385           tree new_vec = TREE_VALUE (tparms) = make_tree_vec (flen + clen);
28386           for (unsigned i = 0; i < clen; ++i)
28387             TREE_VEC_ELT (new_vec, i) = TREE_VEC_ELT (ctparms, i);
28388
28389           /* Now we need to rewrite the constructor parms to append them to the
28390              class parms.  */
28391           for (unsigned i = 0; i < flen; ++i)
28392             {
28393               unsigned index = i + clen;
28394               unsigned level = 1;
28395               tree oldelt = TREE_VEC_ELT (ftparms, i);
28396               tree newelt
28397                 = rewrite_tparm_list (oldelt, index, level,
28398                                       tsubst_args, i, complain);
28399               if (newelt == error_mark_node)
28400                 ok = false;
28401               TREE_VEC_ELT (new_vec, index) = newelt;
28402             }
28403
28404           /* Now we have a final set of template parms to substitute into the
28405              function signature.  */
28406           targs = template_parms_to_args (tparms);
28407           fparms = tsubst_arg_types (fparms, tsubst_args, NULL_TREE,
28408                                      complain, ctor);
28409           if (fparms == error_mark_node)
28410             ok = false;
28411           if (ci)
28412             ci = tsubst_constraint_info (ci, tsubst_args, complain, ctor);
28413
28414           /* Parms are to have DECL_CHAIN tsubsted, which would be skipped if
28415              cp_unevaluated_operand.  */
28416           cp_evaluated ev;
28417           fargs = tsubst (fargs, tsubst_args, complain, ctor);
28418           current_template_parms = save_parms;
28419         }
28420       else
28421         {
28422           /* Substitute in the same arguments to rewrite class members into
28423              references to members of an unknown specialization.  */
28424           cp_evaluated ev;
28425           fparms = tsubst_arg_types (fparms, targs, NULL_TREE, complain, ctor);
28426           fargs = tsubst (fargs, targs, complain, ctor);
28427           if (ci)
28428             ci = tsubst_constraint_info (ci, targs, complain, ctor);
28429         }
28430
28431       --processing_template_decl;
28432       if (!ok)
28433         return error_mark_node;
28434     }
28435
28436   if (!memtmpl)
28437     {
28438       /* Copy the parms so we can set DECL_PRIMARY_TEMPLATE.  */
28439       tparms = copy_node (tparms);
28440       INNERMOST_TEMPLATE_PARMS (tparms)
28441         = copy_node (INNERMOST_TEMPLATE_PARMS (tparms));
28442     }
28443
28444   tree fntype = build_function_type (type, fparms);
28445   tree ded_fn = build_lang_decl_loc (loc,
28446                                      FUNCTION_DECL,
28447                                      dguide_name (type), fntype);
28448   DECL_ARGUMENTS (ded_fn) = fargs;
28449   DECL_ARTIFICIAL (ded_fn) = true;
28450   DECL_NONCONVERTING_P (ded_fn) = explicit_p;
28451   tree ded_tmpl = build_template_decl (ded_fn, tparms, /*member*/false);
28452   DECL_ARTIFICIAL (ded_tmpl) = true;
28453   DECL_TEMPLATE_INFO (ded_fn) = build_template_info (ded_tmpl, targs);
28454   DECL_PRIMARY_TEMPLATE (ded_tmpl) = ded_tmpl;
28455   if (DECL_P (ctor))
28456     DECL_ABSTRACT_ORIGIN (ded_tmpl) = fn_tmpl;
28457   if (ci)
28458     set_constraints (ded_tmpl, ci);
28459
28460   return ded_tmpl;
28461 }
28462
28463 /* Add to LIST the member types for the reshaped initializer CTOR.  */
28464
28465 static tree
28466 collect_ctor_idx_types (tree ctor, tree list, tree elt = NULL_TREE)
28467 {
28468   vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (ctor);
28469   tree idx, val; unsigned i;
28470   FOR_EACH_CONSTRUCTOR_ELT (v, i, idx, val)
28471     {
28472       tree ftype = elt ? elt : TREE_TYPE (idx);
28473       if (BRACE_ENCLOSED_INITIALIZER_P (val)
28474           && CONSTRUCTOR_NELTS (val)
28475           /* As in reshape_init_r, a non-aggregate or array-of-dependent-bound
28476              type gets a single initializer.  */
28477           && CP_AGGREGATE_TYPE_P (ftype)
28478           && !(TREE_CODE (ftype) == ARRAY_TYPE
28479                && uses_template_parms (TYPE_DOMAIN (ftype))))
28480         {
28481           tree subelt = NULL_TREE;
28482           if (TREE_CODE (ftype) == ARRAY_TYPE)
28483             subelt = TREE_TYPE (ftype);
28484           list = collect_ctor_idx_types (val, list, subelt);
28485           continue;
28486         }
28487       tree arg = NULL_TREE;
28488       if (i == v->length() - 1
28489           && PACK_EXPANSION_P (ftype))
28490         /* Give the trailing pack expansion parameter a default argument to
28491            match aggregate initialization behavior, even if we deduce the
28492            length of the pack separately to more than we have initializers. */
28493         arg = build_constructor (init_list_type_node, NULL);
28494       /* if ei is of array type and xi is a braced-init-list or string literal,
28495          Ti is an rvalue reference to the declared type of ei */
28496       STRIP_ANY_LOCATION_WRAPPER (val);
28497       if (TREE_CODE (ftype) == ARRAY_TYPE
28498           && (BRACE_ENCLOSED_INITIALIZER_P (val)
28499               || TREE_CODE (val) == STRING_CST))
28500         {
28501           if (TREE_CODE (val) == STRING_CST)
28502             ftype = cp_build_qualified_type
28503               (ftype, cp_type_quals (ftype) | TYPE_QUAL_CONST);
28504           ftype = (cp_build_reference_type
28505                    (ftype, BRACE_ENCLOSED_INITIALIZER_P (val)));
28506         }
28507       list = tree_cons (arg, ftype, list);
28508     }
28509
28510   return list;
28511 }
28512
28513 /* Return whether ETYPE is, or is derived from, a specialization of TMPL.  */
28514
28515 static bool
28516 is_spec_or_derived (tree etype, tree tmpl)
28517 {
28518   if (!etype || !CLASS_TYPE_P (etype))
28519     return false;
28520
28521   tree type = TREE_TYPE (tmpl);
28522   tree tparms = (INNERMOST_TEMPLATE_PARMS
28523                  (DECL_TEMPLATE_PARMS (tmpl)));
28524   tree targs = make_tree_vec (TREE_VEC_LENGTH (tparms));
28525   int err = unify (tparms, targs, type, etype,
28526                    UNIFY_ALLOW_DERIVED, /*explain*/false);
28527   ggc_free (targs);
28528   return !err;
28529 }
28530
28531 /* Return a C++20 aggregate deduction candidate for TYPE initialized from
28532    INIT.  */
28533
28534 static tree
28535 maybe_aggr_guide (tree tmpl, tree init, vec<tree,va_gc> *args)
28536 {
28537   if (cxx_dialect < cxx20)
28538     return NULL_TREE;
28539
28540   if (init == NULL_TREE)
28541     return NULL_TREE;
28542
28543   tree type = TREE_TYPE (tmpl);
28544   if (!CP_AGGREGATE_TYPE_P (type))
28545     return NULL_TREE;
28546
28547   /* No aggregate candidate for copy-initialization.  */
28548   if (args->length() == 1)
28549     {
28550       tree val = (*args)[0];
28551       if (is_spec_or_derived (tmpl, TREE_TYPE (val)))
28552         return NULL_TREE;
28553     }
28554
28555   /* If we encounter a problem, we just won't add the candidate.  */
28556   tsubst_flags_t complain = tf_none;
28557
28558   tree parms = NULL_TREE;
28559   if (BRACE_ENCLOSED_INITIALIZER_P (init))
28560     {
28561       init = reshape_init (type, init, complain);
28562       if (init == error_mark_node)
28563         return NULL_TREE;
28564       parms = collect_ctor_idx_types (init, parms);
28565     }
28566   else if (TREE_CODE (init) == TREE_LIST)
28567     {
28568       int len = list_length (init);
28569       for (tree field = TYPE_FIELDS (type);
28570            len;
28571            --len, field = DECL_CHAIN (field))
28572         {
28573           field = next_initializable_field (field);
28574           if (!field)
28575             return NULL_TREE;
28576           tree ftype = finish_decltype_type (field, true, complain);
28577           parms = tree_cons (NULL_TREE, ftype, parms);
28578         }
28579     }
28580   else
28581     /* Aggregate initialization doesn't apply to an initializer expression.  */
28582     return NULL_TREE;
28583
28584   if (parms)
28585     {
28586       tree last = parms;
28587       parms = nreverse (parms);
28588       TREE_CHAIN (last) = void_list_node;
28589       tree guide = build_deduction_guide (type, parms, NULL_TREE, complain);
28590       return guide;
28591     }
28592
28593   return NULL_TREE;
28594 }
28595
28596 /* UGUIDES are the deduction guides for the underlying template of alias
28597    template TMPL; adjust them to be deduction guides for TMPL.  */
28598
28599 static tree
28600 alias_ctad_tweaks (tree tmpl, tree uguides)
28601 {
28602   /* [over.match.class.deduct]: When resolving a placeholder for a deduced
28603      class type (9.2.8.2) where the template-name names an alias template A,
28604      the defining-type-id of A must be of the form
28605
28606      typename(opt) nested-name-specifier(opt) template(opt) simple-template-id
28607
28608      as specified in 9.2.8.2. The guides of A are the set of functions or
28609      function templates formed as follows. For each function or function
28610      template f in the guides of the template named by the simple-template-id
28611      of the defining-type-id, the template arguments of the return type of f
28612      are deduced from the defining-type-id of A according to the process in
28613      13.10.2.5 with the exception that deduction does not fail if not all
28614      template arguments are deduced. Let g denote the result of substituting
28615      these deductions into f. If substitution succeeds, form a function or
28616      function template f' with the following properties and add it to the set
28617      of guides of A:
28618
28619      * The function type of f' is the function type of g.
28620
28621      * If f is a function template, f' is a function template whose template
28622      parameter list consists of all the template parameters of A (including
28623      their default template arguments) that appear in the above deductions or
28624      (recursively) in their default template arguments, followed by the
28625      template parameters of f that were not deduced (including their default
28626      template arguments), otherwise f' is not a function template.
28627
28628      * The associated constraints (13.5.2) are the conjunction of the
28629      associated constraints of g and a constraint that is satisfied if and only
28630      if the arguments of A are deducible (see below) from the return type.
28631
28632      * If f is a copy deduction candidate (12.4.1.8), then f' is considered to
28633      be so as well.
28634
28635      * If f was generated from a deduction-guide (12.4.1.8), then f' is
28636      considered to be so as well.
28637
28638      * The explicit-specifier of f' is the explicit-specifier of g (if
28639      any).  */
28640
28641   /* This implementation differs from the above in two significant ways:
28642
28643      1) We include all template parameters of A, not just some.
28644      2) The added constraint is same_type instead of deducible.
28645
28646      I believe that while it's probably possible to construct a testcase that
28647      behaves differently with this simplification, it should have the same
28648      effect for real uses.  Including all template parameters means that we
28649      deduce all parameters of A when resolving the call, so when we're in the
28650      constraint we don't need to deduce them again, we can just check whether
28651      the deduction produced the desired result.  */
28652
28653   tsubst_flags_t complain = tf_warning_or_error;
28654   tree atype = TREE_TYPE (tmpl);
28655   tree aguides = NULL_TREE;
28656   tree atparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
28657   unsigned natparms = TREE_VEC_LENGTH (atparms);
28658   tree utype = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
28659   for (ovl_iterator iter (uguides); iter; ++iter)
28660     {
28661       tree f = *iter;
28662       tree in_decl = f;
28663       location_t loc = DECL_SOURCE_LOCATION (f);
28664       tree ret = TREE_TYPE (TREE_TYPE (f));
28665       tree fprime = f;
28666       if (TREE_CODE (f) == TEMPLATE_DECL)
28667         {
28668           processing_template_decl_sentinel ptds (/*reset*/false);
28669           ++processing_template_decl;
28670
28671           /* Deduce template arguments for f from the type-id of A.  */
28672           tree ftparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (f));
28673           unsigned len = TREE_VEC_LENGTH (ftparms);
28674           tree targs = make_tree_vec (len);
28675           int err = unify (ftparms, targs, ret, utype, UNIFY_ALLOW_NONE, false);
28676           gcc_assert (!err);
28677
28678           /* The number of parms for f' is the number of parms for A plus
28679              non-deduced parms of f.  */
28680           unsigned ndlen = 0;
28681           unsigned j;
28682           for (unsigned i = 0; i < len; ++i)
28683             if (TREE_VEC_ELT (targs, i) == NULL_TREE)
28684               ++ndlen;
28685           tree gtparms = make_tree_vec (natparms + ndlen);
28686
28687           /* First copy over the parms of A.  */
28688           for (j = 0; j < natparms; ++j)
28689             TREE_VEC_ELT (gtparms, j) = TREE_VEC_ELT (atparms, j);
28690           /* Now rewrite the non-deduced parms of f.  */
28691           for (unsigned i = 0; ndlen && i < len; ++i)
28692             if (TREE_VEC_ELT (targs, i) == NULL_TREE)
28693               {
28694                 --ndlen;
28695                 unsigned index = j++;
28696                 unsigned level = 1;
28697                 tree oldlist = TREE_VEC_ELT (ftparms, i);
28698                 tree list = rewrite_tparm_list (oldlist, index, level,
28699                                                 targs, i, complain);
28700                 TREE_VEC_ELT (gtparms, index) = list;
28701               }
28702           gtparms = build_tree_list (size_one_node, gtparms);
28703
28704           /* Substitute the deduced arguments plus the rewritten template
28705              parameters into f to get g.  This covers the type, copyness,
28706              guideness, and explicit-specifier.  */
28707           tree g = tsubst_decl (DECL_TEMPLATE_RESULT (f), targs, complain);
28708           if (g == error_mark_node)
28709             return error_mark_node;
28710           DECL_USE_TEMPLATE (g) = 0;
28711           fprime = build_template_decl (g, gtparms, false);
28712           DECL_TEMPLATE_RESULT (fprime) = g;
28713           TREE_TYPE (fprime) = TREE_TYPE (g);
28714           tree gtargs = template_parms_to_args (gtparms);
28715           DECL_TEMPLATE_INFO (g) = build_template_info (fprime, gtargs);
28716           DECL_PRIMARY_TEMPLATE (fprime) = fprime;
28717
28718           /* Substitute the associated constraints.  */
28719           tree ci = get_constraints (f);
28720           if (ci)
28721             ci = tsubst_constraint_info (ci, targs, complain, in_decl);
28722           if (ci == error_mark_node)
28723             return error_mark_node;
28724
28725           /* Add a constraint that the return type matches the instantiation of
28726              A with the same template arguments.  */
28727           ret = TREE_TYPE (TREE_TYPE (fprime));
28728           if (!same_type_p (atype, ret)
28729               /* FIXME this should mean they don't compare as equivalent.  */
28730               || dependent_alias_template_spec_p (atype, nt_opaque))
28731             {
28732               tree same = finish_trait_expr (loc, CPTK_IS_SAME_AS, atype, ret);
28733               ci = append_constraint (ci, same);
28734             }
28735
28736           if (ci)
28737             {
28738               remove_constraints (fprime);
28739               set_constraints (fprime, ci);
28740             }
28741         }
28742       else
28743         {
28744           /* For a non-template deduction guide, if the arguments of A aren't
28745              deducible from the return type, don't add the candidate.  */
28746           tree targs = make_tree_vec (natparms);
28747           int err = unify (atparms, targs, utype, ret, UNIFY_ALLOW_NONE, false);
28748           for (unsigned i = 0; !err && i < natparms; ++i)
28749             if (TREE_VEC_ELT (targs, i) == NULL_TREE)
28750               err = true;
28751           if (err)
28752             continue;
28753         }
28754
28755       aguides = lookup_add (fprime, aguides);
28756     }
28757
28758   return aguides;
28759 }
28760
28761 /* Return artificial deduction guides built from the constructors of class
28762    template TMPL.  */
28763
28764 static tree
28765 ctor_deduction_guides_for (tree tmpl, tsubst_flags_t complain)
28766 {
28767   tree type = TREE_TYPE (tmpl);
28768   tree outer_args = NULL_TREE;
28769   if (DECL_CLASS_SCOPE_P (tmpl)
28770       && CLASSTYPE_TEMPLATE_INSTANTIATION (DECL_CONTEXT (tmpl)))
28771     {
28772       outer_args = CLASSTYPE_TI_ARGS (DECL_CONTEXT (tmpl));
28773       type = TREE_TYPE (most_general_template (tmpl));
28774     }
28775
28776   tree cands = NULL_TREE;
28777
28778   for (ovl_iterator iter (CLASSTYPE_CONSTRUCTORS (type)); iter; ++iter)
28779     {
28780       /* Skip inherited constructors.  */
28781       if (iter.using_p ())
28782         continue;
28783
28784       tree guide = build_deduction_guide (type, *iter, outer_args, complain);
28785       cands = lookup_add (guide, cands);
28786     }
28787
28788   /* Add implicit default constructor deduction guide.  */
28789   if (!TYPE_HAS_USER_CONSTRUCTOR (type))
28790     {
28791       tree guide = build_deduction_guide (type, type, outer_args,
28792                                           complain);
28793       cands = lookup_add (guide, cands);
28794     }
28795
28796   /* Add copy guide.  */
28797   {
28798     tree gtype = build_reference_type (type);
28799     tree guide = build_deduction_guide (type, gtype, outer_args,
28800                                         complain);
28801     cands = lookup_add (guide, cands);
28802   }
28803
28804   return cands;
28805 }
28806
28807 static GTY((deletable)) hash_map<tree, tree_pair_p> *dguide_cache;
28808
28809 /* Return the non-aggregate deduction guides for deducible template TMPL.  The
28810    aggregate candidate is added separately because it depends on the
28811    initializer.  */
28812
28813 static tree
28814 deduction_guides_for (tree tmpl, tsubst_flags_t complain)
28815 {
28816   tree guides = NULL_TREE;
28817   if (DECL_ALIAS_TEMPLATE_P (tmpl))
28818     {
28819       tree under = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
28820       tree tinfo = get_template_info (under);
28821       guides = deduction_guides_for (TI_TEMPLATE (tinfo), complain);
28822     }
28823   else
28824     {
28825       guides = lookup_qualified_name (CP_DECL_CONTEXT (tmpl),
28826                                       dguide_name (tmpl),
28827                                       LOOK_want::NORMAL, /*complain*/false);
28828       if (guides == error_mark_node)
28829         guides = NULL_TREE;
28830     }
28831
28832   /* Cache the deduction guides for a template.  We also remember the result of
28833      lookup, and rebuild everything if it changes; should be very rare.  */
28834   tree_pair_p cache = NULL;
28835   if (tree_pair_p &r
28836       = hash_map_safe_get_or_insert<hm_ggc> (dguide_cache, tmpl))
28837     {
28838       cache = r;
28839       if (cache->purpose == guides)
28840         return cache->value;
28841     }
28842   else
28843     {
28844       r = cache = ggc_cleared_alloc<tree_pair_s> ();
28845       cache->purpose = guides;
28846     }
28847
28848   tree cands = NULL_TREE;
28849   if (DECL_ALIAS_TEMPLATE_P (tmpl))
28850     cands = alias_ctad_tweaks (tmpl, guides);
28851   else
28852     {
28853       cands = ctor_deduction_guides_for (tmpl, complain);
28854       for (ovl_iterator it (guides); it; ++it)
28855         cands = lookup_add (*it, cands);
28856     }
28857
28858   cache->value = cands;
28859   return cands;
28860 }
28861
28862 /* Return whether TMPL is a (class template argument-) deducible template.  */
28863
28864 bool
28865 ctad_template_p (tree tmpl)
28866 {
28867   /* A deducible template is either a class template or is an alias template
28868      whose defining-type-id is of the form
28869
28870       typename(opt) nested-name-specifier(opt) template(opt) simple-template-id
28871
28872      where the nested-name-specifier (if any) is non-dependent and the
28873      template-name of the simple-template-id names a deducible template.  */
28874
28875   if (DECL_CLASS_TEMPLATE_P (tmpl)
28876       || DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl))
28877     return true;
28878   if (!DECL_ALIAS_TEMPLATE_P (tmpl))
28879     return false;
28880   tree orig = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
28881   if (tree tinfo = get_template_info (orig))
28882     return ctad_template_p (TI_TEMPLATE (tinfo));
28883   return false;
28884 }
28885
28886 /* Deduce template arguments for the class template placeholder PTYPE for
28887    template TMPL based on the initializer INIT, and return the resulting
28888    type.  */
28889
28890 static tree
28891 do_class_deduction (tree ptype, tree tmpl, tree init,
28892                     int flags, tsubst_flags_t complain)
28893 {
28894   /* We should have handled this in the caller.  */
28895   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl))
28896     return ptype;
28897
28898   /* Look through alias templates that just rename another template.  */
28899   tmpl = get_underlying_template (tmpl);
28900   if (!ctad_template_p (tmpl))
28901     {
28902       if (complain & tf_error)
28903         error ("non-deducible template %qT used without template arguments", tmpl);
28904       return error_mark_node;
28905     }
28906   else if (cxx_dialect < cxx20 && DECL_ALIAS_TEMPLATE_P (tmpl))
28907     {
28908       /* This doesn't affect conforming C++17 code, so just pedwarn.  */
28909       if (complain & tf_warning_or_error)
28910         pedwarn (input_location, 0, "alias template deduction only available "
28911                  "with %<-std=c++20%> or %<-std=gnu++20%>");
28912     }
28913
28914   if (init && TREE_TYPE (init) == ptype)
28915     /* Using the template parm as its own argument.  */
28916     return ptype;
28917
28918   tree type = TREE_TYPE (tmpl);
28919
28920   bool try_list_ctor = false;
28921
28922   releasing_vec rv_args = NULL;
28923   vec<tree,va_gc> *&args = *&rv_args;
28924   if (init == NULL_TREE)
28925     args = make_tree_vector ();
28926   else if (BRACE_ENCLOSED_INITIALIZER_P (init))
28927     {
28928       try_list_ctor = TYPE_HAS_LIST_CTOR (type);
28929       if (try_list_ctor && CONSTRUCTOR_NELTS (init) == 1)
28930         {
28931           /* As an exception, the first phase in 16.3.1.7 (considering the
28932              initializer list as a single argument) is omitted if the
28933              initializer list consists of a single expression of type cv U,
28934              where U is a specialization of C or a class derived from a
28935              specialization of C.  */
28936           tree elt = CONSTRUCTOR_ELT (init, 0)->value;
28937           if (is_spec_or_derived (TREE_TYPE (elt), tmpl))
28938             try_list_ctor = false;
28939         }
28940       if (try_list_ctor || is_std_init_list (type))
28941         args = make_tree_vector_single (init);
28942       else
28943         args = make_tree_vector_from_ctor (init);
28944     }
28945   else if (TREE_CODE (init) == TREE_LIST)
28946     args = make_tree_vector_from_list (init);
28947   else
28948     args = make_tree_vector_single (init);
28949
28950   /* Do this now to avoid problems with erroneous args later on.  */
28951   args = resolve_args (args, complain);
28952   if (args == NULL)
28953     return error_mark_node;
28954
28955   tree cands = deduction_guides_for (tmpl, complain);
28956   if (cands == error_mark_node)
28957     return error_mark_node;
28958
28959   /* Prune explicit deduction guides in copy-initialization context.  */
28960   bool elided = false;
28961   if (flags & LOOKUP_ONLYCONVERTING)
28962     {
28963       for (lkp_iterator iter (cands); !elided && iter; ++iter)
28964         if (DECL_NONCONVERTING_P (STRIP_TEMPLATE (*iter)))
28965           elided = true;
28966
28967       if (elided)
28968         {
28969           /* Found a nonconverting guide, prune the candidates.  */
28970           tree pruned = NULL_TREE;
28971           for (lkp_iterator iter (cands); iter; ++iter)
28972             if (!DECL_NONCONVERTING_P (STRIP_TEMPLATE (*iter)))
28973               pruned = lookup_add (*iter, pruned);
28974
28975           cands = pruned;
28976         }
28977     }
28978
28979   if (tree guide = maybe_aggr_guide (tmpl, init, args))
28980     cands = lookup_add (guide, cands);
28981
28982   tree call = error_mark_node;
28983
28984   /* If this is list-initialization and the class has a list constructor, first
28985      try deducing from the list as a single argument, as [over.match.list].  */
28986   tree list_cands = NULL_TREE;
28987   if (try_list_ctor && cands)
28988     for (lkp_iterator iter (cands); iter; ++iter)
28989       {
28990         tree dg = *iter;
28991         if (is_list_ctor (dg))
28992           list_cands = lookup_add (dg, list_cands);
28993       }
28994   if (list_cands)
28995     {
28996       ++cp_unevaluated_operand;
28997       call = build_new_function_call (list_cands, &args, tf_decltype);
28998       --cp_unevaluated_operand;
28999
29000       if (call == error_mark_node)
29001         {
29002           /* That didn't work, now try treating the list as a sequence of
29003              arguments.  */
29004           release_tree_vector (args);
29005           args = make_tree_vector_from_ctor (init);
29006         }
29007     }
29008
29009   if (elided && !cands)
29010     {
29011       error ("cannot deduce template arguments for copy-initialization"
29012              " of %qT, as it has no non-explicit deduction guides or "
29013              "user-declared constructors", type);
29014       return error_mark_node;
29015     }
29016   else if (!cands && call == error_mark_node)
29017     {
29018       error ("cannot deduce template arguments of %qT, as it has no viable "
29019              "deduction guides", type);
29020       return error_mark_node;
29021     }
29022
29023   if (call == error_mark_node)
29024     {
29025       ++cp_unevaluated_operand;
29026       call = build_new_function_call (cands, &args, tf_decltype);
29027       --cp_unevaluated_operand;
29028     }
29029
29030   if (call == error_mark_node
29031       && (complain & tf_warning_or_error))
29032     {
29033       error ("class template argument deduction failed:");
29034
29035       ++cp_unevaluated_operand;
29036       call = build_new_function_call (cands, &args, complain | tf_decltype);
29037       --cp_unevaluated_operand;
29038
29039       if (elided)
29040         inform (input_location, "explicit deduction guides not considered "
29041                 "for copy-initialization");
29042     }
29043
29044   return cp_build_qualified_type (TREE_TYPE (call), cp_type_quals (ptype));
29045 }
29046
29047 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
29048    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.
29049    The CONTEXT determines the context in which auto deduction is performed
29050    and is used to control error diagnostics.  FLAGS are the LOOKUP_* flags.
29051    OUTER_TARGS are used during template argument deduction
29052    (context == adc_unify) to properly substitute the result, and is ignored
29053    in other contexts.
29054
29055    For partial-concept-ids, extra args may be appended to the list of deduced
29056    template arguments prior to determining constraint satisfaction.  */
29057
29058 tree
29059 do_auto_deduction (tree type, tree init, tree auto_node,
29060                    tsubst_flags_t complain, auto_deduction_context context,
29061                    tree outer_targs, int flags)
29062 {
29063   tree targs;
29064
29065   if (init == error_mark_node)
29066     return error_mark_node;
29067
29068   if (init && type_dependent_expression_p (init)
29069       && context != adc_unify)
29070     /* Defining a subset of type-dependent expressions that we can deduce
29071        from ahead of time isn't worth the trouble.  */
29072     return type;
29073
29074   /* Similarly, we can't deduce from another undeduced decl.  */
29075   if (init && undeduced_auto_decl (init))
29076     return type;
29077
29078   /* We may be doing a partial substitution, but we still want to replace
29079      auto_node.  */
29080   complain &= ~tf_partial;
29081
29082   if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node))
29083     /* C++17 class template argument deduction.  */
29084     return do_class_deduction (type, tmpl, init, flags, complain);
29085
29086   if (init == NULL_TREE || TREE_TYPE (init) == NULL_TREE)
29087     /* Nothing we can do with this, even in deduction context.  */
29088     return type;
29089
29090   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
29091      with either a new invented type template parameter U or, if the
29092      initializer is a braced-init-list (8.5.4), with
29093      std::initializer_list<U>.  */
29094   if (BRACE_ENCLOSED_INITIALIZER_P (init))
29095     {
29096       if (!DIRECT_LIST_INIT_P (init))
29097         type = listify_autos (type, auto_node);
29098       else if (CONSTRUCTOR_NELTS (init) == 1)
29099         init = CONSTRUCTOR_ELT (init, 0)->value;
29100       else
29101         {
29102           if (complain & tf_warning_or_error)
29103             {
29104               if (permerror (input_location, "direct-list-initialization of "
29105                              "%<auto%> requires exactly one element"))
29106                 inform (input_location,
29107                         "for deduction to %<std::initializer_list%>, use copy-"
29108                         "list-initialization (i.e. add %<=%> before the %<{%>)");
29109             }
29110           type = listify_autos (type, auto_node);
29111         }
29112     }
29113
29114   if (type == error_mark_node)
29115     return error_mark_node;
29116
29117   init = resolve_nondeduced_context (init, complain);
29118
29119   if (context == adc_decomp_type
29120       && auto_node == type
29121       && init != error_mark_node
29122       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
29123     /* [dcl.decomp]/1 - if decomposition declaration has no ref-qualifiers
29124        and initializer has array type, deduce cv-qualified array type.  */
29125     return cp_build_qualified_type_real (TREE_TYPE (init), TYPE_QUALS (type),
29126                                          complain);
29127   else if (AUTO_IS_DECLTYPE (auto_node))
29128     {
29129       tree stripped_init = tree_strip_any_location_wrapper (init);
29130       bool id = (DECL_P (stripped_init)
29131                  || ((TREE_CODE (init) == COMPONENT_REF
29132                       || TREE_CODE (init) == SCOPE_REF)
29133                      && !REF_PARENTHESIZED_P (init)));
29134       targs = make_tree_vec (1);
29135       TREE_VEC_ELT (targs, 0)
29136         = finish_decltype_type (init, id, tf_warning_or_error);
29137       if (type != auto_node)
29138         {
29139           if (complain & tf_error)
29140             error ("%qT as type rather than plain %<decltype(auto)%>", type);
29141           return error_mark_node;
29142         }
29143       else if (TYPE_QUALS (type) != TYPE_UNQUALIFIED)
29144         {
29145           if (complain & tf_error)
29146             error ("%<decltype(auto)%> cannot be cv-qualified");
29147           return error_mark_node;
29148         }
29149     }
29150   else
29151     {
29152       if (error_operand_p (init))
29153         return error_mark_node;
29154
29155       tree parms = build_tree_list (NULL_TREE, type);
29156       tree tparms;
29157
29158       if (flag_concepts)
29159         tparms = extract_autos (type);
29160       else
29161         {
29162           tparms = make_tree_vec (1);
29163           TREE_VEC_ELT (tparms, 0)
29164             = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
29165         }
29166
29167       targs = make_tree_vec (TREE_VEC_LENGTH (tparms));
29168       int val = type_unification_real (tparms, targs, parms, &init, 1, 0,
29169                                        DEDUCE_CALL,
29170                                        NULL, /*explain_p=*/false);
29171       if (val > 0)
29172         {
29173           if (processing_template_decl)
29174             /* Try again at instantiation time.  */
29175             return type;
29176           if (type && type != error_mark_node
29177               && (complain & tf_error))
29178             /* If type is error_mark_node a diagnostic must have been
29179                emitted by now.  Also, having a mention to '<type error>'
29180                in the diagnostic is not really useful to the user.  */
29181             {
29182               if (cfun
29183                   && FNDECL_USED_AUTO (current_function_decl)
29184                   && (auto_node
29185                       == DECL_SAVED_AUTO_RETURN_TYPE (current_function_decl))
29186                   && LAMBDA_FUNCTION_P (current_function_decl))
29187                 error ("unable to deduce lambda return type from %qE", init);
29188               else
29189                 error ("unable to deduce %qT from %qE", type, init);
29190               type_unification_real (tparms, targs, parms, &init, 1, 0,
29191                                      DEDUCE_CALL,
29192                                      NULL, /*explain_p=*/true);
29193             }
29194           return error_mark_node;
29195         }
29196     }
29197
29198   /* Check any placeholder constraints against the deduced type. */
29199   if (flag_concepts && !processing_template_decl)
29200     if (tree check = NON_ERROR (PLACEHOLDER_TYPE_CONSTRAINTS (auto_node)))
29201       {
29202         /* Use the deduced type to check the associated constraints. If we
29203            have a partial-concept-id, rebuild the argument list so that
29204            we check using the extra arguments. */
29205         check = unpack_concept_check (check);
29206         gcc_assert (TREE_CODE (check) == TEMPLATE_ID_EXPR);
29207         tree cdecl = TREE_OPERAND (check, 0);
29208         if (OVL_P (cdecl))
29209           cdecl = OVL_FIRST (cdecl);
29210         tree cargs = TREE_OPERAND (check, 1);
29211         if (TREE_VEC_LENGTH (cargs) > 1)
29212           {
29213             cargs = copy_node (cargs);
29214             TREE_VEC_ELT (cargs, 0) = TREE_VEC_ELT (targs, 0);
29215           }
29216         else
29217           cargs = targs;
29218
29219         /* Rebuild the check using the deduced arguments.  */
29220         check = build_concept_check (cdecl, cargs, tf_none);
29221
29222         if (!constraints_satisfied_p (check))
29223           {
29224             if (complain & tf_warning_or_error)
29225               {
29226                 auto_diagnostic_group d;
29227                 switch (context)
29228                   {
29229                   case adc_unspecified:
29230                   case adc_unify:
29231                     error("placeholder constraints not satisfied");
29232                     break;
29233                   case adc_variable_type:
29234                   case adc_decomp_type:
29235                     error ("deduced initializer does not satisfy "
29236                            "placeholder constraints");
29237                     break;
29238                   case adc_return_type:
29239                     error ("deduced return type does not satisfy "
29240                            "placeholder constraints");
29241                     break;
29242                   case adc_requirement:
29243                     error ("deduced expression type does not satisfy "
29244                            "placeholder constraints");
29245                     break;
29246                   }
29247                 diagnose_constraints (input_location, check, targs);
29248               }
29249             return error_mark_node;
29250           }
29251       }
29252
29253   if (processing_template_decl && context != adc_unify)
29254     outer_targs = current_template_args ();
29255   targs = add_to_template_args (outer_targs, targs);
29256   return tsubst (type, targs, complain, NULL_TREE);
29257 }
29258
29259 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
29260    result.  */
29261
29262 tree
29263 splice_late_return_type (tree type, tree late_return_type)
29264 {
29265   if (late_return_type)
29266     {
29267       gcc_assert (is_auto (type) || seen_error ());
29268       return late_return_type;
29269     }
29270
29271   if (tree *auto_node = find_type_usage (&type, is_auto))
29272     {
29273       tree idx = get_template_parm_index (*auto_node);
29274       if (TEMPLATE_PARM_LEVEL (idx) <= processing_template_decl)
29275         {
29276           /* In an abbreviated function template we didn't know we were dealing
29277              with a function template when we saw the auto return type, so update
29278              it to have the correct level.  */
29279           tree new_auto = make_auto_1 (TYPE_IDENTIFIER (*auto_node), false);
29280           PLACEHOLDER_TYPE_CONSTRAINTS (new_auto)
29281             = PLACEHOLDER_TYPE_CONSTRAINTS (*auto_node);
29282           TYPE_CANONICAL (new_auto) = canonical_type_parameter (new_auto);
29283           new_auto = cp_build_qualified_type (new_auto, TYPE_QUALS (*auto_node));
29284           *auto_node = new_auto;
29285         }
29286     }
29287   return type;
29288 }
29289
29290 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
29291    'decltype(auto)' or a deduced class template.  */
29292
29293 bool
29294 is_auto (const_tree type)
29295 {
29296   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
29297       && (TYPE_IDENTIFIER (type) == auto_identifier
29298           || TYPE_IDENTIFIER (type) == decltype_auto_identifier))
29299     return true;
29300   else
29301     return false;
29302 }
29303
29304 /* for_each_template_parm callback for type_uses_auto.  */
29305
29306 int
29307 is_auto_r (tree tp, void */*data*/)
29308 {
29309   return is_auto (tp);
29310 }
29311
29312 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
29313    a use of `auto'.  Returns NULL_TREE otherwise.  */
29314
29315 tree
29316 type_uses_auto (tree type)
29317 {
29318   if (type == NULL_TREE)
29319     return NULL_TREE;
29320   else if (flag_concepts)
29321     {
29322       /* The Concepts TS allows multiple autos in one type-specifier; just
29323          return the first one we find, do_auto_deduction will collect all of
29324          them.  */
29325       if (uses_template_parms (type))
29326         return for_each_template_parm (type, is_auto_r, /*data*/NULL,
29327                                        /*visited*/NULL, /*nondeduced*/false);
29328       else
29329         return NULL_TREE;
29330     }
29331   else if (tree *tp = find_type_usage (&type, is_auto))
29332     return *tp;
29333   else
29334     return NULL_TREE;
29335 }
29336
29337 /* Report ill-formed occurrences of auto types in ARGUMENTS.  If
29338    concepts are enabled, auto is acceptable in template arguments, but
29339    only when TEMPL identifies a template class.  Return TRUE if any
29340    such errors were reported.  */
29341
29342 bool
29343 check_auto_in_tmpl_args (tree tmpl, tree args)
29344 {
29345   /* If there were previous errors, nevermind.  */
29346   if (!args || TREE_CODE (args) != TREE_VEC)
29347     return false;
29348
29349   /* If TMPL is an identifier, we're parsing and we can't tell yet
29350      whether TMPL is supposed to be a type, a function or a variable.
29351      We'll only be able to tell during template substitution, so we
29352      expect to be called again then.  If concepts are enabled and we
29353      know we have a type, we're ok.  */
29354   if (flag_concepts
29355       && (identifier_p (tmpl)
29356           || (DECL_P (tmpl)
29357               &&  (DECL_TYPE_TEMPLATE_P (tmpl)
29358                    || DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)))))
29359     return false;
29360
29361   /* Quickly search for any occurrences of auto; usually there won't
29362      be any, and then we'll avoid allocating the vector.  */
29363   if (!type_uses_auto (args))
29364     return false;
29365
29366   bool errors = false;
29367
29368   tree vec = extract_autos (args);
29369   for (int i = 0; i < TREE_VEC_LENGTH (vec); i++)
29370     {
29371       tree xauto = TREE_VALUE (TREE_VEC_ELT (vec, i));
29372       error_at (DECL_SOURCE_LOCATION (xauto),
29373                 "invalid use of %qT in template argument", xauto);
29374       errors = true;
29375     }
29376
29377   return errors;
29378 }
29379
29380 /* Recursively walk over && expressions searching for EXPR. Return a reference
29381    to that expression.  */
29382
29383 static tree *find_template_requirement (tree *t, tree key)
29384 {
29385   if (*t == key)
29386     return t;
29387   if (TREE_CODE (*t) == TRUTH_ANDIF_EXPR)
29388     {
29389       if (tree *p = find_template_requirement (&TREE_OPERAND (*t, 0), key))
29390         return p;
29391       if (tree *p = find_template_requirement (&TREE_OPERAND (*t, 1), key))
29392         return p;
29393     }
29394   return 0;
29395 }
29396
29397 /* Convert the generic type parameters in PARM that match the types given in the
29398    range [START_IDX, END_IDX) from the current_template_parms into generic type
29399    packs.  */
29400
29401 tree
29402 convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
29403 {
29404   tree current = current_template_parms;
29405   int depth = TMPL_PARMS_DEPTH (current);
29406   current = INNERMOST_TEMPLATE_PARMS (current);
29407   tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
29408
29409   for (int i = 0; i < start_idx; ++i)
29410     TREE_VEC_ELT (replacement, i)
29411       = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
29412
29413   for (int i = start_idx; i < end_idx; ++i)
29414     {
29415       /* Create a distinct parameter pack type from the current parm and add it
29416          to the replacement args to tsubst below into the generic function
29417          parameter.  */
29418       tree node = TREE_VEC_ELT (current, i);
29419       tree o = TREE_TYPE (TREE_VALUE (node));
29420       tree t = copy_type (o);
29421       TEMPLATE_TYPE_PARM_INDEX (t)
29422         = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
29423                                       t, 0, 0, tf_none);
29424       TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
29425       TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
29426       TYPE_MAIN_VARIANT (t) = t;
29427       TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
29428       TYPE_CANONICAL (t) = canonical_type_parameter (t);
29429       TREE_VEC_ELT (replacement, i) = t;
29430
29431       /* Replace the current template parameter with new pack.  */
29432       TREE_VALUE (node) = TREE_CHAIN (t);
29433
29434       /* Surgically adjust the associated constraint of adjusted parameter
29435          and it's corresponding contribution to the current template
29436          requirements.  */
29437       if (tree constr = TEMPLATE_PARM_CONSTRAINTS (node))
29438         {
29439           tree id = unpack_concept_check (constr);
29440           TREE_VEC_ELT (TREE_OPERAND (id, 1), 0) = template_parm_to_arg (t);
29441           tree fold = finish_left_unary_fold_expr (constr, TRUTH_ANDIF_EXPR);
29442           TEMPLATE_PARM_CONSTRAINTS (node) = fold;
29443
29444           /* If there was a constraint, we also need to replace that in
29445              the template requirements, which we've already built.  */
29446           tree *reqs = &TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
29447           reqs = find_template_requirement (reqs, constr);
29448           *reqs = fold;
29449         }
29450     }
29451
29452   for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
29453     TREE_VEC_ELT (replacement, i)
29454       = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
29455
29456   /* If there are more levels then build up the replacement with the outer
29457      template parms.  */
29458   if (depth > 1)
29459     replacement = add_to_template_args (template_parms_to_args
29460                                         (TREE_CHAIN (current_template_parms)),
29461                                         replacement);
29462
29463   return tsubst (parm, replacement, tf_none, NULL_TREE);
29464 }
29465
29466 /* __integer_pack(N) in a pack expansion expands to a sequence of numbers from
29467    0..N-1.  */
29468
29469 void
29470 declare_integer_pack (void)
29471 {
29472   tree ipfn = push_library_fn (get_identifier ("__integer_pack"),
29473                                build_function_type_list (integer_type_node,
29474                                                          integer_type_node,
29475                                                          NULL_TREE),
29476                                NULL_TREE, ECF_CONST);
29477   DECL_DECLARED_CONSTEXPR_P (ipfn) = true;
29478   set_decl_built_in_function (ipfn, BUILT_IN_FRONTEND,
29479                               CP_BUILT_IN_INTEGER_PACK);
29480 }
29481
29482 /* Set up the hash tables for template instantiations.  */
29483
29484 void
29485 init_template_processing (void)
29486 {
29487   decl_specializations = hash_table<spec_hasher>::create_ggc (37);
29488   type_specializations = hash_table<spec_hasher>::create_ggc (37);
29489
29490   if (cxx_dialect >= cxx11)
29491     declare_integer_pack ();
29492 }
29493
29494 /* Print stats about the template hash tables for -fstats.  */
29495
29496 void
29497 print_template_statistics (void)
29498 {
29499   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
29500            "%f collisions\n", (long) decl_specializations->size (),
29501            (long) decl_specializations->elements (),
29502            decl_specializations->collisions ());
29503   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
29504            "%f collisions\n", (long) type_specializations->size (),
29505            (long) type_specializations->elements (),
29506            type_specializations->collisions ());
29507 }
29508
29509 #if CHECKING_P
29510
29511 namespace selftest {
29512
29513 /* Verify that build_non_dependent_expr () works, for various expressions,
29514    and that location wrappers don't affect the results.  */
29515
29516 static void
29517 test_build_non_dependent_expr ()
29518 {
29519   location_t loc = BUILTINS_LOCATION;
29520
29521   /* Verify constants, without and with location wrappers.  */
29522   tree int_cst = build_int_cst (integer_type_node, 42);
29523   ASSERT_EQ (int_cst, build_non_dependent_expr (int_cst));
29524
29525   tree wrapped_int_cst = maybe_wrap_with_location (int_cst, loc);
29526   ASSERT_TRUE (location_wrapper_p (wrapped_int_cst));
29527   ASSERT_EQ (wrapped_int_cst, build_non_dependent_expr (wrapped_int_cst));
29528
29529   tree string_lit = build_string (4, "foo");
29530   TREE_TYPE (string_lit) = char_array_type_node;
29531   string_lit = fix_string_type (string_lit);
29532   ASSERT_EQ (string_lit, build_non_dependent_expr (string_lit));
29533
29534   tree wrapped_string_lit = maybe_wrap_with_location (string_lit, loc);
29535   ASSERT_TRUE (location_wrapper_p (wrapped_string_lit));
29536   ASSERT_EQ (wrapped_string_lit,
29537              build_non_dependent_expr (wrapped_string_lit));
29538 }
29539
29540 /* Verify that type_dependent_expression_p () works correctly, even
29541    in the presence of location wrapper nodes.  */
29542
29543 static void
29544 test_type_dependent_expression_p ()
29545 {
29546   location_t loc = BUILTINS_LOCATION;
29547
29548   tree name = get_identifier ("foo");
29549
29550   /* If no templates are involved, nothing is type-dependent.  */
29551   gcc_assert (!processing_template_decl);
29552   ASSERT_FALSE (type_dependent_expression_p (name));
29553
29554   ++processing_template_decl;
29555
29556   /* Within a template, an unresolved name is always type-dependent.  */
29557   ASSERT_TRUE (type_dependent_expression_p (name));
29558
29559   /* Ensure it copes with NULL_TREE and errors.  */
29560   ASSERT_FALSE (type_dependent_expression_p (NULL_TREE));
29561   ASSERT_FALSE (type_dependent_expression_p (error_mark_node));
29562
29563   /* A USING_DECL in a template should be type-dependent, even if wrapped
29564      with a location wrapper (PR c++/83799).  */
29565   tree using_decl = build_lang_decl (USING_DECL, name, NULL_TREE);
29566   TREE_TYPE (using_decl) = integer_type_node;
29567   ASSERT_TRUE (type_dependent_expression_p (using_decl));
29568   tree wrapped_using_decl = maybe_wrap_with_location (using_decl, loc);
29569   ASSERT_TRUE (location_wrapper_p (wrapped_using_decl));
29570   ASSERT_TRUE (type_dependent_expression_p (wrapped_using_decl));
29571
29572   --processing_template_decl;
29573 }
29574
29575 /* Run all of the selftests within this file.  */
29576
29577 void
29578 cp_pt_c_tests ()
29579 {
29580   test_build_non_dependent_expr ();
29581   test_type_dependent_expression_p ();
29582 }
29583
29584 } // namespace selftest
29585
29586 #endif /* #if CHECKING_P */
29587
29588 #include "gt-cp-pt.h"