1/* Handle parameterized types (templates) for GNU -*- C++ -*-.
2   Copyright (C) 1992-2015 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
6This file is part of GCC.
7
8GCC is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 3, or (at your option)
11any later version.
12
13GCC is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along 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 "tm.h"
31#include "hash-set.h"
32#include "machmode.h"
33#include "vec.h"
34#include "double-int.h"
35#include "input.h"
36#include "alias.h"
37#include "symtab.h"
38#include "wide-int.h"
39#include "inchash.h"
40#include "tree.h"
41#include "stringpool.h"
42#include "varasm.h"
43#include "attribs.h"
44#include "stor-layout.h"
45#include "intl.h"
46#include "flags.h"
47#include "cp-tree.h"
48#include "c-family/c-common.h"
49#include "c-family/c-objc.h"
50#include "cp-objcp-common.h"
51#include "tree-inline.h"
52#include "decl.h"
53#include "toplev.h"
54#include "timevar.h"
55#include "tree-iterator.h"
56#include "type-utils.h"
57#include "gimplify.h"
58
59/* The type of functions taking a tree, and some additional data, and
60   returning an int.  */
61typedef int (*tree_fn_t) (tree, void*);
62
63/* The PENDING_TEMPLATES is a TREE_LIST of templates whose
64   instantiations have been deferred, either because their definitions
65   were not yet available, or because we were putting off doing the work.  */
66struct GTY ((chain_next ("%h.next"))) pending_template {
67  struct pending_template *next;
68  struct tinst_level *tinst;
69};
70
71static GTY(()) struct pending_template *pending_templates;
72static GTY(()) struct pending_template *last_pending_template;
73
74int processing_template_parmlist;
75static int template_header_count;
76
77static GTY(()) tree saved_trees;
78static vec<int> inline_parm_levels;
79
80static GTY(()) struct tinst_level *current_tinst_level;
81
82static GTY(()) tree saved_access_scope;
83
84/* Live only within one (recursive) call to tsubst_expr.  We use
85   this to pass the statement expression node from the STMT_EXPR
86   to the EXPR_STMT that is its result.  */
87static tree cur_stmt_expr;
88
89/* True if we've recursed into fn_type_unification too many times.  */
90static bool excessive_deduction_depth;
91
92struct GTY((for_user)) spec_entry
93{
94  tree tmpl;
95  tree args;
96  tree spec;
97};
98
99struct spec_hasher : ggc_hasher<spec_entry *>
100{
101  static hashval_t hash (spec_entry *);
102  static bool equal (spec_entry *, spec_entry *);
103};
104
105static GTY (()) hash_table<spec_hasher> *decl_specializations;
106
107static GTY (()) hash_table<spec_hasher> *type_specializations;
108
109/* Contains canonical template parameter types. The vector is indexed by
110   the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
111   TREE_LIST, whose TREE_VALUEs contain the canonical template
112   parameters of various types and levels.  */
113static GTY(()) vec<tree, va_gc> *canonical_template_parms;
114
115#define UNIFY_ALLOW_NONE 0
116#define UNIFY_ALLOW_MORE_CV_QUAL 1
117#define UNIFY_ALLOW_LESS_CV_QUAL 2
118#define UNIFY_ALLOW_DERIVED 4
119#define UNIFY_ALLOW_INTEGER 8
120#define UNIFY_ALLOW_OUTER_LEVEL 16
121#define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
122#define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
123
124enum template_base_result {
125  tbr_incomplete_type,
126  tbr_ambiguous_baseclass,
127  tbr_success
128};
129
130static void push_access_scope (tree);
131static void pop_access_scope (tree);
132static bool resolve_overloaded_unification (tree, tree, tree, tree,
133					    unification_kind_t, int,
134					    bool);
135static int try_one_overload (tree, tree, tree, tree, tree,
136			     unification_kind_t, int, bool, bool);
137static int unify (tree, tree, tree, tree, int, bool);
138static void add_pending_template (tree);
139static tree reopen_tinst_level (struct tinst_level *);
140static tree tsubst_initializer_list (tree, tree);
141static tree get_partial_spec_bindings (tree, tree, tree, tree);
142static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
143				   bool, bool);
144static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
145					      bool, bool);
146static void tsubst_enum	(tree, tree, tree);
147static tree add_to_template_args (tree, tree);
148static tree add_outermost_template_args (tree, tree);
149static bool check_instantiated_args (tree, tree, tsubst_flags_t);
150static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
151					     tree);
152static int type_unification_real (tree, tree, tree, const tree *,
153				  unsigned int, int, unification_kind_t, int,
154				  vec<deferred_access_check, va_gc> **,
155				  bool);
156static void note_template_header (int);
157static tree convert_nontype_argument_function (tree, tree, tsubst_flags_t);
158static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
159static tree convert_template_argument (tree, tree, tree,
160				       tsubst_flags_t, int, tree);
161static int for_each_template_parm (tree, tree_fn_t, void*,
162				   hash_set<tree> *, bool);
163static tree expand_template_argument_pack (tree);
164static tree build_template_parm_index (int, int, int, tree, tree);
165static bool inline_needs_template_parms (tree, bool);
166static void push_inline_template_parms_recursive (tree, int);
167static tree retrieve_local_specialization (tree);
168static void register_local_specialization (tree, tree);
169static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
170static int mark_template_parm (tree, void *);
171static int template_parm_this_level_p (tree, void *);
172static tree tsubst_friend_function (tree, tree);
173static tree tsubst_friend_class (tree, tree);
174static int can_complete_type_without_circularity (tree);
175static tree get_bindings (tree, tree, tree, bool);
176static int template_decl_level (tree);
177static int check_cv_quals_for_unify (int, tree, tree);
178static void template_parm_level_and_index (tree, int*, int*);
179static int unify_pack_expansion (tree, tree, tree,
180				 tree, unification_kind_t, bool, bool);
181static tree copy_template_args (tree);
182static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
183static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
184static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
185static void regenerate_decl_from_template (tree, tree);
186static tree most_specialized_partial_spec (tree, tsubst_flags_t);
187static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
188static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
189static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
190static bool check_specialization_scope (void);
191static tree process_partial_specialization (tree);
192static void set_current_access_from_decl (tree);
193static enum template_base_result get_template_base (tree, tree, tree, tree,
194						    bool , tree *);
195static tree try_class_unification (tree, tree, tree, tree, bool);
196static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
197					   tree, tree);
198static bool template_template_parm_bindings_ok_p (tree, tree);
199static int template_args_equal (tree, tree);
200static void tsubst_default_arguments (tree, tsubst_flags_t);
201static tree for_each_template_parm_r (tree *, int *, void *);
202static tree copy_default_args_to_explicit_spec_1 (tree, tree);
203static void copy_default_args_to_explicit_spec (tree);
204static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
205static bool dependent_template_arg_p (tree);
206static bool any_template_arguments_need_structural_equality_p (tree);
207static bool dependent_type_p_r (tree);
208static tree tsubst_expr	(tree, tree, tsubst_flags_t, tree, bool);
209static tree tsubst_copy	(tree, tree, tsubst_flags_t, tree);
210static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
211static tree tsubst_decl (tree, tree, tsubst_flags_t);
212static void perform_typedefs_access_check (tree tmpl, tree targs);
213static void append_type_to_template_for_access_check_1 (tree, tree, tree,
214							location_t);
215static tree listify (tree);
216static tree listify_autos (tree, tree);
217static tree template_parm_to_arg (tree t);
218static tree current_template_args (void);
219static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
220static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
221static bool complex_alias_template_p (const_tree tmpl);
222
223/* Make the current scope suitable for access checking when we are
224   processing T.  T can be FUNCTION_DECL for instantiated function
225   template, VAR_DECL for static member variable, or TYPE_DECL for
226   alias template (needed by instantiate_decl).  */
227
228static void
229push_access_scope (tree t)
230{
231  gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
232	      || TREE_CODE (t) == TYPE_DECL);
233
234  if (DECL_FRIEND_CONTEXT (t))
235    push_nested_class (DECL_FRIEND_CONTEXT (t));
236  else if (DECL_CLASS_SCOPE_P (t))
237    push_nested_class (DECL_CONTEXT (t));
238  else
239    push_to_top_level ();
240
241  if (TREE_CODE (t) == FUNCTION_DECL)
242    {
243      saved_access_scope = tree_cons
244	(NULL_TREE, current_function_decl, saved_access_scope);
245      current_function_decl = t;
246    }
247}
248
249/* Restore the scope set up by push_access_scope.  T is the node we
250   are processing.  */
251
252static void
253pop_access_scope (tree t)
254{
255  if (TREE_CODE (t) == FUNCTION_DECL)
256    {
257      current_function_decl = TREE_VALUE (saved_access_scope);
258      saved_access_scope = TREE_CHAIN (saved_access_scope);
259    }
260
261  if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
262    pop_nested_class ();
263  else
264    pop_from_top_level ();
265}
266
267/* Do any processing required when DECL (a member template
268   declaration) is finished.  Returns the TEMPLATE_DECL corresponding
269   to DECL, unless it is a specialization, in which case the DECL
270   itself is returned.  */
271
272tree
273finish_member_template_decl (tree decl)
274{
275  if (decl == error_mark_node)
276    return error_mark_node;
277
278  gcc_assert (DECL_P (decl));
279
280  if (TREE_CODE (decl) == TYPE_DECL)
281    {
282      tree type;
283
284      type = TREE_TYPE (decl);
285      if (type == error_mark_node)
286	return error_mark_node;
287      if (MAYBE_CLASS_TYPE_P (type)
288	  && CLASSTYPE_TEMPLATE_INFO (type)
289	  && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
290	{
291	  tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
292	  check_member_template (tmpl);
293	  return tmpl;
294	}
295      return NULL_TREE;
296    }
297  else if (TREE_CODE (decl) == FIELD_DECL)
298    error ("data member %qD cannot be a member template", decl);
299  else if (DECL_TEMPLATE_INFO (decl))
300    {
301      if (!DECL_TEMPLATE_SPECIALIZATION (decl))
302	{
303	  check_member_template (DECL_TI_TEMPLATE (decl));
304	  return DECL_TI_TEMPLATE (decl);
305	}
306      else
307	return decl;
308    }
309  else
310    error ("invalid member template declaration %qD", decl);
311
312  return error_mark_node;
313}
314
315/* Create a template info node.  */
316
317tree
318build_template_info (tree template_decl, tree template_args)
319{
320  tree result = make_node (TEMPLATE_INFO);
321  TI_TEMPLATE (result) = template_decl;
322  TI_ARGS (result) = template_args;
323  return result;
324}
325
326/* Return the template info node corresponding to T, whatever T is.  */
327
328tree
329get_template_info (const_tree t)
330{
331  tree tinfo = NULL_TREE;
332
333  if (!t || t == error_mark_node)
334    return NULL;
335
336  if (TREE_CODE (t) == NAMESPACE_DECL)
337    return NULL;
338
339  if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
340    tinfo = DECL_TEMPLATE_INFO (t);
341
342  if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
343    t = TREE_TYPE (t);
344
345  if (OVERLOAD_TYPE_P (t))
346    tinfo = TYPE_TEMPLATE_INFO (t);
347  else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
348    tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
349
350  return tinfo;
351}
352
353/* Returns the template nesting level of the indicated class TYPE.
354
355   For example, in:
356     template <class T>
357     struct A
358     {
359       template <class U>
360       struct B {};
361     };
362
363   A<T>::B<U> has depth two, while A<T> has depth one.
364   Both A<T>::B<int> and A<int>::B<U> have depth one, if
365   they are instantiations, not specializations.
366
367   This function is guaranteed to return 0 if passed NULL_TREE so
368   that, for example, `template_class_depth (current_class_type)' is
369   always safe.  */
370
371int
372template_class_depth (tree type)
373{
374  int depth;
375
376  for (depth = 0;
377       type && TREE_CODE (type) != NAMESPACE_DECL;
378       type = (TREE_CODE (type) == FUNCTION_DECL)
379	 ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
380    {
381      tree tinfo = get_template_info (type);
382
383      if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
384	  && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
385	++depth;
386    }
387
388  return depth;
389}
390
391/* Subroutine of maybe_begin_member_template_processing.
392   Returns true if processing DECL needs us to push template parms.  */
393
394static bool
395inline_needs_template_parms (tree decl, bool nsdmi)
396{
397  if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
398    return false;
399
400  return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
401	  > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
402}
403
404/* Subroutine of maybe_begin_member_template_processing.
405   Push the template parms in PARMS, starting from LEVELS steps into the
406   chain, and ending at the beginning, since template parms are listed
407   innermost first.  */
408
409static void
410push_inline_template_parms_recursive (tree parmlist, int levels)
411{
412  tree parms = TREE_VALUE (parmlist);
413  int i;
414
415  if (levels > 1)
416    push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
417
418  ++processing_template_decl;
419  current_template_parms
420    = tree_cons (size_int (processing_template_decl),
421		 parms, current_template_parms);
422  TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
423
424  begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
425	       NULL);
426  for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
427    {
428      tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
429
430      if (error_operand_p (parm))
431	continue;
432
433      gcc_assert (DECL_P (parm));
434
435      switch (TREE_CODE (parm))
436	{
437	case TYPE_DECL:
438	case TEMPLATE_DECL:
439	  pushdecl (parm);
440	  break;
441
442	case PARM_DECL:
443	  {
444	    /* Make a CONST_DECL as is done in process_template_parm.
445	       It is ugly that we recreate this here; the original
446	       version built in process_template_parm is no longer
447	       available.  */
448	    tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
449				    CONST_DECL, DECL_NAME (parm),
450				    TREE_TYPE (parm));
451	    DECL_ARTIFICIAL (decl) = 1;
452	    TREE_CONSTANT (decl) = 1;
453	    TREE_READONLY (decl) = 1;
454	    DECL_INITIAL (decl) = DECL_INITIAL (parm);
455	    SET_DECL_TEMPLATE_PARM_P (decl);
456	    pushdecl (decl);
457	  }
458	  break;
459
460	default:
461	  gcc_unreachable ();
462	}
463    }
464}
465
466/* Restore the template parameter context for a member template, a
467   friend template defined in a class definition, or a non-template
468   member of template class.  */
469
470void
471maybe_begin_member_template_processing (tree decl)
472{
473  tree parms;
474  int levels = 0;
475  bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
476
477  if (nsdmi)
478    {
479      tree ctx = DECL_CONTEXT (decl);
480      decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
481	      /* Disregard full specializations (c++/60999).  */
482	      && uses_template_parms (ctx)
483	      ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
484    }
485
486  if (inline_needs_template_parms (decl, nsdmi))
487    {
488      parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
489      levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
490
491      if (DECL_TEMPLATE_SPECIALIZATION (decl))
492	{
493	  --levels;
494	  parms = TREE_CHAIN (parms);
495	}
496
497      push_inline_template_parms_recursive (parms, levels);
498    }
499
500  /* Remember how many levels of template parameters we pushed so that
501     we can pop them later.  */
502  inline_parm_levels.safe_push (levels);
503}
504
505/* Undo the effects of maybe_begin_member_template_processing.  */
506
507void
508maybe_end_member_template_processing (void)
509{
510  int i;
511  int last;
512
513  if (inline_parm_levels.length () == 0)
514    return;
515
516  last = inline_parm_levels.pop ();
517  for (i = 0; i < last; ++i)
518    {
519      --processing_template_decl;
520      current_template_parms = TREE_CHAIN (current_template_parms);
521      poplevel (0, 0, 0);
522    }
523}
524
525/* Return a new template argument vector which contains all of ARGS,
526   but has as its innermost set of arguments the EXTRA_ARGS.  */
527
528static tree
529add_to_template_args (tree args, tree extra_args)
530{
531  tree new_args;
532  int extra_depth;
533  int i;
534  int j;
535
536  if (args == NULL_TREE || extra_args == error_mark_node)
537    return extra_args;
538
539  extra_depth = TMPL_ARGS_DEPTH (extra_args);
540  new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
541
542  for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
543    SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
544
545  for (j = 1; j <= extra_depth; ++j, ++i)
546    SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
547
548  return new_args;
549}
550
551/* Like add_to_template_args, but only the outermost ARGS are added to
552   the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
553   (EXTRA_ARGS) levels are added.  This function is used to combine
554   the template arguments from a partial instantiation with the
555   template arguments used to attain the full instantiation from the
556   partial instantiation.  */
557
558static tree
559add_outermost_template_args (tree args, tree extra_args)
560{
561  tree new_args;
562
563  /* If there are more levels of EXTRA_ARGS than there are ARGS,
564     something very fishy is going on.  */
565  gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
566
567  /* If *all* the new arguments will be the EXTRA_ARGS, just return
568     them.  */
569  if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
570    return extra_args;
571
572  /* For the moment, we make ARGS look like it contains fewer levels.  */
573  TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
574
575  new_args = add_to_template_args (args, extra_args);
576
577  /* Now, we restore ARGS to its full dimensions.  */
578  TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
579
580  return new_args;
581}
582
583/* Return the N levels of innermost template arguments from the ARGS.  */
584
585tree
586get_innermost_template_args (tree args, int n)
587{
588  tree new_args;
589  int extra_levels;
590  int i;
591
592  gcc_assert (n >= 0);
593
594  /* If N is 1, just return the innermost set of template arguments.  */
595  if (n == 1)
596    return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
597
598  /* If we're not removing anything, just return the arguments we were
599     given.  */
600  extra_levels = TMPL_ARGS_DEPTH (args) - n;
601  gcc_assert (extra_levels >= 0);
602  if (extra_levels == 0)
603    return args;
604
605  /* Make a new set of arguments, not containing the outer arguments.  */
606  new_args = make_tree_vec (n);
607  for (i = 1; i <= n; ++i)
608    SET_TMPL_ARGS_LEVEL (new_args, i,
609			 TMPL_ARGS_LEVEL (args, i + extra_levels));
610
611  return new_args;
612}
613
614/* The inverse of get_innermost_template_args: Return all but the innermost
615   EXTRA_LEVELS levels of template arguments from the ARGS.  */
616
617static tree
618strip_innermost_template_args (tree args, int extra_levels)
619{
620  tree new_args;
621  int n = TMPL_ARGS_DEPTH (args) - extra_levels;
622  int i;
623
624  gcc_assert (n >= 0);
625
626  /* If N is 1, just return the outermost set of template arguments.  */
627  if (n == 1)
628    return TMPL_ARGS_LEVEL (args, 1);
629
630  /* If we're not removing anything, just return the arguments we were
631     given.  */
632  gcc_assert (extra_levels >= 0);
633  if (extra_levels == 0)
634    return args;
635
636  /* Make a new set of arguments, not containing the inner arguments.  */
637  new_args = make_tree_vec (n);
638  for (i = 1; i <= n; ++i)
639    SET_TMPL_ARGS_LEVEL (new_args, i,
640			 TMPL_ARGS_LEVEL (args, i));
641
642  return new_args;
643}
644
645/* We've got a template header coming up; push to a new level for storing
646   the parms.  */
647
648void
649begin_template_parm_list (void)
650{
651  /* We use a non-tag-transparent scope here, which causes pushtag to
652     put tags in this scope, rather than in the enclosing class or
653     namespace scope.  This is the right thing, since we want
654     TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
655     global template class, push_template_decl handles putting the
656     TEMPLATE_DECL into top-level scope.  For a nested template class,
657     e.g.:
658
659       template <class T> struct S1 {
660	 template <class T> struct S2 {};
661       };
662
663     pushtag contains special code to call pushdecl_with_scope on the
664     TEMPLATE_DECL for S2.  */
665  begin_scope (sk_template_parms, NULL);
666  ++processing_template_decl;
667  ++processing_template_parmlist;
668  note_template_header (0);
669}
670
671/* This routine is called when a specialization is declared.  If it is
672   invalid to declare a specialization here, an error is reported and
673   false is returned, otherwise this routine will return true.  */
674
675static bool
676check_specialization_scope (void)
677{
678  tree scope = current_scope ();
679
680  /* [temp.expl.spec]
681
682     An explicit specialization shall be declared in the namespace of
683     which the template is a member, or, for member templates, in the
684     namespace of which the enclosing class or enclosing class
685     template is a member.  An explicit specialization of a member
686     function, member class or static data member of a class template
687     shall be declared in the namespace of which the class template
688     is a member.  */
689  if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
690    {
691      error ("explicit specialization in non-namespace scope %qD", scope);
692      return false;
693    }
694
695  /* [temp.expl.spec]
696
697     In an explicit specialization declaration for a member of a class
698     template or a member template that appears in namespace scope,
699     the member template and some of its enclosing class templates may
700     remain unspecialized, except that the declaration shall not
701     explicitly specialize a class member template if its enclosing
702     class templates are not explicitly specialized as well.  */
703  if (current_template_parms)
704    {
705      error ("enclosing class templates are not explicitly specialized");
706      return false;
707    }
708
709  return true;
710}
711
712/* We've just seen template <>.  */
713
714bool
715begin_specialization (void)
716{
717  begin_scope (sk_template_spec, NULL);
718  note_template_header (1);
719  return check_specialization_scope ();
720}
721
722/* Called at then end of processing a declaration preceded by
723   template<>.  */
724
725void
726end_specialization (void)
727{
728  finish_scope ();
729  reset_specialization ();
730}
731
732/* Any template <>'s that we have seen thus far are not referring to a
733   function specialization.  */
734
735void
736reset_specialization (void)
737{
738  processing_specialization = 0;
739  template_header_count = 0;
740}
741
742/* We've just seen a template header.  If SPECIALIZATION is nonzero,
743   it was of the form template <>.  */
744
745static void
746note_template_header (int specialization)
747{
748  processing_specialization = specialization;
749  template_header_count++;
750}
751
752/* We're beginning an explicit instantiation.  */
753
754void
755begin_explicit_instantiation (void)
756{
757  gcc_assert (!processing_explicit_instantiation);
758  processing_explicit_instantiation = true;
759}
760
761
762void
763end_explicit_instantiation (void)
764{
765  gcc_assert (processing_explicit_instantiation);
766  processing_explicit_instantiation = false;
767}
768
769/* An explicit specialization or partial specialization of TMPL is being
770   declared.  Check that the namespace in which the specialization is
771   occurring is permissible.  Returns false iff it is invalid to
772   specialize TMPL in the current namespace.  */
773
774static bool
775check_specialization_namespace (tree tmpl)
776{
777  tree tpl_ns = decl_namespace_context (tmpl);
778
779  /* [tmpl.expl.spec]
780
781     An explicit specialization shall be declared in the namespace of
782     which the template is a member, or, for member templates, in the
783     namespace of which the enclosing class or enclosing class
784     template is a member.  An explicit specialization of a member
785     function, member class or static data member of a class template
786     shall be declared in the namespace of which the class template is
787     a member.  */
788  if (current_scope() != DECL_CONTEXT (tmpl)
789      && !at_namespace_scope_p ())
790    {
791      error ("specialization of %qD must appear at namespace scope", tmpl);
792      return false;
793    }
794  if (is_associated_namespace (current_namespace, tpl_ns))
795    /* Same or super-using namespace.  */
796    return true;
797  else
798    {
799      permerror (input_location, "specialization of %qD in different namespace", tmpl);
800      permerror (input_location, "  from definition of %q+#D", tmpl);
801      return false;
802    }
803}
804
805/* SPEC is an explicit instantiation.  Check that it is valid to
806   perform this explicit instantiation in the current namespace.  */
807
808static void
809check_explicit_instantiation_namespace (tree spec)
810{
811  tree ns;
812
813  /* DR 275: An explicit instantiation shall appear in an enclosing
814     namespace of its template.  */
815  ns = decl_namespace_context (spec);
816  if (!is_ancestor (current_namespace, ns))
817    permerror (input_location, "explicit instantiation of %qD in namespace %qD "
818	       "(which does not enclose namespace %qD)",
819	       spec, current_namespace, ns);
820}
821
822/* The TYPE is being declared.  If it is a template type, that means it
823   is a partial specialization.  Do appropriate error-checking.  */
824
825tree
826maybe_process_partial_specialization (tree type)
827{
828  tree context;
829
830  if (type == error_mark_node)
831    return error_mark_node;
832
833  /* A lambda that appears in specialization context is not itself a
834     specialization.  */
835  if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
836    return type;
837
838  if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
839    {
840      error ("name of class shadows template template parameter %qD",
841	     TYPE_NAME (type));
842      return error_mark_node;
843    }
844
845  context = TYPE_CONTEXT (type);
846
847  if (TYPE_ALIAS_P (type))
848    {
849      if (TYPE_TEMPLATE_INFO (type)
850	  && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
851	error ("specialization of alias template %qD",
852	       TYPE_TI_TEMPLATE (type));
853      else
854	error ("explicit specialization of non-template %qT", type);
855      return error_mark_node;
856    }
857  else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
858    {
859      /* This is for ordinary explicit specialization and partial
860	 specialization of a template class such as:
861
862	   template <> class C<int>;
863
864	 or:
865
866	   template <class T> class C<T*>;
867
868	 Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
869
870      if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
871	  && !COMPLETE_TYPE_P (type))
872	{
873	  if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type))
874	      && !at_namespace_scope_p ())
875	    return error_mark_node;
876	  SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
877	  DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
878	  if (processing_template_decl)
879	    {
880	      if (push_template_decl (TYPE_MAIN_DECL (type))
881		  == error_mark_node)
882		return error_mark_node;
883	    }
884	}
885      else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
886	error ("specialization of %qT after instantiation", type);
887      else if (errorcount && !processing_specialization
888	        && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
889	       && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
890	/* Trying to define a specialization either without a template<> header
891	   or in an inappropriate place.  We've already given an error, so just
892	   bail now so we don't actually define the specialization.  */
893	return error_mark_node;
894    }
895  else if (CLASS_TYPE_P (type)
896	   && !CLASSTYPE_USE_TEMPLATE (type)
897	   && CLASSTYPE_TEMPLATE_INFO (type)
898	   && context && CLASS_TYPE_P (context)
899	   && CLASSTYPE_TEMPLATE_INFO (context))
900    {
901      /* This is for an explicit specialization of member class
902	 template according to [temp.expl.spec/18]:
903
904	   template <> template <class U> class C<int>::D;
905
906	 The context `C<int>' must be an implicit instantiation.
907	 Otherwise this is just a member class template declared
908	 earlier like:
909
910	   template <> class C<int> { template <class U> class D; };
911	   template <> template <class U> class C<int>::D;
912
913	 In the first case, `C<int>::D' is a specialization of `C<T>::D'
914	 while in the second case, `C<int>::D' is a primary template
915	 and `C<T>::D' may not exist.  */
916
917      if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
918	  && !COMPLETE_TYPE_P (type))
919	{
920	  tree t;
921	  tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
922
923	  if (current_namespace
924	      != decl_namespace_context (tmpl))
925	    {
926	      permerror (input_location, "specializing %q#T in different namespace", type);
927	      permerror (input_location, "  from definition of %q+#D", tmpl);
928	    }
929
930	  /* Check for invalid specialization after instantiation:
931
932	       template <> template <> class C<int>::D<int>;
933	       template <> template <class U> class C<int>::D;  */
934
935	  for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
936	       t; t = TREE_CHAIN (t))
937	    {
938	      tree inst = TREE_VALUE (t);
939	      if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
940		  || !COMPLETE_OR_OPEN_TYPE_P (inst))
941		{
942		  /* We already have a full specialization of this partial
943		     instantiation, or a full specialization has been
944		     looked up but not instantiated.  Reassign it to the
945		     new member specialization template.  */
946		  spec_entry elt;
947		  spec_entry *entry;
948
949		  elt.tmpl = most_general_template (tmpl);
950		  elt.args = CLASSTYPE_TI_ARGS (inst);
951		  elt.spec = inst;
952
953		  type_specializations->remove_elt (&elt);
954
955		  elt.tmpl = tmpl;
956		  elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
957
958		  spec_entry **slot
959		    = type_specializations->find_slot (&elt, INSERT);
960		  entry = ggc_alloc<spec_entry> ();
961		  *entry = elt;
962		  *slot = entry;
963		}
964	      else
965		/* But if we've had an implicit instantiation, that's a
966		   problem ([temp.expl.spec]/6).  */
967		error ("specialization %qT after instantiation %qT",
968		       type, inst);
969	    }
970
971	  /* Mark TYPE as a specialization.  And as a result, we only
972	     have one level of template argument for the innermost
973	     class template.  */
974	  SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
975	  DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
976	  CLASSTYPE_TI_ARGS (type)
977	    = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
978	}
979    }
980  else if (processing_specialization)
981    {
982       /* Someday C++0x may allow for enum template specialization.  */
983      if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
984	  && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
985	pedwarn (input_location, OPT_Wpedantic, "template specialization "
986		 "of %qD not allowed by ISO C++", type);
987      else
988	{
989	  error ("explicit specialization of non-template %qT", type);
990	  return error_mark_node;
991	}
992    }
993
994  return type;
995}
996
997/* Returns nonzero if we can optimize the retrieval of specializations
998   for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
999   do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
1000
1001static inline bool
1002optimize_specialization_lookup_p (tree tmpl)
1003{
1004  return (DECL_FUNCTION_TEMPLATE_P (tmpl)
1005	  && DECL_CLASS_SCOPE_P (tmpl)
1006	  /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
1007	     parameter.  */
1008	  && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1009	  /* The optimized lookup depends on the fact that the
1010	     template arguments for the member function template apply
1011	     purely to the containing class, which is not true if the
1012	     containing class is an explicit or partial
1013	     specialization.  */
1014	  && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1015	  && !DECL_MEMBER_TEMPLATE_P (tmpl)
1016	  && !DECL_CONV_FN_P (tmpl)
1017	  /* It is possible to have a template that is not a member
1018	     template and is not a member of a template class:
1019
1020	     template <typename T>
1021	     struct S { friend A::f(); };
1022
1023	     Here, the friend function is a template, but the context does
1024	     not have template information.  The optimized lookup relies
1025	     on having ARGS be the template arguments for both the class
1026	     and the function template.  */
1027	  && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1028}
1029
1030/* Retrieve the specialization (in the sense of [temp.spec] - a
1031   specialization is either an instantiation or an explicit
1032   specialization) of TMPL for the given template ARGS.  If there is
1033   no such specialization, return NULL_TREE.  The ARGS are a vector of
1034   arguments, or a vector of vectors of arguments, in the case of
1035   templates with more than one level of parameters.
1036
1037   If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1038   then we search for a partial specialization matching ARGS.  This
1039   parameter is ignored if TMPL is not a class template.
1040
1041   We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1042   result is a NONTYPE_ARGUMENT_PACK.  */
1043
1044static tree
1045retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1046{
1047  if (tmpl == NULL_TREE)
1048    return NULL_TREE;
1049
1050  if (args == error_mark_node)
1051    return NULL_TREE;
1052
1053  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1054	      || TREE_CODE (tmpl) == FIELD_DECL);
1055
1056  /* There should be as many levels of arguments as there are
1057     levels of parameters.  */
1058  gcc_assert (TMPL_ARGS_DEPTH (args)
1059	      == (TREE_CODE (tmpl) == TEMPLATE_DECL
1060		  ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1061		  : template_class_depth (DECL_CONTEXT (tmpl))));
1062
1063  if (optimize_specialization_lookup_p (tmpl))
1064    {
1065      tree class_template;
1066      tree class_specialization;
1067      vec<tree, va_gc> *methods;
1068      tree fns;
1069      int idx;
1070
1071      /* The template arguments actually apply to the containing
1072	 class.  Find the class specialization with those
1073	 arguments.  */
1074      class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1075      class_specialization
1076	= retrieve_specialization (class_template, args, 0);
1077      if (!class_specialization)
1078	return NULL_TREE;
1079      /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1080	 for the specialization.  */
1081      idx = class_method_index_for_fn (class_specialization, tmpl);
1082      if (idx == -1)
1083	return NULL_TREE;
1084      /* Iterate through the methods with the indicated name, looking
1085	 for the one that has an instance of TMPL.  */
1086      methods = CLASSTYPE_METHOD_VEC (class_specialization);
1087      for (fns = (*methods)[idx]; fns; fns = OVL_NEXT (fns))
1088	{
1089	  tree fn = OVL_CURRENT (fns);
1090	  if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1091	      /* using-declarations can add base methods to the method vec,
1092		 and we don't want those here.  */
1093	      && DECL_CONTEXT (fn) == class_specialization)
1094	    return fn;
1095	}
1096      return NULL_TREE;
1097    }
1098  else
1099    {
1100      spec_entry *found;
1101      spec_entry elt;
1102      hash_table<spec_hasher> *specializations;
1103
1104      elt.tmpl = tmpl;
1105      elt.args = args;
1106      elt.spec = NULL_TREE;
1107
1108      if (DECL_CLASS_TEMPLATE_P (tmpl))
1109	specializations = type_specializations;
1110      else
1111	specializations = decl_specializations;
1112
1113      if (hash == 0)
1114	hash = spec_hasher::hash (&elt);
1115      found = specializations->find_with_hash (&elt, hash);
1116      if (found)
1117	return found->spec;
1118    }
1119
1120  return NULL_TREE;
1121}
1122
1123/* Like retrieve_specialization, but for local declarations.  */
1124
1125static tree
1126retrieve_local_specialization (tree tmpl)
1127{
1128  if (local_specializations == NULL)
1129    return NULL_TREE;
1130
1131  tree *slot = local_specializations->get (tmpl);
1132  return slot ? *slot : NULL_TREE;
1133}
1134
1135/* Returns nonzero iff DECL is a specialization of TMPL.  */
1136
1137int
1138is_specialization_of (tree decl, tree tmpl)
1139{
1140  tree t;
1141
1142  if (TREE_CODE (decl) == FUNCTION_DECL)
1143    {
1144      for (t = decl;
1145	   t != NULL_TREE;
1146	   t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1147	if (t == tmpl)
1148	  return 1;
1149    }
1150  else
1151    {
1152      gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1153
1154      for (t = TREE_TYPE (decl);
1155	   t != NULL_TREE;
1156	   t = CLASSTYPE_USE_TEMPLATE (t)
1157	     ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1158	if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1159	  return 1;
1160    }
1161
1162  return 0;
1163}
1164
1165/* Returns nonzero iff DECL is a specialization of friend declaration
1166   FRIEND_DECL according to [temp.friend].  */
1167
1168bool
1169is_specialization_of_friend (tree decl, tree friend_decl)
1170{
1171  bool need_template = true;
1172  int template_depth;
1173
1174  gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1175	      || TREE_CODE (decl) == TYPE_DECL);
1176
1177  /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1178     of a template class, we want to check if DECL is a specialization
1179     if this.  */
1180  if (TREE_CODE (friend_decl) == FUNCTION_DECL
1181      && DECL_TEMPLATE_INFO (friend_decl)
1182      && !DECL_USE_TEMPLATE (friend_decl))
1183    {
1184      /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1185      friend_decl = DECL_TI_TEMPLATE (friend_decl);
1186      need_template = false;
1187    }
1188  else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1189	   && !PRIMARY_TEMPLATE_P (friend_decl))
1190    need_template = false;
1191
1192  /* There is nothing to do if this is not a template friend.  */
1193  if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1194    return false;
1195
1196  if (is_specialization_of (decl, friend_decl))
1197    return true;
1198
1199  /* [temp.friend/6]
1200     A member of a class template may be declared to be a friend of a
1201     non-template class.  In this case, the corresponding member of
1202     every specialization of the class template is a friend of the
1203     class granting friendship.
1204
1205     For example, given a template friend declaration
1206
1207       template <class T> friend void A<T>::f();
1208
1209     the member function below is considered a friend
1210
1211       template <> struct A<int> {
1212	 void f();
1213       };
1214
1215     For this type of template friend, TEMPLATE_DEPTH below will be
1216     nonzero.  To determine if DECL is a friend of FRIEND, we first
1217     check if the enclosing class is a specialization of another.  */
1218
1219  template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1220  if (template_depth
1221      && DECL_CLASS_SCOPE_P (decl)
1222      && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1223			       CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1224    {
1225      /* Next, we check the members themselves.  In order to handle
1226	 a few tricky cases, such as when FRIEND_DECL's are
1227
1228	   template <class T> friend void A<T>::g(T t);
1229	   template <class T> template <T t> friend void A<T>::h();
1230
1231	 and DECL's are
1232
1233	   void A<int>::g(int);
1234	   template <int> void A<int>::h();
1235
1236	 we need to figure out ARGS, the template arguments from
1237	 the context of DECL.  This is required for template substitution
1238	 of `T' in the function parameter of `g' and template parameter
1239	 of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1240
1241      tree context = DECL_CONTEXT (decl);
1242      tree args = NULL_TREE;
1243      int current_depth = 0;
1244
1245      while (current_depth < template_depth)
1246	{
1247	  if (CLASSTYPE_TEMPLATE_INFO (context))
1248	    {
1249	      if (current_depth == 0)
1250		args = TYPE_TI_ARGS (context);
1251	      else
1252		args = add_to_template_args (TYPE_TI_ARGS (context), args);
1253	      current_depth++;
1254	    }
1255	  context = TYPE_CONTEXT (context);
1256	}
1257
1258      if (TREE_CODE (decl) == FUNCTION_DECL)
1259	{
1260	  bool is_template;
1261	  tree friend_type;
1262	  tree decl_type;
1263	  tree friend_args_type;
1264	  tree decl_args_type;
1265
1266	  /* Make sure that both DECL and FRIEND_DECL are templates or
1267	     non-templates.  */
1268	  is_template = DECL_TEMPLATE_INFO (decl)
1269			&& PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1270	  if (need_template ^ is_template)
1271	    return false;
1272	  else if (is_template)
1273	    {
1274	      /* If both are templates, check template parameter list.  */
1275	      tree friend_parms
1276		= tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1277					 args, tf_none);
1278	      if (!comp_template_parms
1279		     (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1280		      friend_parms))
1281		return false;
1282
1283	      decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1284	    }
1285	  else
1286	    decl_type = TREE_TYPE (decl);
1287
1288	  friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1289					      tf_none, NULL_TREE);
1290	  if (friend_type == error_mark_node)
1291	    return false;
1292
1293	  /* Check if return types match.  */
1294	  if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1295	    return false;
1296
1297	  /* Check if function parameter types match, ignoring the
1298	     `this' parameter.  */
1299	  friend_args_type = TYPE_ARG_TYPES (friend_type);
1300	  decl_args_type = TYPE_ARG_TYPES (decl_type);
1301	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1302	    friend_args_type = TREE_CHAIN (friend_args_type);
1303	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1304	    decl_args_type = TREE_CHAIN (decl_args_type);
1305
1306	  return compparms (decl_args_type, friend_args_type);
1307	}
1308      else
1309	{
1310	  /* DECL is a TYPE_DECL */
1311	  bool is_template;
1312	  tree decl_type = TREE_TYPE (decl);
1313
1314	  /* Make sure that both DECL and FRIEND_DECL are templates or
1315	     non-templates.  */
1316	  is_template
1317	    = CLASSTYPE_TEMPLATE_INFO (decl_type)
1318	      && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1319
1320	  if (need_template ^ is_template)
1321	    return false;
1322	  else if (is_template)
1323	    {
1324	      tree friend_parms;
1325	      /* If both are templates, check the name of the two
1326		 TEMPLATE_DECL's first because is_friend didn't.  */
1327	      if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1328		  != DECL_NAME (friend_decl))
1329		return false;
1330
1331	      /* Now check template parameter list.  */
1332	      friend_parms
1333		= tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1334					 args, tf_none);
1335	      return comp_template_parms
1336		(DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1337		 friend_parms);
1338	    }
1339	  else
1340	    return (DECL_NAME (decl)
1341		    == DECL_NAME (friend_decl));
1342	}
1343    }
1344  return false;
1345}
1346
1347/* Register the specialization SPEC as a specialization of TMPL with
1348   the indicated ARGS.  IS_FRIEND indicates whether the specialization
1349   is actually just a friend declaration.  Returns SPEC, or an
1350   equivalent prior declaration, if available.
1351
1352   We also store instantiations of field packs in the hash table, even
1353   though they are not themselves templates, to make lookup easier.  */
1354
1355static tree
1356register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1357			 hashval_t hash)
1358{
1359  tree fn;
1360  spec_entry **slot = NULL;
1361  spec_entry elt;
1362
1363  gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1364	      || (TREE_CODE (tmpl) == FIELD_DECL
1365		  && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1366
1367  if (TREE_CODE (spec) == FUNCTION_DECL
1368      && uses_template_parms (DECL_TI_ARGS (spec)))
1369    /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1370       register it; we want the corresponding TEMPLATE_DECL instead.
1371       We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1372       the more obvious `uses_template_parms (spec)' to avoid problems
1373       with default function arguments.  In particular, given
1374       something like this:
1375
1376	  template <class T> void f(T t1, T t = T())
1377
1378       the default argument expression is not substituted for in an
1379       instantiation unless and until it is actually needed.  */
1380    return spec;
1381
1382  if (optimize_specialization_lookup_p (tmpl))
1383    /* We don't put these specializations in the hash table, but we might
1384       want to give an error about a mismatch.  */
1385    fn = retrieve_specialization (tmpl, args, 0);
1386  else
1387    {
1388      elt.tmpl = tmpl;
1389      elt.args = args;
1390      elt.spec = spec;
1391
1392      if (hash == 0)
1393	hash = spec_hasher::hash (&elt);
1394
1395      slot =
1396	decl_specializations->find_slot_with_hash (&elt, hash, INSERT);
1397      if (*slot)
1398	fn = ((spec_entry *) *slot)->spec;
1399      else
1400	fn = NULL_TREE;
1401    }
1402
1403  /* We can sometimes try to re-register a specialization that we've
1404     already got.  In particular, regenerate_decl_from_template calls
1405     duplicate_decls which will update the specialization list.  But,
1406     we'll still get called again here anyhow.  It's more convenient
1407     to simply allow this than to try to prevent it.  */
1408  if (fn == spec)
1409    return spec;
1410  else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1411    {
1412      if (DECL_TEMPLATE_INSTANTIATION (fn))
1413	{
1414	  if (DECL_ODR_USED (fn)
1415	      || DECL_EXPLICIT_INSTANTIATION (fn))
1416	    {
1417	      error ("specialization of %qD after instantiation",
1418		     fn);
1419	      return error_mark_node;
1420	    }
1421	  else
1422	    {
1423	      tree clone;
1424	      /* This situation should occur only if the first
1425		 specialization is an implicit instantiation, the
1426		 second is an explicit specialization, and the
1427		 implicit instantiation has not yet been used.  That
1428		 situation can occur if we have implicitly
1429		 instantiated a member function and then specialized
1430		 it later.
1431
1432		 We can also wind up here if a friend declaration that
1433		 looked like an instantiation turns out to be a
1434		 specialization:
1435
1436		   template <class T> void foo(T);
1437		   class S { friend void foo<>(int) };
1438		   template <> void foo(int);
1439
1440		 We transform the existing DECL in place so that any
1441		 pointers to it become pointers to the updated
1442		 declaration.
1443
1444		 If there was a definition for the template, but not
1445		 for the specialization, we want this to look as if
1446		 there were no definition, and vice versa.  */
1447	      DECL_INITIAL (fn) = NULL_TREE;
1448	      duplicate_decls (spec, fn, is_friend);
1449	      /* The call to duplicate_decls will have applied
1450		 [temp.expl.spec]:
1451
1452		   An explicit specialization of a function template
1453		   is inline only if it is explicitly declared to be,
1454		   and independently of whether its function template
1455		   is.
1456
1457		to the primary function; now copy the inline bits to
1458		the various clones.  */
1459	      FOR_EACH_CLONE (clone, fn)
1460		{
1461		  DECL_DECLARED_INLINE_P (clone)
1462		    = DECL_DECLARED_INLINE_P (fn);
1463		  DECL_SOURCE_LOCATION (clone)
1464		    = DECL_SOURCE_LOCATION (fn);
1465		  DECL_DELETED_FN (clone)
1466		    = DECL_DELETED_FN (fn);
1467		}
1468	      check_specialization_namespace (tmpl);
1469
1470	      return fn;
1471	    }
1472	}
1473      else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1474	{
1475	  if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1476	    /* Dup decl failed, but this is a new definition. Set the
1477	       line number so any errors match this new
1478	       definition.  */
1479	    DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1480
1481	  return fn;
1482	}
1483    }
1484  else if (fn)
1485    return duplicate_decls (spec, fn, is_friend);
1486
1487  /* A specialization must be declared in the same namespace as the
1488     template it is specializing.  */
1489  if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1490      && !check_specialization_namespace (tmpl))
1491    DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1492
1493  if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1494    {
1495      spec_entry *entry = ggc_alloc<spec_entry> ();
1496      gcc_assert (tmpl && args && spec);
1497      *entry = elt;
1498      *slot = entry;
1499      if ((TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1500	   && PRIMARY_TEMPLATE_P (tmpl)
1501	   && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1502	  || variable_template_p (tmpl))
1503	/* If TMPL is a forward declaration of a template function, keep a list
1504	   of all specializations in case we need to reassign them to a friend
1505	   template later in tsubst_friend_function.
1506
1507	   Also keep a list of all variable template instantiations so that
1508	   process_partial_specialization can check whether a later partial
1509	   specialization would have used it.  */
1510	DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1511	  = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1512    }
1513
1514  return spec;
1515}
1516
1517/* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1518   TMPL and ARGS members, ignores SPEC.  */
1519
1520int comparing_specializations;
1521
1522bool
1523spec_hasher::equal (spec_entry *e1, spec_entry *e2)
1524{
1525  int equal;
1526
1527  ++comparing_specializations;
1528  equal = (e1->tmpl == e2->tmpl
1529	   && comp_template_args (e1->args, e2->args));
1530  --comparing_specializations;
1531
1532  return equal;
1533}
1534
1535/* Returns a hash for a template TMPL and template arguments ARGS.  */
1536
1537static hashval_t
1538hash_tmpl_and_args (tree tmpl, tree args)
1539{
1540  hashval_t val = DECL_UID (tmpl);
1541  return iterative_hash_template_arg (args, val);
1542}
1543
1544/* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1545   ignoring SPEC.  */
1546
1547hashval_t
1548spec_hasher::hash (spec_entry *e)
1549{
1550  return hash_tmpl_and_args (e->tmpl, e->args);
1551}
1552
1553/* Recursively calculate a hash value for a template argument ARG, for use
1554   in the hash tables of template specializations.  */
1555
1556hashval_t
1557iterative_hash_template_arg (tree arg, hashval_t val)
1558{
1559  unsigned HOST_WIDE_INT i;
1560  enum tree_code code;
1561  char tclass;
1562
1563  if (arg == NULL_TREE)
1564    return iterative_hash_object (arg, val);
1565
1566  if (!TYPE_P (arg))
1567    STRIP_NOPS (arg);
1568
1569  if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1570    /* We can get one of these when re-hashing a previous entry in the middle
1571       of substituting into a pack expansion.  Just look through it.  */
1572    arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1573
1574  code = TREE_CODE (arg);
1575  tclass = TREE_CODE_CLASS (code);
1576
1577  val = iterative_hash_object (code, val);
1578
1579  switch (code)
1580    {
1581    case ERROR_MARK:
1582      return val;
1583
1584    case IDENTIFIER_NODE:
1585      return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1586
1587    case TREE_VEC:
1588      {
1589	int i, len = TREE_VEC_LENGTH (arg);
1590	for (i = 0; i < len; ++i)
1591	  val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1592	return val;
1593      }
1594
1595    case TYPE_PACK_EXPANSION:
1596    case EXPR_PACK_EXPANSION:
1597      val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1598      return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1599
1600    case TYPE_ARGUMENT_PACK:
1601    case NONTYPE_ARGUMENT_PACK:
1602      return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1603
1604    case TREE_LIST:
1605      for (; arg; arg = TREE_CHAIN (arg))
1606	val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1607      return val;
1608
1609    case OVERLOAD:
1610      for (; arg; arg = OVL_NEXT (arg))
1611	val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1612      return val;
1613
1614    case CONSTRUCTOR:
1615      {
1616	tree field, value;
1617	iterative_hash_template_arg (TREE_TYPE (arg), val);
1618	FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1619	  {
1620	    val = iterative_hash_template_arg (field, val);
1621	    val = iterative_hash_template_arg (value, val);
1622	  }
1623	return val;
1624      }
1625
1626    case PARM_DECL:
1627      if (!DECL_ARTIFICIAL (arg))
1628	{
1629	  val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1630	  val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1631	}
1632      return iterative_hash_template_arg (TREE_TYPE (arg), val);
1633
1634    case TARGET_EXPR:
1635      return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1636
1637    case PTRMEM_CST:
1638      val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1639      return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1640
1641    case TEMPLATE_PARM_INDEX:
1642      val = iterative_hash_template_arg
1643	(TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1644      val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1645      return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1646
1647    case TRAIT_EXPR:
1648      val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1649      val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1650      return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1651
1652    case BASELINK:
1653      val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1654					 val);
1655      return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1656					  val);
1657
1658    case MODOP_EXPR:
1659      val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1660      code = TREE_CODE (TREE_OPERAND (arg, 1));
1661      val = iterative_hash_object (code, val);
1662      return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1663
1664    case LAMBDA_EXPR:
1665      /* A lambda can't appear in a template arg, but don't crash on
1666	 erroneous input.  */
1667      gcc_assert (seen_error ());
1668      return val;
1669
1670    case CAST_EXPR:
1671    case IMPLICIT_CONV_EXPR:
1672    case STATIC_CAST_EXPR:
1673    case REINTERPRET_CAST_EXPR:
1674    case CONST_CAST_EXPR:
1675    case DYNAMIC_CAST_EXPR:
1676    case NEW_EXPR:
1677      val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1678      /* Now hash operands as usual.  */
1679      break;
1680
1681    default:
1682      break;
1683    }
1684
1685  switch (tclass)
1686    {
1687    case tcc_type:
1688      if (alias_template_specialization_p (arg))
1689	{
1690	  // We want an alias specialization that survived strip_typedefs
1691	  // to hash differently from its TYPE_CANONICAL, to avoid hash
1692	  // collisions that compare as different in template_args_equal.
1693	  // These could be dependent specializations that strip_typedefs
1694	  // left alone, or untouched specializations because
1695	  // coerce_template_parms returns the unconverted template
1696	  // arguments if it sees incomplete argument packs.
1697	  tree ti = TYPE_TEMPLATE_INFO (arg);
1698	  return hash_tmpl_and_args (TI_TEMPLATE (ti), TI_ARGS (ti));
1699	}
1700      if (TYPE_CANONICAL (arg))
1701	return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1702				      val);
1703      else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1704	return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1705      /* Otherwise just compare the types during lookup.  */
1706      return val;
1707
1708    case tcc_declaration:
1709    case tcc_constant:
1710      return iterative_hash_expr (arg, val);
1711
1712    default:
1713      gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1714      {
1715	unsigned n = cp_tree_operand_length (arg);
1716	for (i = 0; i < n; ++i)
1717	  val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1718	return val;
1719      }
1720    }
1721  gcc_unreachable ();
1722  return 0;
1723}
1724
1725/* Unregister the specialization SPEC as a specialization of TMPL.
1726   Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1727   if the SPEC was listed as a specialization of TMPL.
1728
1729   Note that SPEC has been ggc_freed, so we can't look inside it.  */
1730
1731bool
1732reregister_specialization (tree spec, tree tinfo, tree new_spec)
1733{
1734  spec_entry *entry;
1735  spec_entry elt;
1736
1737  elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1738  elt.args = TI_ARGS (tinfo);
1739  elt.spec = NULL_TREE;
1740
1741  entry = decl_specializations->find (&elt);
1742  if (entry != NULL)
1743    {
1744      gcc_assert (entry->spec == spec || entry->spec == new_spec);
1745      gcc_assert (new_spec != NULL_TREE);
1746      entry->spec = new_spec;
1747      return 1;
1748    }
1749
1750  return 0;
1751}
1752
1753/* Like register_specialization, but for local declarations.  We are
1754   registering SPEC, an instantiation of TMPL.  */
1755
1756static void
1757register_local_specialization (tree spec, tree tmpl)
1758{
1759  local_specializations->put (tmpl, spec);
1760}
1761
1762/* TYPE is a class type.  Returns true if TYPE is an explicitly
1763   specialized class.  */
1764
1765bool
1766explicit_class_specialization_p (tree type)
1767{
1768  if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1769    return false;
1770  return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1771}
1772
1773/* Print the list of functions at FNS, going through all the overloads
1774   for each element of the list.  Alternatively, FNS can not be a
1775   TREE_LIST, in which case it will be printed together with all the
1776   overloads.
1777
1778   MORE and *STR should respectively be FALSE and NULL when the function
1779   is called from the outside.  They are used internally on recursive
1780   calls.  print_candidates manages the two parameters and leaves NULL
1781   in *STR when it ends.  */
1782
1783static void
1784print_candidates_1 (tree fns, bool more, const char **str)
1785{
1786  tree fn, fn2;
1787  char *spaces = NULL;
1788
1789  for (fn = fns; fn; fn = OVL_NEXT (fn))
1790    if (TREE_CODE (fn) == TREE_LIST)
1791      {
1792        for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1793          print_candidates_1 (TREE_VALUE (fn2),
1794                              TREE_CHAIN (fn2) || more, str);
1795      }
1796    else
1797      {
1798	tree cand = OVL_CURRENT (fn);
1799        if (!*str)
1800          {
1801            /* Pick the prefix string.  */
1802            if (!more && !OVL_NEXT (fns))
1803              {
1804                inform (DECL_SOURCE_LOCATION (cand),
1805			"candidate is: %#D", cand);
1806                continue;
1807              }
1808
1809            *str = _("candidates are:");
1810            spaces = get_spaces (*str);
1811          }
1812        inform (DECL_SOURCE_LOCATION (cand), "%s %#D", *str, cand);
1813        *str = spaces ? spaces : *str;
1814      }
1815
1816  if (!more)
1817    {
1818      free (spaces);
1819      *str = NULL;
1820    }
1821}
1822
1823/* Print the list of candidate FNS in an error message.  FNS can also
1824   be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1825
1826void
1827print_candidates (tree fns)
1828{
1829  const char *str = NULL;
1830  print_candidates_1 (fns, false, &str);
1831  gcc_assert (str == NULL);
1832}
1833
1834/* Returns the template (one of the functions given by TEMPLATE_ID)
1835   which can be specialized to match the indicated DECL with the
1836   explicit template args given in TEMPLATE_ID.  The DECL may be
1837   NULL_TREE if none is available.  In that case, the functions in
1838   TEMPLATE_ID are non-members.
1839
1840   If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1841   specialization of a member template.
1842
1843   The TEMPLATE_COUNT is the number of references to qualifying
1844   template classes that appeared in the name of the function. See
1845   check_explicit_specialization for a more accurate description.
1846
1847   TSK indicates what kind of template declaration (if any) is being
1848   declared.  TSK_TEMPLATE indicates that the declaration given by
1849   DECL, though a FUNCTION_DECL, has template parameters, and is
1850   therefore a template function.
1851
1852   The template args (those explicitly specified and those deduced)
1853   are output in a newly created vector *TARGS_OUT.
1854
1855   If it is impossible to determine the result, an error message is
1856   issued.  The error_mark_node is returned to indicate failure.  */
1857
1858static tree
1859determine_specialization (tree template_id,
1860			  tree decl,
1861			  tree* targs_out,
1862			  int need_member_template,
1863			  int template_count,
1864			  tmpl_spec_kind tsk)
1865{
1866  tree fns;
1867  tree targs;
1868  tree explicit_targs;
1869  tree candidates = NULL_TREE;
1870  /* A TREE_LIST of templates of which DECL may be a specialization.
1871     The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1872     corresponding TREE_PURPOSE is the set of template arguments that,
1873     when used to instantiate the template, would produce a function
1874     with the signature of DECL.  */
1875  tree templates = NULL_TREE;
1876  int header_count;
1877  cp_binding_level *b;
1878
1879  *targs_out = NULL_TREE;
1880
1881  if (template_id == error_mark_node || decl == error_mark_node)
1882    return error_mark_node;
1883
1884  /* We shouldn't be specializing a member template of an
1885     unspecialized class template; we already gave an error in
1886     check_specialization_scope, now avoid crashing.  */
1887  if (template_count && DECL_CLASS_SCOPE_P (decl)
1888      && template_class_depth (DECL_CONTEXT (decl)) > 0)
1889    {
1890      gcc_assert (errorcount);
1891      return error_mark_node;
1892    }
1893
1894  fns = TREE_OPERAND (template_id, 0);
1895  explicit_targs = TREE_OPERAND (template_id, 1);
1896
1897  if (fns == error_mark_node)
1898    return error_mark_node;
1899
1900  /* Check for baselinks.  */
1901  if (BASELINK_P (fns))
1902    fns = BASELINK_FUNCTIONS (fns);
1903
1904  if (TREE_CODE (decl) == FUNCTION_DECL && !is_overloaded_fn (fns))
1905    {
1906      error ("%qD is not a function template", fns);
1907      return error_mark_node;
1908    }
1909  else if (VAR_P (decl) && !variable_template_p (fns))
1910    {
1911      error ("%qD is not a variable template", fns);
1912      return error_mark_node;
1913    }
1914
1915  /* Count the number of template headers specified for this
1916     specialization.  */
1917  header_count = 0;
1918  for (b = current_binding_level;
1919       b->kind == sk_template_parms;
1920       b = b->level_chain)
1921    ++header_count;
1922
1923  if (variable_template_p (fns))
1924    {
1925      tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (fns));
1926      targs = coerce_template_parms (parms, explicit_targs, fns,
1927				     tf_warning_or_error,
1928				     /*req_all*/true, /*use_defarg*/true);
1929      templates = tree_cons (targs, fns, templates);
1930    }
1931  else for (; fns; fns = OVL_NEXT (fns))
1932    {
1933      tree fn = OVL_CURRENT (fns);
1934
1935      if (TREE_CODE (fn) == TEMPLATE_DECL)
1936	{
1937	  tree decl_arg_types;
1938	  tree fn_arg_types;
1939	  tree insttype;
1940
1941	  /* In case of explicit specialization, we need to check if
1942	     the number of template headers appearing in the specialization
1943	     is correct. This is usually done in check_explicit_specialization,
1944	     but the check done there cannot be exhaustive when specializing
1945	     member functions. Consider the following code:
1946
1947	     template <> void A<int>::f(int);
1948	     template <> template <> void A<int>::f(int);
1949
1950	     Assuming that A<int> is not itself an explicit specialization
1951	     already, the first line specializes "f" which is a non-template
1952	     member function, whilst the second line specializes "f" which
1953	     is a template member function. So both lines are syntactically
1954	     correct, and check_explicit_specialization does not reject
1955	     them.
1956
1957	     Here, we can do better, as we are matching the specialization
1958	     against the declarations. We count the number of template
1959	     headers, and we check if they match TEMPLATE_COUNT + 1
1960	     (TEMPLATE_COUNT is the number of qualifying template classes,
1961	     plus there must be another header for the member template
1962	     itself).
1963
1964	     Notice that if header_count is zero, this is not a
1965	     specialization but rather a template instantiation, so there
1966	     is no check we can perform here.  */
1967	  if (header_count && header_count != template_count + 1)
1968	    continue;
1969
1970	  /* Check that the number of template arguments at the
1971	     innermost level for DECL is the same as for FN.  */
1972	  if (current_binding_level->kind == sk_template_parms
1973	      && !current_binding_level->explicit_spec_p
1974	      && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1975		  != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1976				      (current_template_parms))))
1977	    continue;
1978
1979	  /* DECL might be a specialization of FN.  */
1980	  decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1981	  fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1982
1983	  /* For a non-static member function, we need to make sure
1984	     that the const qualification is the same.  Since
1985	     get_bindings does not try to merge the "this" parameter,
1986	     we must do the comparison explicitly.  */
1987	  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1988	      && !same_type_p (TREE_VALUE (fn_arg_types),
1989			       TREE_VALUE (decl_arg_types)))
1990	    continue;
1991
1992	  /* Skip the "this" parameter and, for constructors of
1993	     classes with virtual bases, the VTT parameter.  A
1994	     full specialization of a constructor will have a VTT
1995	     parameter, but a template never will.  */
1996	  decl_arg_types
1997	    = skip_artificial_parms_for (decl, decl_arg_types);
1998	  fn_arg_types
1999	    = skip_artificial_parms_for (fn, fn_arg_types);
2000
2001	  /* Function templates cannot be specializations; there are
2002	     no partial specializations of functions.  Therefore, if
2003	     the type of DECL does not match FN, there is no
2004	     match.  */
2005	  if (tsk == tsk_template)
2006	    {
2007	      if (compparms (fn_arg_types, decl_arg_types))
2008		candidates = tree_cons (NULL_TREE, fn, candidates);
2009	      continue;
2010	    }
2011
2012	  /* See whether this function might be a specialization of this
2013	     template.  Suppress access control because we might be trying
2014	     to make this specialization a friend, and we have already done
2015	     access control for the declaration of the specialization.  */
2016	  push_deferring_access_checks (dk_no_check);
2017	  targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
2018	  pop_deferring_access_checks ();
2019
2020	  if (!targs)
2021	    /* We cannot deduce template arguments that when used to
2022	       specialize TMPL will produce DECL.  */
2023	    continue;
2024
2025	  /* Make sure that the deduced arguments actually work.  */
2026	  insttype = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
2027	  if (insttype == error_mark_node)
2028	    continue;
2029	  fn_arg_types
2030	    = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
2031	  if (!compparms (fn_arg_types, decl_arg_types))
2032	    continue;
2033
2034	  /* Save this template, and the arguments deduced.  */
2035	  templates = tree_cons (targs, fn, templates);
2036	}
2037      else if (need_member_template)
2038	/* FN is an ordinary member function, and we need a
2039	   specialization of a member template.  */
2040	;
2041      else if (TREE_CODE (fn) != FUNCTION_DECL)
2042	/* We can get IDENTIFIER_NODEs here in certain erroneous
2043	   cases.  */
2044	;
2045      else if (!DECL_FUNCTION_MEMBER_P (fn))
2046	/* This is just an ordinary non-member function.  Nothing can
2047	   be a specialization of that.  */
2048	;
2049      else if (DECL_ARTIFICIAL (fn))
2050	/* Cannot specialize functions that are created implicitly.  */
2051	;
2052      else
2053	{
2054	  tree decl_arg_types;
2055
2056	  /* This is an ordinary member function.  However, since
2057	     we're here, we can assume its enclosing class is a
2058	     template class.  For example,
2059
2060	       template <typename T> struct S { void f(); };
2061	       template <> void S<int>::f() {}
2062
2063	     Here, S<int>::f is a non-template, but S<int> is a
2064	     template class.  If FN has the same type as DECL, we
2065	     might be in business.  */
2066
2067	  if (!DECL_TEMPLATE_INFO (fn))
2068	    /* Its enclosing class is an explicit specialization
2069	       of a template class.  This is not a candidate.  */
2070	    continue;
2071
2072	  if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2073			    TREE_TYPE (TREE_TYPE (fn))))
2074	    /* The return types differ.  */
2075	    continue;
2076
2077	  /* Adjust the type of DECL in case FN is a static member.  */
2078	  decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2079	  if (DECL_STATIC_FUNCTION_P (fn)
2080	      && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2081	    decl_arg_types = TREE_CHAIN (decl_arg_types);
2082
2083	  if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2084			 decl_arg_types))
2085	    /* They match!  */
2086	    candidates = tree_cons (NULL_TREE, fn, candidates);
2087	}
2088    }
2089
2090  if (templates && TREE_CHAIN (templates))
2091    {
2092      /* We have:
2093
2094	   [temp.expl.spec]
2095
2096	   It is possible for a specialization with a given function
2097	   signature to be instantiated from more than one function
2098	   template.  In such cases, explicit specification of the
2099	   template arguments must be used to uniquely identify the
2100	   function template specialization being specialized.
2101
2102	 Note that here, there's no suggestion that we're supposed to
2103	 determine which of the candidate templates is most
2104	 specialized.  However, we, also have:
2105
2106	   [temp.func.order]
2107
2108	   Partial ordering of overloaded function template
2109	   declarations is used in the following contexts to select
2110	   the function template to which a function template
2111	   specialization refers:
2112
2113	   -- when an explicit specialization refers to a function
2114	      template.
2115
2116	 So, we do use the partial ordering rules, at least for now.
2117	 This extension can only serve to make invalid programs valid,
2118	 so it's safe.  And, there is strong anecdotal evidence that
2119	 the committee intended the partial ordering rules to apply;
2120	 the EDG front end has that behavior, and John Spicer claims
2121	 that the committee simply forgot to delete the wording in
2122	 [temp.expl.spec].  */
2123      tree tmpl = most_specialized_instantiation (templates);
2124      if (tmpl != error_mark_node)
2125	{
2126	  templates = tmpl;
2127	  TREE_CHAIN (templates) = NULL_TREE;
2128	}
2129    }
2130
2131  if (templates == NULL_TREE && candidates == NULL_TREE)
2132    {
2133      error ("template-id %qD for %q+D does not match any template "
2134	     "declaration", template_id, decl);
2135      if (header_count && header_count != template_count + 1)
2136	inform (input_location, "saw %d %<template<>%>, need %d for "
2137		"specializing a member function template",
2138		header_count, template_count + 1);
2139      return error_mark_node;
2140    }
2141  else if ((templates && TREE_CHAIN (templates))
2142	   || (candidates && TREE_CHAIN (candidates))
2143	   || (templates && candidates))
2144    {
2145      error ("ambiguous template specialization %qD for %q+D",
2146	     template_id, decl);
2147      candidates = chainon (candidates, templates);
2148      print_candidates (candidates);
2149      return error_mark_node;
2150    }
2151
2152  /* We have one, and exactly one, match.  */
2153  if (candidates)
2154    {
2155      tree fn = TREE_VALUE (candidates);
2156      *targs_out = copy_node (DECL_TI_ARGS (fn));
2157      /* DECL is a re-declaration or partial instantiation of a template
2158	 function.  */
2159      if (TREE_CODE (fn) == TEMPLATE_DECL)
2160	return fn;
2161      /* It was a specialization of an ordinary member function in a
2162	 template class.  */
2163      return DECL_TI_TEMPLATE (fn);
2164    }
2165
2166  /* It was a specialization of a template.  */
2167  targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2168  if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2169    {
2170      *targs_out = copy_node (targs);
2171      SET_TMPL_ARGS_LEVEL (*targs_out,
2172			   TMPL_ARGS_DEPTH (*targs_out),
2173			   TREE_PURPOSE (templates));
2174    }
2175  else
2176    *targs_out = TREE_PURPOSE (templates);
2177  return TREE_VALUE (templates);
2178}
2179
2180/* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2181   but with the default argument values filled in from those in the
2182   TMPL_TYPES.  */
2183
2184static tree
2185copy_default_args_to_explicit_spec_1 (tree spec_types,
2186				      tree tmpl_types)
2187{
2188  tree new_spec_types;
2189
2190  if (!spec_types)
2191    return NULL_TREE;
2192
2193  if (spec_types == void_list_node)
2194    return void_list_node;
2195
2196  /* Substitute into the rest of the list.  */
2197  new_spec_types =
2198    copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2199					  TREE_CHAIN (tmpl_types));
2200
2201  /* Add the default argument for this parameter.  */
2202  return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2203			 TREE_VALUE (spec_types),
2204			 new_spec_types);
2205}
2206
2207/* DECL is an explicit specialization.  Replicate default arguments
2208   from the template it specializes.  (That way, code like:
2209
2210     template <class T> void f(T = 3);
2211     template <> void f(double);
2212     void g () { f (); }
2213
2214   works, as required.)  An alternative approach would be to look up
2215   the correct default arguments at the call-site, but this approach
2216   is consistent with how implicit instantiations are handled.  */
2217
2218static void
2219copy_default_args_to_explicit_spec (tree decl)
2220{
2221  tree tmpl;
2222  tree spec_types;
2223  tree tmpl_types;
2224  tree new_spec_types;
2225  tree old_type;
2226  tree new_type;
2227  tree t;
2228  tree object_type = NULL_TREE;
2229  tree in_charge = NULL_TREE;
2230  tree vtt = NULL_TREE;
2231
2232  /* See if there's anything we need to do.  */
2233  tmpl = DECL_TI_TEMPLATE (decl);
2234  tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2235  for (t = tmpl_types; t; t = TREE_CHAIN (t))
2236    if (TREE_PURPOSE (t))
2237      break;
2238  if (!t)
2239    return;
2240
2241  old_type = TREE_TYPE (decl);
2242  spec_types = TYPE_ARG_TYPES (old_type);
2243
2244  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2245    {
2246      /* Remove the this pointer, but remember the object's type for
2247	 CV quals.  */
2248      object_type = TREE_TYPE (TREE_VALUE (spec_types));
2249      spec_types = TREE_CHAIN (spec_types);
2250      tmpl_types = TREE_CHAIN (tmpl_types);
2251
2252      if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2253	{
2254	  /* DECL may contain more parameters than TMPL due to the extra
2255	     in-charge parameter in constructors and destructors.  */
2256	  in_charge = spec_types;
2257	  spec_types = TREE_CHAIN (spec_types);
2258	}
2259      if (DECL_HAS_VTT_PARM_P (decl))
2260	{
2261	  vtt = spec_types;
2262	  spec_types = TREE_CHAIN (spec_types);
2263	}
2264    }
2265
2266  /* Compute the merged default arguments.  */
2267  new_spec_types =
2268    copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2269
2270  /* Compute the new FUNCTION_TYPE.  */
2271  if (object_type)
2272    {
2273      if (vtt)
2274	new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2275					 TREE_VALUE (vtt),
2276					 new_spec_types);
2277
2278      if (in_charge)
2279	/* Put the in-charge parameter back.  */
2280	new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2281					 TREE_VALUE (in_charge),
2282					 new_spec_types);
2283
2284      new_type = build_method_type_directly (object_type,
2285					     TREE_TYPE (old_type),
2286					     new_spec_types);
2287    }
2288  else
2289    new_type = build_function_type (TREE_TYPE (old_type),
2290				    new_spec_types);
2291  new_type = cp_build_type_attribute_variant (new_type,
2292					      TYPE_ATTRIBUTES (old_type));
2293  new_type = build_exception_variant (new_type,
2294				      TYPE_RAISES_EXCEPTIONS (old_type));
2295
2296  if (TYPE_HAS_LATE_RETURN_TYPE (old_type))
2297    TYPE_HAS_LATE_RETURN_TYPE (new_type) = 1;
2298
2299  TREE_TYPE (decl) = new_type;
2300}
2301
2302/* Return the number of template headers we expect to see for a definition
2303   or specialization of CTYPE or one of its non-template members.  */
2304
2305int
2306num_template_headers_for_class (tree ctype)
2307{
2308  int num_templates = 0;
2309
2310  while (ctype && CLASS_TYPE_P (ctype))
2311    {
2312      /* You're supposed to have one `template <...>' for every
2313	 template class, but you don't need one for a full
2314	 specialization.  For example:
2315
2316	 template <class T> struct S{};
2317	 template <> struct S<int> { void f(); };
2318	 void S<int>::f () {}
2319
2320	 is correct; there shouldn't be a `template <>' for the
2321	 definition of `S<int>::f'.  */
2322      if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2323	/* If CTYPE does not have template information of any
2324	   kind,  then it is not a template, nor is it nested
2325	   within a template.  */
2326	break;
2327      if (explicit_class_specialization_p (ctype))
2328	break;
2329      if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2330	++num_templates;
2331
2332      ctype = TYPE_CONTEXT (ctype);
2333    }
2334
2335  return num_templates;
2336}
2337
2338/* Do a simple sanity check on the template headers that precede the
2339   variable declaration DECL.  */
2340
2341void
2342check_template_variable (tree decl)
2343{
2344  tree ctx = CP_DECL_CONTEXT (decl);
2345  int wanted = num_template_headers_for_class (ctx);
2346  if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
2347      && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
2348    {
2349      if (cxx_dialect < cxx14)
2350        pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2351                 "variable templates only available with "
2352                 "-std=c++14 or -std=gnu++14");
2353
2354      // Namespace-scope variable templates should have a template header.
2355      ++wanted;
2356    }
2357  if (template_header_count > wanted)
2358    {
2359      bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2360			     "too many template headers for %D (should be %d)",
2361			     decl, wanted);
2362      if (warned && CLASS_TYPE_P (ctx)
2363	  && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2364	inform (DECL_SOURCE_LOCATION (decl),
2365		"members of an explicitly specialized class are defined "
2366		"without a template header");
2367    }
2368}
2369
2370/* Check to see if the function just declared, as indicated in
2371   DECLARATOR, and in DECL, is a specialization of a function
2372   template.  We may also discover that the declaration is an explicit
2373   instantiation at this point.
2374
2375   Returns DECL, or an equivalent declaration that should be used
2376   instead if all goes well.  Issues an error message if something is
2377   amiss.  Returns error_mark_node if the error is not easily
2378   recoverable.
2379
2380   FLAGS is a bitmask consisting of the following flags:
2381
2382   2: The function has a definition.
2383   4: The function is a friend.
2384
2385   The TEMPLATE_COUNT is the number of references to qualifying
2386   template classes that appeared in the name of the function.  For
2387   example, in
2388
2389     template <class T> struct S { void f(); };
2390     void S<int>::f();
2391
2392   the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2393   classes are not counted in the TEMPLATE_COUNT, so that in
2394
2395     template <class T> struct S {};
2396     template <> struct S<int> { void f(); }
2397     template <> void S<int>::f();
2398
2399   the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2400   invalid; there should be no template <>.)
2401
2402   If the function is a specialization, it is marked as such via
2403   DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2404   is set up correctly, and it is added to the list of specializations
2405   for that template.  */
2406
2407tree
2408check_explicit_specialization (tree declarator,
2409			       tree decl,
2410			       int template_count,
2411			       int flags)
2412{
2413  int have_def = flags & 2;
2414  int is_friend = flags & 4;
2415  int specialization = 0;
2416  int explicit_instantiation = 0;
2417  int member_specialization = 0;
2418  tree ctype = DECL_CLASS_CONTEXT (decl);
2419  tree dname = DECL_NAME (decl);
2420  tmpl_spec_kind tsk;
2421
2422  if (is_friend)
2423    {
2424      if (!processing_specialization)
2425	tsk = tsk_none;
2426      else
2427	tsk = tsk_excessive_parms;
2428    }
2429  else
2430    tsk = current_tmpl_spec_kind (template_count);
2431
2432  switch (tsk)
2433    {
2434    case tsk_none:
2435      if (processing_specialization)
2436	{
2437	  specialization = 1;
2438	  SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2439	}
2440      else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2441	{
2442	  if (is_friend)
2443	    /* This could be something like:
2444
2445	       template <class T> void f(T);
2446	       class S { friend void f<>(int); }  */
2447	    specialization = 1;
2448	  else
2449	    {
2450	      /* This case handles bogus declarations like template <>
2451		 template <class T> void f<int>(); */
2452
2453	      error ("template-id %qD in declaration of primary template",
2454		     declarator);
2455	      return decl;
2456	    }
2457	}
2458      break;
2459
2460    case tsk_invalid_member_spec:
2461      /* The error has already been reported in
2462	 check_specialization_scope.  */
2463      return error_mark_node;
2464
2465    case tsk_invalid_expl_inst:
2466      error ("template parameter list used in explicit instantiation");
2467
2468      /* Fall through.  */
2469
2470    case tsk_expl_inst:
2471      if (have_def)
2472	error ("definition provided for explicit instantiation");
2473
2474      explicit_instantiation = 1;
2475      break;
2476
2477    case tsk_excessive_parms:
2478    case tsk_insufficient_parms:
2479      if (tsk == tsk_excessive_parms)
2480	error ("too many template parameter lists in declaration of %qD",
2481	       decl);
2482      else if (template_header_count)
2483	error("too few template parameter lists in declaration of %qD", decl);
2484      else
2485	error("explicit specialization of %qD must be introduced by "
2486	      "%<template <>%>", decl);
2487
2488      /* Fall through.  */
2489    case tsk_expl_spec:
2490      if (VAR_P (decl) && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2491	/* In cases like template<> constexpr bool v = true;
2492	   We'll give an error in check_template_variable.  */
2493	break;
2494
2495      SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2496      if (ctype)
2497	member_specialization = 1;
2498      else
2499	specialization = 1;
2500      break;
2501
2502    case tsk_template:
2503      if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2504	{
2505	  /* This case handles bogus declarations like template <>
2506	     template <class T> void f<int>(); */
2507
2508	  if (!uses_template_parms (declarator))
2509	    error ("template-id %qD in declaration of primary template",
2510		   declarator);
2511	  else if (variable_template_p (TREE_OPERAND (declarator, 0)))
2512	    {
2513	      /* Partial specialization of variable template.  */
2514	      SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2515	      specialization = 1;
2516	      goto ok;
2517	    }
2518	  else if (cxx_dialect < cxx14)
2519	    error ("non-type partial specialization %qD "
2520		   "is not allowed", declarator);
2521	  else
2522	    error ("non-class, non-variable partial specialization %qD "
2523		   "is not allowed", declarator);
2524	  return decl;
2525	ok:;
2526	}
2527
2528      if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2529	/* This is a specialization of a member template, without
2530	   specialization the containing class.  Something like:
2531
2532	     template <class T> struct S {
2533	       template <class U> void f (U);
2534	     };
2535	     template <> template <class U> void S<int>::f(U) {}
2536
2537	   That's a specialization -- but of the entire template.  */
2538	specialization = 1;
2539      break;
2540
2541    default:
2542      gcc_unreachable ();
2543    }
2544
2545  if ((specialization || member_specialization)
2546      /* This doesn't apply to variable templates.  */
2547      && (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE
2548          || TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE))
2549    {
2550      tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2551      for (; t; t = TREE_CHAIN (t))
2552	if (TREE_PURPOSE (t))
2553	  {
2554	    permerror (input_location,
2555		       "default argument specified in explicit specialization");
2556	    break;
2557	  }
2558    }
2559
2560  if (specialization || member_specialization || explicit_instantiation)
2561    {
2562      tree tmpl = NULL_TREE;
2563      tree targs = NULL_TREE;
2564      bool was_template_id = (TREE_CODE (declarator) == TEMPLATE_ID_EXPR);
2565
2566      /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2567      if (!was_template_id)
2568	{
2569	  tree fns;
2570
2571	  gcc_assert (identifier_p (declarator));
2572	  if (ctype)
2573	    fns = dname;
2574	  else
2575	    {
2576	      /* If there is no class context, the explicit instantiation
2577		 must be at namespace scope.  */
2578	      gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2579
2580	      /* Find the namespace binding, using the declaration
2581		 context.  */
2582	      fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2583					   false, true);
2584	      if (fns == error_mark_node || !is_overloaded_fn (fns))
2585		{
2586		  error ("%qD is not a template function", dname);
2587		  fns = error_mark_node;
2588		}
2589	      else
2590		{
2591		  tree fn = OVL_CURRENT (fns);
2592		  if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2593						CP_DECL_CONTEXT (fn)))
2594		    error ("%qD is not declared in %qD",
2595			   decl, current_namespace);
2596		}
2597	    }
2598
2599	  declarator = lookup_template_function (fns, NULL_TREE);
2600	}
2601
2602      if (declarator == error_mark_node)
2603	return error_mark_node;
2604
2605      if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2606	{
2607	  if (!explicit_instantiation)
2608	    /* A specialization in class scope.  This is invalid,
2609	       but the error will already have been flagged by
2610	       check_specialization_scope.  */
2611	    return error_mark_node;
2612	  else
2613	    {
2614	      /* It's not valid to write an explicit instantiation in
2615		 class scope, e.g.:
2616
2617		   class C { template void f(); }
2618
2619		   This case is caught by the parser.  However, on
2620		   something like:
2621
2622		   template class C { void f(); };
2623
2624		   (which is invalid) we can get here.  The error will be
2625		   issued later.  */
2626	      ;
2627	    }
2628
2629	  return decl;
2630	}
2631      else if (ctype != NULL_TREE
2632	       && (identifier_p (TREE_OPERAND (declarator, 0))))
2633	{
2634	  // We'll match variable templates in start_decl.
2635	  if (VAR_P (decl))
2636	    return decl;
2637
2638	  /* Find the list of functions in ctype that have the same
2639	     name as the declared function.  */
2640	  tree name = TREE_OPERAND (declarator, 0);
2641	  tree fns = NULL_TREE;
2642	  int idx;
2643
2644	  if (constructor_name_p (name, ctype))
2645	    {
2646	      int is_constructor = DECL_CONSTRUCTOR_P (decl);
2647
2648	      if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2649		  : !CLASSTYPE_DESTRUCTORS (ctype))
2650		{
2651		  /* From [temp.expl.spec]:
2652
2653		     If such an explicit specialization for the member
2654		     of a class template names an implicitly-declared
2655		     special member function (clause _special_), the
2656		     program is ill-formed.
2657
2658		     Similar language is found in [temp.explicit].  */
2659		  error ("specialization of implicitly-declared special member function");
2660		  return error_mark_node;
2661		}
2662
2663	      name = is_constructor ? ctor_identifier : dtor_identifier;
2664	    }
2665
2666	  if (!DECL_CONV_FN_P (decl))
2667	    {
2668	      idx = lookup_fnfields_1 (ctype, name);
2669	      if (idx >= 0)
2670		fns = (*CLASSTYPE_METHOD_VEC (ctype))[idx];
2671	    }
2672	  else
2673	    {
2674	      vec<tree, va_gc> *methods;
2675	      tree ovl;
2676
2677	      /* For a type-conversion operator, we cannot do a
2678		 name-based lookup.  We might be looking for `operator
2679		 int' which will be a specialization of `operator T'.
2680		 So, we find *all* the conversion operators, and then
2681		 select from them.  */
2682	      fns = NULL_TREE;
2683
2684	      methods = CLASSTYPE_METHOD_VEC (ctype);
2685	      if (methods)
2686		for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2687		     methods->iterate (idx, &ovl);
2688		     ++idx)
2689		  {
2690		    if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2691		      /* There are no more conversion functions.  */
2692		      break;
2693
2694		    /* Glue all these conversion functions together
2695		       with those we already have.  */
2696		    for (; ovl; ovl = OVL_NEXT (ovl))
2697		      fns = ovl_cons (OVL_CURRENT (ovl), fns);
2698		  }
2699	    }
2700
2701	  if (fns == NULL_TREE)
2702	    {
2703	      error ("no member function %qD declared in %qT", name, ctype);
2704	      return error_mark_node;
2705	    }
2706	  else
2707	    TREE_OPERAND (declarator, 0) = fns;
2708	}
2709
2710      /* Figure out what exactly is being specialized at this point.
2711	 Note that for an explicit instantiation, even one for a
2712	 member function, we cannot tell apriori whether the
2713	 instantiation is for a member template, or just a member
2714	 function of a template class.  Even if a member template is
2715	 being instantiated, the member template arguments may be
2716	 elided if they can be deduced from the rest of the
2717	 declaration.  */
2718      tmpl = determine_specialization (declarator, decl,
2719				       &targs,
2720				       member_specialization,
2721				       template_count,
2722				       tsk);
2723
2724      if (!tmpl || tmpl == error_mark_node)
2725	/* We couldn't figure out what this declaration was
2726	   specializing.  */
2727	return error_mark_node;
2728      else
2729	{
2730	  tree gen_tmpl = most_general_template (tmpl);
2731
2732	  if (explicit_instantiation)
2733	    {
2734	      /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2735		 is done by do_decl_instantiation later.  */
2736
2737	      int arg_depth = TMPL_ARGS_DEPTH (targs);
2738	      int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2739
2740	      if (arg_depth > parm_depth)
2741		{
2742		  /* If TMPL is not the most general template (for
2743		     example, if TMPL is a friend template that is
2744		     injected into namespace scope), then there will
2745		     be too many levels of TARGS.  Remove some of them
2746		     here.  */
2747		  int i;
2748		  tree new_targs;
2749
2750		  new_targs = make_tree_vec (parm_depth);
2751		  for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2752		    TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2753		      = TREE_VEC_ELT (targs, i);
2754		  targs = new_targs;
2755		}
2756
2757	      return instantiate_template (tmpl, targs, tf_error);
2758	    }
2759
2760	  /* If we thought that the DECL was a member function, but it
2761	     turns out to be specializing a static member function,
2762	     make DECL a static member function as well.  */
2763	  if (DECL_FUNCTION_TEMPLATE_P (tmpl)
2764	      && DECL_STATIC_FUNCTION_P (tmpl)
2765	      && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2766	    revert_static_member_fn (decl);
2767
2768	  /* If this is a specialization of a member template of a
2769	     template class, we want to return the TEMPLATE_DECL, not
2770	     the specialization of it.  */
2771	  if (tsk == tsk_template && !was_template_id)
2772	    {
2773	      tree result = DECL_TEMPLATE_RESULT (tmpl);
2774	      SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2775	      DECL_INITIAL (result) = NULL_TREE;
2776	      if (have_def)
2777		{
2778		  tree parm;
2779		  DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2780		  DECL_SOURCE_LOCATION (result)
2781		    = DECL_SOURCE_LOCATION (decl);
2782		  /* We want to use the argument list specified in the
2783		     definition, not in the original declaration.  */
2784		  DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2785		  for (parm = DECL_ARGUMENTS (result); parm;
2786		       parm = DECL_CHAIN (parm))
2787		    DECL_CONTEXT (parm) = result;
2788		}
2789	      return register_specialization (tmpl, gen_tmpl, targs,
2790					      is_friend, 0);
2791	    }
2792
2793	  /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2794	  DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2795
2796	  if (was_template_id)
2797	    TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl)) = true;
2798
2799	  /* Inherit default function arguments from the template
2800	     DECL is specializing.  */
2801	  if (DECL_FUNCTION_TEMPLATE_P (tmpl))
2802	    copy_default_args_to_explicit_spec (decl);
2803
2804	  /* This specialization has the same protection as the
2805	     template it specializes.  */
2806	  TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2807	  TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2808
2809          /* 7.1.1-1 [dcl.stc]
2810
2811             A storage-class-specifier shall not be specified in an
2812             explicit specialization...
2813
2814             The parser rejects these, so unless action is taken here,
2815             explicit function specializations will always appear with
2816             global linkage.
2817
2818             The action recommended by the C++ CWG in response to C++
2819             defect report 605 is to make the storage class and linkage
2820             of the explicit specialization match the templated function:
2821
2822             http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2823           */
2824          if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2825            {
2826              tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2827              gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2828
2829              /* This specialization has the same linkage and visibility as
2830                 the function template it specializes.  */
2831              TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2832	      if (! TREE_PUBLIC (decl))
2833		{
2834		  DECL_INTERFACE_KNOWN (decl) = 1;
2835		  DECL_NOT_REALLY_EXTERN (decl) = 1;
2836		}
2837              DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2838              if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2839                {
2840                  DECL_VISIBILITY_SPECIFIED (decl) = 1;
2841                  DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2842                }
2843            }
2844
2845	  /* If DECL is a friend declaration, declared using an
2846	     unqualified name, the namespace associated with DECL may
2847	     have been set incorrectly.  For example, in:
2848
2849	       template <typename T> void f(T);
2850	       namespace N {
2851		 struct S { friend void f<int>(int); }
2852	       }
2853
2854	     we will have set the DECL_CONTEXT for the friend
2855	     declaration to N, rather than to the global namespace.  */
2856	  if (DECL_NAMESPACE_SCOPE_P (decl))
2857	    DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2858
2859	  if (is_friend && !have_def)
2860	    /* This is not really a declaration of a specialization.
2861	       It's just the name of an instantiation.  But, it's not
2862	       a request for an instantiation, either.  */
2863	    SET_DECL_IMPLICIT_INSTANTIATION (decl);
2864	  else if (TREE_CODE (decl) == FUNCTION_DECL)
2865	    /* A specialization is not necessarily COMDAT.  */
2866	    DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
2867				  && DECL_DECLARED_INLINE_P (decl));
2868	  else if (TREE_CODE (decl) == VAR_DECL)
2869	    DECL_COMDAT (decl) = false;
2870
2871	  /* Register this specialization so that we can find it
2872	     again.  */
2873	  decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2874
2875	  /* A 'structor should already have clones.  */
2876	  gcc_assert (decl == error_mark_node
2877		      || variable_template_p (tmpl)
2878		      || !(DECL_CONSTRUCTOR_P (decl)
2879			   || DECL_DESTRUCTOR_P (decl))
2880		      || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
2881	}
2882    }
2883
2884  return decl;
2885}
2886
2887/* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2888   parameters.  These are represented in the same format used for
2889   DECL_TEMPLATE_PARMS.  */
2890
2891int
2892comp_template_parms (const_tree parms1, const_tree parms2)
2893{
2894  const_tree p1;
2895  const_tree p2;
2896
2897  if (parms1 == parms2)
2898    return 1;
2899
2900  for (p1 = parms1, p2 = parms2;
2901       p1 != NULL_TREE && p2 != NULL_TREE;
2902       p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2903    {
2904      tree t1 = TREE_VALUE (p1);
2905      tree t2 = TREE_VALUE (p2);
2906      int i;
2907
2908      gcc_assert (TREE_CODE (t1) == TREE_VEC);
2909      gcc_assert (TREE_CODE (t2) == TREE_VEC);
2910
2911      if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2912	return 0;
2913
2914      for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2915	{
2916          tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2917          tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2918
2919          /* If either of the template parameters are invalid, assume
2920             they match for the sake of error recovery. */
2921          if (error_operand_p (parm1) || error_operand_p (parm2))
2922            return 1;
2923
2924	  if (TREE_CODE (parm1) != TREE_CODE (parm2))
2925	    return 0;
2926
2927	  if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2928              && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2929                  == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2930	    continue;
2931	  else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2932	    return 0;
2933	}
2934    }
2935
2936  if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2937    /* One set of parameters has more parameters lists than the
2938       other.  */
2939    return 0;
2940
2941  return 1;
2942}
2943
2944/* Determine whether PARM is a parameter pack.  */
2945
2946bool
2947template_parameter_pack_p (const_tree parm)
2948{
2949  /* Determine if we have a non-type template parameter pack.  */
2950  if (TREE_CODE (parm) == PARM_DECL)
2951    return (DECL_TEMPLATE_PARM_P (parm)
2952            && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2953  if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2954    return TEMPLATE_PARM_PARAMETER_PACK (parm);
2955
2956  /* If this is a list of template parameters, we could get a
2957     TYPE_DECL or a TEMPLATE_DECL.  */
2958  if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2959    parm = TREE_TYPE (parm);
2960
2961  /* Otherwise it must be a type template parameter.  */
2962  return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2963	   || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2964	  && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2965}
2966
2967/* Determine if T is a function parameter pack.  */
2968
2969bool
2970function_parameter_pack_p (const_tree t)
2971{
2972  if (t && TREE_CODE (t) == PARM_DECL)
2973    return DECL_PACK_P (t);
2974  return false;
2975}
2976
2977/* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2978   PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2979
2980tree
2981get_function_template_decl (const_tree primary_func_tmpl_inst)
2982{
2983  if (! primary_func_tmpl_inst
2984      || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2985      || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2986    return NULL;
2987
2988  return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2989}
2990
2991/* Return true iff the function parameter PARAM_DECL was expanded
2992   from the function parameter pack PACK.  */
2993
2994bool
2995function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2996{
2997  if (DECL_ARTIFICIAL (param_decl)
2998      || !function_parameter_pack_p (pack))
2999    return false;
3000
3001  /* The parameter pack and its pack arguments have the same
3002     DECL_PARM_INDEX.  */
3003  return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
3004}
3005
3006/* Determine whether ARGS describes a variadic template args list,
3007   i.e., one that is terminated by a template argument pack.  */
3008
3009static bool
3010template_args_variadic_p (tree args)
3011{
3012  int nargs;
3013  tree last_parm;
3014
3015  if (args == NULL_TREE)
3016    return false;
3017
3018  args = INNERMOST_TEMPLATE_ARGS (args);
3019  nargs = TREE_VEC_LENGTH (args);
3020
3021  if (nargs == 0)
3022    return false;
3023
3024  last_parm = TREE_VEC_ELT (args, nargs - 1);
3025
3026  return ARGUMENT_PACK_P (last_parm);
3027}
3028
3029/* Generate a new name for the parameter pack name NAME (an
3030   IDENTIFIER_NODE) that incorporates its */
3031
3032static tree
3033make_ith_pack_parameter_name (tree name, int i)
3034{
3035  /* Munge the name to include the parameter index.  */
3036#define NUMBUF_LEN 128
3037  char numbuf[NUMBUF_LEN];
3038  char* newname;
3039  int newname_len;
3040
3041  if (name == NULL_TREE)
3042    return name;
3043  snprintf (numbuf, NUMBUF_LEN, "%i", i);
3044  newname_len = IDENTIFIER_LENGTH (name)
3045	        + strlen (numbuf) + 2;
3046  newname = (char*)alloca (newname_len);
3047  snprintf (newname, newname_len,
3048	    "%s#%i", IDENTIFIER_POINTER (name), i);
3049  return get_identifier (newname);
3050}
3051
3052/* Return true if T is a primary function, class or alias template
3053   instantiation.  */
3054
3055bool
3056primary_template_instantiation_p (const_tree t)
3057{
3058  if (!t)
3059    return false;
3060
3061  if (TREE_CODE (t) == FUNCTION_DECL)
3062    return DECL_LANG_SPECIFIC (t)
3063	   && DECL_TEMPLATE_INSTANTIATION (t)
3064	   && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
3065  else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3066    return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
3067	   && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
3068  else if (alias_template_specialization_p (t))
3069    return true;
3070  return false;
3071}
3072
3073/* Return true if PARM is a template template parameter.  */
3074
3075bool
3076template_template_parameter_p (const_tree parm)
3077{
3078  return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
3079}
3080
3081/* Return true iff PARM is a DECL representing a type template
3082   parameter.  */
3083
3084bool
3085template_type_parameter_p (const_tree parm)
3086{
3087  return (parm
3088	  && (TREE_CODE (parm) == TYPE_DECL
3089	      || TREE_CODE (parm) == TEMPLATE_DECL)
3090	  && DECL_TEMPLATE_PARM_P (parm));
3091}
3092
3093/* Return the template parameters of T if T is a
3094   primary template instantiation, NULL otherwise.  */
3095
3096tree
3097get_primary_template_innermost_parameters (const_tree t)
3098{
3099  tree parms = NULL, template_info = NULL;
3100
3101  if ((template_info = get_template_info (t))
3102      && primary_template_instantiation_p (t))
3103    parms = INNERMOST_TEMPLATE_PARMS
3104	(DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3105
3106  return parms;
3107}
3108
3109/* Return the template parameters of the LEVELth level from the full list
3110   of template parameters PARMS.  */
3111
3112tree
3113get_template_parms_at_level (tree parms, int level)
3114{
3115  tree p;
3116  if (!parms
3117      || TREE_CODE (parms) != TREE_LIST
3118      || level > TMPL_PARMS_DEPTH (parms))
3119    return NULL_TREE;
3120
3121  for (p = parms; p; p = TREE_CHAIN (p))
3122    if (TMPL_PARMS_DEPTH (p) == level)
3123      return p;
3124
3125  return NULL_TREE;
3126}
3127
3128/* Returns the template arguments of T if T is a template instantiation,
3129   NULL otherwise.  */
3130
3131tree
3132get_template_innermost_arguments (const_tree t)
3133{
3134  tree args = NULL, template_info = NULL;
3135
3136  if ((template_info = get_template_info (t))
3137      && TI_ARGS (template_info))
3138    args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3139
3140  return args;
3141}
3142
3143/* Return the argument pack elements of T if T is a template argument pack,
3144   NULL otherwise.  */
3145
3146tree
3147get_template_argument_pack_elems (const_tree t)
3148{
3149  if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3150      && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3151    return NULL;
3152
3153  return ARGUMENT_PACK_ARGS (t);
3154}
3155
3156/* Structure used to track the progress of find_parameter_packs_r.  */
3157struct find_parameter_pack_data
3158{
3159  /* TREE_LIST that will contain all of the parameter packs found by
3160     the traversal.  */
3161  tree* parameter_packs;
3162
3163  /* Set of AST nodes that have been visited by the traversal.  */
3164  hash_set<tree> *visited;
3165};
3166
3167/* Identifies all of the argument packs that occur in a template
3168   argument and appends them to the TREE_LIST inside DATA, which is a
3169   find_parameter_pack_data structure. This is a subroutine of
3170   make_pack_expansion and uses_parameter_packs.  */
3171static tree
3172find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3173{
3174  tree t = *tp;
3175  struct find_parameter_pack_data* ppd =
3176    (struct find_parameter_pack_data*)data;
3177  bool parameter_pack_p = false;
3178
3179  /* Handle type aliases/typedefs.  */
3180  if (TYPE_ALIAS_P (t))
3181    {
3182      if (TYPE_TEMPLATE_INFO (t))
3183	cp_walk_tree (&TYPE_TI_ARGS (t),
3184		      &find_parameter_packs_r,
3185		      ppd, ppd->visited);
3186      *walk_subtrees = 0;
3187      return NULL_TREE;
3188    }
3189
3190  /* Identify whether this is a parameter pack or not.  */
3191  switch (TREE_CODE (t))
3192    {
3193    case TEMPLATE_PARM_INDEX:
3194      if (TEMPLATE_PARM_PARAMETER_PACK (t))
3195        parameter_pack_p = true;
3196      break;
3197
3198    case TEMPLATE_TYPE_PARM:
3199      t = TYPE_MAIN_VARIANT (t);
3200    case TEMPLATE_TEMPLATE_PARM:
3201      if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3202        parameter_pack_p = true;
3203      break;
3204
3205    case FIELD_DECL:
3206    case PARM_DECL:
3207      if (DECL_PACK_P (t))
3208        {
3209          /* We don't want to walk into the type of a PARM_DECL,
3210             because we don't want to see the type parameter pack.  */
3211          *walk_subtrees = 0;
3212	  parameter_pack_p = true;
3213        }
3214      break;
3215
3216      /* Look through a lambda capture proxy to the field pack.  */
3217    case VAR_DECL:
3218      if (DECL_HAS_VALUE_EXPR_P (t))
3219	{
3220	  tree v = DECL_VALUE_EXPR (t);
3221	  cp_walk_tree (&v,
3222			&find_parameter_packs_r,
3223			ppd, ppd->visited);
3224	  *walk_subtrees = 0;
3225	}
3226      else if (variable_template_specialization_p (t))
3227	{
3228	  cp_walk_tree (&DECL_TI_ARGS (t),
3229			find_parameter_packs_r,
3230			ppd, ppd->visited);
3231	  *walk_subtrees = 0;
3232	}
3233      break;
3234
3235    case BASES:
3236      parameter_pack_p = true;
3237      break;
3238    default:
3239      /* Not a parameter pack.  */
3240      break;
3241    }
3242
3243  if (parameter_pack_p)
3244    {
3245      /* Add this parameter pack to the list.  */
3246      *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3247    }
3248
3249  if (TYPE_P (t))
3250    cp_walk_tree (&TYPE_CONTEXT (t),
3251		  &find_parameter_packs_r, ppd, ppd->visited);
3252
3253  /* This switch statement will return immediately if we don't find a
3254     parameter pack.  */
3255  switch (TREE_CODE (t))
3256    {
3257    case TEMPLATE_PARM_INDEX:
3258      return NULL_TREE;
3259
3260    case BOUND_TEMPLATE_TEMPLATE_PARM:
3261      /* Check the template itself.  */
3262      cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)),
3263		    &find_parameter_packs_r, ppd, ppd->visited);
3264      /* Check the template arguments.  */
3265      cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd,
3266		    ppd->visited);
3267      *walk_subtrees = 0;
3268      return NULL_TREE;
3269
3270    case TEMPLATE_TYPE_PARM:
3271    case TEMPLATE_TEMPLATE_PARM:
3272      return NULL_TREE;
3273
3274    case PARM_DECL:
3275      return NULL_TREE;
3276
3277    case RECORD_TYPE:
3278      if (TYPE_PTRMEMFUNC_P (t))
3279	return NULL_TREE;
3280      /* Fall through.  */
3281
3282    case UNION_TYPE:
3283    case ENUMERAL_TYPE:
3284      if (TYPE_TEMPLATE_INFO (t))
3285	cp_walk_tree (&TYPE_TI_ARGS (t),
3286		      &find_parameter_packs_r, ppd, ppd->visited);
3287
3288      *walk_subtrees = 0;
3289      return NULL_TREE;
3290
3291    case CONSTRUCTOR:
3292    case TEMPLATE_DECL:
3293      cp_walk_tree (&TREE_TYPE (t),
3294		    &find_parameter_packs_r, ppd, ppd->visited);
3295      return NULL_TREE;
3296
3297    case TYPENAME_TYPE:
3298      cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3299                   ppd, ppd->visited);
3300      *walk_subtrees = 0;
3301      return NULL_TREE;
3302
3303    case TYPE_PACK_EXPANSION:
3304    case EXPR_PACK_EXPANSION:
3305      *walk_subtrees = 0;
3306      return NULL_TREE;
3307
3308    case INTEGER_TYPE:
3309      cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r,
3310		    ppd, ppd->visited);
3311      *walk_subtrees = 0;
3312      return NULL_TREE;
3313
3314    case IDENTIFIER_NODE:
3315      cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd,
3316		    ppd->visited);
3317      *walk_subtrees = 0;
3318      return NULL_TREE;
3319
3320    default:
3321      return NULL_TREE;
3322    }
3323
3324  return NULL_TREE;
3325}
3326
3327/* Determines if the expression or type T uses any parameter packs.  */
3328bool
3329uses_parameter_packs (tree t)
3330{
3331  tree parameter_packs = NULL_TREE;
3332  struct find_parameter_pack_data ppd;
3333  ppd.parameter_packs = &parameter_packs;
3334  ppd.visited = new hash_set<tree>;
3335  cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3336  delete ppd.visited;
3337  return parameter_packs != NULL_TREE;
3338}
3339
3340/* Turn ARG, which may be an expression, type, or a TREE_LIST
3341   representation a base-class initializer into a parameter pack
3342   expansion. If all goes well, the resulting node will be an
3343   EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3344   respectively.  */
3345tree
3346make_pack_expansion (tree arg)
3347{
3348  tree result;
3349  tree parameter_packs = NULL_TREE;
3350  bool for_types = false;
3351  struct find_parameter_pack_data ppd;
3352
3353  if (!arg || arg == error_mark_node)
3354    return arg;
3355
3356  if (TREE_CODE (arg) == TREE_LIST && TREE_PURPOSE (arg))
3357    {
3358      /* A TREE_LIST with a non-null TREE_PURPOSE is for a base
3359         class initializer.  In this case, the TREE_PURPOSE will be a
3360         _TYPE node (representing the base class expansion we're
3361         initializing) and the TREE_VALUE will be a TREE_LIST
3362         containing the initialization arguments.
3363
3364         The resulting expansion looks somewhat different from most
3365         expansions. Rather than returning just one _EXPANSION, we
3366         return a TREE_LIST whose TREE_PURPOSE is a
3367         TYPE_PACK_EXPANSION containing the bases that will be
3368         initialized.  The TREE_VALUE will be identical to the
3369         original TREE_VALUE, which is a list of arguments that will
3370         be passed to each base.  We do not introduce any new pack
3371         expansion nodes into the TREE_VALUE (although it is possible
3372         that some already exist), because the TREE_PURPOSE and
3373         TREE_VALUE all need to be expanded together with the same
3374         _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3375         resulting TREE_PURPOSE will mention the parameter packs in
3376         both the bases and the arguments to the bases.  */
3377      tree purpose;
3378      tree value;
3379      tree parameter_packs = NULL_TREE;
3380
3381      /* Determine which parameter packs will be used by the base
3382         class expansion.  */
3383      ppd.visited = new hash_set<tree>;
3384      ppd.parameter_packs = &parameter_packs;
3385      cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r,
3386                    &ppd, ppd.visited);
3387
3388      if (parameter_packs == NULL_TREE)
3389        {
3390          error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3391          delete ppd.visited;
3392          return error_mark_node;
3393        }
3394
3395      if (TREE_VALUE (arg) != void_type_node)
3396        {
3397          /* Collect the sets of parameter packs used in each of the
3398             initialization arguments.  */
3399          for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3400            {
3401              /* Determine which parameter packs will be expanded in this
3402                 argument.  */
3403              cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r,
3404                            &ppd, ppd.visited);
3405            }
3406        }
3407
3408      delete ppd.visited;
3409
3410      /* Create the pack expansion type for the base type.  */
3411      purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3412      SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3413      PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3414
3415      /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3416	 they will rarely be compared to anything.  */
3417      SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3418
3419      return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3420    }
3421
3422  if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3423    for_types = true;
3424
3425  /* Build the PACK_EXPANSION_* node.  */
3426  result = for_types
3427     ? cxx_make_type (TYPE_PACK_EXPANSION)
3428     : make_node (EXPR_PACK_EXPANSION);
3429  SET_PACK_EXPANSION_PATTERN (result, arg);
3430  if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3431    {
3432      /* Propagate type and const-expression information.  */
3433      TREE_TYPE (result) = TREE_TYPE (arg);
3434      TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3435    }
3436  else
3437    /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3438       they will rarely be compared to anything.  */
3439    SET_TYPE_STRUCTURAL_EQUALITY (result);
3440
3441  /* Determine which parameter packs will be expanded.  */
3442  ppd.parameter_packs = &parameter_packs;
3443  ppd.visited = new hash_set<tree>;
3444  cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3445  delete ppd.visited;
3446
3447  /* Make sure we found some parameter packs.  */
3448  if (parameter_packs == NULL_TREE)
3449    {
3450      if (TYPE_P (arg))
3451        error ("expansion pattern %<%T%> contains no argument packs", arg);
3452      else
3453        error ("expansion pattern %<%E%> contains no argument packs", arg);
3454      return error_mark_node;
3455    }
3456  PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3457
3458  PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3459
3460  return result;
3461}
3462
3463/* Checks T for any "bare" parameter packs, which have not yet been
3464   expanded, and issues an error if any are found. This operation can
3465   only be done on full expressions or types (e.g., an expression
3466   statement, "if" condition, etc.), because we could have expressions like:
3467
3468     foo(f(g(h(args)))...)
3469
3470   where "args" is a parameter pack. check_for_bare_parameter_packs
3471   should not be called for the subexpressions args, h(args),
3472   g(h(args)), or f(g(h(args))), because we would produce erroneous
3473   error messages.
3474
3475   Returns TRUE and emits an error if there were bare parameter packs,
3476   returns FALSE otherwise.  */
3477bool
3478check_for_bare_parameter_packs (tree t)
3479{
3480  tree parameter_packs = NULL_TREE;
3481  struct find_parameter_pack_data ppd;
3482
3483  if (!processing_template_decl || !t || t == error_mark_node)
3484    return false;
3485
3486  if (TREE_CODE (t) == TYPE_DECL)
3487    t = TREE_TYPE (t);
3488
3489  ppd.parameter_packs = &parameter_packs;
3490  ppd.visited = new hash_set<tree>;
3491  cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3492  delete ppd.visited;
3493
3494  if (parameter_packs)
3495    {
3496      error ("parameter packs not expanded with %<...%>:");
3497      while (parameter_packs)
3498        {
3499          tree pack = TREE_VALUE (parameter_packs);
3500          tree name = NULL_TREE;
3501
3502          if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3503              || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3504            name = TYPE_NAME (pack);
3505          else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3506            name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3507          else
3508            name = DECL_NAME (pack);
3509
3510	  if (name)
3511	    inform (input_location, "        %qD", name);
3512	  else
3513	    inform (input_location, "        <anonymous>");
3514
3515          parameter_packs = TREE_CHAIN (parameter_packs);
3516        }
3517
3518      return true;
3519    }
3520
3521  return false;
3522}
3523
3524/* Expand any parameter packs that occur in the template arguments in
3525   ARGS.  */
3526tree
3527expand_template_argument_pack (tree args)
3528{
3529  tree result_args = NULL_TREE;
3530  int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3531  int num_result_args = -1;
3532  int non_default_args_count = -1;
3533
3534  /* First, determine if we need to expand anything, and the number of
3535     slots we'll need.  */
3536  for (in_arg = 0; in_arg < nargs; ++in_arg)
3537    {
3538      tree arg = TREE_VEC_ELT (args, in_arg);
3539      if (arg == NULL_TREE)
3540	return args;
3541      if (ARGUMENT_PACK_P (arg))
3542        {
3543          int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3544          if (num_result_args < 0)
3545            num_result_args = in_arg + num_packed;
3546          else
3547            num_result_args += num_packed;
3548        }
3549      else
3550        {
3551          if (num_result_args >= 0)
3552            num_result_args++;
3553        }
3554    }
3555
3556  /* If no expansion is necessary, we're done.  */
3557  if (num_result_args < 0)
3558    return args;
3559
3560  /* Expand arguments.  */
3561  result_args = make_tree_vec (num_result_args);
3562  if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3563    non_default_args_count =
3564      GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3565  for (in_arg = 0; in_arg < nargs; ++in_arg)
3566    {
3567      tree arg = TREE_VEC_ELT (args, in_arg);
3568      if (ARGUMENT_PACK_P (arg))
3569        {
3570          tree packed = ARGUMENT_PACK_ARGS (arg);
3571          int i, num_packed = TREE_VEC_LENGTH (packed);
3572          for (i = 0; i < num_packed; ++i, ++out_arg)
3573            TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3574	  if (non_default_args_count > 0)
3575	    non_default_args_count += num_packed - 1;
3576        }
3577      else
3578        {
3579          TREE_VEC_ELT (result_args, out_arg) = arg;
3580          ++out_arg;
3581        }
3582    }
3583  if (non_default_args_count >= 0)
3584    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3585  return result_args;
3586}
3587
3588/* Checks if DECL shadows a template parameter.
3589
3590   [temp.local]: A template-parameter shall not be redeclared within its
3591   scope (including nested scopes).
3592
3593   Emits an error and returns TRUE if the DECL shadows a parameter,
3594   returns FALSE otherwise.  */
3595
3596bool
3597check_template_shadow (tree decl)
3598{
3599  tree olddecl;
3600
3601  /* If we're not in a template, we can't possibly shadow a template
3602     parameter.  */
3603  if (!current_template_parms)
3604    return true;
3605
3606  /* Figure out what we're shadowing.  */
3607  if (TREE_CODE (decl) == OVERLOAD)
3608    decl = OVL_CURRENT (decl);
3609  olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3610
3611  /* If there's no previous binding for this name, we're not shadowing
3612     anything, let alone a template parameter.  */
3613  if (!olddecl)
3614    return true;
3615
3616  /* If we're not shadowing a template parameter, we're done.  Note
3617     that OLDDECL might be an OVERLOAD (or perhaps even an
3618     ERROR_MARK), so we can't just blithely assume it to be a _DECL
3619     node.  */
3620  if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3621    return true;
3622
3623  /* We check for decl != olddecl to avoid bogus errors for using a
3624     name inside a class.  We check TPFI to avoid duplicate errors for
3625     inline member templates.  */
3626  if (decl == olddecl
3627      || (DECL_TEMPLATE_PARM_P (decl)
3628	  && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
3629    return true;
3630
3631  /* Don't complain about the injected class name, as we've already
3632     complained about the class itself.  */
3633  if (DECL_SELF_REFERENCE_P (decl))
3634    return false;
3635
3636  error ("declaration of %q+#D", decl);
3637  error (" shadows template parm %q+#D", olddecl);
3638  return false;
3639}
3640
3641/* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3642   ORIG_LEVEL, DECL, and TYPE.  */
3643
3644static tree
3645build_template_parm_index (int index,
3646			   int level,
3647			   int orig_level,
3648			   tree decl,
3649			   tree type)
3650{
3651  tree t = make_node (TEMPLATE_PARM_INDEX);
3652  TEMPLATE_PARM_IDX (t) = index;
3653  TEMPLATE_PARM_LEVEL (t) = level;
3654  TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3655  TEMPLATE_PARM_DECL (t) = decl;
3656  TREE_TYPE (t) = type;
3657  TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3658  TREE_READONLY (t) = TREE_READONLY (decl);
3659
3660  return t;
3661}
3662
3663/* Find the canonical type parameter for the given template type
3664   parameter.  Returns the canonical type parameter, which may be TYPE
3665   if no such parameter existed.  */
3666
3667static tree
3668canonical_type_parameter (tree type)
3669{
3670  tree list;
3671  int idx = TEMPLATE_TYPE_IDX (type);
3672  if (!canonical_template_parms)
3673    vec_alloc (canonical_template_parms, idx+1);
3674
3675  while (canonical_template_parms->length () <= (unsigned)idx)
3676    vec_safe_push (canonical_template_parms, NULL_TREE);
3677
3678  list = (*canonical_template_parms)[idx];
3679  while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3680    list = TREE_CHAIN (list);
3681
3682  if (list)
3683    return TREE_VALUE (list);
3684  else
3685    {
3686      (*canonical_template_parms)[idx]
3687		= tree_cons (NULL_TREE, type,
3688			     (*canonical_template_parms)[idx]);
3689      return type;
3690    }
3691}
3692
3693/* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3694   TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3695   TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3696   new one is created.  */
3697
3698static tree
3699reduce_template_parm_level (tree index, tree type, int levels, tree args,
3700			    tsubst_flags_t complain)
3701{
3702  if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3703      || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3704	  != TEMPLATE_PARM_LEVEL (index) - levels)
3705      || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3706    {
3707      tree orig_decl = TEMPLATE_PARM_DECL (index);
3708      tree decl, t;
3709
3710      decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3711			 TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3712      TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3713      TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3714      DECL_ARTIFICIAL (decl) = 1;
3715      SET_DECL_TEMPLATE_PARM_P (decl);
3716
3717      t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3718				     TEMPLATE_PARM_LEVEL (index) - levels,
3719				     TEMPLATE_PARM_ORIG_LEVEL (index),
3720				     decl, type);
3721      TEMPLATE_PARM_DESCENDANTS (index) = t;
3722      TEMPLATE_PARM_PARAMETER_PACK (t)
3723	= TEMPLATE_PARM_PARAMETER_PACK (index);
3724
3725	/* Template template parameters need this.  */
3726      if (TREE_CODE (decl) == TEMPLATE_DECL)
3727	DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3728	  (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3729	   args, complain);
3730    }
3731
3732  return TEMPLATE_PARM_DESCENDANTS (index);
3733}
3734
3735/* Process information from new template parameter PARM and append it
3736   to the LIST being built.  This new parameter is a non-type
3737   parameter iff IS_NON_TYPE is true. This new parameter is a
3738   parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3739   is in PARM_LOC.  */
3740
3741tree
3742process_template_parm (tree list, location_t parm_loc, tree parm,
3743		       bool is_non_type, bool is_parameter_pack)
3744{
3745  tree decl = 0;
3746  tree defval;
3747  int idx = 0;
3748
3749  gcc_assert (TREE_CODE (parm) == TREE_LIST);
3750  defval = TREE_PURPOSE (parm);
3751
3752  if (list)
3753    {
3754      tree p = tree_last (list);
3755
3756      if (p && TREE_VALUE (p) != error_mark_node)
3757        {
3758          p = TREE_VALUE (p);
3759          if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3760            idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3761          else
3762            idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3763        }
3764
3765      ++idx;
3766    }
3767
3768  if (is_non_type)
3769    {
3770      parm = TREE_VALUE (parm);
3771
3772      SET_DECL_TEMPLATE_PARM_P (parm);
3773
3774      if (TREE_TYPE (parm) != error_mark_node)
3775	{
3776	  /* [temp.param]
3777
3778	     The top-level cv-qualifiers on the template-parameter are
3779	     ignored when determining its type.  */
3780	  TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3781	  if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3782	    TREE_TYPE (parm) = error_mark_node;
3783	  else if (uses_parameter_packs (TREE_TYPE (parm))
3784		   && !is_parameter_pack
3785		   /* If we're in a nested template parameter list, the template
3786		      template parameter could be a parameter pack.  */
3787		   && processing_template_parmlist == 1)
3788	    {
3789	      /* This template parameter is not a parameter pack, but it
3790		 should be. Complain about "bare" parameter packs.  */
3791	      check_for_bare_parameter_packs (TREE_TYPE (parm));
3792
3793	      /* Recover by calling this a parameter pack.  */
3794	      is_parameter_pack = true;
3795	    }
3796	}
3797
3798      /* A template parameter is not modifiable.  */
3799      TREE_CONSTANT (parm) = 1;
3800      TREE_READONLY (parm) = 1;
3801      decl = build_decl (parm_loc,
3802			 CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3803      TREE_CONSTANT (decl) = 1;
3804      TREE_READONLY (decl) = 1;
3805      DECL_INITIAL (parm) = DECL_INITIAL (decl)
3806	= build_template_parm_index (idx, processing_template_decl,
3807				     processing_template_decl,
3808				     decl, TREE_TYPE (parm));
3809
3810      TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
3811	= is_parameter_pack;
3812    }
3813  else
3814    {
3815      tree t;
3816      parm = TREE_VALUE (TREE_VALUE (parm));
3817
3818      if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3819	{
3820	  t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3821	  /* This is for distinguishing between real templates and template
3822	     template parameters */
3823	  TREE_TYPE (parm) = t;
3824	  TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3825	  decl = parm;
3826	}
3827      else
3828	{
3829	  t = cxx_make_type (TEMPLATE_TYPE_PARM);
3830	  /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3831	  decl = build_decl (parm_loc,
3832			     TYPE_DECL, parm, t);
3833	}
3834
3835      TYPE_NAME (t) = decl;
3836      TYPE_STUB_DECL (t) = decl;
3837      parm = decl;
3838      TEMPLATE_TYPE_PARM_INDEX (t)
3839	= build_template_parm_index (idx, processing_template_decl,
3840				     processing_template_decl,
3841				     decl, TREE_TYPE (parm));
3842      TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3843      TYPE_CANONICAL (t) = canonical_type_parameter (t);
3844    }
3845  DECL_ARTIFICIAL (decl) = 1;
3846  SET_DECL_TEMPLATE_PARM_P (decl);
3847  pushdecl (decl);
3848  parm = build_tree_list (defval, parm);
3849  return chainon (list, parm);
3850}
3851
3852/* The end of a template parameter list has been reached.  Process the
3853   tree list into a parameter vector, converting each parameter into a more
3854   useful form.	 Type parameters are saved as IDENTIFIER_NODEs, and others
3855   as PARM_DECLs.  */
3856
3857tree
3858end_template_parm_list (tree parms)
3859{
3860  int nparms;
3861  tree parm, next;
3862  tree saved_parmlist = make_tree_vec (list_length (parms));
3863
3864  current_template_parms
3865    = tree_cons (size_int (processing_template_decl),
3866		 saved_parmlist, current_template_parms);
3867
3868  for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3869    {
3870      next = TREE_CHAIN (parm);
3871      TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3872      TREE_CHAIN (parm) = NULL_TREE;
3873    }
3874
3875  --processing_template_parmlist;
3876
3877  return saved_parmlist;
3878}
3879
3880/* end_template_decl is called after a template declaration is seen.  */
3881
3882void
3883end_template_decl (void)
3884{
3885  reset_specialization ();
3886
3887  if (! processing_template_decl)
3888    return;
3889
3890  /* This matches the pushlevel in begin_template_parm_list.  */
3891  finish_scope ();
3892
3893  --processing_template_decl;
3894  current_template_parms = TREE_CHAIN (current_template_parms);
3895}
3896
3897/* Takes a TREE_LIST representing a template parameter and convert it
3898   into an argument suitable to be passed to the type substitution
3899   functions.  Note that If the TREE_LIST contains an error_mark
3900   node, the returned argument is error_mark_node.  */
3901
3902static tree
3903template_parm_to_arg (tree t)
3904{
3905
3906  if (t == NULL_TREE
3907      || TREE_CODE (t) != TREE_LIST)
3908    return t;
3909
3910  if (error_operand_p (TREE_VALUE (t)))
3911    return error_mark_node;
3912
3913  t = TREE_VALUE (t);
3914
3915  if (TREE_CODE (t) == TYPE_DECL
3916      || TREE_CODE (t) == TEMPLATE_DECL)
3917    {
3918      t = TREE_TYPE (t);
3919
3920      if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3921	{
3922	  /* Turn this argument into a TYPE_ARGUMENT_PACK
3923	     with a single element, which expands T.  */
3924	  tree vec = make_tree_vec (1);
3925#ifdef ENABLE_CHECKING
3926	  SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3927	    (vec, TREE_VEC_LENGTH (vec));
3928#endif
3929	  TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3930
3931	  t = cxx_make_type (TYPE_ARGUMENT_PACK);
3932	  SET_ARGUMENT_PACK_ARGS (t, vec);
3933	}
3934    }
3935  else
3936    {
3937      t = DECL_INITIAL (t);
3938
3939      if (TEMPLATE_PARM_PARAMETER_PACK (t))
3940	{
3941	  /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3942	     with a single element, which expands T.  */
3943	  tree vec = make_tree_vec (1);
3944	  tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3945#ifdef ENABLE_CHECKING
3946	  SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3947	    (vec, TREE_VEC_LENGTH (vec));
3948#endif
3949	  t = convert_from_reference (t);
3950	  TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3951
3952	  t  = make_node (NONTYPE_ARGUMENT_PACK);
3953	  SET_ARGUMENT_PACK_ARGS (t, vec);
3954	  TREE_TYPE (t) = type;
3955	}
3956      else
3957	t = convert_from_reference (t);
3958    }
3959  return t;
3960}
3961
3962/* Given a set of template parameters, return them as a set of template
3963   arguments.  The template parameters are represented as a TREE_VEC, in
3964   the form documented in cp-tree.h for template arguments.  */
3965
3966static tree
3967template_parms_to_args (tree parms)
3968{
3969  tree header;
3970  tree args = NULL_TREE;
3971  int length = TMPL_PARMS_DEPTH (parms);
3972  int l = length;
3973
3974  /* If there is only one level of template parameters, we do not
3975     create a TREE_VEC of TREE_VECs.  Instead, we return a single
3976     TREE_VEC containing the arguments.  */
3977  if (length > 1)
3978    args = make_tree_vec (length);
3979
3980  for (header = parms; header; header = TREE_CHAIN (header))
3981    {
3982      tree a = copy_node (TREE_VALUE (header));
3983      int i;
3984
3985      TREE_TYPE (a) = NULL_TREE;
3986      for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3987	TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
3988
3989#ifdef ENABLE_CHECKING
3990      SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
3991#endif
3992
3993      if (length > 1)
3994	TREE_VEC_ELT (args, --l) = a;
3995      else
3996	args = a;
3997    }
3998
3999    if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4000      /* This can happen for template parms of a template template
4001	 parameter, e.g:
4002
4003	 template<template<class T, class U> class TT> struct S;
4004
4005	 Consider the level of the parms of TT; T and U both have
4006	 level 2; TT has no template parm of level 1. So in this case
4007	 the first element of full_template_args is NULL_TREE. If we
4008	 leave it like this TMPL_ARGS_DEPTH on args returns 1 instead
4009	 of 2. This will make tsubst wrongly consider that T and U
4010	 have level 1. Instead, let's create a dummy vector as the
4011	 first element of full_template_args so that TMPL_ARGS_DEPTH
4012	 returns the correct depth for args.  */
4013      TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4014  return args;
4015}
4016
4017/* Within the declaration of a template, return the currently active
4018   template parameters as an argument TREE_VEC.  */
4019
4020static tree
4021current_template_args (void)
4022{
4023  return template_parms_to_args (current_template_parms);
4024}
4025
4026/* Update the declared TYPE by doing any lookups which were thought to be
4027   dependent, but are not now that we know the SCOPE of the declarator.  */
4028
4029tree
4030maybe_update_decl_type (tree orig_type, tree scope)
4031{
4032  tree type = orig_type;
4033
4034  if (type == NULL_TREE)
4035    return type;
4036
4037  if (TREE_CODE (orig_type) == TYPE_DECL)
4038    type = TREE_TYPE (type);
4039
4040  if (scope && TYPE_P (scope) && dependent_type_p (scope)
4041      && dependent_type_p (type)
4042      /* Don't bother building up the args in this case.  */
4043      && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4044    {
4045      /* tsubst in the args corresponding to the template parameters,
4046	 including auto if present.  Most things will be unchanged, but
4047	 make_typename_type and tsubst_qualified_id will resolve
4048	 TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4049      tree args = current_template_args ();
4050      tree auto_node = type_uses_auto (type);
4051      tree pushed;
4052      if (auto_node)
4053	{
4054	  tree auto_vec = make_tree_vec (1);
4055	  TREE_VEC_ELT (auto_vec, 0) = auto_node;
4056	  args = add_to_template_args (args, auto_vec);
4057	}
4058      pushed = push_scope (scope);
4059      type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4060      if (pushed)
4061	pop_scope (scope);
4062    }
4063
4064  if (type == error_mark_node)
4065    return orig_type;
4066
4067  if (TREE_CODE (orig_type) == TYPE_DECL)
4068    {
4069      if (same_type_p (type, TREE_TYPE (orig_type)))
4070	type = orig_type;
4071      else
4072	type = TYPE_NAME (type);
4073    }
4074  return type;
4075}
4076
4077/* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4078   template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4079   a member template.  Used by push_template_decl below.  */
4080
4081static tree
4082build_template_decl (tree decl, tree parms, bool member_template_p)
4083{
4084  tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4085  DECL_TEMPLATE_PARMS (tmpl) = parms;
4086  DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4087  DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4088  DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4089
4090  return tmpl;
4091}
4092
4093struct template_parm_data
4094{
4095  /* The level of the template parameters we are currently
4096     processing.  */
4097  int level;
4098
4099  /* The index of the specialization argument we are currently
4100     processing.  */
4101  int current_arg;
4102
4103  /* An array whose size is the number of template parameters.  The
4104     elements are nonzero if the parameter has been used in any one
4105     of the arguments processed so far.  */
4106  int* parms;
4107
4108  /* An array whose size is the number of template arguments.  The
4109     elements are nonzero if the argument makes use of template
4110     parameters of this level.  */
4111  int* arg_uses_template_parms;
4112};
4113
4114/* Subroutine of push_template_decl used to see if each template
4115   parameter in a partial specialization is used in the explicit
4116   argument list.  If T is of the LEVEL given in DATA (which is
4117   treated as a template_parm_data*), then DATA->PARMS is marked
4118   appropriately.  */
4119
4120static int
4121mark_template_parm (tree t, void* data)
4122{
4123  int level;
4124  int idx;
4125  struct template_parm_data* tpd = (struct template_parm_data*) data;
4126
4127  template_parm_level_and_index (t, &level, &idx);
4128
4129  if (level == tpd->level)
4130    {
4131      tpd->parms[idx] = 1;
4132      tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4133    }
4134
4135  /* Return zero so that for_each_template_parm will continue the
4136     traversal of the tree; we want to mark *every* template parm.  */
4137  return 0;
4138}
4139
4140/* Process the partial specialization DECL.  */
4141
4142static tree
4143process_partial_specialization (tree decl)
4144{
4145  tree type = TREE_TYPE (decl);
4146  tree tinfo = get_template_info (decl);
4147  tree maintmpl = TI_TEMPLATE (tinfo);
4148  tree specargs = TI_ARGS (tinfo);
4149  tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4150  tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4151  tree inner_parms;
4152  tree inst;
4153  int nargs = TREE_VEC_LENGTH (inner_args);
4154  int ntparms;
4155  int  i;
4156  bool did_error_intro = false;
4157  struct template_parm_data tpd;
4158  struct template_parm_data tpd2;
4159
4160  gcc_assert (current_template_parms);
4161
4162  inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4163  ntparms = TREE_VEC_LENGTH (inner_parms);
4164
4165  /* We check that each of the template parameters given in the
4166     partial specialization is used in the argument list to the
4167     specialization.  For example:
4168
4169       template <class T> struct S;
4170       template <class T> struct S<T*>;
4171
4172     The second declaration is OK because `T*' uses the template
4173     parameter T, whereas
4174
4175       template <class T> struct S<int>;
4176
4177     is no good.  Even trickier is:
4178
4179       template <class T>
4180       struct S1
4181       {
4182	  template <class U>
4183	  struct S2;
4184	  template <class U>
4185	  struct S2<T>;
4186       };
4187
4188     The S2<T> declaration is actually invalid; it is a
4189     full-specialization.  Of course,
4190
4191	  template <class U>
4192	  struct S2<T (*)(U)>;
4193
4194     or some such would have been OK.  */
4195  tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4196  tpd.parms = XALLOCAVEC (int, ntparms);
4197  memset (tpd.parms, 0, sizeof (int) * ntparms);
4198
4199  tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4200  memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4201  for (i = 0; i < nargs; ++i)
4202    {
4203      tpd.current_arg = i;
4204      for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4205			      &mark_template_parm,
4206			      &tpd,
4207			      NULL,
4208			      /*include_nondeduced_p=*/false);
4209    }
4210  for (i = 0; i < ntparms; ++i)
4211    if (tpd.parms[i] == 0)
4212      {
4213	/* One of the template parms was not used in a deduced context in the
4214	   specialization.  */
4215	if (!did_error_intro)
4216	  {
4217	    error ("template parameters not deducible in "
4218		   "partial specialization:");
4219	    did_error_intro = true;
4220	  }
4221
4222	inform (input_location, "        %qD",
4223		TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4224      }
4225
4226  if (did_error_intro)
4227    return error_mark_node;
4228
4229  /* [temp.class.spec]
4230
4231     The argument list of the specialization shall not be identical to
4232     the implicit argument list of the primary template.  */
4233  tree main_args
4234    = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (maintmpl)));
4235  if (comp_template_args (inner_args, INNERMOST_TEMPLATE_ARGS (main_args)))
4236    error ("partial specialization %qD does not specialize "
4237	   "any template arguments", decl);
4238
4239  /* A partial specialization that replaces multiple parameters of the
4240     primary template with a pack expansion is less specialized for those
4241     parameters.  */
4242  if (nargs < DECL_NTPARMS (maintmpl))
4243    {
4244      error ("partial specialization is not more specialized than the "
4245	     "primary template because it replaces multiple parameters "
4246	     "with a pack expansion");
4247      inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4248      return decl;
4249    }
4250
4251  /* [temp.class.spec]
4252
4253     A partially specialized non-type argument expression shall not
4254     involve template parameters of the partial specialization except
4255     when the argument expression is a simple identifier.
4256
4257     The type of a template parameter corresponding to a specialized
4258     non-type argument shall not be dependent on a parameter of the
4259     specialization.
4260
4261     Also, we verify that pack expansions only occur at the
4262     end of the argument list.  */
4263  gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4264  tpd2.parms = 0;
4265  for (i = 0; i < nargs; ++i)
4266    {
4267      tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4268      tree arg = TREE_VEC_ELT (inner_args, i);
4269      tree packed_args = NULL_TREE;
4270      int j, len = 1;
4271
4272      if (ARGUMENT_PACK_P (arg))
4273        {
4274          /* Extract the arguments from the argument pack. We'll be
4275             iterating over these in the following loop.  */
4276          packed_args = ARGUMENT_PACK_ARGS (arg);
4277          len = TREE_VEC_LENGTH (packed_args);
4278        }
4279
4280      for (j = 0; j < len; j++)
4281        {
4282          if (packed_args)
4283            /* Get the Jth argument in the parameter pack.  */
4284            arg = TREE_VEC_ELT (packed_args, j);
4285
4286          if (PACK_EXPANSION_P (arg))
4287            {
4288              /* Pack expansions must come at the end of the
4289                 argument list.  */
4290              if ((packed_args && j < len - 1)
4291                  || (!packed_args && i < nargs - 1))
4292                {
4293                  if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4294                    error ("parameter pack argument %qE must be at the "
4295			   "end of the template argument list", arg);
4296                  else
4297                    error ("parameter pack argument %qT must be at the "
4298			   "end of the template argument list", arg);
4299                }
4300            }
4301
4302          if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4303            /* We only care about the pattern.  */
4304            arg = PACK_EXPANSION_PATTERN (arg);
4305
4306          if (/* These first two lines are the `non-type' bit.  */
4307              !TYPE_P (arg)
4308              && TREE_CODE (arg) != TEMPLATE_DECL
4309              /* This next two lines are the `argument expression is not just a
4310                 simple identifier' condition and also the `specialized
4311                 non-type argument' bit.  */
4312              && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
4313	      && !(REFERENCE_REF_P (arg)
4314		   && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
4315            {
4316              if ((!packed_args && tpd.arg_uses_template_parms[i])
4317                  || (packed_args && uses_template_parms (arg)))
4318                error ("template argument %qE involves template parameter(s)",
4319                       arg);
4320              else
4321                {
4322                  /* Look at the corresponding template parameter,
4323                     marking which template parameters its type depends
4324                     upon.  */
4325                  tree type = TREE_TYPE (parm);
4326
4327                  if (!tpd2.parms)
4328                    {
4329                      /* We haven't yet initialized TPD2.  Do so now.  */
4330                      tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4331                      /* The number of parameters here is the number in the
4332                         main template, which, as checked in the assertion
4333                         above, is NARGS.  */
4334                      tpd2.parms = XALLOCAVEC (int, nargs);
4335                      tpd2.level =
4336                        TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4337                    }
4338
4339                  /* Mark the template parameters.  But this time, we're
4340                     looking for the template parameters of the main
4341                     template, not in the specialization.  */
4342                  tpd2.current_arg = i;
4343                  tpd2.arg_uses_template_parms[i] = 0;
4344                  memset (tpd2.parms, 0, sizeof (int) * nargs);
4345                  for_each_template_parm (type,
4346                                          &mark_template_parm,
4347                                          &tpd2,
4348                                          NULL,
4349					  /*include_nondeduced_p=*/false);
4350
4351                  if (tpd2.arg_uses_template_parms [i])
4352                    {
4353                      /* The type depended on some template parameters.
4354                         If they are fully specialized in the
4355                         specialization, that's OK.  */
4356                      int j;
4357                      int count = 0;
4358                      for (j = 0; j < nargs; ++j)
4359                        if (tpd2.parms[j] != 0
4360                            && tpd.arg_uses_template_parms [j])
4361                          ++count;
4362                      if (count != 0)
4363                        error_n (input_location, count,
4364                                 "type %qT of template argument %qE depends "
4365                                 "on a template parameter",
4366                                 "type %qT of template argument %qE depends "
4367                                 "on template parameters",
4368                                 type,
4369                                 arg);
4370                    }
4371                }
4372            }
4373        }
4374    }
4375
4376  /* We should only get here once.  */
4377  if (TREE_CODE (decl) == TYPE_DECL)
4378    gcc_assert (!COMPLETE_TYPE_P (type));
4379
4380  tree tmpl = build_template_decl (decl, current_template_parms,
4381				   DECL_MEMBER_TEMPLATE_P (maintmpl));
4382  TREE_TYPE (tmpl) = type;
4383  DECL_TEMPLATE_RESULT (tmpl) = decl;
4384  SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4385  DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
4386  DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
4387
4388  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4389    = tree_cons (specargs, tmpl,
4390                 DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4391  TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4392
4393  for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4394       inst = TREE_CHAIN (inst))
4395    {
4396      tree instance = TREE_VALUE (inst);
4397      if (TYPE_P (instance)
4398	  ? (COMPLETE_TYPE_P (instance)
4399	     && CLASSTYPE_IMPLICIT_INSTANTIATION (instance))
4400	  : DECL_TEMPLATE_INSTANTIATION (instance))
4401	{
4402	  tree spec = most_specialized_partial_spec (instance, tf_none);
4403	  if (spec && TREE_VALUE (spec) == tmpl)
4404	    {
4405	      tree inst_decl = (DECL_P (instance)
4406				? instance : TYPE_NAME (instance));
4407	      permerror (input_location,
4408			 "partial specialization of %qD after instantiation "
4409			 "of %qD", decl, inst_decl);
4410	    }
4411	}
4412    }
4413
4414  return decl;
4415}
4416
4417/* PARM is a template parameter of some form; return the corresponding
4418   TEMPLATE_PARM_INDEX.  */
4419
4420static tree
4421get_template_parm_index (tree parm)
4422{
4423  if (TREE_CODE (parm) == PARM_DECL
4424      || TREE_CODE (parm) == CONST_DECL)
4425    parm = DECL_INITIAL (parm);
4426  else if (TREE_CODE (parm) == TYPE_DECL
4427	   || TREE_CODE (parm) == TEMPLATE_DECL)
4428    parm = TREE_TYPE (parm);
4429  if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
4430      || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM
4431      || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
4432    parm = TEMPLATE_TYPE_PARM_INDEX (parm);
4433  gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
4434  return parm;
4435}
4436
4437/* Subroutine of fixed_parameter_pack_p below.  Look for any template
4438   parameter packs used by the template parameter PARM.  */
4439
4440static void
4441fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
4442{
4443  /* A type parm can't refer to another parm.  */
4444  if (TREE_CODE (parm) == TYPE_DECL)
4445    return;
4446  else if (TREE_CODE (parm) == PARM_DECL)
4447    {
4448      cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
4449		    ppd, ppd->visited);
4450      return;
4451    }
4452
4453  gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
4454
4455  tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
4456  for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
4457    fixed_parameter_pack_p_1 (TREE_VALUE (TREE_VEC_ELT (vec, i)), ppd);
4458}
4459
4460/* PARM is a template parameter pack.  Return any parameter packs used in
4461   its type or the type of any of its template parameters.  If there are
4462   any such packs, it will be instantiated into a fixed template parameter
4463   list by partial instantiation rather than be fully deduced.  */
4464
4465tree
4466fixed_parameter_pack_p (tree parm)
4467{
4468  /* This can only be true in a member template.  */
4469  if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
4470    return NULL_TREE;
4471  /* This can only be true for a parameter pack.  */
4472  if (!template_parameter_pack_p (parm))
4473    return NULL_TREE;
4474  /* A type parm can't refer to another parm.  */
4475  if (TREE_CODE (parm) == TYPE_DECL)
4476    return NULL_TREE;
4477
4478  tree parameter_packs = NULL_TREE;
4479  struct find_parameter_pack_data ppd;
4480  ppd.parameter_packs = &parameter_packs;
4481  ppd.visited = new hash_set<tree>;
4482
4483  fixed_parameter_pack_p_1 (parm, &ppd);
4484
4485  delete ppd.visited;
4486  return parameter_packs;
4487}
4488
4489/* Check that a template declaration's use of default arguments and
4490   parameter packs is not invalid.  Here, PARMS are the template
4491   parameters.  IS_PRIMARY is true if DECL is the thing declared by
4492   a primary template.  IS_PARTIAL is true if DECL is a partial
4493   specialization.
4494
4495   IS_FRIEND_DECL is nonzero if DECL is a friend function template
4496   declaration (but not a definition); 1 indicates a declaration, 2
4497   indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4498   emitted for extraneous default arguments.
4499
4500   Returns TRUE if there were no errors found, FALSE otherwise. */
4501
4502bool
4503check_default_tmpl_args (tree decl, tree parms, bool is_primary,
4504                         bool is_partial, int is_friend_decl)
4505{
4506  const char *msg;
4507  int last_level_to_check;
4508  tree parm_level;
4509  bool no_errors = true;
4510
4511  /* [temp.param]
4512
4513     A default template-argument shall not be specified in a
4514     function template declaration or a function template definition, nor
4515     in the template-parameter-list of the definition of a member of a
4516     class template.  */
4517
4518  if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
4519      || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
4520    /* You can't have a function template declaration in a local
4521       scope, nor you can you define a member of a class template in a
4522       local scope.  */
4523    return true;
4524
4525  if ((TREE_CODE (decl) == TYPE_DECL
4526       && TREE_TYPE (decl)
4527       && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4528      || (TREE_CODE (decl) == FUNCTION_DECL
4529	  && LAMBDA_FUNCTION_P (decl)))
4530    /* A lambda doesn't have an explicit declaration; don't complain
4531       about the parms of the enclosing class.  */
4532    return true;
4533
4534  if (current_class_type
4535      && !TYPE_BEING_DEFINED (current_class_type)
4536      && DECL_LANG_SPECIFIC (decl)
4537      && DECL_DECLARES_FUNCTION_P (decl)
4538      /* If this is either a friend defined in the scope of the class
4539	 or a member function.  */
4540      && (DECL_FUNCTION_MEMBER_P (decl)
4541	  ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4542	  : DECL_FRIEND_CONTEXT (decl)
4543	  ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4544	  : false)
4545      /* And, if it was a member function, it really was defined in
4546	 the scope of the class.  */
4547      && (!DECL_FUNCTION_MEMBER_P (decl)
4548	  || DECL_INITIALIZED_IN_CLASS_P (decl)))
4549    /* We already checked these parameters when the template was
4550       declared, so there's no need to do it again now.  This function
4551       was defined in class scope, but we're processing its body now
4552       that the class is complete.  */
4553    return true;
4554
4555  /* Core issue 226 (C++0x only): the following only applies to class
4556     templates.  */
4557  if (is_primary
4558      && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
4559    {
4560      /* [temp.param]
4561
4562         If a template-parameter has a default template-argument, all
4563         subsequent template-parameters shall have a default
4564         template-argument supplied.  */
4565      for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4566        {
4567          tree inner_parms = TREE_VALUE (parm_level);
4568          int ntparms = TREE_VEC_LENGTH (inner_parms);
4569          int seen_def_arg_p = 0;
4570          int i;
4571
4572          for (i = 0; i < ntparms; ++i)
4573            {
4574              tree parm = TREE_VEC_ELT (inner_parms, i);
4575
4576              if (parm == error_mark_node)
4577                continue;
4578
4579              if (TREE_PURPOSE (parm))
4580                seen_def_arg_p = 1;
4581              else if (seen_def_arg_p
4582		       && !template_parameter_pack_p (TREE_VALUE (parm)))
4583                {
4584                  error ("no default argument for %qD", TREE_VALUE (parm));
4585                  /* For better subsequent error-recovery, we indicate that
4586                     there should have been a default argument.  */
4587                  TREE_PURPOSE (parm) = error_mark_node;
4588                  no_errors = false;
4589                }
4590	      else if (!is_partial
4591		       && !is_friend_decl
4592		       /* Don't complain about an enclosing partial
4593			  specialization.  */
4594		       && parm_level == parms
4595		       && TREE_CODE (decl) == TYPE_DECL
4596		       && i < ntparms - 1
4597		       && template_parameter_pack_p (TREE_VALUE (parm))
4598		       /* A fixed parameter pack will be partially
4599			  instantiated into a fixed length list.  */
4600		       && !fixed_parameter_pack_p (TREE_VALUE (parm)))
4601		{
4602		  /* A primary class template can only have one
4603		     parameter pack, at the end of the template
4604		     parameter list.  */
4605
4606		  error ("parameter pack %q+D must be at the end of the"
4607			 " template parameter list", TREE_VALUE (parm));
4608
4609		  TREE_VALUE (TREE_VEC_ELT (inner_parms, i))
4610		    = error_mark_node;
4611		  no_errors = false;
4612		}
4613            }
4614        }
4615    }
4616
4617  if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4618      || is_partial
4619      || !is_primary
4620      || is_friend_decl)
4621    /* For an ordinary class template, default template arguments are
4622       allowed at the innermost level, e.g.:
4623	 template <class T = int>
4624	 struct S {};
4625       but, in a partial specialization, they're not allowed even
4626       there, as we have in [temp.class.spec]:
4627
4628	 The template parameter list of a specialization shall not
4629	 contain default template argument values.
4630
4631       So, for a partial specialization, or for a function template
4632       (in C++98/C++03), we look at all of them.  */
4633    ;
4634  else
4635    /* But, for a primary class template that is not a partial
4636       specialization we look at all template parameters except the
4637       innermost ones.  */
4638    parms = TREE_CHAIN (parms);
4639
4640  /* Figure out what error message to issue.  */
4641  if (is_friend_decl == 2)
4642    msg = G_("default template arguments may not be used in function template "
4643	     "friend re-declaration");
4644  else if (is_friend_decl)
4645    msg = G_("default template arguments may not be used in function template "
4646	     "friend declarations");
4647  else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4648    msg = G_("default template arguments may not be used in function templates "
4649	     "without -std=c++11 or -std=gnu++11");
4650  else if (is_partial)
4651    msg = G_("default template arguments may not be used in "
4652	     "partial specializations");
4653  else
4654    msg = G_("default argument for template parameter for class enclosing %qD");
4655
4656  if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4657    /* If we're inside a class definition, there's no need to
4658       examine the parameters to the class itself.  On the one
4659       hand, they will be checked when the class is defined, and,
4660       on the other, default arguments are valid in things like:
4661	 template <class T = double>
4662	 struct S { template <class U> void f(U); };
4663       Here the default argument for `S' has no bearing on the
4664       declaration of `f'.  */
4665    last_level_to_check = template_class_depth (current_class_type) + 1;
4666  else
4667    /* Check everything.  */
4668    last_level_to_check = 0;
4669
4670  for (parm_level = parms;
4671       parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4672       parm_level = TREE_CHAIN (parm_level))
4673    {
4674      tree inner_parms = TREE_VALUE (parm_level);
4675      int i;
4676      int ntparms;
4677
4678      ntparms = TREE_VEC_LENGTH (inner_parms);
4679      for (i = 0; i < ntparms; ++i)
4680        {
4681          if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4682            continue;
4683
4684	  if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4685	    {
4686	      if (msg)
4687	        {
4688                  no_errors = false;
4689                  if (is_friend_decl == 2)
4690                    return no_errors;
4691
4692		  error (msg, decl);
4693		  msg = 0;
4694	        }
4695
4696	      /* Clear out the default argument so that we are not
4697	         confused later.  */
4698	      TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4699	    }
4700        }
4701
4702      /* At this point, if we're still interested in issuing messages,
4703	 they must apply to classes surrounding the object declared.  */
4704      if (msg)
4705	msg = G_("default argument for template parameter for class "
4706		 "enclosing %qD");
4707    }
4708
4709  return no_errors;
4710}
4711
4712/* Worker for push_template_decl_real, called via
4713   for_each_template_parm.  DATA is really an int, indicating the
4714   level of the parameters we are interested in.  If T is a template
4715   parameter of that level, return nonzero.  */
4716
4717static int
4718template_parm_this_level_p (tree t, void* data)
4719{
4720  int this_level = *(int *)data;
4721  int level;
4722
4723  if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4724    level = TEMPLATE_PARM_LEVEL (t);
4725  else
4726    level = TEMPLATE_TYPE_LEVEL (t);
4727  return level == this_level;
4728}
4729
4730/* Creates a TEMPLATE_DECL for the indicated DECL using the template
4731   parameters given by current_template_args, or reuses a
4732   previously existing one, if appropriate.  Returns the DECL, or an
4733   equivalent one, if it is replaced via a call to duplicate_decls.
4734
4735   If IS_FRIEND is true, DECL is a friend declaration.  */
4736
4737tree
4738push_template_decl_real (tree decl, bool is_friend)
4739{
4740  tree tmpl;
4741  tree args;
4742  tree info;
4743  tree ctx;
4744  bool is_primary;
4745  bool is_partial;
4746  int new_template_p = 0;
4747  /* True if the template is a member template, in the sense of
4748     [temp.mem].  */
4749  bool member_template_p = false;
4750
4751  if (decl == error_mark_node || !current_template_parms)
4752    return error_mark_node;
4753
4754  /* See if this is a partial specialization.  */
4755  is_partial = ((DECL_IMPLICIT_TYPEDEF_P (decl)
4756		 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4757		 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
4758		|| (TREE_CODE (decl) == VAR_DECL
4759		    && DECL_LANG_SPECIFIC (decl)
4760		    && DECL_TEMPLATE_SPECIALIZATION (decl)
4761		    && TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl))));
4762
4763  if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4764    is_friend = true;
4765
4766  if (is_friend)
4767    /* For a friend, we want the context of the friend function, not
4768       the type of which it is a friend.  */
4769    ctx = CP_DECL_CONTEXT (decl);
4770  else if (CP_DECL_CONTEXT (decl)
4771	   && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4772    /* In the case of a virtual function, we want the class in which
4773       it is defined.  */
4774    ctx = CP_DECL_CONTEXT (decl);
4775  else
4776    /* Otherwise, if we're currently defining some class, the DECL
4777       is assumed to be a member of the class.  */
4778    ctx = current_scope ();
4779
4780  if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4781    ctx = NULL_TREE;
4782
4783  if (!DECL_CONTEXT (decl))
4784    DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4785
4786  /* See if this is a primary template.  */
4787  if (is_friend && ctx
4788      && uses_template_parms_level (ctx, processing_template_decl))
4789    /* A friend template that specifies a class context, i.e.
4790         template <typename T> friend void A<T>::f();
4791       is not primary.  */
4792    is_primary = false;
4793  else if (TREE_CODE (decl) == TYPE_DECL
4794	   && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4795    is_primary = false;
4796  else
4797    is_primary = template_parm_scope_p ();
4798
4799  if (is_primary)
4800    {
4801      if (DECL_CLASS_SCOPE_P (decl))
4802	member_template_p = true;
4803      if (TREE_CODE (decl) == TYPE_DECL
4804	  && ANON_AGGRNAME_P (DECL_NAME (decl)))
4805	{
4806	  error ("template class without a name");
4807	  return error_mark_node;
4808	}
4809      else if (TREE_CODE (decl) == FUNCTION_DECL)
4810	{
4811	  if (member_template_p)
4812	    {
4813	      if (DECL_OVERRIDE_P (decl) || DECL_FINAL_P (decl))
4814		error ("member template %qD may not have virt-specifiers", decl);
4815	    }
4816	  if (DECL_DESTRUCTOR_P (decl))
4817	    {
4818	      /* [temp.mem]
4819
4820		 A destructor shall not be a member template.  */
4821	      error ("destructor %qD declared as member template", decl);
4822	      return error_mark_node;
4823	    }
4824	  if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4825	      && (!prototype_p (TREE_TYPE (decl))
4826		  || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4827		  || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4828		  || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4829		      == void_list_node)))
4830	    {
4831	      /* [basic.stc.dynamic.allocation]
4832
4833		 An allocation function can be a function
4834		 template. ... Template allocation functions shall
4835		 have two or more parameters.  */
4836	      error ("invalid template declaration of %qD", decl);
4837	      return error_mark_node;
4838	    }
4839	}
4840      else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4841	       && CLASS_TYPE_P (TREE_TYPE (decl)))
4842	/* OK */;
4843      else if (TREE_CODE (decl) == TYPE_DECL
4844	       && TYPE_DECL_ALIAS_P (decl))
4845	/* alias-declaration */
4846	gcc_assert (!DECL_ARTIFICIAL (decl));
4847      else if (VAR_P (decl))
4848	/* C++14 variable template. */;
4849      else
4850	{
4851	  error ("template declaration of %q#D", decl);
4852	  return error_mark_node;
4853	}
4854    }
4855
4856  /* Check to see that the rules regarding the use of default
4857     arguments are not being violated.  */
4858  check_default_tmpl_args (decl, current_template_parms,
4859			   is_primary, is_partial, /*is_friend_decl=*/0);
4860
4861  /* Ensure that there are no parameter packs in the type of this
4862     declaration that have not been expanded.  */
4863  if (TREE_CODE (decl) == FUNCTION_DECL)
4864    {
4865      /* Check each of the arguments individually to see if there are
4866         any bare parameter packs.  */
4867      tree type = TREE_TYPE (decl);
4868      tree arg = DECL_ARGUMENTS (decl);
4869      tree argtype = TYPE_ARG_TYPES (type);
4870
4871      while (arg && argtype)
4872        {
4873          if (!DECL_PACK_P (arg)
4874              && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4875            {
4876            /* This is a PARM_DECL that contains unexpanded parameter
4877               packs. We have already complained about this in the
4878               check_for_bare_parameter_packs call, so just replace
4879               these types with ERROR_MARK_NODE.  */
4880              TREE_TYPE (arg) = error_mark_node;
4881              TREE_VALUE (argtype) = error_mark_node;
4882            }
4883
4884          arg = DECL_CHAIN (arg);
4885          argtype = TREE_CHAIN (argtype);
4886        }
4887
4888      /* Check for bare parameter packs in the return type and the
4889         exception specifiers.  */
4890      if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4891	/* Errors were already issued, set return type to int
4892	   as the frontend doesn't expect error_mark_node as
4893	   the return type.  */
4894	TREE_TYPE (type) = integer_type_node;
4895      if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4896	TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4897    }
4898  else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4899					    && TYPE_DECL_ALIAS_P (decl))
4900					   ? DECL_ORIGINAL_TYPE (decl)
4901					   : TREE_TYPE (decl)))
4902    {
4903      TREE_TYPE (decl) = error_mark_node;
4904      return error_mark_node;
4905    }
4906
4907  if (is_partial)
4908    return process_partial_specialization (decl);
4909
4910  args = current_template_args ();
4911
4912  if (!ctx
4913      || TREE_CODE (ctx) == FUNCTION_DECL
4914      || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4915      || (TREE_CODE (decl) == TYPE_DECL
4916	  && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4917      || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4918    {
4919      if (DECL_LANG_SPECIFIC (decl)
4920	  && DECL_TEMPLATE_INFO (decl)
4921	  && DECL_TI_TEMPLATE (decl))
4922	tmpl = DECL_TI_TEMPLATE (decl);
4923      /* If DECL is a TYPE_DECL for a class-template, then there won't
4924	 be DECL_LANG_SPECIFIC.  The information equivalent to
4925	 DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4926      else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4927	       && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4928	       && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4929	{
4930	  /* Since a template declaration already existed for this
4931	     class-type, we must be redeclaring it here.  Make sure
4932	     that the redeclaration is valid.  */
4933	  redeclare_class_template (TREE_TYPE (decl),
4934				    current_template_parms);
4935	  /* We don't need to create a new TEMPLATE_DECL; just use the
4936	     one we already had.  */
4937	  tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4938	}
4939      else
4940	{
4941	  tmpl = build_template_decl (decl, current_template_parms,
4942				      member_template_p);
4943	  new_template_p = 1;
4944
4945	  if (DECL_LANG_SPECIFIC (decl)
4946	      && DECL_TEMPLATE_SPECIALIZATION (decl))
4947	    {
4948	      /* A specialization of a member template of a template
4949		 class.  */
4950	      SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4951	      DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4952	      DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4953	    }
4954	}
4955    }
4956  else
4957    {
4958      tree a, t, current, parms;
4959      int i;
4960      tree tinfo = get_template_info (decl);
4961
4962      if (!tinfo)
4963	{
4964	  error ("template definition of non-template %q#D", decl);
4965	  return error_mark_node;
4966	}
4967
4968      tmpl = TI_TEMPLATE (tinfo);
4969
4970      if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4971	  && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4972	  && DECL_TEMPLATE_SPECIALIZATION (decl)
4973	  && DECL_MEMBER_TEMPLATE_P (tmpl))
4974	{
4975	  tree new_tmpl;
4976
4977	  /* The declaration is a specialization of a member
4978	     template, declared outside the class.  Therefore, the
4979	     innermost template arguments will be NULL, so we
4980	     replace them with the arguments determined by the
4981	     earlier call to check_explicit_specialization.  */
4982	  args = DECL_TI_ARGS (decl);
4983
4984	  new_tmpl
4985	    = build_template_decl (decl, current_template_parms,
4986				   member_template_p);
4987	  DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4988	  TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4989	  DECL_TI_TEMPLATE (decl) = new_tmpl;
4990	  SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4991	  DECL_TEMPLATE_INFO (new_tmpl)
4992	    = build_template_info (tmpl, args);
4993
4994	  register_specialization (new_tmpl,
4995				   most_general_template (tmpl),
4996				   args,
4997				   is_friend, 0);
4998	  return decl;
4999	}
5000
5001      /* Make sure the template headers we got make sense.  */
5002
5003      parms = DECL_TEMPLATE_PARMS (tmpl);
5004      i = TMPL_PARMS_DEPTH (parms);
5005      if (TMPL_ARGS_DEPTH (args) != i)
5006	{
5007	  error ("expected %d levels of template parms for %q#D, got %d",
5008		 i, decl, TMPL_ARGS_DEPTH (args));
5009	  DECL_INTERFACE_KNOWN (decl) = 1;
5010	  return error_mark_node;
5011	}
5012      else
5013	for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
5014	  {
5015	    a = TMPL_ARGS_LEVEL (args, i);
5016	    t = INNERMOST_TEMPLATE_PARMS (parms);
5017
5018	    if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5019	      {
5020		if (current == decl)
5021		  error ("got %d template parameters for %q#D",
5022			 TREE_VEC_LENGTH (a), decl);
5023		else
5024		  error ("got %d template parameters for %q#T",
5025			 TREE_VEC_LENGTH (a), current);
5026		error ("  but %d required", TREE_VEC_LENGTH (t));
5027		/* Avoid crash in import_export_decl.  */
5028		DECL_INTERFACE_KNOWN (decl) = 1;
5029		return error_mark_node;
5030	      }
5031
5032	    if (current == decl)
5033	      current = ctx;
5034	    else if (current == NULL_TREE)
5035	      /* Can happen in erroneous input.  */
5036	      break;
5037	    else
5038	      current = get_containing_scope (current);
5039	  }
5040
5041      /* Check that the parms are used in the appropriate qualifying scopes
5042	 in the declarator.  */
5043      if (!comp_template_args
5044	  (TI_ARGS (tinfo),
5045	   TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5046	{
5047	  error ("\
5048template arguments to %qD do not match original template %qD",
5049		 decl, DECL_TEMPLATE_RESULT (tmpl));
5050	  if (!uses_template_parms (TI_ARGS (tinfo)))
5051	    inform (input_location, "use template<> for an explicit specialization");
5052	  /* Avoid crash in import_export_decl.  */
5053	  DECL_INTERFACE_KNOWN (decl) = 1;
5054	  return error_mark_node;
5055	}
5056    }
5057
5058  DECL_TEMPLATE_RESULT (tmpl) = decl;
5059  TREE_TYPE (tmpl) = TREE_TYPE (decl);
5060
5061  /* Push template declarations for global functions and types.  Note
5062     that we do not try to push a global template friend declared in a
5063     template class; such a thing may well depend on the template
5064     parameters of the class.  */
5065  if (new_template_p && !ctx
5066      && !(is_friend && template_class_depth (current_class_type) > 0))
5067    {
5068      tmpl = pushdecl_namespace_level (tmpl, is_friend);
5069      if (tmpl == error_mark_node)
5070	return error_mark_node;
5071
5072      /* Hide template friend classes that haven't been declared yet.  */
5073      if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5074	{
5075	  DECL_ANTICIPATED (tmpl) = 1;
5076	  DECL_FRIEND_P (tmpl) = 1;
5077	}
5078    }
5079
5080  if (is_primary)
5081    {
5082      tree parms = DECL_TEMPLATE_PARMS (tmpl);
5083      int i;
5084
5085      DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5086      if (DECL_CONV_FN_P (tmpl))
5087	{
5088	  int depth = TMPL_PARMS_DEPTH (parms);
5089
5090	  /* It is a conversion operator. See if the type converted to
5091	     depends on innermost template operands.  */
5092
5093	  if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5094					 depth))
5095	    DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5096	}
5097
5098      /* Give template template parms a DECL_CONTEXT of the template
5099	 for which they are a parameter.  */
5100      parms = INNERMOST_TEMPLATE_PARMS (parms);
5101      for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5102	{
5103	  tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5104	  if (TREE_CODE (parm) == TEMPLATE_DECL)
5105	    DECL_CONTEXT (parm) = tmpl;
5106	}
5107
5108      if (TREE_CODE (decl) == TYPE_DECL
5109	  && TYPE_DECL_ALIAS_P (decl)
5110	  && complex_alias_template_p (tmpl))
5111	TEMPLATE_DECL_COMPLEX_ALIAS_P (tmpl) = true;
5112    }
5113
5114  /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5115     back to its most general template.  If TMPL is a specialization,
5116     ARGS may only have the innermost set of arguments.  Add the missing
5117     argument levels if necessary.  */
5118  if (DECL_TEMPLATE_INFO (tmpl))
5119    args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5120
5121  info = build_template_info (tmpl, args);
5122
5123  if (DECL_IMPLICIT_TYPEDEF_P (decl))
5124    SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5125  else
5126    {
5127      if (is_primary && !DECL_LANG_SPECIFIC (decl))
5128	retrofit_lang_decl (decl);
5129      if (DECL_LANG_SPECIFIC (decl))
5130	DECL_TEMPLATE_INFO (decl) = info;
5131    }
5132
5133  if (flag_implicit_templates
5134      && !is_friend
5135      && TREE_PUBLIC (decl)
5136      && VAR_OR_FUNCTION_DECL_P (decl))
5137    /* Set DECL_COMDAT on template instantiations; if we force
5138       them to be emitted by explicit instantiation or -frepo,
5139       mark_needed will tell cgraph to do the right thing.  */
5140    DECL_COMDAT (decl) = true;
5141
5142  return DECL_TEMPLATE_RESULT (tmpl);
5143}
5144
5145tree
5146push_template_decl (tree decl)
5147{
5148  return push_template_decl_real (decl, false);
5149}
5150
5151/* FN is an inheriting constructor that inherits from the constructor
5152   template INHERITED; turn FN into a constructor template with a matching
5153   template header.  */
5154
5155tree
5156add_inherited_template_parms (tree fn, tree inherited)
5157{
5158  tree inner_parms
5159    = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
5160  inner_parms = copy_node (inner_parms);
5161  tree parms
5162    = tree_cons (size_int (processing_template_decl + 1),
5163		 inner_parms, current_template_parms);
5164  tree tmpl = build_template_decl (fn, parms, /*member*/true);
5165  tree args = template_parms_to_args (parms);
5166  DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
5167  TREE_TYPE (tmpl) = TREE_TYPE (fn);
5168  DECL_TEMPLATE_RESULT (tmpl) = fn;
5169  DECL_ARTIFICIAL (tmpl) = true;
5170  DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5171  return tmpl;
5172}
5173
5174/* Called when a class template TYPE is redeclared with the indicated
5175   template PARMS, e.g.:
5176
5177     template <class T> struct S;
5178     template <class T> struct S {};  */
5179
5180bool
5181redeclare_class_template (tree type, tree parms)
5182{
5183  tree tmpl;
5184  tree tmpl_parms;
5185  int i;
5186
5187  if (!TYPE_TEMPLATE_INFO (type))
5188    {
5189      error ("%qT is not a template type", type);
5190      return false;
5191    }
5192
5193  tmpl = TYPE_TI_TEMPLATE (type);
5194  if (!PRIMARY_TEMPLATE_P (tmpl))
5195    /* The type is nested in some template class.  Nothing to worry
5196       about here; there are no new template parameters for the nested
5197       type.  */
5198    return true;
5199
5200  if (!parms)
5201    {
5202      error ("template specifiers not specified in declaration of %qD",
5203	     tmpl);
5204      return false;
5205    }
5206
5207  parms = INNERMOST_TEMPLATE_PARMS (parms);
5208  tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5209
5210  if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5211    {
5212      error_n (input_location, TREE_VEC_LENGTH (parms),
5213               "redeclared with %d template parameter",
5214               "redeclared with %d template parameters",
5215               TREE_VEC_LENGTH (parms));
5216      inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5217                "previous declaration %q+D used %d template parameter",
5218                "previous declaration %q+D used %d template parameters",
5219                tmpl, TREE_VEC_LENGTH (tmpl_parms));
5220      return false;
5221    }
5222
5223  for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5224    {
5225      tree tmpl_parm;
5226      tree parm;
5227      tree tmpl_default;
5228      tree parm_default;
5229
5230      if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5231          || TREE_VEC_ELT (parms, i) == error_mark_node)
5232        continue;
5233
5234      tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5235      if (error_operand_p (tmpl_parm))
5236	return false;
5237
5238      parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5239      tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5240      parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5241
5242      /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5243	 TEMPLATE_DECL.  */
5244      if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5245	  || (TREE_CODE (tmpl_parm) != TYPE_DECL
5246	      && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5247	  || (TREE_CODE (tmpl_parm) != PARM_DECL
5248	      && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5249		  != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5250	  || (TREE_CODE (tmpl_parm) == PARM_DECL
5251	      && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5252		  != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5253	{
5254	  error ("template parameter %q+#D", tmpl_parm);
5255	  error ("redeclared here as %q#D", parm);
5256	  return false;
5257	}
5258
5259      if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5260	{
5261	  /* We have in [temp.param]:
5262
5263	     A template-parameter may not be given default arguments
5264	     by two different declarations in the same scope.  */
5265	  error_at (input_location, "redefinition of default argument for %q#D", parm);
5266	  inform (DECL_SOURCE_LOCATION (tmpl_parm),
5267		  "original definition appeared here");
5268	  return false;
5269	}
5270
5271      if (parm_default != NULL_TREE)
5272	/* Update the previous template parameters (which are the ones
5273	   that will really count) with the new default value.  */
5274	TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5275      else if (tmpl_default != NULL_TREE)
5276	/* Update the new parameters, too; they'll be used as the
5277	   parameters for any members.  */
5278	TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5279    }
5280
5281    return true;
5282}
5283
5284/* The actual substitution part of instantiate_non_dependent_expr_sfinae,
5285   to be used when the caller has already checked
5286   (processing_template_decl
5287    && !instantiation_dependent_expression_p (expr)
5288    && potential_constant_expression (expr))
5289   and cleared processing_template_decl.  */
5290
5291tree
5292instantiate_non_dependent_expr_internal (tree expr, tsubst_flags_t complain)
5293{
5294  return tsubst_copy_and_build (expr,
5295				/*args=*/NULL_TREE,
5296				complain,
5297				/*in_decl=*/NULL_TREE,
5298				/*function_p=*/false,
5299				/*integral_constant_expression_p=*/true);
5300}
5301
5302/* Simplify EXPR if it is a non-dependent expression.  Returns the
5303   (possibly simplified) expression.  */
5304
5305tree
5306instantiate_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5307{
5308  if (expr == NULL_TREE)
5309    return NULL_TREE;
5310
5311  /* If we're in a template, but EXPR isn't value dependent, simplify
5312     it.  We're supposed to treat:
5313
5314       template <typename T> void f(T[1 + 1]);
5315       template <typename T> void f(T[2]);
5316
5317     as two declarations of the same function, for example.  */
5318  if (processing_template_decl
5319      && !instantiation_dependent_expression_p (expr)
5320      && potential_constant_expression (expr))
5321    {
5322      processing_template_decl_sentinel s;
5323      expr = instantiate_non_dependent_expr_internal (expr, complain);
5324    }
5325  return expr;
5326}
5327
5328tree
5329instantiate_non_dependent_expr (tree expr)
5330{
5331  return instantiate_non_dependent_expr_sfinae (expr, tf_error);
5332}
5333
5334/* True iff T is a specialization of a variable template.  */
5335
5336bool
5337variable_template_specialization_p (tree t)
5338{
5339  if (!VAR_P (t) || !DECL_LANG_SPECIFIC (t) || !DECL_TEMPLATE_INFO (t))
5340    return false;
5341  tree tmpl = DECL_TI_TEMPLATE (t);
5342  return variable_template_p (tmpl);
5343}
5344
5345/* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5346   template declaration, or a TYPE_DECL for an alias declaration.  */
5347
5348bool
5349alias_type_or_template_p (tree t)
5350{
5351  if (t == NULL_TREE)
5352    return false;
5353  return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5354	  || (TYPE_P (t)
5355	      && TYPE_NAME (t)
5356	      && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5357	  || DECL_ALIAS_TEMPLATE_P (t));
5358}
5359
5360/* Return TRUE iff T is a specialization of an alias template.  */
5361
5362bool
5363alias_template_specialization_p (const_tree t)
5364{
5365  /* It's an alias template specialization if it's an alias and its
5366     TYPE_NAME is a specialization of a primary template.  */
5367  if (TYPE_ALIAS_P (t))
5368    {
5369      tree name = TYPE_NAME (t);
5370      if (DECL_LANG_SPECIFIC (name))
5371	if (tree ti = DECL_TEMPLATE_INFO (name))
5372	  {
5373	    tree tmpl = TI_TEMPLATE (ti);
5374	    return PRIMARY_TEMPLATE_P (tmpl);
5375	  }
5376    }
5377  return false;
5378}
5379
5380/* An alias template is complex from a SFINAE perspective if a template-id
5381   using that alias can be ill-formed when the expansion is not, as with
5382   the void_t template.  We determine this by checking whether the
5383   expansion for the alias template uses all its template parameters.  */
5384
5385struct uses_all_template_parms_data
5386{
5387  int level;
5388  bool *seen;
5389};
5390
5391static int
5392uses_all_template_parms_r (tree t, void *data_)
5393{
5394  struct uses_all_template_parms_data &data
5395    = *(struct uses_all_template_parms_data*)data_;
5396  tree idx = get_template_parm_index (t);
5397
5398  if (TEMPLATE_PARM_LEVEL (idx) == data.level)
5399    data.seen[TEMPLATE_PARM_IDX (idx)] = true;
5400  return 0;
5401}
5402
5403static bool
5404complex_alias_template_p (const_tree tmpl)
5405{
5406  struct uses_all_template_parms_data data;
5407  tree pat = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
5408  tree parms = DECL_TEMPLATE_PARMS (tmpl);
5409  data.level = TMPL_PARMS_DEPTH (parms);
5410  int len = TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS (parms));
5411  data.seen = XALLOCAVEC (bool, len);
5412  for (int i = 0; i < len; ++i)
5413    data.seen[i] = false;
5414
5415  for_each_template_parm (pat, uses_all_template_parms_r, &data, NULL, true);
5416  for (int i = 0; i < len; ++i)
5417    if (!data.seen[i])
5418      return true;
5419  return false;
5420}
5421
5422/* Return TRUE iff T is a specialization of a complex alias template with
5423   dependent template-arguments.  */
5424
5425bool
5426dependent_alias_template_spec_p (const_tree t)
5427{
5428  return (alias_template_specialization_p (t)
5429	  && TEMPLATE_DECL_COMPLEX_ALIAS_P (DECL_TI_TEMPLATE (TYPE_NAME (t)))
5430	  && (any_dependent_template_arguments_p
5431	      (INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (t)))));
5432}
5433
5434/* Return the number of innermost template parameters in TMPL.  */
5435
5436static int
5437num_innermost_template_parms (tree tmpl)
5438{
5439  tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
5440  return TREE_VEC_LENGTH (parms);
5441}
5442
5443/* Return either TMPL or another template that it is equivalent to under DR
5444   1286: An alias that just changes the name of a template is equivalent to
5445   the other template.  */
5446
5447static tree
5448get_underlying_template (tree tmpl)
5449{
5450  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
5451  while (DECL_ALIAS_TEMPLATE_P (tmpl))
5452    {
5453      tree result = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
5454      if (TYPE_TEMPLATE_INFO (result))
5455	{
5456	  tree sub = TYPE_TI_TEMPLATE (result);
5457	  if (PRIMARY_TEMPLATE_P (sub)
5458	      && (num_innermost_template_parms (tmpl)
5459		  == num_innermost_template_parms (sub)))
5460	    {
5461	      tree alias_args = INNERMOST_TEMPLATE_ARGS
5462		(template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl)));
5463	      if (!comp_template_args (TYPE_TI_ARGS (result), alias_args))
5464		break;
5465	      /* The alias type is equivalent to the pattern of the
5466		 underlying template, so strip the alias.  */
5467	      tmpl = sub;
5468	      continue;
5469	    }
5470	}
5471      break;
5472    }
5473  return tmpl;
5474}
5475
5476/* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5477   must be a function or a pointer-to-function type, as specified
5478   in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5479   and check that the resulting function has external linkage.  */
5480
5481static tree
5482convert_nontype_argument_function (tree type, tree expr,
5483				   tsubst_flags_t complain)
5484{
5485  tree fns = expr;
5486  tree fn, fn_no_ptr;
5487  linkage_kind linkage;
5488
5489  fn = instantiate_type (type, fns, tf_none);
5490  if (fn == error_mark_node)
5491    return error_mark_node;
5492
5493  fn_no_ptr = fn;
5494  if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5495    fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5496  if (BASELINK_P (fn_no_ptr))
5497    fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5498
5499  /* [temp.arg.nontype]/1
5500
5501     A template-argument for a non-type, non-template template-parameter
5502     shall be one of:
5503     [...]
5504     -- the address of an object or function with external [C++11: or
5505        internal] linkage.  */
5506
5507  if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
5508    {
5509      if (complain & tf_error)
5510	{
5511	  error ("%qE is not a valid template argument for type %qT",
5512		 expr, type);
5513	  if (TYPE_PTR_P (type))
5514	    error ("it must be the address of a function with "
5515		   "external linkage");
5516	  else
5517	    error ("it must be the name of a function with "
5518		   "external linkage");
5519	}
5520      return NULL_TREE;
5521    }
5522
5523  linkage = decl_linkage (fn_no_ptr);
5524  if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
5525    {
5526      if (complain & tf_error)
5527	{
5528	  if (cxx_dialect >= cxx11)
5529	    error ("%qE is not a valid template argument for type %qT "
5530		   "because %qD has no linkage",
5531		   expr, type, fn_no_ptr);
5532	  else
5533	    error ("%qE is not a valid template argument for type %qT "
5534		   "because %qD does not have external linkage",
5535		   expr, type, fn_no_ptr);
5536	}
5537      return NULL_TREE;
5538    }
5539
5540  return fn;
5541}
5542
5543/* Subroutine of convert_nontype_argument.
5544   Check if EXPR of type TYPE is a valid pointer-to-member constant.
5545   Emit an error otherwise.  */
5546
5547static bool
5548check_valid_ptrmem_cst_expr (tree type, tree expr,
5549			     tsubst_flags_t complain)
5550{
5551  STRIP_NOPS (expr);
5552  if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5553    return true;
5554  if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
5555    return true;
5556  if (processing_template_decl
5557      && TREE_CODE (expr) == ADDR_EXPR
5558      && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
5559    return true;
5560  if (complain & tf_error)
5561    {
5562      error ("%qE is not a valid template argument for type %qT",
5563	     expr, type);
5564      error ("it must be a pointer-to-member of the form %<&X::Y%>");
5565    }
5566  return false;
5567}
5568
5569/* Returns TRUE iff the address of OP is value-dependent.
5570
5571   14.6.2.4 [temp.dep.temp]:
5572   A non-integral non-type template-argument is dependent if its type is
5573   dependent or it has either of the following forms
5574     qualified-id
5575     & qualified-id
5576   and contains a nested-name-specifier which specifies a class-name that
5577   names a dependent type.
5578
5579   We generalize this to just say that the address of a member of a
5580   dependent class is value-dependent; the above doesn't cover the
5581   address of a static data member named with an unqualified-id.  */
5582
5583static bool
5584has_value_dependent_address (tree op)
5585{
5586  /* We could use get_inner_reference here, but there's no need;
5587     this is only relevant for template non-type arguments, which
5588     can only be expressed as &id-expression.  */
5589  if (DECL_P (op))
5590    {
5591      tree ctx = CP_DECL_CONTEXT (op);
5592      if (TYPE_P (ctx) && dependent_type_p (ctx))
5593	return true;
5594    }
5595
5596  return false;
5597}
5598
5599/* The next set of functions are used for providing helpful explanatory
5600   diagnostics for failed overload resolution.  Their messages should be
5601   indented by two spaces for consistency with the messages in
5602   call.c  */
5603
5604static int
5605unify_success (bool /*explain_p*/)
5606{
5607  return 0;
5608}
5609
5610static int
5611unify_parameter_deduction_failure (bool explain_p, tree parm)
5612{
5613  if (explain_p)
5614    inform (input_location,
5615	    "  couldn't deduce template parameter %qD", parm);
5616  return 1;
5617}
5618
5619static int
5620unify_invalid (bool /*explain_p*/)
5621{
5622  return 1;
5623}
5624
5625static int
5626unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5627{
5628  if (explain_p)
5629    inform (input_location,
5630	    "  types %qT and %qT have incompatible cv-qualifiers",
5631	    parm, arg);
5632  return 1;
5633}
5634
5635static int
5636unify_type_mismatch (bool explain_p, tree parm, tree arg)
5637{
5638  if (explain_p)
5639    inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5640  return 1;
5641}
5642
5643static int
5644unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5645{
5646  if (explain_p)
5647    inform (input_location,
5648	    "  template parameter %qD is not a parameter pack, but "
5649	    "argument %qD is",
5650	    parm, arg);
5651  return 1;
5652}
5653
5654static int
5655unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5656{
5657  if (explain_p)
5658    inform (input_location,
5659	    "  template argument %qE does not match "
5660	    "pointer-to-member constant %qE",
5661	    arg, parm);
5662  return 1;
5663}
5664
5665static int
5666unify_expression_unequal (bool explain_p, tree parm, tree arg)
5667{
5668  if (explain_p)
5669    inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5670  return 1;
5671}
5672
5673static int
5674unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5675{
5676  if (explain_p)
5677    inform (input_location,
5678	    "  inconsistent parameter pack deduction with %qT and %qT",
5679	    old_arg, new_arg);
5680  return 1;
5681}
5682
5683static int
5684unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5685{
5686  if (explain_p)
5687    {
5688      if (TYPE_P (parm))
5689	inform (input_location,
5690		"  deduced conflicting types for parameter %qT (%qT and %qT)",
5691		parm, first, second);
5692      else
5693	inform (input_location,
5694		"  deduced conflicting values for non-type parameter "
5695		"%qE (%qE and %qE)", parm, first, second);
5696    }
5697  return 1;
5698}
5699
5700static int
5701unify_vla_arg (bool explain_p, tree arg)
5702{
5703  if (explain_p)
5704    inform (input_location,
5705	    "  variable-sized array type %qT is not "
5706	    "a valid template argument",
5707	    arg);
5708  return 1;
5709}
5710
5711static int
5712unify_method_type_error (bool explain_p, tree arg)
5713{
5714  if (explain_p)
5715    inform (input_location,
5716	    "  member function type %qT is not a valid template argument",
5717	    arg);
5718  return 1;
5719}
5720
5721static int
5722unify_arity (bool explain_p, int have, int wanted, bool least_p = false)
5723{
5724  if (explain_p)
5725    {
5726      if (least_p)
5727	inform_n (input_location, wanted,
5728		  "  candidate expects at least %d argument, %d provided",
5729		  "  candidate expects at least %d arguments, %d provided",
5730		  wanted, have);
5731      else
5732	inform_n (input_location, wanted,
5733		  "  candidate expects %d argument, %d provided",
5734		  "  candidate expects %d arguments, %d provided",
5735		  wanted, have);
5736    }
5737  return 1;
5738}
5739
5740static int
5741unify_too_many_arguments (bool explain_p, int have, int wanted)
5742{
5743  return unify_arity (explain_p, have, wanted);
5744}
5745
5746static int
5747unify_too_few_arguments (bool explain_p, int have, int wanted,
5748			 bool least_p = false)
5749{
5750  return unify_arity (explain_p, have, wanted, least_p);
5751}
5752
5753static int
5754unify_arg_conversion (bool explain_p, tree to_type,
5755		      tree from_type, tree arg)
5756{
5757  if (explain_p)
5758    inform (EXPR_LOC_OR_LOC (arg, input_location),
5759	    "  cannot convert %qE (type %qT) to type %qT",
5760	    arg, from_type, to_type);
5761  return 1;
5762}
5763
5764static int
5765unify_no_common_base (bool explain_p, enum template_base_result r,
5766		      tree parm, tree arg)
5767{
5768  if (explain_p)
5769    switch (r)
5770      {
5771      case tbr_ambiguous_baseclass:
5772	inform (input_location, "  %qT is an ambiguous base class of %qT",
5773		parm, arg);
5774	break;
5775      default:
5776	inform (input_location, "  %qT is not derived from %qT", arg, parm);
5777	break;
5778      }
5779  return 1;
5780}
5781
5782static int
5783unify_inconsistent_template_template_parameters (bool explain_p)
5784{
5785  if (explain_p)
5786    inform (input_location,
5787	    "  template parameters of a template template argument are "
5788	    "inconsistent with other deduced template arguments");
5789  return 1;
5790}
5791
5792static int
5793unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5794{
5795  if (explain_p)
5796    inform (input_location,
5797	    "  can't deduce a template for %qT from non-template type %qT",
5798	    parm, arg);
5799  return 1;
5800}
5801
5802static int
5803unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5804{
5805  if (explain_p)
5806    inform (input_location,
5807	    "  template argument %qE does not match %qD", arg, parm);
5808  return 1;
5809}
5810
5811static int
5812unify_overload_resolution_failure (bool explain_p, tree arg)
5813{
5814  if (explain_p)
5815    inform (input_location,
5816	    "  could not resolve address from overloaded function %qE",
5817	    arg);
5818  return 1;
5819}
5820
5821/* Attempt to convert the non-type template parameter EXPR to the
5822   indicated TYPE.  If the conversion is successful, return the
5823   converted value.  If the conversion is unsuccessful, return
5824   NULL_TREE if we issued an error message, or error_mark_node if we
5825   did not.  We issue error messages for out-and-out bad template
5826   parameters, but not simply because the conversion failed, since we
5827   might be just trying to do argument deduction.  Both TYPE and EXPR
5828   must be non-dependent.
5829
5830   The conversion follows the special rules described in
5831   [temp.arg.nontype], and it is much more strict than an implicit
5832   conversion.
5833
5834   This function is called twice for each template argument (see
5835   lookup_template_class for a more accurate description of this
5836   problem). This means that we need to handle expressions which
5837   are not valid in a C++ source, but can be created from the
5838   first call (for instance, casts to perform conversions). These
5839   hacks can go away after we fix the double coercion problem.  */
5840
5841static tree
5842convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5843{
5844  tree expr_type;
5845
5846  /* Detect immediately string literals as invalid non-type argument.
5847     This special-case is not needed for correctness (we would easily
5848     catch this later), but only to provide better diagnostic for this
5849     common user mistake. As suggested by DR 100, we do not mention
5850     linkage issues in the diagnostic as this is not the point.  */
5851  /* FIXME we're making this OK.  */
5852  if (TREE_CODE (expr) == STRING_CST)
5853    {
5854      if (complain & tf_error)
5855	error ("%qE is not a valid template argument for type %qT "
5856	       "because string literals can never be used in this context",
5857	       expr, type);
5858      return NULL_TREE;
5859    }
5860
5861  /* Add the ADDR_EXPR now for the benefit of
5862     value_dependent_expression_p.  */
5863  if (TYPE_PTROBV_P (type)
5864      && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5865    {
5866      expr = decay_conversion (expr, complain);
5867      if (expr == error_mark_node)
5868	return error_mark_node;
5869    }
5870
5871  /* If we are in a template, EXPR may be non-dependent, but still
5872     have a syntactic, rather than semantic, form.  For example, EXPR
5873     might be a SCOPE_REF, rather than the VAR_DECL to which the
5874     SCOPE_REF refers.  Preserving the qualifying scope is necessary
5875     so that access checking can be performed when the template is
5876     instantiated -- but here we need the resolved form so that we can
5877     convert the argument.  */
5878  bool non_dep = false;
5879  if (TYPE_REF_OBJ_P (type)
5880      && has_value_dependent_address (expr))
5881    /* If we want the address and it's value-dependent, don't fold.  */;
5882  else if (!type_unknown_p (expr)
5883	   && processing_template_decl
5884	   && !instantiation_dependent_expression_p (expr)
5885	   && potential_constant_expression (expr))
5886    non_dep = true;
5887  if (error_operand_p (expr))
5888    return error_mark_node;
5889  expr_type = TREE_TYPE (expr);
5890  if (TREE_CODE (type) == REFERENCE_TYPE)
5891    expr = mark_lvalue_use (expr);
5892  else
5893    expr = mark_rvalue_use (expr);
5894
5895  /* If the argument is non-dependent, perform any conversions in
5896     non-dependent context as well.  */
5897  processing_template_decl_sentinel s (non_dep);
5898  if (non_dep)
5899    expr = instantiate_non_dependent_expr_internal (expr, complain);
5900
5901  /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5902     to a non-type argument of "nullptr".  */
5903  if (expr == nullptr_node && TYPE_PTR_OR_PTRMEM_P (type))
5904    expr = convert (type, expr);
5905
5906  /* In C++11, integral or enumeration non-type template arguments can be
5907     arbitrary constant expressions.  Pointer and pointer to
5908     member arguments can be general constant expressions that evaluate
5909     to a null value, but otherwise still need to be of a specific form.  */
5910  if (cxx_dialect >= cxx11)
5911    {
5912      if (TREE_CODE (expr) == PTRMEM_CST)
5913	/* A PTRMEM_CST is already constant, and a valid template
5914	   argument for a parameter of pointer to member type, we just want
5915	   to leave it in that form rather than lower it to a
5916	   CONSTRUCTOR.  */;
5917      else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5918	expr = maybe_constant_value (expr);
5919      else if (TYPE_PTR_OR_PTRMEM_P (type))
5920	{
5921	  tree folded = maybe_constant_value (expr);
5922	  if (TYPE_PTR_P (type) ? integer_zerop (folded)
5923	      : null_member_pointer_value_p (folded))
5924	    expr = folded;
5925	}
5926    }
5927
5928  /* HACK: Due to double coercion, we can get a
5929     NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5930     which is the tree that we built on the first call (see
5931     below when coercing to reference to object or to reference to
5932     function). We just strip everything and get to the arg.
5933     See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5934     for examples.  */
5935  if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5936    {
5937      tree probe_type, probe = expr;
5938      if (REFERENCE_REF_P (probe))
5939	probe = TREE_OPERAND (probe, 0);
5940      probe_type = TREE_TYPE (probe);
5941      if (TREE_CODE (probe) == NOP_EXPR)
5942	{
5943	  /* ??? Maybe we could use convert_from_reference here, but we
5944	     would need to relax its constraints because the NOP_EXPR
5945	     could actually change the type to something more cv-qualified,
5946	     and this is not folded by convert_from_reference.  */
5947	  tree addr = TREE_OPERAND (probe, 0);
5948	  if (TREE_CODE (probe_type) == REFERENCE_TYPE
5949	      && TREE_CODE (addr) == ADDR_EXPR
5950	      && TYPE_PTR_P (TREE_TYPE (addr))
5951	      && (same_type_ignoring_top_level_qualifiers_p
5952		  (TREE_TYPE (probe_type),
5953		   TREE_TYPE (TREE_TYPE (addr)))))
5954	    {
5955	      expr = TREE_OPERAND (addr, 0);
5956	      expr_type = TREE_TYPE (probe_type);
5957	    }
5958	}
5959    }
5960
5961  /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5962     parameter is a pointer to object, through decay and
5963     qualification conversion. Let's strip everything.  */
5964  else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5965    {
5966      tree probe = expr;
5967      STRIP_NOPS (probe);
5968      if (TREE_CODE (probe) == ADDR_EXPR
5969	  && TYPE_PTR_P (TREE_TYPE (probe)))
5970	{
5971	  /* Skip the ADDR_EXPR only if it is part of the decay for
5972	     an array. Otherwise, it is part of the original argument
5973	     in the source code.  */
5974	  if (TREE_CODE (TREE_TYPE (TREE_OPERAND (probe, 0))) == ARRAY_TYPE)
5975	    probe = TREE_OPERAND (probe, 0);
5976	  expr = probe;
5977	  expr_type = TREE_TYPE (expr);
5978	}
5979    }
5980
5981  /* [temp.arg.nontype]/5, bullet 1
5982
5983     For a non-type template-parameter of integral or enumeration type,
5984     integral promotions (_conv.prom_) and integral conversions
5985     (_conv.integral_) are applied.  */
5986  if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5987    {
5988      tree t = build_integral_nontype_arg_conv (type, expr, complain);
5989      t = maybe_constant_value (t);
5990      if (t != error_mark_node)
5991	expr = t;
5992
5993      if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5994	return error_mark_node;
5995
5996      /* Notice that there are constant expressions like '4 % 0' which
5997	 do not fold into integer constants.  */
5998      if (TREE_CODE (expr) != INTEGER_CST)
5999	{
6000	  if (complain & tf_error)
6001	    {
6002	      int errs = errorcount, warns = warningcount + werrorcount;
6003	      if (processing_template_decl
6004		  && !require_potential_constant_expression (expr))
6005		return NULL_TREE;
6006	      expr = cxx_constant_value (expr);
6007	      if (errorcount > errs || warningcount + werrorcount > warns)
6008		inform (EXPR_LOC_OR_LOC (expr, input_location),
6009			"in template argument for type %qT ", type);
6010	      if (expr == error_mark_node)
6011		return NULL_TREE;
6012	      /* else cxx_constant_value complained but gave us
6013		 a real constant, so go ahead.  */
6014	      gcc_assert (TREE_CODE (expr) == INTEGER_CST);
6015	    }
6016	  else
6017	    return NULL_TREE;
6018	}
6019
6020      /* Avoid typedef problems.  */
6021      if (TREE_TYPE (expr) != type)
6022	expr = fold_convert (type, expr);
6023    }
6024  /* [temp.arg.nontype]/5, bullet 2
6025
6026     For a non-type template-parameter of type pointer to object,
6027     qualification conversions (_conv.qual_) and the array-to-pointer
6028     conversion (_conv.array_) are applied.  */
6029  else if (TYPE_PTROBV_P (type))
6030    {
6031      /* [temp.arg.nontype]/1  (TC1 version, DR 49):
6032
6033	 A template-argument for a non-type, non-template template-parameter
6034	 shall be one of: [...]
6035
6036	 -- the name of a non-type template-parameter;
6037	 -- the address of an object or function with external linkage, [...]
6038	    expressed as "& id-expression" where the & is optional if the name
6039	    refers to a function or array, or if the corresponding
6040	    template-parameter is a reference.
6041
6042	Here, we do not care about functions, as they are invalid anyway
6043	for a parameter of type pointer-to-object.  */
6044
6045      if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
6046	/* Non-type template parameters are OK.  */
6047	;
6048      else if (cxx_dialect >= cxx11 && integer_zerop (expr))
6049	/* Null pointer values are OK in C++11.  */;
6050      else if (TREE_CODE (expr) != ADDR_EXPR
6051	       && TREE_CODE (expr_type) != ARRAY_TYPE)
6052	{
6053	  if (VAR_P (expr))
6054	    {
6055	      if (complain & tf_error)
6056		error ("%qD is not a valid template argument "
6057		       "because %qD is a variable, not the address of "
6058		       "a variable", expr, expr);
6059	      return NULL_TREE;
6060	    }
6061	  if (POINTER_TYPE_P (expr_type))
6062	    {
6063	      if (complain & tf_error)
6064		error ("%qE is not a valid template argument for %qT "
6065		       "because it is not the address of a variable",
6066		       expr, type);
6067	      return NULL_TREE;
6068	    }
6069	  /* Other values, like integer constants, might be valid
6070	     non-type arguments of some other type.  */
6071	  return error_mark_node;
6072	}
6073      else
6074	{
6075	  tree decl;
6076
6077	  decl = ((TREE_CODE (expr) == ADDR_EXPR)
6078		  ? TREE_OPERAND (expr, 0) : expr);
6079	  if (!VAR_P (decl))
6080	    {
6081	      if (complain & tf_error)
6082		error ("%qE is not a valid template argument of type %qT "
6083		       "because %qE is not a variable", expr, type, decl);
6084	      return NULL_TREE;
6085	    }
6086	  else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
6087	    {
6088	      if (complain & tf_error)
6089		error ("%qE is not a valid template argument of type %qT "
6090		       "because %qD does not have external linkage",
6091		       expr, type, decl);
6092	      return NULL_TREE;
6093	    }
6094	  else if (cxx_dialect >= cxx11 && decl_linkage (decl) == lk_none)
6095	    {
6096	      if (complain & tf_error)
6097		error ("%qE is not a valid template argument of type %qT "
6098		       "because %qD has no linkage", expr, type, decl);
6099	      return NULL_TREE;
6100	    }
6101	}
6102
6103      expr = decay_conversion (expr, complain);
6104      if (expr == error_mark_node)
6105	return error_mark_node;
6106
6107      expr = perform_qualification_conversions (type, expr);
6108      if (expr == error_mark_node)
6109	return error_mark_node;
6110    }
6111  /* [temp.arg.nontype]/5, bullet 3
6112
6113     For a non-type template-parameter of type reference to object, no
6114     conversions apply. The type referred to by the reference may be more
6115     cv-qualified than the (otherwise identical) type of the
6116     template-argument. The template-parameter is bound directly to the
6117     template-argument, which must be an lvalue.  */
6118  else if (TYPE_REF_OBJ_P (type))
6119    {
6120      if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
6121						      expr_type))
6122	return error_mark_node;
6123
6124      if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
6125	{
6126	  if (complain & tf_error)
6127	    error ("%qE is not a valid template argument for type %qT "
6128		   "because of conflicts in cv-qualification", expr, type);
6129	  return NULL_TREE;
6130	}
6131
6132      if (!real_lvalue_p (expr))
6133	{
6134	  if (complain & tf_error)
6135	    error ("%qE is not a valid template argument for type %qT "
6136		   "because it is not an lvalue", expr, type);
6137	  return NULL_TREE;
6138	}
6139
6140      /* [temp.arg.nontype]/1
6141
6142	 A template-argument for a non-type, non-template template-parameter
6143	 shall be one of: [...]
6144
6145	 -- the address of an object or function with external linkage.  */
6146      if (INDIRECT_REF_P (expr)
6147	  && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
6148	{
6149	  expr = TREE_OPERAND (expr, 0);
6150	  if (DECL_P (expr))
6151	    {
6152	      if (complain & tf_error)
6153		error ("%q#D is not a valid template argument for type %qT "
6154		       "because a reference variable does not have a constant "
6155		       "address", expr, type);
6156	      return NULL_TREE;
6157	    }
6158	}
6159
6160      if (!DECL_P (expr))
6161	{
6162	  if (complain & tf_error)
6163	    error ("%qE is not a valid template argument for type %qT "
6164		   "because it is not an object with external linkage",
6165		   expr, type);
6166	  return NULL_TREE;
6167	}
6168
6169      if (!DECL_EXTERNAL_LINKAGE_P (expr))
6170	{
6171	  if (complain & tf_error)
6172	    error ("%qE is not a valid template argument for type %qT "
6173		   "because object %qD has not external linkage",
6174		   expr, type, expr);
6175	  return NULL_TREE;
6176	}
6177
6178      expr = build_nop (type, build_address (expr));
6179    }
6180  /* [temp.arg.nontype]/5, bullet 4
6181
6182     For a non-type template-parameter of type pointer to function, only
6183     the function-to-pointer conversion (_conv.func_) is applied. If the
6184     template-argument represents a set of overloaded functions (or a
6185     pointer to such), the matching function is selected from the set
6186     (_over.over_).  */
6187  else if (TYPE_PTRFN_P (type))
6188    {
6189      /* If the argument is a template-id, we might not have enough
6190	 context information to decay the pointer.  */
6191      if (!type_unknown_p (expr_type))
6192	{
6193	  expr = decay_conversion (expr, complain);
6194	  if (expr == error_mark_node)
6195	    return error_mark_node;
6196	}
6197
6198      if (cxx_dialect >= cxx11 && integer_zerop (expr))
6199	/* Null pointer values are OK in C++11.  */
6200	return perform_qualification_conversions (type, expr);
6201
6202      expr = convert_nontype_argument_function (type, expr, complain);
6203      if (!expr || expr == error_mark_node)
6204	return expr;
6205    }
6206  /* [temp.arg.nontype]/5, bullet 5
6207
6208     For a non-type template-parameter of type reference to function, no
6209     conversions apply. If the template-argument represents a set of
6210     overloaded functions, the matching function is selected from the set
6211     (_over.over_).  */
6212  else if (TYPE_REFFN_P (type))
6213    {
6214      if (TREE_CODE (expr) == ADDR_EXPR)
6215	{
6216	  if (complain & tf_error)
6217	    {
6218	      error ("%qE is not a valid template argument for type %qT "
6219		     "because it is a pointer", expr, type);
6220	      inform (input_location, "try using %qE instead",
6221		      TREE_OPERAND (expr, 0));
6222	    }
6223	  return NULL_TREE;
6224	}
6225
6226      expr = convert_nontype_argument_function (type, expr, complain);
6227      if (!expr || expr == error_mark_node)
6228	return expr;
6229
6230      expr = build_nop (type, build_address (expr));
6231    }
6232  /* [temp.arg.nontype]/5, bullet 6
6233
6234     For a non-type template-parameter of type pointer to member function,
6235     no conversions apply. If the template-argument represents a set of
6236     overloaded member functions, the matching member function is selected
6237     from the set (_over.over_).  */
6238  else if (TYPE_PTRMEMFUNC_P (type))
6239    {
6240      expr = instantiate_type (type, expr, tf_none);
6241      if (expr == error_mark_node)
6242	return error_mark_node;
6243
6244      /* [temp.arg.nontype] bullet 1 says the pointer to member
6245         expression must be a pointer-to-member constant.  */
6246      if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6247	return error_mark_node;
6248
6249      /* There is no way to disable standard conversions in
6250	 resolve_address_of_overloaded_function (called by
6251	 instantiate_type). It is possible that the call succeeded by
6252	 converting &B::I to &D::I (where B is a base of D), so we need
6253	 to reject this conversion here.
6254
6255	 Actually, even if there was a way to disable standard conversions,
6256	 it would still be better to reject them here so that we can
6257	 provide a superior diagnostic.  */
6258      if (!same_type_p (TREE_TYPE (expr), type))
6259	{
6260	  if (complain & tf_error)
6261	    {
6262	      error ("%qE is not a valid template argument for type %qT "
6263		     "because it is of type %qT", expr, type,
6264		     TREE_TYPE (expr));
6265	      /* If we are just one standard conversion off, explain.  */
6266	      if (can_convert_standard (type, TREE_TYPE (expr), complain))
6267		inform (input_location,
6268			"standard conversions are not allowed in this context");
6269	    }
6270	  return NULL_TREE;
6271	}
6272    }
6273  /* [temp.arg.nontype]/5, bullet 7
6274
6275     For a non-type template-parameter of type pointer to data member,
6276     qualification conversions (_conv.qual_) are applied.  */
6277  else if (TYPE_PTRDATAMEM_P (type))
6278    {
6279      /* [temp.arg.nontype] bullet 1 says the pointer to member
6280         expression must be a pointer-to-member constant.  */
6281      if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6282	return error_mark_node;
6283
6284      expr = perform_qualification_conversions (type, expr);
6285      if (expr == error_mark_node)
6286	return expr;
6287    }
6288  else if (NULLPTR_TYPE_P (type))
6289    {
6290      if (expr != nullptr_node)
6291	{
6292	  if (complain & tf_error)
6293	    error ("%qE is not a valid template argument for type %qT "
6294		   "because it is of type %qT", expr, type, TREE_TYPE (expr));
6295	  return NULL_TREE;
6296	}
6297      return expr;
6298    }
6299  /* A template non-type parameter must be one of the above.  */
6300  else
6301    gcc_unreachable ();
6302
6303  /* Sanity check: did we actually convert the argument to the
6304     right type?  */
6305  gcc_assert (same_type_ignoring_top_level_qualifiers_p
6306	      (type, TREE_TYPE (expr)));
6307  return convert_from_reference (expr);
6308}
6309
6310/* Subroutine of coerce_template_template_parms, which returns 1 if
6311   PARM_PARM and ARG_PARM match using the rule for the template
6312   parameters of template template parameters. Both PARM and ARG are
6313   template parameters; the rest of the arguments are the same as for
6314   coerce_template_template_parms.
6315 */
6316static int
6317coerce_template_template_parm (tree parm,
6318                              tree arg,
6319                              tsubst_flags_t complain,
6320                              tree in_decl,
6321                              tree outer_args)
6322{
6323  if (arg == NULL_TREE || error_operand_p (arg)
6324      || parm == NULL_TREE || error_operand_p (parm))
6325    return 0;
6326
6327  if (TREE_CODE (arg) != TREE_CODE (parm))
6328    return 0;
6329
6330  switch (TREE_CODE (parm))
6331    {
6332    case TEMPLATE_DECL:
6333      /* We encounter instantiations of templates like
6334	 template <template <template <class> class> class TT>
6335	 class C;  */
6336      {
6337	tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6338	tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6339
6340	if (!coerce_template_template_parms
6341	    (parmparm, argparm, complain, in_decl, outer_args))
6342	  return 0;
6343      }
6344      /* Fall through.  */
6345
6346    case TYPE_DECL:
6347      if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6348	  && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6349	/* Argument is a parameter pack but parameter is not.  */
6350	return 0;
6351      break;
6352
6353    case PARM_DECL:
6354      /* The tsubst call is used to handle cases such as
6355
6356           template <int> class C {};
6357	   template <class T, template <T> class TT> class D {};
6358	   D<int, C> d;
6359
6360	 i.e. the parameter list of TT depends on earlier parameters.  */
6361      if (!uses_template_parms (TREE_TYPE (arg))
6362	  && !same_type_p
6363	        (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6364		 TREE_TYPE (arg)))
6365	return 0;
6366
6367      if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6368	  && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6369	/* Argument is a parameter pack but parameter is not.  */
6370	return 0;
6371
6372      break;
6373
6374    default:
6375      gcc_unreachable ();
6376    }
6377
6378  return 1;
6379}
6380
6381
6382/* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6383   template template parameters.  Both PARM_PARMS and ARG_PARMS are
6384   vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6385   or PARM_DECL.
6386
6387   Consider the example:
6388     template <class T> class A;
6389     template<template <class U> class TT> class B;
6390
6391   For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6392   the parameters to A, and OUTER_ARGS contains A.  */
6393
6394static int
6395coerce_template_template_parms (tree parm_parms,
6396				tree arg_parms,
6397				tsubst_flags_t complain,
6398				tree in_decl,
6399				tree outer_args)
6400{
6401  int nparms, nargs, i;
6402  tree parm, arg;
6403  int variadic_p = 0;
6404
6405  gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6406  gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6407
6408  nparms = TREE_VEC_LENGTH (parm_parms);
6409  nargs = TREE_VEC_LENGTH (arg_parms);
6410
6411  /* Determine whether we have a parameter pack at the end of the
6412     template template parameter's template parameter list.  */
6413  if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6414    {
6415      parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6416
6417      if (error_operand_p (parm))
6418	return 0;
6419
6420      switch (TREE_CODE (parm))
6421        {
6422        case TEMPLATE_DECL:
6423        case TYPE_DECL:
6424          if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6425            variadic_p = 1;
6426          break;
6427
6428        case PARM_DECL:
6429          if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6430            variadic_p = 1;
6431          break;
6432
6433        default:
6434          gcc_unreachable ();
6435        }
6436    }
6437
6438  if (nargs != nparms
6439      && !(variadic_p && nargs >= nparms - 1))
6440    return 0;
6441
6442  /* Check all of the template parameters except the parameter pack at
6443     the end (if any).  */
6444  for (i = 0; i < nparms - variadic_p; ++i)
6445    {
6446      if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6447          || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6448        continue;
6449
6450      parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6451      arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6452
6453      if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6454                                          outer_args))
6455	return 0;
6456
6457    }
6458
6459  if (variadic_p)
6460    {
6461      /* Check each of the template parameters in the template
6462	 argument against the template parameter pack at the end of
6463	 the template template parameter.  */
6464      if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6465	return 0;
6466
6467      parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6468
6469      for (; i < nargs; ++i)
6470        {
6471          if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6472            continue;
6473
6474          arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6475
6476          if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6477                                              outer_args))
6478            return 0;
6479        }
6480    }
6481
6482  return 1;
6483}
6484
6485/* Verifies that the deduced template arguments (in TARGS) for the
6486   template template parameters (in TPARMS) represent valid bindings,
6487   by comparing the template parameter list of each template argument
6488   to the template parameter list of its corresponding template
6489   template parameter, in accordance with DR150. This
6490   routine can only be called after all template arguments have been
6491   deduced. It will return TRUE if all of the template template
6492   parameter bindings are okay, FALSE otherwise.  */
6493bool
6494template_template_parm_bindings_ok_p (tree tparms, tree targs)
6495{
6496  int i, ntparms = TREE_VEC_LENGTH (tparms);
6497  bool ret = true;
6498
6499  /* We're dealing with template parms in this process.  */
6500  ++processing_template_decl;
6501
6502  targs = INNERMOST_TEMPLATE_ARGS (targs);
6503
6504  for (i = 0; i < ntparms; ++i)
6505    {
6506      tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6507      tree targ = TREE_VEC_ELT (targs, i);
6508
6509      if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6510	{
6511	  tree packed_args = NULL_TREE;
6512	  int idx, len = 1;
6513
6514	  if (ARGUMENT_PACK_P (targ))
6515	    {
6516	      /* Look inside the argument pack.  */
6517	      packed_args = ARGUMENT_PACK_ARGS (targ);
6518	      len = TREE_VEC_LENGTH (packed_args);
6519	    }
6520
6521	  for (idx = 0; idx < len; ++idx)
6522	    {
6523	      tree targ_parms = NULL_TREE;
6524
6525	      if (packed_args)
6526		/* Extract the next argument from the argument
6527		   pack.  */
6528		targ = TREE_VEC_ELT (packed_args, idx);
6529
6530	      if (PACK_EXPANSION_P (targ))
6531		/* Look at the pattern of the pack expansion.  */
6532		targ = PACK_EXPANSION_PATTERN (targ);
6533
6534	      /* Extract the template parameters from the template
6535		 argument.  */
6536	      if (TREE_CODE (targ) == TEMPLATE_DECL)
6537		targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6538	      else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6539		targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6540
6541	      /* Verify that we can coerce the template template
6542		 parameters from the template argument to the template
6543		 parameter.  This requires an exact match.  */
6544	      if (targ_parms
6545		  && !coerce_template_template_parms
6546		       (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6547			targ_parms,
6548			tf_none,
6549			tparm,
6550			targs))
6551		{
6552		  ret = false;
6553		  goto out;
6554		}
6555	    }
6556	}
6557    }
6558
6559 out:
6560
6561  --processing_template_decl;
6562  return ret;
6563}
6564
6565/* Since type attributes aren't mangled, we need to strip them from
6566   template type arguments.  */
6567
6568static tree
6569canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6570{
6571  tree mv;
6572  if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6573    return arg;
6574  mv = TYPE_MAIN_VARIANT (arg);
6575  arg = strip_typedefs (arg);
6576  if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6577      || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6578    {
6579      if (complain & tf_warning)
6580	warning (0, "ignoring attributes on template argument %qT", arg);
6581      arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6582      arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6583    }
6584  return arg;
6585}
6586
6587/* Convert the indicated template ARG as necessary to match the
6588   indicated template PARM.  Returns the converted ARG, or
6589   error_mark_node if the conversion was unsuccessful.  Error and
6590   warning messages are issued under control of COMPLAIN.  This
6591   conversion is for the Ith parameter in the parameter list.  ARGS is
6592   the full set of template arguments deduced so far.  */
6593
6594static tree
6595convert_template_argument (tree parm,
6596			   tree arg,
6597			   tree args,
6598			   tsubst_flags_t complain,
6599			   int i,
6600			   tree in_decl)
6601{
6602  tree orig_arg;
6603  tree val;
6604  int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6605
6606  if (parm == error_mark_node)
6607    return error_mark_node;
6608
6609  if (TREE_CODE (arg) == TREE_LIST
6610      && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6611    {
6612      /* The template argument was the name of some
6613	 member function.  That's usually
6614	 invalid, but static members are OK.  In any
6615	 case, grab the underlying fields/functions
6616	 and issue an error later if required.  */
6617      orig_arg = TREE_VALUE (arg);
6618      TREE_TYPE (arg) = unknown_type_node;
6619    }
6620
6621  orig_arg = arg;
6622
6623  requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6624  requires_type = (TREE_CODE (parm) == TYPE_DECL
6625		   || requires_tmpl_type);
6626
6627  /* When determining whether an argument pack expansion is a template,
6628     look at the pattern.  */
6629  if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6630    arg = PACK_EXPANSION_PATTERN (arg);
6631
6632  /* Deal with an injected-class-name used as a template template arg.  */
6633  if (requires_tmpl_type && CLASS_TYPE_P (arg))
6634    {
6635      tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6636      if (TREE_CODE (t) == TEMPLATE_DECL)
6637	{
6638	  if (cxx_dialect >= cxx11)
6639	    /* OK under DR 1004.  */;
6640	  else if (complain & tf_warning_or_error)
6641	    pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
6642		     " used as template template argument", TYPE_NAME (arg));
6643	  else if (flag_pedantic_errors)
6644	    t = arg;
6645
6646	  arg = t;
6647	}
6648    }
6649
6650  is_tmpl_type =
6651    ((TREE_CODE (arg) == TEMPLATE_DECL
6652      && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6653     || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
6654     || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6655     || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6656
6657  if (is_tmpl_type
6658      && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6659	  || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6660    arg = TYPE_STUB_DECL (arg);
6661
6662  is_type = TYPE_P (arg) || is_tmpl_type;
6663
6664  if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6665      && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6666    {
6667      if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6668	{
6669	  if (complain & tf_error)
6670	    error ("invalid use of destructor %qE as a type", orig_arg);
6671	  return error_mark_node;
6672	}
6673
6674      permerror (input_location,
6675		 "to refer to a type member of a template parameter, "
6676		 "use %<typename %E%>", orig_arg);
6677
6678      orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6679				     TREE_OPERAND (arg, 1),
6680				     typename_type,
6681				     complain);
6682      arg = orig_arg;
6683      is_type = 1;
6684    }
6685  if (is_type != requires_type)
6686    {
6687      if (in_decl)
6688	{
6689	  if (complain & tf_error)
6690	    {
6691	      error ("type/value mismatch at argument %d in template "
6692		     "parameter list for %qD",
6693		     i + 1, in_decl);
6694	      if (is_type)
6695		inform (input_location,
6696			"  expected a constant of type %qT, got %qT",
6697			TREE_TYPE (parm),
6698			(DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6699	      else if (requires_tmpl_type)
6700		inform (input_location,
6701			"  expected a class template, got %qE", orig_arg);
6702	      else
6703		inform (input_location,
6704			"  expected a type, got %qE", orig_arg);
6705	    }
6706	}
6707      return error_mark_node;
6708    }
6709  if (is_tmpl_type ^ requires_tmpl_type)
6710    {
6711      if (in_decl && (complain & tf_error))
6712	{
6713	  error ("type/value mismatch at argument %d in template "
6714		 "parameter list for %qD",
6715		 i + 1, in_decl);
6716	  if (is_tmpl_type)
6717	    inform (input_location,
6718		    "  expected a type, got %qT", DECL_NAME (arg));
6719	  else
6720	    inform (input_location,
6721		    "  expected a class template, got %qT", orig_arg);
6722	}
6723      return error_mark_node;
6724    }
6725
6726  if (is_type)
6727    {
6728      if (requires_tmpl_type)
6729	{
6730	  if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6731	    val = orig_arg;
6732	  else if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6733	    /* The number of argument required is not known yet.
6734	       Just accept it for now.  */
6735	    val = TREE_TYPE (arg);
6736	  else
6737	    {
6738	      tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6739	      tree argparm;
6740
6741	      /* Strip alias templates that are equivalent to another
6742		 template.  */
6743	      arg = get_underlying_template (arg);
6744              argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6745
6746	      if (coerce_template_template_parms (parmparm, argparm,
6747						  complain, in_decl,
6748						  args))
6749		{
6750		  val = arg;
6751
6752		  /* TEMPLATE_TEMPLATE_PARM node is preferred over
6753		     TEMPLATE_DECL.  */
6754		  if (val != error_mark_node)
6755                    {
6756                      if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6757                        val = TREE_TYPE (val);
6758		      if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6759			val = make_pack_expansion (val);
6760                    }
6761		}
6762	      else
6763		{
6764		  if (in_decl && (complain & tf_error))
6765		    {
6766		      error ("type/value mismatch at argument %d in "
6767			     "template parameter list for %qD",
6768			     i + 1, in_decl);
6769		      inform (input_location,
6770			      "  expected a template of type %qD, got %qT",
6771			      parm, orig_arg);
6772		    }
6773
6774		  val = error_mark_node;
6775		}
6776	    }
6777	}
6778      else
6779	val = orig_arg;
6780      /* We only form one instance of each template specialization.
6781	 Therefore, if we use a non-canonical variant (i.e., a
6782	 typedef), any future messages referring to the type will use
6783	 the typedef, which is confusing if those future uses do not
6784	 themselves also use the typedef.  */
6785      if (TYPE_P (val))
6786	val = canonicalize_type_argument (val, complain);
6787    }
6788  else
6789    {
6790      tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6791
6792      if (invalid_nontype_parm_type_p (t, complain))
6793	return error_mark_node;
6794
6795      if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6796	{
6797	  if (same_type_p (t, TREE_TYPE (orig_arg)))
6798	    val = orig_arg;
6799	  else
6800	    {
6801	      /* Not sure if this is reachable, but it doesn't hurt
6802		 to be robust.  */
6803	      error ("type mismatch in nontype parameter pack");
6804	      val = error_mark_node;
6805	    }
6806	}
6807      else if (!dependent_template_arg_p (orig_arg)
6808	       && !uses_template_parms (t))
6809	/* We used to call digest_init here.  However, digest_init
6810	   will report errors, which we don't want when complain
6811	   is zero.  More importantly, digest_init will try too
6812	   hard to convert things: for example, `0' should not be
6813	   converted to pointer type at this point according to
6814	   the standard.  Accepting this is not merely an
6815	   extension, since deciding whether or not these
6816	   conversions can occur is part of determining which
6817	   function template to call, or whether a given explicit
6818	   argument specification is valid.  */
6819	val = convert_nontype_argument (t, orig_arg, complain);
6820      else
6821	val = strip_typedefs_expr (orig_arg);
6822
6823      if (val == NULL_TREE)
6824	val = error_mark_node;
6825      else if (val == error_mark_node && (complain & tf_error))
6826	error ("could not convert template argument %qE to %qT",  orig_arg, t);
6827
6828      if (TREE_CODE (val) == SCOPE_REF)
6829	{
6830	  /* Strip typedefs from the SCOPE_REF.  */
6831	  tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6832	  tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6833						   complain);
6834	  val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6835				      QUALIFIED_NAME_IS_TEMPLATE (val));
6836	}
6837    }
6838
6839  return val;
6840}
6841
6842/* Coerces the remaining template arguments in INNER_ARGS (from
6843   ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6844   Returns the coerced argument pack. PARM_IDX is the position of this
6845   parameter in the template parameter list. ARGS is the original
6846   template argument list.  */
6847static tree
6848coerce_template_parameter_pack (tree parms,
6849                                int parm_idx,
6850                                tree args,
6851                                tree inner_args,
6852                                int arg_idx,
6853                                tree new_args,
6854                                int* lost,
6855                                tree in_decl,
6856                                tsubst_flags_t complain)
6857{
6858  tree parm = TREE_VEC_ELT (parms, parm_idx);
6859  int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6860  tree packed_args;
6861  tree argument_pack;
6862  tree packed_parms = NULL_TREE;
6863
6864  if (arg_idx > nargs)
6865    arg_idx = nargs;
6866
6867  if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
6868    {
6869      /* When the template parameter is a non-type template parameter pack
6870         or template template parameter pack whose type or template
6871         parameters use parameter packs, we know exactly how many arguments
6872         we are looking for.  Build a vector of the instantiated decls for
6873         these template parameters in PACKED_PARMS.  */
6874      /* We can't use make_pack_expansion here because it would interpret a
6875	 _DECL as a use rather than a declaration.  */
6876      tree decl = TREE_VALUE (parm);
6877      tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
6878      SET_PACK_EXPANSION_PATTERN (exp, decl);
6879      PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
6880      SET_TYPE_STRUCTURAL_EQUALITY (exp);
6881
6882      TREE_VEC_LENGTH (args)--;
6883      packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
6884      TREE_VEC_LENGTH (args)++;
6885
6886      if (packed_parms == error_mark_node)
6887        return error_mark_node;
6888
6889      /* If we're doing a partial instantiation of a member template,
6890         verify that all of the types used for the non-type
6891         template parameter pack are, in fact, valid for non-type
6892         template parameters.  */
6893      if (arg_idx < nargs
6894          && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6895        {
6896          int j, len = TREE_VEC_LENGTH (packed_parms);
6897          for (j = 0; j < len; ++j)
6898            {
6899              tree t = TREE_TYPE (TREE_VEC_ELT (packed_parms, j));
6900              if (invalid_nontype_parm_type_p (t, complain))
6901                return error_mark_node;
6902            }
6903	  /* We don't know how many args we have yet, just
6904	     use the unconverted ones for now.  */
6905	  return NULL_TREE;
6906        }
6907
6908      packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
6909    }
6910  else
6911    packed_args = make_tree_vec (nargs - arg_idx);
6912
6913  /* Convert the remaining arguments, which will be a part of the
6914     parameter pack "parm".  */
6915  for (; arg_idx < nargs; ++arg_idx)
6916    {
6917      tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6918      tree actual_parm = TREE_VALUE (parm);
6919      int pack_idx = arg_idx - parm_idx;
6920
6921      if (packed_parms)
6922        {
6923	  /* Once we've packed as many args as we have types, stop.  */
6924	  if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
6925	    break;
6926	  else if (PACK_EXPANSION_P (arg))
6927	    /* We don't know how many args we have yet, just
6928	       use the unconverted ones for now.  */
6929	    return NULL_TREE;
6930	  else
6931	    actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
6932        }
6933
6934      if (arg == error_mark_node)
6935	{
6936	  if (complain & tf_error)
6937	    error ("template argument %d is invalid", arg_idx + 1);
6938	}
6939      else
6940	arg = convert_template_argument (actual_parm,
6941					 arg, new_args, complain, parm_idx,
6942					 in_decl);
6943      if (arg == error_mark_node)
6944        (*lost)++;
6945      TREE_VEC_ELT (packed_args, pack_idx) = arg;
6946    }
6947
6948  if (arg_idx - parm_idx < TREE_VEC_LENGTH (packed_args)
6949      && TREE_VEC_LENGTH (packed_args) > 0)
6950    {
6951      if (complain & tf_error)
6952	error ("wrong number of template arguments (%d, should be %d)",
6953	       arg_idx - parm_idx, TREE_VEC_LENGTH (packed_args));
6954      return error_mark_node;
6955    }
6956
6957  if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6958      || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6959    argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6960  else
6961    {
6962      argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6963      TREE_TYPE (argument_pack)
6964        = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6965      TREE_CONSTANT (argument_pack) = 1;
6966    }
6967
6968  SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6969#ifdef ENABLE_CHECKING
6970  SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6971				       TREE_VEC_LENGTH (packed_args));
6972#endif
6973  return argument_pack;
6974}
6975
6976/* Returns the number of pack expansions in the template argument vector
6977   ARGS.  */
6978
6979static int
6980pack_expansion_args_count (tree args)
6981{
6982  int i;
6983  int count = 0;
6984  if (args)
6985    for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
6986      {
6987	tree elt = TREE_VEC_ELT (args, i);
6988	if (elt && PACK_EXPANSION_P (elt))
6989	  ++count;
6990      }
6991  return count;
6992}
6993
6994/* Convert all template arguments to their appropriate types, and
6995   return a vector containing the innermost resulting template
6996   arguments.  If any error occurs, return error_mark_node. Error and
6997   warning messages are issued under control of COMPLAIN.
6998
6999   If REQUIRE_ALL_ARGS is false, argument deduction will be performed
7000   for arguments not specified in ARGS.  Otherwise, if
7001   USE_DEFAULT_ARGS is true, default arguments will be used to fill in
7002   unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
7003   USE_DEFAULT_ARGS is false, then all arguments must be specified in
7004   ARGS.  */
7005
7006static tree
7007coerce_template_parms (tree parms,
7008		       tree args,
7009		       tree in_decl,
7010		       tsubst_flags_t complain,
7011		       bool require_all_args,
7012		       bool use_default_args)
7013{
7014  int nparms, nargs, parm_idx, arg_idx, lost = 0;
7015  tree orig_inner_args;
7016  tree inner_args;
7017  tree new_args;
7018  tree new_inner_args;
7019  int saved_unevaluated_operand;
7020  int saved_inhibit_evaluation_warnings;
7021
7022  /* When used as a boolean value, indicates whether this is a
7023     variadic template parameter list. Since it's an int, we can also
7024     subtract it from nparms to get the number of non-variadic
7025     parameters.  */
7026  int variadic_p = 0;
7027  int variadic_args_p = 0;
7028  int post_variadic_parms = 0;
7029
7030  /* Likewise for parameters with default arguments.  */
7031  int default_p = 0;
7032
7033  if (args == error_mark_node)
7034    return error_mark_node;
7035
7036  nparms = TREE_VEC_LENGTH (parms);
7037
7038  /* Determine if there are any parameter packs or default arguments.  */
7039  for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
7040    {
7041      tree parm = TREE_VEC_ELT (parms, parm_idx);
7042      if (variadic_p)
7043	++post_variadic_parms;
7044      if (template_parameter_pack_p (TREE_VALUE (parm)))
7045	++variadic_p;
7046      if (TREE_PURPOSE (parm))
7047	++default_p;
7048    }
7049
7050  inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
7051  /* If there are no parameters that follow a parameter pack, we need to
7052     expand any argument packs so that we can deduce a parameter pack from
7053     some non-packed args followed by an argument pack, as in variadic85.C.
7054     If there are such parameters, we need to leave argument packs intact
7055     so the arguments are assigned properly.  This can happen when dealing
7056     with a nested class inside a partial specialization of a class
7057     template, as in variadic92.C, or when deducing a template parameter pack
7058     from a sub-declarator, as in variadic114.C.  */
7059  if (!post_variadic_parms)
7060    inner_args = expand_template_argument_pack (inner_args);
7061
7062  /* Count any pack expansion args.  */
7063  variadic_args_p = pack_expansion_args_count (inner_args);
7064
7065  nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
7066  if ((nargs > nparms && !variadic_p)
7067      || (nargs < nparms - variadic_p
7068	  && require_all_args
7069	  && !variadic_args_p
7070	  && (!use_default_args
7071	      || (TREE_VEC_ELT (parms, nargs) != error_mark_node
7072                  && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
7073    {
7074      if (complain & tf_error)
7075	{
7076          if (variadic_p || default_p)
7077            {
7078              nparms -= variadic_p + default_p;
7079	      error ("wrong number of template arguments "
7080		     "(%d, should be at least %d)", nargs, nparms);
7081            }
7082	  else
7083	     error ("wrong number of template arguments "
7084		    "(%d, should be %d)", nargs, nparms);
7085
7086	  if (in_decl)
7087	    inform (input_location, "provided for %q+D", in_decl);
7088	}
7089
7090      return error_mark_node;
7091    }
7092  /* We can't pass a pack expansion to a non-pack parameter of an alias
7093     template (DR 1430).  */
7094  else if (in_decl && DECL_ALIAS_TEMPLATE_P (in_decl)
7095	   && variadic_args_p
7096	   && nargs - variadic_args_p < nparms - variadic_p)
7097    {
7098      if (complain & tf_error)
7099	{
7100	  for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
7101	    {
7102	      tree arg = TREE_VEC_ELT (inner_args, i);
7103	      tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
7104
7105	      if (PACK_EXPANSION_P (arg)
7106		  && !template_parameter_pack_p (parm))
7107		{
7108		  error ("pack expansion argument for non-pack parameter "
7109			 "%qD of alias template %qD", parm, in_decl);
7110		  inform (DECL_SOURCE_LOCATION (parm), "declared here");
7111		  goto found;
7112		}
7113	    }
7114	  gcc_unreachable ();
7115	found:;
7116	}
7117      return error_mark_node;
7118    }
7119
7120  /* We need to evaluate the template arguments, even though this
7121     template-id may be nested within a "sizeof".  */
7122  saved_unevaluated_operand = cp_unevaluated_operand;
7123  cp_unevaluated_operand = 0;
7124  saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
7125  c_inhibit_evaluation_warnings = 0;
7126  new_inner_args = make_tree_vec (nparms);
7127  new_args = add_outermost_template_args (args, new_inner_args);
7128  int pack_adjust = 0;
7129  for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
7130    {
7131      tree arg;
7132      tree parm;
7133
7134      /* Get the Ith template parameter.  */
7135      parm = TREE_VEC_ELT (parms, parm_idx);
7136
7137      if (parm == error_mark_node)
7138      {
7139        TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
7140        continue;
7141      }
7142
7143      /* Calculate the next argument.  */
7144      if (arg_idx < nargs)
7145	arg = TREE_VEC_ELT (inner_args, arg_idx);
7146      else
7147	arg = NULL_TREE;
7148
7149      if (template_parameter_pack_p (TREE_VALUE (parm))
7150	  && !(arg && ARGUMENT_PACK_P (arg)))
7151        {
7152	  /* Some arguments will be placed in the
7153	     template parameter pack PARM.  */
7154	  arg = coerce_template_parameter_pack (parms, parm_idx, args,
7155						inner_args, arg_idx,
7156						new_args, &lost,
7157						in_decl, complain);
7158
7159	  if (arg == NULL_TREE)
7160	    {
7161	      /* We don't know how many args we have yet, just use the
7162		 unconverted (and still packed) ones for now.  */
7163	      new_inner_args = orig_inner_args;
7164	      arg_idx = nargs;
7165	      break;
7166	    }
7167
7168          TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
7169
7170          /* Store this argument.  */
7171          if (arg == error_mark_node)
7172	    {
7173	      lost++;
7174	      /* We are done with all of the arguments.  */
7175	      arg_idx = nargs;
7176	    }
7177	  else
7178	    {
7179	      pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
7180	      arg_idx += pack_adjust;
7181	    }
7182
7183          continue;
7184        }
7185      else if (arg)
7186	{
7187          if (PACK_EXPANSION_P (arg))
7188            {
7189	      /* "If every valid specialization of a variadic template
7190		 requires an empty template parameter pack, the template is
7191		 ill-formed, no diagnostic required."  So check that the
7192		 pattern works with this parameter.  */
7193	      tree pattern = PACK_EXPANSION_PATTERN (arg);
7194	      tree conv = convert_template_argument (TREE_VALUE (parm),
7195						     pattern, new_args,
7196						     complain, parm_idx,
7197						     in_decl);
7198	      if (conv == error_mark_node)
7199		{
7200		  inform (input_location, "so any instantiation with a "
7201			 "non-empty parameter pack would be ill-formed");
7202		  ++lost;
7203		}
7204	      else if (TYPE_P (conv) && !TYPE_P (pattern))
7205		/* Recover from missing typename.  */
7206		TREE_VEC_ELT (inner_args, arg_idx)
7207		  = make_pack_expansion (conv);
7208
7209              /* We don't know how many args we have yet, just
7210                 use the unconverted ones for now.  */
7211              new_inner_args = inner_args;
7212	      arg_idx = nargs;
7213              break;
7214            }
7215        }
7216      else if (require_all_args)
7217	{
7218	  /* There must be a default arg in this case.  */
7219	  arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
7220				     complain, in_decl);
7221	  /* The position of the first default template argument,
7222	     is also the number of non-defaulted arguments in NEW_INNER_ARGS.
7223	     Record that.  */
7224	  if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7225	    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7226						 arg_idx - pack_adjust);
7227	}
7228      else
7229	break;
7230
7231      if (arg == error_mark_node)
7232	{
7233	  if (complain & tf_error)
7234	    error ("template argument %d is invalid", arg_idx + 1);
7235	}
7236      else if (!arg)
7237        /* This only occurs if there was an error in the template
7238           parameter list itself (which we would already have
7239           reported) that we are trying to recover from, e.g., a class
7240           template with a parameter list such as
7241           template<typename..., typename>.  */
7242	++lost;
7243      else
7244	arg = convert_template_argument (TREE_VALUE (parm),
7245					 arg, new_args, complain,
7246                                         parm_idx, in_decl);
7247
7248      if (arg == error_mark_node)
7249	lost++;
7250      TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
7251    }
7252  cp_unevaluated_operand = saved_unevaluated_operand;
7253  c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
7254
7255  if (variadic_p && arg_idx < nargs)
7256    {
7257      if (complain & tf_error)
7258	{
7259	  error ("wrong number of template arguments "
7260		 "(%d, should be %d)", nargs, arg_idx);
7261	  if (in_decl)
7262	    error ("provided for %q+D", in_decl);
7263	}
7264      return error_mark_node;
7265    }
7266
7267  if (lost)
7268    return error_mark_node;
7269
7270#ifdef ENABLE_CHECKING
7271  if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7272    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7273					 TREE_VEC_LENGTH (new_inner_args));
7274#endif
7275
7276  return new_inner_args;
7277}
7278
7279/* Like coerce_template_parms.  If PARMS represents all template
7280   parameters levels, this function returns a vector of vectors
7281   representing all the resulting argument levels.  Note that in this
7282   case, only the innermost arguments are coerced because the
7283   outermost ones are supposed to have been coerced already.
7284
7285   Otherwise, if PARMS represents only (the innermost) vector of
7286   parameters, this function returns a vector containing just the
7287   innermost resulting arguments.  */
7288
7289static tree
7290coerce_innermost_template_parms (tree parms,
7291				  tree args,
7292				  tree in_decl,
7293				  tsubst_flags_t complain,
7294				  bool require_all_args,
7295				  bool use_default_args)
7296{
7297  int parms_depth = TMPL_PARMS_DEPTH (parms);
7298  int args_depth = TMPL_ARGS_DEPTH (args);
7299  tree coerced_args;
7300
7301  if (parms_depth > 1)
7302    {
7303      coerced_args = make_tree_vec (parms_depth);
7304      tree level;
7305      int cur_depth;
7306
7307      for (level = parms, cur_depth = parms_depth;
7308	   parms_depth > 0 && level != NULL_TREE;
7309	   level = TREE_CHAIN (level), --cur_depth)
7310	{
7311	  tree l;
7312	  if (cur_depth == args_depth)
7313	    l = coerce_template_parms (TREE_VALUE (level),
7314				       args, in_decl, complain,
7315				       require_all_args,
7316				       use_default_args);
7317	  else
7318	    l = TMPL_ARGS_LEVEL (args, cur_depth);
7319
7320	  if (l == error_mark_node)
7321	    return error_mark_node;
7322
7323	  SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
7324	}
7325    }
7326  else
7327    coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
7328					  args, in_decl, complain,
7329					  require_all_args,
7330					  use_default_args);
7331  return coerced_args;
7332}
7333
7334/* Returns 1 if template args OT and NT are equivalent.  */
7335
7336static int
7337template_args_equal (tree ot, tree nt)
7338{
7339  if (nt == ot)
7340    return 1;
7341  if (nt == NULL_TREE || ot == NULL_TREE)
7342    return false;
7343
7344  if (TREE_CODE (nt) == TREE_VEC)
7345    /* For member templates */
7346    return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
7347  else if (PACK_EXPANSION_P (ot))
7348    return (PACK_EXPANSION_P (nt)
7349	    && template_args_equal (PACK_EXPANSION_PATTERN (ot),
7350				    PACK_EXPANSION_PATTERN (nt))
7351	    && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
7352				    PACK_EXPANSION_EXTRA_ARGS (nt)));
7353  else if (ARGUMENT_PACK_P (ot))
7354    {
7355      int i, len;
7356      tree opack, npack;
7357
7358      if (!ARGUMENT_PACK_P (nt))
7359	return 0;
7360
7361      opack = ARGUMENT_PACK_ARGS (ot);
7362      npack = ARGUMENT_PACK_ARGS (nt);
7363      len = TREE_VEC_LENGTH (opack);
7364      if (TREE_VEC_LENGTH (npack) != len)
7365	return 0;
7366      for (i = 0; i < len; ++i)
7367	if (!template_args_equal (TREE_VEC_ELT (opack, i),
7368				  TREE_VEC_ELT (npack, i)))
7369	  return 0;
7370      return 1;
7371    }
7372  else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
7373    {
7374      /* We get here probably because we are in the middle of substituting
7375         into the pattern of a pack expansion. In that case the
7376	 ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
7377	 interested in. So we want to use the initial pack argument for
7378	 the comparison.  */
7379      ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
7380      if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
7381	nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
7382      return template_args_equal (ot, nt);
7383    }
7384  else if (TYPE_P (nt))
7385    {
7386      if (!TYPE_P (ot))
7387	return false;
7388      /* Don't treat an alias template specialization with dependent
7389	 arguments as equivalent to its underlying type when used as a
7390	 template argument; we need them to be distinct so that we
7391	 substitute into the specialization arguments at instantiation
7392	 time.  And aliases can't be equivalent without being ==, so
7393	 we don't need to look any deeper.  */
7394      if (TYPE_ALIAS_P (nt) || TYPE_ALIAS_P (ot))
7395	return false;
7396      else
7397	return same_type_p (ot, nt);
7398    }
7399  else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
7400    return 0;
7401  else
7402    {
7403      /* Try to treat a template non-type argument that has been converted
7404	 to the parameter type as equivalent to one that hasn't yet.  */
7405      for (enum tree_code code1 = TREE_CODE (ot);
7406	   CONVERT_EXPR_CODE_P (code1)
7407	     || code1 == NON_LVALUE_EXPR;
7408	   code1 = TREE_CODE (ot))
7409	ot = TREE_OPERAND (ot, 0);
7410      for (enum tree_code code2 = TREE_CODE (nt);
7411	   CONVERT_EXPR_CODE_P (code2)
7412	     || code2 == NON_LVALUE_EXPR;
7413	   code2 = TREE_CODE (nt))
7414	nt = TREE_OPERAND (nt, 0);
7415
7416      return cp_tree_equal (ot, nt);
7417    }
7418}
7419
7420/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
7421   template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
7422   NEWARG_PTR with the offending arguments if they are non-NULL.  */
7423
7424static int
7425comp_template_args_with_info (tree oldargs, tree newargs,
7426			      tree *oldarg_ptr, tree *newarg_ptr)
7427{
7428  int i;
7429
7430  if (oldargs == newargs)
7431    return 1;
7432
7433  if (!oldargs || !newargs)
7434    return 0;
7435
7436  if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7437    return 0;
7438
7439  for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7440    {
7441      tree nt = TREE_VEC_ELT (newargs, i);
7442      tree ot = TREE_VEC_ELT (oldargs, i);
7443
7444      if (! template_args_equal (ot, nt))
7445	{
7446	  if (oldarg_ptr != NULL)
7447	    *oldarg_ptr = ot;
7448	  if (newarg_ptr != NULL)
7449	    *newarg_ptr = nt;
7450	  return 0;
7451	}
7452    }
7453  return 1;
7454}
7455
7456/* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7457   of template arguments.  Returns 0 otherwise.  */
7458
7459int
7460comp_template_args (tree oldargs, tree newargs)
7461{
7462  return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7463}
7464
7465static void
7466add_pending_template (tree d)
7467{
7468  tree ti = (TYPE_P (d)
7469	     ? CLASSTYPE_TEMPLATE_INFO (d)
7470	     : DECL_TEMPLATE_INFO (d));
7471  struct pending_template *pt;
7472  int level;
7473
7474  if (TI_PENDING_TEMPLATE_FLAG (ti))
7475    return;
7476
7477  /* We are called both from instantiate_decl, where we've already had a
7478     tinst_level pushed, and instantiate_template, where we haven't.
7479     Compensate.  */
7480  level = !current_tinst_level || current_tinst_level->decl != d;
7481
7482  if (level)
7483    push_tinst_level (d);
7484
7485  pt = ggc_alloc<pending_template> ();
7486  pt->next = NULL;
7487  pt->tinst = current_tinst_level;
7488  if (last_pending_template)
7489    last_pending_template->next = pt;
7490  else
7491    pending_templates = pt;
7492
7493  last_pending_template = pt;
7494
7495  TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7496
7497  if (level)
7498    pop_tinst_level ();
7499}
7500
7501
7502/* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7503   ARGLIST.  Valid choices for FNS are given in the cp-tree.def
7504   documentation for TEMPLATE_ID_EXPR.  */
7505
7506tree
7507lookup_template_function (tree fns, tree arglist)
7508{
7509  tree type;
7510
7511  if (fns == error_mark_node || arglist == error_mark_node)
7512    return error_mark_node;
7513
7514  gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7515
7516  if (!is_overloaded_fn (fns) && !identifier_p (fns))
7517    {
7518      error ("%q#D is not a function template", fns);
7519      return error_mark_node;
7520    }
7521
7522  if (BASELINK_P (fns))
7523    {
7524      BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7525					 unknown_type_node,
7526					 BASELINK_FUNCTIONS (fns),
7527					 arglist);
7528      return fns;
7529    }
7530
7531  type = TREE_TYPE (fns);
7532  if (TREE_CODE (fns) == OVERLOAD || !type)
7533    type = unknown_type_node;
7534
7535  return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7536}
7537
7538/* Within the scope of a template class S<T>, the name S gets bound
7539   (in build_self_reference) to a TYPE_DECL for the class, not a
7540   TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
7541   or one of its enclosing classes, and that type is a template,
7542   return the associated TEMPLATE_DECL.  Otherwise, the original
7543   DECL is returned.
7544
7545   Also handle the case when DECL is a TREE_LIST of ambiguous
7546   injected-class-names from different bases.  */
7547
7548tree
7549maybe_get_template_decl_from_type_decl (tree decl)
7550{
7551  if (decl == NULL_TREE)
7552    return decl;
7553
7554  /* DR 176: A lookup that finds an injected-class-name (10.2
7555     [class.member.lookup]) can result in an ambiguity in certain cases
7556     (for example, if it is found in more than one base class). If all of
7557     the injected-class-names that are found refer to specializations of
7558     the same class template, and if the name is followed by a
7559     template-argument-list, the reference refers to the class template
7560     itself and not a specialization thereof, and is not ambiguous.  */
7561  if (TREE_CODE (decl) == TREE_LIST)
7562    {
7563      tree t, tmpl = NULL_TREE;
7564      for (t = decl; t; t = TREE_CHAIN (t))
7565	{
7566	  tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7567	  if (!tmpl)
7568	    tmpl = elt;
7569	  else if (tmpl != elt)
7570	    break;
7571	}
7572      if (tmpl && t == NULL_TREE)
7573	return tmpl;
7574      else
7575	return decl;
7576    }
7577
7578  return (decl != NULL_TREE
7579	  && DECL_SELF_REFERENCE_P (decl)
7580	  && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7581    ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7582}
7583
7584/* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
7585   parameters, find the desired type.
7586
7587   D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7588
7589   IN_DECL, if non-NULL, is the template declaration we are trying to
7590   instantiate.
7591
7592   If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7593   the class we are looking up.
7594
7595   Issue error and warning messages under control of COMPLAIN.
7596
7597   If the template class is really a local class in a template
7598   function, then the FUNCTION_CONTEXT is the function in which it is
7599   being instantiated.
7600
7601   ??? Note that this function is currently called *twice* for each
7602   template-id: the first time from the parser, while creating the
7603   incomplete type (finish_template_type), and the second type during the
7604   real instantiation (instantiate_template_class). This is surely something
7605   that we want to avoid. It also causes some problems with argument
7606   coercion (see convert_nontype_argument for more information on this).  */
7607
7608static tree
7609lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7610			 int entering_scope, tsubst_flags_t complain)
7611{
7612  tree templ = NULL_TREE, parmlist;
7613  tree t;
7614  spec_entry **slot;
7615  spec_entry *entry;
7616  spec_entry elt;
7617  hashval_t hash;
7618
7619  if (identifier_p (d1))
7620    {
7621      tree value = innermost_non_namespace_value (d1);
7622      if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7623	templ = value;
7624      else
7625	{
7626	  if (context)
7627	    push_decl_namespace (context);
7628	  templ = lookup_name (d1);
7629	  templ = maybe_get_template_decl_from_type_decl (templ);
7630	  if (context)
7631	    pop_decl_namespace ();
7632	}
7633      if (templ)
7634	context = DECL_CONTEXT (templ);
7635    }
7636  else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7637    {
7638      tree type = TREE_TYPE (d1);
7639
7640      /* If we are declaring a constructor, say A<T>::A<T>, we will get
7641	 an implicit typename for the second A.  Deal with it.  */
7642      if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7643	type = TREE_TYPE (type);
7644
7645      if (CLASSTYPE_TEMPLATE_INFO (type))
7646	{
7647	  templ = CLASSTYPE_TI_TEMPLATE (type);
7648	  d1 = DECL_NAME (templ);
7649	}
7650    }
7651  else if (TREE_CODE (d1) == ENUMERAL_TYPE
7652	   || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7653    {
7654      templ = TYPE_TI_TEMPLATE (d1);
7655      d1 = DECL_NAME (templ);
7656    }
7657  else if (DECL_TYPE_TEMPLATE_P (d1))
7658    {
7659      templ = d1;
7660      d1 = DECL_NAME (templ);
7661      context = DECL_CONTEXT (templ);
7662    }
7663  else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
7664    {
7665      templ = d1;
7666      d1 = DECL_NAME (templ);
7667    }
7668
7669  /* Issue an error message if we didn't find a template.  */
7670  if (! templ)
7671    {
7672      if (complain & tf_error)
7673	error ("%qT is not a template", d1);
7674      return error_mark_node;
7675    }
7676
7677  if (TREE_CODE (templ) != TEMPLATE_DECL
7678	 /* Make sure it's a user visible template, if it was named by
7679	    the user.  */
7680      || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7681	  && !PRIMARY_TEMPLATE_P (templ)))
7682    {
7683      if (complain & tf_error)
7684	{
7685	  error ("non-template type %qT used as a template", d1);
7686	  if (in_decl)
7687	    error ("for template declaration %q+D", in_decl);
7688	}
7689      return error_mark_node;
7690    }
7691
7692  complain &= ~tf_user;
7693
7694  /* An alias that just changes the name of a template is equivalent to the
7695     other template, so if any of the arguments are pack expansions, strip
7696     the alias to avoid problems with a pack expansion passed to a non-pack
7697     alias template parameter (DR 1430).  */
7698  if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
7699    templ = get_underlying_template (templ);
7700
7701  if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7702    {
7703      /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7704	 template arguments */
7705
7706      tree parm;
7707      tree arglist2;
7708      tree outer;
7709
7710      parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7711
7712      /* Consider an example where a template template parameter declared as
7713
7714	   template <class T, class U = std::allocator<T> > class TT
7715
7716	 The template parameter level of T and U are one level larger than
7717	 of TT.  To proper process the default argument of U, say when an
7718	 instantiation `TT<int>' is seen, we need to build the full
7719	 arguments containing {int} as the innermost level.  Outer levels,
7720	 available when not appearing as default template argument, can be
7721	 obtained from the arguments of the enclosing template.
7722
7723	 Suppose that TT is later substituted with std::vector.  The above
7724	 instantiation is `TT<int, std::allocator<T> >' with TT at
7725	 level 1, and T at level 2, while the template arguments at level 1
7726	 becomes {std::vector} and the inner level 2 is {int}.  */
7727
7728      outer = DECL_CONTEXT (templ);
7729      if (outer)
7730	outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7731      else if (current_template_parms)
7732	/* This is an argument of the current template, so we haven't set
7733	   DECL_CONTEXT yet.  */
7734	outer = current_template_args ();
7735
7736      if (outer)
7737	arglist = add_to_template_args (outer, arglist);
7738
7739      arglist2 = coerce_template_parms (parmlist, arglist, templ,
7740					complain,
7741					/*require_all_args=*/true,
7742					/*use_default_args=*/true);
7743      if (arglist2 == error_mark_node
7744	  || (!uses_template_parms (arglist2)
7745	      && check_instantiated_args (templ, arglist2, complain)))
7746	return error_mark_node;
7747
7748      parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7749      return parm;
7750    }
7751  else
7752    {
7753      tree template_type = TREE_TYPE (templ);
7754      tree gen_tmpl;
7755      tree type_decl;
7756      tree found = NULL_TREE;
7757      int arg_depth;
7758      int parm_depth;
7759      int is_dependent_type;
7760      int use_partial_inst_tmpl = false;
7761
7762      if (template_type == error_mark_node)
7763	/* An error occurred while building the template TEMPL, and a
7764	   diagnostic has most certainly been emitted for that
7765	   already.  Let's propagate that error.  */
7766	return error_mark_node;
7767
7768      gen_tmpl = most_general_template (templ);
7769      parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7770      parm_depth = TMPL_PARMS_DEPTH (parmlist);
7771      arg_depth = TMPL_ARGS_DEPTH (arglist);
7772
7773      if (arg_depth == 1 && parm_depth > 1)
7774	{
7775	  /* We've been given an incomplete set of template arguments.
7776	     For example, given:
7777
7778	       template <class T> struct S1 {
7779		 template <class U> struct S2 {};
7780		 template <class U> struct S2<U*> {};
7781		};
7782
7783	     we will be called with an ARGLIST of `U*', but the
7784	     TEMPLATE will be `template <class T> template
7785	     <class U> struct S1<T>::S2'.  We must fill in the missing
7786	     arguments.  */
7787	  arglist
7788	    = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7789					   arglist);
7790	  arg_depth = TMPL_ARGS_DEPTH (arglist);
7791	}
7792
7793      /* Now we should have enough arguments.  */
7794      gcc_assert (parm_depth == arg_depth);
7795
7796      /* From here on, we're only interested in the most general
7797	 template.  */
7798
7799      /* Calculate the BOUND_ARGS.  These will be the args that are
7800	 actually tsubst'd into the definition to create the
7801	 instantiation.  */
7802      if (parm_depth > 1)
7803	{
7804	  /* We have multiple levels of arguments to coerce, at once.  */
7805	  int i;
7806	  int saved_depth = TMPL_ARGS_DEPTH (arglist);
7807
7808	  tree bound_args = make_tree_vec (parm_depth);
7809
7810	  for (i = saved_depth,
7811		 t = DECL_TEMPLATE_PARMS (gen_tmpl);
7812	       i > 0 && t != NULL_TREE;
7813	       --i, t = TREE_CHAIN (t))
7814	    {
7815	      tree a;
7816	      if (i == saved_depth)
7817		a = coerce_template_parms (TREE_VALUE (t),
7818					   arglist, gen_tmpl,
7819					   complain,
7820					   /*require_all_args=*/true,
7821					   /*use_default_args=*/true);
7822	      else
7823		/* Outer levels should have already been coerced.  */
7824		a = TMPL_ARGS_LEVEL (arglist, i);
7825
7826	      /* Don't process further if one of the levels fails.  */
7827	      if (a == error_mark_node)
7828		{
7829		  /* Restore the ARGLIST to its full size.  */
7830		  TREE_VEC_LENGTH (arglist) = saved_depth;
7831		  return error_mark_node;
7832		}
7833
7834	      SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7835
7836	      /* We temporarily reduce the length of the ARGLIST so
7837		 that coerce_template_parms will see only the arguments
7838		 corresponding to the template parameters it is
7839		 examining.  */
7840	      TREE_VEC_LENGTH (arglist)--;
7841	    }
7842
7843	  /* Restore the ARGLIST to its full size.  */
7844	  TREE_VEC_LENGTH (arglist) = saved_depth;
7845
7846	  arglist = bound_args;
7847	}
7848      else
7849	arglist
7850	  = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7851				   INNERMOST_TEMPLATE_ARGS (arglist),
7852				   gen_tmpl,
7853				   complain,
7854				   /*require_all_args=*/true,
7855				   /*use_default_args=*/true);
7856
7857      if (arglist == error_mark_node)
7858	/* We were unable to bind the arguments.  */
7859	return error_mark_node;
7860
7861      /* In the scope of a template class, explicit references to the
7862	 template class refer to the type of the template, not any
7863	 instantiation of it.  For example, in:
7864
7865	   template <class T> class C { void f(C<T>); }
7866
7867	 the `C<T>' is just the same as `C'.  Outside of the
7868	 class, however, such a reference is an instantiation.  */
7869      if ((entering_scope
7870	   || !PRIMARY_TEMPLATE_P (gen_tmpl)
7871	   || currently_open_class (template_type))
7872	  /* comp_template_args is expensive, check it last.  */
7873	  && comp_template_args (TYPE_TI_ARGS (template_type),
7874				 arglist))
7875	return template_type;
7876
7877      /* If we already have this specialization, return it.  */
7878      elt.tmpl = gen_tmpl;
7879      elt.args = arglist;
7880      hash = spec_hasher::hash (&elt);
7881      entry = type_specializations->find_with_hash (&elt, hash);
7882
7883      if (entry)
7884	return entry->spec;
7885
7886      is_dependent_type = uses_template_parms (arglist);
7887
7888      /* If the deduced arguments are invalid, then the binding
7889	 failed.  */
7890      if (!is_dependent_type
7891	  && check_instantiated_args (gen_tmpl,
7892				      INNERMOST_TEMPLATE_ARGS (arglist),
7893				      complain))
7894	return error_mark_node;
7895
7896      if (!is_dependent_type
7897	  && !PRIMARY_TEMPLATE_P (gen_tmpl)
7898	  && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7899	  && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7900	{
7901	  found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7902				      DECL_NAME (gen_tmpl),
7903				      /*tag_scope=*/ts_global);
7904	  return found;
7905	}
7906
7907      context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7908			complain, in_decl);
7909      if (context == error_mark_node)
7910	return error_mark_node;
7911
7912      if (!context)
7913	context = global_namespace;
7914
7915      /* Create the type.  */
7916      if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7917	{
7918	  /* The user referred to a specialization of an alias
7919	    template represented by GEN_TMPL.
7920
7921	    [temp.alias]/2 says:
7922
7923	        When a template-id refers to the specialization of an
7924		alias template, it is equivalent to the associated
7925		type obtained by substitution of its
7926		template-arguments for the template-parameters in the
7927		type-id of the alias template.  */
7928
7929	  t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7930	  /* Note that the call above (by indirectly calling
7931	     register_specialization in tsubst_decl) registers the
7932	     TYPE_DECL representing the specialization of the alias
7933	     template.  So next time someone substitutes ARGLIST for
7934	     the template parms into the alias template (GEN_TMPL),
7935	     she'll get that TYPE_DECL back.  */
7936
7937	  if (t == error_mark_node)
7938	    return t;
7939	}
7940      else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7941	{
7942	  if (!is_dependent_type)
7943	    {
7944	      set_current_access_from_decl (TYPE_NAME (template_type));
7945	      t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7946			      tsubst (ENUM_UNDERLYING_TYPE (template_type),
7947				      arglist, complain, in_decl),
7948			      SCOPED_ENUM_P (template_type), NULL);
7949
7950	      if (t == error_mark_node)
7951		return t;
7952	    }
7953	  else
7954            {
7955              /* We don't want to call start_enum for this type, since
7956                 the values for the enumeration constants may involve
7957                 template parameters.  And, no one should be interested
7958                 in the enumeration constants for such a type.  */
7959              t = cxx_make_type (ENUMERAL_TYPE);
7960              SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7961            }
7962          SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7963	  ENUM_FIXED_UNDERLYING_TYPE_P (t)
7964	    = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7965	}
7966      else if (CLASS_TYPE_P (template_type))
7967	{
7968	  t = make_class_type (TREE_CODE (template_type));
7969	  CLASSTYPE_DECLARED_CLASS (t)
7970	    = CLASSTYPE_DECLARED_CLASS (template_type);
7971	  SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7972	  TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7973
7974	  /* A local class.  Make sure the decl gets registered properly.  */
7975	  if (context == current_function_decl)
7976	    pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7977
7978	  if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7979	    /* This instantiation is another name for the primary
7980	       template type. Set the TYPE_CANONICAL field
7981	       appropriately. */
7982	    TYPE_CANONICAL (t) = template_type;
7983	  else if (any_template_arguments_need_structural_equality_p (arglist))
7984	    /* Some of the template arguments require structural
7985	       equality testing, so this template class requires
7986	       structural equality testing. */
7987	    SET_TYPE_STRUCTURAL_EQUALITY (t);
7988	}
7989      else
7990	gcc_unreachable ();
7991
7992      /* If we called start_enum or pushtag above, this information
7993	 will already be set up.  */
7994      if (!TYPE_NAME (t))
7995	{
7996	  TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7997
7998	  type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7999	  DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
8000	  DECL_SOURCE_LOCATION (type_decl)
8001	    = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
8002	}
8003      else
8004	type_decl = TYPE_NAME (t);
8005
8006      if (CLASS_TYPE_P (template_type))
8007	{
8008	  TREE_PRIVATE (type_decl)
8009	    = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
8010	  TREE_PROTECTED (type_decl)
8011	    = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
8012	  if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
8013	    {
8014	      DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
8015	      DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
8016	    }
8017	}
8018
8019      if (OVERLOAD_TYPE_P (t)
8020	  && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
8021	{
8022	  if (tree attributes
8023	      = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (template_type)))
8024	    {
8025	      if (!TREE_CHAIN (attributes))
8026		TYPE_ATTRIBUTES (t) = attributes;
8027	      else
8028		TYPE_ATTRIBUTES (t)
8029		  = build_tree_list (TREE_PURPOSE (attributes),
8030				     TREE_VALUE (attributes));
8031	    }
8032	}
8033
8034      /* Let's consider the explicit specialization of a member
8035         of a class template specialization that is implicitly instantiated,
8036	 e.g.:
8037	     template<class T>
8038	     struct S
8039	     {
8040	       template<class U> struct M {}; //#0
8041	     };
8042
8043	     template<>
8044	     template<>
8045	     struct S<int>::M<char> //#1
8046	     {
8047	       int i;
8048	     };
8049	[temp.expl.spec]/4 says this is valid.
8050
8051	In this case, when we write:
8052	S<int>::M<char> m;
8053
8054	M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
8055	the one of #0.
8056
8057	When we encounter #1, we want to store the partial instantiation
8058	of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
8059
8060	For all cases other than this "explicit specialization of member of a
8061	class template", we just want to store the most general template into
8062	the CLASSTYPE_TI_TEMPLATE of M.
8063
8064	This case of "explicit specialization of member of a class template"
8065	only happens when:
8066	1/ the enclosing class is an instantiation of, and therefore not
8067	the same as, the context of the most general template, and
8068	2/ we aren't looking at the partial instantiation itself, i.e.
8069	the innermost arguments are not the same as the innermost parms of
8070	the most general template.
8071
8072	So it's only when 1/ and 2/ happens that we want to use the partial
8073	instantiation of the member template in lieu of its most general
8074	template.  */
8075
8076      if (PRIMARY_TEMPLATE_P (gen_tmpl)
8077	  && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
8078	  /* the enclosing class must be an instantiation...  */
8079	  && CLASS_TYPE_P (context)
8080	  && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
8081	{
8082	  tree partial_inst_args;
8083	  TREE_VEC_LENGTH (arglist)--;
8084	  ++processing_template_decl;
8085	  partial_inst_args =
8086	    tsubst (INNERMOST_TEMPLATE_ARGS
8087			(TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
8088		    arglist, complain, NULL_TREE);
8089	  --processing_template_decl;
8090	  TREE_VEC_LENGTH (arglist)++;
8091	  use_partial_inst_tmpl =
8092	    /*...and we must not be looking at the partial instantiation
8093	     itself. */
8094	    !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
8095				 partial_inst_args);
8096	}
8097
8098      if (!use_partial_inst_tmpl)
8099	/* This case is easy; there are no member templates involved.  */
8100	found = gen_tmpl;
8101      else
8102	{
8103	  /* This is a full instantiation of a member template.  Find
8104	     the partial instantiation of which this is an instance.  */
8105
8106	  /* Temporarily reduce by one the number of levels in the ARGLIST
8107	     so as to avoid comparing the last set of arguments.  */
8108	  TREE_VEC_LENGTH (arglist)--;
8109	  found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
8110	  TREE_VEC_LENGTH (arglist)++;
8111	  /* FOUND is either a proper class type, or an alias
8112	     template specialization.  In the later case, it's a
8113	     TYPE_DECL, resulting from the substituting of arguments
8114	     for parameters in the TYPE_DECL of the alias template
8115	     done earlier.  So be careful while getting the template
8116	     of FOUND.  */
8117	  found = TREE_CODE (found) == TYPE_DECL
8118	    ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
8119	    : CLASSTYPE_TI_TEMPLATE (found);
8120	}
8121
8122      SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
8123
8124      elt.spec = t;
8125      slot = type_specializations->find_slot_with_hash (&elt, hash, INSERT);
8126      entry = ggc_alloc<spec_entry> ();
8127      *entry = elt;
8128      *slot = entry;
8129
8130      /* Note this use of the partial instantiation so we can check it
8131	 later in maybe_process_partial_specialization.  */
8132      DECL_TEMPLATE_INSTANTIATIONS (found)
8133	= tree_cons (arglist, t,
8134		     DECL_TEMPLATE_INSTANTIATIONS (found));
8135
8136      if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
8137	  && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
8138	/* Now that the type has been registered on the instantiations
8139	   list, we set up the enumerators.  Because the enumeration
8140	   constants may involve the enumeration type itself, we make
8141	   sure to register the type first, and then create the
8142	   constants.  That way, doing tsubst_expr for the enumeration
8143	   constants won't result in recursive calls here; we'll find
8144	   the instantiation and exit above.  */
8145	tsubst_enum (template_type, t, arglist);
8146
8147      if (CLASS_TYPE_P (template_type) && is_dependent_type)
8148	/* If the type makes use of template parameters, the
8149	   code that generates debugging information will crash.  */
8150	DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
8151
8152      /* Possibly limit visibility based on template args.  */
8153      TREE_PUBLIC (type_decl) = 1;
8154      determine_visibility (type_decl);
8155
8156      inherit_targ_abi_tags (t);
8157
8158      return t;
8159    }
8160}
8161
8162/* Wrapper for lookup_template_class_1.  */
8163
8164tree
8165lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
8166                       int entering_scope, tsubst_flags_t complain)
8167{
8168  tree ret;
8169  timevar_push (TV_TEMPLATE_INST);
8170  ret = lookup_template_class_1 (d1, arglist, in_decl, context,
8171                                 entering_scope, complain);
8172  timevar_pop (TV_TEMPLATE_INST);
8173  return ret;
8174}
8175
8176/* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST.
8177   The type of the expression is the unknown_type_node since the
8178   template-id could refer to an explicit or partial specialization. */
8179
8180tree
8181lookup_template_variable (tree templ, tree arglist)
8182{
8183  tree type = NULL_TREE;
8184  return build2 (TEMPLATE_ID_EXPR, type, templ, arglist);
8185}
8186
8187/* Instantiate a variable declaration from a TEMPLATE_ID_EXPR for use. */
8188
8189tree
8190finish_template_variable (tree var, tsubst_flags_t complain)
8191{
8192  tree templ = TREE_OPERAND (var, 0);
8193
8194  tree arglist = TREE_OPERAND (var, 1);
8195  tree tmpl_args = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (templ));
8196  arglist = add_outermost_template_args (tmpl_args, arglist);
8197
8198  tree parms = DECL_TEMPLATE_PARMS (templ);
8199  arglist = coerce_innermost_template_parms (parms, arglist, templ, complain,
8200					     /*req_all*/true,
8201					     /*use_default*/true);
8202
8203  return instantiate_template (templ, arglist, complain);
8204}
8205
8206struct pair_fn_data
8207{
8208  tree_fn_t fn;
8209  void *data;
8210  /* True when we should also visit template parameters that occur in
8211     non-deduced contexts.  */
8212  bool include_nondeduced_p;
8213  hash_set<tree> *visited;
8214};
8215
8216/* Called from for_each_template_parm via walk_tree.  */
8217
8218static tree
8219for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
8220{
8221  tree t = *tp;
8222  struct pair_fn_data *pfd = (struct pair_fn_data *) d;
8223  tree_fn_t fn = pfd->fn;
8224  void *data = pfd->data;
8225
8226  if (TYPE_P (t)
8227      && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
8228      && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
8229				 pfd->include_nondeduced_p))
8230    return error_mark_node;
8231
8232  switch (TREE_CODE (t))
8233    {
8234    case RECORD_TYPE:
8235      if (TYPE_PTRMEMFUNC_P (t))
8236	break;
8237      /* Fall through.  */
8238
8239    case UNION_TYPE:
8240    case ENUMERAL_TYPE:
8241      if (!TYPE_TEMPLATE_INFO (t))
8242	*walk_subtrees = 0;
8243      else if (for_each_template_parm (TYPE_TI_ARGS (t),
8244				       fn, data, pfd->visited,
8245				       pfd->include_nondeduced_p))
8246	return error_mark_node;
8247      break;
8248
8249    case INTEGER_TYPE:
8250      if (for_each_template_parm (TYPE_MIN_VALUE (t),
8251				  fn, data, pfd->visited,
8252				  pfd->include_nondeduced_p)
8253	  || for_each_template_parm (TYPE_MAX_VALUE (t),
8254				     fn, data, pfd->visited,
8255				     pfd->include_nondeduced_p))
8256	return error_mark_node;
8257      break;
8258
8259    case METHOD_TYPE:
8260      /* Since we're not going to walk subtrees, we have to do this
8261	 explicitly here.  */
8262      if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
8263				  pfd->visited, pfd->include_nondeduced_p))
8264	return error_mark_node;
8265      /* Fall through.  */
8266
8267    case FUNCTION_TYPE:
8268      /* Check the return type.  */
8269      if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8270				  pfd->include_nondeduced_p))
8271	return error_mark_node;
8272
8273      /* Check the parameter types.  Since default arguments are not
8274	 instantiated until they are needed, the TYPE_ARG_TYPES may
8275	 contain expressions that involve template parameters.  But,
8276	 no-one should be looking at them yet.  And, once they're
8277	 instantiated, they don't contain template parameters, so
8278	 there's no point in looking at them then, either.  */
8279      {
8280	tree parm;
8281
8282	for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
8283	  if (for_each_template_parm (TREE_VALUE (parm), fn, data,
8284				      pfd->visited, pfd->include_nondeduced_p))
8285	    return error_mark_node;
8286
8287	/* Since we've already handled the TYPE_ARG_TYPES, we don't
8288	   want walk_tree walking into them itself.  */
8289	*walk_subtrees = 0;
8290      }
8291      break;
8292
8293    case TYPEOF_TYPE:
8294    case UNDERLYING_TYPE:
8295      if (pfd->include_nondeduced_p
8296	  && for_each_template_parm (TYPE_VALUES_RAW (t), fn, data,
8297				     pfd->visited,
8298				     pfd->include_nondeduced_p))
8299	return error_mark_node;
8300      break;
8301
8302    case FUNCTION_DECL:
8303    case VAR_DECL:
8304      if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
8305	  && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
8306				     pfd->visited, pfd->include_nondeduced_p))
8307	return error_mark_node;
8308      /* Fall through.  */
8309
8310    case PARM_DECL:
8311    case CONST_DECL:
8312      if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
8313	  && for_each_template_parm (DECL_INITIAL (t), fn, data,
8314				     pfd->visited, pfd->include_nondeduced_p))
8315	return error_mark_node;
8316      if (DECL_CONTEXT (t)
8317	  && pfd->include_nondeduced_p
8318	  && for_each_template_parm (DECL_CONTEXT (t), fn, data,
8319				     pfd->visited, pfd->include_nondeduced_p))
8320	return error_mark_node;
8321      break;
8322
8323    case BOUND_TEMPLATE_TEMPLATE_PARM:
8324      /* Record template parameters such as `T' inside `TT<T>'.  */
8325      if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
8326				  pfd->include_nondeduced_p))
8327	return error_mark_node;
8328      /* Fall through.  */
8329
8330    case TEMPLATE_TEMPLATE_PARM:
8331    case TEMPLATE_TYPE_PARM:
8332    case TEMPLATE_PARM_INDEX:
8333      if (fn && (*fn)(t, data))
8334	return error_mark_node;
8335      else if (!fn)
8336	return error_mark_node;
8337      break;
8338
8339    case TEMPLATE_DECL:
8340      /* A template template parameter is encountered.  */
8341      if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
8342	  && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8343				     pfd->include_nondeduced_p))
8344	return error_mark_node;
8345
8346      /* Already substituted template template parameter */
8347      *walk_subtrees = 0;
8348      break;
8349
8350    case TYPENAME_TYPE:
8351      if (!fn
8352	  || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
8353				     data, pfd->visited,
8354				     pfd->include_nondeduced_p))
8355	return error_mark_node;
8356      break;
8357
8358    case CONSTRUCTOR:
8359      if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
8360	  && pfd->include_nondeduced_p
8361	  && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
8362				     (TREE_TYPE (t)), fn, data,
8363				     pfd->visited, pfd->include_nondeduced_p))
8364	return error_mark_node;
8365      break;
8366
8367    case INDIRECT_REF:
8368    case COMPONENT_REF:
8369      /* If there's no type, then this thing must be some expression
8370	 involving template parameters.  */
8371      if (!fn && !TREE_TYPE (t))
8372	return error_mark_node;
8373      break;
8374
8375    case MODOP_EXPR:
8376    case CAST_EXPR:
8377    case IMPLICIT_CONV_EXPR:
8378    case REINTERPRET_CAST_EXPR:
8379    case CONST_CAST_EXPR:
8380    case STATIC_CAST_EXPR:
8381    case DYNAMIC_CAST_EXPR:
8382    case ARROW_EXPR:
8383    case DOTSTAR_EXPR:
8384    case TYPEID_EXPR:
8385    case PSEUDO_DTOR_EXPR:
8386      if (!fn)
8387	return error_mark_node;
8388      break;
8389
8390    default:
8391      break;
8392    }
8393
8394  /* We didn't find any template parameters we liked.  */
8395  return NULL_TREE;
8396}
8397
8398/* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
8399   BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
8400   call FN with the parameter and the DATA.
8401   If FN returns nonzero, the iteration is terminated, and
8402   for_each_template_parm returns 1.  Otherwise, the iteration
8403   continues.  If FN never returns a nonzero value, the value
8404   returned by for_each_template_parm is 0.  If FN is NULL, it is
8405   considered to be the function which always returns 1.
8406
8407   If INCLUDE_NONDEDUCED_P, then this routine will also visit template
8408   parameters that occur in non-deduced contexts.  When false, only
8409   visits those template parameters that can be deduced.  */
8410
8411static int
8412for_each_template_parm (tree t, tree_fn_t fn, void* data,
8413			hash_set<tree> *visited,
8414			bool include_nondeduced_p)
8415{
8416  struct pair_fn_data pfd;
8417  int result;
8418
8419  /* Set up.  */
8420  pfd.fn = fn;
8421  pfd.data = data;
8422  pfd.include_nondeduced_p = include_nondeduced_p;
8423
8424  /* Walk the tree.  (Conceptually, we would like to walk without
8425     duplicates, but for_each_template_parm_r recursively calls
8426     for_each_template_parm, so we would need to reorganize a fair
8427     bit to use walk_tree_without_duplicates, so we keep our own
8428     visited list.)  */
8429  if (visited)
8430    pfd.visited = visited;
8431  else
8432    pfd.visited = new hash_set<tree>;
8433  result = cp_walk_tree (&t,
8434		         for_each_template_parm_r,
8435		         &pfd,
8436		         pfd.visited) != NULL_TREE;
8437
8438  /* Clean up.  */
8439  if (!visited)
8440    {
8441      delete pfd.visited;
8442      pfd.visited = 0;
8443    }
8444
8445  return result;
8446}
8447
8448/* Returns true if T depends on any template parameter.  */
8449
8450int
8451uses_template_parms (tree t)
8452{
8453  if (t == NULL_TREE)
8454    return false;
8455
8456  bool dependent_p;
8457  int saved_processing_template_decl;
8458
8459  saved_processing_template_decl = processing_template_decl;
8460  if (!saved_processing_template_decl)
8461    processing_template_decl = 1;
8462  if (TYPE_P (t))
8463    dependent_p = dependent_type_p (t);
8464  else if (TREE_CODE (t) == TREE_VEC)
8465    dependent_p = any_dependent_template_arguments_p (t);
8466  else if (TREE_CODE (t) == TREE_LIST)
8467    dependent_p = (uses_template_parms (TREE_VALUE (t))
8468		   || uses_template_parms (TREE_CHAIN (t)));
8469  else if (TREE_CODE (t) == TYPE_DECL)
8470    dependent_p = dependent_type_p (TREE_TYPE (t));
8471  else if (DECL_P (t)
8472	   || EXPR_P (t)
8473	   || TREE_CODE (t) == TEMPLATE_PARM_INDEX
8474	   || TREE_CODE (t) == OVERLOAD
8475	   || BASELINK_P (t)
8476	   || identifier_p (t)
8477	   || TREE_CODE (t) == TRAIT_EXPR
8478	   || TREE_CODE (t) == CONSTRUCTOR
8479	   || CONSTANT_CLASS_P (t))
8480    dependent_p = (type_dependent_expression_p (t)
8481		   || value_dependent_expression_p (t));
8482  else
8483    {
8484      gcc_assert (t == error_mark_node);
8485      dependent_p = false;
8486    }
8487
8488  processing_template_decl = saved_processing_template_decl;
8489
8490  return dependent_p;
8491}
8492
8493/* Returns true iff current_function_decl is an incompletely instantiated
8494   template.  Useful instead of processing_template_decl because the latter
8495   is set to 0 during instantiate_non_dependent_expr.  */
8496
8497bool
8498in_template_function (void)
8499{
8500  tree fn = current_function_decl;
8501  bool ret;
8502  ++processing_template_decl;
8503  ret = (fn && DECL_LANG_SPECIFIC (fn)
8504	 && DECL_TEMPLATE_INFO (fn)
8505	 && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
8506  --processing_template_decl;
8507  return ret;
8508}
8509
8510/* Returns true if T depends on any template parameter with level LEVEL.  */
8511
8512int
8513uses_template_parms_level (tree t, int level)
8514{
8515  return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
8516				 /*include_nondeduced_p=*/true);
8517}
8518
8519/* Returns TRUE iff INST is an instantiation we don't need to do in an
8520   ill-formed translation unit, i.e. a variable or function that isn't
8521   usable in a constant expression.  */
8522
8523static inline bool
8524neglectable_inst_p (tree d)
8525{
8526  return (DECL_P (d)
8527	  && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8528	       : decl_maybe_constant_var_p (d)));
8529}
8530
8531/* Returns TRUE iff we should refuse to instantiate DECL because it's
8532   neglectable and instantiated from within an erroneous instantiation.  */
8533
8534static bool
8535limit_bad_template_recursion (tree decl)
8536{
8537  struct tinst_level *lev = current_tinst_level;
8538  int errs = errorcount + sorrycount;
8539  if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8540    return false;
8541
8542  for (; lev; lev = lev->next)
8543    if (neglectable_inst_p (lev->decl))
8544      break;
8545
8546  return (lev && errs > lev->errors);
8547}
8548
8549static int tinst_depth;
8550extern int max_tinst_depth;
8551int depth_reached;
8552
8553static GTY(()) struct tinst_level *last_error_tinst_level;
8554
8555/* We're starting to instantiate D; record the template instantiation context
8556   for diagnostics and to restore it later.  */
8557
8558bool
8559push_tinst_level (tree d)
8560{
8561  return push_tinst_level_loc (d, input_location);
8562}
8563
8564/* We're starting to instantiate D; record the template instantiation context
8565   at LOC for diagnostics and to restore it later.  */
8566
8567bool
8568push_tinst_level_loc (tree d, location_t loc)
8569{
8570  struct tinst_level *new_level;
8571
8572  if (tinst_depth >= max_tinst_depth)
8573    {
8574      fatal_error (input_location,
8575		   "template instantiation depth exceeds maximum of %d"
8576                   " (use -ftemplate-depth= to increase the maximum)",
8577                   max_tinst_depth);
8578      return false;
8579    }
8580
8581  /* If the current instantiation caused problems, don't let it instantiate
8582     anything else.  Do allow deduction substitution and decls usable in
8583     constant expressions.  */
8584  if (limit_bad_template_recursion (d))
8585    return false;
8586
8587  new_level = ggc_alloc<tinst_level> ();
8588  new_level->decl = d;
8589  new_level->locus = loc;
8590  new_level->errors = errorcount+sorrycount;
8591  new_level->in_system_header_p = in_system_header_at (input_location);
8592  new_level->next = current_tinst_level;
8593  current_tinst_level = new_level;
8594
8595  ++tinst_depth;
8596  if (GATHER_STATISTICS && (tinst_depth > depth_reached))
8597    depth_reached = tinst_depth;
8598
8599  return true;
8600}
8601
8602/* We're done instantiating this template; return to the instantiation
8603   context.  */
8604
8605void
8606pop_tinst_level (void)
8607{
8608  /* Restore the filename and line number stashed away when we started
8609     this instantiation.  */
8610  input_location = current_tinst_level->locus;
8611  current_tinst_level = current_tinst_level->next;
8612  --tinst_depth;
8613}
8614
8615/* We're instantiating a deferred template; restore the template
8616   instantiation context in which the instantiation was requested, which
8617   is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
8618
8619static tree
8620reopen_tinst_level (struct tinst_level *level)
8621{
8622  struct tinst_level *t;
8623
8624  tinst_depth = 0;
8625  for (t = level; t; t = t->next)
8626    ++tinst_depth;
8627
8628  current_tinst_level = level;
8629  pop_tinst_level ();
8630  if (current_tinst_level)
8631    current_tinst_level->errors = errorcount+sorrycount;
8632  return level->decl;
8633}
8634
8635/* Returns the TINST_LEVEL which gives the original instantiation
8636   context.  */
8637
8638struct tinst_level *
8639outermost_tinst_level (void)
8640{
8641  struct tinst_level *level = current_tinst_level;
8642  if (level)
8643    while (level->next)
8644      level = level->next;
8645  return level;
8646}
8647
8648/* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8649   vector of template arguments, as for tsubst.
8650
8651   Returns an appropriate tsubst'd friend declaration.  */
8652
8653static tree
8654tsubst_friend_function (tree decl, tree args)
8655{
8656  tree new_friend;
8657
8658  if (TREE_CODE (decl) == FUNCTION_DECL
8659      && DECL_TEMPLATE_INSTANTIATION (decl)
8660      && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8661    /* This was a friend declared with an explicit template
8662       argument list, e.g.:
8663
8664       friend void f<>(T);
8665
8666       to indicate that f was a template instantiation, not a new
8667       function declaration.  Now, we have to figure out what
8668       instantiation of what template.  */
8669    {
8670      tree template_id, arglist, fns;
8671      tree new_args;
8672      tree tmpl;
8673      tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8674
8675      /* Friend functions are looked up in the containing namespace scope.
8676	 We must enter that scope, to avoid finding member functions of the
8677	 current class with same name.  */
8678      push_nested_namespace (ns);
8679      fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8680			 tf_warning_or_error, NULL_TREE,
8681			 /*integral_constant_expression_p=*/false);
8682      pop_nested_namespace (ns);
8683      arglist = tsubst (DECL_TI_ARGS (decl), args,
8684			tf_warning_or_error, NULL_TREE);
8685      template_id = lookup_template_function (fns, arglist);
8686
8687      new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8688      tmpl = determine_specialization (template_id, new_friend,
8689				       &new_args,
8690				       /*need_member_template=*/0,
8691				       TREE_VEC_LENGTH (args),
8692				       tsk_none);
8693      return instantiate_template (tmpl, new_args, tf_error);
8694    }
8695
8696  new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8697
8698  /* The NEW_FRIEND will look like an instantiation, to the
8699     compiler, but is not an instantiation from the point of view of
8700     the language.  For example, we might have had:
8701
8702     template <class T> struct S {
8703       template <class U> friend void f(T, U);
8704     };
8705
8706     Then, in S<int>, template <class U> void f(int, U) is not an
8707     instantiation of anything.  */
8708  if (new_friend == error_mark_node)
8709    return error_mark_node;
8710
8711  DECL_USE_TEMPLATE (new_friend) = 0;
8712  if (TREE_CODE (decl) == TEMPLATE_DECL)
8713    {
8714      DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8715      DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8716	= DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8717    }
8718
8719  /* The mangled name for the NEW_FRIEND is incorrect.  The function
8720     is not a template instantiation and should not be mangled like
8721     one.  Therefore, we forget the mangling here; we'll recompute it
8722     later if we need it.  */
8723  if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8724    {
8725      SET_DECL_RTL (new_friend, NULL);
8726      SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8727    }
8728
8729  if (DECL_NAMESPACE_SCOPE_P (new_friend))
8730    {
8731      tree old_decl;
8732      tree new_friend_template_info;
8733      tree new_friend_result_template_info;
8734      tree ns;
8735      int  new_friend_is_defn;
8736
8737      /* We must save some information from NEW_FRIEND before calling
8738	 duplicate decls since that function will free NEW_FRIEND if
8739	 possible.  */
8740      new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8741      new_friend_is_defn =
8742	    (DECL_INITIAL (DECL_TEMPLATE_RESULT
8743			   (template_for_substitution (new_friend)))
8744	     != NULL_TREE);
8745      if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8746	{
8747	  /* This declaration is a `primary' template.  */
8748	  DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8749
8750	  new_friend_result_template_info
8751	    = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8752	}
8753      else
8754	new_friend_result_template_info = NULL_TREE;
8755
8756      /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8757      if (new_friend_is_defn)
8758	DECL_INITIAL (new_friend) = error_mark_node;
8759
8760      /* Inside pushdecl_namespace_level, we will push into the
8761	 current namespace. However, the friend function should go
8762	 into the namespace of the template.  */
8763      ns = decl_namespace_context (new_friend);
8764      push_nested_namespace (ns);
8765      old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8766      pop_nested_namespace (ns);
8767
8768      if (old_decl == error_mark_node)
8769	return error_mark_node;
8770
8771      if (old_decl != new_friend)
8772	{
8773	  /* This new friend declaration matched an existing
8774	     declaration.  For example, given:
8775
8776	       template <class T> void f(T);
8777	       template <class U> class C {
8778		 template <class T> friend void f(T) {}
8779	       };
8780
8781	     the friend declaration actually provides the definition
8782	     of `f', once C has been instantiated for some type.  So,
8783	     old_decl will be the out-of-class template declaration,
8784	     while new_friend is the in-class definition.
8785
8786	     But, if `f' was called before this point, the
8787	     instantiation of `f' will have DECL_TI_ARGS corresponding
8788	     to `T' but not to `U', references to which might appear
8789	     in the definition of `f'.  Previously, the most general
8790	     template for an instantiation of `f' was the out-of-class
8791	     version; now it is the in-class version.  Therefore, we
8792	     run through all specialization of `f', adding to their
8793	     DECL_TI_ARGS appropriately.  In particular, they need a
8794	     new set of outer arguments, corresponding to the
8795	     arguments for this class instantiation.
8796
8797	     The same situation can arise with something like this:
8798
8799	       friend void f(int);
8800	       template <class T> class C {
8801		 friend void f(T) {}
8802	       };
8803
8804	     when `C<int>' is instantiated.  Now, `f(int)' is defined
8805	     in the class.  */
8806
8807	  if (!new_friend_is_defn)
8808	    /* On the other hand, if the in-class declaration does
8809	       *not* provide a definition, then we don't want to alter
8810	       existing definitions.  We can just leave everything
8811	       alone.  */
8812	    ;
8813	  else
8814	    {
8815	      tree new_template = TI_TEMPLATE (new_friend_template_info);
8816	      tree new_args = TI_ARGS (new_friend_template_info);
8817
8818	      /* Overwrite whatever template info was there before, if
8819		 any, with the new template information pertaining to
8820		 the declaration.  */
8821	      DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8822
8823	      if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8824		{
8825		  /* We should have called reregister_specialization in
8826		     duplicate_decls.  */
8827		  gcc_assert (retrieve_specialization (new_template,
8828						       new_args, 0)
8829			      == old_decl);
8830
8831		  /* Instantiate it if the global has already been used.  */
8832		  if (DECL_ODR_USED (old_decl))
8833		    instantiate_decl (old_decl, /*defer_ok=*/true,
8834				      /*expl_inst_class_mem_p=*/false);
8835		}
8836	      else
8837		{
8838		  tree t;
8839
8840		  /* Indicate that the old function template is a partial
8841		     instantiation.  */
8842		  DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8843		    = new_friend_result_template_info;
8844
8845		  gcc_assert (new_template
8846			      == most_general_template (new_template));
8847		  gcc_assert (new_template != old_decl);
8848
8849		  /* Reassign any specializations already in the hash table
8850		     to the new more general template, and add the
8851		     additional template args.  */
8852		  for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8853		       t != NULL_TREE;
8854		       t = TREE_CHAIN (t))
8855		    {
8856		      tree spec = TREE_VALUE (t);
8857		      spec_entry elt;
8858
8859		      elt.tmpl = old_decl;
8860		      elt.args = DECL_TI_ARGS (spec);
8861		      elt.spec = NULL_TREE;
8862
8863		      decl_specializations->remove_elt (&elt);
8864
8865		      DECL_TI_ARGS (spec)
8866			= add_outermost_template_args (new_args,
8867						       DECL_TI_ARGS (spec));
8868
8869		      register_specialization
8870			(spec, new_template, DECL_TI_ARGS (spec), true, 0);
8871
8872		    }
8873		  DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8874		}
8875	    }
8876
8877	  /* The information from NEW_FRIEND has been merged into OLD_DECL
8878	     by duplicate_decls.  */
8879	  new_friend = old_decl;
8880	}
8881    }
8882  else
8883    {
8884      tree context = DECL_CONTEXT (new_friend);
8885      bool dependent_p;
8886
8887      /* In the code
8888	   template <class T> class C {
8889	     template <class U> friend void C1<U>::f (); // case 1
8890	     friend void C2<T>::f ();			 // case 2
8891	   };
8892	 we only need to make sure CONTEXT is a complete type for
8893	 case 2.  To distinguish between the two cases, we note that
8894	 CONTEXT of case 1 remains dependent type after tsubst while
8895	 this isn't true for case 2.  */
8896      ++processing_template_decl;
8897      dependent_p = dependent_type_p (context);
8898      --processing_template_decl;
8899
8900      if (!dependent_p
8901	  && !complete_type_or_else (context, NULL_TREE))
8902	return error_mark_node;
8903
8904      if (COMPLETE_TYPE_P (context))
8905	{
8906	  tree fn = new_friend;
8907	  /* do_friend adds the TEMPLATE_DECL for any member friend
8908	     template even if it isn't a member template, i.e.
8909	       template <class T> friend A<T>::f();
8910	     Look through it in that case.  */
8911	  if (TREE_CODE (fn) == TEMPLATE_DECL
8912	      && !PRIMARY_TEMPLATE_P (fn))
8913	    fn = DECL_TEMPLATE_RESULT (fn);
8914	  /* Check to see that the declaration is really present, and,
8915	     possibly obtain an improved declaration.  */
8916	  fn = check_classfn (context, fn, NULL_TREE);
8917
8918	  if (fn)
8919	    new_friend = fn;
8920	}
8921    }
8922
8923  return new_friend;
8924}
8925
8926/* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8927   template arguments, as for tsubst.
8928
8929   Returns an appropriate tsubst'd friend type or error_mark_node on
8930   failure.  */
8931
8932static tree
8933tsubst_friend_class (tree friend_tmpl, tree args)
8934{
8935  tree friend_type;
8936  tree tmpl;
8937  tree context;
8938
8939  if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
8940    {
8941      tree t = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
8942      return TREE_TYPE (t);
8943    }
8944
8945  context = CP_DECL_CONTEXT (friend_tmpl);
8946
8947  if (context != global_namespace)
8948    {
8949      if (TREE_CODE (context) == NAMESPACE_DECL)
8950	push_nested_namespace (context);
8951      else
8952	push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8953    }
8954
8955  /* Look for a class template declaration.  We look for hidden names
8956     because two friend declarations of the same template are the
8957     same.  For example, in:
8958
8959       struct A {
8960         template <typename> friend class F;
8961       };
8962       template <typename> struct B {
8963         template <typename> friend class F;
8964       };
8965
8966     both F templates are the same.  */
8967  tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8968			   /*block_p=*/true, 0, LOOKUP_HIDDEN);
8969
8970  /* But, if we don't find one, it might be because we're in a
8971     situation like this:
8972
8973       template <class T>
8974       struct S {
8975	 template <class U>
8976	 friend struct S;
8977       };
8978
8979     Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8980     for `S<int>', not the TEMPLATE_DECL.  */
8981  if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8982    {
8983      tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8984      tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8985    }
8986
8987  if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8988    {
8989      /* The friend template has already been declared.  Just
8990	 check to see that the declarations match, and install any new
8991	 default parameters.  We must tsubst the default parameters,
8992	 of course.  We only need the innermost template parameters
8993	 because that is all that redeclare_class_template will look
8994	 at.  */
8995      if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8996	  > TMPL_ARGS_DEPTH (args))
8997	{
8998	  tree parms;
8999          location_t saved_input_location;
9000	  parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
9001					 args, tf_warning_or_error);
9002
9003          saved_input_location = input_location;
9004          input_location = DECL_SOURCE_LOCATION (friend_tmpl);
9005	  redeclare_class_template (TREE_TYPE (tmpl), parms);
9006          input_location = saved_input_location;
9007
9008	}
9009
9010      friend_type = TREE_TYPE (tmpl);
9011    }
9012  else
9013    {
9014      /* The friend template has not already been declared.  In this
9015	 case, the instantiation of the template class will cause the
9016	 injection of this template into the global scope.  */
9017      tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
9018      if (tmpl == error_mark_node)
9019	return error_mark_node;
9020
9021      /* The new TMPL is not an instantiation of anything, so we
9022	 forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
9023	 the new type because that is supposed to be the corresponding
9024	 template decl, i.e., TMPL.  */
9025      DECL_USE_TEMPLATE (tmpl) = 0;
9026      DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
9027      CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
9028      CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
9029	= INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
9030
9031      /* Inject this template into the global scope.  */
9032      friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
9033    }
9034
9035  if (context != global_namespace)
9036    {
9037      if (TREE_CODE (context) == NAMESPACE_DECL)
9038	pop_nested_namespace (context);
9039      else
9040	pop_nested_class ();
9041    }
9042
9043  return friend_type;
9044}
9045
9046/* Returns zero if TYPE cannot be completed later due to circularity.
9047   Otherwise returns one.  */
9048
9049static int
9050can_complete_type_without_circularity (tree type)
9051{
9052  if (type == NULL_TREE || type == error_mark_node)
9053    return 0;
9054  else if (COMPLETE_TYPE_P (type))
9055    return 1;
9056  else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
9057    return can_complete_type_without_circularity (TREE_TYPE (type));
9058  else if (CLASS_TYPE_P (type)
9059	   && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
9060    return 0;
9061  else
9062    return 1;
9063}
9064
9065static tree tsubst_omp_clauses (tree, bool, tree, tsubst_flags_t, tree);
9066
9067/* Apply any attributes which had to be deferred until instantiation
9068   time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
9069   ARGS, COMPLAIN, IN_DECL are as tsubst.  */
9070
9071static void
9072apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
9073				tree args, tsubst_flags_t complain, tree in_decl)
9074{
9075  tree last_dep = NULL_TREE;
9076  tree t;
9077  tree *p;
9078
9079  for (t = attributes; t; t = TREE_CHAIN (t))
9080    if (ATTR_IS_DEPENDENT (t))
9081      {
9082	last_dep = t;
9083	attributes = copy_list (attributes);
9084	break;
9085      }
9086
9087  if (DECL_P (*decl_p))
9088    {
9089      if (TREE_TYPE (*decl_p) == error_mark_node)
9090	return;
9091      p = &DECL_ATTRIBUTES (*decl_p);
9092    }
9093  else
9094    p = &TYPE_ATTRIBUTES (*decl_p);
9095
9096  if (last_dep)
9097    {
9098      tree late_attrs = NULL_TREE;
9099      tree *q = &late_attrs;
9100
9101      for (*p = attributes; *p; )
9102	{
9103	  t = *p;
9104	  if (ATTR_IS_DEPENDENT (t))
9105	    {
9106	      *p = TREE_CHAIN (t);
9107	      TREE_CHAIN (t) = NULL_TREE;
9108	      if ((flag_openmp || flag_openmp_simd || flag_cilkplus)
9109		  && is_attribute_p ("omp declare simd",
9110				     get_attribute_name (t))
9111		  && TREE_VALUE (t))
9112		{
9113		  tree clauses = TREE_VALUE (TREE_VALUE (t));
9114		  clauses = tsubst_omp_clauses (clauses, true, args,
9115						complain, in_decl);
9116		  c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
9117		  clauses = finish_omp_clauses (clauses);
9118		  tree parms = DECL_ARGUMENTS (*decl_p);
9119		  clauses
9120		    = c_omp_declare_simd_clauses_to_numbers (parms, clauses);
9121		  if (clauses)
9122		    TREE_VALUE (TREE_VALUE (t)) = clauses;
9123		  else
9124		    TREE_VALUE (t) = NULL_TREE;
9125		}
9126	      /* If the first attribute argument is an identifier, don't
9127		 pass it through tsubst.  Attributes like mode, format,
9128		 cleanup and several target specific attributes expect it
9129		 unmodified.  */
9130	      else if (attribute_takes_identifier_p (get_attribute_name (t))
9131		       && TREE_VALUE (t))
9132		{
9133		  tree chain
9134		    = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
9135				   in_decl,
9136				   /*integral_constant_expression_p=*/false);
9137		  if (chain != TREE_CHAIN (TREE_VALUE (t)))
9138		    TREE_VALUE (t)
9139		      = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
9140				   chain);
9141		}
9142	      else if (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t)))
9143		{
9144		  /* An attribute pack expansion.  */
9145		  tree purp = TREE_PURPOSE (t);
9146		  tree pack = (tsubst_pack_expansion
9147			       (TREE_VALUE (t), args, complain, in_decl));
9148		  int len = TREE_VEC_LENGTH (pack);
9149		  for (int i = 0; i < len; ++i)
9150		    {
9151		      tree elt = TREE_VEC_ELT (pack, i);
9152		      *q = build_tree_list (purp, elt);
9153		      q = &TREE_CHAIN (*q);
9154		    }
9155		  continue;
9156		}
9157	      else
9158		TREE_VALUE (t)
9159		  = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
9160				 /*integral_constant_expression_p=*/false);
9161	      *q = t;
9162	      q = &TREE_CHAIN (t);
9163	    }
9164	  else
9165	    p = &TREE_CHAIN (t);
9166	}
9167
9168      cplus_decl_attributes (decl_p, late_attrs, attr_flags);
9169    }
9170}
9171
9172/* Perform (or defer) access check for typedefs that were referenced
9173   from within the template TMPL code.
9174   This is a subroutine of instantiate_decl and instantiate_class_template.
9175   TMPL is the template to consider and TARGS is the list of arguments of
9176   that template.  */
9177
9178static void
9179perform_typedefs_access_check (tree tmpl, tree targs)
9180{
9181  location_t saved_location;
9182  unsigned i;
9183  qualified_typedef_usage_t *iter;
9184
9185  if (!tmpl
9186      || (!CLASS_TYPE_P (tmpl)
9187	  && TREE_CODE (tmpl) != FUNCTION_DECL))
9188    return;
9189
9190  saved_location = input_location;
9191  FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
9192    {
9193      tree type_decl = iter->typedef_decl;
9194      tree type_scope = iter->context;
9195
9196      if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
9197	continue;
9198
9199      if (uses_template_parms (type_decl))
9200	type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
9201      if (uses_template_parms (type_scope))
9202	type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
9203
9204      /* Make access check error messages point to the location
9205         of the use of the typedef.  */
9206      input_location = iter->locus;
9207      perform_or_defer_access_check (TYPE_BINFO (type_scope),
9208				     type_decl, type_decl,
9209				     tf_warning_or_error);
9210    }
9211    input_location = saved_location;
9212}
9213
9214static tree
9215instantiate_class_template_1 (tree type)
9216{
9217  tree templ, args, pattern, t, member;
9218  tree typedecl;
9219  tree pbinfo;
9220  tree base_list;
9221  unsigned int saved_maximum_field_alignment;
9222  tree fn_context;
9223
9224  if (type == error_mark_node)
9225    return error_mark_node;
9226
9227  if (COMPLETE_OR_OPEN_TYPE_P (type)
9228      || uses_template_parms (type))
9229    return type;
9230
9231  /* Figure out which template is being instantiated.  */
9232  templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
9233  gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
9234
9235  /* Determine what specialization of the original template to
9236     instantiate.  */
9237  t = most_specialized_partial_spec (type, tf_warning_or_error);
9238  if (t == error_mark_node)
9239    {
9240      TYPE_BEING_DEFINED (type) = 1;
9241      return error_mark_node;
9242    }
9243  else if (t)
9244    {
9245      /* This TYPE is actually an instantiation of a partial
9246	 specialization.  We replace the innermost set of ARGS with
9247	 the arguments appropriate for substitution.  For example,
9248	 given:
9249
9250	   template <class T> struct S {};
9251	   template <class T> struct S<T*> {};
9252
9253	 and supposing that we are instantiating S<int*>, ARGS will
9254	 presently be {int*} -- but we need {int}.  */
9255      pattern = TREE_TYPE (t);
9256      args = TREE_PURPOSE (t);
9257    }
9258  else
9259    {
9260      pattern = TREE_TYPE (templ);
9261      args = CLASSTYPE_TI_ARGS (type);
9262    }
9263
9264  /* If the template we're instantiating is incomplete, then clearly
9265     there's nothing we can do.  */
9266  if (!COMPLETE_TYPE_P (pattern))
9267    return type;
9268
9269  /* If we've recursively instantiated too many templates, stop.  */
9270  if (! push_tinst_level (type))
9271    return type;
9272
9273  /* Now we're really doing the instantiation.  Mark the type as in
9274     the process of being defined.  */
9275  TYPE_BEING_DEFINED (type) = 1;
9276
9277  /* We may be in the middle of deferred access check.  Disable
9278     it now.  */
9279  push_deferring_access_checks (dk_no_deferred);
9280
9281  int saved_unevaluated_operand = cp_unevaluated_operand;
9282  int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9283
9284  fn_context = decl_function_context (TYPE_MAIN_DECL (type));
9285  /* Also avoid push_to_top_level for a lambda in an NSDMI.  */
9286  if (!fn_context && LAMBDA_TYPE_P (type) && TYPE_CLASS_SCOPE_P (type))
9287    fn_context = error_mark_node;
9288  if (!fn_context)
9289    push_to_top_level ();
9290  else
9291    {
9292      cp_unevaluated_operand = 0;
9293      c_inhibit_evaluation_warnings = 0;
9294    }
9295  /* Use #pragma pack from the template context.  */
9296  saved_maximum_field_alignment = maximum_field_alignment;
9297  maximum_field_alignment = TYPE_PRECISION (pattern);
9298
9299  SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
9300
9301  /* Set the input location to the most specialized template definition.
9302     This is needed if tsubsting causes an error.  */
9303  typedecl = TYPE_MAIN_DECL (pattern);
9304  input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
9305    DECL_SOURCE_LOCATION (typedecl);
9306
9307  TYPE_PACKED (type) = TYPE_PACKED (pattern);
9308  TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
9309  TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
9310  TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
9311  if (ANON_AGGR_TYPE_P (pattern))
9312    SET_ANON_AGGR_TYPE_P (type);
9313  if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
9314    {
9315      CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
9316      CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
9317      /* Adjust visibility for template arguments.  */
9318      determine_visibility (TYPE_MAIN_DECL (type));
9319    }
9320  if (CLASS_TYPE_P (type))
9321    CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
9322
9323  pbinfo = TYPE_BINFO (pattern);
9324
9325  /* We should never instantiate a nested class before its enclosing
9326     class; we need to look up the nested class by name before we can
9327     instantiate it, and that lookup should instantiate the enclosing
9328     class.  */
9329  gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
9330	      || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
9331
9332  base_list = NULL_TREE;
9333  if (BINFO_N_BASE_BINFOS (pbinfo))
9334    {
9335      tree pbase_binfo;
9336      tree pushed_scope;
9337      int i;
9338
9339      /* We must enter the scope containing the type, as that is where
9340	 the accessibility of types named in dependent bases are
9341	 looked up from.  */
9342      pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
9343
9344      /* Substitute into each of the bases to determine the actual
9345	 basetypes.  */
9346      for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
9347	{
9348	  tree base;
9349	  tree access = BINFO_BASE_ACCESS (pbinfo, i);
9350          tree expanded_bases = NULL_TREE;
9351          int idx, len = 1;
9352
9353          if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
9354            {
9355              expanded_bases =
9356		tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
9357				       args, tf_error, NULL_TREE);
9358              if (expanded_bases == error_mark_node)
9359                continue;
9360
9361              len = TREE_VEC_LENGTH (expanded_bases);
9362            }
9363
9364          for (idx = 0; idx < len; idx++)
9365            {
9366              if (expanded_bases)
9367                /* Extract the already-expanded base class.  */
9368                base = TREE_VEC_ELT (expanded_bases, idx);
9369              else
9370                /* Substitute to figure out the base class.  */
9371                base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error,
9372                               NULL_TREE);
9373
9374              if (base == error_mark_node)
9375                continue;
9376
9377              base_list = tree_cons (access, base, base_list);
9378              if (BINFO_VIRTUAL_P (pbase_binfo))
9379                TREE_TYPE (base_list) = integer_type_node;
9380            }
9381	}
9382
9383      /* The list is now in reverse order; correct that.  */
9384      base_list = nreverse (base_list);
9385
9386      if (pushed_scope)
9387	pop_scope (pushed_scope);
9388    }
9389  /* Now call xref_basetypes to set up all the base-class
9390     information.  */
9391  xref_basetypes (type, base_list);
9392
9393  apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
9394				  (int) ATTR_FLAG_TYPE_IN_PLACE,
9395				  args, tf_error, NULL_TREE);
9396  fixup_attribute_variants (type);
9397
9398  /* Now that our base classes are set up, enter the scope of the
9399     class, so that name lookups into base classes, etc. will work
9400     correctly.  This is precisely analogous to what we do in
9401     begin_class_definition when defining an ordinary non-template
9402     class, except we also need to push the enclosing classes.  */
9403  push_nested_class (type);
9404
9405  /* Now members are processed in the order of declaration.  */
9406  for (member = CLASSTYPE_DECL_LIST (pattern);
9407       member; member = TREE_CHAIN (member))
9408    {
9409      tree t = TREE_VALUE (member);
9410
9411      if (TREE_PURPOSE (member))
9412	{
9413	  if (TYPE_P (t))
9414	    {
9415	      /* Build new CLASSTYPE_NESTED_UTDS.  */
9416
9417	      tree newtag;
9418	      bool class_template_p;
9419
9420	      class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
9421				  && TYPE_LANG_SPECIFIC (t)
9422				  && CLASSTYPE_IS_TEMPLATE (t));
9423	      /* If the member is a class template, then -- even after
9424		 substitution -- there may be dependent types in the
9425		 template argument list for the class.  We increment
9426		 PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
9427		 that function will assume that no types are dependent
9428		 when outside of a template.  */
9429	      if (class_template_p)
9430		++processing_template_decl;
9431	      newtag = tsubst (t, args, tf_error, NULL_TREE);
9432	      if (class_template_p)
9433		--processing_template_decl;
9434	      if (newtag == error_mark_node)
9435		continue;
9436
9437	      if (TREE_CODE (newtag) != ENUMERAL_TYPE)
9438		{
9439		  tree name = TYPE_IDENTIFIER (t);
9440
9441		  if (class_template_p)
9442		    /* Unfortunately, lookup_template_class sets
9443		       CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
9444		       instantiation (i.e., for the type of a member
9445		       template class nested within a template class.)
9446		       This behavior is required for
9447		       maybe_process_partial_specialization to work
9448		       correctly, but is not accurate in this case;
9449		       the TAG is not an instantiation of anything.
9450		       (The corresponding TEMPLATE_DECL is an
9451		       instantiation, but the TYPE is not.) */
9452		    CLASSTYPE_USE_TEMPLATE (newtag) = 0;
9453
9454		  /* Now, we call pushtag to put this NEWTAG into the scope of
9455		     TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
9456		     pushtag calling push_template_decl.  We don't have to do
9457		     this for enums because it will already have been done in
9458		     tsubst_enum.  */
9459		  if (name)
9460		    SET_IDENTIFIER_TYPE_VALUE (name, newtag);
9461		  pushtag (name, newtag, /*tag_scope=*/ts_current);
9462		}
9463	    }
9464	  else if (DECL_DECLARES_FUNCTION_P (t))
9465	    {
9466	      /* Build new TYPE_METHODS.  */
9467	      tree r;
9468
9469	      if (TREE_CODE (t) == TEMPLATE_DECL)
9470		++processing_template_decl;
9471	      r = tsubst (t, args, tf_error, NULL_TREE);
9472	      if (TREE_CODE (t) == TEMPLATE_DECL)
9473		--processing_template_decl;
9474	      set_current_access_from_decl (r);
9475	      finish_member_declaration (r);
9476	      /* Instantiate members marked with attribute used.  */
9477	      if (r != error_mark_node && DECL_PRESERVE_P (r))
9478		mark_used (r);
9479	      if (TREE_CODE (r) == FUNCTION_DECL
9480		  && DECL_OMP_DECLARE_REDUCTION_P (r))
9481		cp_check_omp_declare_reduction (r);
9482	    }
9483	  else if (DECL_CLASS_TEMPLATE_P (t)
9484		   && LAMBDA_TYPE_P (TREE_TYPE (t)))
9485	    /* A closure type for a lambda in a default argument for a
9486	       member template.  Ignore it; it will be instantiated with
9487	       the default argument.  */;
9488	  else
9489	    {
9490	      /* Build new TYPE_FIELDS.  */
9491              if (TREE_CODE (t) == STATIC_ASSERT)
9492                {
9493                  tree condition;
9494
9495		  ++c_inhibit_evaluation_warnings;
9496		  condition =
9497		    tsubst_expr (STATIC_ASSERT_CONDITION (t), args,
9498				 tf_warning_or_error, NULL_TREE,
9499				 /*integral_constant_expression_p=*/true);
9500		  --c_inhibit_evaluation_warnings;
9501
9502                  finish_static_assert (condition,
9503                                        STATIC_ASSERT_MESSAGE (t),
9504                                        STATIC_ASSERT_SOURCE_LOCATION (t),
9505                                        /*member_p=*/true);
9506                }
9507	      else if (TREE_CODE (t) != CONST_DECL)
9508		{
9509		  tree r;
9510		  tree vec = NULL_TREE;
9511		  int len = 1;
9512
9513		  /* The file and line for this declaration, to
9514		     assist in error message reporting.  Since we
9515		     called push_tinst_level above, we don't need to
9516		     restore these.  */
9517		  input_location = DECL_SOURCE_LOCATION (t);
9518
9519		  if (TREE_CODE (t) == TEMPLATE_DECL)
9520		    ++processing_template_decl;
9521		  r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
9522		  if (TREE_CODE (t) == TEMPLATE_DECL)
9523		    --processing_template_decl;
9524
9525		  if (TREE_CODE (r) == TREE_VEC)
9526		    {
9527		      /* A capture pack became multiple fields.  */
9528		      vec = r;
9529		      len = TREE_VEC_LENGTH (vec);
9530		    }
9531
9532		  for (int i = 0; i < len; ++i)
9533		    {
9534		      if (vec)
9535			r = TREE_VEC_ELT (vec, i);
9536		      if (VAR_P (r))
9537			{
9538			  /* In [temp.inst]:
9539
9540			     [t]he initialization (and any associated
9541			     side-effects) of a static data member does
9542			     not occur unless the static data member is
9543			     itself used in a way that requires the
9544			     definition of the static data member to
9545			     exist.
9546
9547			     Therefore, we do not substitute into the
9548			     initialized for the static data member here.  */
9549			  finish_static_data_member_decl
9550			    (r,
9551			     /*init=*/NULL_TREE,
9552			     /*init_const_expr_p=*/false,
9553			     /*asmspec_tree=*/NULL_TREE,
9554			     /*flags=*/0);
9555			  /* Instantiate members marked with attribute used. */
9556			  if (r != error_mark_node && DECL_PRESERVE_P (r))
9557			    mark_used (r);
9558			}
9559		      else if (TREE_CODE (r) == FIELD_DECL)
9560			{
9561			  /* Determine whether R has a valid type and can be
9562			     completed later.  If R is invalid, then its type
9563			     is replaced by error_mark_node.  */
9564			  tree rtype = TREE_TYPE (r);
9565			  if (can_complete_type_without_circularity (rtype))
9566			    complete_type (rtype);
9567
9568			  if (!COMPLETE_TYPE_P (rtype))
9569			    {
9570			      cxx_incomplete_type_error (r, rtype);
9571			      TREE_TYPE (r) = error_mark_node;
9572			    }
9573			}
9574
9575		      /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9576			 such a thing will already have been added to the field
9577			 list by tsubst_enum in finish_member_declaration in the
9578			 CLASSTYPE_NESTED_UTDS case above.  */
9579		      if (!(TREE_CODE (r) == TYPE_DECL
9580			    && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9581			    && DECL_ARTIFICIAL (r)))
9582			{
9583			  set_current_access_from_decl (r);
9584			  finish_member_declaration (r);
9585			}
9586		    }
9587		}
9588	    }
9589	}
9590      else
9591	{
9592	  if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
9593	      || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9594	    {
9595	      /* Build new CLASSTYPE_FRIEND_CLASSES.  */
9596
9597	      tree friend_type = t;
9598	      bool adjust_processing_template_decl = false;
9599
9600	      if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9601		{
9602		  /* template <class T> friend class C;  */
9603		  friend_type = tsubst_friend_class (friend_type, args);
9604		  adjust_processing_template_decl = true;
9605		}
9606	      else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9607		{
9608		  /* template <class T> friend class C::D;  */
9609		  friend_type = tsubst (friend_type, args,
9610					tf_warning_or_error, NULL_TREE);
9611		  if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9612		    friend_type = TREE_TYPE (friend_type);
9613		  adjust_processing_template_decl = true;
9614		}
9615	      else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9616		       || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9617		{
9618		  /* This could be either
9619
9620		       friend class T::C;
9621
9622		     when dependent_type_p is false or
9623
9624		       template <class U> friend class T::C;
9625
9626		     otherwise.  */
9627		  /* Bump processing_template_decl in case this is something like
9628		     template <class T> friend struct A<T>::B.  */
9629		  ++processing_template_decl;
9630		  friend_type = tsubst (friend_type, args,
9631					tf_warning_or_error, NULL_TREE);
9632		  if (dependent_type_p (friend_type))
9633		    adjust_processing_template_decl = true;
9634		  --processing_template_decl;
9635		}
9636	      else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9637		       && hidden_name_p (TYPE_NAME (friend_type)))
9638		{
9639		  /* friend class C;
9640
9641		     where C hasn't been declared yet.  Let's lookup name
9642		     from namespace scope directly, bypassing any name that
9643		     come from dependent base class.  */
9644		  tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9645
9646		  /* The call to xref_tag_from_type does injection for friend
9647		     classes.  */
9648		  push_nested_namespace (ns);
9649		  friend_type =
9650		    xref_tag_from_type (friend_type, NULL_TREE,
9651					/*tag_scope=*/ts_current);
9652		  pop_nested_namespace (ns);
9653		}
9654	      else if (uses_template_parms (friend_type))
9655		/* friend class C<T>;  */
9656		friend_type = tsubst (friend_type, args,
9657				      tf_warning_or_error, NULL_TREE);
9658	      /* Otherwise it's
9659
9660		   friend class C;
9661
9662		 where C is already declared or
9663
9664		   friend class C<int>;
9665
9666		 We don't have to do anything in these cases.  */
9667
9668	      if (adjust_processing_template_decl)
9669		/* Trick make_friend_class into realizing that the friend
9670		   we're adding is a template, not an ordinary class.  It's
9671		   important that we use make_friend_class since it will
9672		   perform some error-checking and output cross-reference
9673		   information.  */
9674		++processing_template_decl;
9675
9676	      if (friend_type != error_mark_node)
9677		make_friend_class (type, friend_type, /*complain=*/false);
9678
9679	      if (adjust_processing_template_decl)
9680		--processing_template_decl;
9681	    }
9682	  else
9683	    {
9684	      /* Build new DECL_FRIENDLIST.  */
9685	      tree r;
9686
9687	      /* The file and line for this declaration, to
9688		 assist in error message reporting.  Since we
9689		 called push_tinst_level above, we don't need to
9690		 restore these.  */
9691	      input_location = DECL_SOURCE_LOCATION (t);
9692
9693	      if (TREE_CODE (t) == TEMPLATE_DECL)
9694		{
9695		  ++processing_template_decl;
9696		  push_deferring_access_checks (dk_no_check);
9697		}
9698
9699	      r = tsubst_friend_function (t, args);
9700	      add_friend (type, r, /*complain=*/false);
9701	      if (TREE_CODE (t) == TEMPLATE_DECL)
9702		{
9703		  pop_deferring_access_checks ();
9704		  --processing_template_decl;
9705		}
9706	    }
9707	}
9708    }
9709
9710  if (fn_context)
9711    {
9712      /* Restore these before substituting into the lambda capture
9713	 initializers.  */
9714      cp_unevaluated_operand = saved_unevaluated_operand;
9715      c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9716    }
9717
9718  if (tree expr = CLASSTYPE_LAMBDA_EXPR (type))
9719    {
9720      tree decl = lambda_function (type);
9721      if (decl)
9722	{
9723	  if (!DECL_TEMPLATE_INFO (decl)
9724	      || DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (decl)) != decl)
9725	    instantiate_decl (decl, false, false);
9726
9727	  /* We need to instantiate the capture list from the template
9728	     after we've instantiated the closure members, but before we
9729	     consider adding the conversion op.  Also keep any captures
9730	     that may have been added during instantiation of the op().  */
9731	  tree tmpl_expr = CLASSTYPE_LAMBDA_EXPR (pattern);
9732	  tree tmpl_cap
9733	    = tsubst_copy_and_build (LAMBDA_EXPR_CAPTURE_LIST (tmpl_expr),
9734				     args, tf_warning_or_error, NULL_TREE,
9735				     false, false);
9736
9737	  LAMBDA_EXPR_CAPTURE_LIST (expr)
9738	    = chainon (tmpl_cap, nreverse (LAMBDA_EXPR_CAPTURE_LIST (expr)));
9739
9740	  maybe_add_lambda_conv_op (type);
9741	}
9742      else
9743	gcc_assert (errorcount);
9744    }
9745
9746  /* Set the file and line number information to whatever is given for
9747     the class itself.  This puts error messages involving generated
9748     implicit functions at a predictable point, and the same point
9749     that would be used for non-template classes.  */
9750  input_location = DECL_SOURCE_LOCATION (typedecl);
9751
9752  unreverse_member_declarations (type);
9753  finish_struct_1 (type);
9754  TYPE_BEING_DEFINED (type) = 0;
9755
9756  /* We don't instantiate default arguments for member functions.  14.7.1:
9757
9758     The implicit instantiation of a class template specialization causes
9759     the implicit instantiation of the declarations, but not of the
9760     definitions or default arguments, of the class member functions,
9761     member classes, static data members and member templates....  */
9762
9763  /* Some typedefs referenced from within the template code need to be access
9764     checked at template instantiation time, i.e now. These types were
9765     added to the template at parsing time. Let's get those and perform
9766     the access checks then.  */
9767  perform_typedefs_access_check (pattern, args);
9768  perform_deferred_access_checks (tf_warning_or_error);
9769  pop_nested_class ();
9770  maximum_field_alignment = saved_maximum_field_alignment;
9771  if (!fn_context)
9772    pop_from_top_level ();
9773  pop_deferring_access_checks ();
9774  pop_tinst_level ();
9775
9776  /* The vtable for a template class can be emitted in any translation
9777     unit in which the class is instantiated.  When there is no key
9778     method, however, finish_struct_1 will already have added TYPE to
9779     the keyed_classes list.  */
9780  if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9781    keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9782
9783  return type;
9784}
9785
9786/* Wrapper for instantiate_class_template_1.  */
9787
9788tree
9789instantiate_class_template (tree type)
9790{
9791  tree ret;
9792  timevar_push (TV_TEMPLATE_INST);
9793  ret = instantiate_class_template_1 (type);
9794  timevar_pop (TV_TEMPLATE_INST);
9795  return ret;
9796}
9797
9798static tree
9799tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9800{
9801  tree r;
9802
9803  if (!t)
9804    r = t;
9805  else if (TYPE_P (t))
9806    r = tsubst (t, args, complain, in_decl);
9807  else
9808    {
9809      if (!(complain & tf_warning))
9810	++c_inhibit_evaluation_warnings;
9811      r = tsubst_expr (t, args, complain, in_decl,
9812		       /*integral_constant_expression_p=*/true);
9813      if (!(complain & tf_warning))
9814	--c_inhibit_evaluation_warnings;
9815    }
9816  return r;
9817}
9818
9819/* Given a function parameter pack TMPL_PARM and some function parameters
9820   instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9821   and set *SPEC_P to point at the next point in the list.  */
9822
9823static tree
9824extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9825{
9826  /* Collect all of the extra "packed" parameters into an
9827     argument pack.  */
9828  tree parmvec;
9829  tree parmtypevec;
9830  tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9831  tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9832  tree spec_parm = *spec_p;
9833  int i, len;
9834
9835  for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9836    if (tmpl_parm
9837	&& !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9838      break;
9839
9840  /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9841  parmvec = make_tree_vec (len);
9842  parmtypevec = make_tree_vec (len);
9843  spec_parm = *spec_p;
9844  for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9845    {
9846      TREE_VEC_ELT (parmvec, i) = spec_parm;
9847      TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9848    }
9849
9850  /* Build the argument packs.  */
9851  SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9852  SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9853  TREE_TYPE (argpack) = argtypepack;
9854  *spec_p = spec_parm;
9855
9856  return argpack;
9857}
9858
9859/* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9860   NONTYPE_ARGUMENT_PACK.  */
9861
9862static tree
9863make_fnparm_pack (tree spec_parm)
9864{
9865  return extract_fnparm_pack (NULL_TREE, &spec_parm);
9866}
9867
9868/* Return 1 if the Ith element of the argument pack ARG_PACK is a
9869   pack expansion with no extra args, 2 if it has extra args, or 0
9870   if it is not a pack expansion.  */
9871
9872static int
9873argument_pack_element_is_expansion_p (tree arg_pack, int i)
9874{
9875  tree vec = ARGUMENT_PACK_ARGS (arg_pack);
9876  if (i >= TREE_VEC_LENGTH (vec))
9877    return 0;
9878  tree elt = TREE_VEC_ELT (vec, i);
9879  if (!PACK_EXPANSION_P (elt))
9880    return 0;
9881  if (PACK_EXPANSION_EXTRA_ARGS (elt))
9882    return 2;
9883  return 1;
9884}
9885
9886
9887/* Creates and return an ARGUMENT_PACK_SELECT tree node.  */
9888
9889static tree
9890make_argument_pack_select (tree arg_pack, unsigned index)
9891{
9892  tree aps = make_node (ARGUMENT_PACK_SELECT);
9893
9894  ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
9895  ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9896
9897  return aps;
9898}
9899
9900/*  This is a subroutine of tsubst_pack_expansion.
9901
9902    It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
9903    mechanism to store the (non complete list of) arguments of the
9904    substitution and return a non substituted pack expansion, in order
9905    to wait for when we have enough arguments to really perform the
9906    substitution.  */
9907
9908static bool
9909use_pack_expansion_extra_args_p (tree parm_packs,
9910				 int arg_pack_len,
9911				 bool has_empty_arg)
9912{
9913  /* If one pack has an expansion and another pack has a normal
9914     argument or if one pack has an empty argument and an another
9915     one hasn't then tsubst_pack_expansion cannot perform the
9916     substitution and need to fall back on the
9917     PACK_EXPANSION_EXTRA mechanism.  */
9918  if (parm_packs == NULL_TREE)
9919    return false;
9920  else if (has_empty_arg)
9921    return true;
9922
9923  bool has_expansion_arg = false;
9924  for (int i = 0 ; i < arg_pack_len; ++i)
9925    {
9926      bool has_non_expansion_arg = false;
9927      for (tree parm_pack = parm_packs;
9928	   parm_pack;
9929	   parm_pack = TREE_CHAIN (parm_pack))
9930	{
9931	  tree arg = TREE_VALUE (parm_pack);
9932
9933	  int exp = argument_pack_element_is_expansion_p (arg, i);
9934	  if (exp == 2)
9935	    /* We can't substitute a pack expansion with extra args into
9936	       our pattern.  */
9937	    return true;
9938	  else if (exp)
9939	    has_expansion_arg = true;
9940	  else
9941	    has_non_expansion_arg = true;
9942	}
9943
9944      if (has_expansion_arg && has_non_expansion_arg)
9945	return true;
9946    }
9947  return false;
9948}
9949
9950/* [temp.variadic]/6 says that:
9951
9952       The instantiation of a pack expansion [...]
9953       produces a list E1,E2, ..., En, where N is the number of elements
9954       in the pack expansion parameters.
9955
9956   This subroutine of tsubst_pack_expansion produces one of these Ei.
9957
9958   PATTERN is the pattern of the pack expansion.  PARM_PACKS is a
9959   TREE_LIST in which each TREE_PURPOSE is a parameter pack of
9960   PATTERN, and each TREE_VALUE is its corresponding argument pack.
9961   INDEX is the index 'i' of the element Ei to produce.  ARGS,
9962   COMPLAIN, and IN_DECL are the same parameters as for the
9963   tsubst_pack_expansion function.
9964
9965   The function returns the resulting Ei upon successful completion,
9966   or error_mark_node.
9967
9968   Note that this function possibly modifies the ARGS parameter, so
9969   it's the responsibility of the caller to restore it.  */
9970
9971static tree
9972gen_elem_of_pack_expansion_instantiation (tree pattern,
9973					  tree parm_packs,
9974					  unsigned index,
9975					  tree args /* This parm gets
9976						       modified.  */,
9977					  tsubst_flags_t complain,
9978					  tree in_decl)
9979{
9980  tree t;
9981  bool ith_elem_is_expansion = false;
9982
9983  /* For each parameter pack, change the substitution of the parameter
9984     pack to the ith argument in its argument pack, then expand the
9985     pattern.  */
9986  for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
9987    {
9988      tree parm = TREE_PURPOSE (pack);
9989      tree arg_pack = TREE_VALUE (pack);
9990      tree aps;			/* instance of ARGUMENT_PACK_SELECT.  */
9991
9992      ith_elem_is_expansion |=
9993	argument_pack_element_is_expansion_p (arg_pack, index);
9994
9995      /* Select the Ith argument from the pack.  */
9996      if (TREE_CODE (parm) == PARM_DECL
9997	  || TREE_CODE (parm) == FIELD_DECL)
9998	{
9999	  if (index == 0)
10000	    {
10001	      aps = make_argument_pack_select (arg_pack, index);
10002	      if (!mark_used (parm, complain) && !(complain & tf_error))
10003		return error_mark_node;
10004	      register_local_specialization (aps, parm);
10005	    }
10006	  else
10007	    aps = retrieve_local_specialization (parm);
10008	}
10009      else
10010	{
10011	  int idx, level;
10012	  template_parm_level_and_index (parm, &level, &idx);
10013
10014	  if (index == 0)
10015	    {
10016	      aps = make_argument_pack_select (arg_pack, index);
10017	      /* Update the corresponding argument.  */
10018	      TMPL_ARG (args, level, idx) = aps;
10019	    }
10020	  else
10021	    /* Re-use the ARGUMENT_PACK_SELECT.  */
10022	    aps = TMPL_ARG (args, level, idx);
10023	}
10024      ARGUMENT_PACK_SELECT_INDEX (aps) = index;
10025    }
10026
10027  /* Substitute into the PATTERN with the (possibly altered)
10028     arguments.  */
10029  if (pattern == in_decl)
10030    /* Expanding a fixed parameter pack from
10031       coerce_template_parameter_pack.  */
10032    t = tsubst_decl (pattern, args, complain);
10033  else if (!TYPE_P (pattern))
10034    t = tsubst_expr (pattern, args, complain, in_decl,
10035		     /*integral_constant_expression_p=*/false);
10036  else
10037    t = tsubst (pattern, args, complain, in_decl);
10038
10039  /*  If the Ith argument pack element is a pack expansion, then
10040      the Ith element resulting from the substituting is going to
10041      be a pack expansion as well.  */
10042  if (ith_elem_is_expansion)
10043    t = make_pack_expansion (t);
10044
10045  return t;
10046}
10047
10048/* Substitute ARGS into T, which is an pack expansion
10049   (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
10050   TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
10051   (if only a partial substitution could be performed) or
10052   ERROR_MARK_NODE if there was an error.  */
10053tree
10054tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
10055		       tree in_decl)
10056{
10057  tree pattern;
10058  tree pack, packs = NULL_TREE;
10059  bool unsubstituted_packs = false;
10060  int i, len = -1;
10061  tree result;
10062  hash_map<tree, tree> *saved_local_specializations = NULL;
10063  bool need_local_specializations = false;
10064  int levels;
10065
10066  gcc_assert (PACK_EXPANSION_P (t));
10067  pattern = PACK_EXPANSION_PATTERN (t);
10068
10069  /* Add in any args remembered from an earlier partial instantiation.  */
10070  args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
10071
10072  levels = TMPL_ARGS_DEPTH (args);
10073
10074  /* Determine the argument packs that will instantiate the parameter
10075     packs used in the expansion expression. While we're at it,
10076     compute the number of arguments to be expanded and make sure it
10077     is consistent.  */
10078  for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack;
10079       pack = TREE_CHAIN (pack))
10080    {
10081      tree parm_pack = TREE_VALUE (pack);
10082      tree arg_pack = NULL_TREE;
10083      tree orig_arg = NULL_TREE;
10084      int level = 0;
10085
10086      if (TREE_CODE (parm_pack) == BASES)
10087       {
10088         if (BASES_DIRECT (parm_pack))
10089           return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
10090                                                        args, complain, in_decl, false));
10091         else
10092           return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
10093                                                 args, complain, in_decl, false));
10094       }
10095      if (TREE_CODE (parm_pack) == PARM_DECL)
10096	{
10097	  if (PACK_EXPANSION_LOCAL_P (t))
10098	    arg_pack = retrieve_local_specialization (parm_pack);
10099	  else
10100	    /* We can't rely on local_specializations for a parameter
10101	       name used later in a function declaration (such as in a
10102	       late-specified return type).  Even if it exists, it might
10103	       have the wrong value for a recursive call.  */
10104	    need_local_specializations = true;
10105
10106	  if (!arg_pack)
10107	    {
10108	      /* This parameter pack was used in an unevaluated context.  Just
10109		 make a dummy decl, since it's only used for its type.  */
10110	      arg_pack = tsubst_decl (parm_pack, args, complain);
10111	      if (arg_pack && DECL_PACK_P (arg_pack))
10112		/* Partial instantiation of the parm_pack, we can't build
10113		   up an argument pack yet.  */
10114		arg_pack = NULL_TREE;
10115	      else
10116		arg_pack = make_fnparm_pack (arg_pack);
10117	    }
10118	}
10119      else if (TREE_CODE (parm_pack) == FIELD_DECL)
10120	arg_pack = tsubst_copy (parm_pack, args, complain, in_decl);
10121      else
10122        {
10123	  int idx;
10124          template_parm_level_and_index (parm_pack, &level, &idx);
10125
10126          if (level <= levels)
10127            arg_pack = TMPL_ARG (args, level, idx);
10128        }
10129
10130      orig_arg = arg_pack;
10131      if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
10132	arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
10133
10134      if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
10135	/* This can only happen if we forget to expand an argument
10136	   pack somewhere else. Just return an error, silently.  */
10137	{
10138	  result = make_tree_vec (1);
10139	  TREE_VEC_ELT (result, 0) = error_mark_node;
10140	  return result;
10141	}
10142
10143      if (arg_pack)
10144        {
10145          int my_len =
10146            TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
10147
10148	  /* Don't bother trying to do a partial substitution with
10149	     incomplete packs; we'll try again after deduction.  */
10150          if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
10151            return t;
10152
10153          if (len < 0)
10154	    len = my_len;
10155          else if (len != my_len)
10156            {
10157	      if (!(complain & tf_error))
10158		/* Fail quietly.  */;
10159              else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
10160                error ("mismatched argument pack lengths while expanding "
10161                       "%<%T%>",
10162                       pattern);
10163              else
10164                error ("mismatched argument pack lengths while expanding "
10165                       "%<%E%>",
10166                       pattern);
10167              return error_mark_node;
10168            }
10169
10170          /* Keep track of the parameter packs and their corresponding
10171             argument packs.  */
10172          packs = tree_cons (parm_pack, arg_pack, packs);
10173          TREE_TYPE (packs) = orig_arg;
10174        }
10175      else
10176	{
10177	  /* We can't substitute for this parameter pack.  We use a flag as
10178	     well as the missing_level counter because function parameter
10179	     packs don't have a level.  */
10180	  unsubstituted_packs = true;
10181	}
10182    }
10183
10184  /* If the expansion is just T..., return the matching argument pack, unless
10185     we need to call convert_from_reference on all the elements.  This is an
10186     important optimization; see c++/68422.  */
10187  if (!unsubstituted_packs
10188      && TREE_PURPOSE (packs) == pattern)
10189    {
10190      tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
10191      /* Types need no adjustment, nor does sizeof..., and if we still have
10192	 some pack expansion args we won't do anything yet.  */
10193      if (TREE_CODE (t) == TYPE_PACK_EXPANSION
10194	  || PACK_EXPANSION_SIZEOF_P (t)
10195	  || pack_expansion_args_count (args))
10196	return args;
10197      /* Otherwise use the normal path so we get convert_from_reference.  */
10198    }
10199
10200  /* We cannot expand this expansion expression, because we don't have
10201     all of the argument packs we need.  */
10202  if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
10203    {
10204      /* We got some full packs, but we can't substitute them in until we
10205	 have values for all the packs.  So remember these until then.  */
10206
10207      t = make_pack_expansion (pattern);
10208      PACK_EXPANSION_EXTRA_ARGS (t) = args;
10209      return t;
10210    }
10211  else if (unsubstituted_packs)
10212    {
10213      /* There were no real arguments, we're just replacing a parameter
10214	 pack with another version of itself. Substitute into the
10215	 pattern and return a PACK_EXPANSION_*. The caller will need to
10216	 deal with that.  */
10217      if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
10218	t = tsubst_expr (pattern, args, complain, in_decl,
10219			 /*integral_constant_expression_p=*/false);
10220      else
10221	t = tsubst (pattern, args, complain, in_decl);
10222      t = make_pack_expansion (t);
10223      return t;
10224    }
10225
10226  gcc_assert (len >= 0);
10227
10228  if (need_local_specializations)
10229    {
10230      /* We're in a late-specified return type, so create our own local
10231	 specializations map; the current map is either NULL or (in the
10232	 case of recursive unification) might have bindings that we don't
10233	 want to use or alter.  */
10234      saved_local_specializations = local_specializations;
10235      local_specializations = new hash_map<tree, tree>;
10236    }
10237
10238  /* For each argument in each argument pack, substitute into the
10239     pattern.  */
10240  result = make_tree_vec (len);
10241  tree elem_args = copy_template_args (args);
10242  for (i = 0; i < len; ++i)
10243    {
10244      t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
10245						    i,
10246						    elem_args, complain,
10247						    in_decl);
10248      TREE_VEC_ELT (result, i) = t;
10249      if (t == error_mark_node)
10250	{
10251	  result = error_mark_node;
10252	  break;
10253	}
10254    }
10255
10256  /* Update ARGS to restore the substitution from parameter packs to
10257     their argument packs.  */
10258  for (pack = packs; pack; pack = TREE_CHAIN (pack))
10259    {
10260      tree parm = TREE_PURPOSE (pack);
10261
10262      if (TREE_CODE (parm) == PARM_DECL
10263	  || TREE_CODE (parm) == FIELD_DECL)
10264        register_local_specialization (TREE_TYPE (pack), parm);
10265      else
10266        {
10267          int idx, level;
10268
10269	  if (TREE_VALUE (pack) == NULL_TREE)
10270	    continue;
10271
10272          template_parm_level_and_index (parm, &level, &idx);
10273
10274          /* Update the corresponding argument.  */
10275          if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
10276            TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
10277              TREE_TYPE (pack);
10278          else
10279            TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
10280        }
10281    }
10282
10283  if (need_local_specializations)
10284    {
10285      delete local_specializations;
10286      local_specializations = saved_local_specializations;
10287    }
10288
10289  return result;
10290}
10291
10292/* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
10293   TMPL.  We do this using DECL_PARM_INDEX, which should work even with
10294   parameter packs; all parms generated from a function parameter pack will
10295   have the same DECL_PARM_INDEX.  */
10296
10297tree
10298get_pattern_parm (tree parm, tree tmpl)
10299{
10300  tree pattern = DECL_TEMPLATE_RESULT (tmpl);
10301  tree patparm;
10302
10303  if (DECL_ARTIFICIAL (parm))
10304    {
10305      for (patparm = DECL_ARGUMENTS (pattern);
10306	   patparm; patparm = DECL_CHAIN (patparm))
10307	if (DECL_ARTIFICIAL (patparm)
10308	    && DECL_NAME (parm) == DECL_NAME (patparm))
10309	  break;
10310    }
10311  else
10312    {
10313      patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
10314      patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
10315      gcc_assert (DECL_PARM_INDEX (patparm)
10316		  == DECL_PARM_INDEX (parm));
10317    }
10318
10319  return patparm;
10320}
10321
10322/* Return an exact copy of template args T that can be modified
10323   independently.  */
10324
10325static tree
10326copy_template_args (tree t)
10327{
10328  if (t == error_mark_node)
10329    return t;
10330
10331  int len = TREE_VEC_LENGTH (t);
10332  tree new_vec = make_tree_vec (len);
10333
10334  for (int i = 0; i < len; ++i)
10335    {
10336      tree elt = TREE_VEC_ELT (t, i);
10337      if (elt && TREE_CODE (elt) == TREE_VEC)
10338	elt = copy_template_args (elt);
10339      TREE_VEC_ELT (new_vec, i) = elt;
10340    }
10341
10342  NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_vec)
10343    = NON_DEFAULT_TEMPLATE_ARGS_COUNT (t);
10344
10345  return new_vec;
10346}
10347
10348/* Substitute ARGS into the vector or list of template arguments T.  */
10349
10350static tree
10351tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10352{
10353  tree orig_t = t;
10354  int len, need_new = 0, i, expanded_len_adjust = 0, out;
10355  tree *elts;
10356
10357  if (t == error_mark_node)
10358    return error_mark_node;
10359
10360  len = TREE_VEC_LENGTH (t);
10361  elts = XALLOCAVEC (tree, len);
10362
10363  for (i = 0; i < len; i++)
10364    {
10365      tree orig_arg = TREE_VEC_ELT (t, i);
10366      tree new_arg;
10367
10368      if (TREE_CODE (orig_arg) == TREE_VEC)
10369	new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
10370      else if (PACK_EXPANSION_P (orig_arg))
10371        {
10372          /* Substitute into an expansion expression.  */
10373          new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
10374
10375          if (TREE_CODE (new_arg) == TREE_VEC)
10376            /* Add to the expanded length adjustment the number of
10377               expanded arguments. We subtract one from this
10378               measurement, because the argument pack expression
10379               itself is already counted as 1 in
10380               LEN. EXPANDED_LEN_ADJUST can actually be negative, if
10381               the argument pack is empty.  */
10382            expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
10383        }
10384      else if (ARGUMENT_PACK_P (orig_arg))
10385        {
10386          /* Substitute into each of the arguments.  */
10387          new_arg = TYPE_P (orig_arg)
10388            ? cxx_make_type (TREE_CODE (orig_arg))
10389            : make_node (TREE_CODE (orig_arg));
10390
10391          SET_ARGUMENT_PACK_ARGS (
10392            new_arg,
10393            tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
10394                                  args, complain, in_decl));
10395
10396          if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
10397            new_arg = error_mark_node;
10398
10399          if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
10400            TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
10401                                          complain, in_decl);
10402            TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
10403
10404            if (TREE_TYPE (new_arg) == error_mark_node)
10405              new_arg = error_mark_node;
10406          }
10407        }
10408      else
10409	new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
10410
10411      if (new_arg == error_mark_node)
10412	return error_mark_node;
10413
10414      elts[i] = new_arg;
10415      if (new_arg != orig_arg)
10416	need_new = 1;
10417    }
10418
10419  if (!need_new)
10420    return t;
10421
10422  /* Make space for the expanded arguments coming from template
10423     argument packs.  */
10424  t = make_tree_vec (len + expanded_len_adjust);
10425  /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
10426     arguments for a member template.
10427     In that case each TREE_VEC in ORIG_T represents a level of template
10428     arguments, and ORIG_T won't carry any non defaulted argument count.
10429     It will rather be the nested TREE_VECs that will carry one.
10430     In other words, ORIG_T carries a non defaulted argument count only
10431     if it doesn't contain any nested TREE_VEC.  */
10432  if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
10433    {
10434      int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
10435      count += expanded_len_adjust;
10436      SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
10437    }
10438  for (i = 0, out = 0; i < len; i++)
10439    {
10440      if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
10441           || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
10442          && TREE_CODE (elts[i]) == TREE_VEC)
10443        {
10444          int idx;
10445
10446          /* Now expand the template argument pack "in place".  */
10447          for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
10448            TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
10449        }
10450      else
10451        {
10452          TREE_VEC_ELT (t, out) = elts[i];
10453          out++;
10454        }
10455    }
10456
10457  return t;
10458}
10459
10460/* Return the result of substituting ARGS into the template parameters
10461   given by PARMS.  If there are m levels of ARGS and m + n levels of
10462   PARMS, then the result will contain n levels of PARMS.  For
10463   example, if PARMS is `template <class T> template <class U>
10464   template <T*, U, class V>' and ARGS is {{int}, {double}} then the
10465   result will be `template <int*, double, class V>'.  */
10466
10467static tree
10468tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
10469{
10470  tree r = NULL_TREE;
10471  tree* new_parms;
10472
10473  /* When substituting into a template, we must set
10474     PROCESSING_TEMPLATE_DECL as the template parameters may be
10475     dependent if they are based on one-another, and the dependency
10476     predicates are short-circuit outside of templates.  */
10477  ++processing_template_decl;
10478
10479  for (new_parms = &r;
10480       parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
10481       new_parms = &(TREE_CHAIN (*new_parms)),
10482	 parms = TREE_CHAIN (parms))
10483    {
10484      tree new_vec =
10485	make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
10486      int i;
10487
10488      for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
10489	{
10490          tree tuple;
10491
10492          if (parms == error_mark_node)
10493            continue;
10494
10495          tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
10496
10497          if (tuple == error_mark_node)
10498            continue;
10499
10500	  TREE_VEC_ELT (new_vec, i) =
10501	    tsubst_template_parm (tuple, args, complain);
10502	}
10503
10504      *new_parms =
10505	tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
10506			     - TMPL_ARGS_DEPTH (args)),
10507		   new_vec, NULL_TREE);
10508    }
10509
10510  --processing_template_decl;
10511
10512  return r;
10513}
10514
10515/* Return the result of substituting ARGS into one template parameter
10516   given by T. T Must be a TREE_LIST which TREE_VALUE is the template
10517   parameter and which TREE_PURPOSE is the default argument of the
10518   template parameter.  */
10519
10520static tree
10521tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
10522{
10523  tree default_value, parm_decl;
10524
10525  if (args == NULL_TREE
10526      || t == NULL_TREE
10527      || t == error_mark_node)
10528    return t;
10529
10530  gcc_assert (TREE_CODE (t) == TREE_LIST);
10531
10532  default_value = TREE_PURPOSE (t);
10533  parm_decl = TREE_VALUE (t);
10534
10535  parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
10536  if (TREE_CODE (parm_decl) == PARM_DECL
10537      && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
10538    parm_decl = error_mark_node;
10539  default_value = tsubst_template_arg (default_value, args,
10540				       complain, NULL_TREE);
10541
10542  return build_tree_list (default_value, parm_decl);
10543}
10544
10545/* Substitute the ARGS into the indicated aggregate (or enumeration)
10546   type T.  If T is not an aggregate or enumeration type, it is
10547   handled as if by tsubst.  IN_DECL is as for tsubst.  If
10548   ENTERING_SCOPE is nonzero, T is the context for a template which
10549   we are presently tsubst'ing.  Return the substituted value.  */
10550
10551static tree
10552tsubst_aggr_type (tree t,
10553		  tree args,
10554		  tsubst_flags_t complain,
10555		  tree in_decl,
10556		  int entering_scope)
10557{
10558  if (t == NULL_TREE)
10559    return NULL_TREE;
10560
10561  switch (TREE_CODE (t))
10562    {
10563    case RECORD_TYPE:
10564      if (TYPE_PTRMEMFUNC_P (t))
10565	return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
10566
10567      /* Else fall through.  */
10568    case ENUMERAL_TYPE:
10569    case UNION_TYPE:
10570      if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
10571	{
10572	  tree argvec;
10573	  tree context;
10574	  tree r;
10575	  int saved_unevaluated_operand;
10576	  int saved_inhibit_evaluation_warnings;
10577
10578	  /* In "sizeof(X<I>)" we need to evaluate "I".  */
10579	  saved_unevaluated_operand = cp_unevaluated_operand;
10580	  cp_unevaluated_operand = 0;
10581	  saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
10582	  c_inhibit_evaluation_warnings = 0;
10583
10584	  /* First, determine the context for the type we are looking
10585	     up.  */
10586	  context = TYPE_CONTEXT (t);
10587	  if (context && TYPE_P (context))
10588	    {
10589	      context = tsubst_aggr_type (context, args, complain,
10590					  in_decl, /*entering_scope=*/1);
10591	      /* If context is a nested class inside a class template,
10592	         it may still need to be instantiated (c++/33959).  */
10593	      context = complete_type (context);
10594	    }
10595
10596	  /* Then, figure out what arguments are appropriate for the
10597	     type we are trying to find.  For example, given:
10598
10599	       template <class T> struct S;
10600	       template <class T, class U> void f(T, U) { S<U> su; }
10601
10602	     and supposing that we are instantiating f<int, double>,
10603	     then our ARGS will be {int, double}, but, when looking up
10604	     S we only want {double}.  */
10605	  argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
10606					 complain, in_decl);
10607	  if (argvec == error_mark_node)
10608	    r = error_mark_node;
10609	  else
10610	    {
10611	      r = lookup_template_class (t, argvec, in_decl, context,
10612					 entering_scope, complain);
10613	      r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10614	    }
10615
10616	  cp_unevaluated_operand = saved_unevaluated_operand;
10617	  c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
10618
10619	  return r;
10620	}
10621      else
10622	/* This is not a template type, so there's nothing to do.  */
10623	return t;
10624
10625    default:
10626      return tsubst (t, args, complain, in_decl);
10627    }
10628}
10629
10630/* Substitute into the default argument ARG (a default argument for
10631   FN), which has the indicated TYPE.  */
10632
10633tree
10634tsubst_default_argument (tree fn, tree type, tree arg, tsubst_flags_t complain)
10635{
10636  tree saved_class_ptr = NULL_TREE;
10637  tree saved_class_ref = NULL_TREE;
10638  int errs = errorcount + sorrycount;
10639
10640  /* This can happen in invalid code.  */
10641  if (TREE_CODE (arg) == DEFAULT_ARG)
10642    return arg;
10643
10644  /* This default argument came from a template.  Instantiate the
10645     default argument here, not in tsubst.  In the case of
10646     something like:
10647
10648       template <class T>
10649       struct S {
10650	 static T t();
10651	 void f(T = t());
10652       };
10653
10654     we must be careful to do name lookup in the scope of S<T>,
10655     rather than in the current class.  */
10656  push_access_scope (fn);
10657  /* The "this" pointer is not valid in a default argument.  */
10658  if (cfun)
10659    {
10660      saved_class_ptr = current_class_ptr;
10661      cp_function_chain->x_current_class_ptr = NULL_TREE;
10662      saved_class_ref = current_class_ref;
10663      cp_function_chain->x_current_class_ref = NULL_TREE;
10664    }
10665
10666  push_deferring_access_checks(dk_no_deferred);
10667  /* The default argument expression may cause implicitly defined
10668     member functions to be synthesized, which will result in garbage
10669     collection.  We must treat this situation as if we were within
10670     the body of function so as to avoid collecting live data on the
10671     stack.  */
10672  ++function_depth;
10673  arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
10674		     complain, NULL_TREE,
10675		     /*integral_constant_expression_p=*/false);
10676  --function_depth;
10677  pop_deferring_access_checks();
10678
10679  /* Restore the "this" pointer.  */
10680  if (cfun)
10681    {
10682      cp_function_chain->x_current_class_ptr = saved_class_ptr;
10683      cp_function_chain->x_current_class_ref = saved_class_ref;
10684    }
10685
10686  if (errorcount+sorrycount > errs
10687      && (complain & tf_warning_or_error))
10688    inform (input_location,
10689	    "  when instantiating default argument for call to %D", fn);
10690
10691  /* Make sure the default argument is reasonable.  */
10692  arg = check_default_argument (type, arg, complain);
10693
10694  pop_access_scope (fn);
10695
10696  return arg;
10697}
10698
10699/* Substitute into all the default arguments for FN.  */
10700
10701static void
10702tsubst_default_arguments (tree fn, tsubst_flags_t complain)
10703{
10704  tree arg;
10705  tree tmpl_args;
10706
10707  tmpl_args = DECL_TI_ARGS (fn);
10708
10709  /* If this function is not yet instantiated, we certainly don't need
10710     its default arguments.  */
10711  if (uses_template_parms (tmpl_args))
10712    return;
10713  /* Don't do this again for clones.  */
10714  if (DECL_CLONED_FUNCTION_P (fn))
10715    return;
10716
10717  for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
10718       arg;
10719       arg = TREE_CHAIN (arg))
10720    if (TREE_PURPOSE (arg))
10721      TREE_PURPOSE (arg) = tsubst_default_argument (fn,
10722						    TREE_VALUE (arg),
10723						    TREE_PURPOSE (arg),
10724						    complain);
10725}
10726
10727/* Substitute the ARGS into the T, which is a _DECL.  Return the
10728   result of the substitution.  Issue error and warning messages under
10729   control of COMPLAIN.  */
10730
10731static tree
10732tsubst_decl (tree t, tree args, tsubst_flags_t complain)
10733{
10734#define RETURN(EXP) do { r = (EXP); goto out; } while(0)
10735  location_t saved_loc;
10736  tree r = NULL_TREE;
10737  tree in_decl = t;
10738  hashval_t hash = 0;
10739
10740  /* Set the filename and linenumber to improve error-reporting.  */
10741  saved_loc = input_location;
10742  input_location = DECL_SOURCE_LOCATION (t);
10743
10744  switch (TREE_CODE (t))
10745    {
10746    case TEMPLATE_DECL:
10747      {
10748	/* We can get here when processing a member function template,
10749	   member class template, or template template parameter.  */
10750	tree decl = DECL_TEMPLATE_RESULT (t);
10751	tree spec;
10752	tree tmpl_args;
10753	tree full_args;
10754
10755	if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10756	  {
10757	    /* Template template parameter is treated here.  */
10758	    tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10759	    if (new_type == error_mark_node)
10760	      RETURN (error_mark_node);
10761	    /* If we get a real template back, return it.  This can happen in
10762	       the context of most_specialized_partial_spec.  */
10763	    if (TREE_CODE (new_type) == TEMPLATE_DECL)
10764	      return new_type;
10765
10766	    r = copy_decl (t);
10767	    DECL_CHAIN (r) = NULL_TREE;
10768	    TREE_TYPE (r) = new_type;
10769	    DECL_TEMPLATE_RESULT (r)
10770	      = build_decl (DECL_SOURCE_LOCATION (decl),
10771			    TYPE_DECL, DECL_NAME (decl), new_type);
10772	    DECL_TEMPLATE_PARMS (r)
10773	      = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10774				       complain);
10775	    TYPE_NAME (new_type) = r;
10776	    break;
10777	  }
10778
10779	/* We might already have an instance of this template.
10780	   The ARGS are for the surrounding class type, so the
10781	   full args contain the tsubst'd args for the context,
10782	   plus the innermost args from the template decl.  */
10783	tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10784	  ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10785	  : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10786	/* Because this is a template, the arguments will still be
10787	   dependent, even after substitution.  If
10788	   PROCESSING_TEMPLATE_DECL is not set, the dependency
10789	   predicates will short-circuit.  */
10790	++processing_template_decl;
10791	full_args = tsubst_template_args (tmpl_args, args,
10792					  complain, in_decl);
10793	--processing_template_decl;
10794	if (full_args == error_mark_node)
10795	  RETURN (error_mark_node);
10796
10797	/* If this is a default template template argument,
10798	   tsubst might not have changed anything.  */
10799	if (full_args == tmpl_args)
10800	  RETURN (t);
10801
10802	hash = hash_tmpl_and_args (t, full_args);
10803	spec = retrieve_specialization (t, full_args, hash);
10804	if (spec != NULL_TREE)
10805	  {
10806	    r = spec;
10807	    break;
10808	  }
10809
10810	/* Make a new template decl.  It will be similar to the
10811	   original, but will record the current template arguments.
10812	   We also create a new function declaration, which is just
10813	   like the old one, but points to this new template, rather
10814	   than the old one.  */
10815	r = copy_decl (t);
10816	gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10817	DECL_CHAIN (r) = NULL_TREE;
10818
10819	DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10820
10821	if (TREE_CODE (decl) == TYPE_DECL
10822	    && !TYPE_DECL_ALIAS_P (decl))
10823	  {
10824	    tree new_type;
10825	    ++processing_template_decl;
10826	    new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10827	    --processing_template_decl;
10828	    if (new_type == error_mark_node)
10829	      RETURN (error_mark_node);
10830
10831	    TREE_TYPE (r) = new_type;
10832	    /* For a partial specialization, we need to keep pointing to
10833	       the primary template.  */
10834	    if (!DECL_TEMPLATE_SPECIALIZATION (t))
10835	      CLASSTYPE_TI_TEMPLATE (new_type) = r;
10836	    DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10837	    DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10838	    DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10839	  }
10840	else
10841	  {
10842	    tree new_decl;
10843	    ++processing_template_decl;
10844	    new_decl = tsubst (decl, args, complain, in_decl);
10845	    --processing_template_decl;
10846	    if (new_decl == error_mark_node)
10847	      RETURN (error_mark_node);
10848
10849	    DECL_TEMPLATE_RESULT (r) = new_decl;
10850	    DECL_TI_TEMPLATE (new_decl) = r;
10851	    TREE_TYPE (r) = TREE_TYPE (new_decl);
10852	    DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10853	    DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10854	  }
10855
10856	SET_DECL_IMPLICIT_INSTANTIATION (r);
10857	DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10858	DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10859
10860	/* The template parameters for this new template are all the
10861	   template parameters for the old template, except the
10862	   outermost level of parameters.  */
10863	DECL_TEMPLATE_PARMS (r)
10864	  = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10865				   complain);
10866
10867	if (PRIMARY_TEMPLATE_P (t))
10868	  DECL_PRIMARY_TEMPLATE (r) = r;
10869
10870	if (TREE_CODE (decl) != TYPE_DECL && TREE_CODE (decl) != VAR_DECL)
10871	  /* Record this non-type partial instantiation.  */
10872	  register_specialization (r, t,
10873				   DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10874				   false, hash);
10875      }
10876      break;
10877
10878    case FUNCTION_DECL:
10879      {
10880	tree ctx;
10881	tree argvec = NULL_TREE;
10882	tree *friends;
10883	tree gen_tmpl;
10884	tree type;
10885	int member;
10886	int args_depth;
10887	int parms_depth;
10888
10889	/* Nobody should be tsubst'ing into non-template functions.  */
10890	gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10891
10892	if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10893	  {
10894	    tree spec;
10895	    bool dependent_p;
10896
10897	    /* If T is not dependent, just return it.  We have to
10898	       increment PROCESSING_TEMPLATE_DECL because
10899	       value_dependent_expression_p assumes that nothing is
10900	       dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10901	    ++processing_template_decl;
10902	    dependent_p = value_dependent_expression_p (t);
10903	    --processing_template_decl;
10904	    if (!dependent_p)
10905	      RETURN (t);
10906
10907	    /* Calculate the most general template of which R is a
10908	       specialization, and the complete set of arguments used to
10909	       specialize R.  */
10910	    gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10911	    argvec = tsubst_template_args (DECL_TI_ARGS
10912                                          (DECL_TEMPLATE_RESULT
10913                                                 (DECL_TI_TEMPLATE (t))),
10914					   args, complain, in_decl);
10915	    if (argvec == error_mark_node)
10916	      RETURN (error_mark_node);
10917
10918	    /* Check to see if we already have this specialization.  */
10919	    hash = hash_tmpl_and_args (gen_tmpl, argvec);
10920	    spec = retrieve_specialization (gen_tmpl, argvec, hash);
10921
10922	    if (spec)
10923	      {
10924		r = spec;
10925		break;
10926	      }
10927
10928	    /* We can see more levels of arguments than parameters if
10929	       there was a specialization of a member template, like
10930	       this:
10931
10932		 template <class T> struct S { template <class U> void f(); }
10933		 template <> template <class U> void S<int>::f(U);
10934
10935	       Here, we'll be substituting into the specialization,
10936	       because that's where we can find the code we actually
10937	       want to generate, but we'll have enough arguments for
10938	       the most general template.
10939
10940	       We also deal with the peculiar case:
10941
10942		 template <class T> struct S {
10943		   template <class U> friend void f();
10944		 };
10945		 template <class U> void f() {}
10946		 template S<int>;
10947		 template void f<double>();
10948
10949	       Here, the ARGS for the instantiation of will be {int,
10950	       double}.  But, we only need as many ARGS as there are
10951	       levels of template parameters in CODE_PATTERN.  We are
10952	       careful not to get fooled into reducing the ARGS in
10953	       situations like:
10954
10955		 template <class T> struct S { template <class U> void f(U); }
10956		 template <class T> template <> void S<T>::f(int) {}
10957
10958	       which we can spot because the pattern will be a
10959	       specialization in this case.  */
10960	    args_depth = TMPL_ARGS_DEPTH (args);
10961	    parms_depth =
10962	      TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10963	    if (args_depth > parms_depth
10964		&& !DECL_TEMPLATE_SPECIALIZATION (t))
10965	      args = get_innermost_template_args (args, parms_depth);
10966	  }
10967	else
10968	  {
10969	    /* This special case arises when we have something like this:
10970
10971		 template <class T> struct S {
10972		   friend void f<int>(int, double);
10973		 };
10974
10975	       Here, the DECL_TI_TEMPLATE for the friend declaration
10976	       will be an IDENTIFIER_NODE.  We are being called from
10977	       tsubst_friend_function, and we want only to create a
10978	       new decl (R) with appropriate types so that we can call
10979	       determine_specialization.  */
10980	    gen_tmpl = NULL_TREE;
10981	  }
10982
10983	if (DECL_CLASS_SCOPE_P (t))
10984	  {
10985	    if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10986	      member = 2;
10987	    else
10988	      member = 1;
10989	    ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10990				    complain, t, /*entering_scope=*/1);
10991	  }
10992	else
10993	  {
10994	    member = 0;
10995	    ctx = DECL_CONTEXT (t);
10996	  }
10997	type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10998	if (type == error_mark_node)
10999	  RETURN (error_mark_node);
11000
11001	/* If we hit excessive deduction depth, the type is bogus even if
11002	   it isn't error_mark_node, so don't build a decl.  */
11003	if (excessive_deduction_depth)
11004	  RETURN (error_mark_node);
11005
11006	/* We do NOT check for matching decls pushed separately at this
11007	   point, as they may not represent instantiations of this
11008	   template, and in any case are considered separate under the
11009	   discrete model.  */
11010	r = copy_decl (t);
11011	DECL_USE_TEMPLATE (r) = 0;
11012	TREE_TYPE (r) = type;
11013	/* Clear out the mangled name and RTL for the instantiation.  */
11014	SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
11015	SET_DECL_RTL (r, NULL);
11016	/* Leave DECL_INITIAL set on deleted instantiations.  */
11017	if (!DECL_DELETED_FN (r))
11018	  DECL_INITIAL (r) = NULL_TREE;
11019	DECL_CONTEXT (r) = ctx;
11020
11021	/* OpenMP UDRs have the only argument a reference to the declared
11022	   type.  We want to diagnose if the declared type is a reference,
11023	   which is invalid, but as references to references are usually
11024	   quietly merged, diagnose it here.  */
11025	if (DECL_OMP_DECLARE_REDUCTION_P (t))
11026	  {
11027	    tree argtype
11028	      = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
11029	    argtype = tsubst (argtype, args, complain, in_decl);
11030	    if (TREE_CODE (argtype) == REFERENCE_TYPE)
11031	      error_at (DECL_SOURCE_LOCATION (t),
11032			"reference type %qT in "
11033			"%<#pragma omp declare reduction%>", argtype);
11034	    if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
11035	      DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
11036						argtype);
11037	  }
11038
11039	if (member && DECL_CONV_FN_P (r))
11040	  /* Type-conversion operator.  Reconstruct the name, in
11041	     case it's the name of one of the template's parameters.  */
11042	  DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
11043
11044	DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
11045				     complain, t);
11046	DECL_RESULT (r) = NULL_TREE;
11047
11048	TREE_STATIC (r) = 0;
11049	TREE_PUBLIC (r) = TREE_PUBLIC (t);
11050	DECL_EXTERNAL (r) = 1;
11051	/* If this is an instantiation of a function with internal
11052	   linkage, we already know what object file linkage will be
11053	   assigned to the instantiation.  */
11054	DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
11055	DECL_DEFER_OUTPUT (r) = 0;
11056	DECL_CHAIN (r) = NULL_TREE;
11057	DECL_PENDING_INLINE_INFO (r) = 0;
11058	DECL_PENDING_INLINE_P (r) = 0;
11059	DECL_SAVED_TREE (r) = NULL_TREE;
11060	DECL_STRUCT_FUNCTION (r) = NULL;
11061	TREE_USED (r) = 0;
11062	/* We'll re-clone as appropriate in instantiate_template.  */
11063	DECL_CLONED_FUNCTION (r) = NULL_TREE;
11064
11065	/* If we aren't complaining now, return on error before we register
11066	   the specialization so that we'll complain eventually.  */
11067	if ((complain & tf_error) == 0
11068	    && IDENTIFIER_OPNAME_P (DECL_NAME (r))
11069	    && !grok_op_properties (r, /*complain=*/false))
11070	  RETURN (error_mark_node);
11071
11072	/* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
11073	   this in the special friend case mentioned above where
11074	   GEN_TMPL is NULL.  */
11075	if (gen_tmpl)
11076	  {
11077	    DECL_TEMPLATE_INFO (r)
11078	      = build_template_info (gen_tmpl, argvec);
11079	    SET_DECL_IMPLICIT_INSTANTIATION (r);
11080
11081	    tree new_r
11082	      = register_specialization (r, gen_tmpl, argvec, false, hash);
11083	    if (new_r != r)
11084	      /* We instantiated this while substituting into
11085		 the type earlier (template/friend54.C).  */
11086	      RETURN (new_r);
11087
11088	    /* We're not supposed to instantiate default arguments
11089	       until they are called, for a template.  But, for a
11090	       declaration like:
11091
11092		 template <class T> void f ()
11093		 { extern void g(int i = T()); }
11094
11095	       we should do the substitution when the template is
11096	       instantiated.  We handle the member function case in
11097	       instantiate_class_template since the default arguments
11098	       might refer to other members of the class.  */
11099	    if (!member
11100		&& !PRIMARY_TEMPLATE_P (gen_tmpl)
11101		&& !uses_template_parms (argvec))
11102	      tsubst_default_arguments (r, complain);
11103	  }
11104	else
11105	  DECL_TEMPLATE_INFO (r) = NULL_TREE;
11106
11107	/* Copy the list of befriending classes.  */
11108	for (friends = &DECL_BEFRIENDING_CLASSES (r);
11109	     *friends;
11110	     friends = &TREE_CHAIN (*friends))
11111	  {
11112	    *friends = copy_node (*friends);
11113	    TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
11114					    args, complain,
11115					    in_decl);
11116	  }
11117
11118	if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
11119	  {
11120	    maybe_retrofit_in_chrg (r);
11121	    if (DECL_CONSTRUCTOR_P (r))
11122	      grok_ctor_properties (ctx, r);
11123	    if (DECL_INHERITED_CTOR_BASE (r))
11124	      deduce_inheriting_ctor (r);
11125	    /* If this is an instantiation of a member template, clone it.
11126	       If it isn't, that'll be handled by
11127	       clone_constructors_and_destructors.  */
11128	    if (PRIMARY_TEMPLATE_P (gen_tmpl))
11129	      clone_function_decl (r, /*update_method_vec_p=*/0);
11130	  }
11131	else if ((complain & tf_error) != 0
11132		 && IDENTIFIER_OPNAME_P (DECL_NAME (r))
11133		 && !grok_op_properties (r, /*complain=*/true))
11134	  RETURN (error_mark_node);
11135
11136	if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
11137	  SET_DECL_FRIEND_CONTEXT (r,
11138				   tsubst (DECL_FRIEND_CONTEXT (t),
11139					    args, complain, in_decl));
11140
11141	/* Possibly limit visibility based on template args.  */
11142	DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
11143	if (DECL_VISIBILITY_SPECIFIED (t))
11144	  {
11145	    DECL_VISIBILITY_SPECIFIED (r) = 0;
11146	    DECL_ATTRIBUTES (r)
11147	      = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
11148	  }
11149	determine_visibility (r);
11150	if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
11151	    && !processing_template_decl)
11152	  defaulted_late_check (r);
11153
11154	apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
11155					args, complain, in_decl);
11156      }
11157      break;
11158
11159    case PARM_DECL:
11160      {
11161	tree type = NULL_TREE;
11162        int i, len = 1;
11163        tree expanded_types = NULL_TREE;
11164        tree prev_r = NULL_TREE;
11165        tree first_r = NULL_TREE;
11166
11167        if (DECL_PACK_P (t))
11168          {
11169            /* If there is a local specialization that isn't a
11170               parameter pack, it means that we're doing a "simple"
11171               substitution from inside tsubst_pack_expansion. Just
11172               return the local specialization (which will be a single
11173               parm).  */
11174            tree spec = retrieve_local_specialization (t);
11175            if (spec
11176                && TREE_CODE (spec) == PARM_DECL
11177                && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
11178              RETURN (spec);
11179
11180            /* Expand the TYPE_PACK_EXPANSION that provides the types for
11181               the parameters in this function parameter pack.  */
11182            expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
11183						    complain, in_decl);
11184            if (TREE_CODE (expanded_types) == TREE_VEC)
11185              {
11186                len = TREE_VEC_LENGTH (expanded_types);
11187
11188                /* Zero-length parameter packs are boring. Just substitute
11189                   into the chain.  */
11190                if (len == 0)
11191                  RETURN (tsubst (TREE_CHAIN (t), args, complain,
11192				  TREE_CHAIN (t)));
11193              }
11194            else
11195              {
11196                /* All we did was update the type. Make a note of that.  */
11197                type = expanded_types;
11198                expanded_types = NULL_TREE;
11199              }
11200          }
11201
11202        /* Loop through all of the parameters we'll build. When T is
11203           a function parameter pack, LEN is the number of expanded
11204           types in EXPANDED_TYPES; otherwise, LEN is 1.  */
11205        r = NULL_TREE;
11206        for (i = 0; i < len; ++i)
11207          {
11208            prev_r = r;
11209            r = copy_node (t);
11210            if (DECL_TEMPLATE_PARM_P (t))
11211              SET_DECL_TEMPLATE_PARM_P (r);
11212
11213            if (expanded_types)
11214              /* We're on the Ith parameter of the function parameter
11215                 pack.  */
11216              {
11217                /* Get the Ith type.  */
11218                type = TREE_VEC_ELT (expanded_types, i);
11219
11220		/* Rename the parameter to include the index.  */
11221		DECL_NAME (r)
11222		  = make_ith_pack_parameter_name (DECL_NAME (r), i);
11223              }
11224            else if (!type)
11225              /* We're dealing with a normal parameter.  */
11226              type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11227
11228            type = type_decays_to (type);
11229            TREE_TYPE (r) = type;
11230            cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11231
11232            if (DECL_INITIAL (r))
11233              {
11234                if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
11235                  DECL_INITIAL (r) = TREE_TYPE (r);
11236                else
11237                  DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
11238                                             complain, in_decl);
11239              }
11240
11241            DECL_CONTEXT (r) = NULL_TREE;
11242
11243            if (!DECL_TEMPLATE_PARM_P (r))
11244              DECL_ARG_TYPE (r) = type_passed_as (type);
11245
11246	    apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
11247					    args, complain, in_decl);
11248
11249            /* Keep track of the first new parameter we
11250               generate. That's what will be returned to the
11251               caller.  */
11252            if (!first_r)
11253              first_r = r;
11254
11255            /* Build a proper chain of parameters when substituting
11256               into a function parameter pack.  */
11257            if (prev_r)
11258              DECL_CHAIN (prev_r) = r;
11259          }
11260
11261	/* If cp_unevaluated_operand is set, we're just looking for a
11262	   single dummy parameter, so don't keep going.  */
11263	if (DECL_CHAIN (t) && !cp_unevaluated_operand)
11264	  DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
11265				   complain, DECL_CHAIN (t));
11266
11267        /* FIRST_R contains the start of the chain we've built.  */
11268        r = first_r;
11269      }
11270      break;
11271
11272    case FIELD_DECL:
11273      {
11274	tree type = NULL_TREE;
11275	tree vec = NULL_TREE;
11276	tree expanded_types = NULL_TREE;
11277	int len = 1;
11278
11279	if (PACK_EXPANSION_P (TREE_TYPE (t)))
11280	  {
11281	    /* This field is a lambda capture pack.  Return a TREE_VEC of
11282	       the expanded fields to instantiate_class_template_1 and
11283	       store them in the specializations hash table as a
11284	       NONTYPE_ARGUMENT_PACK so that tsubst_copy can find them.  */
11285            expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
11286						    complain, in_decl);
11287            if (TREE_CODE (expanded_types) == TREE_VEC)
11288              {
11289                len = TREE_VEC_LENGTH (expanded_types);
11290		vec = make_tree_vec (len);
11291              }
11292            else
11293              {
11294                /* All we did was update the type. Make a note of that.  */
11295                type = expanded_types;
11296                expanded_types = NULL_TREE;
11297              }
11298	  }
11299
11300	for (int i = 0; i < len; ++i)
11301	  {
11302	    r = copy_decl (t);
11303	    if (expanded_types)
11304	      {
11305		type = TREE_VEC_ELT (expanded_types, i);
11306		DECL_NAME (r)
11307		  = make_ith_pack_parameter_name (DECL_NAME (r), i);
11308	      }
11309            else if (!type)
11310              type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11311
11312	    if (type == error_mark_node)
11313	      RETURN (error_mark_node);
11314	    TREE_TYPE (r) = type;
11315	    cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11316
11317	    if (DECL_C_BIT_FIELD (r))
11318	      /* For bit-fields, DECL_INITIAL gives the number of bits.  For
11319		 non-bit-fields DECL_INITIAL is a non-static data member
11320		 initializer, which gets deferred instantiation.  */
11321	      DECL_INITIAL (r)
11322		= tsubst_expr (DECL_INITIAL (t), args,
11323			       complain, in_decl,
11324			       /*integral_constant_expression_p=*/true);
11325	    else if (DECL_INITIAL (t))
11326	      {
11327		/* Set up DECL_TEMPLATE_INFO so that we can get at the
11328		   NSDMI in perform_member_init.  Still set DECL_INITIAL
11329		   so that we know there is one.  */
11330		DECL_INITIAL (r) = void_node;
11331		gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
11332		retrofit_lang_decl (r);
11333		DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
11334	      }
11335	    /* We don't have to set DECL_CONTEXT here; it is set by
11336	       finish_member_declaration.  */
11337	    DECL_CHAIN (r) = NULL_TREE;
11338
11339	    apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
11340					    args, complain, in_decl);
11341
11342	    if (vec)
11343	      TREE_VEC_ELT (vec, i) = r;
11344	  }
11345
11346	if (vec)
11347	  {
11348	    r = vec;
11349	    tree pack = make_node (NONTYPE_ARGUMENT_PACK);
11350	    tree tpack = cxx_make_type (TYPE_ARGUMENT_PACK);
11351	    SET_ARGUMENT_PACK_ARGS (pack, vec);
11352	    SET_ARGUMENT_PACK_ARGS (tpack, expanded_types);
11353	    TREE_TYPE (pack) = tpack;
11354	    register_specialization (pack, t, args, false, 0);
11355	  }
11356      }
11357      break;
11358
11359    case USING_DECL:
11360      /* We reach here only for member using decls.  We also need to check
11361	 uses_template_parms because DECL_DEPENDENT_P is not set for a
11362	 using-declaration that designates a member of the current
11363	 instantiation (c++/53549).  */
11364      if (DECL_DEPENDENT_P (t)
11365	  || uses_template_parms (USING_DECL_SCOPE (t)))
11366	{
11367	  tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
11368					 complain, in_decl);
11369	  tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
11370	  r = do_class_using_decl (inst_scope, name);
11371	  if (!r)
11372	    r = error_mark_node;
11373	  else
11374	    {
11375	      TREE_PROTECTED (r) = TREE_PROTECTED (t);
11376	      TREE_PRIVATE (r) = TREE_PRIVATE (t);
11377	    }
11378	}
11379      else
11380	{
11381	  r = copy_node (t);
11382	  DECL_CHAIN (r) = NULL_TREE;
11383	}
11384      break;
11385
11386    case TYPE_DECL:
11387    case VAR_DECL:
11388      {
11389	tree argvec = NULL_TREE;
11390	tree gen_tmpl = NULL_TREE;
11391	tree spec;
11392	tree tmpl = NULL_TREE;
11393	tree ctx;
11394	tree type = NULL_TREE;
11395	bool local_p;
11396
11397	if (TREE_TYPE (t) == error_mark_node)
11398	  RETURN (error_mark_node);
11399
11400	if (TREE_CODE (t) == TYPE_DECL
11401	    && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
11402	  {
11403	    /* If this is the canonical decl, we don't have to
11404	       mess with instantiations, and often we can't (for
11405	       typename, template type parms and such).  Note that
11406	       TYPE_NAME is not correct for the above test if
11407	       we've copied the type for a typedef.  */
11408	    type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11409	    if (type == error_mark_node)
11410	      RETURN (error_mark_node);
11411	    r = TYPE_NAME (type);
11412	    break;
11413	  }
11414
11415	/* Check to see if we already have the specialization we
11416	   need.  */
11417	spec = NULL_TREE;
11418	if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
11419	  {
11420	    /* T is a static data member or namespace-scope entity.
11421	       We have to substitute into namespace-scope variables
11422	       (not just variable templates) because of cases like:
11423
11424	         template <class T> void f() { extern T t; }
11425
11426	       where the entity referenced is not known until
11427	       instantiation time.  */
11428	    local_p = false;
11429	    ctx = DECL_CONTEXT (t);
11430	    if (DECL_CLASS_SCOPE_P (t))
11431	      {
11432		ctx = tsubst_aggr_type (ctx, args,
11433					complain,
11434					in_decl, /*entering_scope=*/1);
11435		/* If CTX is unchanged, then T is in fact the
11436		   specialization we want.  That situation occurs when
11437		   referencing a static data member within in its own
11438		   class.  We can use pointer equality, rather than
11439		   same_type_p, because DECL_CONTEXT is always
11440		   canonical...  */
11441		if (ctx == DECL_CONTEXT (t)
11442		    /* ... unless T is a member template; in which
11443		       case our caller can be willing to create a
11444		       specialization of that template represented
11445		       by T.  */
11446		    && !(DECL_TI_TEMPLATE (t)
11447			 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t))))
11448		  spec = t;
11449	      }
11450
11451	    if (!spec)
11452	      {
11453		tmpl = DECL_TI_TEMPLATE (t);
11454		gen_tmpl = most_general_template (tmpl);
11455		argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
11456		if (argvec != error_mark_node)
11457		  argvec = (coerce_innermost_template_parms
11458			    (DECL_TEMPLATE_PARMS (gen_tmpl),
11459			     argvec, t, complain,
11460			     /*all*/true, /*defarg*/true));
11461		if (argvec == error_mark_node)
11462		  RETURN (error_mark_node);
11463		hash = hash_tmpl_and_args (gen_tmpl, argvec);
11464		spec = retrieve_specialization (gen_tmpl, argvec, hash);
11465	      }
11466	  }
11467	else
11468	  {
11469	    /* A local variable.  */
11470	    local_p = true;
11471	    /* Subsequent calls to pushdecl will fill this in.  */
11472	    ctx = NULL_TREE;
11473	    spec = retrieve_local_specialization (t);
11474	  }
11475	/* If we already have the specialization we need, there is
11476	   nothing more to do.  */
11477	if (spec)
11478	  {
11479	    r = spec;
11480	    break;
11481	  }
11482
11483	/* Create a new node for the specialization we need.  */
11484	r = copy_decl (t);
11485	if (type == NULL_TREE)
11486	  {
11487	    if (is_typedef_decl (t))
11488	      type = DECL_ORIGINAL_TYPE (t);
11489	    else
11490	      type = TREE_TYPE (t);
11491	    if (VAR_P (t)
11492		&& VAR_HAD_UNKNOWN_BOUND (t)
11493		&& type != error_mark_node)
11494	      type = strip_array_domain (type);
11495	    type = tsubst (type, args, complain, in_decl);
11496	  }
11497	if (VAR_P (r))
11498	  {
11499	    /* Even if the original location is out of scope, the
11500	       newly substituted one is not.  */
11501	    DECL_DEAD_FOR_LOCAL (r) = 0;
11502	    DECL_INITIALIZED_P (r) = 0;
11503	    DECL_TEMPLATE_INSTANTIATED (r) = 0;
11504	    if (type == error_mark_node)
11505	      RETURN (error_mark_node);
11506	    if (TREE_CODE (type) == FUNCTION_TYPE)
11507	      {
11508		/* It may seem that this case cannot occur, since:
11509
11510		   typedef void f();
11511		   void g() { f x; }
11512
11513		   declares a function, not a variable.  However:
11514
11515		   typedef void f();
11516		   template <typename T> void g() { T t; }
11517		   template void g<f>();
11518
11519		   is an attempt to declare a variable with function
11520		   type.  */
11521		error ("variable %qD has function type",
11522		       /* R is not yet sufficiently initialized, so we
11523			  just use its name.  */
11524		       DECL_NAME (r));
11525		RETURN (error_mark_node);
11526	      }
11527	    type = complete_type (type);
11528	    /* Wait until cp_finish_decl to set this again, to handle
11529	       circular dependency (template/instantiate6.C). */
11530	    DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
11531	    type = check_var_type (DECL_NAME (r), type);
11532
11533	    if (DECL_HAS_VALUE_EXPR_P (t))
11534	      {
11535		tree ve = DECL_VALUE_EXPR (t);
11536		ve = tsubst_expr (ve, args, complain, in_decl,
11537				  /*constant_expression_p=*/false);
11538		if (REFERENCE_REF_P (ve))
11539		  {
11540		    gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
11541		    ve = TREE_OPERAND (ve, 0);
11542		  }
11543		SET_DECL_VALUE_EXPR (r, ve);
11544	      }
11545	    if (TREE_STATIC (r) || DECL_EXTERNAL (r))
11546	      set_decl_tls_model (r, decl_tls_model (t));
11547	  }
11548	else if (DECL_SELF_REFERENCE_P (t))
11549	  SET_DECL_SELF_REFERENCE_P (r);
11550	TREE_TYPE (r) = type;
11551	cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11552	DECL_CONTEXT (r) = ctx;
11553	/* Clear out the mangled name and RTL for the instantiation.  */
11554	SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
11555	if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11556	  SET_DECL_RTL (r, NULL);
11557	/* The initializer must not be expanded until it is required;
11558	   see [temp.inst].  */
11559	DECL_INITIAL (r) = NULL_TREE;
11560	if (VAR_P (r))
11561	  DECL_MODE (r) = VOIDmode;
11562	if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11563	  SET_DECL_RTL (r, NULL);
11564	DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
11565	if (VAR_P (r))
11566	  {
11567	    /* Possibly limit visibility based on template args.  */
11568	    DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
11569	    if (DECL_VISIBILITY_SPECIFIED (t))
11570	      {
11571		DECL_VISIBILITY_SPECIFIED (r) = 0;
11572		DECL_ATTRIBUTES (r)
11573		  = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
11574	      }
11575	    determine_visibility (r);
11576	  }
11577
11578	if (!local_p)
11579	  {
11580	    /* A static data member declaration is always marked
11581	       external when it is declared in-class, even if an
11582	       initializer is present.  We mimic the non-template
11583	       processing here.  */
11584	    DECL_EXTERNAL (r) = 1;
11585	    if (DECL_NAMESPACE_SCOPE_P (t))
11586	      DECL_NOT_REALLY_EXTERN (r) = 1;
11587
11588	    DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
11589	    SET_DECL_IMPLICIT_INSTANTIATION (r);
11590	    register_specialization (r, gen_tmpl, argvec, false, hash);
11591	  }
11592	else if (!cp_unevaluated_operand)
11593	  register_local_specialization (r, t);
11594
11595	DECL_CHAIN (r) = NULL_TREE;
11596
11597	apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
11598					/*flags=*/0,
11599					args, complain, in_decl);
11600
11601	/* Preserve a typedef that names a type.  */
11602	if (is_typedef_decl (r))
11603	  {
11604	    DECL_ORIGINAL_TYPE (r) = NULL_TREE;
11605	    set_underlying_type (r);
11606	    if (TYPE_DECL_ALIAS_P (r) && type != error_mark_node)
11607	      /* An alias template specialization can be dependent
11608		 even if its underlying type is not.  */
11609	      TYPE_DEPENDENT_P_VALID (TREE_TYPE (r)) = false;
11610	  }
11611
11612	layout_decl (r, 0);
11613      }
11614      break;
11615
11616    default:
11617      gcc_unreachable ();
11618    }
11619#undef RETURN
11620
11621 out:
11622  /* Restore the file and line information.  */
11623  input_location = saved_loc;
11624
11625  return r;
11626}
11627
11628/* Substitute into the ARG_TYPES of a function type.
11629   If END is a TREE_CHAIN, leave it and any following types
11630   un-substituted.  */
11631
11632static tree
11633tsubst_arg_types (tree arg_types,
11634		  tree args,
11635		  tree end,
11636		  tsubst_flags_t complain,
11637		  tree in_decl)
11638{
11639  tree remaining_arg_types;
11640  tree type = NULL_TREE;
11641  int i = 1;
11642  tree expanded_args = NULL_TREE;
11643  tree default_arg;
11644
11645  if (!arg_types || arg_types == void_list_node || arg_types == end)
11646    return arg_types;
11647
11648  remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
11649					  args, end, complain, in_decl);
11650  if (remaining_arg_types == error_mark_node)
11651    return error_mark_node;
11652
11653  if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
11654    {
11655      /* For a pack expansion, perform substitution on the
11656         entire expression. Later on, we'll handle the arguments
11657         one-by-one.  */
11658      expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
11659                                            args, complain, in_decl);
11660
11661      if (TREE_CODE (expanded_args) == TREE_VEC)
11662        /* So that we'll spin through the parameters, one by one.  */
11663        i = TREE_VEC_LENGTH (expanded_args);
11664      else
11665        {
11666          /* We only partially substituted into the parameter
11667             pack. Our type is TYPE_PACK_EXPANSION.  */
11668          type = expanded_args;
11669          expanded_args = NULL_TREE;
11670        }
11671    }
11672
11673  while (i > 0) {
11674    --i;
11675
11676    if (expanded_args)
11677      type = TREE_VEC_ELT (expanded_args, i);
11678    else if (!type)
11679      type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
11680
11681    if (type == error_mark_node)
11682      return error_mark_node;
11683    if (VOID_TYPE_P (type))
11684      {
11685        if (complain & tf_error)
11686          {
11687            error ("invalid parameter type %qT", type);
11688            if (in_decl)
11689              error ("in declaration %q+D", in_decl);
11690          }
11691        return error_mark_node;
11692    }
11693    /* DR 657. */
11694    if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
11695      return error_mark_node;
11696
11697    /* Do array-to-pointer, function-to-pointer conversion, and ignore
11698       top-level qualifiers as required.  */
11699    type = cv_unqualified (type_decays_to (type));
11700
11701    /* We do not substitute into default arguments here.  The standard
11702       mandates that they be instantiated only when needed, which is
11703       done in build_over_call.  */
11704    default_arg = TREE_PURPOSE (arg_types);
11705
11706    if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
11707      {
11708        /* We've instantiated a template before its default arguments
11709           have been parsed.  This can happen for a nested template
11710           class, and is not an error unless we require the default
11711           argument in a call of this function.  */
11712        remaining_arg_types =
11713          tree_cons (default_arg, type, remaining_arg_types);
11714        vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
11715      }
11716    else
11717      remaining_arg_types =
11718        hash_tree_cons (default_arg, type, remaining_arg_types);
11719  }
11720
11721  return remaining_arg_types;
11722}
11723
11724/* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
11725   *not* handle the exception-specification for FNTYPE, because the
11726   initial substitution of explicitly provided template parameters
11727   during argument deduction forbids substitution into the
11728   exception-specification:
11729
11730     [temp.deduct]
11731
11732     All references in the function type of the function template to  the
11733     corresponding template parameters are replaced by the specified tem-
11734     plate argument values.  If a substitution in a template parameter or
11735     in  the function type of the function template results in an invalid
11736     type, type deduction fails.  [Note: The equivalent  substitution  in
11737     exception specifications is done only when the function is instanti-
11738     ated, at which point a program is  ill-formed  if  the  substitution
11739     results in an invalid type.]  */
11740
11741static tree
11742tsubst_function_type (tree t,
11743		      tree args,
11744		      tsubst_flags_t complain,
11745		      tree in_decl)
11746{
11747  tree return_type;
11748  tree arg_types = NULL_TREE;
11749  tree fntype;
11750
11751  /* The TYPE_CONTEXT is not used for function/method types.  */
11752  gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
11753
11754  /* DR 1227: Mixing immediate and non-immediate contexts in deduction
11755     failure.  */
11756  bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
11757
11758  if (late_return_type_p)
11759    {
11760      /* Substitute the argument types.  */
11761      arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11762				    complain, in_decl);
11763      if (arg_types == error_mark_node)
11764	return error_mark_node;
11765
11766      tree save_ccp = current_class_ptr;
11767      tree save_ccr = current_class_ref;
11768      tree this_type = (TREE_CODE (t) == METHOD_TYPE
11769			? TREE_TYPE (TREE_VALUE (arg_types)) : NULL_TREE);
11770      bool do_inject = this_type && CLASS_TYPE_P (this_type);
11771      if (do_inject)
11772	{
11773	  /* DR 1207: 'this' is in scope in the trailing return type.  */
11774	  inject_this_parameter (this_type, cp_type_quals (this_type));
11775	}
11776
11777      /* Substitute the return type.  */
11778      return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11779
11780      if (do_inject)
11781	{
11782	  current_class_ptr = save_ccp;
11783	  current_class_ref = save_ccr;
11784	}
11785    }
11786  else
11787    /* Substitute the return type.  */
11788    return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11789
11790  if (return_type == error_mark_node)
11791    return error_mark_node;
11792  /* DR 486 clarifies that creation of a function type with an
11793     invalid return type is a deduction failure.  */
11794  if (TREE_CODE (return_type) == ARRAY_TYPE
11795      || TREE_CODE (return_type) == FUNCTION_TYPE)
11796    {
11797      if (complain & tf_error)
11798	{
11799	  if (TREE_CODE (return_type) == ARRAY_TYPE)
11800	    error ("function returning an array");
11801	  else
11802	    error ("function returning a function");
11803	}
11804      return error_mark_node;
11805    }
11806  /* And DR 657. */
11807  if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
11808    return error_mark_node;
11809
11810  if (!late_return_type_p)
11811    {
11812      /* Substitute the argument types.  */
11813      arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11814				    complain, in_decl);
11815      if (arg_types == error_mark_node)
11816	return error_mark_node;
11817    }
11818
11819  /* Construct a new type node and return it.  */
11820  if (TREE_CODE (t) == FUNCTION_TYPE)
11821    {
11822      fntype = build_function_type (return_type, arg_types);
11823      fntype = apply_memfn_quals (fntype,
11824				  type_memfn_quals (t),
11825				  type_memfn_rqual (t));
11826    }
11827  else
11828    {
11829      tree r = TREE_TYPE (TREE_VALUE (arg_types));
11830      /* Don't pick up extra function qualifiers from the basetype.  */
11831      r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
11832      if (! MAYBE_CLASS_TYPE_P (r))
11833	{
11834	  /* [temp.deduct]
11835
11836	     Type deduction may fail for any of the following
11837	     reasons:
11838
11839	     -- Attempting to create "pointer to member of T" when T
11840	     is not a class type.  */
11841	  if (complain & tf_error)
11842	    error ("creating pointer to member function of non-class type %qT",
11843		      r);
11844	  return error_mark_node;
11845	}
11846
11847      fntype = build_method_type_directly (r, return_type,
11848					   TREE_CHAIN (arg_types));
11849      fntype = build_ref_qualified_type (fntype, type_memfn_rqual (t));
11850    }
11851  fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
11852
11853  if (late_return_type_p)
11854    TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
11855
11856  return fntype;
11857}
11858
11859/* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
11860   ARGS into that specification, and return the substituted
11861   specification.  If there is no specification, return NULL_TREE.  */
11862
11863static tree
11864tsubst_exception_specification (tree fntype,
11865				tree args,
11866				tsubst_flags_t complain,
11867				tree in_decl,
11868				bool defer_ok)
11869{
11870  tree specs;
11871  tree new_specs;
11872
11873  specs = TYPE_RAISES_EXCEPTIONS (fntype);
11874  new_specs = NULL_TREE;
11875  if (specs && TREE_PURPOSE (specs))
11876    {
11877      /* A noexcept-specifier.  */
11878      tree expr = TREE_PURPOSE (specs);
11879      if (TREE_CODE (expr) == INTEGER_CST)
11880	new_specs = expr;
11881      else if (defer_ok)
11882	{
11883	  /* Defer instantiation of noexcept-specifiers to avoid
11884	     excessive instantiations (c++/49107).  */
11885	  new_specs = make_node (DEFERRED_NOEXCEPT);
11886	  if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11887	    {
11888	      /* We already partially instantiated this member template,
11889		 so combine the new args with the old.  */
11890	      DEFERRED_NOEXCEPT_PATTERN (new_specs)
11891		= DEFERRED_NOEXCEPT_PATTERN (expr);
11892	      DEFERRED_NOEXCEPT_ARGS (new_specs)
11893		= add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11894	    }
11895	  else
11896	    {
11897	      DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11898	      DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11899	    }
11900	}
11901      else
11902	new_specs = tsubst_copy_and_build
11903	  (expr, args, complain, in_decl, /*function_p=*/false,
11904	   /*integral_constant_expression_p=*/true);
11905      new_specs = build_noexcept_spec (new_specs, complain);
11906    }
11907  else if (specs)
11908    {
11909      if (! TREE_VALUE (specs))
11910	new_specs = specs;
11911      else
11912	while (specs)
11913	  {
11914	    tree spec;
11915            int i, len = 1;
11916            tree expanded_specs = NULL_TREE;
11917
11918            if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11919              {
11920                /* Expand the pack expansion type.  */
11921                expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11922                                                       args, complain,
11923                                                       in_decl);
11924
11925		if (expanded_specs == error_mark_node)
11926		  return error_mark_node;
11927		else if (TREE_CODE (expanded_specs) == TREE_VEC)
11928		  len = TREE_VEC_LENGTH (expanded_specs);
11929		else
11930		  {
11931		    /* We're substituting into a member template, so
11932		       we got a TYPE_PACK_EXPANSION back.  Add that
11933		       expansion and move on.  */
11934		    gcc_assert (TREE_CODE (expanded_specs)
11935				== TYPE_PACK_EXPANSION);
11936		    new_specs = add_exception_specifier (new_specs,
11937							 expanded_specs,
11938							 complain);
11939		    specs = TREE_CHAIN (specs);
11940		    continue;
11941		  }
11942              }
11943
11944            for (i = 0; i < len; ++i)
11945              {
11946                if (expanded_specs)
11947                  spec = TREE_VEC_ELT (expanded_specs, i);
11948                else
11949                  spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11950                if (spec == error_mark_node)
11951                  return spec;
11952                new_specs = add_exception_specifier (new_specs, spec,
11953                                                     complain);
11954              }
11955
11956            specs = TREE_CHAIN (specs);
11957	  }
11958    }
11959  return new_specs;
11960}
11961
11962/* Take the tree structure T and replace template parameters used
11963   therein with the argument vector ARGS.  IN_DECL is an associated
11964   decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11965   Issue error and warning messages under control of COMPLAIN.  Note
11966   that we must be relatively non-tolerant of extensions here, in
11967   order to preserve conformance; if we allow substitutions that
11968   should not be allowed, we may allow argument deductions that should
11969   not succeed, and therefore report ambiguous overload situations
11970   where there are none.  In theory, we could allow the substitution,
11971   but indicate that it should have failed, and allow our caller to
11972   make sure that the right thing happens, but we don't try to do this
11973   yet.
11974
11975   This function is used for dealing with types, decls and the like;
11976   for expressions, use tsubst_expr or tsubst_copy.  */
11977
11978tree
11979tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11980{
11981  enum tree_code code;
11982  tree type, r = NULL_TREE;
11983
11984  if (t == NULL_TREE || t == error_mark_node
11985      || t == integer_type_node
11986      || t == void_type_node
11987      || t == char_type_node
11988      || t == unknown_type_node
11989      || TREE_CODE (t) == NAMESPACE_DECL
11990      || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11991    return t;
11992
11993  if (DECL_P (t))
11994    return tsubst_decl (t, args, complain);
11995
11996  if (args == NULL_TREE)
11997    return t;
11998
11999  code = TREE_CODE (t);
12000
12001  if (code == IDENTIFIER_NODE)
12002    type = IDENTIFIER_TYPE_VALUE (t);
12003  else
12004    type = TREE_TYPE (t);
12005
12006  gcc_assert (type != unknown_type_node);
12007
12008  /* Reuse typedefs.  We need to do this to handle dependent attributes,
12009     such as attribute aligned.  */
12010  if (TYPE_P (t)
12011      && typedef_variant_p (t))
12012    {
12013      tree decl = TYPE_NAME (t);
12014
12015      if (alias_template_specialization_p (t))
12016	{
12017	  /* DECL represents an alias template and we want to
12018	     instantiate it.  */
12019	  tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
12020	  tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
12021	  r = instantiate_alias_template (tmpl, gen_args, complain);
12022	}
12023      else if (DECL_CLASS_SCOPE_P (decl)
12024	       && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
12025	       && uses_template_parms (DECL_CONTEXT (decl)))
12026	{
12027	  tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
12028	  tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
12029	  r = retrieve_specialization (tmpl, gen_args, 0);
12030	}
12031      else if (DECL_FUNCTION_SCOPE_P (decl)
12032	       && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
12033	       && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
12034	r = retrieve_local_specialization (decl);
12035      else
12036	/* The typedef is from a non-template context.  */
12037	return t;
12038
12039      if (r)
12040	{
12041	  r = TREE_TYPE (r);
12042	  r = cp_build_qualified_type_real
12043	    (r, cp_type_quals (t) | cp_type_quals (r),
12044	     complain | tf_ignore_bad_quals);
12045	  return r;
12046	}
12047      else
12048	{
12049	  /* We don't have an instantiation yet, so drop the typedef.  */
12050	  int quals = cp_type_quals (t);
12051	  t = DECL_ORIGINAL_TYPE (decl);
12052	  t = cp_build_qualified_type_real (t, quals,
12053					    complain | tf_ignore_bad_quals);
12054	}
12055    }
12056
12057  if (type
12058      && code != TYPENAME_TYPE
12059      && code != TEMPLATE_TYPE_PARM
12060      && code != IDENTIFIER_NODE
12061      && code != FUNCTION_TYPE
12062      && code != METHOD_TYPE)
12063    type = tsubst (type, args, complain, in_decl);
12064  if (type == error_mark_node)
12065    return error_mark_node;
12066
12067  switch (code)
12068    {
12069    case RECORD_TYPE:
12070    case UNION_TYPE:
12071    case ENUMERAL_TYPE:
12072      return tsubst_aggr_type (t, args, complain, in_decl,
12073			       /*entering_scope=*/0);
12074
12075    case ERROR_MARK:
12076    case IDENTIFIER_NODE:
12077    case VOID_TYPE:
12078    case REAL_TYPE:
12079    case COMPLEX_TYPE:
12080    case VECTOR_TYPE:
12081    case BOOLEAN_TYPE:
12082    case NULLPTR_TYPE:
12083    case LANG_TYPE:
12084      return t;
12085
12086    case INTEGER_TYPE:
12087      if (t == integer_type_node)
12088	return t;
12089
12090      if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
12091	  && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
12092	return t;
12093
12094      {
12095	tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
12096
12097	max = tsubst_expr (omax, args, complain, in_decl,
12098			   /*integral_constant_expression_p=*/false);
12099
12100	/* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
12101	   needed.  */
12102	if (TREE_CODE (max) == NOP_EXPR
12103	    && TREE_SIDE_EFFECTS (omax)
12104	    && !TREE_TYPE (max))
12105	  TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
12106
12107	/* If we're in a partial instantiation, preserve the magic NOP_EXPR
12108	   with TREE_SIDE_EFFECTS that indicates this is not an integral
12109	   constant expression.  */
12110	if (processing_template_decl
12111	    && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
12112	  {
12113	    gcc_assert (TREE_CODE (max) == NOP_EXPR);
12114	    TREE_SIDE_EFFECTS (max) = 1;
12115	  }
12116
12117	return compute_array_index_type (NULL_TREE, max, complain);
12118      }
12119
12120    case TEMPLATE_TYPE_PARM:
12121    case TEMPLATE_TEMPLATE_PARM:
12122    case BOUND_TEMPLATE_TEMPLATE_PARM:
12123    case TEMPLATE_PARM_INDEX:
12124      {
12125	int idx;
12126	int level;
12127	int levels;
12128	tree arg = NULL_TREE;
12129
12130	r = NULL_TREE;
12131
12132	gcc_assert (TREE_VEC_LENGTH (args) > 0);
12133	template_parm_level_and_index (t, &level, &idx);
12134
12135	levels = TMPL_ARGS_DEPTH (args);
12136	if (level <= levels)
12137	  {
12138	    arg = TMPL_ARG (args, level, idx);
12139
12140	    if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
12141	      {
12142		/* See through ARGUMENT_PACK_SELECT arguments. */
12143		arg = ARGUMENT_PACK_SELECT_ARG (arg);
12144		/* If the selected argument is an expansion E, that most
12145		   likely means we were called from
12146		   gen_elem_of_pack_expansion_instantiation during the
12147		   substituting of pack an argument pack (which Ith
12148		   element is a pack expansion, where I is
12149		   ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
12150		   In this case, the Ith element resulting from this
12151		   substituting is going to be a pack expansion, which
12152		   pattern is the pattern of E.  Let's return the
12153		   pattern of E, and
12154		   gen_elem_of_pack_expansion_instantiation will
12155		   build the resulting pack expansion from it.  */
12156		if (PACK_EXPANSION_P (arg))
12157		  {
12158		    /* Make sure we aren't throwing away arg info.  */
12159		    gcc_assert (!PACK_EXPANSION_EXTRA_ARGS (arg));
12160		    arg = PACK_EXPANSION_PATTERN (arg);
12161		  }
12162	      }
12163	  }
12164
12165	if (arg == error_mark_node)
12166	  return error_mark_node;
12167	else if (arg != NULL_TREE)
12168	  {
12169	    if (ARGUMENT_PACK_P (arg))
12170	      /* If ARG is an argument pack, we don't actually want to
12171		 perform a substitution here, because substitutions
12172		 for argument packs are only done
12173		 element-by-element. We can get to this point when
12174		 substituting the type of a non-type template
12175		 parameter pack, when that type actually contains
12176		 template parameter packs from an outer template, e.g.,
12177
12178	         template<typename... Types> struct A {
12179		   template<Types... Values> struct B { };
12180                 };  */
12181	      return t;
12182
12183	    if (code == TEMPLATE_TYPE_PARM)
12184	      {
12185		int quals;
12186		gcc_assert (TYPE_P (arg));
12187
12188		quals = cp_type_quals (arg) | cp_type_quals (t);
12189
12190		return cp_build_qualified_type_real
12191		  (arg, quals, complain | tf_ignore_bad_quals);
12192	      }
12193	    else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
12194	      {
12195		/* We are processing a type constructed from a
12196		   template template parameter.  */
12197		tree argvec = tsubst (TYPE_TI_ARGS (t),
12198				      args, complain, in_decl);
12199		if (argvec == error_mark_node)
12200		  return error_mark_node;
12201
12202		gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
12203			    || TREE_CODE (arg) == TEMPLATE_DECL
12204			    || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
12205
12206		if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
12207		  /* Consider this code:
12208
12209			template <template <class> class Template>
12210			struct Internal {
12211			template <class Arg> using Bind = Template<Arg>;
12212			};
12213
12214			template <template <class> class Template, class Arg>
12215			using Instantiate = Template<Arg>; //#0
12216
12217			template <template <class> class Template,
12218                                  class Argument>
12219			using Bind =
12220			  Instantiate<Internal<Template>::template Bind,
12221				      Argument>; //#1
12222
12223		     When #1 is parsed, the
12224		     BOUND_TEMPLATE_TEMPLATE_PARM representing the
12225		     parameter `Template' in #0 matches the
12226		     UNBOUND_CLASS_TEMPLATE representing the argument
12227		     `Internal<Template>::template Bind'; We then want
12228		     to assemble the type `Bind<Argument>' that can't
12229		     be fully created right now, because
12230		     `Internal<Template>' not being complete, the Bind
12231		     template cannot be looked up in that context.  So
12232		     we need to "store" `Bind<Argument>' for later
12233		     when the context of Bind becomes complete.  Let's
12234		     store that in a TYPENAME_TYPE.  */
12235		  return make_typename_type (TYPE_CONTEXT (arg),
12236					     build_nt (TEMPLATE_ID_EXPR,
12237						       TYPE_IDENTIFIER (arg),
12238						       argvec),
12239					     typename_type,
12240					     complain);
12241
12242		/* We can get a TEMPLATE_TEMPLATE_PARM here when we
12243		   are resolving nested-types in the signature of a
12244		   member function templates.  Otherwise ARG is a
12245		   TEMPLATE_DECL and is the real template to be
12246		   instantiated.  */
12247		if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12248		  arg = TYPE_NAME (arg);
12249
12250		r = lookup_template_class (arg,
12251					   argvec, in_decl,
12252					   DECL_CONTEXT (arg),
12253					    /*entering_scope=*/0,
12254					   complain);
12255		return cp_build_qualified_type_real
12256		  (r, cp_type_quals (t) | cp_type_quals (r), complain);
12257	      }
12258	    else
12259	      /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
12260	      return convert_from_reference (unshare_expr (arg));
12261	  }
12262
12263	if (level == 1)
12264	  /* This can happen during the attempted tsubst'ing in
12265	     unify.  This means that we don't yet have any information
12266	     about the template parameter in question.  */
12267	  return t;
12268
12269	/* Early in template argument deduction substitution, we don't
12270	   want to reduce the level of 'auto', or it will be confused
12271	   with a normal template parm in subsequent deduction.  */
12272	if (is_auto (t) && (complain & tf_partial))
12273	  return t;
12274
12275	/* If we get here, we must have been looking at a parm for a
12276	   more deeply nested template.  Make a new version of this
12277	   template parameter, but with a lower level.  */
12278	switch (code)
12279	  {
12280	  case TEMPLATE_TYPE_PARM:
12281	  case TEMPLATE_TEMPLATE_PARM:
12282	  case BOUND_TEMPLATE_TEMPLATE_PARM:
12283	    if (cp_type_quals (t))
12284	      {
12285		r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
12286		r = cp_build_qualified_type_real
12287		  (r, cp_type_quals (t),
12288		   complain | (code == TEMPLATE_TYPE_PARM
12289			       ? tf_ignore_bad_quals : 0));
12290	      }
12291	    else
12292	      {
12293		r = copy_type (t);
12294		TEMPLATE_TYPE_PARM_INDEX (r)
12295		  = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
12296						r, levels, args, complain);
12297		TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
12298		TYPE_MAIN_VARIANT (r) = r;
12299		TYPE_POINTER_TO (r) = NULL_TREE;
12300		TYPE_REFERENCE_TO (r) = NULL_TREE;
12301
12302		if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
12303		  /* We have reduced the level of the template
12304		     template parameter, but not the levels of its
12305		     template parameters, so canonical_type_parameter
12306		     will not be able to find the canonical template
12307		     template parameter for this level. Thus, we
12308		     require structural equality checking to compare
12309		     TEMPLATE_TEMPLATE_PARMs. */
12310		  SET_TYPE_STRUCTURAL_EQUALITY (r);
12311		else if (TYPE_STRUCTURAL_EQUALITY_P (t))
12312		  SET_TYPE_STRUCTURAL_EQUALITY (r);
12313		else
12314		  TYPE_CANONICAL (r) = canonical_type_parameter (r);
12315
12316		if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
12317		  {
12318		    tree argvec = tsubst (TYPE_TI_ARGS (t), args,
12319					  complain, in_decl);
12320		    if (argvec == error_mark_node)
12321		      return error_mark_node;
12322
12323		    TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
12324		      = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
12325		  }
12326	      }
12327	    break;
12328
12329	  case TEMPLATE_PARM_INDEX:
12330	    r = reduce_template_parm_level (t, type, levels, args, complain);
12331	    break;
12332
12333	  default:
12334	    gcc_unreachable ();
12335	  }
12336
12337	return r;
12338      }
12339
12340    case TREE_LIST:
12341      {
12342	tree purpose, value, chain;
12343
12344	if (t == void_list_node)
12345	  return t;
12346
12347	purpose = TREE_PURPOSE (t);
12348	if (purpose)
12349	  {
12350	    purpose = tsubst (purpose, args, complain, in_decl);
12351	    if (purpose == error_mark_node)
12352	      return error_mark_node;
12353	  }
12354	value = TREE_VALUE (t);
12355	if (value)
12356	  {
12357	    value = tsubst (value, args, complain, in_decl);
12358	    if (value == error_mark_node)
12359	      return error_mark_node;
12360	  }
12361	chain = TREE_CHAIN (t);
12362	if (chain && chain != void_type_node)
12363	  {
12364	    chain = tsubst (chain, args, complain, in_decl);
12365	    if (chain == error_mark_node)
12366	      return error_mark_node;
12367	  }
12368	if (purpose == TREE_PURPOSE (t)
12369	    && value == TREE_VALUE (t)
12370	    && chain == TREE_CHAIN (t))
12371	  return t;
12372	return hash_tree_cons (purpose, value, chain);
12373      }
12374
12375    case TREE_BINFO:
12376      /* We should never be tsubsting a binfo.  */
12377      gcc_unreachable ();
12378
12379    case TREE_VEC:
12380      /* A vector of template arguments.  */
12381      gcc_assert (!type);
12382      return tsubst_template_args (t, args, complain, in_decl);
12383
12384    case POINTER_TYPE:
12385    case REFERENCE_TYPE:
12386      {
12387	if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
12388	  return t;
12389
12390	/* [temp.deduct]
12391
12392	   Type deduction may fail for any of the following
12393	   reasons:
12394
12395	   -- Attempting to create a pointer to reference type.
12396	   -- Attempting to create a reference to a reference type or
12397	      a reference to void.
12398
12399	  Core issue 106 says that creating a reference to a reference
12400	  during instantiation is no longer a cause for failure. We
12401	  only enforce this check in strict C++98 mode.  */
12402	if ((TREE_CODE (type) == REFERENCE_TYPE
12403	     && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
12404	    || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
12405	  {
12406	    static location_t last_loc;
12407
12408	    /* We keep track of the last time we issued this error
12409	       message to avoid spewing a ton of messages during a
12410	       single bad template instantiation.  */
12411	    if (complain & tf_error
12412		&& last_loc != input_location)
12413	      {
12414		if (VOID_TYPE_P (type))
12415		  error ("forming reference to void");
12416               else if (code == POINTER_TYPE)
12417                 error ("forming pointer to reference type %qT", type);
12418               else
12419		  error ("forming reference to reference type %qT", type);
12420		last_loc = input_location;
12421	      }
12422
12423	    return error_mark_node;
12424	  }
12425	else if (TREE_CODE (type) == FUNCTION_TYPE
12426		 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
12427		     || type_memfn_rqual (type) != REF_QUAL_NONE))
12428	  {
12429	    if (complain & tf_error)
12430	      {
12431		if (code == POINTER_TYPE)
12432		  error ("forming pointer to qualified function type %qT",
12433			 type);
12434		else
12435		  error ("forming reference to qualified function type %qT",
12436			 type);
12437	      }
12438	    return error_mark_node;
12439	  }
12440	else if (code == POINTER_TYPE)
12441	  {
12442	    r = build_pointer_type (type);
12443	    if (TREE_CODE (type) == METHOD_TYPE)
12444	      r = build_ptrmemfunc_type (r);
12445	  }
12446	else if (TREE_CODE (type) == REFERENCE_TYPE)
12447	  /* In C++0x, during template argument substitution, when there is an
12448	     attempt to create a reference to a reference type, reference
12449	     collapsing is applied as described in [14.3.1/4 temp.arg.type]:
12450
12451	     "If a template-argument for a template-parameter T names a type
12452	     that is a reference to a type A, an attempt to create the type
12453	     'lvalue reference to cv T' creates the type 'lvalue reference to
12454	     A,' while an attempt to create the type type rvalue reference to
12455	     cv T' creates the type T"
12456	  */
12457	  r = cp_build_reference_type
12458	      (TREE_TYPE (type),
12459	       TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
12460	else
12461	  r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
12462	r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
12463
12464	if (r != error_mark_node)
12465	  /* Will this ever be needed for TYPE_..._TO values?  */
12466	  layout_type (r);
12467
12468	return r;
12469      }
12470    case OFFSET_TYPE:
12471      {
12472	r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
12473	if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
12474	  {
12475	    /* [temp.deduct]
12476
12477	       Type deduction may fail for any of the following
12478	       reasons:
12479
12480	       -- Attempting to create "pointer to member of T" when T
12481		  is not a class type.  */
12482	    if (complain & tf_error)
12483	      error ("creating pointer to member of non-class type %qT", r);
12484	    return error_mark_node;
12485	  }
12486	if (TREE_CODE (type) == REFERENCE_TYPE)
12487	  {
12488	    if (complain & tf_error)
12489	      error ("creating pointer to member reference type %qT", type);
12490	    return error_mark_node;
12491	  }
12492	if (VOID_TYPE_P (type))
12493	  {
12494	    if (complain & tf_error)
12495	      error ("creating pointer to member of type void");
12496	    return error_mark_node;
12497	  }
12498	gcc_assert (TREE_CODE (type) != METHOD_TYPE);
12499	if (TREE_CODE (type) == FUNCTION_TYPE)
12500	  {
12501	    /* The type of the implicit object parameter gets its
12502	       cv-qualifiers from the FUNCTION_TYPE. */
12503	    tree memptr;
12504	    tree method_type
12505	      = build_memfn_type (type, r, type_memfn_quals (type),
12506				  type_memfn_rqual (type));
12507	    memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
12508	    return cp_build_qualified_type_real (memptr, cp_type_quals (t),
12509						 complain);
12510	  }
12511	else
12512	  return cp_build_qualified_type_real (build_ptrmem_type (r, type),
12513					       cp_type_quals (t),
12514					       complain);
12515      }
12516    case FUNCTION_TYPE:
12517    case METHOD_TYPE:
12518      {
12519	tree fntype;
12520	tree specs;
12521	fntype = tsubst_function_type (t, args, complain, in_decl);
12522	if (fntype == error_mark_node)
12523	  return error_mark_node;
12524
12525	/* Substitute the exception specification.  */
12526	specs = tsubst_exception_specification (t, args, complain,
12527						in_decl, /*defer_ok*/true);
12528	if (specs == error_mark_node)
12529	  return error_mark_node;
12530	if (specs)
12531	  fntype = build_exception_variant (fntype, specs);
12532	return fntype;
12533      }
12534    case ARRAY_TYPE:
12535      {
12536	tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
12537	if (domain == error_mark_node)
12538	  return error_mark_node;
12539
12540	/* As an optimization, we avoid regenerating the array type if
12541	   it will obviously be the same as T.  */
12542	if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
12543	  return t;
12544
12545	/* These checks should match the ones in create_array_type_for_decl.
12546
12547	   [temp.deduct]
12548
12549	   The deduction may fail for any of the following reasons:
12550
12551	   -- Attempting to create an array with an element type that
12552	      is void, a function type, or a reference type, or [DR337]
12553	      an abstract class type.  */
12554	if (VOID_TYPE_P (type)
12555	    || TREE_CODE (type) == FUNCTION_TYPE
12556	    || (TREE_CODE (type) == ARRAY_TYPE
12557		&& TYPE_DOMAIN (type) == NULL_TREE)
12558	    || TREE_CODE (type) == REFERENCE_TYPE)
12559	  {
12560	    if (complain & tf_error)
12561	      error ("creating array of %qT", type);
12562	    return error_mark_node;
12563	  }
12564
12565	if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
12566	  return error_mark_node;
12567
12568	r = build_cplus_array_type (type, domain);
12569
12570	if (TYPE_USER_ALIGN (t))
12571	  {
12572	    TYPE_ALIGN (r) = TYPE_ALIGN (t);
12573	    TYPE_USER_ALIGN (r) = 1;
12574	  }
12575
12576	return r;
12577      }
12578
12579    case TYPENAME_TYPE:
12580      {
12581	tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12582				     in_decl, /*entering_scope=*/1);
12583	tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
12584			      complain, in_decl);
12585
12586	if (ctx == error_mark_node || f == error_mark_node)
12587	  return error_mark_node;
12588
12589	if (!MAYBE_CLASS_TYPE_P (ctx))
12590	  {
12591	    if (complain & tf_error)
12592	      error ("%qT is not a class, struct, or union type", ctx);
12593	    return error_mark_node;
12594	  }
12595	else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
12596	  {
12597	    /* Normally, make_typename_type does not require that the CTX
12598	       have complete type in order to allow things like:
12599
12600		 template <class T> struct S { typename S<T>::X Y; };
12601
12602	       But, such constructs have already been resolved by this
12603	       point, so here CTX really should have complete type, unless
12604	       it's a partial instantiation.  */
12605	    ctx = complete_type (ctx);
12606	    if (!COMPLETE_TYPE_P (ctx))
12607	      {
12608		if (complain & tf_error)
12609		  cxx_incomplete_type_error (NULL_TREE, ctx);
12610		return error_mark_node;
12611	      }
12612	  }
12613
12614	f = make_typename_type (ctx, f, typename_type,
12615				complain | tf_keep_type_decl);
12616	if (f == error_mark_node)
12617	  return f;
12618	if (TREE_CODE (f) == TYPE_DECL)
12619	  {
12620	    complain |= tf_ignore_bad_quals;
12621	    f = TREE_TYPE (f);
12622	  }
12623
12624	if (TREE_CODE (f) != TYPENAME_TYPE)
12625	  {
12626	    if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
12627	      {
12628		if (complain & tf_error)
12629		  error ("%qT resolves to %qT, which is not an enumeration type",
12630			 t, f);
12631		else
12632		  return error_mark_node;
12633	      }
12634	    else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
12635	      {
12636		if (complain & tf_error)
12637		  error ("%qT resolves to %qT, which is is not a class type",
12638			 t, f);
12639		else
12640		  return error_mark_node;
12641	      }
12642	  }
12643
12644	return cp_build_qualified_type_real
12645	  (f, cp_type_quals (f) | cp_type_quals (t), complain);
12646      }
12647
12648    case UNBOUND_CLASS_TEMPLATE:
12649      {
12650	tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12651				     in_decl, /*entering_scope=*/1);
12652	tree name = TYPE_IDENTIFIER (t);
12653	tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
12654
12655	if (ctx == error_mark_node || name == error_mark_node)
12656	  return error_mark_node;
12657
12658	if (parm_list)
12659	  parm_list = tsubst_template_parms (parm_list, args, complain);
12660	return make_unbound_class_template (ctx, name, parm_list, complain);
12661      }
12662
12663    case TYPEOF_TYPE:
12664      {
12665	tree type;
12666
12667	++cp_unevaluated_operand;
12668	++c_inhibit_evaluation_warnings;
12669
12670	type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
12671			    complain, in_decl,
12672			    /*integral_constant_expression_p=*/false);
12673
12674	--cp_unevaluated_operand;
12675	--c_inhibit_evaluation_warnings;
12676
12677	type = finish_typeof (type);
12678	return cp_build_qualified_type_real (type,
12679					     cp_type_quals (t)
12680					     | cp_type_quals (type),
12681					     complain);
12682      }
12683
12684    case DECLTYPE_TYPE:
12685      {
12686	tree type;
12687
12688	++cp_unevaluated_operand;
12689	++c_inhibit_evaluation_warnings;
12690
12691	type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
12692				      complain|tf_decltype, in_decl,
12693				      /*function_p*/false,
12694				      /*integral_constant_expression*/false);
12695
12696	--cp_unevaluated_operand;
12697	--c_inhibit_evaluation_warnings;
12698
12699	if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
12700	  type = lambda_capture_field_type (type,
12701					    DECLTYPE_FOR_INIT_CAPTURE (t));
12702	else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
12703	  type = lambda_proxy_type (type);
12704	else
12705	  {
12706	    bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
12707	    if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
12708		&& EXPR_P (type))
12709	      /* In a template ~id could be either a complement expression
12710		 or an unqualified-id naming a destructor; if instantiating
12711		 it produces an expression, it's not an id-expression or
12712		 member access.  */
12713	      id = false;
12714	    type = finish_decltype_type (type, id, complain);
12715	  }
12716	return cp_build_qualified_type_real (type,
12717					     cp_type_quals (t)
12718					     | cp_type_quals (type),
12719					     complain | tf_ignore_bad_quals);
12720      }
12721
12722    case UNDERLYING_TYPE:
12723      {
12724	tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
12725			    complain, in_decl);
12726	return finish_underlying_type (type);
12727      }
12728
12729    case TYPE_ARGUMENT_PACK:
12730    case NONTYPE_ARGUMENT_PACK:
12731      {
12732        tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
12733        tree packed_out =
12734          tsubst_template_args (ARGUMENT_PACK_ARGS (t),
12735                                args,
12736                                complain,
12737                                in_decl);
12738        SET_ARGUMENT_PACK_ARGS (r, packed_out);
12739
12740        /* For template nontype argument packs, also substitute into
12741           the type.  */
12742        if (code == NONTYPE_ARGUMENT_PACK)
12743          TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
12744
12745        return r;
12746      }
12747      break;
12748
12749    case VOID_CST:
12750    case INTEGER_CST:
12751    case REAL_CST:
12752    case STRING_CST:
12753    case PLUS_EXPR:
12754    case MINUS_EXPR:
12755    case NEGATE_EXPR:
12756    case NOP_EXPR:
12757    case INDIRECT_REF:
12758    case ADDR_EXPR:
12759    case CALL_EXPR:
12760    case ARRAY_REF:
12761    case SCOPE_REF:
12762      /* We should use one of the expression tsubsts for these codes.  */
12763      gcc_unreachable ();
12764
12765    default:
12766      sorry ("use of %qs in template", get_tree_code_name (code));
12767      return error_mark_node;
12768    }
12769}
12770
12771/* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
12772   type of the expression on the left-hand side of the "." or "->"
12773   operator.  */
12774
12775static tree
12776tsubst_baselink (tree baselink, tree object_type,
12777		 tree args, tsubst_flags_t complain, tree in_decl)
12778{
12779    tree name;
12780    tree qualifying_scope;
12781    tree fns;
12782    tree optype;
12783    tree template_args = 0;
12784    bool template_id_p = false;
12785    bool qualified = BASELINK_QUALIFIED_P (baselink);
12786
12787    /* A baselink indicates a function from a base class.  Both the
12788       BASELINK_ACCESS_BINFO and the base class referenced may
12789       indicate bases of the template class, rather than the
12790       instantiated class.  In addition, lookups that were not
12791       ambiguous before may be ambiguous now.  Therefore, we perform
12792       the lookup again.  */
12793    qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
12794    qualifying_scope = tsubst (qualifying_scope, args,
12795			       complain, in_decl);
12796    fns = BASELINK_FUNCTIONS (baselink);
12797    optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
12798    if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
12799      {
12800	template_id_p = true;
12801	template_args = TREE_OPERAND (fns, 1);
12802	fns = TREE_OPERAND (fns, 0);
12803	if (template_args)
12804	  template_args = tsubst_template_args (template_args, args,
12805						complain, in_decl);
12806      }
12807    name = DECL_NAME (get_first_fn (fns));
12808    if (IDENTIFIER_TYPENAME_P (name))
12809      name = mangle_conv_op_name_for_type (optype);
12810    baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
12811    if (!baselink)
12812      return error_mark_node;
12813
12814    /* If lookup found a single function, mark it as used at this
12815       point.  (If it lookup found multiple functions the one selected
12816       later by overload resolution will be marked as used at that
12817       point.)  */
12818    if (BASELINK_P (baselink))
12819      fns = BASELINK_FUNCTIONS (baselink);
12820    if (!template_id_p && !really_overloaded_fn (fns)
12821	&& !mark_used (OVL_CURRENT (fns), complain) && !(complain & tf_error))
12822      return error_mark_node;
12823
12824    /* Add back the template arguments, if present.  */
12825    if (BASELINK_P (baselink) && template_id_p)
12826      BASELINK_FUNCTIONS (baselink)
12827	= build2 (TEMPLATE_ID_EXPR,
12828		  unknown_type_node,
12829		  BASELINK_FUNCTIONS (baselink),
12830		  template_args);
12831    /* Update the conversion operator type.  */
12832    BASELINK_OPTYPE (baselink) = optype;
12833
12834    if (!object_type)
12835      object_type = current_class_type;
12836
12837    if (qualified)
12838      baselink = adjust_result_of_qualified_name_lookup (baselink,
12839							 qualifying_scope,
12840							 object_type);
12841    return baselink;
12842}
12843
12844/* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
12845   true if the qualified-id will be a postfix-expression in-and-of
12846   itself; false if more of the postfix-expression follows the
12847   QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
12848   of "&".  */
12849
12850static tree
12851tsubst_qualified_id (tree qualified_id, tree args,
12852		     tsubst_flags_t complain, tree in_decl,
12853		     bool done, bool address_p)
12854{
12855  tree expr;
12856  tree scope;
12857  tree name;
12858  bool is_template;
12859  tree template_args;
12860  location_t loc = UNKNOWN_LOCATION;
12861
12862  gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
12863
12864  /* Figure out what name to look up.  */
12865  name = TREE_OPERAND (qualified_id, 1);
12866  if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
12867    {
12868      is_template = true;
12869      loc = EXPR_LOCATION (name);
12870      template_args = TREE_OPERAND (name, 1);
12871      if (template_args)
12872	template_args = tsubst_template_args (template_args, args,
12873					      complain, in_decl);
12874      name = TREE_OPERAND (name, 0);
12875    }
12876  else
12877    {
12878      is_template = false;
12879      template_args = NULL_TREE;
12880    }
12881
12882  /* Substitute into the qualifying scope.  When there are no ARGS, we
12883     are just trying to simplify a non-dependent expression.  In that
12884     case the qualifying scope may be dependent, and, in any case,
12885     substituting will not help.  */
12886  scope = TREE_OPERAND (qualified_id, 0);
12887  if (args)
12888    {
12889      scope = tsubst (scope, args, complain, in_decl);
12890      expr = tsubst_copy (name, args, complain, in_decl);
12891    }
12892  else
12893    expr = name;
12894
12895  if (dependent_scope_p (scope))
12896    {
12897      if (is_template)
12898	expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
12899      return build_qualified_name (NULL_TREE, scope, expr,
12900				   QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
12901    }
12902
12903  if (!BASELINK_P (name) && !DECL_P (expr))
12904    {
12905      if (TREE_CODE (expr) == BIT_NOT_EXPR)
12906	{
12907	  /* A BIT_NOT_EXPR is used to represent a destructor.  */
12908	  if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
12909	    {
12910	      error ("qualifying type %qT does not match destructor name ~%qT",
12911		     scope, TREE_OPERAND (expr, 0));
12912	      expr = error_mark_node;
12913	    }
12914	  else
12915	    expr = lookup_qualified_name (scope, complete_dtor_identifier,
12916					  /*is_type_p=*/0, false);
12917	}
12918      else
12919	expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
12920      if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
12921		     ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
12922	{
12923	  if (complain & tf_error)
12924	    {
12925	      error ("dependent-name %qE is parsed as a non-type, but "
12926		     "instantiation yields a type", qualified_id);
12927	      inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
12928	    }
12929	  return error_mark_node;
12930	}
12931    }
12932
12933  if (DECL_P (expr))
12934    {
12935      check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
12936					   scope);
12937      /* Remember that there was a reference to this entity.  */
12938      if (!mark_used (expr, complain) && !(complain & tf_error))
12939	return error_mark_node;
12940    }
12941
12942  if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
12943    {
12944      if (complain & tf_error)
12945	qualified_name_lookup_error (scope,
12946				     TREE_OPERAND (qualified_id, 1),
12947				     expr, input_location);
12948      return error_mark_node;
12949    }
12950
12951  if (is_template)
12952    expr = lookup_template_function (expr, template_args);
12953
12954  if (expr == error_mark_node && complain & tf_error)
12955    qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12956				 expr, input_location);
12957  else if (TYPE_P (scope))
12958    {
12959      expr = (adjust_result_of_qualified_name_lookup
12960	      (expr, scope, current_nonlambda_class_type ()));
12961      expr = (finish_qualified_id_expr
12962	      (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12963	       QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12964	       /*template_arg_p=*/false, complain));
12965    }
12966
12967  /* Expressions do not generally have reference type.  */
12968  if (TREE_CODE (expr) != SCOPE_REF
12969      /* However, if we're about to form a pointer-to-member, we just
12970	 want the referenced member referenced.  */
12971      && TREE_CODE (expr) != OFFSET_REF)
12972    expr = convert_from_reference (expr);
12973
12974  return expr;
12975}
12976
12977/* tsubst the initializer for a VAR_DECL.  INIT is the unsubstituted
12978   initializer, DECL is the substituted VAR_DECL.  Other arguments are as
12979   for tsubst.  */
12980
12981static tree
12982tsubst_init (tree init, tree decl, tree args,
12983	     tsubst_flags_t complain, tree in_decl)
12984{
12985  if (!init)
12986    return NULL_TREE;
12987
12988  init = tsubst_expr (init, args, complain, in_decl, false);
12989
12990  if (!init)
12991    {
12992      /* If we had an initializer but it
12993	 instantiated to nothing,
12994	 value-initialize the object.  This will
12995	 only occur when the initializer was a
12996	 pack expansion where the parameter packs
12997	 used in that expansion were of length
12998	 zero.  */
12999      init = build_value_init (TREE_TYPE (decl),
13000			       complain);
13001      if (TREE_CODE (init) == AGGR_INIT_EXPR)
13002	init = get_target_expr_sfinae (init, complain);
13003    }
13004
13005  return init;
13006}
13007
13008/* Like tsubst, but deals with expressions.  This function just replaces
13009   template parms; to finish processing the resultant expression, use
13010   tsubst_copy_and_build or tsubst_expr.  */
13011
13012static tree
13013tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
13014{
13015  enum tree_code code;
13016  tree r;
13017
13018  if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
13019    return t;
13020
13021  code = TREE_CODE (t);
13022
13023  switch (code)
13024    {
13025    case PARM_DECL:
13026      r = retrieve_local_specialization (t);
13027
13028      if (r == NULL_TREE)
13029	{
13030	  /* We get here for a use of 'this' in an NSDMI.  */
13031	  if (DECL_NAME (t) == this_identifier
13032	      && current_function_decl
13033	      && DECL_CONSTRUCTOR_P (current_function_decl))
13034	    return current_class_ptr;
13035
13036	  /* This can happen for a parameter name used later in a function
13037	     declaration (such as in a late-specified return type).  Just
13038	     make a dummy decl, since it's only used for its type.  */
13039	  gcc_assert (cp_unevaluated_operand != 0);
13040	  r = tsubst_decl (t, args, complain);
13041	  /* Give it the template pattern as its context; its true context
13042	     hasn't been instantiated yet and this is good enough for
13043	     mangling.  */
13044	  DECL_CONTEXT (r) = DECL_CONTEXT (t);
13045	}
13046
13047      if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
13048	r = ARGUMENT_PACK_SELECT_ARG (r);
13049      if (!mark_used (r, complain) && !(complain & tf_error))
13050	return error_mark_node;
13051      return r;
13052
13053    case CONST_DECL:
13054      {
13055	tree enum_type;
13056	tree v;
13057
13058	if (DECL_TEMPLATE_PARM_P (t))
13059	  return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
13060	/* There is no need to substitute into namespace-scope
13061	   enumerators.  */
13062	if (DECL_NAMESPACE_SCOPE_P (t))
13063	  return t;
13064	/* If ARGS is NULL, then T is known to be non-dependent.  */
13065	if (args == NULL_TREE)
13066	  return scalar_constant_value (t);
13067
13068	/* Unfortunately, we cannot just call lookup_name here.
13069	   Consider:
13070
13071	     template <int I> int f() {
13072	     enum E { a = I };
13073	     struct S { void g() { E e = a; } };
13074	     };
13075
13076	   When we instantiate f<7>::S::g(), say, lookup_name is not
13077	   clever enough to find f<7>::a.  */
13078	enum_type
13079	  = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
13080			      /*entering_scope=*/0);
13081
13082	for (v = TYPE_VALUES (enum_type);
13083	     v != NULL_TREE;
13084	     v = TREE_CHAIN (v))
13085	  if (TREE_PURPOSE (v) == DECL_NAME (t))
13086	    return TREE_VALUE (v);
13087
13088	  /* We didn't find the name.  That should never happen; if
13089	     name-lookup found it during preliminary parsing, we
13090	     should find it again here during instantiation.  */
13091	gcc_unreachable ();
13092      }
13093      return t;
13094
13095    case FIELD_DECL:
13096      if (PACK_EXPANSION_P (TREE_TYPE (t)))
13097	{
13098	  /* Check for a local specialization set up by
13099	     tsubst_pack_expansion.  */
13100	  if (tree r = retrieve_local_specialization (t))
13101	    {
13102	      if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
13103		r = ARGUMENT_PACK_SELECT_ARG (r);
13104	      return r;
13105	    }
13106
13107	  /* When retrieving a capture pack from a generic lambda, remove the
13108	     lambda call op's own template argument list from ARGS.  Only the
13109	     template arguments active for the closure type should be used to
13110	     retrieve the pack specialization.  */
13111	  if (LAMBDA_FUNCTION_P (current_function_decl)
13112	      && (template_class_depth (DECL_CONTEXT (t))
13113		  != TMPL_ARGS_DEPTH (args)))
13114	    args = strip_innermost_template_args (args, 1);
13115
13116	  /* Otherwise return the full NONTYPE_ARGUMENT_PACK that
13117	     tsubst_decl put in the hash table.  */
13118	  return retrieve_specialization (t, args, 0);
13119	}
13120
13121      if (DECL_CONTEXT (t))
13122	{
13123	  tree ctx;
13124
13125	  ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
13126				  /*entering_scope=*/1);
13127	  if (ctx != DECL_CONTEXT (t))
13128	    {
13129	      tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
13130	      if (!r)
13131		{
13132		  if (complain & tf_error)
13133		    error ("using invalid field %qD", t);
13134		  return error_mark_node;
13135		}
13136	      return r;
13137	    }
13138	}
13139
13140      return t;
13141
13142    case VAR_DECL:
13143    case FUNCTION_DECL:
13144      if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
13145	r = tsubst (t, args, complain, in_decl);
13146      else if (local_variable_p (t))
13147	{
13148	  r = retrieve_local_specialization (t);
13149	  if (r == NULL_TREE)
13150	    {
13151	      /* First try name lookup to find the instantiation.  */
13152	      r = lookup_name (DECL_NAME (t));
13153	      if (r)
13154		{
13155		  /* Make sure that the one we found is the one we want.  */
13156		  tree ctx = DECL_CONTEXT (t);
13157		  if (DECL_LANG_SPECIFIC (ctx) && DECL_TEMPLATE_INFO (ctx))
13158		    ctx = tsubst (ctx, args, complain, in_decl);
13159		  if (ctx != DECL_CONTEXT (r))
13160		    r = NULL_TREE;
13161		}
13162
13163	      if (r)
13164		/* OK */;
13165	      else
13166		{
13167		  /* This can happen for a variable used in a
13168		     late-specified return type of a local lambda, or for a
13169		     local static or constant.  Building a new VAR_DECL
13170		     should be OK in all those cases.  */
13171		  r = tsubst_decl (t, args, complain);
13172		  if (decl_maybe_constant_var_p (r))
13173		    {
13174		      /* We can't call cp_finish_decl, so handle the
13175			 initializer by hand.  */
13176		      tree init = tsubst_init (DECL_INITIAL (t), r, args,
13177					       complain, in_decl);
13178		      if (!processing_template_decl)
13179			init = maybe_constant_init (init);
13180		      if (processing_template_decl
13181			  ? potential_constant_expression (init)
13182			  : reduced_constant_expression_p (init))
13183			DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
13184			  = TREE_CONSTANT (r) = true;
13185		      DECL_INITIAL (r) = init;
13186		    }
13187		  gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
13188			      || decl_constant_var_p (r)
13189			      || errorcount || sorrycount);
13190		  if (!processing_template_decl)
13191		    {
13192		      if (TREE_STATIC (r))
13193			rest_of_decl_compilation (r, toplevel_bindings_p (),
13194						  at_eof);
13195		      else
13196			r = process_outer_var_ref (r, complain);
13197		    }
13198		}
13199	      /* Remember this for subsequent uses.  */
13200	      if (local_specializations)
13201		register_local_specialization (r, t);
13202	    }
13203	}
13204      else
13205	r = t;
13206      if (!mark_used (r, complain) && !(complain & tf_error))
13207	return error_mark_node;
13208      return r;
13209
13210    case NAMESPACE_DECL:
13211      return t;
13212
13213    case OVERLOAD:
13214      /* An OVERLOAD will always be a non-dependent overload set; an
13215	 overload set from function scope will just be represented with an
13216	 IDENTIFIER_NODE, and from class scope with a BASELINK.  */
13217      gcc_assert (!uses_template_parms (t));
13218      return t;
13219
13220    case BASELINK:
13221      return tsubst_baselink (t, current_nonlambda_class_type (),
13222			      args, complain, in_decl);
13223
13224    case TEMPLATE_DECL:
13225      if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
13226	return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
13227		       args, complain, in_decl);
13228      else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
13229	return tsubst (t, args, complain, in_decl);
13230      else if (DECL_CLASS_SCOPE_P (t)
13231	       && uses_template_parms (DECL_CONTEXT (t)))
13232	{
13233	  /* Template template argument like the following example need
13234	     special treatment:
13235
13236	       template <template <class> class TT> struct C {};
13237	       template <class T> struct D {
13238		 template <class U> struct E {};
13239		 C<E> c;				// #1
13240	       };
13241	       D<int> d;				// #2
13242
13243	     We are processing the template argument `E' in #1 for
13244	     the template instantiation #2.  Originally, `E' is a
13245	     TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
13246	     have to substitute this with one having context `D<int>'.  */
13247
13248	  tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
13249	  return lookup_field (context, DECL_NAME(t), 0, false);
13250	}
13251      else
13252	/* Ordinary template template argument.  */
13253	return t;
13254
13255    case CAST_EXPR:
13256    case REINTERPRET_CAST_EXPR:
13257    case CONST_CAST_EXPR:
13258    case STATIC_CAST_EXPR:
13259    case DYNAMIC_CAST_EXPR:
13260    case IMPLICIT_CONV_EXPR:
13261    case CONVERT_EXPR:
13262    case NOP_EXPR:
13263      {
13264	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13265	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13266	return build1 (code, type, op0);
13267      }
13268
13269    case SIZEOF_EXPR:
13270      if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13271        {
13272          tree expanded, op = TREE_OPERAND (t, 0);
13273	  int len = 0;
13274
13275	  if (SIZEOF_EXPR_TYPE_P (t))
13276	    op = TREE_TYPE (op);
13277
13278	  ++cp_unevaluated_operand;
13279	  ++c_inhibit_evaluation_warnings;
13280	  /* We only want to compute the number of arguments.  */
13281	  expanded = tsubst_pack_expansion (op, args, complain, in_decl);
13282	  --cp_unevaluated_operand;
13283	  --c_inhibit_evaluation_warnings;
13284
13285	  if (TREE_CODE (expanded) == TREE_VEC)
13286	    {
13287	      len = TREE_VEC_LENGTH (expanded);
13288	      /* Set TREE_USED for the benefit of -Wunused.  */
13289	      for (int i = 0; i < len; i++)
13290		TREE_USED (TREE_VEC_ELT (expanded, i)) = true;
13291	    }
13292
13293	  if (expanded == error_mark_node)
13294	    return error_mark_node;
13295	  else if (PACK_EXPANSION_P (expanded)
13296		   || (TREE_CODE (expanded) == TREE_VEC
13297		       && len > 0
13298		       && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
13299	    {
13300	      if (TREE_CODE (expanded) == TREE_VEC)
13301		expanded = TREE_VEC_ELT (expanded, len - 1);
13302	      else
13303		PACK_EXPANSION_SIZEOF_P (expanded) = true;
13304
13305	      if (TYPE_P (expanded))
13306		return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR,
13307						   complain & tf_error);
13308	      else
13309		return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
13310                                                   complain & tf_error);
13311	    }
13312	  else
13313	    return build_int_cst (size_type_node, len);
13314        }
13315      if (SIZEOF_EXPR_TYPE_P (t))
13316	{
13317	  r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
13318		      args, complain, in_decl);
13319	  r = build1 (NOP_EXPR, r, error_mark_node);
13320	  r = build1 (SIZEOF_EXPR,
13321		      tsubst (TREE_TYPE (t), args, complain, in_decl), r);
13322	  SIZEOF_EXPR_TYPE_P (r) = 1;
13323	  return r;
13324	}
13325      /* Fall through */
13326
13327    case INDIRECT_REF:
13328    case NEGATE_EXPR:
13329    case TRUTH_NOT_EXPR:
13330    case BIT_NOT_EXPR:
13331    case ADDR_EXPR:
13332    case UNARY_PLUS_EXPR:      /* Unary + */
13333    case ALIGNOF_EXPR:
13334    case AT_ENCODE_EXPR:
13335    case ARROW_EXPR:
13336    case THROW_EXPR:
13337    case TYPEID_EXPR:
13338    case REALPART_EXPR:
13339    case IMAGPART_EXPR:
13340    case PAREN_EXPR:
13341      {
13342	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13343	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13344	return build1 (code, type, op0);
13345      }
13346
13347    case COMPONENT_REF:
13348      {
13349	tree object;
13350	tree name;
13351
13352	object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13353	name = TREE_OPERAND (t, 1);
13354	if (TREE_CODE (name) == BIT_NOT_EXPR)
13355	  {
13356	    name = tsubst_copy (TREE_OPERAND (name, 0), args,
13357				complain, in_decl);
13358	    name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
13359	  }
13360	else if (TREE_CODE (name) == SCOPE_REF
13361		 && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
13362	  {
13363	    tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
13364				     complain, in_decl);
13365	    name = TREE_OPERAND (name, 1);
13366	    name = tsubst_copy (TREE_OPERAND (name, 0), args,
13367				complain, in_decl);
13368	    name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
13369	    name = build_qualified_name (/*type=*/NULL_TREE,
13370					 base, name,
13371					 /*template_p=*/false);
13372	  }
13373	else if (BASELINK_P (name))
13374	  name = tsubst_baselink (name,
13375				  non_reference (TREE_TYPE (object)),
13376				  args, complain,
13377				  in_decl);
13378	else
13379	  name = tsubst_copy (name, args, complain, in_decl);
13380	return build_nt (COMPONENT_REF, object, name, NULL_TREE);
13381      }
13382
13383    case PLUS_EXPR:
13384    case MINUS_EXPR:
13385    case MULT_EXPR:
13386    case TRUNC_DIV_EXPR:
13387    case CEIL_DIV_EXPR:
13388    case FLOOR_DIV_EXPR:
13389    case ROUND_DIV_EXPR:
13390    case EXACT_DIV_EXPR:
13391    case BIT_AND_EXPR:
13392    case BIT_IOR_EXPR:
13393    case BIT_XOR_EXPR:
13394    case TRUNC_MOD_EXPR:
13395    case FLOOR_MOD_EXPR:
13396    case TRUTH_ANDIF_EXPR:
13397    case TRUTH_ORIF_EXPR:
13398    case TRUTH_AND_EXPR:
13399    case TRUTH_OR_EXPR:
13400    case RSHIFT_EXPR:
13401    case LSHIFT_EXPR:
13402    case RROTATE_EXPR:
13403    case LROTATE_EXPR:
13404    case EQ_EXPR:
13405    case NE_EXPR:
13406    case MAX_EXPR:
13407    case MIN_EXPR:
13408    case LE_EXPR:
13409    case GE_EXPR:
13410    case LT_EXPR:
13411    case GT_EXPR:
13412    case COMPOUND_EXPR:
13413    case DOTSTAR_EXPR:
13414    case MEMBER_REF:
13415    case PREDECREMENT_EXPR:
13416    case PREINCREMENT_EXPR:
13417    case POSTDECREMENT_EXPR:
13418    case POSTINCREMENT_EXPR:
13419      {
13420	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13421	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13422	return build_nt (code, op0, op1);
13423      }
13424
13425    case SCOPE_REF:
13426      {
13427	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13428	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13429	return build_qualified_name (/*type=*/NULL_TREE, op0, op1,
13430				     QUALIFIED_NAME_IS_TEMPLATE (t));
13431      }
13432
13433    case ARRAY_REF:
13434      {
13435	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13436	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13437	return build_nt (ARRAY_REF, op0, op1, NULL_TREE, NULL_TREE);
13438      }
13439
13440    case CALL_EXPR:
13441      {
13442	int n = VL_EXP_OPERAND_LENGTH (t);
13443	tree result = build_vl_exp (CALL_EXPR, n);
13444	int i;
13445	for (i = 0; i < n; i++)
13446	  TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
13447					     complain, in_decl);
13448	return result;
13449      }
13450
13451    case COND_EXPR:
13452    case MODOP_EXPR:
13453    case PSEUDO_DTOR_EXPR:
13454    case VEC_PERM_EXPR:
13455      {
13456	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13457	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13458	tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
13459	r = build_nt (code, op0, op1, op2);
13460	TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13461	return r;
13462      }
13463
13464    case NEW_EXPR:
13465      {
13466	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13467	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13468	tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
13469	r = build_nt (code, op0, op1, op2);
13470	NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
13471	return r;
13472      }
13473
13474    case DELETE_EXPR:
13475      {
13476	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13477	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13478	r = build_nt (code, op0, op1);
13479	DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
13480	DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
13481	return r;
13482      }
13483
13484    case TEMPLATE_ID_EXPR:
13485      {
13486	/* Substituted template arguments */
13487	tree fn = TREE_OPERAND (t, 0);
13488	tree targs = TREE_OPERAND (t, 1);
13489
13490	fn = tsubst_copy (fn, args, complain, in_decl);
13491	if (targs)
13492	  targs = tsubst_template_args (targs, args, complain, in_decl);
13493
13494	return lookup_template_function (fn, targs);
13495      }
13496
13497    case TREE_LIST:
13498      {
13499	tree purpose, value, chain;
13500
13501	if (t == void_list_node)
13502	  return t;
13503
13504	purpose = TREE_PURPOSE (t);
13505	if (purpose)
13506	  purpose = tsubst_copy (purpose, args, complain, in_decl);
13507	value = TREE_VALUE (t);
13508	if (value)
13509	  value = tsubst_copy (value, args, complain, in_decl);
13510	chain = TREE_CHAIN (t);
13511	if (chain && chain != void_type_node)
13512	  chain = tsubst_copy (chain, args, complain, in_decl);
13513	if (purpose == TREE_PURPOSE (t)
13514	    && value == TREE_VALUE (t)
13515	    && chain == TREE_CHAIN (t))
13516	  return t;
13517	return tree_cons (purpose, value, chain);
13518      }
13519
13520    case RECORD_TYPE:
13521    case UNION_TYPE:
13522    case ENUMERAL_TYPE:
13523    case INTEGER_TYPE:
13524    case TEMPLATE_TYPE_PARM:
13525    case TEMPLATE_TEMPLATE_PARM:
13526    case BOUND_TEMPLATE_TEMPLATE_PARM:
13527    case TEMPLATE_PARM_INDEX:
13528    case POINTER_TYPE:
13529    case REFERENCE_TYPE:
13530    case OFFSET_TYPE:
13531    case FUNCTION_TYPE:
13532    case METHOD_TYPE:
13533    case ARRAY_TYPE:
13534    case TYPENAME_TYPE:
13535    case UNBOUND_CLASS_TEMPLATE:
13536    case TYPEOF_TYPE:
13537    case DECLTYPE_TYPE:
13538    case TYPE_DECL:
13539      return tsubst (t, args, complain, in_decl);
13540
13541    case USING_DECL:
13542      t = DECL_NAME (t);
13543      /* Fall through.  */
13544    case IDENTIFIER_NODE:
13545      if (IDENTIFIER_TYPENAME_P (t))
13546	{
13547	  tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13548	  return mangle_conv_op_name_for_type (new_type);
13549	}
13550      else
13551	return t;
13552
13553    case CONSTRUCTOR:
13554      /* This is handled by tsubst_copy_and_build.  */
13555      gcc_unreachable ();
13556
13557    case VA_ARG_EXPR:
13558      {
13559	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13560	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13561	return build_x_va_arg (EXPR_LOCATION (t), op0, type);
13562      }
13563
13564    case CLEANUP_POINT_EXPR:
13565      /* We shouldn't have built any of these during initial template
13566	 generation.  Instead, they should be built during instantiation
13567	 in response to the saved STMT_IS_FULL_EXPR_P setting.  */
13568      gcc_unreachable ();
13569
13570    case OFFSET_REF:
13571      {
13572	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13573	tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13574	tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13575	r = build2 (code, type, op0, op1);
13576	PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
13577	if (!mark_used (TREE_OPERAND (r, 1), complain)
13578	    && !(complain & tf_error))
13579	  return error_mark_node;
13580	return r;
13581      }
13582
13583    case EXPR_PACK_EXPANSION:
13584      error ("invalid use of pack expansion expression");
13585      return error_mark_node;
13586
13587    case NONTYPE_ARGUMENT_PACK:
13588      error ("use %<...%> to expand argument pack");
13589      return error_mark_node;
13590
13591    case VOID_CST:
13592      gcc_checking_assert (t == void_node && VOID_TYPE_P (TREE_TYPE (t)));
13593      return t;
13594
13595    case INTEGER_CST:
13596    case REAL_CST:
13597    case STRING_CST:
13598    case COMPLEX_CST:
13599      {
13600	/* Instantiate any typedefs in the type.  */
13601	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13602	r = fold_convert (type, t);
13603	gcc_assert (TREE_CODE (r) == code);
13604	return r;
13605      }
13606
13607    case PTRMEM_CST:
13608      /* These can sometimes show up in a partial instantiation, but never
13609	 involve template parms.  */
13610      gcc_assert (!uses_template_parms (t));
13611      return t;
13612
13613    default:
13614      /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
13615      gcc_checking_assert (false);
13616      return t;
13617    }
13618}
13619
13620/* Helper function for tsubst_omp_clauses, used for instantiation of
13621   OMP_CLAUSE_DECL of clauses that handles also OpenMP array sections
13622   represented with TREE_LIST.  */
13623
13624static tree
13625tsubst_omp_clause_decl (tree decl, tree args, tsubst_flags_t complain,
13626			tree in_decl)
13627{
13628  if (TREE_CODE (decl) == TREE_LIST)
13629    {
13630      tree low_bound
13631	= tsubst_expr (TREE_PURPOSE (decl), args, complain, in_decl,
13632		       /*integral_constant_expression_p=*/false);
13633      tree length = tsubst_expr (TREE_VALUE (decl), args, complain, in_decl,
13634				 /*integral_constant_expression_p=*/false);
13635      tree chain = tsubst_omp_clause_decl (TREE_CHAIN (decl), args, complain,
13636					   in_decl);
13637      if (TREE_PURPOSE (decl) == low_bound
13638	  && TREE_VALUE (decl) == length
13639	  && TREE_CHAIN (decl) == chain)
13640	return decl;
13641      return tree_cons (low_bound, length, chain);
13642    }
13643  return tsubst_copy (decl, args, complain, in_decl);
13644}
13645
13646/* Like tsubst_copy, but specifically for OpenMP clauses.  */
13647
13648static tree
13649tsubst_omp_clauses (tree clauses, bool declare_simd,
13650		    tree args, tsubst_flags_t complain, tree in_decl)
13651{
13652  tree new_clauses = NULL, nc, oc;
13653
13654  for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
13655    {
13656      nc = copy_node (oc);
13657      OMP_CLAUSE_CHAIN (nc) = new_clauses;
13658      new_clauses = nc;
13659
13660      switch (OMP_CLAUSE_CODE (nc))
13661	{
13662	case OMP_CLAUSE_LASTPRIVATE:
13663	  if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
13664	    {
13665	      OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
13666	      tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
13667			   in_decl, /*integral_constant_expression_p=*/false);
13668	      OMP_CLAUSE_LASTPRIVATE_STMT (nc)
13669		= pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
13670	    }
13671	  /* FALLTHRU */
13672	case OMP_CLAUSE_PRIVATE:
13673	case OMP_CLAUSE_SHARED:
13674	case OMP_CLAUSE_FIRSTPRIVATE:
13675	case OMP_CLAUSE_COPYIN:
13676	case OMP_CLAUSE_COPYPRIVATE:
13677	case OMP_CLAUSE_UNIFORM:
13678	  OMP_CLAUSE_DECL (nc) = tsubst_copy (OMP_CLAUSE_DECL (oc), args,
13679					      complain, in_decl);
13680	  break;
13681	case OMP_CLAUSE_DEPEND:
13682	case OMP_CLAUSE_FROM:
13683	case OMP_CLAUSE_TO:
13684	case OMP_CLAUSE_MAP:
13685	  OMP_CLAUSE_DECL (nc)
13686	    = tsubst_omp_clause_decl (OMP_CLAUSE_DECL (oc), args, complain,
13687				      in_decl);
13688	  break;
13689	case OMP_CLAUSE_IF:
13690	case OMP_CLAUSE_NUM_THREADS:
13691	case OMP_CLAUSE_SCHEDULE:
13692	case OMP_CLAUSE_COLLAPSE:
13693	case OMP_CLAUSE_FINAL:
13694	case OMP_CLAUSE_DEVICE:
13695	case OMP_CLAUSE_DIST_SCHEDULE:
13696	case OMP_CLAUSE_NUM_TEAMS:
13697	case OMP_CLAUSE_THREAD_LIMIT:
13698	case OMP_CLAUSE_SAFELEN:
13699	case OMP_CLAUSE_SIMDLEN:
13700	  OMP_CLAUSE_OPERAND (nc, 0)
13701	    = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13702			   in_decl, /*integral_constant_expression_p=*/false);
13703	  break;
13704	case OMP_CLAUSE_REDUCTION:
13705	  if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
13706	    {
13707	      tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
13708	      if (TREE_CODE (placeholder) == SCOPE_REF)
13709		{
13710		  tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
13711				       complain, in_decl);
13712		  OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
13713		    = build_qualified_name (NULL_TREE, scope,
13714					    TREE_OPERAND (placeholder, 1),
13715					    false);
13716		}
13717	      else
13718		gcc_assert (identifier_p (placeholder));
13719	    }
13720	  OMP_CLAUSE_DECL (nc) = tsubst_copy (OMP_CLAUSE_DECL (oc), args,
13721					      complain, in_decl);
13722	  break;
13723	case OMP_CLAUSE_LINEAR:
13724	case OMP_CLAUSE_ALIGNED:
13725	  OMP_CLAUSE_DECL (nc) = tsubst_copy (OMP_CLAUSE_DECL (oc), args,
13726					      complain, in_decl);
13727	  OMP_CLAUSE_OPERAND (nc, 1)
13728	    = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
13729			   in_decl, /*integral_constant_expression_p=*/false);
13730	  break;
13731	case OMP_CLAUSE_NOWAIT:
13732	case OMP_CLAUSE_ORDERED:
13733	case OMP_CLAUSE_DEFAULT:
13734	case OMP_CLAUSE_UNTIED:
13735	case OMP_CLAUSE_MERGEABLE:
13736	case OMP_CLAUSE_INBRANCH:
13737	case OMP_CLAUSE_NOTINBRANCH:
13738	case OMP_CLAUSE_PROC_BIND:
13739	case OMP_CLAUSE_FOR:
13740	case OMP_CLAUSE_PARALLEL:
13741	case OMP_CLAUSE_SECTIONS:
13742	case OMP_CLAUSE_TASKGROUP:
13743	  break;
13744	default:
13745	  gcc_unreachable ();
13746	}
13747    }
13748
13749  new_clauses = nreverse (new_clauses);
13750  if (!declare_simd)
13751    new_clauses = finish_omp_clauses (new_clauses);
13752  return new_clauses;
13753}
13754
13755/* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
13756
13757static tree
13758tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
13759			  tree in_decl)
13760{
13761#define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
13762
13763  tree purpose, value, chain;
13764
13765  if (t == NULL)
13766    return t;
13767
13768  if (TREE_CODE (t) != TREE_LIST)
13769    return tsubst_copy_and_build (t, args, complain, in_decl,
13770				  /*function_p=*/false,
13771				  /*integral_constant_expression_p=*/false);
13772
13773  if (t == void_list_node)
13774    return t;
13775
13776  purpose = TREE_PURPOSE (t);
13777  if (purpose)
13778    purpose = RECUR (purpose);
13779  value = TREE_VALUE (t);
13780  if (value)
13781    {
13782      if (TREE_CODE (value) != LABEL_DECL)
13783	value = RECUR (value);
13784      else
13785	{
13786	  value = lookup_label (DECL_NAME (value));
13787	  gcc_assert (TREE_CODE (value) == LABEL_DECL);
13788	  TREE_USED (value) = 1;
13789	}
13790    }
13791  chain = TREE_CHAIN (t);
13792  if (chain && chain != void_type_node)
13793    chain = RECUR (chain);
13794  return tree_cons (purpose, value, chain);
13795#undef RECUR
13796}
13797
13798/* Substitute one OMP_FOR iterator.  */
13799
13800static void
13801tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
13802			 tree condv, tree incrv, tree *clauses,
13803			 tree args, tsubst_flags_t complain, tree in_decl,
13804			 bool integral_constant_expression_p)
13805{
13806#define RECUR(NODE)				\
13807  tsubst_expr ((NODE), args, complain, in_decl,	\
13808	       integral_constant_expression_p)
13809  tree decl, init, cond, incr;
13810
13811  init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
13812  gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
13813  decl = TREE_OPERAND (init, 0);
13814  init = TREE_OPERAND (init, 1);
13815  tree decl_expr = NULL_TREE;
13816  if (init && TREE_CODE (init) == DECL_EXPR)
13817    {
13818      /* We need to jump through some hoops to handle declarations in the
13819	 for-init-statement, since we might need to handle auto deduction,
13820	 but we need to keep control of initialization.  */
13821      decl_expr = init;
13822      init = DECL_INITIAL (DECL_EXPR_DECL (init));
13823      decl = tsubst_decl (decl, args, complain);
13824    }
13825  else
13826    decl = RECUR (decl);
13827  init = RECUR (init);
13828
13829  tree auto_node = type_uses_auto (TREE_TYPE (decl));
13830  if (auto_node && init)
13831    TREE_TYPE (decl)
13832      = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
13833
13834  gcc_assert (!type_dependent_expression_p (decl));
13835
13836  if (!CLASS_TYPE_P (TREE_TYPE (decl)))
13837    {
13838      if (decl_expr)
13839	{
13840	  /* Declare the variable, but don't let that initialize it.  */
13841	  tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13842	  DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
13843	  RECUR (decl_expr);
13844	  DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
13845	}
13846
13847      cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
13848      incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13849      if (TREE_CODE (incr) == MODIFY_EXPR)
13850	{
13851	  tree lhs = RECUR (TREE_OPERAND (incr, 0));
13852	  tree rhs = RECUR (TREE_OPERAND (incr, 1));
13853	  incr = build_x_modify_expr (EXPR_LOCATION (incr), lhs,
13854				      NOP_EXPR, rhs, complain);
13855	}
13856      else
13857	incr = RECUR (incr);
13858      TREE_VEC_ELT (declv, i) = decl;
13859      TREE_VEC_ELT (initv, i) = init;
13860      TREE_VEC_ELT (condv, i) = cond;
13861      TREE_VEC_ELT (incrv, i) = incr;
13862      return;
13863    }
13864
13865  if (decl_expr)
13866    {
13867      /* Declare and initialize the variable.  */
13868      RECUR (decl_expr);
13869      init = NULL_TREE;
13870    }
13871  else if (init)
13872    {
13873      tree c;
13874      for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
13875	{
13876	  if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
13877	       || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
13878	      && OMP_CLAUSE_DECL (c) == decl)
13879	    break;
13880	  else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
13881		   && OMP_CLAUSE_DECL (c) == decl)
13882	    error ("iteration variable %qD should not be firstprivate", decl);
13883	  else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
13884		   && OMP_CLAUSE_DECL (c) == decl)
13885	    error ("iteration variable %qD should not be reduction", decl);
13886	}
13887      if (c == NULL)
13888	{
13889	  c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
13890	  OMP_CLAUSE_DECL (c) = decl;
13891	  c = finish_omp_clauses (c);
13892	  if (c)
13893	    {
13894	      OMP_CLAUSE_CHAIN (c) = *clauses;
13895	      *clauses = c;
13896	    }
13897	}
13898    }
13899  cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
13900  if (COMPARISON_CLASS_P (cond))
13901    {
13902      tree op0 = RECUR (TREE_OPERAND (cond, 0));
13903      tree op1 = RECUR (TREE_OPERAND (cond, 1));
13904      cond = build2 (TREE_CODE (cond), boolean_type_node, op0, op1);
13905    }
13906  else
13907    cond = RECUR (cond);
13908  incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13909  switch (TREE_CODE (incr))
13910    {
13911    case PREINCREMENT_EXPR:
13912    case PREDECREMENT_EXPR:
13913    case POSTINCREMENT_EXPR:
13914    case POSTDECREMENT_EXPR:
13915      incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
13916		     RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
13917      break;
13918    case MODIFY_EXPR:
13919      if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13920	  || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13921	{
13922	  tree rhs = TREE_OPERAND (incr, 1);
13923	  tree lhs = RECUR (TREE_OPERAND (incr, 0));
13924	  tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
13925	  tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
13926	  incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13927			 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13928				 rhs0, rhs1));
13929	}
13930      else
13931	incr = RECUR (incr);
13932      break;
13933    case MODOP_EXPR:
13934      if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13935	  || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13936	{
13937	  tree lhs = RECUR (TREE_OPERAND (incr, 0));
13938	  incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13939			 build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
13940				 TREE_TYPE (decl), lhs,
13941				 RECUR (TREE_OPERAND (incr, 2))));
13942	}
13943      else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
13944	       && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
13945		   || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
13946	{
13947	  tree rhs = TREE_OPERAND (incr, 2);
13948	  tree lhs = RECUR (TREE_OPERAND (incr, 0));
13949	  tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
13950	  tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
13951	  incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13952			 build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13953				 rhs0, rhs1));
13954	}
13955      else
13956	incr = RECUR (incr);
13957      break;
13958    default:
13959      incr = RECUR (incr);
13960      break;
13961    }
13962
13963  TREE_VEC_ELT (declv, i) = decl;
13964  TREE_VEC_ELT (initv, i) = init;
13965  TREE_VEC_ELT (condv, i) = cond;
13966  TREE_VEC_ELT (incrv, i) = incr;
13967#undef RECUR
13968}
13969
13970/* Like tsubst_copy for expressions, etc. but also does semantic
13971   processing.  */
13972
13973static tree
13974tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
13975	     bool integral_constant_expression_p)
13976{
13977#define RETURN(EXP) do { r = (EXP); goto out; } while(0)
13978#define RECUR(NODE)				\
13979  tsubst_expr ((NODE), args, complain, in_decl,	\
13980	       integral_constant_expression_p)
13981
13982  tree stmt, tmp;
13983  tree r;
13984  location_t loc;
13985
13986  if (t == NULL_TREE || t == error_mark_node)
13987    return t;
13988
13989  loc = input_location;
13990  if (EXPR_HAS_LOCATION (t))
13991    input_location = EXPR_LOCATION (t);
13992  if (STATEMENT_CODE_P (TREE_CODE (t)))
13993    current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
13994
13995  switch (TREE_CODE (t))
13996    {
13997    case STATEMENT_LIST:
13998      {
13999	tree_stmt_iterator i;
14000	for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
14001	  RECUR (tsi_stmt (i));
14002	break;
14003      }
14004
14005    case CTOR_INITIALIZER:
14006      finish_mem_initializers (tsubst_initializer_list
14007			       (TREE_OPERAND (t, 0), args));
14008      break;
14009
14010    case RETURN_EXPR:
14011      finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
14012      break;
14013
14014    case EXPR_STMT:
14015      tmp = RECUR (EXPR_STMT_EXPR (t));
14016      if (EXPR_STMT_STMT_EXPR_RESULT (t))
14017	finish_stmt_expr_expr (tmp, cur_stmt_expr);
14018      else
14019	finish_expr_stmt (tmp);
14020      break;
14021
14022    case USING_STMT:
14023      do_using_directive (USING_STMT_NAMESPACE (t));
14024      break;
14025
14026    case DECL_EXPR:
14027      {
14028	tree decl, pattern_decl;
14029	tree init;
14030
14031	pattern_decl = decl = DECL_EXPR_DECL (t);
14032	if (TREE_CODE (decl) == LABEL_DECL)
14033	  finish_label_decl (DECL_NAME (decl));
14034	else if (TREE_CODE (decl) == USING_DECL)
14035	  {
14036	    tree scope = USING_DECL_SCOPE (decl);
14037	    tree name = DECL_NAME (decl);
14038	    tree decl;
14039
14040	    scope = tsubst (scope, args, complain, in_decl);
14041	    decl = lookup_qualified_name (scope, name,
14042					  /*is_type_p=*/false,
14043					  /*complain=*/false);
14044	    if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
14045	      qualified_name_lookup_error (scope, name, decl, input_location);
14046	    else
14047	      do_local_using_decl (decl, scope, name);
14048	  }
14049	else if (DECL_PACK_P (decl))
14050	  {
14051	    /* Don't build up decls for a variadic capture proxy, we'll
14052	       instantiate the elements directly as needed.  */
14053	    break;
14054	  }
14055	else
14056	  {
14057	    init = DECL_INITIAL (decl);
14058	    decl = tsubst (decl, args, complain, in_decl);
14059	    if (decl != error_mark_node)
14060	      {
14061		/* By marking the declaration as instantiated, we avoid
14062		   trying to instantiate it.  Since instantiate_decl can't
14063		   handle local variables, and since we've already done
14064		   all that needs to be done, that's the right thing to
14065		   do.  */
14066		if (VAR_P (decl))
14067		  DECL_TEMPLATE_INSTANTIATED (decl) = 1;
14068		if (VAR_P (decl)
14069		    && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
14070		  /* Anonymous aggregates are a special case.  */
14071		  finish_anon_union (decl);
14072		else if (is_capture_proxy (DECL_EXPR_DECL (t)))
14073		  {
14074		    DECL_CONTEXT (decl) = current_function_decl;
14075		    if (DECL_NAME (decl) == this_identifier)
14076		      {
14077			tree lam = DECL_CONTEXT (current_function_decl);
14078			lam = CLASSTYPE_LAMBDA_EXPR (lam);
14079			LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
14080		      }
14081		    insert_capture_proxy (decl);
14082		  }
14083		else if (DECL_IMPLICIT_TYPEDEF_P (t))
14084		  /* We already did a pushtag.  */;
14085		else if (TREE_CODE (decl) == FUNCTION_DECL
14086			 && DECL_OMP_DECLARE_REDUCTION_P (decl)
14087			 && DECL_FUNCTION_SCOPE_P (pattern_decl))
14088		  {
14089		    DECL_CONTEXT (decl) = NULL_TREE;
14090		    pushdecl (decl);
14091		    DECL_CONTEXT (decl) = current_function_decl;
14092		    cp_check_omp_declare_reduction (decl);
14093		  }
14094		else
14095		  {
14096		    int const_init = false;
14097		    maybe_push_decl (decl);
14098		    if (VAR_P (decl)
14099			&& DECL_PRETTY_FUNCTION_P (decl))
14100		      {
14101			/* For __PRETTY_FUNCTION__ we have to adjust the
14102			   initializer.  */
14103			const char *const name
14104			  = cxx_printable_name (current_function_decl, 2);
14105			init = cp_fname_init (name, &TREE_TYPE (decl));
14106		      }
14107		    else
14108		      init = tsubst_init (init, decl, args, complain, in_decl);
14109
14110		    if (VAR_P (decl))
14111		      const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
14112				    (pattern_decl));
14113		    cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
14114		  }
14115	      }
14116	  }
14117
14118	break;
14119      }
14120
14121    case FOR_STMT:
14122      stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
14123      RECUR (FOR_INIT_STMT (t));
14124      finish_for_init_stmt (stmt);
14125      tmp = RECUR (FOR_COND (t));
14126      finish_for_cond (tmp, stmt, false);
14127      tmp = RECUR (FOR_EXPR (t));
14128      finish_for_expr (tmp, stmt);
14129      RECUR (FOR_BODY (t));
14130      finish_for_stmt (stmt);
14131      break;
14132
14133    case RANGE_FOR_STMT:
14134      {
14135        tree decl, expr;
14136        stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
14137        decl = RANGE_FOR_DECL (t);
14138        decl = tsubst (decl, args, complain, in_decl);
14139        maybe_push_decl (decl);
14140        expr = RECUR (RANGE_FOR_EXPR (t));
14141        stmt = cp_convert_range_for (stmt, decl, expr, RANGE_FOR_IVDEP (t));
14142        RECUR (RANGE_FOR_BODY (t));
14143        finish_for_stmt (stmt);
14144      }
14145      break;
14146
14147    case WHILE_STMT:
14148      stmt = begin_while_stmt ();
14149      tmp = RECUR (WHILE_COND (t));
14150      finish_while_stmt_cond (tmp, stmt, false);
14151      RECUR (WHILE_BODY (t));
14152      finish_while_stmt (stmt);
14153      break;
14154
14155    case DO_STMT:
14156      stmt = begin_do_stmt ();
14157      RECUR (DO_BODY (t));
14158      finish_do_body (stmt);
14159      tmp = RECUR (DO_COND (t));
14160      finish_do_stmt (tmp, stmt, false);
14161      break;
14162
14163    case IF_STMT:
14164      stmt = begin_if_stmt ();
14165      tmp = RECUR (IF_COND (t));
14166      finish_if_stmt_cond (tmp, stmt);
14167      RECUR (THEN_CLAUSE (t));
14168      finish_then_clause (stmt);
14169
14170      if (ELSE_CLAUSE (t))
14171	{
14172	  begin_else_clause (stmt);
14173	  RECUR (ELSE_CLAUSE (t));
14174	  finish_else_clause (stmt);
14175	}
14176
14177      finish_if_stmt (stmt);
14178      break;
14179
14180    case BIND_EXPR:
14181      if (BIND_EXPR_BODY_BLOCK (t))
14182	stmt = begin_function_body ();
14183      else
14184	stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
14185				    ? BCS_TRY_BLOCK : 0);
14186
14187      RECUR (BIND_EXPR_BODY (t));
14188
14189      if (BIND_EXPR_BODY_BLOCK (t))
14190	finish_function_body (stmt);
14191      else
14192	finish_compound_stmt (stmt);
14193      break;
14194
14195    case BREAK_STMT:
14196      finish_break_stmt ();
14197      break;
14198
14199    case CONTINUE_STMT:
14200      finish_continue_stmt ();
14201      break;
14202
14203    case SWITCH_STMT:
14204      stmt = begin_switch_stmt ();
14205      tmp = RECUR (SWITCH_STMT_COND (t));
14206      finish_switch_cond (tmp, stmt);
14207      RECUR (SWITCH_STMT_BODY (t));
14208      finish_switch_stmt (stmt);
14209      break;
14210
14211    case CASE_LABEL_EXPR:
14212      {
14213	tree low = RECUR (CASE_LOW (t));
14214	tree high = RECUR (CASE_HIGH (t));
14215	finish_case_label (EXPR_LOCATION (t), low, high);
14216      }
14217      break;
14218
14219    case LABEL_EXPR:
14220      {
14221	tree decl = LABEL_EXPR_LABEL (t);
14222	tree label;
14223
14224	label = finish_label_stmt (DECL_NAME (decl));
14225	if (DECL_ATTRIBUTES (decl) != NULL_TREE)
14226	  cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
14227      }
14228      break;
14229
14230    case GOTO_EXPR:
14231      tmp = GOTO_DESTINATION (t);
14232      if (TREE_CODE (tmp) != LABEL_DECL)
14233	/* Computed goto's must be tsubst'd into.  On the other hand,
14234	   non-computed gotos must not be; the identifier in question
14235	   will have no binding.  */
14236	tmp = RECUR (tmp);
14237      else
14238	tmp = DECL_NAME (tmp);
14239      finish_goto_stmt (tmp);
14240      break;
14241
14242    case ASM_EXPR:
14243      {
14244	tree string = RECUR (ASM_STRING (t));
14245	tree outputs = tsubst_copy_asm_operands (ASM_OUTPUTS (t), args,
14246						 complain, in_decl);
14247	tree inputs = tsubst_copy_asm_operands (ASM_INPUTS (t), args,
14248						complain, in_decl);
14249	tree clobbers = tsubst_copy_asm_operands (ASM_CLOBBERS (t), args,
14250	 					  complain, in_decl);
14251	tree labels = tsubst_copy_asm_operands (ASM_LABELS (t), args,
14252						complain, in_decl);
14253	tmp = finish_asm_stmt (ASM_VOLATILE_P (t), string, outputs, inputs,
14254			       clobbers, labels);
14255	tree asm_expr = tmp;
14256	if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
14257	  asm_expr = TREE_OPERAND (asm_expr, 0);
14258	ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
14259      }
14260      break;
14261
14262    case TRY_BLOCK:
14263      if (CLEANUP_P (t))
14264	{
14265	  stmt = begin_try_block ();
14266	  RECUR (TRY_STMTS (t));
14267	  finish_cleanup_try_block (stmt);
14268	  finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
14269	}
14270      else
14271	{
14272	  tree compound_stmt = NULL_TREE;
14273
14274	  if (FN_TRY_BLOCK_P (t))
14275	    stmt = begin_function_try_block (&compound_stmt);
14276	  else
14277	    stmt = begin_try_block ();
14278
14279	  RECUR (TRY_STMTS (t));
14280
14281	  if (FN_TRY_BLOCK_P (t))
14282	    finish_function_try_block (stmt);
14283	  else
14284	    finish_try_block (stmt);
14285
14286	  RECUR (TRY_HANDLERS (t));
14287	  if (FN_TRY_BLOCK_P (t))
14288	    finish_function_handler_sequence (stmt, compound_stmt);
14289	  else
14290	    finish_handler_sequence (stmt);
14291	}
14292      break;
14293
14294    case HANDLER:
14295      {
14296	tree decl = HANDLER_PARMS (t);
14297
14298	if (decl)
14299	  {
14300	    decl = tsubst (decl, args, complain, in_decl);
14301	    /* Prevent instantiate_decl from trying to instantiate
14302	       this variable.  We've already done all that needs to be
14303	       done.  */
14304	    if (decl != error_mark_node)
14305	      DECL_TEMPLATE_INSTANTIATED (decl) = 1;
14306	  }
14307	stmt = begin_handler ();
14308	finish_handler_parms (decl, stmt);
14309	RECUR (HANDLER_BODY (t));
14310	finish_handler (stmt);
14311      }
14312      break;
14313
14314    case TAG_DEFN:
14315      tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
14316      if (CLASS_TYPE_P (tmp))
14317	{
14318	  /* Local classes are not independent templates; they are
14319	     instantiated along with their containing function.  And this
14320	     way we don't have to deal with pushing out of one local class
14321	     to instantiate a member of another local class.  */
14322	  tree fn;
14323	  /* Closures are handled by the LAMBDA_EXPR.  */
14324	  gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
14325	  complete_type (tmp);
14326	  for (fn = TYPE_METHODS (tmp); fn; fn = DECL_CHAIN (fn))
14327	    if (!DECL_ARTIFICIAL (fn))
14328	      instantiate_decl (fn, /*defer_ok*/0, /*expl_inst_class*/false);
14329	}
14330      break;
14331
14332    case STATIC_ASSERT:
14333      {
14334	tree condition;
14335
14336	++c_inhibit_evaluation_warnings;
14337        condition =
14338          tsubst_expr (STATIC_ASSERT_CONDITION (t),
14339                       args,
14340                       complain, in_decl,
14341                       /*integral_constant_expression_p=*/true);
14342	--c_inhibit_evaluation_warnings;
14343
14344        finish_static_assert (condition,
14345                              STATIC_ASSERT_MESSAGE (t),
14346                              STATIC_ASSERT_SOURCE_LOCATION (t),
14347                              /*member_p=*/false);
14348      }
14349      break;
14350
14351    case OMP_PARALLEL:
14352      tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), false,
14353				args, complain, in_decl);
14354      stmt = begin_omp_parallel ();
14355      RECUR (OMP_PARALLEL_BODY (t));
14356      OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
14357	= OMP_PARALLEL_COMBINED (t);
14358      break;
14359
14360    case OMP_TASK:
14361      tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), false,
14362				args, complain, in_decl);
14363      stmt = begin_omp_task ();
14364      RECUR (OMP_TASK_BODY (t));
14365      finish_omp_task (tmp, stmt);
14366      break;
14367
14368    case OMP_FOR:
14369    case OMP_SIMD:
14370    case CILK_SIMD:
14371    case CILK_FOR:
14372    case OMP_DISTRIBUTE:
14373      {
14374	tree clauses, body, pre_body;
14375	tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
14376	tree incrv = NULL_TREE;
14377	int i;
14378
14379	clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), false,
14380				      args, complain, in_decl);
14381	if (OMP_FOR_INIT (t) != NULL_TREE)
14382	  {
14383	    declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14384	    initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14385	    condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14386	    incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14387	  }
14388
14389	stmt = begin_omp_structured_block ();
14390
14391	pre_body = push_stmt_list ();
14392	RECUR (OMP_FOR_PRE_BODY (t));
14393	pre_body = pop_stmt_list (pre_body);
14394
14395	if (OMP_FOR_INIT (t) != NULL_TREE)
14396	  for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
14397	    tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
14398				     &clauses, args, complain, in_decl,
14399				     integral_constant_expression_p);
14400
14401	body = push_stmt_list ();
14402	RECUR (OMP_FOR_BODY (t));
14403	body = pop_stmt_list (body);
14404
14405	if (OMP_FOR_INIT (t) != NULL_TREE)
14406	  t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv, initv,
14407			      condv, incrv, body, pre_body, clauses);
14408	else
14409	  {
14410	    t = make_node (TREE_CODE (t));
14411	    TREE_TYPE (t) = void_type_node;
14412	    OMP_FOR_BODY (t) = body;
14413	    OMP_FOR_PRE_BODY (t) = pre_body;
14414	    OMP_FOR_CLAUSES (t) = clauses;
14415	    SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
14416	    add_stmt (t);
14417	  }
14418
14419	add_stmt (finish_omp_structured_block (stmt));
14420      }
14421      break;
14422
14423    case OMP_SECTIONS:
14424    case OMP_SINGLE:
14425    case OMP_TEAMS:
14426      tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
14427				args, complain, in_decl);
14428      stmt = push_stmt_list ();
14429      RECUR (OMP_BODY (t));
14430      stmt = pop_stmt_list (stmt);
14431
14432      t = copy_node (t);
14433      OMP_BODY (t) = stmt;
14434      OMP_CLAUSES (t) = tmp;
14435      add_stmt (t);
14436      break;
14437
14438    case OMP_TARGET_DATA:
14439    case OMP_TARGET:
14440      tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
14441				args, complain, in_decl);
14442      keep_next_level (true);
14443      stmt = begin_omp_structured_block ();
14444
14445      RECUR (OMP_BODY (t));
14446      stmt = finish_omp_structured_block (stmt);
14447
14448      t = copy_node (t);
14449      OMP_BODY (t) = stmt;
14450      OMP_CLAUSES (t) = tmp;
14451      add_stmt (t);
14452      break;
14453
14454    case OMP_TARGET_UPDATE:
14455      tmp = tsubst_omp_clauses (OMP_TARGET_UPDATE_CLAUSES (t), false,
14456				args, complain, in_decl);
14457      t = copy_node (t);
14458      OMP_TARGET_UPDATE_CLAUSES (t) = tmp;
14459      add_stmt (t);
14460      break;
14461
14462    case OMP_SECTION:
14463    case OMP_CRITICAL:
14464    case OMP_MASTER:
14465    case OMP_TASKGROUP:
14466    case OMP_ORDERED:
14467      stmt = push_stmt_list ();
14468      RECUR (OMP_BODY (t));
14469      stmt = pop_stmt_list (stmt);
14470
14471      t = copy_node (t);
14472      OMP_BODY (t) = stmt;
14473      add_stmt (t);
14474      break;
14475
14476    case OMP_ATOMIC:
14477      gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
14478      if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
14479	{
14480	  tree op1 = TREE_OPERAND (t, 1);
14481	  tree rhs1 = NULL_TREE;
14482	  tree lhs, rhs;
14483	  if (TREE_CODE (op1) == COMPOUND_EXPR)
14484	    {
14485	      rhs1 = RECUR (TREE_OPERAND (op1, 0));
14486	      op1 = TREE_OPERAND (op1, 1);
14487	    }
14488	  lhs = RECUR (TREE_OPERAND (op1, 0));
14489	  rhs = RECUR (TREE_OPERAND (op1, 1));
14490	  finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
14491			     NULL_TREE, NULL_TREE, rhs1,
14492			     OMP_ATOMIC_SEQ_CST (t));
14493	}
14494      else
14495	{
14496	  tree op1 = TREE_OPERAND (t, 1);
14497	  tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
14498	  tree rhs1 = NULL_TREE;
14499	  enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
14500	  enum tree_code opcode = NOP_EXPR;
14501	  if (code == OMP_ATOMIC_READ)
14502	    {
14503	      v = RECUR (TREE_OPERAND (op1, 0));
14504	      lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
14505	    }
14506	  else if (code == OMP_ATOMIC_CAPTURE_OLD
14507		   || code == OMP_ATOMIC_CAPTURE_NEW)
14508	    {
14509	      tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
14510	      v = RECUR (TREE_OPERAND (op1, 0));
14511	      lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
14512	      if (TREE_CODE (op11) == COMPOUND_EXPR)
14513		{
14514		  rhs1 = RECUR (TREE_OPERAND (op11, 0));
14515		  op11 = TREE_OPERAND (op11, 1);
14516		}
14517	      lhs = RECUR (TREE_OPERAND (op11, 0));
14518	      rhs = RECUR (TREE_OPERAND (op11, 1));
14519	      opcode = TREE_CODE (op11);
14520	      if (opcode == MODIFY_EXPR)
14521		opcode = NOP_EXPR;
14522	    }
14523	  else
14524	    {
14525	      code = OMP_ATOMIC;
14526	      lhs = RECUR (TREE_OPERAND (op1, 0));
14527	      rhs = RECUR (TREE_OPERAND (op1, 1));
14528	    }
14529	  finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1,
14530			     OMP_ATOMIC_SEQ_CST (t));
14531	}
14532      break;
14533
14534    case TRANSACTION_EXPR:
14535      {
14536	int flags = 0;
14537	flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
14538	flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
14539
14540        if (TRANSACTION_EXPR_IS_STMT (t))
14541          {
14542	    tree body = TRANSACTION_EXPR_BODY (t);
14543	    tree noex = NULL_TREE;
14544	    if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
14545	      {
14546		noex = MUST_NOT_THROW_COND (body);
14547		if (noex == NULL_TREE)
14548		  noex = boolean_true_node;
14549		body = TREE_OPERAND (body, 0);
14550	      }
14551            stmt = begin_transaction_stmt (input_location, NULL, flags);
14552            RECUR (body);
14553            finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
14554          }
14555        else
14556          {
14557            stmt = build_transaction_expr (EXPR_LOCATION (t),
14558					   RECUR (TRANSACTION_EXPR_BODY (t)),
14559					   flags, NULL_TREE);
14560            RETURN (stmt);
14561          }
14562      }
14563      break;
14564
14565    case MUST_NOT_THROW_EXPR:
14566      {
14567	tree op0 = RECUR (TREE_OPERAND (t, 0));
14568	tree cond = RECUR (MUST_NOT_THROW_COND (t));
14569	RETURN (build_must_not_throw_expr (op0, cond));
14570      }
14571
14572    case EXPR_PACK_EXPANSION:
14573      error ("invalid use of pack expansion expression");
14574      RETURN (error_mark_node);
14575
14576    case NONTYPE_ARGUMENT_PACK:
14577      error ("use %<...%> to expand argument pack");
14578      RETURN (error_mark_node);
14579
14580    case CILK_SPAWN_STMT:
14581      cfun->calls_cilk_spawn = 1;
14582      RETURN (build_cilk_spawn (EXPR_LOCATION (t), RECUR (CILK_SPAWN_FN (t))));
14583
14584    case CILK_SYNC_STMT:
14585      RETURN (build_cilk_sync ());
14586
14587    case COMPOUND_EXPR:
14588      tmp = RECUR (TREE_OPERAND (t, 0));
14589      if (tmp == NULL_TREE)
14590	/* If the first operand was a statement, we're done with it.  */
14591	RETURN (RECUR (TREE_OPERAND (t, 1)));
14592      RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
14593				    RECUR (TREE_OPERAND (t, 1)),
14594				    complain));
14595
14596    case ANNOTATE_EXPR:
14597      tmp = RECUR (TREE_OPERAND (t, 0));
14598      RETURN (build2_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
14599			  TREE_TYPE (tmp), tmp, RECUR (TREE_OPERAND (t, 1))));
14600
14601    default:
14602      gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
14603
14604      RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
14605				    /*function_p=*/false,
14606				    integral_constant_expression_p));
14607    }
14608
14609  RETURN (NULL_TREE);
14610 out:
14611  input_location = loc;
14612  return r;
14613#undef RECUR
14614#undef RETURN
14615}
14616
14617/* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
14618   function.  For description of the body see comment above
14619   cp_parser_omp_declare_reduction_exprs.  */
14620
14621static void
14622tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
14623{
14624  if (t == NULL_TREE || t == error_mark_node)
14625    return;
14626
14627  gcc_assert (TREE_CODE (t) == STATEMENT_LIST);
14628
14629  tree_stmt_iterator tsi;
14630  int i;
14631  tree stmts[7];
14632  memset (stmts, 0, sizeof stmts);
14633  for (i = 0, tsi = tsi_start (t);
14634       i < 7 && !tsi_end_p (tsi);
14635       i++, tsi_next (&tsi))
14636    stmts[i] = tsi_stmt (tsi);
14637  gcc_assert (tsi_end_p (tsi));
14638
14639  if (i >= 3)
14640    {
14641      gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
14642		  && TREE_CODE (stmts[1]) == DECL_EXPR);
14643      tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
14644			     args, complain, in_decl);
14645      tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
14646			    args, complain, in_decl);
14647      DECL_CONTEXT (omp_out) = current_function_decl;
14648      DECL_CONTEXT (omp_in) = current_function_decl;
14649      keep_next_level (true);
14650      tree block = begin_omp_structured_block ();
14651      tsubst_expr (stmts[2], args, complain, in_decl, false);
14652      block = finish_omp_structured_block (block);
14653      block = maybe_cleanup_point_expr_void (block);
14654      add_decl_expr (omp_out);
14655      if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
14656	TREE_NO_WARNING (omp_out) = 1;
14657      add_decl_expr (omp_in);
14658      finish_expr_stmt (block);
14659    }
14660  if (i >= 6)
14661    {
14662      gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
14663		  && TREE_CODE (stmts[4]) == DECL_EXPR);
14664      tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
14665			      args, complain, in_decl);
14666      tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
14667			      args, complain, in_decl);
14668      DECL_CONTEXT (omp_priv) = current_function_decl;
14669      DECL_CONTEXT (omp_orig) = current_function_decl;
14670      keep_next_level (true);
14671      tree block = begin_omp_structured_block ();
14672      tsubst_expr (stmts[5], args, complain, in_decl, false);
14673      block = finish_omp_structured_block (block);
14674      block = maybe_cleanup_point_expr_void (block);
14675      cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
14676      add_decl_expr (omp_priv);
14677      add_decl_expr (omp_orig);
14678      finish_expr_stmt (block);
14679      if (i == 7)
14680	add_decl_expr (omp_orig);
14681    }
14682}
14683
14684/* T is a postfix-expression that is not being used in a function
14685   call.  Return the substituted version of T.  */
14686
14687static tree
14688tsubst_non_call_postfix_expression (tree t, tree args,
14689				    tsubst_flags_t complain,
14690				    tree in_decl)
14691{
14692  if (TREE_CODE (t) == SCOPE_REF)
14693    t = tsubst_qualified_id (t, args, complain, in_decl,
14694			     /*done=*/false, /*address_p=*/false);
14695  else
14696    t = tsubst_copy_and_build (t, args, complain, in_decl,
14697			       /*function_p=*/false,
14698			       /*integral_constant_expression_p=*/false);
14699
14700  return t;
14701}
14702
14703/* Like tsubst but deals with expressions and performs semantic
14704   analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
14705
14706tree
14707tsubst_copy_and_build (tree t,
14708		       tree args,
14709		       tsubst_flags_t complain,
14710		       tree in_decl,
14711		       bool function_p,
14712		       bool integral_constant_expression_p)
14713{
14714#define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
14715#define RECUR(NODE)						\
14716  tsubst_copy_and_build (NODE, args, complain, in_decl, 	\
14717			 /*function_p=*/false,			\
14718			 integral_constant_expression_p)
14719
14720  tree retval, op1;
14721  location_t loc;
14722
14723  if (t == NULL_TREE || t == error_mark_node)
14724    return t;
14725
14726  loc = input_location;
14727  if (EXPR_HAS_LOCATION (t))
14728    input_location = EXPR_LOCATION (t);
14729
14730  /* N3276 decltype magic only applies to calls at the top level or on the
14731     right side of a comma.  */
14732  tsubst_flags_t decltype_flag = (complain & tf_decltype);
14733  complain &= ~tf_decltype;
14734
14735  switch (TREE_CODE (t))
14736    {
14737    case USING_DECL:
14738      t = DECL_NAME (t);
14739      /* Fall through.  */
14740    case IDENTIFIER_NODE:
14741      {
14742	tree decl;
14743	cp_id_kind idk;
14744	bool non_integral_constant_expression_p;
14745	const char *error_msg;
14746
14747	if (IDENTIFIER_TYPENAME_P (t))
14748	  {
14749	    tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14750	    t = mangle_conv_op_name_for_type (new_type);
14751	  }
14752
14753	/* Look up the name.  */
14754	decl = lookup_name (t);
14755
14756	/* By convention, expressions use ERROR_MARK_NODE to indicate
14757	   failure, not NULL_TREE.  */
14758	if (decl == NULL_TREE)
14759	  decl = error_mark_node;
14760
14761	decl = finish_id_expression (t, decl, NULL_TREE,
14762				     &idk,
14763				     integral_constant_expression_p,
14764          /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
14765				     &non_integral_constant_expression_p,
14766				     /*template_p=*/false,
14767				     /*done=*/true,
14768				     /*address_p=*/false,
14769				     /*template_arg_p=*/false,
14770				     &error_msg,
14771				     input_location);
14772	if (error_msg)
14773	  error (error_msg);
14774	if (!function_p && identifier_p (decl))
14775	  {
14776	    if (complain & tf_error)
14777	      unqualified_name_lookup_error (decl);
14778	    decl = error_mark_node;
14779	  }
14780	RETURN (decl);
14781      }
14782
14783    case TEMPLATE_ID_EXPR:
14784      {
14785	tree object;
14786	tree templ = RECUR (TREE_OPERAND (t, 0));
14787	tree targs = TREE_OPERAND (t, 1);
14788
14789	if (targs)
14790	  targs = tsubst_template_args (targs, args, complain, in_decl);
14791	if (targs == error_mark_node)
14792	  return error_mark_node;
14793
14794	if (variable_template_p (templ))
14795	  {
14796	    templ = lookup_template_variable (templ, targs);
14797	    if (!any_dependent_template_arguments_p (targs))
14798	      {
14799		templ = finish_template_variable (templ, complain);
14800		mark_used (templ);
14801	      }
14802	    RETURN (convert_from_reference (templ));
14803	  }
14804
14805	if (TREE_CODE (templ) == COMPONENT_REF)
14806	  {
14807	    object = TREE_OPERAND (templ, 0);
14808	    templ = TREE_OPERAND (templ, 1);
14809	  }
14810	else
14811	  object = NULL_TREE;
14812	templ = lookup_template_function (templ, targs);
14813
14814	if (object)
14815	  RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
14816			 object, templ, NULL_TREE));
14817	else
14818	  RETURN (baselink_for_fns (templ));
14819      }
14820
14821    case INDIRECT_REF:
14822      {
14823	tree r = RECUR (TREE_OPERAND (t, 0));
14824
14825	if (REFERENCE_REF_P (t))
14826	  {
14827	    /* A type conversion to reference type will be enclosed in
14828	       such an indirect ref, but the substitution of the cast
14829	       will have also added such an indirect ref.  */
14830	    if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
14831	      r = convert_from_reference (r);
14832	  }
14833	else
14834	  r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
14835				    complain|decltype_flag);
14836	RETURN (r);
14837      }
14838
14839    case NOP_EXPR:
14840      {
14841	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14842	tree op0 = RECUR (TREE_OPERAND (t, 0));
14843	RETURN (build_nop (type, op0));
14844      }
14845
14846    case IMPLICIT_CONV_EXPR:
14847      {
14848	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14849	tree expr = RECUR (TREE_OPERAND (t, 0));
14850	int flags = LOOKUP_IMPLICIT;
14851	if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
14852	  flags = LOOKUP_NORMAL;
14853	RETURN (perform_implicit_conversion_flags (type, expr, complain,
14854						  flags));
14855      }
14856
14857    case CONVERT_EXPR:
14858      {
14859	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14860	tree op0 = RECUR (TREE_OPERAND (t, 0));
14861	RETURN (build1 (CONVERT_EXPR, type, op0));
14862      }
14863
14864    case CAST_EXPR:
14865    case REINTERPRET_CAST_EXPR:
14866    case CONST_CAST_EXPR:
14867    case DYNAMIC_CAST_EXPR:
14868    case STATIC_CAST_EXPR:
14869      {
14870	tree type;
14871	tree op, r = NULL_TREE;
14872
14873	type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14874	if (integral_constant_expression_p
14875	    && !cast_valid_in_integral_constant_expression_p (type))
14876	  {
14877            if (complain & tf_error)
14878              error ("a cast to a type other than an integral or "
14879                     "enumeration type cannot appear in a constant-expression");
14880	    RETURN (error_mark_node);
14881	  }
14882
14883	op = RECUR (TREE_OPERAND (t, 0));
14884
14885	warning_sentinel s(warn_useless_cast);
14886	switch (TREE_CODE (t))
14887	  {
14888	  case CAST_EXPR:
14889	    r = build_functional_cast (type, op, complain);
14890	    break;
14891	  case REINTERPRET_CAST_EXPR:
14892	    r = build_reinterpret_cast (type, op, complain);
14893	    break;
14894	  case CONST_CAST_EXPR:
14895	    r = build_const_cast (type, op, complain);
14896	    break;
14897	  case DYNAMIC_CAST_EXPR:
14898	    r = build_dynamic_cast (type, op, complain);
14899	    break;
14900	  case STATIC_CAST_EXPR:
14901	    r = build_static_cast (type, op, complain);
14902	    break;
14903	  default:
14904	    gcc_unreachable ();
14905	  }
14906
14907	RETURN (r);
14908      }
14909
14910    case POSTDECREMENT_EXPR:
14911    case POSTINCREMENT_EXPR:
14912      op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14913						args, complain, in_decl);
14914      RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
14915				complain|decltype_flag));
14916
14917    case PREDECREMENT_EXPR:
14918    case PREINCREMENT_EXPR:
14919    case NEGATE_EXPR:
14920    case BIT_NOT_EXPR:
14921    case ABS_EXPR:
14922    case TRUTH_NOT_EXPR:
14923    case UNARY_PLUS_EXPR:  /* Unary + */
14924    case REALPART_EXPR:
14925    case IMAGPART_EXPR:
14926      RETURN (build_x_unary_op (input_location, TREE_CODE (t),
14927				RECUR (TREE_OPERAND (t, 0)),
14928				complain|decltype_flag));
14929
14930    case FIX_TRUNC_EXPR:
14931      RETURN (cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
14932				 0, complain));
14933
14934    case ADDR_EXPR:
14935      op1 = TREE_OPERAND (t, 0);
14936      if (TREE_CODE (op1) == LABEL_DECL)
14937	RETURN (finish_label_address_expr (DECL_NAME (op1),
14938					  EXPR_LOCATION (op1)));
14939      if (TREE_CODE (op1) == SCOPE_REF)
14940	op1 = tsubst_qualified_id (op1, args, complain, in_decl,
14941				   /*done=*/true, /*address_p=*/true);
14942      else
14943	op1 = tsubst_non_call_postfix_expression (op1, args, complain,
14944						  in_decl);
14945      RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
14946				complain|decltype_flag));
14947
14948    case PLUS_EXPR:
14949    case MINUS_EXPR:
14950    case MULT_EXPR:
14951    case TRUNC_DIV_EXPR:
14952    case CEIL_DIV_EXPR:
14953    case FLOOR_DIV_EXPR:
14954    case ROUND_DIV_EXPR:
14955    case EXACT_DIV_EXPR:
14956    case BIT_AND_EXPR:
14957    case BIT_IOR_EXPR:
14958    case BIT_XOR_EXPR:
14959    case TRUNC_MOD_EXPR:
14960    case FLOOR_MOD_EXPR:
14961    case TRUTH_ANDIF_EXPR:
14962    case TRUTH_ORIF_EXPR:
14963    case TRUTH_AND_EXPR:
14964    case TRUTH_OR_EXPR:
14965    case RSHIFT_EXPR:
14966    case LSHIFT_EXPR:
14967    case RROTATE_EXPR:
14968    case LROTATE_EXPR:
14969    case EQ_EXPR:
14970    case NE_EXPR:
14971    case MAX_EXPR:
14972    case MIN_EXPR:
14973    case LE_EXPR:
14974    case GE_EXPR:
14975    case LT_EXPR:
14976    case GT_EXPR:
14977    case MEMBER_REF:
14978    case DOTSTAR_EXPR:
14979      {
14980	warning_sentinel s1(warn_type_limits);
14981	warning_sentinel s2(warn_div_by_zero);
14982	tree op0 = RECUR (TREE_OPERAND (t, 0));
14983	tree op1 = RECUR (TREE_OPERAND (t, 1));
14984	tree r = build_x_binary_op
14985	  (input_location, TREE_CODE (t),
14986	   op0,
14987	   (TREE_NO_WARNING (TREE_OPERAND (t, 0))
14988	    ? ERROR_MARK
14989	    : TREE_CODE (TREE_OPERAND (t, 0))),
14990	   op1,
14991	   (TREE_NO_WARNING (TREE_OPERAND (t, 1))
14992	    ? ERROR_MARK
14993	    : TREE_CODE (TREE_OPERAND (t, 1))),
14994	   /*overload=*/NULL,
14995	   complain|decltype_flag);
14996	if (EXPR_P (r) && TREE_NO_WARNING (t))
14997	  TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14998
14999	RETURN (r);
15000      }
15001
15002    case POINTER_PLUS_EXPR:
15003      {
15004	tree op0 = RECUR (TREE_OPERAND (t, 0));
15005	tree op1 = RECUR (TREE_OPERAND (t, 1));
15006	return fold_build_pointer_plus (op0, op1);
15007      }
15008
15009    case SCOPE_REF:
15010      RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
15011				  /*address_p=*/false));
15012    case ARRAY_REF:
15013      op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
15014						args, complain, in_decl);
15015      RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
15016				 RECUR (TREE_OPERAND (t, 1)),
15017				 complain|decltype_flag));
15018
15019    case ARRAY_NOTATION_REF:
15020      {
15021	tree start_index, length, stride;
15022	op1 = tsubst_non_call_postfix_expression (ARRAY_NOTATION_ARRAY (t),
15023						  args, complain, in_decl);
15024	start_index = RECUR (ARRAY_NOTATION_START (t));
15025	length = RECUR (ARRAY_NOTATION_LENGTH (t));
15026	stride = RECUR (ARRAY_NOTATION_STRIDE (t));
15027	RETURN (build_array_notation_ref (EXPR_LOCATION (t), op1, start_index,
15028					  length, stride, TREE_TYPE (op1)));
15029      }
15030    case SIZEOF_EXPR:
15031      if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
15032	RETURN (tsubst_copy (t, args, complain, in_decl));
15033      /* Fall through */
15034
15035    case ALIGNOF_EXPR:
15036      {
15037	tree r;
15038
15039	op1 = TREE_OPERAND (t, 0);
15040	if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
15041	  op1 = TREE_TYPE (op1);
15042        if (!args)
15043	  {
15044	    /* When there are no ARGS, we are trying to evaluate a
15045	       non-dependent expression from the parser.  Trying to do
15046	       the substitutions may not work.  */
15047	    if (!TYPE_P (op1))
15048	      op1 = TREE_TYPE (op1);
15049	  }
15050	else
15051	  {
15052	    ++cp_unevaluated_operand;
15053	    ++c_inhibit_evaluation_warnings;
15054	    if (TYPE_P (op1))
15055	      op1 = tsubst (op1, args, complain, in_decl);
15056	    else
15057	      op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
15058					   /*function_p=*/false,
15059					   /*integral_constant_expression_p=*/
15060					   false);
15061	    --cp_unevaluated_operand;
15062	    --c_inhibit_evaluation_warnings;
15063	  }
15064        if (TYPE_P (op1))
15065	  r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
15066					  complain & tf_error);
15067	else
15068	  r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
15069					  complain & tf_error);
15070	if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
15071	  {
15072	    if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
15073	      {
15074		if (!processing_template_decl && TYPE_P (op1))
15075		  {
15076		    r = build_min (SIZEOF_EXPR, size_type_node,
15077				   build1 (NOP_EXPR, op1, error_mark_node));
15078		    SIZEOF_EXPR_TYPE_P (r) = 1;
15079		  }
15080		else
15081		  r = build_min (SIZEOF_EXPR, size_type_node, op1);
15082		TREE_SIDE_EFFECTS (r) = 0;
15083		TREE_READONLY (r) = 1;
15084	      }
15085	    SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
15086	  }
15087	RETURN (r);
15088      }
15089
15090    case AT_ENCODE_EXPR:
15091      {
15092	op1 = TREE_OPERAND (t, 0);
15093	++cp_unevaluated_operand;
15094	++c_inhibit_evaluation_warnings;
15095	op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
15096				     /*function_p=*/false,
15097				     /*integral_constant_expression_p=*/false);
15098	--cp_unevaluated_operand;
15099	--c_inhibit_evaluation_warnings;
15100	RETURN (objc_build_encode_expr (op1));
15101      }
15102
15103    case NOEXCEPT_EXPR:
15104      op1 = TREE_OPERAND (t, 0);
15105      ++cp_unevaluated_operand;
15106      ++c_inhibit_evaluation_warnings;
15107      ++cp_noexcept_operand;
15108      op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
15109				   /*function_p=*/false,
15110				   /*integral_constant_expression_p=*/false);
15111      --cp_unevaluated_operand;
15112      --c_inhibit_evaluation_warnings;
15113      --cp_noexcept_operand;
15114      RETURN (finish_noexcept_expr (op1, complain));
15115
15116    case MODOP_EXPR:
15117      {
15118	warning_sentinel s(warn_div_by_zero);
15119	tree lhs = RECUR (TREE_OPERAND (t, 0));
15120	tree rhs = RECUR (TREE_OPERAND (t, 2));
15121	tree r = build_x_modify_expr
15122	  (EXPR_LOCATION (t), lhs, TREE_CODE (TREE_OPERAND (t, 1)), rhs,
15123	   complain|decltype_flag);
15124	/* TREE_NO_WARNING must be set if either the expression was
15125	   parenthesized or it uses an operator such as >>= rather
15126	   than plain assignment.  In the former case, it was already
15127	   set and must be copied.  In the latter case,
15128	   build_x_modify_expr sets it and it must not be reset
15129	   here.  */
15130	if (TREE_NO_WARNING (t))
15131	  TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
15132
15133	RETURN (r);
15134      }
15135
15136    case ARROW_EXPR:
15137      op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
15138						args, complain, in_decl);
15139      /* Remember that there was a reference to this entity.  */
15140      if (DECL_P (op1)
15141	  && !mark_used (op1, complain) && !(complain & tf_error))
15142	RETURN (error_mark_node);
15143      RETURN (build_x_arrow (input_location, op1, complain));
15144
15145    case NEW_EXPR:
15146      {
15147	tree placement = RECUR (TREE_OPERAND (t, 0));
15148	tree init = RECUR (TREE_OPERAND (t, 3));
15149	vec<tree, va_gc> *placement_vec;
15150	vec<tree, va_gc> *init_vec;
15151	tree ret;
15152
15153	if (placement == NULL_TREE)
15154	  placement_vec = NULL;
15155	else
15156	  {
15157	    placement_vec = make_tree_vector ();
15158	    for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
15159	      vec_safe_push (placement_vec, TREE_VALUE (placement));
15160	  }
15161
15162	/* If there was an initializer in the original tree, but it
15163	   instantiated to an empty list, then we should pass a
15164	   non-NULL empty vector to tell build_new that it was an
15165	   empty initializer() rather than no initializer.  This can
15166	   only happen when the initializer is a pack expansion whose
15167	   parameter packs are of length zero.  */
15168	if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
15169	  init_vec = NULL;
15170	else
15171	  {
15172	    init_vec = make_tree_vector ();
15173	    if (init == void_node)
15174	      gcc_assert (init_vec != NULL);
15175	    else
15176	      {
15177		for (; init != NULL_TREE; init = TREE_CHAIN (init))
15178		  vec_safe_push (init_vec, TREE_VALUE (init));
15179	      }
15180	  }
15181
15182	tree op1 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
15183	tree op2 = RECUR (TREE_OPERAND (t, 2));
15184	ret = build_new (&placement_vec, op1, op2, &init_vec,
15185			 NEW_EXPR_USE_GLOBAL (t),
15186			 complain);
15187
15188	if (placement_vec != NULL)
15189	  release_tree_vector (placement_vec);
15190	if (init_vec != NULL)
15191	  release_tree_vector (init_vec);
15192
15193	RETURN (ret);
15194      }
15195
15196    case DELETE_EXPR:
15197      {
15198	tree op0 = RECUR (TREE_OPERAND (t, 0));
15199	tree op1 = RECUR (TREE_OPERAND (t, 1));
15200	RETURN (delete_sanity (op0, op1,
15201			       DELETE_EXPR_USE_VEC (t),
15202			       DELETE_EXPR_USE_GLOBAL (t),
15203			       complain));
15204      }
15205
15206    case COMPOUND_EXPR:
15207      {
15208	tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
15209					  complain & ~tf_decltype, in_decl,
15210					  /*function_p=*/false,
15211					  integral_constant_expression_p);
15212	RETURN (build_x_compound_expr (EXPR_LOCATION (t),
15213				       op0,
15214				       RECUR (TREE_OPERAND (t, 1)),
15215				       complain|decltype_flag));
15216      }
15217
15218    case CALL_EXPR:
15219      {
15220	tree function;
15221	vec<tree, va_gc> *call_args;
15222	unsigned int nargs, i;
15223	bool qualified_p;
15224	bool koenig_p;
15225	tree ret;
15226
15227	function = CALL_EXPR_FN (t);
15228	/* When we parsed the expression,  we determined whether or
15229	   not Koenig lookup should be performed.  */
15230	koenig_p = KOENIG_LOOKUP_P (t);
15231	if (TREE_CODE (function) == SCOPE_REF)
15232	  {
15233	    qualified_p = true;
15234	    function = tsubst_qualified_id (function, args, complain, in_decl,
15235					    /*done=*/false,
15236					    /*address_p=*/false);
15237	  }
15238	else if (koenig_p && identifier_p (function))
15239	  {
15240	    /* Do nothing; calling tsubst_copy_and_build on an identifier
15241	       would incorrectly perform unqualified lookup again.
15242
15243	       Note that we can also have an IDENTIFIER_NODE if the earlier
15244	       unqualified lookup found a member function; in that case
15245	       koenig_p will be false and we do want to do the lookup
15246	       again to find the instantiated member function.
15247
15248	       FIXME but doing that causes c++/15272, so we need to stop
15249	       using IDENTIFIER_NODE in that situation.  */
15250	    qualified_p = false;
15251	  }
15252	else
15253	  {
15254	    if (TREE_CODE (function) == COMPONENT_REF)
15255	      {
15256		tree op = TREE_OPERAND (function, 1);
15257
15258		qualified_p = (TREE_CODE (op) == SCOPE_REF
15259			       || (BASELINK_P (op)
15260				   && BASELINK_QUALIFIED_P (op)));
15261	      }
15262	    else
15263	      qualified_p = false;
15264
15265	    if (TREE_CODE (function) == ADDR_EXPR
15266		&& TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
15267	      /* Avoid error about taking the address of a constructor.  */
15268	      function = TREE_OPERAND (function, 0);
15269
15270	    function = tsubst_copy_and_build (function, args, complain,
15271					      in_decl,
15272					      !qualified_p,
15273					      integral_constant_expression_p);
15274
15275	    if (BASELINK_P (function))
15276	      qualified_p = true;
15277	  }
15278
15279	nargs = call_expr_nargs (t);
15280	call_args = make_tree_vector ();
15281	for (i = 0; i < nargs; ++i)
15282	  {
15283	    tree arg = CALL_EXPR_ARG (t, i);
15284
15285	    if (!PACK_EXPANSION_P (arg))
15286	      vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
15287	    else
15288	      {
15289		/* Expand the pack expansion and push each entry onto
15290		   CALL_ARGS.  */
15291		arg = tsubst_pack_expansion (arg, args, complain, in_decl);
15292		if (TREE_CODE (arg) == TREE_VEC)
15293		  {
15294		    unsigned int len, j;
15295
15296		    len = TREE_VEC_LENGTH (arg);
15297		    for (j = 0; j < len; ++j)
15298		      {
15299			tree value = TREE_VEC_ELT (arg, j);
15300			if (value != NULL_TREE)
15301			  value = convert_from_reference (value);
15302			vec_safe_push (call_args, value);
15303		      }
15304		  }
15305		else
15306		  {
15307		    /* A partial substitution.  Add one entry.  */
15308		    vec_safe_push (call_args, arg);
15309		  }
15310	      }
15311	  }
15312
15313	/* We do not perform argument-dependent lookup if normal
15314	   lookup finds a non-function, in accordance with the
15315	   expected resolution of DR 218.  */
15316	if (koenig_p
15317	    && ((is_overloaded_fn (function)
15318		 /* If lookup found a member function, the Koenig lookup is
15319		    not appropriate, even if an unqualified-name was used
15320		    to denote the function.  */
15321		 && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
15322		|| identifier_p (function))
15323	    /* Only do this when substitution turns a dependent call
15324	       into a non-dependent call.  */
15325	    && type_dependent_expression_p_push (t)
15326	    && !any_type_dependent_arguments_p (call_args))
15327	  function = perform_koenig_lookup (function, call_args, tf_none);
15328
15329	if (identifier_p (function)
15330	    && !any_type_dependent_arguments_p (call_args))
15331	  {
15332	    if (koenig_p && (complain & tf_warning_or_error))
15333	      {
15334		/* For backwards compatibility and good diagnostics, try
15335		   the unqualified lookup again if we aren't in SFINAE
15336		   context.  */
15337		tree unq = (tsubst_copy_and_build
15338			    (function, args, complain, in_decl, true,
15339			     integral_constant_expression_p));
15340		if (unq == error_mark_node)
15341		  RETURN (error_mark_node);
15342
15343		if (unq != function)
15344		  {
15345		    tree fn = unq;
15346		    if (INDIRECT_REF_P (fn))
15347		      fn = TREE_OPERAND (fn, 0);
15348		    if (TREE_CODE (fn) == COMPONENT_REF)
15349		      fn = TREE_OPERAND (fn, 1);
15350		    if (is_overloaded_fn (fn))
15351		      fn = get_first_fn (fn);
15352		    if (permerror (EXPR_LOC_OR_LOC (t, input_location),
15353				   "%qD was not declared in this scope, "
15354				   "and no declarations were found by "
15355				   "argument-dependent lookup at the point "
15356				   "of instantiation", function))
15357		      {
15358			if (!DECL_P (fn))
15359			  /* Can't say anything more.  */;
15360			else if (DECL_CLASS_SCOPE_P (fn))
15361			  {
15362			    location_t loc = EXPR_LOC_OR_LOC (t,
15363							      input_location);
15364			    inform (loc,
15365				    "declarations in dependent base %qT are "
15366				    "not found by unqualified lookup",
15367				    DECL_CLASS_CONTEXT (fn));
15368			    if (current_class_ptr)
15369			      inform (loc,
15370				      "use %<this->%D%> instead", function);
15371			    else
15372			      inform (loc,
15373				      "use %<%T::%D%> instead",
15374				      current_class_name, function);
15375			  }
15376			else
15377			  inform (0, "%q+D declared here, later in the "
15378				  "translation unit", fn);
15379		      }
15380		    function = unq;
15381		  }
15382	      }
15383	    if (identifier_p (function))
15384	      {
15385		if (complain & tf_error)
15386		  unqualified_name_lookup_error (function);
15387		release_tree_vector (call_args);
15388		RETURN (error_mark_node);
15389	      }
15390	  }
15391
15392	/* Remember that there was a reference to this entity.  */
15393	if (DECL_P (function)
15394	    && !mark_used (function, complain) && !(complain & tf_error))
15395	  RETURN (error_mark_node);
15396
15397	/* Put back tf_decltype for the actual call.  */
15398	complain |= decltype_flag;
15399
15400	if (TREE_CODE (function) == OFFSET_REF)
15401	  ret = build_offset_ref_call_from_tree (function, &call_args,
15402						 complain);
15403	else if (TREE_CODE (function) == COMPONENT_REF)
15404	  {
15405	    tree instance = TREE_OPERAND (function, 0);
15406	    tree fn = TREE_OPERAND (function, 1);
15407
15408	    if (processing_template_decl
15409		&& (type_dependent_expression_p (instance)
15410		    || (!BASELINK_P (fn)
15411			&& TREE_CODE (fn) != FIELD_DECL)
15412		    || type_dependent_expression_p (fn)
15413		    || any_type_dependent_arguments_p (call_args)))
15414	      ret = build_nt_call_vec (function, call_args);
15415	    else if (!BASELINK_P (fn))
15416	      ret = finish_call_expr (function, &call_args,
15417				       /*disallow_virtual=*/false,
15418				       /*koenig_p=*/false,
15419				       complain);
15420	    else
15421	      ret = (build_new_method_call
15422		      (instance, fn,
15423		       &call_args, NULL_TREE,
15424		       qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
15425		       /*fn_p=*/NULL,
15426		       complain));
15427	  }
15428	else
15429	  ret = finish_call_expr (function, &call_args,
15430				  /*disallow_virtual=*/qualified_p,
15431				  koenig_p,
15432				  complain);
15433
15434	release_tree_vector (call_args);
15435
15436	RETURN (ret);
15437      }
15438
15439    case COND_EXPR:
15440      {
15441	tree cond = RECUR (TREE_OPERAND (t, 0));
15442	tree folded_cond = fold_non_dependent_expr (cond);
15443	tree exp1, exp2;
15444
15445	if (TREE_CODE (folded_cond) == INTEGER_CST)
15446	  {
15447	    if (integer_zerop (folded_cond))
15448	      {
15449		++c_inhibit_evaluation_warnings;
15450		exp1 = RECUR (TREE_OPERAND (t, 1));
15451		--c_inhibit_evaluation_warnings;
15452		exp2 = RECUR (TREE_OPERAND (t, 2));
15453	      }
15454	    else
15455	      {
15456		exp1 = RECUR (TREE_OPERAND (t, 1));
15457		++c_inhibit_evaluation_warnings;
15458		exp2 = RECUR (TREE_OPERAND (t, 2));
15459		--c_inhibit_evaluation_warnings;
15460	      }
15461	    cond = folded_cond;
15462	  }
15463	else
15464	  {
15465	    exp1 = RECUR (TREE_OPERAND (t, 1));
15466	    exp2 = RECUR (TREE_OPERAND (t, 2));
15467	  }
15468
15469	RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
15470					 cond, exp1, exp2, complain));
15471      }
15472
15473    case PSEUDO_DTOR_EXPR:
15474      {
15475	tree op0 = RECUR (TREE_OPERAND (t, 0));
15476	tree op1 = RECUR (TREE_OPERAND (t, 1));
15477	tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
15478	RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
15479					       input_location));
15480      }
15481
15482    case TREE_LIST:
15483      {
15484	tree purpose, value, chain;
15485
15486	if (t == void_list_node)
15487	  RETURN (t);
15488
15489        if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
15490            || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
15491          {
15492            /* We have pack expansions, so expand those and
15493               create a new list out of it.  */
15494            tree purposevec = NULL_TREE;
15495            tree valuevec = NULL_TREE;
15496            tree chain;
15497            int i, len = -1;
15498
15499            /* Expand the argument expressions.  */
15500            if (TREE_PURPOSE (t))
15501              purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
15502                                                 complain, in_decl);
15503            if (TREE_VALUE (t))
15504              valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
15505                                               complain, in_decl);
15506
15507            /* Build the rest of the list.  */
15508            chain = TREE_CHAIN (t);
15509            if (chain && chain != void_type_node)
15510              chain = RECUR (chain);
15511
15512            /* Determine the number of arguments.  */
15513            if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
15514              {
15515                len = TREE_VEC_LENGTH (purposevec);
15516                gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
15517              }
15518            else if (TREE_CODE (valuevec) == TREE_VEC)
15519              len = TREE_VEC_LENGTH (valuevec);
15520            else
15521              {
15522                /* Since we only performed a partial substitution into
15523                   the argument pack, we only RETURN (a single list
15524                   node.  */
15525                if (purposevec == TREE_PURPOSE (t)
15526                    && valuevec == TREE_VALUE (t)
15527                    && chain == TREE_CHAIN (t))
15528                  RETURN (t);
15529
15530                RETURN (tree_cons (purposevec, valuevec, chain));
15531              }
15532
15533            /* Convert the argument vectors into a TREE_LIST */
15534            i = len;
15535            while (i > 0)
15536              {
15537                /* Grab the Ith values.  */
15538                i--;
15539                purpose = purposevec ? TREE_VEC_ELT (purposevec, i)
15540		                     : NULL_TREE;
15541                value
15542		  = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i))
15543                             : NULL_TREE;
15544
15545                /* Build the list (backwards).  */
15546                chain = tree_cons (purpose, value, chain);
15547              }
15548
15549            RETURN (chain);
15550          }
15551
15552	purpose = TREE_PURPOSE (t);
15553	if (purpose)
15554	  purpose = RECUR (purpose);
15555	value = TREE_VALUE (t);
15556	if (value)
15557	  value = RECUR (value);
15558	chain = TREE_CHAIN (t);
15559	if (chain && chain != void_type_node)
15560	  chain = RECUR (chain);
15561	if (purpose == TREE_PURPOSE (t)
15562	    && value == TREE_VALUE (t)
15563	    && chain == TREE_CHAIN (t))
15564	  RETURN (t);
15565	RETURN (tree_cons (purpose, value, chain));
15566      }
15567
15568    case COMPONENT_REF:
15569      {
15570	tree object;
15571	tree object_type;
15572	tree member;
15573	tree r;
15574
15575	object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
15576						     args, complain, in_decl);
15577	/* Remember that there was a reference to this entity.  */
15578	if (DECL_P (object)
15579	    && !mark_used (object, complain) && !(complain & tf_error))
15580	  RETURN (error_mark_node);
15581	object_type = TREE_TYPE (object);
15582
15583	member = TREE_OPERAND (t, 1);
15584	if (BASELINK_P (member))
15585	  member = tsubst_baselink (member,
15586				    non_reference (TREE_TYPE (object)),
15587				    args, complain, in_decl);
15588	else
15589	  member = tsubst_copy (member, args, complain, in_decl);
15590	if (member == error_mark_node)
15591	  RETURN (error_mark_node);
15592
15593	if (type_dependent_expression_p (object))
15594	  /* We can't do much here.  */;
15595	else if (!CLASS_TYPE_P (object_type))
15596	  {
15597	    if (scalarish_type_p (object_type))
15598	      {
15599		tree s = NULL_TREE;
15600		tree dtor = member;
15601
15602		if (TREE_CODE (dtor) == SCOPE_REF)
15603		  {
15604		    s = TREE_OPERAND (dtor, 0);
15605		    dtor = TREE_OPERAND (dtor, 1);
15606		  }
15607		if (TREE_CODE (dtor) == BIT_NOT_EXPR)
15608		  {
15609		    dtor = TREE_OPERAND (dtor, 0);
15610		    if (TYPE_P (dtor))
15611		      RETURN (finish_pseudo_destructor_expr
15612			      (object, s, dtor, input_location));
15613		  }
15614	      }
15615	  }
15616	else if (TREE_CODE (member) == SCOPE_REF
15617		 && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
15618	  {
15619	    /* Lookup the template functions now that we know what the
15620	       scope is.  */
15621	    tree scope = TREE_OPERAND (member, 0);
15622	    tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
15623	    tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
15624	    member = lookup_qualified_name (scope, tmpl,
15625					    /*is_type_p=*/false,
15626					    /*complain=*/false);
15627	    if (BASELINK_P (member))
15628	      {
15629		BASELINK_FUNCTIONS (member)
15630		  = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
15631			      args);
15632		member = (adjust_result_of_qualified_name_lookup
15633			  (member, BINFO_TYPE (BASELINK_BINFO (member)),
15634			   object_type));
15635	      }
15636	    else
15637	      {
15638		qualified_name_lookup_error (scope, tmpl, member,
15639					     input_location);
15640		RETURN (error_mark_node);
15641	      }
15642	  }
15643	else if (TREE_CODE (member) == SCOPE_REF
15644		 && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
15645		 && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
15646	  {
15647	    if (complain & tf_error)
15648	      {
15649		if (TYPE_P (TREE_OPERAND (member, 0)))
15650		  error ("%qT is not a class or namespace",
15651			 TREE_OPERAND (member, 0));
15652		else
15653		  error ("%qD is not a class or namespace",
15654			 TREE_OPERAND (member, 0));
15655	      }
15656	    RETURN (error_mark_node);
15657	  }
15658	else if (TREE_CODE (member) == FIELD_DECL)
15659	  {
15660	    r = finish_non_static_data_member (member, object, NULL_TREE);
15661	    if (TREE_CODE (r) == COMPONENT_REF)
15662	      REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15663	    RETURN (r);
15664	  }
15665
15666	r = finish_class_member_access_expr (object, member,
15667					     /*template_p=*/false,
15668					     complain);
15669	if (TREE_CODE (r) == COMPONENT_REF)
15670	  REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15671	RETURN (r);
15672      }
15673
15674    case THROW_EXPR:
15675      RETURN (build_throw
15676	(RECUR (TREE_OPERAND (t, 0))));
15677
15678    case CONSTRUCTOR:
15679      {
15680	vec<constructor_elt, va_gc> *n;
15681	constructor_elt *ce;
15682	unsigned HOST_WIDE_INT idx;
15683	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15684	bool process_index_p;
15685        int newlen;
15686        bool need_copy_p = false;
15687	tree r;
15688
15689	if (type == error_mark_node)
15690	  RETURN (error_mark_node);
15691
15692	/* digest_init will do the wrong thing if we let it.  */
15693	if (type && TYPE_PTRMEMFUNC_P (type))
15694	  RETURN (t);
15695
15696	/* We do not want to process the index of aggregate
15697	   initializers as they are identifier nodes which will be
15698	   looked up by digest_init.  */
15699	process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
15700
15701	n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
15702        newlen = vec_safe_length (n);
15703	FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
15704	  {
15705	    if (ce->index && process_index_p
15706		/* An identifier index is looked up in the type
15707		   being initialized, not the current scope.  */
15708		&& TREE_CODE (ce->index) != IDENTIFIER_NODE)
15709	      ce->index = RECUR (ce->index);
15710
15711            if (PACK_EXPANSION_P (ce->value))
15712              {
15713                /* Substitute into the pack expansion.  */
15714                ce->value = tsubst_pack_expansion (ce->value, args, complain,
15715                                                  in_decl);
15716
15717		if (ce->value == error_mark_node
15718		    || PACK_EXPANSION_P (ce->value))
15719		  ;
15720		else if (TREE_VEC_LENGTH (ce->value) == 1)
15721                  /* Just move the argument into place.  */
15722                  ce->value = TREE_VEC_ELT (ce->value, 0);
15723                else
15724                  {
15725                    /* Update the length of the final CONSTRUCTOR
15726                       arguments vector, and note that we will need to
15727                       copy.*/
15728                    newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
15729                    need_copy_p = true;
15730                  }
15731              }
15732            else
15733              ce->value = RECUR (ce->value);
15734	  }
15735
15736        if (need_copy_p)
15737          {
15738            vec<constructor_elt, va_gc> *old_n = n;
15739
15740            vec_alloc (n, newlen);
15741            FOR_EACH_VEC_ELT (*old_n, idx, ce)
15742              {
15743                if (TREE_CODE (ce->value) == TREE_VEC)
15744                  {
15745                    int i, len = TREE_VEC_LENGTH (ce->value);
15746                    for (i = 0; i < len; ++i)
15747                      CONSTRUCTOR_APPEND_ELT (n, 0,
15748                                              TREE_VEC_ELT (ce->value, i));
15749                  }
15750                else
15751                  CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
15752              }
15753          }
15754
15755	r = build_constructor (init_list_type_node, n);
15756	CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
15757
15758	if (TREE_HAS_CONSTRUCTOR (t))
15759	  RETURN (finish_compound_literal (type, r, complain));
15760
15761	TREE_TYPE (r) = type;
15762	RETURN (r);
15763      }
15764
15765    case TYPEID_EXPR:
15766      {
15767	tree operand_0 = TREE_OPERAND (t, 0);
15768	if (TYPE_P (operand_0))
15769	  {
15770	    operand_0 = tsubst (operand_0, args, complain, in_decl);
15771	    RETURN (get_typeid (operand_0, complain));
15772	  }
15773	else
15774	  {
15775	    operand_0 = RECUR (operand_0);
15776	    RETURN (build_typeid (operand_0, complain));
15777	  }
15778      }
15779
15780    case VAR_DECL:
15781      if (!args)
15782	RETURN (t);
15783      else if (DECL_PACK_P (t))
15784	{
15785	  /* We don't build decls for an instantiation of a
15786	     variadic capture proxy, we instantiate the elements
15787	     when needed.  */
15788	  gcc_assert (DECL_HAS_VALUE_EXPR_P (t));
15789	  return RECUR (DECL_VALUE_EXPR (t));
15790	}
15791      /* Fall through */
15792
15793    case PARM_DECL:
15794      {
15795	tree r = tsubst_copy (t, args, complain, in_decl);
15796	/* ??? We're doing a subset of finish_id_expression here.  */
15797	if (VAR_P (r)
15798	    && !processing_template_decl
15799	    && !cp_unevaluated_operand
15800	    && (TREE_STATIC (r) || DECL_EXTERNAL (r))
15801	    && DECL_THREAD_LOCAL_P (r))
15802	  {
15803	    if (tree wrap = get_tls_wrapper_fn (r))
15804	      /* Replace an evaluated use of the thread_local variable with
15805		 a call to its wrapper.  */
15806	      r = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
15807	  }
15808	else if (outer_automatic_var_p (r))
15809	  {
15810	    r = process_outer_var_ref (r, complain);
15811	    if (is_capture_proxy (r))
15812	      register_local_specialization (r, t);
15813	  }
15814
15815	if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
15816	  /* If the original type was a reference, we'll be wrapped in
15817	     the appropriate INDIRECT_REF.  */
15818	  r = convert_from_reference (r);
15819	RETURN (r);
15820      }
15821
15822    case VA_ARG_EXPR:
15823      {
15824	tree op0 = RECUR (TREE_OPERAND (t, 0));
15825	tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15826	RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
15827      }
15828
15829    case OFFSETOF_EXPR:
15830      RETURN (finish_offsetof (RECUR (TREE_OPERAND (t, 0)),
15831			       EXPR_LOCATION (t)));
15832
15833    case TRAIT_EXPR:
15834      {
15835	tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
15836			     complain, in_decl);
15837
15838	tree type2 = TRAIT_EXPR_TYPE2 (t);
15839	if (type2 && TREE_CODE (type2) == TREE_LIST)
15840	  type2 = RECUR (type2);
15841	else if (type2)
15842	  type2 = tsubst (type2, args, complain, in_decl);
15843
15844	RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
15845      }
15846
15847    case STMT_EXPR:
15848      {
15849	tree old_stmt_expr = cur_stmt_expr;
15850	tree stmt_expr = begin_stmt_expr ();
15851
15852	cur_stmt_expr = stmt_expr;
15853	tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
15854		     integral_constant_expression_p);
15855	stmt_expr = finish_stmt_expr (stmt_expr, false);
15856	cur_stmt_expr = old_stmt_expr;
15857
15858	/* If the resulting list of expression statement is empty,
15859	   fold it further into void_node.  */
15860	if (empty_expr_stmt_p (stmt_expr))
15861	  stmt_expr = void_node;
15862
15863	RETURN (stmt_expr);
15864      }
15865
15866    case LAMBDA_EXPR:
15867      {
15868	tree r = build_lambda_expr ();
15869
15870	tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
15871	LAMBDA_EXPR_CLOSURE (r) = type;
15872	CLASSTYPE_LAMBDA_EXPR (type) = r;
15873
15874	LAMBDA_EXPR_LOCATION (r)
15875	  = LAMBDA_EXPR_LOCATION (t);
15876	LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
15877	  = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
15878	LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
15879	LAMBDA_EXPR_DISCRIMINATOR (r)
15880	  = (LAMBDA_EXPR_DISCRIMINATOR (t));
15881	/* For a function scope, we want to use tsubst so that we don't
15882	   complain about referring to an auto function before its return
15883	   type has been deduced.  Otherwise, we want to use tsubst_copy so
15884	   that we look up the existing field/parameter/variable rather
15885	   than build a new one.  */
15886	tree scope = LAMBDA_EXPR_EXTRA_SCOPE (t);
15887	if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15888	  scope = tsubst (scope, args, complain, in_decl);
15889	else if (scope && TREE_CODE (scope) == PARM_DECL)
15890	  {
15891	    /* Look up the parameter we want directly, as tsubst_copy
15892	       doesn't do what we need.  */
15893	    tree fn = tsubst (DECL_CONTEXT (scope), args, complain, in_decl);
15894	    tree parm = FUNCTION_FIRST_USER_PARM (fn);
15895	    while (DECL_PARM_INDEX (parm) != DECL_PARM_INDEX (scope))
15896	      parm = DECL_CHAIN (parm);
15897	    scope = parm;
15898	    /* FIXME Work around the parm not having DECL_CONTEXT set.  */
15899	    if (DECL_CONTEXT (scope) == NULL_TREE)
15900	      DECL_CONTEXT (scope) = fn;
15901	  }
15902	else
15903	  scope = RECUR (scope);
15904	LAMBDA_EXPR_EXTRA_SCOPE (r) = scope;
15905
15906	gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
15907		    && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
15908
15909	/* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
15910	determine_visibility (TYPE_NAME (type));
15911	/* Now that we know visibility, instantiate the type so we have a
15912	   declaration of the op() for later calls to lambda_function.  */
15913	complete_type (type);
15914
15915	if (tree fn = lambda_function (type))
15916	  LAMBDA_EXPR_RETURN_TYPE (r) = TREE_TYPE (TREE_TYPE (fn));
15917
15918	LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
15919
15920	insert_pending_capture_proxies ();
15921
15922	RETURN (build_lambda_object (r));
15923      }
15924
15925    case TARGET_EXPR:
15926      /* We can get here for a constant initializer of non-dependent type.
15927         FIXME stop folding in cp_parser_initializer_clause.  */
15928      {
15929	tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
15930					 complain);
15931	RETURN (r);
15932      }
15933
15934    case TRANSACTION_EXPR:
15935      RETURN (tsubst_expr(t, args, complain, in_decl,
15936	     integral_constant_expression_p));
15937
15938    case PAREN_EXPR:
15939      RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
15940
15941    case VEC_PERM_EXPR:
15942      {
15943	tree op0 = RECUR (TREE_OPERAND (t, 0));
15944	tree op1 = RECUR (TREE_OPERAND (t, 1));
15945	tree op2 = RECUR (TREE_OPERAND (t, 2));
15946	RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
15947				       complain));
15948      }
15949
15950    default:
15951      /* Handle Objective-C++ constructs, if appropriate.  */
15952      {
15953	tree subst
15954	  = objcp_tsubst_copy_and_build (t, args, complain,
15955					 in_decl, /*function_p=*/false);
15956	if (subst)
15957	  RETURN (subst);
15958      }
15959      RETURN (tsubst_copy (t, args, complain, in_decl));
15960    }
15961
15962#undef RECUR
15963#undef RETURN
15964 out:
15965  input_location = loc;
15966  return retval;
15967}
15968
15969/* Verify that the instantiated ARGS are valid. For type arguments,
15970   make sure that the type's linkage is ok. For non-type arguments,
15971   make sure they are constants if they are integral or enumerations.
15972   Emit an error under control of COMPLAIN, and return TRUE on error.  */
15973
15974static bool
15975check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
15976{
15977  if (dependent_template_arg_p (t))
15978    return false;
15979  if (ARGUMENT_PACK_P (t))
15980    {
15981      tree vec = ARGUMENT_PACK_ARGS (t);
15982      int len = TREE_VEC_LENGTH (vec);
15983      bool result = false;
15984      int i;
15985
15986      for (i = 0; i < len; ++i)
15987	if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
15988	  result = true;
15989      return result;
15990    }
15991  else if (TYPE_P (t))
15992    {
15993      /* [basic.link]: A name with no linkage (notably, the name
15994	 of a class or enumeration declared in a local scope)
15995	 shall not be used to declare an entity with linkage.
15996	 This implies that names with no linkage cannot be used as
15997	 template arguments
15998
15999	 DR 757 relaxes this restriction for C++0x.  */
16000      tree nt = (cxx_dialect > cxx98 ? NULL_TREE
16001		 : no_linkage_check (t, /*relaxed_p=*/false));
16002
16003      if (nt)
16004	{
16005	  /* DR 488 makes use of a type with no linkage cause
16006	     type deduction to fail.  */
16007	  if (complain & tf_error)
16008	    {
16009	      if (TYPE_ANONYMOUS_P (nt))
16010		error ("%qT is/uses anonymous type", t);
16011	      else
16012		error ("template argument for %qD uses local type %qT",
16013		       tmpl, t);
16014	    }
16015	  return true;
16016	}
16017      /* In order to avoid all sorts of complications, we do not
16018	 allow variably-modified types as template arguments.  */
16019      else if (variably_modified_type_p (t, NULL_TREE))
16020	{
16021	  if (complain & tf_error)
16022	    error ("%qT is a variably modified type", t);
16023	  return true;
16024	}
16025    }
16026  /* Class template and alias template arguments should be OK.  */
16027  else if (DECL_TYPE_TEMPLATE_P (t))
16028    ;
16029  /* A non-type argument of integral or enumerated type must be a
16030     constant.  */
16031  else if (TREE_TYPE (t)
16032	   && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
16033	   && !REFERENCE_REF_P (t)
16034	   && !TREE_CONSTANT (t))
16035    {
16036      if (complain & tf_error)
16037	error ("integral expression %qE is not constant", t);
16038      return true;
16039    }
16040  return false;
16041}
16042
16043static bool
16044check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
16045{
16046  int ix, len = DECL_NTPARMS (tmpl);
16047  bool result = false;
16048
16049  for (ix = 0; ix != len; ix++)
16050    {
16051      if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
16052	result = true;
16053    }
16054  if (result && (complain & tf_error))
16055    error ("  trying to instantiate %qD", tmpl);
16056  return result;
16057}
16058
16059/* We're out of SFINAE context now, so generate diagnostics for the access
16060   errors we saw earlier when instantiating D from TMPL and ARGS.  */
16061
16062static void
16063recheck_decl_substitution (tree d, tree tmpl, tree args)
16064{
16065  tree pattern = DECL_TEMPLATE_RESULT (tmpl);
16066  tree type = TREE_TYPE (pattern);
16067  location_t loc = input_location;
16068
16069  push_access_scope (d);
16070  push_deferring_access_checks (dk_no_deferred);
16071  input_location = DECL_SOURCE_LOCATION (pattern);
16072  tsubst (type, args, tf_warning_or_error, d);
16073  input_location = loc;
16074  pop_deferring_access_checks ();
16075  pop_access_scope (d);
16076}
16077
16078/* Instantiate the indicated variable, function, or alias template TMPL with
16079   the template arguments in TARG_PTR.  */
16080
16081static tree
16082instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
16083{
16084  tree targ_ptr = orig_args;
16085  tree fndecl;
16086  tree gen_tmpl;
16087  tree spec;
16088  bool access_ok = true;
16089
16090  if (tmpl == error_mark_node)
16091    return error_mark_node;
16092
16093  gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
16094
16095  /* If this function is a clone, handle it specially.  */
16096  if (DECL_CLONED_FUNCTION_P (tmpl))
16097    {
16098      tree spec;
16099      tree clone;
16100
16101      /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
16102	 DECL_CLONED_FUNCTION.  */
16103      spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
16104				   targ_ptr, complain);
16105      if (spec == error_mark_node)
16106	return error_mark_node;
16107
16108      /* Look for the clone.  */
16109      FOR_EACH_CLONE (clone, spec)
16110	if (DECL_NAME (clone) == DECL_NAME (tmpl))
16111	  return clone;
16112      /* We should always have found the clone by now.  */
16113      gcc_unreachable ();
16114      return NULL_TREE;
16115    }
16116
16117  if (targ_ptr == error_mark_node)
16118    return error_mark_node;
16119
16120  /* Check to see if we already have this specialization.  */
16121  gen_tmpl = most_general_template (tmpl);
16122  if (tmpl != gen_tmpl)
16123    /* The TMPL is a partial instantiation.  To get a full set of
16124       arguments we must add the arguments used to perform the
16125       partial instantiation.  */
16126    targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
16127					    targ_ptr);
16128
16129  /* It would be nice to avoid hashing here and then again in tsubst_decl,
16130     but it doesn't seem to be on the hot path.  */
16131  spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
16132
16133  gcc_assert (tmpl == gen_tmpl
16134	      || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
16135		  == spec)
16136	      || fndecl == NULL_TREE);
16137
16138  if (spec != NULL_TREE)
16139    {
16140      if (FNDECL_HAS_ACCESS_ERRORS (spec))
16141	{
16142	  if (complain & tf_error)
16143	    recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
16144	  return error_mark_node;
16145	}
16146      return spec;
16147    }
16148
16149  if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
16150			       complain))
16151    return error_mark_node;
16152
16153  /* We are building a FUNCTION_DECL, during which the access of its
16154     parameters and return types have to be checked.  However this
16155     FUNCTION_DECL which is the desired context for access checking
16156     is not built yet.  We solve this chicken-and-egg problem by
16157     deferring all checks until we have the FUNCTION_DECL.  */
16158  push_deferring_access_checks (dk_deferred);
16159
16160  /* Instantiation of the function happens in the context of the function
16161     template, not the context of the overload resolution we're doing.  */
16162  push_to_top_level ();
16163  /* If there are dependent arguments, e.g. because we're doing partial
16164     ordering, make sure processing_template_decl stays set.  */
16165  if (uses_template_parms (targ_ptr))
16166    ++processing_template_decl;
16167  if (DECL_CLASS_SCOPE_P (gen_tmpl))
16168    {
16169      tree ctx = tsubst_aggr_type (DECL_CONTEXT (gen_tmpl), targ_ptr,
16170				   complain, gen_tmpl, true);
16171      push_nested_class (ctx);
16172    }
16173
16174  tree pattern = DECL_TEMPLATE_RESULT (gen_tmpl);
16175
16176  if (VAR_P (pattern))
16177    {
16178      /* We need to determine if we're using a partial or explicit
16179	 specialization now, because the type of the variable could be
16180	 different.  */
16181      tree tid = lookup_template_variable (gen_tmpl, targ_ptr);
16182      tree elt = most_specialized_partial_spec (tid, complain);
16183      if (elt == error_mark_node)
16184	pattern = error_mark_node;
16185      else if (elt)
16186	{
16187	  tmpl = TREE_VALUE (elt);
16188	  pattern = DECL_TEMPLATE_RESULT (tmpl);
16189	  targ_ptr = TREE_PURPOSE (elt);
16190	}
16191    }
16192
16193  /* Substitute template parameters to obtain the specialization.  */
16194  fndecl = tsubst (pattern, targ_ptr, complain, gen_tmpl);
16195  if (DECL_CLASS_SCOPE_P (gen_tmpl))
16196    pop_nested_class ();
16197  pop_from_top_level ();
16198
16199  if (fndecl == error_mark_node)
16200    {
16201      pop_deferring_access_checks ();
16202      return error_mark_node;
16203    }
16204
16205  /* The DECL_TI_TEMPLATE should always be the immediate parent
16206     template, not the most general template.  */
16207  DECL_TI_TEMPLATE (fndecl) = tmpl;
16208  if (VAR_P (fndecl))
16209    DECL_TI_ARGS (fndecl) = targ_ptr;
16210
16211  /* Now we know the specialization, compute access previously
16212     deferred.  */
16213  push_access_scope (fndecl);
16214  if (!perform_deferred_access_checks (complain))
16215    access_ok = false;
16216  pop_access_scope (fndecl);
16217  pop_deferring_access_checks ();
16218
16219  /* If we've just instantiated the main entry point for a function,
16220     instantiate all the alternate entry points as well.  We do this
16221     by cloning the instantiation of the main entry point, not by
16222     instantiating the template clones.  */
16223  if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
16224    clone_function_decl (fndecl, /*update_method_vec_p=*/0);
16225
16226  if (!access_ok)
16227    {
16228      if (!(complain & tf_error))
16229	{
16230	  /* Remember to reinstantiate when we're out of SFINAE so the user
16231	     can see the errors.  */
16232	  FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
16233	}
16234      return error_mark_node;
16235    }
16236  return fndecl;
16237}
16238
16239/* Wrapper for instantiate_template_1.  */
16240
16241tree
16242instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
16243{
16244  tree ret;
16245  timevar_push (TV_TEMPLATE_INST);
16246  ret = instantiate_template_1 (tmpl, orig_args,  complain);
16247  timevar_pop (TV_TEMPLATE_INST);
16248  return ret;
16249}
16250
16251/* Instantiate the alias template TMPL with ARGS.  Also push a template
16252   instantiation level, which instantiate_template doesn't do because
16253   functions and variables have sufficient context established by the
16254   callers.  */
16255
16256static tree
16257instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
16258{
16259  struct pending_template *old_last_pend = last_pending_template;
16260  struct tinst_level *old_error_tinst = last_error_tinst_level;
16261  if (tmpl == error_mark_node || args == error_mark_node)
16262    return error_mark_node;
16263  tree tinst = build_tree_list (tmpl, args);
16264  if (!push_tinst_level (tinst))
16265    {
16266      ggc_free (tinst);
16267      return error_mark_node;
16268    }
16269
16270  args =
16271    coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
16272				     args, tmpl, complain,
16273				     /*require_all_args=*/true,
16274				     /*use_default_args=*/true);
16275
16276  tree r = instantiate_template (tmpl, args, complain);
16277  pop_tinst_level ();
16278  /* We can't free this if a pending_template entry or last_error_tinst_level
16279     is pointing at it.  */
16280  if (last_pending_template == old_last_pend
16281      && last_error_tinst_level == old_error_tinst)
16282    ggc_free (tinst);
16283
16284  return r;
16285}
16286
16287/* PARM is a template parameter pack for FN.  Returns true iff
16288   PARM is used in a deducible way in the argument list of FN.  */
16289
16290static bool
16291pack_deducible_p (tree parm, tree fn)
16292{
16293  tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
16294  for (; t; t = TREE_CHAIN (t))
16295    {
16296      tree type = TREE_VALUE (t);
16297      tree packs;
16298      if (!PACK_EXPANSION_P (type))
16299	continue;
16300      for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
16301	   packs; packs = TREE_CHAIN (packs))
16302	if (template_args_equal (TREE_VALUE (packs), parm))
16303	  {
16304	    /* The template parameter pack is used in a function parameter
16305	       pack.  If this is the end of the parameter list, the
16306	       template parameter pack is deducible.  */
16307	    if (TREE_CHAIN (t) == void_list_node)
16308	      return true;
16309	    else
16310	      /* Otherwise, not.  Well, it could be deduced from
16311		 a non-pack parameter, but doing so would end up with
16312		 a deduction mismatch, so don't bother.  */
16313	      return false;
16314	  }
16315    }
16316  /* The template parameter pack isn't used in any function parameter
16317     packs, but it might be used deeper, e.g. tuple<Args...>.  */
16318  return true;
16319}
16320
16321/* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
16322   NARGS elements of the arguments that are being used when calling
16323   it.  TARGS is a vector into which the deduced template arguments
16324   are placed.
16325
16326   Returns either a FUNCTION_DECL for the matching specialization of FN or
16327   NULL_TREE if no suitable specialization can be found.  If EXPLAIN_P is
16328   true, diagnostics will be printed to explain why it failed.
16329
16330   If FN is a conversion operator, or we are trying to produce a specific
16331   specialization, RETURN_TYPE is the return type desired.
16332
16333   The EXPLICIT_TARGS are explicit template arguments provided via a
16334   template-id.
16335
16336   The parameter STRICT is one of:
16337
16338   DEDUCE_CALL:
16339     We are deducing arguments for a function call, as in
16340     [temp.deduct.call].
16341
16342   DEDUCE_CONV:
16343     We are deducing arguments for a conversion function, as in
16344     [temp.deduct.conv].
16345
16346   DEDUCE_EXACT:
16347     We are deducing arguments when doing an explicit instantiation
16348     as in [temp.explicit], when determining an explicit specialization
16349     as in [temp.expl.spec], or when taking the address of a function
16350     template, as in [temp.deduct.funcaddr].  */
16351
16352tree
16353fn_type_unification (tree fn,
16354		     tree explicit_targs,
16355		     tree targs,
16356		     const tree *args,
16357		     unsigned int nargs,
16358		     tree return_type,
16359		     unification_kind_t strict,
16360		     int flags,
16361		     bool explain_p,
16362		     bool decltype_p)
16363{
16364  tree parms;
16365  tree fntype;
16366  tree decl = NULL_TREE;
16367  tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
16368  bool ok;
16369  static int deduction_depth;
16370  struct pending_template *old_last_pend = last_pending_template;
16371  struct tinst_level *old_error_tinst = last_error_tinst_level;
16372  tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
16373  tree tinst;
16374  tree r = error_mark_node;
16375
16376  if (decltype_p)
16377    complain |= tf_decltype;
16378
16379  /* In C++0x, it's possible to have a function template whose type depends
16380     on itself recursively.  This is most obvious with decltype, but can also
16381     occur with enumeration scope (c++/48969).  So we need to catch infinite
16382     recursion and reject the substitution at deduction time; this function
16383     will return error_mark_node for any repeated substitution.
16384
16385     This also catches excessive recursion such as when f<N> depends on
16386     f<N-1> across all integers, and returns error_mark_node for all the
16387     substitutions back up to the initial one.
16388
16389     This is, of course, not reentrant.  */
16390  if (excessive_deduction_depth)
16391    return error_mark_node;
16392  tinst = build_tree_list (fn, NULL_TREE);
16393  ++deduction_depth;
16394
16395  gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
16396
16397  fntype = TREE_TYPE (fn);
16398  if (explicit_targs)
16399    {
16400      /* [temp.deduct]
16401
16402	 The specified template arguments must match the template
16403	 parameters in kind (i.e., type, nontype, template), and there
16404	 must not be more arguments than there are parameters;
16405	 otherwise type deduction fails.
16406
16407	 Nontype arguments must match the types of the corresponding
16408	 nontype template parameters, or must be convertible to the
16409	 types of the corresponding nontype parameters as specified in
16410	 _temp.arg.nontype_, otherwise type deduction fails.
16411
16412	 All references in the function type of the function template
16413	 to the corresponding template parameters are replaced by the
16414	 specified template argument values.  If a substitution in a
16415	 template parameter or in the function type of the function
16416	 template results in an invalid type, type deduction fails.  */
16417      int i, len = TREE_VEC_LENGTH (tparms);
16418      location_t loc = input_location;
16419      bool incomplete = false;
16420
16421      /* Adjust any explicit template arguments before entering the
16422	 substitution context.  */
16423      explicit_targs
16424	= (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
16425				  complain,
16426				  /*require_all_args=*/false,
16427				  /*use_default_args=*/false));
16428      if (explicit_targs == error_mark_node)
16429	goto fail;
16430
16431      /* Substitute the explicit args into the function type.  This is
16432	 necessary so that, for instance, explicitly declared function
16433	 arguments can match null pointed constants.  If we were given
16434	 an incomplete set of explicit args, we must not do semantic
16435	 processing during substitution as we could create partial
16436	 instantiations.  */
16437      for (i = 0; i < len; i++)
16438        {
16439          tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
16440          bool parameter_pack = false;
16441	  tree targ = TREE_VEC_ELT (explicit_targs, i);
16442
16443          /* Dig out the actual parm.  */
16444          if (TREE_CODE (parm) == TYPE_DECL
16445              || TREE_CODE (parm) == TEMPLATE_DECL)
16446            {
16447              parm = TREE_TYPE (parm);
16448              parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
16449            }
16450          else if (TREE_CODE (parm) == PARM_DECL)
16451            {
16452              parm = DECL_INITIAL (parm);
16453              parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
16454            }
16455
16456	  if (!parameter_pack && targ == NULL_TREE)
16457	    /* No explicit argument for this template parameter.  */
16458	    incomplete = true;
16459
16460          if (parameter_pack && pack_deducible_p (parm, fn))
16461            {
16462              /* Mark the argument pack as "incomplete". We could
16463                 still deduce more arguments during unification.
16464	         We remove this mark in type_unification_real.  */
16465              if (targ)
16466                {
16467                  ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
16468                  ARGUMENT_PACK_EXPLICIT_ARGS (targ)
16469                    = ARGUMENT_PACK_ARGS (targ);
16470                }
16471
16472              /* We have some incomplete argument packs.  */
16473              incomplete = true;
16474            }
16475        }
16476
16477      TREE_VALUE (tinst) = explicit_targs;
16478      if (!push_tinst_level (tinst))
16479	{
16480	  excessive_deduction_depth = true;
16481	  goto fail;
16482	}
16483      processing_template_decl += incomplete;
16484      input_location = DECL_SOURCE_LOCATION (fn);
16485      /* Ignore any access checks; we'll see them again in
16486	 instantiate_template and they might have the wrong
16487	 access path at this point.  */
16488      push_deferring_access_checks (dk_deferred);
16489      fntype = tsubst (TREE_TYPE (fn), explicit_targs,
16490		       complain | tf_partial, NULL_TREE);
16491      pop_deferring_access_checks ();
16492      input_location = loc;
16493      processing_template_decl -= incomplete;
16494      pop_tinst_level ();
16495
16496      if (fntype == error_mark_node)
16497	goto fail;
16498
16499      /* Place the explicitly specified arguments in TARGS.  */
16500      for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
16501	TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
16502    }
16503
16504  /* Never do unification on the 'this' parameter.  */
16505  parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
16506
16507  if (return_type)
16508    {
16509      tree *new_args;
16510
16511      parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
16512      new_args = XALLOCAVEC (tree, nargs + 1);
16513      new_args[0] = return_type;
16514      memcpy (new_args + 1, args, nargs * sizeof (tree));
16515      args = new_args;
16516      ++nargs;
16517    }
16518
16519  /* We allow incomplete unification without an error message here
16520     because the standard doesn't seem to explicitly prohibit it.  Our
16521     callers must be ready to deal with unification failures in any
16522     event.  */
16523
16524  TREE_VALUE (tinst) = targs;
16525  /* If we aren't explaining yet, push tinst context so we can see where
16526     any errors (e.g. from class instantiations triggered by instantiation
16527     of default template arguments) come from.  If we are explaining, this
16528     context is redundant.  */
16529  if (!explain_p && !push_tinst_level (tinst))
16530    {
16531      excessive_deduction_depth = true;
16532      goto fail;
16533    }
16534
16535  /* type_unification_real will pass back any access checks from default
16536     template argument substitution.  */
16537  vec<deferred_access_check, va_gc> *checks;
16538  checks = NULL;
16539
16540  ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
16541			       targs, parms, args, nargs, /*subr=*/0,
16542			       strict, flags, &checks, explain_p);
16543  if (!explain_p)
16544    pop_tinst_level ();
16545  if (!ok)
16546    goto fail;
16547
16548  /* Now that we have bindings for all of the template arguments,
16549     ensure that the arguments deduced for the template template
16550     parameters have compatible template parameter lists.  We cannot
16551     check this property before we have deduced all template
16552     arguments, because the template parameter types of a template
16553     template parameter might depend on prior template parameters
16554     deduced after the template template parameter.  The following
16555     ill-formed example illustrates this issue:
16556
16557       template<typename T, template<T> class C> void f(C<5>, T);
16558
16559       template<int N> struct X {};
16560
16561       void g() {
16562         f(X<5>(), 5l); // error: template argument deduction fails
16563       }
16564
16565     The template parameter list of 'C' depends on the template type
16566     parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
16567     'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
16568     time that we deduce 'C'.  */
16569  if (!template_template_parm_bindings_ok_p
16570           (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
16571    {
16572      unify_inconsistent_template_template_parameters (explain_p);
16573      goto fail;
16574    }
16575
16576  /* All is well so far.  Now, check:
16577
16578     [temp.deduct]
16579
16580     When all template arguments have been deduced, all uses of
16581     template parameters in nondeduced contexts are replaced with
16582     the corresponding deduced argument values.  If the
16583     substitution results in an invalid type, as described above,
16584     type deduction fails.  */
16585  TREE_VALUE (tinst) = targs;
16586  if (!push_tinst_level (tinst))
16587    {
16588      excessive_deduction_depth = true;
16589      goto fail;
16590    }
16591
16592  /* Also collect access checks from the instantiation.  */
16593  reopen_deferring_access_checks (checks);
16594
16595  decl = instantiate_template (fn, targs, complain);
16596
16597  checks = get_deferred_access_checks ();
16598  pop_deferring_access_checks ();
16599
16600  pop_tinst_level ();
16601
16602  if (decl == error_mark_node)
16603    goto fail;
16604
16605  /* Now perform any access checks encountered during substitution.  */
16606  push_access_scope (decl);
16607  ok = perform_access_checks (checks, complain);
16608  pop_access_scope (decl);
16609  if (!ok)
16610    goto fail;
16611
16612  /* If we're looking for an exact match, check that what we got
16613     is indeed an exact match.  It might not be if some template
16614     parameters are used in non-deduced contexts.  But don't check
16615     for an exact match if we have dependent template arguments;
16616     in that case we're doing partial ordering, and we already know
16617     that we have two candidates that will provide the actual type.  */
16618  if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
16619    {
16620      tree substed = TREE_TYPE (decl);
16621      unsigned int i;
16622
16623      tree sarg
16624	= skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
16625      if (return_type)
16626	sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
16627      for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
16628	if (!same_type_p (args[i], TREE_VALUE (sarg)))
16629	  {
16630	    unify_type_mismatch (explain_p, args[i],
16631				 TREE_VALUE (sarg));
16632	    goto fail;
16633	  }
16634    }
16635
16636  r = decl;
16637
16638 fail:
16639  --deduction_depth;
16640  if (excessive_deduction_depth)
16641    {
16642      if (deduction_depth == 0)
16643	/* Reset once we're all the way out.  */
16644	excessive_deduction_depth = false;
16645    }
16646
16647  /* We can't free this if a pending_template entry or last_error_tinst_level
16648     is pointing at it.  */
16649  if (last_pending_template == old_last_pend
16650      && last_error_tinst_level == old_error_tinst)
16651    ggc_free (tinst);
16652
16653  return r;
16654}
16655
16656/* Adjust types before performing type deduction, as described in
16657   [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
16658   sections are symmetric.  PARM is the type of a function parameter
16659   or the return type of the conversion function.  ARG is the type of
16660   the argument passed to the call, or the type of the value
16661   initialized with the result of the conversion function.
16662   ARG_EXPR is the original argument expression, which may be null.  */
16663
16664static int
16665maybe_adjust_types_for_deduction (unification_kind_t strict,
16666				  tree* parm,
16667				  tree* arg,
16668				  tree arg_expr)
16669{
16670  int result = 0;
16671
16672  switch (strict)
16673    {
16674    case DEDUCE_CALL:
16675      break;
16676
16677    case DEDUCE_CONV:
16678      {
16679	/* Swap PARM and ARG throughout the remainder of this
16680	   function; the handling is precisely symmetric since PARM
16681	   will initialize ARG rather than vice versa.  */
16682	tree* temp = parm;
16683	parm = arg;
16684	arg = temp;
16685	break;
16686      }
16687
16688    case DEDUCE_EXACT:
16689      /* Core issue #873: Do the DR606 thing (see below) for these cases,
16690	 too, but here handle it by stripping the reference from PARM
16691	 rather than by adding it to ARG.  */
16692      if (TREE_CODE (*parm) == REFERENCE_TYPE
16693	  && TYPE_REF_IS_RVALUE (*parm)
16694	  && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16695	  && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16696	  && TREE_CODE (*arg) == REFERENCE_TYPE
16697	  && !TYPE_REF_IS_RVALUE (*arg))
16698	*parm = TREE_TYPE (*parm);
16699      /* Nothing else to do in this case.  */
16700      return 0;
16701
16702    default:
16703      gcc_unreachable ();
16704    }
16705
16706  if (TREE_CODE (*parm) != REFERENCE_TYPE)
16707    {
16708      /* [temp.deduct.call]
16709
16710	 If P is not a reference type:
16711
16712	 --If A is an array type, the pointer type produced by the
16713	 array-to-pointer standard conversion (_conv.array_) is
16714	 used in place of A for type deduction; otherwise,
16715
16716	 --If A is a function type, the pointer type produced by
16717	 the function-to-pointer standard conversion
16718	 (_conv.func_) is used in place of A for type deduction;
16719	 otherwise,
16720
16721	 --If A is a cv-qualified type, the top level
16722	 cv-qualifiers of A's type are ignored for type
16723	 deduction.  */
16724      if (TREE_CODE (*arg) == ARRAY_TYPE)
16725	*arg = build_pointer_type (TREE_TYPE (*arg));
16726      else if (TREE_CODE (*arg) == FUNCTION_TYPE)
16727	*arg = build_pointer_type (*arg);
16728      else
16729	*arg = TYPE_MAIN_VARIANT (*arg);
16730    }
16731
16732  /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
16733     of the form T&&, where T is a template parameter, and the argument
16734     is an lvalue, T is deduced as A& */
16735  if (TREE_CODE (*parm) == REFERENCE_TYPE
16736      && TYPE_REF_IS_RVALUE (*parm)
16737      && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16738      && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16739      && (arg_expr ? real_lvalue_p (arg_expr)
16740	  /* try_one_overload doesn't provide an arg_expr, but
16741	     functions are always lvalues.  */
16742	  : TREE_CODE (*arg) == FUNCTION_TYPE))
16743    *arg = build_reference_type (*arg);
16744
16745  /* [temp.deduct.call]
16746
16747     If P is a cv-qualified type, the top level cv-qualifiers
16748     of P's type are ignored for type deduction.  If P is a
16749     reference type, the type referred to by P is used for
16750     type deduction.  */
16751  *parm = TYPE_MAIN_VARIANT (*parm);
16752  if (TREE_CODE (*parm) == REFERENCE_TYPE)
16753    {
16754      *parm = TREE_TYPE (*parm);
16755      result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16756    }
16757
16758  /* DR 322. For conversion deduction, remove a reference type on parm
16759     too (which has been swapped into ARG).  */
16760  if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
16761    *arg = TREE_TYPE (*arg);
16762
16763  return result;
16764}
16765
16766/* Subroutine of unify_one_argument.  PARM is a function parameter of a
16767   template which does contain any deducible template parameters; check if
16768   ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
16769   unify_one_argument.  */
16770
16771static int
16772check_non_deducible_conversion (tree parm, tree arg, int strict,
16773				int flags, bool explain_p)
16774{
16775  tree type;
16776
16777  if (!TYPE_P (arg))
16778    type = TREE_TYPE (arg);
16779  else
16780    type = arg;
16781
16782  if (same_type_p (parm, type))
16783    return unify_success (explain_p);
16784
16785  if (strict == DEDUCE_CONV)
16786    {
16787      if (can_convert_arg (type, parm, NULL_TREE, flags,
16788			   explain_p ? tf_warning_or_error : tf_none))
16789	return unify_success (explain_p);
16790    }
16791  else if (strict != DEDUCE_EXACT)
16792    {
16793      if (can_convert_arg (parm, type,
16794			   TYPE_P (arg) ? NULL_TREE : arg,
16795			   flags, explain_p ? tf_warning_or_error : tf_none))
16796	return unify_success (explain_p);
16797    }
16798
16799  if (strict == DEDUCE_EXACT)
16800    return unify_type_mismatch (explain_p, parm, arg);
16801  else
16802    return unify_arg_conversion (explain_p, parm, type, arg);
16803}
16804
16805static bool uses_deducible_template_parms (tree type);
16806
16807/* Returns true iff the expression EXPR is one from which a template
16808   argument can be deduced.  In other words, if it's an undecorated
16809   use of a template non-type parameter.  */
16810
16811static bool
16812deducible_expression (tree expr)
16813{
16814  return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
16815}
16816
16817/* Returns true iff the array domain DOMAIN uses a template parameter in a
16818   deducible way; that is, if it has a max value of <PARM> - 1.  */
16819
16820static bool
16821deducible_array_bound (tree domain)
16822{
16823  if (domain == NULL_TREE)
16824    return false;
16825
16826  tree max = TYPE_MAX_VALUE (domain);
16827  if (TREE_CODE (max) != MINUS_EXPR)
16828    return false;
16829
16830  return deducible_expression (TREE_OPERAND (max, 0));
16831}
16832
16833/* Returns true iff the template arguments ARGS use a template parameter
16834   in a deducible way.  */
16835
16836static bool
16837deducible_template_args (tree args)
16838{
16839  for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
16840    {
16841      bool deducible;
16842      tree elt = TREE_VEC_ELT (args, i);
16843      if (ARGUMENT_PACK_P (elt))
16844	deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
16845      else
16846	{
16847	  if (PACK_EXPANSION_P (elt))
16848	    elt = PACK_EXPANSION_PATTERN (elt);
16849	  if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
16850	    deducible = true;
16851	  else if (TYPE_P (elt))
16852	    deducible = uses_deducible_template_parms (elt);
16853	  else
16854	    deducible = deducible_expression (elt);
16855	}
16856      if (deducible)
16857	return true;
16858    }
16859  return false;
16860}
16861
16862/* Returns true iff TYPE contains any deducible references to template
16863   parameters, as per 14.8.2.5.  */
16864
16865static bool
16866uses_deducible_template_parms (tree type)
16867{
16868  if (PACK_EXPANSION_P (type))
16869    type = PACK_EXPANSION_PATTERN (type);
16870
16871  /* T
16872     cv-list T
16873     TT<T>
16874     TT<i>
16875     TT<> */
16876  if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
16877      || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
16878    return true;
16879
16880  /* T*
16881     T&
16882     T&&  */
16883  if (POINTER_TYPE_P (type))
16884    return uses_deducible_template_parms (TREE_TYPE (type));
16885
16886  /* T[integer-constant ]
16887     type [i]  */
16888  if (TREE_CODE (type) == ARRAY_TYPE)
16889    return (uses_deducible_template_parms (TREE_TYPE (type))
16890	    || deducible_array_bound (TYPE_DOMAIN (type)));
16891
16892  /* T type ::*
16893     type T::*
16894     T T::*
16895     T (type ::*)()
16896     type (T::*)()
16897     type (type ::*)(T)
16898     type (T::*)(T)
16899     T (type ::*)(T)
16900     T (T::*)()
16901     T (T::*)(T) */
16902  if (TYPE_PTRMEM_P (type))
16903    return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
16904	    || (uses_deducible_template_parms
16905		(TYPE_PTRMEM_POINTED_TO_TYPE (type))));
16906
16907  /* template-name <T> (where template-name refers to a class template)
16908     template-name <i> (where template-name refers to a class template) */
16909  if (CLASS_TYPE_P (type)
16910      && CLASSTYPE_TEMPLATE_INFO (type)
16911      && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
16912    return deducible_template_args (INNERMOST_TEMPLATE_ARGS
16913				    (CLASSTYPE_TI_ARGS (type)));
16914
16915  /* type (T)
16916     T()
16917     T(T)  */
16918  if (TREE_CODE (type) == FUNCTION_TYPE
16919      || TREE_CODE (type) == METHOD_TYPE)
16920    {
16921      if (uses_deducible_template_parms (TREE_TYPE (type)))
16922	return true;
16923      tree parm = TYPE_ARG_TYPES (type);
16924      if (TREE_CODE (type) == METHOD_TYPE)
16925	parm = TREE_CHAIN (parm);
16926      for (; parm; parm = TREE_CHAIN (parm))
16927	if (uses_deducible_template_parms (TREE_VALUE (parm)))
16928	  return true;
16929    }
16930
16931  return false;
16932}
16933
16934/* Subroutine of type_unification_real and unify_pack_expansion to
16935   handle unification of a single P/A pair.  Parameters are as
16936   for those functions.  */
16937
16938static int
16939unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
16940		    int subr, unification_kind_t strict, int flags,
16941		    bool explain_p)
16942{
16943  tree arg_expr = NULL_TREE;
16944  int arg_strict;
16945
16946  if (arg == error_mark_node || parm == error_mark_node)
16947    return unify_invalid (explain_p);
16948  if (arg == unknown_type_node)
16949    /* We can't deduce anything from this, but we might get all the
16950       template args from other function args.  */
16951    return unify_success (explain_p);
16952
16953  /* Implicit conversions (Clause 4) will be performed on a function
16954     argument to convert it to the type of the corresponding function
16955     parameter if the parameter type contains no template-parameters that
16956     participate in template argument deduction.  */
16957  if (TYPE_P (parm) && !uses_template_parms (parm))
16958    /* For function parameters that contain no template-parameters at all,
16959       we have historically checked for convertibility in order to shortcut
16960       consideration of this candidate.  */
16961    return check_non_deducible_conversion (parm, arg, strict, flags,
16962					   explain_p);
16963  else if (strict == DEDUCE_CALL
16964	   && TYPE_P (parm) && !uses_deducible_template_parms (parm))
16965    /* For function parameters with only non-deducible template parameters,
16966       just return.  */
16967    return unify_success (explain_p);
16968
16969  switch (strict)
16970    {
16971    case DEDUCE_CALL:
16972      arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
16973		    | UNIFY_ALLOW_MORE_CV_QUAL
16974		    | UNIFY_ALLOW_DERIVED);
16975      break;
16976
16977    case DEDUCE_CONV:
16978      arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
16979      break;
16980
16981    case DEDUCE_EXACT:
16982      arg_strict = UNIFY_ALLOW_NONE;
16983      break;
16984
16985    default:
16986      gcc_unreachable ();
16987    }
16988
16989  /* We only do these transformations if this is the top-level
16990     parameter_type_list in a call or declaration matching; in other
16991     situations (nested function declarators, template argument lists) we
16992     won't be comparing a type to an expression, and we don't do any type
16993     adjustments.  */
16994  if (!subr)
16995    {
16996      if (!TYPE_P (arg))
16997	{
16998	  gcc_assert (TREE_TYPE (arg) != NULL_TREE);
16999	  if (type_unknown_p (arg))
17000	    {
17001	      /* [temp.deduct.type] A template-argument can be
17002		 deduced from a pointer to function or pointer
17003		 to member function argument if the set of
17004		 overloaded functions does not contain function
17005		 templates and at most one of a set of
17006		 overloaded functions provides a unique
17007		 match.  */
17008
17009	      if (resolve_overloaded_unification
17010		  (tparms, targs, parm, arg, strict,
17011		   arg_strict, explain_p))
17012		return unify_success (explain_p);
17013	      return unify_overload_resolution_failure (explain_p, arg);
17014	    }
17015
17016	  arg_expr = arg;
17017	  arg = unlowered_expr_type (arg);
17018	  if (arg == error_mark_node)
17019	    return unify_invalid (explain_p);
17020	}
17021
17022      arg_strict |=
17023	maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
17024    }
17025  else
17026    if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
17027	!= (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
17028      return unify_template_argument_mismatch (explain_p, parm, arg);
17029
17030  /* For deduction from an init-list we need the actual list.  */
17031  if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
17032    arg = arg_expr;
17033  return unify (tparms, targs, parm, arg, arg_strict, explain_p);
17034}
17035
17036/* Most parms like fn_type_unification.
17037
17038   If SUBR is 1, we're being called recursively (to unify the
17039   arguments of a function or method parameter of a function
17040   template).
17041
17042   CHECKS is a pointer to a vector of access checks encountered while
17043   substituting default template arguments.  */
17044
17045static int
17046type_unification_real (tree tparms,
17047		       tree targs,
17048		       tree xparms,
17049		       const tree *xargs,
17050		       unsigned int xnargs,
17051		       int subr,
17052		       unification_kind_t strict,
17053		       int flags,
17054		       vec<deferred_access_check, va_gc> **checks,
17055		       bool explain_p)
17056{
17057  tree parm, arg;
17058  int i;
17059  int ntparms = TREE_VEC_LENGTH (tparms);
17060  int saw_undeduced = 0;
17061  tree parms;
17062  const tree *args;
17063  unsigned int nargs;
17064  unsigned int ia;
17065
17066  gcc_assert (TREE_CODE (tparms) == TREE_VEC);
17067  gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
17068  gcc_assert (ntparms > 0);
17069
17070  /* Reset the number of non-defaulted template arguments contained
17071     in TARGS.  */
17072  NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
17073
17074 again:
17075  parms = xparms;
17076  args = xargs;
17077  nargs = xnargs;
17078
17079  ia = 0;
17080  while (parms && parms != void_list_node
17081	 && ia < nargs)
17082    {
17083      parm = TREE_VALUE (parms);
17084
17085      if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
17086	  && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
17087	/* For a function parameter pack that occurs at the end of the
17088	   parameter-declaration-list, the type A of each remaining
17089	   argument of the call is compared with the type P of the
17090	   declarator-id of the function parameter pack.  */
17091	break;
17092
17093      parms = TREE_CHAIN (parms);
17094
17095      if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
17096	/* For a function parameter pack that does not occur at the
17097	   end of the parameter-declaration-list, the type of the
17098	   parameter pack is a non-deduced context.  */
17099	continue;
17100
17101      arg = args[ia];
17102      ++ia;
17103
17104      if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
17105			      flags, explain_p))
17106	return 1;
17107    }
17108
17109  if (parms
17110      && parms != void_list_node
17111      && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
17112    {
17113      /* Unify the remaining arguments with the pack expansion type.  */
17114      tree argvec;
17115      tree parmvec = make_tree_vec (1);
17116
17117      /* Allocate a TREE_VEC and copy in all of the arguments */
17118      argvec = make_tree_vec (nargs - ia);
17119      for (i = 0; ia < nargs; ++ia, ++i)
17120	TREE_VEC_ELT (argvec, i) = args[ia];
17121
17122      /* Copy the parameter into parmvec.  */
17123      TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
17124      if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
17125                                /*subr=*/subr, explain_p))
17126        return 1;
17127
17128      /* Advance to the end of the list of parameters.  */
17129      parms = TREE_CHAIN (parms);
17130    }
17131
17132  /* Fail if we've reached the end of the parm list, and more args
17133     are present, and the parm list isn't variadic.  */
17134  if (ia < nargs && parms == void_list_node)
17135    return unify_too_many_arguments (explain_p, nargs, ia);
17136  /* Fail if parms are left and they don't have default values and
17137     they aren't all deduced as empty packs (c++/57397).  This is
17138     consistent with sufficient_parms_p.  */
17139  if (parms && parms != void_list_node
17140      && TREE_PURPOSE (parms) == NULL_TREE)
17141    {
17142      unsigned int count = nargs;
17143      tree p = parms;
17144      bool type_pack_p;
17145      do
17146	{
17147	  type_pack_p = TREE_CODE (TREE_VALUE (p)) == TYPE_PACK_EXPANSION;
17148	  if (!type_pack_p)
17149	    count++;
17150	  p = TREE_CHAIN (p);
17151	}
17152      while (p && p != void_list_node);
17153      if (count != nargs)
17154	return unify_too_few_arguments (explain_p, ia, count,
17155					type_pack_p);
17156    }
17157
17158  if (!subr)
17159    {
17160      tsubst_flags_t complain = (explain_p
17161				 ? tf_warning_or_error
17162				 : tf_none);
17163
17164      for (i = 0; i < ntparms; i++)
17165	{
17166	  tree targ = TREE_VEC_ELT (targs, i);
17167	  tree tparm = TREE_VEC_ELT (tparms, i);
17168
17169	  /* Clear the "incomplete" flags on all argument packs now so that
17170	     substituting them into later default arguments works.  */
17171	  if (targ && ARGUMENT_PACK_P (targ))
17172            {
17173              ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
17174              ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
17175            }
17176
17177	  if (targ || tparm == error_mark_node)
17178	    continue;
17179	  tparm = TREE_VALUE (tparm);
17180
17181	  /* If this is an undeduced nontype parameter that depends on
17182	     a type parameter, try another pass; its type may have been
17183	     deduced from a later argument than the one from which
17184	     this parameter can be deduced.  */
17185	  if (TREE_CODE (tparm) == PARM_DECL
17186	      && uses_template_parms (TREE_TYPE (tparm))
17187	      && !saw_undeduced++)
17188	    goto again;
17189
17190	  /* Core issue #226 (C++0x) [temp.deduct]:
17191
17192	     If a template argument has not been deduced, its
17193	     default template argument, if any, is used.
17194
17195	     When we are in C++98 mode, TREE_PURPOSE will either
17196	     be NULL_TREE or ERROR_MARK_NODE, so we do not need
17197	     to explicitly check cxx_dialect here.  */
17198	  if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
17199	    {
17200	      tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
17201	      tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
17202	      reopen_deferring_access_checks (*checks);
17203	      location_t save_loc = input_location;
17204	      if (DECL_P (parm))
17205		input_location = DECL_SOURCE_LOCATION (parm);
17206	      arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
17207	      arg = convert_template_argument (parm, arg, targs, complain,
17208					       i, NULL_TREE);
17209	      input_location = save_loc;
17210	      *checks = get_deferred_access_checks ();
17211	      pop_deferring_access_checks ();
17212	      if (arg == error_mark_node)
17213		return 1;
17214	      else
17215		{
17216		  TREE_VEC_ELT (targs, i) = arg;
17217		  /* The position of the first default template argument,
17218		     is also the number of non-defaulted arguments in TARGS.
17219		     Record that.  */
17220		  if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
17221		    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
17222		  continue;
17223		}
17224	    }
17225
17226	  /* If the type parameter is a parameter pack, then it will
17227	     be deduced to an empty parameter pack.  */
17228	  if (template_parameter_pack_p (tparm))
17229	    {
17230	      tree arg;
17231
17232	      if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
17233		{
17234		  arg = make_node (NONTYPE_ARGUMENT_PACK);
17235		  TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
17236		  TREE_CONSTANT (arg) = 1;
17237		}
17238	      else
17239		arg = cxx_make_type (TYPE_ARGUMENT_PACK);
17240
17241	      SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
17242
17243	      TREE_VEC_ELT (targs, i) = arg;
17244	      continue;
17245	    }
17246
17247	  return unify_parameter_deduction_failure (explain_p, tparm);
17248	}
17249    }
17250#ifdef ENABLE_CHECKING
17251  if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
17252    SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
17253#endif
17254
17255  return unify_success (explain_p);
17256}
17257
17258/* Subroutine of type_unification_real.  Args are like the variables
17259   at the call site.  ARG is an overloaded function (or template-id);
17260   we try deducing template args from each of the overloads, and if
17261   only one succeeds, we go with that.  Modifies TARGS and returns
17262   true on success.  */
17263
17264static bool
17265resolve_overloaded_unification (tree tparms,
17266				tree targs,
17267				tree parm,
17268				tree arg,
17269				unification_kind_t strict,
17270				int sub_strict,
17271			        bool explain_p)
17272{
17273  tree tempargs = copy_node (targs);
17274  int good = 0;
17275  tree goodfn = NULL_TREE;
17276  bool addr_p;
17277
17278  if (TREE_CODE (arg) == ADDR_EXPR)
17279    {
17280      arg = TREE_OPERAND (arg, 0);
17281      addr_p = true;
17282    }
17283  else
17284    addr_p = false;
17285
17286  if (TREE_CODE (arg) == COMPONENT_REF)
17287    /* Handle `&x' where `x' is some static or non-static member
17288       function name.  */
17289    arg = TREE_OPERAND (arg, 1);
17290
17291  if (TREE_CODE (arg) == OFFSET_REF)
17292    arg = TREE_OPERAND (arg, 1);
17293
17294  /* Strip baselink information.  */
17295  if (BASELINK_P (arg))
17296    arg = BASELINK_FUNCTIONS (arg);
17297
17298  if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
17299    {
17300      /* If we got some explicit template args, we need to plug them into
17301	 the affected templates before we try to unify, in case the
17302	 explicit args will completely resolve the templates in question.  */
17303
17304      int ok = 0;
17305      tree expl_subargs = TREE_OPERAND (arg, 1);
17306      arg = TREE_OPERAND (arg, 0);
17307
17308      for (; arg; arg = OVL_NEXT (arg))
17309	{
17310	  tree fn = OVL_CURRENT (arg);
17311	  tree subargs, elem;
17312
17313	  if (TREE_CODE (fn) != TEMPLATE_DECL)
17314	    continue;
17315
17316	  subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
17317					   expl_subargs, NULL_TREE, tf_none,
17318					   /*require_all_args=*/true,
17319					   /*use_default_args=*/true);
17320	  if (subargs != error_mark_node
17321	      && !any_dependent_template_arguments_p (subargs))
17322	    {
17323	      elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
17324	      if (try_one_overload (tparms, targs, tempargs, parm,
17325				    elem, strict, sub_strict, addr_p, explain_p)
17326		  && (!goodfn || !same_type_p (goodfn, elem)))
17327		{
17328		  goodfn = elem;
17329		  ++good;
17330		}
17331	    }
17332	  else if (subargs)
17333	    ++ok;
17334	}
17335      /* If no templates (or more than one) are fully resolved by the
17336	 explicit arguments, this template-id is a non-deduced context; it
17337	 could still be OK if we deduce all template arguments for the
17338	 enclosing call through other arguments.  */
17339      if (good != 1)
17340	good = ok;
17341    }
17342  else if (TREE_CODE (arg) != OVERLOAD
17343	   && TREE_CODE (arg) != FUNCTION_DECL)
17344    /* If ARG is, for example, "(0, &f)" then its type will be unknown
17345       -- but the deduction does not succeed because the expression is
17346       not just the function on its own.  */
17347    return false;
17348  else
17349    for (; arg; arg = OVL_NEXT (arg))
17350      if (try_one_overload (tparms, targs, tempargs, parm,
17351			    TREE_TYPE (OVL_CURRENT (arg)),
17352			    strict, sub_strict, addr_p, explain_p)
17353	  && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
17354	{
17355	  goodfn = OVL_CURRENT (arg);
17356	  ++good;
17357	}
17358
17359  /* [temp.deduct.type] A template-argument can be deduced from a pointer
17360     to function or pointer to member function argument if the set of
17361     overloaded functions does not contain function templates and at most
17362     one of a set of overloaded functions provides a unique match.
17363
17364     So if we found multiple possibilities, we return success but don't
17365     deduce anything.  */
17366
17367  if (good == 1)
17368    {
17369      int i = TREE_VEC_LENGTH (targs);
17370      for (; i--; )
17371	if (TREE_VEC_ELT (tempargs, i))
17372	  {
17373	    tree old = TREE_VEC_ELT (targs, i);
17374	    tree new_ = TREE_VEC_ELT (tempargs, i);
17375	    if (new_ && old && ARGUMENT_PACK_P (old)
17376		&& ARGUMENT_PACK_EXPLICIT_ARGS (old))
17377	      /* Don't forget explicit template arguments in a pack.  */
17378	      ARGUMENT_PACK_EXPLICIT_ARGS (new_)
17379		= ARGUMENT_PACK_EXPLICIT_ARGS (old);
17380	    TREE_VEC_ELT (targs, i) = new_;
17381	  }
17382    }
17383  if (good)
17384    return true;
17385
17386  return false;
17387}
17388
17389/* Core DR 115: In contexts where deduction is done and fails, or in
17390   contexts where deduction is not done, if a template argument list is
17391   specified and it, along with any default template arguments, identifies
17392   a single function template specialization, then the template-id is an
17393   lvalue for the function template specialization.  */
17394
17395tree
17396resolve_nondeduced_context (tree orig_expr, tsubst_flags_t complain)
17397{
17398  tree expr, offset, baselink;
17399  bool addr;
17400
17401  if (!type_unknown_p (orig_expr))
17402    return orig_expr;
17403
17404  expr = orig_expr;
17405  addr = false;
17406  offset = NULL_TREE;
17407  baselink = NULL_TREE;
17408
17409  if (TREE_CODE (expr) == ADDR_EXPR)
17410    {
17411      expr = TREE_OPERAND (expr, 0);
17412      addr = true;
17413    }
17414  if (TREE_CODE (expr) == OFFSET_REF)
17415    {
17416      offset = expr;
17417      expr = TREE_OPERAND (expr, 1);
17418    }
17419  if (BASELINK_P (expr))
17420    {
17421      baselink = expr;
17422      expr = BASELINK_FUNCTIONS (expr);
17423    }
17424
17425  if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
17426    {
17427      int good = 0;
17428      tree goodfn = NULL_TREE;
17429
17430      /* If we got some explicit template args, we need to plug them into
17431	 the affected templates before we try to unify, in case the
17432	 explicit args will completely resolve the templates in question.  */
17433
17434      tree expl_subargs = TREE_OPERAND (expr, 1);
17435      tree arg = TREE_OPERAND (expr, 0);
17436      tree badfn = NULL_TREE;
17437      tree badargs = NULL_TREE;
17438
17439      for (; arg; arg = OVL_NEXT (arg))
17440	{
17441	  tree fn = OVL_CURRENT (arg);
17442	  tree subargs, elem;
17443
17444	  if (TREE_CODE (fn) != TEMPLATE_DECL)
17445	    continue;
17446
17447	  subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
17448					   expl_subargs, NULL_TREE, tf_none,
17449					   /*require_all_args=*/true,
17450					   /*use_default_args=*/true);
17451	  if (subargs != error_mark_node
17452	      && !any_dependent_template_arguments_p (subargs))
17453	    {
17454	      elem = instantiate_template (fn, subargs, tf_none);
17455	      if (elem == error_mark_node)
17456		{
17457		  badfn = fn;
17458		  badargs = subargs;
17459		}
17460	      else if (elem && (!goodfn || !decls_match (goodfn, elem)))
17461		{
17462		  goodfn = elem;
17463		  ++good;
17464		}
17465	    }
17466	}
17467      if (good == 1)
17468	{
17469	  mark_used (goodfn);
17470	  expr = goodfn;
17471	  if (baselink)
17472	    expr = build_baselink (BASELINK_BINFO (baselink),
17473				   BASELINK_ACCESS_BINFO (baselink),
17474				   expr, BASELINK_OPTYPE (baselink));
17475	  if (offset)
17476	    {
17477	      tree base
17478		= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
17479	      expr = build_offset_ref (base, expr, addr, complain);
17480	    }
17481	  if (addr)
17482	    expr = cp_build_addr_expr (expr, complain);
17483	  return expr;
17484	}
17485      else if (good == 0 && badargs && (complain & tf_error))
17486	/* There were no good options and at least one bad one, so let the
17487	   user know what the problem is.  */
17488	instantiate_template (badfn, badargs, complain);
17489    }
17490  return orig_expr;
17491}
17492
17493/* Subroutine of resolve_overloaded_unification; does deduction for a single
17494   overload.  Fills TARGS with any deduced arguments, or error_mark_node if
17495   different overloads deduce different arguments for a given parm.
17496   ADDR_P is true if the expression for which deduction is being
17497   performed was of the form "& fn" rather than simply "fn".
17498
17499   Returns 1 on success.  */
17500
17501static int
17502try_one_overload (tree tparms,
17503		  tree orig_targs,
17504		  tree targs,
17505		  tree parm,
17506		  tree arg,
17507		  unification_kind_t strict,
17508		  int sub_strict,
17509		  bool addr_p,
17510		  bool explain_p)
17511{
17512  int nargs;
17513  tree tempargs;
17514  int i;
17515
17516  if (arg == error_mark_node)
17517    return 0;
17518
17519  /* [temp.deduct.type] A template-argument can be deduced from a pointer
17520     to function or pointer to member function argument if the set of
17521     overloaded functions does not contain function templates and at most
17522     one of a set of overloaded functions provides a unique match.
17523
17524     So if this is a template, just return success.  */
17525
17526  if (uses_template_parms (arg))
17527    return 1;
17528
17529  if (TREE_CODE (arg) == METHOD_TYPE)
17530    arg = build_ptrmemfunc_type (build_pointer_type (arg));
17531  else if (addr_p)
17532    arg = build_pointer_type (arg);
17533
17534  sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
17535
17536  /* We don't copy orig_targs for this because if we have already deduced
17537     some template args from previous args, unify would complain when we
17538     try to deduce a template parameter for the same argument, even though
17539     there isn't really a conflict.  */
17540  nargs = TREE_VEC_LENGTH (targs);
17541  tempargs = make_tree_vec (nargs);
17542
17543  if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
17544    return 0;
17545
17546  /* First make sure we didn't deduce anything that conflicts with
17547     explicitly specified args.  */
17548  for (i = nargs; i--; )
17549    {
17550      tree elt = TREE_VEC_ELT (tempargs, i);
17551      tree oldelt = TREE_VEC_ELT (orig_targs, i);
17552
17553      if (!elt)
17554	/*NOP*/;
17555      else if (uses_template_parms (elt))
17556	/* Since we're unifying against ourselves, we will fill in
17557	   template args used in the function parm list with our own
17558	   template parms.  Discard them.  */
17559	TREE_VEC_ELT (tempargs, i) = NULL_TREE;
17560      else if (oldelt && !template_args_equal (oldelt, elt))
17561	return 0;
17562    }
17563
17564  for (i = nargs; i--; )
17565    {
17566      tree elt = TREE_VEC_ELT (tempargs, i);
17567
17568      if (elt)
17569	TREE_VEC_ELT (targs, i) = elt;
17570    }
17571
17572  return 1;
17573}
17574
17575/* PARM is a template class (perhaps with unbound template
17576   parameters).  ARG is a fully instantiated type.  If ARG can be
17577   bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
17578   TARGS are as for unify.  */
17579
17580static tree
17581try_class_unification (tree tparms, tree targs, tree parm, tree arg,
17582		       bool explain_p)
17583{
17584  tree copy_of_targs;
17585
17586  if (!CLASSTYPE_TEMPLATE_INFO (arg)
17587      || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
17588	  != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
17589    return NULL_TREE;
17590
17591  /* We need to make a new template argument vector for the call to
17592     unify.  If we used TARGS, we'd clutter it up with the result of
17593     the attempted unification, even if this class didn't work out.
17594     We also don't want to commit ourselves to all the unifications
17595     we've already done, since unification is supposed to be done on
17596     an argument-by-argument basis.  In other words, consider the
17597     following pathological case:
17598
17599       template <int I, int J, int K>
17600       struct S {};
17601
17602       template <int I, int J>
17603       struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
17604
17605       template <int I, int J, int K>
17606       void f(S<I, J, K>, S<I, I, I>);
17607
17608       void g() {
17609	 S<0, 0, 0> s0;
17610	 S<0, 1, 2> s2;
17611
17612	 f(s0, s2);
17613       }
17614
17615     Now, by the time we consider the unification involving `s2', we
17616     already know that we must have `f<0, 0, 0>'.  But, even though
17617     `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
17618     because there are two ways to unify base classes of S<0, 1, 2>
17619     with S<I, I, I>.  If we kept the already deduced knowledge, we
17620     would reject the possibility I=1.  */
17621  copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
17622
17623  /* If unification failed, we're done.  */
17624  if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
17625	     CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
17626    return NULL_TREE;
17627
17628  return arg;
17629}
17630
17631/* Given a template type PARM and a class type ARG, find the unique
17632   base type in ARG that is an instance of PARM.  We do not examine
17633   ARG itself; only its base-classes.  If there is not exactly one
17634   appropriate base class, return NULL_TREE.  PARM may be the type of
17635   a partial specialization, as well as a plain template type.  Used
17636   by unify.  */
17637
17638static enum template_base_result
17639get_template_base (tree tparms, tree targs, tree parm, tree arg,
17640		   bool explain_p, tree *result)
17641{
17642  tree rval = NULL_TREE;
17643  tree binfo;
17644
17645  gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
17646
17647  binfo = TYPE_BINFO (complete_type (arg));
17648  if (!binfo)
17649    {
17650      /* The type could not be completed.  */
17651      *result = NULL_TREE;
17652      return tbr_incomplete_type;
17653    }
17654
17655  /* Walk in inheritance graph order.  The search order is not
17656     important, and this avoids multiple walks of virtual bases.  */
17657  for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
17658    {
17659      tree r = try_class_unification (tparms, targs, parm,
17660				      BINFO_TYPE (binfo), explain_p);
17661
17662      if (r)
17663	{
17664	  /* If there is more than one satisfactory baseclass, then:
17665
17666	       [temp.deduct.call]
17667
17668	      If they yield more than one possible deduced A, the type
17669	      deduction fails.
17670
17671	     applies.  */
17672	  if (rval && !same_type_p (r, rval))
17673	    {
17674	      *result = NULL_TREE;
17675	      return tbr_ambiguous_baseclass;
17676	    }
17677
17678	  rval = r;
17679	}
17680    }
17681
17682  *result = rval;
17683  return tbr_success;
17684}
17685
17686/* Returns the level of DECL, which declares a template parameter.  */
17687
17688static int
17689template_decl_level (tree decl)
17690{
17691  switch (TREE_CODE (decl))
17692    {
17693    case TYPE_DECL:
17694    case TEMPLATE_DECL:
17695      return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
17696
17697    case PARM_DECL:
17698      return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
17699
17700    default:
17701      gcc_unreachable ();
17702    }
17703  return 0;
17704}
17705
17706/* Decide whether ARG can be unified with PARM, considering only the
17707   cv-qualifiers of each type, given STRICT as documented for unify.
17708   Returns nonzero iff the unification is OK on that basis.  */
17709
17710static int
17711check_cv_quals_for_unify (int strict, tree arg, tree parm)
17712{
17713  int arg_quals = cp_type_quals (arg);
17714  int parm_quals = cp_type_quals (parm);
17715
17716  if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17717      && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17718    {
17719      /*  Although a CVR qualifier is ignored when being applied to a
17720	  substituted template parameter ([8.3.2]/1 for example), that
17721	  does not allow us to unify "const T" with "int&" because both
17722	  types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
17723	  It is ok when we're allowing additional CV qualifiers
17724	  at the outer level [14.8.2.1]/3,1st bullet.  */
17725      if ((TREE_CODE (arg) == REFERENCE_TYPE
17726	   || TREE_CODE (arg) == FUNCTION_TYPE
17727	   || TREE_CODE (arg) == METHOD_TYPE)
17728	  && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
17729	return 0;
17730
17731      if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
17732	  && (parm_quals & TYPE_QUAL_RESTRICT))
17733	return 0;
17734    }
17735
17736  if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17737      && (arg_quals & parm_quals) != parm_quals)
17738    return 0;
17739
17740  if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
17741      && (parm_quals & arg_quals) != arg_quals)
17742    return 0;
17743
17744  return 1;
17745}
17746
17747/* Determines the LEVEL and INDEX for the template parameter PARM.  */
17748void
17749template_parm_level_and_index (tree parm, int* level, int* index)
17750{
17751  if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17752      || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17753      || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17754    {
17755      *index = TEMPLATE_TYPE_IDX (parm);
17756      *level = TEMPLATE_TYPE_LEVEL (parm);
17757    }
17758  else
17759    {
17760      *index = TEMPLATE_PARM_IDX (parm);
17761      *level = TEMPLATE_PARM_LEVEL (parm);
17762    }
17763}
17764
17765#define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)			\
17766  do {									\
17767    if (unify (TP, TA, P, A, S, EP))					\
17768      return 1;								\
17769  } while (0);
17770
17771/* Unifies the remaining arguments in PACKED_ARGS with the pack
17772   expansion at the end of PACKED_PARMS. Returns 0 if the type
17773   deduction succeeds, 1 otherwise. STRICT is the same as in
17774   unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
17775   call argument list. We'll need to adjust the arguments to make them
17776   types. SUBR tells us if this is from a recursive call to
17777   type_unification_real, or for comparing two template argument
17778   lists. */
17779
17780static int
17781unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
17782                      tree packed_args, unification_kind_t strict,
17783                      bool subr, bool explain_p)
17784{
17785  tree parm
17786    = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
17787  tree pattern = PACK_EXPANSION_PATTERN (parm);
17788  tree pack, packs = NULL_TREE;
17789  int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
17790
17791  packed_args = expand_template_argument_pack (packed_args);
17792
17793  int len = TREE_VEC_LENGTH (packed_args);
17794
17795  /* Determine the parameter packs we will be deducing from the
17796     pattern, and record their current deductions.  */
17797  for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm);
17798       pack; pack = TREE_CHAIN (pack))
17799    {
17800      tree parm_pack = TREE_VALUE (pack);
17801      int idx, level;
17802
17803      /* Determine the index and level of this parameter pack.  */
17804      template_parm_level_and_index (parm_pack, &level, &idx);
17805
17806      /* Keep track of the parameter packs and their corresponding
17807         argument packs.  */
17808      packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
17809      TREE_TYPE (packs) = make_tree_vec (len - start);
17810    }
17811
17812  /* Loop through all of the arguments that have not yet been
17813     unified and unify each with the pattern.  */
17814  for (i = start; i < len; i++)
17815    {
17816      tree parm;
17817      bool any_explicit = false;
17818      tree arg = TREE_VEC_ELT (packed_args, i);
17819
17820      /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
17821	 or the element of its argument pack at the current index if
17822	 this argument was explicitly specified.  */
17823      for (pack = packs; pack; pack = TREE_CHAIN (pack))
17824        {
17825          int idx, level;
17826          tree arg, pargs;
17827          template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17828
17829          arg = NULL_TREE;
17830          if (TREE_VALUE (pack)
17831              && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
17832              && (i - start < TREE_VEC_LENGTH (pargs)))
17833            {
17834              any_explicit = true;
17835              arg = TREE_VEC_ELT (pargs, i - start);
17836            }
17837          TMPL_ARG (targs, level, idx) = arg;
17838        }
17839
17840      /* If we had explicit template arguments, substitute them into the
17841	 pattern before deduction.  */
17842      if (any_explicit)
17843	{
17844	  /* Some arguments might still be unspecified or dependent.  */
17845	  bool dependent;
17846	  ++processing_template_decl;
17847	  dependent = any_dependent_template_arguments_p (targs);
17848	  if (!dependent)
17849	    --processing_template_decl;
17850	  parm = tsubst (pattern, targs,
17851			 explain_p ? tf_warning_or_error : tf_none,
17852			 NULL_TREE);
17853	  if (dependent)
17854	    --processing_template_decl;
17855	  if (parm == error_mark_node)
17856	    return 1;
17857	}
17858      else
17859	parm = pattern;
17860
17861      /* Unify the pattern with the current argument.  */
17862      if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
17863			      LOOKUP_IMPLICIT, explain_p))
17864	return 1;
17865
17866      /* For each parameter pack, collect the deduced value.  */
17867      for (pack = packs; pack; pack = TREE_CHAIN (pack))
17868        {
17869          int idx, level;
17870          template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17871
17872          TREE_VEC_ELT (TREE_TYPE (pack), i - start) =
17873            TMPL_ARG (targs, level, idx);
17874        }
17875    }
17876
17877  /* Verify that the results of unification with the parameter packs
17878     produce results consistent with what we've seen before, and make
17879     the deduced argument packs available.  */
17880  for (pack = packs; pack; pack = TREE_CHAIN (pack))
17881    {
17882      tree old_pack = TREE_VALUE (pack);
17883      tree new_args = TREE_TYPE (pack);
17884      int i, len = TREE_VEC_LENGTH (new_args);
17885      int idx, level;
17886      bool nondeduced_p = false;
17887
17888      /* By default keep the original deduced argument pack.
17889	 If necessary, more specific code is going to update the
17890	 resulting deduced argument later down in this function.  */
17891      template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17892      TMPL_ARG (targs, level, idx) = old_pack;
17893
17894      /* If NEW_ARGS contains any NULL_TREE entries, we didn't
17895	 actually deduce anything.  */
17896      for (i = 0; i < len && !nondeduced_p; ++i)
17897	if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
17898	  nondeduced_p = true;
17899      if (nondeduced_p)
17900	continue;
17901
17902      if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
17903        {
17904          /* If we had fewer function args than explicit template args,
17905             just use the explicits.  */
17906          tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17907          int explicit_len = TREE_VEC_LENGTH (explicit_args);
17908          if (len < explicit_len)
17909            new_args = explicit_args;
17910        }
17911
17912      if (!old_pack)
17913        {
17914          tree result;
17915          /* Build the deduced *_ARGUMENT_PACK.  */
17916          if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
17917            {
17918              result = make_node (NONTYPE_ARGUMENT_PACK);
17919              TREE_TYPE (result) =
17920                TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
17921              TREE_CONSTANT (result) = 1;
17922            }
17923          else
17924            result = cxx_make_type (TYPE_ARGUMENT_PACK);
17925
17926          SET_ARGUMENT_PACK_ARGS (result, new_args);
17927
17928          /* Note the deduced argument packs for this parameter
17929             pack.  */
17930          TMPL_ARG (targs, level, idx) = result;
17931        }
17932      else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
17933               && (ARGUMENT_PACK_ARGS (old_pack)
17934                   == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
17935        {
17936          /* We only had the explicitly-provided arguments before, but
17937             now we have a complete set of arguments.  */
17938          tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17939
17940          SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
17941          ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
17942          ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
17943        }
17944      else
17945	{
17946	  tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
17947	  tree old_args = ARGUMENT_PACK_ARGS (old_pack);
17948
17949	  if (!comp_template_args_with_info (old_args, new_args,
17950					     &bad_old_arg, &bad_new_arg))
17951	    /* Inconsistent unification of this parameter pack.  */
17952	    return unify_parameter_pack_inconsistent (explain_p,
17953						      bad_old_arg,
17954						      bad_new_arg);
17955	}
17956    }
17957
17958  return unify_success (explain_p);
17959}
17960
17961/* Handle unification of the domain of an array.  PARM_DOM and ARG_DOM are
17962   INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs.  The other
17963   parameters and return value are as for unify.  */
17964
17965static int
17966unify_array_domain (tree tparms, tree targs,
17967		    tree parm_dom, tree arg_dom,
17968		    bool explain_p)
17969{
17970  tree parm_max;
17971  tree arg_max;
17972  bool parm_cst;
17973  bool arg_cst;
17974
17975  /* Our representation of array types uses "N - 1" as the
17976     TYPE_MAX_VALUE for an array with "N" elements, if "N" is
17977     not an integer constant.  We cannot unify arbitrarily
17978     complex expressions, so we eliminate the MINUS_EXPRs
17979     here.  */
17980  parm_max = TYPE_MAX_VALUE (parm_dom);
17981  parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
17982  if (!parm_cst)
17983    {
17984      gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
17985      parm_max = TREE_OPERAND (parm_max, 0);
17986    }
17987  arg_max = TYPE_MAX_VALUE (arg_dom);
17988  arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
17989  if (!arg_cst)
17990    {
17991      /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
17992	 trying to unify the type of a variable with the type
17993	 of a template parameter.  For example:
17994
17995	   template <unsigned int N>
17996	   void f (char (&) [N]);
17997	   int g();
17998	   void h(int i) {
17999	     char a[g(i)];
18000	     f(a);
18001	   }
18002
18003	 Here, the type of the ARG will be "int [g(i)]", and
18004	 may be a SAVE_EXPR, etc.  */
18005      if (TREE_CODE (arg_max) != MINUS_EXPR)
18006	return unify_vla_arg (explain_p, arg_dom);
18007      arg_max = TREE_OPERAND (arg_max, 0);
18008    }
18009
18010  /* If only one of the bounds used a MINUS_EXPR, compensate
18011     by adding one to the other bound.  */
18012  if (parm_cst && !arg_cst)
18013    parm_max = fold_build2_loc (input_location, PLUS_EXPR,
18014				integer_type_node,
18015				parm_max,
18016				integer_one_node);
18017  else if (arg_cst && !parm_cst)
18018    arg_max = fold_build2_loc (input_location, PLUS_EXPR,
18019			       integer_type_node,
18020			       arg_max,
18021			       integer_one_node);
18022
18023  return unify (tparms, targs, parm_max, arg_max,
18024		UNIFY_ALLOW_INTEGER, explain_p);
18025}
18026
18027/* Deduce the value of template parameters.  TPARMS is the (innermost)
18028   set of template parameters to a template.  TARGS is the bindings
18029   for those template parameters, as determined thus far; TARGS may
18030   include template arguments for outer levels of template parameters
18031   as well.  PARM is a parameter to a template function, or a
18032   subcomponent of that parameter; ARG is the corresponding argument.
18033   This function attempts to match PARM with ARG in a manner
18034   consistent with the existing assignments in TARGS.  If more values
18035   are deduced, then TARGS is updated.
18036
18037   Returns 0 if the type deduction succeeds, 1 otherwise.  The
18038   parameter STRICT is a bitwise or of the following flags:
18039
18040     UNIFY_ALLOW_NONE:
18041       Require an exact match between PARM and ARG.
18042     UNIFY_ALLOW_MORE_CV_QUAL:
18043       Allow the deduced ARG to be more cv-qualified (by qualification
18044       conversion) than ARG.
18045     UNIFY_ALLOW_LESS_CV_QUAL:
18046       Allow the deduced ARG to be less cv-qualified than ARG.
18047     UNIFY_ALLOW_DERIVED:
18048       Allow the deduced ARG to be a template base class of ARG,
18049       or a pointer to a template base class of the type pointed to by
18050       ARG.
18051     UNIFY_ALLOW_INTEGER:
18052       Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
18053       case for more information.
18054     UNIFY_ALLOW_OUTER_LEVEL:
18055       This is the outermost level of a deduction. Used to determine validity
18056       of qualification conversions. A valid qualification conversion must
18057       have const qualified pointers leading up to the inner type which
18058       requires additional CV quals, except at the outer level, where const
18059       is not required [conv.qual]. It would be normal to set this flag in
18060       addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
18061     UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
18062       This is the outermost level of a deduction, and PARM can be more CV
18063       qualified at this point.
18064     UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
18065       This is the outermost level of a deduction, and PARM can be less CV
18066       qualified at this point.  */
18067
18068static int
18069unify (tree tparms, tree targs, tree parm, tree arg, int strict,
18070       bool explain_p)
18071{
18072  int idx;
18073  tree targ;
18074  tree tparm;
18075  int strict_in = strict;
18076
18077  /* I don't think this will do the right thing with respect to types.
18078     But the only case I've seen it in so far has been array bounds, where
18079     signedness is the only information lost, and I think that will be
18080     okay.  */
18081  while (TREE_CODE (parm) == NOP_EXPR)
18082    parm = TREE_OPERAND (parm, 0);
18083
18084  if (arg == error_mark_node)
18085    return unify_invalid (explain_p);
18086  if (arg == unknown_type_node
18087      || arg == init_list_type_node)
18088    /* We can't deduce anything from this, but we might get all the
18089       template args from other function args.  */
18090    return unify_success (explain_p);
18091
18092  /* If PARM uses template parameters, then we can't bail out here,
18093     even if ARG == PARM, since we won't record unifications for the
18094     template parameters.  We might need them if we're trying to
18095     figure out which of two things is more specialized.  */
18096  if (arg == parm && !uses_template_parms (parm))
18097    return unify_success (explain_p);
18098
18099  /* Handle init lists early, so the rest of the function can assume
18100     we're dealing with a type. */
18101  if (BRACE_ENCLOSED_INITIALIZER_P (arg))
18102    {
18103      tree elt, elttype;
18104      unsigned i;
18105      tree orig_parm = parm;
18106
18107      /* Replace T with std::initializer_list<T> for deduction.  */
18108      if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
18109	  && flag_deduce_init_list)
18110	parm = listify (parm);
18111
18112      if (!is_std_init_list (parm)
18113	  && TREE_CODE (parm) != ARRAY_TYPE)
18114	/* We can only deduce from an initializer list argument if the
18115	   parameter is std::initializer_list or an array; otherwise this
18116	   is a non-deduced context. */
18117	return unify_success (explain_p);
18118
18119      if (TREE_CODE (parm) == ARRAY_TYPE)
18120	elttype = TREE_TYPE (parm);
18121      else
18122	{
18123	  elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
18124	  /* Deduction is defined in terms of a single type, so just punt
18125	     on the (bizarre) std::initializer_list<T...>.  */
18126	  if (PACK_EXPANSION_P (elttype))
18127	    return unify_success (explain_p);
18128	}
18129
18130      FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
18131	{
18132	  int elt_strict = strict;
18133
18134	  if (elt == error_mark_node)
18135	    return unify_invalid (explain_p);
18136
18137	  if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
18138	    {
18139	      tree type = TREE_TYPE (elt);
18140	      if (type == error_mark_node)
18141		return unify_invalid (explain_p);
18142	      /* It should only be possible to get here for a call.  */
18143	      gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
18144	      elt_strict |= maybe_adjust_types_for_deduction
18145		(DEDUCE_CALL, &elttype, &type, elt);
18146	      elt = type;
18147	    }
18148
18149	  RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
18150				   explain_p);
18151	}
18152
18153      if (TREE_CODE (parm) == ARRAY_TYPE
18154	  && deducible_array_bound (TYPE_DOMAIN (parm)))
18155	{
18156	  /* Also deduce from the length of the initializer list.  */
18157	  tree max = size_int (CONSTRUCTOR_NELTS (arg));
18158	  tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
18159	  if (idx == error_mark_node)
18160	    return unify_invalid (explain_p);
18161	  return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
18162				     idx, explain_p);
18163	}
18164
18165      /* If the std::initializer_list<T> deduction worked, replace the
18166	 deduced A with std::initializer_list<A>.  */
18167      if (orig_parm != parm)
18168	{
18169	  idx = TEMPLATE_TYPE_IDX (orig_parm);
18170	  targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
18171	  targ = listify (targ);
18172	  TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
18173	}
18174      return unify_success (explain_p);
18175    }
18176
18177  /* Immediately reject some pairs that won't unify because of
18178     cv-qualification mismatches.  */
18179  if (TREE_CODE (arg) == TREE_CODE (parm)
18180      && TYPE_P (arg)
18181      /* It is the elements of the array which hold the cv quals of an array
18182	 type, and the elements might be template type parms. We'll check
18183	 when we recurse.  */
18184      && TREE_CODE (arg) != ARRAY_TYPE
18185      /* We check the cv-qualifiers when unifying with template type
18186	 parameters below.  We want to allow ARG `const T' to unify with
18187	 PARM `T' for example, when computing which of two templates
18188	 is more specialized, for example.  */
18189      && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
18190      && !check_cv_quals_for_unify (strict_in, arg, parm))
18191    return unify_cv_qual_mismatch (explain_p, parm, arg);
18192
18193  if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
18194      && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
18195    strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
18196  strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
18197  strict &= ~UNIFY_ALLOW_DERIVED;
18198  strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
18199  strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
18200
18201  switch (TREE_CODE (parm))
18202    {
18203    case TYPENAME_TYPE:
18204    case SCOPE_REF:
18205    case UNBOUND_CLASS_TEMPLATE:
18206      /* In a type which contains a nested-name-specifier, template
18207	 argument values cannot be deduced for template parameters used
18208	 within the nested-name-specifier.  */
18209      return unify_success (explain_p);
18210
18211    case TEMPLATE_TYPE_PARM:
18212    case TEMPLATE_TEMPLATE_PARM:
18213    case BOUND_TEMPLATE_TEMPLATE_PARM:
18214      tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
18215      if (error_operand_p (tparm))
18216	return unify_invalid (explain_p);
18217
18218      if (TEMPLATE_TYPE_LEVEL (parm)
18219	  != template_decl_level (tparm))
18220	/* The PARM is not one we're trying to unify.  Just check
18221	   to see if it matches ARG.  */
18222	{
18223	  if (TREE_CODE (arg) == TREE_CODE (parm)
18224	      && (is_auto (parm) ? is_auto (arg)
18225		  : same_type_p (parm, arg)))
18226	    return unify_success (explain_p);
18227	  else
18228	    return unify_type_mismatch (explain_p, parm, arg);
18229	}
18230      idx = TEMPLATE_TYPE_IDX (parm);
18231      targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
18232      tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
18233      if (error_operand_p (tparm))
18234	return unify_invalid (explain_p);
18235
18236      /* Check for mixed types and values.  */
18237      if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
18238	   && TREE_CODE (tparm) != TYPE_DECL)
18239	  || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
18240	      && TREE_CODE (tparm) != TEMPLATE_DECL))
18241	gcc_unreachable ();
18242
18243      if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
18244	{
18245	  /* ARG must be constructed from a template class or a template
18246	     template parameter.  */
18247	  if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
18248	      && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
18249	    return unify_template_deduction_failure (explain_p, parm, arg);
18250	  {
18251	    tree parmvec = TYPE_TI_ARGS (parm);
18252	    /* An alias template name is never deduced.  */
18253	    if (TYPE_ALIAS_P (arg))
18254	      arg = strip_typedefs (arg);
18255	    tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
18256	    tree full_argvec = add_to_template_args (targs, argvec);
18257	    tree parm_parms
18258              = DECL_INNERMOST_TEMPLATE_PARMS
18259	          (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
18260	    int i, len;
18261            int parm_variadic_p = 0;
18262
18263	    /* The resolution to DR150 makes clear that default
18264	       arguments for an N-argument may not be used to bind T
18265	       to a template template parameter with fewer than N
18266	       parameters.  It is not safe to permit the binding of
18267	       default arguments as an extension, as that may change
18268	       the meaning of a conforming program.  Consider:
18269
18270		  struct Dense { static const unsigned int dim = 1; };
18271
18272		  template <template <typename> class View,
18273			    typename Block>
18274		  void operator+(float, View<Block> const&);
18275
18276		  template <typename Block,
18277			    unsigned int Dim = Block::dim>
18278		  struct Lvalue_proxy { operator float() const; };
18279
18280		  void
18281		  test_1d (void) {
18282		    Lvalue_proxy<Dense> p;
18283		    float b;
18284		    b + p;
18285		  }
18286
18287	      Here, if Lvalue_proxy is permitted to bind to View, then
18288	      the global operator+ will be used; if they are not, the
18289	      Lvalue_proxy will be converted to float.  */
18290	    if (coerce_template_parms (parm_parms,
18291                                       full_argvec,
18292				       TYPE_TI_TEMPLATE (parm),
18293				       (explain_p
18294					? tf_warning_or_error
18295					: tf_none),
18296				       /*require_all_args=*/true,
18297				       /*use_default_args=*/false)
18298		== error_mark_node)
18299	      return 1;
18300
18301	    /* Deduce arguments T, i from TT<T> or TT<i>.
18302	       We check each element of PARMVEC and ARGVEC individually
18303	       rather than the whole TREE_VEC since they can have
18304	       different number of elements.  */
18305
18306            parmvec = expand_template_argument_pack (parmvec);
18307            argvec = expand_template_argument_pack (argvec);
18308
18309            len = TREE_VEC_LENGTH (parmvec);
18310
18311            /* Check if the parameters end in a pack, making them
18312               variadic.  */
18313            if (len > 0
18314                && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
18315              parm_variadic_p = 1;
18316
18317             for (i = 0; i < len - parm_variadic_p; ++i)
18318	       /* If the template argument list of P contains a pack
18319		  expansion that is not the last template argument, the
18320		  entire template argument list is a non-deduced
18321		  context.  */
18322	       if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
18323		 return unify_success (explain_p);
18324
18325            if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
18326              return unify_too_few_arguments (explain_p,
18327					      TREE_VEC_LENGTH (argvec), len);
18328
18329             for (i = 0; i < len - parm_variadic_p; ++i)
18330	      {
18331		RECUR_AND_CHECK_FAILURE (tparms, targs,
18332					 TREE_VEC_ELT (parmvec, i),
18333					 TREE_VEC_ELT (argvec, i),
18334					 UNIFY_ALLOW_NONE, explain_p);
18335	      }
18336
18337	    if (parm_variadic_p
18338		&& unify_pack_expansion (tparms, targs,
18339					 parmvec, argvec,
18340					 DEDUCE_EXACT,
18341					 /*subr=*/true, explain_p))
18342	      return 1;
18343	  }
18344	  arg = TYPE_TI_TEMPLATE (arg);
18345
18346	  /* Fall through to deduce template name.  */
18347	}
18348
18349      if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
18350	  || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
18351	{
18352	  /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
18353
18354	  /* Simple cases: Value already set, does match or doesn't.  */
18355	  if (targ != NULL_TREE && template_args_equal (targ, arg))
18356	    return unify_success (explain_p);
18357	  else if (targ)
18358	    return unify_inconsistency (explain_p, parm, targ, arg);
18359	}
18360      else
18361	{
18362	  /* If PARM is `const T' and ARG is only `int', we don't have
18363	     a match unless we are allowing additional qualification.
18364	     If ARG is `const int' and PARM is just `T' that's OK;
18365	     that binds `const int' to `T'.  */
18366	  if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
18367					 arg, parm))
18368	    return unify_cv_qual_mismatch (explain_p, parm, arg);
18369
18370	  /* Consider the case where ARG is `const volatile int' and
18371	     PARM is `const T'.  Then, T should be `volatile int'.  */
18372	  arg = cp_build_qualified_type_real
18373	    (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
18374	  if (arg == error_mark_node)
18375	    return unify_invalid (explain_p);
18376
18377	  /* Simple cases: Value already set, does match or doesn't.  */
18378	  if (targ != NULL_TREE && same_type_p (targ, arg))
18379	    return unify_success (explain_p);
18380	  else if (targ)
18381	    return unify_inconsistency (explain_p, parm, targ, arg);
18382
18383	  /* Make sure that ARG is not a variable-sized array.  (Note
18384	     that were talking about variable-sized arrays (like
18385	     `int[n]'), rather than arrays of unknown size (like
18386	     `int[]').)  We'll get very confused by such a type since
18387	     the bound of the array is not constant, and therefore
18388	     not mangleable.  Besides, such types are not allowed in
18389	     ISO C++, so we can do as we please here.  We do allow
18390	     them for 'auto' deduction, since that isn't ABI-exposed.  */
18391	  if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
18392	    return unify_vla_arg (explain_p, arg);
18393
18394	  /* Strip typedefs as in convert_template_argument.  */
18395	  arg = canonicalize_type_argument (arg, tf_none);
18396	}
18397
18398      /* If ARG is a parameter pack or an expansion, we cannot unify
18399	 against it unless PARM is also a parameter pack.  */
18400      if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
18401	  && !template_parameter_pack_p (parm))
18402	return unify_parameter_pack_mismatch (explain_p, parm, arg);
18403
18404      /* If the argument deduction results is a METHOD_TYPE,
18405         then there is a problem.
18406         METHOD_TYPE doesn't map to any real C++ type the result of
18407	 the deduction can not be of that type.  */
18408      if (TREE_CODE (arg) == METHOD_TYPE)
18409	return unify_method_type_error (explain_p, arg);
18410
18411      TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
18412      return unify_success (explain_p);
18413
18414    case TEMPLATE_PARM_INDEX:
18415      tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
18416      if (error_operand_p (tparm))
18417	return unify_invalid (explain_p);
18418
18419      if (TEMPLATE_PARM_LEVEL (parm)
18420	  != template_decl_level (tparm))
18421	{
18422	  /* The PARM is not one we're trying to unify.  Just check
18423	     to see if it matches ARG.  */
18424	  int result = !(TREE_CODE (arg) == TREE_CODE (parm)
18425			 && cp_tree_equal (parm, arg));
18426	  if (result)
18427	    unify_expression_unequal (explain_p, parm, arg);
18428	  return result;
18429	}
18430
18431      idx = TEMPLATE_PARM_IDX (parm);
18432      targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
18433
18434      if (targ)
18435	{
18436	  int x = !cp_tree_equal (targ, arg);
18437	  if (x)
18438	    unify_inconsistency (explain_p, parm, targ, arg);
18439	  return x;
18440	}
18441
18442      /* [temp.deduct.type] If, in the declaration of a function template
18443	 with a non-type template-parameter, the non-type
18444	 template-parameter is used in an expression in the function
18445	 parameter-list and, if the corresponding template-argument is
18446	 deduced, the template-argument type shall match the type of the
18447	 template-parameter exactly, except that a template-argument
18448	 deduced from an array bound may be of any integral type.
18449	 The non-type parameter might use already deduced type parameters.  */
18450      tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
18451      if (!TREE_TYPE (arg))
18452	/* Template-parameter dependent expression.  Just accept it for now.
18453	   It will later be processed in convert_template_argument.  */
18454	;
18455      else if (same_type_p (TREE_TYPE (arg), tparm))
18456	/* OK */;
18457      else if ((strict & UNIFY_ALLOW_INTEGER)
18458	       && CP_INTEGRAL_TYPE_P (tparm))
18459	/* Convert the ARG to the type of PARM; the deduced non-type
18460	   template argument must exactly match the types of the
18461	   corresponding parameter.  */
18462	arg = fold (build_nop (tparm, arg));
18463      else if (uses_template_parms (tparm))
18464	/* We haven't deduced the type of this parameter yet.  Try again
18465	   later.  */
18466	return unify_success (explain_p);
18467      else
18468	return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
18469
18470      /* If ARG is a parameter pack or an expansion, we cannot unify
18471	 against it unless PARM is also a parameter pack.  */
18472      if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
18473	  && !TEMPLATE_PARM_PARAMETER_PACK (parm))
18474	return unify_parameter_pack_mismatch (explain_p, parm, arg);
18475
18476      arg = strip_typedefs_expr (arg);
18477      TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
18478      return unify_success (explain_p);
18479
18480    case PTRMEM_CST:
18481     {
18482	/* A pointer-to-member constant can be unified only with
18483	 another constant.  */
18484      if (TREE_CODE (arg) != PTRMEM_CST)
18485	return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
18486
18487      /* Just unify the class member. It would be useless (and possibly
18488	 wrong, depending on the strict flags) to unify also
18489	 PTRMEM_CST_CLASS, because we want to be sure that both parm and
18490	 arg refer to the same variable, even if through different
18491	 classes. For instance:
18492
18493	 struct A { int x; };
18494	 struct B : A { };
18495
18496	 Unification of &A::x and &B::x must succeed.  */
18497      return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
18498		    PTRMEM_CST_MEMBER (arg), strict, explain_p);
18499     }
18500
18501    case POINTER_TYPE:
18502      {
18503	if (!TYPE_PTR_P (arg))
18504	  return unify_type_mismatch (explain_p, parm, arg);
18505
18506	/* [temp.deduct.call]
18507
18508	   A can be another pointer or pointer to member type that can
18509	   be converted to the deduced A via a qualification
18510	   conversion (_conv.qual_).
18511
18512	   We pass down STRICT here rather than UNIFY_ALLOW_NONE.
18513	   This will allow for additional cv-qualification of the
18514	   pointed-to types if appropriate.  */
18515
18516	if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
18517	  /* The derived-to-base conversion only persists through one
18518	     level of pointers.  */
18519	  strict |= (strict_in & UNIFY_ALLOW_DERIVED);
18520
18521	return unify (tparms, targs, TREE_TYPE (parm),
18522		      TREE_TYPE (arg), strict, explain_p);
18523      }
18524
18525    case REFERENCE_TYPE:
18526      if (TREE_CODE (arg) != REFERENCE_TYPE)
18527	return unify_type_mismatch (explain_p, parm, arg);
18528      return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18529		    strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
18530
18531    case ARRAY_TYPE:
18532      if (TREE_CODE (arg) != ARRAY_TYPE)
18533	return unify_type_mismatch (explain_p, parm, arg);
18534      if ((TYPE_DOMAIN (parm) == NULL_TREE)
18535	  != (TYPE_DOMAIN (arg) == NULL_TREE))
18536	return unify_type_mismatch (explain_p, parm, arg);
18537      RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18538			       strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
18539      if (TYPE_DOMAIN (parm) != NULL_TREE)
18540	return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
18541				   TYPE_DOMAIN (arg), explain_p);
18542      return unify_success (explain_p);
18543
18544    case REAL_TYPE:
18545    case COMPLEX_TYPE:
18546    case VECTOR_TYPE:
18547    case INTEGER_TYPE:
18548    case BOOLEAN_TYPE:
18549    case ENUMERAL_TYPE:
18550    case VOID_TYPE:
18551    case NULLPTR_TYPE:
18552      if (TREE_CODE (arg) != TREE_CODE (parm))
18553	return unify_type_mismatch (explain_p, parm, arg);
18554
18555      /* We have already checked cv-qualification at the top of the
18556	 function.  */
18557      if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
18558	return unify_type_mismatch (explain_p, parm, arg);
18559
18560      /* As far as unification is concerned, this wins.	 Later checks
18561	 will invalidate it if necessary.  */
18562      return unify_success (explain_p);
18563
18564      /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
18565      /* Type INTEGER_CST can come from ordinary constant template args.  */
18566    case INTEGER_CST:
18567      while (TREE_CODE (arg) == NOP_EXPR)
18568	arg = TREE_OPERAND (arg, 0);
18569
18570      if (TREE_CODE (arg) != INTEGER_CST)
18571	return unify_template_argument_mismatch (explain_p, parm, arg);
18572      return (tree_int_cst_equal (parm, arg)
18573	      ? unify_success (explain_p)
18574	      : unify_template_argument_mismatch (explain_p, parm, arg));
18575
18576    case TREE_VEC:
18577      {
18578	int i, len, argslen;
18579	int parm_variadic_p = 0;
18580
18581	if (TREE_CODE (arg) != TREE_VEC)
18582	  return unify_template_argument_mismatch (explain_p, parm, arg);
18583
18584	len = TREE_VEC_LENGTH (parm);
18585	argslen = TREE_VEC_LENGTH (arg);
18586
18587	/* Check for pack expansions in the parameters.  */
18588	for (i = 0; i < len; ++i)
18589	  {
18590	    if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
18591	      {
18592		if (i == len - 1)
18593		  /* We can unify against something with a trailing
18594		     parameter pack.  */
18595		  parm_variadic_p = 1;
18596		else
18597		  /* [temp.deduct.type]/9: If the template argument list of
18598		     P contains a pack expansion that is not the last
18599		     template argument, the entire template argument list
18600		     is a non-deduced context.  */
18601		  return unify_success (explain_p);
18602	      }
18603	  }
18604
18605        /* If we don't have enough arguments to satisfy the parameters
18606           (not counting the pack expression at the end), or we have
18607           too many arguments for a parameter list that doesn't end in
18608           a pack expression, we can't unify.  */
18609	if (parm_variadic_p
18610	    ? argslen < len - parm_variadic_p
18611	    : argslen != len)
18612	  return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
18613
18614	/* Unify all of the parameters that precede the (optional)
18615	   pack expression.  */
18616	for (i = 0; i < len - parm_variadic_p; ++i)
18617	  {
18618	    RECUR_AND_CHECK_FAILURE (tparms, targs,
18619				     TREE_VEC_ELT (parm, i),
18620				     TREE_VEC_ELT (arg, i),
18621				     UNIFY_ALLOW_NONE, explain_p);
18622	  }
18623	if (parm_variadic_p)
18624	  return unify_pack_expansion (tparms, targs, parm, arg,
18625				       DEDUCE_EXACT,
18626				       /*subr=*/true, explain_p);
18627	return unify_success (explain_p);
18628      }
18629
18630    case RECORD_TYPE:
18631    case UNION_TYPE:
18632      if (TREE_CODE (arg) != TREE_CODE (parm))
18633	return unify_type_mismatch (explain_p, parm, arg);
18634
18635      if (TYPE_PTRMEMFUNC_P (parm))
18636	{
18637	  if (!TYPE_PTRMEMFUNC_P (arg))
18638	    return unify_type_mismatch (explain_p, parm, arg);
18639
18640	  return unify (tparms, targs,
18641			TYPE_PTRMEMFUNC_FN_TYPE (parm),
18642			TYPE_PTRMEMFUNC_FN_TYPE (arg),
18643			strict, explain_p);
18644	}
18645      else if (TYPE_PTRMEMFUNC_P (arg))
18646	return unify_type_mismatch (explain_p, parm, arg);
18647
18648      if (CLASSTYPE_TEMPLATE_INFO (parm))
18649	{
18650	  tree t = NULL_TREE;
18651
18652	  if (strict_in & UNIFY_ALLOW_DERIVED)
18653	    {
18654	      /* First, we try to unify the PARM and ARG directly.  */
18655	      t = try_class_unification (tparms, targs,
18656					 parm, arg, explain_p);
18657
18658	      if (!t)
18659		{
18660		  /* Fallback to the special case allowed in
18661		     [temp.deduct.call]:
18662
18663		       If P is a class, and P has the form
18664		       template-id, then A can be a derived class of
18665		       the deduced A.  Likewise, if P is a pointer to
18666		       a class of the form template-id, A can be a
18667		       pointer to a derived class pointed to by the
18668		       deduced A.  */
18669		  enum template_base_result r;
18670		  r = get_template_base (tparms, targs, parm, arg,
18671					 explain_p, &t);
18672
18673		  if (!t)
18674		    return unify_no_common_base (explain_p, r, parm, arg);
18675		}
18676	    }
18677	  else if (CLASSTYPE_TEMPLATE_INFO (arg)
18678		   && (CLASSTYPE_TI_TEMPLATE (parm)
18679		       == CLASSTYPE_TI_TEMPLATE (arg)))
18680	    /* Perhaps PARM is something like S<U> and ARG is S<int>.
18681	       Then, we should unify `int' and `U'.  */
18682	    t = arg;
18683	  else
18684	    /* There's no chance of unification succeeding.  */
18685	    return unify_type_mismatch (explain_p, parm, arg);
18686
18687	  return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
18688			CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
18689	}
18690      else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
18691	return unify_type_mismatch (explain_p, parm, arg);
18692      return unify_success (explain_p);
18693
18694    case METHOD_TYPE:
18695    case FUNCTION_TYPE:
18696      {
18697	unsigned int nargs;
18698	tree *args;
18699	tree a;
18700	unsigned int i;
18701
18702	if (TREE_CODE (arg) != TREE_CODE (parm))
18703	  return unify_type_mismatch (explain_p, parm, arg);
18704
18705	/* CV qualifications for methods can never be deduced, they must
18706	   match exactly.  We need to check them explicitly here,
18707	   because type_unification_real treats them as any other
18708	   cv-qualified parameter.  */
18709	if (TREE_CODE (parm) == METHOD_TYPE
18710	    && (!check_cv_quals_for_unify
18711		(UNIFY_ALLOW_NONE,
18712		 class_of_this_parm (arg),
18713		 class_of_this_parm (parm))))
18714	  return unify_cv_qual_mismatch (explain_p, parm, arg);
18715
18716	RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
18717				 TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
18718
18719	nargs = list_length (TYPE_ARG_TYPES (arg));
18720	args = XALLOCAVEC (tree, nargs);
18721	for (a = TYPE_ARG_TYPES (arg), i = 0;
18722	     a != NULL_TREE && a != void_list_node;
18723	     a = TREE_CHAIN (a), ++i)
18724	  args[i] = TREE_VALUE (a);
18725	nargs = i;
18726
18727	return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
18728				      args, nargs, 1, DEDUCE_EXACT,
18729				      LOOKUP_NORMAL, NULL, explain_p);
18730      }
18731
18732    case OFFSET_TYPE:
18733      /* Unify a pointer to member with a pointer to member function, which
18734	 deduces the type of the member as a function type. */
18735      if (TYPE_PTRMEMFUNC_P (arg))
18736	{
18737	  /* Check top-level cv qualifiers */
18738	  if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
18739	    return unify_cv_qual_mismatch (explain_p, parm, arg);
18740
18741	  RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18742				   TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
18743				   UNIFY_ALLOW_NONE, explain_p);
18744
18745	  /* Determine the type of the function we are unifying against. */
18746	  tree fntype = static_fn_type (arg);
18747
18748	  return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
18749	}
18750
18751      if (TREE_CODE (arg) != OFFSET_TYPE)
18752	return unify_type_mismatch (explain_p, parm, arg);
18753      RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18754			       TYPE_OFFSET_BASETYPE (arg),
18755			       UNIFY_ALLOW_NONE, explain_p);
18756      return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18757		    strict, explain_p);
18758
18759    case CONST_DECL:
18760      if (DECL_TEMPLATE_PARM_P (parm))
18761	return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
18762      if (arg != scalar_constant_value (parm))
18763	return unify_template_argument_mismatch (explain_p, parm, arg);
18764      return unify_success (explain_p);
18765
18766    case FIELD_DECL:
18767    case TEMPLATE_DECL:
18768      /* Matched cases are handled by the ARG == PARM test above.  */
18769      return unify_template_argument_mismatch (explain_p, parm, arg);
18770
18771    case VAR_DECL:
18772      /* A non-type template parameter that is a variable should be a
18773	 an integral constant, in which case, it whould have been
18774	 folded into its (constant) value. So we should not be getting
18775	 a variable here.  */
18776      gcc_unreachable ();
18777
18778    case TYPE_ARGUMENT_PACK:
18779    case NONTYPE_ARGUMENT_PACK:
18780      return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
18781		    ARGUMENT_PACK_ARGS (arg), strict, explain_p);
18782
18783    case TYPEOF_TYPE:
18784    case DECLTYPE_TYPE:
18785    case UNDERLYING_TYPE:
18786      /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
18787	 or UNDERLYING_TYPE nodes.  */
18788      return unify_success (explain_p);
18789
18790    case ERROR_MARK:
18791      /* Unification fails if we hit an error node.  */
18792      return unify_invalid (explain_p);
18793
18794    case INDIRECT_REF:
18795      if (REFERENCE_REF_P (parm))
18796	{
18797	  if (REFERENCE_REF_P (arg))
18798	    arg = TREE_OPERAND (arg, 0);
18799	  return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
18800			strict, explain_p);
18801	}
18802      /* FALLTHRU */
18803
18804    default:
18805      /* An unresolved overload is a nondeduced context.  */
18806      if (is_overloaded_fn (parm) || type_unknown_p (parm))
18807	return unify_success (explain_p);
18808      gcc_assert (EXPR_P (parm));
18809
18810      /* We must be looking at an expression.  This can happen with
18811	 something like:
18812
18813	   template <int I>
18814	   void foo(S<I>, S<I + 2>);
18815
18816	 This is a "nondeduced context":
18817
18818	   [deduct.type]
18819
18820	   The nondeduced contexts are:
18821
18822	   --A type that is a template-id in which one or more of
18823	     the template-arguments is an expression that references
18824	     a template-parameter.
18825
18826	 In these cases, we assume deduction succeeded, but don't
18827	 actually infer any unifications.  */
18828
18829      if (!uses_template_parms (parm)
18830	  && !template_args_equal (parm, arg))
18831	return unify_expression_unequal (explain_p, parm, arg);
18832      else
18833	return unify_success (explain_p);
18834    }
18835}
18836#undef RECUR_AND_CHECK_FAILURE
18837
18838/* Note that DECL can be defined in this translation unit, if
18839   required.  */
18840
18841static void
18842mark_definable (tree decl)
18843{
18844  tree clone;
18845  DECL_NOT_REALLY_EXTERN (decl) = 1;
18846  FOR_EACH_CLONE (clone, decl)
18847    DECL_NOT_REALLY_EXTERN (clone) = 1;
18848}
18849
18850/* Called if RESULT is explicitly instantiated, or is a member of an
18851   explicitly instantiated class.  */
18852
18853void
18854mark_decl_instantiated (tree result, int extern_p)
18855{
18856  SET_DECL_EXPLICIT_INSTANTIATION (result);
18857
18858  /* If this entity has already been written out, it's too late to
18859     make any modifications.  */
18860  if (TREE_ASM_WRITTEN (result))
18861    return;
18862
18863  /* For anonymous namespace we don't need to do anything.  */
18864  if (decl_anon_ns_mem_p (result))
18865    {
18866      gcc_assert (!TREE_PUBLIC (result));
18867      return;
18868    }
18869
18870  if (TREE_CODE (result) != FUNCTION_DECL)
18871    /* The TREE_PUBLIC flag for function declarations will have been
18872       set correctly by tsubst.  */
18873    TREE_PUBLIC (result) = 1;
18874
18875  /* This might have been set by an earlier implicit instantiation.  */
18876  DECL_COMDAT (result) = 0;
18877
18878  if (extern_p)
18879    DECL_NOT_REALLY_EXTERN (result) = 0;
18880  else
18881    {
18882      mark_definable (result);
18883      mark_needed (result);
18884      /* Always make artificials weak.  */
18885      if (DECL_ARTIFICIAL (result) && flag_weak)
18886	comdat_linkage (result);
18887      /* For WIN32 we also want to put explicit instantiations in
18888	 linkonce sections.  */
18889      else if (TREE_PUBLIC (result))
18890	maybe_make_one_only (result);
18891    }
18892
18893  /* If EXTERN_P, then this function will not be emitted -- unless
18894     followed by an explicit instantiation, at which point its linkage
18895     will be adjusted.  If !EXTERN_P, then this function will be
18896     emitted here.  In neither circumstance do we want
18897     import_export_decl to adjust the linkage.  */
18898  DECL_INTERFACE_KNOWN (result) = 1;
18899}
18900
18901/* Subroutine of more_specialized_fn: check whether TARGS is missing any
18902   important template arguments.  If any are missing, we check whether
18903   they're important by using error_mark_node for substituting into any
18904   args that were used for partial ordering (the ones between ARGS and END)
18905   and seeing if it bubbles up.  */
18906
18907static bool
18908check_undeduced_parms (tree targs, tree args, tree end)
18909{
18910  bool found = false;
18911  int i;
18912  for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
18913    if (TREE_VEC_ELT (targs, i) == NULL_TREE)
18914      {
18915	found = true;
18916	TREE_VEC_ELT (targs, i) = error_mark_node;
18917      }
18918  if (found)
18919    {
18920      tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
18921      if (substed == error_mark_node)
18922	return true;
18923    }
18924  return false;
18925}
18926
18927/* Given two function templates PAT1 and PAT2, return:
18928
18929   1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
18930   -1 if PAT2 is more specialized than PAT1.
18931   0 if neither is more specialized.
18932
18933   LEN indicates the number of parameters we should consider
18934   (defaulted parameters should not be considered).
18935
18936   The 1998 std underspecified function template partial ordering, and
18937   DR214 addresses the issue.  We take pairs of arguments, one from
18938   each of the templates, and deduce them against each other.  One of
18939   the templates will be more specialized if all the *other*
18940   template's arguments deduce against its arguments and at least one
18941   of its arguments *does* *not* deduce against the other template's
18942   corresponding argument.  Deduction is done as for class templates.
18943   The arguments used in deduction have reference and top level cv
18944   qualifiers removed.  Iff both arguments were originally reference
18945   types *and* deduction succeeds in both directions, an lvalue reference
18946   wins against an rvalue reference and otherwise the template
18947   with the more cv-qualified argument wins for that pairing (if
18948   neither is more cv-qualified, they both are equal).  Unlike regular
18949   deduction, after all the arguments have been deduced in this way,
18950   we do *not* verify the deduced template argument values can be
18951   substituted into non-deduced contexts.
18952
18953   The logic can be a bit confusing here, because we look at deduce1 and
18954   targs1 to see if pat2 is at least as specialized, and vice versa; if we
18955   can find template arguments for pat1 to make arg1 look like arg2, that
18956   means that arg2 is at least as specialized as arg1.  */
18957
18958int
18959more_specialized_fn (tree pat1, tree pat2, int len)
18960{
18961  tree decl1 = DECL_TEMPLATE_RESULT (pat1);
18962  tree decl2 = DECL_TEMPLATE_RESULT (pat2);
18963  tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
18964  tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
18965  tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
18966  tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
18967  tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
18968  tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
18969  tree origs1, origs2;
18970  bool lose1 = false;
18971  bool lose2 = false;
18972
18973  /* Remove the this parameter from non-static member functions.  If
18974     one is a non-static member function and the other is not a static
18975     member function, remove the first parameter from that function
18976     also.  This situation occurs for operator functions where we
18977     locate both a member function (with this pointer) and non-member
18978     operator (with explicit first operand).  */
18979  if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
18980    {
18981      len--; /* LEN is the number of significant arguments for DECL1 */
18982      args1 = TREE_CHAIN (args1);
18983      if (!DECL_STATIC_FUNCTION_P (decl2))
18984	args2 = TREE_CHAIN (args2);
18985    }
18986  else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
18987    {
18988      args2 = TREE_CHAIN (args2);
18989      if (!DECL_STATIC_FUNCTION_P (decl1))
18990	{
18991	  len--;
18992	  args1 = TREE_CHAIN (args1);
18993	}
18994    }
18995
18996  /* If only one is a conversion operator, they are unordered.  */
18997  if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
18998    return 0;
18999
19000  /* Consider the return type for a conversion function */
19001  if (DECL_CONV_FN_P (decl1))
19002    {
19003      args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
19004      args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
19005      len++;
19006    }
19007
19008  processing_template_decl++;
19009
19010  origs1 = args1;
19011  origs2 = args2;
19012
19013  while (len--
19014	 /* Stop when an ellipsis is seen.  */
19015	 && args1 != NULL_TREE && args2 != NULL_TREE)
19016    {
19017      tree arg1 = TREE_VALUE (args1);
19018      tree arg2 = TREE_VALUE (args2);
19019      int deduce1, deduce2;
19020      int quals1 = -1;
19021      int quals2 = -1;
19022      int ref1 = 0;
19023      int ref2 = 0;
19024
19025      if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
19026          && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
19027        {
19028          /* When both arguments are pack expansions, we need only
19029             unify the patterns themselves.  */
19030          arg1 = PACK_EXPANSION_PATTERN (arg1);
19031          arg2 = PACK_EXPANSION_PATTERN (arg2);
19032
19033          /* This is the last comparison we need to do.  */
19034          len = 0;
19035        }
19036
19037      if (TREE_CODE (arg1) == REFERENCE_TYPE)
19038	{
19039	  ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
19040	  arg1 = TREE_TYPE (arg1);
19041	  quals1 = cp_type_quals (arg1);
19042	}
19043
19044      if (TREE_CODE (arg2) == REFERENCE_TYPE)
19045	{
19046	  ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
19047	  arg2 = TREE_TYPE (arg2);
19048	  quals2 = cp_type_quals (arg2);
19049	}
19050
19051      arg1 = TYPE_MAIN_VARIANT (arg1);
19052      arg2 = TYPE_MAIN_VARIANT (arg2);
19053
19054      if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
19055        {
19056          int i, len2 = remaining_arguments (args2);
19057          tree parmvec = make_tree_vec (1);
19058          tree argvec = make_tree_vec (len2);
19059          tree ta = args2;
19060
19061          /* Setup the parameter vector, which contains only ARG1.  */
19062          TREE_VEC_ELT (parmvec, 0) = arg1;
19063
19064          /* Setup the argument vector, which contains the remaining
19065             arguments.  */
19066          for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
19067            TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
19068
19069          deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
19070					   argvec, DEDUCE_EXACT,
19071					   /*subr=*/true, /*explain_p=*/false)
19072		     == 0);
19073
19074          /* We cannot deduce in the other direction, because ARG1 is
19075             a pack expansion but ARG2 is not.  */
19076          deduce2 = 0;
19077        }
19078      else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
19079        {
19080          int i, len1 = remaining_arguments (args1);
19081          tree parmvec = make_tree_vec (1);
19082          tree argvec = make_tree_vec (len1);
19083          tree ta = args1;
19084
19085          /* Setup the parameter vector, which contains only ARG1.  */
19086          TREE_VEC_ELT (parmvec, 0) = arg2;
19087
19088          /* Setup the argument vector, which contains the remaining
19089             arguments.  */
19090          for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
19091            TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
19092
19093          deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
19094					   argvec, DEDUCE_EXACT,
19095					   /*subr=*/true, /*explain_p=*/false)
19096		     == 0);
19097
19098          /* We cannot deduce in the other direction, because ARG2 is
19099             a pack expansion but ARG1 is not.*/
19100          deduce1 = 0;
19101        }
19102
19103      else
19104        {
19105          /* The normal case, where neither argument is a pack
19106             expansion.  */
19107          deduce1 = (unify (tparms1, targs1, arg1, arg2,
19108			    UNIFY_ALLOW_NONE, /*explain_p=*/false)
19109		     == 0);
19110          deduce2 = (unify (tparms2, targs2, arg2, arg1,
19111			    UNIFY_ALLOW_NONE, /*explain_p=*/false)
19112		     == 0);
19113        }
19114
19115      /* If we couldn't deduce arguments for tparms1 to make arg1 match
19116	 arg2, then arg2 is not as specialized as arg1.  */
19117      if (!deduce1)
19118	lose2 = true;
19119      if (!deduce2)
19120	lose1 = true;
19121
19122      /* "If, for a given type, deduction succeeds in both directions
19123	 (i.e., the types are identical after the transformations above)
19124	 and both P and A were reference types (before being replaced with
19125	 the type referred to above):
19126	 - if the type from the argument template was an lvalue reference and
19127	 the type from the parameter template was not, the argument type is
19128	 considered to be more specialized than the other; otherwise,
19129	 - if the type from the argument template is more cv-qualified
19130	 than the type from the parameter template (as described above),
19131	 the argument type is considered to be more specialized than the other;
19132	 otherwise,
19133	 - neither type is more specialized than the other."  */
19134
19135      if (deduce1 && deduce2)
19136	{
19137	  if (ref1 && ref2 && ref1 != ref2)
19138	    {
19139	      if (ref1 > ref2)
19140		lose1 = true;
19141	      else
19142		lose2 = true;
19143	    }
19144	  else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
19145	    {
19146	      if ((quals1 & quals2) == quals2)
19147		lose2 = true;
19148	      if ((quals1 & quals2) == quals1)
19149		lose1 = true;
19150	    }
19151	}
19152
19153      if (lose1 && lose2)
19154	/* We've failed to deduce something in either direction.
19155	   These must be unordered.  */
19156	break;
19157
19158      if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
19159          || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
19160        /* We have already processed all of the arguments in our
19161           handing of the pack expansion type.  */
19162        len = 0;
19163
19164      args1 = TREE_CHAIN (args1);
19165      args2 = TREE_CHAIN (args2);
19166    }
19167
19168  /* "In most cases, all template parameters must have values in order for
19169     deduction to succeed, but for partial ordering purposes a template
19170     parameter may remain without a value provided it is not used in the
19171     types being used for partial ordering."
19172
19173     Thus, if we are missing any of the targs1 we need to substitute into
19174     origs1, then pat2 is not as specialized as pat1.  This can happen when
19175     there is a nondeduced context.  */
19176  if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
19177    lose2 = true;
19178  if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
19179    lose1 = true;
19180
19181  processing_template_decl--;
19182
19183  /* All things being equal, if the next argument is a pack expansion
19184     for one function but not for the other, prefer the
19185     non-variadic function.  FIXME this is bogus; see c++/41958.  */
19186  if (lose1 == lose2
19187      && args1 && TREE_VALUE (args1)
19188      && args2 && TREE_VALUE (args2))
19189    {
19190      lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
19191      lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
19192    }
19193
19194  if (lose1 == lose2)
19195    return 0;
19196  else if (!lose1)
19197    return 1;
19198  else
19199    return -1;
19200}
19201
19202/* Determine which of two partial specializations of TMPL is more
19203   specialized.
19204
19205   PAT1 is a TREE_LIST whose TREE_VALUE is the TEMPLATE_DECL corresponding
19206   to the first partial specialization.  The TREE_PURPOSE is the
19207   innermost set of template parameters for the partial
19208   specialization.  PAT2 is similar, but for the second template.
19209
19210   Return 1 if the first partial specialization is more specialized;
19211   -1 if the second is more specialized; 0 if neither is more
19212   specialized.
19213
19214   See [temp.class.order] for information about determining which of
19215   two templates is more specialized.  */
19216
19217static int
19218more_specialized_partial_spec (tree tmpl, tree pat1, tree pat2)
19219{
19220  tree targs;
19221  int winner = 0;
19222  bool any_deductions = false;
19223
19224  tree tmpl1 = TREE_VALUE (pat1);
19225  tree tmpl2 = TREE_VALUE (pat2);
19226  tree parms1 = DECL_INNERMOST_TEMPLATE_PARMS (tmpl1);
19227  tree parms2 = DECL_INNERMOST_TEMPLATE_PARMS (tmpl2);
19228  tree specargs1 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl1)));
19229  tree specargs2 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl2)));
19230
19231  /* Just like what happens for functions, if we are ordering between
19232     different template specializations, we may encounter dependent
19233     types in the arguments, and we need our dependency check functions
19234     to behave correctly.  */
19235  ++processing_template_decl;
19236  targs = get_partial_spec_bindings (tmpl, parms1, specargs1, specargs2);
19237  if (targs)
19238    {
19239      --winner;
19240      any_deductions = true;
19241    }
19242
19243  targs = get_partial_spec_bindings (tmpl, parms2, specargs2, specargs1);
19244  if (targs)
19245    {
19246      ++winner;
19247      any_deductions = true;
19248    }
19249  --processing_template_decl;
19250
19251  /* In the case of a tie where at least one of the templates
19252     has a parameter pack at the end, the template with the most
19253     non-packed parameters wins.  */
19254  if (winner == 0
19255      && any_deductions
19256      && (template_args_variadic_p (TREE_PURPOSE (pat1))
19257          || template_args_variadic_p (TREE_PURPOSE (pat2))))
19258    {
19259      tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
19260      tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
19261      int len1 = TREE_VEC_LENGTH (args1);
19262      int len2 = TREE_VEC_LENGTH (args2);
19263
19264      /* We don't count the pack expansion at the end.  */
19265      if (template_args_variadic_p (TREE_PURPOSE (pat1)))
19266        --len1;
19267      if (template_args_variadic_p (TREE_PURPOSE (pat2)))
19268        --len2;
19269
19270      if (len1 > len2)
19271        return 1;
19272      else if (len1 < len2)
19273        return -1;
19274    }
19275
19276  return winner;
19277}
19278
19279/* Return the template arguments that will produce the function signature
19280   DECL from the function template FN, with the explicit template
19281   arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
19282   also match.  Return NULL_TREE if no satisfactory arguments could be
19283   found.  */
19284
19285static tree
19286get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
19287{
19288  int ntparms = DECL_NTPARMS (fn);
19289  tree targs = make_tree_vec (ntparms);
19290  tree decl_type = TREE_TYPE (decl);
19291  tree decl_arg_types;
19292  tree *args;
19293  unsigned int nargs, ix;
19294  tree arg;
19295
19296  gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
19297
19298  /* Never do unification on the 'this' parameter.  */
19299  decl_arg_types = skip_artificial_parms_for (decl,
19300					      TYPE_ARG_TYPES (decl_type));
19301
19302  nargs = list_length (decl_arg_types);
19303  args = XALLOCAVEC (tree, nargs);
19304  for (arg = decl_arg_types, ix = 0;
19305       arg != NULL_TREE && arg != void_list_node;
19306       arg = TREE_CHAIN (arg), ++ix)
19307    args[ix] = TREE_VALUE (arg);
19308
19309  if (fn_type_unification (fn, explicit_args, targs,
19310			   args, ix,
19311			   (check_rettype || DECL_CONV_FN_P (fn)
19312			    ? TREE_TYPE (decl_type) : NULL_TREE),
19313			   DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false,
19314			   /*decltype*/false)
19315      == error_mark_node)
19316    return NULL_TREE;
19317
19318  return targs;
19319}
19320
19321/* Return the innermost template arguments that, when applied to a partial
19322   specialization of TMPL whose innermost template parameters are
19323   TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
19324   ARGS.
19325
19326   For example, suppose we have:
19327
19328     template <class T, class U> struct S {};
19329     template <class T> struct S<T*, int> {};
19330
19331   Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
19332   {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
19333   int}.  The resulting vector will be {double}, indicating that `T'
19334   is bound to `double'.  */
19335
19336static tree
19337get_partial_spec_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
19338{
19339  int i, ntparms = TREE_VEC_LENGTH (tparms);
19340  tree deduced_args;
19341  tree innermost_deduced_args;
19342
19343  innermost_deduced_args = make_tree_vec (ntparms);
19344  if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
19345    {
19346      deduced_args = copy_node (args);
19347      SET_TMPL_ARGS_LEVEL (deduced_args,
19348			   TMPL_ARGS_DEPTH (deduced_args),
19349			   innermost_deduced_args);
19350    }
19351  else
19352    deduced_args = innermost_deduced_args;
19353
19354  if (unify (tparms, deduced_args,
19355	     INNERMOST_TEMPLATE_ARGS (spec_args),
19356	     INNERMOST_TEMPLATE_ARGS (args),
19357	     UNIFY_ALLOW_NONE, /*explain_p=*/false))
19358    return NULL_TREE;
19359
19360  for (i =  0; i < ntparms; ++i)
19361    if (! TREE_VEC_ELT (innermost_deduced_args, i))
19362      return NULL_TREE;
19363
19364  /* Verify that nondeduced template arguments agree with the type
19365     obtained from argument deduction.
19366
19367     For example:
19368
19369       struct A { typedef int X; };
19370       template <class T, class U> struct C {};
19371       template <class T> struct C<T, typename T::X> {};
19372
19373     Then with the instantiation `C<A, int>', we can deduce that
19374     `T' is `A' but unify () does not check whether `typename T::X'
19375     is `int'.  */
19376  spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
19377  spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19378				     spec_args, tmpl,
19379				     tf_none, false, false);
19380  if (spec_args == error_mark_node
19381      /* We only need to check the innermost arguments; the other
19382	 arguments will always agree.  */
19383      || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
19384			      INNERMOST_TEMPLATE_ARGS (args)))
19385    return NULL_TREE;
19386
19387  /* Now that we have bindings for all of the template arguments,
19388     ensure that the arguments deduced for the template template
19389     parameters have compatible template parameter lists.  See the use
19390     of template_template_parm_bindings_ok_p in fn_type_unification
19391     for more information.  */
19392  if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
19393    return NULL_TREE;
19394
19395  return deduced_args;
19396}
19397
19398/* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
19399   Return the TREE_LIST node with the most specialized template, if
19400   any.  If there is no most specialized template, the error_mark_node
19401   is returned.
19402
19403   Note that this function does not look at, or modify, the
19404   TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
19405   returned is one of the elements of INSTANTIATIONS, callers may
19406   store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
19407   and retrieve it from the value returned.  */
19408
19409tree
19410most_specialized_instantiation (tree templates)
19411{
19412  tree fn, champ;
19413
19414  ++processing_template_decl;
19415
19416  champ = templates;
19417  for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
19418    {
19419      int fate = 0;
19420
19421      if (get_bindings (TREE_VALUE (champ),
19422			DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
19423			NULL_TREE, /*check_ret=*/true))
19424	fate--;
19425
19426      if (get_bindings (TREE_VALUE (fn),
19427			DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
19428			NULL_TREE, /*check_ret=*/true))
19429	fate++;
19430
19431      if (fate == -1)
19432	champ = fn;
19433      else if (!fate)
19434	{
19435	  /* Equally specialized, move to next function.  If there
19436	     is no next function, nothing's most specialized.  */
19437	  fn = TREE_CHAIN (fn);
19438	  champ = fn;
19439	  if (!fn)
19440	    break;
19441	}
19442    }
19443
19444  if (champ)
19445    /* Now verify that champ is better than everything earlier in the
19446       instantiation list.  */
19447    for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
19448      if (get_bindings (TREE_VALUE (champ),
19449			DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
19450			NULL_TREE, /*check_ret=*/true)
19451	  || !get_bindings (TREE_VALUE (fn),
19452			    DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
19453			    NULL_TREE, /*check_ret=*/true))
19454	{
19455	  champ = NULL_TREE;
19456	  break;
19457	}
19458
19459  processing_template_decl--;
19460
19461  if (!champ)
19462    return error_mark_node;
19463
19464  return champ;
19465}
19466
19467/* If DECL is a specialization of some template, return the most
19468   general such template.  Otherwise, returns NULL_TREE.
19469
19470   For example, given:
19471
19472     template <class T> struct S { template <class U> void f(U); };
19473
19474   if TMPL is `template <class U> void S<int>::f(U)' this will return
19475   the full template.  This function will not trace past partial
19476   specializations, however.  For example, given in addition:
19477
19478     template <class T> struct S<T*> { template <class U> void f(U); };
19479
19480   if TMPL is `template <class U> void S<int*>::f(U)' this will return
19481   `template <class T> template <class U> S<T*>::f(U)'.  */
19482
19483tree
19484most_general_template (tree decl)
19485{
19486  if (TREE_CODE (decl) != TEMPLATE_DECL)
19487    {
19488      if (tree tinfo = get_template_info (decl))
19489	decl = TI_TEMPLATE (tinfo);
19490      /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
19491	 template friend, or a FIELD_DECL for a capture pack.  */
19492      if (TREE_CODE (decl) != TEMPLATE_DECL)
19493	return NULL_TREE;
19494    }
19495
19496  /* Look for more and more general templates.  */
19497  while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
19498    {
19499      /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
19500	 (See cp-tree.h for details.)  */
19501      if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
19502	break;
19503
19504      if (CLASS_TYPE_P (TREE_TYPE (decl))
19505	  && !TYPE_DECL_ALIAS_P (TYPE_NAME (TREE_TYPE (decl)))
19506	  && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
19507	break;
19508
19509      /* Stop if we run into an explicitly specialized class template.  */
19510      if (!DECL_NAMESPACE_SCOPE_P (decl)
19511	  && DECL_CONTEXT (decl)
19512	  && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
19513	break;
19514
19515      decl = DECL_TI_TEMPLATE (decl);
19516    }
19517
19518  return decl;
19519}
19520
19521/* True iff the TEMPLATE_DECL tmpl is a partial specialization.  */
19522
19523static bool
19524partial_specialization_p (tree tmpl)
19525{
19526  /* Any specialization has DECL_TEMPLATE_SPECIALIZATION.  */
19527  if (!DECL_TEMPLATE_SPECIALIZATION (tmpl))
19528    return false;
19529  if (!VAR_P (DECL_TEMPLATE_RESULT (tmpl)))
19530    return false;
19531  tree t = DECL_TI_TEMPLATE (tmpl);
19532  /* A specialization that fully specializes one of the containing classes is
19533     not a partial specialization.  */
19534  return (list_length (DECL_TEMPLATE_PARMS (tmpl))
19535	  == list_length (DECL_TEMPLATE_PARMS (t)));
19536}
19537
19538/* If TMPL is a partial specialization, return the arguments for its primary
19539   template.  */
19540
19541static tree
19542impartial_args (tree tmpl, tree args)
19543{
19544  if (!partial_specialization_p (tmpl))
19545    return args;
19546
19547  /* If TMPL is a partial specialization, we need to substitute to get
19548     the args for the primary template.  */
19549  return tsubst_template_args (DECL_TI_ARGS (tmpl), args,
19550			       tf_warning_or_error, tmpl);
19551}
19552
19553/* Return the most specialized of the template partial specializations
19554   which can produce TARGET, a specialization of some class or variable
19555   template.  The value returned is actually a TREE_LIST; the TREE_VALUE is
19556   a TEMPLATE_DECL node corresponding to the partial specialization, while
19557   the TREE_PURPOSE is the set of template arguments that must be
19558   substituted into the template pattern in order to generate TARGET.
19559
19560   If the choice of partial specialization is ambiguous, a diagnostic
19561   is issued, and the error_mark_node is returned.  If there are no
19562   partial specializations matching TARGET, then NULL_TREE is
19563   returned, indicating that the primary template should be used.  */
19564
19565static tree
19566most_specialized_partial_spec (tree target, tsubst_flags_t complain)
19567{
19568  tree list = NULL_TREE;
19569  tree t;
19570  tree champ;
19571  int fate;
19572  bool ambiguous_p;
19573  tree outer_args = NULL_TREE;
19574  tree tmpl, args;
19575
19576  if (TYPE_P (target))
19577    {
19578      tree tinfo = CLASSTYPE_TEMPLATE_INFO (target);
19579      tmpl = TI_TEMPLATE (tinfo);
19580      args = TI_ARGS (tinfo);
19581    }
19582  else if (TREE_CODE (target) == TEMPLATE_ID_EXPR)
19583    {
19584      tmpl = TREE_OPERAND (target, 0);
19585      args = TREE_OPERAND (target, 1);
19586    }
19587  else if (VAR_P (target))
19588    {
19589      tree tinfo = DECL_TEMPLATE_INFO (target);
19590      tmpl = TI_TEMPLATE (tinfo);
19591      args = TI_ARGS (tinfo);
19592    }
19593  else
19594    gcc_unreachable ();
19595
19596  tree main_tmpl = most_general_template (tmpl);
19597
19598  /* For determining which partial specialization to use, only the
19599     innermost args are interesting.  */
19600  if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
19601    {
19602      outer_args = strip_innermost_template_args (args, 1);
19603      args = INNERMOST_TEMPLATE_ARGS (args);
19604    }
19605
19606  for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
19607    {
19608      tree partial_spec_args;
19609      tree spec_args;
19610      tree spec_tmpl = TREE_VALUE (t);
19611
19612      partial_spec_args = TREE_PURPOSE (t);
19613
19614      ++processing_template_decl;
19615
19616      if (outer_args)
19617	{
19618	  /* Discard the outer levels of args, and then substitute in the
19619	     template args from the enclosing class.  */
19620	  partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
19621	  partial_spec_args = tsubst_template_args
19622	    (partial_spec_args, outer_args, tf_none, NULL_TREE);
19623
19624	  /* And the same for the partial specialization TEMPLATE_DECL.  */
19625	  spec_tmpl = tsubst (spec_tmpl, outer_args, tf_none, NULL_TREE);
19626	}
19627
19628      partial_spec_args =
19629	  coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19630				 partial_spec_args,
19631				 tmpl, tf_none,
19632				 /*require_all_args=*/true,
19633				 /*use_default_args=*/true);
19634
19635      --processing_template_decl;
19636
19637      if (partial_spec_args == error_mark_node)
19638	return error_mark_node;
19639      if (spec_tmpl == error_mark_node)
19640	return error_mark_node;
19641
19642      tree parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
19643      spec_args = get_partial_spec_bindings (tmpl, parms,
19644				      partial_spec_args,
19645				      args);
19646      if (spec_args)
19647	{
19648	  if (outer_args)
19649	    spec_args = add_to_template_args (outer_args, spec_args);
19650	  list = tree_cons (spec_args, TREE_VALUE (t), list);
19651	  TREE_TYPE (list) = TREE_TYPE (t);
19652	}
19653    }
19654
19655  if (! list)
19656    return NULL_TREE;
19657
19658  ambiguous_p = false;
19659  t = list;
19660  champ = t;
19661  t = TREE_CHAIN (t);
19662  for (; t; t = TREE_CHAIN (t))
19663    {
19664      fate = more_specialized_partial_spec (tmpl, champ, t);
19665      if (fate == 1)
19666	;
19667      else
19668	{
19669	  if (fate == 0)
19670	    {
19671	      t = TREE_CHAIN (t);
19672	      if (! t)
19673		{
19674		  ambiguous_p = true;
19675		  break;
19676		}
19677	    }
19678	  champ = t;
19679	}
19680    }
19681
19682  if (!ambiguous_p)
19683    for (t = list; t && t != champ; t = TREE_CHAIN (t))
19684      {
19685	fate = more_specialized_partial_spec (tmpl, champ, t);
19686	if (fate != 1)
19687	  {
19688	    ambiguous_p = true;
19689	    break;
19690	  }
19691      }
19692
19693  if (ambiguous_p)
19694    {
19695      const char *str;
19696      char *spaces = NULL;
19697      if (!(complain & tf_error))
19698	return error_mark_node;
19699      if (TYPE_P (target))
19700	error ("ambiguous template instantiation for %q#T", target);
19701      else
19702	error ("ambiguous template instantiation for %q#D", target);
19703      str = ngettext ("candidate is:", "candidates are:", list_length (list));
19704      for (t = list; t; t = TREE_CHAIN (t))
19705        {
19706	  tree subst = build_tree_list (TREE_VALUE (t), TREE_PURPOSE (t));
19707          inform (DECL_SOURCE_LOCATION (TREE_VALUE (t)),
19708		  "%s %#S", spaces ? spaces : str, subst);
19709          spaces = spaces ? spaces : get_spaces (str);
19710        }
19711      free (spaces);
19712      return error_mark_node;
19713    }
19714
19715  return champ;
19716}
19717
19718/* Explicitly instantiate DECL.  */
19719
19720void
19721do_decl_instantiation (tree decl, tree storage)
19722{
19723  tree result = NULL_TREE;
19724  int extern_p = 0;
19725
19726  if (!decl || decl == error_mark_node)
19727    /* An error occurred, for which grokdeclarator has already issued
19728       an appropriate message.  */
19729    return;
19730  else if (! DECL_LANG_SPECIFIC (decl))
19731    {
19732      error ("explicit instantiation of non-template %q#D", decl);
19733      return;
19734    }
19735
19736  bool var_templ = (DECL_TEMPLATE_INFO (decl)
19737                    && variable_template_p (DECL_TI_TEMPLATE (decl)));
19738
19739  if (VAR_P (decl) && !var_templ)
19740    {
19741      /* There is an asymmetry here in the way VAR_DECLs and
19742	 FUNCTION_DECLs are handled by grokdeclarator.  In the case of
19743	 the latter, the DECL we get back will be marked as a
19744	 template instantiation, and the appropriate
19745	 DECL_TEMPLATE_INFO will be set up.  This does not happen for
19746	 VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
19747	 should handle VAR_DECLs as it currently handles
19748	 FUNCTION_DECLs.  */
19749      if (!DECL_CLASS_SCOPE_P (decl))
19750	{
19751	  error ("%qD is not a static data member of a class template", decl);
19752	  return;
19753	}
19754      result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
19755      if (!result || !VAR_P (result))
19756	{
19757	  error ("no matching template for %qD found", decl);
19758	  return;
19759	}
19760      if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
19761	{
19762	  error ("type %qT for explicit instantiation %qD does not match "
19763		 "declared type %qT", TREE_TYPE (result), decl,
19764		 TREE_TYPE (decl));
19765	  return;
19766	}
19767    }
19768  else if (TREE_CODE (decl) != FUNCTION_DECL && !var_templ)
19769    {
19770      error ("explicit instantiation of %q#D", decl);
19771      return;
19772    }
19773  else
19774    result = decl;
19775
19776  /* Check for various error cases.  Note that if the explicit
19777     instantiation is valid the RESULT will currently be marked as an
19778     *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
19779     until we get here.  */
19780
19781  if (DECL_TEMPLATE_SPECIALIZATION (result))
19782    {
19783      /* DR 259 [temp.spec].
19784
19785	 Both an explicit instantiation and a declaration of an explicit
19786	 specialization shall not appear in a program unless the explicit
19787	 instantiation follows a declaration of the explicit specialization.
19788
19789	 For a given set of template parameters, if an explicit
19790	 instantiation of a template appears after a declaration of an
19791	 explicit specialization for that template, the explicit
19792	 instantiation has no effect.  */
19793      return;
19794    }
19795  else if (DECL_EXPLICIT_INSTANTIATION (result))
19796    {
19797      /* [temp.spec]
19798
19799	 No program shall explicitly instantiate any template more
19800	 than once.
19801
19802	 We check DECL_NOT_REALLY_EXTERN so as not to complain when
19803	 the first instantiation was `extern' and the second is not,
19804	 and EXTERN_P for the opposite case.  */
19805      if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
19806	permerror (input_location, "duplicate explicit instantiation of %q#D", result);
19807      /* If an "extern" explicit instantiation follows an ordinary
19808	 explicit instantiation, the template is instantiated.  */
19809      if (extern_p)
19810	return;
19811    }
19812  else if (!DECL_IMPLICIT_INSTANTIATION (result))
19813    {
19814      error ("no matching template for %qD found", result);
19815      return;
19816    }
19817  else if (!DECL_TEMPLATE_INFO (result))
19818    {
19819      permerror (input_location, "explicit instantiation of non-template %q#D", result);
19820      return;
19821    }
19822
19823  if (storage == NULL_TREE)
19824    ;
19825  else if (storage == ridpointers[(int) RID_EXTERN])
19826    {
19827      if (!in_system_header_at (input_location) && (cxx_dialect == cxx98))
19828	pedwarn (input_location, OPT_Wpedantic,
19829		 "ISO C++ 1998 forbids the use of %<extern%> on explicit "
19830		 "instantiations");
19831      extern_p = 1;
19832    }
19833  else
19834    error ("storage class %qD applied to template instantiation", storage);
19835
19836  check_explicit_instantiation_namespace (result);
19837  mark_decl_instantiated (result, extern_p);
19838  if (! extern_p)
19839    instantiate_decl (result, /*defer_ok=*/1,
19840		      /*expl_inst_class_mem_p=*/false);
19841}
19842
19843static void
19844mark_class_instantiated (tree t, int extern_p)
19845{
19846  SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
19847  SET_CLASSTYPE_INTERFACE_KNOWN (t);
19848  CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
19849  TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
19850  if (! extern_p)
19851    {
19852      CLASSTYPE_DEBUG_REQUESTED (t) = 1;
19853      rest_of_type_compilation (t, 1);
19854    }
19855}
19856
19857/* Called from do_type_instantiation through binding_table_foreach to
19858   do recursive instantiation for the type bound in ENTRY.  */
19859static void
19860bt_instantiate_type_proc (binding_entry entry, void *data)
19861{
19862  tree storage = *(tree *) data;
19863
19864  if (MAYBE_CLASS_TYPE_P (entry->type)
19865      && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
19866    do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
19867}
19868
19869/* Called from do_type_instantiation to instantiate a member
19870   (a member function or a static member variable) of an
19871   explicitly instantiated class template.  */
19872static void
19873instantiate_class_member (tree decl, int extern_p)
19874{
19875  mark_decl_instantiated (decl, extern_p);
19876  if (! extern_p)
19877    instantiate_decl (decl, /*defer_ok=*/1,
19878		      /*expl_inst_class_mem_p=*/true);
19879}
19880
19881/* Perform an explicit instantiation of template class T.  STORAGE, if
19882   non-null, is the RID for extern, inline or static.  COMPLAIN is
19883   nonzero if this is called from the parser, zero if called recursively,
19884   since the standard is unclear (as detailed below).  */
19885
19886void
19887do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
19888{
19889  int extern_p = 0;
19890  int nomem_p = 0;
19891  int static_p = 0;
19892  int previous_instantiation_extern_p = 0;
19893
19894  if (TREE_CODE (t) == TYPE_DECL)
19895    t = TREE_TYPE (t);
19896
19897  if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
19898    {
19899      tree tmpl =
19900	(TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
19901      if (tmpl)
19902	error ("explicit instantiation of non-class template %qD", tmpl);
19903      else
19904	error ("explicit instantiation of non-template type %qT", t);
19905      return;
19906    }
19907
19908  complete_type (t);
19909
19910  if (!COMPLETE_TYPE_P (t))
19911    {
19912      if (complain & tf_error)
19913	error ("explicit instantiation of %q#T before definition of template",
19914	       t);
19915      return;
19916    }
19917
19918  if (storage != NULL_TREE)
19919    {
19920      if (!in_system_header_at (input_location))
19921	{
19922	  if (storage == ridpointers[(int) RID_EXTERN])
19923	    {
19924	      if (cxx_dialect == cxx98)
19925		pedwarn (input_location, OPT_Wpedantic,
19926			 "ISO C++ 1998 forbids the use of %<extern%> on "
19927			 "explicit instantiations");
19928	    }
19929	  else
19930	    pedwarn (input_location, OPT_Wpedantic,
19931		     "ISO C++ forbids the use of %qE"
19932		     " on explicit instantiations", storage);
19933	}
19934
19935      if (storage == ridpointers[(int) RID_INLINE])
19936	nomem_p = 1;
19937      else if (storage == ridpointers[(int) RID_EXTERN])
19938	extern_p = 1;
19939      else if (storage == ridpointers[(int) RID_STATIC])
19940	static_p = 1;
19941      else
19942	{
19943	  error ("storage class %qD applied to template instantiation",
19944		 storage);
19945	  extern_p = 0;
19946	}
19947    }
19948
19949  if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
19950    {
19951      /* DR 259 [temp.spec].
19952
19953	 Both an explicit instantiation and a declaration of an explicit
19954	 specialization shall not appear in a program unless the explicit
19955	 instantiation follows a declaration of the explicit specialization.
19956
19957	 For a given set of template parameters, if an explicit
19958	 instantiation of a template appears after a declaration of an
19959	 explicit specialization for that template, the explicit
19960	 instantiation has no effect.  */
19961      return;
19962    }
19963  else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
19964    {
19965      /* [temp.spec]
19966
19967	 No program shall explicitly instantiate any template more
19968	 than once.
19969
19970	 If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
19971	 instantiation was `extern'.  If EXTERN_P then the second is.
19972	 These cases are OK.  */
19973      previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
19974
19975      if (!previous_instantiation_extern_p && !extern_p
19976	  && (complain & tf_error))
19977	permerror (input_location, "duplicate explicit instantiation of %q#T", t);
19978
19979      /* If we've already instantiated the template, just return now.  */
19980      if (!CLASSTYPE_INTERFACE_ONLY (t))
19981	return;
19982    }
19983
19984  check_explicit_instantiation_namespace (TYPE_NAME (t));
19985  mark_class_instantiated (t, extern_p);
19986
19987  if (nomem_p)
19988    return;
19989
19990  {
19991    tree tmp;
19992
19993    /* In contrast to implicit instantiation, where only the
19994       declarations, and not the definitions, of members are
19995       instantiated, we have here:
19996
19997	 [temp.explicit]
19998
19999	 The explicit instantiation of a class template specialization
20000	 implies the instantiation of all of its members not
20001	 previously explicitly specialized in the translation unit
20002	 containing the explicit instantiation.
20003
20004       Of course, we can't instantiate member template classes, since
20005       we don't have any arguments for them.  Note that the standard
20006       is unclear on whether the instantiation of the members are
20007       *explicit* instantiations or not.  However, the most natural
20008       interpretation is that it should be an explicit instantiation.  */
20009
20010    if (! static_p)
20011      for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
20012	if (TREE_CODE (tmp) == FUNCTION_DECL
20013	    && DECL_TEMPLATE_INSTANTIATION (tmp))
20014	  instantiate_class_member (tmp, extern_p);
20015
20016    for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
20017      if (VAR_P (tmp) && DECL_TEMPLATE_INSTANTIATION (tmp))
20018	instantiate_class_member (tmp, extern_p);
20019
20020    if (CLASSTYPE_NESTED_UTDS (t))
20021      binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
20022			     bt_instantiate_type_proc, &storage);
20023  }
20024}
20025
20026/* Given a function DECL, which is a specialization of TMPL, modify
20027   DECL to be a re-instantiation of TMPL with the same template
20028   arguments.  TMPL should be the template into which tsubst'ing
20029   should occur for DECL, not the most general template.
20030
20031   One reason for doing this is a scenario like this:
20032
20033     template <class T>
20034     void f(const T&, int i);
20035
20036     void g() { f(3, 7); }
20037
20038     template <class T>
20039     void f(const T& t, const int i) { }
20040
20041   Note that when the template is first instantiated, with
20042   instantiate_template, the resulting DECL will have no name for the
20043   first parameter, and the wrong type for the second.  So, when we go
20044   to instantiate the DECL, we regenerate it.  */
20045
20046static void
20047regenerate_decl_from_template (tree decl, tree tmpl)
20048{
20049  /* The arguments used to instantiate DECL, from the most general
20050     template.  */
20051  tree args;
20052  tree code_pattern;
20053
20054  args = DECL_TI_ARGS (decl);
20055  code_pattern = DECL_TEMPLATE_RESULT (tmpl);
20056
20057  /* Make sure that we can see identifiers, and compute access
20058     correctly.  */
20059  push_access_scope (decl);
20060
20061  if (TREE_CODE (decl) == FUNCTION_DECL)
20062    {
20063      tree decl_parm;
20064      tree pattern_parm;
20065      tree specs;
20066      int args_depth;
20067      int parms_depth;
20068
20069      args_depth = TMPL_ARGS_DEPTH (args);
20070      parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
20071      if (args_depth > parms_depth)
20072	args = get_innermost_template_args (args, parms_depth);
20073
20074      specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
20075					      args, tf_error, NULL_TREE,
20076					      /*defer_ok*/false);
20077      if (specs && specs != error_mark_node)
20078	TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
20079						    specs);
20080
20081      /* Merge parameter declarations.  */
20082      decl_parm = skip_artificial_parms_for (decl,
20083					     DECL_ARGUMENTS (decl));
20084      pattern_parm
20085	= skip_artificial_parms_for (code_pattern,
20086				     DECL_ARGUMENTS (code_pattern));
20087      while (decl_parm && !DECL_PACK_P (pattern_parm))
20088	{
20089	  tree parm_type;
20090	  tree attributes;
20091
20092	  if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
20093	    DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
20094	  parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
20095			      NULL_TREE);
20096	  parm_type = type_decays_to (parm_type);
20097	  if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
20098	    TREE_TYPE (decl_parm) = parm_type;
20099	  attributes = DECL_ATTRIBUTES (pattern_parm);
20100	  if (DECL_ATTRIBUTES (decl_parm) != attributes)
20101	    {
20102	      DECL_ATTRIBUTES (decl_parm) = attributes;
20103	      cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
20104	    }
20105	  decl_parm = DECL_CHAIN (decl_parm);
20106	  pattern_parm = DECL_CHAIN (pattern_parm);
20107	}
20108      /* Merge any parameters that match with the function parameter
20109         pack.  */
20110      if (pattern_parm && DECL_PACK_P (pattern_parm))
20111        {
20112          int i, len;
20113          tree expanded_types;
20114          /* Expand the TYPE_PACK_EXPANSION that provides the types for
20115             the parameters in this function parameter pack.  */
20116          expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm),
20117                                                 args, tf_error, NULL_TREE);
20118          len = TREE_VEC_LENGTH (expanded_types);
20119          for (i = 0; i < len; i++)
20120            {
20121              tree parm_type;
20122              tree attributes;
20123
20124              if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
20125                /* Rename the parameter to include the index.  */
20126                DECL_NAME (decl_parm) =
20127                  make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
20128              parm_type = TREE_VEC_ELT (expanded_types, i);
20129              parm_type = type_decays_to (parm_type);
20130              if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
20131                TREE_TYPE (decl_parm) = parm_type;
20132              attributes = DECL_ATTRIBUTES (pattern_parm);
20133              if (DECL_ATTRIBUTES (decl_parm) != attributes)
20134                {
20135                  DECL_ATTRIBUTES (decl_parm) = attributes;
20136                  cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
20137                }
20138              decl_parm = DECL_CHAIN (decl_parm);
20139            }
20140        }
20141      /* Merge additional specifiers from the CODE_PATTERN.  */
20142      if (DECL_DECLARED_INLINE_P (code_pattern)
20143	  && !DECL_DECLARED_INLINE_P (decl))
20144	DECL_DECLARED_INLINE_P (decl) = 1;
20145    }
20146  else if (VAR_P (decl))
20147    {
20148      DECL_INITIAL (decl) =
20149	tsubst_expr (DECL_INITIAL (code_pattern), args,
20150		     tf_error, DECL_TI_TEMPLATE (decl),
20151		     /*integral_constant_expression_p=*/false);
20152      if (VAR_HAD_UNKNOWN_BOUND (decl))
20153	TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
20154				   tf_error, DECL_TI_TEMPLATE (decl));
20155    }
20156  else
20157    gcc_unreachable ();
20158
20159  pop_access_scope (decl);
20160}
20161
20162/* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
20163   substituted to get DECL.  */
20164
20165tree
20166template_for_substitution (tree decl)
20167{
20168  tree tmpl = DECL_TI_TEMPLATE (decl);
20169
20170  /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
20171     for the instantiation.  This is not always the most general
20172     template.  Consider, for example:
20173
20174	template <class T>
20175	struct S { template <class U> void f();
20176		   template <> void f<int>(); };
20177
20178     and an instantiation of S<double>::f<int>.  We want TD to be the
20179     specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
20180  while (/* An instantiation cannot have a definition, so we need a
20181	    more general template.  */
20182	 DECL_TEMPLATE_INSTANTIATION (tmpl)
20183	   /* We must also deal with friend templates.  Given:
20184
20185		template <class T> struct S {
20186		  template <class U> friend void f() {};
20187		};
20188
20189	      S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
20190	      so far as the language is concerned, but that's still
20191	      where we get the pattern for the instantiation from.  On
20192	      other hand, if the definition comes outside the class, say:
20193
20194		template <class T> struct S {
20195		  template <class U> friend void f();
20196		};
20197		template <class U> friend void f() {}
20198
20199	      we don't need to look any further.  That's what the check for
20200	      DECL_INITIAL is for.  */
20201	  || (TREE_CODE (decl) == FUNCTION_DECL
20202	      && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
20203	      && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
20204    {
20205      /* The present template, TD, should not be a definition.  If it
20206	 were a definition, we should be using it!  Note that we
20207	 cannot restructure the loop to just keep going until we find
20208	 a template with a definition, since that might go too far if
20209	 a specialization was declared, but not defined.  */
20210
20211      /* Fetch the more general template.  */
20212      tmpl = DECL_TI_TEMPLATE (tmpl);
20213    }
20214
20215  return tmpl;
20216}
20217
20218/* Returns true if we need to instantiate this template instance even if we
20219   know we aren't going to emit it..  */
20220
20221bool
20222always_instantiate_p (tree decl)
20223{
20224  /* We always instantiate inline functions so that we can inline them.  An
20225     explicit instantiation declaration prohibits implicit instantiation of
20226     non-inline functions.  With high levels of optimization, we would
20227     normally inline non-inline functions -- but we're not allowed to do
20228     that for "extern template" functions.  Therefore, we check
20229     DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
20230  return ((TREE_CODE (decl) == FUNCTION_DECL
20231	   && (DECL_DECLARED_INLINE_P (decl)
20232	       || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
20233	  /* And we need to instantiate static data members so that
20234	     their initializers are available in integral constant
20235	     expressions.  */
20236	  || (VAR_P (decl)
20237	      && decl_maybe_constant_var_p (decl)));
20238}
20239
20240/* If FN has a noexcept-specifier that hasn't been instantiated yet,
20241   instantiate it now, modifying TREE_TYPE (fn).  */
20242
20243void
20244maybe_instantiate_noexcept (tree fn)
20245{
20246  tree fntype, spec, noex, clone;
20247
20248  /* Don't instantiate a noexcept-specification from template context.  */
20249  if (processing_template_decl)
20250    return;
20251
20252  if (DECL_CLONED_FUNCTION_P (fn))
20253    fn = DECL_CLONED_FUNCTION (fn);
20254  fntype = TREE_TYPE (fn);
20255  spec = TYPE_RAISES_EXCEPTIONS (fntype);
20256
20257  if (!spec || !TREE_PURPOSE (spec))
20258    return;
20259
20260  noex = TREE_PURPOSE (spec);
20261
20262  if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
20263    {
20264      if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
20265	spec = get_defaulted_eh_spec (fn);
20266      else if (push_tinst_level (fn))
20267	{
20268	  push_access_scope (fn);
20269	  push_deferring_access_checks (dk_no_deferred);
20270	  input_location = DECL_SOURCE_LOCATION (fn);
20271	  noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
20272					DEFERRED_NOEXCEPT_ARGS (noex),
20273					tf_warning_or_error, fn,
20274					/*function_p=*/false,
20275					/*integral_constant_expression_p=*/true);
20276	  pop_deferring_access_checks ();
20277	  pop_access_scope (fn);
20278	  pop_tinst_level ();
20279	  spec = build_noexcept_spec (noex, tf_warning_or_error);
20280	  if (spec == error_mark_node)
20281	    spec = noexcept_false_spec;
20282	}
20283      else
20284	spec = noexcept_false_spec;
20285
20286      TREE_TYPE (fn) = build_exception_variant (fntype, spec);
20287    }
20288
20289  FOR_EACH_CLONE (clone, fn)
20290    {
20291      if (TREE_TYPE (clone) == fntype)
20292	TREE_TYPE (clone) = TREE_TYPE (fn);
20293      else
20294	TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
20295    }
20296}
20297
20298/* Produce the definition of D, a _DECL generated from a template.  If
20299   DEFER_OK is nonzero, then we don't have to actually do the
20300   instantiation now; we just have to do it sometime.  Normally it is
20301   an error if this is an explicit instantiation but D is undefined.
20302   EXPL_INST_CLASS_MEM_P is true iff D is a member of an
20303   explicitly instantiated class template.  */
20304
20305tree
20306instantiate_decl (tree d, int defer_ok,
20307		  bool expl_inst_class_mem_p)
20308{
20309  tree tmpl = DECL_TI_TEMPLATE (d);
20310  tree gen_args;
20311  tree args;
20312  tree td;
20313  tree code_pattern;
20314  tree spec;
20315  tree gen_tmpl;
20316  bool pattern_defined;
20317  location_t saved_loc = input_location;
20318  int saved_unevaluated_operand = cp_unevaluated_operand;
20319  int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
20320  bool external_p;
20321  bool deleted_p;
20322  tree fn_context;
20323  bool nested;
20324
20325  /* This function should only be used to instantiate templates for
20326     functions and static member variables.  */
20327  gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
20328
20329  /* Variables are never deferred; if instantiation is required, they
20330     are instantiated right away.  That allows for better code in the
20331     case that an expression refers to the value of the variable --
20332     if the variable has a constant value the referring expression can
20333     take advantage of that fact.  */
20334  if (VAR_P (d)
20335      || DECL_DECLARED_CONSTEXPR_P (d))
20336    defer_ok = 0;
20337
20338  /* Don't instantiate cloned functions.  Instead, instantiate the
20339     functions they cloned.  */
20340  if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
20341    d = DECL_CLONED_FUNCTION (d);
20342
20343  if (DECL_TEMPLATE_INSTANTIATED (d)
20344      || (TREE_CODE (d) == FUNCTION_DECL
20345	  && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
20346      || DECL_TEMPLATE_SPECIALIZATION (d))
20347    /* D has already been instantiated or explicitly specialized, so
20348       there's nothing for us to do here.
20349
20350       It might seem reasonable to check whether or not D is an explicit
20351       instantiation, and, if so, stop here.  But when an explicit
20352       instantiation is deferred until the end of the compilation,
20353       DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
20354       the instantiation.  */
20355    return d;
20356
20357  /* Check to see whether we know that this template will be
20358     instantiated in some other file, as with "extern template"
20359     extension.  */
20360  external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
20361
20362  /* In general, we do not instantiate such templates.  */
20363  if (external_p && !always_instantiate_p (d))
20364    return d;
20365
20366  gen_tmpl = most_general_template (tmpl);
20367  gen_args = impartial_args (tmpl, DECL_TI_ARGS (d));
20368
20369  if (tmpl != gen_tmpl)
20370    /* We should already have the extra args.  */
20371    gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
20372		== TMPL_ARGS_DEPTH (gen_args));
20373  /* And what's in the hash table should match D.  */
20374  gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
20375	      || spec == NULL_TREE);
20376
20377  /* This needs to happen before any tsubsting.  */
20378  if (! push_tinst_level (d))
20379    return d;
20380
20381  timevar_push (TV_TEMPLATE_INST);
20382
20383  /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
20384     for the instantiation.  */
20385  td = template_for_substitution (d);
20386  code_pattern = DECL_TEMPLATE_RESULT (td);
20387
20388  /* We should never be trying to instantiate a member of a class
20389     template or partial specialization.  */
20390  gcc_assert (d != code_pattern);
20391
20392  if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
20393      || DECL_TEMPLATE_SPECIALIZATION (td))
20394    /* In the case of a friend template whose definition is provided
20395       outside the class, we may have too many arguments.  Drop the
20396       ones we don't need.  The same is true for specializations.  */
20397    args = get_innermost_template_args
20398      (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
20399  else
20400    args = gen_args;
20401
20402  if (TREE_CODE (d) == FUNCTION_DECL)
20403    {
20404      deleted_p = DECL_DELETED_FN (code_pattern);
20405      pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
20406			 || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern)
20407			 || deleted_p);
20408    }
20409  else
20410    {
20411      deleted_p = false;
20412      pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
20413    }
20414
20415  /* We may be in the middle of deferred access check.  Disable it now.  */
20416  push_deferring_access_checks (dk_no_deferred);
20417
20418  /* Unless an explicit instantiation directive has already determined
20419     the linkage of D, remember that a definition is available for
20420     this entity.  */
20421  if (pattern_defined
20422      && !DECL_INTERFACE_KNOWN (d)
20423      && !DECL_NOT_REALLY_EXTERN (d))
20424    mark_definable (d);
20425
20426  DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
20427  DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
20428  input_location = DECL_SOURCE_LOCATION (d);
20429
20430  /* If D is a member of an explicitly instantiated class template,
20431     and no definition is available, treat it like an implicit
20432     instantiation.  */
20433  if (!pattern_defined && expl_inst_class_mem_p
20434      && DECL_EXPLICIT_INSTANTIATION (d))
20435    {
20436      /* Leave linkage flags alone on instantiations with anonymous
20437	 visibility.  */
20438      if (TREE_PUBLIC (d))
20439	{
20440	  DECL_NOT_REALLY_EXTERN (d) = 0;
20441	  DECL_INTERFACE_KNOWN (d) = 0;
20442	}
20443      SET_DECL_IMPLICIT_INSTANTIATION (d);
20444    }
20445
20446  /* Defer all other templates, unless we have been explicitly
20447     forbidden from doing so.  */
20448  if (/* If there is no definition, we cannot instantiate the
20449	 template.  */
20450      ! pattern_defined
20451      /* If it's OK to postpone instantiation, do so.  */
20452      || defer_ok
20453      /* If this is a static data member that will be defined
20454	 elsewhere, we don't want to instantiate the entire data
20455	 member, but we do want to instantiate the initializer so that
20456	 we can substitute that elsewhere.  */
20457      || (external_p && VAR_P (d))
20458      /* Handle here a deleted function too, avoid generating
20459	 its body (c++/61080).  */
20460      || deleted_p)
20461    {
20462      /* The definition of the static data member is now required so
20463	 we must substitute the initializer.  */
20464      if (VAR_P (d)
20465	  && !DECL_INITIAL (d)
20466	  && DECL_INITIAL (code_pattern))
20467	{
20468	  tree ns;
20469	  tree init;
20470	  bool const_init = false;
20471	  bool enter_context = DECL_CLASS_SCOPE_P (d);
20472
20473	  ns = decl_namespace_context (d);
20474	  push_nested_namespace (ns);
20475	  if (enter_context)
20476	    push_nested_class (DECL_CONTEXT (d));
20477	  init = tsubst_expr (DECL_INITIAL (code_pattern),
20478			      args,
20479			      tf_warning_or_error, NULL_TREE,
20480			      /*integral_constant_expression_p=*/false);
20481	  /* If instantiating the initializer involved instantiating this
20482	     again, don't call cp_finish_decl twice.  */
20483	  if (!DECL_INITIAL (d))
20484	    {
20485	      /* Make sure the initializer is still constant, in case of
20486		 circular dependency (template/instantiate6.C). */
20487	      const_init
20488		= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
20489	      cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
20490			      /*asmspec_tree=*/NULL_TREE,
20491			      LOOKUP_ONLYCONVERTING);
20492	    }
20493	  if (enter_context)
20494	    pop_nested_class ();
20495	  pop_nested_namespace (ns);
20496	}
20497
20498      /* We restore the source position here because it's used by
20499	 add_pending_template.  */
20500      input_location = saved_loc;
20501
20502      if (at_eof && !pattern_defined
20503	  && DECL_EXPLICIT_INSTANTIATION (d)
20504	  && DECL_NOT_REALLY_EXTERN (d))
20505	/* [temp.explicit]
20506
20507	   The definition of a non-exported function template, a
20508	   non-exported member function template, or a non-exported
20509	   member function or static data member of a class template
20510	   shall be present in every translation unit in which it is
20511	   explicitly instantiated.  */
20512	permerror (input_location,  "explicit instantiation of %qD "
20513		   "but no definition available", d);
20514
20515      /* If we're in unevaluated context, we just wanted to get the
20516	 constant value; this isn't an odr use, so don't queue
20517	 a full instantiation.  */
20518      if (cp_unevaluated_operand != 0)
20519	goto out;
20520      /* ??? Historically, we have instantiated inline functions, even
20521	 when marked as "extern template".  */
20522      if (!(external_p && VAR_P (d)))
20523	add_pending_template (d);
20524      goto out;
20525    }
20526  /* Tell the repository that D is available in this translation unit
20527     -- and see if it is supposed to be instantiated here.  */
20528  if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
20529    {
20530      /* In a PCH file, despite the fact that the repository hasn't
20531	 requested instantiation in the PCH it is still possible that
20532	 an instantiation will be required in a file that includes the
20533	 PCH.  */
20534      if (pch_file)
20535	add_pending_template (d);
20536      /* Instantiate inline functions so that the inliner can do its
20537	 job, even though we'll not be emitting a copy of this
20538	 function.  */
20539      if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
20540	goto out;
20541    }
20542
20543  fn_context = decl_function_context (d);
20544  nested = (current_function_decl != NULL_TREE);
20545  if (!fn_context)
20546    push_to_top_level ();
20547  else
20548    {
20549      if (nested)
20550	push_function_context ();
20551      cp_unevaluated_operand = 0;
20552      c_inhibit_evaluation_warnings = 0;
20553    }
20554
20555  /* Mark D as instantiated so that recursive calls to
20556     instantiate_decl do not try to instantiate it again.  */
20557  DECL_TEMPLATE_INSTANTIATED (d) = 1;
20558
20559  /* Regenerate the declaration in case the template has been modified
20560     by a subsequent redeclaration.  */
20561  regenerate_decl_from_template (d, td);
20562
20563  /* We already set the file and line above.  Reset them now in case
20564     they changed as a result of calling regenerate_decl_from_template.  */
20565  input_location = DECL_SOURCE_LOCATION (d);
20566
20567  if (VAR_P (d))
20568    {
20569      tree init;
20570      bool const_init = false;
20571
20572      /* Clear out DECL_RTL; whatever was there before may not be right
20573	 since we've reset the type of the declaration.  */
20574      SET_DECL_RTL (d, NULL);
20575      DECL_IN_AGGR_P (d) = 0;
20576
20577      /* The initializer is placed in DECL_INITIAL by
20578	 regenerate_decl_from_template so we don't need to
20579	 push/pop_access_scope again here.  Pull it out so that
20580	 cp_finish_decl can process it.  */
20581      init = DECL_INITIAL (d);
20582      DECL_INITIAL (d) = NULL_TREE;
20583      DECL_INITIALIZED_P (d) = 0;
20584
20585      /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
20586	 initializer.  That function will defer actual emission until
20587	 we have a chance to determine linkage.  */
20588      DECL_EXTERNAL (d) = 0;
20589
20590      /* Enter the scope of D so that access-checking works correctly.  */
20591      bool enter_context = DECL_CLASS_SCOPE_P (d);
20592      if (enter_context)
20593        push_nested_class (DECL_CONTEXT (d));
20594
20595      const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
20596      cp_finish_decl (d, init, const_init, NULL_TREE, 0);
20597
20598      if (enter_context)
20599        pop_nested_class ();
20600
20601      if (variable_template_p (gen_tmpl))
20602	note_variable_template_instantiation (d);
20603    }
20604  else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
20605    synthesize_method (d);
20606  else if (TREE_CODE (d) == FUNCTION_DECL)
20607    {
20608      hash_map<tree, tree> *saved_local_specializations;
20609      tree subst_decl;
20610      tree tmpl_parm;
20611      tree spec_parm;
20612      tree block = NULL_TREE;
20613
20614      /* Save away the current list, in case we are instantiating one
20615	 template from within the body of another.  */
20616      saved_local_specializations = local_specializations;
20617
20618      /* Set up the list of local specializations.  */
20619      local_specializations = new hash_map<tree, tree>;
20620
20621      /* Set up context.  */
20622      if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
20623	  && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
20624	block = push_stmt_list ();
20625      else
20626	start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
20627
20628      /* Some typedefs referenced from within the template code need to be
20629	 access checked at template instantiation time, i.e now. These
20630	 types were added to the template at parsing time. Let's get those
20631	 and perform the access checks then.  */
20632      perform_typedefs_access_check (DECL_TEMPLATE_RESULT (gen_tmpl),
20633				     gen_args);
20634
20635      /* Create substitution entries for the parameters.  */
20636      subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
20637      tmpl_parm = DECL_ARGUMENTS (subst_decl);
20638      spec_parm = DECL_ARGUMENTS (d);
20639      if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
20640	{
20641	  register_local_specialization (spec_parm, tmpl_parm);
20642	  spec_parm = skip_artificial_parms_for (d, spec_parm);
20643	  tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
20644	}
20645      for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
20646	{
20647	  if (!DECL_PACK_P (tmpl_parm))
20648	    {
20649	      register_local_specialization (spec_parm, tmpl_parm);
20650	      spec_parm = DECL_CHAIN (spec_parm);
20651	    }
20652	  else
20653	    {
20654	      /* Register the (value) argument pack as a specialization of
20655		 TMPL_PARM, then move on.  */
20656	      tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
20657	      register_local_specialization (argpack, tmpl_parm);
20658	    }
20659	}
20660      gcc_assert (!spec_parm);
20661
20662      /* Substitute into the body of the function.  */
20663      if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
20664	tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
20665			tf_warning_or_error, tmpl);
20666      else
20667	{
20668	  tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
20669		       tf_warning_or_error, tmpl,
20670		       /*integral_constant_expression_p=*/false);
20671
20672	  /* Set the current input_location to the end of the function
20673	     so that finish_function knows where we are.  */
20674	  input_location
20675	    = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
20676
20677	  /* Remember if we saw an infinite loop in the template.  */
20678	  current_function_infinite_loop
20679	    = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
20680	}
20681
20682      /* We don't need the local specializations any more.  */
20683      delete local_specializations;
20684      local_specializations = saved_local_specializations;
20685
20686      /* Finish the function.  */
20687      if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
20688	  && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
20689	DECL_SAVED_TREE (d) = pop_stmt_list (block);
20690      else
20691	{
20692	  d = finish_function (0);
20693	  expand_or_defer_fn (d);
20694	}
20695
20696      if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
20697	cp_check_omp_declare_reduction (d);
20698    }
20699
20700  /* We're not deferring instantiation any more.  */
20701  TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
20702
20703  if (!fn_context)
20704    pop_from_top_level ();
20705  else if (nested)
20706    pop_function_context ();
20707
20708out:
20709  input_location = saved_loc;
20710  cp_unevaluated_operand = saved_unevaluated_operand;
20711  c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
20712  pop_deferring_access_checks ();
20713  pop_tinst_level ();
20714
20715  timevar_pop (TV_TEMPLATE_INST);
20716
20717  return d;
20718}
20719
20720/* Run through the list of templates that we wish we could
20721   instantiate, and instantiate any we can.  RETRIES is the
20722   number of times we retry pending template instantiation.  */
20723
20724void
20725instantiate_pending_templates (int retries)
20726{
20727  int reconsider;
20728  location_t saved_loc = input_location;
20729
20730  /* Instantiating templates may trigger vtable generation.  This in turn
20731     may require further template instantiations.  We place a limit here
20732     to avoid infinite loop.  */
20733  if (pending_templates && retries >= max_tinst_depth)
20734    {
20735      tree decl = pending_templates->tinst->decl;
20736
20737      fatal_error (input_location,
20738		   "template instantiation depth exceeds maximum of %d"
20739                   " instantiating %q+D, possibly from virtual table generation"
20740                   " (use -ftemplate-depth= to increase the maximum)",
20741                   max_tinst_depth, decl);
20742      if (TREE_CODE (decl) == FUNCTION_DECL)
20743	/* Pretend that we defined it.  */
20744	DECL_INITIAL (decl) = error_mark_node;
20745      return;
20746    }
20747
20748  do
20749    {
20750      struct pending_template **t = &pending_templates;
20751      struct pending_template *last = NULL;
20752      reconsider = 0;
20753      while (*t)
20754	{
20755	  tree instantiation = reopen_tinst_level ((*t)->tinst);
20756	  bool complete = false;
20757
20758	  if (TYPE_P (instantiation))
20759	    {
20760	      tree fn;
20761
20762	      if (!COMPLETE_TYPE_P (instantiation))
20763		{
20764		  instantiate_class_template (instantiation);
20765		  if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
20766		    for (fn = TYPE_METHODS (instantiation);
20767			 fn;
20768			 fn = TREE_CHAIN (fn))
20769		      if (! DECL_ARTIFICIAL (fn))
20770			instantiate_decl (fn,
20771					  /*defer_ok=*/0,
20772					  /*expl_inst_class_mem_p=*/false);
20773		  if (COMPLETE_TYPE_P (instantiation))
20774		    reconsider = 1;
20775		}
20776
20777	      complete = COMPLETE_TYPE_P (instantiation);
20778	    }
20779	  else
20780	    {
20781	      if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
20782		  && !DECL_TEMPLATE_INSTANTIATED (instantiation))
20783		{
20784		  instantiation
20785		    = instantiate_decl (instantiation,
20786					/*defer_ok=*/0,
20787					/*expl_inst_class_mem_p=*/false);
20788		  if (DECL_TEMPLATE_INSTANTIATED (instantiation))
20789		    reconsider = 1;
20790		}
20791
20792	      complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
20793			  || DECL_TEMPLATE_INSTANTIATED (instantiation));
20794	    }
20795
20796	  if (complete)
20797	    /* If INSTANTIATION has been instantiated, then we don't
20798	       need to consider it again in the future.  */
20799	    *t = (*t)->next;
20800	  else
20801	    {
20802	      last = *t;
20803	      t = &(*t)->next;
20804	    }
20805	  tinst_depth = 0;
20806	  current_tinst_level = NULL;
20807	}
20808      last_pending_template = last;
20809    }
20810  while (reconsider);
20811
20812  input_location = saved_loc;
20813}
20814
20815/* Substitute ARGVEC into T, which is a list of initializers for
20816   either base class or a non-static data member.  The TREE_PURPOSEs
20817   are DECLs, and the TREE_VALUEs are the initializer values.  Used by
20818   instantiate_decl.  */
20819
20820static tree
20821tsubst_initializer_list (tree t, tree argvec)
20822{
20823  tree inits = NULL_TREE;
20824
20825  for (; t; t = TREE_CHAIN (t))
20826    {
20827      tree decl;
20828      tree init;
20829      tree expanded_bases = NULL_TREE;
20830      tree expanded_arguments = NULL_TREE;
20831      int i, len = 1;
20832
20833      if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
20834        {
20835          tree expr;
20836          tree arg;
20837
20838          /* Expand the base class expansion type into separate base
20839             classes.  */
20840          expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
20841                                                 tf_warning_or_error,
20842                                                 NULL_TREE);
20843          if (expanded_bases == error_mark_node)
20844            continue;
20845
20846          /* We'll be building separate TREE_LISTs of arguments for
20847             each base.  */
20848          len = TREE_VEC_LENGTH (expanded_bases);
20849          expanded_arguments = make_tree_vec (len);
20850          for (i = 0; i < len; i++)
20851            TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
20852
20853          /* Build a dummy EXPR_PACK_EXPANSION that will be used to
20854             expand each argument in the TREE_VALUE of t.  */
20855          expr = make_node (EXPR_PACK_EXPANSION);
20856	  PACK_EXPANSION_LOCAL_P (expr) = true;
20857          PACK_EXPANSION_PARAMETER_PACKS (expr) =
20858            PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
20859
20860	  if (TREE_VALUE (t) == void_type_node)
20861	    /* VOID_TYPE_NODE is used to indicate
20862	       value-initialization.  */
20863	    {
20864	      for (i = 0; i < len; i++)
20865		TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
20866	    }
20867	  else
20868	    {
20869	      /* Substitute parameter packs into each argument in the
20870		 TREE_LIST.  */
20871	      in_base_initializer = 1;
20872	      for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
20873		{
20874		  tree expanded_exprs;
20875
20876		  /* Expand the argument.  */
20877		  SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
20878		  expanded_exprs
20879		    = tsubst_pack_expansion (expr, argvec,
20880					     tf_warning_or_error,
20881					     NULL_TREE);
20882		  if (expanded_exprs == error_mark_node)
20883		    continue;
20884
20885		  /* Prepend each of the expanded expressions to the
20886		     corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
20887		  for (i = 0; i < len; i++)
20888		    {
20889		      TREE_VEC_ELT (expanded_arguments, i) =
20890			tree_cons (NULL_TREE,
20891				   TREE_VEC_ELT (expanded_exprs, i),
20892				   TREE_VEC_ELT (expanded_arguments, i));
20893		    }
20894		}
20895	      in_base_initializer = 0;
20896
20897	      /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
20898		 since we built them backwards.  */
20899	      for (i = 0; i < len; i++)
20900		{
20901		  TREE_VEC_ELT (expanded_arguments, i) =
20902		    nreverse (TREE_VEC_ELT (expanded_arguments, i));
20903		}
20904	    }
20905        }
20906
20907      for (i = 0; i < len; ++i)
20908        {
20909          if (expanded_bases)
20910            {
20911              decl = TREE_VEC_ELT (expanded_bases, i);
20912              decl = expand_member_init (decl);
20913              init = TREE_VEC_ELT (expanded_arguments, i);
20914            }
20915          else
20916            {
20917	      tree tmp;
20918              decl = tsubst_copy (TREE_PURPOSE (t), argvec,
20919                                  tf_warning_or_error, NULL_TREE);
20920
20921              decl = expand_member_init (decl);
20922              if (decl && !DECL_P (decl))
20923                in_base_initializer = 1;
20924
20925	      init = TREE_VALUE (t);
20926	      tmp = init;
20927	      if (init != void_type_node)
20928		init = tsubst_expr (init, argvec,
20929				    tf_warning_or_error, NULL_TREE,
20930				    /*integral_constant_expression_p=*/false);
20931	      if (init == NULL_TREE && tmp != NULL_TREE)
20932		/* If we had an initializer but it instantiated to nothing,
20933		   value-initialize the object.  This will only occur when
20934		   the initializer was a pack expansion where the parameter
20935		   packs used in that expansion were of length zero.  */
20936		init = void_type_node;
20937              in_base_initializer = 0;
20938            }
20939
20940          if (decl)
20941            {
20942              init = build_tree_list (decl, init);
20943              TREE_CHAIN (init) = inits;
20944              inits = init;
20945            }
20946        }
20947    }
20948  return inits;
20949}
20950
20951/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
20952
20953static void
20954set_current_access_from_decl (tree decl)
20955{
20956  if (TREE_PRIVATE (decl))
20957    current_access_specifier = access_private_node;
20958  else if (TREE_PROTECTED (decl))
20959    current_access_specifier = access_protected_node;
20960  else
20961    current_access_specifier = access_public_node;
20962}
20963
20964/* Instantiate an enumerated type.  TAG is the template type, NEWTAG
20965   is the instantiation (which should have been created with
20966   start_enum) and ARGS are the template arguments to use.  */
20967
20968static void
20969tsubst_enum (tree tag, tree newtag, tree args)
20970{
20971  tree e;
20972
20973  if (SCOPED_ENUM_P (newtag))
20974    begin_scope (sk_scoped_enum, newtag);
20975
20976  for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
20977    {
20978      tree value;
20979      tree decl;
20980
20981      decl = TREE_VALUE (e);
20982      /* Note that in a template enum, the TREE_VALUE is the
20983	 CONST_DECL, not the corresponding INTEGER_CST.  */
20984      value = tsubst_expr (DECL_INITIAL (decl),
20985			   args, tf_warning_or_error, NULL_TREE,
20986			   /*integral_constant_expression_p=*/true);
20987
20988      /* Give this enumeration constant the correct access.  */
20989      set_current_access_from_decl (decl);
20990
20991      /* Actually build the enumerator itself.  */
20992      build_enumerator
20993	(DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
20994    }
20995
20996  if (SCOPED_ENUM_P (newtag))
20997    finish_scope ();
20998
20999  finish_enum_value_list (newtag);
21000  finish_enum (newtag);
21001
21002  DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
21003    = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
21004}
21005
21006/* DECL is a FUNCTION_DECL that is a template specialization.  Return
21007   its type -- but without substituting the innermost set of template
21008   arguments.  So, innermost set of template parameters will appear in
21009   the type.  */
21010
21011tree
21012get_mostly_instantiated_function_type (tree decl)
21013{
21014  /* For a function, DECL_TI_TEMPLATE is partially instantiated.  */
21015  return TREE_TYPE (DECL_TI_TEMPLATE (decl));
21016}
21017
21018/* Return truthvalue if we're processing a template different from
21019   the last one involved in diagnostics.  */
21020bool
21021problematic_instantiation_changed (void)
21022{
21023  return current_tinst_level != last_error_tinst_level;
21024}
21025
21026/* Remember current template involved in diagnostics.  */
21027void
21028record_last_problematic_instantiation (void)
21029{
21030  last_error_tinst_level = current_tinst_level;
21031}
21032
21033struct tinst_level *
21034current_instantiation (void)
21035{
21036  return current_tinst_level;
21037}
21038
21039/* Return TRUE if current_function_decl is being instantiated, false
21040   otherwise.  */
21041
21042bool
21043instantiating_current_function_p (void)
21044{
21045  return (current_instantiation ()
21046	  && current_instantiation ()->decl == current_function_decl);
21047}
21048
21049/* [temp.param] Check that template non-type parm TYPE is of an allowable
21050   type. Return zero for ok, nonzero for disallowed. Issue error and
21051   warning messages under control of COMPLAIN.  */
21052
21053static int
21054invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
21055{
21056  if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
21057    return 0;
21058  else if (POINTER_TYPE_P (type))
21059    return 0;
21060  else if (TYPE_PTRMEM_P (type))
21061    return 0;
21062  else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
21063    return 0;
21064  else if (TREE_CODE (type) == TYPENAME_TYPE)
21065    return 0;
21066  else if (TREE_CODE (type) == DECLTYPE_TYPE)
21067    return 0;
21068  else if (TREE_CODE (type) == NULLPTR_TYPE)
21069    return 0;
21070
21071  if (complain & tf_error)
21072    {
21073      if (type == error_mark_node)
21074	inform (input_location, "invalid template non-type parameter");
21075      else
21076	error ("%q#T is not a valid type for a template non-type parameter",
21077	       type);
21078    }
21079  return 1;
21080}
21081
21082/* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
21083   Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
21084
21085static bool
21086dependent_type_p_r (tree type)
21087{
21088  tree scope;
21089
21090  /* [temp.dep.type]
21091
21092     A type is dependent if it is:
21093
21094     -- a template parameter. Template template parameters are types
21095	for us (since TYPE_P holds true for them) so we handle
21096	them here.  */
21097  if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
21098      || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
21099    return true;
21100  /* -- a qualified-id with a nested-name-specifier which contains a
21101	class-name that names a dependent type or whose unqualified-id
21102	names a dependent type.  */
21103  if (TREE_CODE (type) == TYPENAME_TYPE)
21104    return true;
21105
21106  /* An alias template specialization can be dependent even if the
21107     resulting type is not.  */
21108  if (dependent_alias_template_spec_p (type))
21109    return true;
21110
21111  /* -- a cv-qualified type where the cv-unqualified type is
21112	dependent.
21113     No code is necessary for this bullet; the code below handles
21114     cv-qualified types, and we don't want to strip aliases with
21115     TYPE_MAIN_VARIANT because of DR 1558.  */
21116  /* -- a compound type constructed from any dependent type.  */
21117  if (TYPE_PTRMEM_P (type))
21118    return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
21119	    || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
21120					   (type)));
21121  else if (TYPE_PTR_P (type)
21122	   || TREE_CODE (type) == REFERENCE_TYPE)
21123    return dependent_type_p (TREE_TYPE (type));
21124  else if (TREE_CODE (type) == FUNCTION_TYPE
21125	   || TREE_CODE (type) == METHOD_TYPE)
21126    {
21127      tree arg_type;
21128
21129      if (dependent_type_p (TREE_TYPE (type)))
21130	return true;
21131      for (arg_type = TYPE_ARG_TYPES (type);
21132	   arg_type;
21133	   arg_type = TREE_CHAIN (arg_type))
21134	if (dependent_type_p (TREE_VALUE (arg_type)))
21135	  return true;
21136      return false;
21137    }
21138  /* -- an array type constructed from any dependent type or whose
21139	size is specified by a constant expression that is
21140	value-dependent.
21141
21142        We checked for type- and value-dependence of the bounds in
21143        compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
21144  if (TREE_CODE (type) == ARRAY_TYPE)
21145    {
21146      if (TYPE_DOMAIN (type)
21147	  && dependent_type_p (TYPE_DOMAIN (type)))
21148	return true;
21149      return dependent_type_p (TREE_TYPE (type));
21150    }
21151
21152  /* -- a template-id in which either the template name is a template
21153     parameter ...  */
21154  if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
21155    return true;
21156  /* ... or any of the template arguments is a dependent type or
21157	an expression that is type-dependent or value-dependent.  */
21158  else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
21159	   && (any_dependent_template_arguments_p
21160	       (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
21161    return true;
21162
21163  /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
21164     dependent; if the argument of the `typeof' expression is not
21165     type-dependent, then it should already been have resolved.  */
21166  if (TREE_CODE (type) == TYPEOF_TYPE
21167      || TREE_CODE (type) == DECLTYPE_TYPE
21168      || TREE_CODE (type) == UNDERLYING_TYPE)
21169    return true;
21170
21171  /* A template argument pack is dependent if any of its packed
21172     arguments are.  */
21173  if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
21174    {
21175      tree args = ARGUMENT_PACK_ARGS (type);
21176      int i, len = TREE_VEC_LENGTH (args);
21177      for (i = 0; i < len; ++i)
21178        if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
21179          return true;
21180    }
21181
21182  /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
21183     be template parameters.  */
21184  if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
21185    return true;
21186
21187  /* The standard does not specifically mention types that are local
21188     to template functions or local classes, but they should be
21189     considered dependent too.  For example:
21190
21191       template <int I> void f() {
21192	 enum E { a = I };
21193	 S<sizeof (E)> s;
21194       }
21195
21196     The size of `E' cannot be known until the value of `I' has been
21197     determined.  Therefore, `E' must be considered dependent.  */
21198  scope = TYPE_CONTEXT (type);
21199  if (scope && TYPE_P (scope))
21200    return dependent_type_p (scope);
21201  /* Don't use type_dependent_expression_p here, as it can lead
21202     to infinite recursion trying to determine whether a lambda
21203     nested in a lambda is dependent (c++/47687).  */
21204  else if (scope && TREE_CODE (scope) == FUNCTION_DECL
21205	   && DECL_LANG_SPECIFIC (scope)
21206	   && DECL_TEMPLATE_INFO (scope)
21207	   && (any_dependent_template_arguments_p
21208	       (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
21209    return true;
21210
21211  /* Other types are non-dependent.  */
21212  return false;
21213}
21214
21215/* Returns TRUE if TYPE is dependent, in the sense of
21216   [temp.dep.type].  Note that a NULL type is considered dependent.  */
21217
21218bool
21219dependent_type_p (tree type)
21220{
21221  /* If there are no template parameters in scope, then there can't be
21222     any dependent types.  */
21223  if (!processing_template_decl)
21224    {
21225      /* If we are not processing a template, then nobody should be
21226	 providing us with a dependent type.  */
21227      gcc_assert (type);
21228      gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
21229      return false;
21230    }
21231
21232  /* If the type is NULL, we have not computed a type for the entity
21233     in question; in that case, the type is dependent.  */
21234  if (!type)
21235    return true;
21236
21237  /* Erroneous types can be considered non-dependent.  */
21238  if (type == error_mark_node)
21239    return false;
21240
21241  /* If we have not already computed the appropriate value for TYPE,
21242     do so now.  */
21243  if (!TYPE_DEPENDENT_P_VALID (type))
21244    {
21245      TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
21246      TYPE_DEPENDENT_P_VALID (type) = 1;
21247    }
21248
21249  return TYPE_DEPENDENT_P (type);
21250}
21251
21252/* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
21253   lookup.  In other words, a dependent type that is not the current
21254   instantiation.  */
21255
21256bool
21257dependent_scope_p (tree scope)
21258{
21259  return (scope && TYPE_P (scope) && dependent_type_p (scope)
21260	  && !currently_open_class (scope));
21261}
21262
21263/* T is a SCOPE_REF; return whether we need to consider it
21264    instantiation-dependent so that we can check access at instantiation
21265    time even though we know which member it resolves to.  */
21266
21267static bool
21268instantiation_dependent_scope_ref_p (tree t)
21269{
21270  if (DECL_P (TREE_OPERAND (t, 1))
21271      && CLASS_TYPE_P (TREE_OPERAND (t, 0))
21272      && accessible_in_template_p (TREE_OPERAND (t, 0),
21273				   TREE_OPERAND (t, 1)))
21274    return false;
21275  else
21276    return true;
21277}
21278
21279/* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
21280   [temp.dep.constexpr].  EXPRESSION is already known to be a constant
21281   expression.  */
21282
21283/* Note that this predicate is not appropriate for general expressions;
21284   only constant expressions (that satisfy potential_constant_expression)
21285   can be tested for value dependence.  */
21286
21287bool
21288value_dependent_expression_p (tree expression)
21289{
21290  if (!processing_template_decl)
21291    return false;
21292
21293  /* A name declared with a dependent type.  */
21294  if (DECL_P (expression) && type_dependent_expression_p (expression))
21295    return true;
21296
21297  switch (TREE_CODE (expression))
21298    {
21299    case IDENTIFIER_NODE:
21300      /* A name that has not been looked up -- must be dependent.  */
21301      return true;
21302
21303    case TEMPLATE_PARM_INDEX:
21304      /* A non-type template parm.  */
21305      return true;
21306
21307    case CONST_DECL:
21308      /* A non-type template parm.  */
21309      if (DECL_TEMPLATE_PARM_P (expression))
21310	return true;
21311      return value_dependent_expression_p (DECL_INITIAL (expression));
21312
21313    case VAR_DECL:
21314       /* A constant with literal type and is initialized
21315	  with an expression that is value-dependent.
21316
21317          Note that a non-dependent parenthesized initializer will have
21318          already been replaced with its constant value, so if we see
21319          a TREE_LIST it must be dependent.  */
21320      if (DECL_INITIAL (expression)
21321	  && decl_constant_var_p (expression)
21322	  && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST
21323	      /* cp_finish_decl doesn't fold reference initializers.  */
21324	      || TREE_CODE (TREE_TYPE (expression)) == REFERENCE_TYPE
21325	      || value_dependent_expression_p (DECL_INITIAL (expression))))
21326	return true;
21327      return false;
21328
21329    case DYNAMIC_CAST_EXPR:
21330    case STATIC_CAST_EXPR:
21331    case CONST_CAST_EXPR:
21332    case REINTERPRET_CAST_EXPR:
21333    case CAST_EXPR:
21334      /* These expressions are value-dependent if the type to which
21335	 the cast occurs is dependent or the expression being casted
21336	 is value-dependent.  */
21337      {
21338	tree type = TREE_TYPE (expression);
21339
21340	if (dependent_type_p (type))
21341	  return true;
21342
21343	/* A functional cast has a list of operands.  */
21344	expression = TREE_OPERAND (expression, 0);
21345	if (!expression)
21346	  {
21347	    /* If there are no operands, it must be an expression such
21348	       as "int()". This should not happen for aggregate types
21349	       because it would form non-constant expressions.  */
21350	    gcc_assert (cxx_dialect >= cxx11
21351			|| INTEGRAL_OR_ENUMERATION_TYPE_P (type));
21352
21353	    return false;
21354	  }
21355
21356	if (TREE_CODE (expression) == TREE_LIST)
21357	  return any_value_dependent_elements_p (expression);
21358
21359	return value_dependent_expression_p (expression);
21360      }
21361
21362    case SIZEOF_EXPR:
21363      if (SIZEOF_EXPR_TYPE_P (expression))
21364	return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
21365      /* FALLTHRU */
21366    case ALIGNOF_EXPR:
21367    case TYPEID_EXPR:
21368      /* A `sizeof' expression is value-dependent if the operand is
21369	 type-dependent or is a pack expansion.  */
21370      expression = TREE_OPERAND (expression, 0);
21371      if (PACK_EXPANSION_P (expression))
21372        return true;
21373      else if (TYPE_P (expression))
21374	return dependent_type_p (expression);
21375      return instantiation_dependent_expression_p (expression);
21376
21377    case AT_ENCODE_EXPR:
21378      /* An 'encode' expression is value-dependent if the operand is
21379	 type-dependent.  */
21380      expression = TREE_OPERAND (expression, 0);
21381      return dependent_type_p (expression);
21382
21383    case NOEXCEPT_EXPR:
21384      expression = TREE_OPERAND (expression, 0);
21385      return instantiation_dependent_expression_p (expression);
21386
21387    case SCOPE_REF:
21388      /* All instantiation-dependent expressions should also be considered
21389	 value-dependent.  */
21390      return instantiation_dependent_scope_ref_p (expression);
21391
21392    case COMPONENT_REF:
21393      return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
21394	      || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
21395
21396    case NONTYPE_ARGUMENT_PACK:
21397      /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
21398         is value-dependent.  */
21399      {
21400        tree values = ARGUMENT_PACK_ARGS (expression);
21401        int i, len = TREE_VEC_LENGTH (values);
21402
21403        for (i = 0; i < len; ++i)
21404          if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
21405            return true;
21406
21407        return false;
21408      }
21409
21410    case TRAIT_EXPR:
21411      {
21412	tree type2 = TRAIT_EXPR_TYPE2 (expression);
21413	return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
21414		|| (type2 ? dependent_type_p (type2) : false));
21415      }
21416
21417    case MODOP_EXPR:
21418      return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
21419	      || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
21420
21421    case ARRAY_REF:
21422      return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
21423	      || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
21424
21425    case ADDR_EXPR:
21426      {
21427	tree op = TREE_OPERAND (expression, 0);
21428	return (value_dependent_expression_p (op)
21429		|| has_value_dependent_address (op));
21430      }
21431
21432    case CALL_EXPR:
21433      {
21434	tree fn = get_callee_fndecl (expression);
21435	int i, nargs;
21436	if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
21437	  return true;
21438	nargs = call_expr_nargs (expression);
21439	for (i = 0; i < nargs; ++i)
21440	  {
21441	    tree op = CALL_EXPR_ARG (expression, i);
21442	    /* In a call to a constexpr member function, look through the
21443	       implicit ADDR_EXPR on the object argument so that it doesn't
21444	       cause the call to be considered value-dependent.  We also
21445	       look through it in potential_constant_expression.  */
21446	    if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
21447		&& DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
21448		&& TREE_CODE (op) == ADDR_EXPR)
21449	      op = TREE_OPERAND (op, 0);
21450	    if (value_dependent_expression_p (op))
21451	      return true;
21452	  }
21453	return false;
21454      }
21455
21456    case TEMPLATE_ID_EXPR:
21457      /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
21458	 type-dependent.  */
21459      return type_dependent_expression_p (expression);
21460
21461    case CONSTRUCTOR:
21462      {
21463	unsigned ix;
21464	tree val;
21465	if (dependent_type_p (TREE_TYPE (expression)))
21466	  return true;
21467	FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
21468	  if (value_dependent_expression_p (val))
21469	    return true;
21470	return false;
21471      }
21472
21473    case STMT_EXPR:
21474      /* Treat a GNU statement expression as dependent to avoid crashing
21475	 under instantiate_non_dependent_expr; it can't be constant.  */
21476      return true;
21477
21478    default:
21479      /* A constant expression is value-dependent if any subexpression is
21480	 value-dependent.  */
21481      switch (TREE_CODE_CLASS (TREE_CODE (expression)))
21482	{
21483	case tcc_reference:
21484	case tcc_unary:
21485	case tcc_comparison:
21486	case tcc_binary:
21487	case tcc_expression:
21488	case tcc_vl_exp:
21489	  {
21490	    int i, len = cp_tree_operand_length (expression);
21491
21492	    for (i = 0; i < len; i++)
21493	      {
21494		tree t = TREE_OPERAND (expression, i);
21495
21496		/* In some cases, some of the operands may be missing.l
21497		   (For example, in the case of PREDECREMENT_EXPR, the
21498		   amount to increment by may be missing.)  That doesn't
21499		   make the expression dependent.  */
21500		if (t && value_dependent_expression_p (t))
21501		  return true;
21502	      }
21503	  }
21504	  break;
21505	default:
21506	  break;
21507	}
21508      break;
21509    }
21510
21511  /* The expression is not value-dependent.  */
21512  return false;
21513}
21514
21515/* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
21516   [temp.dep.expr].  Note that an expression with no type is
21517   considered dependent.  Other parts of the compiler arrange for an
21518   expression with type-dependent subexpressions to have no type, so
21519   this function doesn't have to be fully recursive.  */
21520
21521bool
21522type_dependent_expression_p (tree expression)
21523{
21524  if (!processing_template_decl)
21525    return false;
21526
21527  if (expression == NULL_TREE || expression == error_mark_node)
21528    return false;
21529
21530  /* An unresolved name is always dependent.  */
21531  if (identifier_p (expression) || TREE_CODE (expression) == USING_DECL)
21532    return true;
21533
21534  /* Some expression forms are never type-dependent.  */
21535  if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
21536      || TREE_CODE (expression) == SIZEOF_EXPR
21537      || TREE_CODE (expression) == ALIGNOF_EXPR
21538      || TREE_CODE (expression) == AT_ENCODE_EXPR
21539      || TREE_CODE (expression) == NOEXCEPT_EXPR
21540      || TREE_CODE (expression) == TRAIT_EXPR
21541      || TREE_CODE (expression) == TYPEID_EXPR
21542      || TREE_CODE (expression) == DELETE_EXPR
21543      || TREE_CODE (expression) == VEC_DELETE_EXPR
21544      || TREE_CODE (expression) == THROW_EXPR)
21545    return false;
21546
21547  /* The types of these expressions depends only on the type to which
21548     the cast occurs.  */
21549  if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
21550      || TREE_CODE (expression) == STATIC_CAST_EXPR
21551      || TREE_CODE (expression) == CONST_CAST_EXPR
21552      || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
21553      || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
21554      || TREE_CODE (expression) == CAST_EXPR)
21555    return dependent_type_p (TREE_TYPE (expression));
21556
21557  /* The types of these expressions depends only on the type created
21558     by the expression.  */
21559  if (TREE_CODE (expression) == NEW_EXPR
21560      || TREE_CODE (expression) == VEC_NEW_EXPR)
21561    {
21562      /* For NEW_EXPR tree nodes created inside a template, either
21563	 the object type itself or a TREE_LIST may appear as the
21564	 operand 1.  */
21565      tree type = TREE_OPERAND (expression, 1);
21566      if (TREE_CODE (type) == TREE_LIST)
21567	/* This is an array type.  We need to check array dimensions
21568	   as well.  */
21569	return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
21570	       || value_dependent_expression_p
21571		    (TREE_OPERAND (TREE_VALUE (type), 1));
21572      else
21573	return dependent_type_p (type);
21574    }
21575
21576  if (TREE_CODE (expression) == SCOPE_REF)
21577    {
21578      tree scope = TREE_OPERAND (expression, 0);
21579      tree name = TREE_OPERAND (expression, 1);
21580
21581      /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
21582	 contains an identifier associated by name lookup with one or more
21583	 declarations declared with a dependent type, or...a
21584	 nested-name-specifier or qualified-id that names a member of an
21585	 unknown specialization.  */
21586      return (type_dependent_expression_p (name)
21587	      || dependent_scope_p (scope));
21588    }
21589
21590  if (TREE_CODE (expression) == FUNCTION_DECL
21591      && DECL_LANG_SPECIFIC (expression)
21592      && DECL_TEMPLATE_INFO (expression)
21593      && (any_dependent_template_arguments_p
21594	  (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
21595    return true;
21596
21597  if (TREE_CODE (expression) == TEMPLATE_DECL
21598      && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
21599    return false;
21600
21601  if (TREE_CODE (expression) == STMT_EXPR)
21602    expression = stmt_expr_value_expr (expression);
21603
21604  if (BRACE_ENCLOSED_INITIALIZER_P (expression))
21605    {
21606      tree elt;
21607      unsigned i;
21608
21609      FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
21610	{
21611	  if (type_dependent_expression_p (elt))
21612	    return true;
21613	}
21614      return false;
21615    }
21616
21617  /* A static data member of the current instantiation with incomplete
21618     array type is type-dependent, as the definition and specializations
21619     can have different bounds.  */
21620  if (VAR_P (expression)
21621      && DECL_CLASS_SCOPE_P (expression)
21622      && dependent_type_p (DECL_CONTEXT (expression))
21623      && VAR_HAD_UNKNOWN_BOUND (expression))
21624    return true;
21625
21626  /* An array of unknown bound depending on a variadic parameter, eg:
21627
21628     template<typename... Args>
21629       void foo (Args... args)
21630       {
21631         int arr[] = { args... };
21632       }
21633
21634     template<int... vals>
21635       void bar ()
21636       {
21637         int arr[] = { vals... };
21638       }
21639
21640     If the array has no length and has an initializer, it must be that
21641     we couldn't determine its length in cp_complete_array_type because
21642     it is dependent.  */
21643  if (VAR_P (expression)
21644      && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
21645      && !TYPE_DOMAIN (TREE_TYPE (expression))
21646      && DECL_INITIAL (expression))
21647   return true;
21648
21649  /* A variable template specialization is type-dependent if it has any
21650     dependent template arguments.  */
21651  if (VAR_P (expression)
21652      && DECL_LANG_SPECIFIC (expression)
21653      && DECL_TEMPLATE_INFO (expression)
21654      && variable_template_p (DECL_TI_TEMPLATE (expression)))
21655    return any_dependent_template_arguments_p (DECL_TI_ARGS (expression));
21656
21657  /* Always dependent, on the number of arguments if nothing else.  */
21658  if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
21659    return true;
21660
21661  if (TREE_TYPE (expression) == unknown_type_node)
21662    {
21663      if (TREE_CODE (expression) == ADDR_EXPR)
21664	return type_dependent_expression_p (TREE_OPERAND (expression, 0));
21665      if (TREE_CODE (expression) == COMPONENT_REF
21666	  || TREE_CODE (expression) == OFFSET_REF)
21667	{
21668	  if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
21669	    return true;
21670	  expression = TREE_OPERAND (expression, 1);
21671	  if (identifier_p (expression))
21672	    return false;
21673	}
21674      /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
21675      if (TREE_CODE (expression) == SCOPE_REF)
21676	return false;
21677
21678      if (BASELINK_P (expression))
21679	{
21680	  if (BASELINK_OPTYPE (expression)
21681	      && dependent_type_p (BASELINK_OPTYPE (expression)))
21682	    return true;
21683	  expression = BASELINK_FUNCTIONS (expression);
21684	}
21685
21686      if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
21687	{
21688	  if (any_dependent_template_arguments_p
21689	      (TREE_OPERAND (expression, 1)))
21690	    return true;
21691	  expression = TREE_OPERAND (expression, 0);
21692	}
21693      gcc_assert (TREE_CODE (expression) == OVERLOAD
21694		  || TREE_CODE (expression) == FUNCTION_DECL);
21695
21696      while (expression)
21697	{
21698	  if (type_dependent_expression_p (OVL_CURRENT (expression)))
21699	    return true;
21700	  expression = OVL_NEXT (expression);
21701	}
21702      return false;
21703    }
21704
21705  gcc_assert (TREE_CODE (expression) != TYPE_DECL);
21706
21707  return (dependent_type_p (TREE_TYPE (expression)));
21708}
21709
21710/* walk_tree callback function for instantiation_dependent_expression_p,
21711   below.  Returns non-zero if a dependent subexpression is found.  */
21712
21713static tree
21714instantiation_dependent_r (tree *tp, int *walk_subtrees,
21715			   void * /*data*/)
21716{
21717  if (TYPE_P (*tp))
21718    {
21719      /* We don't have to worry about decltype currently because decltype
21720	 of an instantiation-dependent expr is a dependent type.  This
21721	 might change depending on the resolution of DR 1172.  */
21722      *walk_subtrees = false;
21723      return NULL_TREE;
21724    }
21725  enum tree_code code = TREE_CODE (*tp);
21726  switch (code)
21727    {
21728      /* Don't treat an argument list as dependent just because it has no
21729	 TREE_TYPE.  */
21730    case TREE_LIST:
21731    case TREE_VEC:
21732      return NULL_TREE;
21733
21734    case VAR_DECL:
21735    case CONST_DECL:
21736      /* A constant with a dependent initializer is dependent.  */
21737      if (value_dependent_expression_p (*tp))
21738	return *tp;
21739      break;
21740
21741    case TEMPLATE_PARM_INDEX:
21742      return *tp;
21743
21744      /* Handle expressions with type operands.  */
21745    case SIZEOF_EXPR:
21746    case ALIGNOF_EXPR:
21747    case TYPEID_EXPR:
21748    case AT_ENCODE_EXPR:
21749      {
21750	tree op = TREE_OPERAND (*tp, 0);
21751	if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
21752	  op = TREE_TYPE (op);
21753	if (TYPE_P (op))
21754	  {
21755	    if (dependent_type_p (op))
21756	      return *tp;
21757	    else
21758	      {
21759		*walk_subtrees = false;
21760		return NULL_TREE;
21761	      }
21762	  }
21763	break;
21764      }
21765
21766    case TRAIT_EXPR:
21767      if (dependent_type_p (TRAIT_EXPR_TYPE1 (*tp))
21768	  || (TRAIT_EXPR_TYPE2 (*tp)
21769	      && dependent_type_p (TRAIT_EXPR_TYPE2 (*tp))))
21770	return *tp;
21771      *walk_subtrees = false;
21772      return NULL_TREE;
21773
21774    case COMPONENT_REF:
21775      if (identifier_p (TREE_OPERAND (*tp, 1)))
21776	/* In a template, finish_class_member_access_expr creates a
21777	   COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
21778	   type-dependent, so that we can check access control at
21779	   instantiation time (PR 42277).  See also Core issue 1273.  */
21780	return *tp;
21781      break;
21782
21783    case SCOPE_REF:
21784      if (instantiation_dependent_scope_ref_p (*tp))
21785	return *tp;
21786      else
21787	break;
21788
21789      /* Treat statement-expressions as dependent.  */
21790    case BIND_EXPR:
21791      return *tp;
21792
21793    default:
21794      break;
21795    }
21796
21797  if (type_dependent_expression_p (*tp))
21798    return *tp;
21799  else
21800    return NULL_TREE;
21801}
21802
21803/* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
21804   sense defined by the ABI:
21805
21806   "An expression is instantiation-dependent if it is type-dependent
21807   or value-dependent, or it has a subexpression that is type-dependent
21808   or value-dependent."  */
21809
21810bool
21811instantiation_dependent_expression_p (tree expression)
21812{
21813  tree result;
21814
21815  if (!processing_template_decl)
21816    return false;
21817
21818  if (expression == error_mark_node)
21819    return false;
21820
21821  result = cp_walk_tree_without_duplicates (&expression,
21822					    instantiation_dependent_r, NULL);
21823  return result != NULL_TREE;
21824}
21825
21826/* Like type_dependent_expression_p, but it also works while not processing
21827   a template definition, i.e. during substitution or mangling.  */
21828
21829bool
21830type_dependent_expression_p_push (tree expr)
21831{
21832  bool b;
21833  ++processing_template_decl;
21834  b = type_dependent_expression_p (expr);
21835  --processing_template_decl;
21836  return b;
21837}
21838
21839/* Returns TRUE if ARGS contains a type-dependent expression.  */
21840
21841bool
21842any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
21843{
21844  unsigned int i;
21845  tree arg;
21846
21847  FOR_EACH_VEC_SAFE_ELT (args, i, arg)
21848    {
21849      if (type_dependent_expression_p (arg))
21850	return true;
21851    }
21852  return false;
21853}
21854
21855/* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21856   expressions) contains any type-dependent expressions.  */
21857
21858bool
21859any_type_dependent_elements_p (const_tree list)
21860{
21861  for (; list; list = TREE_CHAIN (list))
21862    if (type_dependent_expression_p (TREE_VALUE (list)))
21863      return true;
21864
21865  return false;
21866}
21867
21868/* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21869   expressions) contains any value-dependent expressions.  */
21870
21871bool
21872any_value_dependent_elements_p (const_tree list)
21873{
21874  for (; list; list = TREE_CHAIN (list))
21875    if (value_dependent_expression_p (TREE_VALUE (list)))
21876      return true;
21877
21878  return false;
21879}
21880
21881/* Returns TRUE if the ARG (a template argument) is dependent.  */
21882
21883bool
21884dependent_template_arg_p (tree arg)
21885{
21886  if (!processing_template_decl)
21887    return false;
21888
21889  /* Assume a template argument that was wrongly written by the user
21890     is dependent. This is consistent with what
21891     any_dependent_template_arguments_p [that calls this function]
21892     does.  */
21893  if (!arg || arg == error_mark_node)
21894    return true;
21895
21896  if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
21897    arg = ARGUMENT_PACK_SELECT_ARG (arg);
21898
21899  if (TREE_CODE (arg) == TEMPLATE_DECL
21900      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
21901    return dependent_template_p (arg);
21902  else if (ARGUMENT_PACK_P (arg))
21903    {
21904      tree args = ARGUMENT_PACK_ARGS (arg);
21905      int i, len = TREE_VEC_LENGTH (args);
21906      for (i = 0; i < len; ++i)
21907        {
21908          if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
21909            return true;
21910        }
21911
21912      return false;
21913    }
21914  else if (TYPE_P (arg))
21915    return dependent_type_p (arg);
21916  else
21917    return (type_dependent_expression_p (arg)
21918	    || value_dependent_expression_p (arg));
21919}
21920
21921/* Returns true if ARGS (a collection of template arguments) contains
21922   any types that require structural equality testing.  */
21923
21924bool
21925any_template_arguments_need_structural_equality_p (tree args)
21926{
21927  int i;
21928  int j;
21929
21930  if (!args)
21931    return false;
21932  if (args == error_mark_node)
21933    return true;
21934
21935  for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21936    {
21937      tree level = TMPL_ARGS_LEVEL (args, i + 1);
21938      for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21939	{
21940	  tree arg = TREE_VEC_ELT (level, j);
21941	  tree packed_args = NULL_TREE;
21942	  int k, len = 1;
21943
21944	  if (ARGUMENT_PACK_P (arg))
21945	    {
21946	      /* Look inside the argument pack.  */
21947	      packed_args = ARGUMENT_PACK_ARGS (arg);
21948	      len = TREE_VEC_LENGTH (packed_args);
21949	    }
21950
21951	  for (k = 0; k < len; ++k)
21952	    {
21953	      if (packed_args)
21954		arg = TREE_VEC_ELT (packed_args, k);
21955
21956	      if (error_operand_p (arg))
21957		return true;
21958	      else if (TREE_CODE (arg) == TEMPLATE_DECL)
21959		continue;
21960	      else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
21961		return true;
21962	      else if (!TYPE_P (arg) && TREE_TYPE (arg)
21963		       && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
21964		return true;
21965	    }
21966	}
21967    }
21968
21969  return false;
21970}
21971
21972/* Returns true if ARGS (a collection of template arguments) contains
21973   any dependent arguments.  */
21974
21975bool
21976any_dependent_template_arguments_p (const_tree args)
21977{
21978  int i;
21979  int j;
21980
21981  if (!args)
21982    return false;
21983  if (args == error_mark_node)
21984    return true;
21985
21986  for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21987    {
21988      const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
21989      for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21990	if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
21991	  return true;
21992    }
21993
21994  return false;
21995}
21996
21997/* Returns TRUE if the template TMPL is dependent.  */
21998
21999bool
22000dependent_template_p (tree tmpl)
22001{
22002  if (TREE_CODE (tmpl) == OVERLOAD)
22003    {
22004      while (tmpl)
22005	{
22006	  if (dependent_template_p (OVL_CURRENT (tmpl)))
22007	    return true;
22008	  tmpl = OVL_NEXT (tmpl);
22009	}
22010      return false;
22011    }
22012
22013  /* Template template parameters are dependent.  */
22014  if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
22015      || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
22016    return true;
22017  /* So are names that have not been looked up.  */
22018  if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
22019    return true;
22020  /* So are member templates of dependent classes.  */
22021  if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
22022    return dependent_type_p (DECL_CONTEXT (tmpl));
22023  return false;
22024}
22025
22026/* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
22027
22028bool
22029dependent_template_id_p (tree tmpl, tree args)
22030{
22031  return (dependent_template_p (tmpl)
22032	  || any_dependent_template_arguments_p (args));
22033}
22034
22035/* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
22036   is dependent.  */
22037
22038bool
22039dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
22040{
22041  int i;
22042
22043  if (!processing_template_decl)
22044    return false;
22045
22046  for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
22047    {
22048      tree decl = TREE_VEC_ELT (declv, i);
22049      tree init = TREE_VEC_ELT (initv, i);
22050      tree cond = TREE_VEC_ELT (condv, i);
22051      tree incr = TREE_VEC_ELT (incrv, i);
22052
22053      if (type_dependent_expression_p (decl))
22054	return true;
22055
22056      if (init && type_dependent_expression_p (init))
22057	return true;
22058
22059      if (type_dependent_expression_p (cond))
22060	return true;
22061
22062      if (COMPARISON_CLASS_P (cond)
22063	  && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
22064	      || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
22065	return true;
22066
22067      if (TREE_CODE (incr) == MODOP_EXPR)
22068	{
22069	  if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
22070	      || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
22071	    return true;
22072	}
22073      else if (type_dependent_expression_p (incr))
22074	return true;
22075      else if (TREE_CODE (incr) == MODIFY_EXPR)
22076	{
22077	  if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
22078	    return true;
22079	  else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
22080	    {
22081	      tree t = TREE_OPERAND (incr, 1);
22082	      if (type_dependent_expression_p (TREE_OPERAND (t, 0))
22083		  || type_dependent_expression_p (TREE_OPERAND (t, 1)))
22084		return true;
22085	    }
22086	}
22087    }
22088
22089  return false;
22090}
22091
22092/* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
22093   TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
22094   no such TYPE can be found.  Note that this function peers inside
22095   uninstantiated templates and therefore should be used only in
22096   extremely limited situations.  ONLY_CURRENT_P restricts this
22097   peering to the currently open classes hierarchy (which is required
22098   when comparing types).  */
22099
22100tree
22101resolve_typename_type (tree type, bool only_current_p)
22102{
22103  tree scope;
22104  tree name;
22105  tree decl;
22106  int quals;
22107  tree pushed_scope;
22108  tree result;
22109
22110  gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
22111
22112  scope = TYPE_CONTEXT (type);
22113  /* Usually the non-qualified identifier of a TYPENAME_TYPE is
22114     TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
22115     a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
22116     the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
22117     identifier  of the TYPENAME_TYPE anymore.
22118     So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
22119     TYPENAME_TYPE instead, we avoid messing up with a possible
22120     typedef variant case.  */
22121  name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
22122
22123  /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
22124     it first before we can figure out what NAME refers to.  */
22125  if (TREE_CODE (scope) == TYPENAME_TYPE)
22126    {
22127      if (TYPENAME_IS_RESOLVING_P (scope))
22128	/* Given a class template A with a dependent base with nested type C,
22129	   typedef typename A::C::C C will land us here, as trying to resolve
22130	   the initial A::C leads to the local C typedef, which leads back to
22131	   A::C::C.  So we break the recursion now.  */
22132	return type;
22133      else
22134	scope = resolve_typename_type (scope, only_current_p);
22135    }
22136  /* If we don't know what SCOPE refers to, then we cannot resolve the
22137     TYPENAME_TYPE.  */
22138  if (TREE_CODE (scope) == TYPENAME_TYPE)
22139    return type;
22140  /* If the SCOPE is a template type parameter, we have no way of
22141     resolving the name.  */
22142  if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
22143    return type;
22144  /* If the SCOPE is not the current instantiation, there's no reason
22145     to look inside it.  */
22146  if (only_current_p && !currently_open_class (scope))
22147    return type;
22148  /* If this is a typedef, we don't want to look inside (c++/11987).  */
22149  if (typedef_variant_p (type))
22150    return type;
22151  /* If SCOPE isn't the template itself, it will not have a valid
22152     TYPE_FIELDS list.  */
22153  if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
22154    /* scope is either the template itself or a compatible instantiation
22155       like X<T>, so look up the name in the original template.  */
22156    scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
22157  else
22158    /* scope is a partial instantiation, so we can't do the lookup or we
22159       will lose the template arguments.  */
22160    return type;
22161  /* Enter the SCOPE so that name lookup will be resolved as if we
22162     were in the class definition.  In particular, SCOPE will no
22163     longer be considered a dependent type.  */
22164  pushed_scope = push_scope (scope);
22165  /* Look up the declaration.  */
22166  decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
22167			tf_warning_or_error);
22168
22169  result = NULL_TREE;
22170
22171  /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
22172     find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
22173  if (!decl)
22174    /*nop*/;
22175  else if (identifier_p (TYPENAME_TYPE_FULLNAME (type))
22176	   && TREE_CODE (decl) == TYPE_DECL)
22177    {
22178      result = TREE_TYPE (decl);
22179      if (result == error_mark_node)
22180	result = NULL_TREE;
22181    }
22182  else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
22183	   && DECL_CLASS_TEMPLATE_P (decl))
22184    {
22185      tree tmpl;
22186      tree args;
22187      /* Obtain the template and the arguments.  */
22188      tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
22189      args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
22190      /* Instantiate the template.  */
22191      result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
22192				      /*entering_scope=*/0,
22193				      tf_error | tf_user);
22194      if (result == error_mark_node)
22195	result = NULL_TREE;
22196    }
22197
22198  /* Leave the SCOPE.  */
22199  if (pushed_scope)
22200    pop_scope (pushed_scope);
22201
22202  /* If we failed to resolve it, return the original typename.  */
22203  if (!result)
22204    return type;
22205
22206  /* If lookup found a typename type, resolve that too.  */
22207  if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
22208    {
22209      /* Ill-formed programs can cause infinite recursion here, so we
22210	 must catch that.  */
22211      TYPENAME_IS_RESOLVING_P (result) = 1;
22212      result = resolve_typename_type (result, only_current_p);
22213      TYPENAME_IS_RESOLVING_P (result) = 0;
22214    }
22215
22216  /* Qualify the resulting type.  */
22217  quals = cp_type_quals (type);
22218  if (quals)
22219    result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
22220
22221  return result;
22222}
22223
22224/* EXPR is an expression which is not type-dependent.  Return a proxy
22225   for EXPR that can be used to compute the types of larger
22226   expressions containing EXPR.  */
22227
22228tree
22229build_non_dependent_expr (tree expr)
22230{
22231  tree inner_expr;
22232
22233#ifdef ENABLE_CHECKING
22234  /* Try to get a constant value for all non-dependent expressions in
22235      order to expose bugs in *_dependent_expression_p and constexpr.  */
22236  if (cxx_dialect >= cxx11)
22237    fold_non_dependent_expr (expr);
22238#endif
22239
22240  /* Preserve OVERLOADs; the functions must be available to resolve
22241     types.  */
22242  inner_expr = expr;
22243  if (TREE_CODE (inner_expr) == STMT_EXPR)
22244    inner_expr = stmt_expr_value_expr (inner_expr);
22245  if (TREE_CODE (inner_expr) == ADDR_EXPR)
22246    inner_expr = TREE_OPERAND (inner_expr, 0);
22247  if (TREE_CODE (inner_expr) == COMPONENT_REF)
22248    inner_expr = TREE_OPERAND (inner_expr, 1);
22249  if (is_overloaded_fn (inner_expr)
22250      || TREE_CODE (inner_expr) == OFFSET_REF)
22251    return expr;
22252  /* There is no need to return a proxy for a variable.  */
22253  if (VAR_P (expr))
22254    return expr;
22255  /* Preserve string constants; conversions from string constants to
22256     "char *" are allowed, even though normally a "const char *"
22257     cannot be used to initialize a "char *".  */
22258  if (TREE_CODE (expr) == STRING_CST)
22259    return expr;
22260  /* Preserve void and arithmetic constants, as an optimization -- there is no
22261     reason to create a new node.  */
22262  if (TREE_CODE (expr) == VOID_CST
22263      || TREE_CODE (expr) == INTEGER_CST
22264      || TREE_CODE (expr) == REAL_CST)
22265    return expr;
22266  /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
22267     There is at least one place where we want to know that a
22268     particular expression is a throw-expression: when checking a ?:
22269     expression, there are special rules if the second or third
22270     argument is a throw-expression.  */
22271  if (TREE_CODE (expr) == THROW_EXPR)
22272    return expr;
22273
22274  /* Don't wrap an initializer list, we need to be able to look inside.  */
22275  if (BRACE_ENCLOSED_INITIALIZER_P (expr))
22276    return expr;
22277
22278  /* Don't wrap a dummy object, we need to be able to test for it.  */
22279  if (is_dummy_object (expr))
22280    return expr;
22281
22282  if (TREE_CODE (expr) == COND_EXPR)
22283    return build3 (COND_EXPR,
22284		   TREE_TYPE (expr),
22285		   TREE_OPERAND (expr, 0),
22286		   (TREE_OPERAND (expr, 1)
22287		    ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
22288		    : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
22289		   build_non_dependent_expr (TREE_OPERAND (expr, 2)));
22290  if (TREE_CODE (expr) == COMPOUND_EXPR
22291      && !COMPOUND_EXPR_OVERLOADED (expr))
22292    return build2 (COMPOUND_EXPR,
22293		   TREE_TYPE (expr),
22294		   TREE_OPERAND (expr, 0),
22295		   build_non_dependent_expr (TREE_OPERAND (expr, 1)));
22296
22297  /* If the type is unknown, it can't really be non-dependent */
22298  gcc_assert (TREE_TYPE (expr) != unknown_type_node);
22299
22300  /* Otherwise, build a NON_DEPENDENT_EXPR.  */
22301  return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
22302}
22303
22304/* ARGS is a vector of expressions as arguments to a function call.
22305   Replace the arguments with equivalent non-dependent expressions.
22306   This modifies ARGS in place.  */
22307
22308void
22309make_args_non_dependent (vec<tree, va_gc> *args)
22310{
22311  unsigned int ix;
22312  tree arg;
22313
22314  FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
22315    {
22316      tree newarg = build_non_dependent_expr (arg);
22317      if (newarg != arg)
22318	(*args)[ix] = newarg;
22319    }
22320}
22321
22322/* Returns a type which represents 'auto' or 'decltype(auto)'.  We use a
22323   TEMPLATE_TYPE_PARM with a level one deeper than the actual template
22324   parms.  */
22325
22326static tree
22327make_auto_1 (tree name)
22328{
22329  tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
22330  TYPE_NAME (au) = build_decl (input_location,
22331			       TYPE_DECL, name, au);
22332  TYPE_STUB_DECL (au) = TYPE_NAME (au);
22333  TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
22334    (0, processing_template_decl + 1, processing_template_decl + 1,
22335     TYPE_NAME (au), NULL_TREE);
22336  TYPE_CANONICAL (au) = canonical_type_parameter (au);
22337  DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
22338  SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
22339
22340  return au;
22341}
22342
22343tree
22344make_decltype_auto (void)
22345{
22346  return make_auto_1 (get_identifier ("decltype(auto)"));
22347}
22348
22349tree
22350make_auto (void)
22351{
22352  return make_auto_1 (get_identifier ("auto"));
22353}
22354
22355/* Given type ARG, return std::initializer_list<ARG>.  */
22356
22357static tree
22358listify (tree arg)
22359{
22360  tree std_init_list = namespace_binding
22361    (get_identifier ("initializer_list"), std_node);
22362  tree argvec;
22363  if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
22364    {
22365      error ("deducing from brace-enclosed initializer list requires "
22366	     "#include <initializer_list>");
22367      return error_mark_node;
22368    }
22369  argvec = make_tree_vec (1);
22370  TREE_VEC_ELT (argvec, 0) = arg;
22371  return lookup_template_class (std_init_list, argvec, NULL_TREE,
22372				NULL_TREE, 0, tf_warning_or_error);
22373}
22374
22375/* Replace auto in TYPE with std::initializer_list<auto>.  */
22376
22377static tree
22378listify_autos (tree type, tree auto_node)
22379{
22380  tree init_auto = listify (auto_node);
22381  tree argvec = make_tree_vec (1);
22382  TREE_VEC_ELT (argvec, 0) = init_auto;
22383  if (processing_template_decl)
22384    argvec = add_to_template_args (current_template_args (), argvec);
22385  return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
22386}
22387
22388/* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
22389   from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
22390
22391tree
22392do_auto_deduction (tree type, tree init, tree auto_node)
22393{
22394  tree targs;
22395
22396  if (init == error_mark_node)
22397    return error_mark_node;
22398
22399  if (type_dependent_expression_p (init))
22400    /* Defining a subset of type-dependent expressions that we can deduce
22401       from ahead of time isn't worth the trouble.  */
22402    return type;
22403
22404  /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
22405     with either a new invented type template parameter U or, if the
22406     initializer is a braced-init-list (8.5.4), with
22407     std::initializer_list<U>.  */
22408  if (BRACE_ENCLOSED_INITIALIZER_P (init))
22409    {
22410      if (!DIRECT_LIST_INIT_P (init))
22411	type = listify_autos (type, auto_node);
22412      else if (CONSTRUCTOR_NELTS (init) == 1)
22413	init = CONSTRUCTOR_ELT (init, 0)->value;
22414      else
22415	{
22416	  if (permerror (input_location, "direct-list-initialization of "
22417			 "%<auto%> requires exactly one element"))
22418	    inform (input_location,
22419		    "for deduction to %<std::initializer_list%>, use copy-"
22420		    "list-initialization (i.e. add %<=%> before the %<{%>)");
22421	  type = listify_autos (type, auto_node);
22422	}
22423    }
22424
22425  init = resolve_nondeduced_context (init, tf_warning_or_error);
22426
22427  targs = make_tree_vec (1);
22428  if (AUTO_IS_DECLTYPE (auto_node))
22429    {
22430      bool id = (DECL_P (init) || (TREE_CODE (init) == COMPONENT_REF
22431				   && !REF_PARENTHESIZED_P (init)));
22432      TREE_VEC_ELT (targs, 0)
22433	= finish_decltype_type (init, id, tf_warning_or_error);
22434      if (type != auto_node)
22435	{
22436	  error ("%qT as type rather than plain %<decltype(auto)%>", type);
22437	  return error_mark_node;
22438	}
22439    }
22440  else
22441    {
22442      tree parms = build_tree_list (NULL_TREE, type);
22443      tree tparms = make_tree_vec (1);
22444      int val;
22445
22446      TREE_VEC_ELT (tparms, 0)
22447	= build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
22448      val = type_unification_real (tparms, targs, parms, &init, 1, 0,
22449				   DEDUCE_CALL, LOOKUP_NORMAL,
22450				   NULL, /*explain_p=*/false);
22451      if (val > 0)
22452	{
22453	  if (processing_template_decl)
22454	    /* Try again at instantiation time.  */
22455	    return type;
22456	  if (type && type != error_mark_node)
22457	    /* If type is error_mark_node a diagnostic must have been
22458	       emitted by now.  Also, having a mention to '<type error>'
22459	       in the diagnostic is not really useful to the user.  */
22460	    {
22461	      if (cfun && auto_node == current_function_auto_return_pattern
22462		  && LAMBDA_FUNCTION_P (current_function_decl))
22463		error ("unable to deduce lambda return type from %qE", init);
22464	      else
22465		error ("unable to deduce %qT from %qE", type, init);
22466	    }
22467	  return error_mark_node;
22468	}
22469    }
22470
22471  /* If the list of declarators contains more than one declarator, the type
22472     of each declared variable is determined as described above. If the
22473     type deduced for the template parameter U is not the same in each
22474     deduction, the program is ill-formed.  */
22475  if (TREE_TYPE (auto_node)
22476      && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
22477    {
22478      if (cfun && auto_node == current_function_auto_return_pattern
22479	  && LAMBDA_FUNCTION_P (current_function_decl))
22480	error ("inconsistent types %qT and %qT deduced for "
22481	       "lambda return type", TREE_TYPE (auto_node),
22482	       TREE_VEC_ELT (targs, 0));
22483      else
22484	error ("inconsistent deduction for %qT: %qT and then %qT",
22485	       auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
22486      return error_mark_node;
22487    }
22488  TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
22489
22490  if (processing_template_decl)
22491    targs = add_to_template_args (current_template_args (), targs);
22492  return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
22493}
22494
22495/* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
22496   result.  */
22497
22498tree
22499splice_late_return_type (tree type, tree late_return_type)
22500{
22501  tree argvec;
22502
22503  if (late_return_type == NULL_TREE)
22504    return type;
22505  argvec = make_tree_vec (1);
22506  TREE_VEC_ELT (argvec, 0) = late_return_type;
22507  if (processing_template_parmlist)
22508    /* For a late-specified return type in a template type-parameter, we
22509       need to add a dummy argument level for its parmlist.  */
22510    argvec = add_to_template_args
22511      (make_tree_vec (processing_template_parmlist), argvec);
22512  if (current_template_parms)
22513    argvec = add_to_template_args (current_template_args (), argvec);
22514  return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
22515}
22516
22517/* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
22518   'decltype(auto)'.  */
22519
22520bool
22521is_auto (const_tree type)
22522{
22523  if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
22524      && (TYPE_IDENTIFIER (type) == get_identifier ("auto")
22525	  || TYPE_IDENTIFIER (type) == get_identifier ("decltype(auto)")))
22526    return true;
22527  else
22528    return false;
22529}
22530
22531/* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
22532   a use of `auto'.  Returns NULL_TREE otherwise.  */
22533
22534tree
22535type_uses_auto (tree type)
22536{
22537  return find_type_usage (type, is_auto);
22538}
22539
22540/* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto',
22541   'decltype(auto)' or a concept.  */
22542
22543bool
22544is_auto_or_concept (const_tree type)
22545{
22546  return is_auto (type); // or concept
22547}
22548
22549/* Returns the TEMPLATE_TYPE_PARM in TYPE representing a generic type (`auto' or
22550   a concept identifier) iff TYPE contains a use of a generic type.  Returns
22551   NULL_TREE otherwise.  */
22552
22553tree
22554type_uses_auto_or_concept (tree type)
22555{
22556  return find_type_usage (type, is_auto_or_concept);
22557}
22558
22559
22560/* For a given template T, return the vector of typedefs referenced
22561   in T for which access check is needed at T instantiation time.
22562   T is either  a FUNCTION_DECL or a RECORD_TYPE.
22563   Those typedefs were added to T by the function
22564   append_type_to_template_for_access_check.  */
22565
22566vec<qualified_typedef_usage_t, va_gc> *
22567get_types_needing_access_check (tree t)
22568{
22569  tree ti;
22570  vec<qualified_typedef_usage_t, va_gc> *result = NULL;
22571
22572  if (!t || t == error_mark_node)
22573    return NULL;
22574
22575  if (!(ti = get_template_info (t)))
22576    return NULL;
22577
22578  if (CLASS_TYPE_P (t)
22579      || TREE_CODE (t) == FUNCTION_DECL)
22580    {
22581      if (!TI_TEMPLATE (ti))
22582	return NULL;
22583
22584      result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
22585    }
22586
22587  return result;
22588}
22589
22590/* Append the typedef TYPE_DECL used in template T to a list of typedefs
22591   tied to T. That list of typedefs will be access checked at
22592   T instantiation time.
22593   T is either a FUNCTION_DECL or a RECORD_TYPE.
22594   TYPE_DECL is a TYPE_DECL node representing a typedef.
22595   SCOPE is the scope through which TYPE_DECL is accessed.
22596   LOCATION is the location of the usage point of TYPE_DECL.
22597
22598   This function is a subroutine of
22599   append_type_to_template_for_access_check.  */
22600
22601static void
22602append_type_to_template_for_access_check_1 (tree t,
22603					    tree type_decl,
22604					    tree scope,
22605					    location_t location)
22606{
22607  qualified_typedef_usage_t typedef_usage;
22608  tree ti;
22609
22610  if (!t || t == error_mark_node)
22611    return;
22612
22613  gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
22614	       || CLASS_TYPE_P (t))
22615	      && type_decl
22616	      && TREE_CODE (type_decl) == TYPE_DECL
22617	      && scope);
22618
22619  if (!(ti = get_template_info (t)))
22620    return;
22621
22622  gcc_assert (TI_TEMPLATE (ti));
22623
22624  typedef_usage.typedef_decl = type_decl;
22625  typedef_usage.context = scope;
22626  typedef_usage.locus = location;
22627
22628  vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
22629}
22630
22631/* Append TYPE_DECL to the template TEMPL.
22632   TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
22633   At TEMPL instanciation time, TYPE_DECL will be checked to see
22634   if it can be accessed through SCOPE.
22635   LOCATION is the location of the usage point of TYPE_DECL.
22636
22637   e.g. consider the following code snippet:
22638
22639     class C
22640     {
22641       typedef int myint;
22642     };
22643
22644     template<class U> struct S
22645     {
22646       C::myint mi; // <-- usage point of the typedef C::myint
22647     };
22648
22649     S<char> s;
22650
22651   At S<char> instantiation time, we need to check the access of C::myint
22652   In other words, we need to check the access of the myint typedef through
22653   the C scope. For that purpose, this function will add the myint typedef
22654   and the scope C through which its being accessed to a list of typedefs
22655   tied to the template S. That list will be walked at template instantiation
22656   time and access check performed on each typedefs it contains.
22657   Note that this particular code snippet should yield an error because
22658   myint is private to C.  */
22659
22660void
22661append_type_to_template_for_access_check (tree templ,
22662                                          tree type_decl,
22663					  tree scope,
22664					  location_t location)
22665{
22666  qualified_typedef_usage_t *iter;
22667  unsigned i;
22668
22669  gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
22670
22671  /* Make sure we don't append the type to the template twice.  */
22672  FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
22673    if (iter->typedef_decl == type_decl && scope == iter->context)
22674      return;
22675
22676  append_type_to_template_for_access_check_1 (templ, type_decl,
22677					      scope, location);
22678}
22679
22680/* Convert the generic type parameters in PARM that match the types given in the
22681   range [START_IDX, END_IDX) from the current_template_parms into generic type
22682   packs.  */
22683
22684tree
22685convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
22686{
22687  tree current = current_template_parms;
22688  int depth = TMPL_PARMS_DEPTH (current);
22689  current = INNERMOST_TEMPLATE_PARMS (current);
22690  tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
22691
22692  for (int i = 0; i < start_idx; ++i)
22693    TREE_VEC_ELT (replacement, i)
22694      = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22695
22696  for (int i = start_idx; i < end_idx; ++i)
22697    {
22698      /* Create a distinct parameter pack type from the current parm and add it
22699	 to the replacement args to tsubst below into the generic function
22700	 parameter.  */
22701
22702      tree o = TREE_TYPE (TREE_VALUE
22703			  (TREE_VEC_ELT (current, i)));
22704      tree t = copy_type (o);
22705      TEMPLATE_TYPE_PARM_INDEX (t)
22706	= reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
22707				      o, 0, 0, tf_none);
22708      TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
22709      TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
22710      TYPE_MAIN_VARIANT (t) = t;
22711      TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
22712      TYPE_CANONICAL (t) = canonical_type_parameter (t);
22713      TREE_VEC_ELT (replacement, i) = t;
22714      TREE_VALUE (TREE_VEC_ELT (current, i)) = TREE_CHAIN (t);
22715    }
22716
22717  for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
22718    TREE_VEC_ELT (replacement, i)
22719      = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22720
22721  /* If there are more levels then build up the replacement with the outer
22722     template parms.  */
22723  if (depth > 1)
22724    replacement = add_to_template_args (template_parms_to_args
22725					(TREE_CHAIN (current_template_parms)),
22726					replacement);
22727
22728  return tsubst (parm, replacement, tf_none, NULL_TREE);
22729}
22730
22731
22732/* Set up the hash tables for template instantiations.  */
22733
22734void
22735init_template_processing (void)
22736{
22737  decl_specializations = hash_table<spec_hasher>::create_ggc (37);
22738  type_specializations = hash_table<spec_hasher>::create_ggc (37);
22739}
22740
22741/* Print stats about the template hash tables for -fstats.  */
22742
22743void
22744print_template_statistics (void)
22745{
22746  fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
22747	   "%f collisions\n", (long) decl_specializations->size (),
22748	   (long) decl_specializations->elements (),
22749	   decl_specializations->collisions ());
22750  fprintf (stderr, "type_specializations: size %ld, %ld elements, "
22751	   "%f collisions\n", (long) type_specializations->size (),
22752	   (long) type_specializations->elements (),
22753	   type_specializations->collisions ());
22754}
22755
22756#include "gt-cp-pt.h"
22757