call.c (build_op_delete_call, [...]): Check mark_used return value.
[platform/upstream/gcc.git] / gcc / cp / pt.c
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
6 This file is part of GCC.
7
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
11 any later version.
12
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
21
22 /* Known bugs or deficiencies include:
23
24      all methods must be provided in header files; can't use a source
25      file that contains only the method templates and "just win".  */
26
27 #include "config.h"
28 #include "system.h"
29 #include "coretypes.h"
30 #include "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.  */
61 typedef 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.  */
66 struct GTY ((chain_next ("%h.next"))) pending_template {
67   struct pending_template *next;
68   struct tinst_level *tinst;
69 };
70
71 static GTY(()) struct pending_template *pending_templates;
72 static GTY(()) struct pending_template *last_pending_template;
73
74 int processing_template_parmlist;
75 static int template_header_count;
76
77 static GTY(()) tree saved_trees;
78 static vec<int> inline_parm_levels;
79
80 static GTY(()) struct tinst_level *current_tinst_level;
81
82 static 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.  */
87 static tree cur_stmt_expr;
88
89 /* True if we've recursed into fn_type_unification too many times.  */
90 static bool excessive_deduction_depth;
91
92 struct GTY((for_user)) spec_entry
93 {
94   tree tmpl;
95   tree args;
96   tree spec;
97 };
98
99 struct spec_hasher : ggc_hasher<spec_entry *>
100 {
101   static hashval_t hash (spec_entry *);
102   static bool equal (spec_entry *, spec_entry *);
103 };
104
105 static GTY (()) hash_table<spec_hasher> *decl_specializations;
106
107 static 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.  */
113 static 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
124 enum template_base_result {
125   tbr_incomplete_type,
126   tbr_ambiguous_baseclass,
127   tbr_success
128 };
129
130 static void push_access_scope (tree);
131 static void pop_access_scope (tree);
132 static bool resolve_overloaded_unification (tree, tree, tree, tree,
133                                             unification_kind_t, int,
134                                             bool);
135 static int try_one_overload (tree, tree, tree, tree, tree,
136                              unification_kind_t, int, bool, bool);
137 static int unify (tree, tree, tree, tree, int, bool);
138 static void add_pending_template (tree);
139 static tree reopen_tinst_level (struct tinst_level *);
140 static tree tsubst_initializer_list (tree, tree);
141 static tree get_partial_spec_bindings (tree, tree, tree, tree);
142 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
143                                    bool, bool);
144 static tree coerce_innermost_template_parms (tree, tree, tree, tsubst_flags_t,
145                                               bool, bool);
146 static void tsubst_enum (tree, tree, tree);
147 static tree add_to_template_args (tree, tree);
148 static tree add_outermost_template_args (tree, tree);
149 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
150 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
151                                              tree);
152 static 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);
156 static void note_template_header (int);
157 static tree convert_nontype_argument_function (tree, tree, tsubst_flags_t);
158 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
159 static tree convert_template_argument (tree, tree, tree,
160                                        tsubst_flags_t, int, tree);
161 static int for_each_template_parm (tree, tree_fn_t, void*,
162                                    hash_set<tree> *, bool);
163 static tree expand_template_argument_pack (tree);
164 static tree build_template_parm_index (int, int, int, tree, tree);
165 static bool inline_needs_template_parms (tree, bool);
166 static void push_inline_template_parms_recursive (tree, int);
167 static tree retrieve_local_specialization (tree);
168 static void register_local_specialization (tree, tree);
169 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
170 static int mark_template_parm (tree, void *);
171 static int template_parm_this_level_p (tree, void *);
172 static tree tsubst_friend_function (tree, tree);
173 static tree tsubst_friend_class (tree, tree);
174 static int can_complete_type_without_circularity (tree);
175 static tree get_bindings (tree, tree, tree, bool);
176 static int template_decl_level (tree);
177 static int check_cv_quals_for_unify (int, tree, tree);
178 static void template_parm_level_and_index (tree, int*, int*);
179 static int unify_pack_expansion (tree, tree, tree,
180                                  tree, unification_kind_t, bool, bool);
181 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
182 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
183 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
184 static void regenerate_decl_from_template (tree, tree);
185 static tree most_specialized_partial_spec (tree, tsubst_flags_t);
186 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
187 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
188 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
189 static bool check_specialization_scope (void);
190 static tree process_partial_specialization (tree);
191 static void set_current_access_from_decl (tree);
192 static enum template_base_result get_template_base (tree, tree, tree, tree,
193                                                     bool , tree *);
194 static tree try_class_unification (tree, tree, tree, tree, bool);
195 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
196                                            tree, tree);
197 static bool template_template_parm_bindings_ok_p (tree, tree);
198 static int template_args_equal (tree, tree);
199 static void tsubst_default_arguments (tree, tsubst_flags_t);
200 static tree for_each_template_parm_r (tree *, int *, void *);
201 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
202 static void copy_default_args_to_explicit_spec (tree);
203 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
204 static bool dependent_template_arg_p (tree);
205 static bool any_template_arguments_need_structural_equality_p (tree);
206 static bool dependent_type_p_r (tree);
207 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
208 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
209 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
210 static tree tsubst_decl (tree, tree, tsubst_flags_t);
211 static void perform_typedefs_access_check (tree tmpl, tree targs);
212 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
213                                                         location_t);
214 static tree listify (tree);
215 static tree listify_autos (tree, tree);
216 static tree template_parm_to_arg (tree t);
217 static tree current_template_args (void);
218 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
219 static tree instantiate_alias_template (tree, tree, tsubst_flags_t);
220
221 /* Make the current scope suitable for access checking when we are
222    processing T.  T can be FUNCTION_DECL for instantiated function
223    template, VAR_DECL for static member variable, or TYPE_DECL for
224    alias template (needed by instantiate_decl).  */
225
226 static void
227 push_access_scope (tree t)
228 {
229   gcc_assert (VAR_OR_FUNCTION_DECL_P (t)
230               || TREE_CODE (t) == TYPE_DECL);
231
232   if (DECL_FRIEND_CONTEXT (t))
233     push_nested_class (DECL_FRIEND_CONTEXT (t));
234   else if (DECL_CLASS_SCOPE_P (t))
235     push_nested_class (DECL_CONTEXT (t));
236   else
237     push_to_top_level ();
238
239   if (TREE_CODE (t) == FUNCTION_DECL)
240     {
241       saved_access_scope = tree_cons
242         (NULL_TREE, current_function_decl, saved_access_scope);
243       current_function_decl = t;
244     }
245 }
246
247 /* Restore the scope set up by push_access_scope.  T is the node we
248    are processing.  */
249
250 static void
251 pop_access_scope (tree t)
252 {
253   if (TREE_CODE (t) == FUNCTION_DECL)
254     {
255       current_function_decl = TREE_VALUE (saved_access_scope);
256       saved_access_scope = TREE_CHAIN (saved_access_scope);
257     }
258
259   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
260     pop_nested_class ();
261   else
262     pop_from_top_level ();
263 }
264
265 /* Do any processing required when DECL (a member template
266    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
267    to DECL, unless it is a specialization, in which case the DECL
268    itself is returned.  */
269
270 tree
271 finish_member_template_decl (tree decl)
272 {
273   if (decl == error_mark_node)
274     return error_mark_node;
275
276   gcc_assert (DECL_P (decl));
277
278   if (TREE_CODE (decl) == TYPE_DECL)
279     {
280       tree type;
281
282       type = TREE_TYPE (decl);
283       if (type == error_mark_node)
284         return error_mark_node;
285       if (MAYBE_CLASS_TYPE_P (type)
286           && CLASSTYPE_TEMPLATE_INFO (type)
287           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
288         {
289           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
290           check_member_template (tmpl);
291           return tmpl;
292         }
293       return NULL_TREE;
294     }
295   else if (TREE_CODE (decl) == FIELD_DECL)
296     error ("data member %qD cannot be a member template", decl);
297   else if (DECL_TEMPLATE_INFO (decl))
298     {
299       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
300         {
301           check_member_template (DECL_TI_TEMPLATE (decl));
302           return DECL_TI_TEMPLATE (decl);
303         }
304       else
305         return decl;
306     }
307   else
308     error ("invalid member template declaration %qD", decl);
309
310   return error_mark_node;
311 }
312
313 /* Create a template info node.  */
314
315 tree
316 build_template_info (tree template_decl, tree template_args)
317 {
318   tree result = make_node (TEMPLATE_INFO);
319   TI_TEMPLATE (result) = template_decl;
320   TI_ARGS (result) = template_args;
321   return result;
322 }
323
324 /* Return the template info node corresponding to T, whatever T is.  */
325
326 tree
327 get_template_info (const_tree t)
328 {
329   tree tinfo = NULL_TREE;
330
331   if (!t || t == error_mark_node)
332     return NULL;
333
334   if (TREE_CODE (t) == NAMESPACE_DECL)
335     return NULL;
336
337   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
338     tinfo = DECL_TEMPLATE_INFO (t);
339
340   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
341     t = TREE_TYPE (t);
342
343   if (OVERLOAD_TYPE_P (t))
344     tinfo = TYPE_TEMPLATE_INFO (t);
345   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
346     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
347
348   return tinfo;
349 }
350
351 /* Returns the template nesting level of the indicated class TYPE.
352
353    For example, in:
354      template <class T>
355      struct A
356      {
357        template <class U>
358        struct B {};
359      };
360
361    A<T>::B<U> has depth two, while A<T> has depth one.
362    Both A<T>::B<int> and A<int>::B<U> have depth one, if
363    they are instantiations, not specializations.
364
365    This function is guaranteed to return 0 if passed NULL_TREE so
366    that, for example, `template_class_depth (current_class_type)' is
367    always safe.  */
368
369 int
370 template_class_depth (tree type)
371 {
372   int depth;
373
374   for (depth = 0;
375        type && TREE_CODE (type) != NAMESPACE_DECL;
376        type = (TREE_CODE (type) == FUNCTION_DECL)
377          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
378     {
379       tree tinfo = get_template_info (type);
380
381       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
382           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
383         ++depth;
384     }
385
386   return depth;
387 }
388
389 /* Subroutine of maybe_begin_member_template_processing.
390    Returns true if processing DECL needs us to push template parms.  */
391
392 static bool
393 inline_needs_template_parms (tree decl, bool nsdmi)
394 {
395   if (!decl || (!nsdmi && ! DECL_TEMPLATE_INFO (decl)))
396     return false;
397
398   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
399           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
400 }
401
402 /* Subroutine of maybe_begin_member_template_processing.
403    Push the template parms in PARMS, starting from LEVELS steps into the
404    chain, and ending at the beginning, since template parms are listed
405    innermost first.  */
406
407 static void
408 push_inline_template_parms_recursive (tree parmlist, int levels)
409 {
410   tree parms = TREE_VALUE (parmlist);
411   int i;
412
413   if (levels > 1)
414     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
415
416   ++processing_template_decl;
417   current_template_parms
418     = tree_cons (size_int (processing_template_decl),
419                  parms, current_template_parms);
420   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
421
422   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
423                NULL);
424   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
425     {
426       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
427
428       if (error_operand_p (parm))
429         continue;
430
431       gcc_assert (DECL_P (parm));
432
433       switch (TREE_CODE (parm))
434         {
435         case TYPE_DECL:
436         case TEMPLATE_DECL:
437           pushdecl (parm);
438           break;
439
440         case PARM_DECL:
441           {
442             /* Make a CONST_DECL as is done in process_template_parm.
443                It is ugly that we recreate this here; the original
444                version built in process_template_parm is no longer
445                available.  */
446             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
447                                     CONST_DECL, DECL_NAME (parm),
448                                     TREE_TYPE (parm));
449             DECL_ARTIFICIAL (decl) = 1;
450             TREE_CONSTANT (decl) = 1;
451             TREE_READONLY (decl) = 1;
452             DECL_INITIAL (decl) = DECL_INITIAL (parm);
453             SET_DECL_TEMPLATE_PARM_P (decl);
454             pushdecl (decl);
455           }
456           break;
457
458         default:
459           gcc_unreachable ();
460         }
461     }
462 }
463
464 /* Restore the template parameter context for a member template, a
465    friend template defined in a class definition, or a non-template
466    member of template class.  */
467
468 void
469 maybe_begin_member_template_processing (tree decl)
470 {
471   tree parms;
472   int levels = 0;
473   bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
474
475   if (nsdmi)
476     {
477       tree ctx = DECL_CONTEXT (decl);
478       decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
479               /* Disregard full specializations (c++/60999).  */
480               && uses_template_parms (ctx)
481               ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
482     }
483
484   if (inline_needs_template_parms (decl, nsdmi))
485     {
486       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
487       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
488
489       if (DECL_TEMPLATE_SPECIALIZATION (decl))
490         {
491           --levels;
492           parms = TREE_CHAIN (parms);
493         }
494
495       push_inline_template_parms_recursive (parms, levels);
496     }
497
498   /* Remember how many levels of template parameters we pushed so that
499      we can pop them later.  */
500   inline_parm_levels.safe_push (levels);
501 }
502
503 /* Undo the effects of maybe_begin_member_template_processing.  */
504
505 void
506 maybe_end_member_template_processing (void)
507 {
508   int i;
509   int last;
510
511   if (inline_parm_levels.length () == 0)
512     return;
513
514   last = inline_parm_levels.pop ();
515   for (i = 0; i < last; ++i)
516     {
517       --processing_template_decl;
518       current_template_parms = TREE_CHAIN (current_template_parms);
519       poplevel (0, 0, 0);
520     }
521 }
522
523 /* Return a new template argument vector which contains all of ARGS,
524    but has as its innermost set of arguments the EXTRA_ARGS.  */
525
526 static tree
527 add_to_template_args (tree args, tree extra_args)
528 {
529   tree new_args;
530   int extra_depth;
531   int i;
532   int j;
533
534   if (args == NULL_TREE || extra_args == error_mark_node)
535     return extra_args;
536
537   extra_depth = TMPL_ARGS_DEPTH (extra_args);
538   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
539
540   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
541     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
542
543   for (j = 1; j <= extra_depth; ++j, ++i)
544     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
545
546   return new_args;
547 }
548
549 /* Like add_to_template_args, but only the outermost ARGS are added to
550    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
551    (EXTRA_ARGS) levels are added.  This function is used to combine
552    the template arguments from a partial instantiation with the
553    template arguments used to attain the full instantiation from the
554    partial instantiation.  */
555
556 static tree
557 add_outermost_template_args (tree args, tree extra_args)
558 {
559   tree new_args;
560
561   /* If there are more levels of EXTRA_ARGS than there are ARGS,
562      something very fishy is going on.  */
563   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
564
565   /* If *all* the new arguments will be the EXTRA_ARGS, just return
566      them.  */
567   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
568     return extra_args;
569
570   /* For the moment, we make ARGS look like it contains fewer levels.  */
571   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
572
573   new_args = add_to_template_args (args, extra_args);
574
575   /* Now, we restore ARGS to its full dimensions.  */
576   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
577
578   return new_args;
579 }
580
581 /* Return the N levels of innermost template arguments from the ARGS.  */
582
583 tree
584 get_innermost_template_args (tree args, int n)
585 {
586   tree new_args;
587   int extra_levels;
588   int i;
589
590   gcc_assert (n >= 0);
591
592   /* If N is 1, just return the innermost set of template arguments.  */
593   if (n == 1)
594     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
595
596   /* If we're not removing anything, just return the arguments we were
597      given.  */
598   extra_levels = TMPL_ARGS_DEPTH (args) - n;
599   gcc_assert (extra_levels >= 0);
600   if (extra_levels == 0)
601     return args;
602
603   /* Make a new set of arguments, not containing the outer arguments.  */
604   new_args = make_tree_vec (n);
605   for (i = 1; i <= n; ++i)
606     SET_TMPL_ARGS_LEVEL (new_args, i,
607                          TMPL_ARGS_LEVEL (args, i + extra_levels));
608
609   return new_args;
610 }
611
612 /* The inverse of get_innermost_template_args: Return all but the innermost
613    EXTRA_LEVELS levels of template arguments from the ARGS.  */
614
615 static tree
616 strip_innermost_template_args (tree args, int extra_levels)
617 {
618   tree new_args;
619   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
620   int i;
621
622   gcc_assert (n >= 0);
623
624   /* If N is 1, just return the outermost set of template arguments.  */
625   if (n == 1)
626     return TMPL_ARGS_LEVEL (args, 1);
627
628   /* If we're not removing anything, just return the arguments we were
629      given.  */
630   gcc_assert (extra_levels >= 0);
631   if (extra_levels == 0)
632     return args;
633
634   /* Make a new set of arguments, not containing the inner arguments.  */
635   new_args = make_tree_vec (n);
636   for (i = 1; i <= n; ++i)
637     SET_TMPL_ARGS_LEVEL (new_args, i,
638                          TMPL_ARGS_LEVEL (args, i));
639
640   return new_args;
641 }
642
643 /* We've got a template header coming up; push to a new level for storing
644    the parms.  */
645
646 void
647 begin_template_parm_list (void)
648 {
649   /* We use a non-tag-transparent scope here, which causes pushtag to
650      put tags in this scope, rather than in the enclosing class or
651      namespace scope.  This is the right thing, since we want
652      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
653      global template class, push_template_decl handles putting the
654      TEMPLATE_DECL into top-level scope.  For a nested template class,
655      e.g.:
656
657        template <class T> struct S1 {
658          template <class T> struct S2 {};
659        };
660
661      pushtag contains special code to call pushdecl_with_scope on the
662      TEMPLATE_DECL for S2.  */
663   begin_scope (sk_template_parms, NULL);
664   ++processing_template_decl;
665   ++processing_template_parmlist;
666   note_template_header (0);
667 }
668
669 /* This routine is called when a specialization is declared.  If it is
670    invalid to declare a specialization here, an error is reported and
671    false is returned, otherwise this routine will return true.  */
672
673 static bool
674 check_specialization_scope (void)
675 {
676   tree scope = current_scope ();
677
678   /* [temp.expl.spec]
679
680      An explicit specialization shall be declared in the namespace of
681      which the template is a member, or, for member templates, in the
682      namespace of which the enclosing class or enclosing class
683      template is a member.  An explicit specialization of a member
684      function, member class or static data member of a class template
685      shall be declared in the namespace of which the class template
686      is a member.  */
687   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
688     {
689       error ("explicit specialization in non-namespace scope %qD", scope);
690       return false;
691     }
692
693   /* [temp.expl.spec]
694
695      In an explicit specialization declaration for a member of a class
696      template or a member template that appears in namespace scope,
697      the member template and some of its enclosing class templates may
698      remain unspecialized, except that the declaration shall not
699      explicitly specialize a class member template if its enclosing
700      class templates are not explicitly specialized as well.  */
701   if (current_template_parms)
702     {
703       error ("enclosing class templates are not explicitly specialized");
704       return false;
705     }
706
707   return true;
708 }
709
710 /* We've just seen template <>.  */
711
712 bool
713 begin_specialization (void)
714 {
715   begin_scope (sk_template_spec, NULL);
716   note_template_header (1);
717   return check_specialization_scope ();
718 }
719
720 /* Called at then end of processing a declaration preceded by
721    template<>.  */
722
723 void
724 end_specialization (void)
725 {
726   finish_scope ();
727   reset_specialization ();
728 }
729
730 /* Any template <>'s that we have seen thus far are not referring to a
731    function specialization.  */
732
733 void
734 reset_specialization (void)
735 {
736   processing_specialization = 0;
737   template_header_count = 0;
738 }
739
740 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
741    it was of the form template <>.  */
742
743 static void
744 note_template_header (int specialization)
745 {
746   processing_specialization = specialization;
747   template_header_count++;
748 }
749
750 /* We're beginning an explicit instantiation.  */
751
752 void
753 begin_explicit_instantiation (void)
754 {
755   gcc_assert (!processing_explicit_instantiation);
756   processing_explicit_instantiation = true;
757 }
758
759
760 void
761 end_explicit_instantiation (void)
762 {
763   gcc_assert (processing_explicit_instantiation);
764   processing_explicit_instantiation = false;
765 }
766
767 /* An explicit specialization or partial specialization of TMPL is being
768    declared.  Check that the namespace in which the specialization is
769    occurring is permissible.  Returns false iff it is invalid to
770    specialize TMPL in the current namespace.  */
771
772 static bool
773 check_specialization_namespace (tree tmpl)
774 {
775   tree tpl_ns = decl_namespace_context (tmpl);
776
777   /* [tmpl.expl.spec]
778
779      An explicit specialization shall be declared in the namespace of
780      which the template is a member, or, for member templates, in the
781      namespace of which the enclosing class or enclosing class
782      template is a member.  An explicit specialization of a member
783      function, member class or static data member of a class template
784      shall be declared in the namespace of which the class template is
785      a member.  */
786   if (current_scope() != DECL_CONTEXT (tmpl)
787       && !at_namespace_scope_p ())
788     {
789       error ("specialization of %qD must appear at namespace scope", tmpl);
790       return false;
791     }
792   if (is_associated_namespace (current_namespace, tpl_ns))
793     /* Same or super-using namespace.  */
794     return true;
795   else
796     {
797       permerror (input_location, "specialization of %qD in different namespace", tmpl);
798       permerror (input_location, "  from definition of %q+#D", tmpl);
799       return false;
800     }
801 }
802
803 /* SPEC is an explicit instantiation.  Check that it is valid to
804    perform this explicit instantiation in the current namespace.  */
805
806 static void
807 check_explicit_instantiation_namespace (tree spec)
808 {
809   tree ns;
810
811   /* DR 275: An explicit instantiation shall appear in an enclosing
812      namespace of its template.  */
813   ns = decl_namespace_context (spec);
814   if (!is_ancestor (current_namespace, ns))
815     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
816                "(which does not enclose namespace %qD)",
817                spec, current_namespace, ns);
818 }
819
820 /* The TYPE is being declared.  If it is a template type, that means it
821    is a partial specialization.  Do appropriate error-checking.  */
822
823 tree
824 maybe_process_partial_specialization (tree type)
825 {
826   tree context;
827
828   if (type == error_mark_node)
829     return error_mark_node;
830
831   /* A lambda that appears in specialization context is not itself a
832      specialization.  */
833   if (CLASS_TYPE_P (type) && CLASSTYPE_LAMBDA_EXPR (type))
834     return type;
835
836   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
837     {
838       error ("name of class shadows template template parameter %qD",
839              TYPE_NAME (type));
840       return error_mark_node;
841     }
842
843   context = TYPE_CONTEXT (type);
844
845   if (TYPE_ALIAS_P (type))
846     {
847       if (TYPE_TEMPLATE_INFO (type)
848           && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (type)))
849         error ("specialization of alias template %qD",
850                TYPE_TI_TEMPLATE (type));
851       else
852         error ("explicit specialization of non-template %qT", type);
853       return error_mark_node;
854     }
855   else if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
856     {
857       /* This is for ordinary explicit specialization and partial
858          specialization of a template class such as:
859
860            template <> class C<int>;
861
862          or:
863
864            template <class T> class C<T*>;
865
866          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
867
868       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
869           && !COMPLETE_TYPE_P (type))
870         {
871           if (!check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type))
872               && !at_namespace_scope_p ())
873             return error_mark_node;
874           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
875           DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
876           if (processing_template_decl)
877             {
878               if (push_template_decl (TYPE_MAIN_DECL (type))
879                   == error_mark_node)
880                 return error_mark_node;
881             }
882         }
883       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
884         error ("specialization of %qT after instantiation", type);
885       else if (errorcount && !processing_specialization
886                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (type)
887                && !uses_template_parms (CLASSTYPE_TI_ARGS (type)))
888         /* Trying to define a specialization either without a template<> header
889            or in an inappropriate place.  We've already given an error, so just
890            bail now so we don't actually define the specialization.  */
891         return error_mark_node;
892     }
893   else if (CLASS_TYPE_P (type)
894            && !CLASSTYPE_USE_TEMPLATE (type)
895            && CLASSTYPE_TEMPLATE_INFO (type)
896            && context && CLASS_TYPE_P (context)
897            && CLASSTYPE_TEMPLATE_INFO (context))
898     {
899       /* This is for an explicit specialization of member class
900          template according to [temp.expl.spec/18]:
901
902            template <> template <class U> class C<int>::D;
903
904          The context `C<int>' must be an implicit instantiation.
905          Otherwise this is just a member class template declared
906          earlier like:
907
908            template <> class C<int> { template <class U> class D; };
909            template <> template <class U> class C<int>::D;
910
911          In the first case, `C<int>::D' is a specialization of `C<T>::D'
912          while in the second case, `C<int>::D' is a primary template
913          and `C<T>::D' may not exist.  */
914
915       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
916           && !COMPLETE_TYPE_P (type))
917         {
918           tree t;
919           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
920
921           if (current_namespace
922               != decl_namespace_context (tmpl))
923             {
924               permerror (input_location, "specializing %q#T in different namespace", type);
925               permerror (input_location, "  from definition of %q+#D", tmpl);
926             }
927
928           /* Check for invalid specialization after instantiation:
929
930                template <> template <> class C<int>::D<int>;
931                template <> template <class U> class C<int>::D;  */
932
933           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
934                t; t = TREE_CHAIN (t))
935             {
936               tree inst = TREE_VALUE (t);
937               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst)
938                   || !COMPLETE_OR_OPEN_TYPE_P (inst))
939                 {
940                   /* We already have a full specialization of this partial
941                      instantiation, or a full specialization has been
942                      looked up but not instantiated.  Reassign it to the
943                      new member specialization template.  */
944                   spec_entry elt;
945                   spec_entry *entry;
946
947                   elt.tmpl = most_general_template (tmpl);
948                   elt.args = CLASSTYPE_TI_ARGS (inst);
949                   elt.spec = inst;
950
951                   type_specializations->remove_elt (&elt);
952
953                   elt.tmpl = tmpl;
954                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
955
956                   spec_entry **slot
957                     = type_specializations->find_slot (&elt, INSERT);
958                   entry = ggc_alloc<spec_entry> ();
959                   *entry = elt;
960                   *slot = entry;
961                 }
962               else
963                 /* But if we've had an implicit instantiation, that's a
964                    problem ([temp.expl.spec]/6).  */
965                 error ("specialization %qT after instantiation %qT",
966                        type, inst);
967             }
968
969           /* Mark TYPE as a specialization.  And as a result, we only
970              have one level of template argument for the innermost
971              class template.  */
972           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
973           DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)) = input_location;
974           CLASSTYPE_TI_ARGS (type)
975             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
976         }
977     }
978   else if (processing_specialization)
979     {
980        /* Someday C++0x may allow for enum template specialization.  */
981       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
982           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
983         pedwarn (input_location, OPT_Wpedantic, "template specialization "
984                  "of %qD not allowed by ISO C++", type);
985       else
986         {
987           error ("explicit specialization of non-template %qT", type);
988           return error_mark_node;
989         }
990     }
991
992   return type;
993 }
994
995 /* Returns nonzero if we can optimize the retrieval of specializations
996    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
997    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
998
999 static inline bool
1000 optimize_specialization_lookup_p (tree tmpl)
1001 {
1002   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
1003           && DECL_CLASS_SCOPE_P (tmpl)
1004           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
1005              parameter.  */
1006           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
1007           /* The optimized lookup depends on the fact that the
1008              template arguments for the member function template apply
1009              purely to the containing class, which is not true if the
1010              containing class is an explicit or partial
1011              specialization.  */
1012           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
1013           && !DECL_MEMBER_TEMPLATE_P (tmpl)
1014           && !DECL_CONV_FN_P (tmpl)
1015           /* It is possible to have a template that is not a member
1016              template and is not a member of a template class:
1017
1018              template <typename T>
1019              struct S { friend A::f(); };
1020
1021              Here, the friend function is a template, but the context does
1022              not have template information.  The optimized lookup relies
1023              on having ARGS be the template arguments for both the class
1024              and the function template.  */
1025           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
1026 }
1027
1028 /* Retrieve the specialization (in the sense of [temp.spec] - a
1029    specialization is either an instantiation or an explicit
1030    specialization) of TMPL for the given template ARGS.  If there is
1031    no such specialization, return NULL_TREE.  The ARGS are a vector of
1032    arguments, or a vector of vectors of arguments, in the case of
1033    templates with more than one level of parameters.
1034
1035    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
1036    then we search for a partial specialization matching ARGS.  This
1037    parameter is ignored if TMPL is not a class template.
1038
1039    We can also look up a FIELD_DECL, if it is a lambda capture pack; the
1040    result is a NONTYPE_ARGUMENT_PACK.  */
1041
1042 static tree
1043 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
1044 {
1045   if (tmpl == NULL_TREE)
1046     return NULL_TREE;
1047
1048   if (args == error_mark_node)
1049     return NULL_TREE;
1050
1051   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL
1052               || TREE_CODE (tmpl) == FIELD_DECL);
1053
1054   /* There should be as many levels of arguments as there are
1055      levels of parameters.  */
1056   gcc_assert (TMPL_ARGS_DEPTH (args)
1057               == (TREE_CODE (tmpl) == TEMPLATE_DECL
1058                   ? TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl))
1059                   : template_class_depth (DECL_CONTEXT (tmpl))));
1060
1061   if (optimize_specialization_lookup_p (tmpl))
1062     {
1063       tree class_template;
1064       tree class_specialization;
1065       vec<tree, va_gc> *methods;
1066       tree fns;
1067       int idx;
1068
1069       /* The template arguments actually apply to the containing
1070          class.  Find the class specialization with those
1071          arguments.  */
1072       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1073       class_specialization
1074         = retrieve_specialization (class_template, args, 0);
1075       if (!class_specialization)
1076         return NULL_TREE;
1077       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1078          for the specialization.  */
1079       idx = class_method_index_for_fn (class_specialization, tmpl);
1080       if (idx == -1)
1081         return NULL_TREE;
1082       /* Iterate through the methods with the indicated name, looking
1083          for the one that has an instance of TMPL.  */
1084       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1085       for (fns = (*methods)[idx]; fns; fns = OVL_NEXT (fns))
1086         {
1087           tree fn = OVL_CURRENT (fns);
1088           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1089               /* using-declarations can add base methods to the method vec,
1090                  and we don't want those here.  */
1091               && DECL_CONTEXT (fn) == class_specialization)
1092             return fn;
1093         }
1094       return NULL_TREE;
1095     }
1096   else
1097     {
1098       spec_entry *found;
1099       spec_entry elt;
1100       hash_table<spec_hasher> *specializations;
1101
1102       elt.tmpl = tmpl;
1103       elt.args = args;
1104       elt.spec = NULL_TREE;
1105
1106       if (DECL_CLASS_TEMPLATE_P (tmpl))
1107         specializations = type_specializations;
1108       else
1109         specializations = decl_specializations;
1110
1111       if (hash == 0)
1112         hash = spec_hasher::hash (&elt);
1113       found = specializations->find_with_hash (&elt, hash);
1114       if (found)
1115         return found->spec;
1116     }
1117
1118   return NULL_TREE;
1119 }
1120
1121 /* Like retrieve_specialization, but for local declarations.  */
1122
1123 static tree
1124 retrieve_local_specialization (tree tmpl)
1125 {
1126   if (local_specializations == NULL)
1127     return NULL_TREE;
1128
1129   tree *slot = local_specializations->get (tmpl);
1130   return slot ? *slot : NULL_TREE;
1131 }
1132
1133 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1134
1135 int
1136 is_specialization_of (tree decl, tree tmpl)
1137 {
1138   tree t;
1139
1140   if (TREE_CODE (decl) == FUNCTION_DECL)
1141     {
1142       for (t = decl;
1143            t != NULL_TREE;
1144            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1145         if (t == tmpl)
1146           return 1;
1147     }
1148   else
1149     {
1150       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1151
1152       for (t = TREE_TYPE (decl);
1153            t != NULL_TREE;
1154            t = CLASSTYPE_USE_TEMPLATE (t)
1155              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1156         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1157           return 1;
1158     }
1159
1160   return 0;
1161 }
1162
1163 /* Returns nonzero iff DECL is a specialization of friend declaration
1164    FRIEND_DECL according to [temp.friend].  */
1165
1166 bool
1167 is_specialization_of_friend (tree decl, tree friend_decl)
1168 {
1169   bool need_template = true;
1170   int template_depth;
1171
1172   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1173               || TREE_CODE (decl) == TYPE_DECL);
1174
1175   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1176      of a template class, we want to check if DECL is a specialization
1177      if this.  */
1178   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1179       && DECL_TEMPLATE_INFO (friend_decl)
1180       && !DECL_USE_TEMPLATE (friend_decl))
1181     {
1182       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1183       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1184       need_template = false;
1185     }
1186   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1187            && !PRIMARY_TEMPLATE_P (friend_decl))
1188     need_template = false;
1189
1190   /* There is nothing to do if this is not a template friend.  */
1191   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1192     return false;
1193
1194   if (is_specialization_of (decl, friend_decl))
1195     return true;
1196
1197   /* [temp.friend/6]
1198      A member of a class template may be declared to be a friend of a
1199      non-template class.  In this case, the corresponding member of
1200      every specialization of the class template is a friend of the
1201      class granting friendship.
1202
1203      For example, given a template friend declaration
1204
1205        template <class T> friend void A<T>::f();
1206
1207      the member function below is considered a friend
1208
1209        template <> struct A<int> {
1210          void f();
1211        };
1212
1213      For this type of template friend, TEMPLATE_DEPTH below will be
1214      nonzero.  To determine if DECL is a friend of FRIEND, we first
1215      check if the enclosing class is a specialization of another.  */
1216
1217   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1218   if (template_depth
1219       && DECL_CLASS_SCOPE_P (decl)
1220       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1221                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1222     {
1223       /* Next, we check the members themselves.  In order to handle
1224          a few tricky cases, such as when FRIEND_DECL's are
1225
1226            template <class T> friend void A<T>::g(T t);
1227            template <class T> template <T t> friend void A<T>::h();
1228
1229          and DECL's are
1230
1231            void A<int>::g(int);
1232            template <int> void A<int>::h();
1233
1234          we need to figure out ARGS, the template arguments from
1235          the context of DECL.  This is required for template substitution
1236          of `T' in the function parameter of `g' and template parameter
1237          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1238
1239       tree context = DECL_CONTEXT (decl);
1240       tree args = NULL_TREE;
1241       int current_depth = 0;
1242
1243       while (current_depth < template_depth)
1244         {
1245           if (CLASSTYPE_TEMPLATE_INFO (context))
1246             {
1247               if (current_depth == 0)
1248                 args = TYPE_TI_ARGS (context);
1249               else
1250                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1251               current_depth++;
1252             }
1253           context = TYPE_CONTEXT (context);
1254         }
1255
1256       if (TREE_CODE (decl) == FUNCTION_DECL)
1257         {
1258           bool is_template;
1259           tree friend_type;
1260           tree decl_type;
1261           tree friend_args_type;
1262           tree decl_args_type;
1263
1264           /* Make sure that both DECL and FRIEND_DECL are templates or
1265              non-templates.  */
1266           is_template = DECL_TEMPLATE_INFO (decl)
1267                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1268           if (need_template ^ is_template)
1269             return false;
1270           else if (is_template)
1271             {
1272               /* If both are templates, check template parameter list.  */
1273               tree friend_parms
1274                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1275                                          args, tf_none);
1276               if (!comp_template_parms
1277                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1278                       friend_parms))
1279                 return false;
1280
1281               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1282             }
1283           else
1284             decl_type = TREE_TYPE (decl);
1285
1286           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1287                                               tf_none, NULL_TREE);
1288           if (friend_type == error_mark_node)
1289             return false;
1290
1291           /* Check if return types match.  */
1292           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1293             return false;
1294
1295           /* Check if function parameter types match, ignoring the
1296              `this' parameter.  */
1297           friend_args_type = TYPE_ARG_TYPES (friend_type);
1298           decl_args_type = TYPE_ARG_TYPES (decl_type);
1299           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1300             friend_args_type = TREE_CHAIN (friend_args_type);
1301           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1302             decl_args_type = TREE_CHAIN (decl_args_type);
1303
1304           return compparms (decl_args_type, friend_args_type);
1305         }
1306       else
1307         {
1308           /* DECL is a TYPE_DECL */
1309           bool is_template;
1310           tree decl_type = TREE_TYPE (decl);
1311
1312           /* Make sure that both DECL and FRIEND_DECL are templates or
1313              non-templates.  */
1314           is_template
1315             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1316               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1317
1318           if (need_template ^ is_template)
1319             return false;
1320           else if (is_template)
1321             {
1322               tree friend_parms;
1323               /* If both are templates, check the name of the two
1324                  TEMPLATE_DECL's first because is_friend didn't.  */
1325               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1326                   != DECL_NAME (friend_decl))
1327                 return false;
1328
1329               /* Now check template parameter list.  */
1330               friend_parms
1331                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1332                                          args, tf_none);
1333               return comp_template_parms
1334                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1335                  friend_parms);
1336             }
1337           else
1338             return (DECL_NAME (decl)
1339                     == DECL_NAME (friend_decl));
1340         }
1341     }
1342   return false;
1343 }
1344
1345 /* Register the specialization SPEC as a specialization of TMPL with
1346    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1347    is actually just a friend declaration.  Returns SPEC, or an
1348    equivalent prior declaration, if available.
1349
1350    We also store instantiations of field packs in the hash table, even
1351    though they are not themselves templates, to make lookup easier.  */
1352
1353 static tree
1354 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1355                          hashval_t hash)
1356 {
1357   tree fn;
1358   spec_entry **slot = NULL;
1359   spec_entry elt;
1360
1361   gcc_assert ((TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec))
1362               || (TREE_CODE (tmpl) == FIELD_DECL
1363                   && TREE_CODE (spec) == NONTYPE_ARGUMENT_PACK));
1364
1365   if (TREE_CODE (spec) == FUNCTION_DECL
1366       && uses_template_parms (DECL_TI_ARGS (spec)))
1367     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1368        register it; we want the corresponding TEMPLATE_DECL instead.
1369        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1370        the more obvious `uses_template_parms (spec)' to avoid problems
1371        with default function arguments.  In particular, given
1372        something like this:
1373
1374           template <class T> void f(T t1, T t = T())
1375
1376        the default argument expression is not substituted for in an
1377        instantiation unless and until it is actually needed.  */
1378     return spec;
1379
1380   if (optimize_specialization_lookup_p (tmpl))
1381     /* We don't put these specializations in the hash table, but we might
1382        want to give an error about a mismatch.  */
1383     fn = retrieve_specialization (tmpl, args, 0);
1384   else
1385     {
1386       elt.tmpl = tmpl;
1387       elt.args = args;
1388       elt.spec = spec;
1389
1390       if (hash == 0)
1391         hash = spec_hasher::hash (&elt);
1392
1393       slot =
1394         decl_specializations->find_slot_with_hash (&elt, hash, INSERT);
1395       if (*slot)
1396         fn = ((spec_entry *) *slot)->spec;
1397       else
1398         fn = NULL_TREE;
1399     }
1400
1401   /* We can sometimes try to re-register a specialization that we've
1402      already got.  In particular, regenerate_decl_from_template calls
1403      duplicate_decls which will update the specialization list.  But,
1404      we'll still get called again here anyhow.  It's more convenient
1405      to simply allow this than to try to prevent it.  */
1406   if (fn == spec)
1407     return spec;
1408   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1409     {
1410       if (DECL_TEMPLATE_INSTANTIATION (fn))
1411         {
1412           if (DECL_ODR_USED (fn)
1413               || DECL_EXPLICIT_INSTANTIATION (fn))
1414             {
1415               error ("specialization of %qD after instantiation",
1416                      fn);
1417               return error_mark_node;
1418             }
1419           else
1420             {
1421               tree clone;
1422               /* This situation should occur only if the first
1423                  specialization is an implicit instantiation, the
1424                  second is an explicit specialization, and the
1425                  implicit instantiation has not yet been used.  That
1426                  situation can occur if we have implicitly
1427                  instantiated a member function and then specialized
1428                  it later.
1429
1430                  We can also wind up here if a friend declaration that
1431                  looked like an instantiation turns out to be a
1432                  specialization:
1433
1434                    template <class T> void foo(T);
1435                    class S { friend void foo<>(int) };
1436                    template <> void foo(int);
1437
1438                  We transform the existing DECL in place so that any
1439                  pointers to it become pointers to the updated
1440                  declaration.
1441
1442                  If there was a definition for the template, but not
1443                  for the specialization, we want this to look as if
1444                  there were no definition, and vice versa.  */
1445               DECL_INITIAL (fn) = NULL_TREE;
1446               duplicate_decls (spec, fn, is_friend);
1447               /* The call to duplicate_decls will have applied
1448                  [temp.expl.spec]:
1449
1450                    An explicit specialization of a function template
1451                    is inline only if it is explicitly declared to be,
1452                    and independently of whether its function template
1453                    is.
1454
1455                 to the primary function; now copy the inline bits to
1456                 the various clones.  */
1457               FOR_EACH_CLONE (clone, fn)
1458                 {
1459                   DECL_DECLARED_INLINE_P (clone)
1460                     = DECL_DECLARED_INLINE_P (fn);
1461                   DECL_SOURCE_LOCATION (clone)
1462                     = DECL_SOURCE_LOCATION (fn);
1463                   DECL_DELETED_FN (clone)
1464                     = DECL_DELETED_FN (fn);
1465                 }
1466               check_specialization_namespace (tmpl);
1467
1468               return fn;
1469             }
1470         }
1471       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1472         {
1473           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1474             /* Dup decl failed, but this is a new definition. Set the
1475                line number so any errors match this new
1476                definition.  */
1477             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1478
1479           return fn;
1480         }
1481     }
1482   else if (fn)
1483     return duplicate_decls (spec, fn, is_friend);
1484
1485   /* A specialization must be declared in the same namespace as the
1486      template it is specializing.  */
1487   if (DECL_P (spec) && DECL_TEMPLATE_SPECIALIZATION (spec)
1488       && !check_specialization_namespace (tmpl))
1489     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1490
1491   if (slot != NULL /* !optimize_specialization_lookup_p (tmpl) */)
1492     {
1493       spec_entry *entry = ggc_alloc<spec_entry> ();
1494       gcc_assert (tmpl && args && spec);
1495       *entry = elt;
1496       *slot = entry;
1497       if ((TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1498            && PRIMARY_TEMPLATE_P (tmpl)
1499            && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1500           || variable_template_p (tmpl))
1501         /* If TMPL is a forward declaration of a template function, keep a list
1502            of all specializations in case we need to reassign them to a friend
1503            template later in tsubst_friend_function.
1504
1505            Also keep a list of all variable template instantiations so that
1506            process_partial_specialization can check whether a later partial
1507            specialization would have used it.  */
1508         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1509           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1510     }
1511
1512   return spec;
1513 }
1514
1515 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1516    TMPL and ARGS members, ignores SPEC.  */
1517
1518 int comparing_specializations;
1519
1520 bool
1521 spec_hasher::equal (spec_entry *e1, spec_entry *e2)
1522 {
1523   int equal;
1524
1525   ++comparing_specializations;
1526   equal = (e1->tmpl == e2->tmpl
1527            && comp_template_args (e1->args, e2->args));
1528   --comparing_specializations;
1529
1530   return equal;
1531 }
1532
1533 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1534
1535 static hashval_t
1536 hash_tmpl_and_args (tree tmpl, tree args)
1537 {
1538   hashval_t val = DECL_UID (tmpl);
1539   return iterative_hash_template_arg (args, val);
1540 }
1541
1542 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1543    ignoring SPEC.  */
1544
1545 hashval_t
1546 spec_hasher::hash (spec_entry *e)
1547 {
1548   return hash_tmpl_and_args (e->tmpl, e->args);
1549 }
1550
1551 /* Recursively calculate a hash value for a template argument ARG, for use
1552    in the hash tables of template specializations.  */
1553
1554 hashval_t
1555 iterative_hash_template_arg (tree arg, hashval_t val)
1556 {
1557   unsigned HOST_WIDE_INT i;
1558   enum tree_code code;
1559   char tclass;
1560
1561   if (arg == NULL_TREE)
1562     return iterative_hash_object (arg, val);
1563
1564   if (!TYPE_P (arg))
1565     STRIP_NOPS (arg);
1566
1567   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1568     /* We can get one of these when re-hashing a previous entry in the middle
1569        of substituting into a pack expansion.  Just look through it.  */
1570     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1571
1572   code = TREE_CODE (arg);
1573   tclass = TREE_CODE_CLASS (code);
1574
1575   val = iterative_hash_object (code, val);
1576
1577   switch (code)
1578     {
1579     case ERROR_MARK:
1580       return val;
1581
1582     case IDENTIFIER_NODE:
1583       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1584
1585     case TREE_VEC:
1586       {
1587         int i, len = TREE_VEC_LENGTH (arg);
1588         for (i = 0; i < len; ++i)
1589           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1590         return val;
1591       }
1592
1593     case TYPE_PACK_EXPANSION:
1594     case EXPR_PACK_EXPANSION:
1595       val = iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1596       return iterative_hash_template_arg (PACK_EXPANSION_EXTRA_ARGS (arg), val);
1597
1598     case TYPE_ARGUMENT_PACK:
1599     case NONTYPE_ARGUMENT_PACK:
1600       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1601
1602     case TREE_LIST:
1603       for (; arg; arg = TREE_CHAIN (arg))
1604         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1605       return val;
1606
1607     case OVERLOAD:
1608       for (; arg; arg = OVL_NEXT (arg))
1609         val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1610       return val;
1611
1612     case CONSTRUCTOR:
1613       {
1614         tree field, value;
1615         iterative_hash_template_arg (TREE_TYPE (arg), val);
1616         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1617           {
1618             val = iterative_hash_template_arg (field, val);
1619             val = iterative_hash_template_arg (value, val);
1620           }
1621         return val;
1622       }
1623
1624     case PARM_DECL:
1625       if (!DECL_ARTIFICIAL (arg))
1626         {
1627           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1628           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1629         }
1630       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1631
1632     case TARGET_EXPR:
1633       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1634
1635     case PTRMEM_CST:
1636       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1637       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1638
1639     case TEMPLATE_PARM_INDEX:
1640       val = iterative_hash_template_arg
1641         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1642       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1643       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1644
1645     case TRAIT_EXPR:
1646       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1647       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1648       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1649
1650     case BASELINK:
1651       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1652                                          val);
1653       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1654                                           val);
1655
1656     case MODOP_EXPR:
1657       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1658       code = TREE_CODE (TREE_OPERAND (arg, 1));
1659       val = iterative_hash_object (code, val);
1660       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1661
1662     case LAMBDA_EXPR:
1663       /* A lambda can't appear in a template arg, but don't crash on
1664          erroneous input.  */
1665       gcc_assert (seen_error ());
1666       return val;
1667
1668     case CAST_EXPR:
1669     case IMPLICIT_CONV_EXPR:
1670     case STATIC_CAST_EXPR:
1671     case REINTERPRET_CAST_EXPR:
1672     case CONST_CAST_EXPR:
1673     case DYNAMIC_CAST_EXPR:
1674     case NEW_EXPR:
1675       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1676       /* Now hash operands as usual.  */
1677       break;
1678
1679     default:
1680       break;
1681     }
1682
1683   switch (tclass)
1684     {
1685     case tcc_type:
1686       if (alias_template_specialization_p (arg))
1687         {
1688           // We want an alias specialization that survived strip_typedefs
1689           // to hash differently from its TYPE_CANONICAL, to avoid hash
1690           // collisions that compare as different in template_args_equal.
1691           // These could be dependent specializations that strip_typedefs
1692           // left alone, or untouched specializations because
1693           // coerce_template_parms returns the unconverted template
1694           // arguments if it sees incomplete argument packs.
1695           tree ti = TYPE_TEMPLATE_INFO (arg);
1696           return hash_tmpl_and_args (TI_TEMPLATE (ti), TI_ARGS (ti));
1697         }
1698       if (TYPE_CANONICAL (arg))
1699         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1700                                       val);
1701       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1702         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1703       /* Otherwise just compare the types during lookup.  */
1704       return val;
1705
1706     case tcc_declaration:
1707     case tcc_constant:
1708       return iterative_hash_expr (arg, val);
1709
1710     default:
1711       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1712       {
1713         unsigned n = cp_tree_operand_length (arg);
1714         for (i = 0; i < n; ++i)
1715           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1716         return val;
1717       }
1718     }
1719   gcc_unreachable ();
1720   return 0;
1721 }
1722
1723 /* Unregister the specialization SPEC as a specialization of TMPL.
1724    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1725    if the SPEC was listed as a specialization of TMPL.
1726
1727    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1728
1729 bool
1730 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1731 {
1732   spec_entry *entry;
1733   spec_entry elt;
1734
1735   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1736   elt.args = TI_ARGS (tinfo);
1737   elt.spec = NULL_TREE;
1738
1739   entry = decl_specializations->find (&elt);
1740   if (entry != NULL)
1741     {
1742       gcc_assert (entry->spec == spec || entry->spec == new_spec);
1743       gcc_assert (new_spec != NULL_TREE);
1744       entry->spec = new_spec;
1745       return 1;
1746     }
1747
1748   return 0;
1749 }
1750
1751 /* Like register_specialization, but for local declarations.  We are
1752    registering SPEC, an instantiation of TMPL.  */
1753
1754 static void
1755 register_local_specialization (tree spec, tree tmpl)
1756 {
1757   local_specializations->put (tmpl, spec);
1758 }
1759
1760 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1761    specialized class.  */
1762
1763 bool
1764 explicit_class_specialization_p (tree type)
1765 {
1766   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1767     return false;
1768   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1769 }
1770
1771 /* Print the list of functions at FNS, going through all the overloads
1772    for each element of the list.  Alternatively, FNS can not be a
1773    TREE_LIST, in which case it will be printed together with all the
1774    overloads.
1775
1776    MORE and *STR should respectively be FALSE and NULL when the function
1777    is called from the outside.  They are used internally on recursive
1778    calls.  print_candidates manages the two parameters and leaves NULL
1779    in *STR when it ends.  */
1780
1781 static void
1782 print_candidates_1 (tree fns, bool more, const char **str)
1783 {
1784   tree fn, fn2;
1785   char *spaces = NULL;
1786
1787   for (fn = fns; fn; fn = OVL_NEXT (fn))
1788     if (TREE_CODE (fn) == TREE_LIST)
1789       {
1790         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1791           print_candidates_1 (TREE_VALUE (fn2),
1792                               TREE_CHAIN (fn2) || more, str);
1793       }
1794     else
1795       {
1796         tree cand = OVL_CURRENT (fn);
1797         if (!*str)
1798           {
1799             /* Pick the prefix string.  */
1800             if (!more && !OVL_NEXT (fns))
1801               {
1802                 inform (DECL_SOURCE_LOCATION (cand),
1803                         "candidate is: %#D", cand);
1804                 continue;
1805               }
1806
1807             *str = _("candidates are:");
1808             spaces = get_spaces (*str);
1809           }
1810         inform (DECL_SOURCE_LOCATION (cand), "%s %#D", *str, cand);
1811         *str = spaces ? spaces : *str;
1812       }
1813
1814   if (!more)
1815     {
1816       free (spaces);
1817       *str = NULL;
1818     }
1819 }
1820
1821 /* Print the list of candidate FNS in an error message.  FNS can also
1822    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1823
1824 void
1825 print_candidates (tree fns)
1826 {
1827   const char *str = NULL;
1828   print_candidates_1 (fns, false, &str);
1829   gcc_assert (str == NULL);
1830 }
1831
1832 /* Returns the template (one of the functions given by TEMPLATE_ID)
1833    which can be specialized to match the indicated DECL with the
1834    explicit template args given in TEMPLATE_ID.  The DECL may be
1835    NULL_TREE if none is available.  In that case, the functions in
1836    TEMPLATE_ID are non-members.
1837
1838    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1839    specialization of a member template.
1840
1841    The TEMPLATE_COUNT is the number of references to qualifying
1842    template classes that appeared in the name of the function. See
1843    check_explicit_specialization for a more accurate description.
1844
1845    TSK indicates what kind of template declaration (if any) is being
1846    declared.  TSK_TEMPLATE indicates that the declaration given by
1847    DECL, though a FUNCTION_DECL, has template parameters, and is
1848    therefore a template function.
1849
1850    The template args (those explicitly specified and those deduced)
1851    are output in a newly created vector *TARGS_OUT.
1852
1853    If it is impossible to determine the result, an error message is
1854    issued.  The error_mark_node is returned to indicate failure.  */
1855
1856 static tree
1857 determine_specialization (tree template_id,
1858                           tree decl,
1859                           tree* targs_out,
1860                           int need_member_template,
1861                           int template_count,
1862                           tmpl_spec_kind tsk)
1863 {
1864   tree fns;
1865   tree targs;
1866   tree explicit_targs;
1867   tree candidates = NULL_TREE;
1868   /* A TREE_LIST of templates of which DECL may be a specialization.
1869      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1870      corresponding TREE_PURPOSE is the set of template arguments that,
1871      when used to instantiate the template, would produce a function
1872      with the signature of DECL.  */
1873   tree templates = NULL_TREE;
1874   int header_count;
1875   cp_binding_level *b;
1876
1877   *targs_out = NULL_TREE;
1878
1879   if (template_id == error_mark_node || decl == error_mark_node)
1880     return error_mark_node;
1881
1882   /* We shouldn't be specializing a member template of an
1883      unspecialized class template; we already gave an error in
1884      check_specialization_scope, now avoid crashing.  */
1885   if (template_count && DECL_CLASS_SCOPE_P (decl)
1886       && template_class_depth (DECL_CONTEXT (decl)) > 0)
1887     {
1888       gcc_assert (errorcount);
1889       return error_mark_node;
1890     }
1891
1892   fns = TREE_OPERAND (template_id, 0);
1893   explicit_targs = TREE_OPERAND (template_id, 1);
1894
1895   if (fns == error_mark_node)
1896     return error_mark_node;
1897
1898   /* Check for baselinks.  */
1899   if (BASELINK_P (fns))
1900     fns = BASELINK_FUNCTIONS (fns);
1901
1902   if (TREE_CODE (decl) == FUNCTION_DECL && !is_overloaded_fn (fns))
1903     {
1904       error ("%qD is not a function template", fns);
1905       return error_mark_node;
1906     }
1907   else if (VAR_P (decl) && !variable_template_p (fns))
1908     {
1909       error ("%qD is not a variable template", fns);
1910       return error_mark_node;
1911     }
1912
1913   /* Count the number of template headers specified for this
1914      specialization.  */
1915   header_count = 0;
1916   for (b = current_binding_level;
1917        b->kind == sk_template_parms;
1918        b = b->level_chain)
1919     ++header_count;
1920
1921   if (variable_template_p (fns))
1922     templates = tree_cons (explicit_targs, fns, templates);
1923   else for (; fns; fns = OVL_NEXT (fns))
1924     {
1925       tree fn = OVL_CURRENT (fns);
1926
1927       if (TREE_CODE (fn) == TEMPLATE_DECL)
1928         {
1929           tree decl_arg_types;
1930           tree fn_arg_types;
1931           tree insttype;
1932
1933           /* In case of explicit specialization, we need to check if
1934              the number of template headers appearing in the specialization
1935              is correct. This is usually done in check_explicit_specialization,
1936              but the check done there cannot be exhaustive when specializing
1937              member functions. Consider the following code:
1938
1939              template <> void A<int>::f(int);
1940              template <> template <> void A<int>::f(int);
1941
1942              Assuming that A<int> is not itself an explicit specialization
1943              already, the first line specializes "f" which is a non-template
1944              member function, whilst the second line specializes "f" which
1945              is a template member function. So both lines are syntactically
1946              correct, and check_explicit_specialization does not reject
1947              them.
1948
1949              Here, we can do better, as we are matching the specialization
1950              against the declarations. We count the number of template
1951              headers, and we check if they match TEMPLATE_COUNT + 1
1952              (TEMPLATE_COUNT is the number of qualifying template classes,
1953              plus there must be another header for the member template
1954              itself).
1955
1956              Notice that if header_count is zero, this is not a
1957              specialization but rather a template instantiation, so there
1958              is no check we can perform here.  */
1959           if (header_count && header_count != template_count + 1)
1960             continue;
1961
1962           /* Check that the number of template arguments at the
1963              innermost level for DECL is the same as for FN.  */
1964           if (current_binding_level->kind == sk_template_parms
1965               && !current_binding_level->explicit_spec_p
1966               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1967                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1968                                       (current_template_parms))))
1969             continue;
1970
1971           /* DECL might be a specialization of FN.  */
1972           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1973           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1974
1975           /* For a non-static member function, we need to make sure
1976              that the const qualification is the same.  Since
1977              get_bindings does not try to merge the "this" parameter,
1978              we must do the comparison explicitly.  */
1979           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1980               && !same_type_p (TREE_VALUE (fn_arg_types),
1981                                TREE_VALUE (decl_arg_types)))
1982             continue;
1983
1984           /* Skip the "this" parameter and, for constructors of
1985              classes with virtual bases, the VTT parameter.  A
1986              full specialization of a constructor will have a VTT
1987              parameter, but a template never will.  */ 
1988           decl_arg_types 
1989             = skip_artificial_parms_for (decl, decl_arg_types);
1990           fn_arg_types 
1991             = skip_artificial_parms_for (fn, fn_arg_types);
1992
1993           /* Function templates cannot be specializations; there are
1994              no partial specializations of functions.  Therefore, if
1995              the type of DECL does not match FN, there is no
1996              match.  */
1997           if (tsk == tsk_template)
1998             {
1999               if (compparms (fn_arg_types, decl_arg_types))
2000                 candidates = tree_cons (NULL_TREE, fn, candidates);
2001               continue;
2002             }
2003
2004           /* See whether this function might be a specialization of this
2005              template.  Suppress access control because we might be trying
2006              to make this specialization a friend, and we have already done
2007              access control for the declaration of the specialization.  */
2008           push_deferring_access_checks (dk_no_check);
2009           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
2010           pop_deferring_access_checks ();
2011
2012           if (!targs)
2013             /* We cannot deduce template arguments that when used to
2014                specialize TMPL will produce DECL.  */
2015             continue;
2016
2017           /* Make sure that the deduced arguments actually work.  */
2018           insttype = tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE);
2019           if (insttype == error_mark_node)
2020             continue;
2021           fn_arg_types
2022             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (insttype));
2023           if (!compparms (fn_arg_types, decl_arg_types))
2024             continue;
2025
2026           /* Save this template, and the arguments deduced.  */
2027           templates = tree_cons (targs, fn, templates);
2028         }
2029       else if (need_member_template)
2030         /* FN is an ordinary member function, and we need a
2031            specialization of a member template.  */
2032         ;
2033       else if (TREE_CODE (fn) != FUNCTION_DECL)
2034         /* We can get IDENTIFIER_NODEs here in certain erroneous
2035            cases.  */
2036         ;
2037       else if (!DECL_FUNCTION_MEMBER_P (fn))
2038         /* This is just an ordinary non-member function.  Nothing can
2039            be a specialization of that.  */
2040         ;
2041       else if (DECL_ARTIFICIAL (fn))
2042         /* Cannot specialize functions that are created implicitly.  */
2043         ;
2044       else
2045         {
2046           tree decl_arg_types;
2047
2048           /* This is an ordinary member function.  However, since
2049              we're here, we can assume its enclosing class is a
2050              template class.  For example,
2051
2052                template <typename T> struct S { void f(); };
2053                template <> void S<int>::f() {}
2054
2055              Here, S<int>::f is a non-template, but S<int> is a
2056              template class.  If FN has the same type as DECL, we
2057              might be in business.  */
2058
2059           if (!DECL_TEMPLATE_INFO (fn))
2060             /* Its enclosing class is an explicit specialization
2061                of a template class.  This is not a candidate.  */
2062             continue;
2063
2064           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
2065                             TREE_TYPE (TREE_TYPE (fn))))
2066             /* The return types differ.  */
2067             continue;
2068
2069           /* Adjust the type of DECL in case FN is a static member.  */
2070           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
2071           if (DECL_STATIC_FUNCTION_P (fn)
2072               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2073             decl_arg_types = TREE_CHAIN (decl_arg_types);
2074
2075           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
2076                          decl_arg_types))
2077             /* They match!  */
2078             candidates = tree_cons (NULL_TREE, fn, candidates);
2079         }
2080     }
2081
2082   if (templates && TREE_CHAIN (templates))
2083     {
2084       /* We have:
2085
2086            [temp.expl.spec]
2087
2088            It is possible for a specialization with a given function
2089            signature to be instantiated from more than one function
2090            template.  In such cases, explicit specification of the
2091            template arguments must be used to uniquely identify the
2092            function template specialization being specialized.
2093
2094          Note that here, there's no suggestion that we're supposed to
2095          determine which of the candidate templates is most
2096          specialized.  However, we, also have:
2097
2098            [temp.func.order]
2099
2100            Partial ordering of overloaded function template
2101            declarations is used in the following contexts to select
2102            the function template to which a function template
2103            specialization refers:
2104
2105            -- when an explicit specialization refers to a function
2106               template.
2107
2108          So, we do use the partial ordering rules, at least for now.
2109          This extension can only serve to make invalid programs valid,
2110          so it's safe.  And, there is strong anecdotal evidence that
2111          the committee intended the partial ordering rules to apply;
2112          the EDG front end has that behavior, and John Spicer claims
2113          that the committee simply forgot to delete the wording in
2114          [temp.expl.spec].  */
2115       tree tmpl = most_specialized_instantiation (templates);
2116       if (tmpl != error_mark_node)
2117         {
2118           templates = tmpl;
2119           TREE_CHAIN (templates) = NULL_TREE;
2120         }
2121     }
2122
2123   if (templates == NULL_TREE && candidates == NULL_TREE)
2124     {
2125       error ("template-id %qD for %q+D does not match any template "
2126              "declaration", template_id, decl);
2127       if (header_count && header_count != template_count + 1)
2128         inform (input_location, "saw %d %<template<>%>, need %d for "
2129                 "specializing a member function template",
2130                 header_count, template_count + 1);
2131       return error_mark_node;
2132     }
2133   else if ((templates && TREE_CHAIN (templates))
2134            || (candidates && TREE_CHAIN (candidates))
2135            || (templates && candidates))
2136     {
2137       error ("ambiguous template specialization %qD for %q+D",
2138              template_id, decl);
2139       candidates = chainon (candidates, templates);
2140       print_candidates (candidates);
2141       return error_mark_node;
2142     }
2143
2144   /* We have one, and exactly one, match.  */
2145   if (candidates)
2146     {
2147       tree fn = TREE_VALUE (candidates);
2148       *targs_out = copy_node (DECL_TI_ARGS (fn));
2149       /* DECL is a re-declaration or partial instantiation of a template
2150          function.  */
2151       if (TREE_CODE (fn) == TEMPLATE_DECL)
2152         return fn;
2153       /* It was a specialization of an ordinary member function in a
2154          template class.  */
2155       return DECL_TI_TEMPLATE (fn);
2156     }
2157
2158   /* It was a specialization of a template.  */
2159   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2160   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2161     {
2162       *targs_out = copy_node (targs);
2163       SET_TMPL_ARGS_LEVEL (*targs_out,
2164                            TMPL_ARGS_DEPTH (*targs_out),
2165                            TREE_PURPOSE (templates));
2166     }
2167   else
2168     *targs_out = TREE_PURPOSE (templates);
2169   return TREE_VALUE (templates);
2170 }
2171
2172 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2173    but with the default argument values filled in from those in the
2174    TMPL_TYPES.  */
2175
2176 static tree
2177 copy_default_args_to_explicit_spec_1 (tree spec_types,
2178                                       tree tmpl_types)
2179 {
2180   tree new_spec_types;
2181
2182   if (!spec_types)
2183     return NULL_TREE;
2184
2185   if (spec_types == void_list_node)
2186     return void_list_node;
2187
2188   /* Substitute into the rest of the list.  */
2189   new_spec_types =
2190     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2191                                           TREE_CHAIN (tmpl_types));
2192
2193   /* Add the default argument for this parameter.  */
2194   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2195                          TREE_VALUE (spec_types),
2196                          new_spec_types);
2197 }
2198
2199 /* DECL is an explicit specialization.  Replicate default arguments
2200    from the template it specializes.  (That way, code like:
2201
2202      template <class T> void f(T = 3);
2203      template <> void f(double);
2204      void g () { f (); }
2205
2206    works, as required.)  An alternative approach would be to look up
2207    the correct default arguments at the call-site, but this approach
2208    is consistent with how implicit instantiations are handled.  */
2209
2210 static void
2211 copy_default_args_to_explicit_spec (tree decl)
2212 {
2213   tree tmpl;
2214   tree spec_types;
2215   tree tmpl_types;
2216   tree new_spec_types;
2217   tree old_type;
2218   tree new_type;
2219   tree t;
2220   tree object_type = NULL_TREE;
2221   tree in_charge = NULL_TREE;
2222   tree vtt = NULL_TREE;
2223
2224   /* See if there's anything we need to do.  */
2225   tmpl = DECL_TI_TEMPLATE (decl);
2226   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2227   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2228     if (TREE_PURPOSE (t))
2229       break;
2230   if (!t)
2231     return;
2232
2233   old_type = TREE_TYPE (decl);
2234   spec_types = TYPE_ARG_TYPES (old_type);
2235
2236   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2237     {
2238       /* Remove the this pointer, but remember the object's type for
2239          CV quals.  */
2240       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2241       spec_types = TREE_CHAIN (spec_types);
2242       tmpl_types = TREE_CHAIN (tmpl_types);
2243
2244       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2245         {
2246           /* DECL may contain more parameters than TMPL due to the extra
2247              in-charge parameter in constructors and destructors.  */
2248           in_charge = spec_types;
2249           spec_types = TREE_CHAIN (spec_types);
2250         }
2251       if (DECL_HAS_VTT_PARM_P (decl))
2252         {
2253           vtt = spec_types;
2254           spec_types = TREE_CHAIN (spec_types);
2255         }
2256     }
2257
2258   /* Compute the merged default arguments.  */
2259   new_spec_types =
2260     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2261
2262   /* Compute the new FUNCTION_TYPE.  */
2263   if (object_type)
2264     {
2265       if (vtt)
2266         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2267                                          TREE_VALUE (vtt),
2268                                          new_spec_types);
2269
2270       if (in_charge)
2271         /* Put the in-charge parameter back.  */
2272         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2273                                          TREE_VALUE (in_charge),
2274                                          new_spec_types);
2275
2276       new_type = build_method_type_directly (object_type,
2277                                              TREE_TYPE (old_type),
2278                                              new_spec_types);
2279     }
2280   else
2281     new_type = build_function_type (TREE_TYPE (old_type),
2282                                     new_spec_types);
2283   new_type = cp_build_type_attribute_variant (new_type,
2284                                               TYPE_ATTRIBUTES (old_type));
2285   new_type = build_exception_variant (new_type,
2286                                       TYPE_RAISES_EXCEPTIONS (old_type));
2287
2288   if (TYPE_HAS_LATE_RETURN_TYPE (old_type))
2289     TYPE_HAS_LATE_RETURN_TYPE (new_type) = 1;
2290
2291   TREE_TYPE (decl) = new_type;
2292 }
2293
2294 /* Return the number of template headers we expect to see for a definition
2295    or specialization of CTYPE or one of its non-template members.  */
2296
2297 int
2298 num_template_headers_for_class (tree ctype)
2299 {
2300   int num_templates = 0;
2301
2302   while (ctype && CLASS_TYPE_P (ctype))
2303     {
2304       /* You're supposed to have one `template <...>' for every
2305          template class, but you don't need one for a full
2306          specialization.  For example:
2307
2308          template <class T> struct S{};
2309          template <> struct S<int> { void f(); };
2310          void S<int>::f () {}
2311
2312          is correct; there shouldn't be a `template <>' for the
2313          definition of `S<int>::f'.  */
2314       if (!CLASSTYPE_TEMPLATE_INFO (ctype))
2315         /* If CTYPE does not have template information of any
2316            kind,  then it is not a template, nor is it nested
2317            within a template.  */
2318         break;
2319       if (explicit_class_specialization_p (ctype))
2320         break;
2321       if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (ctype)))
2322         ++num_templates;
2323
2324       ctype = TYPE_CONTEXT (ctype);
2325     }
2326
2327   return num_templates;
2328 }
2329
2330 /* Do a simple sanity check on the template headers that precede the
2331    variable declaration DECL.  */
2332
2333 void
2334 check_template_variable (tree decl)
2335 {
2336   tree ctx = CP_DECL_CONTEXT (decl);
2337   int wanted = num_template_headers_for_class (ctx);
2338   if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
2339       && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl)))
2340     {
2341       if (cxx_dialect < cxx14)
2342         pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2343                  "variable templates only available with "
2344                  "-std=c++14 or -std=gnu++14");
2345
2346       // Namespace-scope variable templates should have a template header.
2347       ++wanted;
2348     }
2349   if (template_header_count > wanted)
2350     {
2351       bool warned = pedwarn (DECL_SOURCE_LOCATION (decl), 0,
2352                              "too many template headers for %D (should be %d)",
2353                              decl, wanted);
2354       if (warned && CLASS_TYPE_P (ctx)
2355           && CLASSTYPE_TEMPLATE_SPECIALIZATION (ctx))
2356         inform (DECL_SOURCE_LOCATION (decl),
2357                 "members of an explicitly specialized class are defined "
2358                 "without a template header");
2359     }
2360 }
2361
2362 /* Check to see if the function just declared, as indicated in
2363    DECLARATOR, and in DECL, is a specialization of a function
2364    template.  We may also discover that the declaration is an explicit
2365    instantiation at this point.
2366
2367    Returns DECL, or an equivalent declaration that should be used
2368    instead if all goes well.  Issues an error message if something is
2369    amiss.  Returns error_mark_node if the error is not easily
2370    recoverable.
2371
2372    FLAGS is a bitmask consisting of the following flags:
2373
2374    2: The function has a definition.
2375    4: The function is a friend.
2376
2377    The TEMPLATE_COUNT is the number of references to qualifying
2378    template classes that appeared in the name of the function.  For
2379    example, in
2380
2381      template <class T> struct S { void f(); };
2382      void S<int>::f();
2383
2384    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2385    classes are not counted in the TEMPLATE_COUNT, so that in
2386
2387      template <class T> struct S {};
2388      template <> struct S<int> { void f(); }
2389      template <> void S<int>::f();
2390
2391    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2392    invalid; there should be no template <>.)
2393
2394    If the function is a specialization, it is marked as such via
2395    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2396    is set up correctly, and it is added to the list of specializations
2397    for that template.  */
2398
2399 tree
2400 check_explicit_specialization (tree declarator,
2401                                tree decl,
2402                                int template_count,
2403                                int flags)
2404 {
2405   int have_def = flags & 2;
2406   int is_friend = flags & 4;
2407   int specialization = 0;
2408   int explicit_instantiation = 0;
2409   int member_specialization = 0;
2410   tree ctype = DECL_CLASS_CONTEXT (decl);
2411   tree dname = DECL_NAME (decl);
2412   tmpl_spec_kind tsk;
2413
2414   if (is_friend)
2415     {
2416       if (!processing_specialization)
2417         tsk = tsk_none;
2418       else
2419         tsk = tsk_excessive_parms;
2420     }
2421   else
2422     tsk = current_tmpl_spec_kind (template_count);
2423
2424   switch (tsk)
2425     {
2426     case tsk_none:
2427       if (processing_specialization)
2428         {
2429           specialization = 1;
2430           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2431         }
2432       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2433         {
2434           if (is_friend)
2435             /* This could be something like:
2436
2437                template <class T> void f(T);
2438                class S { friend void f<>(int); }  */
2439             specialization = 1;
2440           else
2441             {
2442               /* This case handles bogus declarations like template <>
2443                  template <class T> void f<int>(); */
2444
2445               error ("template-id %qD in declaration of primary template",
2446                      declarator);
2447               return decl;
2448             }
2449         }
2450       break;
2451
2452     case tsk_invalid_member_spec:
2453       /* The error has already been reported in
2454          check_specialization_scope.  */
2455       return error_mark_node;
2456
2457     case tsk_invalid_expl_inst:
2458       error ("template parameter list used in explicit instantiation");
2459
2460       /* Fall through.  */
2461
2462     case tsk_expl_inst:
2463       if (have_def)
2464         error ("definition provided for explicit instantiation");
2465
2466       explicit_instantiation = 1;
2467       break;
2468
2469     case tsk_excessive_parms:
2470     case tsk_insufficient_parms:
2471       if (tsk == tsk_excessive_parms)
2472         error ("too many template parameter lists in declaration of %qD",
2473                decl);
2474       else if (template_header_count)
2475         error("too few template parameter lists in declaration of %qD", decl);
2476       else
2477         error("explicit specialization of %qD must be introduced by "
2478               "%<template <>%>", decl);
2479
2480       /* Fall through.  */
2481     case tsk_expl_spec:
2482       if (VAR_P (decl) && TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2483         /* In cases like template<> constexpr bool v = true;
2484            We'll give an error in check_template_variable.  */
2485         break;
2486
2487       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2488       if (ctype)
2489         member_specialization = 1;
2490       else
2491         specialization = 1;
2492       break;
2493
2494     case tsk_template:
2495       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2496         {
2497           /* This case handles bogus declarations like template <>
2498              template <class T> void f<int>(); */
2499
2500           if (!uses_template_parms (declarator))
2501             error ("template-id %qD in declaration of primary template",
2502                    declarator);
2503           else if (variable_template_p (TREE_OPERAND (declarator, 0)))
2504             {
2505               /* Partial specialization of variable template.  */
2506               SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2507               specialization = 1;
2508               goto ok;
2509             }
2510           else if (cxx_dialect < cxx14)
2511             error ("non-type partial specialization %qD "
2512                    "is not allowed", declarator);
2513           else
2514             error ("non-class, non-variable partial specialization %qD "
2515                    "is not allowed", declarator);
2516           return decl;
2517         ok:;
2518         }
2519
2520       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2521         /* This is a specialization of a member template, without
2522            specialization the containing class.  Something like:
2523
2524              template <class T> struct S {
2525                template <class U> void f (U);
2526              };
2527              template <> template <class U> void S<int>::f(U) {}
2528
2529            That's a specialization -- but of the entire template.  */
2530         specialization = 1;
2531       break;
2532
2533     default:
2534       gcc_unreachable ();
2535     }
2536
2537   if ((specialization || member_specialization)
2538       /* This doesn't apply to variable templates.  */
2539       && (TREE_CODE (TREE_TYPE (decl)) == FUNCTION_TYPE
2540           || TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE))
2541     {
2542       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2543       for (; t; t = TREE_CHAIN (t))
2544         if (TREE_PURPOSE (t))
2545           {
2546             permerror (input_location, 
2547                        "default argument specified in explicit specialization");
2548             break;
2549           }
2550     }
2551
2552   if (specialization || member_specialization || explicit_instantiation)
2553     {
2554       tree tmpl = NULL_TREE;
2555       tree targs = NULL_TREE;
2556       bool was_template_id = (TREE_CODE (declarator) == TEMPLATE_ID_EXPR);
2557
2558       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2559       if (!was_template_id)
2560         {
2561           tree fns;
2562
2563           gcc_assert (identifier_p (declarator));
2564           if (ctype)
2565             fns = dname;
2566           else
2567             {
2568               /* If there is no class context, the explicit instantiation
2569                  must be at namespace scope.  */
2570               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2571
2572               /* Find the namespace binding, using the declaration
2573                  context.  */
2574               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2575                                            false, true);
2576               if (fns == error_mark_node || !is_overloaded_fn (fns))
2577                 {
2578                   error ("%qD is not a template function", dname);
2579                   fns = error_mark_node;
2580                 }
2581               else
2582                 {
2583                   tree fn = OVL_CURRENT (fns);
2584                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2585                                                 CP_DECL_CONTEXT (fn)))
2586                     error ("%qD is not declared in %qD",
2587                            decl, current_namespace);
2588                 }
2589             }
2590
2591           declarator = lookup_template_function (fns, NULL_TREE);
2592         }
2593
2594       if (declarator == error_mark_node)
2595         return error_mark_node;
2596
2597       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2598         {
2599           if (!explicit_instantiation)
2600             /* A specialization in class scope.  This is invalid,
2601                but the error will already have been flagged by
2602                check_specialization_scope.  */
2603             return error_mark_node;
2604           else
2605             {
2606               /* It's not valid to write an explicit instantiation in
2607                  class scope, e.g.:
2608
2609                    class C { template void f(); }
2610
2611                    This case is caught by the parser.  However, on
2612                    something like:
2613
2614                    template class C { void f(); };
2615
2616                    (which is invalid) we can get here.  The error will be
2617                    issued later.  */
2618               ;
2619             }
2620
2621           return decl;
2622         }
2623       else if (ctype != NULL_TREE
2624                && (identifier_p (TREE_OPERAND (declarator, 0))))
2625         {
2626           // We'll match variable templates in start_decl.
2627           if (VAR_P (decl))
2628             return decl;
2629
2630           /* Find the list of functions in ctype that have the same
2631              name as the declared function.  */
2632           tree name = TREE_OPERAND (declarator, 0);
2633           tree fns = NULL_TREE;
2634           int idx;
2635
2636           if (constructor_name_p (name, ctype))
2637             {
2638               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2639
2640               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2641                   : !CLASSTYPE_DESTRUCTORS (ctype))
2642                 {
2643                   /* From [temp.expl.spec]:
2644
2645                      If such an explicit specialization for the member
2646                      of a class template names an implicitly-declared
2647                      special member function (clause _special_), the
2648                      program is ill-formed.
2649
2650                      Similar language is found in [temp.explicit].  */
2651                   error ("specialization of implicitly-declared special member function");
2652                   return error_mark_node;
2653                 }
2654
2655               name = is_constructor ? ctor_identifier : dtor_identifier;
2656             }
2657
2658           if (!DECL_CONV_FN_P (decl))
2659             {
2660               idx = lookup_fnfields_1 (ctype, name);
2661               if (idx >= 0)
2662                 fns = (*CLASSTYPE_METHOD_VEC (ctype))[idx];
2663             }
2664           else
2665             {
2666               vec<tree, va_gc> *methods;
2667               tree ovl;
2668
2669               /* For a type-conversion operator, we cannot do a
2670                  name-based lookup.  We might be looking for `operator
2671                  int' which will be a specialization of `operator T'.
2672                  So, we find *all* the conversion operators, and then
2673                  select from them.  */
2674               fns = NULL_TREE;
2675
2676               methods = CLASSTYPE_METHOD_VEC (ctype);
2677               if (methods)
2678                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2679                      methods->iterate (idx, &ovl);
2680                      ++idx)
2681                   {
2682                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2683                       /* There are no more conversion functions.  */
2684                       break;
2685
2686                     /* Glue all these conversion functions together
2687                        with those we already have.  */
2688                     for (; ovl; ovl = OVL_NEXT (ovl))
2689                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2690                   }
2691             }
2692
2693           if (fns == NULL_TREE)
2694             {
2695               error ("no member function %qD declared in %qT", name, ctype);
2696               return error_mark_node;
2697             }
2698           else
2699             TREE_OPERAND (declarator, 0) = fns;
2700         }
2701
2702       /* Figure out what exactly is being specialized at this point.
2703          Note that for an explicit instantiation, even one for a
2704          member function, we cannot tell apriori whether the
2705          instantiation is for a member template, or just a member
2706          function of a template class.  Even if a member template is
2707          being instantiated, the member template arguments may be
2708          elided if they can be deduced from the rest of the
2709          declaration.  */
2710       tmpl = determine_specialization (declarator, decl,
2711                                        &targs,
2712                                        member_specialization,
2713                                        template_count,
2714                                        tsk);
2715
2716       if (!tmpl || tmpl == error_mark_node)
2717         /* We couldn't figure out what this declaration was
2718            specializing.  */
2719         return error_mark_node;
2720       else
2721         {
2722           tree gen_tmpl = most_general_template (tmpl);
2723
2724           if (explicit_instantiation)
2725             {
2726               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2727                  is done by do_decl_instantiation later.  */
2728
2729               int arg_depth = TMPL_ARGS_DEPTH (targs);
2730               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2731
2732               if (arg_depth > parm_depth)
2733                 {
2734                   /* If TMPL is not the most general template (for
2735                      example, if TMPL is a friend template that is
2736                      injected into namespace scope), then there will
2737                      be too many levels of TARGS.  Remove some of them
2738                      here.  */
2739                   int i;
2740                   tree new_targs;
2741
2742                   new_targs = make_tree_vec (parm_depth);
2743                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2744                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2745                       = TREE_VEC_ELT (targs, i);
2746                   targs = new_targs;
2747                 }
2748
2749               return instantiate_template (tmpl, targs, tf_error);
2750             }
2751
2752           /* If we thought that the DECL was a member function, but it
2753              turns out to be specializing a static member function,
2754              make DECL a static member function as well.  */
2755           if (DECL_FUNCTION_TEMPLATE_P (tmpl)
2756               && DECL_STATIC_FUNCTION_P (tmpl)
2757               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2758             revert_static_member_fn (decl);
2759
2760           /* If this is a specialization of a member template of a
2761              template class, we want to return the TEMPLATE_DECL, not
2762              the specialization of it.  */
2763           if (tsk == tsk_template && !was_template_id)
2764             {
2765               tree result = DECL_TEMPLATE_RESULT (tmpl);
2766               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2767               DECL_INITIAL (result) = NULL_TREE;
2768               if (have_def)
2769                 {
2770                   tree parm;
2771                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2772                   DECL_SOURCE_LOCATION (result)
2773                     = DECL_SOURCE_LOCATION (decl);
2774                   /* We want to use the argument list specified in the
2775                      definition, not in the original declaration.  */
2776                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2777                   for (parm = DECL_ARGUMENTS (result); parm;
2778                        parm = DECL_CHAIN (parm))
2779                     DECL_CONTEXT (parm) = result;
2780                 }
2781               return register_specialization (tmpl, gen_tmpl, targs,
2782                                               is_friend, 0);
2783             }
2784
2785           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2786           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2787
2788           if (was_template_id)
2789             TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl)) = true;
2790
2791           /* Inherit default function arguments from the template
2792              DECL is specializing.  */
2793           if (DECL_FUNCTION_TEMPLATE_P (tmpl))
2794             copy_default_args_to_explicit_spec (decl);
2795
2796           /* This specialization has the same protection as the
2797              template it specializes.  */
2798           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2799           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2800
2801           /* 7.1.1-1 [dcl.stc]
2802
2803              A storage-class-specifier shall not be specified in an
2804              explicit specialization...
2805
2806              The parser rejects these, so unless action is taken here,
2807              explicit function specializations will always appear with
2808              global linkage.
2809
2810              The action recommended by the C++ CWG in response to C++
2811              defect report 605 is to make the storage class and linkage
2812              of the explicit specialization match the templated function:
2813
2814              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2815            */
2816           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2817             {
2818               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2819               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2820
2821               /* This specialization has the same linkage and visibility as
2822                  the function template it specializes.  */
2823               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2824               if (! TREE_PUBLIC (decl))
2825                 {
2826                   DECL_INTERFACE_KNOWN (decl) = 1;
2827                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2828                 }
2829               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2830               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2831                 {
2832                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2833                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2834                 }
2835             }
2836
2837           /* If DECL is a friend declaration, declared using an
2838              unqualified name, the namespace associated with DECL may
2839              have been set incorrectly.  For example, in:
2840
2841                template <typename T> void f(T);
2842                namespace N {
2843                  struct S { friend void f<int>(int); }
2844                }
2845
2846              we will have set the DECL_CONTEXT for the friend
2847              declaration to N, rather than to the global namespace.  */
2848           if (DECL_NAMESPACE_SCOPE_P (decl))
2849             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2850
2851           if (is_friend && !have_def)
2852             /* This is not really a declaration of a specialization.
2853                It's just the name of an instantiation.  But, it's not
2854                a request for an instantiation, either.  */
2855             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2856           else if (TREE_CODE (decl) == FUNCTION_DECL)
2857             /* A specialization is not necessarily COMDAT.  */
2858             DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
2859                                   && DECL_DECLARED_INLINE_P (decl));
2860           else if (TREE_CODE (decl) == VAR_DECL)
2861             DECL_COMDAT (decl) = false;
2862
2863           /* Register this specialization so that we can find it
2864              again.  */
2865           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2866
2867           /* A 'structor should already have clones.  */
2868           gcc_assert (decl == error_mark_node
2869                       || variable_template_p (tmpl)
2870                       || !(DECL_CONSTRUCTOR_P (decl)
2871                            || DECL_DESTRUCTOR_P (decl))
2872                       || DECL_CLONED_FUNCTION_P (DECL_CHAIN (decl)));
2873         }
2874     }
2875
2876   return decl;
2877 }
2878
2879 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2880    parameters.  These are represented in the same format used for
2881    DECL_TEMPLATE_PARMS.  */
2882
2883 int
2884 comp_template_parms (const_tree parms1, const_tree parms2)
2885 {
2886   const_tree p1;
2887   const_tree p2;
2888
2889   if (parms1 == parms2)
2890     return 1;
2891
2892   for (p1 = parms1, p2 = parms2;
2893        p1 != NULL_TREE && p2 != NULL_TREE;
2894        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2895     {
2896       tree t1 = TREE_VALUE (p1);
2897       tree t2 = TREE_VALUE (p2);
2898       int i;
2899
2900       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2901       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2902
2903       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2904         return 0;
2905
2906       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2907         {
2908           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2909           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2910
2911           /* If either of the template parameters are invalid, assume
2912              they match for the sake of error recovery. */
2913           if (error_operand_p (parm1) || error_operand_p (parm2))
2914             return 1;
2915
2916           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2917             return 0;
2918
2919           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2920               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2921                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2922             continue;
2923           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2924             return 0;
2925         }
2926     }
2927
2928   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2929     /* One set of parameters has more parameters lists than the
2930        other.  */
2931     return 0;
2932
2933   return 1;
2934 }
2935
2936 /* Determine whether PARM is a parameter pack.  */
2937
2938 bool 
2939 template_parameter_pack_p (const_tree parm)
2940 {
2941   /* Determine if we have a non-type template parameter pack.  */
2942   if (TREE_CODE (parm) == PARM_DECL)
2943     return (DECL_TEMPLATE_PARM_P (parm) 
2944             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2945   if (TREE_CODE (parm) == TEMPLATE_PARM_INDEX)
2946     return TEMPLATE_PARM_PARAMETER_PACK (parm);
2947
2948   /* If this is a list of template parameters, we could get a
2949      TYPE_DECL or a TEMPLATE_DECL.  */ 
2950   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2951     parm = TREE_TYPE (parm);
2952
2953   /* Otherwise it must be a type template parameter.  */
2954   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2955            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2956           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2957 }
2958
2959 /* Determine if T is a function parameter pack.  */
2960
2961 bool
2962 function_parameter_pack_p (const_tree t)
2963 {
2964   if (t && TREE_CODE (t) == PARM_DECL)
2965     return DECL_PACK_P (t);
2966   return false;
2967 }
2968
2969 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2970    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2971
2972 tree
2973 get_function_template_decl (const_tree primary_func_tmpl_inst)
2974 {
2975   if (! primary_func_tmpl_inst
2976       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2977       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2978     return NULL;
2979
2980   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2981 }
2982
2983 /* Return true iff the function parameter PARAM_DECL was expanded
2984    from the function parameter pack PACK.  */
2985
2986 bool
2987 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2988 {
2989   if (DECL_ARTIFICIAL (param_decl)
2990       || !function_parameter_pack_p (pack))
2991     return false;
2992
2993   /* The parameter pack and its pack arguments have the same
2994      DECL_PARM_INDEX.  */
2995   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2996 }
2997
2998 /* Determine whether ARGS describes a variadic template args list,
2999    i.e., one that is terminated by a template argument pack.  */
3000
3001 static bool 
3002 template_args_variadic_p (tree args)
3003 {
3004   int nargs;
3005   tree last_parm;
3006
3007   if (args == NULL_TREE)
3008     return false;
3009
3010   args = INNERMOST_TEMPLATE_ARGS (args);
3011   nargs = TREE_VEC_LENGTH (args);
3012
3013   if (nargs == 0)
3014     return false;
3015
3016   last_parm = TREE_VEC_ELT (args, nargs - 1);
3017
3018   return ARGUMENT_PACK_P (last_parm);
3019 }
3020
3021 /* Generate a new name for the parameter pack name NAME (an
3022    IDENTIFIER_NODE) that incorporates its */
3023
3024 static tree
3025 make_ith_pack_parameter_name (tree name, int i)
3026 {
3027   /* Munge the name to include the parameter index.  */
3028 #define NUMBUF_LEN 128
3029   char numbuf[NUMBUF_LEN];
3030   char* newname;
3031   int newname_len;
3032
3033   if (name == NULL_TREE)
3034     return name;
3035   snprintf (numbuf, NUMBUF_LEN, "%i", i);
3036   newname_len = IDENTIFIER_LENGTH (name)
3037                 + strlen (numbuf) + 2;
3038   newname = (char*)alloca (newname_len);
3039   snprintf (newname, newname_len,
3040             "%s#%i", IDENTIFIER_POINTER (name), i);
3041   return get_identifier (newname);
3042 }
3043
3044 /* Return true if T is a primary function, class or alias template
3045    instantiation.  */
3046
3047 bool
3048 primary_template_instantiation_p (const_tree t)
3049 {
3050   if (!t)
3051     return false;
3052
3053   if (TREE_CODE (t) == FUNCTION_DECL)
3054     return DECL_LANG_SPECIFIC (t)
3055            && DECL_TEMPLATE_INSTANTIATION (t)
3056            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
3057   else if (CLASS_TYPE_P (t) && !TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
3058     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
3059            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
3060   else if (alias_template_specialization_p (t))
3061     return true;
3062   return false;
3063 }
3064
3065 /* Return true if PARM is a template template parameter.  */
3066
3067 bool
3068 template_template_parameter_p (const_tree parm)
3069 {
3070   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
3071 }
3072
3073 /* Return true iff PARM is a DECL representing a type template
3074    parameter.  */
3075
3076 bool
3077 template_type_parameter_p (const_tree parm)
3078 {
3079   return (parm
3080           && (TREE_CODE (parm) == TYPE_DECL
3081               || TREE_CODE (parm) == TEMPLATE_DECL)
3082           && DECL_TEMPLATE_PARM_P (parm));
3083 }
3084
3085 /* Return the template parameters of T if T is a
3086    primary template instantiation, NULL otherwise.  */
3087
3088 tree
3089 get_primary_template_innermost_parameters (const_tree t)
3090 {
3091   tree parms = NULL, template_info = NULL;
3092
3093   if ((template_info = get_template_info (t))
3094       && primary_template_instantiation_p (t))
3095     parms = INNERMOST_TEMPLATE_PARMS
3096         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
3097
3098   return parms;
3099 }
3100
3101 /* Return the template parameters of the LEVELth level from the full list
3102    of template parameters PARMS.  */
3103
3104 tree
3105 get_template_parms_at_level (tree parms, int level)
3106 {
3107   tree p;
3108   if (!parms
3109       || TREE_CODE (parms) != TREE_LIST
3110       || level > TMPL_PARMS_DEPTH (parms))
3111     return NULL_TREE;
3112
3113   for (p = parms; p; p = TREE_CHAIN (p))
3114     if (TMPL_PARMS_DEPTH (p) == level)
3115       return p;
3116
3117   return NULL_TREE;
3118 }
3119
3120 /* Returns the template arguments of T if T is a template instantiation,
3121    NULL otherwise.  */
3122
3123 tree
3124 get_template_innermost_arguments (const_tree t)
3125 {
3126   tree args = NULL, template_info = NULL;
3127
3128   if ((template_info = get_template_info (t))
3129       && TI_ARGS (template_info))
3130     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
3131
3132   return args;
3133 }
3134
3135 /* Return the argument pack elements of T if T is a template argument pack,
3136    NULL otherwise.  */
3137
3138 tree
3139 get_template_argument_pack_elems (const_tree t)
3140 {
3141   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
3142       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
3143     return NULL;
3144
3145   return ARGUMENT_PACK_ARGS (t);
3146 }
3147
3148 /* Structure used to track the progress of find_parameter_packs_r.  */
3149 struct find_parameter_pack_data 
3150 {
3151   /* TREE_LIST that will contain all of the parameter packs found by
3152      the traversal.  */
3153   tree* parameter_packs;
3154
3155   /* Set of AST nodes that have been visited by the traversal.  */
3156   hash_set<tree> *visited;
3157 };
3158
3159 /* Identifies all of the argument packs that occur in a template
3160    argument and appends them to the TREE_LIST inside DATA, which is a
3161    find_parameter_pack_data structure. This is a subroutine of
3162    make_pack_expansion and uses_parameter_packs.  */
3163 static tree
3164 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
3165 {
3166   tree t = *tp;
3167   struct find_parameter_pack_data* ppd = 
3168     (struct find_parameter_pack_data*)data;
3169   bool parameter_pack_p = false;
3170
3171   /* Handle type aliases/typedefs.  */
3172   if (TYPE_ALIAS_P (t))
3173     {
3174       if (TYPE_TEMPLATE_INFO (t))
3175         cp_walk_tree (&TYPE_TI_ARGS (t),
3176                       &find_parameter_packs_r,
3177                       ppd, ppd->visited);
3178       *walk_subtrees = 0;
3179       return NULL_TREE;
3180     }
3181
3182   /* Identify whether this is a parameter pack or not.  */
3183   switch (TREE_CODE (t))
3184     {
3185     case TEMPLATE_PARM_INDEX:
3186       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3187         parameter_pack_p = true;
3188       break;
3189
3190     case TEMPLATE_TYPE_PARM:
3191       t = TYPE_MAIN_VARIANT (t);
3192     case TEMPLATE_TEMPLATE_PARM:
3193       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3194         parameter_pack_p = true;
3195       break;
3196
3197     case FIELD_DECL:
3198     case PARM_DECL:
3199       if (DECL_PACK_P (t))
3200         {
3201           /* We don't want to walk into the type of a PARM_DECL,
3202              because we don't want to see the type parameter pack.  */
3203           *walk_subtrees = 0;
3204           parameter_pack_p = true;
3205         }
3206       break;
3207
3208       /* Look through a lambda capture proxy to the field pack.  */
3209     case VAR_DECL:
3210       if (DECL_HAS_VALUE_EXPR_P (t))
3211         {
3212           tree v = DECL_VALUE_EXPR (t);
3213           cp_walk_tree (&v,
3214                         &find_parameter_packs_r,
3215                         ppd, ppd->visited);
3216           *walk_subtrees = 0;
3217         }
3218       break;
3219
3220     case BASES:
3221       parameter_pack_p = true;
3222       break;
3223     default:
3224       /* Not a parameter pack.  */
3225       break;
3226     }
3227
3228   if (parameter_pack_p)
3229     {
3230       /* Add this parameter pack to the list.  */
3231       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
3232     }
3233
3234   if (TYPE_P (t))
3235     cp_walk_tree (&TYPE_CONTEXT (t), 
3236                   &find_parameter_packs_r, ppd, ppd->visited);
3237
3238   /* This switch statement will return immediately if we don't find a
3239      parameter pack.  */
3240   switch (TREE_CODE (t)) 
3241     {
3242     case TEMPLATE_PARM_INDEX:
3243       return NULL_TREE;
3244
3245     case BOUND_TEMPLATE_TEMPLATE_PARM:
3246       /* Check the template itself.  */
3247       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
3248                     &find_parameter_packs_r, ppd, ppd->visited);
3249       /* Check the template arguments.  */
3250       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
3251                     ppd->visited);
3252       *walk_subtrees = 0;
3253       return NULL_TREE;
3254
3255     case TEMPLATE_TYPE_PARM:
3256     case TEMPLATE_TEMPLATE_PARM:
3257       return NULL_TREE;
3258
3259     case PARM_DECL:
3260       return NULL_TREE;
3261
3262     case RECORD_TYPE:
3263       if (TYPE_PTRMEMFUNC_P (t))
3264         return NULL_TREE;
3265       /* Fall through.  */
3266
3267     case UNION_TYPE:
3268     case ENUMERAL_TYPE:
3269       if (TYPE_TEMPLATE_INFO (t))
3270         cp_walk_tree (&TYPE_TI_ARGS (t),
3271                       &find_parameter_packs_r, ppd, ppd->visited);
3272
3273       *walk_subtrees = 0;
3274       return NULL_TREE;
3275
3276     case CONSTRUCTOR:
3277     case TEMPLATE_DECL:
3278       cp_walk_tree (&TREE_TYPE (t),
3279                     &find_parameter_packs_r, ppd, ppd->visited);
3280       return NULL_TREE;
3281  
3282     case TYPENAME_TYPE:
3283       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3284                    ppd, ppd->visited);
3285       *walk_subtrees = 0;
3286       return NULL_TREE;
3287       
3288     case TYPE_PACK_EXPANSION:
3289     case EXPR_PACK_EXPANSION:
3290       *walk_subtrees = 0;
3291       return NULL_TREE;
3292
3293     case INTEGER_TYPE:
3294       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3295                     ppd, ppd->visited);
3296       *walk_subtrees = 0;
3297       return NULL_TREE;
3298
3299     case IDENTIFIER_NODE:
3300       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3301                     ppd->visited);
3302       *walk_subtrees = 0;
3303       return NULL_TREE;
3304
3305     default:
3306       return NULL_TREE;
3307     }
3308
3309   return NULL_TREE;
3310 }
3311
3312 /* Determines if the expression or type T uses any parameter packs.  */
3313 bool
3314 uses_parameter_packs (tree t)
3315 {
3316   tree parameter_packs = NULL_TREE;
3317   struct find_parameter_pack_data ppd;
3318   ppd.parameter_packs = &parameter_packs;
3319   ppd.visited = new hash_set<tree>;
3320   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3321   delete ppd.visited;
3322   return parameter_packs != NULL_TREE;
3323 }
3324
3325 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3326    representation a base-class initializer into a parameter pack
3327    expansion. If all goes well, the resulting node will be an
3328    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3329    respectively.  */
3330 tree 
3331 make_pack_expansion (tree arg)
3332 {
3333   tree result;
3334   tree parameter_packs = NULL_TREE;
3335   bool for_types = false;
3336   struct find_parameter_pack_data ppd;
3337
3338   if (!arg || arg == error_mark_node)
3339     return arg;
3340
3341   if (TREE_CODE (arg) == TREE_LIST)
3342     {
3343       /* The only time we will see a TREE_LIST here is for a base
3344          class initializer.  In this case, the TREE_PURPOSE will be a
3345          _TYPE node (representing the base class expansion we're
3346          initializing) and the TREE_VALUE will be a TREE_LIST
3347          containing the initialization arguments. 
3348
3349          The resulting expansion looks somewhat different from most
3350          expansions. Rather than returning just one _EXPANSION, we
3351          return a TREE_LIST whose TREE_PURPOSE is a
3352          TYPE_PACK_EXPANSION containing the bases that will be
3353          initialized.  The TREE_VALUE will be identical to the
3354          original TREE_VALUE, which is a list of arguments that will
3355          be passed to each base.  We do not introduce any new pack
3356          expansion nodes into the TREE_VALUE (although it is possible
3357          that some already exist), because the TREE_PURPOSE and
3358          TREE_VALUE all need to be expanded together with the same
3359          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3360          resulting TREE_PURPOSE will mention the parameter packs in
3361          both the bases and the arguments to the bases.  */
3362       tree purpose;
3363       tree value;
3364       tree parameter_packs = NULL_TREE;
3365
3366       /* Determine which parameter packs will be used by the base
3367          class expansion.  */
3368       ppd.visited = new hash_set<tree>;
3369       ppd.parameter_packs = &parameter_packs;
3370       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3371                     &ppd, ppd.visited);
3372
3373       if (parameter_packs == NULL_TREE)
3374         {
3375           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3376           delete ppd.visited;
3377           return error_mark_node;
3378         }
3379
3380       if (TREE_VALUE (arg) != void_type_node)
3381         {
3382           /* Collect the sets of parameter packs used in each of the
3383              initialization arguments.  */
3384           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3385             {
3386               /* Determine which parameter packs will be expanded in this
3387                  argument.  */
3388               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3389                             &ppd, ppd.visited);
3390             }
3391         }
3392
3393       delete ppd.visited;
3394
3395       /* Create the pack expansion type for the base type.  */
3396       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3397       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3398       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3399
3400       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3401          they will rarely be compared to anything.  */
3402       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3403
3404       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3405     }
3406
3407   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3408     for_types = true;
3409
3410   /* Build the PACK_EXPANSION_* node.  */
3411   result = for_types
3412      ? cxx_make_type (TYPE_PACK_EXPANSION)
3413      : make_node (EXPR_PACK_EXPANSION);
3414   SET_PACK_EXPANSION_PATTERN (result, arg);
3415   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3416     {
3417       /* Propagate type and const-expression information.  */
3418       TREE_TYPE (result) = TREE_TYPE (arg);
3419       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3420     }
3421   else
3422     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3423        they will rarely be compared to anything.  */
3424     SET_TYPE_STRUCTURAL_EQUALITY (result);
3425
3426   /* Determine which parameter packs will be expanded.  */
3427   ppd.parameter_packs = &parameter_packs;
3428   ppd.visited = new hash_set<tree>;
3429   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3430   delete ppd.visited;
3431
3432   /* Make sure we found some parameter packs.  */
3433   if (parameter_packs == NULL_TREE)
3434     {
3435       if (TYPE_P (arg))
3436         error ("expansion pattern %<%T%> contains no argument packs", arg);
3437       else
3438         error ("expansion pattern %<%E%> contains no argument packs", arg);
3439       return error_mark_node;
3440     }
3441   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3442
3443   PACK_EXPANSION_LOCAL_P (result) = at_function_scope_p ();
3444
3445   return result;
3446 }
3447
3448 /* Checks T for any "bare" parameter packs, which have not yet been
3449    expanded, and issues an error if any are found. This operation can
3450    only be done on full expressions or types (e.g., an expression
3451    statement, "if" condition, etc.), because we could have expressions like:
3452
3453      foo(f(g(h(args)))...)
3454
3455    where "args" is a parameter pack. check_for_bare_parameter_packs
3456    should not be called for the subexpressions args, h(args),
3457    g(h(args)), or f(g(h(args))), because we would produce erroneous
3458    error messages. 
3459
3460    Returns TRUE and emits an error if there were bare parameter packs,
3461    returns FALSE otherwise.  */
3462 bool 
3463 check_for_bare_parameter_packs (tree t)
3464 {
3465   tree parameter_packs = NULL_TREE;
3466   struct find_parameter_pack_data ppd;
3467
3468   if (!processing_template_decl || !t || t == error_mark_node)
3469     return false;
3470
3471   if (TREE_CODE (t) == TYPE_DECL)
3472     t = TREE_TYPE (t);
3473
3474   ppd.parameter_packs = &parameter_packs;
3475   ppd.visited = new hash_set<tree>;
3476   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3477   delete ppd.visited;
3478
3479   if (parameter_packs) 
3480     {
3481       error ("parameter packs not expanded with %<...%>:");
3482       while (parameter_packs)
3483         {
3484           tree pack = TREE_VALUE (parameter_packs);
3485           tree name = NULL_TREE;
3486
3487           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3488               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3489             name = TYPE_NAME (pack);
3490           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3491             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3492           else
3493             name = DECL_NAME (pack);
3494
3495           if (name)
3496             inform (input_location, "        %qD", name);
3497           else
3498             inform (input_location, "        <anonymous>");
3499
3500           parameter_packs = TREE_CHAIN (parameter_packs);
3501         }
3502
3503       return true;
3504     }
3505
3506   return false;
3507 }
3508
3509 /* Expand any parameter packs that occur in the template arguments in
3510    ARGS.  */
3511 tree
3512 expand_template_argument_pack (tree args)
3513 {
3514   tree result_args = NULL_TREE;
3515   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3516   int num_result_args = -1;
3517   int non_default_args_count = -1;
3518
3519   /* First, determine if we need to expand anything, and the number of
3520      slots we'll need.  */
3521   for (in_arg = 0; in_arg < nargs; ++in_arg)
3522     {
3523       tree arg = TREE_VEC_ELT (args, in_arg);
3524       if (arg == NULL_TREE)
3525         return args;
3526       if (ARGUMENT_PACK_P (arg))
3527         {
3528           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3529           if (num_result_args < 0)
3530             num_result_args = in_arg + num_packed;
3531           else
3532             num_result_args += num_packed;
3533         }
3534       else
3535         {
3536           if (num_result_args >= 0)
3537             num_result_args++;
3538         }
3539     }
3540
3541   /* If no expansion is necessary, we're done.  */
3542   if (num_result_args < 0)
3543     return args;
3544
3545   /* Expand arguments.  */
3546   result_args = make_tree_vec (num_result_args);
3547   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3548     non_default_args_count =
3549       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3550   for (in_arg = 0; in_arg < nargs; ++in_arg)
3551     {
3552       tree arg = TREE_VEC_ELT (args, in_arg);
3553       if (ARGUMENT_PACK_P (arg))
3554         {
3555           tree packed = ARGUMENT_PACK_ARGS (arg);
3556           int i, num_packed = TREE_VEC_LENGTH (packed);
3557           for (i = 0; i < num_packed; ++i, ++out_arg)
3558             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3559           if (non_default_args_count > 0)
3560             non_default_args_count += num_packed - 1;
3561         }
3562       else
3563         {
3564           TREE_VEC_ELT (result_args, out_arg) = arg;
3565           ++out_arg;
3566         }
3567     }
3568   if (non_default_args_count >= 0)
3569     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3570   return result_args;
3571 }
3572
3573 /* Checks if DECL shadows a template parameter.
3574
3575    [temp.local]: A template-parameter shall not be redeclared within its
3576    scope (including nested scopes).
3577
3578    Emits an error and returns TRUE if the DECL shadows a parameter,
3579    returns FALSE otherwise.  */
3580
3581 bool
3582 check_template_shadow (tree decl)
3583 {
3584   tree olddecl;
3585
3586   /* If we're not in a template, we can't possibly shadow a template
3587      parameter.  */
3588   if (!current_template_parms)
3589     return true;
3590
3591   /* Figure out what we're shadowing.  */
3592   if (TREE_CODE (decl) == OVERLOAD)
3593     decl = OVL_CURRENT (decl);
3594   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3595
3596   /* If there's no previous binding for this name, we're not shadowing
3597      anything, let alone a template parameter.  */
3598   if (!olddecl)
3599     return true;
3600
3601   /* If we're not shadowing a template parameter, we're done.  Note
3602      that OLDDECL might be an OVERLOAD (or perhaps even an
3603      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3604      node.  */
3605   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3606     return true;
3607
3608   /* We check for decl != olddecl to avoid bogus errors for using a
3609      name inside a class.  We check TPFI to avoid duplicate errors for
3610      inline member templates.  */
3611   if (decl == olddecl
3612       || (DECL_TEMPLATE_PARM_P (decl)
3613           && TEMPLATE_PARMS_FOR_INLINE (current_template_parms)))
3614     return true;
3615
3616   /* Don't complain about the injected class name, as we've already
3617      complained about the class itself.  */
3618   if (DECL_SELF_REFERENCE_P (decl))
3619     return false;
3620
3621   error ("declaration of %q+#D", decl);
3622   error (" shadows template parm %q+#D", olddecl);
3623   return false;
3624 }
3625
3626 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3627    ORIG_LEVEL, DECL, and TYPE.  */
3628
3629 static tree
3630 build_template_parm_index (int index,
3631                            int level,
3632                            int orig_level,
3633                            tree decl,
3634                            tree type)
3635 {
3636   tree t = make_node (TEMPLATE_PARM_INDEX);
3637   TEMPLATE_PARM_IDX (t) = index;
3638   TEMPLATE_PARM_LEVEL (t) = level;
3639   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3640   TEMPLATE_PARM_DECL (t) = decl;
3641   TREE_TYPE (t) = type;
3642   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3643   TREE_READONLY (t) = TREE_READONLY (decl);
3644
3645   return t;
3646 }
3647
3648 /* Find the canonical type parameter for the given template type
3649    parameter.  Returns the canonical type parameter, which may be TYPE
3650    if no such parameter existed.  */
3651
3652 static tree
3653 canonical_type_parameter (tree type)
3654 {
3655   tree list;
3656   int idx = TEMPLATE_TYPE_IDX (type);
3657   if (!canonical_template_parms)
3658     vec_alloc (canonical_template_parms, idx+1);
3659
3660   while (canonical_template_parms->length () <= (unsigned)idx)
3661     vec_safe_push (canonical_template_parms, NULL_TREE);
3662
3663   list = (*canonical_template_parms)[idx];
3664   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3665     list = TREE_CHAIN (list);
3666
3667   if (list)
3668     return TREE_VALUE (list);
3669   else
3670     {
3671       (*canonical_template_parms)[idx]
3672                 = tree_cons (NULL_TREE, type,
3673                              (*canonical_template_parms)[idx]);
3674       return type;
3675     }
3676 }
3677
3678 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3679    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3680    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3681    new one is created.  */
3682
3683 static tree
3684 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3685                             tsubst_flags_t complain)
3686 {
3687   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3688       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3689           != TEMPLATE_PARM_LEVEL (index) - levels)
3690       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3691     {
3692       tree orig_decl = TEMPLATE_PARM_DECL (index);
3693       tree decl, t;
3694
3695       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3696                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3697       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3698       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3699       DECL_ARTIFICIAL (decl) = 1;
3700       SET_DECL_TEMPLATE_PARM_P (decl);
3701
3702       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3703                                      TEMPLATE_PARM_LEVEL (index) - levels,
3704                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3705                                      decl, type);
3706       TEMPLATE_PARM_DESCENDANTS (index) = t;
3707       TEMPLATE_PARM_PARAMETER_PACK (t) 
3708         = TEMPLATE_PARM_PARAMETER_PACK (index);
3709
3710         /* Template template parameters need this.  */
3711       if (TREE_CODE (decl) == TEMPLATE_DECL)
3712         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3713           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3714            args, complain);
3715     }
3716
3717   return TEMPLATE_PARM_DESCENDANTS (index);
3718 }
3719
3720 /* Process information from new template parameter PARM and append it
3721    to the LIST being built.  This new parameter is a non-type
3722    parameter iff IS_NON_TYPE is true. This new parameter is a
3723    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3724    is in PARM_LOC.  */
3725
3726 tree
3727 process_template_parm (tree list, location_t parm_loc, tree parm,
3728                        bool is_non_type, bool is_parameter_pack)
3729 {
3730   tree decl = 0;
3731   tree defval;
3732   int idx = 0;
3733
3734   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3735   defval = TREE_PURPOSE (parm);
3736
3737   if (list)
3738     {
3739       tree p = tree_last (list);
3740
3741       if (p && TREE_VALUE (p) != error_mark_node)
3742         {
3743           p = TREE_VALUE (p);
3744           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3745             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3746           else
3747             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3748         }
3749
3750       ++idx;
3751     }
3752
3753   if (is_non_type)
3754     {
3755       parm = TREE_VALUE (parm);
3756
3757       SET_DECL_TEMPLATE_PARM_P (parm);
3758
3759       if (TREE_TYPE (parm) != error_mark_node)
3760         {
3761           /* [temp.param]
3762
3763              The top-level cv-qualifiers on the template-parameter are
3764              ignored when determining its type.  */
3765           TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3766           if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3767             TREE_TYPE (parm) = error_mark_node;
3768           else if (uses_parameter_packs (TREE_TYPE (parm))
3769                    && !is_parameter_pack
3770                    /* If we're in a nested template parameter list, the template
3771                       template parameter could be a parameter pack.  */
3772                    && processing_template_parmlist == 1)
3773             {
3774               /* This template parameter is not a parameter pack, but it
3775                  should be. Complain about "bare" parameter packs.  */
3776               check_for_bare_parameter_packs (TREE_TYPE (parm));
3777
3778               /* Recover by calling this a parameter pack.  */
3779               is_parameter_pack = true;
3780             }
3781         }
3782
3783       /* A template parameter is not modifiable.  */
3784       TREE_CONSTANT (parm) = 1;
3785       TREE_READONLY (parm) = 1;
3786       decl = build_decl (parm_loc,
3787                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3788       TREE_CONSTANT (decl) = 1;
3789       TREE_READONLY (decl) = 1;
3790       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3791         = build_template_parm_index (idx, processing_template_decl,
3792                                      processing_template_decl,
3793                                      decl, TREE_TYPE (parm));
3794
3795       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3796         = is_parameter_pack;
3797     }
3798   else
3799     {
3800       tree t;
3801       parm = TREE_VALUE (TREE_VALUE (parm));
3802
3803       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3804         {
3805           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3806           /* This is for distinguishing between real templates and template
3807              template parameters */
3808           TREE_TYPE (parm) = t;
3809           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3810           decl = parm;
3811         }
3812       else
3813         {
3814           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3815           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3816           decl = build_decl (parm_loc,
3817                              TYPE_DECL, parm, t);
3818         }
3819
3820       TYPE_NAME (t) = decl;
3821       TYPE_STUB_DECL (t) = decl;
3822       parm = decl;
3823       TEMPLATE_TYPE_PARM_INDEX (t)
3824         = build_template_parm_index (idx, processing_template_decl,
3825                                      processing_template_decl,
3826                                      decl, TREE_TYPE (parm));
3827       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3828       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3829     }
3830   DECL_ARTIFICIAL (decl) = 1;
3831   SET_DECL_TEMPLATE_PARM_P (decl);
3832   pushdecl (decl);
3833   parm = build_tree_list (defval, parm);
3834   return chainon (list, parm);
3835 }
3836
3837 /* The end of a template parameter list has been reached.  Process the
3838    tree list into a parameter vector, converting each parameter into a more
3839    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3840    as PARM_DECLs.  */
3841
3842 tree
3843 end_template_parm_list (tree parms)
3844 {
3845   int nparms;
3846   tree parm, next;
3847   tree saved_parmlist = make_tree_vec (list_length (parms));
3848
3849   current_template_parms
3850     = tree_cons (size_int (processing_template_decl),
3851                  saved_parmlist, current_template_parms);
3852
3853   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3854     {
3855       next = TREE_CHAIN (parm);
3856       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3857       TREE_CHAIN (parm) = NULL_TREE;
3858     }
3859
3860   --processing_template_parmlist;
3861
3862   return saved_parmlist;
3863 }
3864
3865 /* end_template_decl is called after a template declaration is seen.  */
3866
3867 void
3868 end_template_decl (void)
3869 {
3870   reset_specialization ();
3871
3872   if (! processing_template_decl)
3873     return;
3874
3875   /* This matches the pushlevel in begin_template_parm_list.  */
3876   finish_scope ();
3877
3878   --processing_template_decl;
3879   current_template_parms = TREE_CHAIN (current_template_parms);
3880 }
3881
3882 /* Takes a TREE_LIST representing a template parameter and convert it
3883    into an argument suitable to be passed to the type substitution
3884    functions.  Note that If the TREE_LIST contains an error_mark
3885    node, the returned argument is error_mark_node.  */
3886
3887 static tree
3888 template_parm_to_arg (tree t)
3889 {
3890
3891   if (t == NULL_TREE
3892       || TREE_CODE (t) != TREE_LIST)
3893     return t;
3894
3895   if (error_operand_p (TREE_VALUE (t)))
3896     return error_mark_node;
3897
3898   t = TREE_VALUE (t);
3899
3900   if (TREE_CODE (t) == TYPE_DECL
3901       || TREE_CODE (t) == TEMPLATE_DECL)
3902     {
3903       t = TREE_TYPE (t);
3904
3905       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3906         {
3907           /* Turn this argument into a TYPE_ARGUMENT_PACK
3908              with a single element, which expands T.  */
3909           tree vec = make_tree_vec (1);
3910 #ifdef ENABLE_CHECKING
3911           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3912             (vec, TREE_VEC_LENGTH (vec));
3913 #endif
3914           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3915
3916           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3917           SET_ARGUMENT_PACK_ARGS (t, vec);
3918         }
3919     }
3920   else
3921     {
3922       t = DECL_INITIAL (t);
3923
3924       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3925         {
3926           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3927              with a single element, which expands T.  */
3928           tree vec = make_tree_vec (1);
3929           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3930 #ifdef ENABLE_CHECKING
3931           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3932             (vec, TREE_VEC_LENGTH (vec));
3933 #endif
3934           t = convert_from_reference (t);
3935           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3936
3937           t  = make_node (NONTYPE_ARGUMENT_PACK);
3938           SET_ARGUMENT_PACK_ARGS (t, vec);
3939           TREE_TYPE (t) = type;
3940         }
3941       else
3942         t = convert_from_reference (t);
3943     }
3944   return t;
3945 }
3946
3947 /* Given a set of template parameters, return them as a set of template
3948    arguments.  The template parameters are represented as a TREE_VEC, in
3949    the form documented in cp-tree.h for template arguments.  */
3950
3951 static tree
3952 template_parms_to_args (tree parms)
3953 {
3954   tree header;
3955   tree args = NULL_TREE;
3956   int length = TMPL_PARMS_DEPTH (parms);
3957   int l = length;
3958
3959   /* If there is only one level of template parameters, we do not
3960      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3961      TREE_VEC containing the arguments.  */
3962   if (length > 1)
3963     args = make_tree_vec (length);
3964
3965   for (header = parms; header; header = TREE_CHAIN (header))
3966     {
3967       tree a = copy_node (TREE_VALUE (header));
3968       int i;
3969
3970       TREE_TYPE (a) = NULL_TREE;
3971       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3972         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
3973
3974 #ifdef ENABLE_CHECKING
3975       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
3976 #endif
3977
3978       if (length > 1)
3979         TREE_VEC_ELT (args, --l) = a;
3980       else
3981         args = a;
3982     }
3983
3984     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
3985       /* This can happen for template parms of a template template
3986          parameter, e.g:
3987
3988          template<template<class T, class U> class TT> struct S;
3989
3990          Consider the level of the parms of TT; T and U both have
3991          level 2; TT has no template parm of level 1. So in this case
3992          the first element of full_template_args is NULL_TREE. If we
3993          leave it like this TMPL_ARGS_DEPTH on args returns 1 instead
3994          of 2. This will make tsubst wrongly consider that T and U
3995          have level 1. Instead, let's create a dummy vector as the
3996          first element of full_template_args so that TMPL_ARGS_DEPTH
3997          returns the correct depth for args.  */
3998       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
3999   return args;
4000 }
4001
4002 /* Within the declaration of a template, return the currently active
4003    template parameters as an argument TREE_VEC.  */
4004
4005 static tree
4006 current_template_args (void)
4007 {
4008   return template_parms_to_args (current_template_parms);
4009 }
4010
4011 /* Update the declared TYPE by doing any lookups which were thought to be
4012    dependent, but are not now that we know the SCOPE of the declarator.  */
4013
4014 tree
4015 maybe_update_decl_type (tree orig_type, tree scope)
4016 {
4017   tree type = orig_type;
4018
4019   if (type == NULL_TREE)
4020     return type;
4021
4022   if (TREE_CODE (orig_type) == TYPE_DECL)
4023     type = TREE_TYPE (type);
4024
4025   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4026       && dependent_type_p (type)
4027       /* Don't bother building up the args in this case.  */
4028       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4029     {
4030       /* tsubst in the args corresponding to the template parameters,
4031          including auto if present.  Most things will be unchanged, but
4032          make_typename_type and tsubst_qualified_id will resolve
4033          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4034       tree args = current_template_args ();
4035       tree auto_node = type_uses_auto (type);
4036       tree pushed;
4037       if (auto_node)
4038         {
4039           tree auto_vec = make_tree_vec (1);
4040           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4041           args = add_to_template_args (args, auto_vec);
4042         }
4043       pushed = push_scope (scope);
4044       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4045       if (pushed)
4046         pop_scope (scope);
4047     }
4048
4049   if (type == error_mark_node)
4050     return orig_type;
4051
4052   if (TREE_CODE (orig_type) == TYPE_DECL)
4053     {
4054       if (same_type_p (type, TREE_TYPE (orig_type)))
4055         type = orig_type;
4056       else
4057         type = TYPE_NAME (type);
4058     }
4059   return type;
4060 }
4061
4062 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4063    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4064    a member template.  Used by push_template_decl below.  */
4065
4066 static tree
4067 build_template_decl (tree decl, tree parms, bool member_template_p)
4068 {
4069   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4070   DECL_TEMPLATE_PARMS (tmpl) = parms;
4071   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4072   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4073   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4074
4075   return tmpl;
4076 }
4077
4078 struct template_parm_data
4079 {
4080   /* The level of the template parameters we are currently
4081      processing.  */
4082   int level;
4083
4084   /* The index of the specialization argument we are currently
4085      processing.  */
4086   int current_arg;
4087
4088   /* An array whose size is the number of template parameters.  The
4089      elements are nonzero if the parameter has been used in any one
4090      of the arguments processed so far.  */
4091   int* parms;
4092
4093   /* An array whose size is the number of template arguments.  The
4094      elements are nonzero if the argument makes use of template
4095      parameters of this level.  */
4096   int* arg_uses_template_parms;
4097 };
4098
4099 /* Subroutine of push_template_decl used to see if each template
4100    parameter in a partial specialization is used in the explicit
4101    argument list.  If T is of the LEVEL given in DATA (which is
4102    treated as a template_parm_data*), then DATA->PARMS is marked
4103    appropriately.  */
4104
4105 static int
4106 mark_template_parm (tree t, void* data)
4107 {
4108   int level;
4109   int idx;
4110   struct template_parm_data* tpd = (struct template_parm_data*) data;
4111
4112   template_parm_level_and_index (t, &level, &idx);
4113
4114   if (level == tpd->level)
4115     {
4116       tpd->parms[idx] = 1;
4117       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4118     }
4119
4120   /* Return zero so that for_each_template_parm will continue the
4121      traversal of the tree; we want to mark *every* template parm.  */
4122   return 0;
4123 }
4124
4125 /* Process the partial specialization DECL.  */
4126
4127 static tree
4128 process_partial_specialization (tree decl)
4129 {
4130   tree type = TREE_TYPE (decl);
4131   tree tinfo = get_template_info (decl);
4132   tree maintmpl = TI_TEMPLATE (tinfo);
4133   tree specargs = TI_ARGS (tinfo);
4134   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4135   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4136   tree inner_parms;
4137   tree inst;
4138   int nargs = TREE_VEC_LENGTH (inner_args);
4139   int ntparms;
4140   int  i;
4141   bool did_error_intro = false;
4142   struct template_parm_data tpd;
4143   struct template_parm_data tpd2;
4144
4145   gcc_assert (current_template_parms);
4146
4147   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4148   ntparms = TREE_VEC_LENGTH (inner_parms);
4149
4150   /* We check that each of the template parameters given in the
4151      partial specialization is used in the argument list to the
4152      specialization.  For example:
4153
4154        template <class T> struct S;
4155        template <class T> struct S<T*>;
4156
4157      The second declaration is OK because `T*' uses the template
4158      parameter T, whereas
4159
4160        template <class T> struct S<int>;
4161
4162      is no good.  Even trickier is:
4163
4164        template <class T>
4165        struct S1
4166        {
4167           template <class U>
4168           struct S2;
4169           template <class U>
4170           struct S2<T>;
4171        };
4172
4173      The S2<T> declaration is actually invalid; it is a
4174      full-specialization.  Of course,
4175
4176           template <class U>
4177           struct S2<T (*)(U)>;
4178
4179      or some such would have been OK.  */
4180   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4181   tpd.parms = XALLOCAVEC (int, ntparms);
4182   memset (tpd.parms, 0, sizeof (int) * ntparms);
4183
4184   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4185   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4186   for (i = 0; i < nargs; ++i)
4187     {
4188       tpd.current_arg = i;
4189       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4190                               &mark_template_parm,
4191                               &tpd,
4192                               NULL,
4193                               /*include_nondeduced_p=*/false);
4194     }
4195   for (i = 0; i < ntparms; ++i)
4196     if (tpd.parms[i] == 0)
4197       {
4198         /* One of the template parms was not used in a deduced context in the
4199            specialization.  */
4200         if (!did_error_intro)
4201           {
4202             error ("template parameters not deducible in "
4203                    "partial specialization:");
4204             did_error_intro = true;
4205           }
4206
4207         inform (input_location, "        %qD",
4208                 TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4209       }
4210
4211   if (did_error_intro)
4212     return error_mark_node;
4213
4214   /* [temp.class.spec]
4215
4216      The argument list of the specialization shall not be identical to
4217      the implicit argument list of the primary template.  */
4218   tree main_args
4219     = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (maintmpl)));
4220   if (comp_template_args (inner_args, INNERMOST_TEMPLATE_ARGS (main_args)))
4221     error ("partial specialization %qD does not specialize "
4222            "any template arguments", decl);
4223
4224   /* A partial specialization that replaces multiple parameters of the
4225      primary template with a pack expansion is less specialized for those
4226      parameters.  */
4227   if (nargs < DECL_NTPARMS (maintmpl))
4228     {
4229       error ("partial specialization is not more specialized than the "
4230              "primary template because it replaces multiple parameters "
4231              "with a pack expansion");
4232       inform (DECL_SOURCE_LOCATION (maintmpl), "primary template here");
4233       return decl;
4234     }
4235
4236   /* [temp.class.spec]
4237
4238      A partially specialized non-type argument expression shall not
4239      involve template parameters of the partial specialization except
4240      when the argument expression is a simple identifier.
4241
4242      The type of a template parameter corresponding to a specialized
4243      non-type argument shall not be dependent on a parameter of the
4244      specialization. 
4245
4246      Also, we verify that pack expansions only occur at the
4247      end of the argument list.  */
4248   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4249   tpd2.parms = 0;
4250   for (i = 0; i < nargs; ++i)
4251     {
4252       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4253       tree arg = TREE_VEC_ELT (inner_args, i);
4254       tree packed_args = NULL_TREE;
4255       int j, len = 1;
4256
4257       if (ARGUMENT_PACK_P (arg))
4258         {
4259           /* Extract the arguments from the argument pack. We'll be
4260              iterating over these in the following loop.  */
4261           packed_args = ARGUMENT_PACK_ARGS (arg);
4262           len = TREE_VEC_LENGTH (packed_args);
4263         }
4264
4265       for (j = 0; j < len; j++)
4266         {
4267           if (packed_args)
4268             /* Get the Jth argument in the parameter pack.  */
4269             arg = TREE_VEC_ELT (packed_args, j);
4270
4271           if (PACK_EXPANSION_P (arg))
4272             {
4273               /* Pack expansions must come at the end of the
4274                  argument list.  */
4275               if ((packed_args && j < len - 1)
4276                   || (!packed_args && i < nargs - 1))
4277                 {
4278                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4279                     error ("parameter pack argument %qE must be at the "
4280                            "end of the template argument list", arg);
4281                   else
4282                     error ("parameter pack argument %qT must be at the "
4283                            "end of the template argument list", arg);
4284                 }
4285             }
4286
4287           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4288             /* We only care about the pattern.  */
4289             arg = PACK_EXPANSION_PATTERN (arg);
4290
4291           if (/* These first two lines are the `non-type' bit.  */
4292               !TYPE_P (arg)
4293               && TREE_CODE (arg) != TEMPLATE_DECL
4294               /* This next two lines are the `argument expression is not just a
4295                  simple identifier' condition and also the `specialized
4296                  non-type argument' bit.  */
4297               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX
4298               && !(REFERENCE_REF_P (arg)
4299                    && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_PARM_INDEX))
4300             {
4301               if ((!packed_args && tpd.arg_uses_template_parms[i])
4302                   || (packed_args && uses_template_parms (arg)))
4303                 error ("template argument %qE involves template parameter(s)",
4304                        arg);
4305               else 
4306                 {
4307                   /* Look at the corresponding template parameter,
4308                      marking which template parameters its type depends
4309                      upon.  */
4310                   tree type = TREE_TYPE (parm);
4311
4312                   if (!tpd2.parms)
4313                     {
4314                       /* We haven't yet initialized TPD2.  Do so now.  */
4315                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4316                       /* The number of parameters here is the number in the
4317                          main template, which, as checked in the assertion
4318                          above, is NARGS.  */
4319                       tpd2.parms = XALLOCAVEC (int, nargs);
4320                       tpd2.level = 
4321                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4322                     }
4323
4324                   /* Mark the template parameters.  But this time, we're
4325                      looking for the template parameters of the main
4326                      template, not in the specialization.  */
4327                   tpd2.current_arg = i;
4328                   tpd2.arg_uses_template_parms[i] = 0;
4329                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4330                   for_each_template_parm (type,
4331                                           &mark_template_parm,
4332                                           &tpd2,
4333                                           NULL,
4334                                           /*include_nondeduced_p=*/false);
4335
4336                   if (tpd2.arg_uses_template_parms [i])
4337                     {
4338                       /* The type depended on some template parameters.
4339                          If they are fully specialized in the
4340                          specialization, that's OK.  */
4341                       int j;
4342                       int count = 0;
4343                       for (j = 0; j < nargs; ++j)
4344                         if (tpd2.parms[j] != 0
4345                             && tpd.arg_uses_template_parms [j])
4346                           ++count;
4347                       if (count != 0)
4348                         error_n (input_location, count,
4349                                  "type %qT of template argument %qE depends "
4350                                  "on a template parameter",
4351                                  "type %qT of template argument %qE depends "
4352                                  "on template parameters",
4353                                  type,
4354                                  arg);
4355                     }
4356                 }
4357             }
4358         }
4359     }
4360
4361   /* We should only get here once.  */
4362   if (TREE_CODE (decl) == TYPE_DECL)
4363     gcc_assert (!COMPLETE_TYPE_P (type));
4364
4365   tree tmpl = build_template_decl (decl, current_template_parms,
4366                                    DECL_MEMBER_TEMPLATE_P (maintmpl));
4367   TREE_TYPE (tmpl) = type;
4368   DECL_TEMPLATE_RESULT (tmpl) = decl;
4369   SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4370   DECL_TEMPLATE_INFO (tmpl) = build_template_info (maintmpl, specargs);
4371   DECL_PRIMARY_TEMPLATE (tmpl) = maintmpl;
4372
4373   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4374     = tree_cons (specargs, tmpl,
4375                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4376   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4377
4378   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4379        inst = TREE_CHAIN (inst))
4380     {
4381       tree instance = TREE_VALUE (inst);
4382       if (TYPE_P (instance)
4383           ? (COMPLETE_TYPE_P (instance)
4384              && CLASSTYPE_IMPLICIT_INSTANTIATION (instance))
4385           : DECL_TEMPLATE_INSTANTIATION (instance))
4386         {
4387           tree spec = most_specialized_partial_spec (instance, tf_none);
4388           if (spec && TREE_VALUE (spec) == tmpl)
4389             {
4390               tree inst_decl = (DECL_P (instance)
4391                                 ? instance : TYPE_NAME (instance));
4392               permerror (input_location,
4393                          "partial specialization of %qD after instantiation "
4394                          "of %qD", decl, inst_decl);
4395             }
4396         }
4397     }
4398
4399   return decl;
4400 }
4401
4402 /* PARM is a template parameter of some form; return the corresponding
4403    TEMPLATE_PARM_INDEX.  */
4404
4405 static tree
4406 get_template_parm_index (tree parm)
4407 {
4408   if (TREE_CODE (parm) == PARM_DECL
4409       || TREE_CODE (parm) == CONST_DECL)
4410     parm = DECL_INITIAL (parm);
4411   else if (TREE_CODE (parm) == TYPE_DECL
4412            || TREE_CODE (parm) == TEMPLATE_DECL)
4413     parm = TREE_TYPE (parm);
4414   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
4415       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
4416     parm = TEMPLATE_TYPE_PARM_INDEX (parm);
4417   gcc_assert (TREE_CODE (parm) == TEMPLATE_PARM_INDEX);
4418   return parm;
4419 }
4420
4421 /* Subroutine of fixed_parameter_pack_p below.  Look for any template
4422    parameter packs used by the template parameter PARM.  */
4423
4424 static void
4425 fixed_parameter_pack_p_1 (tree parm, struct find_parameter_pack_data *ppd)
4426 {
4427   /* A type parm can't refer to another parm.  */
4428   if (TREE_CODE (parm) == TYPE_DECL)
4429     return;
4430   else if (TREE_CODE (parm) == PARM_DECL)
4431     {
4432       cp_walk_tree (&TREE_TYPE (parm), &find_parameter_packs_r,
4433                     ppd, ppd->visited);
4434       return;
4435     }
4436
4437   gcc_assert (TREE_CODE (parm) == TEMPLATE_DECL);
4438
4439   tree vec = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
4440   for (int i = 0; i < TREE_VEC_LENGTH (vec); ++i)
4441     fixed_parameter_pack_p_1 (TREE_VALUE (TREE_VEC_ELT (vec, i)), ppd);
4442 }
4443
4444 /* PARM is a template parameter pack.  Return any parameter packs used in
4445    its type or the type of any of its template parameters.  If there are
4446    any such packs, it will be instantiated into a fixed template parameter
4447    list by partial instantiation rather than be fully deduced.  */
4448
4449 tree
4450 fixed_parameter_pack_p (tree parm)
4451 {
4452   /* This can only be true in a member template.  */
4453   if (TEMPLATE_PARM_ORIG_LEVEL (get_template_parm_index (parm)) < 2)
4454     return NULL_TREE;
4455   /* This can only be true for a parameter pack.  */
4456   if (!template_parameter_pack_p (parm))
4457     return NULL_TREE;
4458   /* A type parm can't refer to another parm.  */
4459   if (TREE_CODE (parm) == TYPE_DECL)
4460     return NULL_TREE;
4461
4462   tree parameter_packs = NULL_TREE;
4463   struct find_parameter_pack_data ppd;
4464   ppd.parameter_packs = &parameter_packs;
4465   ppd.visited = new hash_set<tree>;
4466
4467   fixed_parameter_pack_p_1 (parm, &ppd);
4468
4469   delete ppd.visited;
4470   return parameter_packs;
4471 }
4472
4473 /* Check that a template declaration's use of default arguments and
4474    parameter packs is not invalid.  Here, PARMS are the template
4475    parameters.  IS_PRIMARY is true if DECL is the thing declared by
4476    a primary template.  IS_PARTIAL is true if DECL is a partial
4477    specialization.
4478
4479    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4480    declaration (but not a definition); 1 indicates a declaration, 2
4481    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4482    emitted for extraneous default arguments.
4483
4484    Returns TRUE if there were no errors found, FALSE otherwise. */
4485
4486 bool
4487 check_default_tmpl_args (tree decl, tree parms, bool is_primary,
4488                          bool is_partial, int is_friend_decl)
4489 {
4490   const char *msg;
4491   int last_level_to_check;
4492   tree parm_level;
4493   bool no_errors = true;
4494
4495   /* [temp.param]
4496
4497      A default template-argument shall not be specified in a
4498      function template declaration or a function template definition, nor
4499      in the template-parameter-list of the definition of a member of a
4500      class template.  */
4501
4502   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
4503       || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
4504     /* You can't have a function template declaration in a local
4505        scope, nor you can you define a member of a class template in a
4506        local scope.  */
4507     return true;
4508
4509   if ((TREE_CODE (decl) == TYPE_DECL
4510        && TREE_TYPE (decl)
4511        && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4512       || (TREE_CODE (decl) == FUNCTION_DECL
4513           && LAMBDA_FUNCTION_P (decl)))
4514     /* A lambda doesn't have an explicit declaration; don't complain
4515        about the parms of the enclosing class.  */
4516     return true;
4517
4518   if (current_class_type
4519       && !TYPE_BEING_DEFINED (current_class_type)
4520       && DECL_LANG_SPECIFIC (decl)
4521       && DECL_DECLARES_FUNCTION_P (decl)
4522       /* If this is either a friend defined in the scope of the class
4523          or a member function.  */
4524       && (DECL_FUNCTION_MEMBER_P (decl)
4525           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4526           : DECL_FRIEND_CONTEXT (decl)
4527           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4528           : false)
4529       /* And, if it was a member function, it really was defined in
4530          the scope of the class.  */
4531       && (!DECL_FUNCTION_MEMBER_P (decl)
4532           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4533     /* We already checked these parameters when the template was
4534        declared, so there's no need to do it again now.  This function
4535        was defined in class scope, but we're processing its body now
4536        that the class is complete.  */
4537     return true;
4538
4539   /* Core issue 226 (C++0x only): the following only applies to class
4540      templates.  */
4541   if (is_primary
4542       && ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL))
4543     {
4544       /* [temp.param]
4545
4546          If a template-parameter has a default template-argument, all
4547          subsequent template-parameters shall have a default
4548          template-argument supplied.  */
4549       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4550         {
4551           tree inner_parms = TREE_VALUE (parm_level);
4552           int ntparms = TREE_VEC_LENGTH (inner_parms);
4553           int seen_def_arg_p = 0;
4554           int i;
4555
4556           for (i = 0; i < ntparms; ++i)
4557             {
4558               tree parm = TREE_VEC_ELT (inner_parms, i);
4559
4560               if (parm == error_mark_node)
4561                 continue;
4562
4563               if (TREE_PURPOSE (parm))
4564                 seen_def_arg_p = 1;
4565               else if (seen_def_arg_p
4566                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4567                 {
4568                   error ("no default argument for %qD", TREE_VALUE (parm));
4569                   /* For better subsequent error-recovery, we indicate that
4570                      there should have been a default argument.  */
4571                   TREE_PURPOSE (parm) = error_mark_node;
4572                   no_errors = false;
4573                 }
4574               else if (!is_partial
4575                        && !is_friend_decl
4576                        /* Don't complain about an enclosing partial
4577                           specialization.  */
4578                        && parm_level == parms
4579                        && TREE_CODE (decl) == TYPE_DECL
4580                        && i < ntparms - 1
4581                        && template_parameter_pack_p (TREE_VALUE (parm))
4582                        /* A fixed parameter pack will be partially
4583                           instantiated into a fixed length list.  */
4584                        && !fixed_parameter_pack_p (TREE_VALUE (parm)))
4585                 {
4586                   /* A primary class template can only have one
4587                      parameter pack, at the end of the template
4588                      parameter list.  */
4589
4590                   error ("parameter pack %q+D must be at the end of the"
4591                          " template parameter list", TREE_VALUE (parm));
4592
4593                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4594                     = error_mark_node;
4595                   no_errors = false;
4596                 }
4597             }
4598         }
4599     }
4600
4601   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4602       || is_partial 
4603       || !is_primary
4604       || is_friend_decl)
4605     /* For an ordinary class template, default template arguments are
4606        allowed at the innermost level, e.g.:
4607          template <class T = int>
4608          struct S {};
4609        but, in a partial specialization, they're not allowed even
4610        there, as we have in [temp.class.spec]:
4611
4612          The template parameter list of a specialization shall not
4613          contain default template argument values.
4614
4615        So, for a partial specialization, or for a function template
4616        (in C++98/C++03), we look at all of them.  */
4617     ;
4618   else
4619     /* But, for a primary class template that is not a partial
4620        specialization we look at all template parameters except the
4621        innermost ones.  */
4622     parms = TREE_CHAIN (parms);
4623
4624   /* Figure out what error message to issue.  */
4625   if (is_friend_decl == 2)
4626     msg = G_("default template arguments may not be used in function template "
4627              "friend re-declaration");
4628   else if (is_friend_decl)
4629     msg = G_("default template arguments may not be used in function template "
4630              "friend declarations");
4631   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4632     msg = G_("default template arguments may not be used in function templates "
4633              "without -std=c++11 or -std=gnu++11");
4634   else if (is_partial)
4635     msg = G_("default template arguments may not be used in "
4636              "partial specializations");
4637   else
4638     msg = G_("default argument for template parameter for class enclosing %qD");
4639
4640   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4641     /* If we're inside a class definition, there's no need to
4642        examine the parameters to the class itself.  On the one
4643        hand, they will be checked when the class is defined, and,
4644        on the other, default arguments are valid in things like:
4645          template <class T = double>
4646          struct S { template <class U> void f(U); };
4647        Here the default argument for `S' has no bearing on the
4648        declaration of `f'.  */
4649     last_level_to_check = template_class_depth (current_class_type) + 1;
4650   else
4651     /* Check everything.  */
4652     last_level_to_check = 0;
4653
4654   for (parm_level = parms;
4655        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4656        parm_level = TREE_CHAIN (parm_level))
4657     {
4658       tree inner_parms = TREE_VALUE (parm_level);
4659       int i;
4660       int ntparms;
4661
4662       ntparms = TREE_VEC_LENGTH (inner_parms);
4663       for (i = 0; i < ntparms; ++i)
4664         {
4665           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4666             continue;
4667
4668           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4669             {
4670               if (msg)
4671                 {
4672                   no_errors = false;
4673                   if (is_friend_decl == 2)
4674                     return no_errors;
4675
4676                   error (msg, decl);
4677                   msg = 0;
4678                 }
4679
4680               /* Clear out the default argument so that we are not
4681                  confused later.  */
4682               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4683             }
4684         }
4685
4686       /* At this point, if we're still interested in issuing messages,
4687          they must apply to classes surrounding the object declared.  */
4688       if (msg)
4689         msg = G_("default argument for template parameter for class "
4690                  "enclosing %qD");
4691     }
4692
4693   return no_errors;
4694 }
4695
4696 /* Worker for push_template_decl_real, called via
4697    for_each_template_parm.  DATA is really an int, indicating the
4698    level of the parameters we are interested in.  If T is a template
4699    parameter of that level, return nonzero.  */
4700
4701 static int
4702 template_parm_this_level_p (tree t, void* data)
4703 {
4704   int this_level = *(int *)data;
4705   int level;
4706
4707   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4708     level = TEMPLATE_PARM_LEVEL (t);
4709   else
4710     level = TEMPLATE_TYPE_LEVEL (t);
4711   return level == this_level;
4712 }
4713
4714 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4715    parameters given by current_template_args, or reuses a
4716    previously existing one, if appropriate.  Returns the DECL, or an
4717    equivalent one, if it is replaced via a call to duplicate_decls.
4718
4719    If IS_FRIEND is true, DECL is a friend declaration.  */
4720
4721 tree
4722 push_template_decl_real (tree decl, bool is_friend)
4723 {
4724   tree tmpl;
4725   tree args;
4726   tree info;
4727   tree ctx;
4728   bool is_primary;
4729   bool is_partial;
4730   int new_template_p = 0;
4731   /* True if the template is a member template, in the sense of
4732      [temp.mem].  */
4733   bool member_template_p = false;
4734
4735   if (decl == error_mark_node || !current_template_parms)
4736     return error_mark_node;
4737
4738   /* See if this is a partial specialization.  */
4739   is_partial = ((DECL_IMPLICIT_TYPEDEF_P (decl)
4740                  && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4741                  && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
4742                 || (TREE_CODE (decl) == VAR_DECL
4743                     && DECL_LANG_SPECIFIC (decl)
4744                     && DECL_TEMPLATE_SPECIALIZATION (decl)
4745                     && TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (decl))));
4746
4747   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4748     is_friend = true;
4749
4750   if (is_friend)
4751     /* For a friend, we want the context of the friend function, not
4752        the type of which it is a friend.  */
4753     ctx = CP_DECL_CONTEXT (decl);
4754   else if (CP_DECL_CONTEXT (decl)
4755            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4756     /* In the case of a virtual function, we want the class in which
4757        it is defined.  */
4758     ctx = CP_DECL_CONTEXT (decl);
4759   else
4760     /* Otherwise, if we're currently defining some class, the DECL
4761        is assumed to be a member of the class.  */
4762     ctx = current_scope ();
4763
4764   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4765     ctx = NULL_TREE;
4766
4767   if (!DECL_CONTEXT (decl))
4768     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4769
4770   /* See if this is a primary template.  */
4771   if (is_friend && ctx
4772       && uses_template_parms_level (ctx, processing_template_decl))
4773     /* A friend template that specifies a class context, i.e.
4774          template <typename T> friend void A<T>::f();
4775        is not primary.  */
4776     is_primary = false;
4777   else if (TREE_CODE (decl) == TYPE_DECL
4778            && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4779     is_primary = false;
4780   else
4781     is_primary = template_parm_scope_p ();
4782
4783   if (is_primary)
4784     {
4785       if (DECL_CLASS_SCOPE_P (decl))
4786         member_template_p = true;
4787       if (TREE_CODE (decl) == TYPE_DECL
4788           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4789         {
4790           error ("template class without a name");
4791           return error_mark_node;
4792         }
4793       else if (TREE_CODE (decl) == FUNCTION_DECL)
4794         {
4795           if (member_template_p)
4796             {
4797               if (DECL_OVERRIDE_P (decl) || DECL_FINAL_P (decl))
4798                 error ("member template %qD may not have virt-specifiers", decl);
4799             }
4800           if (DECL_DESTRUCTOR_P (decl))
4801             {
4802               /* [temp.mem]
4803
4804                  A destructor shall not be a member template.  */
4805               error ("destructor %qD declared as member template", decl);
4806               return error_mark_node;
4807             }
4808           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4809               && (!prototype_p (TREE_TYPE (decl))
4810                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4811                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4812                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4813                       == void_list_node)))
4814             {
4815               /* [basic.stc.dynamic.allocation]
4816
4817                  An allocation function can be a function
4818                  template. ... Template allocation functions shall
4819                  have two or more parameters.  */
4820               error ("invalid template declaration of %qD", decl);
4821               return error_mark_node;
4822             }
4823         }
4824       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4825                && CLASS_TYPE_P (TREE_TYPE (decl)))
4826         /* OK */;
4827       else if (TREE_CODE (decl) == TYPE_DECL
4828                && TYPE_DECL_ALIAS_P (decl))
4829         /* alias-declaration */
4830         gcc_assert (!DECL_ARTIFICIAL (decl));
4831       else if (VAR_P (decl))
4832         /* C++14 variable template. */;
4833       else
4834         {
4835           error ("template declaration of %q#D", decl);
4836           return error_mark_node;
4837         }
4838     }
4839
4840   /* Check to see that the rules regarding the use of default
4841      arguments are not being violated.  */
4842   check_default_tmpl_args (decl, current_template_parms,
4843                            is_primary, is_partial, /*is_friend_decl=*/0);
4844
4845   /* Ensure that there are no parameter packs in the type of this
4846      declaration that have not been expanded.  */
4847   if (TREE_CODE (decl) == FUNCTION_DECL)
4848     {
4849       /* Check each of the arguments individually to see if there are
4850          any bare parameter packs.  */
4851       tree type = TREE_TYPE (decl);
4852       tree arg = DECL_ARGUMENTS (decl);
4853       tree argtype = TYPE_ARG_TYPES (type);
4854
4855       while (arg && argtype)
4856         {
4857           if (!DECL_PACK_P (arg)
4858               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4859             {
4860             /* This is a PARM_DECL that contains unexpanded parameter
4861                packs. We have already complained about this in the
4862                check_for_bare_parameter_packs call, so just replace
4863                these types with ERROR_MARK_NODE.  */
4864               TREE_TYPE (arg) = error_mark_node;
4865               TREE_VALUE (argtype) = error_mark_node;
4866             }
4867
4868           arg = DECL_CHAIN (arg);
4869           argtype = TREE_CHAIN (argtype);
4870         }
4871
4872       /* Check for bare parameter packs in the return type and the
4873          exception specifiers.  */
4874       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4875         /* Errors were already issued, set return type to int
4876            as the frontend doesn't expect error_mark_node as
4877            the return type.  */
4878         TREE_TYPE (type) = integer_type_node;
4879       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4880         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4881     }
4882   else if (check_for_bare_parameter_packs ((TREE_CODE (decl) == TYPE_DECL
4883                                             && TYPE_DECL_ALIAS_P (decl))
4884                                            ? DECL_ORIGINAL_TYPE (decl)
4885                                            : TREE_TYPE (decl)))
4886     {
4887       TREE_TYPE (decl) = error_mark_node;
4888       return error_mark_node;
4889     }
4890
4891   if (is_partial)
4892     return process_partial_specialization (decl);
4893
4894   args = current_template_args ();
4895
4896   if (!ctx
4897       || TREE_CODE (ctx) == FUNCTION_DECL
4898       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4899       || (TREE_CODE (decl) == TYPE_DECL
4900           && LAMBDA_TYPE_P (TREE_TYPE (decl)))
4901       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4902     {
4903       if (DECL_LANG_SPECIFIC (decl)
4904           && DECL_TEMPLATE_INFO (decl)
4905           && DECL_TI_TEMPLATE (decl))
4906         tmpl = DECL_TI_TEMPLATE (decl);
4907       /* If DECL is a TYPE_DECL for a class-template, then there won't
4908          be DECL_LANG_SPECIFIC.  The information equivalent to
4909          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4910       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4911                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4912                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4913         {
4914           /* Since a template declaration already existed for this
4915              class-type, we must be redeclaring it here.  Make sure
4916              that the redeclaration is valid.  */
4917           redeclare_class_template (TREE_TYPE (decl),
4918                                     current_template_parms);
4919           /* We don't need to create a new TEMPLATE_DECL; just use the
4920              one we already had.  */
4921           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4922         }
4923       else
4924         {
4925           tmpl = build_template_decl (decl, current_template_parms,
4926                                       member_template_p);
4927           new_template_p = 1;
4928
4929           if (DECL_LANG_SPECIFIC (decl)
4930               && DECL_TEMPLATE_SPECIALIZATION (decl))
4931             {
4932               /* A specialization of a member template of a template
4933                  class.  */
4934               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4935               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4936               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4937             }
4938         }
4939     }
4940   else
4941     {
4942       tree a, t, current, parms;
4943       int i;
4944       tree tinfo = get_template_info (decl);
4945
4946       if (!tinfo)
4947         {
4948           error ("template definition of non-template %q#D", decl);
4949           return error_mark_node;
4950         }
4951
4952       tmpl = TI_TEMPLATE (tinfo);
4953
4954       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4955           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4956           && DECL_TEMPLATE_SPECIALIZATION (decl)
4957           && DECL_MEMBER_TEMPLATE_P (tmpl))
4958         {
4959           tree new_tmpl;
4960
4961           /* The declaration is a specialization of a member
4962              template, declared outside the class.  Therefore, the
4963              innermost template arguments will be NULL, so we
4964              replace them with the arguments determined by the
4965              earlier call to check_explicit_specialization.  */
4966           args = DECL_TI_ARGS (decl);
4967
4968           new_tmpl
4969             = build_template_decl (decl, current_template_parms,
4970                                    member_template_p);
4971           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4972           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4973           DECL_TI_TEMPLATE (decl) = new_tmpl;
4974           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4975           DECL_TEMPLATE_INFO (new_tmpl)
4976             = build_template_info (tmpl, args);
4977
4978           register_specialization (new_tmpl,
4979                                    most_general_template (tmpl),
4980                                    args,
4981                                    is_friend, 0);
4982           return decl;
4983         }
4984
4985       /* Make sure the template headers we got make sense.  */
4986
4987       parms = DECL_TEMPLATE_PARMS (tmpl);
4988       i = TMPL_PARMS_DEPTH (parms);
4989       if (TMPL_ARGS_DEPTH (args) != i)
4990         {
4991           error ("expected %d levels of template parms for %q#D, got %d",
4992                  i, decl, TMPL_ARGS_DEPTH (args));
4993           DECL_INTERFACE_KNOWN (decl) = 1;
4994           return error_mark_node;
4995         }
4996       else
4997         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4998           {
4999             a = TMPL_ARGS_LEVEL (args, i);
5000             t = INNERMOST_TEMPLATE_PARMS (parms);
5001
5002             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
5003               {
5004                 if (current == decl)
5005                   error ("got %d template parameters for %q#D",
5006                          TREE_VEC_LENGTH (a), decl);
5007                 else
5008                   error ("got %d template parameters for %q#T",
5009                          TREE_VEC_LENGTH (a), current);
5010                 error ("  but %d required", TREE_VEC_LENGTH (t));
5011                 /* Avoid crash in import_export_decl.  */
5012                 DECL_INTERFACE_KNOWN (decl) = 1;
5013                 return error_mark_node;
5014               }
5015
5016             if (current == decl)
5017               current = ctx;
5018             else if (current == NULL_TREE)
5019               /* Can happen in erroneous input.  */
5020               break;
5021             else
5022               current = get_containing_scope (current);
5023           }
5024
5025       /* Check that the parms are used in the appropriate qualifying scopes
5026          in the declarator.  */
5027       if (!comp_template_args
5028           (TI_ARGS (tinfo),
5029            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
5030         {
5031           error ("\
5032 template arguments to %qD do not match original template %qD",
5033                  decl, DECL_TEMPLATE_RESULT (tmpl));
5034           if (!uses_template_parms (TI_ARGS (tinfo)))
5035             inform (input_location, "use template<> for an explicit specialization");
5036           /* Avoid crash in import_export_decl.  */
5037           DECL_INTERFACE_KNOWN (decl) = 1;
5038           return error_mark_node;
5039         }
5040     }
5041
5042   DECL_TEMPLATE_RESULT (tmpl) = decl;
5043   TREE_TYPE (tmpl) = TREE_TYPE (decl);
5044
5045   /* Push template declarations for global functions and types.  Note
5046      that we do not try to push a global template friend declared in a
5047      template class; such a thing may well depend on the template
5048      parameters of the class.  */
5049   if (new_template_p && !ctx
5050       && !(is_friend && template_class_depth (current_class_type) > 0))
5051     {
5052       tmpl = pushdecl_namespace_level (tmpl, is_friend);
5053       if (tmpl == error_mark_node)
5054         return error_mark_node;
5055
5056       /* Hide template friend classes that haven't been declared yet.  */
5057       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
5058         {
5059           DECL_ANTICIPATED (tmpl) = 1;
5060           DECL_FRIEND_P (tmpl) = 1;
5061         }
5062     }
5063
5064   if (is_primary)
5065     {
5066       tree parms = DECL_TEMPLATE_PARMS (tmpl);
5067       int i;
5068
5069       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5070       if (DECL_CONV_FN_P (tmpl))
5071         {
5072           int depth = TMPL_PARMS_DEPTH (parms);
5073
5074           /* It is a conversion operator. See if the type converted to
5075              depends on innermost template operands.  */
5076
5077           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5078                                          depth))
5079             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5080         }
5081
5082       /* Give template template parms a DECL_CONTEXT of the template
5083          for which they are a parameter.  */
5084       parms = INNERMOST_TEMPLATE_PARMS (parms);
5085       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5086         {
5087           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5088           if (TREE_CODE (parm) == TEMPLATE_DECL)
5089             DECL_CONTEXT (parm) = tmpl;
5090         }
5091     }
5092
5093   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5094      back to its most general template.  If TMPL is a specialization,
5095      ARGS may only have the innermost set of arguments.  Add the missing
5096      argument levels if necessary.  */
5097   if (DECL_TEMPLATE_INFO (tmpl))
5098     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5099
5100   info = build_template_info (tmpl, args);
5101
5102   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5103     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5104   else
5105     {
5106       if (is_primary && !DECL_LANG_SPECIFIC (decl))
5107         retrofit_lang_decl (decl);
5108       if (DECL_LANG_SPECIFIC (decl))
5109         DECL_TEMPLATE_INFO (decl) = info;
5110     }
5111
5112   if (flag_implicit_templates
5113       && !is_friend
5114       && TREE_PUBLIC (decl)
5115       && VAR_OR_FUNCTION_DECL_P (decl))
5116     /* Set DECL_COMDAT on template instantiations; if we force
5117        them to be emitted by explicit instantiation or -frepo,
5118        mark_needed will tell cgraph to do the right thing.  */
5119     DECL_COMDAT (decl) = true;
5120
5121   return DECL_TEMPLATE_RESULT (tmpl);
5122 }
5123
5124 tree
5125 push_template_decl (tree decl)
5126 {
5127   return push_template_decl_real (decl, false);
5128 }
5129
5130 /* FN is an inheriting constructor that inherits from the constructor
5131    template INHERITED; turn FN into a constructor template with a matching
5132    template header.  */
5133
5134 tree
5135 add_inherited_template_parms (tree fn, tree inherited)
5136 {
5137   tree inner_parms
5138     = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (inherited));
5139   inner_parms = copy_node (inner_parms);
5140   tree parms
5141     = tree_cons (size_int (processing_template_decl + 1),
5142                  inner_parms, current_template_parms);
5143   tree tmpl = build_template_decl (fn, parms, /*member*/true);
5144   tree args = template_parms_to_args (parms);
5145   DECL_TEMPLATE_INFO (fn) = build_template_info (tmpl, args);
5146   TREE_TYPE (tmpl) = TREE_TYPE (fn);
5147   DECL_TEMPLATE_RESULT (tmpl) = fn;
5148   DECL_ARTIFICIAL (tmpl) = true;
5149   DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
5150   return tmpl;
5151 }
5152
5153 /* Called when a class template TYPE is redeclared with the indicated
5154    template PARMS, e.g.:
5155
5156      template <class T> struct S;
5157      template <class T> struct S {};  */
5158
5159 bool
5160 redeclare_class_template (tree type, tree parms)
5161 {
5162   tree tmpl;
5163   tree tmpl_parms;
5164   int i;
5165
5166   if (!TYPE_TEMPLATE_INFO (type))
5167     {
5168       error ("%qT is not a template type", type);
5169       return false;
5170     }
5171
5172   tmpl = TYPE_TI_TEMPLATE (type);
5173   if (!PRIMARY_TEMPLATE_P (tmpl))
5174     /* The type is nested in some template class.  Nothing to worry
5175        about here; there are no new template parameters for the nested
5176        type.  */
5177     return true;
5178
5179   if (!parms)
5180     {
5181       error ("template specifiers not specified in declaration of %qD",
5182              tmpl);
5183       return false;
5184     }
5185
5186   parms = INNERMOST_TEMPLATE_PARMS (parms);
5187   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5188
5189   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5190     {
5191       error_n (input_location, TREE_VEC_LENGTH (parms),
5192                "redeclared with %d template parameter",
5193                "redeclared with %d template parameters",
5194                TREE_VEC_LENGTH (parms));
5195       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5196                 "previous declaration %q+D used %d template parameter",
5197                 "previous declaration %q+D used %d template parameters",
5198                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5199       return false;
5200     }
5201
5202   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5203     {
5204       tree tmpl_parm;
5205       tree parm;
5206       tree tmpl_default;
5207       tree parm_default;
5208
5209       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5210           || TREE_VEC_ELT (parms, i) == error_mark_node)
5211         continue;
5212
5213       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5214       if (error_operand_p (tmpl_parm))
5215         return false;
5216
5217       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5218       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5219       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5220
5221       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5222          TEMPLATE_DECL.  */
5223       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5224           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5225               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5226           || (TREE_CODE (tmpl_parm) != PARM_DECL
5227               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5228                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5229           || (TREE_CODE (tmpl_parm) == PARM_DECL
5230               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5231                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5232         {
5233           error ("template parameter %q+#D", tmpl_parm);
5234           error ("redeclared here as %q#D", parm);
5235           return false;
5236         }
5237
5238       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5239         {
5240           /* We have in [temp.param]:
5241
5242              A template-parameter may not be given default arguments
5243              by two different declarations in the same scope.  */
5244           error_at (input_location, "redefinition of default argument for %q#D", parm);
5245           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5246                   "original definition appeared here");
5247           return false;
5248         }
5249
5250       if (parm_default != NULL_TREE)
5251         /* Update the previous template parameters (which are the ones
5252            that will really count) with the new default value.  */
5253         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5254       else if (tmpl_default != NULL_TREE)
5255         /* Update the new parameters, too; they'll be used as the
5256            parameters for any members.  */
5257         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5258     }
5259
5260     return true;
5261 }
5262
5263 /* The actual substitution part of instantiate_non_dependent_expr_sfinae,
5264    to be used when the caller has already checked
5265    (processing_template_decl
5266     && !instantiation_dependent_expression_p (expr)
5267     && potential_constant_expression (expr))
5268    and cleared processing_template_decl.  */
5269
5270 tree
5271 instantiate_non_dependent_expr_internal (tree expr, tsubst_flags_t complain)
5272 {
5273   return tsubst_copy_and_build (expr,
5274                                 /*args=*/NULL_TREE,
5275                                 complain,
5276                                 /*in_decl=*/NULL_TREE,
5277                                 /*function_p=*/false,
5278                                 /*integral_constant_expression_p=*/true);
5279 }
5280
5281 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5282    (possibly simplified) expression.  */
5283
5284 tree
5285 instantiate_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5286 {
5287   if (expr == NULL_TREE)
5288     return NULL_TREE;
5289
5290   /* If we're in a template, but EXPR isn't value dependent, simplify
5291      it.  We're supposed to treat:
5292
5293        template <typename T> void f(T[1 + 1]);
5294        template <typename T> void f(T[2]);
5295
5296      as two declarations of the same function, for example.  */
5297   if (processing_template_decl
5298       && !instantiation_dependent_expression_p (expr)
5299       && potential_constant_expression (expr))
5300     {
5301       processing_template_decl_sentinel s;
5302       expr = instantiate_non_dependent_expr_internal (expr, complain);
5303     }
5304   return expr;
5305 }
5306
5307 tree
5308 instantiate_non_dependent_expr (tree expr)
5309 {
5310   return instantiate_non_dependent_expr_sfinae (expr, tf_error);
5311 }
5312
5313 /* Return TRUE iff T is a type alias, a TEMPLATE_DECL for an alias
5314    template declaration, or a TYPE_DECL for an alias declaration.  */
5315
5316 bool
5317 alias_type_or_template_p (tree t)
5318 {
5319   if (t == NULL_TREE)
5320     return false;
5321   return ((TREE_CODE (t) == TYPE_DECL && TYPE_DECL_ALIAS_P (t))
5322           || (TYPE_P (t)
5323               && TYPE_NAME (t)
5324               && TYPE_DECL_ALIAS_P (TYPE_NAME (t)))
5325           || DECL_ALIAS_TEMPLATE_P (t));
5326 }
5327
5328 /* Return TRUE iff T is a specialization of an alias template.  */
5329
5330 bool
5331 alias_template_specialization_p (const_tree t)
5332 {
5333   /* It's an alias template specialization if it's an alias and its
5334      TYPE_NAME is a specialization of a primary template.  */
5335   if (TYPE_ALIAS_P (t))
5336     {
5337       tree name = TYPE_NAME (t);
5338       if (DECL_LANG_SPECIFIC (name))
5339         if (tree ti = DECL_TEMPLATE_INFO (name))
5340           {
5341             tree tmpl = TI_TEMPLATE (ti);
5342             return PRIMARY_TEMPLATE_P (tmpl);
5343           }
5344     }
5345   return false;
5346 }
5347
5348 /* Return TRUE iff T is a specialization of an alias template with
5349    dependent template-arguments.  */
5350
5351 bool
5352 dependent_alias_template_spec_p (const_tree t)
5353 {
5354   return (alias_template_specialization_p (t)
5355           && (any_dependent_template_arguments_p
5356               (INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (t)))));
5357 }
5358
5359 /* Return the number of innermost template parameters in TMPL.  */
5360
5361 static int
5362 num_innermost_template_parms (tree tmpl)
5363 {
5364   tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
5365   return TREE_VEC_LENGTH (parms);
5366 }
5367
5368 /* Return either TMPL or another template that it is equivalent to under DR
5369    1286: An alias that just changes the name of a template is equivalent to
5370    the other template.  */
5371
5372 static tree
5373 get_underlying_template (tree tmpl)
5374 {
5375   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
5376   while (DECL_ALIAS_TEMPLATE_P (tmpl))
5377     {
5378       tree result = DECL_ORIGINAL_TYPE (DECL_TEMPLATE_RESULT (tmpl));
5379       if (TYPE_TEMPLATE_INFO (result))
5380         {
5381           tree sub = TYPE_TI_TEMPLATE (result);
5382           if (PRIMARY_TEMPLATE_P (sub)
5383               && (num_innermost_template_parms (tmpl)
5384                   == num_innermost_template_parms (sub)))
5385             {
5386               tree alias_args = INNERMOST_TEMPLATE_ARGS
5387                 (template_parms_to_args (DECL_TEMPLATE_PARMS (tmpl)));
5388               if (!comp_template_args (TYPE_TI_ARGS (result), alias_args))
5389                 break;
5390               /* The alias type is equivalent to the pattern of the
5391                  underlying template, so strip the alias.  */
5392               tmpl = sub;
5393               continue;
5394             }
5395         }
5396       break;
5397     }
5398   return tmpl;
5399 }
5400
5401 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5402    must be a function or a pointer-to-function type, as specified
5403    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5404    and check that the resulting function has external linkage.  */
5405
5406 static tree
5407 convert_nontype_argument_function (tree type, tree expr,
5408                                    tsubst_flags_t complain)
5409 {
5410   tree fns = expr;
5411   tree fn, fn_no_ptr;
5412   linkage_kind linkage;
5413
5414   fn = instantiate_type (type, fns, tf_none);
5415   if (fn == error_mark_node)
5416     return error_mark_node;
5417
5418   fn_no_ptr = fn;
5419   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5420     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5421   if (BASELINK_P (fn_no_ptr))
5422     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5423  
5424   /* [temp.arg.nontype]/1
5425
5426      A template-argument for a non-type, non-template template-parameter
5427      shall be one of:
5428      [...]
5429      -- the address of an object or function with external [C++11: or
5430         internal] linkage.  */
5431
5432   if (TREE_CODE (fn_no_ptr) != FUNCTION_DECL)
5433     {
5434       if (complain & tf_error)
5435         {
5436           error ("%qE is not a valid template argument for type %qT",
5437                  expr, type);
5438           if (TYPE_PTR_P (type))
5439             error ("it must be the address of a function with "
5440                    "external linkage");
5441           else
5442             error ("it must be the name of a function with "
5443                    "external linkage");
5444         }
5445       return NULL_TREE;
5446     }
5447
5448   linkage = decl_linkage (fn_no_ptr);
5449   if (cxx_dialect >= cxx11 ? linkage == lk_none : linkage != lk_external)
5450     {
5451       if (complain & tf_error)
5452         {
5453           if (cxx_dialect >= cxx11)
5454             error ("%qE is not a valid template argument for type %qT "
5455                    "because %qD has no linkage",
5456                    expr, type, fn_no_ptr);
5457           else
5458             error ("%qE is not a valid template argument for type %qT "
5459                    "because %qD does not have external linkage",
5460                    expr, type, fn_no_ptr);
5461         }
5462       return NULL_TREE;
5463     }
5464
5465   return fn;
5466 }
5467
5468 /* Subroutine of convert_nontype_argument.
5469    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5470    Emit an error otherwise.  */
5471
5472 static bool
5473 check_valid_ptrmem_cst_expr (tree type, tree expr,
5474                              tsubst_flags_t complain)
5475 {
5476   STRIP_NOPS (expr);
5477   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5478     return true;
5479   if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
5480     return true;
5481   if (processing_template_decl
5482       && TREE_CODE (expr) == ADDR_EXPR
5483       && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
5484     return true;
5485   if (complain & tf_error)
5486     {
5487       error ("%qE is not a valid template argument for type %qT",
5488              expr, type);
5489       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5490     }
5491   return false;
5492 }
5493
5494 /* Returns TRUE iff the address of OP is value-dependent.
5495
5496    14.6.2.4 [temp.dep.temp]:
5497    A non-integral non-type template-argument is dependent if its type is
5498    dependent or it has either of the following forms
5499      qualified-id
5500      & qualified-id
5501    and contains a nested-name-specifier which specifies a class-name that
5502    names a dependent type.
5503
5504    We generalize this to just say that the address of a member of a
5505    dependent class is value-dependent; the above doesn't cover the
5506    address of a static data member named with an unqualified-id.  */
5507
5508 static bool
5509 has_value_dependent_address (tree op)
5510 {
5511   /* We could use get_inner_reference here, but there's no need;
5512      this is only relevant for template non-type arguments, which
5513      can only be expressed as &id-expression.  */
5514   if (DECL_P (op))
5515     {
5516       tree ctx = CP_DECL_CONTEXT (op);
5517       if (TYPE_P (ctx) && dependent_type_p (ctx))
5518         return true;
5519     }
5520
5521   return false;
5522 }
5523
5524 /* The next set of functions are used for providing helpful explanatory
5525    diagnostics for failed overload resolution.  Their messages should be
5526    indented by two spaces for consistency with the messages in
5527    call.c  */
5528
5529 static int
5530 unify_success (bool /*explain_p*/)
5531 {
5532   return 0;
5533 }
5534
5535 static int
5536 unify_parameter_deduction_failure (bool explain_p, tree parm)
5537 {
5538   if (explain_p)
5539     inform (input_location,
5540             "  couldn't deduce template parameter %qD", parm);
5541   return 1;
5542 }
5543
5544 static int
5545 unify_invalid (bool /*explain_p*/)
5546 {
5547   return 1;
5548 }
5549
5550 static int
5551 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5552 {
5553   if (explain_p)
5554     inform (input_location,
5555             "  types %qT and %qT have incompatible cv-qualifiers",
5556             parm, arg);
5557   return 1;
5558 }
5559
5560 static int
5561 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5562 {
5563   if (explain_p)
5564     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5565   return 1;
5566 }
5567
5568 static int
5569 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5570 {
5571   if (explain_p)
5572     inform (input_location,
5573             "  template parameter %qD is not a parameter pack, but "
5574             "argument %qD is",
5575             parm, arg);
5576   return 1;
5577 }
5578
5579 static int
5580 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5581 {
5582   if (explain_p)
5583     inform (input_location,
5584             "  template argument %qE does not match "
5585             "pointer-to-member constant %qE",
5586             arg, parm);
5587   return 1;
5588 }
5589
5590 static int
5591 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5592 {
5593   if (explain_p)
5594     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5595   return 1;
5596 }
5597
5598 static int
5599 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5600 {
5601   if (explain_p)
5602     inform (input_location,
5603             "  inconsistent parameter pack deduction with %qT and %qT",
5604             old_arg, new_arg);
5605   return 1;
5606 }
5607
5608 static int
5609 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5610 {
5611   if (explain_p)
5612     {
5613       if (TYPE_P (parm))
5614         inform (input_location,
5615                 "  deduced conflicting types for parameter %qT (%qT and %qT)",
5616                 parm, first, second);
5617       else
5618         inform (input_location,
5619                 "  deduced conflicting values for non-type parameter "
5620                 "%qE (%qE and %qE)", parm, first, second);
5621     }
5622   return 1;
5623 }
5624
5625 static int
5626 unify_vla_arg (bool explain_p, tree arg)
5627 {
5628   if (explain_p)
5629     inform (input_location,
5630             "  variable-sized array type %qT is not "
5631             "a valid template argument",
5632             arg);
5633   return 1;
5634 }
5635
5636 static int
5637 unify_method_type_error (bool explain_p, tree arg)
5638 {
5639   if (explain_p)
5640     inform (input_location,
5641             "  member function type %qT is not a valid template argument",
5642             arg);
5643   return 1;
5644 }
5645
5646 static int
5647 unify_arity (bool explain_p, int have, int wanted, bool least_p = false)
5648 {
5649   if (explain_p)
5650     {
5651       if (least_p)
5652         inform_n (input_location, wanted,
5653                   "  candidate expects at least %d argument, %d provided",
5654                   "  candidate expects at least %d arguments, %d provided",
5655                   wanted, have);
5656       else
5657         inform_n (input_location, wanted,
5658                   "  candidate expects %d argument, %d provided",
5659                   "  candidate expects %d arguments, %d provided",
5660                   wanted, have);
5661     }
5662   return 1;
5663 }
5664
5665 static int
5666 unify_too_many_arguments (bool explain_p, int have, int wanted)
5667 {
5668   return unify_arity (explain_p, have, wanted);
5669 }
5670
5671 static int
5672 unify_too_few_arguments (bool explain_p, int have, int wanted,
5673                          bool least_p = false)
5674 {
5675   return unify_arity (explain_p, have, wanted, least_p);
5676 }
5677
5678 static int
5679 unify_arg_conversion (bool explain_p, tree to_type,
5680                       tree from_type, tree arg)
5681 {
5682   if (explain_p)
5683     inform (EXPR_LOC_OR_LOC (arg, input_location),
5684             "  cannot convert %qE (type %qT) to type %qT",
5685             arg, from_type, to_type);
5686   return 1;
5687 }
5688
5689 static int
5690 unify_no_common_base (bool explain_p, enum template_base_result r,
5691                       tree parm, tree arg)
5692 {
5693   if (explain_p)
5694     switch (r)
5695       {
5696       case tbr_ambiguous_baseclass:
5697         inform (input_location, "  %qT is an ambiguous base class of %qT",
5698                 parm, arg);
5699         break;
5700       default:
5701         inform (input_location, "  %qT is not derived from %qT", arg, parm);
5702         break;
5703       }
5704   return 1;
5705 }
5706
5707 static int
5708 unify_inconsistent_template_template_parameters (bool explain_p)
5709 {
5710   if (explain_p)
5711     inform (input_location,
5712             "  template parameters of a template template argument are "
5713             "inconsistent with other deduced template arguments");
5714   return 1;
5715 }
5716
5717 static int
5718 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5719 {
5720   if (explain_p)
5721     inform (input_location,
5722             "  can't deduce a template for %qT from non-template type %qT",
5723             parm, arg);
5724   return 1;
5725 }
5726
5727 static int
5728 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5729 {
5730   if (explain_p)
5731     inform (input_location,
5732             "  template argument %qE does not match %qD", arg, parm);
5733   return 1;
5734 }
5735
5736 static int
5737 unify_overload_resolution_failure (bool explain_p, tree arg)
5738 {
5739   if (explain_p)
5740     inform (input_location,
5741             "  could not resolve address from overloaded function %qE",
5742             arg);
5743   return 1;
5744 }
5745
5746 /* Attempt to convert the non-type template parameter EXPR to the
5747    indicated TYPE.  If the conversion is successful, return the
5748    converted value.  If the conversion is unsuccessful, return
5749    NULL_TREE if we issued an error message, or error_mark_node if we
5750    did not.  We issue error messages for out-and-out bad template
5751    parameters, but not simply because the conversion failed, since we
5752    might be just trying to do argument deduction.  Both TYPE and EXPR
5753    must be non-dependent.
5754
5755    The conversion follows the special rules described in
5756    [temp.arg.nontype], and it is much more strict than an implicit
5757    conversion.
5758
5759    This function is called twice for each template argument (see
5760    lookup_template_class for a more accurate description of this
5761    problem). This means that we need to handle expressions which
5762    are not valid in a C++ source, but can be created from the
5763    first call (for instance, casts to perform conversions). These
5764    hacks can go away after we fix the double coercion problem.  */
5765
5766 static tree
5767 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5768 {
5769   tree expr_type;
5770
5771   /* Detect immediately string literals as invalid non-type argument.
5772      This special-case is not needed for correctness (we would easily
5773      catch this later), but only to provide better diagnostic for this
5774      common user mistake. As suggested by DR 100, we do not mention
5775      linkage issues in the diagnostic as this is not the point.  */
5776   /* FIXME we're making this OK.  */
5777   if (TREE_CODE (expr) == STRING_CST)
5778     {
5779       if (complain & tf_error)
5780         error ("%qE is not a valid template argument for type %qT "
5781                "because string literals can never be used in this context",
5782                expr, type);
5783       return NULL_TREE;
5784     }
5785
5786   /* Add the ADDR_EXPR now for the benefit of
5787      value_dependent_expression_p.  */
5788   if (TYPE_PTROBV_P (type)
5789       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5790     {
5791       expr = decay_conversion (expr, complain);
5792       if (expr == error_mark_node)
5793         return error_mark_node;
5794     }
5795
5796   /* If we are in a template, EXPR may be non-dependent, but still
5797      have a syntactic, rather than semantic, form.  For example, EXPR
5798      might be a SCOPE_REF, rather than the VAR_DECL to which the
5799      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5800      so that access checking can be performed when the template is
5801      instantiated -- but here we need the resolved form so that we can
5802      convert the argument.  */
5803   bool non_dep = false;
5804   if (TYPE_REF_OBJ_P (type)
5805       && has_value_dependent_address (expr))
5806     /* If we want the address and it's value-dependent, don't fold.  */;
5807   else if (!type_unknown_p (expr)
5808            && processing_template_decl
5809            && !instantiation_dependent_expression_p (expr)
5810            && potential_constant_expression (expr))
5811     non_dep = true;
5812   if (error_operand_p (expr))
5813     return error_mark_node;
5814   expr_type = TREE_TYPE (expr);
5815   if (TREE_CODE (type) == REFERENCE_TYPE)
5816     expr = mark_lvalue_use (expr);
5817   else
5818     expr = mark_rvalue_use (expr);
5819
5820   /* If the argument is non-dependent, perform any conversions in
5821      non-dependent context as well.  */
5822   processing_template_decl_sentinel s (non_dep);
5823   if (non_dep)
5824     expr = instantiate_non_dependent_expr_internal (expr, complain);
5825
5826   /* 14.3.2/5: The null pointer{,-to-member} conversion is applied
5827      to a non-type argument of "nullptr".  */
5828   if (expr == nullptr_node && TYPE_PTR_OR_PTRMEM_P (type))
5829     expr = convert (type, expr);
5830
5831   /* In C++11, integral or enumeration non-type template arguments can be
5832      arbitrary constant expressions.  Pointer and pointer to
5833      member arguments can be general constant expressions that evaluate
5834      to a null value, but otherwise still need to be of a specific form.  */
5835   if (cxx_dialect >= cxx11)
5836     {
5837       if (TREE_CODE (expr) == PTRMEM_CST)
5838         /* A PTRMEM_CST is already constant, and a valid template
5839            argument for a parameter of pointer to member type, we just want
5840            to leave it in that form rather than lower it to a
5841            CONSTRUCTOR.  */;
5842       else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5843         expr = maybe_constant_value (expr);
5844       else if (TYPE_PTR_OR_PTRMEM_P (type))
5845         {
5846           tree folded = maybe_constant_value (expr);
5847           if (TYPE_PTR_P (type) ? integer_zerop (folded)
5848               : null_member_pointer_value_p (folded))
5849             expr = folded;
5850         }
5851     }
5852
5853   /* HACK: Due to double coercion, we can get a
5854      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5855      which is the tree that we built on the first call (see
5856      below when coercing to reference to object or to reference to
5857      function). We just strip everything and get to the arg.
5858      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5859      for examples.  */
5860   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5861     {
5862       tree probe_type, probe = expr;
5863       if (REFERENCE_REF_P (probe))
5864         probe = TREE_OPERAND (probe, 0);
5865       probe_type = TREE_TYPE (probe);
5866       if (TREE_CODE (probe) == NOP_EXPR)
5867         {
5868           /* ??? Maybe we could use convert_from_reference here, but we
5869              would need to relax its constraints because the NOP_EXPR
5870              could actually change the type to something more cv-qualified,
5871              and this is not folded by convert_from_reference.  */
5872           tree addr = TREE_OPERAND (probe, 0);
5873           if (TREE_CODE (probe_type) == REFERENCE_TYPE
5874               && TREE_CODE (addr) == ADDR_EXPR
5875               && TYPE_PTR_P (TREE_TYPE (addr))
5876               && (same_type_ignoring_top_level_qualifiers_p
5877                   (TREE_TYPE (probe_type),
5878                    TREE_TYPE (TREE_TYPE (addr)))))
5879             {
5880               expr = TREE_OPERAND (addr, 0);
5881               expr_type = TREE_TYPE (probe_type);
5882             }
5883         }
5884     }
5885
5886   /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5887      parameter is a pointer to object, through decay and
5888      qualification conversion. Let's strip everything.  */
5889   else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5890     {
5891       tree probe = expr;
5892       STRIP_NOPS (probe);
5893       if (TREE_CODE (probe) == ADDR_EXPR
5894           && TYPE_PTR_P (TREE_TYPE (probe)))
5895         {
5896           /* Skip the ADDR_EXPR only if it is part of the decay for
5897              an array. Otherwise, it is part of the original argument
5898              in the source code.  */
5899           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (probe, 0))) == ARRAY_TYPE)
5900             probe = TREE_OPERAND (probe, 0);
5901           expr = probe;
5902           expr_type = TREE_TYPE (expr);
5903         }
5904     }
5905
5906   /* [temp.arg.nontype]/5, bullet 1
5907
5908      For a non-type template-parameter of integral or enumeration type,
5909      integral promotions (_conv.prom_) and integral conversions
5910      (_conv.integral_) are applied.  */
5911   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5912     {
5913       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5914       t = maybe_constant_value (t);
5915       if (t != error_mark_node)
5916         expr = t;
5917
5918       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5919         return error_mark_node;
5920
5921       /* Notice that there are constant expressions like '4 % 0' which
5922          do not fold into integer constants.  */
5923       if (TREE_CODE (expr) != INTEGER_CST)
5924         {
5925           if (complain & tf_error)
5926             {
5927               int errs = errorcount, warns = warningcount + werrorcount;
5928               if (processing_template_decl
5929                   && !require_potential_constant_expression (expr))
5930                 return NULL_TREE;
5931               expr = cxx_constant_value (expr);
5932               if (errorcount > errs || warningcount + werrorcount > warns)
5933                 inform (EXPR_LOC_OR_LOC (expr, input_location),
5934                         "in template argument for type %qT ", type);
5935               if (expr == error_mark_node)
5936                 return NULL_TREE;
5937               /* else cxx_constant_value complained but gave us
5938                  a real constant, so go ahead.  */
5939               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5940             }
5941           else
5942             return NULL_TREE;
5943         }
5944
5945       /* Avoid typedef problems.  */
5946       if (TREE_TYPE (expr) != type)
5947         expr = fold_convert (type, expr);
5948     }
5949   /* [temp.arg.nontype]/5, bullet 2
5950
5951      For a non-type template-parameter of type pointer to object,
5952      qualification conversions (_conv.qual_) and the array-to-pointer
5953      conversion (_conv.array_) are applied.  */
5954   else if (TYPE_PTROBV_P (type))
5955     {
5956       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5957
5958          A template-argument for a non-type, non-template template-parameter
5959          shall be one of: [...]
5960
5961          -- the name of a non-type template-parameter;
5962          -- the address of an object or function with external linkage, [...]
5963             expressed as "& id-expression" where the & is optional if the name
5964             refers to a function or array, or if the corresponding
5965             template-parameter is a reference.
5966
5967         Here, we do not care about functions, as they are invalid anyway
5968         for a parameter of type pointer-to-object.  */
5969
5970       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5971         /* Non-type template parameters are OK.  */
5972         ;
5973       else if (cxx_dialect >= cxx11 && integer_zerop (expr))
5974         /* Null pointer values are OK in C++11.  */;
5975       else if (TREE_CODE (expr) != ADDR_EXPR
5976                && TREE_CODE (expr_type) != ARRAY_TYPE)
5977         {
5978           if (VAR_P (expr))
5979             {
5980               if (complain & tf_error)
5981                 error ("%qD is not a valid template argument "
5982                        "because %qD is a variable, not the address of "
5983                        "a variable", expr, expr);
5984               return NULL_TREE;
5985             }
5986           if (POINTER_TYPE_P (expr_type))
5987             {
5988               if (complain & tf_error)
5989                 error ("%qE is not a valid template argument for %qT "
5990                        "because it is not the address of a variable",
5991                        expr, type);
5992               return NULL_TREE;
5993             }
5994           /* Other values, like integer constants, might be valid
5995              non-type arguments of some other type.  */
5996           return error_mark_node;
5997         }
5998       else
5999         {
6000           tree decl;
6001
6002           decl = ((TREE_CODE (expr) == ADDR_EXPR)
6003                   ? TREE_OPERAND (expr, 0) : expr);
6004           if (!VAR_P (decl))
6005             {
6006               if (complain & tf_error)
6007                 error ("%qE is not a valid template argument of type %qT "
6008                        "because %qE is not a variable", expr, type, decl);
6009               return NULL_TREE;
6010             }
6011           else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
6012             {
6013               if (complain & tf_error)
6014                 error ("%qE is not a valid template argument of type %qT "
6015                        "because %qD does not have external linkage",
6016                        expr, type, decl);
6017               return NULL_TREE;
6018             }
6019           else if (cxx_dialect >= cxx11 && decl_linkage (decl) == lk_none)
6020             {
6021               if (complain & tf_error)
6022                 error ("%qE is not a valid template argument of type %qT "
6023                        "because %qD has no linkage", expr, type, decl);
6024               return NULL_TREE;
6025             }
6026         }
6027
6028       expr = decay_conversion (expr, complain);
6029       if (expr == error_mark_node)
6030         return error_mark_node;
6031
6032       expr = perform_qualification_conversions (type, expr);
6033       if (expr == error_mark_node)
6034         return error_mark_node;
6035     }
6036   /* [temp.arg.nontype]/5, bullet 3
6037
6038      For a non-type template-parameter of type reference to object, no
6039      conversions apply. The type referred to by the reference may be more
6040      cv-qualified than the (otherwise identical) type of the
6041      template-argument. The template-parameter is bound directly to the
6042      template-argument, which must be an lvalue.  */
6043   else if (TYPE_REF_OBJ_P (type))
6044     {
6045       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
6046                                                       expr_type))
6047         return error_mark_node;
6048
6049       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
6050         {
6051           if (complain & tf_error)
6052             error ("%qE is not a valid template argument for type %qT "
6053                    "because of conflicts in cv-qualification", expr, type);
6054           return NULL_TREE;
6055         }
6056
6057       if (!real_lvalue_p (expr))
6058         {
6059           if (complain & tf_error)
6060             error ("%qE is not a valid template argument for type %qT "
6061                    "because it is not an lvalue", expr, type);
6062           return NULL_TREE;
6063         }
6064
6065       /* [temp.arg.nontype]/1
6066
6067          A template-argument for a non-type, non-template template-parameter
6068          shall be one of: [...]
6069
6070          -- the address of an object or function with external linkage.  */
6071       if (INDIRECT_REF_P (expr)
6072           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
6073         {
6074           expr = TREE_OPERAND (expr, 0);
6075           if (DECL_P (expr))
6076             {
6077               if (complain & tf_error)
6078                 error ("%q#D is not a valid template argument for type %qT "
6079                        "because a reference variable does not have a constant "
6080                        "address", expr, type);
6081               return NULL_TREE;
6082             }
6083         }
6084
6085       if (!DECL_P (expr))
6086         {
6087           if (complain & tf_error)
6088             error ("%qE is not a valid template argument for type %qT "
6089                    "because it is not an object with external linkage",
6090                    expr, type);
6091           return NULL_TREE;
6092         }
6093
6094       if (!DECL_EXTERNAL_LINKAGE_P (expr))
6095         {
6096           if (complain & tf_error)
6097             error ("%qE is not a valid template argument for type %qT "
6098                    "because object %qD has not external linkage",
6099                    expr, type, expr);
6100           return NULL_TREE;
6101         }
6102
6103       expr = build_nop (type, build_address (expr));
6104     }
6105   /* [temp.arg.nontype]/5, bullet 4
6106
6107      For a non-type template-parameter of type pointer to function, only
6108      the function-to-pointer conversion (_conv.func_) is applied. If the
6109      template-argument represents a set of overloaded functions (or a
6110      pointer to such), the matching function is selected from the set
6111      (_over.over_).  */
6112   else if (TYPE_PTRFN_P (type))
6113     {
6114       /* If the argument is a template-id, we might not have enough
6115          context information to decay the pointer.  */
6116       if (!type_unknown_p (expr_type))
6117         {
6118           expr = decay_conversion (expr, complain);
6119           if (expr == error_mark_node)
6120             return error_mark_node;
6121         }
6122
6123       if (cxx_dialect >= cxx11 && integer_zerop (expr))
6124         /* Null pointer values are OK in C++11.  */
6125         return perform_qualification_conversions (type, expr);
6126
6127       expr = convert_nontype_argument_function (type, expr, complain);
6128       if (!expr || expr == error_mark_node)
6129         return expr;
6130     }
6131   /* [temp.arg.nontype]/5, bullet 5
6132
6133      For a non-type template-parameter of type reference to function, no
6134      conversions apply. If the template-argument represents a set of
6135      overloaded functions, the matching function is selected from the set
6136      (_over.over_).  */
6137   else if (TYPE_REFFN_P (type))
6138     {
6139       if (TREE_CODE (expr) == ADDR_EXPR)
6140         {
6141           if (complain & tf_error)
6142             {
6143               error ("%qE is not a valid template argument for type %qT "
6144                      "because it is a pointer", expr, type);
6145               inform (input_location, "try using %qE instead",
6146                       TREE_OPERAND (expr, 0));
6147             }
6148           return NULL_TREE;
6149         }
6150
6151       expr = convert_nontype_argument_function (type, expr, complain);
6152       if (!expr || expr == error_mark_node)
6153         return expr;
6154
6155       expr = build_nop (type, build_address (expr));
6156     }
6157   /* [temp.arg.nontype]/5, bullet 6
6158
6159      For a non-type template-parameter of type pointer to member function,
6160      no conversions apply. If the template-argument represents a set of
6161      overloaded member functions, the matching member function is selected
6162      from the set (_over.over_).  */
6163   else if (TYPE_PTRMEMFUNC_P (type))
6164     {
6165       expr = instantiate_type (type, expr, tf_none);
6166       if (expr == error_mark_node)
6167         return error_mark_node;
6168
6169       /* [temp.arg.nontype] bullet 1 says the pointer to member
6170          expression must be a pointer-to-member constant.  */
6171       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6172         return error_mark_node;
6173
6174       /* There is no way to disable standard conversions in
6175          resolve_address_of_overloaded_function (called by
6176          instantiate_type). It is possible that the call succeeded by
6177          converting &B::I to &D::I (where B is a base of D), so we need
6178          to reject this conversion here.
6179
6180          Actually, even if there was a way to disable standard conversions,
6181          it would still be better to reject them here so that we can
6182          provide a superior diagnostic.  */
6183       if (!same_type_p (TREE_TYPE (expr), type))
6184         {
6185           if (complain & tf_error)
6186             {
6187               error ("%qE is not a valid template argument for type %qT "
6188                      "because it is of type %qT", expr, type,
6189                      TREE_TYPE (expr));
6190               /* If we are just one standard conversion off, explain.  */
6191               if (can_convert_standard (type, TREE_TYPE (expr), complain))
6192                 inform (input_location,
6193                         "standard conversions are not allowed in this context");
6194             }
6195           return NULL_TREE;
6196         }
6197     }
6198   /* [temp.arg.nontype]/5, bullet 7
6199
6200      For a non-type template-parameter of type pointer to data member,
6201      qualification conversions (_conv.qual_) are applied.  */
6202   else if (TYPE_PTRDATAMEM_P (type))
6203     {
6204       /* [temp.arg.nontype] bullet 1 says the pointer to member
6205          expression must be a pointer-to-member constant.  */
6206       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
6207         return error_mark_node;
6208
6209       expr = perform_qualification_conversions (type, expr);
6210       if (expr == error_mark_node)
6211         return expr;
6212     }
6213   else if (NULLPTR_TYPE_P (type))
6214     {
6215       if (expr != nullptr_node)
6216         {
6217           if (complain & tf_error)
6218             error ("%qE is not a valid template argument for type %qT "
6219                    "because it is of type %qT", expr, type, TREE_TYPE (expr));
6220           return NULL_TREE;
6221         }
6222       return expr;
6223     }
6224   /* A template non-type parameter must be one of the above.  */
6225   else
6226     gcc_unreachable ();
6227
6228   /* Sanity check: did we actually convert the argument to the
6229      right type?  */
6230   gcc_assert (same_type_ignoring_top_level_qualifiers_p
6231               (type, TREE_TYPE (expr)));
6232   return convert_from_reference (expr);
6233 }
6234
6235 /* Subroutine of coerce_template_template_parms, which returns 1 if
6236    PARM_PARM and ARG_PARM match using the rule for the template
6237    parameters of template template parameters. Both PARM and ARG are
6238    template parameters; the rest of the arguments are the same as for
6239    coerce_template_template_parms.
6240  */
6241 static int
6242 coerce_template_template_parm (tree parm,
6243                               tree arg,
6244                               tsubst_flags_t complain,
6245                               tree in_decl,
6246                               tree outer_args)
6247 {
6248   if (arg == NULL_TREE || error_operand_p (arg)
6249       || parm == NULL_TREE || error_operand_p (parm))
6250     return 0;
6251   
6252   if (TREE_CODE (arg) != TREE_CODE (parm))
6253     return 0;
6254   
6255   switch (TREE_CODE (parm))
6256     {
6257     case TEMPLATE_DECL:
6258       /* We encounter instantiations of templates like
6259          template <template <template <class> class> class TT>
6260          class C;  */
6261       {
6262         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6263         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6264         
6265         if (!coerce_template_template_parms
6266             (parmparm, argparm, complain, in_decl, outer_args))
6267           return 0;
6268       }
6269       /* Fall through.  */
6270       
6271     case TYPE_DECL:
6272       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
6273           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6274         /* Argument is a parameter pack but parameter is not.  */
6275         return 0;
6276       break;
6277       
6278     case PARM_DECL:
6279       /* The tsubst call is used to handle cases such as
6280          
6281            template <int> class C {};
6282            template <class T, template <T> class TT> class D {};
6283            D<int, C> d;
6284
6285          i.e. the parameter list of TT depends on earlier parameters.  */
6286       if (!uses_template_parms (TREE_TYPE (arg))
6287           && !same_type_p
6288                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
6289                  TREE_TYPE (arg)))
6290         return 0;
6291       
6292       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
6293           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6294         /* Argument is a parameter pack but parameter is not.  */
6295         return 0;
6296       
6297       break;
6298
6299     default:
6300       gcc_unreachable ();
6301     }
6302
6303   return 1;
6304 }
6305
6306
6307 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
6308    template template parameters.  Both PARM_PARMS and ARG_PARMS are
6309    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
6310    or PARM_DECL.
6311
6312    Consider the example:
6313      template <class T> class A;
6314      template<template <class U> class TT> class B;
6315
6316    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
6317    the parameters to A, and OUTER_ARGS contains A.  */
6318
6319 static int
6320 coerce_template_template_parms (tree parm_parms,
6321                                 tree arg_parms,
6322                                 tsubst_flags_t complain,
6323                                 tree in_decl,
6324                                 tree outer_args)
6325 {
6326   int nparms, nargs, i;
6327   tree parm, arg;
6328   int variadic_p = 0;
6329
6330   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
6331   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
6332
6333   nparms = TREE_VEC_LENGTH (parm_parms);
6334   nargs = TREE_VEC_LENGTH (arg_parms);
6335
6336   /* Determine whether we have a parameter pack at the end of the
6337      template template parameter's template parameter list.  */
6338   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
6339     {
6340       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
6341       
6342       if (error_operand_p (parm))
6343         return 0;
6344
6345       switch (TREE_CODE (parm))
6346         {
6347         case TEMPLATE_DECL:
6348         case TYPE_DECL:
6349           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6350             variadic_p = 1;
6351           break;
6352           
6353         case PARM_DECL:
6354           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6355             variadic_p = 1;
6356           break;
6357           
6358         default:
6359           gcc_unreachable ();
6360         }
6361     }
6362  
6363   if (nargs != nparms
6364       && !(variadic_p && nargs >= nparms - 1))
6365     return 0;
6366
6367   /* Check all of the template parameters except the parameter pack at
6368      the end (if any).  */
6369   for (i = 0; i < nparms - variadic_p; ++i)
6370     {
6371       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6372           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6373         continue;
6374
6375       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6376       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6377
6378       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6379                                           outer_args))
6380         return 0;
6381
6382     }
6383
6384   if (variadic_p)
6385     {
6386       /* Check each of the template parameters in the template
6387          argument against the template parameter pack at the end of
6388          the template template parameter.  */
6389       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6390         return 0;
6391
6392       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6393
6394       for (; i < nargs; ++i)
6395         {
6396           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6397             continue;
6398  
6399           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6400  
6401           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6402                                               outer_args))
6403             return 0;
6404         }
6405     }
6406
6407   return 1;
6408 }
6409
6410 /* Verifies that the deduced template arguments (in TARGS) for the
6411    template template parameters (in TPARMS) represent valid bindings,
6412    by comparing the template parameter list of each template argument
6413    to the template parameter list of its corresponding template
6414    template parameter, in accordance with DR150. This
6415    routine can only be called after all template arguments have been
6416    deduced. It will return TRUE if all of the template template
6417    parameter bindings are okay, FALSE otherwise.  */
6418 bool 
6419 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6420 {
6421   int i, ntparms = TREE_VEC_LENGTH (tparms);
6422   bool ret = true;
6423
6424   /* We're dealing with template parms in this process.  */
6425   ++processing_template_decl;
6426
6427   targs = INNERMOST_TEMPLATE_ARGS (targs);
6428
6429   for (i = 0; i < ntparms; ++i)
6430     {
6431       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6432       tree targ = TREE_VEC_ELT (targs, i);
6433
6434       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6435         {
6436           tree packed_args = NULL_TREE;
6437           int idx, len = 1;
6438
6439           if (ARGUMENT_PACK_P (targ))
6440             {
6441               /* Look inside the argument pack.  */
6442               packed_args = ARGUMENT_PACK_ARGS (targ);
6443               len = TREE_VEC_LENGTH (packed_args);
6444             }
6445
6446           for (idx = 0; idx < len; ++idx)
6447             {
6448               tree targ_parms = NULL_TREE;
6449
6450               if (packed_args)
6451                 /* Extract the next argument from the argument
6452                    pack.  */
6453                 targ = TREE_VEC_ELT (packed_args, idx);
6454
6455               if (PACK_EXPANSION_P (targ))
6456                 /* Look at the pattern of the pack expansion.  */
6457                 targ = PACK_EXPANSION_PATTERN (targ);
6458
6459               /* Extract the template parameters from the template
6460                  argument.  */
6461               if (TREE_CODE (targ) == TEMPLATE_DECL)
6462                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6463               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6464                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6465
6466               /* Verify that we can coerce the template template
6467                  parameters from the template argument to the template
6468                  parameter.  This requires an exact match.  */
6469               if (targ_parms
6470                   && !coerce_template_template_parms
6471                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6472                         targ_parms,
6473                         tf_none,
6474                         tparm,
6475                         targs))
6476                 {
6477                   ret = false;
6478                   goto out;
6479                 }
6480             }
6481         }
6482     }
6483
6484  out:
6485
6486   --processing_template_decl;
6487   return ret;
6488 }
6489
6490 /* Since type attributes aren't mangled, we need to strip them from
6491    template type arguments.  */
6492
6493 static tree
6494 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6495 {
6496   tree mv;
6497   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6498     return arg;
6499   mv = TYPE_MAIN_VARIANT (arg);
6500   arg = strip_typedefs (arg);
6501   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6502       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6503     {
6504       if (complain & tf_warning)
6505         warning (0, "ignoring attributes on template argument %qT", arg);
6506       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6507       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6508     }
6509   return arg;
6510 }
6511
6512 /* Convert the indicated template ARG as necessary to match the
6513    indicated template PARM.  Returns the converted ARG, or
6514    error_mark_node if the conversion was unsuccessful.  Error and
6515    warning messages are issued under control of COMPLAIN.  This
6516    conversion is for the Ith parameter in the parameter list.  ARGS is
6517    the full set of template arguments deduced so far.  */
6518
6519 static tree
6520 convert_template_argument (tree parm,
6521                            tree arg,
6522                            tree args,
6523                            tsubst_flags_t complain,
6524                            int i,
6525                            tree in_decl)
6526 {
6527   tree orig_arg;
6528   tree val;
6529   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6530
6531   if (parm == error_mark_node)
6532     return error_mark_node;
6533
6534   if (TREE_CODE (arg) == TREE_LIST
6535       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6536     {
6537       /* The template argument was the name of some
6538          member function.  That's usually
6539          invalid, but static members are OK.  In any
6540          case, grab the underlying fields/functions
6541          and issue an error later if required.  */
6542       orig_arg = TREE_VALUE (arg);
6543       TREE_TYPE (arg) = unknown_type_node;
6544     }
6545
6546   orig_arg = arg;
6547
6548   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6549   requires_type = (TREE_CODE (parm) == TYPE_DECL
6550                    || requires_tmpl_type);
6551
6552   /* When determining whether an argument pack expansion is a template,
6553      look at the pattern.  */
6554   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6555     arg = PACK_EXPANSION_PATTERN (arg);
6556
6557   /* Deal with an injected-class-name used as a template template arg.  */
6558   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6559     {
6560       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6561       if (TREE_CODE (t) == TEMPLATE_DECL)
6562         {
6563           if (cxx_dialect >= cxx11)
6564             /* OK under DR 1004.  */;
6565           else if (complain & tf_warning_or_error)
6566             pedwarn (input_location, OPT_Wpedantic, "injected-class-name %qD"
6567                      " used as template template argument", TYPE_NAME (arg));
6568           else if (flag_pedantic_errors)
6569             t = arg;
6570
6571           arg = t;
6572         }
6573     }
6574
6575   is_tmpl_type = 
6576     ((TREE_CODE (arg) == TEMPLATE_DECL
6577       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6578      || (requires_tmpl_type && TREE_CODE (arg) == TYPE_ARGUMENT_PACK)
6579      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6580      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6581
6582   if (is_tmpl_type
6583       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6584           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6585     arg = TYPE_STUB_DECL (arg);
6586
6587   is_type = TYPE_P (arg) || is_tmpl_type;
6588
6589   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6590       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6591     {
6592       if (TREE_CODE (TREE_OPERAND (arg, 1)) == BIT_NOT_EXPR)
6593         {
6594           if (complain & tf_error)
6595             error ("invalid use of destructor %qE as a type", orig_arg);
6596           return error_mark_node;
6597         }
6598
6599       permerror (input_location,
6600                  "to refer to a type member of a template parameter, "
6601                  "use %<typename %E%>", orig_arg);
6602
6603       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6604                                      TREE_OPERAND (arg, 1),
6605                                      typename_type,
6606                                      complain);
6607       arg = orig_arg;
6608       is_type = 1;
6609     }
6610   if (is_type != requires_type)
6611     {
6612       if (in_decl)
6613         {
6614           if (complain & tf_error)
6615             {
6616               error ("type/value mismatch at argument %d in template "
6617                      "parameter list for %qD",
6618                      i + 1, in_decl);
6619               if (is_type)
6620                 inform (input_location,
6621                         "  expected a constant of type %qT, got %qT",
6622                         TREE_TYPE (parm),
6623                         (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6624               else if (requires_tmpl_type)
6625                 inform (input_location,
6626                         "  expected a class template, got %qE", orig_arg);
6627               else
6628                 inform (input_location,
6629                         "  expected a type, got %qE", orig_arg);
6630             }
6631         }
6632       return error_mark_node;
6633     }
6634   if (is_tmpl_type ^ requires_tmpl_type)
6635     {
6636       if (in_decl && (complain & tf_error))
6637         {
6638           error ("type/value mismatch at argument %d in template "
6639                  "parameter list for %qD",
6640                  i + 1, in_decl);
6641           if (is_tmpl_type)
6642             inform (input_location,
6643                     "  expected a type, got %qT", DECL_NAME (arg));
6644           else
6645             inform (input_location,
6646                     "  expected a class template, got %qT", orig_arg);
6647         }
6648       return error_mark_node;
6649     }
6650
6651   if (is_type)
6652     {
6653       if (requires_tmpl_type)
6654         {
6655           if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6656             val = orig_arg;
6657           else if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6658             /* The number of argument required is not known yet.
6659                Just accept it for now.  */
6660             val = TREE_TYPE (arg);
6661           else
6662             {
6663               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6664               tree argparm;
6665
6666               /* Strip alias templates that are equivalent to another
6667                  template.  */
6668               arg = get_underlying_template (arg);
6669               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6670
6671               if (coerce_template_template_parms (parmparm, argparm,
6672                                                   complain, in_decl,
6673                                                   args))
6674                 {
6675                   val = arg;
6676
6677                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6678                      TEMPLATE_DECL.  */
6679                   if (val != error_mark_node)
6680                     {
6681                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6682                         val = TREE_TYPE (val);
6683                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6684                         val = make_pack_expansion (val);
6685                     }
6686                 }
6687               else
6688                 {
6689                   if (in_decl && (complain & tf_error))
6690                     {
6691                       error ("type/value mismatch at argument %d in "
6692                              "template parameter list for %qD",
6693                              i + 1, in_decl);
6694                       inform (input_location,
6695                               "  expected a template of type %qD, got %qT",
6696                               parm, orig_arg);
6697                     }
6698
6699                   val = error_mark_node;
6700                 }
6701             }
6702         }
6703       else
6704         val = orig_arg;
6705       /* We only form one instance of each template specialization.
6706          Therefore, if we use a non-canonical variant (i.e., a
6707          typedef), any future messages referring to the type will use
6708          the typedef, which is confusing if those future uses do not
6709          themselves also use the typedef.  */
6710       if (TYPE_P (val))
6711         val = canonicalize_type_argument (val, complain);
6712     }
6713   else
6714     {
6715       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6716
6717       if (invalid_nontype_parm_type_p (t, complain))
6718         return error_mark_node;
6719
6720       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6721         {
6722           if (same_type_p (t, TREE_TYPE (orig_arg)))
6723             val = orig_arg;
6724           else
6725             {
6726               /* Not sure if this is reachable, but it doesn't hurt
6727                  to be robust.  */
6728               error ("type mismatch in nontype parameter pack");
6729               val = error_mark_node;
6730             }
6731         }
6732       else if (!dependent_template_arg_p (orig_arg)
6733                && !uses_template_parms (t))
6734         /* We used to call digest_init here.  However, digest_init
6735            will report errors, which we don't want when complain
6736            is zero.  More importantly, digest_init will try too
6737            hard to convert things: for example, `0' should not be
6738            converted to pointer type at this point according to
6739            the standard.  Accepting this is not merely an
6740            extension, since deciding whether or not these
6741            conversions can occur is part of determining which
6742            function template to call, or whether a given explicit
6743            argument specification is valid.  */
6744         val = convert_nontype_argument (t, orig_arg, complain);
6745       else
6746         val = strip_typedefs_expr (orig_arg);
6747
6748       if (val == NULL_TREE)
6749         val = error_mark_node;
6750       else if (val == error_mark_node && (complain & tf_error))
6751         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6752
6753       if (TREE_CODE (val) == SCOPE_REF)
6754         {
6755           /* Strip typedefs from the SCOPE_REF.  */
6756           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6757           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6758                                                    complain);
6759           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6760                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6761         }
6762     }
6763
6764   return val;
6765 }
6766
6767 /* Coerces the remaining template arguments in INNER_ARGS (from
6768    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6769    Returns the coerced argument pack. PARM_IDX is the position of this
6770    parameter in the template parameter list. ARGS is the original
6771    template argument list.  */
6772 static tree
6773 coerce_template_parameter_pack (tree parms,
6774                                 int parm_idx,
6775                                 tree args,
6776                                 tree inner_args,
6777                                 int arg_idx,
6778                                 tree new_args,
6779                                 int* lost,
6780                                 tree in_decl,
6781                                 tsubst_flags_t complain)
6782 {
6783   tree parm = TREE_VEC_ELT (parms, parm_idx);
6784   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6785   tree packed_args;
6786   tree argument_pack;
6787   tree packed_parms = NULL_TREE;
6788
6789   if (arg_idx > nargs)
6790     arg_idx = nargs;
6791
6792   if (tree packs = fixed_parameter_pack_p (TREE_VALUE (parm)))
6793     {
6794       /* When the template parameter is a non-type template parameter pack
6795          or template template parameter pack whose type or template
6796          parameters use parameter packs, we know exactly how many arguments
6797          we are looking for.  Build a vector of the instantiated decls for
6798          these template parameters in PACKED_PARMS.  */
6799       /* We can't use make_pack_expansion here because it would interpret a
6800          _DECL as a use rather than a declaration.  */
6801       tree decl = TREE_VALUE (parm);
6802       tree exp = cxx_make_type (TYPE_PACK_EXPANSION);
6803       SET_PACK_EXPANSION_PATTERN (exp, decl);
6804       PACK_EXPANSION_PARAMETER_PACKS (exp) = packs;
6805       SET_TYPE_STRUCTURAL_EQUALITY (exp);
6806
6807       TREE_VEC_LENGTH (args)--;
6808       packed_parms = tsubst_pack_expansion (exp, args, complain, decl);
6809       TREE_VEC_LENGTH (args)++;
6810
6811       if (packed_parms == error_mark_node)
6812         return error_mark_node;
6813
6814       /* If we're doing a partial instantiation of a member template,
6815          verify that all of the types used for the non-type
6816          template parameter pack are, in fact, valid for non-type
6817          template parameters.  */
6818       if (arg_idx < nargs
6819           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6820         {
6821           int j, len = TREE_VEC_LENGTH (packed_parms);
6822           for (j = 0; j < len; ++j)
6823             {
6824               tree t = TREE_TYPE (TREE_VEC_ELT (packed_parms, j));
6825               if (invalid_nontype_parm_type_p (t, complain))
6826                 return error_mark_node;
6827             }
6828           /* We don't know how many args we have yet, just
6829              use the unconverted ones for now.  */
6830           return NULL_TREE;
6831         }
6832
6833       packed_args = make_tree_vec (TREE_VEC_LENGTH (packed_parms));
6834     }
6835   else
6836     packed_args = make_tree_vec (nargs - arg_idx);
6837
6838   /* Convert the remaining arguments, which will be a part of the
6839      parameter pack "parm".  */
6840   for (; arg_idx < nargs; ++arg_idx)
6841     {
6842       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6843       tree actual_parm = TREE_VALUE (parm);
6844       int pack_idx = arg_idx - parm_idx;
6845
6846       if (packed_parms)
6847         {
6848           /* Once we've packed as many args as we have types, stop.  */
6849           if (pack_idx >= TREE_VEC_LENGTH (packed_parms))
6850             break;
6851           else if (PACK_EXPANSION_P (arg))
6852             /* We don't know how many args we have yet, just
6853                use the unconverted ones for now.  */
6854             return NULL_TREE;
6855           else
6856             actual_parm = TREE_VEC_ELT (packed_parms, pack_idx);
6857         }
6858
6859       if (arg == error_mark_node)
6860         {
6861           if (complain & tf_error)
6862             error ("template argument %d is invalid", arg_idx + 1);
6863         }
6864       else
6865         arg = convert_template_argument (actual_parm, 
6866                                          arg, new_args, complain, parm_idx,
6867                                          in_decl);
6868       if (arg == error_mark_node)
6869         (*lost)++;
6870       TREE_VEC_ELT (packed_args, pack_idx) = arg;
6871     }
6872
6873   if (arg_idx - parm_idx < TREE_VEC_LENGTH (packed_args)
6874       && TREE_VEC_LENGTH (packed_args) > 0)
6875     {
6876       if (complain & tf_error)
6877         error ("wrong number of template arguments (%d, should be %d)",
6878                arg_idx - parm_idx, TREE_VEC_LENGTH (packed_args));
6879       return error_mark_node;
6880     }
6881
6882   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6883       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6884     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6885   else
6886     {
6887       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6888       TREE_TYPE (argument_pack) 
6889         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6890       TREE_CONSTANT (argument_pack) = 1;
6891     }
6892
6893   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6894 #ifdef ENABLE_CHECKING
6895   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6896                                        TREE_VEC_LENGTH (packed_args));
6897 #endif
6898   return argument_pack;
6899 }
6900
6901 /* Returns the number of pack expansions in the template argument vector
6902    ARGS.  */
6903
6904 static int
6905 pack_expansion_args_count (tree args)
6906 {
6907   int i;
6908   int count = 0;
6909   if (args)
6910     for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
6911       {
6912         tree elt = TREE_VEC_ELT (args, i);
6913         if (elt && PACK_EXPANSION_P (elt))
6914           ++count;
6915       }
6916   return count;
6917 }
6918
6919 /* Convert all template arguments to their appropriate types, and
6920    return a vector containing the innermost resulting template
6921    arguments.  If any error occurs, return error_mark_node. Error and
6922    warning messages are issued under control of COMPLAIN.
6923
6924    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6925    for arguments not specified in ARGS.  Otherwise, if
6926    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6927    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6928    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6929    ARGS.  */
6930
6931 static tree
6932 coerce_template_parms (tree parms,
6933                        tree args,
6934                        tree in_decl,
6935                        tsubst_flags_t complain,
6936                        bool require_all_args,
6937                        bool use_default_args)
6938 {
6939   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6940   tree orig_inner_args;
6941   tree inner_args;
6942   tree new_args;
6943   tree new_inner_args;
6944   int saved_unevaluated_operand;
6945   int saved_inhibit_evaluation_warnings;
6946
6947   /* When used as a boolean value, indicates whether this is a
6948      variadic template parameter list. Since it's an int, we can also
6949      subtract it from nparms to get the number of non-variadic
6950      parameters.  */
6951   int variadic_p = 0;
6952   int variadic_args_p = 0;
6953   int post_variadic_parms = 0;
6954
6955   /* Likewise for parameters with default arguments.  */
6956   int default_p = 0;
6957
6958   if (args == error_mark_node)
6959     return error_mark_node;
6960
6961   nparms = TREE_VEC_LENGTH (parms);
6962
6963   /* Determine if there are any parameter packs or default arguments.  */
6964   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6965     {
6966       tree parm = TREE_VEC_ELT (parms, parm_idx);
6967       if (variadic_p)
6968         ++post_variadic_parms;
6969       if (template_parameter_pack_p (TREE_VALUE (parm)))
6970         ++variadic_p;
6971       if (TREE_PURPOSE (parm))
6972         ++default_p;
6973     }
6974
6975   inner_args = orig_inner_args = INNERMOST_TEMPLATE_ARGS (args);
6976   /* If there are no parameters that follow a parameter pack, we need to
6977      expand any argument packs so that we can deduce a parameter pack from
6978      some non-packed args followed by an argument pack, as in variadic85.C.
6979      If there are such parameters, we need to leave argument packs intact
6980      so the arguments are assigned properly.  This can happen when dealing
6981      with a nested class inside a partial specialization of a class
6982      template, as in variadic92.C, or when deducing a template parameter pack
6983      from a sub-declarator, as in variadic114.C.  */
6984   if (!post_variadic_parms)
6985     inner_args = expand_template_argument_pack (inner_args);
6986
6987   /* Count any pack expansion args.  */
6988   variadic_args_p = pack_expansion_args_count (inner_args);
6989
6990   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6991   if ((nargs > nparms && !variadic_p)
6992       || (nargs < nparms - variadic_p
6993           && require_all_args
6994           && !variadic_args_p
6995           && (!use_default_args
6996               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6997                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6998     {
6999       if (complain & tf_error)
7000         {
7001           if (variadic_p || default_p)
7002             {
7003               nparms -= variadic_p + default_p;
7004               error ("wrong number of template arguments "
7005                      "(%d, should be at least %d)", nargs, nparms);
7006             }
7007           else
7008              error ("wrong number of template arguments "
7009                     "(%d, should be %d)", nargs, nparms);
7010
7011           if (in_decl)
7012             inform (input_location, "provided for %q+D", in_decl);
7013         }
7014
7015       return error_mark_node;
7016     }
7017   /* We can't pass a pack expansion to a non-pack parameter of an alias
7018      template (DR 1430).  */
7019   else if (in_decl && DECL_ALIAS_TEMPLATE_P (in_decl)
7020            && variadic_args_p
7021            && nargs - variadic_args_p < nparms - variadic_p)
7022     {
7023       if (complain & tf_error)
7024         {
7025           for (int i = 0; i < TREE_VEC_LENGTH (inner_args); ++i)
7026             {
7027               tree arg = TREE_VEC_ELT (inner_args, i);
7028               tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
7029
7030               if (PACK_EXPANSION_P (arg)
7031                   && !template_parameter_pack_p (parm))
7032                 {
7033                   error ("pack expansion argument for non-pack parameter "
7034                          "%qD of alias template %qD", parm, in_decl);
7035                   inform (DECL_SOURCE_LOCATION (parm), "declared here");
7036                   goto found;
7037                 }
7038             }
7039           gcc_unreachable ();
7040         found:;
7041         }
7042       return error_mark_node;
7043     }
7044
7045   /* We need to evaluate the template arguments, even though this
7046      template-id may be nested within a "sizeof".  */
7047   saved_unevaluated_operand = cp_unevaluated_operand;
7048   cp_unevaluated_operand = 0;
7049   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
7050   c_inhibit_evaluation_warnings = 0;
7051   new_inner_args = make_tree_vec (nparms);
7052   new_args = add_outermost_template_args (args, new_inner_args);
7053   int pack_adjust = 0;
7054   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
7055     {
7056       tree arg;
7057       tree parm;
7058
7059       /* Get the Ith template parameter.  */
7060       parm = TREE_VEC_ELT (parms, parm_idx);
7061  
7062       if (parm == error_mark_node)
7063       {
7064         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
7065         continue;
7066       }
7067
7068       /* Calculate the next argument.  */
7069       if (arg_idx < nargs)
7070         arg = TREE_VEC_ELT (inner_args, arg_idx);
7071       else
7072         arg = NULL_TREE;
7073
7074       if (template_parameter_pack_p (TREE_VALUE (parm))
7075           && !(arg && ARGUMENT_PACK_P (arg)))
7076         {
7077           /* Some arguments will be placed in the
7078              template parameter pack PARM.  */
7079           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
7080                                                 inner_args, arg_idx,
7081                                                 new_args, &lost,
7082                                                 in_decl, complain);
7083
7084           if (arg == NULL_TREE)
7085             {
7086               /* We don't know how many args we have yet, just use the
7087                  unconverted (and still packed) ones for now.  */
7088               new_inner_args = orig_inner_args;
7089               arg_idx = nargs;
7090               break;
7091             }
7092
7093           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
7094
7095           /* Store this argument.  */
7096           if (arg == error_mark_node)
7097             {
7098               lost++;
7099               /* We are done with all of the arguments.  */
7100               arg_idx = nargs;
7101             }
7102           else
7103             {
7104               pack_adjust = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg)) - 1;
7105               arg_idx += pack_adjust;
7106             }
7107           
7108           continue;
7109         }
7110       else if (arg)
7111         {
7112           if (PACK_EXPANSION_P (arg))
7113             {
7114               /* "If every valid specialization of a variadic template
7115                  requires an empty template parameter pack, the template is
7116                  ill-formed, no diagnostic required."  So check that the
7117                  pattern works with this parameter.  */
7118               tree pattern = PACK_EXPANSION_PATTERN (arg);
7119               tree conv = convert_template_argument (TREE_VALUE (parm),
7120                                                      pattern, new_args,
7121                                                      complain, parm_idx,
7122                                                      in_decl);
7123               if (conv == error_mark_node)
7124                 {
7125                   inform (input_location, "so any instantiation with a "
7126                          "non-empty parameter pack would be ill-formed");
7127                   ++lost;
7128                 }
7129               else if (TYPE_P (conv) && !TYPE_P (pattern))
7130                 /* Recover from missing typename.  */
7131                 TREE_VEC_ELT (inner_args, arg_idx)
7132                   = make_pack_expansion (conv);
7133
7134               /* We don't know how many args we have yet, just
7135                  use the unconverted ones for now.  */
7136               new_inner_args = inner_args;
7137               arg_idx = nargs;
7138               break;
7139             }
7140         }
7141       else if (require_all_args)
7142         {
7143           /* There must be a default arg in this case.  */
7144           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
7145                                      complain, in_decl);
7146           /* The position of the first default template argument,
7147              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
7148              Record that.  */
7149           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7150             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7151                                                  arg_idx - pack_adjust);
7152         }
7153       else
7154         break;
7155
7156       if (arg == error_mark_node)
7157         {
7158           if (complain & tf_error)
7159             error ("template argument %d is invalid", arg_idx + 1);
7160         }
7161       else if (!arg)
7162         /* This only occurs if there was an error in the template
7163            parameter list itself (which we would already have
7164            reported) that we are trying to recover from, e.g., a class
7165            template with a parameter list such as
7166            template<typename..., typename>.  */
7167         ++lost;
7168       else
7169         arg = convert_template_argument (TREE_VALUE (parm),
7170                                          arg, new_args, complain, 
7171                                          parm_idx, in_decl);
7172
7173       if (arg == error_mark_node)
7174         lost++;
7175       TREE_VEC_ELT (new_inner_args, arg_idx - pack_adjust) = arg;
7176     }
7177   cp_unevaluated_operand = saved_unevaluated_operand;
7178   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
7179
7180   if (variadic_p && arg_idx < nargs)
7181     {
7182       if (complain & tf_error)
7183         {
7184           error ("wrong number of template arguments "
7185                  "(%d, should be %d)", nargs, arg_idx);
7186           if (in_decl)
7187             error ("provided for %q+D", in_decl);
7188         }
7189       return error_mark_node;
7190     }
7191
7192   if (lost)
7193     return error_mark_node;
7194
7195 #ifdef ENABLE_CHECKING
7196   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
7197     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
7198                                          TREE_VEC_LENGTH (new_inner_args));
7199 #endif
7200
7201   return new_inner_args;
7202 }
7203
7204 /* Like coerce_template_parms.  If PARMS represents all template
7205    parameters levels, this function returns a vector of vectors
7206    representing all the resulting argument levels.  Note that in this
7207    case, only the innermost arguments are coerced because the
7208    outermost ones are supposed to have been coerced already.
7209
7210    Otherwise, if PARMS represents only (the innermost) vector of
7211    parameters, this function returns a vector containing just the
7212    innermost resulting arguments.  */
7213
7214 static tree
7215 coerce_innermost_template_parms (tree parms,
7216                                   tree args,
7217                                   tree in_decl,
7218                                   tsubst_flags_t complain,
7219                                   bool require_all_args,
7220                                   bool use_default_args)
7221 {
7222   int parms_depth = TMPL_PARMS_DEPTH (parms);
7223   int args_depth = TMPL_ARGS_DEPTH (args);
7224   tree coerced_args;
7225
7226   if (parms_depth > 1)
7227     {
7228       coerced_args = make_tree_vec (parms_depth);
7229       tree level;
7230       int cur_depth;
7231
7232       for (level = parms, cur_depth = parms_depth;
7233            parms_depth > 0 && level != NULL_TREE;
7234            level = TREE_CHAIN (level), --cur_depth)
7235         {
7236           tree l;
7237           if (cur_depth == args_depth)
7238             l = coerce_template_parms (TREE_VALUE (level),
7239                                        args, in_decl, complain,
7240                                        require_all_args,
7241                                        use_default_args);
7242           else
7243             l = TMPL_ARGS_LEVEL (args, cur_depth);
7244
7245           if (l == error_mark_node)
7246             return error_mark_node;
7247
7248           SET_TMPL_ARGS_LEVEL (coerced_args, cur_depth, l);
7249         }
7250     }
7251   else
7252     coerced_args = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parms),
7253                                           args, in_decl, complain,
7254                                           require_all_args,
7255                                           use_default_args);
7256   return coerced_args;
7257 }
7258
7259 /* Returns 1 if template args OT and NT are equivalent.  */
7260
7261 static int
7262 template_args_equal (tree ot, tree nt)
7263 {
7264   if (nt == ot)
7265     return 1;
7266   if (nt == NULL_TREE || ot == NULL_TREE)
7267     return false;
7268
7269   if (TREE_CODE (nt) == TREE_VEC)
7270     /* For member templates */
7271     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
7272   else if (PACK_EXPANSION_P (ot))
7273     return (PACK_EXPANSION_P (nt)
7274             && template_args_equal (PACK_EXPANSION_PATTERN (ot),
7275                                     PACK_EXPANSION_PATTERN (nt))
7276             && template_args_equal (PACK_EXPANSION_EXTRA_ARGS (ot),
7277                                     PACK_EXPANSION_EXTRA_ARGS (nt)));
7278   else if (ARGUMENT_PACK_P (ot))
7279     {
7280       int i, len;
7281       tree opack, npack;
7282
7283       if (!ARGUMENT_PACK_P (nt))
7284         return 0;
7285
7286       opack = ARGUMENT_PACK_ARGS (ot);
7287       npack = ARGUMENT_PACK_ARGS (nt);
7288       len = TREE_VEC_LENGTH (opack);
7289       if (TREE_VEC_LENGTH (npack) != len)
7290         return 0;
7291       for (i = 0; i < len; ++i)
7292         if (!template_args_equal (TREE_VEC_ELT (opack, i),
7293                                   TREE_VEC_ELT (npack, i)))
7294           return 0;
7295       return 1;
7296     }
7297   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
7298     {
7299       /* We get here probably because we are in the middle of substituting
7300          into the pattern of a pack expansion. In that case the
7301          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
7302          interested in. So we want to use the initial pack argument for
7303          the comparison.  */
7304       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
7305       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
7306         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
7307       return template_args_equal (ot, nt);
7308     }
7309   else if (TYPE_P (nt))
7310     {
7311       if (!TYPE_P (ot))
7312         return false;
7313       /* Don't treat an alias template specialization with dependent
7314          arguments as equivalent to its underlying type when used as a
7315          template argument; we need them to be distinct so that we
7316          substitute into the specialization arguments at instantiation
7317          time.  And aliases can't be equivalent without being ==, so
7318          we don't need to look any deeper.  */
7319       if (TYPE_ALIAS_P (nt) || TYPE_ALIAS_P (ot))
7320         return false;
7321       else
7322         return same_type_p (ot, nt);
7323     }
7324   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
7325     return 0;
7326   else
7327     {
7328       /* Try to treat a template non-type argument that has been converted
7329          to the parameter type as equivalent to one that hasn't yet.  */
7330       for (enum tree_code code1 = TREE_CODE (ot);
7331            CONVERT_EXPR_CODE_P (code1)
7332              || code1 == NON_LVALUE_EXPR;
7333            code1 = TREE_CODE (ot))
7334         ot = TREE_OPERAND (ot, 0);
7335       for (enum tree_code code2 = TREE_CODE (nt);
7336            CONVERT_EXPR_CODE_P (code2)
7337              || code2 == NON_LVALUE_EXPR;
7338            code2 = TREE_CODE (nt))
7339         nt = TREE_OPERAND (nt, 0);
7340
7341       return cp_tree_equal (ot, nt);
7342     }
7343 }
7344
7345 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
7346    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
7347    NEWARG_PTR with the offending arguments if they are non-NULL.  */
7348
7349 static int
7350 comp_template_args_with_info (tree oldargs, tree newargs,
7351                               tree *oldarg_ptr, tree *newarg_ptr)
7352 {
7353   int i;
7354
7355   if (oldargs == newargs)
7356     return 1;
7357
7358   if (!oldargs || !newargs)
7359     return 0;
7360
7361   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
7362     return 0;
7363
7364   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
7365     {
7366       tree nt = TREE_VEC_ELT (newargs, i);
7367       tree ot = TREE_VEC_ELT (oldargs, i);
7368
7369       if (! template_args_equal (ot, nt))
7370         {
7371           if (oldarg_ptr != NULL)
7372             *oldarg_ptr = ot;
7373           if (newarg_ptr != NULL)
7374             *newarg_ptr = nt;
7375           return 0;
7376         }
7377     }
7378   return 1;
7379 }
7380
7381 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
7382    of template arguments.  Returns 0 otherwise.  */
7383
7384 int
7385 comp_template_args (tree oldargs, tree newargs)
7386 {
7387   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
7388 }
7389
7390 static void
7391 add_pending_template (tree d)
7392 {
7393   tree ti = (TYPE_P (d)
7394              ? CLASSTYPE_TEMPLATE_INFO (d)
7395              : DECL_TEMPLATE_INFO (d));
7396   struct pending_template *pt;
7397   int level;
7398
7399   if (TI_PENDING_TEMPLATE_FLAG (ti))
7400     return;
7401
7402   /* We are called both from instantiate_decl, where we've already had a
7403      tinst_level pushed, and instantiate_template, where we haven't.
7404      Compensate.  */
7405   level = !current_tinst_level || current_tinst_level->decl != d;
7406
7407   if (level)
7408     push_tinst_level (d);
7409
7410   pt = ggc_alloc<pending_template> ();
7411   pt->next = NULL;
7412   pt->tinst = current_tinst_level;
7413   if (last_pending_template)
7414     last_pending_template->next = pt;
7415   else
7416     pending_templates = pt;
7417
7418   last_pending_template = pt;
7419
7420   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
7421
7422   if (level)
7423     pop_tinst_level ();
7424 }
7425
7426
7427 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
7428    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
7429    documentation for TEMPLATE_ID_EXPR.  */
7430
7431 tree
7432 lookup_template_function (tree fns, tree arglist)
7433 {
7434   tree type;
7435
7436   if (fns == error_mark_node || arglist == error_mark_node)
7437     return error_mark_node;
7438
7439   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
7440
7441   if (!is_overloaded_fn (fns) && !identifier_p (fns))
7442     {
7443       error ("%q#D is not a function template", fns);
7444       return error_mark_node;
7445     }
7446
7447   if (BASELINK_P (fns))
7448     {
7449       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
7450                                          unknown_type_node,
7451                                          BASELINK_FUNCTIONS (fns),
7452                                          arglist);
7453       return fns;
7454     }
7455
7456   type = TREE_TYPE (fns);
7457   if (TREE_CODE (fns) == OVERLOAD || !type)
7458     type = unknown_type_node;
7459
7460   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
7461 }
7462
7463 /* Within the scope of a template class S<T>, the name S gets bound
7464    (in build_self_reference) to a TYPE_DECL for the class, not a
7465    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
7466    or one of its enclosing classes, and that type is a template,
7467    return the associated TEMPLATE_DECL.  Otherwise, the original
7468    DECL is returned.
7469
7470    Also handle the case when DECL is a TREE_LIST of ambiguous
7471    injected-class-names from different bases.  */
7472
7473 tree
7474 maybe_get_template_decl_from_type_decl (tree decl)
7475 {
7476   if (decl == NULL_TREE)
7477     return decl;
7478
7479   /* DR 176: A lookup that finds an injected-class-name (10.2
7480      [class.member.lookup]) can result in an ambiguity in certain cases
7481      (for example, if it is found in more than one base class). If all of
7482      the injected-class-names that are found refer to specializations of
7483      the same class template, and if the name is followed by a
7484      template-argument-list, the reference refers to the class template
7485      itself and not a specialization thereof, and is not ambiguous.  */
7486   if (TREE_CODE (decl) == TREE_LIST)
7487     {
7488       tree t, tmpl = NULL_TREE;
7489       for (t = decl; t; t = TREE_CHAIN (t))
7490         {
7491           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
7492           if (!tmpl)
7493             tmpl = elt;
7494           else if (tmpl != elt)
7495             break;
7496         }
7497       if (tmpl && t == NULL_TREE)
7498         return tmpl;
7499       else
7500         return decl;
7501     }
7502
7503   return (decl != NULL_TREE
7504           && DECL_SELF_REFERENCE_P (decl)
7505           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
7506     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
7507 }
7508
7509 /* Given an IDENTIFIER_NODE (or type TEMPLATE_DECL) and a chain of
7510    parameters, find the desired type.
7511
7512    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
7513
7514    IN_DECL, if non-NULL, is the template declaration we are trying to
7515    instantiate.
7516
7517    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
7518    the class we are looking up.
7519
7520    Issue error and warning messages under control of COMPLAIN.
7521
7522    If the template class is really a local class in a template
7523    function, then the FUNCTION_CONTEXT is the function in which it is
7524    being instantiated.
7525
7526    ??? Note that this function is currently called *twice* for each
7527    template-id: the first time from the parser, while creating the
7528    incomplete type (finish_template_type), and the second type during the
7529    real instantiation (instantiate_template_class). This is surely something
7530    that we want to avoid. It also causes some problems with argument
7531    coercion (see convert_nontype_argument for more information on this).  */
7532
7533 static tree
7534 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
7535                          int entering_scope, tsubst_flags_t complain)
7536 {
7537   tree templ = NULL_TREE, parmlist;
7538   tree t;
7539   spec_entry **slot;
7540   spec_entry *entry;
7541   spec_entry elt;
7542   hashval_t hash;
7543
7544   if (identifier_p (d1))
7545     {
7546       tree value = innermost_non_namespace_value (d1);
7547       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
7548         templ = value;
7549       else
7550         {
7551           if (context)
7552             push_decl_namespace (context);
7553           templ = lookup_name (d1);
7554           templ = maybe_get_template_decl_from_type_decl (templ);
7555           if (context)
7556             pop_decl_namespace ();
7557         }
7558       if (templ)
7559         context = DECL_CONTEXT (templ);
7560     }
7561   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
7562     {
7563       tree type = TREE_TYPE (d1);
7564
7565       /* If we are declaring a constructor, say A<T>::A<T>, we will get
7566          an implicit typename for the second A.  Deal with it.  */
7567       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
7568         type = TREE_TYPE (type);
7569
7570       if (CLASSTYPE_TEMPLATE_INFO (type))
7571         {
7572           templ = CLASSTYPE_TI_TEMPLATE (type);
7573           d1 = DECL_NAME (templ);
7574         }
7575     }
7576   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7577            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7578     {
7579       templ = TYPE_TI_TEMPLATE (d1);
7580       d1 = DECL_NAME (templ);
7581     }
7582   else if (DECL_TYPE_TEMPLATE_P (d1))
7583     {
7584       templ = d1;
7585       d1 = DECL_NAME (templ);
7586       context = DECL_CONTEXT (templ);
7587     }
7588   else if (DECL_TEMPLATE_TEMPLATE_PARM_P (d1))
7589     {
7590       templ = d1;
7591       d1 = DECL_NAME (templ);
7592     }
7593
7594   /* Issue an error message if we didn't find a template.  */
7595   if (! templ)
7596     {
7597       if (complain & tf_error)
7598         error ("%qT is not a template", d1);
7599       return error_mark_node;
7600     }
7601
7602   if (TREE_CODE (templ) != TEMPLATE_DECL
7603          /* Make sure it's a user visible template, if it was named by
7604             the user.  */
7605       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7606           && !PRIMARY_TEMPLATE_P (templ)))
7607     {
7608       if (complain & tf_error)
7609         {
7610           error ("non-template type %qT used as a template", d1);
7611           if (in_decl)
7612             error ("for template declaration %q+D", in_decl);
7613         }
7614       return error_mark_node;
7615     }
7616
7617   complain &= ~tf_user;
7618
7619   /* An alias that just changes the name of a template is equivalent to the
7620      other template, so if any of the arguments are pack expansions, strip
7621      the alias to avoid problems with a pack expansion passed to a non-pack
7622      alias template parameter (DR 1430).  */
7623   if (pack_expansion_args_count (INNERMOST_TEMPLATE_ARGS (arglist)))
7624     templ = get_underlying_template (templ);
7625
7626   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7627     {
7628       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7629          template arguments */
7630
7631       tree parm;
7632       tree arglist2;
7633       tree outer;
7634
7635       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7636
7637       /* Consider an example where a template template parameter declared as
7638
7639            template <class T, class U = std::allocator<T> > class TT
7640
7641          The template parameter level of T and U are one level larger than
7642          of TT.  To proper process the default argument of U, say when an
7643          instantiation `TT<int>' is seen, we need to build the full
7644          arguments containing {int} as the innermost level.  Outer levels,
7645          available when not appearing as default template argument, can be
7646          obtained from the arguments of the enclosing template.
7647
7648          Suppose that TT is later substituted with std::vector.  The above
7649          instantiation is `TT<int, std::allocator<T> >' with TT at
7650          level 1, and T at level 2, while the template arguments at level 1
7651          becomes {std::vector} and the inner level 2 is {int}.  */
7652
7653       outer = DECL_CONTEXT (templ);
7654       if (outer)
7655         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7656       else if (current_template_parms)
7657         /* This is an argument of the current template, so we haven't set
7658            DECL_CONTEXT yet.  */
7659         outer = current_template_args ();
7660
7661       if (outer)
7662         arglist = add_to_template_args (outer, arglist);
7663
7664       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7665                                         complain,
7666                                         /*require_all_args=*/true,
7667                                         /*use_default_args=*/true);
7668       if (arglist2 == error_mark_node
7669           || (!uses_template_parms (arglist2)
7670               && check_instantiated_args (templ, arglist2, complain)))
7671         return error_mark_node;
7672
7673       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7674       return parm;
7675     }
7676   else
7677     {
7678       tree template_type = TREE_TYPE (templ);
7679       tree gen_tmpl;
7680       tree type_decl;
7681       tree found = NULL_TREE;
7682       int arg_depth;
7683       int parm_depth;
7684       int is_dependent_type;
7685       int use_partial_inst_tmpl = false;
7686
7687       if (template_type == error_mark_node)
7688         /* An error occurred while building the template TEMPL, and a
7689            diagnostic has most certainly been emitted for that
7690            already.  Let's propagate that error.  */
7691         return error_mark_node;
7692
7693       gen_tmpl = most_general_template (templ);
7694       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7695       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7696       arg_depth = TMPL_ARGS_DEPTH (arglist);
7697
7698       if (arg_depth == 1 && parm_depth > 1)
7699         {
7700           /* We've been given an incomplete set of template arguments.
7701              For example, given:
7702
7703                template <class T> struct S1 {
7704                  template <class U> struct S2 {};
7705                  template <class U> struct S2<U*> {};
7706                 };
7707
7708              we will be called with an ARGLIST of `U*', but the
7709              TEMPLATE will be `template <class T> template
7710              <class U> struct S1<T>::S2'.  We must fill in the missing
7711              arguments.  */
7712           arglist
7713             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7714                                            arglist);
7715           arg_depth = TMPL_ARGS_DEPTH (arglist);
7716         }
7717
7718       /* Now we should have enough arguments.  */
7719       gcc_assert (parm_depth == arg_depth);
7720
7721       /* From here on, we're only interested in the most general
7722          template.  */
7723
7724       /* Calculate the BOUND_ARGS.  These will be the args that are
7725          actually tsubst'd into the definition to create the
7726          instantiation.  */
7727       arglist = coerce_innermost_template_parms (parmlist, arglist, gen_tmpl,
7728                                                  complain,
7729                                                  /*require_all_args=*/true,
7730                                                  /*use_default_args=*/true);
7731
7732       if (arglist == error_mark_node)
7733         /* We were unable to bind the arguments.  */
7734         return error_mark_node;
7735
7736       /* In the scope of a template class, explicit references to the
7737          template class refer to the type of the template, not any
7738          instantiation of it.  For example, in:
7739
7740            template <class T> class C { void f(C<T>); }
7741
7742          the `C<T>' is just the same as `C'.  Outside of the
7743          class, however, such a reference is an instantiation.  */
7744       if ((entering_scope
7745            || !PRIMARY_TEMPLATE_P (gen_tmpl)
7746            || currently_open_class (template_type))
7747           /* comp_template_args is expensive, check it last.  */
7748           && comp_template_args (TYPE_TI_ARGS (template_type),
7749                                  arglist))
7750         return template_type;
7751
7752       /* If we already have this specialization, return it.  */
7753       elt.tmpl = gen_tmpl;
7754       elt.args = arglist;
7755       hash = spec_hasher::hash (&elt);
7756       entry = type_specializations->find_with_hash (&elt, hash);
7757
7758       if (entry)
7759         return entry->spec;
7760
7761       is_dependent_type = uses_template_parms (arglist);
7762
7763       /* If the deduced arguments are invalid, then the binding
7764          failed.  */
7765       if (!is_dependent_type
7766           && check_instantiated_args (gen_tmpl,
7767                                       INNERMOST_TEMPLATE_ARGS (arglist),
7768                                       complain))
7769         return error_mark_node;
7770
7771       if (!is_dependent_type
7772           && !PRIMARY_TEMPLATE_P (gen_tmpl)
7773           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7774           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7775         {
7776           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7777                                       DECL_NAME (gen_tmpl),
7778                                       /*tag_scope=*/ts_global);
7779           return found;
7780         }
7781
7782       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7783                         complain, in_decl);
7784       if (context == error_mark_node)
7785         return error_mark_node;
7786
7787       if (!context)
7788         context = global_namespace;
7789
7790       /* Create the type.  */
7791       if (DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7792         {
7793           /* The user referred to a specialization of an alias
7794             template represented by GEN_TMPL.
7795
7796             [temp.alias]/2 says:
7797
7798                 When a template-id refers to the specialization of an
7799                 alias template, it is equivalent to the associated
7800                 type obtained by substitution of its
7801                 template-arguments for the template-parameters in the
7802                 type-id of the alias template.  */
7803
7804           t = tsubst (TREE_TYPE (gen_tmpl), arglist, complain, in_decl);
7805           /* Note that the call above (by indirectly calling
7806              register_specialization in tsubst_decl) registers the
7807              TYPE_DECL representing the specialization of the alias
7808              template.  So next time someone substitutes ARGLIST for
7809              the template parms into the alias template (GEN_TMPL),
7810              she'll get that TYPE_DECL back.  */
7811
7812           if (t == error_mark_node)
7813             return t;
7814         }
7815       else if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7816         {
7817           if (!is_dependent_type)
7818             {
7819               set_current_access_from_decl (TYPE_NAME (template_type));
7820               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7821                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
7822                                       arglist, complain, in_decl),
7823                               SCOPED_ENUM_P (template_type), NULL);
7824
7825               if (t == error_mark_node)
7826                 return t;
7827             }
7828           else
7829             {
7830               /* We don't want to call start_enum for this type, since
7831                  the values for the enumeration constants may involve
7832                  template parameters.  And, no one should be interested
7833                  in the enumeration constants for such a type.  */
7834               t = cxx_make_type (ENUMERAL_TYPE);
7835               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7836             }
7837           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7838           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7839             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7840         }
7841       else if (CLASS_TYPE_P (template_type))
7842         {
7843           t = make_class_type (TREE_CODE (template_type));
7844           CLASSTYPE_DECLARED_CLASS (t)
7845             = CLASSTYPE_DECLARED_CLASS (template_type);
7846           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7847           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7848
7849           /* A local class.  Make sure the decl gets registered properly.  */
7850           if (context == current_function_decl)
7851             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7852
7853           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7854             /* This instantiation is another name for the primary
7855                template type. Set the TYPE_CANONICAL field
7856                appropriately. */
7857             TYPE_CANONICAL (t) = template_type;
7858           else if (any_template_arguments_need_structural_equality_p (arglist))
7859             /* Some of the template arguments require structural
7860                equality testing, so this template class requires
7861                structural equality testing. */
7862             SET_TYPE_STRUCTURAL_EQUALITY (t);
7863         }
7864       else
7865         gcc_unreachable ();
7866
7867       /* If we called start_enum or pushtag above, this information
7868          will already be set up.  */
7869       if (!TYPE_NAME (t))
7870         {
7871           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7872
7873           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7874           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7875           DECL_SOURCE_LOCATION (type_decl)
7876             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7877         }
7878       else
7879         type_decl = TYPE_NAME (t);
7880
7881       if (CLASS_TYPE_P (template_type))
7882         {
7883           TREE_PRIVATE (type_decl)
7884             = TREE_PRIVATE (TYPE_MAIN_DECL (template_type));
7885           TREE_PROTECTED (type_decl)
7886             = TREE_PROTECTED (TYPE_MAIN_DECL (template_type));
7887           if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7888             {
7889               DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7890               DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7891             }
7892         }
7893
7894       if (OVERLOAD_TYPE_P (t)
7895           && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
7896         {
7897           if (tree attributes
7898               = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (template_type)))
7899             {
7900               if (!TREE_CHAIN (attributes))
7901                 TYPE_ATTRIBUTES (t) = attributes;
7902               else
7903                 TYPE_ATTRIBUTES (t)
7904                   = build_tree_list (TREE_PURPOSE (attributes),
7905                                      TREE_VALUE (attributes));
7906             }
7907         }
7908
7909       /* Let's consider the explicit specialization of a member
7910          of a class template specialization that is implicitly instantiated,
7911          e.g.:
7912              template<class T>
7913              struct S
7914              {
7915                template<class U> struct M {}; //#0
7916              };
7917
7918              template<>
7919              template<>
7920              struct S<int>::M<char> //#1
7921              {
7922                int i;
7923              };
7924         [temp.expl.spec]/4 says this is valid.
7925
7926         In this case, when we write:
7927         S<int>::M<char> m;
7928
7929         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7930         the one of #0.
7931
7932         When we encounter #1, we want to store the partial instantiation
7933         of M (template<class T> S<int>::M<T>) in its CLASSTYPE_TI_TEMPLATE.
7934
7935         For all cases other than this "explicit specialization of member of a
7936         class template", we just want to store the most general template into
7937         the CLASSTYPE_TI_TEMPLATE of M.
7938
7939         This case of "explicit specialization of member of a class template"
7940         only happens when:
7941         1/ the enclosing class is an instantiation of, and therefore not
7942         the same as, the context of the most general template, and
7943         2/ we aren't looking at the partial instantiation itself, i.e.
7944         the innermost arguments are not the same as the innermost parms of
7945         the most general template.
7946
7947         So it's only when 1/ and 2/ happens that we want to use the partial
7948         instantiation of the member template in lieu of its most general
7949         template.  */
7950
7951       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7952           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7953           /* the enclosing class must be an instantiation...  */
7954           && CLASS_TYPE_P (context)
7955           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7956         {
7957           tree partial_inst_args;
7958           TREE_VEC_LENGTH (arglist)--;
7959           ++processing_template_decl;
7960           partial_inst_args =
7961             tsubst (INNERMOST_TEMPLATE_ARGS
7962                         (TYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7963                     arglist, complain, NULL_TREE);
7964           --processing_template_decl;
7965           TREE_VEC_LENGTH (arglist)++;
7966           use_partial_inst_tmpl =
7967             /*...and we must not be looking at the partial instantiation
7968              itself. */
7969             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7970                                  partial_inst_args);
7971         }
7972
7973       if (!use_partial_inst_tmpl)
7974         /* This case is easy; there are no member templates involved.  */
7975         found = gen_tmpl;
7976       else
7977         {
7978           /* This is a full instantiation of a member template.  Find
7979              the partial instantiation of which this is an instance.  */
7980
7981           /* Temporarily reduce by one the number of levels in the ARGLIST
7982              so as to avoid comparing the last set of arguments.  */
7983           TREE_VEC_LENGTH (arglist)--;
7984           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7985           TREE_VEC_LENGTH (arglist)++;
7986           /* FOUND is either a proper class type, or an alias
7987              template specialization.  In the later case, it's a
7988              TYPE_DECL, resulting from the substituting of arguments
7989              for parameters in the TYPE_DECL of the alias template
7990              done earlier.  So be careful while getting the template
7991              of FOUND.  */
7992           found = TREE_CODE (found) == TYPE_DECL
7993             ? TYPE_TI_TEMPLATE (TREE_TYPE (found))
7994             : CLASSTYPE_TI_TEMPLATE (found);
7995         }
7996
7997       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7998
7999       elt.spec = t;
8000       slot = type_specializations->find_slot_with_hash (&elt, hash, INSERT);
8001       entry = ggc_alloc<spec_entry> ();
8002       *entry = elt;
8003       *slot = entry;
8004
8005       /* Note this use of the partial instantiation so we can check it
8006          later in maybe_process_partial_specialization.  */
8007       DECL_TEMPLATE_INSTANTIATIONS (found)
8008         = tree_cons (arglist, t,
8009                      DECL_TEMPLATE_INSTANTIATIONS (found));
8010
8011       if (TREE_CODE (template_type) == ENUMERAL_TYPE && !is_dependent_type
8012           && !DECL_ALIAS_TEMPLATE_P (gen_tmpl))
8013         /* Now that the type has been registered on the instantiations
8014            list, we set up the enumerators.  Because the enumeration
8015            constants may involve the enumeration type itself, we make
8016            sure to register the type first, and then create the
8017            constants.  That way, doing tsubst_expr for the enumeration
8018            constants won't result in recursive calls here; we'll find
8019            the instantiation and exit above.  */
8020         tsubst_enum (template_type, t, arglist);
8021
8022       if (CLASS_TYPE_P (template_type) && is_dependent_type)
8023         /* If the type makes use of template parameters, the
8024            code that generates debugging information will crash.  */
8025         DECL_IGNORED_P (TYPE_MAIN_DECL (t)) = 1;
8026
8027       /* Possibly limit visibility based on template args.  */
8028       TREE_PUBLIC (type_decl) = 1;
8029       determine_visibility (type_decl);
8030
8031       inherit_targ_abi_tags (t);
8032
8033       return t;
8034     }
8035 }
8036
8037 /* Wrapper for lookup_template_class_1.  */
8038
8039 tree
8040 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
8041                        int entering_scope, tsubst_flags_t complain)
8042 {
8043   tree ret;
8044   timevar_push (TV_TEMPLATE_INST);
8045   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
8046                                  entering_scope, complain);
8047   timevar_pop (TV_TEMPLATE_INST);
8048   return ret;
8049 }
8050
8051 /* Return a TEMPLATE_ID_EXPR for the given variable template and ARGLIST.
8052    The type of the expression is the unknown_type_node since the
8053    template-id could refer to an explicit or partial specialization. */
8054
8055 tree
8056 lookup_template_variable (tree templ, tree arglist)
8057 {
8058   tree type = unknown_type_node;
8059   return build2 (TEMPLATE_ID_EXPR, type, templ, arglist);
8060 }
8061
8062 /* Instantiate a variable declaration from a TEMPLATE_ID_EXPR for use. */
8063
8064 tree
8065 finish_template_variable (tree var)
8066 {
8067   tree templ = TREE_OPERAND (var, 0);
8068
8069   tree arglist = TREE_OPERAND (var, 1);
8070   tree tmpl_args = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (templ));
8071   arglist = add_outermost_template_args (tmpl_args, arglist);
8072
8073   tree parms = DECL_TEMPLATE_PARMS (templ);
8074   tsubst_flags_t complain = tf_warning_or_error;
8075   arglist = coerce_innermost_template_parms (parms, arglist, templ, complain,
8076                                              /*req_all*/true,
8077                                              /*use_default*/true);
8078
8079   return instantiate_template (templ, arglist, complain);
8080 }
8081 \f
8082 struct pair_fn_data
8083 {
8084   tree_fn_t fn;
8085   void *data;
8086   /* True when we should also visit template parameters that occur in
8087      non-deduced contexts.  */
8088   bool include_nondeduced_p;
8089   hash_set<tree> *visited;
8090 };
8091
8092 /* Called from for_each_template_parm via walk_tree.  */
8093
8094 static tree
8095 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
8096 {
8097   tree t = *tp;
8098   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
8099   tree_fn_t fn = pfd->fn;
8100   void *data = pfd->data;
8101
8102   if (TYPE_P (t)
8103       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
8104       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
8105                                  pfd->include_nondeduced_p))
8106     return error_mark_node;
8107
8108   switch (TREE_CODE (t))
8109     {
8110     case RECORD_TYPE:
8111       if (TYPE_PTRMEMFUNC_P (t))
8112         break;
8113       /* Fall through.  */
8114
8115     case UNION_TYPE:
8116     case ENUMERAL_TYPE:
8117       if (!TYPE_TEMPLATE_INFO (t))
8118         *walk_subtrees = 0;
8119       else if (for_each_template_parm (TYPE_TI_ARGS (t),
8120                                        fn, data, pfd->visited, 
8121                                        pfd->include_nondeduced_p))
8122         return error_mark_node;
8123       break;
8124
8125     case INTEGER_TYPE:
8126       if (for_each_template_parm (TYPE_MIN_VALUE (t),
8127                                   fn, data, pfd->visited, 
8128                                   pfd->include_nondeduced_p)
8129           || for_each_template_parm (TYPE_MAX_VALUE (t),
8130                                      fn, data, pfd->visited,
8131                                      pfd->include_nondeduced_p))
8132         return error_mark_node;
8133       break;
8134
8135     case METHOD_TYPE:
8136       /* Since we're not going to walk subtrees, we have to do this
8137          explicitly here.  */
8138       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
8139                                   pfd->visited, pfd->include_nondeduced_p))
8140         return error_mark_node;
8141       /* Fall through.  */
8142
8143     case FUNCTION_TYPE:
8144       /* Check the return type.  */
8145       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8146                                   pfd->include_nondeduced_p))
8147         return error_mark_node;
8148
8149       /* Check the parameter types.  Since default arguments are not
8150          instantiated until they are needed, the TYPE_ARG_TYPES may
8151          contain expressions that involve template parameters.  But,
8152          no-one should be looking at them yet.  And, once they're
8153          instantiated, they don't contain template parameters, so
8154          there's no point in looking at them then, either.  */
8155       {
8156         tree parm;
8157
8158         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
8159           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
8160                                       pfd->visited, pfd->include_nondeduced_p))
8161             return error_mark_node;
8162
8163         /* Since we've already handled the TYPE_ARG_TYPES, we don't
8164            want walk_tree walking into them itself.  */
8165         *walk_subtrees = 0;
8166       }
8167       break;
8168
8169     case TYPEOF_TYPE:
8170     case UNDERLYING_TYPE:
8171       if (pfd->include_nondeduced_p
8172           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
8173                                      pfd->visited, 
8174                                      pfd->include_nondeduced_p))
8175         return error_mark_node;
8176       break;
8177
8178     case FUNCTION_DECL:
8179     case VAR_DECL:
8180       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
8181           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
8182                                      pfd->visited, pfd->include_nondeduced_p))
8183         return error_mark_node;
8184       /* Fall through.  */
8185
8186     case PARM_DECL:
8187     case CONST_DECL:
8188       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
8189           && for_each_template_parm (DECL_INITIAL (t), fn, data,
8190                                      pfd->visited, pfd->include_nondeduced_p))
8191         return error_mark_node;
8192       if (DECL_CONTEXT (t)
8193           && pfd->include_nondeduced_p
8194           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
8195                                      pfd->visited, pfd->include_nondeduced_p))
8196         return error_mark_node;
8197       break;
8198
8199     case BOUND_TEMPLATE_TEMPLATE_PARM:
8200       /* Record template parameters such as `T' inside `TT<T>'.  */
8201       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
8202                                   pfd->include_nondeduced_p))
8203         return error_mark_node;
8204       /* Fall through.  */
8205
8206     case TEMPLATE_TEMPLATE_PARM:
8207     case TEMPLATE_TYPE_PARM:
8208     case TEMPLATE_PARM_INDEX:
8209       if (fn && (*fn)(t, data))
8210         return error_mark_node;
8211       else if (!fn)
8212         return error_mark_node;
8213       break;
8214
8215     case TEMPLATE_DECL:
8216       /* A template template parameter is encountered.  */
8217       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
8218           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
8219                                      pfd->include_nondeduced_p))
8220         return error_mark_node;
8221
8222       /* Already substituted template template parameter */
8223       *walk_subtrees = 0;
8224       break;
8225
8226     case TYPENAME_TYPE:
8227       if (!fn
8228           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
8229                                      data, pfd->visited, 
8230                                      pfd->include_nondeduced_p))
8231         return error_mark_node;
8232       break;
8233
8234     case CONSTRUCTOR:
8235       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
8236           && pfd->include_nondeduced_p
8237           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
8238                                      (TREE_TYPE (t)), fn, data,
8239                                      pfd->visited, pfd->include_nondeduced_p))
8240         return error_mark_node;
8241       break;
8242
8243     case INDIRECT_REF:
8244     case COMPONENT_REF:
8245       /* If there's no type, then this thing must be some expression
8246          involving template parameters.  */
8247       if (!fn && !TREE_TYPE (t))
8248         return error_mark_node;
8249       break;
8250
8251     case MODOP_EXPR:
8252     case CAST_EXPR:
8253     case IMPLICIT_CONV_EXPR:
8254     case REINTERPRET_CAST_EXPR:
8255     case CONST_CAST_EXPR:
8256     case STATIC_CAST_EXPR:
8257     case DYNAMIC_CAST_EXPR:
8258     case ARROW_EXPR:
8259     case DOTSTAR_EXPR:
8260     case TYPEID_EXPR:
8261     case PSEUDO_DTOR_EXPR:
8262       if (!fn)
8263         return error_mark_node;
8264       break;
8265
8266     default:
8267       break;
8268     }
8269
8270   /* We didn't find any template parameters we liked.  */
8271   return NULL_TREE;
8272 }
8273
8274 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
8275    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
8276    call FN with the parameter and the DATA.
8277    If FN returns nonzero, the iteration is terminated, and
8278    for_each_template_parm returns 1.  Otherwise, the iteration
8279    continues.  If FN never returns a nonzero value, the value
8280    returned by for_each_template_parm is 0.  If FN is NULL, it is
8281    considered to be the function which always returns 1.
8282
8283    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
8284    parameters that occur in non-deduced contexts.  When false, only
8285    visits those template parameters that can be deduced.  */
8286
8287 static int
8288 for_each_template_parm (tree t, tree_fn_t fn, void* data,
8289                         hash_set<tree> *visited,
8290                         bool include_nondeduced_p)
8291 {
8292   struct pair_fn_data pfd;
8293   int result;
8294
8295   /* Set up.  */
8296   pfd.fn = fn;
8297   pfd.data = data;
8298   pfd.include_nondeduced_p = include_nondeduced_p;
8299
8300   /* Walk the tree.  (Conceptually, we would like to walk without
8301      duplicates, but for_each_template_parm_r recursively calls
8302      for_each_template_parm, so we would need to reorganize a fair
8303      bit to use walk_tree_without_duplicates, so we keep our own
8304      visited list.)  */
8305   if (visited)
8306     pfd.visited = visited;
8307   else
8308     pfd.visited = new hash_set<tree>;
8309   result = cp_walk_tree (&t,
8310                          for_each_template_parm_r,
8311                          &pfd,
8312                          pfd.visited) != NULL_TREE;
8313
8314   /* Clean up.  */
8315   if (!visited)
8316     {
8317       delete pfd.visited;
8318       pfd.visited = 0;
8319     }
8320
8321   return result;
8322 }
8323
8324 /* Returns true if T depends on any template parameter.  */
8325
8326 int
8327 uses_template_parms (tree t)
8328 {
8329   if (t == NULL_TREE)
8330     return false;
8331
8332   bool dependent_p;
8333   int saved_processing_template_decl;
8334
8335   saved_processing_template_decl = processing_template_decl;
8336   if (!saved_processing_template_decl)
8337     processing_template_decl = 1;
8338   if (TYPE_P (t))
8339     dependent_p = dependent_type_p (t);
8340   else if (TREE_CODE (t) == TREE_VEC)
8341     dependent_p = any_dependent_template_arguments_p (t);
8342   else if (TREE_CODE (t) == TREE_LIST)
8343     dependent_p = (uses_template_parms (TREE_VALUE (t))
8344                    || uses_template_parms (TREE_CHAIN (t)));
8345   else if (TREE_CODE (t) == TYPE_DECL)
8346     dependent_p = dependent_type_p (TREE_TYPE (t));
8347   else if (DECL_P (t)
8348            || EXPR_P (t)
8349            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
8350            || TREE_CODE (t) == OVERLOAD
8351            || BASELINK_P (t)
8352            || identifier_p (t)
8353            || TREE_CODE (t) == TRAIT_EXPR
8354            || TREE_CODE (t) == CONSTRUCTOR
8355            || CONSTANT_CLASS_P (t))
8356     dependent_p = (type_dependent_expression_p (t)
8357                    || value_dependent_expression_p (t));
8358   else
8359     {
8360       gcc_assert (t == error_mark_node);
8361       dependent_p = false;
8362     }
8363
8364   processing_template_decl = saved_processing_template_decl;
8365
8366   return dependent_p;
8367 }
8368
8369 /* Returns true iff current_function_decl is an incompletely instantiated
8370    template.  Useful instead of processing_template_decl because the latter
8371    is set to 0 during instantiate_non_dependent_expr.  */
8372
8373 bool
8374 in_template_function (void)
8375 {
8376   tree fn = current_function_decl;
8377   bool ret;
8378   ++processing_template_decl;
8379   ret = (fn && DECL_LANG_SPECIFIC (fn)
8380          && DECL_TEMPLATE_INFO (fn)
8381          && any_dependent_template_arguments_p (DECL_TI_ARGS (fn)));
8382   --processing_template_decl;
8383   return ret;
8384 }
8385
8386 /* Returns true if T depends on any template parameter with level LEVEL.  */
8387
8388 int
8389 uses_template_parms_level (tree t, int level)
8390 {
8391   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
8392                                  /*include_nondeduced_p=*/true);
8393 }
8394
8395 /* Returns TRUE iff INST is an instantiation we don't need to do in an
8396    ill-formed translation unit, i.e. a variable or function that isn't
8397    usable in a constant expression.  */
8398
8399 static inline bool
8400 neglectable_inst_p (tree d)
8401 {
8402   return (DECL_P (d)
8403           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
8404                : decl_maybe_constant_var_p (d)));
8405 }
8406
8407 /* Returns TRUE iff we should refuse to instantiate DECL because it's
8408    neglectable and instantiated from within an erroneous instantiation.  */
8409
8410 static bool
8411 limit_bad_template_recursion (tree decl)
8412 {
8413   struct tinst_level *lev = current_tinst_level;
8414   int errs = errorcount + sorrycount;
8415   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
8416     return false;
8417
8418   for (; lev; lev = lev->next)
8419     if (neglectable_inst_p (lev->decl))
8420       break;
8421
8422   return (lev && errs > lev->errors);
8423 }
8424
8425 static int tinst_depth;
8426 extern int max_tinst_depth;
8427 int depth_reached;
8428
8429 static GTY(()) struct tinst_level *last_error_tinst_level;
8430
8431 /* We're starting to instantiate D; record the template instantiation context
8432    for diagnostics and to restore it later.  */
8433
8434 bool
8435 push_tinst_level (tree d)
8436 {
8437   return push_tinst_level_loc (d, input_location);
8438 }
8439
8440 /* We're starting to instantiate D; record the template instantiation context
8441    at LOC for diagnostics and to restore it later.  */
8442
8443 bool
8444 push_tinst_level_loc (tree d, location_t loc)
8445 {
8446   struct tinst_level *new_level;
8447
8448   if (tinst_depth >= max_tinst_depth)
8449     {
8450       fatal_error (input_location,
8451                    "template instantiation depth exceeds maximum of %d"
8452                    " (use -ftemplate-depth= to increase the maximum)",
8453                    max_tinst_depth);
8454       return false;
8455     }
8456
8457   /* If the current instantiation caused problems, don't let it instantiate
8458      anything else.  Do allow deduction substitution and decls usable in
8459      constant expressions.  */
8460   if (limit_bad_template_recursion (d))
8461     return false;
8462
8463   new_level = ggc_alloc<tinst_level> ();
8464   new_level->decl = d;
8465   new_level->locus = loc;
8466   new_level->errors = errorcount+sorrycount;
8467   new_level->in_system_header_p = in_system_header_at (input_location);
8468   new_level->next = current_tinst_level;
8469   current_tinst_level = new_level;
8470
8471   ++tinst_depth;
8472   if (GATHER_STATISTICS && (tinst_depth > depth_reached))
8473     depth_reached = tinst_depth;
8474
8475   return true;
8476 }
8477
8478 /* We're done instantiating this template; return to the instantiation
8479    context.  */
8480
8481 void
8482 pop_tinst_level (void)
8483 {
8484   /* Restore the filename and line number stashed away when we started
8485      this instantiation.  */
8486   input_location = current_tinst_level->locus;
8487   current_tinst_level = current_tinst_level->next;
8488   --tinst_depth;
8489 }
8490
8491 /* We're instantiating a deferred template; restore the template
8492    instantiation context in which the instantiation was requested, which
8493    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
8494
8495 static tree
8496 reopen_tinst_level (struct tinst_level *level)
8497 {
8498   struct tinst_level *t;
8499
8500   tinst_depth = 0;
8501   for (t = level; t; t = t->next)
8502     ++tinst_depth;
8503
8504   current_tinst_level = level;
8505   pop_tinst_level ();
8506   if (current_tinst_level)
8507     current_tinst_level->errors = errorcount+sorrycount;
8508   return level->decl;
8509 }
8510
8511 /* Returns the TINST_LEVEL which gives the original instantiation
8512    context.  */
8513
8514 struct tinst_level *
8515 outermost_tinst_level (void)
8516 {
8517   struct tinst_level *level = current_tinst_level;
8518   if (level)
8519     while (level->next)
8520       level = level->next;
8521   return level;
8522 }
8523
8524 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
8525    vector of template arguments, as for tsubst.
8526
8527    Returns an appropriate tsubst'd friend declaration.  */
8528
8529 static tree
8530 tsubst_friend_function (tree decl, tree args)
8531 {
8532   tree new_friend;
8533
8534   if (TREE_CODE (decl) == FUNCTION_DECL
8535       && DECL_TEMPLATE_INSTANTIATION (decl)
8536       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
8537     /* This was a friend declared with an explicit template
8538        argument list, e.g.:
8539
8540        friend void f<>(T);
8541
8542        to indicate that f was a template instantiation, not a new
8543        function declaration.  Now, we have to figure out what
8544        instantiation of what template.  */
8545     {
8546       tree template_id, arglist, fns;
8547       tree new_args;
8548       tree tmpl;
8549       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
8550
8551       /* Friend functions are looked up in the containing namespace scope.
8552          We must enter that scope, to avoid finding member functions of the
8553          current class with same name.  */
8554       push_nested_namespace (ns);
8555       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
8556                          tf_warning_or_error, NULL_TREE,
8557                          /*integral_constant_expression_p=*/false);
8558       pop_nested_namespace (ns);
8559       arglist = tsubst (DECL_TI_ARGS (decl), args,
8560                         tf_warning_or_error, NULL_TREE);
8561       template_id = lookup_template_function (fns, arglist);
8562
8563       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8564       tmpl = determine_specialization (template_id, new_friend,
8565                                        &new_args,
8566                                        /*need_member_template=*/0,
8567                                        TREE_VEC_LENGTH (args),
8568                                        tsk_none);
8569       return instantiate_template (tmpl, new_args, tf_error);
8570     }
8571
8572   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
8573
8574   /* The NEW_FRIEND will look like an instantiation, to the
8575      compiler, but is not an instantiation from the point of view of
8576      the language.  For example, we might have had:
8577
8578      template <class T> struct S {
8579        template <class U> friend void f(T, U);
8580      };
8581
8582      Then, in S<int>, template <class U> void f(int, U) is not an
8583      instantiation of anything.  */
8584   if (new_friend == error_mark_node)
8585     return error_mark_node;
8586
8587   DECL_USE_TEMPLATE (new_friend) = 0;
8588   if (TREE_CODE (decl) == TEMPLATE_DECL)
8589     {
8590       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
8591       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
8592         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
8593     }
8594
8595   /* The mangled name for the NEW_FRIEND is incorrect.  The function
8596      is not a template instantiation and should not be mangled like
8597      one.  Therefore, we forget the mangling here; we'll recompute it
8598      later if we need it.  */
8599   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
8600     {
8601       SET_DECL_RTL (new_friend, NULL);
8602       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
8603     }
8604
8605   if (DECL_NAMESPACE_SCOPE_P (new_friend))
8606     {
8607       tree old_decl;
8608       tree new_friend_template_info;
8609       tree new_friend_result_template_info;
8610       tree ns;
8611       int  new_friend_is_defn;
8612
8613       /* We must save some information from NEW_FRIEND before calling
8614          duplicate decls since that function will free NEW_FRIEND if
8615          possible.  */
8616       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
8617       new_friend_is_defn =
8618             (DECL_INITIAL (DECL_TEMPLATE_RESULT
8619                            (template_for_substitution (new_friend)))
8620              != NULL_TREE);
8621       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
8622         {
8623           /* This declaration is a `primary' template.  */
8624           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8625
8626           new_friend_result_template_info
8627             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8628         }
8629       else
8630         new_friend_result_template_info = NULL_TREE;
8631
8632       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8633       if (new_friend_is_defn)
8634         DECL_INITIAL (new_friend) = error_mark_node;
8635
8636       /* Inside pushdecl_namespace_level, we will push into the
8637          current namespace. However, the friend function should go
8638          into the namespace of the template.  */
8639       ns = decl_namespace_context (new_friend);
8640       push_nested_namespace (ns);
8641       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8642       pop_nested_namespace (ns);
8643
8644       if (old_decl == error_mark_node)
8645         return error_mark_node;
8646
8647       if (old_decl != new_friend)
8648         {
8649           /* This new friend declaration matched an existing
8650              declaration.  For example, given:
8651
8652                template <class T> void f(T);
8653                template <class U> class C {
8654                  template <class T> friend void f(T) {}
8655                };
8656
8657              the friend declaration actually provides the definition
8658              of `f', once C has been instantiated for some type.  So,
8659              old_decl will be the out-of-class template declaration,
8660              while new_friend is the in-class definition.
8661
8662              But, if `f' was called before this point, the
8663              instantiation of `f' will have DECL_TI_ARGS corresponding
8664              to `T' but not to `U', references to which might appear
8665              in the definition of `f'.  Previously, the most general
8666              template for an instantiation of `f' was the out-of-class
8667              version; now it is the in-class version.  Therefore, we
8668              run through all specialization of `f', adding to their
8669              DECL_TI_ARGS appropriately.  In particular, they need a
8670              new set of outer arguments, corresponding to the
8671              arguments for this class instantiation.
8672
8673              The same situation can arise with something like this:
8674
8675                friend void f(int);
8676                template <class T> class C {
8677                  friend void f(T) {}
8678                };
8679
8680              when `C<int>' is instantiated.  Now, `f(int)' is defined
8681              in the class.  */
8682
8683           if (!new_friend_is_defn)
8684             /* On the other hand, if the in-class declaration does
8685                *not* provide a definition, then we don't want to alter
8686                existing definitions.  We can just leave everything
8687                alone.  */
8688             ;
8689           else
8690             {
8691               tree new_template = TI_TEMPLATE (new_friend_template_info);
8692               tree new_args = TI_ARGS (new_friend_template_info);
8693
8694               /* Overwrite whatever template info was there before, if
8695                  any, with the new template information pertaining to
8696                  the declaration.  */
8697               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8698
8699               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8700                 {
8701                   /* We should have called reregister_specialization in
8702                      duplicate_decls.  */
8703                   gcc_assert (retrieve_specialization (new_template,
8704                                                        new_args, 0)
8705                               == old_decl);
8706
8707                   /* Instantiate it if the global has already been used.  */
8708                   if (DECL_ODR_USED (old_decl))
8709                     instantiate_decl (old_decl, /*defer_ok=*/true,
8710                                       /*expl_inst_class_mem_p=*/false);
8711                 }
8712               else
8713                 {
8714                   tree t;
8715
8716                   /* Indicate that the old function template is a partial
8717                      instantiation.  */
8718                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8719                     = new_friend_result_template_info;
8720
8721                   gcc_assert (new_template
8722                               == most_general_template (new_template));
8723                   gcc_assert (new_template != old_decl);
8724
8725                   /* Reassign any specializations already in the hash table
8726                      to the new more general template, and add the
8727                      additional template args.  */
8728                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8729                        t != NULL_TREE;
8730                        t = TREE_CHAIN (t))
8731                     {
8732                       tree spec = TREE_VALUE (t);
8733                       spec_entry elt;
8734
8735                       elt.tmpl = old_decl;
8736                       elt.args = DECL_TI_ARGS (spec);
8737                       elt.spec = NULL_TREE;
8738
8739                       decl_specializations->remove_elt (&elt);
8740
8741                       DECL_TI_ARGS (spec)
8742                         = add_outermost_template_args (new_args,
8743                                                        DECL_TI_ARGS (spec));
8744
8745                       register_specialization
8746                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8747
8748                     }
8749                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8750                 }
8751             }
8752
8753           /* The information from NEW_FRIEND has been merged into OLD_DECL
8754              by duplicate_decls.  */
8755           new_friend = old_decl;
8756         }
8757     }
8758   else
8759     {
8760       tree context = DECL_CONTEXT (new_friend);
8761       bool dependent_p;
8762
8763       /* In the code
8764            template <class T> class C {
8765              template <class U> friend void C1<U>::f (); // case 1
8766              friend void C2<T>::f ();                    // case 2
8767            };
8768          we only need to make sure CONTEXT is a complete type for
8769          case 2.  To distinguish between the two cases, we note that
8770          CONTEXT of case 1 remains dependent type after tsubst while
8771          this isn't true for case 2.  */
8772       ++processing_template_decl;
8773       dependent_p = dependent_type_p (context);
8774       --processing_template_decl;
8775
8776       if (!dependent_p
8777           && !complete_type_or_else (context, NULL_TREE))
8778         return error_mark_node;
8779
8780       if (COMPLETE_TYPE_P (context))
8781         {
8782           tree fn = new_friend;
8783           /* do_friend adds the TEMPLATE_DECL for any member friend
8784              template even if it isn't a member template, i.e.
8785                template <class T> friend A<T>::f();
8786              Look through it in that case.  */
8787           if (TREE_CODE (fn) == TEMPLATE_DECL
8788               && !PRIMARY_TEMPLATE_P (fn))
8789             fn = DECL_TEMPLATE_RESULT (fn);
8790           /* Check to see that the declaration is really present, and,
8791              possibly obtain an improved declaration.  */
8792           fn = check_classfn (context, fn, NULL_TREE);
8793
8794           if (fn)
8795             new_friend = fn;
8796         }
8797     }
8798
8799   return new_friend;
8800 }
8801
8802 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8803    template arguments, as for tsubst.
8804
8805    Returns an appropriate tsubst'd friend type or error_mark_node on
8806    failure.  */
8807
8808 static tree
8809 tsubst_friend_class (tree friend_tmpl, tree args)
8810 {
8811   tree friend_type;
8812   tree tmpl;
8813   tree context;
8814
8815   if (DECL_TEMPLATE_TEMPLATE_PARM_P (friend_tmpl))
8816     {
8817       tree t = tsubst (TREE_TYPE (friend_tmpl), args, tf_none, NULL_TREE);
8818       return TREE_TYPE (t);
8819     }
8820
8821   context = CP_DECL_CONTEXT (friend_tmpl);
8822
8823   if (context != global_namespace)
8824     {
8825       if (TREE_CODE (context) == NAMESPACE_DECL)
8826         push_nested_namespace (context);
8827       else
8828         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8829     }
8830
8831   /* Look for a class template declaration.  We look for hidden names
8832      because two friend declarations of the same template are the
8833      same.  For example, in:
8834
8835        struct A { 
8836          template <typename> friend class F;
8837        };
8838        template <typename> struct B { 
8839          template <typename> friend class F;
8840        };
8841
8842      both F templates are the same.  */
8843   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8844                            /*block_p=*/true, 0, LOOKUP_HIDDEN);
8845
8846   /* But, if we don't find one, it might be because we're in a
8847      situation like this:
8848
8849        template <class T>
8850        struct S {
8851          template <class U>
8852          friend struct S;
8853        };
8854
8855      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8856      for `S<int>', not the TEMPLATE_DECL.  */
8857   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8858     {
8859       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8860       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8861     }
8862
8863   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8864     {
8865       /* The friend template has already been declared.  Just
8866          check to see that the declarations match, and install any new
8867          default parameters.  We must tsubst the default parameters,
8868          of course.  We only need the innermost template parameters
8869          because that is all that redeclare_class_template will look
8870          at.  */
8871       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8872           > TMPL_ARGS_DEPTH (args))
8873         {
8874           tree parms;
8875           location_t saved_input_location;
8876           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8877                                          args, tf_warning_or_error);
8878
8879           saved_input_location = input_location;
8880           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8881           redeclare_class_template (TREE_TYPE (tmpl), parms);
8882           input_location = saved_input_location;
8883           
8884         }
8885
8886       friend_type = TREE_TYPE (tmpl);
8887     }
8888   else
8889     {
8890       /* The friend template has not already been declared.  In this
8891          case, the instantiation of the template class will cause the
8892          injection of this template into the global scope.  */
8893       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8894       if (tmpl == error_mark_node)
8895         return error_mark_node;
8896
8897       /* The new TMPL is not an instantiation of anything, so we
8898          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8899          the new type because that is supposed to be the corresponding
8900          template decl, i.e., TMPL.  */
8901       DECL_USE_TEMPLATE (tmpl) = 0;
8902       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8903       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8904       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8905         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8906
8907       /* Inject this template into the global scope.  */
8908       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8909     }
8910
8911   if (context != global_namespace)
8912     {
8913       if (TREE_CODE (context) == NAMESPACE_DECL)
8914         pop_nested_namespace (context);
8915       else
8916         pop_nested_class ();
8917     }
8918
8919   return friend_type;
8920 }
8921
8922 /* Returns zero if TYPE cannot be completed later due to circularity.
8923    Otherwise returns one.  */
8924
8925 static int
8926 can_complete_type_without_circularity (tree type)
8927 {
8928   if (type == NULL_TREE || type == error_mark_node)
8929     return 0;
8930   else if (COMPLETE_TYPE_P (type))
8931     return 1;
8932   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8933     return can_complete_type_without_circularity (TREE_TYPE (type));
8934   else if (CLASS_TYPE_P (type)
8935            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8936     return 0;
8937   else
8938     return 1;
8939 }
8940
8941 static tree tsubst_omp_clauses (tree, bool, tree, tsubst_flags_t, tree);
8942
8943 /* Apply any attributes which had to be deferred until instantiation
8944    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8945    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8946
8947 static void
8948 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8949                                 tree args, tsubst_flags_t complain, tree in_decl)
8950 {
8951   tree last_dep = NULL_TREE;
8952   tree t;
8953   tree *p;
8954
8955   for (t = attributes; t; t = TREE_CHAIN (t))
8956     if (ATTR_IS_DEPENDENT (t))
8957       {
8958         last_dep = t;
8959         attributes = copy_list (attributes);
8960         break;
8961       }
8962
8963   if (DECL_P (*decl_p))
8964     {
8965       if (TREE_TYPE (*decl_p) == error_mark_node)
8966         return;
8967       p = &DECL_ATTRIBUTES (*decl_p);
8968     }
8969   else
8970     p = &TYPE_ATTRIBUTES (*decl_p);
8971
8972   if (last_dep)
8973     {
8974       tree late_attrs = NULL_TREE;
8975       tree *q = &late_attrs;
8976
8977       for (*p = attributes; *p; )
8978         {
8979           t = *p;
8980           if (ATTR_IS_DEPENDENT (t))
8981             {
8982               *p = TREE_CHAIN (t);
8983               TREE_CHAIN (t) = NULL_TREE;
8984               if ((flag_openmp || flag_cilkplus)
8985                   && is_attribute_p ("omp declare simd",
8986                                      get_attribute_name (t))
8987                   && TREE_VALUE (t))
8988                 {
8989                   tree clauses = TREE_VALUE (TREE_VALUE (t));
8990                   clauses = tsubst_omp_clauses (clauses, true, args,
8991                                                 complain, in_decl);
8992                   c_omp_declare_simd_clauses_to_decls (*decl_p, clauses);
8993                   clauses = finish_omp_clauses (clauses);
8994                   tree parms = DECL_ARGUMENTS (*decl_p);
8995                   clauses
8996                     = c_omp_declare_simd_clauses_to_numbers (parms, clauses);
8997                   if (clauses)
8998                     TREE_VALUE (TREE_VALUE (t)) = clauses;
8999                   else
9000                     TREE_VALUE (t) = NULL_TREE;
9001                 }
9002               /* If the first attribute argument is an identifier, don't
9003                  pass it through tsubst.  Attributes like mode, format,
9004                  cleanup and several target specific attributes expect it
9005                  unmodified.  */
9006               else if (attribute_takes_identifier_p (get_attribute_name (t))
9007                        && TREE_VALUE (t))
9008                 {
9009                   tree chain
9010                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
9011                                    in_decl,
9012                                    /*integral_constant_expression_p=*/false);
9013                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
9014                     TREE_VALUE (t)
9015                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
9016                                    chain);
9017                 }
9018               else
9019                 TREE_VALUE (t)
9020                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
9021                                  /*integral_constant_expression_p=*/false);
9022               *q = t;
9023               q = &TREE_CHAIN (t);
9024             }
9025           else
9026             p = &TREE_CHAIN (t);
9027         }
9028
9029       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
9030     }
9031 }
9032
9033 /* Perform (or defer) access check for typedefs that were referenced
9034    from within the template TMPL code.
9035    This is a subroutine of instantiate_decl and instantiate_class_template.
9036    TMPL is the template to consider and TARGS is the list of arguments of
9037    that template.  */
9038
9039 static void
9040 perform_typedefs_access_check (tree tmpl, tree targs)
9041 {
9042   location_t saved_location;
9043   unsigned i;
9044   qualified_typedef_usage_t *iter;
9045
9046   if (!tmpl
9047       || (!CLASS_TYPE_P (tmpl)
9048           && TREE_CODE (tmpl) != FUNCTION_DECL))
9049     return;
9050
9051   saved_location = input_location;
9052   FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (tmpl), i, iter)
9053     {
9054       tree type_decl = iter->typedef_decl;
9055       tree type_scope = iter->context;
9056
9057       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
9058         continue;
9059
9060       if (uses_template_parms (type_decl))
9061         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
9062       if (uses_template_parms (type_scope))
9063         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
9064
9065       /* Make access check error messages point to the location
9066          of the use of the typedef.  */
9067       input_location = iter->locus;
9068       perform_or_defer_access_check (TYPE_BINFO (type_scope),
9069                                      type_decl, type_decl,
9070                                      tf_warning_or_error);
9071     }
9072     input_location = saved_location;
9073 }
9074
9075 static tree
9076 instantiate_class_template_1 (tree type)
9077 {
9078   tree templ, args, pattern, t, member;
9079   tree typedecl;
9080   tree pbinfo;
9081   tree base_list;
9082   unsigned int saved_maximum_field_alignment;
9083   tree fn_context;
9084
9085   if (type == error_mark_node)
9086     return error_mark_node;
9087
9088   if (COMPLETE_OR_OPEN_TYPE_P (type)
9089       || uses_template_parms (type))
9090     return type;
9091
9092   /* Figure out which template is being instantiated.  */
9093   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
9094   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
9095
9096   /* Determine what specialization of the original template to
9097      instantiate.  */
9098   t = most_specialized_partial_spec (type, tf_warning_or_error);
9099   if (t == error_mark_node)
9100     {
9101       TYPE_BEING_DEFINED (type) = 1;
9102       return error_mark_node;
9103     }
9104   else if (t)
9105     {
9106       /* This TYPE is actually an instantiation of a partial
9107          specialization.  We replace the innermost set of ARGS with
9108          the arguments appropriate for substitution.  For example,
9109          given:
9110
9111            template <class T> struct S {};
9112            template <class T> struct S<T*> {};
9113
9114          and supposing that we are instantiating S<int*>, ARGS will
9115          presently be {int*} -- but we need {int}.  */
9116       pattern = TREE_TYPE (t);
9117       args = TREE_PURPOSE (t);
9118     }
9119   else
9120     {
9121       pattern = TREE_TYPE (templ);
9122       args = CLASSTYPE_TI_ARGS (type);
9123     }
9124
9125   /* If the template we're instantiating is incomplete, then clearly
9126      there's nothing we can do.  */
9127   if (!COMPLETE_TYPE_P (pattern))
9128     return type;
9129
9130   /* If we've recursively instantiated too many templates, stop.  */
9131   if (! push_tinst_level (type))
9132     return type;
9133
9134   /* Now we're really doing the instantiation.  Mark the type as in
9135      the process of being defined.  */
9136   TYPE_BEING_DEFINED (type) = 1;
9137
9138   /* We may be in the middle of deferred access check.  Disable
9139      it now.  */
9140   push_deferring_access_checks (dk_no_deferred);
9141
9142   fn_context = decl_function_context (TYPE_MAIN_DECL (type));
9143   /* Also avoid push_to_top_level for a lambda in an NSDMI.  */
9144   if (!fn_context && LAMBDA_TYPE_P (type) && TYPE_CLASS_SCOPE_P (type))
9145     fn_context = error_mark_node;
9146   if (!fn_context)
9147     push_to_top_level ();
9148   /* Use #pragma pack from the template context.  */
9149   saved_maximum_field_alignment = maximum_field_alignment;
9150   maximum_field_alignment = TYPE_PRECISION (pattern);
9151
9152   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
9153
9154   /* Set the input location to the most specialized template definition.
9155      This is needed if tsubsting causes an error.  */
9156   typedecl = TYPE_MAIN_DECL (pattern);
9157   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
9158     DECL_SOURCE_LOCATION (typedecl);
9159
9160   TYPE_PACKED (type) = TYPE_PACKED (pattern);
9161   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
9162   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
9163   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
9164   if (ANON_AGGR_TYPE_P (pattern))
9165     SET_ANON_AGGR_TYPE_P (type);
9166   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
9167     {
9168       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
9169       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
9170       /* Adjust visibility for template arguments.  */
9171       determine_visibility (TYPE_MAIN_DECL (type));
9172     }
9173   if (CLASS_TYPE_P (type))
9174     CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
9175
9176   pbinfo = TYPE_BINFO (pattern);
9177
9178   /* We should never instantiate a nested class before its enclosing
9179      class; we need to look up the nested class by name before we can
9180      instantiate it, and that lookup should instantiate the enclosing
9181      class.  */
9182   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
9183               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
9184
9185   base_list = NULL_TREE;
9186   if (BINFO_N_BASE_BINFOS (pbinfo))
9187     {
9188       tree pbase_binfo;
9189       tree pushed_scope;
9190       int i;
9191
9192       /* We must enter the scope containing the type, as that is where
9193          the accessibility of types named in dependent bases are
9194          looked up from.  */
9195       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
9196
9197       /* Substitute into each of the bases to determine the actual
9198          basetypes.  */
9199       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
9200         {
9201           tree base;
9202           tree access = BINFO_BASE_ACCESS (pbinfo, i);
9203           tree expanded_bases = NULL_TREE;
9204           int idx, len = 1;
9205
9206           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
9207             {
9208               expanded_bases = 
9209                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
9210                                        args, tf_error, NULL_TREE);
9211               if (expanded_bases == error_mark_node)
9212                 continue;
9213
9214               len = TREE_VEC_LENGTH (expanded_bases);
9215             }
9216
9217           for (idx = 0; idx < len; idx++)
9218             {
9219               if (expanded_bases)
9220                 /* Extract the already-expanded base class.  */
9221                 base = TREE_VEC_ELT (expanded_bases, idx);
9222               else
9223                 /* Substitute to figure out the base class.  */
9224                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
9225                                NULL_TREE);
9226
9227               if (base == error_mark_node)
9228                 continue;
9229
9230               base_list = tree_cons (access, base, base_list);
9231               if (BINFO_VIRTUAL_P (pbase_binfo))
9232                 TREE_TYPE (base_list) = integer_type_node;
9233             }
9234         }
9235
9236       /* The list is now in reverse order; correct that.  */
9237       base_list = nreverse (base_list);
9238
9239       if (pushed_scope)
9240         pop_scope (pushed_scope);
9241     }
9242   /* Now call xref_basetypes to set up all the base-class
9243      information.  */
9244   xref_basetypes (type, base_list);
9245
9246   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
9247                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
9248                                   args, tf_error, NULL_TREE);
9249   fixup_attribute_variants (type);
9250
9251   /* Now that our base classes are set up, enter the scope of the
9252      class, so that name lookups into base classes, etc. will work
9253      correctly.  This is precisely analogous to what we do in
9254      begin_class_definition when defining an ordinary non-template
9255      class, except we also need to push the enclosing classes.  */
9256   push_nested_class (type);
9257
9258   /* Now members are processed in the order of declaration.  */
9259   for (member = CLASSTYPE_DECL_LIST (pattern);
9260        member; member = TREE_CHAIN (member))
9261     {
9262       tree t = TREE_VALUE (member);
9263
9264       if (TREE_PURPOSE (member))
9265         {
9266           if (TYPE_P (t))
9267             {
9268               /* Build new CLASSTYPE_NESTED_UTDS.  */
9269
9270               tree newtag;
9271               bool class_template_p;
9272
9273               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
9274                                   && TYPE_LANG_SPECIFIC (t)
9275                                   && CLASSTYPE_IS_TEMPLATE (t));
9276               /* If the member is a class template, then -- even after
9277                  substitution -- there may be dependent types in the
9278                  template argument list for the class.  We increment
9279                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
9280                  that function will assume that no types are dependent
9281                  when outside of a template.  */
9282               if (class_template_p)
9283                 ++processing_template_decl;
9284               newtag = tsubst (t, args, tf_error, NULL_TREE);
9285               if (class_template_p)
9286                 --processing_template_decl;
9287               if (newtag == error_mark_node)
9288                 continue;
9289
9290               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
9291                 {
9292                   tree name = TYPE_IDENTIFIER (t);
9293
9294                   if (class_template_p)
9295                     /* Unfortunately, lookup_template_class sets
9296                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
9297                        instantiation (i.e., for the type of a member
9298                        template class nested within a template class.)
9299                        This behavior is required for
9300                        maybe_process_partial_specialization to work
9301                        correctly, but is not accurate in this case;
9302                        the TAG is not an instantiation of anything.
9303                        (The corresponding TEMPLATE_DECL is an
9304                        instantiation, but the TYPE is not.) */
9305                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
9306
9307                   /* Now, we call pushtag to put this NEWTAG into the scope of
9308                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
9309                      pushtag calling push_template_decl.  We don't have to do
9310                      this for enums because it will already have been done in
9311                      tsubst_enum.  */
9312                   if (name)
9313                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
9314                   pushtag (name, newtag, /*tag_scope=*/ts_current);
9315                 }
9316             }
9317           else if (DECL_DECLARES_FUNCTION_P (t))
9318             {
9319               /* Build new TYPE_METHODS.  */
9320               tree r;
9321
9322               if (TREE_CODE (t) == TEMPLATE_DECL)
9323                 ++processing_template_decl;
9324               r = tsubst (t, args, tf_error, NULL_TREE);
9325               if (TREE_CODE (t) == TEMPLATE_DECL)
9326                 --processing_template_decl;
9327               set_current_access_from_decl (r);
9328               finish_member_declaration (r);
9329               /* Instantiate members marked with attribute used.  */
9330               if (r != error_mark_node && DECL_PRESERVE_P (r))
9331                 mark_used (r);
9332               if (TREE_CODE (r) == FUNCTION_DECL
9333                   && DECL_OMP_DECLARE_REDUCTION_P (r))
9334                 cp_check_omp_declare_reduction (r);
9335             }
9336           else if (DECL_CLASS_TEMPLATE_P (t)
9337                    && LAMBDA_TYPE_P (TREE_TYPE (t)))
9338             /* A closure type for a lambda in a default argument for a
9339                member template.  Ignore it; it will be instantiated with
9340                the default argument.  */;
9341           else
9342             {
9343               /* Build new TYPE_FIELDS.  */
9344               if (TREE_CODE (t) == STATIC_ASSERT)
9345                 {
9346                   tree condition;
9347  
9348                   ++c_inhibit_evaluation_warnings;
9349                   condition =
9350                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
9351                                  tf_warning_or_error, NULL_TREE,
9352                                  /*integral_constant_expression_p=*/true);
9353                   --c_inhibit_evaluation_warnings;
9354
9355                   finish_static_assert (condition,
9356                                         STATIC_ASSERT_MESSAGE (t), 
9357                                         STATIC_ASSERT_SOURCE_LOCATION (t),
9358                                         /*member_p=*/true);
9359                 }
9360               else if (TREE_CODE (t) != CONST_DECL)
9361                 {
9362                   tree r;
9363                   tree vec = NULL_TREE;
9364                   int len = 1;
9365
9366                   /* The file and line for this declaration, to
9367                      assist in error message reporting.  Since we
9368                      called push_tinst_level above, we don't need to
9369                      restore these.  */
9370                   input_location = DECL_SOURCE_LOCATION (t);
9371
9372                   if (TREE_CODE (t) == TEMPLATE_DECL)
9373                     ++processing_template_decl;
9374                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
9375                   if (TREE_CODE (t) == TEMPLATE_DECL)
9376                     --processing_template_decl;
9377
9378                   if (TREE_CODE (r) == TREE_VEC)
9379                     {
9380                       /* A capture pack became multiple fields.  */
9381                       vec = r;
9382                       len = TREE_VEC_LENGTH (vec);
9383                     }
9384
9385                   for (int i = 0; i < len; ++i)
9386                     {
9387                       if (vec)
9388                         r = TREE_VEC_ELT (vec, i);
9389                       if (VAR_P (r))
9390                         {
9391                           /* In [temp.inst]:
9392
9393                              [t]he initialization (and any associated
9394                              side-effects) of a static data member does
9395                              not occur unless the static data member is
9396                              itself used in a way that requires the
9397                              definition of the static data member to
9398                              exist.
9399
9400                              Therefore, we do not substitute into the
9401                              initialized for the static data member here.  */
9402                           finish_static_data_member_decl
9403                             (r,
9404                              /*init=*/NULL_TREE,
9405                              /*init_const_expr_p=*/false,
9406                              /*asmspec_tree=*/NULL_TREE,
9407                              /*flags=*/0);
9408                           /* Instantiate members marked with attribute used. */
9409                           if (r != error_mark_node && DECL_PRESERVE_P (r))
9410                             mark_used (r);
9411                         }
9412                       else if (TREE_CODE (r) == FIELD_DECL)
9413                         {
9414                           /* Determine whether R has a valid type and can be
9415                              completed later.  If R is invalid, then its type
9416                              is replaced by error_mark_node.  */
9417                           tree rtype = TREE_TYPE (r);
9418                           if (can_complete_type_without_circularity (rtype))
9419                             complete_type (rtype);
9420
9421                           if (!COMPLETE_TYPE_P (rtype))
9422                             {
9423                               cxx_incomplete_type_error (r, rtype);
9424                               TREE_TYPE (r) = error_mark_node;
9425                             }
9426                         }
9427
9428                       /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
9429                          such a thing will already have been added to the field
9430                          list by tsubst_enum in finish_member_declaration in the
9431                          CLASSTYPE_NESTED_UTDS case above.  */
9432                       if (!(TREE_CODE (r) == TYPE_DECL
9433                             && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
9434                             && DECL_ARTIFICIAL (r)))
9435                         {
9436                           set_current_access_from_decl (r);
9437                           finish_member_declaration (r);
9438                         }
9439                     }
9440                 }
9441             }
9442         }
9443       else
9444         {
9445           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t)
9446               || DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9447             {
9448               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
9449
9450               tree friend_type = t;
9451               bool adjust_processing_template_decl = false;
9452
9453               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9454                 {
9455                   /* template <class T> friend class C;  */
9456                   friend_type = tsubst_friend_class (friend_type, args);
9457                   adjust_processing_template_decl = true;
9458                 }
9459               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
9460                 {
9461                   /* template <class T> friend class C::D;  */
9462                   friend_type = tsubst (friend_type, args,
9463                                         tf_warning_or_error, NULL_TREE);
9464                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
9465                     friend_type = TREE_TYPE (friend_type);
9466                   adjust_processing_template_decl = true;
9467                 }
9468               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
9469                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
9470                 {
9471                   /* This could be either
9472
9473                        friend class T::C;
9474
9475                      when dependent_type_p is false or
9476
9477                        template <class U> friend class T::C;
9478
9479                      otherwise.  */
9480                   friend_type = tsubst (friend_type, args,
9481                                         tf_warning_or_error, NULL_TREE);
9482                   /* Bump processing_template_decl for correct
9483                      dependent_type_p calculation.  */
9484                   ++processing_template_decl;
9485                   if (dependent_type_p (friend_type))
9486                     adjust_processing_template_decl = true;
9487                   --processing_template_decl;
9488                 }
9489               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
9490                        && hidden_name_p (TYPE_NAME (friend_type)))
9491                 {
9492                   /* friend class C;
9493
9494                      where C hasn't been declared yet.  Let's lookup name
9495                      from namespace scope directly, bypassing any name that
9496                      come from dependent base class.  */
9497                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
9498
9499                   /* The call to xref_tag_from_type does injection for friend
9500                      classes.  */
9501                   push_nested_namespace (ns);
9502                   friend_type =
9503                     xref_tag_from_type (friend_type, NULL_TREE,
9504                                         /*tag_scope=*/ts_current);
9505                   pop_nested_namespace (ns);
9506                 }
9507               else if (uses_template_parms (friend_type))
9508                 /* friend class C<T>;  */
9509                 friend_type = tsubst (friend_type, args,
9510                                       tf_warning_or_error, NULL_TREE);
9511               /* Otherwise it's
9512
9513                    friend class C;
9514
9515                  where C is already declared or
9516
9517                    friend class C<int>;
9518
9519                  We don't have to do anything in these cases.  */
9520
9521               if (adjust_processing_template_decl)
9522                 /* Trick make_friend_class into realizing that the friend
9523                    we're adding is a template, not an ordinary class.  It's
9524                    important that we use make_friend_class since it will
9525                    perform some error-checking and output cross-reference
9526                    information.  */
9527                 ++processing_template_decl;
9528
9529               if (friend_type != error_mark_node)
9530                 make_friend_class (type, friend_type, /*complain=*/false);
9531
9532               if (adjust_processing_template_decl)
9533                 --processing_template_decl;
9534             }
9535           else
9536             {
9537               /* Build new DECL_FRIENDLIST.  */
9538               tree r;
9539
9540               /* The file and line for this declaration, to
9541                  assist in error message reporting.  Since we
9542                  called push_tinst_level above, we don't need to
9543                  restore these.  */
9544               input_location = DECL_SOURCE_LOCATION (t);
9545
9546               if (TREE_CODE (t) == TEMPLATE_DECL)
9547                 {
9548                   ++processing_template_decl;
9549                   push_deferring_access_checks (dk_no_check);
9550                 }
9551
9552               r = tsubst_friend_function (t, args);
9553               add_friend (type, r, /*complain=*/false);
9554               if (TREE_CODE (t) == TEMPLATE_DECL)
9555                 {
9556                   pop_deferring_access_checks ();
9557                   --processing_template_decl;
9558                 }
9559             }
9560         }
9561     }
9562
9563   if (tree expr = CLASSTYPE_LAMBDA_EXPR (type))
9564     {
9565       tree decl = lambda_function (type);
9566       if (decl)
9567         {
9568           if (!DECL_TEMPLATE_INFO (decl)
9569               || DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (decl)) != decl)
9570             instantiate_decl (decl, false, false);
9571
9572           /* We need to instantiate the capture list from the template
9573              after we've instantiated the closure members, but before we
9574              consider adding the conversion op.  Also keep any captures
9575              that may have been added during instantiation of the op().  */
9576           tree tmpl_expr = CLASSTYPE_LAMBDA_EXPR (pattern);
9577           tree tmpl_cap
9578             = tsubst_copy_and_build (LAMBDA_EXPR_CAPTURE_LIST (tmpl_expr),
9579                                      args, tf_warning_or_error, NULL_TREE,
9580                                      false, false);
9581
9582           LAMBDA_EXPR_CAPTURE_LIST (expr)
9583             = chainon (tmpl_cap, nreverse (LAMBDA_EXPR_CAPTURE_LIST (expr)));
9584
9585           maybe_add_lambda_conv_op (type);
9586         }
9587       else
9588         gcc_assert (errorcount);
9589     }
9590
9591   /* Set the file and line number information to whatever is given for
9592      the class itself.  This puts error messages involving generated
9593      implicit functions at a predictable point, and the same point
9594      that would be used for non-template classes.  */
9595   input_location = DECL_SOURCE_LOCATION (typedecl);
9596
9597   unreverse_member_declarations (type);
9598   finish_struct_1 (type);
9599   TYPE_BEING_DEFINED (type) = 0;
9600
9601   /* We don't instantiate default arguments for member functions.  14.7.1:
9602
9603      The implicit instantiation of a class template specialization causes
9604      the implicit instantiation of the declarations, but not of the
9605      definitions or default arguments, of the class member functions,
9606      member classes, static data members and member templates....  */
9607
9608   /* Some typedefs referenced from within the template code need to be access
9609      checked at template instantiation time, i.e now. These types were
9610      added to the template at parsing time. Let's get those and perform
9611      the access checks then.  */
9612   perform_typedefs_access_check (pattern, args);
9613   perform_deferred_access_checks (tf_warning_or_error);
9614   pop_nested_class ();
9615   maximum_field_alignment = saved_maximum_field_alignment;
9616   if (!fn_context)
9617     pop_from_top_level ();
9618   pop_deferring_access_checks ();
9619   pop_tinst_level ();
9620
9621   /* The vtable for a template class can be emitted in any translation
9622      unit in which the class is instantiated.  When there is no key
9623      method, however, finish_struct_1 will already have added TYPE to
9624      the keyed_classes list.  */
9625   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
9626     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
9627
9628   return type;
9629 }
9630
9631 /* Wrapper for instantiate_class_template_1.  */
9632
9633 tree
9634 instantiate_class_template (tree type)
9635 {
9636   tree ret;
9637   timevar_push (TV_TEMPLATE_INST);
9638   ret = instantiate_class_template_1 (type);
9639   timevar_pop (TV_TEMPLATE_INST);
9640   return ret;
9641 }
9642
9643 static tree
9644 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9645 {
9646   tree r;
9647
9648   if (!t)
9649     r = t;
9650   else if (TYPE_P (t))
9651     r = tsubst (t, args, complain, in_decl);
9652   else
9653     {
9654       if (!(complain & tf_warning))
9655         ++c_inhibit_evaluation_warnings;
9656       r = tsubst_expr (t, args, complain, in_decl,
9657                        /*integral_constant_expression_p=*/true);
9658       if (!(complain & tf_warning))
9659         --c_inhibit_evaluation_warnings;
9660     }
9661   return r;
9662 }
9663
9664 /* Given a function parameter pack TMPL_PARM and some function parameters
9665    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
9666    and set *SPEC_P to point at the next point in the list.  */
9667
9668 static tree
9669 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
9670 {
9671   /* Collect all of the extra "packed" parameters into an
9672      argument pack.  */
9673   tree parmvec;
9674   tree parmtypevec;
9675   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
9676   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
9677   tree spec_parm = *spec_p;
9678   int i, len;
9679
9680   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
9681     if (tmpl_parm
9682         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
9683       break;
9684
9685   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
9686   parmvec = make_tree_vec (len);
9687   parmtypevec = make_tree_vec (len);
9688   spec_parm = *spec_p;
9689   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
9690     {
9691       TREE_VEC_ELT (parmvec, i) = spec_parm;
9692       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
9693     }
9694
9695   /* Build the argument packs.  */
9696   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
9697   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
9698   TREE_TYPE (argpack) = argtypepack;
9699   *spec_p = spec_parm;
9700
9701   return argpack;
9702 }
9703
9704 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
9705    NONTYPE_ARGUMENT_PACK.  */
9706
9707 static tree
9708 make_fnparm_pack (tree spec_parm)
9709 {
9710   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9711 }
9712
9713 /* Return true iff the Ith element of the argument pack ARG_PACK is a
9714    pack expansion.  */
9715
9716 static bool
9717 argument_pack_element_is_expansion_p (tree arg_pack, int i)
9718 {
9719   tree vec = ARGUMENT_PACK_ARGS (arg_pack);
9720   if (i >= TREE_VEC_LENGTH (vec))
9721     return false;
9722   return PACK_EXPANSION_P (TREE_VEC_ELT (vec, i));
9723 }
9724
9725
9726 /* Creates and return an ARGUMENT_PACK_SELECT tree node.  */
9727
9728 static tree
9729 make_argument_pack_select (tree arg_pack, unsigned index)
9730 {
9731   tree aps = make_node (ARGUMENT_PACK_SELECT);
9732
9733   ARGUMENT_PACK_SELECT_FROM_PACK (aps) = arg_pack;
9734   ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9735
9736   return aps;
9737 }
9738
9739 /*  This is a subroutine of tsubst_pack_expansion.
9740
9741     It returns TRUE if we need to use the PACK_EXPANSION_EXTRA_ARGS
9742     mechanism to store the (non complete list of) arguments of the
9743     substitution and return a non substituted pack expansion, in order
9744     to wait for when we have enough arguments to really perform the
9745     substitution.  */
9746
9747 static bool
9748 use_pack_expansion_extra_args_p (tree parm_packs,
9749                                  int arg_pack_len,
9750                                  bool has_empty_arg)
9751 {
9752   /* If one pack has an expansion and another pack has a normal
9753      argument or if one pack has an empty argument and an another
9754      one hasn't then tsubst_pack_expansion cannot perform the
9755      substitution and need to fall back on the
9756      PACK_EXPANSION_EXTRA mechanism.  */
9757   if (parm_packs == NULL_TREE)
9758     return false;
9759   else if (has_empty_arg)
9760     return true;
9761
9762   bool has_expansion_arg = false;
9763   for (int i = 0 ; i < arg_pack_len; ++i)
9764     {
9765       bool has_non_expansion_arg = false;
9766       for (tree parm_pack = parm_packs;
9767            parm_pack;
9768            parm_pack = TREE_CHAIN (parm_pack))
9769         {
9770           tree arg = TREE_VALUE (parm_pack);
9771
9772           if (argument_pack_element_is_expansion_p (arg, i))
9773             has_expansion_arg = true;
9774           else
9775             has_non_expansion_arg = true;
9776         }
9777
9778       if (has_expansion_arg && has_non_expansion_arg)
9779         return true;
9780     }
9781   return false;
9782 }
9783
9784 /* [temp.variadic]/6 says that:
9785
9786        The instantiation of a pack expansion [...]
9787        produces a list E1,E2, ..., En, where N is the number of elements
9788        in the pack expansion parameters.
9789
9790    This subroutine of tsubst_pack_expansion produces one of these Ei.
9791
9792    PATTERN is the pattern of the pack expansion.  PARM_PACKS is a
9793    TREE_LIST in which each TREE_PURPOSE is a parameter pack of
9794    PATTERN, and each TREE_VALUE is its corresponding argument pack.
9795    INDEX is the index 'i' of the element Ei to produce.  ARGS,
9796    COMPLAIN, and IN_DECL are the same parameters as for the
9797    tsubst_pack_expansion function.
9798
9799    The function returns the resulting Ei upon successful completion,
9800    or error_mark_node.
9801
9802    Note that this function possibly modifies the ARGS parameter, so
9803    it's the responsibility of the caller to restore it.  */
9804
9805 static tree
9806 gen_elem_of_pack_expansion_instantiation (tree pattern,
9807                                           tree parm_packs,
9808                                           unsigned index,
9809                                           tree args /* This parm gets
9810                                                        modified.  */,
9811                                           tsubst_flags_t complain,
9812                                           tree in_decl)
9813 {
9814   tree t;
9815   bool ith_elem_is_expansion = false;
9816
9817   /* For each parameter pack, change the substitution of the parameter
9818      pack to the ith argument in its argument pack, then expand the
9819      pattern.  */
9820   for (tree pack = parm_packs; pack; pack = TREE_CHAIN (pack))
9821     {
9822       tree parm = TREE_PURPOSE (pack);
9823       tree arg_pack = TREE_VALUE (pack);
9824       tree aps;                 /* instance of ARGUMENT_PACK_SELECT.  */
9825
9826       ith_elem_is_expansion |=
9827         argument_pack_element_is_expansion_p (arg_pack, index);
9828
9829       /* Select the Ith argument from the pack.  */
9830       if (TREE_CODE (parm) == PARM_DECL
9831           || TREE_CODE (parm) == FIELD_DECL)
9832         {
9833           if (index == 0)
9834             {
9835               aps = make_argument_pack_select (arg_pack, index);
9836               if (!mark_used (parm, complain) && !(complain & tf_error))
9837                 return error_mark_node;
9838               register_local_specialization (aps, parm);
9839             }
9840           else
9841             aps = retrieve_local_specialization (parm);
9842         }
9843       else
9844         {
9845           int idx, level;
9846           template_parm_level_and_index (parm, &level, &idx);
9847
9848           if (index == 0)
9849             {
9850               aps = make_argument_pack_select (arg_pack, index);
9851               /* Update the corresponding argument.  */
9852               TMPL_ARG (args, level, idx) = aps;
9853             }
9854           else
9855             /* Re-use the ARGUMENT_PACK_SELECT.  */
9856             aps = TMPL_ARG (args, level, idx);
9857         }
9858       ARGUMENT_PACK_SELECT_INDEX (aps) = index;
9859     }
9860
9861   /* Substitute into the PATTERN with the (possibly altered)
9862      arguments.  */
9863   if (pattern == in_decl)
9864     /* Expanding a fixed parameter pack from
9865        coerce_template_parameter_pack.  */
9866     t = tsubst_decl (pattern, args, complain);
9867   else if (!TYPE_P (pattern))
9868     t = tsubst_expr (pattern, args, complain, in_decl,
9869                      /*integral_constant_expression_p=*/false);
9870   else
9871     t = tsubst (pattern, args, complain, in_decl);
9872
9873   /*  If the Ith argument pack element is a pack expansion, then
9874       the Ith element resulting from the substituting is going to
9875       be a pack expansion as well.  */
9876   if (ith_elem_is_expansion)
9877     t = make_pack_expansion (t);
9878
9879   return t;
9880 }
9881
9882 /* Substitute ARGS into T, which is an pack expansion
9883    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9884    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9885    (if only a partial substitution could be performed) or
9886    ERROR_MARK_NODE if there was an error.  */
9887 tree
9888 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9889                        tree in_decl)
9890 {
9891   tree pattern;
9892   tree pack, packs = NULL_TREE;
9893   bool unsubstituted_packs = false;
9894   int i, len = -1;
9895   tree result;
9896   hash_map<tree, tree> *saved_local_specializations = NULL;
9897   bool need_local_specializations = false;
9898   int levels;
9899
9900   gcc_assert (PACK_EXPANSION_P (t));
9901   pattern = PACK_EXPANSION_PATTERN (t);
9902
9903   /* Add in any args remembered from an earlier partial instantiation.  */
9904   args = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (t), args);
9905
9906   levels = TMPL_ARGS_DEPTH (args);
9907
9908   /* Determine the argument packs that will instantiate the parameter
9909      packs used in the expansion expression. While we're at it,
9910      compute the number of arguments to be expanded and make sure it
9911      is consistent.  */
9912   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
9913        pack = TREE_CHAIN (pack))
9914     {
9915       tree parm_pack = TREE_VALUE (pack);
9916       tree arg_pack = NULL_TREE;
9917       tree orig_arg = NULL_TREE;
9918       int level = 0;
9919
9920       if (TREE_CODE (parm_pack) == BASES)
9921        {
9922          if (BASES_DIRECT (parm_pack))
9923            return calculate_direct_bases (tsubst_expr (BASES_TYPE (parm_pack),
9924                                                         args, complain, in_decl, false));
9925          else
9926            return calculate_bases (tsubst_expr (BASES_TYPE (parm_pack),
9927                                                  args, complain, in_decl, false));
9928        }
9929       if (TREE_CODE (parm_pack) == PARM_DECL)
9930         {
9931           if (PACK_EXPANSION_LOCAL_P (t))
9932             arg_pack = retrieve_local_specialization (parm_pack);
9933           else
9934             {
9935               /* We can't rely on local_specializations for a parameter
9936                  name used later in a function declaration (such as in a
9937                  late-specified return type).  Even if it exists, it might
9938                  have the wrong value for a recursive call.  Just make a
9939                  dummy decl, since it's only used for its type.  */
9940               arg_pack = tsubst_decl (parm_pack, args, complain);
9941               if (arg_pack && DECL_PACK_P (arg_pack))
9942                 /* Partial instantiation of the parm_pack, we can't build
9943                    up an argument pack yet.  */
9944                 arg_pack = NULL_TREE;
9945               else
9946                 arg_pack = make_fnparm_pack (arg_pack);
9947               need_local_specializations = true;
9948             }
9949         }
9950       else if (TREE_CODE (parm_pack) == FIELD_DECL)
9951         arg_pack = tsubst_copy (parm_pack, args, complain, in_decl);
9952       else
9953         {
9954           int idx;
9955           template_parm_level_and_index (parm_pack, &level, &idx);
9956
9957           if (level <= levels)
9958             arg_pack = TMPL_ARG (args, level, idx);
9959         }
9960
9961       orig_arg = arg_pack;
9962       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9963         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9964       
9965       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9966         /* This can only happen if we forget to expand an argument
9967            pack somewhere else. Just return an error, silently.  */
9968         {
9969           result = make_tree_vec (1);
9970           TREE_VEC_ELT (result, 0) = error_mark_node;
9971           return result;
9972         }
9973
9974       if (arg_pack)
9975         {
9976           int my_len = 
9977             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9978
9979           /* Don't bother trying to do a partial substitution with
9980              incomplete packs; we'll try again after deduction.  */
9981           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9982             return t;
9983
9984           if (len < 0)
9985             len = my_len;
9986           else if (len != my_len)
9987             {
9988               if (!(complain & tf_error))
9989                 /* Fail quietly.  */;
9990               else if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9991                 error ("mismatched argument pack lengths while expanding "
9992                        "%<%T%>",
9993                        pattern);
9994               else
9995                 error ("mismatched argument pack lengths while expanding "
9996                        "%<%E%>",
9997                        pattern);
9998               return error_mark_node;
9999             }
10000
10001           /* Keep track of the parameter packs and their corresponding
10002              argument packs.  */
10003           packs = tree_cons (parm_pack, arg_pack, packs);
10004           TREE_TYPE (packs) = orig_arg;
10005         }
10006       else
10007         {
10008           /* We can't substitute for this parameter pack.  We use a flag as
10009              well as the missing_level counter because function parameter
10010              packs don't have a level.  */
10011           unsubstituted_packs = true;
10012         }
10013     }
10014
10015   /* If the expansion is just T..., return the matching argument pack.  */
10016   if (!unsubstituted_packs
10017       && TREE_PURPOSE (packs) == pattern)
10018     {
10019       tree args = ARGUMENT_PACK_ARGS (TREE_VALUE (packs));
10020       if (TREE_CODE (t) == TYPE_PACK_EXPANSION
10021           || pack_expansion_args_count (args))
10022         return args;
10023       /* Otherwise use the normal path so we get convert_from_reference.  */
10024     }
10025
10026   /* We cannot expand this expansion expression, because we don't have
10027      all of the argument packs we need.  */
10028   if (use_pack_expansion_extra_args_p (packs, len, unsubstituted_packs))
10029     {
10030       /* We got some full packs, but we can't substitute them in until we
10031          have values for all the packs.  So remember these until then.  */
10032
10033       t = make_pack_expansion (pattern);
10034       PACK_EXPANSION_EXTRA_ARGS (t) = args;
10035       return t;
10036     }
10037   else if (unsubstituted_packs)
10038     {
10039       /* There were no real arguments, we're just replacing a parameter
10040          pack with another version of itself. Substitute into the
10041          pattern and return a PACK_EXPANSION_*. The caller will need to
10042          deal with that.  */
10043       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
10044         t = tsubst_expr (pattern, args, complain, in_decl,
10045                          /*integral_constant_expression_p=*/false);
10046       else
10047         t = tsubst (pattern, args, complain, in_decl);
10048       t = make_pack_expansion (t);
10049       return t;
10050     }
10051
10052   gcc_assert (len >= 0);
10053
10054   if (need_local_specializations)
10055     {
10056       /* We're in a late-specified return type, so create our own local
10057          specializations map; the current map is either NULL or (in the
10058          case of recursive unification) might have bindings that we don't
10059          want to use or alter.  */
10060       saved_local_specializations = local_specializations;
10061       local_specializations = new hash_map<tree, tree>;
10062     }
10063
10064   /* For each argument in each argument pack, substitute into the
10065      pattern.  */
10066   result = make_tree_vec (len);
10067   for (i = 0; i < len; ++i)
10068     {
10069       t = gen_elem_of_pack_expansion_instantiation (pattern, packs,
10070                                                     i,
10071                                                     args, complain,
10072                                                     in_decl);
10073       TREE_VEC_ELT (result, i) = t;
10074       if (t == error_mark_node)
10075         {
10076           result = error_mark_node;
10077           break;
10078         }
10079     }
10080
10081   /* Update ARGS to restore the substitution from parameter packs to
10082      their argument packs.  */
10083   for (pack = packs; pack; pack = TREE_CHAIN (pack))
10084     {
10085       tree parm = TREE_PURPOSE (pack);
10086
10087       if (TREE_CODE (parm) == PARM_DECL
10088           || TREE_CODE (parm) == FIELD_DECL)
10089         register_local_specialization (TREE_TYPE (pack), parm);
10090       else
10091         {
10092           int idx, level;
10093
10094           if (TREE_VALUE (pack) == NULL_TREE)
10095             continue;
10096
10097           template_parm_level_and_index (parm, &level, &idx);
10098           
10099           /* Update the corresponding argument.  */
10100           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
10101             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
10102               TREE_TYPE (pack);
10103           else
10104             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
10105         }
10106     }
10107
10108   if (need_local_specializations)
10109     {
10110       delete local_specializations;
10111       local_specializations = saved_local_specializations;
10112     }
10113   
10114   return result;
10115 }
10116
10117 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
10118    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
10119    parameter packs; all parms generated from a function parameter pack will
10120    have the same DECL_PARM_INDEX.  */
10121
10122 tree
10123 get_pattern_parm (tree parm, tree tmpl)
10124 {
10125   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
10126   tree patparm;
10127
10128   if (DECL_ARTIFICIAL (parm))
10129     {
10130       for (patparm = DECL_ARGUMENTS (pattern);
10131            patparm; patparm = DECL_CHAIN (patparm))
10132         if (DECL_ARTIFICIAL (patparm)
10133             && DECL_NAME (parm) == DECL_NAME (patparm))
10134           break;
10135     }
10136   else
10137     {
10138       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
10139       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
10140       gcc_assert (DECL_PARM_INDEX (patparm)
10141                   == DECL_PARM_INDEX (parm));
10142     }
10143
10144   return patparm;
10145 }
10146
10147 /* Substitute ARGS into the vector or list of template arguments T.  */
10148
10149 static tree
10150 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10151 {
10152   tree orig_t = t;
10153   int len, need_new = 0, i, expanded_len_adjust = 0, out;
10154   tree *elts;
10155
10156   if (t == error_mark_node)
10157     return error_mark_node;
10158
10159   len = TREE_VEC_LENGTH (t);
10160   elts = XALLOCAVEC (tree, len);
10161
10162   for (i = 0; i < len; i++)
10163     {
10164       tree orig_arg = TREE_VEC_ELT (t, i);
10165       tree new_arg;
10166
10167       if (TREE_CODE (orig_arg) == TREE_VEC)
10168         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
10169       else if (PACK_EXPANSION_P (orig_arg))
10170         {
10171           /* Substitute into an expansion expression.  */
10172           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
10173
10174           if (TREE_CODE (new_arg) == TREE_VEC)
10175             /* Add to the expanded length adjustment the number of
10176                expanded arguments. We subtract one from this
10177                measurement, because the argument pack expression
10178                itself is already counted as 1 in
10179                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
10180                the argument pack is empty.  */
10181             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
10182         }
10183       else if (ARGUMENT_PACK_P (orig_arg))
10184         {
10185           /* Substitute into each of the arguments.  */
10186           new_arg = TYPE_P (orig_arg)
10187             ? cxx_make_type (TREE_CODE (orig_arg))
10188             : make_node (TREE_CODE (orig_arg));
10189           
10190           SET_ARGUMENT_PACK_ARGS (
10191             new_arg,
10192             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
10193                                   args, complain, in_decl));
10194
10195           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
10196             new_arg = error_mark_node;
10197
10198           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
10199             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
10200                                           complain, in_decl);
10201             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
10202
10203             if (TREE_TYPE (new_arg) == error_mark_node)
10204               new_arg = error_mark_node;
10205           }
10206         }
10207       else
10208         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
10209
10210       if (new_arg == error_mark_node)
10211         return error_mark_node;
10212
10213       elts[i] = new_arg;
10214       if (new_arg != orig_arg)
10215         need_new = 1;
10216     }
10217
10218   if (!need_new)
10219     return t;
10220
10221   /* Make space for the expanded arguments coming from template
10222      argument packs.  */
10223   t = make_tree_vec (len + expanded_len_adjust);
10224   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
10225      arguments for a member template.
10226      In that case each TREE_VEC in ORIG_T represents a level of template
10227      arguments, and ORIG_T won't carry any non defaulted argument count.
10228      It will rather be the nested TREE_VECs that will carry one.
10229      In other words, ORIG_T carries a non defaulted argument count only
10230      if it doesn't contain any nested TREE_VEC.  */
10231   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
10232     {
10233       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
10234       count += expanded_len_adjust;
10235       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
10236     }
10237   for (i = 0, out = 0; i < len; i++)
10238     {
10239       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
10240            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
10241           && TREE_CODE (elts[i]) == TREE_VEC)
10242         {
10243           int idx;
10244
10245           /* Now expand the template argument pack "in place".  */
10246           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
10247             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
10248         }
10249       else
10250         {
10251           TREE_VEC_ELT (t, out) = elts[i];
10252           out++;
10253         }
10254     }
10255
10256   return t;
10257 }
10258
10259 /* Return the result of substituting ARGS into the template parameters
10260    given by PARMS.  If there are m levels of ARGS and m + n levels of
10261    PARMS, then the result will contain n levels of PARMS.  For
10262    example, if PARMS is `template <class T> template <class U>
10263    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
10264    result will be `template <int*, double, class V>'.  */
10265
10266 static tree
10267 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
10268 {
10269   tree r = NULL_TREE;
10270   tree* new_parms;
10271
10272   /* When substituting into a template, we must set
10273      PROCESSING_TEMPLATE_DECL as the template parameters may be
10274      dependent if they are based on one-another, and the dependency
10275      predicates are short-circuit outside of templates.  */
10276   ++processing_template_decl;
10277
10278   for (new_parms = &r;
10279        parms && TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
10280        new_parms = &(TREE_CHAIN (*new_parms)),
10281          parms = TREE_CHAIN (parms))
10282     {
10283       tree new_vec =
10284         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
10285       int i;
10286
10287       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
10288         {
10289           tree tuple;
10290
10291           if (parms == error_mark_node)
10292             continue;
10293
10294           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
10295
10296           if (tuple == error_mark_node)
10297             continue;
10298
10299           TREE_VEC_ELT (new_vec, i) =
10300             tsubst_template_parm (tuple, args, complain);
10301         }
10302
10303       *new_parms =
10304         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
10305                              - TMPL_ARGS_DEPTH (args)),
10306                    new_vec, NULL_TREE);
10307     }
10308
10309   --processing_template_decl;
10310
10311   return r;
10312 }
10313
10314 /* Return the result of substituting ARGS into one template parameter
10315    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
10316    parameter and which TREE_PURPOSE is the default argument of the
10317    template parameter.  */
10318
10319 static tree
10320 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
10321 {
10322   tree default_value, parm_decl;
10323
10324   if (args == NULL_TREE
10325       || t == NULL_TREE
10326       || t == error_mark_node)
10327     return t;
10328
10329   gcc_assert (TREE_CODE (t) == TREE_LIST);
10330
10331   default_value = TREE_PURPOSE (t);
10332   parm_decl = TREE_VALUE (t);
10333
10334   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
10335   if (TREE_CODE (parm_decl) == PARM_DECL
10336       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
10337     parm_decl = error_mark_node;
10338   default_value = tsubst_template_arg (default_value, args,
10339                                        complain, NULL_TREE);
10340
10341   return build_tree_list (default_value, parm_decl);
10342 }
10343
10344 /* Substitute the ARGS into the indicated aggregate (or enumeration)
10345    type T.  If T is not an aggregate or enumeration type, it is
10346    handled as if by tsubst.  IN_DECL is as for tsubst.  If
10347    ENTERING_SCOPE is nonzero, T is the context for a template which
10348    we are presently tsubst'ing.  Return the substituted value.  */
10349
10350 static tree
10351 tsubst_aggr_type (tree t,
10352                   tree args,
10353                   tsubst_flags_t complain,
10354                   tree in_decl,
10355                   int entering_scope)
10356 {
10357   if (t == NULL_TREE)
10358     return NULL_TREE;
10359
10360   switch (TREE_CODE (t))
10361     {
10362     case RECORD_TYPE:
10363       if (TYPE_PTRMEMFUNC_P (t))
10364         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
10365
10366       /* Else fall through.  */
10367     case ENUMERAL_TYPE:
10368     case UNION_TYPE:
10369       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
10370         {
10371           tree argvec;
10372           tree context;
10373           tree r;
10374           int saved_unevaluated_operand;
10375           int saved_inhibit_evaluation_warnings;
10376
10377           /* In "sizeof(X<I>)" we need to evaluate "I".  */
10378           saved_unevaluated_operand = cp_unevaluated_operand;
10379           cp_unevaluated_operand = 0;
10380           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
10381           c_inhibit_evaluation_warnings = 0;
10382
10383           /* First, determine the context for the type we are looking
10384              up.  */
10385           context = TYPE_CONTEXT (t);
10386           if (context && TYPE_P (context))
10387             {
10388               context = tsubst_aggr_type (context, args, complain,
10389                                           in_decl, /*entering_scope=*/1);
10390               /* If context is a nested class inside a class template,
10391                  it may still need to be instantiated (c++/33959).  */
10392               context = complete_type (context);
10393             }
10394
10395           /* Then, figure out what arguments are appropriate for the
10396              type we are trying to find.  For example, given:
10397
10398                template <class T> struct S;
10399                template <class T, class U> void f(T, U) { S<U> su; }
10400
10401              and supposing that we are instantiating f<int, double>,
10402              then our ARGS will be {int, double}, but, when looking up
10403              S we only want {double}.  */
10404           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
10405                                          complain, in_decl);
10406           if (argvec == error_mark_node)
10407             r = error_mark_node;
10408           else
10409             {
10410               r = lookup_template_class (t, argvec, in_decl, context,
10411                                          entering_scope, complain);
10412               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
10413             }
10414
10415           cp_unevaluated_operand = saved_unevaluated_operand;
10416           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
10417
10418           return r;
10419         }
10420       else
10421         /* This is not a template type, so there's nothing to do.  */
10422         return t;
10423
10424     default:
10425       return tsubst (t, args, complain, in_decl);
10426     }
10427 }
10428
10429 /* Substitute into the default argument ARG (a default argument for
10430    FN), which has the indicated TYPE.  */
10431
10432 tree
10433 tsubst_default_argument (tree fn, tree type, tree arg, tsubst_flags_t complain)
10434 {
10435   tree saved_class_ptr = NULL_TREE;
10436   tree saved_class_ref = NULL_TREE;
10437   int errs = errorcount + sorrycount;
10438
10439   /* This can happen in invalid code.  */
10440   if (TREE_CODE (arg) == DEFAULT_ARG)
10441     return arg;
10442
10443   /* This default argument came from a template.  Instantiate the
10444      default argument here, not in tsubst.  In the case of
10445      something like:
10446
10447        template <class T>
10448        struct S {
10449          static T t();
10450          void f(T = t());
10451        };
10452
10453      we must be careful to do name lookup in the scope of S<T>,
10454      rather than in the current class.  */
10455   push_access_scope (fn);
10456   /* The "this" pointer is not valid in a default argument.  */
10457   if (cfun)
10458     {
10459       saved_class_ptr = current_class_ptr;
10460       cp_function_chain->x_current_class_ptr = NULL_TREE;
10461       saved_class_ref = current_class_ref;
10462       cp_function_chain->x_current_class_ref = NULL_TREE;
10463     }
10464
10465   push_deferring_access_checks(dk_no_deferred);
10466   /* The default argument expression may cause implicitly defined
10467      member functions to be synthesized, which will result in garbage
10468      collection.  We must treat this situation as if we were within
10469      the body of function so as to avoid collecting live data on the
10470      stack.  */
10471   ++function_depth;
10472   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
10473                      complain, NULL_TREE,
10474                      /*integral_constant_expression_p=*/false);
10475   --function_depth;
10476   pop_deferring_access_checks();
10477
10478   /* Restore the "this" pointer.  */
10479   if (cfun)
10480     {
10481       cp_function_chain->x_current_class_ptr = saved_class_ptr;
10482       cp_function_chain->x_current_class_ref = saved_class_ref;
10483     }
10484
10485   if (errorcount+sorrycount > errs
10486       && (complain & tf_warning_or_error))
10487     inform (input_location,
10488             "  when instantiating default argument for call to %D", fn);
10489
10490   /* Make sure the default argument is reasonable.  */
10491   arg = check_default_argument (type, arg, complain);
10492
10493   pop_access_scope (fn);
10494
10495   return arg;
10496 }
10497
10498 /* Substitute into all the default arguments for FN.  */
10499
10500 static void
10501 tsubst_default_arguments (tree fn, tsubst_flags_t complain)
10502 {
10503   tree arg;
10504   tree tmpl_args;
10505
10506   tmpl_args = DECL_TI_ARGS (fn);
10507
10508   /* If this function is not yet instantiated, we certainly don't need
10509      its default arguments.  */
10510   if (uses_template_parms (tmpl_args))
10511     return;
10512   /* Don't do this again for clones.  */
10513   if (DECL_CLONED_FUNCTION_P (fn))
10514     return;
10515
10516   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
10517        arg;
10518        arg = TREE_CHAIN (arg))
10519     if (TREE_PURPOSE (arg))
10520       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
10521                                                     TREE_VALUE (arg),
10522                                                     TREE_PURPOSE (arg),
10523                                                     complain);
10524 }
10525
10526 /* Substitute the ARGS into the T, which is a _DECL.  Return the
10527    result of the substitution.  Issue error and warning messages under
10528    control of COMPLAIN.  */
10529
10530 static tree
10531 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
10532 {
10533 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
10534   location_t saved_loc;
10535   tree r = NULL_TREE;
10536   tree in_decl = t;
10537   hashval_t hash = 0;
10538
10539   /* Set the filename and linenumber to improve error-reporting.  */
10540   saved_loc = input_location;
10541   input_location = DECL_SOURCE_LOCATION (t);
10542
10543   switch (TREE_CODE (t))
10544     {
10545     case TEMPLATE_DECL:
10546       {
10547         /* We can get here when processing a member function template,
10548            member class template, or template template parameter.  */
10549         tree decl = DECL_TEMPLATE_RESULT (t);
10550         tree spec;
10551         tree tmpl_args;
10552         tree full_args;
10553
10554         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
10555           {
10556             /* Template template parameter is treated here.  */
10557             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10558             if (new_type == error_mark_node)
10559               RETURN (error_mark_node);
10560             /* If we get a real template back, return it.  This can happen in
10561                the context of most_specialized_partial_spec.  */
10562             if (TREE_CODE (new_type) == TEMPLATE_DECL)
10563               return new_type;
10564
10565             r = copy_decl (t);
10566             DECL_CHAIN (r) = NULL_TREE;
10567             TREE_TYPE (r) = new_type;
10568             DECL_TEMPLATE_RESULT (r)
10569               = build_decl (DECL_SOURCE_LOCATION (decl),
10570                             TYPE_DECL, DECL_NAME (decl), new_type);
10571             DECL_TEMPLATE_PARMS (r)
10572               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10573                                        complain);
10574             TYPE_NAME (new_type) = r;
10575             break;
10576           }
10577
10578         /* We might already have an instance of this template.
10579            The ARGS are for the surrounding class type, so the
10580            full args contain the tsubst'd args for the context,
10581            plus the innermost args from the template decl.  */
10582         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
10583           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
10584           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
10585         /* Because this is a template, the arguments will still be
10586            dependent, even after substitution.  If
10587            PROCESSING_TEMPLATE_DECL is not set, the dependency
10588            predicates will short-circuit.  */
10589         ++processing_template_decl;
10590         full_args = tsubst_template_args (tmpl_args, args,
10591                                           complain, in_decl);
10592         --processing_template_decl;
10593         if (full_args == error_mark_node)
10594           RETURN (error_mark_node);
10595
10596         /* If this is a default template template argument,
10597            tsubst might not have changed anything.  */
10598         if (full_args == tmpl_args)
10599           RETURN (t);
10600
10601         hash = hash_tmpl_and_args (t, full_args);
10602         spec = retrieve_specialization (t, full_args, hash);
10603         if (spec != NULL_TREE)
10604           {
10605             r = spec;
10606             break;
10607           }
10608
10609         /* Make a new template decl.  It will be similar to the
10610            original, but will record the current template arguments.
10611            We also create a new function declaration, which is just
10612            like the old one, but points to this new template, rather
10613            than the old one.  */
10614         r = copy_decl (t);
10615         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
10616         DECL_CHAIN (r) = NULL_TREE;
10617
10618         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
10619
10620         if (TREE_CODE (decl) == TYPE_DECL
10621             && !TYPE_DECL_ALIAS_P (decl))
10622           {
10623             tree new_type;
10624             ++processing_template_decl;
10625             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10626             --processing_template_decl;
10627             if (new_type == error_mark_node)
10628               RETURN (error_mark_node);
10629
10630             TREE_TYPE (r) = new_type;
10631             /* For a partial specialization, we need to keep pointing to
10632                the primary template.  */
10633             if (!DECL_TEMPLATE_SPECIALIZATION (t))
10634               CLASSTYPE_TI_TEMPLATE (new_type) = r;
10635             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
10636             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
10637             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
10638           }
10639         else
10640           {
10641             tree new_decl;
10642             ++processing_template_decl;
10643             new_decl = tsubst (decl, args, complain, in_decl);
10644             --processing_template_decl;
10645             if (new_decl == error_mark_node)
10646               RETURN (error_mark_node);
10647
10648             DECL_TEMPLATE_RESULT (r) = new_decl;
10649             DECL_TI_TEMPLATE (new_decl) = r;
10650             TREE_TYPE (r) = TREE_TYPE (new_decl);
10651             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
10652             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
10653           }
10654
10655         SET_DECL_IMPLICIT_INSTANTIATION (r);
10656         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
10657         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
10658
10659         /* The template parameters for this new template are all the
10660            template parameters for the old template, except the
10661            outermost level of parameters.  */
10662         DECL_TEMPLATE_PARMS (r)
10663           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
10664                                    complain);
10665
10666         if (PRIMARY_TEMPLATE_P (t))
10667           DECL_PRIMARY_TEMPLATE (r) = r;
10668
10669         if (TREE_CODE (decl) != TYPE_DECL && TREE_CODE (decl) != VAR_DECL)
10670           /* Record this non-type partial instantiation.  */
10671           register_specialization (r, t,
10672                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
10673                                    false, hash);
10674       }
10675       break;
10676
10677     case FUNCTION_DECL:
10678       {
10679         tree ctx;
10680         tree argvec = NULL_TREE;
10681         tree *friends;
10682         tree gen_tmpl;
10683         tree type;
10684         int member;
10685         int args_depth;
10686         int parms_depth;
10687
10688         /* Nobody should be tsubst'ing into non-template functions.  */
10689         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
10690
10691         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
10692           {
10693             tree spec;
10694             bool dependent_p;
10695
10696             /* If T is not dependent, just return it.  We have to
10697                increment PROCESSING_TEMPLATE_DECL because
10698                value_dependent_expression_p assumes that nothing is
10699                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
10700             ++processing_template_decl;
10701             dependent_p = value_dependent_expression_p (t);
10702             --processing_template_decl;
10703             if (!dependent_p)
10704               RETURN (t);
10705
10706             /* Calculate the most general template of which R is a
10707                specialization, and the complete set of arguments used to
10708                specialize R.  */
10709             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
10710             argvec = tsubst_template_args (DECL_TI_ARGS
10711                                           (DECL_TEMPLATE_RESULT
10712                                                  (DECL_TI_TEMPLATE (t))),
10713                                            args, complain, in_decl);
10714             if (argvec == error_mark_node)
10715               RETURN (error_mark_node);
10716
10717             /* Check to see if we already have this specialization.  */
10718             hash = hash_tmpl_and_args (gen_tmpl, argvec);
10719             spec = retrieve_specialization (gen_tmpl, argvec, hash);
10720
10721             if (spec)
10722               {
10723                 r = spec;
10724                 break;
10725               }
10726
10727             /* We can see more levels of arguments than parameters if
10728                there was a specialization of a member template, like
10729                this:
10730
10731                  template <class T> struct S { template <class U> void f(); }
10732                  template <> template <class U> void S<int>::f(U);
10733
10734                Here, we'll be substituting into the specialization,
10735                because that's where we can find the code we actually
10736                want to generate, but we'll have enough arguments for
10737                the most general template.
10738
10739                We also deal with the peculiar case:
10740
10741                  template <class T> struct S {
10742                    template <class U> friend void f();
10743                  };
10744                  template <class U> void f() {}
10745                  template S<int>;
10746                  template void f<double>();
10747
10748                Here, the ARGS for the instantiation of will be {int,
10749                double}.  But, we only need as many ARGS as there are
10750                levels of template parameters in CODE_PATTERN.  We are
10751                careful not to get fooled into reducing the ARGS in
10752                situations like:
10753
10754                  template <class T> struct S { template <class U> void f(U); }
10755                  template <class T> template <> void S<T>::f(int) {}
10756
10757                which we can spot because the pattern will be a
10758                specialization in this case.  */
10759             args_depth = TMPL_ARGS_DEPTH (args);
10760             parms_depth =
10761               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
10762             if (args_depth > parms_depth
10763                 && !DECL_TEMPLATE_SPECIALIZATION (t))
10764               args = get_innermost_template_args (args, parms_depth);
10765           }
10766         else
10767           {
10768             /* This special case arises when we have something like this:
10769
10770                  template <class T> struct S {
10771                    friend void f<int>(int, double);
10772                  };
10773
10774                Here, the DECL_TI_TEMPLATE for the friend declaration
10775                will be an IDENTIFIER_NODE.  We are being called from
10776                tsubst_friend_function, and we want only to create a
10777                new decl (R) with appropriate types so that we can call
10778                determine_specialization.  */
10779             gen_tmpl = NULL_TREE;
10780           }
10781
10782         if (DECL_CLASS_SCOPE_P (t))
10783           {
10784             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
10785               member = 2;
10786             else
10787               member = 1;
10788             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
10789                                     complain, t, /*entering_scope=*/1);
10790           }
10791         else
10792           {
10793             member = 0;
10794             ctx = DECL_CONTEXT (t);
10795           }
10796         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10797         if (type == error_mark_node)
10798           RETURN (error_mark_node);
10799
10800         /* If we hit excessive deduction depth, the type is bogus even if
10801            it isn't error_mark_node, so don't build a decl.  */
10802         if (excessive_deduction_depth)
10803           RETURN (error_mark_node);
10804
10805         /* We do NOT check for matching decls pushed separately at this
10806            point, as they may not represent instantiations of this
10807            template, and in any case are considered separate under the
10808            discrete model.  */
10809         r = copy_decl (t);
10810         DECL_USE_TEMPLATE (r) = 0;
10811         TREE_TYPE (r) = type;
10812         /* Clear out the mangled name and RTL for the instantiation.  */
10813         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10814         SET_DECL_RTL (r, NULL);
10815         /* Leave DECL_INITIAL set on deleted instantiations.  */
10816         if (!DECL_DELETED_FN (r))
10817           DECL_INITIAL (r) = NULL_TREE;
10818         DECL_CONTEXT (r) = ctx;
10819
10820         /* OpenMP UDRs have the only argument a reference to the declared
10821            type.  We want to diagnose if the declared type is a reference,
10822            which is invalid, but as references to references are usually
10823            quietly merged, diagnose it here.  */
10824         if (DECL_OMP_DECLARE_REDUCTION_P (t))
10825           {
10826             tree argtype
10827               = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (t))));
10828             argtype = tsubst (argtype, args, complain, in_decl);
10829             if (TREE_CODE (argtype) == REFERENCE_TYPE)
10830               error_at (DECL_SOURCE_LOCATION (t),
10831                         "reference type %qT in "
10832                         "%<#pragma omp declare reduction%>", argtype);
10833             if (strchr (IDENTIFIER_POINTER (DECL_NAME (t)), '~') == NULL)
10834               DECL_NAME (r) = omp_reduction_id (ERROR_MARK, DECL_NAME (t),
10835                                                 argtype);
10836           }
10837
10838         if (member && DECL_CONV_FN_P (r))
10839           /* Type-conversion operator.  Reconstruct the name, in
10840              case it's the name of one of the template's parameters.  */
10841           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
10842
10843         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
10844                                      complain, t);
10845         DECL_RESULT (r) = NULL_TREE;
10846
10847         TREE_STATIC (r) = 0;
10848         TREE_PUBLIC (r) = TREE_PUBLIC (t);
10849         DECL_EXTERNAL (r) = 1;
10850         /* If this is an instantiation of a function with internal
10851            linkage, we already know what object file linkage will be
10852            assigned to the instantiation.  */
10853         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
10854         DECL_DEFER_OUTPUT (r) = 0;
10855         DECL_CHAIN (r) = NULL_TREE;
10856         DECL_PENDING_INLINE_INFO (r) = 0;
10857         DECL_PENDING_INLINE_P (r) = 0;
10858         DECL_SAVED_TREE (r) = NULL_TREE;
10859         DECL_STRUCT_FUNCTION (r) = NULL;
10860         TREE_USED (r) = 0;
10861         /* We'll re-clone as appropriate in instantiate_template.  */
10862         DECL_CLONED_FUNCTION (r) = NULL_TREE;
10863
10864         /* If we aren't complaining now, return on error before we register
10865            the specialization so that we'll complain eventually.  */
10866         if ((complain & tf_error) == 0
10867             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10868             && !grok_op_properties (r, /*complain=*/false))
10869           RETURN (error_mark_node);
10870
10871         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10872            this in the special friend case mentioned above where
10873            GEN_TMPL is NULL.  */
10874         if (gen_tmpl)
10875           {
10876             DECL_TEMPLATE_INFO (r)
10877               = build_template_info (gen_tmpl, argvec);
10878             SET_DECL_IMPLICIT_INSTANTIATION (r);
10879
10880             tree new_r
10881               = register_specialization (r, gen_tmpl, argvec, false, hash);
10882             if (new_r != r)
10883               /* We instantiated this while substituting into
10884                  the type earlier (template/friend54.C).  */
10885               RETURN (new_r);
10886
10887             /* We're not supposed to instantiate default arguments
10888                until they are called, for a template.  But, for a
10889                declaration like:
10890
10891                  template <class T> void f ()
10892                  { extern void g(int i = T()); }
10893
10894                we should do the substitution when the template is
10895                instantiated.  We handle the member function case in
10896                instantiate_class_template since the default arguments
10897                might refer to other members of the class.  */
10898             if (!member
10899                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10900                 && !uses_template_parms (argvec))
10901               tsubst_default_arguments (r, complain);
10902           }
10903         else
10904           DECL_TEMPLATE_INFO (r) = NULL_TREE;
10905
10906         /* Copy the list of befriending classes.  */
10907         for (friends = &DECL_BEFRIENDING_CLASSES (r);
10908              *friends;
10909              friends = &TREE_CHAIN (*friends))
10910           {
10911             *friends = copy_node (*friends);
10912             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10913                                             args, complain,
10914                                             in_decl);
10915           }
10916
10917         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10918           {
10919             maybe_retrofit_in_chrg (r);
10920             if (DECL_CONSTRUCTOR_P (r))
10921               grok_ctor_properties (ctx, r);
10922             if (DECL_INHERITED_CTOR_BASE (r))
10923               deduce_inheriting_ctor (r);
10924             /* If this is an instantiation of a member template, clone it.
10925                If it isn't, that'll be handled by
10926                clone_constructors_and_destructors.  */
10927             if (PRIMARY_TEMPLATE_P (gen_tmpl))
10928               clone_function_decl (r, /*update_method_vec_p=*/0);
10929           }
10930         else if ((complain & tf_error) != 0
10931                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10932                  && !grok_op_properties (r, /*complain=*/true))
10933           RETURN (error_mark_node);
10934
10935         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10936           SET_DECL_FRIEND_CONTEXT (r,
10937                                    tsubst (DECL_FRIEND_CONTEXT (t),
10938                                             args, complain, in_decl));
10939
10940         /* Possibly limit visibility based on template args.  */
10941         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10942         if (DECL_VISIBILITY_SPECIFIED (t))
10943           {
10944             DECL_VISIBILITY_SPECIFIED (r) = 0;
10945             DECL_ATTRIBUTES (r)
10946               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10947           }
10948         determine_visibility (r);
10949         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10950             && !processing_template_decl)
10951           defaulted_late_check (r);
10952
10953         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10954                                         args, complain, in_decl);
10955       }
10956       break;
10957
10958     case PARM_DECL:
10959       {
10960         tree type = NULL_TREE;
10961         int i, len = 1;
10962         tree expanded_types = NULL_TREE;
10963         tree prev_r = NULL_TREE;
10964         tree first_r = NULL_TREE;
10965
10966         if (DECL_PACK_P (t))
10967           {
10968             /* If there is a local specialization that isn't a
10969                parameter pack, it means that we're doing a "simple"
10970                substitution from inside tsubst_pack_expansion. Just
10971                return the local specialization (which will be a single
10972                parm).  */
10973             tree spec = retrieve_local_specialization (t);
10974             if (spec 
10975                 && TREE_CODE (spec) == PARM_DECL
10976                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10977               RETURN (spec);
10978
10979             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10980                the parameters in this function parameter pack.  */
10981             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10982                                                     complain, in_decl);
10983             if (TREE_CODE (expanded_types) == TREE_VEC)
10984               {
10985                 len = TREE_VEC_LENGTH (expanded_types);
10986
10987                 /* Zero-length parameter packs are boring. Just substitute
10988                    into the chain.  */
10989                 if (len == 0)
10990                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10991                                   TREE_CHAIN (t)));
10992               }
10993             else
10994               {
10995                 /* All we did was update the type. Make a note of that.  */
10996                 type = expanded_types;
10997                 expanded_types = NULL_TREE;
10998               }
10999           }
11000
11001         /* Loop through all of the parameters we'll build. When T is
11002            a function parameter pack, LEN is the number of expanded
11003            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
11004         r = NULL_TREE;
11005         for (i = 0; i < len; ++i)
11006           {
11007             prev_r = r;
11008             r = copy_node (t);
11009             if (DECL_TEMPLATE_PARM_P (t))
11010               SET_DECL_TEMPLATE_PARM_P (r);
11011
11012             if (expanded_types)
11013               /* We're on the Ith parameter of the function parameter
11014                  pack.  */
11015               {
11016                 /* Get the Ith type.  */
11017                 type = TREE_VEC_ELT (expanded_types, i);
11018
11019                 /* Rename the parameter to include the index.  */
11020                 DECL_NAME (r)
11021                   = make_ith_pack_parameter_name (DECL_NAME (r), i);
11022               }
11023             else if (!type)
11024               /* We're dealing with a normal parameter.  */
11025               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11026
11027             type = type_decays_to (type);
11028             TREE_TYPE (r) = type;
11029             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11030
11031             if (DECL_INITIAL (r))
11032               {
11033                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
11034                   DECL_INITIAL (r) = TREE_TYPE (r);
11035                 else
11036                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
11037                                              complain, in_decl);
11038               }
11039
11040             DECL_CONTEXT (r) = NULL_TREE;
11041
11042             if (!DECL_TEMPLATE_PARM_P (r))
11043               DECL_ARG_TYPE (r) = type_passed_as (type);
11044
11045             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
11046                                             args, complain, in_decl);
11047
11048             /* Keep track of the first new parameter we
11049                generate. That's what will be returned to the
11050                caller.  */
11051             if (!first_r)
11052               first_r = r;
11053
11054             /* Build a proper chain of parameters when substituting
11055                into a function parameter pack.  */
11056             if (prev_r)
11057               DECL_CHAIN (prev_r) = r;
11058           }
11059
11060         /* If cp_unevaluated_operand is set, we're just looking for a
11061            single dummy parameter, so don't keep going.  */
11062         if (DECL_CHAIN (t) && !cp_unevaluated_operand)
11063           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
11064                                    complain, DECL_CHAIN (t));
11065
11066         /* FIRST_R contains the start of the chain we've built.  */
11067         r = first_r;
11068       }
11069       break;
11070
11071     case FIELD_DECL:
11072       {
11073         tree type = NULL_TREE;
11074         tree vec = NULL_TREE;
11075         tree expanded_types = NULL_TREE;
11076         int len = 1;
11077
11078         if (PACK_EXPANSION_P (TREE_TYPE (t)))
11079           {
11080             /* This field is a lambda capture pack.  Return a TREE_VEC of
11081                the expanded fields to instantiate_class_template_1 and
11082                store them in the specializations hash table as a
11083                NONTYPE_ARGUMENT_PACK so that tsubst_copy can find them.  */
11084             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
11085                                                     complain, in_decl);
11086             if (TREE_CODE (expanded_types) == TREE_VEC)
11087               {
11088                 len = TREE_VEC_LENGTH (expanded_types);
11089                 vec = make_tree_vec (len);
11090               }
11091             else
11092               {
11093                 /* All we did was update the type. Make a note of that.  */
11094                 type = expanded_types;
11095                 expanded_types = NULL_TREE;
11096               }
11097           }
11098
11099         for (int i = 0; i < len; ++i)
11100           {
11101             r = copy_decl (t);
11102             if (expanded_types)
11103               {
11104                 type = TREE_VEC_ELT (expanded_types, i);
11105                 DECL_NAME (r)
11106                   = make_ith_pack_parameter_name (DECL_NAME (r), i);
11107               }
11108             else if (!type)
11109               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11110
11111             if (type == error_mark_node)
11112               RETURN (error_mark_node);
11113             TREE_TYPE (r) = type;
11114             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11115
11116             if (DECL_C_BIT_FIELD (r))
11117               /* For bit-fields, DECL_INITIAL gives the number of bits.  For
11118                  non-bit-fields DECL_INITIAL is a non-static data member
11119                  initializer, which gets deferred instantiation.  */
11120               DECL_INITIAL (r)
11121                 = tsubst_expr (DECL_INITIAL (t), args,
11122                                complain, in_decl,
11123                                /*integral_constant_expression_p=*/true);
11124             else if (DECL_INITIAL (t))
11125               {
11126                 /* Set up DECL_TEMPLATE_INFO so that we can get at the
11127                    NSDMI in perform_member_init.  Still set DECL_INITIAL
11128                    so that we know there is one.  */
11129                 DECL_INITIAL (r) = void_node;
11130                 gcc_assert (DECL_LANG_SPECIFIC (r) == NULL);
11131                 retrofit_lang_decl (r);
11132                 DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
11133               }
11134             /* We don't have to set DECL_CONTEXT here; it is set by
11135                finish_member_declaration.  */
11136             DECL_CHAIN (r) = NULL_TREE;
11137
11138             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
11139                                             args, complain, in_decl);
11140
11141             if (vec)
11142               TREE_VEC_ELT (vec, i) = r;
11143           }
11144
11145         if (vec)
11146           {
11147             r = vec;
11148             tree pack = make_node (NONTYPE_ARGUMENT_PACK);
11149             tree tpack = cxx_make_type (TYPE_ARGUMENT_PACK);
11150             SET_ARGUMENT_PACK_ARGS (pack, vec);
11151             SET_ARGUMENT_PACK_ARGS (tpack, expanded_types);
11152             TREE_TYPE (pack) = tpack;
11153             register_specialization (pack, t, args, false, 0);
11154           }
11155       }
11156       break;
11157
11158     case USING_DECL:
11159       /* We reach here only for member using decls.  We also need to check
11160          uses_template_parms because DECL_DEPENDENT_P is not set for a
11161          using-declaration that designates a member of the current
11162          instantiation (c++/53549).  */
11163       if (DECL_DEPENDENT_P (t)
11164           || uses_template_parms (USING_DECL_SCOPE (t)))
11165         {
11166           tree inst_scope = tsubst_copy (USING_DECL_SCOPE (t), args,
11167                                          complain, in_decl);
11168           tree name = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
11169           r = do_class_using_decl (inst_scope, name);
11170           if (!r)
11171             r = error_mark_node;
11172           else
11173             {
11174               TREE_PROTECTED (r) = TREE_PROTECTED (t);
11175               TREE_PRIVATE (r) = TREE_PRIVATE (t);
11176             }
11177         }
11178       else
11179         {
11180           r = copy_node (t);
11181           DECL_CHAIN (r) = NULL_TREE;
11182         }
11183       break;
11184
11185     case TYPE_DECL:
11186     case VAR_DECL:
11187       {
11188         tree argvec = NULL_TREE;
11189         tree gen_tmpl = NULL_TREE;
11190         tree spec;
11191         tree tmpl = NULL_TREE;
11192         tree ctx;
11193         tree type = NULL_TREE;
11194         bool local_p;
11195
11196         if (TREE_TYPE (t) == error_mark_node)
11197           RETURN (error_mark_node);
11198
11199         if (TREE_CODE (t) == TYPE_DECL
11200             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
11201           {
11202             /* If this is the canonical decl, we don't have to
11203                mess with instantiations, and often we can't (for
11204                typename, template type parms and such).  Note that
11205                TYPE_NAME is not correct for the above test if
11206                we've copied the type for a typedef.  */
11207             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11208             if (type == error_mark_node)
11209               RETURN (error_mark_node);
11210             r = TYPE_NAME (type);
11211             break;
11212           }
11213
11214         /* Check to see if we already have the specialization we
11215            need.  */
11216         spec = NULL_TREE;
11217         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
11218           {
11219             /* T is a static data member or namespace-scope entity.
11220                We have to substitute into namespace-scope variables
11221                (even though such entities are never templates) because
11222                of cases like:
11223                
11224                  template <class T> void f() { extern T t; }
11225
11226                where the entity referenced is not known until
11227                instantiation time.  */
11228             local_p = false;
11229             ctx = DECL_CONTEXT (t);
11230             if (DECL_CLASS_SCOPE_P (t))
11231               {
11232                 ctx = tsubst_aggr_type (ctx, args,
11233                                         complain,
11234                                         in_decl, /*entering_scope=*/1);
11235                 /* If CTX is unchanged, then T is in fact the
11236                    specialization we want.  That situation occurs when
11237                    referencing a static data member within in its own
11238                    class.  We can use pointer equality, rather than
11239                    same_type_p, because DECL_CONTEXT is always
11240                    canonical...  */
11241                 if (ctx == DECL_CONTEXT (t)
11242                     /* ... unless T is a member template; in which
11243                        case our caller can be willing to create a
11244                        specialization of that template represented
11245                        by T.  */
11246                     && !(DECL_TI_TEMPLATE (t)
11247                          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (t))))
11248                   spec = t;
11249               }
11250
11251             if (!spec)
11252               {
11253                 tmpl = DECL_TI_TEMPLATE (t);
11254                 gen_tmpl = most_general_template (tmpl);
11255                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
11256                 if (argvec == error_mark_node)
11257                   RETURN (error_mark_node);
11258                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
11259                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
11260               }
11261           }
11262         else
11263           {
11264             /* A local variable.  */
11265             local_p = true;
11266             /* Subsequent calls to pushdecl will fill this in.  */
11267             ctx = NULL_TREE;
11268             spec = retrieve_local_specialization (t);
11269           }
11270         /* If we already have the specialization we need, there is
11271            nothing more to do.  */ 
11272         if (spec)
11273           {
11274             r = spec;
11275             break;
11276           }
11277
11278         /* Create a new node for the specialization we need.  */
11279         r = copy_decl (t);
11280         if (type == NULL_TREE)
11281           {
11282             if (is_typedef_decl (t))
11283               type = DECL_ORIGINAL_TYPE (t);
11284             else
11285               type = TREE_TYPE (t);
11286             if (VAR_P (t)
11287                 && VAR_HAD_UNKNOWN_BOUND (t)
11288                 && type != error_mark_node)
11289               type = strip_array_domain (type);
11290             type = tsubst (type, args, complain, in_decl);
11291           }
11292         if (VAR_P (r))
11293           {
11294             /* Even if the original location is out of scope, the
11295                newly substituted one is not.  */
11296             DECL_DEAD_FOR_LOCAL (r) = 0;
11297             DECL_INITIALIZED_P (r) = 0;
11298             DECL_TEMPLATE_INSTANTIATED (r) = 0;
11299             if (type == error_mark_node)
11300               RETURN (error_mark_node);
11301             if (TREE_CODE (type) == FUNCTION_TYPE)
11302               {
11303                 /* It may seem that this case cannot occur, since:
11304
11305                    typedef void f();
11306                    void g() { f x; }
11307
11308                    declares a function, not a variable.  However:
11309       
11310                    typedef void f();
11311                    template <typename T> void g() { T t; }
11312                    template void g<f>();
11313
11314                    is an attempt to declare a variable with function
11315                    type.  */
11316                 error ("variable %qD has function type",
11317                        /* R is not yet sufficiently initialized, so we
11318                           just use its name.  */
11319                        DECL_NAME (r));
11320                 RETURN (error_mark_node);
11321               }
11322             type = complete_type (type);
11323             /* Wait until cp_finish_decl to set this again, to handle
11324                circular dependency (template/instantiate6.C). */
11325             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
11326             type = check_var_type (DECL_NAME (r), type);
11327
11328             if (DECL_HAS_VALUE_EXPR_P (t))
11329               {
11330                 tree ve = DECL_VALUE_EXPR (t);
11331                 ve = tsubst_expr (ve, args, complain, in_decl,
11332                                   /*constant_expression_p=*/false);
11333                 if (REFERENCE_REF_P (ve))
11334                   {
11335                     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
11336                     ve = TREE_OPERAND (ve, 0);
11337                   }
11338                 SET_DECL_VALUE_EXPR (r, ve);
11339               }
11340             if (TREE_STATIC (r) || DECL_EXTERNAL (r))
11341               set_decl_tls_model (r, decl_tls_model (t));
11342           }
11343         else if (DECL_SELF_REFERENCE_P (t))
11344           SET_DECL_SELF_REFERENCE_P (r);
11345         TREE_TYPE (r) = type;
11346         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
11347         DECL_CONTEXT (r) = ctx;
11348         /* Clear out the mangled name and RTL for the instantiation.  */
11349         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
11350         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11351           SET_DECL_RTL (r, NULL);
11352         /* The initializer must not be expanded until it is required;
11353            see [temp.inst].  */
11354         DECL_INITIAL (r) = NULL_TREE;
11355         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
11356           SET_DECL_RTL (r, NULL);
11357         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
11358         if (VAR_P (r))
11359           {
11360             /* Possibly limit visibility based on template args.  */
11361             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
11362             if (DECL_VISIBILITY_SPECIFIED (t))
11363               {
11364                 DECL_VISIBILITY_SPECIFIED (r) = 0;
11365                 DECL_ATTRIBUTES (r)
11366                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
11367               }
11368             determine_visibility (r);
11369           }
11370
11371         if (!local_p)
11372           {
11373             /* A static data member declaration is always marked
11374                external when it is declared in-class, even if an
11375                initializer is present.  We mimic the non-template
11376                processing here.  */
11377             DECL_EXTERNAL (r) = 1;
11378
11379             register_specialization (r, gen_tmpl, argvec, false, hash);
11380             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
11381             SET_DECL_IMPLICIT_INSTANTIATION (r);
11382           }
11383         else if (!cp_unevaluated_operand)
11384           register_local_specialization (r, t);
11385
11386         DECL_CHAIN (r) = NULL_TREE;
11387
11388         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
11389                                         /*flags=*/0,
11390                                         args, complain, in_decl);
11391
11392         /* Preserve a typedef that names a type.  */
11393         if (is_typedef_decl (r))
11394           {
11395             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
11396             set_underlying_type (r);
11397           }
11398
11399         layout_decl (r, 0);
11400       }
11401       break;
11402
11403     default:
11404       gcc_unreachable ();
11405     }
11406 #undef RETURN
11407
11408  out:
11409   /* Restore the file and line information.  */
11410   input_location = saved_loc;
11411
11412   return r;
11413 }
11414
11415 /* Substitute into the ARG_TYPES of a function type.
11416    If END is a TREE_CHAIN, leave it and any following types
11417    un-substituted.  */
11418
11419 static tree
11420 tsubst_arg_types (tree arg_types,
11421                   tree args,
11422                   tree end,
11423                   tsubst_flags_t complain,
11424                   tree in_decl)
11425 {
11426   tree remaining_arg_types;
11427   tree type = NULL_TREE;
11428   int i = 1;
11429   tree expanded_args = NULL_TREE;
11430   tree default_arg;
11431
11432   if (!arg_types || arg_types == void_list_node || arg_types == end)
11433     return arg_types;
11434
11435   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
11436                                           args, end, complain, in_decl);
11437   if (remaining_arg_types == error_mark_node)
11438     return error_mark_node;
11439
11440   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
11441     {
11442       /* For a pack expansion, perform substitution on the
11443          entire expression. Later on, we'll handle the arguments
11444          one-by-one.  */
11445       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
11446                                             args, complain, in_decl);
11447
11448       if (TREE_CODE (expanded_args) == TREE_VEC)
11449         /* So that we'll spin through the parameters, one by one.  */
11450         i = TREE_VEC_LENGTH (expanded_args);
11451       else
11452         {
11453           /* We only partially substituted into the parameter
11454              pack. Our type is TYPE_PACK_EXPANSION.  */
11455           type = expanded_args;
11456           expanded_args = NULL_TREE;
11457         }
11458     }
11459
11460   while (i > 0) {
11461     --i;
11462     
11463     if (expanded_args)
11464       type = TREE_VEC_ELT (expanded_args, i);
11465     else if (!type)
11466       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
11467
11468     if (type == error_mark_node)
11469       return error_mark_node;
11470     if (VOID_TYPE_P (type))
11471       {
11472         if (complain & tf_error)
11473           {
11474             error ("invalid parameter type %qT", type);
11475             if (in_decl)
11476               error ("in declaration %q+D", in_decl);
11477           }
11478         return error_mark_node;
11479     }
11480     /* DR 657. */
11481     if (abstract_virtuals_error_sfinae (ACU_PARM, type, complain))
11482       return error_mark_node;
11483     
11484     /* Do array-to-pointer, function-to-pointer conversion, and ignore
11485        top-level qualifiers as required.  */
11486     type = cv_unqualified (type_decays_to (type));
11487
11488     /* We do not substitute into default arguments here.  The standard
11489        mandates that they be instantiated only when needed, which is
11490        done in build_over_call.  */
11491     default_arg = TREE_PURPOSE (arg_types);
11492
11493     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
11494       {
11495         /* We've instantiated a template before its default arguments
11496            have been parsed.  This can happen for a nested template
11497            class, and is not an error unless we require the default
11498            argument in a call of this function.  */
11499         remaining_arg_types = 
11500           tree_cons (default_arg, type, remaining_arg_types);
11501         vec_safe_push (DEFARG_INSTANTIATIONS(default_arg), remaining_arg_types);
11502       }
11503     else
11504       remaining_arg_types = 
11505         hash_tree_cons (default_arg, type, remaining_arg_types);
11506   }
11507         
11508   return remaining_arg_types;
11509 }
11510
11511 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
11512    *not* handle the exception-specification for FNTYPE, because the
11513    initial substitution of explicitly provided template parameters
11514    during argument deduction forbids substitution into the
11515    exception-specification:
11516
11517      [temp.deduct]
11518
11519      All references in the function type of the function template to  the
11520      corresponding template parameters are replaced by the specified tem-
11521      plate argument values.  If a substitution in a template parameter or
11522      in  the function type of the function template results in an invalid
11523      type, type deduction fails.  [Note: The equivalent  substitution  in
11524      exception specifications is done only when the function is instanti-
11525      ated, at which point a program is  ill-formed  if  the  substitution
11526      results in an invalid type.]  */
11527
11528 static tree
11529 tsubst_function_type (tree t,
11530                       tree args,
11531                       tsubst_flags_t complain,
11532                       tree in_decl)
11533 {
11534   tree return_type;
11535   tree arg_types = NULL_TREE;
11536   tree fntype;
11537
11538   /* The TYPE_CONTEXT is not used for function/method types.  */
11539   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
11540
11541   /* DR 1227: Mixing immediate and non-immediate contexts in deduction
11542      failure.  */
11543   bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (t);
11544
11545   if (late_return_type_p)
11546     {
11547       /* Substitute the argument types.  */
11548       arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11549                                     complain, in_decl);
11550       if (arg_types == error_mark_node)
11551         return error_mark_node;
11552
11553       tree save_ccp = current_class_ptr;
11554       tree save_ccr = current_class_ref;
11555       tree this_type = (TREE_CODE (t) == METHOD_TYPE
11556                         ? TREE_TYPE (TREE_VALUE (arg_types)) : NULL_TREE);
11557       bool do_inject = this_type && CLASS_TYPE_P (this_type);
11558       if (do_inject)
11559         {
11560           /* DR 1207: 'this' is in scope in the trailing return type.  */
11561           inject_this_parameter (this_type, cp_type_quals (this_type));
11562         }
11563
11564       /* Substitute the return type.  */
11565       return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11566
11567       if (do_inject)
11568         {
11569           current_class_ptr = save_ccp;
11570           current_class_ref = save_ccr;
11571         }
11572     }
11573   else
11574     /* Substitute the return type.  */
11575     return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
11576
11577   if (return_type == error_mark_node)
11578     return error_mark_node;
11579   /* DR 486 clarifies that creation of a function type with an
11580      invalid return type is a deduction failure.  */
11581   if (TREE_CODE (return_type) == ARRAY_TYPE
11582       || TREE_CODE (return_type) == FUNCTION_TYPE)
11583     {
11584       if (complain & tf_error)
11585         {
11586           if (TREE_CODE (return_type) == ARRAY_TYPE)
11587             error ("function returning an array");
11588           else
11589             error ("function returning a function");
11590         }
11591       return error_mark_node;
11592     }
11593   /* And DR 657. */
11594   if (abstract_virtuals_error_sfinae (ACU_RETURN, return_type, complain))
11595     return error_mark_node;
11596
11597   if (!late_return_type_p)
11598     {
11599       /* Substitute the argument types.  */
11600       arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
11601                                     complain, in_decl);
11602       if (arg_types == error_mark_node)
11603         return error_mark_node;
11604     }
11605
11606   /* Construct a new type node and return it.  */
11607   if (TREE_CODE (t) == FUNCTION_TYPE)
11608     {
11609       fntype = build_function_type (return_type, arg_types);
11610       fntype = apply_memfn_quals (fntype,
11611                                   type_memfn_quals (t),
11612                                   type_memfn_rqual (t));
11613     }
11614   else
11615     {
11616       tree r = TREE_TYPE (TREE_VALUE (arg_types));
11617       /* Don't pick up extra function qualifiers from the basetype.  */
11618       r = cp_build_qualified_type_real (r, type_memfn_quals (t), complain);
11619       if (! MAYBE_CLASS_TYPE_P (r))
11620         {
11621           /* [temp.deduct]
11622
11623              Type deduction may fail for any of the following
11624              reasons:
11625
11626              -- Attempting to create "pointer to member of T" when T
11627              is not a class type.  */
11628           if (complain & tf_error)
11629             error ("creating pointer to member function of non-class type %qT",
11630                       r);
11631           return error_mark_node;
11632         }
11633
11634       fntype = build_method_type_directly (r, return_type,
11635                                            TREE_CHAIN (arg_types));
11636       fntype = build_ref_qualified_type (fntype, type_memfn_rqual (t));
11637     }
11638   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
11639
11640   if (late_return_type_p)
11641     TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
11642
11643   return fntype;
11644 }
11645
11646 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
11647    ARGS into that specification, and return the substituted
11648    specification.  If there is no specification, return NULL_TREE.  */
11649
11650 static tree
11651 tsubst_exception_specification (tree fntype,
11652                                 tree args,
11653                                 tsubst_flags_t complain,
11654                                 tree in_decl,
11655                                 bool defer_ok)
11656 {
11657   tree specs;
11658   tree new_specs;
11659
11660   specs = TYPE_RAISES_EXCEPTIONS (fntype);
11661   new_specs = NULL_TREE;
11662   if (specs && TREE_PURPOSE (specs))
11663     {
11664       /* A noexcept-specifier.  */
11665       tree expr = TREE_PURPOSE (specs);
11666       if (TREE_CODE (expr) == INTEGER_CST)
11667         new_specs = expr;
11668       else if (defer_ok)
11669         {
11670           /* Defer instantiation of noexcept-specifiers to avoid
11671              excessive instantiations (c++/49107).  */
11672           new_specs = make_node (DEFERRED_NOEXCEPT);
11673           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
11674             {
11675               /* We already partially instantiated this member template,
11676                  so combine the new args with the old.  */
11677               DEFERRED_NOEXCEPT_PATTERN (new_specs)
11678                 = DEFERRED_NOEXCEPT_PATTERN (expr);
11679               DEFERRED_NOEXCEPT_ARGS (new_specs)
11680                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
11681             }
11682           else
11683             {
11684               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
11685               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
11686             }
11687         }
11688       else
11689         new_specs = tsubst_copy_and_build
11690           (expr, args, complain, in_decl, /*function_p=*/false,
11691            /*integral_constant_expression_p=*/true);
11692       new_specs = build_noexcept_spec (new_specs, complain);
11693     }
11694   else if (specs)
11695     {
11696       if (! TREE_VALUE (specs))
11697         new_specs = specs;
11698       else
11699         while (specs)
11700           {
11701             tree spec;
11702             int i, len = 1;
11703             tree expanded_specs = NULL_TREE;
11704
11705             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
11706               {
11707                 /* Expand the pack expansion type.  */
11708                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
11709                                                        args, complain,
11710                                                        in_decl);
11711
11712                 if (expanded_specs == error_mark_node)
11713                   return error_mark_node;
11714                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
11715                   len = TREE_VEC_LENGTH (expanded_specs);
11716                 else
11717                   {
11718                     /* We're substituting into a member template, so
11719                        we got a TYPE_PACK_EXPANSION back.  Add that
11720                        expansion and move on.  */
11721                     gcc_assert (TREE_CODE (expanded_specs) 
11722                                 == TYPE_PACK_EXPANSION);
11723                     new_specs = add_exception_specifier (new_specs,
11724                                                          expanded_specs,
11725                                                          complain);
11726                     specs = TREE_CHAIN (specs);
11727                     continue;
11728                   }
11729               }
11730
11731             for (i = 0; i < len; ++i)
11732               {
11733                 if (expanded_specs)
11734                   spec = TREE_VEC_ELT (expanded_specs, i);
11735                 else
11736                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
11737                 if (spec == error_mark_node)
11738                   return spec;
11739                 new_specs = add_exception_specifier (new_specs, spec, 
11740                                                      complain);
11741               }
11742
11743             specs = TREE_CHAIN (specs);
11744           }
11745     }
11746   return new_specs;
11747 }
11748
11749 /* Take the tree structure T and replace template parameters used
11750    therein with the argument vector ARGS.  IN_DECL is an associated
11751    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
11752    Issue error and warning messages under control of COMPLAIN.  Note
11753    that we must be relatively non-tolerant of extensions here, in
11754    order to preserve conformance; if we allow substitutions that
11755    should not be allowed, we may allow argument deductions that should
11756    not succeed, and therefore report ambiguous overload situations
11757    where there are none.  In theory, we could allow the substitution,
11758    but indicate that it should have failed, and allow our caller to
11759    make sure that the right thing happens, but we don't try to do this
11760    yet.
11761
11762    This function is used for dealing with types, decls and the like;
11763    for expressions, use tsubst_expr or tsubst_copy.  */
11764
11765 tree
11766 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11767 {
11768   enum tree_code code;
11769   tree type, r = NULL_TREE;
11770
11771   if (t == NULL_TREE || t == error_mark_node
11772       || t == integer_type_node
11773       || t == void_type_node
11774       || t == char_type_node
11775       || t == unknown_type_node
11776       || TREE_CODE (t) == NAMESPACE_DECL
11777       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
11778     return t;
11779
11780   if (DECL_P (t))
11781     return tsubst_decl (t, args, complain);
11782
11783   if (args == NULL_TREE)
11784     return t;
11785
11786   code = TREE_CODE (t);
11787
11788   if (code == IDENTIFIER_NODE)
11789     type = IDENTIFIER_TYPE_VALUE (t);
11790   else
11791     type = TREE_TYPE (t);
11792
11793   gcc_assert (type != unknown_type_node);
11794
11795   /* Reuse typedefs.  We need to do this to handle dependent attributes,
11796      such as attribute aligned.  */
11797   if (TYPE_P (t)
11798       && typedef_variant_p (t))
11799     {
11800       tree decl = TYPE_NAME (t);
11801
11802       if (alias_template_specialization_p (t))
11803         {
11804           /* DECL represents an alias template and we want to
11805              instantiate it.  */
11806           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11807           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11808           r = instantiate_alias_template (tmpl, gen_args, complain);
11809         }
11810       else if (DECL_CLASS_SCOPE_P (decl)
11811                && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
11812                && uses_template_parms (DECL_CONTEXT (decl)))
11813         {
11814           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11815           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
11816           r = retrieve_specialization (tmpl, gen_args, 0);
11817         }
11818       else if (DECL_FUNCTION_SCOPE_P (decl)
11819                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
11820                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
11821         r = retrieve_local_specialization (decl);
11822       else
11823         /* The typedef is from a non-template context.  */
11824         return t;
11825
11826       if (r)
11827         {
11828           r = TREE_TYPE (r);
11829           r = cp_build_qualified_type_real
11830             (r, cp_type_quals (t) | cp_type_quals (r),
11831              complain | tf_ignore_bad_quals);
11832           return r;
11833         }
11834       else
11835         {
11836           /* We don't have an instantiation yet, so drop the typedef.  */
11837           int quals = cp_type_quals (t);
11838           t = DECL_ORIGINAL_TYPE (decl);
11839           t = cp_build_qualified_type_real (t, quals,
11840                                             complain | tf_ignore_bad_quals);
11841         }
11842     }
11843
11844   if (type
11845       && code != TYPENAME_TYPE
11846       && code != TEMPLATE_TYPE_PARM
11847       && code != IDENTIFIER_NODE
11848       && code != FUNCTION_TYPE
11849       && code != METHOD_TYPE)
11850     type = tsubst (type, args, complain, in_decl);
11851   if (type == error_mark_node)
11852     return error_mark_node;
11853
11854   switch (code)
11855     {
11856     case RECORD_TYPE:
11857     case UNION_TYPE:
11858     case ENUMERAL_TYPE:
11859       return tsubst_aggr_type (t, args, complain, in_decl,
11860                                /*entering_scope=*/0);
11861
11862     case ERROR_MARK:
11863     case IDENTIFIER_NODE:
11864     case VOID_TYPE:
11865     case REAL_TYPE:
11866     case COMPLEX_TYPE:
11867     case VECTOR_TYPE:
11868     case BOOLEAN_TYPE:
11869     case NULLPTR_TYPE:
11870     case LANG_TYPE:
11871       return t;
11872
11873     case INTEGER_TYPE:
11874       if (t == integer_type_node)
11875         return t;
11876
11877       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
11878           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
11879         return t;
11880
11881       {
11882         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
11883
11884         max = tsubst_expr (omax, args, complain, in_decl,
11885                            /*integral_constant_expression_p=*/false);
11886
11887         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
11888            needed.  */
11889         if (TREE_CODE (max) == NOP_EXPR
11890             && TREE_SIDE_EFFECTS (omax)
11891             && !TREE_TYPE (max))
11892           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
11893
11894         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
11895            with TREE_SIDE_EFFECTS that indicates this is not an integral
11896            constant expression.  */
11897         if (processing_template_decl
11898             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
11899           {
11900             gcc_assert (TREE_CODE (max) == NOP_EXPR);
11901             TREE_SIDE_EFFECTS (max) = 1;
11902           }
11903
11904         return compute_array_index_type (NULL_TREE, max, complain);
11905       }
11906
11907     case TEMPLATE_TYPE_PARM:
11908     case TEMPLATE_TEMPLATE_PARM:
11909     case BOUND_TEMPLATE_TEMPLATE_PARM:
11910     case TEMPLATE_PARM_INDEX:
11911       {
11912         int idx;
11913         int level;
11914         int levels;
11915         tree arg = NULL_TREE;
11916
11917         r = NULL_TREE;
11918
11919         gcc_assert (TREE_VEC_LENGTH (args) > 0);
11920         template_parm_level_and_index (t, &level, &idx); 
11921
11922         levels = TMPL_ARGS_DEPTH (args);
11923         if (level <= levels)
11924           {
11925             arg = TMPL_ARG (args, level, idx);
11926
11927             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
11928               {
11929                 /* See through ARGUMENT_PACK_SELECT arguments. */
11930                 arg = ARGUMENT_PACK_SELECT_ARG (arg);
11931                 /* If the selected argument is an expansion E, that most
11932                    likely means we were called from
11933                    gen_elem_of_pack_expansion_instantiation during the
11934                    substituting of pack an argument pack (which Ith
11935                    element is a pack expansion, where I is
11936                    ARGUMENT_PACK_SELECT_INDEX) into a pack expansion.
11937                    In this case, the Ith element resulting from this
11938                    substituting is going to be a pack expansion, which
11939                    pattern is the pattern of E.  Let's return the
11940                    pattern of E, and
11941                    gen_elem_of_pack_expansion_instantiation will
11942                    build the resulting pack expansion from it.  */
11943                 if (PACK_EXPANSION_P (arg))
11944                   {
11945                     /* Make sure we aren't throwing away arg info.  */
11946                     gcc_assert (!PACK_EXPANSION_EXTRA_ARGS (arg));
11947                     arg = PACK_EXPANSION_PATTERN (arg);
11948                   }
11949               }
11950           }
11951
11952         if (arg == error_mark_node)
11953           return error_mark_node;
11954         else if (arg != NULL_TREE)
11955           {
11956             if (ARGUMENT_PACK_P (arg))
11957               /* If ARG is an argument pack, we don't actually want to
11958                  perform a substitution here, because substitutions
11959                  for argument packs are only done
11960                  element-by-element. We can get to this point when
11961                  substituting the type of a non-type template
11962                  parameter pack, when that type actually contains
11963                  template parameter packs from an outer template, e.g.,
11964
11965                  template<typename... Types> struct A {
11966                    template<Types... Values> struct B { };
11967                  };  */
11968               return t;
11969
11970             if (code == TEMPLATE_TYPE_PARM)
11971               {
11972                 int quals;
11973                 gcc_assert (TYPE_P (arg));
11974
11975                 quals = cp_type_quals (arg) | cp_type_quals (t);
11976                   
11977                 return cp_build_qualified_type_real
11978                   (arg, quals, complain | tf_ignore_bad_quals);
11979               }
11980             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11981               {
11982                 /* We are processing a type constructed from a
11983                    template template parameter.  */
11984                 tree argvec = tsubst (TYPE_TI_ARGS (t),
11985                                       args, complain, in_decl);
11986                 if (argvec == error_mark_node)
11987                   return error_mark_node;
11988
11989                 gcc_assert (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
11990                             || TREE_CODE (arg) == TEMPLATE_DECL
11991                             || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
11992
11993                 if (TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE)
11994                   /* Consider this code:
11995
11996                         template <template <class> class Template>
11997                         struct Internal {
11998                         template <class Arg> using Bind = Template<Arg>;
11999                         };
12000
12001                         template <template <class> class Template, class Arg>
12002                         using Instantiate = Template<Arg>; //#0
12003
12004                         template <template <class> class Template,
12005                                   class Argument>
12006                         using Bind =
12007                           Instantiate<Internal<Template>::template Bind,
12008                                       Argument>; //#1
12009
12010                      When #1 is parsed, the
12011                      BOUND_TEMPLATE_TEMPLATE_PARM representing the
12012                      parameter `Template' in #0 matches the
12013                      UNBOUND_CLASS_TEMPLATE representing the argument
12014                      `Internal<Template>::template Bind'; We then want
12015                      to assemble the type `Bind<Argument>' that can't
12016                      be fully created right now, because
12017                      `Internal<Template>' not being complete, the Bind
12018                      template cannot be looked up in that context.  So
12019                      we need to "store" `Bind<Argument>' for later
12020                      when the context of Bind becomes complete.  Let's
12021                      store that in a TYPENAME_TYPE.  */
12022                   return make_typename_type (TYPE_CONTEXT (arg),
12023                                              build_nt (TEMPLATE_ID_EXPR,
12024                                                        TYPE_IDENTIFIER (arg),
12025                                                        argvec),
12026                                              typename_type,
12027                                              complain);
12028
12029                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
12030                    are resolving nested-types in the signature of a
12031                    member function templates.  Otherwise ARG is a
12032                    TEMPLATE_DECL and is the real template to be
12033                    instantiated.  */
12034                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12035                   arg = TYPE_NAME (arg);
12036
12037                 r = lookup_template_class (arg,
12038                                            argvec, in_decl,
12039                                            DECL_CONTEXT (arg),
12040                                             /*entering_scope=*/0,
12041                                            complain);
12042                 return cp_build_qualified_type_real
12043                   (r, cp_type_quals (t) | cp_type_quals (r), complain);
12044               }
12045             else
12046               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
12047               return convert_from_reference (unshare_expr (arg));
12048           }
12049
12050         if (level == 1)
12051           /* This can happen during the attempted tsubst'ing in
12052              unify.  This means that we don't yet have any information
12053              about the template parameter in question.  */
12054           return t;
12055
12056         /* Early in template argument deduction substitution, we don't
12057            want to reduce the level of 'auto', or it will be confused
12058            with a normal template parm in subsequent deduction.  */
12059         if (is_auto (t) && (complain & tf_partial))
12060           return t;
12061
12062         /* If we get here, we must have been looking at a parm for a
12063            more deeply nested template.  Make a new version of this
12064            template parameter, but with a lower level.  */
12065         switch (code)
12066           {
12067           case TEMPLATE_TYPE_PARM:
12068           case TEMPLATE_TEMPLATE_PARM:
12069           case BOUND_TEMPLATE_TEMPLATE_PARM:
12070             if (cp_type_quals (t))
12071               {
12072                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
12073                 r = cp_build_qualified_type_real
12074                   (r, cp_type_quals (t),
12075                    complain | (code == TEMPLATE_TYPE_PARM
12076                                ? tf_ignore_bad_quals : 0));
12077               }
12078             else
12079               {
12080                 r = copy_type (t);
12081                 TEMPLATE_TYPE_PARM_INDEX (r)
12082                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
12083                                                 r, levels, args, complain);
12084                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
12085                 TYPE_MAIN_VARIANT (r) = r;
12086                 TYPE_POINTER_TO (r) = NULL_TREE;
12087                 TYPE_REFERENCE_TO (r) = NULL_TREE;
12088
12089                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
12090                   /* We have reduced the level of the template
12091                      template parameter, but not the levels of its
12092                      template parameters, so canonical_type_parameter
12093                      will not be able to find the canonical template
12094                      template parameter for this level. Thus, we
12095                      require structural equality checking to compare
12096                      TEMPLATE_TEMPLATE_PARMs. */
12097                   SET_TYPE_STRUCTURAL_EQUALITY (r);
12098                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
12099                   SET_TYPE_STRUCTURAL_EQUALITY (r);
12100                 else
12101                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
12102
12103                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
12104                   {
12105                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
12106                                           complain, in_decl);
12107                     if (argvec == error_mark_node)
12108                       return error_mark_node;
12109
12110                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
12111                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
12112                   }
12113               }
12114             break;
12115
12116           case TEMPLATE_PARM_INDEX:
12117             r = reduce_template_parm_level (t, type, levels, args, complain);
12118             break;
12119
12120           default:
12121             gcc_unreachable ();
12122           }
12123
12124         return r;
12125       }
12126
12127     case TREE_LIST:
12128       {
12129         tree purpose, value, chain;
12130
12131         if (t == void_list_node)
12132           return t;
12133
12134         purpose = TREE_PURPOSE (t);
12135         if (purpose)
12136           {
12137             purpose = tsubst (purpose, args, complain, in_decl);
12138             if (purpose == error_mark_node)
12139               return error_mark_node;
12140           }
12141         value = TREE_VALUE (t);
12142         if (value)
12143           {
12144             value = tsubst (value, args, complain, in_decl);
12145             if (value == error_mark_node)
12146               return error_mark_node;
12147           }
12148         chain = TREE_CHAIN (t);
12149         if (chain && chain != void_type_node)
12150           {
12151             chain = tsubst (chain, args, complain, in_decl);
12152             if (chain == error_mark_node)
12153               return error_mark_node;
12154           }
12155         if (purpose == TREE_PURPOSE (t)
12156             && value == TREE_VALUE (t)
12157             && chain == TREE_CHAIN (t))
12158           return t;
12159         return hash_tree_cons (purpose, value, chain);
12160       }
12161
12162     case TREE_BINFO:
12163       /* We should never be tsubsting a binfo.  */
12164       gcc_unreachable ();
12165
12166     case TREE_VEC:
12167       /* A vector of template arguments.  */
12168       gcc_assert (!type);
12169       return tsubst_template_args (t, args, complain, in_decl);
12170
12171     case POINTER_TYPE:
12172     case REFERENCE_TYPE:
12173       {
12174         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
12175           return t;
12176
12177         /* [temp.deduct]
12178
12179            Type deduction may fail for any of the following
12180            reasons:
12181
12182            -- Attempting to create a pointer to reference type.
12183            -- Attempting to create a reference to a reference type or
12184               a reference to void.
12185
12186           Core issue 106 says that creating a reference to a reference
12187           during instantiation is no longer a cause for failure. We
12188           only enforce this check in strict C++98 mode.  */
12189         if ((TREE_CODE (type) == REFERENCE_TYPE
12190              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
12191             || (code == REFERENCE_TYPE && VOID_TYPE_P (type)))
12192           {
12193             static location_t last_loc;
12194
12195             /* We keep track of the last time we issued this error
12196                message to avoid spewing a ton of messages during a
12197                single bad template instantiation.  */
12198             if (complain & tf_error
12199                 && last_loc != input_location)
12200               {
12201                 if (VOID_TYPE_P (type))
12202                   error ("forming reference to void");
12203                else if (code == POINTER_TYPE)
12204                  error ("forming pointer to reference type %qT", type);
12205                else
12206                   error ("forming reference to reference type %qT", type);
12207                 last_loc = input_location;
12208               }
12209
12210             return error_mark_node;
12211           }
12212         else if (TREE_CODE (type) == FUNCTION_TYPE
12213                  && (type_memfn_quals (type) != TYPE_UNQUALIFIED
12214                      || type_memfn_rqual (type) != REF_QUAL_NONE))
12215           {
12216             if (complain & tf_error)
12217               {
12218                 if (code == POINTER_TYPE)
12219                   error ("forming pointer to qualified function type %qT",
12220                          type);
12221                 else
12222                   error ("forming reference to qualified function type %qT",
12223                          type);
12224               }
12225             return error_mark_node;
12226           }
12227         else if (code == POINTER_TYPE)
12228           {
12229             r = build_pointer_type (type);
12230             if (TREE_CODE (type) == METHOD_TYPE)
12231               r = build_ptrmemfunc_type (r);
12232           }
12233         else if (TREE_CODE (type) == REFERENCE_TYPE)
12234           /* In C++0x, during template argument substitution, when there is an
12235              attempt to create a reference to a reference type, reference
12236              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
12237
12238              "If a template-argument for a template-parameter T names a type
12239              that is a reference to a type A, an attempt to create the type
12240              'lvalue reference to cv T' creates the type 'lvalue reference to
12241              A,' while an attempt to create the type type rvalue reference to
12242              cv T' creates the type T"
12243           */
12244           r = cp_build_reference_type
12245               (TREE_TYPE (type),
12246                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
12247         else
12248           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
12249         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
12250
12251         if (r != error_mark_node)
12252           /* Will this ever be needed for TYPE_..._TO values?  */
12253           layout_type (r);
12254
12255         return r;
12256       }
12257     case OFFSET_TYPE:
12258       {
12259         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
12260         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
12261           {
12262             /* [temp.deduct]
12263
12264                Type deduction may fail for any of the following
12265                reasons:
12266
12267                -- Attempting to create "pointer to member of T" when T
12268                   is not a class type.  */
12269             if (complain & tf_error)
12270               error ("creating pointer to member of non-class type %qT", r);
12271             return error_mark_node;
12272           }
12273         if (TREE_CODE (type) == REFERENCE_TYPE)
12274           {
12275             if (complain & tf_error)
12276               error ("creating pointer to member reference type %qT", type);
12277             return error_mark_node;
12278           }
12279         if (VOID_TYPE_P (type))
12280           {
12281             if (complain & tf_error)
12282               error ("creating pointer to member of type void");
12283             return error_mark_node;
12284           }
12285         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
12286         if (TREE_CODE (type) == FUNCTION_TYPE)
12287           {
12288             /* The type of the implicit object parameter gets its
12289                cv-qualifiers from the FUNCTION_TYPE. */
12290             tree memptr;
12291             tree method_type
12292               = build_memfn_type (type, r, type_memfn_quals (type),
12293                                   type_memfn_rqual (type));
12294             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
12295             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
12296                                                  complain);
12297           }
12298         else
12299           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
12300                                                cp_type_quals (t),
12301                                                complain);
12302       }
12303     case FUNCTION_TYPE:
12304     case METHOD_TYPE:
12305       {
12306         tree fntype;
12307         tree specs;
12308         fntype = tsubst_function_type (t, args, complain, in_decl);
12309         if (fntype == error_mark_node)
12310           return error_mark_node;
12311
12312         /* Substitute the exception specification.  */
12313         specs = tsubst_exception_specification (t, args, complain,
12314                                                 in_decl, /*defer_ok*/true);
12315         if (specs == error_mark_node)
12316           return error_mark_node;
12317         if (specs)
12318           fntype = build_exception_variant (fntype, specs);
12319         return fntype;
12320       }
12321     case ARRAY_TYPE:
12322       {
12323         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
12324         if (domain == error_mark_node)
12325           return error_mark_node;
12326
12327         /* As an optimization, we avoid regenerating the array type if
12328            it will obviously be the same as T.  */
12329         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
12330           return t;
12331
12332         /* These checks should match the ones in create_array_type_for_decl.
12333
12334            [temp.deduct]
12335
12336            The deduction may fail for any of the following reasons:
12337
12338            -- Attempting to create an array with an element type that
12339               is void, a function type, or a reference type, or [DR337]
12340               an abstract class type.  */
12341         if (VOID_TYPE_P (type)
12342             || TREE_CODE (type) == FUNCTION_TYPE
12343             || (TREE_CODE (type) == ARRAY_TYPE
12344                 && TYPE_DOMAIN (type) == NULL_TREE)
12345             || TREE_CODE (type) == REFERENCE_TYPE)
12346           {
12347             if (complain & tf_error)
12348               error ("creating array of %qT", type);
12349             return error_mark_node;
12350           }
12351
12352         if (abstract_virtuals_error_sfinae (ACU_ARRAY, type, complain))
12353           return error_mark_node;
12354
12355         r = build_cplus_array_type (type, domain);
12356
12357         if (TYPE_USER_ALIGN (t))
12358           {
12359             TYPE_ALIGN (r) = TYPE_ALIGN (t);
12360             TYPE_USER_ALIGN (r) = 1;
12361           }
12362
12363         return r;
12364       }
12365
12366     case TYPENAME_TYPE:
12367       {
12368         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12369                                      in_decl, /*entering_scope=*/1);
12370         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
12371                               complain, in_decl);
12372
12373         if (ctx == error_mark_node || f == error_mark_node)
12374           return error_mark_node;
12375
12376         if (!MAYBE_CLASS_TYPE_P (ctx))
12377           {
12378             if (complain & tf_error)
12379               error ("%qT is not a class, struct, or union type", ctx);
12380             return error_mark_node;
12381           }
12382         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
12383           {
12384             /* Normally, make_typename_type does not require that the CTX
12385                have complete type in order to allow things like:
12386
12387                  template <class T> struct S { typename S<T>::X Y; };
12388
12389                But, such constructs have already been resolved by this
12390                point, so here CTX really should have complete type, unless
12391                it's a partial instantiation.  */
12392             ctx = complete_type (ctx);
12393             if (!COMPLETE_TYPE_P (ctx))
12394               {
12395                 if (complain & tf_error)
12396                   cxx_incomplete_type_error (NULL_TREE, ctx);
12397                 return error_mark_node;
12398               }
12399           }
12400
12401         f = make_typename_type (ctx, f, typename_type,
12402                                 complain | tf_keep_type_decl);
12403         if (f == error_mark_node)
12404           return f;
12405         if (TREE_CODE (f) == TYPE_DECL)
12406           {
12407             complain |= tf_ignore_bad_quals;
12408             f = TREE_TYPE (f);
12409           }
12410
12411         if (TREE_CODE (f) != TYPENAME_TYPE)
12412           {
12413             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
12414               {
12415                 if (complain & tf_error)
12416                   error ("%qT resolves to %qT, which is not an enumeration type",
12417                          t, f);
12418                 else
12419                   return error_mark_node;
12420               }
12421             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
12422               {
12423                 if (complain & tf_error)
12424                   error ("%qT resolves to %qT, which is is not a class type",
12425                          t, f);
12426                 else
12427                   return error_mark_node;
12428               }
12429           }
12430
12431         return cp_build_qualified_type_real
12432           (f, cp_type_quals (f) | cp_type_quals (t), complain);
12433       }
12434
12435     case UNBOUND_CLASS_TEMPLATE:
12436       {
12437         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
12438                                      in_decl, /*entering_scope=*/1);
12439         tree name = TYPE_IDENTIFIER (t);
12440         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
12441
12442         if (ctx == error_mark_node || name == error_mark_node)
12443           return error_mark_node;
12444
12445         if (parm_list)
12446           parm_list = tsubst_template_parms (parm_list, args, complain);
12447         return make_unbound_class_template (ctx, name, parm_list, complain);
12448       }
12449
12450     case TYPEOF_TYPE:
12451       {
12452         tree type;
12453
12454         ++cp_unevaluated_operand;
12455         ++c_inhibit_evaluation_warnings;
12456
12457         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
12458                             complain, in_decl,
12459                             /*integral_constant_expression_p=*/false);
12460
12461         --cp_unevaluated_operand;
12462         --c_inhibit_evaluation_warnings;
12463
12464         type = finish_typeof (type);
12465         return cp_build_qualified_type_real (type,
12466                                              cp_type_quals (t)
12467                                              | cp_type_quals (type),
12468                                              complain);
12469       }
12470
12471     case DECLTYPE_TYPE:
12472       {
12473         tree type;
12474
12475         ++cp_unevaluated_operand;
12476         ++c_inhibit_evaluation_warnings;
12477
12478         type = tsubst_copy_and_build (DECLTYPE_TYPE_EXPR (t), args,
12479                                       complain|tf_decltype, in_decl,
12480                                       /*function_p*/false,
12481                                       /*integral_constant_expression*/false);
12482
12483         --cp_unevaluated_operand;
12484         --c_inhibit_evaluation_warnings;
12485
12486         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
12487           type = lambda_capture_field_type (type,
12488                                             DECLTYPE_FOR_INIT_CAPTURE (t));
12489         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
12490           type = lambda_proxy_type (type);
12491         else
12492           {
12493             bool id = DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t);
12494             if (id && TREE_CODE (DECLTYPE_TYPE_EXPR (t)) == BIT_NOT_EXPR
12495                 && EXPR_P (type))
12496               /* In a template ~id could be either a complement expression
12497                  or an unqualified-id naming a destructor; if instantiating
12498                  it produces an expression, it's not an id-expression or
12499                  member access.  */
12500               id = false;
12501             type = finish_decltype_type (type, id, complain);
12502           }
12503         return cp_build_qualified_type_real (type,
12504                                              cp_type_quals (t)
12505                                              | cp_type_quals (type),
12506                                              complain | tf_ignore_bad_quals);
12507       }
12508
12509     case UNDERLYING_TYPE:
12510       {
12511         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
12512                             complain, in_decl);
12513         return finish_underlying_type (type);
12514       }
12515
12516     case TYPE_ARGUMENT_PACK:
12517     case NONTYPE_ARGUMENT_PACK:
12518       {
12519         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
12520         tree packed_out = 
12521           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
12522                                 args,
12523                                 complain,
12524                                 in_decl);
12525         SET_ARGUMENT_PACK_ARGS (r, packed_out);
12526
12527         /* For template nontype argument packs, also substitute into
12528            the type.  */
12529         if (code == NONTYPE_ARGUMENT_PACK)
12530           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
12531
12532         return r;
12533       }
12534       break;
12535
12536     case VOID_CST:
12537     case INTEGER_CST:
12538     case REAL_CST:
12539     case STRING_CST:
12540     case PLUS_EXPR:
12541     case MINUS_EXPR:
12542     case NEGATE_EXPR:
12543     case NOP_EXPR:
12544     case INDIRECT_REF:
12545     case ADDR_EXPR:
12546     case CALL_EXPR:
12547     case ARRAY_REF:
12548     case SCOPE_REF:
12549       /* We should use one of the expression tsubsts for these codes.  */
12550       gcc_unreachable ();
12551
12552     default:
12553       sorry ("use of %qs in template", get_tree_code_name (code));
12554       return error_mark_node;
12555     }
12556 }
12557
12558 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
12559    type of the expression on the left-hand side of the "." or "->"
12560    operator.  */
12561
12562 static tree
12563 tsubst_baselink (tree baselink, tree object_type,
12564                  tree args, tsubst_flags_t complain, tree in_decl)
12565 {
12566     tree name;
12567     tree qualifying_scope;
12568     tree fns;
12569     tree optype;
12570     tree template_args = 0;
12571     bool template_id_p = false;
12572     bool qualified = BASELINK_QUALIFIED_P (baselink);
12573
12574     /* A baselink indicates a function from a base class.  Both the
12575        BASELINK_ACCESS_BINFO and the base class referenced may
12576        indicate bases of the template class, rather than the
12577        instantiated class.  In addition, lookups that were not
12578        ambiguous before may be ambiguous now.  Therefore, we perform
12579        the lookup again.  */
12580     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
12581     qualifying_scope = tsubst (qualifying_scope, args,
12582                                complain, in_decl);
12583     fns = BASELINK_FUNCTIONS (baselink);
12584     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
12585     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
12586       {
12587         template_id_p = true;
12588         template_args = TREE_OPERAND (fns, 1);
12589         fns = TREE_OPERAND (fns, 0);
12590         if (template_args)
12591           template_args = tsubst_template_args (template_args, args,
12592                                                 complain, in_decl);
12593       }
12594     name = DECL_NAME (get_first_fn (fns));
12595     if (IDENTIFIER_TYPENAME_P (name))
12596       name = mangle_conv_op_name_for_type (optype);
12597     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
12598     if (!baselink)
12599       return error_mark_node;
12600
12601     /* If lookup found a single function, mark it as used at this
12602        point.  (If it lookup found multiple functions the one selected
12603        later by overload resolution will be marked as used at that
12604        point.)  */
12605     if (BASELINK_P (baselink))
12606       fns = BASELINK_FUNCTIONS (baselink);
12607     if (!template_id_p && !really_overloaded_fn (fns)
12608         && !mark_used (OVL_CURRENT (fns), complain) && !(complain & tf_error))
12609       return error_mark_node;
12610
12611     /* Add back the template arguments, if present.  */
12612     if (BASELINK_P (baselink) && template_id_p)
12613       BASELINK_FUNCTIONS (baselink)
12614         = build_nt (TEMPLATE_ID_EXPR,
12615                     BASELINK_FUNCTIONS (baselink),
12616                     template_args);
12617     /* Update the conversion operator type.  */
12618     BASELINK_OPTYPE (baselink) = optype;
12619
12620     if (!object_type)
12621       object_type = current_class_type;
12622
12623     if (qualified)
12624       baselink = adjust_result_of_qualified_name_lookup (baselink,
12625                                                          qualifying_scope,
12626                                                          object_type);
12627     return baselink;
12628 }
12629
12630 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
12631    true if the qualified-id will be a postfix-expression in-and-of
12632    itself; false if more of the postfix-expression follows the
12633    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
12634    of "&".  */
12635
12636 static tree
12637 tsubst_qualified_id (tree qualified_id, tree args,
12638                      tsubst_flags_t complain, tree in_decl,
12639                      bool done, bool address_p)
12640 {
12641   tree expr;
12642   tree scope;
12643   tree name;
12644   bool is_template;
12645   tree template_args;
12646   location_t loc = UNKNOWN_LOCATION;
12647
12648   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
12649
12650   /* Figure out what name to look up.  */
12651   name = TREE_OPERAND (qualified_id, 1);
12652   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
12653     {
12654       is_template = true;
12655       loc = EXPR_LOCATION (name);
12656       template_args = TREE_OPERAND (name, 1);
12657       if (template_args)
12658         template_args = tsubst_template_args (template_args, args,
12659                                               complain, in_decl);
12660       name = TREE_OPERAND (name, 0);
12661     }
12662   else
12663     {
12664       is_template = false;
12665       template_args = NULL_TREE;
12666     }
12667
12668   /* Substitute into the qualifying scope.  When there are no ARGS, we
12669      are just trying to simplify a non-dependent expression.  In that
12670      case the qualifying scope may be dependent, and, in any case,
12671      substituting will not help.  */
12672   scope = TREE_OPERAND (qualified_id, 0);
12673   if (args)
12674     {
12675       scope = tsubst (scope, args, complain, in_decl);
12676       expr = tsubst_copy (name, args, complain, in_decl);
12677     }
12678   else
12679     expr = name;
12680
12681   if (dependent_scope_p (scope))
12682     {
12683       if (is_template)
12684         expr = build_min_nt_loc (loc, TEMPLATE_ID_EXPR, expr, template_args);
12685       return build_qualified_name (NULL_TREE, scope, expr,
12686                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
12687     }
12688
12689   if (!BASELINK_P (name) && !DECL_P (expr))
12690     {
12691       if (TREE_CODE (expr) == BIT_NOT_EXPR)
12692         {
12693           /* A BIT_NOT_EXPR is used to represent a destructor.  */
12694           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
12695             {
12696               error ("qualifying type %qT does not match destructor name ~%qT",
12697                      scope, TREE_OPERAND (expr, 0));
12698               expr = error_mark_node;
12699             }
12700           else
12701             expr = lookup_qualified_name (scope, complete_dtor_identifier,
12702                                           /*is_type_p=*/0, false);
12703         }
12704       else
12705         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
12706       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
12707                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
12708         {
12709           if (complain & tf_error)
12710             {
12711               error ("dependent-name %qE is parsed as a non-type, but "
12712                      "instantiation yields a type", qualified_id);
12713               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
12714             }
12715           return error_mark_node;
12716         }
12717     }
12718
12719   if (DECL_P (expr))
12720     {
12721       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
12722                                            scope);
12723       /* Remember that there was a reference to this entity.  */
12724       if (!mark_used (expr, complain) && !(complain & tf_error))
12725         return error_mark_node;
12726     }
12727
12728   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
12729     {
12730       if (complain & tf_error)
12731         qualified_name_lookup_error (scope,
12732                                      TREE_OPERAND (qualified_id, 1),
12733                                      expr, input_location);
12734       return error_mark_node;
12735     }
12736
12737   if (is_template)
12738     expr = lookup_template_function (expr, template_args);
12739
12740   if (expr == error_mark_node && complain & tf_error)
12741     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
12742                                  expr, input_location);
12743   else if (TYPE_P (scope))
12744     {
12745       expr = (adjust_result_of_qualified_name_lookup
12746               (expr, scope, current_nonlambda_class_type ()));
12747       expr = (finish_qualified_id_expr
12748               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
12749                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
12750                /*template_arg_p=*/false, complain));
12751     }
12752
12753   /* Expressions do not generally have reference type.  */
12754   if (TREE_CODE (expr) != SCOPE_REF
12755       /* However, if we're about to form a pointer-to-member, we just
12756          want the referenced member referenced.  */
12757       && TREE_CODE (expr) != OFFSET_REF)
12758     expr = convert_from_reference (expr);
12759
12760   return expr;
12761 }
12762
12763 /* tsubst the initializer for a VAR_DECL.  INIT is the unsubstituted
12764    initializer, DECL is the substituted VAR_DECL.  Other arguments are as
12765    for tsubst.  */
12766
12767 static tree
12768 tsubst_init (tree init, tree decl, tree args,
12769              tsubst_flags_t complain, tree in_decl)
12770 {
12771   if (!init)
12772     return NULL_TREE;
12773
12774   init = tsubst_expr (init, args, complain, in_decl, false);
12775
12776   if (!init)
12777     {
12778       /* If we had an initializer but it
12779          instantiated to nothing,
12780          value-initialize the object.  This will
12781          only occur when the initializer was a
12782          pack expansion where the parameter packs
12783          used in that expansion were of length
12784          zero.  */
12785       init = build_value_init (TREE_TYPE (decl),
12786                                complain);
12787       if (TREE_CODE (init) == AGGR_INIT_EXPR)
12788         init = get_target_expr_sfinae (init, complain);
12789     }
12790
12791   return init;
12792 }
12793
12794 /* Like tsubst, but deals with expressions.  This function just replaces
12795    template parms; to finish processing the resultant expression, use
12796    tsubst_copy_and_build or tsubst_expr.  */
12797
12798 static tree
12799 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
12800 {
12801   enum tree_code code;
12802   tree r;
12803
12804   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
12805     return t;
12806
12807   code = TREE_CODE (t);
12808
12809   switch (code)
12810     {
12811     case PARM_DECL:
12812       r = retrieve_local_specialization (t);
12813
12814       if (r == NULL_TREE)
12815         {
12816           /* We get here for a use of 'this' in an NSDMI.  */
12817           if (DECL_NAME (t) == this_identifier
12818               && current_function_decl
12819               && DECL_CONSTRUCTOR_P (current_function_decl))
12820             return current_class_ptr;
12821
12822           /* This can happen for a parameter name used later in a function
12823              declaration (such as in a late-specified return type).  Just
12824              make a dummy decl, since it's only used for its type.  */
12825           gcc_assert (cp_unevaluated_operand != 0);
12826           r = tsubst_decl (t, args, complain);
12827           /* Give it the template pattern as its context; its true context
12828              hasn't been instantiated yet and this is good enough for
12829              mangling.  */
12830           DECL_CONTEXT (r) = DECL_CONTEXT (t);
12831         }
12832       
12833       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12834         r = ARGUMENT_PACK_SELECT_ARG (r);
12835       if (!mark_used (r, complain) && !(complain & tf_error))
12836         return error_mark_node;
12837       return r;
12838
12839     case CONST_DECL:
12840       {
12841         tree enum_type;
12842         tree v;
12843
12844         if (DECL_TEMPLATE_PARM_P (t))
12845           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
12846         /* There is no need to substitute into namespace-scope
12847            enumerators.  */
12848         if (DECL_NAMESPACE_SCOPE_P (t))
12849           return t;
12850         /* If ARGS is NULL, then T is known to be non-dependent.  */
12851         if (args == NULL_TREE)
12852           return scalar_constant_value (t);
12853
12854         /* Unfortunately, we cannot just call lookup_name here.
12855            Consider:
12856
12857              template <int I> int f() {
12858              enum E { a = I };
12859              struct S { void g() { E e = a; } };
12860              };
12861
12862            When we instantiate f<7>::S::g(), say, lookup_name is not
12863            clever enough to find f<7>::a.  */
12864         enum_type
12865           = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12866                               /*entering_scope=*/0);
12867
12868         for (v = TYPE_VALUES (enum_type);
12869              v != NULL_TREE;
12870              v = TREE_CHAIN (v))
12871           if (TREE_PURPOSE (v) == DECL_NAME (t))
12872             return TREE_VALUE (v);
12873
12874           /* We didn't find the name.  That should never happen; if
12875              name-lookup found it during preliminary parsing, we
12876              should find it again here during instantiation.  */
12877         gcc_unreachable ();
12878       }
12879       return t;
12880
12881     case FIELD_DECL:
12882       if (PACK_EXPANSION_P (TREE_TYPE (t)))
12883         {
12884           /* Check for a local specialization set up by
12885              tsubst_pack_expansion.  */
12886           if (tree r = retrieve_local_specialization (t))
12887             {
12888               if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
12889                 r = ARGUMENT_PACK_SELECT_ARG (r);
12890               return r;
12891             }
12892
12893           /* When retrieving a capture pack from a generic lambda, remove the
12894              lambda call op's own template argument list from ARGS.  Only the
12895              template arguments active for the closure type should be used to
12896              retrieve the pack specialization.  */
12897           if (LAMBDA_FUNCTION_P (current_function_decl)
12898               && (template_class_depth (DECL_CONTEXT (t))
12899                   != TMPL_ARGS_DEPTH (args)))
12900             args = strip_innermost_template_args (args, 1);
12901
12902           /* Otherwise return the full NONTYPE_ARGUMENT_PACK that
12903              tsubst_decl put in the hash table.  */
12904           return retrieve_specialization (t, args, 0);
12905         }
12906
12907       if (DECL_CONTEXT (t))
12908         {
12909           tree ctx;
12910
12911           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
12912                                   /*entering_scope=*/1);
12913           if (ctx != DECL_CONTEXT (t))
12914             {
12915               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
12916               if (!r)
12917                 {
12918                   if (complain & tf_error)
12919                     error ("using invalid field %qD", t);
12920                   return error_mark_node;
12921                 }
12922               return r;
12923             }
12924         }
12925
12926       return t;
12927
12928     case VAR_DECL:
12929     case FUNCTION_DECL:
12930       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
12931         r = tsubst (t, args, complain, in_decl);
12932       else if (local_variable_p (t))
12933         {
12934           r = retrieve_local_specialization (t);
12935           if (r == NULL_TREE)
12936             {
12937               /* First try name lookup to find the instantiation.  */
12938               r = lookup_name (DECL_NAME (t));
12939               if (r)
12940                 {
12941                   /* Make sure that the one we found is the one we want.  */
12942                   tree ctx = tsubst (DECL_CONTEXT (t), args,
12943                                      complain, in_decl);
12944                   if (ctx != DECL_CONTEXT (r))
12945                     r = NULL_TREE;
12946                 }
12947
12948               if (r)
12949                 /* OK */;
12950               else
12951                 {
12952                   /* This can happen for a variable used in a
12953                      late-specified return type of a local lambda, or for a
12954                      local static or constant.  Building a new VAR_DECL
12955                      should be OK in all those cases.  */
12956                   r = tsubst_decl (t, args, complain);
12957                   if (decl_maybe_constant_var_p (r))
12958                     {
12959                       /* We can't call cp_finish_decl, so handle the
12960                          initializer by hand.  */
12961                       tree init = tsubst_init (DECL_INITIAL (t), r, args,
12962                                                complain, in_decl);
12963                       if (!processing_template_decl)
12964                         init = maybe_constant_init (init);
12965                       if (processing_template_decl
12966                           ? potential_constant_expression (init)
12967                           : reduced_constant_expression_p (init))
12968                         DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
12969                           = TREE_CONSTANT (r) = true;
12970                       DECL_INITIAL (r) = init;
12971                     }
12972                   gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
12973                               || decl_constant_var_p (r)
12974                               || errorcount || sorrycount);
12975                   if (!processing_template_decl)
12976                     {
12977                       if (TREE_STATIC (r))
12978                         rest_of_decl_compilation (r, toplevel_bindings_p (),
12979                                                   at_eof);
12980                       else if (decl_constant_var_p (r))
12981                         /* A use of a local constant decays to its value.
12982                            FIXME update for core DR 696.  */
12983                         r = scalar_constant_value (r);
12984                     }
12985                 }
12986               /* Remember this for subsequent uses.  */
12987               if (local_specializations)
12988                 register_local_specialization (r, t);
12989             }
12990         }
12991       else
12992         r = t;
12993       if (!mark_used (r, complain) && !(complain & tf_error))
12994         return error_mark_node;
12995       return r;
12996
12997     case NAMESPACE_DECL:
12998       return t;
12999
13000     case OVERLOAD:
13001       /* An OVERLOAD will always be a non-dependent overload set; an
13002          overload set from function scope will just be represented with an
13003          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
13004       gcc_assert (!uses_template_parms (t));
13005       return t;
13006
13007     case BASELINK:
13008       return tsubst_baselink (t, current_nonlambda_class_type (),
13009                               args, complain, in_decl);
13010
13011     case TEMPLATE_DECL:
13012       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
13013         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
13014                        args, complain, in_decl);
13015       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
13016         return tsubst (t, args, complain, in_decl);
13017       else if (DECL_CLASS_SCOPE_P (t)
13018                && uses_template_parms (DECL_CONTEXT (t)))
13019         {
13020           /* Template template argument like the following example need
13021              special treatment:
13022
13023                template <template <class> class TT> struct C {};
13024                template <class T> struct D {
13025                  template <class U> struct E {};
13026                  C<E> c;                                // #1
13027                };
13028                D<int> d;                                // #2
13029
13030              We are processing the template argument `E' in #1 for
13031              the template instantiation #2.  Originally, `E' is a
13032              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
13033              have to substitute this with one having context `D<int>'.  */
13034
13035           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
13036           return lookup_field (context, DECL_NAME(t), 0, false);
13037         }
13038       else
13039         /* Ordinary template template argument.  */
13040         return t;
13041
13042     case CAST_EXPR:
13043     case REINTERPRET_CAST_EXPR:
13044     case CONST_CAST_EXPR:
13045     case STATIC_CAST_EXPR:
13046     case DYNAMIC_CAST_EXPR:
13047     case IMPLICIT_CONV_EXPR:
13048     case CONVERT_EXPR:
13049     case NOP_EXPR:
13050       {
13051         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13052         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13053         return build1 (code, type, op0);
13054       }
13055
13056     case SIZEOF_EXPR:
13057       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13058         {
13059
13060           tree expanded, op = TREE_OPERAND (t, 0);
13061           int len = 0;
13062
13063           if (SIZEOF_EXPR_TYPE_P (t))
13064             op = TREE_TYPE (op);
13065
13066           ++cp_unevaluated_operand;
13067           ++c_inhibit_evaluation_warnings;
13068           /* We only want to compute the number of arguments.  */
13069           expanded = tsubst_pack_expansion (op, args, complain, in_decl);
13070           --cp_unevaluated_operand;
13071           --c_inhibit_evaluation_warnings;
13072
13073           if (TREE_CODE (expanded) == TREE_VEC)
13074             len = TREE_VEC_LENGTH (expanded);
13075
13076           if (expanded == error_mark_node)
13077             return error_mark_node;
13078           else if (PACK_EXPANSION_P (expanded)
13079                    || (TREE_CODE (expanded) == TREE_VEC
13080                        && len > 0
13081                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
13082             {
13083               if (TREE_CODE (expanded) == TREE_VEC)
13084                 expanded = TREE_VEC_ELT (expanded, len - 1);
13085
13086               if (TYPE_P (expanded))
13087                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
13088                                                    complain & tf_error);
13089               else
13090                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
13091                                                    complain & tf_error);
13092             }
13093           else
13094             return build_int_cst (size_type_node, len);
13095         }
13096       if (SIZEOF_EXPR_TYPE_P (t))
13097         {
13098           r = tsubst (TREE_TYPE (TREE_OPERAND (t, 0)),
13099                       args, complain, in_decl);
13100           r = build1 (NOP_EXPR, r, error_mark_node);
13101           r = build1 (SIZEOF_EXPR,
13102                       tsubst (TREE_TYPE (t), args, complain, in_decl), r);
13103           SIZEOF_EXPR_TYPE_P (r) = 1;
13104           return r;
13105         }
13106       /* Fall through */
13107
13108     case INDIRECT_REF:
13109     case NEGATE_EXPR:
13110     case TRUTH_NOT_EXPR:
13111     case BIT_NOT_EXPR:
13112     case ADDR_EXPR:
13113     case UNARY_PLUS_EXPR:      /* Unary + */
13114     case ALIGNOF_EXPR:
13115     case AT_ENCODE_EXPR:
13116     case ARROW_EXPR:
13117     case THROW_EXPR:
13118     case TYPEID_EXPR:
13119     case REALPART_EXPR:
13120     case IMAGPART_EXPR:
13121     case PAREN_EXPR:
13122       {
13123         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13124         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13125         return build1 (code, type, op0);
13126       }
13127
13128     case COMPONENT_REF:
13129       {
13130         tree object;
13131         tree name;
13132
13133         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13134         name = TREE_OPERAND (t, 1);
13135         if (TREE_CODE (name) == BIT_NOT_EXPR)
13136           {
13137             name = tsubst_copy (TREE_OPERAND (name, 0), args,
13138                                 complain, in_decl);
13139             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
13140           }
13141         else if (TREE_CODE (name) == SCOPE_REF
13142                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
13143           {
13144             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
13145                                      complain, in_decl);
13146             name = TREE_OPERAND (name, 1);
13147             name = tsubst_copy (TREE_OPERAND (name, 0), args,
13148                                 complain, in_decl);
13149             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
13150             name = build_qualified_name (/*type=*/NULL_TREE,
13151                                          base, name,
13152                                          /*template_p=*/false);
13153           }
13154         else if (BASELINK_P (name))
13155           name = tsubst_baselink (name,
13156                                   non_reference (TREE_TYPE (object)),
13157                                   args, complain,
13158                                   in_decl);
13159         else
13160           name = tsubst_copy (name, args, complain, in_decl);
13161         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
13162       }
13163
13164     case PLUS_EXPR:
13165     case MINUS_EXPR:
13166     case MULT_EXPR:
13167     case TRUNC_DIV_EXPR:
13168     case CEIL_DIV_EXPR:
13169     case FLOOR_DIV_EXPR:
13170     case ROUND_DIV_EXPR:
13171     case EXACT_DIV_EXPR:
13172     case BIT_AND_EXPR:
13173     case BIT_IOR_EXPR:
13174     case BIT_XOR_EXPR:
13175     case TRUNC_MOD_EXPR:
13176     case FLOOR_MOD_EXPR:
13177     case TRUTH_ANDIF_EXPR:
13178     case TRUTH_ORIF_EXPR:
13179     case TRUTH_AND_EXPR:
13180     case TRUTH_OR_EXPR:
13181     case RSHIFT_EXPR:
13182     case LSHIFT_EXPR:
13183     case RROTATE_EXPR:
13184     case LROTATE_EXPR:
13185     case EQ_EXPR:
13186     case NE_EXPR:
13187     case MAX_EXPR:
13188     case MIN_EXPR:
13189     case LE_EXPR:
13190     case GE_EXPR:
13191     case LT_EXPR:
13192     case GT_EXPR:
13193     case COMPOUND_EXPR:
13194     case DOTSTAR_EXPR:
13195     case MEMBER_REF:
13196     case PREDECREMENT_EXPR:
13197     case PREINCREMENT_EXPR:
13198     case POSTDECREMENT_EXPR:
13199     case POSTINCREMENT_EXPR:
13200       {
13201         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13202         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13203         return build_nt (code, op0, op1);
13204       }
13205
13206     case SCOPE_REF:
13207       {
13208         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13209         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13210         return build_qualified_name (/*type=*/NULL_TREE, op0, op1,
13211                                      QUALIFIED_NAME_IS_TEMPLATE (t));
13212       }
13213
13214     case ARRAY_REF:
13215       {
13216         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13217         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13218         return build_nt (ARRAY_REF, op0, op1, NULL_TREE, NULL_TREE);
13219       }
13220
13221     case CALL_EXPR:
13222       {
13223         int n = VL_EXP_OPERAND_LENGTH (t);
13224         tree result = build_vl_exp (CALL_EXPR, n);
13225         int i;
13226         for (i = 0; i < n; i++)
13227           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
13228                                              complain, in_decl);
13229         return result;
13230       }
13231
13232     case COND_EXPR:
13233     case MODOP_EXPR:
13234     case PSEUDO_DTOR_EXPR:
13235     case VEC_PERM_EXPR:
13236       {
13237         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13238         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13239         tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
13240         r = build_nt (code, op0, op1, op2);
13241         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13242         return r;
13243       }
13244
13245     case NEW_EXPR:
13246       {
13247         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13248         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13249         tree op2 = tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl);
13250         r = build_nt (code, op0, op1, op2);
13251         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
13252         return r;
13253       }
13254
13255     case DELETE_EXPR:
13256       {
13257         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13258         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13259         r = build_nt (code, op0, op1);
13260         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
13261         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
13262         return r;
13263       }
13264
13265     case TEMPLATE_ID_EXPR:
13266       {
13267         /* Substituted template arguments */
13268         tree fn = TREE_OPERAND (t, 0);
13269         tree targs = TREE_OPERAND (t, 1);
13270
13271         fn = tsubst_copy (fn, args, complain, in_decl);
13272         if (targs)
13273           targs = tsubst_template_args (targs, args, complain, in_decl);
13274
13275         return lookup_template_function (fn, targs);
13276       }
13277
13278     case TREE_LIST:
13279       {
13280         tree purpose, value, chain;
13281
13282         if (t == void_list_node)
13283           return t;
13284
13285         purpose = TREE_PURPOSE (t);
13286         if (purpose)
13287           purpose = tsubst_copy (purpose, args, complain, in_decl);
13288         value = TREE_VALUE (t);
13289         if (value)
13290           value = tsubst_copy (value, args, complain, in_decl);
13291         chain = TREE_CHAIN (t);
13292         if (chain && chain != void_type_node)
13293           chain = tsubst_copy (chain, args, complain, in_decl);
13294         if (purpose == TREE_PURPOSE (t)
13295             && value == TREE_VALUE (t)
13296             && chain == TREE_CHAIN (t))
13297           return t;
13298         return tree_cons (purpose, value, chain);
13299       }
13300
13301     case RECORD_TYPE:
13302     case UNION_TYPE:
13303     case ENUMERAL_TYPE:
13304     case INTEGER_TYPE:
13305     case TEMPLATE_TYPE_PARM:
13306     case TEMPLATE_TEMPLATE_PARM:
13307     case BOUND_TEMPLATE_TEMPLATE_PARM:
13308     case TEMPLATE_PARM_INDEX:
13309     case POINTER_TYPE:
13310     case REFERENCE_TYPE:
13311     case OFFSET_TYPE:
13312     case FUNCTION_TYPE:
13313     case METHOD_TYPE:
13314     case ARRAY_TYPE:
13315     case TYPENAME_TYPE:
13316     case UNBOUND_CLASS_TEMPLATE:
13317     case TYPEOF_TYPE:
13318     case DECLTYPE_TYPE:
13319     case TYPE_DECL:
13320       return tsubst (t, args, complain, in_decl);
13321
13322     case USING_DECL:
13323       t = DECL_NAME (t);
13324       /* Fall through.  */
13325     case IDENTIFIER_NODE:
13326       if (IDENTIFIER_TYPENAME_P (t))
13327         {
13328           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13329           return mangle_conv_op_name_for_type (new_type);
13330         }
13331       else
13332         return t;
13333
13334     case CONSTRUCTOR:
13335       /* This is handled by tsubst_copy_and_build.  */
13336       gcc_unreachable ();
13337
13338     case VA_ARG_EXPR:
13339       {
13340         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13341         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13342         return build_x_va_arg (EXPR_LOCATION (t), op0, type);
13343       }
13344
13345     case CLEANUP_POINT_EXPR:
13346       /* We shouldn't have built any of these during initial template
13347          generation.  Instead, they should be built during instantiation
13348          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
13349       gcc_unreachable ();
13350
13351     case OFFSET_REF:
13352       {
13353         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13354         tree op0 = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
13355         tree op1 = tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl);
13356         r = build2 (code, type, op0, op1);
13357         PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
13358         if (!mark_used (TREE_OPERAND (r, 1), complain)
13359             && !(complain & tf_error))
13360           return error_mark_node;
13361         return r;
13362       }
13363
13364     case EXPR_PACK_EXPANSION:
13365       error ("invalid use of pack expansion expression");
13366       return error_mark_node;
13367
13368     case NONTYPE_ARGUMENT_PACK:
13369       error ("use %<...%> to expand argument pack");
13370       return error_mark_node;
13371
13372     case VOID_CST:
13373       gcc_checking_assert (t == void_node && VOID_TYPE_P (TREE_TYPE (t)));
13374       return t;
13375
13376     case INTEGER_CST:
13377     case REAL_CST:
13378     case STRING_CST:
13379     case COMPLEX_CST:
13380       {
13381         /* Instantiate any typedefs in the type.  */
13382         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13383         r = fold_convert (type, t);
13384         gcc_assert (TREE_CODE (r) == code);
13385         return r;
13386       }
13387
13388     case PTRMEM_CST:
13389       /* These can sometimes show up in a partial instantiation, but never
13390          involve template parms.  */
13391       gcc_assert (!uses_template_parms (t));
13392       return t;
13393
13394     default:
13395       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
13396       gcc_checking_assert (false);
13397       return t;
13398     }
13399 }
13400
13401 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
13402
13403 static tree
13404 tsubst_omp_clauses (tree clauses, bool declare_simd,
13405                     tree args, tsubst_flags_t complain, tree in_decl)
13406 {
13407   tree new_clauses = NULL, nc, oc;
13408
13409   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
13410     {
13411       nc = copy_node (oc);
13412       OMP_CLAUSE_CHAIN (nc) = new_clauses;
13413       new_clauses = nc;
13414
13415       switch (OMP_CLAUSE_CODE (nc))
13416         {
13417         case OMP_CLAUSE_LASTPRIVATE:
13418           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
13419             {
13420               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
13421               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
13422                            in_decl, /*integral_constant_expression_p=*/false);
13423               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
13424                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
13425             }
13426           /* FALLTHRU */
13427         case OMP_CLAUSE_PRIVATE:
13428         case OMP_CLAUSE_SHARED:
13429         case OMP_CLAUSE_FIRSTPRIVATE:
13430         case OMP_CLAUSE_COPYIN:
13431         case OMP_CLAUSE_COPYPRIVATE:
13432         case OMP_CLAUSE_IF:
13433         case OMP_CLAUSE_NUM_THREADS:
13434         case OMP_CLAUSE_SCHEDULE:
13435         case OMP_CLAUSE_COLLAPSE:
13436         case OMP_CLAUSE_FINAL:
13437         case OMP_CLAUSE_DEPEND:
13438         case OMP_CLAUSE_FROM:
13439         case OMP_CLAUSE_TO:
13440         case OMP_CLAUSE_UNIFORM:
13441         case OMP_CLAUSE_MAP:
13442         case OMP_CLAUSE_DEVICE:
13443         case OMP_CLAUSE_DIST_SCHEDULE:
13444         case OMP_CLAUSE_NUM_TEAMS:
13445         case OMP_CLAUSE_THREAD_LIMIT:
13446         case OMP_CLAUSE_SAFELEN:
13447         case OMP_CLAUSE_SIMDLEN:
13448           OMP_CLAUSE_OPERAND (nc, 0)
13449             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
13450                            in_decl, /*integral_constant_expression_p=*/false);
13451           break;
13452         case OMP_CLAUSE_REDUCTION:
13453           if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc))
13454             {
13455               tree placeholder = OMP_CLAUSE_REDUCTION_PLACEHOLDER (oc);
13456               if (TREE_CODE (placeholder) == SCOPE_REF)
13457                 {
13458                   tree scope = tsubst (TREE_OPERAND (placeholder, 0), args,
13459                                        complain, in_decl);
13460                   OMP_CLAUSE_REDUCTION_PLACEHOLDER (nc)
13461                     = build_qualified_name (NULL_TREE, scope,
13462                                             TREE_OPERAND (placeholder, 1),
13463                                             false);
13464                 }
13465               else
13466                 gcc_assert (identifier_p (placeholder));
13467             }
13468           OMP_CLAUSE_OPERAND (nc, 0)
13469             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13470                            in_decl, /*integral_constant_expression_p=*/false);
13471           break;
13472         case OMP_CLAUSE_LINEAR:
13473         case OMP_CLAUSE_ALIGNED:
13474           OMP_CLAUSE_OPERAND (nc, 0)
13475             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain,
13476                            in_decl, /*integral_constant_expression_p=*/false);
13477           OMP_CLAUSE_OPERAND (nc, 1)
13478             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 1), args, complain,
13479                            in_decl, /*integral_constant_expression_p=*/false);
13480           break;
13481
13482         case OMP_CLAUSE_NOWAIT:
13483         case OMP_CLAUSE_ORDERED:
13484         case OMP_CLAUSE_DEFAULT:
13485         case OMP_CLAUSE_UNTIED:
13486         case OMP_CLAUSE_MERGEABLE:
13487         case OMP_CLAUSE_INBRANCH:
13488         case OMP_CLAUSE_NOTINBRANCH:
13489         case OMP_CLAUSE_PROC_BIND:
13490         case OMP_CLAUSE_FOR:
13491         case OMP_CLAUSE_PARALLEL:
13492         case OMP_CLAUSE_SECTIONS:
13493         case OMP_CLAUSE_TASKGROUP:
13494           break;
13495         default:
13496           gcc_unreachable ();
13497         }
13498     }
13499
13500   new_clauses = nreverse (new_clauses);
13501   if (!declare_simd)
13502     new_clauses = finish_omp_clauses (new_clauses);
13503   return new_clauses;
13504 }
13505
13506 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
13507
13508 static tree
13509 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
13510                           tree in_decl)
13511 {
13512 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
13513
13514   tree purpose, value, chain;
13515
13516   if (t == NULL)
13517     return t;
13518
13519   if (TREE_CODE (t) != TREE_LIST)
13520     return tsubst_copy_and_build (t, args, complain, in_decl,
13521                                   /*function_p=*/false,
13522                                   /*integral_constant_expression_p=*/false);
13523
13524   if (t == void_list_node)
13525     return t;
13526
13527   purpose = TREE_PURPOSE (t);
13528   if (purpose)
13529     purpose = RECUR (purpose);
13530   value = TREE_VALUE (t);
13531   if (value)
13532     {
13533       if (TREE_CODE (value) != LABEL_DECL)
13534         value = RECUR (value);
13535       else
13536         {
13537           value = lookup_label (DECL_NAME (value));
13538           gcc_assert (TREE_CODE (value) == LABEL_DECL);
13539           TREE_USED (value) = 1;
13540         }
13541     }
13542   chain = TREE_CHAIN (t);
13543   if (chain && chain != void_type_node)
13544     chain = RECUR (chain);
13545   return tree_cons (purpose, value, chain);
13546 #undef RECUR
13547 }
13548
13549 /* Substitute one OMP_FOR iterator.  */
13550
13551 static void
13552 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
13553                          tree condv, tree incrv, tree *clauses,
13554                          tree args, tsubst_flags_t complain, tree in_decl,
13555                          bool integral_constant_expression_p)
13556 {
13557 #define RECUR(NODE)                             \
13558   tsubst_expr ((NODE), args, complain, in_decl, \
13559                integral_constant_expression_p)
13560   tree decl, init, cond, incr;
13561
13562   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
13563   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
13564   decl = TREE_OPERAND (init, 0);
13565   init = TREE_OPERAND (init, 1);
13566   tree decl_expr = NULL_TREE;
13567   if (init && TREE_CODE (init) == DECL_EXPR)
13568     {
13569       /* We need to jump through some hoops to handle declarations in the
13570          for-init-statement, since we might need to handle auto deduction,
13571          but we need to keep control of initialization.  */
13572       decl_expr = init;
13573       init = DECL_INITIAL (DECL_EXPR_DECL (init));
13574       decl = tsubst_decl (decl, args, complain);
13575     }
13576   else
13577     decl = RECUR (decl);
13578   init = RECUR (init);
13579
13580   tree auto_node = type_uses_auto (TREE_TYPE (decl));
13581   if (auto_node && init)
13582     TREE_TYPE (decl)
13583       = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
13584
13585   gcc_assert (!type_dependent_expression_p (decl));
13586
13587   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
13588     {
13589       if (decl_expr)
13590         {
13591           /* Declare the variable, but don't let that initialize it.  */
13592           tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
13593           DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
13594           RECUR (decl_expr);
13595           DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
13596         }
13597
13598       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
13599       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13600       if (TREE_CODE (incr) == MODIFY_EXPR)
13601         {
13602           tree lhs = RECUR (TREE_OPERAND (incr, 0));
13603           tree rhs = RECUR (TREE_OPERAND (incr, 1));
13604           incr = build_x_modify_expr (EXPR_LOCATION (incr), lhs,
13605                                       NOP_EXPR, rhs, complain);
13606         }
13607       else
13608         incr = RECUR (incr);
13609       TREE_VEC_ELT (declv, i) = decl;
13610       TREE_VEC_ELT (initv, i) = init;
13611       TREE_VEC_ELT (condv, i) = cond;
13612       TREE_VEC_ELT (incrv, i) = incr;
13613       return;
13614     }
13615
13616   if (decl_expr)
13617     {
13618       /* Declare and initialize the variable.  */
13619       RECUR (decl_expr);
13620       init = NULL_TREE;
13621     }
13622   else if (init)
13623     {
13624       tree c;
13625       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
13626         {
13627           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
13628                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
13629               && OMP_CLAUSE_DECL (c) == decl)
13630             break;
13631           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
13632                    && OMP_CLAUSE_DECL (c) == decl)
13633             error ("iteration variable %qD should not be firstprivate", decl);
13634           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
13635                    && OMP_CLAUSE_DECL (c) == decl)
13636             error ("iteration variable %qD should not be reduction", decl);
13637         }
13638       if (c == NULL)
13639         {
13640           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
13641           OMP_CLAUSE_DECL (c) = decl;
13642           c = finish_omp_clauses (c);
13643           if (c)
13644             {
13645               OMP_CLAUSE_CHAIN (c) = *clauses;
13646               *clauses = c;
13647             }
13648         }
13649     }
13650   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
13651   if (COMPARISON_CLASS_P (cond))
13652     {
13653       tree op0 = RECUR (TREE_OPERAND (cond, 0));
13654       tree op1 = RECUR (TREE_OPERAND (cond, 1));
13655       cond = build2 (TREE_CODE (cond), boolean_type_node, op0, op1);
13656     }
13657   else
13658     cond = RECUR (cond);
13659   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
13660   switch (TREE_CODE (incr))
13661     {
13662     case PREINCREMENT_EXPR:
13663     case PREDECREMENT_EXPR:
13664     case POSTINCREMENT_EXPR:
13665     case POSTDECREMENT_EXPR:
13666       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
13667                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
13668       break;
13669     case MODIFY_EXPR:
13670       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13671           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13672         {
13673           tree rhs = TREE_OPERAND (incr, 1);
13674           tree lhs = RECUR (TREE_OPERAND (incr, 0));
13675           tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
13676           tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
13677           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13678                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13679                                  rhs0, rhs1));
13680         }
13681       else
13682         incr = RECUR (incr);
13683       break;
13684     case MODOP_EXPR:
13685       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
13686           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
13687         {
13688           tree lhs = RECUR (TREE_OPERAND (incr, 0));
13689           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13690                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
13691                                  TREE_TYPE (decl), lhs,
13692                                  RECUR (TREE_OPERAND (incr, 2))));
13693         }
13694       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
13695                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
13696                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
13697         {
13698           tree rhs = TREE_OPERAND (incr, 2);
13699           tree lhs = RECUR (TREE_OPERAND (incr, 0));
13700           tree rhs0 = RECUR (TREE_OPERAND (rhs, 0));
13701           tree rhs1 = RECUR (TREE_OPERAND (rhs, 1));
13702           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
13703                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
13704                                  rhs0, rhs1));
13705         }
13706       else
13707         incr = RECUR (incr);
13708       break;
13709     default:
13710       incr = RECUR (incr);
13711       break;
13712     }
13713
13714   TREE_VEC_ELT (declv, i) = decl;
13715   TREE_VEC_ELT (initv, i) = init;
13716   TREE_VEC_ELT (condv, i) = cond;
13717   TREE_VEC_ELT (incrv, i) = incr;
13718 #undef RECUR
13719 }
13720
13721 /* Like tsubst_copy for expressions, etc. but also does semantic
13722    processing.  */
13723
13724 static tree
13725 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
13726              bool integral_constant_expression_p)
13727 {
13728 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
13729 #define RECUR(NODE)                             \
13730   tsubst_expr ((NODE), args, complain, in_decl, \
13731                integral_constant_expression_p)
13732
13733   tree stmt, tmp;
13734   tree r;
13735   location_t loc;
13736
13737   if (t == NULL_TREE || t == error_mark_node)
13738     return t;
13739
13740   loc = input_location;
13741   if (EXPR_HAS_LOCATION (t))
13742     input_location = EXPR_LOCATION (t);
13743   if (STATEMENT_CODE_P (TREE_CODE (t)))
13744     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
13745
13746   switch (TREE_CODE (t))
13747     {
13748     case STATEMENT_LIST:
13749       {
13750         tree_stmt_iterator i;
13751         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
13752           RECUR (tsi_stmt (i));
13753         break;
13754       }
13755
13756     case CTOR_INITIALIZER:
13757       finish_mem_initializers (tsubst_initializer_list
13758                                (TREE_OPERAND (t, 0), args));
13759       break;
13760
13761     case RETURN_EXPR:
13762       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
13763       break;
13764
13765     case EXPR_STMT:
13766       tmp = RECUR (EXPR_STMT_EXPR (t));
13767       if (EXPR_STMT_STMT_EXPR_RESULT (t))
13768         finish_stmt_expr_expr (tmp, cur_stmt_expr);
13769       else
13770         finish_expr_stmt (tmp);
13771       break;
13772
13773     case USING_STMT:
13774       do_using_directive (USING_STMT_NAMESPACE (t));
13775       break;
13776
13777     case DECL_EXPR:
13778       {
13779         tree decl, pattern_decl;
13780         tree init;
13781
13782         pattern_decl = decl = DECL_EXPR_DECL (t);
13783         if (TREE_CODE (decl) == LABEL_DECL)
13784           finish_label_decl (DECL_NAME (decl));
13785         else if (TREE_CODE (decl) == USING_DECL)
13786           {
13787             tree scope = USING_DECL_SCOPE (decl);
13788             tree name = DECL_NAME (decl);
13789             tree decl;
13790
13791             scope = tsubst (scope, args, complain, in_decl);
13792             decl = lookup_qualified_name (scope, name,
13793                                           /*is_type_p=*/false,
13794                                           /*complain=*/false);
13795             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
13796               qualified_name_lookup_error (scope, name, decl, input_location);
13797             else
13798               do_local_using_decl (decl, scope, name);
13799           }
13800         else if (DECL_PACK_P (decl))
13801           {
13802             /* Don't build up decls for a variadic capture proxy, we'll
13803                instantiate the elements directly as needed.  */
13804             break;
13805           }
13806         else
13807           {
13808             init = DECL_INITIAL (decl);
13809             decl = tsubst (decl, args, complain, in_decl);
13810             if (decl != error_mark_node)
13811               {
13812                 /* By marking the declaration as instantiated, we avoid
13813                    trying to instantiate it.  Since instantiate_decl can't
13814                    handle local variables, and since we've already done
13815                    all that needs to be done, that's the right thing to
13816                    do.  */
13817                 if (VAR_P (decl))
13818                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
13819                 if (VAR_P (decl)
13820                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
13821                   /* Anonymous aggregates are a special case.  */
13822                   finish_anon_union (decl);
13823                 else if (is_capture_proxy (DECL_EXPR_DECL (t)))
13824                   {
13825                     DECL_CONTEXT (decl) = current_function_decl;
13826                     if (DECL_NAME (decl) == this_identifier)
13827                       {
13828                         tree lam = DECL_CONTEXT (current_function_decl);
13829                         lam = CLASSTYPE_LAMBDA_EXPR (lam);
13830                         LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
13831                       }
13832                     insert_capture_proxy (decl);
13833                   }
13834                 else if (DECL_IMPLICIT_TYPEDEF_P (t))
13835                   /* We already did a pushtag.  */;
13836                 else if (TREE_CODE (decl) == FUNCTION_DECL
13837                          && DECL_OMP_DECLARE_REDUCTION_P (decl)
13838                          && DECL_FUNCTION_SCOPE_P (pattern_decl))
13839                   {
13840                     DECL_CONTEXT (decl) = NULL_TREE;
13841                     pushdecl (decl);
13842                     DECL_CONTEXT (decl) = current_function_decl;
13843                     cp_check_omp_declare_reduction (decl);
13844                   }
13845                 else
13846                   {
13847                     int const_init = false;
13848                     maybe_push_decl (decl);
13849                     if (VAR_P (decl)
13850                         && DECL_PRETTY_FUNCTION_P (decl))
13851                       {
13852                         /* For __PRETTY_FUNCTION__ we have to adjust the
13853                            initializer.  */
13854                         const char *const name
13855                           = cxx_printable_name (current_function_decl, 2);
13856                         init = cp_fname_init (name, &TREE_TYPE (decl));
13857                       }
13858                     else
13859                       init = tsubst_init (init, decl, args, complain, in_decl);
13860
13861                     if (VAR_P (decl))
13862                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
13863                                     (pattern_decl));
13864                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
13865                   }
13866               }
13867           }
13868
13869         break;
13870       }
13871
13872     case FOR_STMT:
13873       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13874       RECUR (FOR_INIT_STMT (t));
13875       finish_for_init_stmt (stmt);
13876       tmp = RECUR (FOR_COND (t));
13877       finish_for_cond (tmp, stmt, false);
13878       tmp = RECUR (FOR_EXPR (t));
13879       finish_for_expr (tmp, stmt);
13880       RECUR (FOR_BODY (t));
13881       finish_for_stmt (stmt);
13882       break;
13883
13884     case RANGE_FOR_STMT:
13885       {
13886         tree decl, expr;
13887         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
13888         decl = RANGE_FOR_DECL (t);
13889         decl = tsubst (decl, args, complain, in_decl);
13890         maybe_push_decl (decl);
13891         expr = RECUR (RANGE_FOR_EXPR (t));
13892         stmt = cp_convert_range_for (stmt, decl, expr, RANGE_FOR_IVDEP (t));
13893         RECUR (RANGE_FOR_BODY (t));
13894         finish_for_stmt (stmt);
13895       }
13896       break;
13897
13898     case WHILE_STMT:
13899       stmt = begin_while_stmt ();
13900       tmp = RECUR (WHILE_COND (t));
13901       finish_while_stmt_cond (tmp, stmt, false);
13902       RECUR (WHILE_BODY (t));
13903       finish_while_stmt (stmt);
13904       break;
13905
13906     case DO_STMT:
13907       stmt = begin_do_stmt ();
13908       RECUR (DO_BODY (t));
13909       finish_do_body (stmt);
13910       tmp = RECUR (DO_COND (t));
13911       finish_do_stmt (tmp, stmt, false);
13912       break;
13913
13914     case IF_STMT:
13915       stmt = begin_if_stmt ();
13916       tmp = RECUR (IF_COND (t));
13917       finish_if_stmt_cond (tmp, stmt);
13918       RECUR (THEN_CLAUSE (t));
13919       finish_then_clause (stmt);
13920
13921       if (ELSE_CLAUSE (t))
13922         {
13923           begin_else_clause (stmt);
13924           RECUR (ELSE_CLAUSE (t));
13925           finish_else_clause (stmt);
13926         }
13927
13928       finish_if_stmt (stmt);
13929       break;
13930
13931     case BIND_EXPR:
13932       if (BIND_EXPR_BODY_BLOCK (t))
13933         stmt = begin_function_body ();
13934       else
13935         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
13936                                     ? BCS_TRY_BLOCK : 0);
13937
13938       RECUR (BIND_EXPR_BODY (t));
13939
13940       if (BIND_EXPR_BODY_BLOCK (t))
13941         finish_function_body (stmt);
13942       else
13943         finish_compound_stmt (stmt);
13944       break;
13945
13946     case BREAK_STMT:
13947       finish_break_stmt ();
13948       break;
13949
13950     case CONTINUE_STMT:
13951       finish_continue_stmt ();
13952       break;
13953
13954     case SWITCH_STMT:
13955       stmt = begin_switch_stmt ();
13956       tmp = RECUR (SWITCH_STMT_COND (t));
13957       finish_switch_cond (tmp, stmt);
13958       RECUR (SWITCH_STMT_BODY (t));
13959       finish_switch_stmt (stmt);
13960       break;
13961
13962     case CASE_LABEL_EXPR:
13963       {
13964         tree low = RECUR (CASE_LOW (t));
13965         tree high = RECUR (CASE_HIGH (t));
13966         finish_case_label (EXPR_LOCATION (t), low, high);
13967       }
13968       break;
13969
13970     case LABEL_EXPR:
13971       {
13972         tree decl = LABEL_EXPR_LABEL (t);
13973         tree label;
13974
13975         label = finish_label_stmt (DECL_NAME (decl));
13976         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
13977           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
13978       }
13979       break;
13980
13981     case GOTO_EXPR:
13982       tmp = GOTO_DESTINATION (t);
13983       if (TREE_CODE (tmp) != LABEL_DECL)
13984         /* Computed goto's must be tsubst'd into.  On the other hand,
13985            non-computed gotos must not be; the identifier in question
13986            will have no binding.  */
13987         tmp = RECUR (tmp);
13988       else
13989         tmp = DECL_NAME (tmp);
13990       finish_goto_stmt (tmp);
13991       break;
13992
13993     case ASM_EXPR:
13994       {
13995         tree string = RECUR (ASM_STRING (t));
13996         tree outputs = tsubst_copy_asm_operands (ASM_OUTPUTS (t), args,
13997                                                  complain, in_decl);
13998         tree inputs = tsubst_copy_asm_operands (ASM_INPUTS (t), args,
13999                                                 complain, in_decl);
14000         tree clobbers = tsubst_copy_asm_operands (ASM_CLOBBERS (t), args,
14001                                                   complain, in_decl);
14002         tree labels = tsubst_copy_asm_operands (ASM_LABELS (t), args,
14003                                                 complain, in_decl);
14004         tmp = finish_asm_stmt (ASM_VOLATILE_P (t), string, outputs, inputs,
14005                                clobbers, labels);
14006         tree asm_expr = tmp;
14007         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
14008           asm_expr = TREE_OPERAND (asm_expr, 0);
14009         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
14010       }
14011       break;
14012
14013     case TRY_BLOCK:
14014       if (CLEANUP_P (t))
14015         {
14016           stmt = begin_try_block ();
14017           RECUR (TRY_STMTS (t));
14018           finish_cleanup_try_block (stmt);
14019           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
14020         }
14021       else
14022         {
14023           tree compound_stmt = NULL_TREE;
14024
14025           if (FN_TRY_BLOCK_P (t))
14026             stmt = begin_function_try_block (&compound_stmt);
14027           else
14028             stmt = begin_try_block ();
14029
14030           RECUR (TRY_STMTS (t));
14031
14032           if (FN_TRY_BLOCK_P (t))
14033             finish_function_try_block (stmt);
14034           else
14035             finish_try_block (stmt);
14036
14037           RECUR (TRY_HANDLERS (t));
14038           if (FN_TRY_BLOCK_P (t))
14039             finish_function_handler_sequence (stmt, compound_stmt);
14040           else
14041             finish_handler_sequence (stmt);
14042         }
14043       break;
14044
14045     case HANDLER:
14046       {
14047         tree decl = HANDLER_PARMS (t);
14048
14049         if (decl)
14050           {
14051             decl = tsubst (decl, args, complain, in_decl);
14052             /* Prevent instantiate_decl from trying to instantiate
14053                this variable.  We've already done all that needs to be
14054                done.  */
14055             if (decl != error_mark_node)
14056               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
14057           }
14058         stmt = begin_handler ();
14059         finish_handler_parms (decl, stmt);
14060         RECUR (HANDLER_BODY (t));
14061         finish_handler (stmt);
14062       }
14063       break;
14064
14065     case TAG_DEFN:
14066       tmp = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
14067       if (CLASS_TYPE_P (tmp))
14068         {
14069           /* Local classes are not independent templates; they are
14070              instantiated along with their containing function.  And this
14071              way we don't have to deal with pushing out of one local class
14072              to instantiate a member of another local class.  */
14073           tree fn;
14074           /* Closures are handled by the LAMBDA_EXPR.  */
14075           gcc_assert (!LAMBDA_TYPE_P (TREE_TYPE (t)));
14076           complete_type (tmp);
14077           for (fn = TYPE_METHODS (tmp); fn; fn = DECL_CHAIN (fn))
14078             if (!DECL_ARTIFICIAL (fn))
14079               instantiate_decl (fn, /*defer_ok*/0, /*expl_inst_class*/false);
14080         }
14081       break;
14082
14083     case STATIC_ASSERT:
14084       {
14085         tree condition;
14086
14087         ++c_inhibit_evaluation_warnings;
14088         condition = 
14089           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
14090                        args,
14091                        complain, in_decl,
14092                        /*integral_constant_expression_p=*/true);
14093         --c_inhibit_evaluation_warnings;
14094
14095         finish_static_assert (condition,
14096                               STATIC_ASSERT_MESSAGE (t),
14097                               STATIC_ASSERT_SOURCE_LOCATION (t),
14098                               /*member_p=*/false);
14099       }
14100       break;
14101
14102     case OMP_PARALLEL:
14103       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t), false,
14104                                 args, complain, in_decl);
14105       stmt = begin_omp_parallel ();
14106       RECUR (OMP_PARALLEL_BODY (t));
14107       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
14108         = OMP_PARALLEL_COMBINED (t);
14109       break;
14110
14111     case OMP_TASK:
14112       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t), false,
14113                                 args, complain, in_decl);
14114       stmt = begin_omp_task ();
14115       RECUR (OMP_TASK_BODY (t));
14116       finish_omp_task (tmp, stmt);
14117       break;
14118
14119     case OMP_FOR:
14120     case OMP_SIMD:
14121     case CILK_SIMD:
14122     case CILK_FOR:
14123     case OMP_DISTRIBUTE:
14124       {
14125         tree clauses, body, pre_body;
14126         tree declv = NULL_TREE, initv = NULL_TREE, condv = NULL_TREE;
14127         tree incrv = NULL_TREE;
14128         int i;
14129
14130         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t), false,
14131                                       args, complain, in_decl);
14132         if (OMP_FOR_INIT (t) != NULL_TREE)
14133           {
14134             declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14135             initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14136             condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14137             incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
14138           }
14139
14140         stmt = begin_omp_structured_block ();
14141
14142         pre_body = push_stmt_list ();
14143         RECUR (OMP_FOR_PRE_BODY (t));
14144         pre_body = pop_stmt_list (pre_body);
14145
14146         if (OMP_FOR_INIT (t) != NULL_TREE)
14147           for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
14148             tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
14149                                      &clauses, args, complain, in_decl,
14150                                      integral_constant_expression_p);
14151
14152         body = push_stmt_list ();
14153         RECUR (OMP_FOR_BODY (t));
14154         body = pop_stmt_list (body);
14155
14156         if (OMP_FOR_INIT (t) != NULL_TREE)
14157           t = finish_omp_for (EXPR_LOCATION (t), TREE_CODE (t), declv, initv,
14158                               condv, incrv, body, pre_body, clauses);
14159         else
14160           {
14161             t = make_node (TREE_CODE (t));
14162             TREE_TYPE (t) = void_type_node;
14163             OMP_FOR_BODY (t) = body;
14164             OMP_FOR_PRE_BODY (t) = pre_body;
14165             OMP_FOR_CLAUSES (t) = clauses;
14166             SET_EXPR_LOCATION (t, EXPR_LOCATION (t));
14167             add_stmt (t);
14168           }
14169
14170         add_stmt (finish_omp_structured_block (stmt));
14171       }
14172       break;
14173
14174     case OMP_SECTIONS:
14175     case OMP_SINGLE:
14176     case OMP_TEAMS:
14177       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
14178                                 args, complain, in_decl);
14179       stmt = push_stmt_list ();
14180       RECUR (OMP_BODY (t));
14181       stmt = pop_stmt_list (stmt);
14182
14183       t = copy_node (t);
14184       OMP_BODY (t) = stmt;
14185       OMP_CLAUSES (t) = tmp;
14186       add_stmt (t);
14187       break;
14188
14189     case OMP_TARGET_DATA:
14190     case OMP_TARGET:
14191       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), false,
14192                                 args, complain, in_decl);
14193       keep_next_level (true);
14194       stmt = begin_omp_structured_block ();
14195
14196       RECUR (OMP_BODY (t));
14197       stmt = finish_omp_structured_block (stmt);
14198
14199       t = copy_node (t);
14200       OMP_BODY (t) = stmt;
14201       OMP_CLAUSES (t) = tmp;
14202       add_stmt (t);
14203       break;
14204
14205     case OMP_TARGET_UPDATE:
14206       tmp = tsubst_omp_clauses (OMP_TARGET_UPDATE_CLAUSES (t), false,
14207                                 args, complain, in_decl);
14208       t = copy_node (t);
14209       OMP_CLAUSES (t) = tmp;
14210       add_stmt (t);
14211       break;
14212
14213     case OMP_SECTION:
14214     case OMP_CRITICAL:
14215     case OMP_MASTER:
14216     case OMP_TASKGROUP:
14217     case OMP_ORDERED:
14218       stmt = push_stmt_list ();
14219       RECUR (OMP_BODY (t));
14220       stmt = pop_stmt_list (stmt);
14221
14222       t = copy_node (t);
14223       OMP_BODY (t) = stmt;
14224       add_stmt (t);
14225       break;
14226
14227     case OMP_ATOMIC:
14228       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
14229       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
14230         {
14231           tree op1 = TREE_OPERAND (t, 1);
14232           tree rhs1 = NULL_TREE;
14233           tree lhs, rhs;
14234           if (TREE_CODE (op1) == COMPOUND_EXPR)
14235             {
14236               rhs1 = RECUR (TREE_OPERAND (op1, 0));
14237               op1 = TREE_OPERAND (op1, 1);
14238             }
14239           lhs = RECUR (TREE_OPERAND (op1, 0));
14240           rhs = RECUR (TREE_OPERAND (op1, 1));
14241           finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
14242                              NULL_TREE, NULL_TREE, rhs1,
14243                              OMP_ATOMIC_SEQ_CST (t));
14244         }
14245       else
14246         {
14247           tree op1 = TREE_OPERAND (t, 1);
14248           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
14249           tree rhs1 = NULL_TREE;
14250           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
14251           enum tree_code opcode = NOP_EXPR;
14252           if (code == OMP_ATOMIC_READ)
14253             {
14254               v = RECUR (TREE_OPERAND (op1, 0));
14255               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
14256             }
14257           else if (code == OMP_ATOMIC_CAPTURE_OLD
14258                    || code == OMP_ATOMIC_CAPTURE_NEW)
14259             {
14260               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
14261               v = RECUR (TREE_OPERAND (op1, 0));
14262               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
14263               if (TREE_CODE (op11) == COMPOUND_EXPR)
14264                 {
14265                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
14266                   op11 = TREE_OPERAND (op11, 1);
14267                 }
14268               lhs = RECUR (TREE_OPERAND (op11, 0));
14269               rhs = RECUR (TREE_OPERAND (op11, 1));
14270               opcode = TREE_CODE (op11);
14271               if (opcode == MODIFY_EXPR)
14272                 opcode = NOP_EXPR;
14273             }
14274           else
14275             {
14276               code = OMP_ATOMIC;
14277               lhs = RECUR (TREE_OPERAND (op1, 0));
14278               rhs = RECUR (TREE_OPERAND (op1, 1));
14279             }
14280           finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1,
14281                              OMP_ATOMIC_SEQ_CST (t));
14282         }
14283       break;
14284
14285     case TRANSACTION_EXPR:
14286       {
14287         int flags = 0;
14288         flags |= (TRANSACTION_EXPR_OUTER (t) ? TM_STMT_ATTR_OUTER : 0);
14289         flags |= (TRANSACTION_EXPR_RELAXED (t) ? TM_STMT_ATTR_RELAXED : 0);
14290
14291         if (TRANSACTION_EXPR_IS_STMT (t))
14292           {
14293             tree body = TRANSACTION_EXPR_BODY (t);
14294             tree noex = NULL_TREE;
14295             if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
14296               {
14297                 noex = MUST_NOT_THROW_COND (body);
14298                 if (noex == NULL_TREE)
14299                   noex = boolean_true_node;
14300                 body = TREE_OPERAND (body, 0);
14301               }
14302             stmt = begin_transaction_stmt (input_location, NULL, flags);
14303             RECUR (body);
14304             finish_transaction_stmt (stmt, NULL, flags, RECUR (noex));
14305           }
14306         else
14307           {
14308             stmt = build_transaction_expr (EXPR_LOCATION (t),
14309                                            RECUR (TRANSACTION_EXPR_BODY (t)),
14310                                            flags, NULL_TREE);
14311             RETURN (stmt);
14312           }
14313       }
14314       break;
14315
14316     case MUST_NOT_THROW_EXPR:
14317       {
14318         tree op0 = RECUR (TREE_OPERAND (t, 0));
14319         tree cond = RECUR (MUST_NOT_THROW_COND (t));
14320         RETURN (build_must_not_throw_expr (op0, cond));
14321       }
14322
14323     case EXPR_PACK_EXPANSION:
14324       error ("invalid use of pack expansion expression");
14325       RETURN (error_mark_node);
14326
14327     case NONTYPE_ARGUMENT_PACK:
14328       error ("use %<...%> to expand argument pack");
14329       RETURN (error_mark_node);
14330
14331     case CILK_SPAWN_STMT:
14332       cfun->calls_cilk_spawn = 1;
14333       RETURN (build_cilk_spawn (EXPR_LOCATION (t), RECUR (CILK_SPAWN_FN (t))));
14334
14335     case CILK_SYNC_STMT:
14336       RETURN (build_cilk_sync ());
14337
14338     case COMPOUND_EXPR:
14339       tmp = RECUR (TREE_OPERAND (t, 0));
14340       if (tmp == NULL_TREE)
14341         /* If the first operand was a statement, we're done with it.  */
14342         RETURN (RECUR (TREE_OPERAND (t, 1)));
14343       RETURN (build_x_compound_expr (EXPR_LOCATION (t), tmp,
14344                                     RECUR (TREE_OPERAND (t, 1)),
14345                                     complain));
14346
14347     case ANNOTATE_EXPR:
14348       tmp = RECUR (TREE_OPERAND (t, 0));
14349       RETURN (build2_loc (EXPR_LOCATION (t), ANNOTATE_EXPR,
14350                           TREE_TYPE (tmp), tmp, RECUR (TREE_OPERAND (t, 1))));
14351
14352     default:
14353       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
14354
14355       RETURN (tsubst_copy_and_build (t, args, complain, in_decl,
14356                                     /*function_p=*/false,
14357                                     integral_constant_expression_p));
14358     }
14359
14360   RETURN (NULL_TREE);
14361  out:
14362   input_location = loc;
14363   return r;
14364 #undef RECUR
14365 #undef RETURN
14366 }
14367
14368 /* Instantiate the special body of the artificial DECL_OMP_DECLARE_REDUCTION
14369    function.  For description of the body see comment above
14370    cp_parser_omp_declare_reduction_exprs.  */
14371
14372 static void
14373 tsubst_omp_udr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
14374 {
14375   if (t == NULL_TREE || t == error_mark_node)
14376     return;
14377
14378   gcc_assert (TREE_CODE (t) == STATEMENT_LIST);
14379
14380   tree_stmt_iterator tsi;
14381   int i;
14382   tree stmts[7];
14383   memset (stmts, 0, sizeof stmts);
14384   for (i = 0, tsi = tsi_start (t);
14385        i < 7 && !tsi_end_p (tsi);
14386        i++, tsi_next (&tsi))
14387     stmts[i] = tsi_stmt (tsi);
14388   gcc_assert (tsi_end_p (tsi));
14389
14390   if (i >= 3)
14391     {
14392       gcc_assert (TREE_CODE (stmts[0]) == DECL_EXPR
14393                   && TREE_CODE (stmts[1]) == DECL_EXPR);
14394       tree omp_out = tsubst (DECL_EXPR_DECL (stmts[0]),
14395                              args, complain, in_decl);
14396       tree omp_in = tsubst (DECL_EXPR_DECL (stmts[1]),
14397                             args, complain, in_decl);
14398       DECL_CONTEXT (omp_out) = current_function_decl;
14399       DECL_CONTEXT (omp_in) = current_function_decl;
14400       keep_next_level (true);
14401       tree block = begin_omp_structured_block ();
14402       tsubst_expr (stmts[2], args, complain, in_decl, false);
14403       block = finish_omp_structured_block (block);
14404       block = maybe_cleanup_point_expr_void (block);
14405       add_decl_expr (omp_out);
14406       if (TREE_NO_WARNING (DECL_EXPR_DECL (stmts[0])))
14407         TREE_NO_WARNING (omp_out) = 1;
14408       add_decl_expr (omp_in);
14409       finish_expr_stmt (block);
14410     }
14411   if (i >= 6)
14412     {
14413       gcc_assert (TREE_CODE (stmts[3]) == DECL_EXPR
14414                   && TREE_CODE (stmts[4]) == DECL_EXPR);
14415       tree omp_priv = tsubst (DECL_EXPR_DECL (stmts[3]),
14416                               args, complain, in_decl);
14417       tree omp_orig = tsubst (DECL_EXPR_DECL (stmts[4]),
14418                               args, complain, in_decl);
14419       DECL_CONTEXT (omp_priv) = current_function_decl;
14420       DECL_CONTEXT (omp_orig) = current_function_decl;
14421       keep_next_level (true);
14422       tree block = begin_omp_structured_block ();
14423       tsubst_expr (stmts[5], args, complain, in_decl, false);
14424       block = finish_omp_structured_block (block);
14425       block = maybe_cleanup_point_expr_void (block);
14426       cp_walk_tree (&block, cp_remove_omp_priv_cleanup_stmt, omp_priv, NULL);
14427       add_decl_expr (omp_priv);
14428       add_decl_expr (omp_orig);
14429       finish_expr_stmt (block);
14430       if (i == 7)
14431         add_decl_expr (omp_orig);
14432     }
14433 }
14434
14435 /* T is a postfix-expression that is not being used in a function
14436    call.  Return the substituted version of T.  */
14437
14438 static tree
14439 tsubst_non_call_postfix_expression (tree t, tree args,
14440                                     tsubst_flags_t complain,
14441                                     tree in_decl)
14442 {
14443   if (TREE_CODE (t) == SCOPE_REF)
14444     t = tsubst_qualified_id (t, args, complain, in_decl,
14445                              /*done=*/false, /*address_p=*/false);
14446   else
14447     t = tsubst_copy_and_build (t, args, complain, in_decl,
14448                                /*function_p=*/false,
14449                                /*integral_constant_expression_p=*/false);
14450
14451   return t;
14452 }
14453
14454 /* Like tsubst but deals with expressions and performs semantic
14455    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
14456
14457 tree
14458 tsubst_copy_and_build (tree t,
14459                        tree args,
14460                        tsubst_flags_t complain,
14461                        tree in_decl,
14462                        bool function_p,
14463                        bool integral_constant_expression_p)
14464 {
14465 #define RETURN(EXP) do { retval = (EXP); goto out; } while(0)
14466 #define RECUR(NODE)                                             \
14467   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
14468                          /*function_p=*/false,                  \
14469                          integral_constant_expression_p)
14470
14471   tree retval, op1;
14472   location_t loc;
14473
14474   if (t == NULL_TREE || t == error_mark_node)
14475     return t;
14476
14477   loc = input_location;
14478   if (EXPR_HAS_LOCATION (t))
14479     input_location = EXPR_LOCATION (t);
14480
14481   /* N3276 decltype magic only applies to calls at the top level or on the
14482      right side of a comma.  */
14483   tsubst_flags_t decltype_flag = (complain & tf_decltype);
14484   complain &= ~tf_decltype;
14485
14486   switch (TREE_CODE (t))
14487     {
14488     case USING_DECL:
14489       t = DECL_NAME (t);
14490       /* Fall through.  */
14491     case IDENTIFIER_NODE:
14492       {
14493         tree decl;
14494         cp_id_kind idk;
14495         bool non_integral_constant_expression_p;
14496         const char *error_msg;
14497
14498         if (IDENTIFIER_TYPENAME_P (t))
14499           {
14500             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14501             t = mangle_conv_op_name_for_type (new_type);
14502           }
14503
14504         /* Look up the name.  */
14505         decl = lookup_name (t);
14506
14507         /* By convention, expressions use ERROR_MARK_NODE to indicate
14508            failure, not NULL_TREE.  */
14509         if (decl == NULL_TREE)
14510           decl = error_mark_node;
14511
14512         decl = finish_id_expression (t, decl, NULL_TREE,
14513                                      &idk,
14514                                      integral_constant_expression_p,
14515           /*allow_non_integral_constant_expression_p=*/(cxx_dialect >= cxx11),
14516                                      &non_integral_constant_expression_p,
14517                                      /*template_p=*/false,
14518                                      /*done=*/true,
14519                                      /*address_p=*/false,
14520                                      /*template_arg_p=*/false,
14521                                      &error_msg,
14522                                      input_location);
14523         if (error_msg)
14524           error (error_msg);
14525         if (!function_p && identifier_p (decl))
14526           {
14527             if (complain & tf_error)
14528               unqualified_name_lookup_error (decl);
14529             decl = error_mark_node;
14530           }
14531         RETURN (decl);
14532       }
14533
14534     case TEMPLATE_ID_EXPR:
14535       {
14536         tree object;
14537         tree templ = RECUR (TREE_OPERAND (t, 0));
14538         tree targs = TREE_OPERAND (t, 1);
14539
14540         if (targs)
14541           targs = tsubst_template_args (targs, args, complain, in_decl);
14542
14543         if (TREE_CODE (templ) == COMPONENT_REF)
14544           {
14545             object = TREE_OPERAND (templ, 0);
14546             templ = TREE_OPERAND (templ, 1);
14547           }
14548         else
14549           object = NULL_TREE;
14550         templ = lookup_template_function (templ, targs);
14551
14552         if (object)
14553           RETURN (build3 (COMPONENT_REF, TREE_TYPE (templ),
14554                          object, templ, NULL_TREE));
14555         else
14556           RETURN (baselink_for_fns (templ));
14557       }
14558
14559     case INDIRECT_REF:
14560       {
14561         tree r = RECUR (TREE_OPERAND (t, 0));
14562
14563         if (REFERENCE_REF_P (t))
14564           {
14565             /* A type conversion to reference type will be enclosed in
14566                such an indirect ref, but the substitution of the cast
14567                will have also added such an indirect ref.  */
14568             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
14569               r = convert_from_reference (r);
14570           }
14571         else
14572           r = build_x_indirect_ref (input_location, r, RO_UNARY_STAR,
14573                                     complain|decltype_flag);
14574         RETURN (r);
14575       }
14576
14577     case NOP_EXPR:
14578       {
14579         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14580         tree op0 = RECUR (TREE_OPERAND (t, 0));
14581         RETURN (build_nop (type, op0));
14582       }
14583
14584     case IMPLICIT_CONV_EXPR:
14585       {
14586         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14587         tree expr = RECUR (TREE_OPERAND (t, 0));
14588         int flags = LOOKUP_IMPLICIT;
14589         if (IMPLICIT_CONV_EXPR_DIRECT_INIT (t))
14590           flags = LOOKUP_NORMAL;
14591         RETURN (perform_implicit_conversion_flags (type, expr, complain,
14592                                                   flags));
14593       }
14594
14595     case CONVERT_EXPR:
14596       {
14597         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14598         tree op0 = RECUR (TREE_OPERAND (t, 0));
14599         RETURN (build1 (CONVERT_EXPR, type, op0));
14600       }
14601
14602     case CAST_EXPR:
14603     case REINTERPRET_CAST_EXPR:
14604     case CONST_CAST_EXPR:
14605     case DYNAMIC_CAST_EXPR:
14606     case STATIC_CAST_EXPR:
14607       {
14608         tree type;
14609         tree op, r = NULL_TREE;
14610
14611         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
14612         if (integral_constant_expression_p
14613             && !cast_valid_in_integral_constant_expression_p (type))
14614           {
14615             if (complain & tf_error)
14616               error ("a cast to a type other than an integral or "
14617                      "enumeration type cannot appear in a constant-expression");
14618             RETURN (error_mark_node);
14619           }
14620
14621         op = RECUR (TREE_OPERAND (t, 0));
14622
14623         warning_sentinel s(warn_useless_cast);
14624         switch (TREE_CODE (t))
14625           {
14626           case CAST_EXPR:
14627             r = build_functional_cast (type, op, complain);
14628             break;
14629           case REINTERPRET_CAST_EXPR:
14630             r = build_reinterpret_cast (type, op, complain);
14631             break;
14632           case CONST_CAST_EXPR:
14633             r = build_const_cast (type, op, complain);
14634             break;
14635           case DYNAMIC_CAST_EXPR:
14636             r = build_dynamic_cast (type, op, complain);
14637             break;
14638           case STATIC_CAST_EXPR:
14639             r = build_static_cast (type, op, complain);
14640             break;
14641           default:
14642             gcc_unreachable ();
14643           }
14644
14645         RETURN (r);
14646       }
14647
14648     case POSTDECREMENT_EXPR:
14649     case POSTINCREMENT_EXPR:
14650       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14651                                                 args, complain, in_decl);
14652       RETURN (build_x_unary_op (input_location, TREE_CODE (t), op1,
14653                                 complain|decltype_flag));
14654
14655     case PREDECREMENT_EXPR:
14656     case PREINCREMENT_EXPR:
14657     case NEGATE_EXPR:
14658     case BIT_NOT_EXPR:
14659     case ABS_EXPR:
14660     case TRUTH_NOT_EXPR:
14661     case UNARY_PLUS_EXPR:  /* Unary + */
14662     case REALPART_EXPR:
14663     case IMAGPART_EXPR:
14664       RETURN (build_x_unary_op (input_location, TREE_CODE (t),
14665                                 RECUR (TREE_OPERAND (t, 0)),
14666                                 complain|decltype_flag));
14667
14668     case FIX_TRUNC_EXPR:
14669       RETURN (cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
14670                                  0, complain));
14671
14672     case ADDR_EXPR:
14673       op1 = TREE_OPERAND (t, 0);
14674       if (TREE_CODE (op1) == LABEL_DECL)
14675         RETURN (finish_label_address_expr (DECL_NAME (op1),
14676                                           EXPR_LOCATION (op1)));
14677       if (TREE_CODE (op1) == SCOPE_REF)
14678         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
14679                                    /*done=*/true, /*address_p=*/true);
14680       else
14681         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
14682                                                   in_decl);
14683       RETURN (build_x_unary_op (input_location, ADDR_EXPR, op1,
14684                                 complain|decltype_flag));
14685
14686     case PLUS_EXPR:
14687     case MINUS_EXPR:
14688     case MULT_EXPR:
14689     case TRUNC_DIV_EXPR:
14690     case CEIL_DIV_EXPR:
14691     case FLOOR_DIV_EXPR:
14692     case ROUND_DIV_EXPR:
14693     case EXACT_DIV_EXPR:
14694     case BIT_AND_EXPR:
14695     case BIT_IOR_EXPR:
14696     case BIT_XOR_EXPR:
14697     case TRUNC_MOD_EXPR:
14698     case FLOOR_MOD_EXPR:
14699     case TRUTH_ANDIF_EXPR:
14700     case TRUTH_ORIF_EXPR:
14701     case TRUTH_AND_EXPR:
14702     case TRUTH_OR_EXPR:
14703     case RSHIFT_EXPR:
14704     case LSHIFT_EXPR:
14705     case RROTATE_EXPR:
14706     case LROTATE_EXPR:
14707     case EQ_EXPR:
14708     case NE_EXPR:
14709     case MAX_EXPR:
14710     case MIN_EXPR:
14711     case LE_EXPR:
14712     case GE_EXPR:
14713     case LT_EXPR:
14714     case GT_EXPR:
14715     case MEMBER_REF:
14716     case DOTSTAR_EXPR:
14717       {
14718         warning_sentinel s1(warn_type_limits);
14719         warning_sentinel s2(warn_div_by_zero);
14720         tree op0 = RECUR (TREE_OPERAND (t, 0));
14721         tree op1 = RECUR (TREE_OPERAND (t, 1));
14722         tree r = build_x_binary_op
14723           (input_location, TREE_CODE (t),
14724            op0,
14725            (TREE_NO_WARNING (TREE_OPERAND (t, 0))
14726             ? ERROR_MARK
14727             : TREE_CODE (TREE_OPERAND (t, 0))),
14728            op1,
14729            (TREE_NO_WARNING (TREE_OPERAND (t, 1))
14730             ? ERROR_MARK
14731             : TREE_CODE (TREE_OPERAND (t, 1))),
14732            /*overload=*/NULL,
14733            complain|decltype_flag);
14734         if (EXPR_P (r) && TREE_NO_WARNING (t))
14735           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14736
14737         RETURN (r);
14738       }
14739
14740     case POINTER_PLUS_EXPR:
14741       {
14742         tree op0 = RECUR (TREE_OPERAND (t, 0));
14743         tree op1 = RECUR (TREE_OPERAND (t, 1));
14744         return fold_build_pointer_plus (op0, op1);
14745       }
14746
14747     case SCOPE_REF:
14748       RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
14749                                   /*address_p=*/false));
14750     case ARRAY_REF:
14751       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14752                                                 args, complain, in_decl);
14753       RETURN (build_x_array_ref (EXPR_LOCATION (t), op1,
14754                                  RECUR (TREE_OPERAND (t, 1)),
14755                                  complain|decltype_flag));
14756
14757     case ARRAY_NOTATION_REF:
14758       {
14759         tree start_index, length, stride;
14760         op1 = tsubst_non_call_postfix_expression (ARRAY_NOTATION_ARRAY (t),
14761                                                   args, complain, in_decl);
14762         start_index = RECUR (ARRAY_NOTATION_START (t));
14763         length = RECUR (ARRAY_NOTATION_LENGTH (t));
14764         stride = RECUR (ARRAY_NOTATION_STRIDE (t));
14765         RETURN (build_array_notation_ref (EXPR_LOCATION (t), op1, start_index,
14766                                           length, stride, TREE_TYPE (op1)));
14767       }
14768     case SIZEOF_EXPR:
14769       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
14770         RETURN (tsubst_copy (t, args, complain, in_decl));
14771       /* Fall through */
14772       
14773     case ALIGNOF_EXPR:
14774       {
14775         tree r;
14776
14777         op1 = TREE_OPERAND (t, 0);
14778         if (TREE_CODE (t) == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (t))
14779           op1 = TREE_TYPE (op1);
14780         if (!args)
14781           {
14782             /* When there are no ARGS, we are trying to evaluate a
14783                non-dependent expression from the parser.  Trying to do
14784                the substitutions may not work.  */
14785             if (!TYPE_P (op1))
14786               op1 = TREE_TYPE (op1);
14787           }
14788         else
14789           {
14790             ++cp_unevaluated_operand;
14791             ++c_inhibit_evaluation_warnings;
14792             if (TYPE_P (op1))
14793               op1 = tsubst (op1, args, complain, in_decl);
14794             else
14795               op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14796                                            /*function_p=*/false,
14797                                            /*integral_constant_expression_p=*/
14798                                            false);
14799             --cp_unevaluated_operand;
14800             --c_inhibit_evaluation_warnings;
14801           }
14802         if (TYPE_P (op1))
14803           r = cxx_sizeof_or_alignof_type (op1, TREE_CODE (t),
14804                                           complain & tf_error);
14805         else
14806           r = cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t),
14807                                           complain & tf_error);
14808         if (TREE_CODE (t) == SIZEOF_EXPR && r != error_mark_node)
14809           {
14810             if (TREE_CODE (r) != SIZEOF_EXPR || TYPE_P (op1))
14811               {
14812                 if (!processing_template_decl && TYPE_P (op1))
14813                   {
14814                     r = build_min (SIZEOF_EXPR, size_type_node,
14815                                    build1 (NOP_EXPR, op1, error_mark_node));
14816                     SIZEOF_EXPR_TYPE_P (r) = 1;
14817                   }
14818                 else
14819                   r = build_min (SIZEOF_EXPR, size_type_node, op1);
14820                 TREE_SIDE_EFFECTS (r) = 0;
14821                 TREE_READONLY (r) = 1;
14822               }
14823             SET_EXPR_LOCATION (r, EXPR_LOCATION (t));
14824           }
14825         RETURN (r);
14826       }
14827
14828     case AT_ENCODE_EXPR:
14829       {
14830         op1 = TREE_OPERAND (t, 0);
14831         ++cp_unevaluated_operand;
14832         ++c_inhibit_evaluation_warnings;
14833         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14834                                      /*function_p=*/false,
14835                                      /*integral_constant_expression_p=*/false);
14836         --cp_unevaluated_operand;
14837         --c_inhibit_evaluation_warnings;
14838         RETURN (objc_build_encode_expr (op1));
14839       }
14840
14841     case NOEXCEPT_EXPR:
14842       op1 = TREE_OPERAND (t, 0);
14843       ++cp_unevaluated_operand;
14844       ++c_inhibit_evaluation_warnings;
14845       ++cp_noexcept_operand;
14846       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
14847                                    /*function_p=*/false,
14848                                    /*integral_constant_expression_p=*/false);
14849       --cp_unevaluated_operand;
14850       --c_inhibit_evaluation_warnings;
14851       --cp_noexcept_operand;
14852       RETURN (finish_noexcept_expr (op1, complain));
14853
14854     case MODOP_EXPR:
14855       {
14856         warning_sentinel s(warn_div_by_zero);
14857         tree lhs = RECUR (TREE_OPERAND (t, 0));
14858         tree rhs = RECUR (TREE_OPERAND (t, 2));
14859         tree r = build_x_modify_expr
14860           (EXPR_LOCATION (t), lhs, TREE_CODE (TREE_OPERAND (t, 1)), rhs,
14861            complain|decltype_flag);
14862         /* TREE_NO_WARNING must be set if either the expression was
14863            parenthesized or it uses an operator such as >>= rather
14864            than plain assignment.  In the former case, it was already
14865            set and must be copied.  In the latter case,
14866            build_x_modify_expr sets it and it must not be reset
14867            here.  */
14868         if (TREE_NO_WARNING (t))
14869           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
14870
14871         RETURN (r);
14872       }
14873
14874     case ARROW_EXPR:
14875       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
14876                                                 args, complain, in_decl);
14877       /* Remember that there was a reference to this entity.  */
14878       if (DECL_P (op1)
14879           && !mark_used (op1, complain) && !(complain & tf_error))
14880         RETURN (error_mark_node);
14881       RETURN (build_x_arrow (input_location, op1, complain));
14882
14883     case NEW_EXPR:
14884       {
14885         tree placement = RECUR (TREE_OPERAND (t, 0));
14886         tree init = RECUR (TREE_OPERAND (t, 3));
14887         vec<tree, va_gc> *placement_vec;
14888         vec<tree, va_gc> *init_vec;
14889         tree ret;
14890
14891         if (placement == NULL_TREE)
14892           placement_vec = NULL;
14893         else
14894           {
14895             placement_vec = make_tree_vector ();
14896             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
14897               vec_safe_push (placement_vec, TREE_VALUE (placement));
14898           }
14899
14900         /* If there was an initializer in the original tree, but it
14901            instantiated to an empty list, then we should pass a
14902            non-NULL empty vector to tell build_new that it was an
14903            empty initializer() rather than no initializer.  This can
14904            only happen when the initializer is a pack expansion whose
14905            parameter packs are of length zero.  */
14906         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
14907           init_vec = NULL;
14908         else
14909           {
14910             init_vec = make_tree_vector ();
14911             if (init == void_node)
14912               gcc_assert (init_vec != NULL);
14913             else
14914               {
14915                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
14916                   vec_safe_push (init_vec, TREE_VALUE (init));
14917               }
14918           }
14919
14920         tree op1 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
14921         tree op2 = RECUR (TREE_OPERAND (t, 2));
14922         ret = build_new (&placement_vec, op1, op2, &init_vec,
14923                          NEW_EXPR_USE_GLOBAL (t),
14924                          complain);
14925
14926         if (placement_vec != NULL)
14927           release_tree_vector (placement_vec);
14928         if (init_vec != NULL)
14929           release_tree_vector (init_vec);
14930
14931         RETURN (ret);
14932       }
14933
14934     case DELETE_EXPR:
14935       {
14936         tree op0 = RECUR (TREE_OPERAND (t, 0));
14937         tree op1 = RECUR (TREE_OPERAND (t, 1));
14938         RETURN (delete_sanity (op0, op1,
14939                                DELETE_EXPR_USE_VEC (t),
14940                                DELETE_EXPR_USE_GLOBAL (t),
14941                                complain));
14942       }
14943
14944     case COMPOUND_EXPR:
14945       {
14946         tree op0 = tsubst_copy_and_build (TREE_OPERAND (t, 0), args,
14947                                           complain & ~tf_decltype, in_decl,
14948                                           /*function_p=*/false,
14949                                           integral_constant_expression_p);
14950         RETURN (build_x_compound_expr (EXPR_LOCATION (t),
14951                                        op0,
14952                                        RECUR (TREE_OPERAND (t, 1)),
14953                                        complain|decltype_flag));
14954       }
14955
14956     case CALL_EXPR:
14957       {
14958         tree function;
14959         vec<tree, va_gc> *call_args;
14960         unsigned int nargs, i;
14961         bool qualified_p;
14962         bool koenig_p;
14963         tree ret;
14964
14965         function = CALL_EXPR_FN (t);
14966         /* When we parsed the expression,  we determined whether or
14967            not Koenig lookup should be performed.  */
14968         koenig_p = KOENIG_LOOKUP_P (t);
14969         if (TREE_CODE (function) == SCOPE_REF)
14970           {
14971             qualified_p = true;
14972             function = tsubst_qualified_id (function, args, complain, in_decl,
14973                                             /*done=*/false,
14974                                             /*address_p=*/false);
14975           }
14976         else if (koenig_p && identifier_p (function))
14977           {
14978             /* Do nothing; calling tsubst_copy_and_build on an identifier
14979                would incorrectly perform unqualified lookup again.
14980
14981                Note that we can also have an IDENTIFIER_NODE if the earlier
14982                unqualified lookup found a member function; in that case
14983                koenig_p will be false and we do want to do the lookup
14984                again to find the instantiated member function.
14985
14986                FIXME but doing that causes c++/15272, so we need to stop
14987                using IDENTIFIER_NODE in that situation.  */
14988             qualified_p = false;
14989           }
14990         else
14991           {
14992             if (TREE_CODE (function) == COMPONENT_REF)
14993               {
14994                 tree op = TREE_OPERAND (function, 1);
14995
14996                 qualified_p = (TREE_CODE (op) == SCOPE_REF
14997                                || (BASELINK_P (op)
14998                                    && BASELINK_QUALIFIED_P (op)));
14999               }
15000             else
15001               qualified_p = false;
15002
15003             if (TREE_CODE (function) == ADDR_EXPR
15004                 && TREE_CODE (TREE_OPERAND (function, 0)) == FUNCTION_DECL)
15005               /* Avoid error about taking the address of a constructor.  */
15006               function = TREE_OPERAND (function, 0);
15007
15008             function = tsubst_copy_and_build (function, args, complain,
15009                                               in_decl,
15010                                               !qualified_p,
15011                                               integral_constant_expression_p);
15012
15013             if (BASELINK_P (function))
15014               qualified_p = true;
15015           }
15016
15017         nargs = call_expr_nargs (t);
15018         call_args = make_tree_vector ();
15019         for (i = 0; i < nargs; ++i)
15020           {
15021             tree arg = CALL_EXPR_ARG (t, i);
15022
15023             if (!PACK_EXPANSION_P (arg))
15024               vec_safe_push (call_args, RECUR (CALL_EXPR_ARG (t, i)));
15025             else
15026               {
15027                 /* Expand the pack expansion and push each entry onto
15028                    CALL_ARGS.  */
15029                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
15030                 if (TREE_CODE (arg) == TREE_VEC)
15031                   {
15032                     unsigned int len, j;
15033
15034                     len = TREE_VEC_LENGTH (arg);
15035                     for (j = 0; j < len; ++j)
15036                       {
15037                         tree value = TREE_VEC_ELT (arg, j);
15038                         if (value != NULL_TREE)
15039                           value = convert_from_reference (value);
15040                         vec_safe_push (call_args, value);
15041                       }
15042                   }
15043                 else
15044                   {
15045                     /* A partial substitution.  Add one entry.  */
15046                     vec_safe_push (call_args, arg);
15047                   }
15048               }
15049           }
15050
15051         /* We do not perform argument-dependent lookup if normal
15052            lookup finds a non-function, in accordance with the
15053            expected resolution of DR 218.  */
15054         if (koenig_p
15055             && ((is_overloaded_fn (function)
15056                  /* If lookup found a member function, the Koenig lookup is
15057                     not appropriate, even if an unqualified-name was used
15058                     to denote the function.  */
15059                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
15060                 || identifier_p (function))
15061             /* Only do this when substitution turns a dependent call
15062                into a non-dependent call.  */
15063             && type_dependent_expression_p_push (t)
15064             && !any_type_dependent_arguments_p (call_args))
15065           function = perform_koenig_lookup (function, call_args, tf_none);
15066
15067         if (identifier_p (function)
15068             && !any_type_dependent_arguments_p (call_args))
15069           {
15070             if (koenig_p && (complain & tf_warning_or_error))
15071               {
15072                 /* For backwards compatibility and good diagnostics, try
15073                    the unqualified lookup again if we aren't in SFINAE
15074                    context.  */
15075                 tree unq = (tsubst_copy_and_build
15076                             (function, args, complain, in_decl, true,
15077                              integral_constant_expression_p));
15078                 if (unq == error_mark_node)
15079                   RETURN (error_mark_node);
15080
15081                 if (unq != function)
15082                   {
15083                     tree fn = unq;
15084                     if (INDIRECT_REF_P (fn))
15085                       fn = TREE_OPERAND (fn, 0);
15086                     if (TREE_CODE (fn) == COMPONENT_REF)
15087                       fn = TREE_OPERAND (fn, 1);
15088                     if (is_overloaded_fn (fn))
15089                       fn = get_first_fn (fn);
15090                     if (permerror (EXPR_LOC_OR_LOC (t, input_location),
15091                                    "%qD was not declared in this scope, "
15092                                    "and no declarations were found by "
15093                                    "argument-dependent lookup at the point "
15094                                    "of instantiation", function))
15095                       {
15096                         if (!DECL_P (fn))
15097                           /* Can't say anything more.  */;
15098                         else if (DECL_CLASS_SCOPE_P (fn))
15099                           {
15100                             location_t loc = EXPR_LOC_OR_LOC (t,
15101                                                               input_location);
15102                             inform (loc,
15103                                     "declarations in dependent base %qT are "
15104                                     "not found by unqualified lookup",
15105                                     DECL_CLASS_CONTEXT (fn));
15106                             if (current_class_ptr)
15107                               inform (loc,
15108                                       "use %<this->%D%> instead", function);
15109                             else
15110                               inform (loc,
15111                                       "use %<%T::%D%> instead",
15112                                       current_class_name, function);
15113                           }
15114                         else
15115                           inform (0, "%q+D declared here, later in the "
15116                                   "translation unit", fn);
15117                       }
15118                     function = unq;
15119                   }
15120               }
15121             if (identifier_p (function))
15122               {
15123                 if (complain & tf_error)
15124                   unqualified_name_lookup_error (function);
15125                 release_tree_vector (call_args);
15126                 RETURN (error_mark_node);
15127               }
15128           }
15129
15130         /* Remember that there was a reference to this entity.  */
15131         if (DECL_P (function)
15132             && !mark_used (function, complain) && !(complain & tf_error))
15133           RETURN (error_mark_node);
15134
15135         /* Put back tf_decltype for the actual call.  */
15136         complain |= decltype_flag;
15137
15138         if (TREE_CODE (function) == OFFSET_REF)
15139           ret = build_offset_ref_call_from_tree (function, &call_args,
15140                                                  complain);
15141         else if (TREE_CODE (function) == COMPONENT_REF)
15142           {
15143             tree instance = TREE_OPERAND (function, 0);
15144             tree fn = TREE_OPERAND (function, 1);
15145
15146             if (processing_template_decl
15147                 && (type_dependent_expression_p (instance)
15148                     || (!BASELINK_P (fn)
15149                         && TREE_CODE (fn) != FIELD_DECL)
15150                     || type_dependent_expression_p (fn)
15151                     || any_type_dependent_arguments_p (call_args)))
15152               ret = build_nt_call_vec (function, call_args);
15153             else if (!BASELINK_P (fn))
15154               ret = finish_call_expr (function, &call_args,
15155                                        /*disallow_virtual=*/false,
15156                                        /*koenig_p=*/false,
15157                                        complain);
15158             else
15159               ret = (build_new_method_call
15160                       (instance, fn,
15161                        &call_args, NULL_TREE,
15162                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
15163                        /*fn_p=*/NULL,
15164                        complain));
15165           }
15166         else
15167           ret = finish_call_expr (function, &call_args,
15168                                   /*disallow_virtual=*/qualified_p,
15169                                   koenig_p,
15170                                   complain);
15171
15172         release_tree_vector (call_args);
15173
15174         RETURN (ret);
15175       }
15176
15177     case COND_EXPR:
15178       {
15179         tree cond = RECUR (TREE_OPERAND (t, 0));
15180         tree folded_cond = fold_non_dependent_expr (cond);
15181         tree exp1, exp2;
15182
15183         if (TREE_CODE (folded_cond) == INTEGER_CST)
15184           {
15185             if (integer_zerop (folded_cond))
15186               {
15187                 ++c_inhibit_evaluation_warnings;
15188                 exp1 = RECUR (TREE_OPERAND (t, 1));
15189                 --c_inhibit_evaluation_warnings;
15190                 exp2 = RECUR (TREE_OPERAND (t, 2));
15191               }
15192             else
15193               {
15194                 exp1 = RECUR (TREE_OPERAND (t, 1));
15195                 ++c_inhibit_evaluation_warnings;
15196                 exp2 = RECUR (TREE_OPERAND (t, 2));
15197                 --c_inhibit_evaluation_warnings;
15198               }
15199             cond = folded_cond;
15200           }
15201         else
15202           {
15203             exp1 = RECUR (TREE_OPERAND (t, 1));
15204             exp2 = RECUR (TREE_OPERAND (t, 2));
15205           }
15206
15207         RETURN (build_x_conditional_expr (EXPR_LOCATION (t),
15208                                          cond, exp1, exp2, complain));
15209       }
15210
15211     case PSEUDO_DTOR_EXPR:
15212       {
15213         tree op0 = RECUR (TREE_OPERAND (t, 0));
15214         tree op1 = RECUR (TREE_OPERAND (t, 1));
15215         tree op2 = tsubst (TREE_OPERAND (t, 2), args, complain, in_decl);
15216         RETURN (finish_pseudo_destructor_expr (op0, op1, op2,
15217                                                input_location));
15218       }
15219
15220     case TREE_LIST:
15221       {
15222         tree purpose, value, chain;
15223
15224         if (t == void_list_node)
15225           RETURN (t);
15226
15227         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
15228             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
15229           {
15230             /* We have pack expansions, so expand those and
15231                create a new list out of it.  */
15232             tree purposevec = NULL_TREE;
15233             tree valuevec = NULL_TREE;
15234             tree chain;
15235             int i, len = -1;
15236
15237             /* Expand the argument expressions.  */
15238             if (TREE_PURPOSE (t))
15239               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
15240                                                  complain, in_decl);
15241             if (TREE_VALUE (t))
15242               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
15243                                                complain, in_decl);
15244
15245             /* Build the rest of the list.  */
15246             chain = TREE_CHAIN (t);
15247             if (chain && chain != void_type_node)
15248               chain = RECUR (chain);
15249
15250             /* Determine the number of arguments.  */
15251             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
15252               {
15253                 len = TREE_VEC_LENGTH (purposevec);
15254                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
15255               }
15256             else if (TREE_CODE (valuevec) == TREE_VEC)
15257               len = TREE_VEC_LENGTH (valuevec);
15258             else
15259               {
15260                 /* Since we only performed a partial substitution into
15261                    the argument pack, we only RETURN (a single list
15262                    node.  */
15263                 if (purposevec == TREE_PURPOSE (t)
15264                     && valuevec == TREE_VALUE (t)
15265                     && chain == TREE_CHAIN (t))
15266                   RETURN (t);
15267
15268                 RETURN (tree_cons (purposevec, valuevec, chain));
15269               }
15270             
15271             /* Convert the argument vectors into a TREE_LIST */
15272             i = len;
15273             while (i > 0)
15274               {
15275                 /* Grab the Ith values.  */
15276                 i--;
15277                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
15278                                      : NULL_TREE;
15279                 value 
15280                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
15281                              : NULL_TREE;
15282
15283                 /* Build the list (backwards).  */
15284                 chain = tree_cons (purpose, value, chain);
15285               }
15286
15287             RETURN (chain);
15288           }
15289
15290         purpose = TREE_PURPOSE (t);
15291         if (purpose)
15292           purpose = RECUR (purpose);
15293         value = TREE_VALUE (t);
15294         if (value)
15295           value = RECUR (value);
15296         chain = TREE_CHAIN (t);
15297         if (chain && chain != void_type_node)
15298           chain = RECUR (chain);
15299         if (purpose == TREE_PURPOSE (t)
15300             && value == TREE_VALUE (t)
15301             && chain == TREE_CHAIN (t))
15302           RETURN (t);
15303         RETURN (tree_cons (purpose, value, chain));
15304       }
15305
15306     case COMPONENT_REF:
15307       {
15308         tree object;
15309         tree object_type;
15310         tree member;
15311         tree r;
15312
15313         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
15314                                                      args, complain, in_decl);
15315         /* Remember that there was a reference to this entity.  */
15316         if (DECL_P (object)
15317             && !mark_used (object, complain) && !(complain & tf_error))
15318           RETURN (error_mark_node);
15319         object_type = TREE_TYPE (object);
15320
15321         member = TREE_OPERAND (t, 1);
15322         if (BASELINK_P (member))
15323           member = tsubst_baselink (member,
15324                                     non_reference (TREE_TYPE (object)),
15325                                     args, complain, in_decl);
15326         else
15327           member = tsubst_copy (member, args, complain, in_decl);
15328         if (member == error_mark_node)
15329           RETURN (error_mark_node);
15330
15331         if (type_dependent_expression_p (object))
15332           /* We can't do much here.  */;
15333         else if (!CLASS_TYPE_P (object_type))
15334           {
15335             if (scalarish_type_p (object_type))
15336               {
15337                 tree s = NULL_TREE;
15338                 tree dtor = member;
15339
15340                 if (TREE_CODE (dtor) == SCOPE_REF)
15341                   {
15342                     s = TREE_OPERAND (dtor, 0);
15343                     dtor = TREE_OPERAND (dtor, 1);
15344                   }
15345                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
15346                   {
15347                     dtor = TREE_OPERAND (dtor, 0);
15348                     if (TYPE_P (dtor))
15349                       RETURN (finish_pseudo_destructor_expr
15350                               (object, s, dtor, input_location));
15351                   }
15352               }
15353           }
15354         else if (TREE_CODE (member) == SCOPE_REF
15355                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
15356           {
15357             /* Lookup the template functions now that we know what the
15358                scope is.  */
15359             tree scope = TREE_OPERAND (member, 0);
15360             tree tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
15361             tree args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
15362             member = lookup_qualified_name (scope, tmpl,
15363                                             /*is_type_p=*/false,
15364                                             /*complain=*/false);
15365             if (BASELINK_P (member))
15366               {
15367                 BASELINK_FUNCTIONS (member)
15368                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
15369                               args);
15370                 member = (adjust_result_of_qualified_name_lookup
15371                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
15372                            object_type));
15373               }
15374             else
15375               {
15376                 qualified_name_lookup_error (scope, tmpl, member,
15377                                              input_location);
15378                 RETURN (error_mark_node);
15379               }
15380           }
15381         else if (TREE_CODE (member) == SCOPE_REF
15382                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
15383                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
15384           {
15385             if (complain & tf_error)
15386               {
15387                 if (TYPE_P (TREE_OPERAND (member, 0)))
15388                   error ("%qT is not a class or namespace",
15389                          TREE_OPERAND (member, 0));
15390                 else
15391                   error ("%qD is not a class or namespace",
15392                          TREE_OPERAND (member, 0));
15393               }
15394             RETURN (error_mark_node);
15395           }
15396         else if (TREE_CODE (member) == FIELD_DECL)
15397           {
15398             r = finish_non_static_data_member (member, object, NULL_TREE);
15399             if (TREE_CODE (r) == COMPONENT_REF)
15400               REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15401             RETURN (r);
15402           }
15403
15404         r = finish_class_member_access_expr (object, member,
15405                                              /*template_p=*/false,
15406                                              complain);
15407         if (TREE_CODE (r) == COMPONENT_REF)
15408           REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
15409         RETURN (r);
15410       }
15411
15412     case THROW_EXPR:
15413       RETURN (build_throw
15414         (RECUR (TREE_OPERAND (t, 0))));
15415
15416     case CONSTRUCTOR:
15417       {
15418         vec<constructor_elt, va_gc> *n;
15419         constructor_elt *ce;
15420         unsigned HOST_WIDE_INT idx;
15421         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15422         bool process_index_p;
15423         int newlen;
15424         bool need_copy_p = false;
15425         tree r;
15426
15427         if (type == error_mark_node)
15428           RETURN (error_mark_node);
15429
15430         /* digest_init will do the wrong thing if we let it.  */
15431         if (type && TYPE_PTRMEMFUNC_P (type))
15432           RETURN (t);
15433
15434         /* We do not want to process the index of aggregate
15435            initializers as they are identifier nodes which will be
15436            looked up by digest_init.  */
15437         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
15438
15439         n = vec_safe_copy (CONSTRUCTOR_ELTS (t));
15440         newlen = vec_safe_length (n);
15441         FOR_EACH_VEC_SAFE_ELT (n, idx, ce)
15442           {
15443             if (ce->index && process_index_p
15444                 /* An identifier index is looked up in the type
15445                    being initialized, not the current scope.  */
15446                 && TREE_CODE (ce->index) != IDENTIFIER_NODE)
15447               ce->index = RECUR (ce->index);
15448
15449             if (PACK_EXPANSION_P (ce->value))
15450               {
15451                 /* Substitute into the pack expansion.  */
15452                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
15453                                                   in_decl);
15454
15455                 if (ce->value == error_mark_node
15456                     || PACK_EXPANSION_P (ce->value))
15457                   ;
15458                 else if (TREE_VEC_LENGTH (ce->value) == 1)
15459                   /* Just move the argument into place.  */
15460                   ce->value = TREE_VEC_ELT (ce->value, 0);
15461                 else
15462                   {
15463                     /* Update the length of the final CONSTRUCTOR
15464                        arguments vector, and note that we will need to
15465                        copy.*/
15466                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
15467                     need_copy_p = true;
15468                   }
15469               }
15470             else
15471               ce->value = RECUR (ce->value);
15472           }
15473
15474         if (need_copy_p)
15475           {
15476             vec<constructor_elt, va_gc> *old_n = n;
15477
15478             vec_alloc (n, newlen);
15479             FOR_EACH_VEC_ELT (*old_n, idx, ce)
15480               {
15481                 if (TREE_CODE (ce->value) == TREE_VEC)
15482                   {
15483                     int i, len = TREE_VEC_LENGTH (ce->value);
15484                     for (i = 0; i < len; ++i)
15485                       CONSTRUCTOR_APPEND_ELT (n, 0,
15486                                               TREE_VEC_ELT (ce->value, i));
15487                   }
15488                 else
15489                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
15490               }
15491           }
15492
15493         r = build_constructor (init_list_type_node, n);
15494         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
15495
15496         if (TREE_HAS_CONSTRUCTOR (t))
15497           RETURN (finish_compound_literal (type, r, complain));
15498
15499         TREE_TYPE (r) = type;
15500         RETURN (r);
15501       }
15502
15503     case TYPEID_EXPR:
15504       {
15505         tree operand_0 = TREE_OPERAND (t, 0);
15506         if (TYPE_P (operand_0))
15507           {
15508             operand_0 = tsubst (operand_0, args, complain, in_decl);
15509             RETURN (get_typeid (operand_0, complain));
15510           }
15511         else
15512           {
15513             operand_0 = RECUR (operand_0);
15514             RETURN (build_typeid (operand_0, complain));
15515           }
15516       }
15517
15518     case VAR_DECL:
15519       if (!args)
15520         RETURN (t);
15521       else if (DECL_PACK_P (t))
15522         {
15523           /* We don't build decls for an instantiation of a
15524              variadic capture proxy, we instantiate the elements
15525              when needed.  */
15526           gcc_assert (DECL_HAS_VALUE_EXPR_P (t));
15527           return RECUR (DECL_VALUE_EXPR (t));
15528         }
15529       /* Fall through */
15530
15531     case PARM_DECL:
15532       {
15533         tree r = tsubst_copy (t, args, complain, in_decl);
15534         /* ??? We're doing a subset of finish_id_expression here.  */
15535         if (VAR_P (r)
15536             && !processing_template_decl
15537             && !cp_unevaluated_operand
15538             && (TREE_STATIC (r) || DECL_EXTERNAL (r))
15539             && DECL_THREAD_LOCAL_P (r))
15540           {
15541             if (tree wrap = get_tls_wrapper_fn (r))
15542               /* Replace an evaluated use of the thread_local variable with
15543                  a call to its wrapper.  */
15544               r = build_cxx_call (wrap, 0, NULL, tf_warning_or_error);
15545           }
15546         else if (outer_automatic_var_p (r))
15547           r = process_outer_var_ref (r, complain);
15548
15549         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
15550           /* If the original type was a reference, we'll be wrapped in
15551              the appropriate INDIRECT_REF.  */
15552           r = convert_from_reference (r);
15553         RETURN (r);
15554       }
15555
15556     case VA_ARG_EXPR:
15557       {
15558         tree op0 = RECUR (TREE_OPERAND (t, 0));
15559         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
15560         RETURN (build_x_va_arg (EXPR_LOCATION (t), op0, type));
15561       }
15562
15563     case OFFSETOF_EXPR:
15564       RETURN (finish_offsetof (RECUR (TREE_OPERAND (t, 0)),
15565                                EXPR_LOCATION (t)));
15566
15567     case TRAIT_EXPR:
15568       {
15569         tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
15570                              complain, in_decl);
15571
15572         tree type2 = TRAIT_EXPR_TYPE2 (t);
15573         if (type2 && TREE_CODE (type2) == TREE_LIST)
15574           type2 = RECUR (type2);
15575         else if (type2)
15576           type2 = tsubst (type2, args, complain, in_decl);
15577         
15578         RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
15579       }
15580
15581     case STMT_EXPR:
15582       {
15583         tree old_stmt_expr = cur_stmt_expr;
15584         tree stmt_expr = begin_stmt_expr ();
15585
15586         cur_stmt_expr = stmt_expr;
15587         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
15588                      integral_constant_expression_p);
15589         stmt_expr = finish_stmt_expr (stmt_expr, false);
15590         cur_stmt_expr = old_stmt_expr;
15591
15592         /* If the resulting list of expression statement is empty,
15593            fold it further into void_node.  */
15594         if (empty_expr_stmt_p (stmt_expr))
15595           stmt_expr = void_node;
15596
15597         RETURN (stmt_expr);
15598       }
15599
15600     case LAMBDA_EXPR:
15601       {
15602         tree r = build_lambda_expr ();
15603
15604         tree type = tsubst (LAMBDA_EXPR_CLOSURE (t), args, complain, NULL_TREE);
15605         LAMBDA_EXPR_CLOSURE (r) = type;
15606         CLASSTYPE_LAMBDA_EXPR (type) = r;
15607
15608         LAMBDA_EXPR_LOCATION (r)
15609           = LAMBDA_EXPR_LOCATION (t);
15610         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
15611           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
15612         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
15613         LAMBDA_EXPR_DISCRIMINATOR (r)
15614           = (LAMBDA_EXPR_DISCRIMINATOR (t));
15615         /* For a function scope, we want to use tsubst so that we don't
15616            complain about referring to an auto function before its return
15617            type has been deduced.  Otherwise, we want to use tsubst_copy so
15618            that we look up the existing field/parameter/variable rather
15619            than build a new one.  */
15620         tree scope = LAMBDA_EXPR_EXTRA_SCOPE (t);
15621         if (scope && TREE_CODE (scope) == FUNCTION_DECL)
15622           scope = tsubst (scope, args, complain, in_decl);
15623         else if (scope && TREE_CODE (scope) == PARM_DECL)
15624           {
15625             /* Look up the parameter we want directly, as tsubst_copy
15626                doesn't do what we need.  */
15627             tree fn = tsubst (DECL_CONTEXT (scope), args, complain, in_decl);
15628             tree parm = FUNCTION_FIRST_USER_PARM (fn);
15629             while (DECL_PARM_INDEX (parm) != DECL_PARM_INDEX (scope))
15630               parm = DECL_CHAIN (parm);
15631             scope = parm;
15632             /* FIXME Work around the parm not having DECL_CONTEXT set.  */
15633             if (DECL_CONTEXT (scope) == NULL_TREE)
15634               DECL_CONTEXT (scope) = fn;
15635           }
15636         else
15637           scope = RECUR (scope);
15638         LAMBDA_EXPR_EXTRA_SCOPE (r) = scope;
15639         LAMBDA_EXPR_RETURN_TYPE (r)
15640           = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
15641
15642         gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
15643                     && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
15644
15645         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
15646         determine_visibility (TYPE_NAME (type));
15647         /* Now that we know visibility, instantiate the type so we have a
15648            declaration of the op() for later calls to lambda_function.  */
15649         complete_type (type);
15650
15651         LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
15652
15653         RETURN (build_lambda_object (r));
15654       }
15655
15656     case TARGET_EXPR:
15657       /* We can get here for a constant initializer of non-dependent type.
15658          FIXME stop folding in cp_parser_initializer_clause.  */
15659       {
15660         tree r = get_target_expr_sfinae (RECUR (TARGET_EXPR_INITIAL (t)),
15661                                          complain);
15662         RETURN (r);
15663       }
15664
15665     case TRANSACTION_EXPR:
15666       RETURN (tsubst_expr(t, args, complain, in_decl,
15667              integral_constant_expression_p));
15668
15669     case PAREN_EXPR:
15670       RETURN (finish_parenthesized_expr (RECUR (TREE_OPERAND (t, 0))));
15671
15672     case VEC_PERM_EXPR:
15673       {
15674         tree op0 = RECUR (TREE_OPERAND (t, 0));
15675         tree op1 = RECUR (TREE_OPERAND (t, 1));
15676         tree op2 = RECUR (TREE_OPERAND (t, 2));
15677         RETURN (build_x_vec_perm_expr (input_location, op0, op1, op2,
15678                                        complain));
15679       }
15680
15681     default:
15682       /* Handle Objective-C++ constructs, if appropriate.  */
15683       {
15684         tree subst
15685           = objcp_tsubst_copy_and_build (t, args, complain,
15686                                          in_decl, /*function_p=*/false);
15687         if (subst)
15688           RETURN (subst);
15689       }
15690       RETURN (tsubst_copy (t, args, complain, in_decl));
15691     }
15692
15693 #undef RECUR
15694 #undef RETURN
15695  out:
15696   input_location = loc;
15697   return retval;
15698 }
15699
15700 /* Verify that the instantiated ARGS are valid. For type arguments,
15701    make sure that the type's linkage is ok. For non-type arguments,
15702    make sure they are constants if they are integral or enumerations.
15703    Emit an error under control of COMPLAIN, and return TRUE on error.  */
15704
15705 static bool
15706 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
15707 {
15708   if (dependent_template_arg_p (t))
15709     return false;
15710   if (ARGUMENT_PACK_P (t))
15711     {
15712       tree vec = ARGUMENT_PACK_ARGS (t);
15713       int len = TREE_VEC_LENGTH (vec);
15714       bool result = false;
15715       int i;
15716
15717       for (i = 0; i < len; ++i)
15718         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
15719           result = true;
15720       return result;
15721     }
15722   else if (TYPE_P (t))
15723     {
15724       /* [basic.link]: A name with no linkage (notably, the name
15725          of a class or enumeration declared in a local scope)
15726          shall not be used to declare an entity with linkage.
15727          This implies that names with no linkage cannot be used as
15728          template arguments
15729
15730          DR 757 relaxes this restriction for C++0x.  */
15731       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
15732                  : no_linkage_check (t, /*relaxed_p=*/false));
15733
15734       if (nt)
15735         {
15736           /* DR 488 makes use of a type with no linkage cause
15737              type deduction to fail.  */
15738           if (complain & tf_error)
15739             {
15740               if (TYPE_ANONYMOUS_P (nt))
15741                 error ("%qT is/uses anonymous type", t);
15742               else
15743                 error ("template argument for %qD uses local type %qT",
15744                        tmpl, t);
15745             }
15746           return true;
15747         }
15748       /* In order to avoid all sorts of complications, we do not
15749          allow variably-modified types as template arguments.  */
15750       else if (variably_modified_type_p (t, NULL_TREE))
15751         {
15752           if (complain & tf_error)
15753             error ("%qT is a variably modified type", t);
15754           return true;
15755         }
15756     }
15757   /* Class template and alias template arguments should be OK.  */
15758   else if (DECL_TYPE_TEMPLATE_P (t))
15759     ;
15760   /* A non-type argument of integral or enumerated type must be a
15761      constant.  */
15762   else if (TREE_TYPE (t)
15763            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
15764            && !REFERENCE_REF_P (t)
15765            && !TREE_CONSTANT (t))
15766     {
15767       if (complain & tf_error)
15768         error ("integral expression %qE is not constant", t);
15769       return true;
15770     }
15771   return false;
15772 }
15773
15774 static bool
15775 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
15776 {
15777   int ix, len = DECL_NTPARMS (tmpl);
15778   bool result = false;
15779
15780   for (ix = 0; ix != len; ix++)
15781     {
15782       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
15783         result = true;
15784     }
15785   if (result && (complain & tf_error))
15786     error ("  trying to instantiate %qD", tmpl);
15787   return result;
15788 }
15789
15790 /* We're out of SFINAE context now, so generate diagnostics for the access
15791    errors we saw earlier when instantiating D from TMPL and ARGS.  */
15792
15793 static void
15794 recheck_decl_substitution (tree d, tree tmpl, tree args)
15795 {
15796   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
15797   tree type = TREE_TYPE (pattern);
15798   location_t loc = input_location;
15799
15800   push_access_scope (d);
15801   push_deferring_access_checks (dk_no_deferred);
15802   input_location = DECL_SOURCE_LOCATION (pattern);
15803   tsubst (type, args, tf_warning_or_error, d);
15804   input_location = loc;
15805   pop_deferring_access_checks ();
15806   pop_access_scope (d);
15807 }
15808
15809 /* Instantiate the indicated variable, function, or alias template TMPL with
15810    the template arguments in TARG_PTR.  */
15811
15812 static tree
15813 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
15814 {
15815   tree targ_ptr = orig_args;
15816   tree fndecl;
15817   tree gen_tmpl;
15818   tree spec;
15819   bool access_ok = true;
15820
15821   if (tmpl == error_mark_node)
15822     return error_mark_node;
15823
15824   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
15825
15826   /* If this function is a clone, handle it specially.  */
15827   if (DECL_CLONED_FUNCTION_P (tmpl))
15828     {
15829       tree spec;
15830       tree clone;
15831
15832       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
15833          DECL_CLONED_FUNCTION.  */
15834       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
15835                                    targ_ptr, complain);
15836       if (spec == error_mark_node)
15837         return error_mark_node;
15838
15839       /* Look for the clone.  */
15840       FOR_EACH_CLONE (clone, spec)
15841         if (DECL_NAME (clone) == DECL_NAME (tmpl))
15842           return clone;
15843       /* We should always have found the clone by now.  */
15844       gcc_unreachable ();
15845       return NULL_TREE;
15846     }
15847
15848   if (targ_ptr == error_mark_node)
15849     return error_mark_node;
15850
15851   /* Check to see if we already have this specialization.  */
15852   gen_tmpl = most_general_template (tmpl);
15853   if (tmpl != gen_tmpl)
15854     /* The TMPL is a partial instantiation.  To get a full set of
15855        arguments we must add the arguments used to perform the
15856        partial instantiation.  */
15857     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
15858                                             targ_ptr);
15859
15860   /* It would be nice to avoid hashing here and then again in tsubst_decl,
15861      but it doesn't seem to be on the hot path.  */
15862   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
15863
15864   gcc_assert (tmpl == gen_tmpl
15865               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
15866                   == spec)
15867               || fndecl == NULL_TREE);
15868
15869   if (spec != NULL_TREE)
15870     {
15871       if (FNDECL_HAS_ACCESS_ERRORS (spec))
15872         {
15873           if (complain & tf_error)
15874             recheck_decl_substitution (spec, gen_tmpl, targ_ptr);
15875           return error_mark_node;
15876         }
15877       return spec;
15878     }
15879
15880   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
15881                                complain))
15882     return error_mark_node;
15883
15884   /* We are building a FUNCTION_DECL, during which the access of its
15885      parameters and return types have to be checked.  However this
15886      FUNCTION_DECL which is the desired context for access checking
15887      is not built yet.  We solve this chicken-and-egg problem by
15888      deferring all checks until we have the FUNCTION_DECL.  */
15889   push_deferring_access_checks (dk_deferred);
15890
15891   /* Instantiation of the function happens in the context of the function
15892      template, not the context of the overload resolution we're doing.  */
15893   push_to_top_level ();
15894   /* If there are dependent arguments, e.g. because we're doing partial
15895      ordering, make sure processing_template_decl stays set.  */
15896   if (uses_template_parms (targ_ptr))
15897     ++processing_template_decl;
15898   if (DECL_CLASS_SCOPE_P (gen_tmpl))
15899     {
15900       tree ctx = tsubst_aggr_type (DECL_CONTEXT (gen_tmpl), targ_ptr,
15901                                    complain, gen_tmpl, true);
15902       push_nested_class (ctx);
15903     }
15904
15905   tree pattern = DECL_TEMPLATE_RESULT (gen_tmpl);
15906
15907   if (VAR_P (pattern))
15908     {
15909       /* We need to determine if we're using a partial or explicit
15910          specialization now, because the type of the variable could be
15911          different.  */
15912       tree tid = lookup_template_variable (gen_tmpl, targ_ptr);
15913       tree elt = most_specialized_partial_spec (tid, complain);
15914       if (elt == error_mark_node)
15915         pattern = error_mark_node;
15916       else if (elt)
15917         {
15918           tmpl = TREE_VALUE (elt);
15919           pattern = DECL_TEMPLATE_RESULT (tmpl);
15920           targ_ptr = TREE_PURPOSE (elt);
15921         }
15922     }
15923
15924   /* Substitute template parameters to obtain the specialization.  */
15925   fndecl = tsubst (pattern, targ_ptr, complain, gen_tmpl);
15926   if (DECL_CLASS_SCOPE_P (gen_tmpl))
15927     pop_nested_class ();
15928   pop_from_top_level ();
15929
15930   if (fndecl == error_mark_node)
15931     {
15932       pop_deferring_access_checks ();
15933       return error_mark_node;
15934     }
15935
15936   /* The DECL_TI_TEMPLATE should always be the immediate parent
15937      template, not the most general template.  */
15938   DECL_TI_TEMPLATE (fndecl) = tmpl;
15939
15940   /* Now we know the specialization, compute access previously
15941      deferred.  */
15942   push_access_scope (fndecl);
15943   if (!perform_deferred_access_checks (complain))
15944     access_ok = false;
15945   pop_access_scope (fndecl);
15946   pop_deferring_access_checks ();
15947
15948   /* If we've just instantiated the main entry point for a function,
15949      instantiate all the alternate entry points as well.  We do this
15950      by cloning the instantiation of the main entry point, not by
15951      instantiating the template clones.  */
15952   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
15953     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
15954
15955   if (!access_ok)
15956     {
15957       if (!(complain & tf_error))
15958         {
15959           /* Remember to reinstantiate when we're out of SFINAE so the user
15960              can see the errors.  */
15961           FNDECL_HAS_ACCESS_ERRORS (fndecl) = true;
15962         }
15963       return error_mark_node;
15964     }
15965   return fndecl;
15966 }
15967
15968 /* Wrapper for instantiate_template_1.  */
15969
15970 tree
15971 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
15972 {
15973   tree ret;
15974   timevar_push (TV_TEMPLATE_INST);
15975   ret = instantiate_template_1 (tmpl, orig_args,  complain);
15976   timevar_pop (TV_TEMPLATE_INST);
15977   return ret;
15978 }
15979
15980 /* Instantiate the alias template TMPL with ARGS.  Also push a template
15981    instantiation level, which instantiate_template doesn't do because
15982    functions and variables have sufficient context established by the
15983    callers.  */
15984
15985 static tree
15986 instantiate_alias_template (tree tmpl, tree args, tsubst_flags_t complain)
15987 {
15988   struct pending_template *old_last_pend = last_pending_template;
15989   struct tinst_level *old_error_tinst = last_error_tinst_level;
15990   if (tmpl == error_mark_node || args == error_mark_node)
15991     return error_mark_node;
15992   tree tinst = build_tree_list (tmpl, args);
15993   if (!push_tinst_level (tinst))
15994     {
15995       ggc_free (tinst);
15996       return error_mark_node;
15997     }
15998
15999   args =
16000     coerce_innermost_template_parms (DECL_TEMPLATE_PARMS (tmpl),
16001                                      args, tmpl, complain,
16002                                      /*require_all_args=*/true,
16003                                      /*use_default_args=*/true);
16004
16005   tree r = instantiate_template (tmpl, args, complain);
16006   pop_tinst_level ();
16007   /* We can't free this if a pending_template entry or last_error_tinst_level
16008      is pointing at it.  */
16009   if (last_pending_template == old_last_pend
16010       && last_error_tinst_level == old_error_tinst)
16011     ggc_free (tinst);
16012
16013   return r;
16014 }
16015
16016 /* PARM is a template parameter pack for FN.  Returns true iff
16017    PARM is used in a deducible way in the argument list of FN.  */
16018
16019 static bool
16020 pack_deducible_p (tree parm, tree fn)
16021 {
16022   tree t = FUNCTION_FIRST_USER_PARMTYPE (fn);
16023   for (; t; t = TREE_CHAIN (t))
16024     {
16025       tree type = TREE_VALUE (t);
16026       tree packs;
16027       if (!PACK_EXPANSION_P (type))
16028         continue;
16029       for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
16030            packs; packs = TREE_CHAIN (packs))
16031         if (template_args_equal (TREE_VALUE (packs), parm))
16032           {
16033             /* The template parameter pack is used in a function parameter
16034                pack.  If this is the end of the parameter list, the
16035                template parameter pack is deducible.  */
16036             if (TREE_CHAIN (t) == void_list_node)
16037               return true;
16038             else
16039               /* Otherwise, not.  Well, it could be deduced from
16040                  a non-pack parameter, but doing so would end up with
16041                  a deduction mismatch, so don't bother.  */
16042               return false;
16043           }
16044     }
16045   /* The template parameter pack isn't used in any function parameter
16046      packs, but it might be used deeper, e.g. tuple<Args...>.  */
16047   return true;
16048 }
16049
16050 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
16051    NARGS elements of the arguments that are being used when calling
16052    it.  TARGS is a vector into which the deduced template arguments
16053    are placed.
16054
16055    Returns either a FUNCTION_DECL for the matching specialization of FN or
16056    NULL_TREE if no suitable specialization can be found.  If EXPLAIN_P is
16057    true, diagnostics will be printed to explain why it failed.
16058
16059    If FN is a conversion operator, or we are trying to produce a specific
16060    specialization, RETURN_TYPE is the return type desired.
16061
16062    The EXPLICIT_TARGS are explicit template arguments provided via a
16063    template-id.
16064
16065    The parameter STRICT is one of:
16066
16067    DEDUCE_CALL:
16068      We are deducing arguments for a function call, as in
16069      [temp.deduct.call].
16070
16071    DEDUCE_CONV:
16072      We are deducing arguments for a conversion function, as in
16073      [temp.deduct.conv].
16074
16075    DEDUCE_EXACT:
16076      We are deducing arguments when doing an explicit instantiation
16077      as in [temp.explicit], when determining an explicit specialization
16078      as in [temp.expl.spec], or when taking the address of a function
16079      template, as in [temp.deduct.funcaddr].  */
16080
16081 tree
16082 fn_type_unification (tree fn,
16083                      tree explicit_targs,
16084                      tree targs,
16085                      const tree *args,
16086                      unsigned int nargs,
16087                      tree return_type,
16088                      unification_kind_t strict,
16089                      int flags,
16090                      bool explain_p,
16091                      bool decltype_p)
16092 {
16093   tree parms;
16094   tree fntype;
16095   tree decl = NULL_TREE;
16096   tsubst_flags_t complain = (explain_p ? tf_warning_or_error : tf_none);
16097   bool ok;
16098   static int deduction_depth;
16099   struct pending_template *old_last_pend = last_pending_template;
16100   struct tinst_level *old_error_tinst = last_error_tinst_level;
16101   tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
16102   tree tinst;
16103   tree r = error_mark_node;
16104
16105   if (decltype_p)
16106     complain |= tf_decltype;
16107
16108   /* In C++0x, it's possible to have a function template whose type depends
16109      on itself recursively.  This is most obvious with decltype, but can also
16110      occur with enumeration scope (c++/48969).  So we need to catch infinite
16111      recursion and reject the substitution at deduction time; this function
16112      will return error_mark_node for any repeated substitution.
16113
16114      This also catches excessive recursion such as when f<N> depends on
16115      f<N-1> across all integers, and returns error_mark_node for all the
16116      substitutions back up to the initial one.
16117
16118      This is, of course, not reentrant.  */
16119   if (excessive_deduction_depth)
16120     return error_mark_node;
16121   tinst = build_tree_list (fn, NULL_TREE);
16122   ++deduction_depth;
16123
16124   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
16125
16126   fntype = TREE_TYPE (fn);
16127   if (explicit_targs)
16128     {
16129       /* [temp.deduct]
16130
16131          The specified template arguments must match the template
16132          parameters in kind (i.e., type, nontype, template), and there
16133          must not be more arguments than there are parameters;
16134          otherwise type deduction fails.
16135
16136          Nontype arguments must match the types of the corresponding
16137          nontype template parameters, or must be convertible to the
16138          types of the corresponding nontype parameters as specified in
16139          _temp.arg.nontype_, otherwise type deduction fails.
16140
16141          All references in the function type of the function template
16142          to the corresponding template parameters are replaced by the
16143          specified template argument values.  If a substitution in a
16144          template parameter or in the function type of the function
16145          template results in an invalid type, type deduction fails.  */
16146       int i, len = TREE_VEC_LENGTH (tparms);
16147       location_t loc = input_location;
16148       bool incomplete = false;
16149
16150       /* Adjust any explicit template arguments before entering the
16151          substitution context.  */
16152       explicit_targs
16153         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
16154                                   complain,
16155                                   /*require_all_args=*/false,
16156                                   /*use_default_args=*/false));
16157       if (explicit_targs == error_mark_node)
16158         goto fail;
16159
16160       /* Substitute the explicit args into the function type.  This is
16161          necessary so that, for instance, explicitly declared function
16162          arguments can match null pointed constants.  If we were given
16163          an incomplete set of explicit args, we must not do semantic
16164          processing during substitution as we could create partial
16165          instantiations.  */
16166       for (i = 0; i < len; i++)
16167         {
16168           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
16169           bool parameter_pack = false;
16170           tree targ = TREE_VEC_ELT (explicit_targs, i);
16171
16172           /* Dig out the actual parm.  */
16173           if (TREE_CODE (parm) == TYPE_DECL
16174               || TREE_CODE (parm) == TEMPLATE_DECL)
16175             {
16176               parm = TREE_TYPE (parm);
16177               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
16178             }
16179           else if (TREE_CODE (parm) == PARM_DECL)
16180             {
16181               parm = DECL_INITIAL (parm);
16182               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
16183             }
16184
16185           if (!parameter_pack && targ == NULL_TREE)
16186             /* No explicit argument for this template parameter.  */
16187             incomplete = true;
16188
16189           if (parameter_pack && pack_deducible_p (parm, fn))
16190             {
16191               /* Mark the argument pack as "incomplete". We could
16192                  still deduce more arguments during unification.
16193                  We remove this mark in type_unification_real.  */
16194               if (targ)
16195                 {
16196                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
16197                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
16198                     = ARGUMENT_PACK_ARGS (targ);
16199                 }
16200
16201               /* We have some incomplete argument packs.  */
16202               incomplete = true;
16203             }
16204         }
16205
16206       TREE_VALUE (tinst) = explicit_targs;
16207       if (!push_tinst_level (tinst))
16208         {
16209           excessive_deduction_depth = true;
16210           goto fail;
16211         }
16212       processing_template_decl += incomplete;
16213       input_location = DECL_SOURCE_LOCATION (fn);
16214       /* Ignore any access checks; we'll see them again in
16215          instantiate_template and they might have the wrong
16216          access path at this point.  */
16217       push_deferring_access_checks (dk_deferred);
16218       fntype = tsubst (TREE_TYPE (fn), explicit_targs,
16219                        complain | tf_partial, NULL_TREE);
16220       pop_deferring_access_checks ();
16221       input_location = loc;
16222       processing_template_decl -= incomplete;
16223       pop_tinst_level ();
16224
16225       if (fntype == error_mark_node)
16226         goto fail;
16227
16228       /* Place the explicitly specified arguments in TARGS.  */
16229       for (i = NUM_TMPL_ARGS (explicit_targs); i--;)
16230         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (explicit_targs, i);
16231     }
16232
16233   /* Never do unification on the 'this' parameter.  */
16234   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
16235
16236   if (return_type)
16237     {
16238       tree *new_args;
16239
16240       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
16241       new_args = XALLOCAVEC (tree, nargs + 1);
16242       new_args[0] = return_type;
16243       memcpy (new_args + 1, args, nargs * sizeof (tree));
16244       args = new_args;
16245       ++nargs;
16246     }
16247
16248   /* We allow incomplete unification without an error message here
16249      because the standard doesn't seem to explicitly prohibit it.  Our
16250      callers must be ready to deal with unification failures in any
16251      event.  */
16252
16253   TREE_VALUE (tinst) = targs;
16254   /* If we aren't explaining yet, push tinst context so we can see where
16255      any errors (e.g. from class instantiations triggered by instantiation
16256      of default template arguments) come from.  If we are explaining, this
16257      context is redundant.  */
16258   if (!explain_p && !push_tinst_level (tinst))
16259     {
16260       excessive_deduction_depth = true;
16261       goto fail;
16262     }
16263
16264   /* type_unification_real will pass back any access checks from default
16265      template argument substitution.  */
16266   vec<deferred_access_check, va_gc> *checks;
16267   checks = NULL;
16268
16269   ok = !type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
16270                                targs, parms, args, nargs, /*subr=*/0,
16271                                strict, flags, &checks, explain_p);
16272   if (!explain_p)
16273     pop_tinst_level ();
16274   if (!ok)
16275     goto fail;
16276
16277   /* Now that we have bindings for all of the template arguments,
16278      ensure that the arguments deduced for the template template
16279      parameters have compatible template parameter lists.  We cannot
16280      check this property before we have deduced all template
16281      arguments, because the template parameter types of a template
16282      template parameter might depend on prior template parameters
16283      deduced after the template template parameter.  The following
16284      ill-formed example illustrates this issue:
16285
16286        template<typename T, template<T> class C> void f(C<5>, T);
16287
16288        template<int N> struct X {};
16289
16290        void g() {
16291          f(X<5>(), 5l); // error: template argument deduction fails
16292        }
16293
16294      The template parameter list of 'C' depends on the template type
16295      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
16296      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
16297      time that we deduce 'C'.  */
16298   if (!template_template_parm_bindings_ok_p
16299            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
16300     {
16301       unify_inconsistent_template_template_parameters (explain_p);
16302       goto fail;
16303     }
16304
16305   /* All is well so far.  Now, check:
16306
16307      [temp.deduct]
16308
16309      When all template arguments have been deduced, all uses of
16310      template parameters in nondeduced contexts are replaced with
16311      the corresponding deduced argument values.  If the
16312      substitution results in an invalid type, as described above,
16313      type deduction fails.  */
16314   TREE_VALUE (tinst) = targs;
16315   if (!push_tinst_level (tinst))
16316     {
16317       excessive_deduction_depth = true;
16318       goto fail;
16319     }
16320
16321   /* Also collect access checks from the instantiation.  */
16322   reopen_deferring_access_checks (checks);
16323
16324   decl = instantiate_template (fn, targs, complain);
16325
16326   checks = get_deferred_access_checks ();
16327   pop_deferring_access_checks ();
16328
16329   pop_tinst_level ();
16330
16331   if (decl == error_mark_node)
16332     goto fail;
16333
16334   /* Now perform any access checks encountered during substitution.  */
16335   push_access_scope (decl);
16336   ok = perform_access_checks (checks, complain);
16337   pop_access_scope (decl);
16338   if (!ok)
16339     goto fail;
16340
16341   /* If we're looking for an exact match, check that what we got
16342      is indeed an exact match.  It might not be if some template
16343      parameters are used in non-deduced contexts.  But don't check
16344      for an exact match if we have dependent template arguments;
16345      in that case we're doing partial ordering, and we already know
16346      that we have two candidates that will provide the actual type.  */
16347   if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
16348     {
16349       tree substed = TREE_TYPE (decl);
16350       unsigned int i;
16351
16352       tree sarg
16353         = skip_artificial_parms_for (decl, TYPE_ARG_TYPES (substed));
16354       if (return_type)
16355         sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
16356       for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
16357         if (!same_type_p (args[i], TREE_VALUE (sarg)))
16358           {
16359             unify_type_mismatch (explain_p, args[i],
16360                                  TREE_VALUE (sarg));
16361             goto fail;
16362           }
16363     }
16364
16365   r = decl;
16366
16367  fail:
16368   --deduction_depth;
16369   if (excessive_deduction_depth)
16370     {
16371       if (deduction_depth == 0)
16372         /* Reset once we're all the way out.  */
16373         excessive_deduction_depth = false;
16374     }
16375
16376   /* We can't free this if a pending_template entry or last_error_tinst_level
16377      is pointing at it.  */
16378   if (last_pending_template == old_last_pend
16379       && last_error_tinst_level == old_error_tinst)
16380     ggc_free (tinst);
16381
16382   return r;
16383 }
16384
16385 /* Adjust types before performing type deduction, as described in
16386    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
16387    sections are symmetric.  PARM is the type of a function parameter
16388    or the return type of the conversion function.  ARG is the type of
16389    the argument passed to the call, or the type of the value
16390    initialized with the result of the conversion function.
16391    ARG_EXPR is the original argument expression, which may be null.  */
16392
16393 static int
16394 maybe_adjust_types_for_deduction (unification_kind_t strict,
16395                                   tree* parm,
16396                                   tree* arg,
16397                                   tree arg_expr)
16398 {
16399   int result = 0;
16400
16401   switch (strict)
16402     {
16403     case DEDUCE_CALL:
16404       break;
16405
16406     case DEDUCE_CONV:
16407       {
16408         /* Swap PARM and ARG throughout the remainder of this
16409            function; the handling is precisely symmetric since PARM
16410            will initialize ARG rather than vice versa.  */
16411         tree* temp = parm;
16412         parm = arg;
16413         arg = temp;
16414         break;
16415       }
16416
16417     case DEDUCE_EXACT:
16418       /* Core issue #873: Do the DR606 thing (see below) for these cases,
16419          too, but here handle it by stripping the reference from PARM
16420          rather than by adding it to ARG.  */
16421       if (TREE_CODE (*parm) == REFERENCE_TYPE
16422           && TYPE_REF_IS_RVALUE (*parm)
16423           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16424           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16425           && TREE_CODE (*arg) == REFERENCE_TYPE
16426           && !TYPE_REF_IS_RVALUE (*arg))
16427         *parm = TREE_TYPE (*parm);
16428       /* Nothing else to do in this case.  */
16429       return 0;
16430
16431     default:
16432       gcc_unreachable ();
16433     }
16434
16435   if (TREE_CODE (*parm) != REFERENCE_TYPE)
16436     {
16437       /* [temp.deduct.call]
16438
16439          If P is not a reference type:
16440
16441          --If A is an array type, the pointer type produced by the
16442          array-to-pointer standard conversion (_conv.array_) is
16443          used in place of A for type deduction; otherwise,
16444
16445          --If A is a function type, the pointer type produced by
16446          the function-to-pointer standard conversion
16447          (_conv.func_) is used in place of A for type deduction;
16448          otherwise,
16449
16450          --If A is a cv-qualified type, the top level
16451          cv-qualifiers of A's type are ignored for type
16452          deduction.  */
16453       if (TREE_CODE (*arg) == ARRAY_TYPE)
16454         *arg = build_pointer_type (TREE_TYPE (*arg));
16455       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
16456         *arg = build_pointer_type (*arg);
16457       else
16458         *arg = TYPE_MAIN_VARIANT (*arg);
16459     }
16460
16461   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
16462      of the form T&&, where T is a template parameter, and the argument
16463      is an lvalue, T is deduced as A& */
16464   if (TREE_CODE (*parm) == REFERENCE_TYPE
16465       && TYPE_REF_IS_RVALUE (*parm)
16466       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
16467       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
16468       && (arg_expr ? real_lvalue_p (arg_expr)
16469           /* try_one_overload doesn't provide an arg_expr, but
16470              functions are always lvalues.  */
16471           : TREE_CODE (*arg) == FUNCTION_TYPE))
16472     *arg = build_reference_type (*arg);
16473
16474   /* [temp.deduct.call]
16475
16476      If P is a cv-qualified type, the top level cv-qualifiers
16477      of P's type are ignored for type deduction.  If P is a
16478      reference type, the type referred to by P is used for
16479      type deduction.  */
16480   *parm = TYPE_MAIN_VARIANT (*parm);
16481   if (TREE_CODE (*parm) == REFERENCE_TYPE)
16482     {
16483       *parm = TREE_TYPE (*parm);
16484       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
16485     }
16486
16487   /* DR 322. For conversion deduction, remove a reference type on parm
16488      too (which has been swapped into ARG).  */
16489   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
16490     *arg = TREE_TYPE (*arg);
16491
16492   return result;
16493 }
16494
16495 /* Subroutine of unify_one_argument.  PARM is a function parameter of a
16496    template which does contain any deducible template parameters; check if
16497    ARG is a suitable match for it.  STRICT, FLAGS and EXPLAIN_P are as in
16498    unify_one_argument.  */
16499
16500 static int
16501 check_non_deducible_conversion (tree parm, tree arg, int strict,
16502                                 int flags, bool explain_p)
16503 {
16504   tree type;
16505
16506   if (!TYPE_P (arg))
16507     type = TREE_TYPE (arg);
16508   else
16509     type = arg;
16510
16511   if (same_type_p (parm, type))
16512     return unify_success (explain_p);
16513
16514   if (strict == DEDUCE_CONV)
16515     {
16516       if (can_convert_arg (type, parm, NULL_TREE, flags,
16517                            explain_p ? tf_warning_or_error : tf_none))
16518         return unify_success (explain_p);
16519     }
16520   else if (strict != DEDUCE_EXACT)
16521     {
16522       if (can_convert_arg (parm, type,
16523                            TYPE_P (arg) ? NULL_TREE : arg,
16524                            flags, explain_p ? tf_warning_or_error : tf_none))
16525         return unify_success (explain_p);
16526     }
16527
16528   if (strict == DEDUCE_EXACT)
16529     return unify_type_mismatch (explain_p, parm, arg);
16530   else
16531     return unify_arg_conversion (explain_p, parm, type, arg);
16532 }
16533
16534 static bool uses_deducible_template_parms (tree type);
16535
16536 /* Returns true iff the expression EXPR is one from which a template
16537    argument can be deduced.  In other words, if it's an undecorated
16538    use of a template non-type parameter.  */
16539
16540 static bool
16541 deducible_expression (tree expr)
16542 {
16543   return (TREE_CODE (expr) == TEMPLATE_PARM_INDEX);
16544 }
16545
16546 /* Returns true iff the array domain DOMAIN uses a template parameter in a
16547    deducible way; that is, if it has a max value of <PARM> - 1.  */
16548
16549 static bool
16550 deducible_array_bound (tree domain)
16551 {
16552   if (domain == NULL_TREE)
16553     return false;
16554
16555   tree max = TYPE_MAX_VALUE (domain);
16556   if (TREE_CODE (max) != MINUS_EXPR)
16557     return false;
16558
16559   return deducible_expression (TREE_OPERAND (max, 0));
16560 }
16561
16562 /* Returns true iff the template arguments ARGS use a template parameter
16563    in a deducible way.  */
16564
16565 static bool
16566 deducible_template_args (tree args)
16567 {
16568   for (int i = 0; i < TREE_VEC_LENGTH (args); ++i)
16569     {
16570       bool deducible;
16571       tree elt = TREE_VEC_ELT (args, i);
16572       if (ARGUMENT_PACK_P (elt))
16573         deducible = deducible_template_args (ARGUMENT_PACK_ARGS (elt));
16574       else
16575         {
16576           if (PACK_EXPANSION_P (elt))
16577             elt = PACK_EXPANSION_PATTERN (elt);
16578           if (TREE_CODE (elt) == TEMPLATE_TEMPLATE_PARM)
16579             deducible = true;
16580           else if (TYPE_P (elt))
16581             deducible = uses_deducible_template_parms (elt);
16582           else
16583             deducible = deducible_expression (elt);
16584         }
16585       if (deducible)
16586         return true;
16587     }
16588   return false;
16589 }
16590
16591 /* Returns true iff TYPE contains any deducible references to template
16592    parameters, as per 14.8.2.5.  */
16593
16594 static bool
16595 uses_deducible_template_parms (tree type)
16596 {
16597   if (PACK_EXPANSION_P (type))
16598     type = PACK_EXPANSION_PATTERN (type);
16599
16600   /* T
16601      cv-list T
16602      TT<T>
16603      TT<i>
16604      TT<> */
16605   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
16606       || TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
16607     return true;
16608
16609   /* T*
16610      T&
16611      T&&  */
16612   if (POINTER_TYPE_P (type))
16613     return uses_deducible_template_parms (TREE_TYPE (type));
16614
16615   /* T[integer-constant ]
16616      type [i]  */
16617   if (TREE_CODE (type) == ARRAY_TYPE)
16618     return (uses_deducible_template_parms (TREE_TYPE (type))
16619             || deducible_array_bound (TYPE_DOMAIN (type)));
16620
16621   /* T type ::*
16622      type T::*
16623      T T::*
16624      T (type ::*)()
16625      type (T::*)()
16626      type (type ::*)(T)
16627      type (T::*)(T)
16628      T (type ::*)(T)
16629      T (T::*)()
16630      T (T::*)(T) */
16631   if (TYPE_PTRMEM_P (type))
16632     return (uses_deducible_template_parms (TYPE_PTRMEM_CLASS_TYPE (type))
16633             || (uses_deducible_template_parms
16634                 (TYPE_PTRMEM_POINTED_TO_TYPE (type))));
16635
16636   /* template-name <T> (where template-name refers to a class template)
16637      template-name <i> (where template-name refers to a class template) */
16638   if (CLASS_TYPE_P (type)
16639       && CLASSTYPE_TEMPLATE_INFO (type)
16640       && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type)))
16641     return deducible_template_args (INNERMOST_TEMPLATE_ARGS
16642                                     (CLASSTYPE_TI_ARGS (type)));
16643
16644   /* type (T)
16645      T()
16646      T(T)  */
16647   if (TREE_CODE (type) == FUNCTION_TYPE
16648       || TREE_CODE (type) == METHOD_TYPE)
16649     {
16650       if (uses_deducible_template_parms (TREE_TYPE (type)))
16651         return true;
16652       tree parm = TYPE_ARG_TYPES (type);
16653       if (TREE_CODE (type) == METHOD_TYPE)
16654         parm = TREE_CHAIN (parm);
16655       for (; parm; parm = TREE_CHAIN (parm))
16656         if (uses_deducible_template_parms (TREE_VALUE (parm)))
16657           return true;
16658     }
16659
16660   return false;
16661 }
16662
16663 /* Subroutine of type_unification_real and unify_pack_expansion to
16664    handle unification of a single P/A pair.  Parameters are as
16665    for those functions.  */
16666
16667 static int
16668 unify_one_argument (tree tparms, tree targs, tree parm, tree arg,
16669                     int subr, unification_kind_t strict, int flags,
16670                     bool explain_p)
16671 {
16672   tree arg_expr = NULL_TREE;
16673   int arg_strict;
16674
16675   if (arg == error_mark_node || parm == error_mark_node)
16676     return unify_invalid (explain_p);
16677   if (arg == unknown_type_node)
16678     /* We can't deduce anything from this, but we might get all the
16679        template args from other function args.  */
16680     return unify_success (explain_p);
16681
16682   /* Implicit conversions (Clause 4) will be performed on a function
16683      argument to convert it to the type of the corresponding function
16684      parameter if the parameter type contains no template-parameters that
16685      participate in template argument deduction.  */
16686   if (TYPE_P (parm) && !uses_template_parms (parm))
16687     /* For function parameters that contain no template-parameters at all,
16688        we have historically checked for convertibility in order to shortcut
16689        consideration of this candidate.  */
16690     return check_non_deducible_conversion (parm, arg, strict, flags,
16691                                            explain_p);
16692   else if (strict == DEDUCE_CALL
16693            && TYPE_P (parm) && !uses_deducible_template_parms (parm))
16694     /* For function parameters with only non-deducible template parameters,
16695        just return.  */
16696     return unify_success (explain_p);
16697
16698   switch (strict)
16699     {
16700     case DEDUCE_CALL:
16701       arg_strict = (UNIFY_ALLOW_OUTER_LEVEL
16702                     | UNIFY_ALLOW_MORE_CV_QUAL
16703                     | UNIFY_ALLOW_DERIVED);
16704       break;
16705
16706     case DEDUCE_CONV:
16707       arg_strict = UNIFY_ALLOW_LESS_CV_QUAL;
16708       break;
16709
16710     case DEDUCE_EXACT:
16711       arg_strict = UNIFY_ALLOW_NONE;
16712       break;
16713
16714     default:
16715       gcc_unreachable ();
16716     }
16717
16718   /* We only do these transformations if this is the top-level
16719      parameter_type_list in a call or declaration matching; in other
16720      situations (nested function declarators, template argument lists) we
16721      won't be comparing a type to an expression, and we don't do any type
16722      adjustments.  */
16723   if (!subr)
16724     {
16725       if (!TYPE_P (arg))
16726         {
16727           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
16728           if (type_unknown_p (arg))
16729             {
16730               /* [temp.deduct.type] A template-argument can be
16731                  deduced from a pointer to function or pointer
16732                  to member function argument if the set of
16733                  overloaded functions does not contain function
16734                  templates and at most one of a set of
16735                  overloaded functions provides a unique
16736                  match.  */
16737
16738               if (resolve_overloaded_unification
16739                   (tparms, targs, parm, arg, strict,
16740                    arg_strict, explain_p))
16741                 return unify_success (explain_p);
16742               return unify_overload_resolution_failure (explain_p, arg);
16743             }
16744
16745           arg_expr = arg;
16746           arg = unlowered_expr_type (arg);
16747           if (arg == error_mark_node)
16748             return unify_invalid (explain_p);
16749         }
16750
16751       arg_strict |=
16752         maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
16753     }
16754   else
16755     if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
16756         != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
16757       return unify_template_argument_mismatch (explain_p, parm, arg);
16758
16759   /* For deduction from an init-list we need the actual list.  */
16760   if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
16761     arg = arg_expr;
16762   return unify (tparms, targs, parm, arg, arg_strict, explain_p);
16763 }
16764
16765 /* Most parms like fn_type_unification.
16766
16767    If SUBR is 1, we're being called recursively (to unify the
16768    arguments of a function or method parameter of a function
16769    template).
16770
16771    CHECKS is a pointer to a vector of access checks encountered while
16772    substituting default template arguments.  */
16773
16774 static int
16775 type_unification_real (tree tparms,
16776                        tree targs,
16777                        tree xparms,
16778                        const tree *xargs,
16779                        unsigned int xnargs,
16780                        int subr,
16781                        unification_kind_t strict,
16782                        int flags,
16783                        vec<deferred_access_check, va_gc> **checks,
16784                        bool explain_p)
16785 {
16786   tree parm, arg;
16787   int i;
16788   int ntparms = TREE_VEC_LENGTH (tparms);
16789   int saw_undeduced = 0;
16790   tree parms;
16791   const tree *args;
16792   unsigned int nargs;
16793   unsigned int ia;
16794
16795   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
16796   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
16797   gcc_assert (ntparms > 0);
16798
16799   /* Reset the number of non-defaulted template arguments contained
16800      in TARGS.  */
16801   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
16802
16803  again:
16804   parms = xparms;
16805   args = xargs;
16806   nargs = xnargs;
16807
16808   ia = 0;
16809   while (parms && parms != void_list_node
16810          && ia < nargs)
16811     {
16812       parm = TREE_VALUE (parms);
16813
16814       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
16815           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
16816         /* For a function parameter pack that occurs at the end of the
16817            parameter-declaration-list, the type A of each remaining
16818            argument of the call is compared with the type P of the
16819            declarator-id of the function parameter pack.  */
16820         break;
16821
16822       parms = TREE_CHAIN (parms);
16823
16824       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
16825         /* For a function parameter pack that does not occur at the
16826            end of the parameter-declaration-list, the type of the
16827            parameter pack is a non-deduced context.  */
16828         continue;
16829
16830       arg = args[ia];
16831       ++ia;
16832
16833       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
16834                               flags, explain_p))
16835         return 1;
16836     }
16837
16838   if (parms 
16839       && parms != void_list_node
16840       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
16841     {
16842       /* Unify the remaining arguments with the pack expansion type.  */
16843       tree argvec;
16844       tree parmvec = make_tree_vec (1);
16845
16846       /* Allocate a TREE_VEC and copy in all of the arguments */ 
16847       argvec = make_tree_vec (nargs - ia);
16848       for (i = 0; ia < nargs; ++ia, ++i)
16849         TREE_VEC_ELT (argvec, i) = args[ia];
16850
16851       /* Copy the parameter into parmvec.  */
16852       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
16853       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
16854                                 /*subr=*/subr, explain_p))
16855         return 1;
16856
16857       /* Advance to the end of the list of parameters.  */
16858       parms = TREE_CHAIN (parms);
16859     }
16860
16861   /* Fail if we've reached the end of the parm list, and more args
16862      are present, and the parm list isn't variadic.  */
16863   if (ia < nargs && parms == void_list_node)
16864     return unify_too_many_arguments (explain_p, nargs, ia);
16865   /* Fail if parms are left and they don't have default values and
16866      they aren't all deduced as empty packs (c++/57397).  This is
16867      consistent with sufficient_parms_p.  */
16868   if (parms && parms != void_list_node
16869       && TREE_PURPOSE (parms) == NULL_TREE)
16870     {
16871       unsigned int count = nargs;
16872       tree p = parms;
16873       bool type_pack_p;
16874       do
16875         {
16876           type_pack_p = TREE_CODE (TREE_VALUE (p)) == TYPE_PACK_EXPANSION;
16877           if (!type_pack_p)
16878             count++;
16879           p = TREE_CHAIN (p);
16880         }
16881       while (p && p != void_list_node);
16882       if (count != nargs)
16883         return unify_too_few_arguments (explain_p, ia, count,
16884                                         type_pack_p);
16885     }
16886
16887   if (!subr)
16888     {
16889       tsubst_flags_t complain = (explain_p
16890                                  ? tf_warning_or_error
16891                                  : tf_none);
16892
16893       for (i = 0; i < ntparms; i++)
16894         {
16895           tree targ = TREE_VEC_ELT (targs, i);
16896           tree tparm = TREE_VEC_ELT (tparms, i);
16897
16898           /* Clear the "incomplete" flags on all argument packs now so that
16899              substituting them into later default arguments works.  */
16900           if (targ && ARGUMENT_PACK_P (targ))
16901             {
16902               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
16903               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
16904             }
16905
16906           if (targ || tparm == error_mark_node)
16907             continue;
16908           tparm = TREE_VALUE (tparm);
16909
16910           /* If this is an undeduced nontype parameter that depends on
16911              a type parameter, try another pass; its type may have been
16912              deduced from a later argument than the one from which
16913              this parameter can be deduced.  */
16914           if (TREE_CODE (tparm) == PARM_DECL
16915               && uses_template_parms (TREE_TYPE (tparm))
16916               && !saw_undeduced++)
16917             goto again;
16918
16919           /* Core issue #226 (C++0x) [temp.deduct]:
16920
16921              If a template argument has not been deduced, its
16922              default template argument, if any, is used. 
16923
16924              When we are in C++98 mode, TREE_PURPOSE will either
16925              be NULL_TREE or ERROR_MARK_NODE, so we do not need
16926              to explicitly check cxx_dialect here.  */
16927           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
16928             {
16929               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
16930               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
16931               reopen_deferring_access_checks (*checks);
16932               location_t save_loc = input_location;
16933               if (DECL_P (parm))
16934                 input_location = DECL_SOURCE_LOCATION (parm);
16935               arg = tsubst_template_arg (arg, targs, complain, NULL_TREE);
16936               arg = convert_template_argument (parm, arg, targs, complain,
16937                                                i, NULL_TREE);
16938               input_location = save_loc;
16939               *checks = get_deferred_access_checks ();
16940               pop_deferring_access_checks ();
16941               if (arg == error_mark_node)
16942                 return 1;
16943               else
16944                 {
16945                   TREE_VEC_ELT (targs, i) = arg;
16946                   /* The position of the first default template argument,
16947                      is also the number of non-defaulted arguments in TARGS.
16948                      Record that.  */
16949                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
16950                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
16951                   continue;
16952                 }
16953             }
16954
16955           /* If the type parameter is a parameter pack, then it will
16956              be deduced to an empty parameter pack.  */
16957           if (template_parameter_pack_p (tparm))
16958             {
16959               tree arg;
16960
16961               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
16962                 {
16963                   arg = make_node (NONTYPE_ARGUMENT_PACK);
16964                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
16965                   TREE_CONSTANT (arg) = 1;
16966                 }
16967               else
16968                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
16969
16970               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
16971
16972               TREE_VEC_ELT (targs, i) = arg;
16973               continue;
16974             }
16975
16976           return unify_parameter_deduction_failure (explain_p, tparm);
16977         }
16978     }
16979 #ifdef ENABLE_CHECKING
16980   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
16981     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
16982 #endif
16983
16984   return unify_success (explain_p);
16985 }
16986
16987 /* Subroutine of type_unification_real.  Args are like the variables
16988    at the call site.  ARG is an overloaded function (or template-id);
16989    we try deducing template args from each of the overloads, and if
16990    only one succeeds, we go with that.  Modifies TARGS and returns
16991    true on success.  */
16992
16993 static bool
16994 resolve_overloaded_unification (tree tparms,
16995                                 tree targs,
16996                                 tree parm,
16997                                 tree arg,
16998                                 unification_kind_t strict,
16999                                 int sub_strict,
17000                                 bool explain_p)
17001 {
17002   tree tempargs = copy_node (targs);
17003   int good = 0;
17004   tree goodfn = NULL_TREE;
17005   bool addr_p;
17006
17007   if (TREE_CODE (arg) == ADDR_EXPR)
17008     {
17009       arg = TREE_OPERAND (arg, 0);
17010       addr_p = true;
17011     }
17012   else
17013     addr_p = false;
17014
17015   if (TREE_CODE (arg) == COMPONENT_REF)
17016     /* Handle `&x' where `x' is some static or non-static member
17017        function name.  */
17018     arg = TREE_OPERAND (arg, 1);
17019
17020   if (TREE_CODE (arg) == OFFSET_REF)
17021     arg = TREE_OPERAND (arg, 1);
17022
17023   /* Strip baselink information.  */
17024   if (BASELINK_P (arg))
17025     arg = BASELINK_FUNCTIONS (arg);
17026
17027   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
17028     {
17029       /* If we got some explicit template args, we need to plug them into
17030          the affected templates before we try to unify, in case the
17031          explicit args will completely resolve the templates in question.  */
17032
17033       int ok = 0;
17034       tree expl_subargs = TREE_OPERAND (arg, 1);
17035       arg = TREE_OPERAND (arg, 0);
17036
17037       for (; arg; arg = OVL_NEXT (arg))
17038         {
17039           tree fn = OVL_CURRENT (arg);
17040           tree subargs, elem;
17041
17042           if (TREE_CODE (fn) != TEMPLATE_DECL)
17043             continue;
17044
17045           subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
17046                                            expl_subargs, NULL_TREE, tf_none,
17047                                            /*require_all_args=*/true,
17048                                            /*use_default_args=*/true);
17049           if (subargs != error_mark_node
17050               && !any_dependent_template_arguments_p (subargs))
17051             {
17052               elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
17053               if (try_one_overload (tparms, targs, tempargs, parm,
17054                                     elem, strict, sub_strict, addr_p, explain_p)
17055                   && (!goodfn || !same_type_p (goodfn, elem)))
17056                 {
17057                   goodfn = elem;
17058                   ++good;
17059                 }
17060             }
17061           else if (subargs)
17062             ++ok;
17063         }
17064       /* If no templates (or more than one) are fully resolved by the
17065          explicit arguments, this template-id is a non-deduced context; it
17066          could still be OK if we deduce all template arguments for the
17067          enclosing call through other arguments.  */
17068       if (good != 1)
17069         good = ok;
17070     }
17071   else if (TREE_CODE (arg) != OVERLOAD
17072            && TREE_CODE (arg) != FUNCTION_DECL)
17073     /* If ARG is, for example, "(0, &f)" then its type will be unknown
17074        -- but the deduction does not succeed because the expression is
17075        not just the function on its own.  */
17076     return false;
17077   else
17078     for (; arg; arg = OVL_NEXT (arg))
17079       if (try_one_overload (tparms, targs, tempargs, parm,
17080                             TREE_TYPE (OVL_CURRENT (arg)),
17081                             strict, sub_strict, addr_p, explain_p)
17082           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
17083         {
17084           goodfn = OVL_CURRENT (arg);
17085           ++good;
17086         }
17087
17088   /* [temp.deduct.type] A template-argument can be deduced from a pointer
17089      to function or pointer to member function argument if the set of
17090      overloaded functions does not contain function templates and at most
17091      one of a set of overloaded functions provides a unique match.
17092
17093      So if we found multiple possibilities, we return success but don't
17094      deduce anything.  */
17095
17096   if (good == 1)
17097     {
17098       int i = TREE_VEC_LENGTH (targs);
17099       for (; i--; )
17100         if (TREE_VEC_ELT (tempargs, i))
17101           {
17102             tree old = TREE_VEC_ELT (targs, i);
17103             tree new_ = TREE_VEC_ELT (tempargs, i);
17104             if (new_ && old && ARGUMENT_PACK_P (old)
17105                 && ARGUMENT_PACK_EXPLICIT_ARGS (old))
17106               /* Don't forget explicit template arguments in a pack.  */
17107               ARGUMENT_PACK_EXPLICIT_ARGS (new_)
17108                 = ARGUMENT_PACK_EXPLICIT_ARGS (old);
17109             TREE_VEC_ELT (targs, i) = new_;
17110           }
17111     }
17112   if (good)
17113     return true;
17114
17115   return false;
17116 }
17117
17118 /* Core DR 115: In contexts where deduction is done and fails, or in
17119    contexts where deduction is not done, if a template argument list is
17120    specified and it, along with any default template arguments, identifies
17121    a single function template specialization, then the template-id is an
17122    lvalue for the function template specialization.  */
17123
17124 tree
17125 resolve_nondeduced_context (tree orig_expr)
17126 {
17127   tree expr, offset, baselink;
17128   bool addr;
17129
17130   if (!type_unknown_p (orig_expr))
17131     return orig_expr;
17132
17133   expr = orig_expr;
17134   addr = false;
17135   offset = NULL_TREE;
17136   baselink = NULL_TREE;
17137
17138   if (TREE_CODE (expr) == ADDR_EXPR)
17139     {
17140       expr = TREE_OPERAND (expr, 0);
17141       addr = true;
17142     }
17143   if (TREE_CODE (expr) == OFFSET_REF)
17144     {
17145       offset = expr;
17146       expr = TREE_OPERAND (expr, 1);
17147     }
17148   if (BASELINK_P (expr))
17149     {
17150       baselink = expr;
17151       expr = BASELINK_FUNCTIONS (expr);
17152     }
17153
17154   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
17155     {
17156       int good = 0;
17157       tree goodfn = NULL_TREE;
17158
17159       /* If we got some explicit template args, we need to plug them into
17160          the affected templates before we try to unify, in case the
17161          explicit args will completely resolve the templates in question.  */
17162
17163       tree expl_subargs = TREE_OPERAND (expr, 1);
17164       tree arg = TREE_OPERAND (expr, 0);
17165       tree badfn = NULL_TREE;
17166       tree badargs = NULL_TREE;
17167
17168       for (; arg; arg = OVL_NEXT (arg))
17169         {
17170           tree fn = OVL_CURRENT (arg);
17171           tree subargs, elem;
17172
17173           if (TREE_CODE (fn) != TEMPLATE_DECL)
17174             continue;
17175
17176           subargs = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn),
17177                                            expl_subargs, NULL_TREE, tf_none,
17178                                            /*require_all_args=*/true,
17179                                            /*use_default_args=*/true);
17180           if (subargs != error_mark_node
17181               && !any_dependent_template_arguments_p (subargs))
17182             {
17183               elem = instantiate_template (fn, subargs, tf_none);
17184               if (elem == error_mark_node)
17185                 {
17186                   badfn = fn;
17187                   badargs = subargs;
17188                 }
17189               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
17190                 {
17191                   goodfn = elem;
17192                   ++good;
17193                 }
17194             }
17195         }
17196       if (good == 1)
17197         {
17198           mark_used (goodfn);
17199           expr = goodfn;
17200           if (baselink)
17201             expr = build_baselink (BASELINK_BINFO (baselink),
17202                                    BASELINK_ACCESS_BINFO (baselink),
17203                                    expr, BASELINK_OPTYPE (baselink));
17204           if (offset)
17205             {
17206               tree base
17207                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
17208               expr = build_offset_ref (base, expr, addr, tf_warning_or_error);
17209             }
17210           if (addr)
17211             expr = cp_build_addr_expr (expr, tf_warning_or_error);
17212           return expr;
17213         }
17214       else if (good == 0 && badargs)
17215         /* There were no good options and at least one bad one, so let the
17216            user know what the problem is.  */
17217         instantiate_template (badfn, badargs, tf_warning_or_error);
17218     }
17219   return orig_expr;
17220 }
17221
17222 /* Subroutine of resolve_overloaded_unification; does deduction for a single
17223    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
17224    different overloads deduce different arguments for a given parm.
17225    ADDR_P is true if the expression for which deduction is being
17226    performed was of the form "& fn" rather than simply "fn".
17227
17228    Returns 1 on success.  */
17229
17230 static int
17231 try_one_overload (tree tparms,
17232                   tree orig_targs,
17233                   tree targs,
17234                   tree parm,
17235                   tree arg,
17236                   unification_kind_t strict,
17237                   int sub_strict,
17238                   bool addr_p,
17239                   bool explain_p)
17240 {
17241   int nargs;
17242   tree tempargs;
17243   int i;
17244
17245   if (arg == error_mark_node)
17246     return 0;
17247
17248   /* [temp.deduct.type] A template-argument can be deduced from a pointer
17249      to function or pointer to member function argument if the set of
17250      overloaded functions does not contain function templates and at most
17251      one of a set of overloaded functions provides a unique match.
17252
17253      So if this is a template, just return success.  */
17254
17255   if (uses_template_parms (arg))
17256     return 1;
17257
17258   if (TREE_CODE (arg) == METHOD_TYPE)
17259     arg = build_ptrmemfunc_type (build_pointer_type (arg));
17260   else if (addr_p)
17261     arg = build_pointer_type (arg);
17262
17263   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
17264
17265   /* We don't copy orig_targs for this because if we have already deduced
17266      some template args from previous args, unify would complain when we
17267      try to deduce a template parameter for the same argument, even though
17268      there isn't really a conflict.  */
17269   nargs = TREE_VEC_LENGTH (targs);
17270   tempargs = make_tree_vec (nargs);
17271
17272   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
17273     return 0;
17274
17275   /* First make sure we didn't deduce anything that conflicts with
17276      explicitly specified args.  */
17277   for (i = nargs; i--; )
17278     {
17279       tree elt = TREE_VEC_ELT (tempargs, i);
17280       tree oldelt = TREE_VEC_ELT (orig_targs, i);
17281
17282       if (!elt)
17283         /*NOP*/;
17284       else if (uses_template_parms (elt))
17285         /* Since we're unifying against ourselves, we will fill in
17286            template args used in the function parm list with our own
17287            template parms.  Discard them.  */
17288         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
17289       else if (oldelt && !template_args_equal (oldelt, elt))
17290         return 0;
17291     }
17292
17293   for (i = nargs; i--; )
17294     {
17295       tree elt = TREE_VEC_ELT (tempargs, i);
17296
17297       if (elt)
17298         TREE_VEC_ELT (targs, i) = elt;
17299     }
17300
17301   return 1;
17302 }
17303
17304 /* PARM is a template class (perhaps with unbound template
17305    parameters).  ARG is a fully instantiated type.  If ARG can be
17306    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
17307    TARGS are as for unify.  */
17308
17309 static tree
17310 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
17311                        bool explain_p)
17312 {
17313   tree copy_of_targs;
17314
17315   if (!CLASSTYPE_TEMPLATE_INFO (arg)
17316       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
17317           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
17318     return NULL_TREE;
17319
17320   /* We need to make a new template argument vector for the call to
17321      unify.  If we used TARGS, we'd clutter it up with the result of
17322      the attempted unification, even if this class didn't work out.
17323      We also don't want to commit ourselves to all the unifications
17324      we've already done, since unification is supposed to be done on
17325      an argument-by-argument basis.  In other words, consider the
17326      following pathological case:
17327
17328        template <int I, int J, int K>
17329        struct S {};
17330
17331        template <int I, int J>
17332        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
17333
17334        template <int I, int J, int K>
17335        void f(S<I, J, K>, S<I, I, I>);
17336
17337        void g() {
17338          S<0, 0, 0> s0;
17339          S<0, 1, 2> s2;
17340
17341          f(s0, s2);
17342        }
17343
17344      Now, by the time we consider the unification involving `s2', we
17345      already know that we must have `f<0, 0, 0>'.  But, even though
17346      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
17347      because there are two ways to unify base classes of S<0, 1, 2>
17348      with S<I, I, I>.  If we kept the already deduced knowledge, we
17349      would reject the possibility I=1.  */
17350   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
17351
17352   /* If unification failed, we're done.  */
17353   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
17354              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
17355     return NULL_TREE;
17356
17357   return arg;
17358 }
17359
17360 /* Given a template type PARM and a class type ARG, find the unique
17361    base type in ARG that is an instance of PARM.  We do not examine
17362    ARG itself; only its base-classes.  If there is not exactly one
17363    appropriate base class, return NULL_TREE.  PARM may be the type of
17364    a partial specialization, as well as a plain template type.  Used
17365    by unify.  */
17366
17367 static enum template_base_result
17368 get_template_base (tree tparms, tree targs, tree parm, tree arg,
17369                    bool explain_p, tree *result)
17370 {
17371   tree rval = NULL_TREE;
17372   tree binfo;
17373
17374   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
17375
17376   binfo = TYPE_BINFO (complete_type (arg));
17377   if (!binfo)
17378     {
17379       /* The type could not be completed.  */
17380       *result = NULL_TREE;
17381       return tbr_incomplete_type;
17382     }
17383
17384   /* Walk in inheritance graph order.  The search order is not
17385      important, and this avoids multiple walks of virtual bases.  */
17386   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
17387     {
17388       tree r = try_class_unification (tparms, targs, parm,
17389                                       BINFO_TYPE (binfo), explain_p);
17390
17391       if (r)
17392         {
17393           /* If there is more than one satisfactory baseclass, then:
17394
17395                [temp.deduct.call]
17396
17397               If they yield more than one possible deduced A, the type
17398               deduction fails.
17399
17400              applies.  */
17401           if (rval && !same_type_p (r, rval))
17402             {
17403               *result = NULL_TREE;
17404               return tbr_ambiguous_baseclass;
17405             }
17406
17407           rval = r;
17408         }
17409     }
17410
17411   *result = rval;
17412   return tbr_success;
17413 }
17414
17415 /* Returns the level of DECL, which declares a template parameter.  */
17416
17417 static int
17418 template_decl_level (tree decl)
17419 {
17420   switch (TREE_CODE (decl))
17421     {
17422     case TYPE_DECL:
17423     case TEMPLATE_DECL:
17424       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
17425
17426     case PARM_DECL:
17427       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
17428
17429     default:
17430       gcc_unreachable ();
17431     }
17432   return 0;
17433 }
17434
17435 /* Decide whether ARG can be unified with PARM, considering only the
17436    cv-qualifiers of each type, given STRICT as documented for unify.
17437    Returns nonzero iff the unification is OK on that basis.  */
17438
17439 static int
17440 check_cv_quals_for_unify (int strict, tree arg, tree parm)
17441 {
17442   int arg_quals = cp_type_quals (arg);
17443   int parm_quals = cp_type_quals (parm);
17444
17445   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17446       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17447     {
17448       /*  Although a CVR qualifier is ignored when being applied to a
17449           substituted template parameter ([8.3.2]/1 for example), that
17450           does not allow us to unify "const T" with "int&" because both
17451           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
17452           It is ok when we're allowing additional CV qualifiers
17453           at the outer level [14.8.2.1]/3,1st bullet.  */
17454       if ((TREE_CODE (arg) == REFERENCE_TYPE
17455            || TREE_CODE (arg) == FUNCTION_TYPE
17456            || TREE_CODE (arg) == METHOD_TYPE)
17457           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
17458         return 0;
17459
17460       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
17461           && (parm_quals & TYPE_QUAL_RESTRICT))
17462         return 0;
17463     }
17464
17465   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
17466       && (arg_quals & parm_quals) != parm_quals)
17467     return 0;
17468
17469   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
17470       && (parm_quals & arg_quals) != arg_quals)
17471     return 0;
17472
17473   return 1;
17474 }
17475
17476 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
17477 void 
17478 template_parm_level_and_index (tree parm, int* level, int* index)
17479 {
17480   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17481       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17482       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17483     {
17484       *index = TEMPLATE_TYPE_IDX (parm);
17485       *level = TEMPLATE_TYPE_LEVEL (parm);
17486     }
17487   else
17488     {
17489       *index = TEMPLATE_PARM_IDX (parm);
17490       *level = TEMPLATE_PARM_LEVEL (parm);
17491     }
17492 }
17493
17494 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
17495   do {                                                                  \
17496     if (unify (TP, TA, P, A, S, EP))                                    \
17497       return 1;                                                         \
17498   } while (0);
17499
17500 /* Unifies the remaining arguments in PACKED_ARGS with the pack
17501    expansion at the end of PACKED_PARMS. Returns 0 if the type
17502    deduction succeeds, 1 otherwise. STRICT is the same as in
17503    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
17504    call argument list. We'll need to adjust the arguments to make them
17505    types. SUBR tells us if this is from a recursive call to
17506    type_unification_real, or for comparing two template argument
17507    lists. */
17508
17509 static int
17510 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
17511                       tree packed_args, unification_kind_t strict,
17512                       bool subr, bool explain_p)
17513 {
17514   tree parm 
17515     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
17516   tree pattern = PACK_EXPANSION_PATTERN (parm);
17517   tree pack, packs = NULL_TREE;
17518   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
17519
17520   packed_args = expand_template_argument_pack (packed_args);
17521
17522   int len = TREE_VEC_LENGTH (packed_args);
17523
17524   /* Determine the parameter packs we will be deducing from the
17525      pattern, and record their current deductions.  */
17526   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
17527        pack; pack = TREE_CHAIN (pack))
17528     {
17529       tree parm_pack = TREE_VALUE (pack);
17530       int idx, level;
17531
17532       /* Determine the index and level of this parameter pack.  */
17533       template_parm_level_and_index (parm_pack, &level, &idx);
17534
17535       /* Keep track of the parameter packs and their corresponding
17536          argument packs.  */
17537       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
17538       TREE_TYPE (packs) = make_tree_vec (len - start);
17539     }
17540   
17541   /* Loop through all of the arguments that have not yet been
17542      unified and unify each with the pattern.  */
17543   for (i = start; i < len; i++)
17544     {
17545       tree parm;
17546       bool any_explicit = false;
17547       tree arg = TREE_VEC_ELT (packed_args, i);
17548
17549       /* For each parameter pack, set its TMPL_ARG to either NULL_TREE
17550          or the element of its argument pack at the current index if
17551          this argument was explicitly specified.  */
17552       for (pack = packs; pack; pack = TREE_CHAIN (pack))
17553         {
17554           int idx, level;
17555           tree arg, pargs;
17556           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17557
17558           arg = NULL_TREE;
17559           if (TREE_VALUE (pack)
17560               && (pargs = ARGUMENT_PACK_EXPLICIT_ARGS (TREE_VALUE (pack)))
17561               && (i - start < TREE_VEC_LENGTH (pargs)))
17562             {
17563               any_explicit = true;
17564               arg = TREE_VEC_ELT (pargs, i - start);
17565             }
17566           TMPL_ARG (targs, level, idx) = arg;
17567         }
17568
17569       /* If we had explicit template arguments, substitute them into the
17570          pattern before deduction.  */
17571       if (any_explicit)
17572         {
17573           /* Some arguments might still be unspecified or dependent.  */
17574           bool dependent;
17575           ++processing_template_decl;
17576           dependent = any_dependent_template_arguments_p (targs);
17577           if (!dependent)
17578             --processing_template_decl;
17579           parm = tsubst (pattern, targs,
17580                          explain_p ? tf_warning_or_error : tf_none,
17581                          NULL_TREE);
17582           if (dependent)
17583             --processing_template_decl;
17584           if (parm == error_mark_node)
17585             return 1;
17586         }
17587       else
17588         parm = pattern;
17589
17590       /* Unify the pattern with the current argument.  */
17591       if (unify_one_argument (tparms, targs, parm, arg, subr, strict,
17592                               LOOKUP_IMPLICIT, explain_p))
17593         return 1;
17594
17595       /* For each parameter pack, collect the deduced value.  */
17596       for (pack = packs; pack; pack = TREE_CHAIN (pack))
17597         {
17598           int idx, level;
17599           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17600
17601           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
17602             TMPL_ARG (targs, level, idx);
17603         }
17604     }
17605
17606   /* Verify that the results of unification with the parameter packs
17607      produce results consistent with what we've seen before, and make
17608      the deduced argument packs available.  */
17609   for (pack = packs; pack; pack = TREE_CHAIN (pack))
17610     {
17611       tree old_pack = TREE_VALUE (pack);
17612       tree new_args = TREE_TYPE (pack);
17613       int i, len = TREE_VEC_LENGTH (new_args);
17614       int idx, level;
17615       bool nondeduced_p = false;
17616
17617       /* By default keep the original deduced argument pack.
17618          If necessary, more specific code is going to update the
17619          resulting deduced argument later down in this function.  */
17620       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
17621       TMPL_ARG (targs, level, idx) = old_pack;
17622
17623       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
17624          actually deduce anything.  */
17625       for (i = 0; i < len && !nondeduced_p; ++i)
17626         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
17627           nondeduced_p = true;
17628       if (nondeduced_p)
17629         continue;
17630
17631       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
17632         {
17633           /* If we had fewer function args than explicit template args,
17634              just use the explicits.  */
17635           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17636           int explicit_len = TREE_VEC_LENGTH (explicit_args);
17637           if (len < explicit_len)
17638             new_args = explicit_args;
17639         }
17640
17641       if (!old_pack)
17642         {
17643           tree result;
17644           /* Build the deduced *_ARGUMENT_PACK.  */
17645           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
17646             {
17647               result = make_node (NONTYPE_ARGUMENT_PACK);
17648               TREE_TYPE (result) = 
17649                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
17650               TREE_CONSTANT (result) = 1;
17651             }
17652           else
17653             result = cxx_make_type (TYPE_ARGUMENT_PACK);
17654
17655           SET_ARGUMENT_PACK_ARGS (result, new_args);
17656
17657           /* Note the deduced argument packs for this parameter
17658              pack.  */
17659           TMPL_ARG (targs, level, idx) = result;
17660         }
17661       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
17662                && (ARGUMENT_PACK_ARGS (old_pack) 
17663                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
17664         {
17665           /* We only had the explicitly-provided arguments before, but
17666              now we have a complete set of arguments.  */
17667           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
17668
17669           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
17670           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
17671           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
17672         }
17673       else
17674         {
17675           tree bad_old_arg = NULL_TREE, bad_new_arg = NULL_TREE;
17676           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
17677
17678           if (!comp_template_args_with_info (old_args, new_args,
17679                                              &bad_old_arg, &bad_new_arg))
17680             /* Inconsistent unification of this parameter pack.  */
17681             return unify_parameter_pack_inconsistent (explain_p,
17682                                                       bad_old_arg,
17683                                                       bad_new_arg);
17684         }
17685     }
17686
17687   return unify_success (explain_p);
17688 }
17689
17690 /* Handle unification of the domain of an array.  PARM_DOM and ARG_DOM are
17691    INTEGER_TYPEs representing the TYPE_DOMAIN of ARRAY_TYPEs.  The other
17692    parameters and return value are as for unify.  */
17693
17694 static int
17695 unify_array_domain (tree tparms, tree targs,
17696                     tree parm_dom, tree arg_dom,
17697                     bool explain_p)
17698 {
17699   tree parm_max;
17700   tree arg_max;
17701   bool parm_cst;
17702   bool arg_cst;
17703
17704   /* Our representation of array types uses "N - 1" as the
17705      TYPE_MAX_VALUE for an array with "N" elements, if "N" is
17706      not an integer constant.  We cannot unify arbitrarily
17707      complex expressions, so we eliminate the MINUS_EXPRs
17708      here.  */
17709   parm_max = TYPE_MAX_VALUE (parm_dom);
17710   parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
17711   if (!parm_cst)
17712     {
17713       gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
17714       parm_max = TREE_OPERAND (parm_max, 0);
17715     }
17716   arg_max = TYPE_MAX_VALUE (arg_dom);
17717   arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
17718   if (!arg_cst)
17719     {
17720       /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
17721          trying to unify the type of a variable with the type
17722          of a template parameter.  For example:
17723
17724            template <unsigned int N>
17725            void f (char (&) [N]);
17726            int g();
17727            void h(int i) {
17728              char a[g(i)];
17729              f(a);
17730            }
17731
17732          Here, the type of the ARG will be "int [g(i)]", and
17733          may be a SAVE_EXPR, etc.  */
17734       if (TREE_CODE (arg_max) != MINUS_EXPR)
17735         return unify_vla_arg (explain_p, arg_dom);
17736       arg_max = TREE_OPERAND (arg_max, 0);
17737     }
17738
17739   /* If only one of the bounds used a MINUS_EXPR, compensate
17740      by adding one to the other bound.  */
17741   if (parm_cst && !arg_cst)
17742     parm_max = fold_build2_loc (input_location, PLUS_EXPR,
17743                                 integer_type_node,
17744                                 parm_max,
17745                                 integer_one_node);
17746   else if (arg_cst && !parm_cst)
17747     arg_max = fold_build2_loc (input_location, PLUS_EXPR,
17748                                integer_type_node,
17749                                arg_max,
17750                                integer_one_node);
17751
17752   return unify (tparms, targs, parm_max, arg_max,
17753                 UNIFY_ALLOW_INTEGER, explain_p);
17754 }
17755
17756 /* Deduce the value of template parameters.  TPARMS is the (innermost)
17757    set of template parameters to a template.  TARGS is the bindings
17758    for those template parameters, as determined thus far; TARGS may
17759    include template arguments for outer levels of template parameters
17760    as well.  PARM is a parameter to a template function, or a
17761    subcomponent of that parameter; ARG is the corresponding argument.
17762    This function attempts to match PARM with ARG in a manner
17763    consistent with the existing assignments in TARGS.  If more values
17764    are deduced, then TARGS is updated.
17765
17766    Returns 0 if the type deduction succeeds, 1 otherwise.  The
17767    parameter STRICT is a bitwise or of the following flags:
17768
17769      UNIFY_ALLOW_NONE:
17770        Require an exact match between PARM and ARG.
17771      UNIFY_ALLOW_MORE_CV_QUAL:
17772        Allow the deduced ARG to be more cv-qualified (by qualification
17773        conversion) than ARG.
17774      UNIFY_ALLOW_LESS_CV_QUAL:
17775        Allow the deduced ARG to be less cv-qualified than ARG.
17776      UNIFY_ALLOW_DERIVED:
17777        Allow the deduced ARG to be a template base class of ARG,
17778        or a pointer to a template base class of the type pointed to by
17779        ARG.
17780      UNIFY_ALLOW_INTEGER:
17781        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
17782        case for more information.
17783      UNIFY_ALLOW_OUTER_LEVEL:
17784        This is the outermost level of a deduction. Used to determine validity
17785        of qualification conversions. A valid qualification conversion must
17786        have const qualified pointers leading up to the inner type which
17787        requires additional CV quals, except at the outer level, where const
17788        is not required [conv.qual]. It would be normal to set this flag in
17789        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
17790      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
17791        This is the outermost level of a deduction, and PARM can be more CV
17792        qualified at this point.
17793      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
17794        This is the outermost level of a deduction, and PARM can be less CV
17795        qualified at this point.  */
17796
17797 static int
17798 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
17799        bool explain_p)
17800 {
17801   int idx;
17802   tree targ;
17803   tree tparm;
17804   int strict_in = strict;
17805
17806   /* I don't think this will do the right thing with respect to types.
17807      But the only case I've seen it in so far has been array bounds, where
17808      signedness is the only information lost, and I think that will be
17809      okay.  */
17810   while (TREE_CODE (parm) == NOP_EXPR)
17811     parm = TREE_OPERAND (parm, 0);
17812
17813   if (arg == error_mark_node)
17814     return unify_invalid (explain_p);
17815   if (arg == unknown_type_node
17816       || arg == init_list_type_node)
17817     /* We can't deduce anything from this, but we might get all the
17818        template args from other function args.  */
17819     return unify_success (explain_p);
17820
17821   /* If PARM uses template parameters, then we can't bail out here,
17822      even if ARG == PARM, since we won't record unifications for the
17823      template parameters.  We might need them if we're trying to
17824      figure out which of two things is more specialized.  */
17825   if (arg == parm && !uses_template_parms (parm))
17826     return unify_success (explain_p);
17827
17828   /* Handle init lists early, so the rest of the function can assume
17829      we're dealing with a type. */
17830   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
17831     {
17832       tree elt, elttype;
17833       unsigned i;
17834       tree orig_parm = parm;
17835
17836       /* Replace T with std::initializer_list<T> for deduction.  */
17837       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17838           && flag_deduce_init_list)
17839         parm = listify (parm);
17840
17841       if (!is_std_init_list (parm)
17842           && TREE_CODE (parm) != ARRAY_TYPE)
17843         /* We can only deduce from an initializer list argument if the
17844            parameter is std::initializer_list or an array; otherwise this
17845            is a non-deduced context. */
17846         return unify_success (explain_p);
17847
17848       if (TREE_CODE (parm) == ARRAY_TYPE)
17849         elttype = TREE_TYPE (parm);
17850       else
17851         {
17852           elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
17853           /* Deduction is defined in terms of a single type, so just punt
17854              on the (bizarre) std::initializer_list<T...>.  */
17855           if (PACK_EXPANSION_P (elttype))
17856             return unify_success (explain_p);
17857         }
17858
17859       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
17860         {
17861           int elt_strict = strict;
17862
17863           if (elt == error_mark_node)
17864             return unify_invalid (explain_p);
17865
17866           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
17867             {
17868               tree type = TREE_TYPE (elt);
17869               if (type == error_mark_node)
17870                 return unify_invalid (explain_p);
17871               /* It should only be possible to get here for a call.  */
17872               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
17873               elt_strict |= maybe_adjust_types_for_deduction
17874                 (DEDUCE_CALL, &elttype, &type, elt);
17875               elt = type;
17876             }
17877
17878           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
17879                                    explain_p);
17880         }
17881
17882       if (TREE_CODE (parm) == ARRAY_TYPE
17883           && deducible_array_bound (TYPE_DOMAIN (parm)))
17884         {
17885           /* Also deduce from the length of the initializer list.  */
17886           tree max = size_int (CONSTRUCTOR_NELTS (arg));
17887           tree idx = compute_array_index_type (NULL_TREE, max, tf_none);
17888           if (idx == error_mark_node)
17889             return unify_invalid (explain_p);
17890           return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
17891                                      idx, explain_p);
17892         }
17893
17894       /* If the std::initializer_list<T> deduction worked, replace the
17895          deduced A with std::initializer_list<A>.  */
17896       if (orig_parm != parm)
17897         {
17898           idx = TEMPLATE_TYPE_IDX (orig_parm);
17899           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17900           targ = listify (targ);
17901           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
17902         }
17903       return unify_success (explain_p);
17904     }
17905
17906   /* Immediately reject some pairs that won't unify because of
17907      cv-qualification mismatches.  */
17908   if (TREE_CODE (arg) == TREE_CODE (parm)
17909       && TYPE_P (arg)
17910       /* It is the elements of the array which hold the cv quals of an array
17911          type, and the elements might be template type parms. We'll check
17912          when we recurse.  */
17913       && TREE_CODE (arg) != ARRAY_TYPE
17914       /* We check the cv-qualifiers when unifying with template type
17915          parameters below.  We want to allow ARG `const T' to unify with
17916          PARM `T' for example, when computing which of two templates
17917          is more specialized, for example.  */
17918       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
17919       && !check_cv_quals_for_unify (strict_in, arg, parm))
17920     return unify_cv_qual_mismatch (explain_p, parm, arg);
17921
17922   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
17923       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
17924     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
17925   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
17926   strict &= ~UNIFY_ALLOW_DERIVED;
17927   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
17928   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
17929
17930   switch (TREE_CODE (parm))
17931     {
17932     case TYPENAME_TYPE:
17933     case SCOPE_REF:
17934     case UNBOUND_CLASS_TEMPLATE:
17935       /* In a type which contains a nested-name-specifier, template
17936          argument values cannot be deduced for template parameters used
17937          within the nested-name-specifier.  */
17938       return unify_success (explain_p);
17939
17940     case TEMPLATE_TYPE_PARM:
17941     case TEMPLATE_TEMPLATE_PARM:
17942     case BOUND_TEMPLATE_TEMPLATE_PARM:
17943       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
17944       if (error_operand_p (tparm))
17945         return unify_invalid (explain_p);
17946
17947       if (TEMPLATE_TYPE_LEVEL (parm)
17948           != template_decl_level (tparm))
17949         /* The PARM is not one we're trying to unify.  Just check
17950            to see if it matches ARG.  */
17951         {
17952           if (TREE_CODE (arg) == TREE_CODE (parm)
17953               && (is_auto (parm) ? is_auto (arg)
17954                   : same_type_p (parm, arg)))
17955             return unify_success (explain_p);
17956           else
17957             return unify_type_mismatch (explain_p, parm, arg);
17958         }
17959       idx = TEMPLATE_TYPE_IDX (parm);
17960       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
17961       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
17962       if (error_operand_p (tparm))
17963         return unify_invalid (explain_p);
17964
17965       /* Check for mixed types and values.  */
17966       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
17967            && TREE_CODE (tparm) != TYPE_DECL)
17968           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
17969               && TREE_CODE (tparm) != TEMPLATE_DECL))
17970         gcc_unreachable ();
17971
17972       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
17973         {
17974           /* ARG must be constructed from a template class or a template
17975              template parameter.  */
17976           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
17977               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
17978             return unify_template_deduction_failure (explain_p, parm, arg);
17979           {
17980             tree parmvec = TYPE_TI_ARGS (parm);
17981             /* An alias template name is never deduced.  */
17982             if (TYPE_ALIAS_P (arg))
17983               arg = strip_typedefs (arg);
17984             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
17985             tree full_argvec = add_to_template_args (targs, argvec);
17986             tree parm_parms 
17987               = DECL_INNERMOST_TEMPLATE_PARMS
17988                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
17989             int i, len;
17990             int parm_variadic_p = 0;
17991
17992             /* The resolution to DR150 makes clear that default
17993                arguments for an N-argument may not be used to bind T
17994                to a template template parameter with fewer than N
17995                parameters.  It is not safe to permit the binding of
17996                default arguments as an extension, as that may change
17997                the meaning of a conforming program.  Consider:
17998
17999                   struct Dense { static const unsigned int dim = 1; };
18000
18001                   template <template <typename> class View,
18002                             typename Block>
18003                   void operator+(float, View<Block> const&);
18004
18005                   template <typename Block,
18006                             unsigned int Dim = Block::dim>
18007                   struct Lvalue_proxy { operator float() const; };
18008
18009                   void
18010                   test_1d (void) {
18011                     Lvalue_proxy<Dense> p;
18012                     float b;
18013                     b + p;
18014                   }
18015
18016               Here, if Lvalue_proxy is permitted to bind to View, then
18017               the global operator+ will be used; if they are not, the
18018               Lvalue_proxy will be converted to float.  */
18019             if (coerce_template_parms (parm_parms,
18020                                        full_argvec,
18021                                        TYPE_TI_TEMPLATE (parm),
18022                                        (explain_p
18023                                         ? tf_warning_or_error
18024                                         : tf_none),
18025                                        /*require_all_args=*/true,
18026                                        /*use_default_args=*/false)
18027                 == error_mark_node)
18028               return 1;
18029
18030             /* Deduce arguments T, i from TT<T> or TT<i>.
18031                We check each element of PARMVEC and ARGVEC individually
18032                rather than the whole TREE_VEC since they can have
18033                different number of elements.  */
18034
18035             parmvec = expand_template_argument_pack (parmvec);
18036             argvec = expand_template_argument_pack (argvec);
18037
18038             len = TREE_VEC_LENGTH (parmvec);
18039
18040             /* Check if the parameters end in a pack, making them
18041                variadic.  */
18042             if (len > 0
18043                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
18044               parm_variadic_p = 1;
18045             
18046              for (i = 0; i < len - parm_variadic_p; ++i)
18047                /* If the template argument list of P contains a pack
18048                   expansion that is not the last template argument, the
18049                   entire template argument list is a non-deduced
18050                   context.  */
18051                if (PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, i)))
18052                  return unify_success (explain_p);
18053
18054             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
18055               return unify_too_few_arguments (explain_p,
18056                                               TREE_VEC_LENGTH (argvec), len);
18057
18058              for (i = 0; i < len - parm_variadic_p; ++i)
18059               {
18060                 RECUR_AND_CHECK_FAILURE (tparms, targs,
18061                                          TREE_VEC_ELT (parmvec, i),
18062                                          TREE_VEC_ELT (argvec, i),
18063                                          UNIFY_ALLOW_NONE, explain_p);
18064               }
18065
18066             if (parm_variadic_p
18067                 && unify_pack_expansion (tparms, targs,
18068                                          parmvec, argvec,
18069                                          DEDUCE_EXACT,
18070                                          /*subr=*/true, explain_p))
18071               return 1;
18072           }
18073           arg = TYPE_TI_TEMPLATE (arg);
18074
18075           /* Fall through to deduce template name.  */
18076         }
18077
18078       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
18079           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
18080         {
18081           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
18082
18083           /* Simple cases: Value already set, does match or doesn't.  */
18084           if (targ != NULL_TREE && template_args_equal (targ, arg))
18085             return unify_success (explain_p);
18086           else if (targ)
18087             return unify_inconsistency (explain_p, parm, targ, arg);
18088         }
18089       else
18090         {
18091           /* If PARM is `const T' and ARG is only `int', we don't have
18092              a match unless we are allowing additional qualification.
18093              If ARG is `const int' and PARM is just `T' that's OK;
18094              that binds `const int' to `T'.  */
18095           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
18096                                          arg, parm))
18097             return unify_cv_qual_mismatch (explain_p, parm, arg);
18098
18099           /* Consider the case where ARG is `const volatile int' and
18100              PARM is `const T'.  Then, T should be `volatile int'.  */
18101           arg = cp_build_qualified_type_real
18102             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
18103           if (arg == error_mark_node)
18104             return unify_invalid (explain_p);
18105
18106           /* Simple cases: Value already set, does match or doesn't.  */
18107           if (targ != NULL_TREE && same_type_p (targ, arg))
18108             return unify_success (explain_p);
18109           else if (targ)
18110             return unify_inconsistency (explain_p, parm, targ, arg);
18111
18112           /* Make sure that ARG is not a variable-sized array.  (Note
18113              that were talking about variable-sized arrays (like
18114              `int[n]'), rather than arrays of unknown size (like
18115              `int[]').)  We'll get very confused by such a type since
18116              the bound of the array is not constant, and therefore
18117              not mangleable.  Besides, such types are not allowed in
18118              ISO C++, so we can do as we please here.  We do allow
18119              them for 'auto' deduction, since that isn't ABI-exposed.  */
18120           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
18121             return unify_vla_arg (explain_p, arg);
18122
18123           /* Strip typedefs as in convert_template_argument.  */
18124           arg = canonicalize_type_argument (arg, tf_none);
18125         }
18126
18127       /* If ARG is a parameter pack or an expansion, we cannot unify
18128          against it unless PARM is also a parameter pack.  */
18129       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
18130           && !template_parameter_pack_p (parm))
18131         return unify_parameter_pack_mismatch (explain_p, parm, arg);
18132
18133       /* If the argument deduction results is a METHOD_TYPE,
18134          then there is a problem.
18135          METHOD_TYPE doesn't map to any real C++ type the result of
18136          the deduction can not be of that type.  */
18137       if (TREE_CODE (arg) == METHOD_TYPE)
18138         return unify_method_type_error (explain_p, arg);
18139
18140       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
18141       return unify_success (explain_p);
18142
18143     case TEMPLATE_PARM_INDEX:
18144       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
18145       if (error_operand_p (tparm))
18146         return unify_invalid (explain_p);
18147
18148       if (TEMPLATE_PARM_LEVEL (parm)
18149           != template_decl_level (tparm))
18150         {
18151           /* The PARM is not one we're trying to unify.  Just check
18152              to see if it matches ARG.  */
18153           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
18154                          && cp_tree_equal (parm, arg));
18155           if (result)
18156             unify_expression_unequal (explain_p, parm, arg);
18157           return result;
18158         }
18159
18160       idx = TEMPLATE_PARM_IDX (parm);
18161       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
18162
18163       if (targ)
18164         {
18165           int x = !cp_tree_equal (targ, arg);
18166           if (x)
18167             unify_inconsistency (explain_p, parm, targ, arg);
18168           return x;
18169         }
18170
18171       /* [temp.deduct.type] If, in the declaration of a function template
18172          with a non-type template-parameter, the non-type
18173          template-parameter is used in an expression in the function
18174          parameter-list and, if the corresponding template-argument is
18175          deduced, the template-argument type shall match the type of the
18176          template-parameter exactly, except that a template-argument
18177          deduced from an array bound may be of any integral type.
18178          The non-type parameter might use already deduced type parameters.  */
18179       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
18180       if (!TREE_TYPE (arg))
18181         /* Template-parameter dependent expression.  Just accept it for now.
18182            It will later be processed in convert_template_argument.  */
18183         ;
18184       else if (same_type_p (TREE_TYPE (arg), tparm))
18185         /* OK */;
18186       else if ((strict & UNIFY_ALLOW_INTEGER)
18187                && CP_INTEGRAL_TYPE_P (tparm))
18188         /* Convert the ARG to the type of PARM; the deduced non-type
18189            template argument must exactly match the types of the
18190            corresponding parameter.  */
18191         arg = fold (build_nop (tparm, arg));
18192       else if (uses_template_parms (tparm))
18193         /* We haven't deduced the type of this parameter yet.  Try again
18194            later.  */
18195         return unify_success (explain_p);
18196       else
18197         return unify_type_mismatch (explain_p, tparm, TREE_TYPE (arg));
18198
18199       /* If ARG is a parameter pack or an expansion, we cannot unify
18200          against it unless PARM is also a parameter pack.  */
18201       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
18202           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
18203         return unify_parameter_pack_mismatch (explain_p, parm, arg);
18204
18205       arg = strip_typedefs_expr (arg);
18206       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
18207       return unify_success (explain_p);
18208
18209     case PTRMEM_CST:
18210      {
18211         /* A pointer-to-member constant can be unified only with
18212          another constant.  */
18213       if (TREE_CODE (arg) != PTRMEM_CST)
18214         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
18215
18216       /* Just unify the class member. It would be useless (and possibly
18217          wrong, depending on the strict flags) to unify also
18218          PTRMEM_CST_CLASS, because we want to be sure that both parm and
18219          arg refer to the same variable, even if through different
18220          classes. For instance:
18221
18222          struct A { int x; };
18223          struct B : A { };
18224
18225          Unification of &A::x and &B::x must succeed.  */
18226       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
18227                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
18228      }
18229
18230     case POINTER_TYPE:
18231       {
18232         if (!TYPE_PTR_P (arg))
18233           return unify_type_mismatch (explain_p, parm, arg);
18234
18235         /* [temp.deduct.call]
18236
18237            A can be another pointer or pointer to member type that can
18238            be converted to the deduced A via a qualification
18239            conversion (_conv.qual_).
18240
18241            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
18242            This will allow for additional cv-qualification of the
18243            pointed-to types if appropriate.  */
18244
18245         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
18246           /* The derived-to-base conversion only persists through one
18247              level of pointers.  */
18248           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
18249
18250         return unify (tparms, targs, TREE_TYPE (parm),
18251                       TREE_TYPE (arg), strict, explain_p);
18252       }
18253
18254     case REFERENCE_TYPE:
18255       if (TREE_CODE (arg) != REFERENCE_TYPE)
18256         return unify_type_mismatch (explain_p, parm, arg);
18257       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18258                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
18259
18260     case ARRAY_TYPE:
18261       if (TREE_CODE (arg) != ARRAY_TYPE)
18262         return unify_type_mismatch (explain_p, parm, arg);
18263       if ((TYPE_DOMAIN (parm) == NULL_TREE)
18264           != (TYPE_DOMAIN (arg) == NULL_TREE))
18265         return unify_type_mismatch (explain_p, parm, arg);
18266       RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18267                                strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
18268       if (TYPE_DOMAIN (parm) != NULL_TREE)
18269         return unify_array_domain (tparms, targs, TYPE_DOMAIN (parm),
18270                                    TYPE_DOMAIN (arg), explain_p);
18271       return unify_success (explain_p);
18272
18273     case REAL_TYPE:
18274     case COMPLEX_TYPE:
18275     case VECTOR_TYPE:
18276     case INTEGER_TYPE:
18277     case BOOLEAN_TYPE:
18278     case ENUMERAL_TYPE:
18279     case VOID_TYPE:
18280     case NULLPTR_TYPE:
18281       if (TREE_CODE (arg) != TREE_CODE (parm))
18282         return unify_type_mismatch (explain_p, parm, arg);
18283
18284       /* We have already checked cv-qualification at the top of the
18285          function.  */
18286       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
18287         return unify_type_mismatch (explain_p, parm, arg);
18288
18289       /* As far as unification is concerned, this wins.  Later checks
18290          will invalidate it if necessary.  */
18291       return unify_success (explain_p);
18292
18293       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
18294       /* Type INTEGER_CST can come from ordinary constant template args.  */
18295     case INTEGER_CST:
18296       while (TREE_CODE (arg) == NOP_EXPR)
18297         arg = TREE_OPERAND (arg, 0);
18298
18299       if (TREE_CODE (arg) != INTEGER_CST)
18300         return unify_template_argument_mismatch (explain_p, parm, arg);
18301       return (tree_int_cst_equal (parm, arg)
18302               ? unify_success (explain_p)
18303               : unify_template_argument_mismatch (explain_p, parm, arg));
18304
18305     case TREE_VEC:
18306       {
18307         int i, len, argslen;
18308         int parm_variadic_p = 0;
18309
18310         if (TREE_CODE (arg) != TREE_VEC)
18311           return unify_template_argument_mismatch (explain_p, parm, arg);
18312
18313         len = TREE_VEC_LENGTH (parm);
18314         argslen = TREE_VEC_LENGTH (arg);
18315
18316         /* Check for pack expansions in the parameters.  */
18317         for (i = 0; i < len; ++i)
18318           {
18319             if (PACK_EXPANSION_P (TREE_VEC_ELT (parm, i)))
18320               {
18321                 if (i == len - 1)
18322                   /* We can unify against something with a trailing
18323                      parameter pack.  */
18324                   parm_variadic_p = 1;
18325                 else
18326                   /* [temp.deduct.type]/9: If the template argument list of
18327                      P contains a pack expansion that is not the last
18328                      template argument, the entire template argument list
18329                      is a non-deduced context.  */
18330                   return unify_success (explain_p);
18331               }
18332           }
18333
18334         /* If we don't have enough arguments to satisfy the parameters
18335            (not counting the pack expression at the end), or we have
18336            too many arguments for a parameter list that doesn't end in
18337            a pack expression, we can't unify.  */
18338         if (parm_variadic_p
18339             ? argslen < len - parm_variadic_p
18340             : argslen != len)
18341           return unify_arity (explain_p, TREE_VEC_LENGTH (arg), len);
18342
18343         /* Unify all of the parameters that precede the (optional)
18344            pack expression.  */
18345         for (i = 0; i < len - parm_variadic_p; ++i)
18346           {
18347             RECUR_AND_CHECK_FAILURE (tparms, targs,
18348                                      TREE_VEC_ELT (parm, i),
18349                                      TREE_VEC_ELT (arg, i),
18350                                      UNIFY_ALLOW_NONE, explain_p);
18351           }
18352         if (parm_variadic_p)
18353           return unify_pack_expansion (tparms, targs, parm, arg,
18354                                        DEDUCE_EXACT,
18355                                        /*subr=*/true, explain_p);
18356         return unify_success (explain_p);
18357       }
18358
18359     case RECORD_TYPE:
18360     case UNION_TYPE:
18361       if (TREE_CODE (arg) != TREE_CODE (parm))
18362         return unify_type_mismatch (explain_p, parm, arg);
18363
18364       if (TYPE_PTRMEMFUNC_P (parm))
18365         {
18366           if (!TYPE_PTRMEMFUNC_P (arg))
18367             return unify_type_mismatch (explain_p, parm, arg);
18368
18369           return unify (tparms, targs,
18370                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
18371                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
18372                         strict, explain_p);
18373         }
18374       else if (TYPE_PTRMEMFUNC_P (arg))
18375         return unify_type_mismatch (explain_p, parm, arg);
18376
18377       if (CLASSTYPE_TEMPLATE_INFO (parm))
18378         {
18379           tree t = NULL_TREE;
18380
18381           if (strict_in & UNIFY_ALLOW_DERIVED)
18382             {
18383               /* First, we try to unify the PARM and ARG directly.  */
18384               t = try_class_unification (tparms, targs,
18385                                          parm, arg, explain_p);
18386
18387               if (!t)
18388                 {
18389                   /* Fallback to the special case allowed in
18390                      [temp.deduct.call]:
18391
18392                        If P is a class, and P has the form
18393                        template-id, then A can be a derived class of
18394                        the deduced A.  Likewise, if P is a pointer to
18395                        a class of the form template-id, A can be a
18396                        pointer to a derived class pointed to by the
18397                        deduced A.  */
18398                   enum template_base_result r;
18399                   r = get_template_base (tparms, targs, parm, arg,
18400                                          explain_p, &t);
18401
18402                   if (!t)
18403                     return unify_no_common_base (explain_p, r, parm, arg);
18404                 }
18405             }
18406           else if (CLASSTYPE_TEMPLATE_INFO (arg)
18407                    && (CLASSTYPE_TI_TEMPLATE (parm)
18408                        == CLASSTYPE_TI_TEMPLATE (arg)))
18409             /* Perhaps PARM is something like S<U> and ARG is S<int>.
18410                Then, we should unify `int' and `U'.  */
18411             t = arg;
18412           else
18413             /* There's no chance of unification succeeding.  */
18414             return unify_type_mismatch (explain_p, parm, arg);
18415
18416           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
18417                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
18418         }
18419       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
18420         return unify_type_mismatch (explain_p, parm, arg);
18421       return unify_success (explain_p);
18422
18423     case METHOD_TYPE:
18424     case FUNCTION_TYPE:
18425       {
18426         unsigned int nargs;
18427         tree *args;
18428         tree a;
18429         unsigned int i;
18430
18431         if (TREE_CODE (arg) != TREE_CODE (parm))
18432           return unify_type_mismatch (explain_p, parm, arg);
18433
18434         /* CV qualifications for methods can never be deduced, they must
18435            match exactly.  We need to check them explicitly here,
18436            because type_unification_real treats them as any other
18437            cv-qualified parameter.  */
18438         if (TREE_CODE (parm) == METHOD_TYPE
18439             && (!check_cv_quals_for_unify
18440                 (UNIFY_ALLOW_NONE,
18441                  class_of_this_parm (arg),
18442                  class_of_this_parm (parm))))
18443           return unify_cv_qual_mismatch (explain_p, parm, arg);
18444
18445         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
18446                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
18447
18448         nargs = list_length (TYPE_ARG_TYPES (arg));
18449         args = XALLOCAVEC (tree, nargs);
18450         for (a = TYPE_ARG_TYPES (arg), i = 0;
18451              a != NULL_TREE && a != void_list_node;
18452              a = TREE_CHAIN (a), ++i)
18453           args[i] = TREE_VALUE (a);
18454         nargs = i;
18455
18456         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
18457                                       args, nargs, 1, DEDUCE_EXACT,
18458                                       LOOKUP_NORMAL, NULL, explain_p);
18459       }
18460
18461     case OFFSET_TYPE:
18462       /* Unify a pointer to member with a pointer to member function, which
18463          deduces the type of the member as a function type. */
18464       if (TYPE_PTRMEMFUNC_P (arg))
18465         {
18466           /* Check top-level cv qualifiers */
18467           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
18468             return unify_cv_qual_mismatch (explain_p, parm, arg);
18469
18470           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18471                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
18472                                    UNIFY_ALLOW_NONE, explain_p);
18473
18474           /* Determine the type of the function we are unifying against. */
18475           tree fntype = static_fn_type (arg);
18476
18477           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
18478         }
18479
18480       if (TREE_CODE (arg) != OFFSET_TYPE)
18481         return unify_type_mismatch (explain_p, parm, arg);
18482       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
18483                                TYPE_OFFSET_BASETYPE (arg),
18484                                UNIFY_ALLOW_NONE, explain_p);
18485       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
18486                     strict, explain_p);
18487
18488     case CONST_DECL:
18489       if (DECL_TEMPLATE_PARM_P (parm))
18490         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
18491       if (arg != scalar_constant_value (parm))
18492         return unify_template_argument_mismatch (explain_p, parm, arg);
18493       return unify_success (explain_p);
18494
18495     case FIELD_DECL:
18496     case TEMPLATE_DECL:
18497       /* Matched cases are handled by the ARG == PARM test above.  */
18498       return unify_template_argument_mismatch (explain_p, parm, arg);
18499
18500     case VAR_DECL:
18501       /* A non-type template parameter that is a variable should be a
18502          an integral constant, in which case, it whould have been
18503          folded into its (constant) value. So we should not be getting
18504          a variable here.  */
18505       gcc_unreachable ();
18506
18507     case TYPE_ARGUMENT_PACK:
18508     case NONTYPE_ARGUMENT_PACK:
18509       return unify (tparms, targs, ARGUMENT_PACK_ARGS (parm),
18510                     ARGUMENT_PACK_ARGS (arg), strict, explain_p);
18511
18512     case TYPEOF_TYPE:
18513     case DECLTYPE_TYPE:
18514     case UNDERLYING_TYPE:
18515       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
18516          or UNDERLYING_TYPE nodes.  */
18517       return unify_success (explain_p);
18518
18519     case ERROR_MARK:
18520       /* Unification fails if we hit an error node.  */
18521       return unify_invalid (explain_p);
18522
18523     case INDIRECT_REF:
18524       if (REFERENCE_REF_P (parm))
18525         {
18526           if (REFERENCE_REF_P (arg))
18527             arg = TREE_OPERAND (arg, 0);
18528           return unify (tparms, targs, TREE_OPERAND (parm, 0), arg,
18529                         strict, explain_p);
18530         }
18531       /* FALLTHRU */
18532
18533     default:
18534       /* An unresolved overload is a nondeduced context.  */
18535       if (is_overloaded_fn (parm) || type_unknown_p (parm))
18536         return unify_success (explain_p);
18537       gcc_assert (EXPR_P (parm));
18538
18539       /* We must be looking at an expression.  This can happen with
18540          something like:
18541
18542            template <int I>
18543            void foo(S<I>, S<I + 2>);
18544
18545          This is a "nondeduced context":
18546
18547            [deduct.type]
18548
18549            The nondeduced contexts are:
18550
18551            --A type that is a template-id in which one or more of
18552              the template-arguments is an expression that references
18553              a template-parameter.
18554
18555          In these cases, we assume deduction succeeded, but don't
18556          actually infer any unifications.  */
18557
18558       if (!uses_template_parms (parm)
18559           && !template_args_equal (parm, arg))
18560         return unify_expression_unequal (explain_p, parm, arg);
18561       else
18562         return unify_success (explain_p);
18563     }
18564 }
18565 #undef RECUR_AND_CHECK_FAILURE
18566 \f
18567 /* Note that DECL can be defined in this translation unit, if
18568    required.  */
18569
18570 static void
18571 mark_definable (tree decl)
18572 {
18573   tree clone;
18574   DECL_NOT_REALLY_EXTERN (decl) = 1;
18575   FOR_EACH_CLONE (clone, decl)
18576     DECL_NOT_REALLY_EXTERN (clone) = 1;
18577 }
18578
18579 /* Called if RESULT is explicitly instantiated, or is a member of an
18580    explicitly instantiated class.  */
18581
18582 void
18583 mark_decl_instantiated (tree result, int extern_p)
18584 {
18585   SET_DECL_EXPLICIT_INSTANTIATION (result);
18586
18587   /* If this entity has already been written out, it's too late to
18588      make any modifications.  */
18589   if (TREE_ASM_WRITTEN (result))
18590     return;
18591
18592   /* For anonymous namespace we don't need to do anything.  */
18593   if (decl_anon_ns_mem_p (result))
18594     {
18595       gcc_assert (!TREE_PUBLIC (result));
18596       return;
18597     }
18598
18599   if (TREE_CODE (result) != FUNCTION_DECL)
18600     /* The TREE_PUBLIC flag for function declarations will have been
18601        set correctly by tsubst.  */
18602     TREE_PUBLIC (result) = 1;
18603
18604   /* This might have been set by an earlier implicit instantiation.  */
18605   DECL_COMDAT (result) = 0;
18606
18607   if (extern_p)
18608     DECL_NOT_REALLY_EXTERN (result) = 0;
18609   else
18610     {
18611       mark_definable (result);
18612       mark_needed (result);
18613       /* Always make artificials weak.  */
18614       if (DECL_ARTIFICIAL (result) && flag_weak)
18615         comdat_linkage (result);
18616       /* For WIN32 we also want to put explicit instantiations in
18617          linkonce sections.  */
18618       else if (TREE_PUBLIC (result))
18619         maybe_make_one_only (result);
18620     }
18621
18622   /* If EXTERN_P, then this function will not be emitted -- unless
18623      followed by an explicit instantiation, at which point its linkage
18624      will be adjusted.  If !EXTERN_P, then this function will be
18625      emitted here.  In neither circumstance do we want
18626      import_export_decl to adjust the linkage.  */
18627   DECL_INTERFACE_KNOWN (result) = 1;
18628 }
18629
18630 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
18631    important template arguments.  If any are missing, we check whether
18632    they're important by using error_mark_node for substituting into any
18633    args that were used for partial ordering (the ones between ARGS and END)
18634    and seeing if it bubbles up.  */
18635
18636 static bool
18637 check_undeduced_parms (tree targs, tree args, tree end)
18638 {
18639   bool found = false;
18640   int i;
18641   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
18642     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
18643       {
18644         found = true;
18645         TREE_VEC_ELT (targs, i) = error_mark_node;
18646       }
18647   if (found)
18648     {
18649       tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
18650       if (substed == error_mark_node)
18651         return true;
18652     }
18653   return false;
18654 }
18655
18656 /* Given two function templates PAT1 and PAT2, return:
18657
18658    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
18659    -1 if PAT2 is more specialized than PAT1.
18660    0 if neither is more specialized.
18661
18662    LEN indicates the number of parameters we should consider
18663    (defaulted parameters should not be considered).
18664
18665    The 1998 std underspecified function template partial ordering, and
18666    DR214 addresses the issue.  We take pairs of arguments, one from
18667    each of the templates, and deduce them against each other.  One of
18668    the templates will be more specialized if all the *other*
18669    template's arguments deduce against its arguments and at least one
18670    of its arguments *does* *not* deduce against the other template's
18671    corresponding argument.  Deduction is done as for class templates.
18672    The arguments used in deduction have reference and top level cv
18673    qualifiers removed.  Iff both arguments were originally reference
18674    types *and* deduction succeeds in both directions, an lvalue reference
18675    wins against an rvalue reference and otherwise the template
18676    with the more cv-qualified argument wins for that pairing (if
18677    neither is more cv-qualified, they both are equal).  Unlike regular
18678    deduction, after all the arguments have been deduced in this way,
18679    we do *not* verify the deduced template argument values can be
18680    substituted into non-deduced contexts.
18681
18682    The logic can be a bit confusing here, because we look at deduce1 and
18683    targs1 to see if pat2 is at least as specialized, and vice versa; if we
18684    can find template arguments for pat1 to make arg1 look like arg2, that
18685    means that arg2 is at least as specialized as arg1.  */
18686
18687 int
18688 more_specialized_fn (tree pat1, tree pat2, int len)
18689 {
18690   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
18691   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
18692   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
18693   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
18694   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
18695   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
18696   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
18697   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
18698   tree origs1, origs2;
18699   bool lose1 = false;
18700   bool lose2 = false;
18701
18702   /* Remove the this parameter from non-static member functions.  If
18703      one is a non-static member function and the other is not a static
18704      member function, remove the first parameter from that function
18705      also.  This situation occurs for operator functions where we
18706      locate both a member function (with this pointer) and non-member
18707      operator (with explicit first operand).  */
18708   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
18709     {
18710       len--; /* LEN is the number of significant arguments for DECL1 */
18711       args1 = TREE_CHAIN (args1);
18712       if (!DECL_STATIC_FUNCTION_P (decl2))
18713         args2 = TREE_CHAIN (args2);
18714     }
18715   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
18716     {
18717       args2 = TREE_CHAIN (args2);
18718       if (!DECL_STATIC_FUNCTION_P (decl1))
18719         {
18720           len--;
18721           args1 = TREE_CHAIN (args1);
18722         }
18723     }
18724
18725   /* If only one is a conversion operator, they are unordered.  */
18726   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
18727     return 0;
18728
18729   /* Consider the return type for a conversion function */
18730   if (DECL_CONV_FN_P (decl1))
18731     {
18732       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
18733       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
18734       len++;
18735     }
18736
18737   processing_template_decl++;
18738
18739   origs1 = args1;
18740   origs2 = args2;
18741
18742   while (len--
18743          /* Stop when an ellipsis is seen.  */
18744          && args1 != NULL_TREE && args2 != NULL_TREE)
18745     {
18746       tree arg1 = TREE_VALUE (args1);
18747       tree arg2 = TREE_VALUE (args2);
18748       int deduce1, deduce2;
18749       int quals1 = -1;
18750       int quals2 = -1;
18751       int ref1 = 0;
18752       int ref2 = 0;
18753
18754       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
18755           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18756         {
18757           /* When both arguments are pack expansions, we need only
18758              unify the patterns themselves.  */
18759           arg1 = PACK_EXPANSION_PATTERN (arg1);
18760           arg2 = PACK_EXPANSION_PATTERN (arg2);
18761
18762           /* This is the last comparison we need to do.  */
18763           len = 0;
18764         }
18765
18766       if (TREE_CODE (arg1) == REFERENCE_TYPE)
18767         {
18768           ref1 = TYPE_REF_IS_RVALUE (arg1) + 1;
18769           arg1 = TREE_TYPE (arg1);
18770           quals1 = cp_type_quals (arg1);
18771         }
18772
18773       if (TREE_CODE (arg2) == REFERENCE_TYPE)
18774         {
18775           ref2 = TYPE_REF_IS_RVALUE (arg2) + 1;
18776           arg2 = TREE_TYPE (arg2);
18777           quals2 = cp_type_quals (arg2);
18778         }
18779
18780       arg1 = TYPE_MAIN_VARIANT (arg1);
18781       arg2 = TYPE_MAIN_VARIANT (arg2);
18782
18783       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
18784         {
18785           int i, len2 = list_length (args2);
18786           tree parmvec = make_tree_vec (1);
18787           tree argvec = make_tree_vec (len2);
18788           tree ta = args2;
18789
18790           /* Setup the parameter vector, which contains only ARG1.  */
18791           TREE_VEC_ELT (parmvec, 0) = arg1;
18792
18793           /* Setup the argument vector, which contains the remaining
18794              arguments.  */
18795           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
18796             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
18797
18798           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
18799                                            argvec, DEDUCE_EXACT,
18800                                            /*subr=*/true, /*explain_p=*/false)
18801                      == 0);
18802
18803           /* We cannot deduce in the other direction, because ARG1 is
18804              a pack expansion but ARG2 is not.  */
18805           deduce2 = 0;
18806         }
18807       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18808         {
18809           int i, len1 = list_length (args1);
18810           tree parmvec = make_tree_vec (1);
18811           tree argvec = make_tree_vec (len1);
18812           tree ta = args1;
18813
18814           /* Setup the parameter vector, which contains only ARG1.  */
18815           TREE_VEC_ELT (parmvec, 0) = arg2;
18816
18817           /* Setup the argument vector, which contains the remaining
18818              arguments.  */
18819           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
18820             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
18821
18822           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
18823                                            argvec, DEDUCE_EXACT,
18824                                            /*subr=*/true, /*explain_p=*/false)
18825                      == 0);
18826
18827           /* We cannot deduce in the other direction, because ARG2 is
18828              a pack expansion but ARG1 is not.*/
18829           deduce1 = 0;
18830         }
18831
18832       else
18833         {
18834           /* The normal case, where neither argument is a pack
18835              expansion.  */
18836           deduce1 = (unify (tparms1, targs1, arg1, arg2,
18837                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
18838                      == 0);
18839           deduce2 = (unify (tparms2, targs2, arg2, arg1,
18840                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
18841                      == 0);
18842         }
18843
18844       /* If we couldn't deduce arguments for tparms1 to make arg1 match
18845          arg2, then arg2 is not as specialized as arg1.  */
18846       if (!deduce1)
18847         lose2 = true;
18848       if (!deduce2)
18849         lose1 = true;
18850
18851       /* "If, for a given type, deduction succeeds in both directions
18852          (i.e., the types are identical after the transformations above)
18853          and both P and A were reference types (before being replaced with
18854          the type referred to above):
18855          - if the type from the argument template was an lvalue reference and
18856          the type from the parameter template was not, the argument type is
18857          considered to be more specialized than the other; otherwise,
18858          - if the type from the argument template is more cv-qualified
18859          than the type from the parameter template (as described above),
18860          the argument type is considered to be more specialized than the other;
18861          otherwise,
18862          - neither type is more specialized than the other."  */
18863
18864       if (deduce1 && deduce2)
18865         {
18866           if (ref1 && ref2 && ref1 != ref2)
18867             {
18868               if (ref1 > ref2)
18869                 lose1 = true;
18870               else
18871                 lose2 = true;
18872             }
18873           else if (quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
18874             {
18875               if ((quals1 & quals2) == quals2)
18876                 lose2 = true;
18877               if ((quals1 & quals2) == quals1)
18878                 lose1 = true;
18879             }
18880         }
18881
18882       if (lose1 && lose2)
18883         /* We've failed to deduce something in either direction.
18884            These must be unordered.  */
18885         break;
18886
18887       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
18888           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
18889         /* We have already processed all of the arguments in our
18890            handing of the pack expansion type.  */
18891         len = 0;
18892
18893       args1 = TREE_CHAIN (args1);
18894       args2 = TREE_CHAIN (args2);
18895     }
18896
18897   /* "In most cases, all template parameters must have values in order for
18898      deduction to succeed, but for partial ordering purposes a template
18899      parameter may remain without a value provided it is not used in the
18900      types being used for partial ordering."
18901
18902      Thus, if we are missing any of the targs1 we need to substitute into
18903      origs1, then pat2 is not as specialized as pat1.  This can happen when
18904      there is a nondeduced context.  */
18905   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
18906     lose2 = true;
18907   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
18908     lose1 = true;
18909
18910   processing_template_decl--;
18911
18912   /* All things being equal, if the next argument is a pack expansion
18913      for one function but not for the other, prefer the
18914      non-variadic function.  FIXME this is bogus; see c++/41958.  */
18915   if (lose1 == lose2
18916       && args1 && TREE_VALUE (args1)
18917       && args2 && TREE_VALUE (args2))
18918     {
18919       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
18920       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
18921     }
18922
18923   if (lose1 == lose2)
18924     return 0;
18925   else if (!lose1)
18926     return 1;
18927   else
18928     return -1;
18929 }
18930
18931 /* Determine which of two partial specializations of TMPL is more
18932    specialized.
18933
18934    PAT1 is a TREE_LIST whose TREE_VALUE is the TEMPLATE_DECL corresponding
18935    to the first partial specialization.  The TREE_PURPOSE is the
18936    innermost set of template parameters for the partial
18937    specialization.  PAT2 is similar, but for the second template.
18938
18939    Return 1 if the first partial specialization is more specialized;
18940    -1 if the second is more specialized; 0 if neither is more
18941    specialized.
18942
18943    See [temp.class.order] for information about determining which of
18944    two templates is more specialized.  */
18945
18946 static int
18947 more_specialized_partial_spec (tree tmpl, tree pat1, tree pat2)
18948 {
18949   tree targs;
18950   int winner = 0;
18951   bool any_deductions = false;
18952
18953   tree tmpl1 = TREE_VALUE (pat1);
18954   tree tmpl2 = TREE_VALUE (pat2);
18955   tree parms1 = DECL_INNERMOST_TEMPLATE_PARMS (tmpl1);
18956   tree parms2 = DECL_INNERMOST_TEMPLATE_PARMS (tmpl2);
18957   tree specargs1 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl1)));
18958   tree specargs2 = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl2)));
18959
18960   /* Just like what happens for functions, if we are ordering between
18961      different template specializations, we may encounter dependent
18962      types in the arguments, and we need our dependency check functions
18963      to behave correctly.  */
18964   ++processing_template_decl;
18965   targs = get_partial_spec_bindings (tmpl, parms1, specargs1, specargs2);
18966   if (targs)
18967     {
18968       --winner;
18969       any_deductions = true;
18970     }
18971
18972   targs = get_partial_spec_bindings (tmpl, parms2, specargs2, specargs1);
18973   if (targs)
18974     {
18975       ++winner;
18976       any_deductions = true;
18977     }
18978   --processing_template_decl;
18979
18980   /* In the case of a tie where at least one of the templates
18981      has a parameter pack at the end, the template with the most
18982      non-packed parameters wins.  */
18983   if (winner == 0
18984       && any_deductions
18985       && (template_args_variadic_p (TREE_PURPOSE (pat1))
18986           || template_args_variadic_p (TREE_PURPOSE (pat2))))
18987     {
18988       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
18989       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
18990       int len1 = TREE_VEC_LENGTH (args1);
18991       int len2 = TREE_VEC_LENGTH (args2);
18992
18993       /* We don't count the pack expansion at the end.  */
18994       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
18995         --len1;
18996       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
18997         --len2;
18998
18999       if (len1 > len2)
19000         return 1;
19001       else if (len1 < len2)
19002         return -1;
19003     }
19004
19005   return winner;
19006 }
19007
19008 /* Return the template arguments that will produce the function signature
19009    DECL from the function template FN, with the explicit template
19010    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
19011    also match.  Return NULL_TREE if no satisfactory arguments could be
19012    found.  */
19013
19014 static tree
19015 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
19016 {
19017   int ntparms = DECL_NTPARMS (fn);
19018   tree targs = make_tree_vec (ntparms);
19019   tree decl_type = TREE_TYPE (decl);
19020   tree decl_arg_types;
19021   tree *args;
19022   unsigned int nargs, ix;
19023   tree arg;
19024
19025   gcc_assert (decl != DECL_TEMPLATE_RESULT (fn));
19026
19027   /* Never do unification on the 'this' parameter.  */
19028   decl_arg_types = skip_artificial_parms_for (decl, 
19029                                               TYPE_ARG_TYPES (decl_type));
19030
19031   nargs = list_length (decl_arg_types);
19032   args = XALLOCAVEC (tree, nargs);
19033   for (arg = decl_arg_types, ix = 0;
19034        arg != NULL_TREE && arg != void_list_node;
19035        arg = TREE_CHAIN (arg), ++ix)
19036     args[ix] = TREE_VALUE (arg);
19037
19038   if (fn_type_unification (fn, explicit_args, targs,
19039                            args, ix,
19040                            (check_rettype || DECL_CONV_FN_P (fn)
19041                             ? TREE_TYPE (decl_type) : NULL_TREE),
19042                            DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false,
19043                            /*decltype*/false)
19044       == error_mark_node)
19045     return NULL_TREE;
19046
19047   return targs;
19048 }
19049
19050 /* Return the innermost template arguments that, when applied to a partial
19051    specialization of TMPL whose innermost template parameters are
19052    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
19053    ARGS.
19054
19055    For example, suppose we have:
19056
19057      template <class T, class U> struct S {};
19058      template <class T> struct S<T*, int> {};
19059
19060    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
19061    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
19062    int}.  The resulting vector will be {double}, indicating that `T'
19063    is bound to `double'.  */
19064
19065 static tree
19066 get_partial_spec_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
19067 {
19068   int i, ntparms = TREE_VEC_LENGTH (tparms);
19069   tree deduced_args;
19070   tree innermost_deduced_args;
19071
19072   innermost_deduced_args = make_tree_vec (ntparms);
19073   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
19074     {
19075       deduced_args = copy_node (args);
19076       SET_TMPL_ARGS_LEVEL (deduced_args,
19077                            TMPL_ARGS_DEPTH (deduced_args),
19078                            innermost_deduced_args);
19079     }
19080   else
19081     deduced_args = innermost_deduced_args;
19082
19083   if (unify (tparms, deduced_args,
19084              INNERMOST_TEMPLATE_ARGS (spec_args),
19085              INNERMOST_TEMPLATE_ARGS (args),
19086              UNIFY_ALLOW_NONE, /*explain_p=*/false))
19087     return NULL_TREE;
19088
19089   for (i =  0; i < ntparms; ++i)
19090     if (! TREE_VEC_ELT (innermost_deduced_args, i))
19091       return NULL_TREE;
19092
19093   /* Verify that nondeduced template arguments agree with the type
19094      obtained from argument deduction.
19095
19096      For example:
19097
19098        struct A { typedef int X; };
19099        template <class T, class U> struct C {};
19100        template <class T> struct C<T, typename T::X> {};
19101
19102      Then with the instantiation `C<A, int>', we can deduce that
19103      `T' is `A' but unify () does not check whether `typename T::X'
19104      is `int'.  */
19105   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
19106   spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19107                                      spec_args, tmpl,
19108                                      tf_none, false, false);
19109   if (spec_args == error_mark_node
19110       /* We only need to check the innermost arguments; the other
19111          arguments will always agree.  */
19112       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
19113                               INNERMOST_TEMPLATE_ARGS (args)))
19114     return NULL_TREE;
19115
19116   /* Now that we have bindings for all of the template arguments,
19117      ensure that the arguments deduced for the template template
19118      parameters have compatible template parameter lists.  See the use
19119      of template_template_parm_bindings_ok_p in fn_type_unification
19120      for more information.  */
19121   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
19122     return NULL_TREE;
19123
19124   return deduced_args;
19125 }
19126
19127 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
19128    Return the TREE_LIST node with the most specialized template, if
19129    any.  If there is no most specialized template, the error_mark_node
19130    is returned.
19131
19132    Note that this function does not look at, or modify, the
19133    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
19134    returned is one of the elements of INSTANTIATIONS, callers may
19135    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
19136    and retrieve it from the value returned.  */
19137
19138 tree
19139 most_specialized_instantiation (tree templates)
19140 {
19141   tree fn, champ;
19142
19143   ++processing_template_decl;
19144
19145   champ = templates;
19146   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
19147     {
19148       int fate = 0;
19149
19150       if (get_bindings (TREE_VALUE (champ),
19151                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
19152                         NULL_TREE, /*check_ret=*/true))
19153         fate--;
19154
19155       if (get_bindings (TREE_VALUE (fn),
19156                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
19157                         NULL_TREE, /*check_ret=*/true))
19158         fate++;
19159
19160       if (fate == -1)
19161         champ = fn;
19162       else if (!fate)
19163         {
19164           /* Equally specialized, move to next function.  If there
19165              is no next function, nothing's most specialized.  */
19166           fn = TREE_CHAIN (fn);
19167           champ = fn;
19168           if (!fn)
19169             break;
19170         }
19171     }
19172
19173   if (champ)
19174     /* Now verify that champ is better than everything earlier in the
19175        instantiation list.  */
19176     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
19177       if (get_bindings (TREE_VALUE (champ),
19178                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
19179                         NULL_TREE, /*check_ret=*/true)
19180           || !get_bindings (TREE_VALUE (fn),
19181                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
19182                             NULL_TREE, /*check_ret=*/true))
19183         {
19184           champ = NULL_TREE;
19185           break;
19186         }
19187
19188   processing_template_decl--;
19189
19190   if (!champ)
19191     return error_mark_node;
19192
19193   return champ;
19194 }
19195
19196 /* If DECL is a specialization of some template, return the most
19197    general such template.  Otherwise, returns NULL_TREE.
19198
19199    For example, given:
19200
19201      template <class T> struct S { template <class U> void f(U); };
19202
19203    if TMPL is `template <class U> void S<int>::f(U)' this will return
19204    the full template.  This function will not trace past partial
19205    specializations, however.  For example, given in addition:
19206
19207      template <class T> struct S<T*> { template <class U> void f(U); };
19208
19209    if TMPL is `template <class U> void S<int*>::f(U)' this will return
19210    `template <class T> template <class U> S<T*>::f(U)'.  */
19211
19212 tree
19213 most_general_template (tree decl)
19214 {
19215   if (TREE_CODE (decl) != TEMPLATE_DECL)
19216     {
19217       if (tree tinfo = get_template_info (decl))
19218         decl = TI_TEMPLATE (tinfo);
19219       /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a
19220          template friend, or a FIELD_DECL for a capture pack.  */
19221       if (TREE_CODE (decl) != TEMPLATE_DECL)
19222         return NULL_TREE;
19223     }
19224
19225   /* Look for more and more general templates.  */
19226   while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
19227     {
19228       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
19229          (See cp-tree.h for details.)  */
19230       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
19231         break;
19232
19233       if (CLASS_TYPE_P (TREE_TYPE (decl))
19234           && !TYPE_DECL_ALIAS_P (TYPE_NAME (TREE_TYPE (decl)))
19235           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
19236         break;
19237
19238       /* Stop if we run into an explicitly specialized class template.  */
19239       if (!DECL_NAMESPACE_SCOPE_P (decl)
19240           && DECL_CONTEXT (decl)
19241           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
19242         break;
19243
19244       decl = DECL_TI_TEMPLATE (decl);
19245     }
19246
19247   return decl;
19248 }
19249
19250 /* Return the most specialized of the template partial specializations
19251    which can produce TARGET, a specialization of some class or variable
19252    template.  The value returned is actually a TREE_LIST; the TREE_VALUE is
19253    a TEMPLATE_DECL node corresponding to the partial specialization, while
19254    the TREE_PURPOSE is the set of template arguments that must be
19255    substituted into the template pattern in order to generate TARGET.
19256
19257    If the choice of partial specialization is ambiguous, a diagnostic
19258    is issued, and the error_mark_node is returned.  If there are no
19259    partial specializations matching TARGET, then NULL_TREE is
19260    returned, indicating that the primary template should be used.  */
19261
19262 static tree
19263 most_specialized_partial_spec (tree target, tsubst_flags_t complain)
19264 {
19265   tree list = NULL_TREE;
19266   tree t;
19267   tree champ;
19268   int fate;
19269   bool ambiguous_p;
19270   tree outer_args = NULL_TREE;
19271   tree tmpl, args;
19272
19273   if (TYPE_P (target))
19274     {
19275       tree tinfo = CLASSTYPE_TEMPLATE_INFO (target);
19276       tmpl = TI_TEMPLATE (tinfo);
19277       args = TI_ARGS (tinfo);
19278     }
19279   else if (TREE_CODE (target) == TEMPLATE_ID_EXPR)
19280     {
19281       tmpl = TREE_OPERAND (target, 0);
19282       args = TREE_OPERAND (target, 1);
19283     }
19284   else if (VAR_P (target))
19285     {
19286       tree tinfo = DECL_TEMPLATE_INFO (target);
19287       tmpl = TI_TEMPLATE (tinfo);
19288       args = TI_ARGS (tinfo);
19289     }
19290   else
19291     gcc_unreachable ();
19292
19293   tree main_tmpl = most_general_template (tmpl);
19294
19295   /* For determining which partial specialization to use, only the
19296      innermost args are interesting.  */
19297   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
19298     {
19299       outer_args = strip_innermost_template_args (args, 1);
19300       args = INNERMOST_TEMPLATE_ARGS (args);
19301     }
19302
19303   for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
19304     {
19305       tree partial_spec_args;
19306       tree spec_args;
19307       tree spec_tmpl = TREE_VALUE (t);
19308
19309       partial_spec_args = TREE_PURPOSE (t);
19310
19311       ++processing_template_decl;
19312
19313       if (outer_args)
19314         {
19315           /* Discard the outer levels of args, and then substitute in the
19316              template args from the enclosing class.  */
19317           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
19318           partial_spec_args = tsubst_template_args
19319             (partial_spec_args, outer_args, tf_none, NULL_TREE);
19320
19321           /* And the same for the partial specialization TEMPLATE_DECL.  */
19322           spec_tmpl = tsubst (spec_tmpl, outer_args, tf_none, NULL_TREE);
19323         }
19324
19325       partial_spec_args =
19326           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
19327                                  partial_spec_args,
19328                                  tmpl, tf_none,
19329                                  /*require_all_args=*/true,
19330                                  /*use_default_args=*/true);
19331
19332       --processing_template_decl;
19333
19334       if (partial_spec_args == error_mark_node)
19335         return error_mark_node;
19336       if (spec_tmpl == error_mark_node)
19337         return error_mark_node;
19338
19339       tree parms = DECL_INNERMOST_TEMPLATE_PARMS (spec_tmpl);
19340       spec_args = get_partial_spec_bindings (tmpl, parms,
19341                                       partial_spec_args,
19342                                       args);
19343       if (spec_args)
19344         {
19345           if (outer_args)
19346             spec_args = add_to_template_args (outer_args, spec_args);
19347           list = tree_cons (spec_args, TREE_VALUE (t), list);
19348           TREE_TYPE (list) = TREE_TYPE (t);
19349         }
19350     }
19351
19352   if (! list)
19353     return NULL_TREE;
19354
19355   ambiguous_p = false;
19356   t = list;
19357   champ = t;
19358   t = TREE_CHAIN (t);
19359   for (; t; t = TREE_CHAIN (t))
19360     {
19361       fate = more_specialized_partial_spec (tmpl, champ, t);
19362       if (fate == 1)
19363         ;
19364       else
19365         {
19366           if (fate == 0)
19367             {
19368               t = TREE_CHAIN (t);
19369               if (! t)
19370                 {
19371                   ambiguous_p = true;
19372                   break;
19373                 }
19374             }
19375           champ = t;
19376         }
19377     }
19378
19379   if (!ambiguous_p)
19380     for (t = list; t && t != champ; t = TREE_CHAIN (t))
19381       {
19382         fate = more_specialized_partial_spec (tmpl, champ, t);
19383         if (fate != 1)
19384           {
19385             ambiguous_p = true;
19386             break;
19387           }
19388       }
19389
19390   if (ambiguous_p)
19391     {
19392       const char *str;
19393       char *spaces = NULL;
19394       if (!(complain & tf_error))
19395         return error_mark_node;
19396       if (TYPE_P (target))
19397         error ("ambiguous template instantiation for %q#T", target);
19398       else
19399         error ("ambiguous template instantiation for %q#D", target);
19400       str = ngettext ("candidate is:", "candidates are:", list_length (list));
19401       for (t = list; t; t = TREE_CHAIN (t))
19402         {
19403           tree subst = build_tree_list (TREE_VALUE (t), TREE_PURPOSE (t));
19404           inform (DECL_SOURCE_LOCATION (TREE_VALUE (t)),
19405                   "%s %#S", spaces ? spaces : str, subst);
19406           spaces = spaces ? spaces : get_spaces (str);
19407         }
19408       free (spaces);
19409       return error_mark_node;
19410     }
19411
19412   return champ;
19413 }
19414
19415 /* Explicitly instantiate DECL.  */
19416
19417 void
19418 do_decl_instantiation (tree decl, tree storage)
19419 {
19420   tree result = NULL_TREE;
19421   int extern_p = 0;
19422
19423   if (!decl || decl == error_mark_node)
19424     /* An error occurred, for which grokdeclarator has already issued
19425        an appropriate message.  */
19426     return;
19427   else if (! DECL_LANG_SPECIFIC (decl))
19428     {
19429       error ("explicit instantiation of non-template %q#D", decl);
19430       return;
19431     }
19432
19433   bool var_templ = (DECL_TEMPLATE_INFO (decl)
19434                     && variable_template_p (DECL_TI_TEMPLATE (decl)));
19435
19436   if (VAR_P (decl) && !var_templ)
19437     {
19438       /* There is an asymmetry here in the way VAR_DECLs and
19439          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
19440          the latter, the DECL we get back will be marked as a
19441          template instantiation, and the appropriate
19442          DECL_TEMPLATE_INFO will be set up.  This does not happen for
19443          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
19444          should handle VAR_DECLs as it currently handles
19445          FUNCTION_DECLs.  */
19446       if (!DECL_CLASS_SCOPE_P (decl))
19447         {
19448           error ("%qD is not a static data member of a class template", decl);
19449           return;
19450         }
19451       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
19452       if (!result || !VAR_P (result))
19453         {
19454           error ("no matching template for %qD found", decl);
19455           return;
19456         }
19457       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
19458         {
19459           error ("type %qT for explicit instantiation %qD does not match "
19460                  "declared type %qT", TREE_TYPE (result), decl,
19461                  TREE_TYPE (decl));
19462           return;
19463         }
19464     }
19465   else if (TREE_CODE (decl) != FUNCTION_DECL && !var_templ)
19466     {
19467       error ("explicit instantiation of %q#D", decl);
19468       return;
19469     }
19470   else
19471     result = decl;
19472
19473   /* Check for various error cases.  Note that if the explicit
19474      instantiation is valid the RESULT will currently be marked as an
19475      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
19476      until we get here.  */
19477
19478   if (DECL_TEMPLATE_SPECIALIZATION (result))
19479     {
19480       /* DR 259 [temp.spec].
19481
19482          Both an explicit instantiation and a declaration of an explicit
19483          specialization shall not appear in a program unless the explicit
19484          instantiation follows a declaration of the explicit specialization.
19485
19486          For a given set of template parameters, if an explicit
19487          instantiation of a template appears after a declaration of an
19488          explicit specialization for that template, the explicit
19489          instantiation has no effect.  */
19490       return;
19491     }
19492   else if (DECL_EXPLICIT_INSTANTIATION (result))
19493     {
19494       /* [temp.spec]
19495
19496          No program shall explicitly instantiate any template more
19497          than once.
19498
19499          We check DECL_NOT_REALLY_EXTERN so as not to complain when
19500          the first instantiation was `extern' and the second is not,
19501          and EXTERN_P for the opposite case.  */
19502       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
19503         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
19504       /* If an "extern" explicit instantiation follows an ordinary
19505          explicit instantiation, the template is instantiated.  */
19506       if (extern_p)
19507         return;
19508     }
19509   else if (!DECL_IMPLICIT_INSTANTIATION (result))
19510     {
19511       error ("no matching template for %qD found", result);
19512       return;
19513     }
19514   else if (!DECL_TEMPLATE_INFO (result))
19515     {
19516       permerror (input_location, "explicit instantiation of non-template %q#D", result);
19517       return;
19518     }
19519
19520   if (storage == NULL_TREE)
19521     ;
19522   else if (storage == ridpointers[(int) RID_EXTERN])
19523     {
19524       if (!in_system_header_at (input_location) && (cxx_dialect == cxx98))
19525         pedwarn (input_location, OPT_Wpedantic, 
19526                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
19527                  "instantiations");
19528       extern_p = 1;
19529     }
19530   else
19531     error ("storage class %qD applied to template instantiation", storage);
19532
19533   check_explicit_instantiation_namespace (result);
19534   mark_decl_instantiated (result, extern_p);
19535   if (! extern_p)
19536     instantiate_decl (result, /*defer_ok=*/1,
19537                       /*expl_inst_class_mem_p=*/false);
19538 }
19539
19540 static void
19541 mark_class_instantiated (tree t, int extern_p)
19542 {
19543   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
19544   SET_CLASSTYPE_INTERFACE_KNOWN (t);
19545   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
19546   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
19547   if (! extern_p)
19548     {
19549       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
19550       rest_of_type_compilation (t, 1);
19551     }
19552 }
19553
19554 /* Called from do_type_instantiation through binding_table_foreach to
19555    do recursive instantiation for the type bound in ENTRY.  */
19556 static void
19557 bt_instantiate_type_proc (binding_entry entry, void *data)
19558 {
19559   tree storage = *(tree *) data;
19560
19561   if (MAYBE_CLASS_TYPE_P (entry->type)
19562       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
19563     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
19564 }
19565
19566 /* Called from do_type_instantiation to instantiate a member
19567    (a member function or a static member variable) of an
19568    explicitly instantiated class template.  */
19569 static void
19570 instantiate_class_member (tree decl, int extern_p)
19571 {
19572   mark_decl_instantiated (decl, extern_p);
19573   if (! extern_p)
19574     instantiate_decl (decl, /*defer_ok=*/1,
19575                       /*expl_inst_class_mem_p=*/true);
19576 }
19577
19578 /* Perform an explicit instantiation of template class T.  STORAGE, if
19579    non-null, is the RID for extern, inline or static.  COMPLAIN is
19580    nonzero if this is called from the parser, zero if called recursively,
19581    since the standard is unclear (as detailed below).  */
19582
19583 void
19584 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
19585 {
19586   int extern_p = 0;
19587   int nomem_p = 0;
19588   int static_p = 0;
19589   int previous_instantiation_extern_p = 0;
19590
19591   if (TREE_CODE (t) == TYPE_DECL)
19592     t = TREE_TYPE (t);
19593
19594   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
19595     {
19596       tree tmpl =
19597         (TYPE_TEMPLATE_INFO (t)) ? TYPE_TI_TEMPLATE (t) : NULL;
19598       if (tmpl)
19599         error ("explicit instantiation of non-class template %qD", tmpl);
19600       else
19601         error ("explicit instantiation of non-template type %qT", t);
19602       return;
19603     }
19604
19605   complete_type (t);
19606
19607   if (!COMPLETE_TYPE_P (t))
19608     {
19609       if (complain & tf_error)
19610         error ("explicit instantiation of %q#T before definition of template",
19611                t);
19612       return;
19613     }
19614
19615   if (storage != NULL_TREE)
19616     {
19617       if (!in_system_header_at (input_location))
19618         {
19619           if (storage == ridpointers[(int) RID_EXTERN])
19620             {
19621               if (cxx_dialect == cxx98)
19622                 pedwarn (input_location, OPT_Wpedantic, 
19623                          "ISO C++ 1998 forbids the use of %<extern%> on "
19624                          "explicit instantiations");
19625             }
19626           else
19627             pedwarn (input_location, OPT_Wpedantic, 
19628                      "ISO C++ forbids the use of %qE"
19629                      " on explicit instantiations", storage);
19630         }
19631
19632       if (storage == ridpointers[(int) RID_INLINE])
19633         nomem_p = 1;
19634       else if (storage == ridpointers[(int) RID_EXTERN])
19635         extern_p = 1;
19636       else if (storage == ridpointers[(int) RID_STATIC])
19637         static_p = 1;
19638       else
19639         {
19640           error ("storage class %qD applied to template instantiation",
19641                  storage);
19642           extern_p = 0;
19643         }
19644     }
19645
19646   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
19647     {
19648       /* DR 259 [temp.spec].
19649
19650          Both an explicit instantiation and a declaration of an explicit
19651          specialization shall not appear in a program unless the explicit
19652          instantiation follows a declaration of the explicit specialization.
19653
19654          For a given set of template parameters, if an explicit
19655          instantiation of a template appears after a declaration of an
19656          explicit specialization for that template, the explicit
19657          instantiation has no effect.  */
19658       return;
19659     }
19660   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
19661     {
19662       /* [temp.spec]
19663
19664          No program shall explicitly instantiate any template more
19665          than once.
19666
19667          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
19668          instantiation was `extern'.  If EXTERN_P then the second is.
19669          These cases are OK.  */
19670       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
19671
19672       if (!previous_instantiation_extern_p && !extern_p
19673           && (complain & tf_error))
19674         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
19675
19676       /* If we've already instantiated the template, just return now.  */
19677       if (!CLASSTYPE_INTERFACE_ONLY (t))
19678         return;
19679     }
19680
19681   check_explicit_instantiation_namespace (TYPE_NAME (t));
19682   mark_class_instantiated (t, extern_p);
19683
19684   if (nomem_p)
19685     return;
19686
19687   {
19688     tree tmp;
19689
19690     /* In contrast to implicit instantiation, where only the
19691        declarations, and not the definitions, of members are
19692        instantiated, we have here:
19693
19694          [temp.explicit]
19695
19696          The explicit instantiation of a class template specialization
19697          implies the instantiation of all of its members not
19698          previously explicitly specialized in the translation unit
19699          containing the explicit instantiation.
19700
19701        Of course, we can't instantiate member template classes, since
19702        we don't have any arguments for them.  Note that the standard
19703        is unclear on whether the instantiation of the members are
19704        *explicit* instantiations or not.  However, the most natural
19705        interpretation is that it should be an explicit instantiation.  */
19706
19707     if (! static_p)
19708       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
19709         if (TREE_CODE (tmp) == FUNCTION_DECL
19710             && DECL_TEMPLATE_INSTANTIATION (tmp))
19711           instantiate_class_member (tmp, extern_p);
19712
19713     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
19714       if (VAR_P (tmp) && DECL_TEMPLATE_INSTANTIATION (tmp))
19715         instantiate_class_member (tmp, extern_p);
19716
19717     if (CLASSTYPE_NESTED_UTDS (t))
19718       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
19719                              bt_instantiate_type_proc, &storage);
19720   }
19721 }
19722
19723 /* Given a function DECL, which is a specialization of TMPL, modify
19724    DECL to be a re-instantiation of TMPL with the same template
19725    arguments.  TMPL should be the template into which tsubst'ing
19726    should occur for DECL, not the most general template.
19727
19728    One reason for doing this is a scenario like this:
19729
19730      template <class T>
19731      void f(const T&, int i);
19732
19733      void g() { f(3, 7); }
19734
19735      template <class T>
19736      void f(const T& t, const int i) { }
19737
19738    Note that when the template is first instantiated, with
19739    instantiate_template, the resulting DECL will have no name for the
19740    first parameter, and the wrong type for the second.  So, when we go
19741    to instantiate the DECL, we regenerate it.  */
19742
19743 static void
19744 regenerate_decl_from_template (tree decl, tree tmpl)
19745 {
19746   /* The arguments used to instantiate DECL, from the most general
19747      template.  */
19748   tree args;
19749   tree code_pattern;
19750
19751   args = DECL_TI_ARGS (decl);
19752   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
19753
19754   /* Make sure that we can see identifiers, and compute access
19755      correctly.  */
19756   push_access_scope (decl);
19757
19758   if (TREE_CODE (decl) == FUNCTION_DECL)
19759     {
19760       tree decl_parm;
19761       tree pattern_parm;
19762       tree specs;
19763       int args_depth;
19764       int parms_depth;
19765
19766       args_depth = TMPL_ARGS_DEPTH (args);
19767       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
19768       if (args_depth > parms_depth)
19769         args = get_innermost_template_args (args, parms_depth);
19770
19771       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
19772                                               args, tf_error, NULL_TREE,
19773                                               /*defer_ok*/false);
19774       if (specs && specs != error_mark_node)
19775         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
19776                                                     specs);
19777
19778       /* Merge parameter declarations.  */
19779       decl_parm = skip_artificial_parms_for (decl,
19780                                              DECL_ARGUMENTS (decl));
19781       pattern_parm
19782         = skip_artificial_parms_for (code_pattern,
19783                                      DECL_ARGUMENTS (code_pattern));
19784       while (decl_parm && !DECL_PACK_P (pattern_parm))
19785         {
19786           tree parm_type;
19787           tree attributes;
19788           
19789           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
19790             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
19791           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
19792                               NULL_TREE);
19793           parm_type = type_decays_to (parm_type);
19794           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
19795             TREE_TYPE (decl_parm) = parm_type;
19796           attributes = DECL_ATTRIBUTES (pattern_parm);
19797           if (DECL_ATTRIBUTES (decl_parm) != attributes)
19798             {
19799               DECL_ATTRIBUTES (decl_parm) = attributes;
19800               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
19801             }
19802           decl_parm = DECL_CHAIN (decl_parm);
19803           pattern_parm = DECL_CHAIN (pattern_parm);
19804         }
19805       /* Merge any parameters that match with the function parameter
19806          pack.  */
19807       if (pattern_parm && DECL_PACK_P (pattern_parm))
19808         {
19809           int i, len;
19810           tree expanded_types;
19811           /* Expand the TYPE_PACK_EXPANSION that provides the types for
19812              the parameters in this function parameter pack.  */
19813           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
19814                                                  args, tf_error, NULL_TREE);
19815           len = TREE_VEC_LENGTH (expanded_types);
19816           for (i = 0; i < len; i++)
19817             {
19818               tree parm_type;
19819               tree attributes;
19820           
19821               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
19822                 /* Rename the parameter to include the index.  */
19823                 DECL_NAME (decl_parm) = 
19824                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
19825               parm_type = TREE_VEC_ELT (expanded_types, i);
19826               parm_type = type_decays_to (parm_type);
19827               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
19828                 TREE_TYPE (decl_parm) = parm_type;
19829               attributes = DECL_ATTRIBUTES (pattern_parm);
19830               if (DECL_ATTRIBUTES (decl_parm) != attributes)
19831                 {
19832                   DECL_ATTRIBUTES (decl_parm) = attributes;
19833                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
19834                 }
19835               decl_parm = DECL_CHAIN (decl_parm);
19836             }
19837         }
19838       /* Merge additional specifiers from the CODE_PATTERN.  */
19839       if (DECL_DECLARED_INLINE_P (code_pattern)
19840           && !DECL_DECLARED_INLINE_P (decl))
19841         DECL_DECLARED_INLINE_P (decl) = 1;
19842     }
19843   else if (VAR_P (decl))
19844     {
19845       DECL_INITIAL (decl) =
19846         tsubst_expr (DECL_INITIAL (code_pattern), args,
19847                      tf_error, DECL_TI_TEMPLATE (decl),
19848                      /*integral_constant_expression_p=*/false);
19849       if (VAR_HAD_UNKNOWN_BOUND (decl))
19850         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
19851                                    tf_error, DECL_TI_TEMPLATE (decl));
19852     }
19853   else
19854     gcc_unreachable ();
19855
19856   pop_access_scope (decl);
19857 }
19858
19859 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
19860    substituted to get DECL.  */
19861
19862 tree
19863 template_for_substitution (tree decl)
19864 {
19865   tree tmpl = DECL_TI_TEMPLATE (decl);
19866
19867   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
19868      for the instantiation.  This is not always the most general
19869      template.  Consider, for example:
19870
19871         template <class T>
19872         struct S { template <class U> void f();
19873                    template <> void f<int>(); };
19874
19875      and an instantiation of S<double>::f<int>.  We want TD to be the
19876      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
19877   while (/* An instantiation cannot have a definition, so we need a
19878             more general template.  */
19879          DECL_TEMPLATE_INSTANTIATION (tmpl)
19880            /* We must also deal with friend templates.  Given:
19881
19882                 template <class T> struct S {
19883                   template <class U> friend void f() {};
19884                 };
19885
19886               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
19887               so far as the language is concerned, but that's still
19888               where we get the pattern for the instantiation from.  On
19889               other hand, if the definition comes outside the class, say:
19890
19891                 template <class T> struct S {
19892                   template <class U> friend void f();
19893                 };
19894                 template <class U> friend void f() {}
19895
19896               we don't need to look any further.  That's what the check for
19897               DECL_INITIAL is for.  */
19898           || (TREE_CODE (decl) == FUNCTION_DECL
19899               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
19900               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
19901     {
19902       /* The present template, TD, should not be a definition.  If it
19903          were a definition, we should be using it!  Note that we
19904          cannot restructure the loop to just keep going until we find
19905          a template with a definition, since that might go too far if
19906          a specialization was declared, but not defined.  */
19907
19908       /* Fetch the more general template.  */
19909       tmpl = DECL_TI_TEMPLATE (tmpl);
19910     }
19911
19912   return tmpl;
19913 }
19914
19915 /* Returns true if we need to instantiate this template instance even if we
19916    know we aren't going to emit it..  */
19917
19918 bool
19919 always_instantiate_p (tree decl)
19920 {
19921   /* We always instantiate inline functions so that we can inline them.  An
19922      explicit instantiation declaration prohibits implicit instantiation of
19923      non-inline functions.  With high levels of optimization, we would
19924      normally inline non-inline functions -- but we're not allowed to do
19925      that for "extern template" functions.  Therefore, we check
19926      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
19927   return ((TREE_CODE (decl) == FUNCTION_DECL
19928            && (DECL_DECLARED_INLINE_P (decl)
19929                || type_uses_auto (TREE_TYPE (TREE_TYPE (decl)))))
19930           /* And we need to instantiate static data members so that
19931              their initializers are available in integral constant
19932              expressions.  */
19933           || (VAR_P (decl)
19934               && decl_maybe_constant_var_p (decl)));
19935 }
19936
19937 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
19938    instantiate it now, modifying TREE_TYPE (fn).  */
19939
19940 void
19941 maybe_instantiate_noexcept (tree fn)
19942 {
19943   tree fntype, spec, noex, clone;
19944
19945   /* Don't instantiate a noexcept-specification from template context.  */
19946   if (processing_template_decl)
19947     return;
19948
19949   if (DECL_CLONED_FUNCTION_P (fn))
19950     fn = DECL_CLONED_FUNCTION (fn);
19951   fntype = TREE_TYPE (fn);
19952   spec = TYPE_RAISES_EXCEPTIONS (fntype);
19953
19954   if (!spec || !TREE_PURPOSE (spec))
19955     return;
19956
19957   noex = TREE_PURPOSE (spec);
19958
19959   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
19960     {
19961       if (DEFERRED_NOEXCEPT_PATTERN (noex) == NULL_TREE)
19962         spec = get_defaulted_eh_spec (fn);
19963       else if (push_tinst_level (fn))
19964         {
19965           push_access_scope (fn);
19966           push_deferring_access_checks (dk_no_deferred);
19967           input_location = DECL_SOURCE_LOCATION (fn);
19968           noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
19969                                         DEFERRED_NOEXCEPT_ARGS (noex),
19970                                         tf_warning_or_error, fn,
19971                                         /*function_p=*/false,
19972                                         /*integral_constant_expression_p=*/true);
19973           pop_deferring_access_checks ();
19974           pop_access_scope (fn);
19975           pop_tinst_level ();
19976           spec = build_noexcept_spec (noex, tf_warning_or_error);
19977           if (spec == error_mark_node)
19978             spec = noexcept_false_spec;
19979         }
19980       else
19981         spec = noexcept_false_spec;
19982
19983       TREE_TYPE (fn) = build_exception_variant (fntype, spec);
19984     }
19985
19986   FOR_EACH_CLONE (clone, fn)
19987     {
19988       if (TREE_TYPE (clone) == fntype)
19989         TREE_TYPE (clone) = TREE_TYPE (fn);
19990       else
19991         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
19992     }
19993 }
19994
19995 /* Produce the definition of D, a _DECL generated from a template.  If
19996    DEFER_OK is nonzero, then we don't have to actually do the
19997    instantiation now; we just have to do it sometime.  Normally it is
19998    an error if this is an explicit instantiation but D is undefined.
19999    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
20000    explicitly instantiated class template.  */
20001
20002 tree
20003 instantiate_decl (tree d, int defer_ok,
20004                   bool expl_inst_class_mem_p)
20005 {
20006   tree tmpl = DECL_TI_TEMPLATE (d);
20007   tree gen_args;
20008   tree args;
20009   tree td;
20010   tree code_pattern;
20011   tree spec;
20012   tree gen_tmpl;
20013   bool pattern_defined;
20014   location_t saved_loc = input_location;
20015   int saved_unevaluated_operand = cp_unevaluated_operand;
20016   int saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
20017   bool external_p;
20018   bool deleted_p;
20019   tree fn_context;
20020   bool nested;
20021
20022   /* This function should only be used to instantiate templates for
20023      functions and static member variables.  */
20024   gcc_assert (VAR_OR_FUNCTION_DECL_P (d));
20025
20026   /* Variables are never deferred; if instantiation is required, they
20027      are instantiated right away.  That allows for better code in the
20028      case that an expression refers to the value of the variable --
20029      if the variable has a constant value the referring expression can
20030      take advantage of that fact.  */
20031   if (VAR_P (d)
20032       || DECL_DECLARED_CONSTEXPR_P (d))
20033     defer_ok = 0;
20034
20035   /* Don't instantiate cloned functions.  Instead, instantiate the
20036      functions they cloned.  */
20037   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
20038     d = DECL_CLONED_FUNCTION (d);
20039
20040   if (DECL_TEMPLATE_INSTANTIATED (d)
20041       || (TREE_CODE (d) == FUNCTION_DECL
20042           && DECL_DEFAULTED_FN (d) && DECL_INITIAL (d))
20043       || DECL_TEMPLATE_SPECIALIZATION (d))
20044     /* D has already been instantiated or explicitly specialized, so
20045        there's nothing for us to do here.
20046
20047        It might seem reasonable to check whether or not D is an explicit
20048        instantiation, and, if so, stop here.  But when an explicit
20049        instantiation is deferred until the end of the compilation,
20050        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
20051        the instantiation.  */
20052     return d;
20053
20054   /* Check to see whether we know that this template will be
20055      instantiated in some other file, as with "extern template"
20056      extension.  */
20057   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
20058
20059   /* In general, we do not instantiate such templates.  */
20060   if (external_p && !always_instantiate_p (d))
20061     return d;
20062
20063   gen_tmpl = most_general_template (tmpl);
20064   gen_args = DECL_TI_ARGS (d);
20065
20066   if (tmpl != gen_tmpl)
20067     /* We should already have the extra args.  */
20068     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
20069                 == TMPL_ARGS_DEPTH (gen_args));
20070   /* And what's in the hash table should match D.  */
20071   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
20072               || spec == NULL_TREE);
20073
20074   /* This needs to happen before any tsubsting.  */
20075   if (! push_tinst_level (d))
20076     return d;
20077
20078   timevar_push (TV_TEMPLATE_INST);
20079
20080   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
20081      for the instantiation.  */
20082   td = template_for_substitution (d);
20083   code_pattern = DECL_TEMPLATE_RESULT (td);
20084
20085   /* We should never be trying to instantiate a member of a class
20086      template or partial specialization.  */
20087   gcc_assert (d != code_pattern);
20088
20089   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
20090       || DECL_TEMPLATE_SPECIALIZATION (td))
20091     /* In the case of a friend template whose definition is provided
20092        outside the class, we may have too many arguments.  Drop the
20093        ones we don't need.  The same is true for specializations.  */
20094     args = get_innermost_template_args
20095       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
20096   else
20097     args = gen_args;
20098
20099   if (TREE_CODE (d) == FUNCTION_DECL)
20100     {
20101       deleted_p = DECL_DELETED_FN (code_pattern);
20102       pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
20103                          || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern)
20104                          || deleted_p);
20105     }
20106   else
20107     {
20108       deleted_p = false;
20109       pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
20110     }
20111
20112   /* We may be in the middle of deferred access check.  Disable it now.  */
20113   push_deferring_access_checks (dk_no_deferred);
20114
20115   /* Unless an explicit instantiation directive has already determined
20116      the linkage of D, remember that a definition is available for
20117      this entity.  */
20118   if (pattern_defined
20119       && !DECL_INTERFACE_KNOWN (d)
20120       && !DECL_NOT_REALLY_EXTERN (d))
20121     mark_definable (d);
20122
20123   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
20124   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
20125   input_location = DECL_SOURCE_LOCATION (d);
20126
20127   /* If D is a member of an explicitly instantiated class template,
20128      and no definition is available, treat it like an implicit
20129      instantiation.  */
20130   if (!pattern_defined && expl_inst_class_mem_p
20131       && DECL_EXPLICIT_INSTANTIATION (d))
20132     {
20133       /* Leave linkage flags alone on instantiations with anonymous
20134          visibility.  */
20135       if (TREE_PUBLIC (d))
20136         {
20137           DECL_NOT_REALLY_EXTERN (d) = 0;
20138           DECL_INTERFACE_KNOWN (d) = 0;
20139         }
20140       SET_DECL_IMPLICIT_INSTANTIATION (d);
20141     }
20142
20143   /* Defer all other templates, unless we have been explicitly
20144      forbidden from doing so.  */
20145   if (/* If there is no definition, we cannot instantiate the
20146          template.  */
20147       ! pattern_defined
20148       /* If it's OK to postpone instantiation, do so.  */
20149       || defer_ok
20150       /* If this is a static data member that will be defined
20151          elsewhere, we don't want to instantiate the entire data
20152          member, but we do want to instantiate the initializer so that
20153          we can substitute that elsewhere.  */
20154       || (external_p && VAR_P (d))
20155       /* Handle here a deleted function too, avoid generating
20156          its body (c++/61080).  */
20157       || deleted_p)
20158     {
20159       /* The definition of the static data member is now required so
20160          we must substitute the initializer.  */
20161       if (VAR_P (d)
20162           && !DECL_INITIAL (d)
20163           && DECL_INITIAL (code_pattern))
20164         {
20165           tree ns;
20166           tree init;
20167           bool const_init = false;
20168           bool enter_context = DECL_CLASS_SCOPE_P (d);
20169
20170           ns = decl_namespace_context (d);
20171           push_nested_namespace (ns);
20172           if (enter_context)
20173             push_nested_class (DECL_CONTEXT (d));
20174           init = tsubst_expr (DECL_INITIAL (code_pattern),
20175                               args,
20176                               tf_warning_or_error, NULL_TREE,
20177                               /*integral_constant_expression_p=*/false);
20178           /* If instantiating the initializer involved instantiating this
20179              again, don't call cp_finish_decl twice.  */
20180           if (!DECL_INITIAL (d))
20181             {
20182               /* Make sure the initializer is still constant, in case of
20183                  circular dependency (template/instantiate6.C). */
20184               const_init
20185                 = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
20186               cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
20187                               /*asmspec_tree=*/NULL_TREE,
20188                               LOOKUP_ONLYCONVERTING);
20189             }
20190           if (enter_context)
20191             pop_nested_class ();
20192           pop_nested_namespace (ns);
20193         }
20194
20195       /* We restore the source position here because it's used by
20196          add_pending_template.  */
20197       input_location = saved_loc;
20198
20199       if (at_eof && !pattern_defined
20200           && DECL_EXPLICIT_INSTANTIATION (d)
20201           && DECL_NOT_REALLY_EXTERN (d))
20202         /* [temp.explicit]
20203
20204            The definition of a non-exported function template, a
20205            non-exported member function template, or a non-exported
20206            member function or static data member of a class template
20207            shall be present in every translation unit in which it is
20208            explicitly instantiated.  */
20209         permerror (input_location,  "explicit instantiation of %qD "
20210                    "but no definition available", d);
20211
20212       /* If we're in unevaluated context, we just wanted to get the
20213          constant value; this isn't an odr use, so don't queue
20214          a full instantiation.  */
20215       if (cp_unevaluated_operand != 0)
20216         goto out;
20217       /* ??? Historically, we have instantiated inline functions, even
20218          when marked as "extern template".  */
20219       if (!(external_p && VAR_P (d)))
20220         add_pending_template (d);
20221       goto out;
20222     }
20223   /* Tell the repository that D is available in this translation unit
20224      -- and see if it is supposed to be instantiated here.  */
20225   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
20226     {
20227       /* In a PCH file, despite the fact that the repository hasn't
20228          requested instantiation in the PCH it is still possible that
20229          an instantiation will be required in a file that includes the
20230          PCH.  */
20231       if (pch_file)
20232         add_pending_template (d);
20233       /* Instantiate inline functions so that the inliner can do its
20234          job, even though we'll not be emitting a copy of this
20235          function.  */
20236       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
20237         goto out;
20238     }
20239
20240   fn_context = decl_function_context (d);
20241   nested = (current_function_decl != NULL_TREE);
20242   if (!fn_context)
20243     push_to_top_level ();
20244   else
20245     {
20246       if (nested)
20247         push_function_context ();
20248       cp_unevaluated_operand = 0;
20249       c_inhibit_evaluation_warnings = 0;
20250     }
20251
20252   /* Mark D as instantiated so that recursive calls to
20253      instantiate_decl do not try to instantiate it again.  */
20254   DECL_TEMPLATE_INSTANTIATED (d) = 1;
20255
20256   /* Regenerate the declaration in case the template has been modified
20257      by a subsequent redeclaration.  */
20258   regenerate_decl_from_template (d, td);
20259
20260   /* We already set the file and line above.  Reset them now in case
20261      they changed as a result of calling regenerate_decl_from_template.  */
20262   input_location = DECL_SOURCE_LOCATION (d);
20263
20264   if (VAR_P (d))
20265     {
20266       tree init;
20267       bool const_init = false;
20268
20269       /* Clear out DECL_RTL; whatever was there before may not be right
20270          since we've reset the type of the declaration.  */
20271       SET_DECL_RTL (d, NULL);
20272       DECL_IN_AGGR_P (d) = 0;
20273
20274       /* The initializer is placed in DECL_INITIAL by
20275          regenerate_decl_from_template so we don't need to
20276          push/pop_access_scope again here.  Pull it out so that
20277          cp_finish_decl can process it.  */
20278       init = DECL_INITIAL (d);
20279       DECL_INITIAL (d) = NULL_TREE;
20280       DECL_INITIALIZED_P (d) = 0;
20281
20282       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
20283          initializer.  That function will defer actual emission until
20284          we have a chance to determine linkage.  */
20285       DECL_EXTERNAL (d) = 0;
20286
20287       /* Enter the scope of D so that access-checking works correctly.  */
20288       bool enter_context = DECL_CLASS_SCOPE_P (d);
20289       if (enter_context)
20290         push_nested_class (DECL_CONTEXT (d));
20291
20292       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
20293       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
20294
20295       if (enter_context)
20296         pop_nested_class ();
20297
20298       if (variable_template_p (td))
20299         note_variable_template_instantiation (d);
20300     }
20301   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
20302     synthesize_method (d);
20303   else if (TREE_CODE (d) == FUNCTION_DECL)
20304     {
20305       hash_map<tree, tree> *saved_local_specializations;
20306       tree subst_decl;
20307       tree tmpl_parm;
20308       tree spec_parm;
20309       tree block = NULL_TREE;
20310
20311       /* Save away the current list, in case we are instantiating one
20312          template from within the body of another.  */
20313       saved_local_specializations = local_specializations;
20314
20315       /* Set up the list of local specializations.  */
20316       local_specializations = new hash_map<tree, tree>;
20317
20318       /* Set up context.  */
20319       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
20320           && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
20321         block = push_stmt_list ();
20322       else
20323         start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
20324
20325       /* Some typedefs referenced from within the template code need to be
20326          access checked at template instantiation time, i.e now. These
20327          types were added to the template at parsing time. Let's get those
20328          and perform the access checks then.  */
20329       perform_typedefs_access_check (DECL_TEMPLATE_RESULT (gen_tmpl),
20330                                      gen_args);
20331
20332       /* Create substitution entries for the parameters.  */
20333       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
20334       tmpl_parm = DECL_ARGUMENTS (subst_decl);
20335       spec_parm = DECL_ARGUMENTS (d);
20336       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
20337         {
20338           register_local_specialization (spec_parm, tmpl_parm);
20339           spec_parm = skip_artificial_parms_for (d, spec_parm);
20340           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
20341         }
20342       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
20343         {
20344           if (!DECL_PACK_P (tmpl_parm))
20345             {
20346               register_local_specialization (spec_parm, tmpl_parm);
20347               spec_parm = DECL_CHAIN (spec_parm);
20348             }
20349           else
20350             {
20351               /* Register the (value) argument pack as a specialization of
20352                  TMPL_PARM, then move on.  */
20353               tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
20354               register_local_specialization (argpack, tmpl_parm);
20355             }
20356         }
20357       gcc_assert (!spec_parm);
20358
20359       /* Substitute into the body of the function.  */
20360       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
20361         tsubst_omp_udr (DECL_SAVED_TREE (code_pattern), args,
20362                         tf_warning_or_error, tmpl);
20363       else
20364         {
20365           tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
20366                        tf_warning_or_error, tmpl,
20367                        /*integral_constant_expression_p=*/false);
20368
20369           /* Set the current input_location to the end of the function
20370              so that finish_function knows where we are.  */
20371           input_location
20372             = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
20373
20374           /* Remember if we saw an infinite loop in the template.  */
20375           current_function_infinite_loop
20376             = DECL_STRUCT_FUNCTION (code_pattern)->language->infinite_loop;
20377         }
20378
20379       /* We don't need the local specializations any more.  */
20380       delete local_specializations;
20381       local_specializations = saved_local_specializations;
20382
20383       /* Finish the function.  */
20384       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern)
20385           && TREE_CODE (DECL_CONTEXT (code_pattern)) == FUNCTION_DECL)
20386         DECL_SAVED_TREE (d) = pop_stmt_list (block);
20387       else
20388         {
20389           d = finish_function (0);
20390           expand_or_defer_fn (d);
20391         }
20392
20393       if (DECL_OMP_DECLARE_REDUCTION_P (code_pattern))
20394         cp_check_omp_declare_reduction (d);
20395     }
20396
20397   /* We're not deferring instantiation any more.  */
20398   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
20399
20400   if (!fn_context)
20401     pop_from_top_level ();
20402   else if (nested)
20403     pop_function_context ();
20404
20405 out:
20406   input_location = saved_loc;
20407   cp_unevaluated_operand = saved_unevaluated_operand;
20408   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
20409   pop_deferring_access_checks ();
20410   pop_tinst_level ();
20411
20412   timevar_pop (TV_TEMPLATE_INST);
20413
20414   return d;
20415 }
20416
20417 /* Run through the list of templates that we wish we could
20418    instantiate, and instantiate any we can.  RETRIES is the
20419    number of times we retry pending template instantiation.  */
20420
20421 void
20422 instantiate_pending_templates (int retries)
20423 {
20424   int reconsider;
20425   location_t saved_loc = input_location;
20426
20427   /* Instantiating templates may trigger vtable generation.  This in turn
20428      may require further template instantiations.  We place a limit here
20429      to avoid infinite loop.  */
20430   if (pending_templates && retries >= max_tinst_depth)
20431     {
20432       tree decl = pending_templates->tinst->decl;
20433
20434       fatal_error (input_location,
20435                    "template instantiation depth exceeds maximum of %d"
20436                    " instantiating %q+D, possibly from virtual table generation"
20437                    " (use -ftemplate-depth= to increase the maximum)",
20438                    max_tinst_depth, decl);
20439       if (TREE_CODE (decl) == FUNCTION_DECL)
20440         /* Pretend that we defined it.  */
20441         DECL_INITIAL (decl) = error_mark_node;
20442       return;
20443     }
20444
20445   do
20446     {
20447       struct pending_template **t = &pending_templates;
20448       struct pending_template *last = NULL;
20449       reconsider = 0;
20450       while (*t)
20451         {
20452           tree instantiation = reopen_tinst_level ((*t)->tinst);
20453           bool complete = false;
20454
20455           if (TYPE_P (instantiation))
20456             {
20457               tree fn;
20458
20459               if (!COMPLETE_TYPE_P (instantiation))
20460                 {
20461                   instantiate_class_template (instantiation);
20462                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
20463                     for (fn = TYPE_METHODS (instantiation);
20464                          fn;
20465                          fn = TREE_CHAIN (fn))
20466                       if (! DECL_ARTIFICIAL (fn))
20467                         instantiate_decl (fn,
20468                                           /*defer_ok=*/0,
20469                                           /*expl_inst_class_mem_p=*/false);
20470                   if (COMPLETE_TYPE_P (instantiation))
20471                     reconsider = 1;
20472                 }
20473
20474               complete = COMPLETE_TYPE_P (instantiation);
20475             }
20476           else
20477             {
20478               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
20479                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
20480                 {
20481                   instantiation
20482                     = instantiate_decl (instantiation,
20483                                         /*defer_ok=*/0,
20484                                         /*expl_inst_class_mem_p=*/false);
20485                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
20486                     reconsider = 1;
20487                 }
20488
20489               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
20490                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
20491             }
20492
20493           if (complete)
20494             /* If INSTANTIATION has been instantiated, then we don't
20495                need to consider it again in the future.  */
20496             *t = (*t)->next;
20497           else
20498             {
20499               last = *t;
20500               t = &(*t)->next;
20501             }
20502           tinst_depth = 0;
20503           current_tinst_level = NULL;
20504         }
20505       last_pending_template = last;
20506     }
20507   while (reconsider);
20508
20509   input_location = saved_loc;
20510 }
20511
20512 /* Substitute ARGVEC into T, which is a list of initializers for
20513    either base class or a non-static data member.  The TREE_PURPOSEs
20514    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
20515    instantiate_decl.  */
20516
20517 static tree
20518 tsubst_initializer_list (tree t, tree argvec)
20519 {
20520   tree inits = NULL_TREE;
20521
20522   for (; t; t = TREE_CHAIN (t))
20523     {
20524       tree decl;
20525       tree init;
20526       tree expanded_bases = NULL_TREE;
20527       tree expanded_arguments = NULL_TREE;
20528       int i, len = 1;
20529
20530       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
20531         {
20532           tree expr;
20533           tree arg;
20534
20535           /* Expand the base class expansion type into separate base
20536              classes.  */
20537           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
20538                                                  tf_warning_or_error,
20539                                                  NULL_TREE);
20540           if (expanded_bases == error_mark_node)
20541             continue;
20542           
20543           /* We'll be building separate TREE_LISTs of arguments for
20544              each base.  */
20545           len = TREE_VEC_LENGTH (expanded_bases);
20546           expanded_arguments = make_tree_vec (len);
20547           for (i = 0; i < len; i++)
20548             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
20549
20550           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
20551              expand each argument in the TREE_VALUE of t.  */
20552           expr = make_node (EXPR_PACK_EXPANSION);
20553           PACK_EXPANSION_LOCAL_P (expr) = true;
20554           PACK_EXPANSION_PARAMETER_PACKS (expr) =
20555             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
20556
20557           if (TREE_VALUE (t) == void_type_node)
20558             /* VOID_TYPE_NODE is used to indicate
20559                value-initialization.  */
20560             {
20561               for (i = 0; i < len; i++)
20562                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
20563             }
20564           else
20565             {
20566               /* Substitute parameter packs into each argument in the
20567                  TREE_LIST.  */
20568               in_base_initializer = 1;
20569               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
20570                 {
20571                   tree expanded_exprs;
20572
20573                   /* Expand the argument.  */
20574                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
20575                   expanded_exprs 
20576                     = tsubst_pack_expansion (expr, argvec,
20577                                              tf_warning_or_error,
20578                                              NULL_TREE);
20579                   if (expanded_exprs == error_mark_node)
20580                     continue;
20581
20582                   /* Prepend each of the expanded expressions to the
20583                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
20584                   for (i = 0; i < len; i++)
20585                     {
20586                       TREE_VEC_ELT (expanded_arguments, i) = 
20587                         tree_cons (NULL_TREE, 
20588                                    TREE_VEC_ELT (expanded_exprs, i),
20589                                    TREE_VEC_ELT (expanded_arguments, i));
20590                     }
20591                 }
20592               in_base_initializer = 0;
20593
20594               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
20595                  since we built them backwards.  */
20596               for (i = 0; i < len; i++)
20597                 {
20598                   TREE_VEC_ELT (expanded_arguments, i) = 
20599                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
20600                 }
20601             }
20602         }
20603
20604       for (i = 0; i < len; ++i)
20605         {
20606           if (expanded_bases)
20607             {
20608               decl = TREE_VEC_ELT (expanded_bases, i);
20609               decl = expand_member_init (decl);
20610               init = TREE_VEC_ELT (expanded_arguments, i);
20611             }
20612           else
20613             {
20614               tree tmp;
20615               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
20616                                   tf_warning_or_error, NULL_TREE);
20617
20618               decl = expand_member_init (decl);
20619               if (decl && !DECL_P (decl))
20620                 in_base_initializer = 1;
20621
20622               init = TREE_VALUE (t);
20623               tmp = init;
20624               if (init != void_type_node)
20625                 init = tsubst_expr (init, argvec,
20626                                     tf_warning_or_error, NULL_TREE,
20627                                     /*integral_constant_expression_p=*/false);
20628               if (init == NULL_TREE && tmp != NULL_TREE)
20629                 /* If we had an initializer but it instantiated to nothing,
20630                    value-initialize the object.  This will only occur when
20631                    the initializer was a pack expansion where the parameter
20632                    packs used in that expansion were of length zero.  */
20633                 init = void_type_node;
20634               in_base_initializer = 0;
20635             }
20636
20637           if (decl)
20638             {
20639               init = build_tree_list (decl, init);
20640               TREE_CHAIN (init) = inits;
20641               inits = init;
20642             }
20643         }
20644     }
20645   return inits;
20646 }
20647
20648 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
20649
20650 static void
20651 set_current_access_from_decl (tree decl)
20652 {
20653   if (TREE_PRIVATE (decl))
20654     current_access_specifier = access_private_node;
20655   else if (TREE_PROTECTED (decl))
20656     current_access_specifier = access_protected_node;
20657   else
20658     current_access_specifier = access_public_node;
20659 }
20660
20661 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
20662    is the instantiation (which should have been created with
20663    start_enum) and ARGS are the template arguments to use.  */
20664
20665 static void
20666 tsubst_enum (tree tag, tree newtag, tree args)
20667 {
20668   tree e;
20669
20670   if (SCOPED_ENUM_P (newtag))
20671     begin_scope (sk_scoped_enum, newtag);
20672
20673   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
20674     {
20675       tree value;
20676       tree decl;
20677
20678       decl = TREE_VALUE (e);
20679       /* Note that in a template enum, the TREE_VALUE is the
20680          CONST_DECL, not the corresponding INTEGER_CST.  */
20681       value = tsubst_expr (DECL_INITIAL (decl),
20682                            args, tf_warning_or_error, NULL_TREE,
20683                            /*integral_constant_expression_p=*/true);
20684
20685       /* Give this enumeration constant the correct access.  */
20686       set_current_access_from_decl (decl);
20687
20688       /* Actually build the enumerator itself.  */
20689       build_enumerator
20690         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
20691     }
20692
20693   if (SCOPED_ENUM_P (newtag))
20694     finish_scope ();
20695
20696   finish_enum_value_list (newtag);
20697   finish_enum (newtag);
20698
20699   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
20700     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
20701 }
20702
20703 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
20704    its type -- but without substituting the innermost set of template
20705    arguments.  So, innermost set of template parameters will appear in
20706    the type.  */
20707
20708 tree
20709 get_mostly_instantiated_function_type (tree decl)
20710 {
20711   /* For a function, DECL_TI_TEMPLATE is partially instantiated.  */
20712   return TREE_TYPE (DECL_TI_TEMPLATE (decl));
20713 }
20714
20715 /* Return truthvalue if we're processing a template different from
20716    the last one involved in diagnostics.  */
20717 bool
20718 problematic_instantiation_changed (void)
20719 {
20720   return current_tinst_level != last_error_tinst_level;
20721 }
20722
20723 /* Remember current template involved in diagnostics.  */
20724 void
20725 record_last_problematic_instantiation (void)
20726 {
20727   last_error_tinst_level = current_tinst_level;
20728 }
20729
20730 struct tinst_level *
20731 current_instantiation (void)
20732 {
20733   return current_tinst_level;
20734 }
20735
20736 /* Return TRUE if current_function_decl is being instantiated, false
20737    otherwise.  */
20738
20739 bool
20740 instantiating_current_function_p (void)
20741 {
20742   return (current_instantiation ()
20743           && current_instantiation ()->decl == current_function_decl);
20744 }
20745
20746 /* [temp.param] Check that template non-type parm TYPE is of an allowable
20747    type. Return zero for ok, nonzero for disallowed. Issue error and
20748    warning messages under control of COMPLAIN.  */
20749
20750 static int
20751 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
20752 {
20753   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
20754     return 0;
20755   else if (POINTER_TYPE_P (type))
20756     return 0;
20757   else if (TYPE_PTRMEM_P (type))
20758     return 0;
20759   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
20760     return 0;
20761   else if (TREE_CODE (type) == TYPENAME_TYPE)
20762     return 0;
20763   else if (TREE_CODE (type) == DECLTYPE_TYPE)
20764     return 0;
20765   else if (TREE_CODE (type) == NULLPTR_TYPE)
20766     return 0;
20767
20768   if (complain & tf_error)
20769     {
20770       if (type == error_mark_node)
20771         inform (input_location, "invalid template non-type parameter");
20772       else
20773         error ("%q#T is not a valid type for a template non-type parameter",
20774                type);
20775     }
20776   return 1;
20777 }
20778
20779 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
20780    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
20781
20782 static bool
20783 dependent_type_p_r (tree type)
20784 {
20785   tree scope;
20786
20787   /* [temp.dep.type]
20788
20789      A type is dependent if it is:
20790
20791      -- a template parameter. Template template parameters are types
20792         for us (since TYPE_P holds true for them) so we handle
20793         them here.  */
20794   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
20795       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
20796     return true;
20797   /* -- a qualified-id with a nested-name-specifier which contains a
20798         class-name that names a dependent type or whose unqualified-id
20799         names a dependent type.  */
20800   if (TREE_CODE (type) == TYPENAME_TYPE)
20801     return true;
20802   /* -- a cv-qualified type where the cv-unqualified type is
20803         dependent.
20804      No code is necessary for this bullet; the code below handles
20805      cv-qualified types, and we don't want to strip aliases with
20806      TYPE_MAIN_VARIANT because of DR 1558.  */
20807   /* -- a compound type constructed from any dependent type.  */
20808   if (TYPE_PTRMEM_P (type))
20809     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
20810             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
20811                                            (type)));
20812   else if (TYPE_PTR_P (type)
20813            || TREE_CODE (type) == REFERENCE_TYPE)
20814     return dependent_type_p (TREE_TYPE (type));
20815   else if (TREE_CODE (type) == FUNCTION_TYPE
20816            || TREE_CODE (type) == METHOD_TYPE)
20817     {
20818       tree arg_type;
20819
20820       if (dependent_type_p (TREE_TYPE (type)))
20821         return true;
20822       for (arg_type = TYPE_ARG_TYPES (type);
20823            arg_type;
20824            arg_type = TREE_CHAIN (arg_type))
20825         if (dependent_type_p (TREE_VALUE (arg_type)))
20826           return true;
20827       return false;
20828     }
20829   /* -- an array type constructed from any dependent type or whose
20830         size is specified by a constant expression that is
20831         value-dependent.
20832
20833         We checked for type- and value-dependence of the bounds in
20834         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
20835   if (TREE_CODE (type) == ARRAY_TYPE)
20836     {
20837       if (TYPE_DOMAIN (type)
20838           && dependent_type_p (TYPE_DOMAIN (type)))
20839         return true;
20840       return dependent_type_p (TREE_TYPE (type));
20841     }
20842
20843   /* -- a template-id in which either the template name is a template
20844      parameter ...  */
20845   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
20846     return true;
20847   /* ... or any of the template arguments is a dependent type or
20848         an expression that is type-dependent or value-dependent.  */
20849   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
20850            && (any_dependent_template_arguments_p
20851                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
20852     return true;
20853   /* For an alias template specialization, check the arguments both to the
20854      class template and the alias template.  */
20855   else if (alias_template_specialization_p (type)
20856            && (any_dependent_template_arguments_p
20857                (INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (type)))))
20858     return true;
20859
20860   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
20861      dependent; if the argument of the `typeof' expression is not
20862      type-dependent, then it should already been have resolved.  */
20863   if (TREE_CODE (type) == TYPEOF_TYPE
20864       || TREE_CODE (type) == DECLTYPE_TYPE
20865       || TREE_CODE (type) == UNDERLYING_TYPE)
20866     return true;
20867
20868   /* A template argument pack is dependent if any of its packed
20869      arguments are.  */
20870   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
20871     {
20872       tree args = ARGUMENT_PACK_ARGS (type);
20873       int i, len = TREE_VEC_LENGTH (args);
20874       for (i = 0; i < len; ++i)
20875         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
20876           return true;
20877     }
20878
20879   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
20880      be template parameters.  */
20881   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
20882     return true;
20883
20884   /* The standard does not specifically mention types that are local
20885      to template functions or local classes, but they should be
20886      considered dependent too.  For example:
20887
20888        template <int I> void f() {
20889          enum E { a = I };
20890          S<sizeof (E)> s;
20891        }
20892
20893      The size of `E' cannot be known until the value of `I' has been
20894      determined.  Therefore, `E' must be considered dependent.  */
20895   scope = TYPE_CONTEXT (type);
20896   if (scope && TYPE_P (scope))
20897     return dependent_type_p (scope);
20898   /* Don't use type_dependent_expression_p here, as it can lead
20899      to infinite recursion trying to determine whether a lambda
20900      nested in a lambda is dependent (c++/47687).  */
20901   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
20902            && DECL_LANG_SPECIFIC (scope)
20903            && DECL_TEMPLATE_INFO (scope)
20904            && (any_dependent_template_arguments_p
20905                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
20906     return true;
20907
20908   /* Other types are non-dependent.  */
20909   return false;
20910 }
20911
20912 /* Returns TRUE if TYPE is dependent, in the sense of
20913    [temp.dep.type].  Note that a NULL type is considered dependent.  */
20914
20915 bool
20916 dependent_type_p (tree type)
20917 {
20918   /* If there are no template parameters in scope, then there can't be
20919      any dependent types.  */
20920   if (!processing_template_decl)
20921     {
20922       /* If we are not processing a template, then nobody should be
20923          providing us with a dependent type.  */
20924       gcc_assert (type);
20925       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
20926       return false;
20927     }
20928
20929   /* If the type is NULL, we have not computed a type for the entity
20930      in question; in that case, the type is dependent.  */
20931   if (!type)
20932     return true;
20933
20934   /* Erroneous types can be considered non-dependent.  */
20935   if (type == error_mark_node)
20936     return false;
20937
20938   /* If we have not already computed the appropriate value for TYPE,
20939      do so now.  */
20940   if (!TYPE_DEPENDENT_P_VALID (type))
20941     {
20942       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
20943       TYPE_DEPENDENT_P_VALID (type) = 1;
20944     }
20945
20946   return TYPE_DEPENDENT_P (type);
20947 }
20948
20949 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
20950    lookup.  In other words, a dependent type that is not the current
20951    instantiation.  */
20952
20953 bool
20954 dependent_scope_p (tree scope)
20955 {
20956   return (scope && TYPE_P (scope) && dependent_type_p (scope)
20957           && !currently_open_class (scope));
20958 }
20959
20960 /* T is a SCOPE_REF; return whether we need to consider it
20961     instantiation-dependent so that we can check access at instantiation
20962     time even though we know which member it resolves to.  */
20963
20964 static bool
20965 instantiation_dependent_scope_ref_p (tree t)
20966 {
20967   if (DECL_P (TREE_OPERAND (t, 1))
20968       && CLASS_TYPE_P (TREE_OPERAND (t, 0))
20969       && accessible_in_template_p (TREE_OPERAND (t, 0),
20970                                    TREE_OPERAND (t, 1)))
20971     return false;
20972   else
20973     return true;
20974 }
20975
20976 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
20977    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
20978    expression.  */
20979
20980 /* Note that this predicate is not appropriate for general expressions;
20981    only constant expressions (that satisfy potential_constant_expression)
20982    can be tested for value dependence.  */
20983
20984 bool
20985 value_dependent_expression_p (tree expression)
20986 {
20987   if (!processing_template_decl)
20988     return false;
20989
20990   /* A name declared with a dependent type.  */
20991   if (DECL_P (expression) && type_dependent_expression_p (expression))
20992     return true;
20993
20994   switch (TREE_CODE (expression))
20995     {
20996     case IDENTIFIER_NODE:
20997       /* A name that has not been looked up -- must be dependent.  */
20998       return true;
20999
21000     case TEMPLATE_PARM_INDEX:
21001       /* A non-type template parm.  */
21002       return true;
21003
21004     case CONST_DECL:
21005       /* A non-type template parm.  */
21006       if (DECL_TEMPLATE_PARM_P (expression))
21007         return true;
21008       return value_dependent_expression_p (DECL_INITIAL (expression));
21009
21010     case VAR_DECL:
21011        /* A constant with literal type and is initialized
21012           with an expression that is value-dependent.
21013
21014           Note that a non-dependent parenthesized initializer will have
21015           already been replaced with its constant value, so if we see
21016           a TREE_LIST it must be dependent.  */
21017       if (DECL_INITIAL (expression)
21018           && decl_constant_var_p (expression)
21019           && (TREE_CODE (DECL_INITIAL (expression)) == TREE_LIST
21020               /* cp_finish_decl doesn't fold reference initializers.  */
21021               || TREE_CODE (TREE_TYPE (expression)) == REFERENCE_TYPE
21022               || value_dependent_expression_p (DECL_INITIAL (expression))))
21023         return true;
21024       return false;
21025
21026     case DYNAMIC_CAST_EXPR:
21027     case STATIC_CAST_EXPR:
21028     case CONST_CAST_EXPR:
21029     case REINTERPRET_CAST_EXPR:
21030     case CAST_EXPR:
21031       /* These expressions are value-dependent if the type to which
21032          the cast occurs is dependent or the expression being casted
21033          is value-dependent.  */
21034       {
21035         tree type = TREE_TYPE (expression);
21036
21037         if (dependent_type_p (type))
21038           return true;
21039
21040         /* A functional cast has a list of operands.  */
21041         expression = TREE_OPERAND (expression, 0);
21042         if (!expression)
21043           {
21044             /* If there are no operands, it must be an expression such
21045                as "int()". This should not happen for aggregate types
21046                because it would form non-constant expressions.  */
21047             gcc_assert (cxx_dialect >= cxx11
21048                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
21049
21050             return false;
21051           }
21052
21053         if (TREE_CODE (expression) == TREE_LIST)
21054           return any_value_dependent_elements_p (expression);
21055
21056         return value_dependent_expression_p (expression);
21057       }
21058
21059     case SIZEOF_EXPR:
21060       if (SIZEOF_EXPR_TYPE_P (expression))
21061         return dependent_type_p (TREE_TYPE (TREE_OPERAND (expression, 0)));
21062       /* FALLTHRU */
21063     case ALIGNOF_EXPR:
21064     case TYPEID_EXPR:
21065       /* A `sizeof' expression is value-dependent if the operand is
21066          type-dependent or is a pack expansion.  */
21067       expression = TREE_OPERAND (expression, 0);
21068       if (PACK_EXPANSION_P (expression))
21069         return true;
21070       else if (TYPE_P (expression))
21071         return dependent_type_p (expression);
21072       return instantiation_dependent_expression_p (expression);
21073
21074     case AT_ENCODE_EXPR:
21075       /* An 'encode' expression is value-dependent if the operand is
21076          type-dependent.  */
21077       expression = TREE_OPERAND (expression, 0);
21078       return dependent_type_p (expression);
21079
21080     case NOEXCEPT_EXPR:
21081       expression = TREE_OPERAND (expression, 0);
21082       return instantiation_dependent_expression_p (expression);
21083
21084     case SCOPE_REF:
21085       /* All instantiation-dependent expressions should also be considered
21086          value-dependent.  */
21087       return instantiation_dependent_scope_ref_p (expression);
21088
21089     case COMPONENT_REF:
21090       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
21091               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
21092
21093     case NONTYPE_ARGUMENT_PACK:
21094       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
21095          is value-dependent.  */
21096       {
21097         tree values = ARGUMENT_PACK_ARGS (expression);
21098         int i, len = TREE_VEC_LENGTH (values);
21099         
21100         for (i = 0; i < len; ++i)
21101           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
21102             return true;
21103         
21104         return false;
21105       }
21106
21107     case TRAIT_EXPR:
21108       {
21109         tree type2 = TRAIT_EXPR_TYPE2 (expression);
21110         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
21111                 || (type2 ? dependent_type_p (type2) : false));
21112       }
21113
21114     case MODOP_EXPR:
21115       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
21116               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
21117
21118     case ARRAY_REF:
21119       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
21120               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
21121
21122     case ADDR_EXPR:
21123       {
21124         tree op = TREE_OPERAND (expression, 0);
21125         return (value_dependent_expression_p (op)
21126                 || has_value_dependent_address (op));
21127       }
21128
21129     case CALL_EXPR:
21130       {
21131         tree fn = get_callee_fndecl (expression);
21132         int i, nargs;
21133         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
21134           return true;
21135         nargs = call_expr_nargs (expression);
21136         for (i = 0; i < nargs; ++i)
21137           {
21138             tree op = CALL_EXPR_ARG (expression, i);
21139             /* In a call to a constexpr member function, look through the
21140                implicit ADDR_EXPR on the object argument so that it doesn't
21141                cause the call to be considered value-dependent.  We also
21142                look through it in potential_constant_expression.  */
21143             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
21144                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
21145                 && TREE_CODE (op) == ADDR_EXPR)
21146               op = TREE_OPERAND (op, 0);
21147             if (value_dependent_expression_p (op))
21148               return true;
21149           }
21150         return false;
21151       }
21152
21153     case TEMPLATE_ID_EXPR:
21154       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
21155          type-dependent.  */
21156       return type_dependent_expression_p (expression);
21157
21158     case CONSTRUCTOR:
21159       {
21160         unsigned ix;
21161         tree val;
21162         if (dependent_type_p (TREE_TYPE (expression)))
21163           return true;
21164         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
21165           if (value_dependent_expression_p (val))
21166             return true;
21167         return false;
21168       }
21169
21170     case STMT_EXPR:
21171       /* Treat a GNU statement expression as dependent to avoid crashing
21172          under instantiate_non_dependent_expr; it can't be constant.  */
21173       return true;
21174
21175     default:
21176       /* A constant expression is value-dependent if any subexpression is
21177          value-dependent.  */
21178       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
21179         {
21180         case tcc_reference:
21181         case tcc_unary:
21182         case tcc_comparison:
21183         case tcc_binary:
21184         case tcc_expression:
21185         case tcc_vl_exp:
21186           {
21187             int i, len = cp_tree_operand_length (expression);
21188
21189             for (i = 0; i < len; i++)
21190               {
21191                 tree t = TREE_OPERAND (expression, i);
21192
21193                 /* In some cases, some of the operands may be missing.l
21194                    (For example, in the case of PREDECREMENT_EXPR, the
21195                    amount to increment by may be missing.)  That doesn't
21196                    make the expression dependent.  */
21197                 if (t && value_dependent_expression_p (t))
21198                   return true;
21199               }
21200           }
21201           break;
21202         default:
21203           break;
21204         }
21205       break;
21206     }
21207
21208   /* The expression is not value-dependent.  */
21209   return false;
21210 }
21211
21212 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
21213    [temp.dep.expr].  Note that an expression with no type is
21214    considered dependent.  Other parts of the compiler arrange for an
21215    expression with type-dependent subexpressions to have no type, so
21216    this function doesn't have to be fully recursive.  */
21217
21218 bool
21219 type_dependent_expression_p (tree expression)
21220 {
21221   if (!processing_template_decl)
21222     return false;
21223
21224   if (expression == NULL_TREE || expression == error_mark_node)
21225     return false;
21226
21227   /* An unresolved name is always dependent.  */
21228   if (identifier_p (expression) || TREE_CODE (expression) == USING_DECL)
21229     return true;
21230
21231   /* Some expression forms are never type-dependent.  */
21232   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
21233       || TREE_CODE (expression) == SIZEOF_EXPR
21234       || TREE_CODE (expression) == ALIGNOF_EXPR
21235       || TREE_CODE (expression) == AT_ENCODE_EXPR
21236       || TREE_CODE (expression) == NOEXCEPT_EXPR
21237       || TREE_CODE (expression) == TRAIT_EXPR
21238       || TREE_CODE (expression) == TYPEID_EXPR
21239       || TREE_CODE (expression) == DELETE_EXPR
21240       || TREE_CODE (expression) == VEC_DELETE_EXPR
21241       || TREE_CODE (expression) == THROW_EXPR)
21242     return false;
21243
21244   /* The types of these expressions depends only on the type to which
21245      the cast occurs.  */
21246   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
21247       || TREE_CODE (expression) == STATIC_CAST_EXPR
21248       || TREE_CODE (expression) == CONST_CAST_EXPR
21249       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
21250       || TREE_CODE (expression) == IMPLICIT_CONV_EXPR
21251       || TREE_CODE (expression) == CAST_EXPR)
21252     return dependent_type_p (TREE_TYPE (expression));
21253
21254   /* The types of these expressions depends only on the type created
21255      by the expression.  */
21256   if (TREE_CODE (expression) == NEW_EXPR
21257       || TREE_CODE (expression) == VEC_NEW_EXPR)
21258     {
21259       /* For NEW_EXPR tree nodes created inside a template, either
21260          the object type itself or a TREE_LIST may appear as the
21261          operand 1.  */
21262       tree type = TREE_OPERAND (expression, 1);
21263       if (TREE_CODE (type) == TREE_LIST)
21264         /* This is an array type.  We need to check array dimensions
21265            as well.  */
21266         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
21267                || value_dependent_expression_p
21268                     (TREE_OPERAND (TREE_VALUE (type), 1));
21269       else
21270         return dependent_type_p (type);
21271     }
21272
21273   if (TREE_CODE (expression) == SCOPE_REF)
21274     {
21275       tree scope = TREE_OPERAND (expression, 0);
21276       tree name = TREE_OPERAND (expression, 1);
21277
21278       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
21279          contains an identifier associated by name lookup with one or more
21280          declarations declared with a dependent type, or...a
21281          nested-name-specifier or qualified-id that names a member of an
21282          unknown specialization.  */
21283       return (type_dependent_expression_p (name)
21284               || dependent_scope_p (scope));
21285     }
21286
21287   if (TREE_CODE (expression) == FUNCTION_DECL
21288       && DECL_LANG_SPECIFIC (expression)
21289       && DECL_TEMPLATE_INFO (expression)
21290       && (any_dependent_template_arguments_p
21291           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
21292     return true;
21293
21294   if (TREE_CODE (expression) == TEMPLATE_DECL
21295       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
21296     return false;
21297
21298   if (TREE_CODE (expression) == STMT_EXPR)
21299     expression = stmt_expr_value_expr (expression);
21300
21301   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
21302     {
21303       tree elt;
21304       unsigned i;
21305
21306       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
21307         {
21308           if (type_dependent_expression_p (elt))
21309             return true;
21310         }
21311       return false;
21312     }
21313
21314   /* A static data member of the current instantiation with incomplete
21315      array type is type-dependent, as the definition and specializations
21316      can have different bounds.  */
21317   if (VAR_P (expression)
21318       && DECL_CLASS_SCOPE_P (expression)
21319       && dependent_type_p (DECL_CONTEXT (expression))
21320       && VAR_HAD_UNKNOWN_BOUND (expression))
21321     return true;
21322
21323   /* An array of unknown bound depending on a variadic parameter, eg:
21324
21325      template<typename... Args>
21326        void foo (Args... args)
21327        {
21328          int arr[] = { args... };
21329        }
21330
21331      template<int... vals>
21332        void bar ()
21333        {
21334          int arr[] = { vals... };
21335        }
21336
21337      If the array has no length and has an initializer, it must be that
21338      we couldn't determine its length in cp_complete_array_type because
21339      it is dependent.  */
21340   if (VAR_P (expression)
21341       && TREE_CODE (TREE_TYPE (expression)) == ARRAY_TYPE
21342       && !TYPE_DOMAIN (TREE_TYPE (expression))
21343       && DECL_INITIAL (expression))
21344    return true;
21345
21346   /* A variable template specialization is type-dependent if it has any
21347      dependent template arguments.  */
21348   if (VAR_P (expression)
21349       && DECL_LANG_SPECIFIC (expression)
21350       && DECL_TEMPLATE_INFO (expression)
21351       && variable_template_p (DECL_TI_TEMPLATE (expression)))
21352     return any_dependent_template_arguments_p (DECL_TI_ARGS (expression));
21353
21354   if (TREE_TYPE (expression) == unknown_type_node)
21355     {
21356       if (TREE_CODE (expression) == ADDR_EXPR)
21357         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
21358       if (TREE_CODE (expression) == COMPONENT_REF
21359           || TREE_CODE (expression) == OFFSET_REF)
21360         {
21361           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
21362             return true;
21363           expression = TREE_OPERAND (expression, 1);
21364           if (identifier_p (expression))
21365             return false;
21366         }
21367       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
21368       if (TREE_CODE (expression) == SCOPE_REF)
21369         return false;
21370
21371       /* Always dependent, on the number of arguments if nothing else.  */
21372       if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
21373         return true;
21374
21375       if (BASELINK_P (expression))
21376         {
21377           if (BASELINK_OPTYPE (expression)
21378               && dependent_type_p (BASELINK_OPTYPE (expression)))
21379             return true;
21380           expression = BASELINK_FUNCTIONS (expression);
21381         }
21382
21383       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
21384         {
21385           if (any_dependent_template_arguments_p
21386               (TREE_OPERAND (expression, 1)))
21387             return true;
21388           expression = TREE_OPERAND (expression, 0);
21389         }
21390       gcc_assert (TREE_CODE (expression) == OVERLOAD
21391                   || TREE_CODE (expression) == FUNCTION_DECL);
21392
21393       while (expression)
21394         {
21395           if (type_dependent_expression_p (OVL_CURRENT (expression)))
21396             return true;
21397           expression = OVL_NEXT (expression);
21398         }
21399       return false;
21400     }
21401
21402   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
21403
21404   return (dependent_type_p (TREE_TYPE (expression)));
21405 }
21406
21407 /* walk_tree callback function for instantiation_dependent_expression_p,
21408    below.  Returns non-zero if a dependent subexpression is found.  */
21409
21410 static tree
21411 instantiation_dependent_r (tree *tp, int *walk_subtrees,
21412                            void * /*data*/)
21413 {
21414   if (TYPE_P (*tp))
21415     {
21416       /* We don't have to worry about decltype currently because decltype
21417          of an instantiation-dependent expr is a dependent type.  This
21418          might change depending on the resolution of DR 1172.  */
21419       *walk_subtrees = false;
21420       return NULL_TREE;
21421     }
21422   enum tree_code code = TREE_CODE (*tp);
21423   switch (code)
21424     {
21425       /* Don't treat an argument list as dependent just because it has no
21426          TREE_TYPE.  */
21427     case TREE_LIST:
21428     case TREE_VEC:
21429       return NULL_TREE;
21430
21431     case VAR_DECL:
21432     case CONST_DECL:
21433       /* A constant with a dependent initializer is dependent.  */
21434       if (value_dependent_expression_p (*tp))
21435         return *tp;
21436       break;
21437
21438     case TEMPLATE_PARM_INDEX:
21439       return *tp;
21440
21441       /* Handle expressions with type operands.  */
21442     case SIZEOF_EXPR:
21443     case ALIGNOF_EXPR:
21444     case TYPEID_EXPR:
21445     case AT_ENCODE_EXPR:
21446       {
21447         tree op = TREE_OPERAND (*tp, 0);
21448         if (code == SIZEOF_EXPR && SIZEOF_EXPR_TYPE_P (*tp))
21449           op = TREE_TYPE (op);
21450         if (TYPE_P (op))
21451           {
21452             if (dependent_type_p (op))
21453               return *tp;
21454             else
21455               {
21456                 *walk_subtrees = false;
21457                 return NULL_TREE;
21458               }
21459           }
21460         break;
21461       }
21462
21463     case TRAIT_EXPR:
21464       if (dependent_type_p (TRAIT_EXPR_TYPE1 (*tp))
21465           || (TRAIT_EXPR_TYPE2 (*tp)
21466               && dependent_type_p (TRAIT_EXPR_TYPE2 (*tp))))
21467         return *tp;
21468       *walk_subtrees = false;
21469       return NULL_TREE;
21470
21471     case COMPONENT_REF:
21472       if (identifier_p (TREE_OPERAND (*tp, 1)))
21473         /* In a template, finish_class_member_access_expr creates a
21474            COMPONENT_REF with an IDENTIFIER_NODE for op1 even if it isn't
21475            type-dependent, so that we can check access control at
21476            instantiation time (PR 42277).  See also Core issue 1273.  */
21477         return *tp;
21478       break;
21479
21480     case SCOPE_REF:
21481       if (instantiation_dependent_scope_ref_p (*tp))
21482         return *tp;
21483       else
21484         break;
21485
21486       /* Treat statement-expressions as dependent.  */
21487     case BIND_EXPR:
21488       return *tp;
21489
21490     default:
21491       break;
21492     }
21493
21494   if (type_dependent_expression_p (*tp))
21495     return *tp;
21496   else
21497     return NULL_TREE;
21498 }
21499
21500 /* Returns TRUE if the EXPRESSION is instantiation-dependent, in the
21501    sense defined by the ABI:
21502
21503    "An expression is instantiation-dependent if it is type-dependent
21504    or value-dependent, or it has a subexpression that is type-dependent
21505    or value-dependent."  */
21506
21507 bool
21508 instantiation_dependent_expression_p (tree expression)
21509 {
21510   tree result;
21511
21512   if (!processing_template_decl)
21513     return false;
21514
21515   if (expression == error_mark_node)
21516     return false;
21517
21518   result = cp_walk_tree_without_duplicates (&expression,
21519                                             instantiation_dependent_r, NULL);
21520   return result != NULL_TREE;
21521 }
21522
21523 /* Like type_dependent_expression_p, but it also works while not processing
21524    a template definition, i.e. during substitution or mangling.  */
21525
21526 bool
21527 type_dependent_expression_p_push (tree expr)
21528 {
21529   bool b;
21530   ++processing_template_decl;
21531   b = type_dependent_expression_p (expr);
21532   --processing_template_decl;
21533   return b;
21534 }
21535
21536 /* Returns TRUE if ARGS contains a type-dependent expression.  */
21537
21538 bool
21539 any_type_dependent_arguments_p (const vec<tree, va_gc> *args)
21540 {
21541   unsigned int i;
21542   tree arg;
21543
21544   FOR_EACH_VEC_SAFE_ELT (args, i, arg)
21545     {
21546       if (type_dependent_expression_p (arg))
21547         return true;
21548     }
21549   return false;
21550 }
21551
21552 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21553    expressions) contains any type-dependent expressions.  */
21554
21555 bool
21556 any_type_dependent_elements_p (const_tree list)
21557 {
21558   for (; list; list = TREE_CHAIN (list))
21559     if (type_dependent_expression_p (TREE_VALUE (list)))
21560       return true;
21561
21562   return false;
21563 }
21564
21565 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
21566    expressions) contains any value-dependent expressions.  */
21567
21568 bool
21569 any_value_dependent_elements_p (const_tree list)
21570 {
21571   for (; list; list = TREE_CHAIN (list))
21572     if (value_dependent_expression_p (TREE_VALUE (list)))
21573       return true;
21574
21575   return false;
21576 }
21577
21578 /* Returns TRUE if the ARG (a template argument) is dependent.  */
21579
21580 bool
21581 dependent_template_arg_p (tree arg)
21582 {
21583   if (!processing_template_decl)
21584     return false;
21585
21586   /* Assume a template argument that was wrongly written by the user
21587      is dependent. This is consistent with what
21588      any_dependent_template_arguments_p [that calls this function]
21589      does.  */
21590   if (!arg || arg == error_mark_node)
21591     return true;
21592
21593   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
21594     arg = ARGUMENT_PACK_SELECT_ARG (arg);
21595
21596   if (TREE_CODE (arg) == TEMPLATE_DECL
21597       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
21598     return dependent_template_p (arg);
21599   else if (ARGUMENT_PACK_P (arg))
21600     {
21601       tree args = ARGUMENT_PACK_ARGS (arg);
21602       int i, len = TREE_VEC_LENGTH (args);
21603       for (i = 0; i < len; ++i)
21604         {
21605           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
21606             return true;
21607         }
21608
21609       return false;
21610     }
21611   else if (TYPE_P (arg))
21612     return dependent_type_p (arg);
21613   else
21614     return (type_dependent_expression_p (arg)
21615             || value_dependent_expression_p (arg));
21616 }
21617
21618 /* Returns true if ARGS (a collection of template arguments) contains
21619    any types that require structural equality testing.  */
21620
21621 bool
21622 any_template_arguments_need_structural_equality_p (tree args)
21623 {
21624   int i;
21625   int j;
21626
21627   if (!args)
21628     return false;
21629   if (args == error_mark_node)
21630     return true;
21631
21632   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21633     {
21634       tree level = TMPL_ARGS_LEVEL (args, i + 1);
21635       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21636         {
21637           tree arg = TREE_VEC_ELT (level, j);
21638           tree packed_args = NULL_TREE;
21639           int k, len = 1;
21640
21641           if (ARGUMENT_PACK_P (arg))
21642             {
21643               /* Look inside the argument pack.  */
21644               packed_args = ARGUMENT_PACK_ARGS (arg);
21645               len = TREE_VEC_LENGTH (packed_args);
21646             }
21647
21648           for (k = 0; k < len; ++k)
21649             {
21650               if (packed_args)
21651                 arg = TREE_VEC_ELT (packed_args, k);
21652
21653               if (error_operand_p (arg))
21654                 return true;
21655               else if (TREE_CODE (arg) == TEMPLATE_DECL)
21656                 continue;
21657               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
21658                 return true;
21659               else if (!TYPE_P (arg) && TREE_TYPE (arg)
21660                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
21661                 return true;
21662             }
21663         }
21664     }
21665
21666   return false;
21667 }
21668
21669 /* Returns true if ARGS (a collection of template arguments) contains
21670    any dependent arguments.  */
21671
21672 bool
21673 any_dependent_template_arguments_p (const_tree args)
21674 {
21675   int i;
21676   int j;
21677
21678   if (!args)
21679     return false;
21680   if (args == error_mark_node)
21681     return true;
21682
21683   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
21684     {
21685       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
21686       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
21687         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
21688           return true;
21689     }
21690
21691   return false;
21692 }
21693
21694 /* Returns TRUE if the template TMPL is dependent.  */
21695
21696 bool
21697 dependent_template_p (tree tmpl)
21698 {
21699   if (TREE_CODE (tmpl) == OVERLOAD)
21700     {
21701       while (tmpl)
21702         {
21703           if (dependent_template_p (OVL_CURRENT (tmpl)))
21704             return true;
21705           tmpl = OVL_NEXT (tmpl);
21706         }
21707       return false;
21708     }
21709
21710   /* Template template parameters are dependent.  */
21711   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
21712       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
21713     return true;
21714   /* So are names that have not been looked up.  */
21715   if (TREE_CODE (tmpl) == SCOPE_REF || identifier_p (tmpl))
21716     return true;
21717   /* So are member templates of dependent classes.  */
21718   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
21719     return dependent_type_p (DECL_CONTEXT (tmpl));
21720   return false;
21721 }
21722
21723 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
21724
21725 bool
21726 dependent_template_id_p (tree tmpl, tree args)
21727 {
21728   return (dependent_template_p (tmpl)
21729           || any_dependent_template_arguments_p (args));
21730 }
21731
21732 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
21733    is dependent.  */
21734
21735 bool
21736 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
21737 {
21738   int i;
21739
21740   if (!processing_template_decl)
21741     return false;
21742
21743   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
21744     {
21745       tree decl = TREE_VEC_ELT (declv, i);
21746       tree init = TREE_VEC_ELT (initv, i);
21747       tree cond = TREE_VEC_ELT (condv, i);
21748       tree incr = TREE_VEC_ELT (incrv, i);
21749
21750       if (type_dependent_expression_p (decl))
21751         return true;
21752
21753       if (init && type_dependent_expression_p (init))
21754         return true;
21755
21756       if (type_dependent_expression_p (cond))
21757         return true;
21758
21759       if (COMPARISON_CLASS_P (cond)
21760           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
21761               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
21762         return true;
21763
21764       if (TREE_CODE (incr) == MODOP_EXPR)
21765         {
21766           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
21767               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
21768             return true;
21769         }
21770       else if (type_dependent_expression_p (incr))
21771         return true;
21772       else if (TREE_CODE (incr) == MODIFY_EXPR)
21773         {
21774           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
21775             return true;
21776           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
21777             {
21778               tree t = TREE_OPERAND (incr, 1);
21779               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
21780                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
21781                 return true;
21782             }
21783         }
21784     }
21785
21786   return false;
21787 }
21788
21789 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
21790    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
21791    no such TYPE can be found.  Note that this function peers inside
21792    uninstantiated templates and therefore should be used only in
21793    extremely limited situations.  ONLY_CURRENT_P restricts this
21794    peering to the currently open classes hierarchy (which is required
21795    when comparing types).  */
21796
21797 tree
21798 resolve_typename_type (tree type, bool only_current_p)
21799 {
21800   tree scope;
21801   tree name;
21802   tree decl;
21803   int quals;
21804   tree pushed_scope;
21805   tree result;
21806
21807   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
21808
21809   scope = TYPE_CONTEXT (type);
21810   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
21811      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
21812      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
21813      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
21814      identifier  of the TYPENAME_TYPE anymore.
21815      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
21816      TYPENAME_TYPE instead, we avoid messing up with a possible
21817      typedef variant case.  */
21818   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
21819
21820   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
21821      it first before we can figure out what NAME refers to.  */
21822   if (TREE_CODE (scope) == TYPENAME_TYPE)
21823     {
21824       if (TYPENAME_IS_RESOLVING_P (scope))
21825         /* Given a class template A with a dependent base with nested type C,
21826            typedef typename A::C::C C will land us here, as trying to resolve
21827            the initial A::C leads to the local C typedef, which leads back to
21828            A::C::C.  So we break the recursion now.  */
21829         return type;
21830       else
21831         scope = resolve_typename_type (scope, only_current_p);
21832     }
21833   /* If we don't know what SCOPE refers to, then we cannot resolve the
21834      TYPENAME_TYPE.  */
21835   if (TREE_CODE (scope) == TYPENAME_TYPE)
21836     return type;
21837   /* If the SCOPE is a template type parameter, we have no way of
21838      resolving the name.  */
21839   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
21840     return type;
21841   /* If the SCOPE is not the current instantiation, there's no reason
21842      to look inside it.  */
21843   if (only_current_p && !currently_open_class (scope))
21844     return type;
21845   /* If this is a typedef, we don't want to look inside (c++/11987).  */
21846   if (typedef_variant_p (type))
21847     return type;
21848   /* If SCOPE isn't the template itself, it will not have a valid
21849      TYPE_FIELDS list.  */
21850   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
21851     /* scope is either the template itself or a compatible instantiation
21852        like X<T>, so look up the name in the original template.  */
21853     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
21854   else
21855     /* scope is a partial instantiation, so we can't do the lookup or we
21856        will lose the template arguments.  */
21857     return type;
21858   /* Enter the SCOPE so that name lookup will be resolved as if we
21859      were in the class definition.  In particular, SCOPE will no
21860      longer be considered a dependent type.  */
21861   pushed_scope = push_scope (scope);
21862   /* Look up the declaration.  */
21863   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true,
21864                         tf_warning_or_error);
21865
21866   result = NULL_TREE;
21867   
21868   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
21869      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
21870   if (!decl)
21871     /*nop*/;
21872   else if (identifier_p (TYPENAME_TYPE_FULLNAME (type))
21873            && TREE_CODE (decl) == TYPE_DECL)
21874     {
21875       result = TREE_TYPE (decl);
21876       if (result == error_mark_node)
21877         result = NULL_TREE;
21878     }
21879   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
21880            && DECL_CLASS_TEMPLATE_P (decl))
21881     {
21882       tree tmpl;
21883       tree args;
21884       /* Obtain the template and the arguments.  */
21885       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
21886       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
21887       /* Instantiate the template.  */
21888       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
21889                                       /*entering_scope=*/0,
21890                                       tf_error | tf_user);
21891       if (result == error_mark_node)
21892         result = NULL_TREE;
21893     }
21894   
21895   /* Leave the SCOPE.  */
21896   if (pushed_scope)
21897     pop_scope (pushed_scope);
21898
21899   /* If we failed to resolve it, return the original typename.  */
21900   if (!result)
21901     return type;
21902   
21903   /* If lookup found a typename type, resolve that too.  */
21904   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
21905     {
21906       /* Ill-formed programs can cause infinite recursion here, so we
21907          must catch that.  */
21908       TYPENAME_IS_RESOLVING_P (type) = 1;
21909       result = resolve_typename_type (result, only_current_p);
21910       TYPENAME_IS_RESOLVING_P (type) = 0;
21911     }
21912   
21913   /* Qualify the resulting type.  */
21914   quals = cp_type_quals (type);
21915   if (quals)
21916     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
21917
21918   return result;
21919 }
21920
21921 /* EXPR is an expression which is not type-dependent.  Return a proxy
21922    for EXPR that can be used to compute the types of larger
21923    expressions containing EXPR.  */
21924
21925 tree
21926 build_non_dependent_expr (tree expr)
21927 {
21928   tree inner_expr;
21929
21930 #ifdef ENABLE_CHECKING
21931   /* Try to get a constant value for all non-dependent expressions in
21932       order to expose bugs in *_dependent_expression_p and constexpr.  */
21933   if (cxx_dialect >= cxx11)
21934     fold_non_dependent_expr (expr);
21935 #endif
21936
21937   /* Preserve OVERLOADs; the functions must be available to resolve
21938      types.  */
21939   inner_expr = expr;
21940   if (TREE_CODE (inner_expr) == STMT_EXPR)
21941     inner_expr = stmt_expr_value_expr (inner_expr);
21942   if (TREE_CODE (inner_expr) == ADDR_EXPR)
21943     inner_expr = TREE_OPERAND (inner_expr, 0);
21944   if (TREE_CODE (inner_expr) == COMPONENT_REF)
21945     inner_expr = TREE_OPERAND (inner_expr, 1);
21946   if (is_overloaded_fn (inner_expr)
21947       || TREE_CODE (inner_expr) == OFFSET_REF)
21948     return expr;
21949   /* There is no need to return a proxy for a variable.  */
21950   if (VAR_P (expr))
21951     return expr;
21952   /* Preserve string constants; conversions from string constants to
21953      "char *" are allowed, even though normally a "const char *"
21954      cannot be used to initialize a "char *".  */
21955   if (TREE_CODE (expr) == STRING_CST)
21956     return expr;
21957   /* Preserve void and arithmetic constants, as an optimization -- there is no
21958      reason to create a new node.  */
21959   if (TREE_CODE (expr) == VOID_CST
21960       || TREE_CODE (expr) == INTEGER_CST
21961       || TREE_CODE (expr) == REAL_CST)
21962     return expr;
21963   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
21964      There is at least one place where we want to know that a
21965      particular expression is a throw-expression: when checking a ?:
21966      expression, there are special rules if the second or third
21967      argument is a throw-expression.  */
21968   if (TREE_CODE (expr) == THROW_EXPR)
21969     return expr;
21970
21971   /* Don't wrap an initializer list, we need to be able to look inside.  */
21972   if (BRACE_ENCLOSED_INITIALIZER_P (expr))
21973     return expr;
21974
21975   /* Don't wrap a dummy object, we need to be able to test for it.  */
21976   if (is_dummy_object (expr))
21977     return expr;
21978
21979   if (TREE_CODE (expr) == COND_EXPR)
21980     return build3 (COND_EXPR,
21981                    TREE_TYPE (expr),
21982                    TREE_OPERAND (expr, 0),
21983                    (TREE_OPERAND (expr, 1)
21984                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
21985                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
21986                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
21987   if (TREE_CODE (expr) == COMPOUND_EXPR
21988       && !COMPOUND_EXPR_OVERLOADED (expr))
21989     return build2 (COMPOUND_EXPR,
21990                    TREE_TYPE (expr),
21991                    TREE_OPERAND (expr, 0),
21992                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
21993
21994   /* If the type is unknown, it can't really be non-dependent */
21995   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
21996
21997   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
21998   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
21999 }
22000
22001 /* ARGS is a vector of expressions as arguments to a function call.
22002    Replace the arguments with equivalent non-dependent expressions.
22003    This modifies ARGS in place.  */
22004
22005 void
22006 make_args_non_dependent (vec<tree, va_gc> *args)
22007 {
22008   unsigned int ix;
22009   tree arg;
22010
22011   FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
22012     {
22013       tree newarg = build_non_dependent_expr (arg);
22014       if (newarg != arg)
22015         (*args)[ix] = newarg;
22016     }
22017 }
22018
22019 /* Returns a type which represents 'auto' or 'decltype(auto)'.  We use a
22020    TEMPLATE_TYPE_PARM with a level one deeper than the actual template
22021    parms.  */
22022
22023 static tree
22024 make_auto_1 (tree name)
22025 {
22026   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
22027   TYPE_NAME (au) = build_decl (input_location,
22028                                TYPE_DECL, name, au);
22029   TYPE_STUB_DECL (au) = TYPE_NAME (au);
22030   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
22031     (0, processing_template_decl + 1, processing_template_decl + 1,
22032      TYPE_NAME (au), NULL_TREE);
22033   TYPE_CANONICAL (au) = canonical_type_parameter (au);
22034   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
22035   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
22036
22037   return au;
22038 }
22039
22040 tree
22041 make_decltype_auto (void)
22042 {
22043   return make_auto_1 (get_identifier ("decltype(auto)"));
22044 }
22045
22046 tree
22047 make_auto (void)
22048 {
22049   return make_auto_1 (get_identifier ("auto"));
22050 }
22051
22052 /* Given type ARG, return std::initializer_list<ARG>.  */
22053
22054 static tree
22055 listify (tree arg)
22056 {
22057   tree std_init_list = namespace_binding
22058     (get_identifier ("initializer_list"), std_node);
22059   tree argvec;
22060   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
22061     {    
22062       error ("deducing from brace-enclosed initializer list requires "
22063              "#include <initializer_list>");
22064       return error_mark_node;
22065     }
22066   argvec = make_tree_vec (1);
22067   TREE_VEC_ELT (argvec, 0) = arg;
22068   return lookup_template_class (std_init_list, argvec, NULL_TREE,
22069                                 NULL_TREE, 0, tf_warning_or_error);
22070 }
22071
22072 /* Replace auto in TYPE with std::initializer_list<auto>.  */
22073
22074 static tree
22075 listify_autos (tree type, tree auto_node)
22076 {
22077   tree init_auto = listify (auto_node);
22078   tree argvec = make_tree_vec (1);
22079   TREE_VEC_ELT (argvec, 0) = init_auto;
22080   if (processing_template_decl)
22081     argvec = add_to_template_args (current_template_args (), argvec);
22082   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
22083 }
22084
22085 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
22086    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
22087
22088 tree
22089 do_auto_deduction (tree type, tree init, tree auto_node)
22090 {
22091   tree targs;
22092
22093   if (init == error_mark_node)
22094     return error_mark_node;
22095
22096   if (type_dependent_expression_p (init))
22097     /* Defining a subset of type-dependent expressions that we can deduce
22098        from ahead of time isn't worth the trouble.  */
22099     return type;
22100
22101   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
22102      with either a new invented type template parameter U or, if the
22103      initializer is a braced-init-list (8.5.4), with
22104      std::initializer_list<U>.  */
22105   if (BRACE_ENCLOSED_INITIALIZER_P (init))
22106     {
22107       if (!DIRECT_LIST_INIT_P (init))
22108         type = listify_autos (type, auto_node);
22109       else if (CONSTRUCTOR_NELTS (init) == 1)
22110         init = CONSTRUCTOR_ELT (init, 0)->value;
22111       else
22112         {
22113           if (permerror (input_location, "direct-list-initialization of "
22114                          "%<auto%> requires exactly one element"))
22115             inform (input_location,
22116                     "for deduction to %<std::initializer_list%>, use copy-"
22117                     "list-initialization (i.e. add %<=%> before the %<{%>)");
22118           type = listify_autos (type, auto_node);
22119         }
22120     }
22121
22122   init = resolve_nondeduced_context (init);
22123
22124   targs = make_tree_vec (1);
22125   if (AUTO_IS_DECLTYPE (auto_node))
22126     {
22127       bool id = (DECL_P (init) || (TREE_CODE (init) == COMPONENT_REF
22128                                    && !REF_PARENTHESIZED_P (init)));
22129       TREE_VEC_ELT (targs, 0)
22130         = finish_decltype_type (init, id, tf_warning_or_error);
22131       if (type != auto_node)
22132         {
22133           error ("%qT as type rather than plain %<decltype(auto)%>", type);
22134           return error_mark_node;
22135         }
22136     }
22137   else
22138     {
22139       tree parms = build_tree_list (NULL_TREE, type);
22140       tree tparms = make_tree_vec (1);
22141       int val;
22142
22143       TREE_VEC_ELT (tparms, 0)
22144         = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
22145       val = type_unification_real (tparms, targs, parms, &init, 1, 0,
22146                                    DEDUCE_CALL, LOOKUP_NORMAL,
22147                                    NULL, /*explain_p=*/false);
22148       if (val > 0)
22149         {
22150           if (processing_template_decl)
22151             /* Try again at instantiation time.  */
22152             return type;
22153           if (type && type != error_mark_node)
22154             /* If type is error_mark_node a diagnostic must have been
22155                emitted by now.  Also, having a mention to '<type error>'
22156                in the diagnostic is not really useful to the user.  */
22157             {
22158               if (cfun && auto_node == current_function_auto_return_pattern
22159                   && LAMBDA_FUNCTION_P (current_function_decl))
22160                 error ("unable to deduce lambda return type from %qE", init);
22161               else
22162                 error ("unable to deduce %qT from %qE", type, init);
22163             }
22164           return error_mark_node;
22165         }
22166     }
22167
22168   /* If the list of declarators contains more than one declarator, the type
22169      of each declared variable is determined as described above. If the
22170      type deduced for the template parameter U is not the same in each
22171      deduction, the program is ill-formed.  */
22172   if (TREE_TYPE (auto_node)
22173       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
22174     {
22175       if (cfun && auto_node == current_function_auto_return_pattern
22176           && LAMBDA_FUNCTION_P (current_function_decl))
22177         error ("inconsistent types %qT and %qT deduced for "
22178                "lambda return type", TREE_TYPE (auto_node),
22179                TREE_VEC_ELT (targs, 0));
22180       else
22181         error ("inconsistent deduction for %qT: %qT and then %qT",
22182                auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
22183       return error_mark_node;
22184     }
22185   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
22186
22187   if (processing_template_decl)
22188     targs = add_to_template_args (current_template_args (), targs);
22189   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
22190 }
22191
22192 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
22193    result.  */
22194
22195 tree
22196 splice_late_return_type (tree type, tree late_return_type)
22197 {
22198   tree argvec;
22199
22200   if (late_return_type == NULL_TREE)
22201     return type;
22202   argvec = make_tree_vec (1);
22203   TREE_VEC_ELT (argvec, 0) = late_return_type;
22204   if (processing_template_parmlist)
22205     /* For a late-specified return type in a template type-parameter, we
22206        need to add a dummy argument level for its parmlist.  */
22207     argvec = add_to_template_args
22208       (make_tree_vec (processing_template_parmlist), argvec);
22209   if (current_template_parms)
22210     argvec = add_to_template_args (current_template_args (), argvec);
22211   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
22212 }
22213
22214 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto' or
22215    'decltype(auto)'.  */
22216
22217 bool
22218 is_auto (const_tree type)
22219 {
22220   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
22221       && (TYPE_IDENTIFIER (type) == get_identifier ("auto")
22222           || TYPE_IDENTIFIER (type) == get_identifier ("decltype(auto)")))
22223     return true;
22224   else
22225     return false;
22226 }
22227
22228 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing `auto' iff TYPE contains
22229    a use of `auto'.  Returns NULL_TREE otherwise.  */
22230
22231 tree
22232 type_uses_auto (tree type)
22233 {
22234   return find_type_usage (type, is_auto);
22235 }
22236
22237 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto',
22238    'decltype(auto)' or a concept.  */
22239
22240 bool
22241 is_auto_or_concept (const_tree type)
22242 {
22243   return is_auto (type); // or concept
22244 }
22245
22246 /* Returns the TEMPLATE_TYPE_PARM in TYPE representing a generic type (`auto' or
22247    a concept identifier) iff TYPE contains a use of a generic type.  Returns
22248    NULL_TREE otherwise.  */
22249
22250 tree
22251 type_uses_auto_or_concept (tree type)
22252 {
22253   return find_type_usage (type, is_auto_or_concept);
22254 }
22255
22256
22257 /* For a given template T, return the vector of typedefs referenced
22258    in T for which access check is needed at T instantiation time.
22259    T is either  a FUNCTION_DECL or a RECORD_TYPE.
22260    Those typedefs were added to T by the function
22261    append_type_to_template_for_access_check.  */
22262
22263 vec<qualified_typedef_usage_t, va_gc> *
22264 get_types_needing_access_check (tree t)
22265 {
22266   tree ti;
22267   vec<qualified_typedef_usage_t, va_gc> *result = NULL;
22268
22269   if (!t || t == error_mark_node)
22270     return NULL;
22271
22272   if (!(ti = get_template_info (t)))
22273     return NULL;
22274
22275   if (CLASS_TYPE_P (t)
22276       || TREE_CODE (t) == FUNCTION_DECL)
22277     {
22278       if (!TI_TEMPLATE (ti))
22279         return NULL;
22280
22281       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
22282     }
22283
22284   return result;
22285 }
22286
22287 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
22288    tied to T. That list of typedefs will be access checked at
22289    T instantiation time.
22290    T is either a FUNCTION_DECL or a RECORD_TYPE.
22291    TYPE_DECL is a TYPE_DECL node representing a typedef.
22292    SCOPE is the scope through which TYPE_DECL is accessed.
22293    LOCATION is the location of the usage point of TYPE_DECL.
22294
22295    This function is a subroutine of
22296    append_type_to_template_for_access_check.  */
22297
22298 static void
22299 append_type_to_template_for_access_check_1 (tree t,
22300                                             tree type_decl,
22301                                             tree scope,
22302                                             location_t location)
22303 {
22304   qualified_typedef_usage_t typedef_usage;
22305   tree ti;
22306
22307   if (!t || t == error_mark_node)
22308     return;
22309
22310   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
22311                || CLASS_TYPE_P (t))
22312               && type_decl
22313               && TREE_CODE (type_decl) == TYPE_DECL
22314               && scope);
22315
22316   if (!(ti = get_template_info (t)))
22317     return;
22318
22319   gcc_assert (TI_TEMPLATE (ti));
22320
22321   typedef_usage.typedef_decl = type_decl;
22322   typedef_usage.context = scope;
22323   typedef_usage.locus = location;
22324
22325   vec_safe_push (TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti), typedef_usage);
22326 }
22327
22328 /* Append TYPE_DECL to the template TEMPL.
22329    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
22330    At TEMPL instanciation time, TYPE_DECL will be checked to see
22331    if it can be accessed through SCOPE.
22332    LOCATION is the location of the usage point of TYPE_DECL.
22333
22334    e.g. consider the following code snippet:
22335
22336      class C
22337      {
22338        typedef int myint;
22339      };
22340
22341      template<class U> struct S
22342      {
22343        C::myint mi; // <-- usage point of the typedef C::myint
22344      };
22345
22346      S<char> s;
22347
22348    At S<char> instantiation time, we need to check the access of C::myint
22349    In other words, we need to check the access of the myint typedef through
22350    the C scope. For that purpose, this function will add the myint typedef
22351    and the scope C through which its being accessed to a list of typedefs
22352    tied to the template S. That list will be walked at template instantiation
22353    time and access check performed on each typedefs it contains.
22354    Note that this particular code snippet should yield an error because
22355    myint is private to C.  */
22356
22357 void
22358 append_type_to_template_for_access_check (tree templ,
22359                                           tree type_decl,
22360                                           tree scope,
22361                                           location_t location)
22362 {
22363   qualified_typedef_usage_t *iter;
22364   unsigned i;
22365
22366   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
22367
22368   /* Make sure we don't append the type to the template twice.  */
22369   FOR_EACH_VEC_SAFE_ELT (get_types_needing_access_check (templ), i, iter)
22370     if (iter->typedef_decl == type_decl && scope == iter->context)
22371       return;
22372
22373   append_type_to_template_for_access_check_1 (templ, type_decl,
22374                                               scope, location);
22375 }
22376
22377 /* Convert the generic type parameters in PARM that match the types given in the
22378    range [START_IDX, END_IDX) from the current_template_parms into generic type
22379    packs.  */
22380
22381 tree
22382 convert_generic_types_to_packs (tree parm, int start_idx, int end_idx)
22383 {
22384   tree current = current_template_parms;
22385   int depth = TMPL_PARMS_DEPTH (current);
22386   current = INNERMOST_TEMPLATE_PARMS (current);
22387   tree replacement = make_tree_vec (TREE_VEC_LENGTH (current));
22388
22389   for (int i = 0; i < start_idx; ++i)
22390     TREE_VEC_ELT (replacement, i)
22391       = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22392
22393   for (int i = start_idx; i < end_idx; ++i)
22394     {
22395       /* Create a distinct parameter pack type from the current parm and add it
22396          to the replacement args to tsubst below into the generic function
22397          parameter.  */
22398
22399       tree o = TREE_TYPE (TREE_VALUE
22400                           (TREE_VEC_ELT (current, i)));
22401       tree t = copy_type (o);
22402       TEMPLATE_TYPE_PARM_INDEX (t)
22403         = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (o),
22404                                       o, 0, 0, tf_none);
22405       TREE_TYPE (TEMPLATE_TYPE_DECL (t)) = t;
22406       TYPE_STUB_DECL (t) = TYPE_NAME (t) = TEMPLATE_TYPE_DECL (t);
22407       TYPE_MAIN_VARIANT (t) = t;
22408       TEMPLATE_TYPE_PARAMETER_PACK (t) = true;
22409       TYPE_CANONICAL (t) = canonical_type_parameter (t);
22410       TREE_VEC_ELT (replacement, i) = t;
22411       TREE_VALUE (TREE_VEC_ELT (current, i)) = TREE_CHAIN (t);
22412     }
22413
22414   for (int i = end_idx, e = TREE_VEC_LENGTH (current); i < e; ++i)
22415     TREE_VEC_ELT (replacement, i)
22416       = TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (current, i)));
22417
22418   /* If there are more levels then build up the replacement with the outer
22419      template parms.  */
22420   if (depth > 1)
22421     replacement = add_to_template_args (template_parms_to_args
22422                                         (TREE_CHAIN (current_template_parms)),
22423                                         replacement);
22424
22425   return tsubst (parm, replacement, tf_none, NULL_TREE);
22426 }
22427
22428
22429 /* Set up the hash tables for template instantiations.  */
22430
22431 void
22432 init_template_processing (void)
22433 {
22434   decl_specializations = hash_table<spec_hasher>::create_ggc (37);
22435   type_specializations = hash_table<spec_hasher>::create_ggc (37);
22436 }
22437
22438 /* Print stats about the template hash tables for -fstats.  */
22439
22440 void
22441 print_template_statistics (void)
22442 {
22443   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
22444            "%f collisions\n", (long) decl_specializations->size (),
22445            (long) decl_specializations->elements (),
22446            decl_specializations->collisions ());
22447   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
22448            "%f collisions\n", (long) type_specializations->size (),
22449            (long) type_specializations->elements (),
22450            type_specializations->collisions ());
22451 }
22452
22453 #include "gt-cp-pt.h"