OSDN Git Service

* pt.c (unify) [TEMPLATE_TYPE_PARM]: Allow VLA for C++0x 'auto'.
[pf3gnuchains/gcc-fork.git] / gcc / cp / pt.c
1 /* Handle parameterized types (templates) for GNU C++.
2    Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
4    Free Software Foundation, Inc.
5    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
6    Rewritten by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "tree.h"
34 #include "intl.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "c-family/c-common.h"
39 #include "c-family/c-objc.h"
40 #include "cp-objcp-common.h"
41 #include "tree-inline.h"
42 #include "decl.h"
43 #include "output.h"
44 #include "toplev.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.  */
56 struct GTY ((chain_next ("%h.next"))) pending_template {
57   struct pending_template *next;
58   struct tinst_level *tinst;
59 };
60
61 static GTY(()) struct pending_template *pending_templates;
62 static GTY(()) struct pending_template *last_pending_template;
63
64 int processing_template_parmlist;
65 static int template_header_count;
66
67 static GTY(()) tree saved_trees;
68 static VEC(int,heap) *inline_parm_levels;
69
70 static GTY(()) struct tinst_level *current_tinst_level;
71
72 static GTY(()) tree saved_access_scope;
73
74 /* Live only within one (recursive) call to tsubst_expr.  We use
75    this to pass the statement expression node from the STMT_EXPR
76    to the EXPR_STMT that is its result.  */
77 static tree cur_stmt_expr;
78
79 /* A map from local variable declarations in the body of the template
80    presently being instantiated to the corresponding instantiated
81    local variables.  */
82 static htab_t local_specializations;
83
84 typedef struct GTY(()) spec_entry
85 {
86   tree tmpl;
87   tree args;
88   tree spec;
89 } spec_entry;
90
91 static GTY ((param_is (spec_entry)))
92   htab_t decl_specializations;
93
94 static GTY ((param_is (spec_entry)))
95   htab_t type_specializations;
96
97 /* Contains canonical template parameter types. The vector is indexed by
98    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
99    TREE_LIST, whose TREE_VALUEs contain the canonical template
100    parameters of various types and levels.  */
101 static GTY(()) VEC(tree,gc) *canonical_template_parms;
102
103 #define UNIFY_ALLOW_NONE 0
104 #define UNIFY_ALLOW_MORE_CV_QUAL 1
105 #define UNIFY_ALLOW_LESS_CV_QUAL 2
106 #define UNIFY_ALLOW_DERIVED 4
107 #define UNIFY_ALLOW_INTEGER 8
108 #define UNIFY_ALLOW_OUTER_LEVEL 16
109 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
110 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
111
112 enum template_base_result {
113   tbr_incomplete_type,
114   tbr_ambiguous_baseclass,
115   tbr_success
116 };
117
118 static void push_access_scope (tree);
119 static void pop_access_scope (tree);
120 static void push_deduction_access_scope (tree);
121 static void pop_deduction_access_scope (tree);
122 static bool resolve_overloaded_unification (tree, tree, tree, tree,
123                                             unification_kind_t, int,
124                                             bool);
125 static int try_one_overload (tree, tree, tree, tree, tree,
126                              unification_kind_t, int, bool, bool);
127 static int unify (tree, tree, tree, tree, int, bool);
128 static void add_pending_template (tree);
129 static tree reopen_tinst_level (struct tinst_level *);
130 static tree tsubst_initializer_list (tree, tree);
131 static tree get_class_bindings (tree, tree, tree);
132 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
133                                    bool, bool);
134 static void tsubst_enum (tree, tree, tree);
135 static tree add_to_template_args (tree, tree);
136 static tree add_outermost_template_args (tree, tree);
137 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
138 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
139                                              tree);
140 static int type_unification_real (tree, tree, tree, const tree *,
141                                   unsigned int, int, unification_kind_t, int,
142                                   bool);
143 static void note_template_header (int);
144 static tree convert_nontype_argument_function (tree, tree);
145 static tree convert_nontype_argument (tree, tree, tsubst_flags_t);
146 static tree convert_template_argument (tree, tree, tree,
147                                        tsubst_flags_t, int, tree);
148 static int for_each_template_parm (tree, tree_fn_t, void*,
149                                    struct pointer_set_t*, bool);
150 static tree expand_template_argument_pack (tree);
151 static tree build_template_parm_index (int, int, int, int, tree, tree);
152 static bool inline_needs_template_parms (tree);
153 static void push_inline_template_parms_recursive (tree, int);
154 static tree retrieve_local_specialization (tree);
155 static void register_local_specialization (tree, tree);
156 static hashval_t hash_specialization (const void *p);
157 static tree reduce_template_parm_level (tree, tree, int, tree, tsubst_flags_t);
158 static int mark_template_parm (tree, void *);
159 static int template_parm_this_level_p (tree, void *);
160 static tree tsubst_friend_function (tree, tree);
161 static tree tsubst_friend_class (tree, tree);
162 static int can_complete_type_without_circularity (tree);
163 static tree get_bindings (tree, tree, tree, bool);
164 static int template_decl_level (tree);
165 static int check_cv_quals_for_unify (int, tree, tree);
166 static void template_parm_level_and_index (tree, int*, int*);
167 static int unify_pack_expansion (tree, tree, tree,
168                                  tree, int, bool, bool, bool);
169 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
170 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
171 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
172 static void regenerate_decl_from_template (tree, tree);
173 static tree most_specialized_class (tree, tree, tsubst_flags_t);
174 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
175 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
176 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
177 static bool check_specialization_scope (void);
178 static tree process_partial_specialization (tree);
179 static void set_current_access_from_decl (tree);
180 static enum template_base_result get_template_base (tree, tree, tree, tree,
181                                                     bool , tree *);
182 static tree try_class_unification (tree, tree, tree, tree, bool);
183 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
184                                            tree, tree);
185 static bool template_template_parm_bindings_ok_p (tree, tree);
186 static int template_args_equal (tree, tree);
187 static void tsubst_default_arguments (tree);
188 static tree for_each_template_parm_r (tree *, int *, void *);
189 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
190 static void copy_default_args_to_explicit_spec (tree);
191 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
192 static int eq_local_specializations (const void *, const void *);
193 static bool dependent_template_arg_p (tree);
194 static bool any_template_arguments_need_structural_equality_p (tree);
195 static bool dependent_type_p_r (tree);
196 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
197 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
198 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
199 static tree tsubst_decl (tree, tree, tsubst_flags_t);
200 static void perform_typedefs_access_check (tree tmpl, tree targs);
201 static void append_type_to_template_for_access_check_1 (tree, tree, tree,
202                                                         location_t);
203 static tree listify (tree);
204 static tree listify_autos (tree, tree);
205 static tree template_parm_to_arg (tree t);
206 static tree current_template_args (void);
207 static tree fixup_template_type_parm_type (tree, int);
208 static tree fixup_template_parm_index (tree, tree, int);
209 static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
210
211 /* Make the current scope suitable for access checking when we are
212    processing T.  T can be FUNCTION_DECL for instantiated function
213    template, or VAR_DECL for static member variable (need by
214    instantiate_decl).  */
215
216 static void
217 push_access_scope (tree t)
218 {
219   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
220               || TREE_CODE (t) == VAR_DECL);
221
222   if (DECL_FRIEND_CONTEXT (t))
223     push_nested_class (DECL_FRIEND_CONTEXT (t));
224   else if (DECL_CLASS_SCOPE_P (t))
225     push_nested_class (DECL_CONTEXT (t));
226   else
227     push_to_top_level ();
228
229   if (TREE_CODE (t) == FUNCTION_DECL)
230     {
231       saved_access_scope = tree_cons
232         (NULL_TREE, current_function_decl, saved_access_scope);
233       current_function_decl = t;
234     }
235 }
236
237 /* Restore the scope set up by push_access_scope.  T is the node we
238    are processing.  */
239
240 static void
241 pop_access_scope (tree t)
242 {
243   if (TREE_CODE (t) == FUNCTION_DECL)
244     {
245       current_function_decl = TREE_VALUE (saved_access_scope);
246       saved_access_scope = TREE_CHAIN (saved_access_scope);
247     }
248
249   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
250     pop_nested_class ();
251   else
252     pop_from_top_level ();
253 }
254
255 /* Do any processing required when DECL (a member template
256    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
257    to DECL, unless it is a specialization, in which case the DECL
258    itself is returned.  */
259
260 tree
261 finish_member_template_decl (tree decl)
262 {
263   if (decl == error_mark_node)
264     return error_mark_node;
265
266   gcc_assert (DECL_P (decl));
267
268   if (TREE_CODE (decl) == TYPE_DECL)
269     {
270       tree type;
271
272       type = TREE_TYPE (decl);
273       if (type == error_mark_node)
274         return error_mark_node;
275       if (MAYBE_CLASS_TYPE_P (type)
276           && CLASSTYPE_TEMPLATE_INFO (type)
277           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
278         {
279           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
280           check_member_template (tmpl);
281           return tmpl;
282         }
283       return NULL_TREE;
284     }
285   else if (TREE_CODE (decl) == FIELD_DECL)
286     error ("data member %qD cannot be a member template", decl);
287   else if (DECL_TEMPLATE_INFO (decl))
288     {
289       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
290         {
291           check_member_template (DECL_TI_TEMPLATE (decl));
292           return DECL_TI_TEMPLATE (decl);
293         }
294       else
295         return decl;
296     }
297   else
298     error ("invalid member template declaration %qD", decl);
299
300   return error_mark_node;
301 }
302
303 /* Create a template info node.  */
304
305 tree
306 build_template_info (tree template_decl, tree template_args)
307 {
308   tree result = make_node (TEMPLATE_INFO);
309   TI_TEMPLATE (result) = template_decl;
310   TI_ARGS (result) = template_args;
311   return result;
312 }
313
314 /* Return the template info node corresponding to T, whatever T is.  */
315
316 tree
317 get_template_info (const_tree t)
318 {
319   tree tinfo = NULL_TREE;
320
321   if (!t || t == error_mark_node)
322     return NULL;
323
324   if (DECL_P (t) && DECL_LANG_SPECIFIC (t))
325     tinfo = DECL_TEMPLATE_INFO (t);
326
327   if (!tinfo && DECL_IMPLICIT_TYPEDEF_P (t))
328     t = TREE_TYPE (t);
329
330   if (TAGGED_TYPE_P (t))
331     tinfo = TYPE_TEMPLATE_INFO (t);
332   else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
333     tinfo = TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t);
334
335   return tinfo;
336 }
337
338 /* Returns the template nesting level of the indicated class TYPE.
339
340    For example, in:
341      template <class T>
342      struct A
343      {
344        template <class U>
345        struct B {};
346      };
347
348    A<T>::B<U> has depth two, while A<T> has depth one.
349    Both A<T>::B<int> and A<int>::B<U> have depth one, if
350    they are instantiations, not specializations.
351
352    This function is guaranteed to return 0 if passed NULL_TREE so
353    that, for example, `template_class_depth (current_class_type)' is
354    always safe.  */
355
356 int
357 template_class_depth (tree type)
358 {
359   int depth;
360
361   for (depth = 0;
362        type && TREE_CODE (type) != NAMESPACE_DECL;
363        type = (TREE_CODE (type) == FUNCTION_DECL)
364          ? CP_DECL_CONTEXT (type) : CP_TYPE_CONTEXT (type))
365     {
366       tree tinfo = get_template_info (type);
367
368       if (tinfo && PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo))
369           && uses_template_parms (INNERMOST_TEMPLATE_ARGS (TI_ARGS (tinfo))))
370         ++depth;
371     }
372
373   return depth;
374 }
375
376 /* Subroutine of maybe_begin_member_template_processing.
377    Returns true if processing DECL needs us to push template parms.  */
378
379 static bool
380 inline_needs_template_parms (tree decl)
381 {
382   if (! DECL_TEMPLATE_INFO (decl))
383     return false;
384
385   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
386           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
387 }
388
389 /* Subroutine of maybe_begin_member_template_processing.
390    Push the template parms in PARMS, starting from LEVELS steps into the
391    chain, and ending at the beginning, since template parms are listed
392    innermost first.  */
393
394 static void
395 push_inline_template_parms_recursive (tree parmlist, int levels)
396 {
397   tree parms = TREE_VALUE (parmlist);
398   int i;
399
400   if (levels > 1)
401     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
402
403   ++processing_template_decl;
404   current_template_parms
405     = tree_cons (size_int (processing_template_decl),
406                  parms, current_template_parms);
407   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
408
409   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
410                NULL);
411   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
412     {
413       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
414
415       if (parm == error_mark_node)
416         continue;
417
418       gcc_assert (DECL_P (parm));
419
420       switch (TREE_CODE (parm))
421         {
422         case TYPE_DECL:
423         case TEMPLATE_DECL:
424           pushdecl (parm);
425           break;
426
427         case PARM_DECL:
428           {
429             /* Make a CONST_DECL as is done in process_template_parm.
430                It is ugly that we recreate this here; the original
431                version built in process_template_parm is no longer
432                available.  */
433             tree decl = build_decl (DECL_SOURCE_LOCATION (parm),
434                                     CONST_DECL, DECL_NAME (parm),
435                                     TREE_TYPE (parm));
436             DECL_ARTIFICIAL (decl) = 1;
437             TREE_CONSTANT (decl) = 1;
438             TREE_READONLY (decl) = 1;
439             DECL_INITIAL (decl) = DECL_INITIAL (parm);
440             SET_DECL_TEMPLATE_PARM_P (decl);
441             pushdecl (decl);
442           }
443           break;
444
445         default:
446           gcc_unreachable ();
447         }
448     }
449 }
450
451 /* Restore the template parameter context for a member template or
452    a friend template defined in a class definition.  */
453
454 void
455 maybe_begin_member_template_processing (tree decl)
456 {
457   tree parms;
458   int levels = 0;
459
460   if (inline_needs_template_parms (decl))
461     {
462       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
463       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
464
465       if (DECL_TEMPLATE_SPECIALIZATION (decl))
466         {
467           --levels;
468           parms = TREE_CHAIN (parms);
469         }
470
471       push_inline_template_parms_recursive (parms, levels);
472     }
473
474   /* Remember how many levels of template parameters we pushed so that
475      we can pop them later.  */
476   VEC_safe_push (int, heap, inline_parm_levels, levels);
477 }
478
479 /* Undo the effects of maybe_begin_member_template_processing.  */
480
481 void
482 maybe_end_member_template_processing (void)
483 {
484   int i;
485   int last;
486
487   if (VEC_length (int, inline_parm_levels) == 0)
488     return;
489
490   last = VEC_pop (int, inline_parm_levels);
491   for (i = 0; i < last; ++i)
492     {
493       --processing_template_decl;
494       current_template_parms = TREE_CHAIN (current_template_parms);
495       poplevel (0, 0, 0);
496     }
497 }
498
499 /* Return a new template argument vector which contains all of ARGS,
500    but has as its innermost set of arguments the EXTRA_ARGS.  */
501
502 static tree
503 add_to_template_args (tree args, tree extra_args)
504 {
505   tree new_args;
506   int extra_depth;
507   int i;
508   int j;
509
510   if (args == NULL_TREE || extra_args == error_mark_node)
511     return extra_args;
512
513   extra_depth = TMPL_ARGS_DEPTH (extra_args);
514   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
515
516   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
517     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
518
519   for (j = 1; j <= extra_depth; ++j, ++i)
520     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
521
522   return new_args;
523 }
524
525 /* Like add_to_template_args, but only the outermost ARGS are added to
526    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
527    (EXTRA_ARGS) levels are added.  This function is used to combine
528    the template arguments from a partial instantiation with the
529    template arguments used to attain the full instantiation from the
530    partial instantiation.  */
531
532 static tree
533 add_outermost_template_args (tree args, tree extra_args)
534 {
535   tree new_args;
536
537   /* If there are more levels of EXTRA_ARGS than there are ARGS,
538      something very fishy is going on.  */
539   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
540
541   /* If *all* the new arguments will be the EXTRA_ARGS, just return
542      them.  */
543   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
544     return extra_args;
545
546   /* For the moment, we make ARGS look like it contains fewer levels.  */
547   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
548
549   new_args = add_to_template_args (args, extra_args);
550
551   /* Now, we restore ARGS to its full dimensions.  */
552   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
553
554   return new_args;
555 }
556
557 /* Return the N levels of innermost template arguments from the ARGS.  */
558
559 tree
560 get_innermost_template_args (tree args, int n)
561 {
562   tree new_args;
563   int extra_levels;
564   int i;
565
566   gcc_assert (n >= 0);
567
568   /* If N is 1, just return the innermost set of template arguments.  */
569   if (n == 1)
570     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
571
572   /* If we're not removing anything, just return the arguments we were
573      given.  */
574   extra_levels = TMPL_ARGS_DEPTH (args) - n;
575   gcc_assert (extra_levels >= 0);
576   if (extra_levels == 0)
577     return args;
578
579   /* Make a new set of arguments, not containing the outer arguments.  */
580   new_args = make_tree_vec (n);
581   for (i = 1; i <= n; ++i)
582     SET_TMPL_ARGS_LEVEL (new_args, i,
583                          TMPL_ARGS_LEVEL (args, i + extra_levels));
584
585   return new_args;
586 }
587
588 /* The inverse of get_innermost_template_args: Return all but the innermost
589    EXTRA_LEVELS levels of template arguments from the ARGS.  */
590
591 static tree
592 strip_innermost_template_args (tree args, int extra_levels)
593 {
594   tree new_args;
595   int n = TMPL_ARGS_DEPTH (args) - extra_levels;
596   int i;
597
598   gcc_assert (n >= 0);
599
600   /* If N is 1, just return the outermost set of template arguments.  */
601   if (n == 1)
602     return TMPL_ARGS_LEVEL (args, 1);
603
604   /* If we're not removing anything, just return the arguments we were
605      given.  */
606   gcc_assert (extra_levels >= 0);
607   if (extra_levels == 0)
608     return args;
609
610   /* Make a new set of arguments, not containing the inner arguments.  */
611   new_args = make_tree_vec (n);
612   for (i = 1; i <= n; ++i)
613     SET_TMPL_ARGS_LEVEL (new_args, i,
614                          TMPL_ARGS_LEVEL (args, i));
615
616   return new_args;
617 }
618
619 /* We've got a template header coming up; push to a new level for storing
620    the parms.  */
621
622 void
623 begin_template_parm_list (void)
624 {
625   /* We use a non-tag-transparent scope here, which causes pushtag to
626      put tags in this scope, rather than in the enclosing class or
627      namespace scope.  This is the right thing, since we want
628      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
629      global template class, push_template_decl handles putting the
630      TEMPLATE_DECL into top-level scope.  For a nested template class,
631      e.g.:
632
633        template <class T> struct S1 {
634          template <class T> struct S2 {};
635        };
636
637      pushtag contains special code to call pushdecl_with_scope on the
638      TEMPLATE_DECL for S2.  */
639   begin_scope (sk_template_parms, NULL);
640   ++processing_template_decl;
641   ++processing_template_parmlist;
642   note_template_header (0);
643 }
644
645 /* This routine is called when a specialization is declared.  If it is
646    invalid to declare a specialization here, an error is reported and
647    false is returned, otherwise this routine will return true.  */
648
649 static bool
650 check_specialization_scope (void)
651 {
652   tree scope = current_scope ();
653
654   /* [temp.expl.spec]
655
656      An explicit specialization shall be declared in the namespace of
657      which the template is a member, or, for member templates, in the
658      namespace of which the enclosing class or enclosing class
659      template is a member.  An explicit specialization of a member
660      function, member class or static data member of a class template
661      shall be declared in the namespace of which the class template
662      is a member.  */
663   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
664     {
665       error ("explicit specialization in non-namespace scope %qD", scope);
666       return false;
667     }
668
669   /* [temp.expl.spec]
670
671      In an explicit specialization declaration for a member of a class
672      template or a member template that appears in namespace scope,
673      the member template and some of its enclosing class templates may
674      remain unspecialized, except that the declaration shall not
675      explicitly specialize a class member template if its enclosing
676      class templates are not explicitly specialized as well.  */
677   if (current_template_parms)
678     {
679       error ("enclosing class templates are not explicitly specialized");
680       return false;
681     }
682
683   return true;
684 }
685
686 /* We've just seen template <>.  */
687
688 bool
689 begin_specialization (void)
690 {
691   begin_scope (sk_template_spec, NULL);
692   note_template_header (1);
693   return check_specialization_scope ();
694 }
695
696 /* Called at then end of processing a declaration preceded by
697    template<>.  */
698
699 void
700 end_specialization (void)
701 {
702   finish_scope ();
703   reset_specialization ();
704 }
705
706 /* Any template <>'s that we have seen thus far are not referring to a
707    function specialization.  */
708
709 void
710 reset_specialization (void)
711 {
712   processing_specialization = 0;
713   template_header_count = 0;
714 }
715
716 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
717    it was of the form template <>.  */
718
719 static void
720 note_template_header (int specialization)
721 {
722   processing_specialization = specialization;
723   template_header_count++;
724 }
725
726 /* We're beginning an explicit instantiation.  */
727
728 void
729 begin_explicit_instantiation (void)
730 {
731   gcc_assert (!processing_explicit_instantiation);
732   processing_explicit_instantiation = true;
733 }
734
735
736 void
737 end_explicit_instantiation (void)
738 {
739   gcc_assert (processing_explicit_instantiation);
740   processing_explicit_instantiation = false;
741 }
742
743 /* An explicit specialization or partial specialization TMPL is being
744    declared.  Check that the namespace in which the specialization is
745    occurring is permissible.  Returns false iff it is invalid to
746    specialize TMPL in the current namespace.  */
747
748 static bool
749 check_specialization_namespace (tree tmpl)
750 {
751   tree tpl_ns = decl_namespace_context (tmpl);
752
753   /* [tmpl.expl.spec]
754
755      An explicit specialization shall be declared in the namespace of
756      which the template is a member, or, for member templates, in the
757      namespace of which the enclosing class or enclosing class
758      template is a member.  An explicit specialization of a member
759      function, member class or static data member of a class template
760      shall be declared in the namespace of which the class template is
761      a member.  */
762   if (current_scope() != DECL_CONTEXT (tmpl)
763       && !at_namespace_scope_p ())
764     {
765       error ("specialization of %qD must appear at namespace scope", tmpl);
766       return false;
767     }
768   if (is_associated_namespace (current_namespace, tpl_ns))
769     /* Same or super-using namespace.  */
770     return true;
771   else
772     {
773       permerror (input_location, "specialization of %qD in different namespace", tmpl);
774       permerror (input_location, "  from definition of %q+#D", tmpl);
775       return false;
776     }
777 }
778
779 /* SPEC is an explicit instantiation.  Check that it is valid to
780    perform this explicit instantiation in the current namespace.  */
781
782 static void
783 check_explicit_instantiation_namespace (tree spec)
784 {
785   tree ns;
786
787   /* DR 275: An explicit instantiation shall appear in an enclosing
788      namespace of its template.  */
789   ns = decl_namespace_context (spec);
790   if (!is_ancestor (current_namespace, ns))
791     permerror (input_location, "explicit instantiation of %qD in namespace %qD "
792                "(which does not enclose namespace %qD)",
793                spec, current_namespace, ns);
794 }
795
796 /* The TYPE is being declared.  If it is a template type, that means it
797    is a partial specialization.  Do appropriate error-checking.  */
798
799 tree
800 maybe_process_partial_specialization (tree type)
801 {
802   tree context;
803
804   if (type == error_mark_node)
805     return error_mark_node;
806
807   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
808     {
809       error ("name of class shadows template template parameter %qD",
810              TYPE_NAME (type));
811       return error_mark_node;
812     }
813
814   context = TYPE_CONTEXT (type);
815
816   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
817     {
818       /* This is for ordinary explicit specialization and partial
819          specialization of a template class such as:
820
821            template <> class C<int>;
822
823          or:
824
825            template <class T> class C<T*>;
826
827          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
828
829       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
830           && !COMPLETE_TYPE_P (type))
831         {
832           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
833           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
834           if (processing_template_decl)
835             {
836               if (push_template_decl (TYPE_MAIN_DECL (type))
837                   == error_mark_node)
838                 return error_mark_node;
839             }
840         }
841       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
842         error ("specialization of %qT after instantiation", type);
843     }
844   else if (CLASS_TYPE_P (type)
845            && !CLASSTYPE_USE_TEMPLATE (type)
846            && CLASSTYPE_TEMPLATE_INFO (type)
847            && context && CLASS_TYPE_P (context)
848            && CLASSTYPE_TEMPLATE_INFO (context))
849     {
850       /* This is for an explicit specialization of member class
851          template according to [temp.expl.spec/18]:
852
853            template <> template <class U> class C<int>::D;
854
855          The context `C<int>' must be an implicit instantiation.
856          Otherwise this is just a member class template declared
857          earlier like:
858
859            template <> class C<int> { template <class U> class D; };
860            template <> template <class U> class C<int>::D;
861
862          In the first case, `C<int>::D' is a specialization of `C<T>::D'
863          while in the second case, `C<int>::D' is a primary template
864          and `C<T>::D' may not exist.  */
865
866       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
867           && !COMPLETE_TYPE_P (type))
868         {
869           tree t;
870           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
871
872           if (current_namespace
873               != decl_namespace_context (tmpl))
874             {
875               permerror (input_location, "specializing %q#T in different namespace", type);
876               permerror (input_location, "  from definition of %q+#D", tmpl);
877             }
878
879           /* Check for invalid specialization after instantiation:
880
881                template <> template <> class C<int>::D<int>;
882                template <> template <class U> class C<int>::D;  */
883
884           for (t = DECL_TEMPLATE_INSTANTIATIONS (tmpl);
885                t; t = TREE_CHAIN (t))
886             {
887               tree inst = TREE_VALUE (t);
888               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (inst))
889                 {
890                   /* We already have a full specialization of this partial
891                      instantiation.  Reassign it to the new member
892                      specialization template.  */
893                   spec_entry elt;
894                   spec_entry **slot;
895
896                   elt.tmpl = most_general_template (tmpl);
897                   elt.args = CLASSTYPE_TI_ARGS (inst);
898                   elt.spec = inst;
899
900                   htab_remove_elt (type_specializations, &elt);
901
902                   elt.tmpl = tmpl;
903                   elt.args = INNERMOST_TEMPLATE_ARGS (elt.args);
904
905                   slot = (spec_entry **)
906                     htab_find_slot (type_specializations, &elt, INSERT);
907                   *slot = ggc_alloc_spec_entry ();
908                   **slot = elt;
909                 }
910               else if (COMPLETE_OR_OPEN_TYPE_P (inst))
911                 /* But if we've had an implicit instantiation, that's a
912                    problem ([temp.expl.spec]/6).  */
913                 error ("specialization %qT after instantiation %qT",
914                        type, inst);
915             }
916
917           /* Mark TYPE as a specialization.  And as a result, we only
918              have one level of template argument for the innermost
919              class template.  */
920           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
921           CLASSTYPE_TI_ARGS (type)
922             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
923         }
924     }
925   else if (processing_specialization)
926     {
927        /* Someday C++0x may allow for enum template specialization.  */
928       if (cxx_dialect > cxx98 && TREE_CODE (type) == ENUMERAL_TYPE
929           && CLASS_TYPE_P (context) && CLASSTYPE_USE_TEMPLATE (context))
930         pedwarn (input_location, OPT_pedantic, "template specialization "
931                  "of %qD not allowed by ISO C++", type);
932       else
933         {
934           error ("explicit specialization of non-template %qT", type);
935           return error_mark_node;
936         }
937     }
938
939   return type;
940 }
941
942 /* Returns nonzero if we can optimize the retrieval of specializations
943    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
944    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
945
946 static inline bool
947 optimize_specialization_lookup_p (tree tmpl)
948 {
949   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
950           && DECL_CLASS_SCOPE_P (tmpl)
951           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
952              parameter.  */
953           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
954           /* The optimized lookup depends on the fact that the
955              template arguments for the member function template apply
956              purely to the containing class, which is not true if the
957              containing class is an explicit or partial
958              specialization.  */
959           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
960           && !DECL_MEMBER_TEMPLATE_P (tmpl)
961           && !DECL_CONV_FN_P (tmpl)
962           /* It is possible to have a template that is not a member
963              template and is not a member of a template class:
964
965              template <typename T>
966              struct S { friend A::f(); };
967
968              Here, the friend function is a template, but the context does
969              not have template information.  The optimized lookup relies
970              on having ARGS be the template arguments for both the class
971              and the function template.  */
972           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
973 }
974
975 /* Retrieve the specialization (in the sense of [temp.spec] - a
976    specialization is either an instantiation or an explicit
977    specialization) of TMPL for the given template ARGS.  If there is
978    no such specialization, return NULL_TREE.  The ARGS are a vector of
979    arguments, or a vector of vectors of arguments, in the case of
980    templates with more than one level of parameters.
981
982    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
983    then we search for a partial specialization matching ARGS.  This
984    parameter is ignored if TMPL is not a class template.  */
985
986 static tree
987 retrieve_specialization (tree tmpl, tree args, hashval_t hash)
988 {
989   if (args == error_mark_node)
990     return NULL_TREE;
991
992   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
993
994   /* There should be as many levels of arguments as there are
995      levels of parameters.  */
996   gcc_assert (TMPL_ARGS_DEPTH (args)
997               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
998
999   if (optimize_specialization_lookup_p (tmpl))
1000     {
1001       tree class_template;
1002       tree class_specialization;
1003       VEC(tree,gc) *methods;
1004       tree fns;
1005       int idx;
1006
1007       /* The template arguments actually apply to the containing
1008          class.  Find the class specialization with those
1009          arguments.  */
1010       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
1011       class_specialization
1012         = retrieve_specialization (class_template, args, 0);
1013       if (!class_specialization)
1014         return NULL_TREE;
1015       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
1016          for the specialization.  */
1017       idx = class_method_index_for_fn (class_specialization, tmpl);
1018       if (idx == -1)
1019         return NULL_TREE;
1020       /* Iterate through the methods with the indicated name, looking
1021          for the one that has an instance of TMPL.  */
1022       methods = CLASSTYPE_METHOD_VEC (class_specialization);
1023       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
1024         {
1025           tree fn = OVL_CURRENT (fns);
1026           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl
1027               /* using-declarations can add base methods to the method vec,
1028                  and we don't want those here.  */
1029               && DECL_CONTEXT (fn) == class_specialization)
1030             return fn;
1031         }
1032       return NULL_TREE;
1033     }
1034   else
1035     {
1036       spec_entry *found;
1037       spec_entry elt;
1038       htab_t specializations;
1039
1040       elt.tmpl = tmpl;
1041       elt.args = args;
1042       elt.spec = NULL_TREE;
1043
1044       if (DECL_CLASS_TEMPLATE_P (tmpl))
1045         specializations = type_specializations;
1046       else
1047         specializations = decl_specializations;
1048
1049       if (hash == 0)
1050         hash = hash_specialization (&elt);
1051       found = (spec_entry *) htab_find_with_hash (specializations, &elt, hash);
1052       if (found)
1053         return found->spec;
1054     }
1055
1056   return NULL_TREE;
1057 }
1058
1059 /* Like retrieve_specialization, but for local declarations.  */
1060
1061 static tree
1062 retrieve_local_specialization (tree tmpl)
1063 {
1064   tree spec;
1065
1066   if (local_specializations == NULL)
1067     return NULL_TREE;
1068
1069   spec = (tree) htab_find_with_hash (local_specializations, tmpl,
1070                                      htab_hash_pointer (tmpl));
1071   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
1072 }
1073
1074 /* Returns nonzero iff DECL is a specialization of TMPL.  */
1075
1076 int
1077 is_specialization_of (tree decl, tree tmpl)
1078 {
1079   tree t;
1080
1081   if (TREE_CODE (decl) == FUNCTION_DECL)
1082     {
1083       for (t = decl;
1084            t != NULL_TREE;
1085            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
1086         if (t == tmpl)
1087           return 1;
1088     }
1089   else
1090     {
1091       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
1092
1093       for (t = TREE_TYPE (decl);
1094            t != NULL_TREE;
1095            t = CLASSTYPE_USE_TEMPLATE (t)
1096              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
1097         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
1098           return 1;
1099     }
1100
1101   return 0;
1102 }
1103
1104 /* Returns nonzero iff DECL is a specialization of friend declaration
1105    FRIEND_DECL according to [temp.friend].  */
1106
1107 bool
1108 is_specialization_of_friend (tree decl, tree friend_decl)
1109 {
1110   bool need_template = true;
1111   int template_depth;
1112
1113   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
1114               || TREE_CODE (decl) == TYPE_DECL);
1115
1116   /* For [temp.friend/6] when FRIEND_DECL is an ordinary member function
1117      of a template class, we want to check if DECL is a specialization
1118      if this.  */
1119   if (TREE_CODE (friend_decl) == FUNCTION_DECL
1120       && DECL_TEMPLATE_INFO (friend_decl)
1121       && !DECL_USE_TEMPLATE (friend_decl))
1122     {
1123       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
1124       friend_decl = DECL_TI_TEMPLATE (friend_decl);
1125       need_template = false;
1126     }
1127   else if (TREE_CODE (friend_decl) == TEMPLATE_DECL
1128            && !PRIMARY_TEMPLATE_P (friend_decl))
1129     need_template = false;
1130
1131   /* There is nothing to do if this is not a template friend.  */
1132   if (TREE_CODE (friend_decl) != TEMPLATE_DECL)
1133     return false;
1134
1135   if (is_specialization_of (decl, friend_decl))
1136     return true;
1137
1138   /* [temp.friend/6]
1139      A member of a class template may be declared to be a friend of a
1140      non-template class.  In this case, the corresponding member of
1141      every specialization of the class template is a friend of the
1142      class granting friendship.
1143
1144      For example, given a template friend declaration
1145
1146        template <class T> friend void A<T>::f();
1147
1148      the member function below is considered a friend
1149
1150        template <> struct A<int> {
1151          void f();
1152        };
1153
1154      For this type of template friend, TEMPLATE_DEPTH below will be
1155      nonzero.  To determine if DECL is a friend of FRIEND, we first
1156      check if the enclosing class is a specialization of another.  */
1157
1158   template_depth = template_class_depth (CP_DECL_CONTEXT (friend_decl));
1159   if (template_depth
1160       && DECL_CLASS_SCOPE_P (decl)
1161       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1162                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend_decl))))
1163     {
1164       /* Next, we check the members themselves.  In order to handle
1165          a few tricky cases, such as when FRIEND_DECL's are
1166
1167            template <class T> friend void A<T>::g(T t);
1168            template <class T> template <T t> friend void A<T>::h();
1169
1170          and DECL's are
1171
1172            void A<int>::g(int);
1173            template <int> void A<int>::h();
1174
1175          we need to figure out ARGS, the template arguments from
1176          the context of DECL.  This is required for template substitution
1177          of `T' in the function parameter of `g' and template parameter
1178          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1179
1180       tree context = DECL_CONTEXT (decl);
1181       tree args = NULL_TREE;
1182       int current_depth = 0;
1183
1184       while (current_depth < template_depth)
1185         {
1186           if (CLASSTYPE_TEMPLATE_INFO (context))
1187             {
1188               if (current_depth == 0)
1189                 args = TYPE_TI_ARGS (context);
1190               else
1191                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1192               current_depth++;
1193             }
1194           context = TYPE_CONTEXT (context);
1195         }
1196
1197       if (TREE_CODE (decl) == FUNCTION_DECL)
1198         {
1199           bool is_template;
1200           tree friend_type;
1201           tree decl_type;
1202           tree friend_args_type;
1203           tree decl_args_type;
1204
1205           /* Make sure that both DECL and FRIEND_DECL are templates or
1206              non-templates.  */
1207           is_template = DECL_TEMPLATE_INFO (decl)
1208                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1209           if (need_template ^ is_template)
1210             return false;
1211           else if (is_template)
1212             {
1213               /* If both are templates, check template parameter list.  */
1214               tree friend_parms
1215                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1216                                          args, tf_none);
1217               if (!comp_template_parms
1218                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1219                       friend_parms))
1220                 return false;
1221
1222               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1223             }
1224           else
1225             decl_type = TREE_TYPE (decl);
1226
1227           friend_type = tsubst_function_type (TREE_TYPE (friend_decl), args,
1228                                               tf_none, NULL_TREE);
1229           if (friend_type == error_mark_node)
1230             return false;
1231
1232           /* Check if return types match.  */
1233           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1234             return false;
1235
1236           /* Check if function parameter types match, ignoring the
1237              `this' parameter.  */
1238           friend_args_type = TYPE_ARG_TYPES (friend_type);
1239           decl_args_type = TYPE_ARG_TYPES (decl_type);
1240           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend_decl))
1241             friend_args_type = TREE_CHAIN (friend_args_type);
1242           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1243             decl_args_type = TREE_CHAIN (decl_args_type);
1244
1245           return compparms (decl_args_type, friend_args_type);
1246         }
1247       else
1248         {
1249           /* DECL is a TYPE_DECL */
1250           bool is_template;
1251           tree decl_type = TREE_TYPE (decl);
1252
1253           /* Make sure that both DECL and FRIEND_DECL are templates or
1254              non-templates.  */
1255           is_template
1256             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1257               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1258
1259           if (need_template ^ is_template)
1260             return false;
1261           else if (is_template)
1262             {
1263               tree friend_parms;
1264               /* If both are templates, check the name of the two
1265                  TEMPLATE_DECL's first because is_friend didn't.  */
1266               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1267                   != DECL_NAME (friend_decl))
1268                 return false;
1269
1270               /* Now check template parameter list.  */
1271               friend_parms
1272                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_decl),
1273                                          args, tf_none);
1274               return comp_template_parms
1275                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1276                  friend_parms);
1277             }
1278           else
1279             return (DECL_NAME (decl)
1280                     == DECL_NAME (friend_decl));
1281         }
1282     }
1283   return false;
1284 }
1285
1286 /* Register the specialization SPEC as a specialization of TMPL with
1287    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1288    is actually just a friend declaration.  Returns SPEC, or an
1289    equivalent prior declaration, if available.  */
1290
1291 static tree
1292 register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
1293                          hashval_t hash)
1294 {
1295   tree fn;
1296   spec_entry **slot = NULL;
1297   spec_entry elt;
1298
1299   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL && DECL_P (spec));
1300
1301   if (TREE_CODE (spec) == FUNCTION_DECL
1302       && uses_template_parms (DECL_TI_ARGS (spec)))
1303     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1304        register it; we want the corresponding TEMPLATE_DECL instead.
1305        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1306        the more obvious `uses_template_parms (spec)' to avoid problems
1307        with default function arguments.  In particular, given
1308        something like this:
1309
1310           template <class T> void f(T t1, T t = T())
1311
1312        the default argument expression is not substituted for in an
1313        instantiation unless and until it is actually needed.  */
1314     return spec;
1315
1316   if (optimize_specialization_lookup_p (tmpl))
1317     /* We don't put these specializations in the hash table, but we might
1318        want to give an error about a mismatch.  */
1319     fn = retrieve_specialization (tmpl, args, 0);
1320   else
1321     {
1322       elt.tmpl = tmpl;
1323       elt.args = args;
1324       elt.spec = spec;
1325
1326       if (hash == 0)
1327         hash = hash_specialization (&elt);
1328
1329       slot = (spec_entry **)
1330         htab_find_slot_with_hash (decl_specializations, &elt, hash, INSERT);
1331       if (*slot)
1332         fn = (*slot)->spec;
1333       else
1334         fn = NULL_TREE;
1335     }
1336
1337   /* We can sometimes try to re-register a specialization that we've
1338      already got.  In particular, regenerate_decl_from_template calls
1339      duplicate_decls which will update the specialization list.  But,
1340      we'll still get called again here anyhow.  It's more convenient
1341      to simply allow this than to try to prevent it.  */
1342   if (fn == spec)
1343     return spec;
1344   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1345     {
1346       if (DECL_TEMPLATE_INSTANTIATION (fn))
1347         {
1348           if (DECL_ODR_USED (fn)
1349               || DECL_EXPLICIT_INSTANTIATION (fn))
1350             {
1351               error ("specialization of %qD after instantiation",
1352                      fn);
1353               return error_mark_node;
1354             }
1355           else
1356             {
1357               tree clone;
1358               /* This situation should occur only if the first
1359                  specialization is an implicit instantiation, the
1360                  second is an explicit specialization, and the
1361                  implicit instantiation has not yet been used.  That
1362                  situation can occur if we have implicitly
1363                  instantiated a member function and then specialized
1364                  it later.
1365
1366                  We can also wind up here if a friend declaration that
1367                  looked like an instantiation turns out to be a
1368                  specialization:
1369
1370                    template <class T> void foo(T);
1371                    class S { friend void foo<>(int) };
1372                    template <> void foo(int);
1373
1374                  We transform the existing DECL in place so that any
1375                  pointers to it become pointers to the updated
1376                  declaration.
1377
1378                  If there was a definition for the template, but not
1379                  for the specialization, we want this to look as if
1380                  there were no definition, and vice versa.  */
1381               DECL_INITIAL (fn) = NULL_TREE;
1382               duplicate_decls (spec, fn, is_friend);
1383               /* The call to duplicate_decls will have applied
1384                  [temp.expl.spec]:
1385
1386                    An explicit specialization of a function template
1387                    is inline only if it is explicitly declared to be,
1388                    and independently of whether its function template
1389                    is.
1390
1391                 to the primary function; now copy the inline bits to
1392                 the various clones.  */
1393               FOR_EACH_CLONE (clone, fn)
1394                 {
1395                   DECL_DECLARED_INLINE_P (clone)
1396                     = DECL_DECLARED_INLINE_P (fn);
1397                   DECL_SOURCE_LOCATION (clone)
1398                     = DECL_SOURCE_LOCATION (fn);
1399                 }
1400               check_specialization_namespace (fn);
1401
1402               return fn;
1403             }
1404         }
1405       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1406         {
1407           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1408             /* Dup decl failed, but this is a new definition. Set the
1409                line number so any errors match this new
1410                definition.  */
1411             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1412
1413           return fn;
1414         }
1415     }
1416   else if (fn)
1417     return duplicate_decls (spec, fn, is_friend);
1418
1419   /* A specialization must be declared in the same namespace as the
1420      template it is specializing.  */
1421   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1422       && !check_specialization_namespace (tmpl))
1423     DECL_CONTEXT (spec) = DECL_CONTEXT (tmpl);
1424
1425   if (!optimize_specialization_lookup_p (tmpl))
1426     {
1427       gcc_assert (tmpl && args && spec);
1428       *slot = ggc_alloc_spec_entry ();
1429       **slot = elt;
1430       if (TREE_CODE (spec) == FUNCTION_DECL && DECL_NAMESPACE_SCOPE_P (spec)
1431           && PRIMARY_TEMPLATE_P (tmpl)
1432           && DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (tmpl)) == NULL_TREE)
1433         /* TMPL is a forward declaration of a template function; keep a list
1434            of all specializations in case we need to reassign them to a friend
1435            template later in tsubst_friend_function.  */
1436         DECL_TEMPLATE_INSTANTIATIONS (tmpl)
1437           = tree_cons (args, spec, DECL_TEMPLATE_INSTANTIATIONS (tmpl));
1438     }
1439
1440   return spec;
1441 }
1442
1443 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
1444    TMPL and ARGS members, ignores SPEC.  */
1445
1446 static int
1447 eq_specializations (const void *p1, const void *p2)
1448 {
1449   const spec_entry *e1 = (const spec_entry *)p1;
1450   const spec_entry *e2 = (const spec_entry *)p2;
1451
1452   return (e1->tmpl == e2->tmpl
1453           && comp_template_args (e1->args, e2->args));
1454 }
1455
1456 /* Returns a hash for a template TMPL and template arguments ARGS.  */
1457
1458 static hashval_t
1459 hash_tmpl_and_args (tree tmpl, tree args)
1460 {
1461   hashval_t val = DECL_UID (tmpl);
1462   return iterative_hash_template_arg (args, val);
1463 }
1464
1465 /* Returns a hash for a spec_entry node based on the TMPL and ARGS members,
1466    ignoring SPEC.  */
1467
1468 static hashval_t
1469 hash_specialization (const void *p)
1470 {
1471   const spec_entry *e = (const spec_entry *)p;
1472   return hash_tmpl_and_args (e->tmpl, e->args);
1473 }
1474
1475 /* Recursively calculate a hash value for a template argument ARG, for use
1476    in the hash tables of template specializations.  */
1477
1478 hashval_t
1479 iterative_hash_template_arg (tree arg, hashval_t val)
1480 {
1481   unsigned HOST_WIDE_INT i;
1482   enum tree_code code;
1483   char tclass;
1484
1485   if (arg == NULL_TREE)
1486     return iterative_hash_object (arg, val);
1487
1488   if (!TYPE_P (arg))
1489     STRIP_NOPS (arg);
1490
1491   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
1492     /* We can get one of these when re-hashing a previous entry in the middle
1493        of substituting into a pack expansion.  Just look through it.  */
1494     arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
1495
1496   code = TREE_CODE (arg);
1497   tclass = TREE_CODE_CLASS (code);
1498
1499   val = iterative_hash_object (code, val);
1500
1501   switch (code)
1502     {
1503     case ERROR_MARK:
1504       return val;
1505
1506     case IDENTIFIER_NODE:
1507       return iterative_hash_object (IDENTIFIER_HASH_VALUE (arg), val);
1508
1509     case TREE_VEC:
1510       {
1511         int i, len = TREE_VEC_LENGTH (arg);
1512         for (i = 0; i < len; ++i)
1513           val = iterative_hash_template_arg (TREE_VEC_ELT (arg, i), val);
1514         return val;
1515       }
1516
1517     case TYPE_PACK_EXPANSION:
1518     case EXPR_PACK_EXPANSION:
1519       return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
1520
1521     case TYPE_ARGUMENT_PACK:
1522     case NONTYPE_ARGUMENT_PACK:
1523       return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
1524
1525     case TREE_LIST:
1526       for (; arg; arg = TREE_CHAIN (arg))
1527         val = iterative_hash_template_arg (TREE_VALUE (arg), val);
1528       return val;
1529
1530     case OVERLOAD:
1531       for (; arg; arg = OVL_NEXT (arg))
1532         val = iterative_hash_template_arg (OVL_CURRENT (arg), val);
1533       return val;
1534
1535     case CONSTRUCTOR:
1536       {
1537         tree field, value;
1538         FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (arg), i, field, value)
1539           {
1540             val = iterative_hash_template_arg (field, val);
1541             val = iterative_hash_template_arg (value, val);
1542           }
1543         return val;
1544       }
1545
1546     case PARM_DECL:
1547       if (!DECL_ARTIFICIAL (arg))
1548         {
1549           val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
1550           val = iterative_hash_object (DECL_PARM_LEVEL (arg), val);
1551         }
1552       return iterative_hash_template_arg (TREE_TYPE (arg), val);
1553
1554     case TARGET_EXPR:
1555       return iterative_hash_template_arg (TARGET_EXPR_INITIAL (arg), val);
1556
1557     case PTRMEM_CST:
1558       val = iterative_hash_template_arg (PTRMEM_CST_CLASS (arg), val);
1559       return iterative_hash_template_arg (PTRMEM_CST_MEMBER (arg), val);
1560
1561     case TEMPLATE_PARM_INDEX:
1562       val = iterative_hash_template_arg
1563         (TREE_TYPE (TEMPLATE_PARM_DECL (arg)), val);
1564       val = iterative_hash_object (TEMPLATE_PARM_LEVEL (arg), val);
1565       return iterative_hash_object (TEMPLATE_PARM_IDX (arg), val);
1566
1567     case TRAIT_EXPR:
1568       val = iterative_hash_object (TRAIT_EXPR_KIND (arg), val);
1569       val = iterative_hash_template_arg (TRAIT_EXPR_TYPE1 (arg), val);
1570       return iterative_hash_template_arg (TRAIT_EXPR_TYPE2 (arg), val);
1571
1572     case BASELINK:
1573       val = iterative_hash_template_arg (BINFO_TYPE (BASELINK_BINFO (arg)),
1574                                          val);
1575       return iterative_hash_template_arg (DECL_NAME (get_first_fn (arg)),
1576                                           val);
1577
1578     case MODOP_EXPR:
1579       val = iterative_hash_template_arg (TREE_OPERAND (arg, 0), val);
1580       code = TREE_CODE (TREE_OPERAND (arg, 1));
1581       val = iterative_hash_object (code, val);
1582       return iterative_hash_template_arg (TREE_OPERAND (arg, 2), val);
1583
1584     case LAMBDA_EXPR:
1585       /* A lambda can't appear in a template arg, but don't crash on
1586          erroneous input.  */
1587       gcc_assert (seen_error ());
1588       return val;
1589
1590     case CAST_EXPR:
1591     case STATIC_CAST_EXPR:
1592     case REINTERPRET_CAST_EXPR:
1593     case CONST_CAST_EXPR:
1594     case DYNAMIC_CAST_EXPR:
1595     case NEW_EXPR:
1596       val = iterative_hash_template_arg (TREE_TYPE (arg), val);
1597       /* Now hash operands as usual.  */
1598       break;
1599
1600     default:
1601       break;
1602     }
1603
1604   switch (tclass)
1605     {
1606     case tcc_type:
1607       if (TYPE_CANONICAL (arg))
1608         return iterative_hash_object (TYPE_HASH (TYPE_CANONICAL (arg)),
1609                                       val);
1610       else if (TREE_CODE (arg) == DECLTYPE_TYPE)
1611         return iterative_hash_template_arg (DECLTYPE_TYPE_EXPR (arg), val);
1612       /* Otherwise just compare the types during lookup.  */
1613       return val;
1614
1615     case tcc_declaration:
1616     case tcc_constant:
1617       return iterative_hash_expr (arg, val);
1618
1619     default:
1620       gcc_assert (IS_EXPR_CODE_CLASS (tclass));
1621       {
1622         unsigned n = cp_tree_operand_length (arg);
1623         for (i = 0; i < n; ++i)
1624           val = iterative_hash_template_arg (TREE_OPERAND (arg, i), val);
1625         return val;
1626       }
1627     }
1628   gcc_unreachable ();
1629   return 0;
1630 }
1631
1632 /* Unregister the specialization SPEC as a specialization of TMPL.
1633    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1634    if the SPEC was listed as a specialization of TMPL.
1635
1636    Note that SPEC has been ggc_freed, so we can't look inside it.  */
1637
1638 bool
1639 reregister_specialization (tree spec, tree tinfo, tree new_spec)
1640 {
1641   spec_entry **slot;
1642   spec_entry elt;
1643
1644   elt.tmpl = most_general_template (TI_TEMPLATE (tinfo));
1645   elt.args = TI_ARGS (tinfo);
1646   elt.spec = NULL_TREE;
1647
1648   slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
1649   if (*slot)
1650     {
1651       gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
1652       gcc_assert (new_spec != NULL_TREE);
1653       (*slot)->spec = new_spec;
1654       return 1;
1655     }
1656
1657   return 0;
1658 }
1659
1660 /* Compare an entry in the local specializations hash table P1 (which
1661    is really a pointer to a TREE_LIST) with P2 (which is really a
1662    DECL).  */
1663
1664 static int
1665 eq_local_specializations (const void *p1, const void *p2)
1666 {
1667   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1668 }
1669
1670 /* Hash P1, an entry in the local specializations table.  */
1671
1672 static hashval_t
1673 hash_local_specialization (const void* p1)
1674 {
1675   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1676 }
1677
1678 /* Like register_specialization, but for local declarations.  We are
1679    registering SPEC, an instantiation of TMPL.  */
1680
1681 static void
1682 register_local_specialization (tree spec, tree tmpl)
1683 {
1684   void **slot;
1685
1686   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1687                                    htab_hash_pointer (tmpl), INSERT);
1688   *slot = build_tree_list (spec, tmpl);
1689 }
1690
1691 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1692    specialized class.  */
1693
1694 bool
1695 explicit_class_specialization_p (tree type)
1696 {
1697   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1698     return false;
1699   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1700 }
1701
1702 /* Print the list of functions at FNS, going through all the overloads
1703    for each element of the list.  Alternatively, FNS can not be a
1704    TREE_LIST, in which case it will be printed together with all the
1705    overloads.
1706
1707    MORE and *STR should respectively be FALSE and NULL when the function
1708    is called from the outside.  They are used internally on recursive
1709    calls.  print_candidates manages the two parameters and leaves NULL
1710    in *STR when it ends.  */
1711
1712 static void
1713 print_candidates_1 (tree fns, bool more, const char **str)
1714 {
1715   tree fn, fn2;
1716   char *spaces = NULL;
1717
1718   for (fn = fns; fn; fn = OVL_NEXT (fn))
1719     if (TREE_CODE (fn) == TREE_LIST)
1720       {
1721         for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
1722           print_candidates_1 (TREE_VALUE (fn2),
1723                               TREE_CHAIN (fn2) || more, str);
1724       }
1725     else
1726       {
1727         if (!*str)
1728           {
1729             /* Pick the prefix string.  */
1730             if (!more && !OVL_NEXT (fns))
1731               {
1732                 error ("candidate is: %+#D", OVL_CURRENT (fn));
1733                 continue;
1734               }
1735
1736             *str = _("candidates are:");
1737             spaces = get_spaces (*str);
1738           }
1739         error ("%s %+#D", *str, OVL_CURRENT (fn));
1740         *str = spaces ? spaces : *str;
1741       }
1742
1743   if (!more)
1744     {
1745       free (spaces);
1746       *str = NULL;
1747     }
1748 }
1749
1750 /* Print the list of candidate FNS in an error message.  FNS can also
1751    be a TREE_LIST of non-functions in the case of an ambiguous lookup.  */
1752
1753 void
1754 print_candidates (tree fns)
1755 {
1756   const char *str = NULL;
1757   print_candidates_1 (fns, false, &str);
1758   gcc_assert (str == NULL);
1759 }
1760
1761 /* Returns the template (one of the functions given by TEMPLATE_ID)
1762    which can be specialized to match the indicated DECL with the
1763    explicit template args given in TEMPLATE_ID.  The DECL may be
1764    NULL_TREE if none is available.  In that case, the functions in
1765    TEMPLATE_ID are non-members.
1766
1767    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1768    specialization of a member template.
1769
1770    The TEMPLATE_COUNT is the number of references to qualifying
1771    template classes that appeared in the name of the function. See
1772    check_explicit_specialization for a more accurate description.
1773
1774    TSK indicates what kind of template declaration (if any) is being
1775    declared.  TSK_TEMPLATE indicates that the declaration given by
1776    DECL, though a FUNCTION_DECL, has template parameters, and is
1777    therefore a template function.
1778
1779    The template args (those explicitly specified and those deduced)
1780    are output in a newly created vector *TARGS_OUT.
1781
1782    If it is impossible to determine the result, an error message is
1783    issued.  The error_mark_node is returned to indicate failure.  */
1784
1785 static tree
1786 determine_specialization (tree template_id,
1787                           tree decl,
1788                           tree* targs_out,
1789                           int need_member_template,
1790                           int template_count,
1791                           tmpl_spec_kind tsk)
1792 {
1793   tree fns;
1794   tree targs;
1795   tree explicit_targs;
1796   tree candidates = NULL_TREE;
1797   /* A TREE_LIST of templates of which DECL may be a specialization.
1798      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1799      corresponding TREE_PURPOSE is the set of template arguments that,
1800      when used to instantiate the template, would produce a function
1801      with the signature of DECL.  */
1802   tree templates = NULL_TREE;
1803   int header_count;
1804   cp_binding_level *b;
1805
1806   *targs_out = NULL_TREE;
1807
1808   if (template_id == error_mark_node || decl == error_mark_node)
1809     return error_mark_node;
1810
1811   fns = TREE_OPERAND (template_id, 0);
1812   explicit_targs = TREE_OPERAND (template_id, 1);
1813
1814   if (fns == error_mark_node)
1815     return error_mark_node;
1816
1817   /* Check for baselinks.  */
1818   if (BASELINK_P (fns))
1819     fns = BASELINK_FUNCTIONS (fns);
1820
1821   if (!is_overloaded_fn (fns))
1822     {
1823       error ("%qD is not a function template", fns);
1824       return error_mark_node;
1825     }
1826
1827   /* Count the number of template headers specified for this
1828      specialization.  */
1829   header_count = 0;
1830   for (b = current_binding_level;
1831        b->kind == sk_template_parms;
1832        b = b->level_chain)
1833     ++header_count;
1834
1835   for (; fns; fns = OVL_NEXT (fns))
1836     {
1837       tree fn = OVL_CURRENT (fns);
1838
1839       if (TREE_CODE (fn) == TEMPLATE_DECL)
1840         {
1841           tree decl_arg_types;
1842           tree fn_arg_types;
1843
1844           /* In case of explicit specialization, we need to check if
1845              the number of template headers appearing in the specialization
1846              is correct. This is usually done in check_explicit_specialization,
1847              but the check done there cannot be exhaustive when specializing
1848              member functions. Consider the following code:
1849
1850              template <> void A<int>::f(int);
1851              template <> template <> void A<int>::f(int);
1852
1853              Assuming that A<int> is not itself an explicit specialization
1854              already, the first line specializes "f" which is a non-template
1855              member function, whilst the second line specializes "f" which
1856              is a template member function. So both lines are syntactically
1857              correct, and check_explicit_specialization does not reject
1858              them.
1859
1860              Here, we can do better, as we are matching the specialization
1861              against the declarations. We count the number of template
1862              headers, and we check if they match TEMPLATE_COUNT + 1
1863              (TEMPLATE_COUNT is the number of qualifying template classes,
1864              plus there must be another header for the member template
1865              itself).
1866
1867              Notice that if header_count is zero, this is not a
1868              specialization but rather a template instantiation, so there
1869              is no check we can perform here.  */
1870           if (header_count && header_count != template_count + 1)
1871             continue;
1872
1873           /* Check that the number of template arguments at the
1874              innermost level for DECL is the same as for FN.  */
1875           if (current_binding_level->kind == sk_template_parms
1876               && !current_binding_level->explicit_spec_p
1877               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1878                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1879                                       (current_template_parms))))
1880             continue;
1881
1882           /* DECL might be a specialization of FN.  */
1883           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1884           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1885
1886           /* For a non-static member function, we need to make sure
1887              that the const qualification is the same.  Since
1888              get_bindings does not try to merge the "this" parameter,
1889              we must do the comparison explicitly.  */
1890           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1891               && !same_type_p (TREE_VALUE (fn_arg_types),
1892                                TREE_VALUE (decl_arg_types)))
1893             continue;
1894
1895           /* Skip the "this" parameter and, for constructors of
1896              classes with virtual bases, the VTT parameter.  A
1897              full specialization of a constructor will have a VTT
1898              parameter, but a template never will.  */ 
1899           decl_arg_types 
1900             = skip_artificial_parms_for (decl, decl_arg_types);
1901           fn_arg_types 
1902             = skip_artificial_parms_for (fn, fn_arg_types);
1903
1904           /* Check that the number of function parameters matches.
1905              For example,
1906                template <class T> void f(int i = 0);
1907                template <> void f<int>();
1908              The specialization f<int> is invalid but is not caught
1909              by get_bindings below.  */
1910           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1911             continue;
1912
1913           /* Function templates cannot be specializations; there are
1914              no partial specializations of functions.  Therefore, if
1915              the type of DECL does not match FN, there is no
1916              match.  */
1917           if (tsk == tsk_template)
1918             {
1919               if (compparms (fn_arg_types, decl_arg_types))
1920                 candidates = tree_cons (NULL_TREE, fn, candidates);
1921               continue;
1922             }
1923
1924           /* See whether this function might be a specialization of this
1925              template.  */
1926           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1927
1928           if (!targs)
1929             /* We cannot deduce template arguments that when used to
1930                specialize TMPL will produce DECL.  */
1931             continue;
1932
1933           /* Save this template, and the arguments deduced.  */
1934           templates = tree_cons (targs, fn, templates);
1935         }
1936       else if (need_member_template)
1937         /* FN is an ordinary member function, and we need a
1938            specialization of a member template.  */
1939         ;
1940       else if (TREE_CODE (fn) != FUNCTION_DECL)
1941         /* We can get IDENTIFIER_NODEs here in certain erroneous
1942            cases.  */
1943         ;
1944       else if (!DECL_FUNCTION_MEMBER_P (fn))
1945         /* This is just an ordinary non-member function.  Nothing can
1946            be a specialization of that.  */
1947         ;
1948       else if (DECL_ARTIFICIAL (fn))
1949         /* Cannot specialize functions that are created implicitly.  */
1950         ;
1951       else
1952         {
1953           tree decl_arg_types;
1954
1955           /* This is an ordinary member function.  However, since
1956              we're here, we can assume it's enclosing class is a
1957              template class.  For example,
1958
1959                template <typename T> struct S { void f(); };
1960                template <> void S<int>::f() {}
1961
1962              Here, S<int>::f is a non-template, but S<int> is a
1963              template class.  If FN has the same type as DECL, we
1964              might be in business.  */
1965
1966           if (!DECL_TEMPLATE_INFO (fn))
1967             /* Its enclosing class is an explicit specialization
1968                of a template class.  This is not a candidate.  */
1969             continue;
1970
1971           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1972                             TREE_TYPE (TREE_TYPE (fn))))
1973             /* The return types differ.  */
1974             continue;
1975
1976           /* Adjust the type of DECL in case FN is a static member.  */
1977           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1978           if (DECL_STATIC_FUNCTION_P (fn)
1979               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1980             decl_arg_types = TREE_CHAIN (decl_arg_types);
1981
1982           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1983                          decl_arg_types))
1984             /* They match!  */
1985             candidates = tree_cons (NULL_TREE, fn, candidates);
1986         }
1987     }
1988
1989   if (templates && TREE_CHAIN (templates))
1990     {
1991       /* We have:
1992
1993            [temp.expl.spec]
1994
1995            It is possible for a specialization with a given function
1996            signature to be instantiated from more than one function
1997            template.  In such cases, explicit specification of the
1998            template arguments must be used to uniquely identify the
1999            function template specialization being specialized.
2000
2001          Note that here, there's no suggestion that we're supposed to
2002          determine which of the candidate templates is most
2003          specialized.  However, we, also have:
2004
2005            [temp.func.order]
2006
2007            Partial ordering of overloaded function template
2008            declarations is used in the following contexts to select
2009            the function template to which a function template
2010            specialization refers:
2011
2012            -- when an explicit specialization refers to a function
2013               template.
2014
2015          So, we do use the partial ordering rules, at least for now.
2016          This extension can only serve to make invalid programs valid,
2017          so it's safe.  And, there is strong anecdotal evidence that
2018          the committee intended the partial ordering rules to apply;
2019          the EDG front end has that behavior, and John Spicer claims
2020          that the committee simply forgot to delete the wording in
2021          [temp.expl.spec].  */
2022       tree tmpl = most_specialized_instantiation (templates);
2023       if (tmpl != error_mark_node)
2024         {
2025           templates = tmpl;
2026           TREE_CHAIN (templates) = NULL_TREE;
2027         }
2028     }
2029
2030   if (templates == NULL_TREE && candidates == NULL_TREE)
2031     {
2032       error ("template-id %qD for %q+D does not match any template "
2033              "declaration", template_id, decl);
2034       if (header_count && header_count != template_count + 1)
2035         inform (input_location, "saw %d %<template<>%>, need %d for "
2036                 "specializing a member function template",
2037                 header_count, template_count + 1);
2038       return error_mark_node;
2039     }
2040   else if ((templates && TREE_CHAIN (templates))
2041            || (candidates && TREE_CHAIN (candidates))
2042            || (templates && candidates))
2043     {
2044       error ("ambiguous template specialization %qD for %q+D",
2045              template_id, decl);
2046       candidates = chainon (candidates, templates);
2047       print_candidates (candidates);
2048       return error_mark_node;
2049     }
2050
2051   /* We have one, and exactly one, match.  */
2052   if (candidates)
2053     {
2054       tree fn = TREE_VALUE (candidates);
2055       *targs_out = copy_node (DECL_TI_ARGS (fn));
2056       /* DECL is a re-declaration or partial instantiation of a template
2057          function.  */
2058       if (TREE_CODE (fn) == TEMPLATE_DECL)
2059         return fn;
2060       /* It was a specialization of an ordinary member function in a
2061          template class.  */
2062       return DECL_TI_TEMPLATE (fn);
2063     }
2064
2065   /* It was a specialization of a template.  */
2066   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
2067   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
2068     {
2069       *targs_out = copy_node (targs);
2070       SET_TMPL_ARGS_LEVEL (*targs_out,
2071                            TMPL_ARGS_DEPTH (*targs_out),
2072                            TREE_PURPOSE (templates));
2073     }
2074   else
2075     *targs_out = TREE_PURPOSE (templates);
2076   return TREE_VALUE (templates);
2077 }
2078
2079 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
2080    but with the default argument values filled in from those in the
2081    TMPL_TYPES.  */
2082
2083 static tree
2084 copy_default_args_to_explicit_spec_1 (tree spec_types,
2085                                       tree tmpl_types)
2086 {
2087   tree new_spec_types;
2088
2089   if (!spec_types)
2090     return NULL_TREE;
2091
2092   if (spec_types == void_list_node)
2093     return void_list_node;
2094
2095   /* Substitute into the rest of the list.  */
2096   new_spec_types =
2097     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
2098                                           TREE_CHAIN (tmpl_types));
2099
2100   /* Add the default argument for this parameter.  */
2101   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
2102                          TREE_VALUE (spec_types),
2103                          new_spec_types);
2104 }
2105
2106 /* DECL is an explicit specialization.  Replicate default arguments
2107    from the template it specializes.  (That way, code like:
2108
2109      template <class T> void f(T = 3);
2110      template <> void f(double);
2111      void g () { f (); }
2112
2113    works, as required.)  An alternative approach would be to look up
2114    the correct default arguments at the call-site, but this approach
2115    is consistent with how implicit instantiations are handled.  */
2116
2117 static void
2118 copy_default_args_to_explicit_spec (tree decl)
2119 {
2120   tree tmpl;
2121   tree spec_types;
2122   tree tmpl_types;
2123   tree new_spec_types;
2124   tree old_type;
2125   tree new_type;
2126   tree t;
2127   tree object_type = NULL_TREE;
2128   tree in_charge = NULL_TREE;
2129   tree vtt = NULL_TREE;
2130
2131   /* See if there's anything we need to do.  */
2132   tmpl = DECL_TI_TEMPLATE (decl);
2133   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
2134   for (t = tmpl_types; t; t = TREE_CHAIN (t))
2135     if (TREE_PURPOSE (t))
2136       break;
2137   if (!t)
2138     return;
2139
2140   old_type = TREE_TYPE (decl);
2141   spec_types = TYPE_ARG_TYPES (old_type);
2142
2143   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2144     {
2145       /* Remove the this pointer, but remember the object's type for
2146          CV quals.  */
2147       object_type = TREE_TYPE (TREE_VALUE (spec_types));
2148       spec_types = TREE_CHAIN (spec_types);
2149       tmpl_types = TREE_CHAIN (tmpl_types);
2150
2151       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
2152         {
2153           /* DECL may contain more parameters than TMPL due to the extra
2154              in-charge parameter in constructors and destructors.  */
2155           in_charge = spec_types;
2156           spec_types = TREE_CHAIN (spec_types);
2157         }
2158       if (DECL_HAS_VTT_PARM_P (decl))
2159         {
2160           vtt = spec_types;
2161           spec_types = TREE_CHAIN (spec_types);
2162         }
2163     }
2164
2165   /* Compute the merged default arguments.  */
2166   new_spec_types =
2167     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
2168
2169   /* Compute the new FUNCTION_TYPE.  */
2170   if (object_type)
2171     {
2172       if (vtt)
2173         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
2174                                          TREE_VALUE (vtt),
2175                                          new_spec_types);
2176
2177       if (in_charge)
2178         /* Put the in-charge parameter back.  */
2179         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
2180                                          TREE_VALUE (in_charge),
2181                                          new_spec_types);
2182
2183       new_type = build_method_type_directly (object_type,
2184                                              TREE_TYPE (old_type),
2185                                              new_spec_types);
2186     }
2187   else
2188     new_type = build_function_type (TREE_TYPE (old_type),
2189                                     new_spec_types);
2190   new_type = cp_build_type_attribute_variant (new_type,
2191                                               TYPE_ATTRIBUTES (old_type));
2192   new_type = build_exception_variant (new_type,
2193                                       TYPE_RAISES_EXCEPTIONS (old_type));
2194   TREE_TYPE (decl) = new_type;
2195 }
2196
2197 /* Check to see if the function just declared, as indicated in
2198    DECLARATOR, and in DECL, is a specialization of a function
2199    template.  We may also discover that the declaration is an explicit
2200    instantiation at this point.
2201
2202    Returns DECL, or an equivalent declaration that should be used
2203    instead if all goes well.  Issues an error message if something is
2204    amiss.  Returns error_mark_node if the error is not easily
2205    recoverable.
2206
2207    FLAGS is a bitmask consisting of the following flags:
2208
2209    2: The function has a definition.
2210    4: The function is a friend.
2211
2212    The TEMPLATE_COUNT is the number of references to qualifying
2213    template classes that appeared in the name of the function.  For
2214    example, in
2215
2216      template <class T> struct S { void f(); };
2217      void S<int>::f();
2218
2219    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
2220    classes are not counted in the TEMPLATE_COUNT, so that in
2221
2222      template <class T> struct S {};
2223      template <> struct S<int> { void f(); }
2224      template <> void S<int>::f();
2225
2226    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
2227    invalid; there should be no template <>.)
2228
2229    If the function is a specialization, it is marked as such via
2230    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
2231    is set up correctly, and it is added to the list of specializations
2232    for that template.  */
2233
2234 tree
2235 check_explicit_specialization (tree declarator,
2236                                tree decl,
2237                                int template_count,
2238                                int flags)
2239 {
2240   int have_def = flags & 2;
2241   int is_friend = flags & 4;
2242   int specialization = 0;
2243   int explicit_instantiation = 0;
2244   int member_specialization = 0;
2245   tree ctype = DECL_CLASS_CONTEXT (decl);
2246   tree dname = DECL_NAME (decl);
2247   tmpl_spec_kind tsk;
2248
2249   if (is_friend)
2250     {
2251       if (!processing_specialization)
2252         tsk = tsk_none;
2253       else
2254         tsk = tsk_excessive_parms;
2255     }
2256   else
2257     tsk = current_tmpl_spec_kind (template_count);
2258
2259   switch (tsk)
2260     {
2261     case tsk_none:
2262       if (processing_specialization)
2263         {
2264           specialization = 1;
2265           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2266         }
2267       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2268         {
2269           if (is_friend)
2270             /* This could be something like:
2271
2272                template <class T> void f(T);
2273                class S { friend void f<>(int); }  */
2274             specialization = 1;
2275           else
2276             {
2277               /* This case handles bogus declarations like template <>
2278                  template <class T> void f<int>(); */
2279
2280               error ("template-id %qD in declaration of primary template",
2281                      declarator);
2282               return decl;
2283             }
2284         }
2285       break;
2286
2287     case tsk_invalid_member_spec:
2288       /* The error has already been reported in
2289          check_specialization_scope.  */
2290       return error_mark_node;
2291
2292     case tsk_invalid_expl_inst:
2293       error ("template parameter list used in explicit instantiation");
2294
2295       /* Fall through.  */
2296
2297     case tsk_expl_inst:
2298       if (have_def)
2299         error ("definition provided for explicit instantiation");
2300
2301       explicit_instantiation = 1;
2302       break;
2303
2304     case tsk_excessive_parms:
2305     case tsk_insufficient_parms:
2306       if (tsk == tsk_excessive_parms)
2307         error ("too many template parameter lists in declaration of %qD",
2308                decl);
2309       else if (template_header_count)
2310         error("too few template parameter lists in declaration of %qD", decl);
2311       else
2312         error("explicit specialization of %qD must be introduced by "
2313               "%<template <>%>", decl);
2314
2315       /* Fall through.  */
2316     case tsk_expl_spec:
2317       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
2318       if (ctype)
2319         member_specialization = 1;
2320       else
2321         specialization = 1;
2322       break;
2323
2324     case tsk_template:
2325       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
2326         {
2327           /* This case handles bogus declarations like template <>
2328              template <class T> void f<int>(); */
2329
2330           if (uses_template_parms (declarator))
2331             error ("function template partial specialization %qD "
2332                    "is not allowed", declarator);
2333           else
2334             error ("template-id %qD in declaration of primary template",
2335                    declarator);
2336           return decl;
2337         }
2338
2339       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
2340         /* This is a specialization of a member template, without
2341            specialization the containing class.  Something like:
2342
2343              template <class T> struct S {
2344                template <class U> void f (U);
2345              };
2346              template <> template <class U> void S<int>::f(U) {}
2347
2348            That's a specialization -- but of the entire template.  */
2349         specialization = 1;
2350       break;
2351
2352     default:
2353       gcc_unreachable ();
2354     }
2355
2356   if (specialization || member_specialization)
2357     {
2358       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
2359       for (; t; t = TREE_CHAIN (t))
2360         if (TREE_PURPOSE (t))
2361           {
2362             permerror (input_location, 
2363                        "default argument specified in explicit specialization");
2364             break;
2365           }
2366     }
2367
2368   if (specialization || member_specialization || explicit_instantiation)
2369     {
2370       tree tmpl = NULL_TREE;
2371       tree targs = NULL_TREE;
2372
2373       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
2374       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
2375         {
2376           tree fns;
2377
2378           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
2379           if (ctype)
2380             fns = dname;
2381           else
2382             {
2383               /* If there is no class context, the explicit instantiation
2384                  must be at namespace scope.  */
2385               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
2386
2387               /* Find the namespace binding, using the declaration
2388                  context.  */
2389               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
2390                                            false, true);
2391               if (fns == error_mark_node || !is_overloaded_fn (fns))
2392                 {
2393                   error ("%qD is not a template function", dname);
2394                   fns = error_mark_node;
2395                 }
2396               else
2397                 {
2398                   tree fn = OVL_CURRENT (fns);
2399                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
2400                                                 CP_DECL_CONTEXT (fn)))
2401                     error ("%qD is not declared in %qD",
2402                            decl, current_namespace);
2403                 }
2404             }
2405
2406           declarator = lookup_template_function (fns, NULL_TREE);
2407         }
2408
2409       if (declarator == error_mark_node)
2410         return error_mark_node;
2411
2412       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2413         {
2414           if (!explicit_instantiation)
2415             /* A specialization in class scope.  This is invalid,
2416                but the error will already have been flagged by
2417                check_specialization_scope.  */
2418             return error_mark_node;
2419           else
2420             {
2421               /* It's not valid to write an explicit instantiation in
2422                  class scope, e.g.:
2423
2424                    class C { template void f(); }
2425
2426                    This case is caught by the parser.  However, on
2427                    something like:
2428
2429                    template class C { void f(); };
2430
2431                    (which is invalid) we can get here.  The error will be
2432                    issued later.  */
2433               ;
2434             }
2435
2436           return decl;
2437         }
2438       else if (ctype != NULL_TREE
2439                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2440                    IDENTIFIER_NODE))
2441         {
2442           /* Find the list of functions in ctype that have the same
2443              name as the declared function.  */
2444           tree name = TREE_OPERAND (declarator, 0);
2445           tree fns = NULL_TREE;
2446           int idx;
2447
2448           if (constructor_name_p (name, ctype))
2449             {
2450               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2451
2452               if (is_constructor ? !TYPE_HAS_USER_CONSTRUCTOR (ctype)
2453                   : !CLASSTYPE_DESTRUCTORS (ctype))
2454                 {
2455                   /* From [temp.expl.spec]:
2456
2457                      If such an explicit specialization for the member
2458                      of a class template names an implicitly-declared
2459                      special member function (clause _special_), the
2460                      program is ill-formed.
2461
2462                      Similar language is found in [temp.explicit].  */
2463                   error ("specialization of implicitly-declared special member function");
2464                   return error_mark_node;
2465                 }
2466
2467               name = is_constructor ? ctor_identifier : dtor_identifier;
2468             }
2469
2470           if (!DECL_CONV_FN_P (decl))
2471             {
2472               idx = lookup_fnfields_1 (ctype, name);
2473               if (idx >= 0)
2474                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2475             }
2476           else
2477             {
2478               VEC(tree,gc) *methods;
2479               tree ovl;
2480
2481               /* For a type-conversion operator, we cannot do a
2482                  name-based lookup.  We might be looking for `operator
2483                  int' which will be a specialization of `operator T'.
2484                  So, we find *all* the conversion operators, and then
2485                  select from them.  */
2486               fns = NULL_TREE;
2487
2488               methods = CLASSTYPE_METHOD_VEC (ctype);
2489               if (methods)
2490                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2491                      VEC_iterate (tree, methods, idx, ovl);
2492                      ++idx)
2493                   {
2494                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2495                       /* There are no more conversion functions.  */
2496                       break;
2497
2498                     /* Glue all these conversion functions together
2499                        with those we already have.  */
2500                     for (; ovl; ovl = OVL_NEXT (ovl))
2501                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2502                   }
2503             }
2504
2505           if (fns == NULL_TREE)
2506             {
2507               error ("no member function %qD declared in %qT", name, ctype);
2508               return error_mark_node;
2509             }
2510           else
2511             TREE_OPERAND (declarator, 0) = fns;
2512         }
2513
2514       /* Figure out what exactly is being specialized at this point.
2515          Note that for an explicit instantiation, even one for a
2516          member function, we cannot tell apriori whether the
2517          instantiation is for a member template, or just a member
2518          function of a template class.  Even if a member template is
2519          being instantiated, the member template arguments may be
2520          elided if they can be deduced from the rest of the
2521          declaration.  */
2522       tmpl = determine_specialization (declarator, decl,
2523                                        &targs,
2524                                        member_specialization,
2525                                        template_count,
2526                                        tsk);
2527
2528       if (!tmpl || tmpl == error_mark_node)
2529         /* We couldn't figure out what this declaration was
2530            specializing.  */
2531         return error_mark_node;
2532       else
2533         {
2534           tree gen_tmpl = most_general_template (tmpl);
2535
2536           if (explicit_instantiation)
2537             {
2538               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2539                  is done by do_decl_instantiation later.  */
2540
2541               int arg_depth = TMPL_ARGS_DEPTH (targs);
2542               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2543
2544               if (arg_depth > parm_depth)
2545                 {
2546                   /* If TMPL is not the most general template (for
2547                      example, if TMPL is a friend template that is
2548                      injected into namespace scope), then there will
2549                      be too many levels of TARGS.  Remove some of them
2550                      here.  */
2551                   int i;
2552                   tree new_targs;
2553
2554                   new_targs = make_tree_vec (parm_depth);
2555                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2556                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2557                       = TREE_VEC_ELT (targs, i);
2558                   targs = new_targs;
2559                 }
2560
2561               return instantiate_template (tmpl, targs, tf_error);
2562             }
2563
2564           /* If we thought that the DECL was a member function, but it
2565              turns out to be specializing a static member function,
2566              make DECL a static member function as well.  */
2567           if (DECL_STATIC_FUNCTION_P (tmpl)
2568               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2569             revert_static_member_fn (decl);
2570
2571           /* If this is a specialization of a member template of a
2572              template class, we want to return the TEMPLATE_DECL, not
2573              the specialization of it.  */
2574           if (tsk == tsk_template)
2575             {
2576               tree result = DECL_TEMPLATE_RESULT (tmpl);
2577               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2578               DECL_INITIAL (result) = NULL_TREE;
2579               if (have_def)
2580                 {
2581                   tree parm;
2582                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2583                   DECL_SOURCE_LOCATION (result)
2584                     = DECL_SOURCE_LOCATION (decl);
2585                   /* We want to use the argument list specified in the
2586                      definition, not in the original declaration.  */
2587                   DECL_ARGUMENTS (result) = DECL_ARGUMENTS (decl);
2588                   for (parm = DECL_ARGUMENTS (result); parm;
2589                        parm = DECL_CHAIN (parm))
2590                     DECL_CONTEXT (parm) = result;
2591                 }
2592               return register_specialization (tmpl, gen_tmpl, targs,
2593                                               is_friend, 0);
2594             }
2595
2596           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2597           DECL_TEMPLATE_INFO (decl) = build_template_info (tmpl, targs);
2598
2599           /* Inherit default function arguments from the template
2600              DECL is specializing.  */
2601           copy_default_args_to_explicit_spec (decl);
2602
2603           /* This specialization has the same protection as the
2604              template it specializes.  */
2605           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2606           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2607
2608           /* 7.1.1-1 [dcl.stc]
2609
2610              A storage-class-specifier shall not be specified in an
2611              explicit specialization...
2612
2613              The parser rejects these, so unless action is taken here,
2614              explicit function specializations will always appear with
2615              global linkage.
2616
2617              The action recommended by the C++ CWG in response to C++
2618              defect report 605 is to make the storage class and linkage
2619              of the explicit specialization match the templated function:
2620
2621              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2622            */
2623           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2624             {
2625               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2626               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2627
2628               /* This specialization has the same linkage and visibility as
2629                  the function template it specializes.  */
2630               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2631               if (! TREE_PUBLIC (decl))
2632                 {
2633                   DECL_INTERFACE_KNOWN (decl) = 1;
2634                   DECL_NOT_REALLY_EXTERN (decl) = 1;
2635                 }
2636               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2637               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2638                 {
2639                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2640                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2641                 }
2642             }
2643
2644           /* If DECL is a friend declaration, declared using an
2645              unqualified name, the namespace associated with DECL may
2646              have been set incorrectly.  For example, in:
2647
2648                template <typename T> void f(T);
2649                namespace N {
2650                  struct S { friend void f<int>(int); }
2651                }
2652
2653              we will have set the DECL_CONTEXT for the friend
2654              declaration to N, rather than to the global namespace.  */
2655           if (DECL_NAMESPACE_SCOPE_P (decl))
2656             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2657
2658           if (is_friend && !have_def)
2659             /* This is not really a declaration of a specialization.
2660                It's just the name of an instantiation.  But, it's not
2661                a request for an instantiation, either.  */
2662             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2663           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2664             /* This is indeed a specialization.  In case of constructors
2665                and destructors, we need in-charge and not-in-charge
2666                versions in V3 ABI.  */
2667             clone_function_decl (decl, /*update_method_vec_p=*/0);
2668
2669           /* Register this specialization so that we can find it
2670              again.  */
2671           decl = register_specialization (decl, gen_tmpl, targs, is_friend, 0);
2672         }
2673     }
2674
2675   return decl;
2676 }
2677
2678 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2679    parameters.  These are represented in the same format used for
2680    DECL_TEMPLATE_PARMS.  */
2681
2682 int
2683 comp_template_parms (const_tree parms1, const_tree parms2)
2684 {
2685   const_tree p1;
2686   const_tree p2;
2687
2688   if (parms1 == parms2)
2689     return 1;
2690
2691   for (p1 = parms1, p2 = parms2;
2692        p1 != NULL_TREE && p2 != NULL_TREE;
2693        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2694     {
2695       tree t1 = TREE_VALUE (p1);
2696       tree t2 = TREE_VALUE (p2);
2697       int i;
2698
2699       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2700       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2701
2702       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2703         return 0;
2704
2705       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2706         {
2707           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2708           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2709
2710           /* If either of the template parameters are invalid, assume
2711              they match for the sake of error recovery. */
2712           if (parm1 == error_mark_node || parm2 == error_mark_node)
2713             return 1;
2714
2715           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2716             return 0;
2717
2718           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2719               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2720                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2721             continue;
2722           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2723             return 0;
2724         }
2725     }
2726
2727   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2728     /* One set of parameters has more parameters lists than the
2729        other.  */
2730     return 0;
2731
2732   return 1;
2733 }
2734
2735 /* Determine whether PARM is a parameter pack.  */
2736
2737 bool 
2738 template_parameter_pack_p (const_tree parm)
2739 {
2740   /* Determine if we have a non-type template parameter pack.  */
2741   if (TREE_CODE (parm) == PARM_DECL)
2742     return (DECL_TEMPLATE_PARM_P (parm) 
2743             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2744
2745   /* If this is a list of template parameters, we could get a
2746      TYPE_DECL or a TEMPLATE_DECL.  */ 
2747   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2748     parm = TREE_TYPE (parm);
2749
2750   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2751            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2752           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2753 }
2754
2755 /* Determine if T is a function parameter pack.  */
2756
2757 bool
2758 function_parameter_pack_p (const_tree t)
2759 {
2760   if (t && TREE_CODE (t) == PARM_DECL)
2761     return FUNCTION_PARAMETER_PACK_P (t);
2762   return false;
2763 }
2764
2765 /* Return the function template declaration of PRIMARY_FUNC_TMPL_INST.
2766    PRIMARY_FUNC_TMPL_INST is a primary function template instantiation.  */
2767
2768 tree
2769 get_function_template_decl (const_tree primary_func_tmpl_inst)
2770 {
2771   if (! primary_func_tmpl_inst
2772       || TREE_CODE (primary_func_tmpl_inst) != FUNCTION_DECL
2773       || ! primary_template_instantiation_p (primary_func_tmpl_inst))
2774     return NULL;
2775
2776   return DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (primary_func_tmpl_inst));
2777 }
2778
2779 /* Return true iff the function parameter PARAM_DECL was expanded
2780    from the function parameter pack PACK.  */
2781
2782 bool
2783 function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
2784 {
2785   if (DECL_ARTIFICIAL (param_decl)
2786       || !function_parameter_pack_p (pack))
2787     return false;
2788
2789   /* The parameter pack and its pack arguments have the same
2790      DECL_PARM_INDEX.  */
2791   return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
2792 }
2793
2794 /* Determine whether ARGS describes a variadic template args list,
2795    i.e., one that is terminated by a template argument pack.  */
2796
2797 static bool 
2798 template_args_variadic_p (tree args)
2799 {
2800   int nargs;
2801   tree last_parm;
2802
2803   if (args == NULL_TREE)
2804     return false;
2805
2806   args = INNERMOST_TEMPLATE_ARGS (args);
2807   nargs = TREE_VEC_LENGTH (args);
2808
2809   if (nargs == 0)
2810     return false;
2811
2812   last_parm = TREE_VEC_ELT (args, nargs - 1);
2813
2814   return ARGUMENT_PACK_P (last_parm);
2815 }
2816
2817 /* Generate a new name for the parameter pack name NAME (an
2818    IDENTIFIER_NODE) that incorporates its */
2819
2820 static tree
2821 make_ith_pack_parameter_name (tree name, int i)
2822 {
2823   /* Munge the name to include the parameter index.  */
2824 #define NUMBUF_LEN 128
2825   char numbuf[NUMBUF_LEN];
2826   char* newname;
2827   int newname_len;
2828
2829   snprintf (numbuf, NUMBUF_LEN, "%i", i);
2830   newname_len = IDENTIFIER_LENGTH (name)
2831                 + strlen (numbuf) + 2;
2832   newname = (char*)alloca (newname_len);
2833   snprintf (newname, newname_len,
2834             "%s#%i", IDENTIFIER_POINTER (name), i);
2835   return get_identifier (newname);
2836 }
2837
2838 /* Return true if T is a primary function
2839    or class template instantiation.  */
2840
2841 bool
2842 primary_template_instantiation_p (const_tree t)
2843 {
2844   if (!t)
2845     return false;
2846
2847   if (TREE_CODE (t) == FUNCTION_DECL)
2848     return DECL_LANG_SPECIFIC (t)
2849            && DECL_TEMPLATE_INSTANTIATION (t)
2850            && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (t));
2851   else if (CLASS_TYPE_P (t))
2852     return CLASSTYPE_TEMPLATE_INSTANTIATION (t)
2853            && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t));
2854   return false;
2855 }
2856
2857 /* Return true if PARM is a template template parameter.  */
2858
2859 bool
2860 template_template_parameter_p (const_tree parm)
2861 {
2862   return DECL_TEMPLATE_TEMPLATE_PARM_P (parm);
2863 }
2864
2865 /* Return the template parameters of T if T is a
2866    primary template instantiation, NULL otherwise.  */
2867
2868 tree
2869 get_primary_template_innermost_parameters (const_tree t)
2870 {
2871   tree parms = NULL, template_info = NULL;
2872
2873   if ((template_info = get_template_info (t))
2874       && primary_template_instantiation_p (t))
2875     parms = INNERMOST_TEMPLATE_PARMS
2876         (DECL_TEMPLATE_PARMS (TI_TEMPLATE (template_info)));
2877
2878   return parms;
2879 }
2880
2881 /* Return the template parameters of the LEVELth level from the full list
2882    of template parameters PARMS.  */
2883
2884 tree
2885 get_template_parms_at_level (tree parms, int level)
2886 {
2887   tree p;
2888   if (!parms
2889       || TREE_CODE (parms) != TREE_LIST
2890       || level > TMPL_PARMS_DEPTH (parms))
2891     return NULL_TREE;
2892
2893   for (p = parms; p; p = TREE_CHAIN (p))
2894     if (TMPL_PARMS_DEPTH (p) == level)
2895       return p;
2896
2897   return NULL_TREE;
2898 }
2899
2900 /* Returns the template arguments of T if T is a template instantiation,
2901    NULL otherwise.  */
2902
2903 tree
2904 get_template_innermost_arguments (const_tree t)
2905 {
2906   tree args = NULL, template_info = NULL;
2907
2908   if ((template_info = get_template_info (t))
2909       && TI_ARGS (template_info))
2910     args = INNERMOST_TEMPLATE_ARGS (TI_ARGS (template_info));
2911
2912   return args;
2913 }
2914
2915 /* Return the argument pack elements of T if T is a template argument pack,
2916    NULL otherwise.  */
2917
2918 tree
2919 get_template_argument_pack_elems (const_tree t)
2920 {
2921   if (TREE_CODE (t) != TYPE_ARGUMENT_PACK
2922       && TREE_CODE (t) != NONTYPE_ARGUMENT_PACK)
2923     return NULL;
2924
2925   return ARGUMENT_PACK_ARGS (t);
2926 }
2927
2928 /* Structure used to track the progress of find_parameter_packs_r.  */
2929 struct find_parameter_pack_data 
2930 {
2931   /* TREE_LIST that will contain all of the parameter packs found by
2932      the traversal.  */
2933   tree* parameter_packs;
2934
2935   /* Set of AST nodes that have been visited by the traversal.  */
2936   struct pointer_set_t *visited;
2937 };
2938
2939 /* Identifies all of the argument packs that occur in a template
2940    argument and appends them to the TREE_LIST inside DATA, which is a
2941    find_parameter_pack_data structure. This is a subroutine of
2942    make_pack_expansion and uses_parameter_packs.  */
2943 static tree
2944 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2945 {
2946   tree t = *tp;
2947   struct find_parameter_pack_data* ppd = 
2948     (struct find_parameter_pack_data*)data;
2949   bool parameter_pack_p = false;
2950
2951   /* Identify whether this is a parameter pack or not.  */
2952   switch (TREE_CODE (t))
2953     {
2954     case TEMPLATE_PARM_INDEX:
2955       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2956         parameter_pack_p = true;
2957       break;
2958
2959     case TEMPLATE_TYPE_PARM:
2960     case TEMPLATE_TEMPLATE_PARM:
2961       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2962         parameter_pack_p = true;
2963       break;
2964
2965     case PARM_DECL:
2966       if (FUNCTION_PARAMETER_PACK_P (t))
2967         {
2968           /* We don't want to walk into the type of a PARM_DECL,
2969              because we don't want to see the type parameter pack.  */
2970           *walk_subtrees = 0;
2971           parameter_pack_p = true;
2972         }
2973       break;
2974
2975     default:
2976       /* Not a parameter pack.  */
2977       break;
2978     }
2979
2980   if (parameter_pack_p)
2981     {
2982       /* Add this parameter pack to the list.  */
2983       *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2984     }
2985
2986   if (TYPE_P (t))
2987     cp_walk_tree (&TYPE_CONTEXT (t), 
2988                   &find_parameter_packs_r, ppd, ppd->visited);
2989
2990   /* This switch statement will return immediately if we don't find a
2991      parameter pack.  */
2992   switch (TREE_CODE (t)) 
2993     {
2994     case TEMPLATE_PARM_INDEX:
2995       return NULL_TREE;
2996
2997     case BOUND_TEMPLATE_TEMPLATE_PARM:
2998       /* Check the template itself.  */
2999       cp_walk_tree (&TREE_TYPE (TYPE_TI_TEMPLATE (t)), 
3000                     &find_parameter_packs_r, ppd, ppd->visited);
3001       /* Check the template arguments.  */
3002       cp_walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
3003                     ppd->visited);
3004       *walk_subtrees = 0;
3005       return NULL_TREE;
3006
3007     case TEMPLATE_TYPE_PARM:
3008     case TEMPLATE_TEMPLATE_PARM:
3009       return NULL_TREE;
3010
3011     case PARM_DECL:
3012       return NULL_TREE;
3013
3014     case RECORD_TYPE:
3015       if (TYPE_PTRMEMFUNC_P (t))
3016         return NULL_TREE;
3017       /* Fall through.  */
3018
3019     case UNION_TYPE:
3020     case ENUMERAL_TYPE:
3021       if (TYPE_TEMPLATE_INFO (t))
3022         cp_walk_tree (&TI_ARGS (TYPE_TEMPLATE_INFO (t)),
3023                       &find_parameter_packs_r, ppd, ppd->visited);
3024
3025       *walk_subtrees = 0;
3026       return NULL_TREE;
3027
3028     case CONSTRUCTOR:
3029     case TEMPLATE_DECL:
3030       cp_walk_tree (&TREE_TYPE (t),
3031                     &find_parameter_packs_r, ppd, ppd->visited);
3032       return NULL_TREE;
3033  
3034     case TYPENAME_TYPE:
3035       cp_walk_tree (&TYPENAME_TYPE_FULLNAME (t), &find_parameter_packs_r,
3036                    ppd, ppd->visited);
3037       *walk_subtrees = 0;
3038       return NULL_TREE;
3039       
3040     case TYPE_PACK_EXPANSION:
3041     case EXPR_PACK_EXPANSION:
3042       *walk_subtrees = 0;
3043       return NULL_TREE;
3044
3045     case INTEGER_TYPE:
3046       cp_walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
3047                     ppd, ppd->visited);
3048       *walk_subtrees = 0;
3049       return NULL_TREE;
3050
3051     case IDENTIFIER_NODE:
3052       cp_walk_tree (&TREE_TYPE (t), &find_parameter_packs_r, ppd, 
3053                     ppd->visited);
3054       *walk_subtrees = 0;
3055       return NULL_TREE;
3056
3057     default:
3058       return NULL_TREE;
3059     }
3060
3061   return NULL_TREE;
3062 }
3063
3064 /* Determines if the expression or type T uses any parameter packs.  */
3065 bool
3066 uses_parameter_packs (tree t)
3067 {
3068   tree parameter_packs = NULL_TREE;
3069   struct find_parameter_pack_data ppd;
3070   ppd.parameter_packs = &parameter_packs;
3071   ppd.visited = pointer_set_create ();
3072   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3073   pointer_set_destroy (ppd.visited);
3074   return parameter_packs != NULL_TREE;
3075 }
3076
3077 /* Turn ARG, which may be an expression, type, or a TREE_LIST
3078    representation a base-class initializer into a parameter pack
3079    expansion. If all goes well, the resulting node will be an
3080    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
3081    respectively.  */
3082 tree 
3083 make_pack_expansion (tree arg)
3084 {
3085   tree result;
3086   tree parameter_packs = NULL_TREE;
3087   bool for_types = false;
3088   struct find_parameter_pack_data ppd;
3089
3090   if (!arg || arg == error_mark_node)
3091     return arg;
3092
3093   if (TREE_CODE (arg) == TREE_LIST)
3094     {
3095       /* The only time we will see a TREE_LIST here is for a base
3096          class initializer.  In this case, the TREE_PURPOSE will be a
3097          _TYPE node (representing the base class expansion we're
3098          initializing) and the TREE_VALUE will be a TREE_LIST
3099          containing the initialization arguments. 
3100
3101          The resulting expansion looks somewhat different from most
3102          expansions. Rather than returning just one _EXPANSION, we
3103          return a TREE_LIST whose TREE_PURPOSE is a
3104          TYPE_PACK_EXPANSION containing the bases that will be
3105          initialized.  The TREE_VALUE will be identical to the
3106          original TREE_VALUE, which is a list of arguments that will
3107          be passed to each base.  We do not introduce any new pack
3108          expansion nodes into the TREE_VALUE (although it is possible
3109          that some already exist), because the TREE_PURPOSE and
3110          TREE_VALUE all need to be expanded together with the same
3111          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
3112          resulting TREE_PURPOSE will mention the parameter packs in
3113          both the bases and the arguments to the bases.  */
3114       tree purpose;
3115       tree value;
3116       tree parameter_packs = NULL_TREE;
3117
3118       /* Determine which parameter packs will be used by the base
3119          class expansion.  */
3120       ppd.visited = pointer_set_create ();
3121       ppd.parameter_packs = &parameter_packs;
3122       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
3123                     &ppd, ppd.visited);
3124
3125       if (parameter_packs == NULL_TREE)
3126         {
3127           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
3128           pointer_set_destroy (ppd.visited);
3129           return error_mark_node;
3130         }
3131
3132       if (TREE_VALUE (arg) != void_type_node)
3133         {
3134           /* Collect the sets of parameter packs used in each of the
3135              initialization arguments.  */
3136           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
3137             {
3138               /* Determine which parameter packs will be expanded in this
3139                  argument.  */
3140               cp_walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
3141                             &ppd, ppd.visited);
3142             }
3143         }
3144
3145       pointer_set_destroy (ppd.visited);
3146
3147       /* Create the pack expansion type for the base type.  */
3148       purpose = cxx_make_type (TYPE_PACK_EXPANSION);
3149       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
3150       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
3151
3152       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3153          they will rarely be compared to anything.  */
3154       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
3155
3156       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
3157     }
3158
3159   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
3160     for_types = true;
3161
3162   /* Build the PACK_EXPANSION_* node.  */
3163   result = for_types
3164      ? cxx_make_type (TYPE_PACK_EXPANSION)
3165      : make_node (EXPR_PACK_EXPANSION);
3166   SET_PACK_EXPANSION_PATTERN (result, arg);
3167   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
3168     {
3169       /* Propagate type and const-expression information.  */
3170       TREE_TYPE (result) = TREE_TYPE (arg);
3171       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
3172     }
3173   else
3174     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
3175        they will rarely be compared to anything.  */
3176     SET_TYPE_STRUCTURAL_EQUALITY (result);
3177
3178   /* Determine which parameter packs will be expanded.  */
3179   ppd.parameter_packs = &parameter_packs;
3180   ppd.visited = pointer_set_create ();
3181   cp_walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
3182   pointer_set_destroy (ppd.visited);
3183
3184   /* Make sure we found some parameter packs.  */
3185   if (parameter_packs == NULL_TREE)
3186     {
3187       if (TYPE_P (arg))
3188         error ("expansion pattern %<%T%> contains no argument packs", arg);
3189       else
3190         error ("expansion pattern %<%E%> contains no argument packs", arg);
3191       return error_mark_node;
3192     }
3193   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
3194
3195   return result;
3196 }
3197
3198 /* Checks T for any "bare" parameter packs, which have not yet been
3199    expanded, and issues an error if any are found. This operation can
3200    only be done on full expressions or types (e.g., an expression
3201    statement, "if" condition, etc.), because we could have expressions like:
3202
3203      foo(f(g(h(args)))...)
3204
3205    where "args" is a parameter pack. check_for_bare_parameter_packs
3206    should not be called for the subexpressions args, h(args),
3207    g(h(args)), or f(g(h(args))), because we would produce erroneous
3208    error messages. 
3209
3210    Returns TRUE and emits an error if there were bare parameter packs,
3211    returns FALSE otherwise.  */
3212 bool 
3213 check_for_bare_parameter_packs (tree t)
3214 {
3215   tree parameter_packs = NULL_TREE;
3216   struct find_parameter_pack_data ppd;
3217
3218   if (!processing_template_decl || !t || t == error_mark_node)
3219     return false;
3220
3221   if (TREE_CODE (t) == TYPE_DECL)
3222     t = TREE_TYPE (t);
3223
3224   ppd.parameter_packs = &parameter_packs;
3225   ppd.visited = pointer_set_create ();
3226   cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
3227   pointer_set_destroy (ppd.visited);
3228
3229   if (parameter_packs) 
3230     {
3231       error ("parameter packs not expanded with %<...%>:");
3232       while (parameter_packs)
3233         {
3234           tree pack = TREE_VALUE (parameter_packs);
3235           tree name = NULL_TREE;
3236
3237           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
3238               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
3239             name = TYPE_NAME (pack);
3240           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
3241             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
3242           else
3243             name = DECL_NAME (pack);
3244
3245           if (name)
3246             inform (input_location, "        %qD", name);
3247           else
3248             inform (input_location, "        <anonymous>");
3249
3250           parameter_packs = TREE_CHAIN (parameter_packs);
3251         }
3252
3253       return true;
3254     }
3255
3256   return false;
3257 }
3258
3259 /* Expand any parameter packs that occur in the template arguments in
3260    ARGS.  */
3261 tree
3262 expand_template_argument_pack (tree args)
3263 {
3264   tree result_args = NULL_TREE;
3265   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
3266   int num_result_args = -1;
3267   int non_default_args_count = -1;
3268
3269   /* First, determine if we need to expand anything, and the number of
3270      slots we'll need.  */
3271   for (in_arg = 0; in_arg < nargs; ++in_arg)
3272     {
3273       tree arg = TREE_VEC_ELT (args, in_arg);
3274       if (arg == NULL_TREE)
3275         return args;
3276       if (ARGUMENT_PACK_P (arg))
3277         {
3278           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
3279           if (num_result_args < 0)
3280             num_result_args = in_arg + num_packed;
3281           else
3282             num_result_args += num_packed;
3283         }
3284       else
3285         {
3286           if (num_result_args >= 0)
3287             num_result_args++;
3288         }
3289     }
3290
3291   /* If no expansion is necessary, we're done.  */
3292   if (num_result_args < 0)
3293     return args;
3294
3295   /* Expand arguments.  */
3296   result_args = make_tree_vec (num_result_args);
3297   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (args))
3298     non_default_args_count =
3299       GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (args);
3300   for (in_arg = 0; in_arg < nargs; ++in_arg)
3301     {
3302       tree arg = TREE_VEC_ELT (args, in_arg);
3303       if (ARGUMENT_PACK_P (arg))
3304         {
3305           tree packed = ARGUMENT_PACK_ARGS (arg);
3306           int i, num_packed = TREE_VEC_LENGTH (packed);
3307           for (i = 0; i < num_packed; ++i, ++out_arg)
3308             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
3309           if (non_default_args_count > 0)
3310             non_default_args_count += num_packed;
3311         }
3312       else
3313         {
3314           TREE_VEC_ELT (result_args, out_arg) = arg;
3315           ++out_arg;
3316         }
3317     }
3318   if (non_default_args_count >= 0)
3319     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (result_args, non_default_args_count);
3320   return result_args;
3321 }
3322
3323 /* Checks if DECL shadows a template parameter.
3324
3325    [temp.local]: A template-parameter shall not be redeclared within its
3326    scope (including nested scopes).
3327
3328    Emits an error and returns TRUE if the DECL shadows a parameter,
3329    returns FALSE otherwise.  */
3330
3331 bool
3332 check_template_shadow (tree decl)
3333 {
3334   tree olddecl;
3335
3336   /* If we're not in a template, we can't possibly shadow a template
3337      parameter.  */
3338   if (!current_template_parms)
3339     return true;
3340
3341   /* Figure out what we're shadowing.  */
3342   if (TREE_CODE (decl) == OVERLOAD)
3343     decl = OVL_CURRENT (decl);
3344   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
3345
3346   /* If there's no previous binding for this name, we're not shadowing
3347      anything, let alone a template parameter.  */
3348   if (!olddecl)
3349     return true;
3350
3351   /* If we're not shadowing a template parameter, we're done.  Note
3352      that OLDDECL might be an OVERLOAD (or perhaps even an
3353      ERROR_MARK), so we can't just blithely assume it to be a _DECL
3354      node.  */
3355   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
3356     return true;
3357
3358   /* We check for decl != olddecl to avoid bogus errors for using a
3359      name inside a class.  We check TPFI to avoid duplicate errors for
3360      inline member templates.  */
3361   if (decl == olddecl
3362       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
3363     return true;
3364
3365   error ("declaration of %q+#D", decl);
3366   error (" shadows template parm %q+#D", olddecl);
3367   return false;
3368 }
3369
3370 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
3371    ORIG_LEVEL, DECL, and TYPE.  NUM_SIBLINGS is the total number of
3372    template parameters.  */
3373
3374 static tree
3375 build_template_parm_index (int index,
3376                            int level,
3377                            int orig_level,
3378                            int num_siblings,
3379                            tree decl,
3380                            tree type)
3381 {
3382   tree t = make_node (TEMPLATE_PARM_INDEX);
3383   TEMPLATE_PARM_IDX (t) = index;
3384   TEMPLATE_PARM_LEVEL (t) = level;
3385   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
3386   TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
3387   TEMPLATE_PARM_DECL (t) = decl;
3388   TREE_TYPE (t) = type;
3389   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
3390   TREE_READONLY (t) = TREE_READONLY (decl);
3391
3392   return t;
3393 }
3394
3395 /* Find the canonical type parameter for the given template type
3396    parameter.  Returns the canonical type parameter, which may be TYPE
3397    if no such parameter existed.  */
3398
3399 static tree
3400 canonical_type_parameter (tree type)
3401 {
3402   tree list;
3403   int idx = TEMPLATE_TYPE_IDX (type);
3404   if (!canonical_template_parms)
3405     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
3406
3407   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
3408     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
3409
3410   list = VEC_index (tree, canonical_template_parms, idx);
3411   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
3412     list = TREE_CHAIN (list);
3413
3414   if (list)
3415     return TREE_VALUE (list);
3416   else
3417     {
3418       VEC_replace(tree, canonical_template_parms, idx,
3419                   tree_cons (NULL_TREE, type, 
3420                              VEC_index (tree, canonical_template_parms, idx)));
3421       return type;
3422     }
3423 }
3424
3425 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
3426    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
3427    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
3428    new one is created.  */
3429
3430 static tree
3431 reduce_template_parm_level (tree index, tree type, int levels, tree args,
3432                             tsubst_flags_t complain)
3433 {
3434   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
3435       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
3436           != TEMPLATE_PARM_LEVEL (index) - levels)
3437       || !same_type_p (type, TREE_TYPE (TEMPLATE_PARM_DESCENDANTS (index))))
3438     {
3439       tree orig_decl = TEMPLATE_PARM_DECL (index);
3440       tree decl, t;
3441
3442       decl = build_decl (DECL_SOURCE_LOCATION (orig_decl),
3443                          TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
3444       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
3445       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
3446       DECL_ARTIFICIAL (decl) = 1;
3447       SET_DECL_TEMPLATE_PARM_P (decl);
3448
3449       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
3450                                      TEMPLATE_PARM_LEVEL (index) - levels,
3451                                      TEMPLATE_PARM_ORIG_LEVEL (index),
3452                                      TEMPLATE_PARM_NUM_SIBLINGS (index),
3453                                      decl, type);
3454       TEMPLATE_PARM_DESCENDANTS (index) = t;
3455       TEMPLATE_PARM_PARAMETER_PACK (t) 
3456         = TEMPLATE_PARM_PARAMETER_PACK (index);
3457
3458         /* Template template parameters need this.  */
3459       if (TREE_CODE (decl) == TEMPLATE_DECL)
3460         DECL_TEMPLATE_PARMS (decl) = tsubst_template_parms
3461           (DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index)),
3462            args, complain);
3463     }
3464
3465   return TEMPLATE_PARM_DESCENDANTS (index);
3466 }
3467
3468 /* Process information from new template parameter PARM and append it
3469    to the LIST being built.  This new parameter is a non-type
3470    parameter iff IS_NON_TYPE is true. This new parameter is a
3471    parameter pack iff IS_PARAMETER_PACK is true.  The location of PARM
3472    is in PARM_LOC. NUM_TEMPLATE_PARMS is the size of the template
3473    parameter list PARM belongs to. This is used used to create a
3474    proper canonical type for the type of PARM that is to be created,
3475    iff PARM is a type.  If the size is not known, this parameter shall
3476    be set to 0.  */
3477
3478 tree
3479 process_template_parm (tree list, location_t parm_loc, tree parm,
3480                        bool is_non_type, bool is_parameter_pack,
3481                        unsigned num_template_parms)
3482 {
3483   tree decl = 0;
3484   tree defval;
3485   tree err_parm_list;
3486   int idx = 0;
3487
3488   gcc_assert (TREE_CODE (parm) == TREE_LIST);
3489   defval = TREE_PURPOSE (parm);
3490
3491   if (list)
3492     {
3493       tree p = tree_last (list);
3494
3495       if (p && TREE_VALUE (p) != error_mark_node)
3496         {
3497           p = TREE_VALUE (p);
3498           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
3499             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
3500           else
3501             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
3502         }
3503
3504       ++idx;
3505     }
3506   else
3507     idx = 0;
3508
3509   if (is_non_type)
3510     {
3511       parm = TREE_VALUE (parm);
3512
3513       SET_DECL_TEMPLATE_PARM_P (parm);
3514
3515       if (TREE_TYPE (parm) == error_mark_node)
3516         {
3517           err_parm_list = build_tree_list (defval, parm);
3518           TREE_VALUE (err_parm_list) = error_mark_node;
3519            return chainon (list, err_parm_list);
3520         }
3521       else
3522       {
3523         /* [temp.param]
3524
3525            The top-level cv-qualifiers on the template-parameter are
3526            ignored when determining its type.  */
3527         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
3528         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
3529           {
3530             err_parm_list = build_tree_list (defval, parm);
3531             TREE_VALUE (err_parm_list) = error_mark_node;
3532              return chainon (list, err_parm_list);
3533           }
3534
3535         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
3536           {
3537             /* This template parameter is not a parameter pack, but it
3538                should be. Complain about "bare" parameter packs.  */
3539             check_for_bare_parameter_packs (TREE_TYPE (parm));
3540             
3541             /* Recover by calling this a parameter pack.  */
3542             is_parameter_pack = true;
3543           }
3544       }
3545
3546       /* A template parameter is not modifiable.  */
3547       TREE_CONSTANT (parm) = 1;
3548       TREE_READONLY (parm) = 1;
3549       decl = build_decl (parm_loc,
3550                          CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
3551       TREE_CONSTANT (decl) = 1;
3552       TREE_READONLY (decl) = 1;
3553       DECL_INITIAL (parm) = DECL_INITIAL (decl)
3554         = build_template_parm_index (idx, processing_template_decl,
3555                                      processing_template_decl,
3556                                      num_template_parms,
3557                                      decl, TREE_TYPE (parm));
3558
3559       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
3560         = is_parameter_pack;
3561     }
3562   else
3563     {
3564       tree t;
3565       parm = TREE_VALUE (TREE_VALUE (parm));
3566
3567       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
3568         {
3569           t = cxx_make_type (TEMPLATE_TEMPLATE_PARM);
3570           /* This is for distinguishing between real templates and template
3571              template parameters */
3572           TREE_TYPE (parm) = t;
3573           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
3574           decl = parm;
3575         }
3576       else
3577         {
3578           t = cxx_make_type (TEMPLATE_TYPE_PARM);
3579           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
3580           decl = build_decl (parm_loc,
3581                              TYPE_DECL, parm, t);
3582         }
3583
3584       TYPE_NAME (t) = decl;
3585       TYPE_STUB_DECL (t) = decl;
3586       parm = decl;
3587       TEMPLATE_TYPE_PARM_INDEX (t)
3588         = build_template_parm_index (idx, processing_template_decl,
3589                                      processing_template_decl,
3590                                      num_template_parms,
3591                                      decl, TREE_TYPE (parm));
3592       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
3593       TYPE_CANONICAL (t) = canonical_type_parameter (t);
3594     }
3595   DECL_ARTIFICIAL (decl) = 1;
3596   SET_DECL_TEMPLATE_PARM_P (decl);
3597   pushdecl (decl);
3598   parm = build_tree_list (defval, parm);
3599   return chainon (list, parm);
3600 }
3601
3602 /* The end of a template parameter list has been reached.  Process the
3603    tree list into a parameter vector, converting each parameter into a more
3604    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
3605    as PARM_DECLs.  */
3606
3607 tree
3608 end_template_parm_list (tree parms)
3609 {
3610   int nparms;
3611   tree parm, next;
3612   tree saved_parmlist = make_tree_vec (list_length (parms));
3613
3614   current_template_parms
3615     = tree_cons (size_int (processing_template_decl),
3616                  saved_parmlist, current_template_parms);
3617
3618   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3619     {
3620       next = TREE_CHAIN (parm);
3621       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3622       TREE_CHAIN (parm) = NULL_TREE;
3623     }
3624
3625   --processing_template_parmlist;
3626
3627   return saved_parmlist;
3628 }
3629
3630 /* Create a new type almost identical to TYPE but which has the
3631    following differences:
3632
3633      1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
3634      template sibling parameters of T.
3635
3636      2/ T has a new canonical type that matches the new number
3637      of sibling parms.
3638
3639      3/ From now on, T is going to be what lookups referring to the
3640      name of TYPE will return. No lookup should return TYPE anymore.
3641
3642    NUM_PARMS is the new number of sibling parms TYPE belongs to.
3643
3644    This is a subroutine of fixup_template_parms.  */
3645
3646 static tree
3647 fixup_template_type_parm_type (tree type, int num_parms)
3648 {
3649   tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
3650   tree t;
3651   /* This is the decl which name is inserted into the symbol table for
3652      the template parm type. So whenever we lookup the type name, this
3653      is the DECL we get.  */
3654   tree decl;
3655
3656   /* Do not fix up the type twice.  */
3657   if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
3658     return type;
3659
3660   t = copy_type (type);
3661   decl = TYPE_NAME (t);
3662
3663   TYPE_MAIN_VARIANT (t) = t;
3664   TYPE_NEXT_VARIANT (t)= NULL_TREE;
3665   TYPE_POINTER_TO (t) = 0;
3666   TYPE_REFERENCE_TO (t) = 0;
3667
3668   idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
3669                                    TEMPLATE_PARM_LEVEL (orig_idx),
3670                                    TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
3671                                    num_parms,
3672                                    decl, t);
3673   TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
3674   TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
3675   TEMPLATE_TYPE_PARM_INDEX (t) = idx;
3676
3677   TYPE_STUB_DECL (t) = decl;
3678   TEMPLATE_TYPE_DECL (t) = decl;
3679   if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
3680     TREE_TYPE (DECL_TEMPLATE_RESULT  (decl)) = t;
3681
3682   /* Update the type associated to the type name stored in the symbol
3683      table. Now, whenever the type name is looked up, the resulting
3684      type is properly fixed up.  */
3685   TREE_TYPE (decl) = t;
3686
3687   TYPE_CANONICAL (t) = canonical_type_parameter (t);
3688
3689   return t;
3690 }
3691
3692 /* Create and return a new TEMPLATE_PARM_INDEX that is almost
3693    identical to I, but that is fixed up as to:
3694
3695    1/ carry the number of sibling parms (NUM_PARMS) of the template
3696    parm represented by I.
3697
3698    2/ replace all references to template parm types declared before I
3699    (in the same template parm list as I) by references to template
3700    parm types contained in ARGS. ARGS should contain the list of
3701    template parms that have been fixed up so far, in a form suitable
3702    to be passed to tsubst.
3703
3704    This is a subroutine of fixup_template_parms.  */
3705
3706 static tree
3707 fixup_template_parm_index (tree i, tree args, int num_parms)
3708 {
3709   tree index, decl, type;
3710
3711   if (i == NULL_TREE
3712       || TREE_CODE (i) != TEMPLATE_PARM_INDEX
3713       /* Do not fix up the index twice.  */
3714       || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
3715     return i;
3716
3717   decl = TEMPLATE_PARM_DECL (i);
3718   type = TREE_TYPE (decl);
3719
3720   index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
3721                                      TEMPLATE_PARM_LEVEL (i),
3722                                      TEMPLATE_PARM_ORIG_LEVEL (i),
3723                                      num_parms,
3724                                      decl, type);
3725
3726   TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
3727   TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
3728
3729   type = tsubst (type, args, tf_none, NULL_TREE);
3730   
3731   TREE_TYPE (decl) = type;
3732   TREE_TYPE (index) = type;
3733
3734   return index;
3735 }
3736
3737 /* 
3738    This is a subroutine of fixup_template_parms.
3739
3740    It computes the canonical type of the type of the template
3741    parameter PARM_DESC and update all references to that type so that
3742    they use the newly computed canonical type. No access check is
3743    performed during the fixup. PARM_DESC is a TREE_LIST which
3744    TREE_VALUE is the template parameter and its TREE_PURPOSE is the
3745    default argument of the template parm if any. IDX is the index of
3746    the template parameter, starting at 0. NUM_PARMS is the number of
3747    template parameters in the set PARM_DESC belongs to. ARGLIST is a
3748    TREE_VEC containing the full set of template parameters in a form
3749    suitable to be passed to substs functions as their ARGS
3750    argument. This is what current_template_args returns for a given
3751    template. The innermost vector of args in ARGLIST is the set of
3752    template parms that have been fixed up so far. This function adds
3753    the fixed up parameter into that vector.  */
3754
3755 static void
3756 fixup_template_parm (tree parm_desc,
3757                      int idx,
3758                      int num_parms,
3759                      tree arglist)
3760 {
3761   tree parm = TREE_VALUE (parm_desc);
3762   tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
3763
3764   push_deferring_access_checks (dk_no_check);
3765
3766   if (TREE_CODE (parm) == TYPE_DECL)
3767     {
3768       /* PARM is a template type parameter. Fix up its type, add
3769          the fixed-up template parm to the vector of fixed-up
3770          template parms so far, and substitute the fixed-up
3771          template parms into the default argument of this
3772          parameter.  */
3773       tree t =
3774         fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3775       TREE_TYPE (parm) = t;
3776
3777       TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
3778     }
3779   else if (TREE_CODE (parm) == TEMPLATE_DECL)
3780     {
3781       /* PARM is a template template parameter. This is going to
3782          be interesting.  */
3783       tree tparms, targs, innermost_args, t;
3784       int j;
3785
3786       /* First, fix up the parms of the template template parm
3787          because the parms are involved in defining the new canonical
3788          type of the template template parm.  */
3789
3790       /* So we need to substitute the template parm types that have
3791          been fixed up so far into the template parms of this template
3792          template parm. E.g, consider this:
3793
3794          template<class T, template<T u> class TT> class S;
3795
3796          In this case we want to substitute T into the
3797          template parameters of TT.
3798
3799          So let's walk the template parms of PARM here, and
3800          tsubst ARGLIST into into each of the template
3801          parms.   */
3802
3803       /* For this substitution we need to build the full set of
3804          template parameters and use that as arguments for the
3805          tsubsting function.  */
3806       tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
3807
3808       /* This will contain the innermost parms of PARM into which
3809          we have substituted so far.  */
3810       innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
3811       targs = add_to_template_args (arglist, innermost_args);
3812       for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
3813         {
3814           tree parameter;
3815
3816           parameter = TREE_VEC_ELT (tparms, j);
3817
3818           /* INNERMOST_ARGS needs to have at least the same number
3819              of elements as the index PARAMETER, ortherwise
3820              tsubsting into PARAMETER will result in partially
3821              instantiating it, reducing its tempate parm
3822              level. Let's tactically fill INNERMOST_ARGS for that
3823              purpose.  */
3824           TREE_VEC_ELT (innermost_args, j) =
3825             template_parm_to_arg (parameter);
3826
3827           fixup_template_parm (parameter, j,
3828                                TREE_VEC_LENGTH (tparms),
3829                                targs);
3830         }
3831
3832       /* Now fix up the type of the template template parm.  */
3833
3834       t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
3835       TREE_TYPE (parm) = t;
3836
3837       TREE_VEC_ELT (fixedup_args, idx) =
3838         template_parm_to_arg (parm_desc);
3839     }
3840   else if (TREE_CODE (parm) == PARM_DECL)
3841     {
3842       /* PARM is a non-type template parameter. We need to:
3843
3844        * Fix up its TEMPLATE_PARM_INDEX to make it carry the
3845        proper number of sibling parameters.
3846
3847        * Make lookups of the template parameter return a reference
3848        to the fixed-up index. No lookup should return references
3849        to the former index anymore.
3850
3851        * Substitute the template parms that got fixed up so far
3852
3853        * into the type of PARM.  */
3854
3855       tree index = DECL_INITIAL (parm);
3856
3857       /* PUSHED_DECL is the decl added to the symbol table with
3858          the name of the parameter. E,g:
3859              
3860          template<class T, T u> //#0
3861          auto my_function(T t) -> decltype(u); //#1
3862
3863          Here, when looking up u at //#1, we get the decl of u
3864          resulting from the declaration in #0. This is what
3865          PUSHED_DECL is. We need to replace the reference to the
3866          old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
3867          fixed-up TEMPLATE_PARM_INDEX.  */
3868       tree pushed_decl = TEMPLATE_PARM_DECL (index);
3869
3870       /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
3871          fixup the type of PUSHED_DECL as well and luckily
3872          fixup_template_parm_index does it for us too.  */
3873       tree fixed_up_index =
3874         fixup_template_parm_index (index, arglist, num_parms);
3875
3876       DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
3877
3878       /* Add this fixed up PARM to the template parms we've fixed
3879          up so far and use that to substitute the fixed-up
3880          template parms into the type of PARM.  */
3881       TREE_VEC_ELT (fixedup_args, idx) =
3882         template_parm_to_arg (parm_desc);
3883       TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
3884                                  tf_none, NULL_TREE);
3885     }
3886
3887   TREE_PURPOSE (parm_desc) =
3888     tsubst_template_arg (TREE_PURPOSE (parm_desc),
3889                          arglist, tf_none, parm);
3890
3891   pop_deferring_access_checks ();
3892 }
3893
3894 /* Walk the current template parms and properly compute the canonical
3895    types of the dependent types created during
3896    cp_parser_template_parameter_list.  */
3897
3898 void
3899 fixup_template_parms (void)
3900 {
3901   tree arglist;
3902   tree parameter_vec;
3903   tree fixedup_args;
3904   int i, num_parms;
3905
3906   parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3907   if (parameter_vec == NULL_TREE)
3908     return;
3909
3910   num_parms = TREE_VEC_LENGTH (parameter_vec);
3911
3912   /* This vector contains the current innermost template parms that
3913      have been fixed up so far.  The form of FIXEDUP_ARGS is suitable
3914      to be passed to tsubst* functions as their ARGS argument.  */
3915   fixedup_args = make_tree_vec (num_parms);
3916
3917   /* This vector contains the full set of template parms in a form
3918      suitable to be passed to substs functions as their ARGS
3919      argument.  */
3920   arglist = current_template_args ();
3921   arglist = add_outermost_template_args (arglist, fixedup_args);
3922
3923   /* Let's do the proper fixup now.  */
3924   for (i = 0; i < num_parms; ++i)
3925     fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
3926                          i, num_parms, arglist);
3927 }
3928
3929 /* end_template_decl is called after a template declaration is seen.  */
3930
3931 void
3932 end_template_decl (void)
3933 {
3934   reset_specialization ();
3935
3936   if (! processing_template_decl)
3937     return;
3938
3939   /* This matches the pushlevel in begin_template_parm_list.  */
3940   finish_scope ();
3941
3942   --processing_template_decl;
3943   current_template_parms = TREE_CHAIN (current_template_parms);
3944 }
3945
3946 /* Takes a TREE_LIST representing a template parameter and convert it
3947    into an argument suitable to be passed to the type substitution
3948    functions.  Note that If the TREE_LIST contains an error_mark
3949    node, the returned argument is error_mark_node.  */
3950
3951 static tree
3952 template_parm_to_arg (tree t)
3953 {
3954
3955   if (t == NULL_TREE
3956       || TREE_CODE (t) != TREE_LIST)
3957     return t;
3958
3959   if (error_operand_p (TREE_VALUE (t)))
3960     return error_mark_node;
3961
3962   t = TREE_VALUE (t);
3963
3964   if (TREE_CODE (t) == TYPE_DECL
3965       || TREE_CODE (t) == TEMPLATE_DECL)
3966     {
3967       t = TREE_TYPE (t);
3968
3969       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3970         {
3971           /* Turn this argument into a TYPE_ARGUMENT_PACK
3972              with a single element, which expands T.  */
3973           tree vec = make_tree_vec (1);
3974 #ifdef ENABLE_CHECKING
3975           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3976             (vec, TREE_VEC_LENGTH (vec));
3977 #endif
3978           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3979
3980           t = cxx_make_type (TYPE_ARGUMENT_PACK);
3981           SET_ARGUMENT_PACK_ARGS (t, vec);
3982         }
3983     }
3984   else
3985     {
3986       t = DECL_INITIAL (t);
3987
3988       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3989         {
3990           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3991              with a single element, which expands T.  */
3992           tree vec = make_tree_vec (1);
3993           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3994 #ifdef ENABLE_CHECKING
3995           SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT
3996             (vec, TREE_VEC_LENGTH (vec));
3997 #endif
3998           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3999
4000           t  = make_node (NONTYPE_ARGUMENT_PACK);
4001           SET_ARGUMENT_PACK_ARGS (t, vec);
4002           TREE_TYPE (t) = type;
4003         }
4004     }
4005   return t;
4006 }
4007
4008 /* Within the declaration of a template, return all levels of template
4009    parameters that apply.  The template parameters are represented as
4010    a TREE_VEC, in the form documented in cp-tree.h for template
4011    arguments.  */
4012
4013 static tree
4014 current_template_args (void)
4015 {
4016   tree header;
4017   tree args = NULL_TREE;
4018   int length = TMPL_PARMS_DEPTH (current_template_parms);
4019   int l = length;
4020
4021   /* If there is only one level of template parameters, we do not
4022      create a TREE_VEC of TREE_VECs.  Instead, we return a single
4023      TREE_VEC containing the arguments.  */
4024   if (length > 1)
4025     args = make_tree_vec (length);
4026
4027   for (header = current_template_parms; header; header = TREE_CHAIN (header))
4028     {
4029       tree a = copy_node (TREE_VALUE (header));
4030       int i;
4031
4032       TREE_TYPE (a) = NULL_TREE;
4033       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
4034         TREE_VEC_ELT (a, i) = template_parm_to_arg (TREE_VEC_ELT (a, i));
4035
4036 #ifdef ENABLE_CHECKING
4037       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (a, TREE_VEC_LENGTH (a));
4038 #endif
4039
4040       if (length > 1)
4041         TREE_VEC_ELT (args, --l) = a;
4042       else
4043         args = a;
4044     }
4045
4046     if (length > 1 && TREE_VEC_ELT (args, 0) == NULL_TREE)
4047       /* This can happen for template parms of a template template
4048          parameter, e.g:
4049
4050          template<template<class T, class U> class TT> struct S;
4051
4052          Consider the level of the parms of TT; T and U both have
4053          level 2; TT has no template parm of level 1. So in this case
4054          the first element of full_template_args is NULL_TREE. If we
4055          leave it like this TMPL_ARG_DEPTH on args returns 1 instead
4056          of 2. This will make tsubst wrongly consider that T and U
4057          have level 1. Instead, let's create a dummy vector as the
4058          first element of full_template_args so that TMPL_ARG_DEPTH
4059          returns the correct depth for args.  */
4060       TREE_VEC_ELT (args, 0) = make_tree_vec (1);
4061   return args;
4062 }
4063
4064 /* Update the declared TYPE by doing any lookups which were thought to be
4065    dependent, but are not now that we know the SCOPE of the declarator.  */
4066
4067 tree
4068 maybe_update_decl_type (tree orig_type, tree scope)
4069 {
4070   tree type = orig_type;
4071
4072   if (type == NULL_TREE)
4073     return type;
4074
4075   if (TREE_CODE (orig_type) == TYPE_DECL)
4076     type = TREE_TYPE (type);
4077
4078   if (scope && TYPE_P (scope) && dependent_type_p (scope)
4079       && dependent_type_p (type)
4080       /* Don't bother building up the args in this case.  */
4081       && TREE_CODE (type) != TEMPLATE_TYPE_PARM)
4082     {
4083       /* tsubst in the args corresponding to the template parameters,
4084          including auto if present.  Most things will be unchanged, but
4085          make_typename_type and tsubst_qualified_id will resolve
4086          TYPENAME_TYPEs and SCOPE_REFs that were previously dependent.  */
4087       tree args = current_template_args ();
4088       tree auto_node = type_uses_auto (type);
4089       tree pushed;
4090       if (auto_node)
4091         {
4092           tree auto_vec = make_tree_vec (1);
4093           TREE_VEC_ELT (auto_vec, 0) = auto_node;
4094           args = add_to_template_args (args, auto_vec);
4095         }
4096       pushed = push_scope (scope);
4097       type = tsubst (type, args, tf_warning_or_error, NULL_TREE);
4098       if (pushed)
4099         pop_scope (scope);
4100     }
4101
4102   if (type == error_mark_node)
4103     return orig_type;
4104
4105   if (TREE_CODE (orig_type) == TYPE_DECL)
4106     {
4107       if (same_type_p (type, TREE_TYPE (orig_type)))
4108         type = orig_type;
4109       else
4110         type = TYPE_NAME (type);
4111     }
4112   return type;
4113 }
4114
4115 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
4116    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
4117    a member template.  Used by push_template_decl below.  */
4118
4119 static tree
4120 build_template_decl (tree decl, tree parms, bool member_template_p)
4121 {
4122   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
4123   DECL_TEMPLATE_PARMS (tmpl) = parms;
4124   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
4125   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
4126   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
4127
4128   return tmpl;
4129 }
4130
4131 struct template_parm_data
4132 {
4133   /* The level of the template parameters we are currently
4134      processing.  */
4135   int level;
4136
4137   /* The index of the specialization argument we are currently
4138      processing.  */
4139   int current_arg;
4140
4141   /* An array whose size is the number of template parameters.  The
4142      elements are nonzero if the parameter has been used in any one
4143      of the arguments processed so far.  */
4144   int* parms;
4145
4146   /* An array whose size is the number of template arguments.  The
4147      elements are nonzero if the argument makes use of template
4148      parameters of this level.  */
4149   int* arg_uses_template_parms;
4150 };
4151
4152 /* Subroutine of push_template_decl used to see if each template
4153    parameter in a partial specialization is used in the explicit
4154    argument list.  If T is of the LEVEL given in DATA (which is
4155    treated as a template_parm_data*), then DATA->PARMS is marked
4156    appropriately.  */
4157
4158 static int
4159 mark_template_parm (tree t, void* data)
4160 {
4161   int level;
4162   int idx;
4163   struct template_parm_data* tpd = (struct template_parm_data*) data;
4164
4165   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4166     {
4167       level = TEMPLATE_PARM_LEVEL (t);
4168       idx = TEMPLATE_PARM_IDX (t);
4169     }
4170   else
4171     {
4172       level = TEMPLATE_TYPE_LEVEL (t);
4173       idx = TEMPLATE_TYPE_IDX (t);
4174     }
4175
4176   if (level == tpd->level)
4177     {
4178       tpd->parms[idx] = 1;
4179       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
4180     }
4181
4182   /* Return zero so that for_each_template_parm will continue the
4183      traversal of the tree; we want to mark *every* template parm.  */
4184   return 0;
4185 }
4186
4187 /* Process the partial specialization DECL.  */
4188
4189 static tree
4190 process_partial_specialization (tree decl)
4191 {
4192   tree type = TREE_TYPE (decl);
4193   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
4194   tree specargs = CLASSTYPE_TI_ARGS (type);
4195   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
4196   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
4197   tree inner_parms;
4198   tree inst;
4199   int nargs = TREE_VEC_LENGTH (inner_args);
4200   int ntparms;
4201   int  i;
4202   bool did_error_intro = false;
4203   struct template_parm_data tpd;
4204   struct template_parm_data tpd2;
4205
4206   gcc_assert (current_template_parms);
4207
4208   inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
4209   ntparms = TREE_VEC_LENGTH (inner_parms);
4210
4211   /* We check that each of the template parameters given in the
4212      partial specialization is used in the argument list to the
4213      specialization.  For example:
4214
4215        template <class T> struct S;
4216        template <class T> struct S<T*>;
4217
4218      The second declaration is OK because `T*' uses the template
4219      parameter T, whereas
4220
4221        template <class T> struct S<int>;
4222
4223      is no good.  Even trickier is:
4224
4225        template <class T>
4226        struct S1
4227        {
4228           template <class U>
4229           struct S2;
4230           template <class U>
4231           struct S2<T>;
4232        };
4233
4234      The S2<T> declaration is actually invalid; it is a
4235      full-specialization.  Of course,
4236
4237           template <class U>
4238           struct S2<T (*)(U)>;
4239
4240      or some such would have been OK.  */
4241   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
4242   tpd.parms = XALLOCAVEC (int, ntparms);
4243   memset (tpd.parms, 0, sizeof (int) * ntparms);
4244
4245   tpd.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4246   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
4247   for (i = 0; i < nargs; ++i)
4248     {
4249       tpd.current_arg = i;
4250       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
4251                               &mark_template_parm,
4252                               &tpd,
4253                               NULL,
4254                               /*include_nondeduced_p=*/false);
4255     }
4256   for (i = 0; i < ntparms; ++i)
4257     if (tpd.parms[i] == 0)
4258       {
4259         /* One of the template parms was not used in the
4260            specialization.  */
4261         if (!did_error_intro)
4262           {
4263             error ("template parameters not used in partial specialization:");
4264             did_error_intro = true;
4265           }
4266
4267         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
4268       }
4269
4270   if (did_error_intro)
4271     return error_mark_node;
4272
4273   /* [temp.class.spec]
4274
4275      The argument list of the specialization shall not be identical to
4276      the implicit argument list of the primary template.  */
4277   if (comp_template_args
4278       (inner_args,
4279        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
4280                                                    (maintmpl)))))
4281     error ("partial specialization %qT does not specialize any template arguments", type);
4282
4283   /* [temp.class.spec]
4284
4285      A partially specialized non-type argument expression shall not
4286      involve template parameters of the partial specialization except
4287      when the argument expression is a simple identifier.
4288
4289      The type of a template parameter corresponding to a specialized
4290      non-type argument shall not be dependent on a parameter of the
4291      specialization. 
4292
4293      Also, we verify that pack expansions only occur at the
4294      end of the argument list.  */
4295   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
4296   tpd2.parms = 0;
4297   for (i = 0; i < nargs; ++i)
4298     {
4299       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
4300       tree arg = TREE_VEC_ELT (inner_args, i);
4301       tree packed_args = NULL_TREE;
4302       int j, len = 1;
4303
4304       if (ARGUMENT_PACK_P (arg))
4305         {
4306           /* Extract the arguments from the argument pack. We'll be
4307              iterating over these in the following loop.  */
4308           packed_args = ARGUMENT_PACK_ARGS (arg);
4309           len = TREE_VEC_LENGTH (packed_args);
4310         }
4311
4312       for (j = 0; j < len; j++)
4313         {
4314           if (packed_args)
4315             /* Get the Jth argument in the parameter pack.  */
4316             arg = TREE_VEC_ELT (packed_args, j);
4317
4318           if (PACK_EXPANSION_P (arg))
4319             {
4320               /* Pack expansions must come at the end of the
4321                  argument list.  */
4322               if ((packed_args && j < len - 1)
4323                   || (!packed_args && i < nargs - 1))
4324                 {
4325                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4326                     error ("parameter pack argument %qE must be at the "
4327                            "end of the template argument list", arg);
4328                   else
4329                     error ("parameter pack argument %qT must be at the "
4330                            "end of the template argument list", arg);
4331                 }
4332             }
4333
4334           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
4335             /* We only care about the pattern.  */
4336             arg = PACK_EXPANSION_PATTERN (arg);
4337
4338           if (/* These first two lines are the `non-type' bit.  */
4339               !TYPE_P (arg)
4340               && TREE_CODE (arg) != TEMPLATE_DECL
4341               /* This next line is the `argument expression is not just a
4342                  simple identifier' condition and also the `specialized
4343                  non-type argument' bit.  */
4344               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
4345             {
4346               if ((!packed_args && tpd.arg_uses_template_parms[i])
4347                   || (packed_args && uses_template_parms (arg)))
4348                 error ("template argument %qE involves template parameter(s)",
4349                        arg);
4350               else 
4351                 {
4352                   /* Look at the corresponding template parameter,
4353                      marking which template parameters its type depends
4354                      upon.  */
4355                   tree type = TREE_TYPE (parm);
4356
4357                   if (!tpd2.parms)
4358                     {
4359                       /* We haven't yet initialized TPD2.  Do so now.  */
4360                       tpd2.arg_uses_template_parms = XALLOCAVEC (int, nargs);
4361                       /* The number of parameters here is the number in the
4362                          main template, which, as checked in the assertion
4363                          above, is NARGS.  */
4364                       tpd2.parms = XALLOCAVEC (int, nargs);
4365                       tpd2.level = 
4366                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
4367                     }
4368
4369                   /* Mark the template parameters.  But this time, we're
4370                      looking for the template parameters of the main
4371                      template, not in the specialization.  */
4372                   tpd2.current_arg = i;
4373                   tpd2.arg_uses_template_parms[i] = 0;
4374                   memset (tpd2.parms, 0, sizeof (int) * nargs);
4375                   for_each_template_parm (type,
4376                                           &mark_template_parm,
4377                                           &tpd2,
4378                                           NULL,
4379                                           /*include_nondeduced_p=*/false);
4380
4381                   if (tpd2.arg_uses_template_parms [i])
4382                     {
4383                       /* The type depended on some template parameters.
4384                          If they are fully specialized in the
4385                          specialization, that's OK.  */
4386                       int j;
4387                       int count = 0;
4388                       for (j = 0; j < nargs; ++j)
4389                         if (tpd2.parms[j] != 0
4390                             && tpd.arg_uses_template_parms [j])
4391                           ++count;
4392                       if (count != 0)
4393                         error_n (input_location, count,
4394                                  "type %qT of template argument %qE depends "
4395                                  "on a template parameter",
4396                                  "type %qT of template argument %qE depends "
4397                                  "on template parameters",
4398                                  type,
4399                                  arg);
4400                     }
4401                 }
4402             }
4403         }
4404     }
4405
4406   /* We should only get here once.  */
4407   gcc_assert (!COMPLETE_TYPE_P (type));
4408
4409   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
4410     = tree_cons (specargs, inner_parms,
4411                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
4412   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
4413
4414   for (inst = DECL_TEMPLATE_INSTANTIATIONS (maintmpl); inst;
4415        inst = TREE_CHAIN (inst))
4416     {
4417       tree inst_type = TREE_VALUE (inst);
4418       if (COMPLETE_TYPE_P (inst_type)
4419           && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
4420         {
4421           tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
4422           if (spec && TREE_TYPE (spec) == type)
4423             permerror (input_location,
4424                        "partial specialization of %qT after instantiation "
4425                        "of %qT", type, inst_type);
4426         }
4427     }
4428
4429   return decl;
4430 }
4431
4432 /* Check that a template declaration's use of default arguments and
4433    parameter packs is not invalid.  Here, PARMS are the template
4434    parameters.  IS_PRIMARY is nonzero if DECL is the thing declared by
4435    a primary template.  IS_PARTIAL is nonzero if DECL is a partial
4436    specialization.
4437    
4438
4439    IS_FRIEND_DECL is nonzero if DECL is a friend function template
4440    declaration (but not a definition); 1 indicates a declaration, 2
4441    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
4442    emitted for extraneous default arguments.
4443
4444    Returns TRUE if there were no errors found, FALSE otherwise. */
4445
4446 bool
4447 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
4448                          int is_partial, int is_friend_decl)
4449 {
4450   const char *msg;
4451   int last_level_to_check;
4452   tree parm_level;
4453   bool no_errors = true;
4454
4455   /* [temp.param]
4456
4457      A default template-argument shall not be specified in a
4458      function template declaration or a function template definition, nor
4459      in the template-parameter-list of the definition of a member of a
4460      class template.  */
4461
4462   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
4463     /* You can't have a function template declaration in a local
4464        scope, nor you can you define a member of a class template in a
4465        local scope.  */
4466     return true;
4467
4468   if (current_class_type
4469       && !TYPE_BEING_DEFINED (current_class_type)
4470       && DECL_LANG_SPECIFIC (decl)
4471       && DECL_DECLARES_FUNCTION_P (decl)
4472       /* If this is either a friend defined in the scope of the class
4473          or a member function.  */
4474       && (DECL_FUNCTION_MEMBER_P (decl)
4475           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
4476           : DECL_FRIEND_CONTEXT (decl)
4477           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
4478           : false)
4479       /* And, if it was a member function, it really was defined in
4480          the scope of the class.  */
4481       && (!DECL_FUNCTION_MEMBER_P (decl)
4482           || DECL_INITIALIZED_IN_CLASS_P (decl)))
4483     /* We already checked these parameters when the template was
4484        declared, so there's no need to do it again now.  This function
4485        was defined in class scope, but we're processing it's body now
4486        that the class is complete.  */
4487     return true;
4488
4489   /* Core issue 226 (C++0x only): the following only applies to class
4490      templates.  */
4491   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
4492     {
4493       /* [temp.param]
4494
4495          If a template-parameter has a default template-argument, all
4496          subsequent template-parameters shall have a default
4497          template-argument supplied.  */
4498       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
4499         {
4500           tree inner_parms = TREE_VALUE (parm_level);
4501           int ntparms = TREE_VEC_LENGTH (inner_parms);
4502           int seen_def_arg_p = 0;
4503           int i;
4504
4505           for (i = 0; i < ntparms; ++i)
4506             {
4507               tree parm = TREE_VEC_ELT (inner_parms, i);
4508
4509               if (parm == error_mark_node)
4510                 continue;
4511
4512               if (TREE_PURPOSE (parm))
4513                 seen_def_arg_p = 1;
4514               else if (seen_def_arg_p
4515                        && !template_parameter_pack_p (TREE_VALUE (parm)))
4516                 {
4517                   error ("no default argument for %qD", TREE_VALUE (parm));
4518                   /* For better subsequent error-recovery, we indicate that
4519                      there should have been a default argument.  */
4520                   TREE_PURPOSE (parm) = error_mark_node;
4521                   no_errors = false;
4522                 }
4523               else if (is_primary
4524                        && !is_partial
4525                        && !is_friend_decl
4526                        /* Don't complain about an enclosing partial
4527                           specialization.  */
4528                        && parm_level == parms
4529                        && TREE_CODE (decl) == TYPE_DECL
4530                        && i < ntparms - 1
4531                        && template_parameter_pack_p (TREE_VALUE (parm)))
4532                 {
4533                   /* A primary class template can only have one
4534                      parameter pack, at the end of the template
4535                      parameter list.  */
4536
4537                   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
4538                     error ("parameter pack %qE must be at the end of the"
4539                            " template parameter list", TREE_VALUE (parm));
4540                   else
4541                     error ("parameter pack %qT must be at the end of the"
4542                            " template parameter list", 
4543                            TREE_TYPE (TREE_VALUE (parm)));
4544
4545                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) 
4546                     = error_mark_node;
4547                   no_errors = false;
4548                 }
4549             }
4550         }
4551     }
4552
4553   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
4554       || is_partial 
4555       || !is_primary
4556       || is_friend_decl)
4557     /* For an ordinary class template, default template arguments are
4558        allowed at the innermost level, e.g.:
4559          template <class T = int>
4560          struct S {};
4561        but, in a partial specialization, they're not allowed even
4562        there, as we have in [temp.class.spec]:
4563
4564          The template parameter list of a specialization shall not
4565          contain default template argument values.
4566
4567        So, for a partial specialization, or for a function template
4568        (in C++98/C++03), we look at all of them.  */
4569     ;
4570   else
4571     /* But, for a primary class template that is not a partial
4572        specialization we look at all template parameters except the
4573        innermost ones.  */
4574     parms = TREE_CHAIN (parms);
4575
4576   /* Figure out what error message to issue.  */
4577   if (is_friend_decl == 2)
4578     msg = G_("default template arguments may not be used in function template "
4579              "friend re-declaration");
4580   else if (is_friend_decl)
4581     msg = G_("default template arguments may not be used in function template "
4582              "friend declarations");
4583   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
4584     msg = G_("default template arguments may not be used in function templates "
4585              "without -std=c++0x or -std=gnu++0x");
4586   else if (is_partial)
4587     msg = G_("default template arguments may not be used in "
4588              "partial specializations");
4589   else
4590     msg = G_("default argument for template parameter for class enclosing %qD");
4591
4592   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
4593     /* If we're inside a class definition, there's no need to
4594        examine the parameters to the class itself.  On the one
4595        hand, they will be checked when the class is defined, and,
4596        on the other, default arguments are valid in things like:
4597          template <class T = double>
4598          struct S { template <class U> void f(U); };
4599        Here the default argument for `S' has no bearing on the
4600        declaration of `f'.  */
4601     last_level_to_check = template_class_depth (current_class_type) + 1;
4602   else
4603     /* Check everything.  */
4604     last_level_to_check = 0;
4605
4606   for (parm_level = parms;
4607        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
4608        parm_level = TREE_CHAIN (parm_level))
4609     {
4610       tree inner_parms = TREE_VALUE (parm_level);
4611       int i;
4612       int ntparms;
4613
4614       ntparms = TREE_VEC_LENGTH (inner_parms);
4615       for (i = 0; i < ntparms; ++i)
4616         {
4617           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
4618             continue;
4619
4620           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
4621             {
4622               if (msg)
4623                 {
4624                   no_errors = false;
4625                   if (is_friend_decl == 2)
4626                     return no_errors;
4627
4628                   error (msg, decl);
4629                   msg = 0;
4630                 }
4631
4632               /* Clear out the default argument so that we are not
4633                  confused later.  */
4634               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
4635             }
4636         }
4637
4638       /* At this point, if we're still interested in issuing messages,
4639          they must apply to classes surrounding the object declared.  */
4640       if (msg)
4641         msg = G_("default argument for template parameter for class "
4642                  "enclosing %qD");
4643     }
4644
4645   return no_errors;
4646 }
4647
4648 /* Worker for push_template_decl_real, called via
4649    for_each_template_parm.  DATA is really an int, indicating the
4650    level of the parameters we are interested in.  If T is a template
4651    parameter of that level, return nonzero.  */
4652
4653 static int
4654 template_parm_this_level_p (tree t, void* data)
4655 {
4656   int this_level = *(int *)data;
4657   int level;
4658
4659   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
4660     level = TEMPLATE_PARM_LEVEL (t);
4661   else
4662     level = TEMPLATE_TYPE_LEVEL (t);
4663   return level == this_level;
4664 }
4665
4666 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
4667    parameters given by current_template_args, or reuses a
4668    previously existing one, if appropriate.  Returns the DECL, or an
4669    equivalent one, if it is replaced via a call to duplicate_decls.
4670
4671    If IS_FRIEND is true, DECL is a friend declaration.  */
4672
4673 tree
4674 push_template_decl_real (tree decl, bool is_friend)
4675 {
4676   tree tmpl;
4677   tree args;
4678   tree info;
4679   tree ctx;
4680   int primary;
4681   int is_partial;
4682   int new_template_p = 0;
4683   /* True if the template is a member template, in the sense of
4684      [temp.mem].  */
4685   bool member_template_p = false;
4686
4687   if (decl == error_mark_node || !current_template_parms)
4688     return error_mark_node;
4689
4690   /* See if this is a partial specialization.  */
4691   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
4692                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
4693                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
4694
4695   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
4696     is_friend = true;
4697
4698   if (is_friend)
4699     /* For a friend, we want the context of the friend function, not
4700        the type of which it is a friend.  */
4701     ctx = CP_DECL_CONTEXT (decl);
4702   else if (CP_DECL_CONTEXT (decl)
4703            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
4704     /* In the case of a virtual function, we want the class in which
4705        it is defined.  */
4706     ctx = CP_DECL_CONTEXT (decl);
4707   else
4708     /* Otherwise, if we're currently defining some class, the DECL
4709        is assumed to be a member of the class.  */
4710     ctx = current_scope ();
4711
4712   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
4713     ctx = NULL_TREE;
4714
4715   if (!DECL_CONTEXT (decl))
4716     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
4717
4718   /* See if this is a primary template.  */
4719   if (is_friend && ctx)
4720     /* A friend template that specifies a class context, i.e.
4721          template <typename T> friend void A<T>::f();
4722        is not primary.  */
4723     primary = 0;
4724   else
4725     primary = template_parm_scope_p ();
4726
4727   if (primary)
4728     {
4729       if (DECL_CLASS_SCOPE_P (decl))
4730         member_template_p = true;
4731       if (TREE_CODE (decl) == TYPE_DECL
4732           && ANON_AGGRNAME_P (DECL_NAME (decl)))
4733         {
4734           error ("template class without a name");
4735           return error_mark_node;
4736         }
4737       else if (TREE_CODE (decl) == FUNCTION_DECL)
4738         {
4739           if (DECL_DESTRUCTOR_P (decl))
4740             {
4741               /* [temp.mem]
4742
4743                  A destructor shall not be a member template.  */
4744               error ("destructor %qD declared as member template", decl);
4745               return error_mark_node;
4746             }
4747           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
4748               && (!prototype_p (TREE_TYPE (decl))
4749                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
4750                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
4751                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
4752                       == void_list_node)))
4753             {
4754               /* [basic.stc.dynamic.allocation]
4755
4756                  An allocation function can be a function
4757                  template. ... Template allocation functions shall
4758                  have two or more parameters.  */
4759               error ("invalid template declaration of %qD", decl);
4760               return error_mark_node;
4761             }
4762         }
4763       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4764                && CLASS_TYPE_P (TREE_TYPE (decl)))
4765         /* OK */;
4766       else
4767         {
4768           error ("template declaration of %q#D", decl);
4769           return error_mark_node;
4770         }
4771     }
4772
4773   /* Check to see that the rules regarding the use of default
4774      arguments are not being violated.  */
4775   check_default_tmpl_args (decl, current_template_parms,
4776                            primary, is_partial, /*is_friend_decl=*/0);
4777
4778   /* Ensure that there are no parameter packs in the type of this
4779      declaration that have not been expanded.  */
4780   if (TREE_CODE (decl) == FUNCTION_DECL)
4781     {
4782       /* Check each of the arguments individually to see if there are
4783          any bare parameter packs.  */
4784       tree type = TREE_TYPE (decl);
4785       tree arg = DECL_ARGUMENTS (decl);
4786       tree argtype = TYPE_ARG_TYPES (type);
4787
4788       while (arg && argtype)
4789         {
4790           if (!FUNCTION_PARAMETER_PACK_P (arg)
4791               && check_for_bare_parameter_packs (TREE_TYPE (arg)))
4792             {
4793             /* This is a PARM_DECL that contains unexpanded parameter
4794                packs. We have already complained about this in the
4795                check_for_bare_parameter_packs call, so just replace
4796                these types with ERROR_MARK_NODE.  */
4797               TREE_TYPE (arg) = error_mark_node;
4798               TREE_VALUE (argtype) = error_mark_node;
4799             }
4800
4801           arg = DECL_CHAIN (arg);
4802           argtype = TREE_CHAIN (argtype);
4803         }
4804
4805       /* Check for bare parameter packs in the return type and the
4806          exception specifiers.  */
4807       if (check_for_bare_parameter_packs (TREE_TYPE (type)))
4808         /* Errors were already issued, set return type to int
4809            as the frontend doesn't expect error_mark_node as
4810            the return type.  */
4811         TREE_TYPE (type) = integer_type_node;
4812       if (check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type)))
4813         TYPE_RAISES_EXCEPTIONS (type) = NULL_TREE;
4814     }
4815   else if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4816     {
4817       TREE_TYPE (decl) = error_mark_node;
4818       return error_mark_node;
4819     }
4820
4821   if (is_partial)
4822     return process_partial_specialization (decl);
4823
4824   args = current_template_args ();
4825
4826   if (!ctx
4827       || TREE_CODE (ctx) == FUNCTION_DECL
4828       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
4829       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
4830     {
4831       if (DECL_LANG_SPECIFIC (decl)
4832           && DECL_TEMPLATE_INFO (decl)
4833           && DECL_TI_TEMPLATE (decl))
4834         tmpl = DECL_TI_TEMPLATE (decl);
4835       /* If DECL is a TYPE_DECL for a class-template, then there won't
4836          be DECL_LANG_SPECIFIC.  The information equivalent to
4837          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
4838       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
4839                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
4840                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
4841         {
4842           /* Since a template declaration already existed for this
4843              class-type, we must be redeclaring it here.  Make sure
4844              that the redeclaration is valid.  */
4845           redeclare_class_template (TREE_TYPE (decl),
4846                                     current_template_parms);
4847           /* We don't need to create a new TEMPLATE_DECL; just use the
4848              one we already had.  */
4849           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
4850         }
4851       else
4852         {
4853           tmpl = build_template_decl (decl, current_template_parms,
4854                                       member_template_p);
4855           new_template_p = 1;
4856
4857           if (DECL_LANG_SPECIFIC (decl)
4858               && DECL_TEMPLATE_SPECIALIZATION (decl))
4859             {
4860               /* A specialization of a member template of a template
4861                  class.  */
4862               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
4863               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
4864               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
4865             }
4866         }
4867     }
4868   else
4869     {
4870       tree a, t, current, parms;
4871       int i;
4872       tree tinfo = get_template_info (decl);
4873
4874       if (!tinfo)
4875         {
4876           error ("template definition of non-template %q#D", decl);
4877           return error_mark_node;
4878         }
4879
4880       tmpl = TI_TEMPLATE (tinfo);
4881
4882       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
4883           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
4884           && DECL_TEMPLATE_SPECIALIZATION (decl)
4885           && DECL_MEMBER_TEMPLATE_P (tmpl))
4886         {
4887           tree new_tmpl;
4888
4889           /* The declaration is a specialization of a member
4890              template, declared outside the class.  Therefore, the
4891              innermost template arguments will be NULL, so we
4892              replace them with the arguments determined by the
4893              earlier call to check_explicit_specialization.  */
4894           args = DECL_TI_ARGS (decl);
4895
4896           new_tmpl
4897             = build_template_decl (decl, current_template_parms,
4898                                    member_template_p);
4899           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
4900           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
4901           DECL_TI_TEMPLATE (decl) = new_tmpl;
4902           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
4903           DECL_TEMPLATE_INFO (new_tmpl)
4904             = build_template_info (tmpl, args);
4905
4906           register_specialization (new_tmpl,
4907                                    most_general_template (tmpl),
4908                                    args,
4909                                    is_friend, 0);
4910           return decl;
4911         }
4912
4913       /* Make sure the template headers we got make sense.  */
4914
4915       parms = DECL_TEMPLATE_PARMS (tmpl);
4916       i = TMPL_PARMS_DEPTH (parms);
4917       if (TMPL_ARGS_DEPTH (args) != i)
4918         {
4919           error ("expected %d levels of template parms for %q#D, got %d",
4920                  i, decl, TMPL_ARGS_DEPTH (args));
4921         }
4922       else
4923         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
4924           {
4925             a = TMPL_ARGS_LEVEL (args, i);
4926             t = INNERMOST_TEMPLATE_PARMS (parms);
4927
4928             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
4929               {
4930                 if (current == decl)
4931                   error ("got %d template parameters for %q#D",
4932                          TREE_VEC_LENGTH (a), decl);
4933                 else
4934                   error ("got %d template parameters for %q#T",
4935                          TREE_VEC_LENGTH (a), current);
4936                 error ("  but %d required", TREE_VEC_LENGTH (t));
4937                 return error_mark_node;
4938               }
4939
4940             if (current == decl)
4941               current = ctx;
4942             else if (current == NULL_TREE)
4943               /* Can happen in erroneous input.  */
4944               break;
4945             else
4946               current = (TYPE_P (current)
4947                          ? TYPE_CONTEXT (current)
4948                          : DECL_CONTEXT (current));
4949           }
4950
4951       /* Check that the parms are used in the appropriate qualifying scopes
4952          in the declarator.  */
4953       if (!comp_template_args
4954           (TI_ARGS (tinfo),
4955            TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (tmpl)))))
4956         {
4957           error ("\
4958 template arguments to %qD do not match original template %qD",
4959                  decl, DECL_TEMPLATE_RESULT (tmpl));
4960           if (!uses_template_parms (TI_ARGS (tinfo)))
4961             inform (input_location, "use template<> for an explicit specialization");
4962           /* Avoid crash in import_export_decl.  */
4963           DECL_INTERFACE_KNOWN (decl) = 1;
4964           return error_mark_node;
4965         }
4966     }
4967
4968   DECL_TEMPLATE_RESULT (tmpl) = decl;
4969   TREE_TYPE (tmpl) = TREE_TYPE (decl);
4970
4971   /* Push template declarations for global functions and types.  Note
4972      that we do not try to push a global template friend declared in a
4973      template class; such a thing may well depend on the template
4974      parameters of the class.  */
4975   if (new_template_p && !ctx
4976       && !(is_friend && template_class_depth (current_class_type) > 0))
4977     {
4978       tmpl = pushdecl_namespace_level (tmpl, is_friend);
4979       if (tmpl == error_mark_node)
4980         return error_mark_node;
4981
4982       /* Hide template friend classes that haven't been declared yet.  */
4983       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
4984         {
4985           DECL_ANTICIPATED (tmpl) = 1;
4986           DECL_FRIEND_P (tmpl) = 1;
4987         }
4988     }
4989
4990   if (primary)
4991     {
4992       tree parms = DECL_TEMPLATE_PARMS (tmpl);
4993       int i;
4994
4995       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
4996       if (DECL_CONV_FN_P (tmpl))
4997         {
4998           int depth = TMPL_PARMS_DEPTH (parms);
4999
5000           /* It is a conversion operator. See if the type converted to
5001              depends on innermost template operands.  */
5002
5003           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
5004                                          depth))
5005             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
5006         }
5007
5008       /* Give template template parms a DECL_CONTEXT of the template
5009          for which they are a parameter.  */
5010       parms = INNERMOST_TEMPLATE_PARMS (parms);
5011       for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
5012         {
5013           tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5014           if (TREE_CODE (parm) == TEMPLATE_DECL)
5015             DECL_CONTEXT (parm) = tmpl;
5016         }
5017     }
5018
5019   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
5020      back to its most general template.  If TMPL is a specialization,
5021      ARGS may only have the innermost set of arguments.  Add the missing
5022      argument levels if necessary.  */
5023   if (DECL_TEMPLATE_INFO (tmpl))
5024     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
5025
5026   info = build_template_info (tmpl, args);
5027
5028   if (DECL_IMPLICIT_TYPEDEF_P (decl))
5029     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
5030   else if (DECL_LANG_SPECIFIC (decl))
5031     DECL_TEMPLATE_INFO (decl) = info;
5032
5033   return DECL_TEMPLATE_RESULT (tmpl);
5034 }
5035
5036 tree
5037 push_template_decl (tree decl)
5038 {
5039   return push_template_decl_real (decl, false);
5040 }
5041
5042 /* Called when a class template TYPE is redeclared with the indicated
5043    template PARMS, e.g.:
5044
5045      template <class T> struct S;
5046      template <class T> struct S {};  */
5047
5048 bool
5049 redeclare_class_template (tree type, tree parms)
5050 {
5051   tree tmpl;
5052   tree tmpl_parms;
5053   int i;
5054
5055   if (!TYPE_TEMPLATE_INFO (type))
5056     {
5057       error ("%qT is not a template type", type);
5058       return false;
5059     }
5060
5061   tmpl = TYPE_TI_TEMPLATE (type);
5062   if (!PRIMARY_TEMPLATE_P (tmpl))
5063     /* The type is nested in some template class.  Nothing to worry
5064        about here; there are no new template parameters for the nested
5065        type.  */
5066     return true;
5067
5068   if (!parms)
5069     {
5070       error ("template specifiers not specified in declaration of %qD",
5071              tmpl);
5072       return false;
5073     }
5074
5075   parms = INNERMOST_TEMPLATE_PARMS (parms);
5076   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
5077
5078   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
5079     {
5080       error_n (input_location, TREE_VEC_LENGTH (parms),
5081                "redeclared with %d template parameter",
5082                "redeclared with %d template parameters",
5083                TREE_VEC_LENGTH (parms));
5084       inform_n (input_location, TREE_VEC_LENGTH (tmpl_parms),
5085                 "previous declaration %q+D used %d template parameter",
5086                 "previous declaration %q+D used %d template parameters",
5087                 tmpl, TREE_VEC_LENGTH (tmpl_parms));
5088       return false;
5089     }
5090
5091   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
5092     {
5093       tree tmpl_parm;
5094       tree parm;
5095       tree tmpl_default;
5096       tree parm_default;
5097
5098       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
5099           || TREE_VEC_ELT (parms, i) == error_mark_node)
5100         continue;
5101
5102       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
5103       if (tmpl_parm == error_mark_node)
5104         return false;
5105
5106       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
5107       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
5108       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
5109
5110       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
5111          TEMPLATE_DECL.  */
5112       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
5113           || (TREE_CODE (tmpl_parm) != TYPE_DECL
5114               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))
5115           || (TREE_CODE (tmpl_parm) != PARM_DECL
5116               && (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (tmpl_parm))
5117                   != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))))
5118           || (TREE_CODE (tmpl_parm) == PARM_DECL
5119               && (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (tmpl_parm))
5120                   != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))))
5121         {
5122           error ("template parameter %q+#D", tmpl_parm);
5123           error ("redeclared here as %q#D", parm);
5124           return false;
5125         }
5126
5127       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
5128         {
5129           /* We have in [temp.param]:
5130
5131              A template-parameter may not be given default arguments
5132              by two different declarations in the same scope.  */
5133           error_at (input_location, "redefinition of default argument for %q#D", parm);
5134           inform (DECL_SOURCE_LOCATION (tmpl_parm),
5135                   "original definition appeared here");
5136           return false;
5137         }
5138
5139       if (parm_default != NULL_TREE)
5140         /* Update the previous template parameters (which are the ones
5141            that will really count) with the new default value.  */
5142         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
5143       else if (tmpl_default != NULL_TREE)
5144         /* Update the new parameters, too; they'll be used as the
5145            parameters for any members.  */
5146         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
5147     }
5148
5149     return true;
5150 }
5151
5152 /* Simplify EXPR if it is a non-dependent expression.  Returns the
5153    (possibly simplified) expression.  */
5154
5155 static tree
5156 fold_non_dependent_expr_sfinae (tree expr, tsubst_flags_t complain)
5157 {
5158   if (expr == NULL_TREE)
5159     return NULL_TREE;
5160
5161   /* If we're in a template, but EXPR isn't value dependent, simplify
5162      it.  We're supposed to treat:
5163
5164        template <typename T> void f(T[1 + 1]);
5165        template <typename T> void f(T[2]);
5166
5167      as two declarations of the same function, for example.  */
5168   if (processing_template_decl
5169       && !type_dependent_expression_p (expr)
5170       && potential_constant_expression (expr)
5171       && !value_dependent_expression_p (expr))
5172     {
5173       HOST_WIDE_INT saved_processing_template_decl;
5174
5175       saved_processing_template_decl = processing_template_decl;
5176       processing_template_decl = 0;
5177       expr = tsubst_copy_and_build (expr,
5178                                     /*args=*/NULL_TREE,
5179                                     complain,
5180                                     /*in_decl=*/NULL_TREE,
5181                                     /*function_p=*/false,
5182                                     /*integral_constant_expression_p=*/true);
5183       processing_template_decl = saved_processing_template_decl;
5184     }
5185   return expr;
5186 }
5187
5188 tree
5189 fold_non_dependent_expr (tree expr)
5190 {
5191   return fold_non_dependent_expr_sfinae (expr, tf_error);
5192 }
5193
5194 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
5195    must be a function or a pointer-to-function type, as specified
5196    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
5197    and check that the resulting function has external linkage.  */
5198
5199 static tree
5200 convert_nontype_argument_function (tree type, tree expr)
5201 {
5202   tree fns = expr;
5203   tree fn, fn_no_ptr;
5204
5205   fn = instantiate_type (type, fns, tf_none);
5206   if (fn == error_mark_node)
5207     return error_mark_node;
5208
5209   fn_no_ptr = fn;
5210   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
5211     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
5212   if (TREE_CODE (fn_no_ptr) == BASELINK)
5213     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
5214  
5215   /* [temp.arg.nontype]/1
5216
5217      A template-argument for a non-type, non-template template-parameter
5218      shall be one of:
5219      [...]
5220      -- the address of an object or function with external linkage.  */
5221   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
5222     {
5223       error ("%qE is not a valid template argument for type %qT "
5224              "because function %qD has not external linkage",
5225              expr, type, fn_no_ptr);
5226       return NULL_TREE;
5227     }
5228
5229   return fn;
5230 }
5231
5232 /* Subroutine of convert_nontype_argument.
5233    Check if EXPR of type TYPE is a valid pointer-to-member constant.
5234    Emit an error otherwise.  */
5235
5236 static bool
5237 check_valid_ptrmem_cst_expr (tree type, tree expr,
5238                              tsubst_flags_t complain)
5239 {
5240   STRIP_NOPS (expr);
5241   if (expr && (null_ptr_cst_p (expr) || TREE_CODE (expr) == PTRMEM_CST))
5242     return true;
5243   if (complain & tf_error)
5244     {
5245       error ("%qE is not a valid template argument for type %qT",
5246              expr, type);
5247       error ("it must be a pointer-to-member of the form %<&X::Y%>");
5248     }
5249   return false;
5250 }
5251
5252 /* Returns TRUE iff the address of OP is value-dependent.
5253
5254    14.6.2.4 [temp.dep.temp]:
5255    A non-integral non-type template-argument is dependent if its type is
5256    dependent or it has either of the following forms
5257      qualified-id
5258      & qualified-id
5259    and contains a nested-name-specifier which specifies a class-name that
5260    names a dependent type.
5261
5262    We generalize this to just say that the address of a member of a
5263    dependent class is value-dependent; the above doesn't cover the
5264    address of a static data member named with an unqualified-id.  */
5265
5266 static bool
5267 has_value_dependent_address (tree op)
5268 {
5269   /* We could use get_inner_reference here, but there's no need;
5270      this is only relevant for template non-type arguments, which
5271      can only be expressed as &id-expression.  */
5272   if (DECL_P (op))
5273     {
5274       tree ctx = CP_DECL_CONTEXT (op);
5275       if (TYPE_P (ctx) && dependent_type_p (ctx))
5276         return true;
5277     }
5278
5279   return false;
5280 }
5281
5282 /* The next set of functions are used for providing helpful explanatory
5283    diagnostics for failed overload resolution.  Their messages should be
5284    indented by two spaces for consistency with the messages in
5285    call.c  */
5286
5287 static int
5288 unify_success (bool explain_p ATTRIBUTE_UNUSED)
5289 {
5290   return 0;
5291 }
5292
5293 static int
5294 unify_parameter_deduction_failure (bool explain_p, tree parm)
5295 {
5296   if (explain_p)
5297     inform (input_location,
5298             "  couldn't deduce template parameter %qD", parm);
5299   return 1;
5300 }
5301
5302 static int
5303 unify_invalid (bool explain_p ATTRIBUTE_UNUSED)
5304 {
5305   return 1;
5306 }
5307
5308 static int
5309 unify_cv_qual_mismatch (bool explain_p, tree parm, tree arg)
5310 {
5311   if (explain_p)
5312     inform (input_location,
5313             "  types %qT and %qT have incompatible cv-qualifiers",
5314             parm, arg);
5315   return 1;
5316 }
5317
5318 static int
5319 unify_type_mismatch (bool explain_p, tree parm, tree arg)
5320 {
5321   if (explain_p)
5322     inform (input_location, "  mismatched types %qT and %qT", parm, arg);
5323   return 1;
5324 }
5325
5326 static int
5327 unify_parameter_pack_mismatch (bool explain_p, tree parm, tree arg)
5328 {
5329   if (explain_p)
5330     inform (input_location,
5331             "  template parameter %qD is not a parameter pack, but "
5332             "argument %qD is",
5333             parm, arg);
5334   return 1;
5335 }
5336
5337 static int
5338 unify_ptrmem_cst_mismatch (bool explain_p, tree parm, tree arg)
5339 {
5340   if (explain_p)
5341     inform (input_location,
5342             "  template argument %qE does not match "
5343             "pointer-to-member constant %qE",
5344             arg, parm);
5345   return 1;
5346 }
5347
5348 static int
5349 unify_expression_unequal (bool explain_p, tree parm, tree arg)
5350 {
5351   if (explain_p)
5352     inform (input_location, "  %qE is not equivalent to %qE", parm, arg);
5353   return 1;
5354 }
5355
5356 static int
5357 unify_parameter_pack_inconsistent (bool explain_p, tree old_arg, tree new_arg)
5358 {
5359   if (explain_p)
5360     inform (input_location,
5361             "  inconsistent parameter pack deduction with %qT and %qT",
5362             old_arg, new_arg);
5363   return 1;
5364 }
5365
5366 static int
5367 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
5368 {
5369   if (explain_p)
5370     inform (input_location,
5371             "  deduced conflicting types for parameter %qT (%qT and %qT)",
5372             parm, first, second);
5373   return 1;
5374 }
5375
5376 static int
5377 unify_vla_arg (bool explain_p, tree arg)
5378 {
5379   if (explain_p)
5380     inform (input_location,
5381             "  variable-sized array type %qT is not "
5382             "a valid template argument",
5383             arg);
5384   return 1;
5385 }
5386
5387 static int
5388 unify_method_type_error (bool explain_p, tree arg)
5389 {
5390   if (explain_p)
5391     inform (input_location,
5392             "  member function type %qT is not a valid template argument",
5393             arg);
5394   return 1;
5395 }
5396
5397 static int
5398 unify_arity (bool explain_p, int have, int wanted)
5399 {
5400   if (explain_p)
5401     inform_n (input_location, wanted,
5402               "  candidate expects %d argument, %d provided",
5403               "  candidate expects %d arguments, %d provided",
5404               wanted, have);
5405   return 1;
5406 }
5407
5408 static int
5409 unify_too_many_arguments (bool explain_p, int have, int wanted)
5410 {
5411   return unify_arity (explain_p, have, wanted);
5412 }
5413
5414 static int
5415 unify_too_few_arguments (bool explain_p, int have, int wanted)
5416 {
5417   return unify_arity (explain_p, have, wanted);
5418 }
5419
5420 static int
5421 unify_arg_conversion (bool explain_p, tree to_type,
5422                       tree from_type, tree arg)
5423 {
5424   if (explain_p)
5425     inform (input_location, "  cannot convert %qE (type %qT) to type %qT",
5426             arg, from_type, to_type);
5427   return 1;
5428 }
5429
5430 static int
5431 unify_no_common_base (bool explain_p, enum template_base_result r,
5432                       tree parm, tree arg)
5433 {
5434   if (explain_p)
5435     switch (r)
5436       {
5437       case tbr_ambiguous_baseclass:
5438         inform (input_location, "  %qT is an ambiguous base class of %qT",
5439                 arg, parm);
5440         break;
5441       default:
5442         inform (input_location, "  %qT is not derived from %qT", arg, parm);
5443         break;
5444       }
5445   return 1;
5446 }
5447
5448 static int
5449 unify_inconsistent_template_template_parameters (bool explain_p)
5450 {
5451   if (explain_p)
5452     inform (input_location,
5453             "  template parameters of a template template argument are "
5454             "inconsistent with other deduced template arguments");
5455   return 1;
5456 }
5457
5458 static int
5459 unify_template_deduction_failure (bool explain_p, tree parm, tree arg)
5460 {
5461   if (explain_p)
5462     inform (input_location,
5463             "  can't deduce a template for %qT from non-template type %qT",
5464             parm, arg);
5465   return 1;
5466 }
5467
5468 static int
5469 unify_template_argument_mismatch (bool explain_p, tree parm, tree arg)
5470 {
5471   if (explain_p)
5472     inform (input_location,
5473             "  template argument %qE does not match %qD", arg, parm);
5474   return 1;
5475 }
5476
5477 static int
5478 unify_overload_resolution_failure (bool explain_p, tree arg)
5479 {
5480   if (explain_p)
5481     inform (input_location,
5482             "  could not resolve address from overloaded function %qE",
5483             arg);
5484   return 1;
5485 }
5486
5487 /* Attempt to convert the non-type template parameter EXPR to the
5488    indicated TYPE.  If the conversion is successful, return the
5489    converted value.  If the conversion is unsuccessful, return
5490    NULL_TREE if we issued an error message, or error_mark_node if we
5491    did not.  We issue error messages for out-and-out bad template
5492    parameters, but not simply because the conversion failed, since we
5493    might be just trying to do argument deduction.  Both TYPE and EXPR
5494    must be non-dependent.
5495
5496    The conversion follows the special rules described in
5497    [temp.arg.nontype], and it is much more strict than an implicit
5498    conversion.
5499
5500    This function is called twice for each template argument (see
5501    lookup_template_class for a more accurate description of this
5502    problem). This means that we need to handle expressions which
5503    are not valid in a C++ source, but can be created from the
5504    first call (for instance, casts to perform conversions). These
5505    hacks can go away after we fix the double coercion problem.  */
5506
5507 static tree
5508 convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
5509 {
5510   tree expr_type;
5511
5512   /* Detect immediately string literals as invalid non-type argument.
5513      This special-case is not needed for correctness (we would easily
5514      catch this later), but only to provide better diagnostic for this
5515      common user mistake. As suggested by DR 100, we do not mention
5516      linkage issues in the diagnostic as this is not the point.  */
5517   /* FIXME we're making this OK.  */
5518   if (TREE_CODE (expr) == STRING_CST)
5519     {
5520       if (complain & tf_error)
5521         error ("%qE is not a valid template argument for type %qT "
5522                "because string literals can never be used in this context",
5523                expr, type);
5524       return NULL_TREE;
5525     }
5526
5527   /* Add the ADDR_EXPR now for the benefit of
5528      value_dependent_expression_p.  */
5529   if (TYPE_PTROBV_P (type)
5530       && TREE_CODE (TREE_TYPE (expr)) == ARRAY_TYPE)
5531     expr = decay_conversion (expr);
5532
5533   /* If we are in a template, EXPR may be non-dependent, but still
5534      have a syntactic, rather than semantic, form.  For example, EXPR
5535      might be a SCOPE_REF, rather than the VAR_DECL to which the
5536      SCOPE_REF refers.  Preserving the qualifying scope is necessary
5537      so that access checking can be performed when the template is
5538      instantiated -- but here we need the resolved form so that we can
5539      convert the argument.  */
5540   if (TYPE_REF_OBJ_P (type)
5541       && has_value_dependent_address (expr))
5542     /* If we want the address and it's value-dependent, don't fold.  */;
5543   else if (!type_unknown_p (expr))
5544     expr = fold_non_dependent_expr_sfinae (expr, complain);
5545   if (error_operand_p (expr))
5546     return error_mark_node;
5547   expr_type = TREE_TYPE (expr);
5548   if (TREE_CODE (type) == REFERENCE_TYPE)
5549     expr = mark_lvalue_use (expr);
5550   else
5551     expr = mark_rvalue_use (expr);
5552
5553   /* HACK: Due to double coercion, we can get a
5554      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
5555      which is the tree that we built on the first call (see
5556      below when coercing to reference to object or to reference to
5557      function). We just strip everything and get to the arg.
5558      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
5559      for examples.  */
5560   if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
5561     {
5562       tree probe_type, probe = expr;
5563       if (REFERENCE_REF_P (probe))
5564         probe = TREE_OPERAND (probe, 0);
5565       probe_type = TREE_TYPE (probe);
5566       if (TREE_CODE (probe) == NOP_EXPR)
5567         {
5568           /* ??? Maybe we could use convert_from_reference here, but we
5569              would need to relax its constraints because the NOP_EXPR
5570              could actually change the type to something more cv-qualified,
5571              and this is not folded by convert_from_reference.  */
5572           tree addr = TREE_OPERAND (probe, 0);
5573           gcc_assert (TREE_CODE (probe_type) == REFERENCE_TYPE);
5574           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
5575           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
5576           gcc_assert (same_type_ignoring_top_level_qualifiers_p
5577                       (TREE_TYPE (probe_type),
5578                        TREE_TYPE (TREE_TYPE (addr))));
5579
5580           expr = TREE_OPERAND (addr, 0);
5581           expr_type = TREE_TYPE (expr);
5582         }
5583     }
5584
5585   /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
5586      parameter is a pointer to object, through decay and
5587      qualification conversion. Let's strip everything.  */
5588   else if (TREE_CODE (expr) == NOP_EXPR && TYPE_PTROBV_P (type))
5589     {
5590       STRIP_NOPS (expr);
5591       gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
5592       gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
5593       /* Skip the ADDR_EXPR only if it is part of the decay for
5594          an array. Otherwise, it is part of the original argument
5595          in the source code.  */
5596       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
5597         expr = TREE_OPERAND (expr, 0);
5598       expr_type = TREE_TYPE (expr);
5599     }
5600
5601   /* [temp.arg.nontype]/5, bullet 1
5602
5603      For a non-type template-parameter of integral or enumeration type,
5604      integral promotions (_conv.prom_) and integral conversions
5605      (_conv.integral_) are applied.  */
5606   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
5607     {
5608       tree t = build_integral_nontype_arg_conv (type, expr, complain);
5609       t = maybe_constant_value (t);
5610       if (t != error_mark_node)
5611         expr = t;
5612
5613       if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (expr)))
5614         return error_mark_node;
5615
5616       /* Notice that there are constant expressions like '4 % 0' which
5617          do not fold into integer constants.  */
5618       if (TREE_CODE (expr) != INTEGER_CST)
5619         {
5620           if (complain & tf_error)
5621             {
5622               int errs = errorcount, warns = warningcount;
5623               expr = cxx_constant_value (expr);
5624               if (errorcount > errs || warningcount > warns)
5625                 inform (EXPR_LOC_OR_HERE (expr),
5626                         "in template argument for type %qT ", type);
5627               if (expr == error_mark_node)
5628                 return NULL_TREE;
5629               /* else cxx_constant_value complained but gave us
5630                  a real constant, so go ahead.  */
5631               gcc_assert (TREE_CODE (expr) == INTEGER_CST);
5632             }
5633           else
5634             return NULL_TREE;
5635         }
5636     }
5637   /* [temp.arg.nontype]/5, bullet 2
5638
5639      For a non-type template-parameter of type pointer to object,
5640      qualification conversions (_conv.qual_) and the array-to-pointer
5641      conversion (_conv.array_) are applied.  */
5642   else if (TYPE_PTROBV_P (type))
5643     {
5644       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
5645
5646          A template-argument for a non-type, non-template template-parameter
5647          shall be one of: [...]
5648
5649          -- the name of a non-type template-parameter;
5650          -- the address of an object or function with external linkage, [...]
5651             expressed as "& id-expression" where the & is optional if the name
5652             refers to a function or array, or if the corresponding
5653             template-parameter is a reference.
5654
5655         Here, we do not care about functions, as they are invalid anyway
5656         for a parameter of type pointer-to-object.  */
5657
5658       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
5659         /* Non-type template parameters are OK.  */
5660         ;
5661       else if (TREE_CODE (expr) != ADDR_EXPR
5662                && TREE_CODE (expr_type) != ARRAY_TYPE)
5663         {
5664           if (TREE_CODE (expr) == VAR_DECL)
5665             {
5666               error ("%qD is not a valid template argument "
5667                      "because %qD is a variable, not the address of "
5668                      "a variable",
5669                      expr, expr);
5670               return NULL_TREE;
5671             }
5672           /* Other values, like integer constants, might be valid
5673              non-type arguments of some other type.  */
5674           return error_mark_node;
5675         }
5676       else
5677         {
5678           tree decl;
5679
5680           decl = ((TREE_CODE (expr) == ADDR_EXPR)
5681                   ? TREE_OPERAND (expr, 0) : expr);
5682           if (TREE_CODE (decl) != VAR_DECL)
5683             {
5684               error ("%qE is not a valid template argument of type %qT "
5685                      "because %qE is not a variable",
5686                      expr, type, decl);
5687               return NULL_TREE;
5688             }
5689           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
5690             {
5691               error ("%qE is not a valid template argument of type %qT "
5692                      "because %qD does not have external linkage",
5693                      expr, type, decl);
5694               return NULL_TREE;
5695             }
5696         }
5697
5698       expr = decay_conversion (expr);
5699       if (expr == error_mark_node)
5700         return error_mark_node;
5701
5702       expr = perform_qualification_conversions (type, expr);
5703       if (expr == error_mark_node)
5704         return error_mark_node;
5705     }
5706   /* [temp.arg.nontype]/5, bullet 3
5707
5708      For a non-type template-parameter of type reference to object, no
5709      conversions apply. The type referred to by the reference may be more
5710      cv-qualified than the (otherwise identical) type of the
5711      template-argument. The template-parameter is bound directly to the
5712      template-argument, which must be an lvalue.  */
5713   else if (TYPE_REF_OBJ_P (type))
5714     {
5715       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
5716                                                       expr_type))
5717         return error_mark_node;
5718
5719       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
5720         {
5721           error ("%qE is not a valid template argument for type %qT "
5722                  "because of conflicts in cv-qualification", expr, type);
5723           return NULL_TREE;
5724         }
5725
5726       if (!real_lvalue_p (expr))
5727         {
5728           error ("%qE is not a valid template argument for type %qT "
5729                  "because it is not an lvalue", expr, type);
5730           return NULL_TREE;
5731         }
5732
5733       /* [temp.arg.nontype]/1
5734
5735          A template-argument for a non-type, non-template template-parameter
5736          shall be one of: [...]
5737
5738          -- the address of an object or function with external linkage.  */
5739       if (TREE_CODE (expr) == INDIRECT_REF
5740           && TYPE_REF_OBJ_P (TREE_TYPE (TREE_OPERAND (expr, 0))))
5741         {
5742           expr = TREE_OPERAND (expr, 0);
5743           if (DECL_P (expr))
5744             {
5745               error ("%q#D is not a valid template argument for type %qT "
5746                      "because a reference variable does not have a constant "
5747                      "address", expr, type);
5748               return NULL_TREE;
5749             }
5750         }
5751
5752       if (!DECL_P (expr))
5753         {
5754           error ("%qE is not a valid template argument for type %qT "
5755                  "because it is not an object with external linkage",
5756                  expr, type);
5757           return NULL_TREE;
5758         }
5759
5760       if (!DECL_EXTERNAL_LINKAGE_P (expr))
5761         {
5762           error ("%qE is not a valid template argument for type %qT "
5763                  "because object %qD has not external linkage",
5764                  expr, type, expr);
5765           return NULL_TREE;
5766         }
5767
5768       expr = build_nop (type, build_address (expr));
5769     }
5770   /* [temp.arg.nontype]/5, bullet 4
5771
5772      For a non-type template-parameter of type pointer to function, only
5773      the function-to-pointer conversion (_conv.func_) is applied. If the
5774      template-argument represents a set of overloaded functions (or a
5775      pointer to such), the matching function is selected from the set
5776      (_over.over_).  */
5777   else if (TYPE_PTRFN_P (type))
5778     {
5779       /* If the argument is a template-id, we might not have enough
5780          context information to decay the pointer.  */
5781       if (!type_unknown_p (expr_type))
5782         {
5783           expr = decay_conversion (expr);
5784           if (expr == error_mark_node)
5785             return error_mark_node;
5786         }
5787
5788       expr = convert_nontype_argument_function (type, expr);
5789       if (!expr || expr == error_mark_node)
5790         return expr;
5791
5792       if (TREE_CODE (expr) != ADDR_EXPR)
5793         {
5794           error ("%qE is not a valid template argument for type %qT", expr, type);
5795           error ("it must be the address of a function with external linkage");
5796           return NULL_TREE;
5797         }
5798     }
5799   /* [temp.arg.nontype]/5, bullet 5
5800
5801      For a non-type template-parameter of type reference to function, no
5802      conversions apply. If the template-argument represents a set of
5803      overloaded functions, the matching function is selected from the set
5804      (_over.over_).  */
5805   else if (TYPE_REFFN_P (type))
5806     {
5807       if (TREE_CODE (expr) == ADDR_EXPR)
5808         {
5809           error ("%qE is not a valid template argument for type %qT "
5810                  "because it is a pointer", expr, type);
5811           inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
5812           return NULL_TREE;
5813         }
5814
5815       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
5816       if (!expr || expr == error_mark_node)
5817         return expr;
5818
5819       expr = build_nop (type, build_address (expr));
5820     }
5821   /* [temp.arg.nontype]/5, bullet 6
5822
5823      For a non-type template-parameter of type pointer to member function,
5824      no conversions apply. If the template-argument represents a set of
5825      overloaded member functions, the matching member function is selected
5826      from the set (_over.over_).  */
5827   else if (TYPE_PTRMEMFUNC_P (type))
5828     {
5829       expr = instantiate_type (type, expr, tf_none);
5830       if (expr == error_mark_node)
5831         return error_mark_node;
5832
5833       /* [temp.arg.nontype] bullet 1 says the pointer to member
5834          expression must be a pointer-to-member constant.  */
5835       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5836         return error_mark_node;
5837
5838       /* There is no way to disable standard conversions in
5839          resolve_address_of_overloaded_function (called by
5840          instantiate_type). It is possible that the call succeeded by
5841          converting &B::I to &D::I (where B is a base of D), so we need
5842          to reject this conversion here.
5843
5844          Actually, even if there was a way to disable standard conversions,
5845          it would still be better to reject them here so that we can
5846          provide a superior diagnostic.  */
5847       if (!same_type_p (TREE_TYPE (expr), type))
5848         {
5849           error ("%qE is not a valid template argument for type %qT "
5850                  "because it is of type %qT", expr, type,
5851                  TREE_TYPE (expr));
5852           /* If we are just one standard conversion off, explain.  */
5853           if (can_convert (type, TREE_TYPE (expr)))
5854             inform (input_location,
5855                     "standard conversions are not allowed in this context");
5856           return NULL_TREE;
5857         }
5858     }
5859   /* [temp.arg.nontype]/5, bullet 7
5860
5861      For a non-type template-parameter of type pointer to data member,
5862      qualification conversions (_conv.qual_) are applied.  */
5863   else if (TYPE_PTRMEM_P (type))
5864     {
5865       /* [temp.arg.nontype] bullet 1 says the pointer to member
5866          expression must be a pointer-to-member constant.  */
5867       if (!check_valid_ptrmem_cst_expr (type, expr, complain))
5868         return error_mark_node;
5869
5870       expr = perform_qualification_conversions (type, expr);
5871       if (expr == error_mark_node)
5872         return expr;
5873     }
5874   /* A template non-type parameter must be one of the above.  */
5875   else
5876     gcc_unreachable ();
5877
5878   /* Sanity check: did we actually convert the argument to the
5879      right type?  */
5880   gcc_assert (same_type_ignoring_top_level_qualifiers_p
5881               (type, TREE_TYPE (expr)));
5882   return expr;
5883 }
5884
5885 /* Subroutine of coerce_template_template_parms, which returns 1 if
5886    PARM_PARM and ARG_PARM match using the rule for the template
5887    parameters of template template parameters. Both PARM and ARG are
5888    template parameters; the rest of the arguments are the same as for
5889    coerce_template_template_parms.
5890  */
5891 static int
5892 coerce_template_template_parm (tree parm,
5893                               tree arg,
5894                               tsubst_flags_t complain,
5895                               tree in_decl,
5896                               tree outer_args)
5897 {
5898   if (arg == NULL_TREE || arg == error_mark_node
5899       || parm == NULL_TREE || parm == error_mark_node)
5900     return 0;
5901   
5902   if (TREE_CODE (arg) != TREE_CODE (parm))
5903     return 0;
5904   
5905   switch (TREE_CODE (parm))
5906     {
5907     case TEMPLATE_DECL:
5908       /* We encounter instantiations of templates like
5909          template <template <template <class> class> class TT>
5910          class C;  */
5911       {
5912         tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
5913         tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
5914         
5915         if (!coerce_template_template_parms
5916             (parmparm, argparm, complain, in_decl, outer_args))
5917           return 0;
5918       }
5919       /* Fall through.  */
5920       
5921     case TYPE_DECL:
5922       if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg))
5923           && !TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
5924         /* Argument is a parameter pack but parameter is not.  */
5925         return 0;
5926       break;
5927       
5928     case PARM_DECL:
5929       /* The tsubst call is used to handle cases such as
5930          
5931            template <int> class C {};
5932            template <class T, template <T> class TT> class D {};
5933            D<int, C> d;
5934
5935          i.e. the parameter list of TT depends on earlier parameters.  */
5936       if (!uses_template_parms (TREE_TYPE (arg))
5937           && !same_type_p
5938                 (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
5939                  TREE_TYPE (arg)))
5940         return 0;
5941       
5942       if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg))
5943           && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
5944         /* Argument is a parameter pack but parameter is not.  */
5945         return 0;
5946       
5947       break;
5948
5949     default:
5950       gcc_unreachable ();
5951     }
5952
5953   return 1;
5954 }
5955
5956
5957 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
5958    template template parameters.  Both PARM_PARMS and ARG_PARMS are
5959    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
5960    or PARM_DECL.
5961
5962    Consider the example:
5963      template <class T> class A;
5964      template<template <class U> class TT> class B;
5965
5966    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
5967    the parameters to A, and OUTER_ARGS contains A.  */
5968
5969 static int
5970 coerce_template_template_parms (tree parm_parms,
5971                                 tree arg_parms,
5972                                 tsubst_flags_t complain,
5973                                 tree in_decl,
5974                                 tree outer_args)
5975 {
5976   int nparms, nargs, i;
5977   tree parm, arg;
5978   int variadic_p = 0;
5979
5980   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
5981   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
5982
5983   nparms = TREE_VEC_LENGTH (parm_parms);
5984   nargs = TREE_VEC_LENGTH (arg_parms);
5985
5986   /* Determine whether we have a parameter pack at the end of the
5987      template template parameter's template parameter list.  */
5988   if (TREE_VEC_ELT (parm_parms, nparms - 1) != error_mark_node)
5989     {
5990       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, nparms - 1));
5991       
5992       if (parm == error_mark_node)
5993         return 0;
5994
5995       switch (TREE_CODE (parm))
5996         {
5997         case TEMPLATE_DECL:
5998         case TYPE_DECL:
5999           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm)))
6000             variadic_p = 1;
6001           break;
6002           
6003         case PARM_DECL:
6004           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)))
6005             variadic_p = 1;
6006           break;
6007           
6008         default:
6009           gcc_unreachable ();
6010         }
6011     }
6012  
6013   if (nargs != nparms
6014       && !(variadic_p && nargs >= nparms - 1))
6015     return 0;
6016
6017   /* Check all of the template parameters except the parameter pack at
6018      the end (if any).  */
6019   for (i = 0; i < nparms - variadic_p; ++i)
6020     {
6021       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
6022           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6023         continue;
6024
6025       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6026       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6027
6028       if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6029                                           outer_args))
6030         return 0;
6031
6032     }
6033
6034   if (variadic_p)
6035     {
6036       /* Check each of the template parameters in the template
6037          argument against the template parameter pack at the end of
6038          the template template parameter.  */
6039       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node)
6040         return 0;
6041
6042       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
6043
6044       for (; i < nargs; ++i)
6045         {
6046           if (TREE_VEC_ELT (arg_parms, i) == error_mark_node)
6047             continue;
6048  
6049           arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
6050  
6051           if (!coerce_template_template_parm (parm, arg, complain, in_decl,
6052                                               outer_args))
6053             return 0;
6054         }
6055     }
6056
6057   return 1;
6058 }
6059
6060 /* Verifies that the deduced template arguments (in TARGS) for the
6061    template template parameters (in TPARMS) represent valid bindings,
6062    by comparing the template parameter list of each template argument
6063    to the template parameter list of its corresponding template
6064    template parameter, in accordance with DR150. This
6065    routine can only be called after all template arguments have been
6066    deduced. It will return TRUE if all of the template template
6067    parameter bindings are okay, FALSE otherwise.  */
6068 bool 
6069 template_template_parm_bindings_ok_p (tree tparms, tree targs)
6070 {
6071   int i, ntparms = TREE_VEC_LENGTH (tparms);
6072   bool ret = true;
6073
6074   /* We're dealing with template parms in this process.  */
6075   ++processing_template_decl;
6076
6077   targs = INNERMOST_TEMPLATE_ARGS (targs);
6078
6079   for (i = 0; i < ntparms; ++i)
6080     {
6081       tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
6082       tree targ = TREE_VEC_ELT (targs, i);
6083
6084       if (TREE_CODE (tparm) == TEMPLATE_DECL && targ)
6085         {
6086           tree packed_args = NULL_TREE;
6087           int idx, len = 1;
6088
6089           if (ARGUMENT_PACK_P (targ))
6090             {
6091               /* Look inside the argument pack.  */
6092               packed_args = ARGUMENT_PACK_ARGS (targ);
6093               len = TREE_VEC_LENGTH (packed_args);
6094             }
6095
6096           for (idx = 0; idx < len; ++idx)
6097             {
6098               tree targ_parms = NULL_TREE;
6099
6100               if (packed_args)
6101                 /* Extract the next argument from the argument
6102                    pack.  */
6103                 targ = TREE_VEC_ELT (packed_args, idx);
6104
6105               if (PACK_EXPANSION_P (targ))
6106                 /* Look at the pattern of the pack expansion.  */
6107                 targ = PACK_EXPANSION_PATTERN (targ);
6108
6109               /* Extract the template parameters from the template
6110                  argument.  */
6111               if (TREE_CODE (targ) == TEMPLATE_DECL)
6112                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (targ);
6113               else if (TREE_CODE (targ) == TEMPLATE_TEMPLATE_PARM)
6114                 targ_parms = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_NAME (targ));
6115
6116               /* Verify that we can coerce the template template
6117                  parameters from the template argument to the template
6118                  parameter.  This requires an exact match.  */
6119               if (targ_parms
6120                   && !coerce_template_template_parms
6121                        (DECL_INNERMOST_TEMPLATE_PARMS (tparm),
6122                         targ_parms,
6123                         tf_none,
6124                         tparm,
6125                         targs))
6126                 {
6127                   ret = false;
6128                   goto out;
6129                 }
6130             }
6131         }
6132     }
6133
6134  out:
6135
6136   --processing_template_decl;
6137   return ret;
6138 }
6139
6140 /* Since type attributes aren't mangled, we need to strip them from
6141    template type arguments.  */
6142
6143 static tree
6144 canonicalize_type_argument (tree arg, tsubst_flags_t complain)
6145 {
6146   tree mv;
6147   if (!arg || arg == error_mark_node || arg == TYPE_CANONICAL (arg))
6148     return arg;
6149   mv = TYPE_MAIN_VARIANT (arg);
6150   arg = strip_typedefs (arg);
6151   if (TYPE_ALIGN (arg) != TYPE_ALIGN (mv)
6152       || TYPE_ATTRIBUTES (arg) != TYPE_ATTRIBUTES (mv))
6153     {
6154       if (complain & tf_warning)
6155         warning (0, "ignoring attributes on template argument %qT", arg);
6156       arg = build_aligned_type (arg, TYPE_ALIGN (mv));
6157       arg = cp_build_type_attribute_variant (arg, TYPE_ATTRIBUTES (mv));
6158     }
6159   return arg;
6160 }
6161
6162 /* Convert the indicated template ARG as necessary to match the
6163    indicated template PARM.  Returns the converted ARG, or
6164    error_mark_node if the conversion was unsuccessful.  Error and
6165    warning messages are issued under control of COMPLAIN.  This
6166    conversion is for the Ith parameter in the parameter list.  ARGS is
6167    the full set of template arguments deduced so far.  */
6168
6169 static tree
6170 convert_template_argument (tree parm,
6171                            tree arg,
6172                            tree args,
6173                            tsubst_flags_t complain,
6174                            int i,
6175                            tree in_decl)
6176 {
6177   tree orig_arg;
6178   tree val;
6179   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
6180
6181   if (TREE_CODE (arg) == TREE_LIST
6182       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
6183     {
6184       /* The template argument was the name of some
6185          member function.  That's usually
6186          invalid, but static members are OK.  In any
6187          case, grab the underlying fields/functions
6188          and issue an error later if required.  */
6189       orig_arg = TREE_VALUE (arg);
6190       TREE_TYPE (arg) = unknown_type_node;
6191     }
6192
6193   orig_arg = arg;
6194
6195   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
6196   requires_type = (TREE_CODE (parm) == TYPE_DECL
6197                    || requires_tmpl_type);
6198
6199   /* When determining whether an argument pack expansion is a template,
6200      look at the pattern.  */
6201   if (TREE_CODE (arg) == TYPE_PACK_EXPANSION)
6202     arg = PACK_EXPANSION_PATTERN (arg);
6203
6204   /* Deal with an injected-class-name used as a template template arg.  */
6205   if (requires_tmpl_type && CLASS_TYPE_P (arg))
6206     {
6207       tree t = maybe_get_template_decl_from_type_decl (TYPE_NAME (arg));
6208       if (TREE_CODE (t) == TEMPLATE_DECL)
6209         {
6210           if (cxx_dialect >= cxx0x)
6211             /* OK under DR 1004.  */;
6212           else if (complain & tf_warning_or_error)
6213             pedwarn (input_location, OPT_pedantic, "injected-class-name %qD"
6214                      " used as template template argument", TYPE_NAME (arg));
6215           else if (flag_pedantic_errors)
6216             t = arg;
6217
6218           arg = t;
6219         }
6220     }
6221
6222   is_tmpl_type = 
6223     ((TREE_CODE (arg) == TEMPLATE_DECL
6224       && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
6225      || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6226      || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
6227
6228   if (is_tmpl_type
6229       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
6230           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
6231     arg = TYPE_STUB_DECL (arg);
6232
6233   is_type = TYPE_P (arg) || is_tmpl_type;
6234
6235   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
6236       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
6237     {
6238       permerror (input_location, "to refer to a type member of a template parameter, "
6239                  "use %<typename %E%>", orig_arg);
6240
6241       orig_arg = make_typename_type (TREE_OPERAND (arg, 0),
6242                                      TREE_OPERAND (arg, 1),
6243                                      typename_type,
6244                                      complain & tf_error);
6245       arg = orig_arg;
6246       is_type = 1;
6247     }
6248   if (is_type != requires_type)
6249     {
6250       if (in_decl)
6251         {
6252           if (complain & tf_error)
6253             {
6254               error ("type/value mismatch at argument %d in template "
6255                      "parameter list for %qD",
6256                      i + 1, in_decl);
6257               if (is_type)
6258                 error ("  expected a constant of type %qT, got %qT",
6259                        TREE_TYPE (parm),
6260                        (DECL_P (arg) ? DECL_NAME (arg) : orig_arg));
6261               else if (requires_tmpl_type)
6262                 error ("  expected a class template, got %qE", orig_arg);
6263               else
6264                 error ("  expected a type, got %qE", orig_arg);
6265             }
6266         }
6267       return error_mark_node;
6268     }
6269   if (is_tmpl_type ^ requires_tmpl_type)
6270     {
6271       if (in_decl && (complain & tf_error))
6272         {
6273           error ("type/value mismatch at argument %d in template "
6274                  "parameter list for %qD",
6275                  i + 1, in_decl);
6276           if (is_tmpl_type)
6277             error ("  expected a type, got %qT", DECL_NAME (arg));
6278           else
6279             error ("  expected a class template, got %qT", orig_arg);
6280         }
6281       return error_mark_node;
6282     }
6283
6284   if (is_type)
6285     {
6286       if (requires_tmpl_type)
6287         {
6288           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
6289             /* The number of argument required is not known yet.
6290                Just accept it for now.  */
6291             val = TREE_TYPE (arg);
6292           else
6293             {
6294               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
6295               tree argparm;
6296
6297               argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
6298
6299               if (coerce_template_template_parms (parmparm, argparm,
6300                                                   complain, in_decl,
6301                                                   args))
6302                 {
6303                   val = arg;
6304
6305                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
6306                      TEMPLATE_DECL.  */
6307                   if (val != error_mark_node)
6308                     {
6309                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
6310                         val = TREE_TYPE (val);
6311                       if (TREE_CODE (orig_arg) == TYPE_PACK_EXPANSION)
6312                         val = make_pack_expansion (val);
6313                     }
6314                 }
6315               else
6316                 {
6317                   if (in_decl && (complain & tf_error))
6318                     {
6319                       error ("type/value mismatch at argument %d in "
6320                              "template parameter list for %qD",
6321                              i + 1, in_decl);
6322                       error ("  expected a template of type %qD, got %qT",
6323                              parm, orig_arg);
6324                     }
6325
6326                   val = error_mark_node;
6327                 }
6328             }
6329         }
6330       else
6331         val = orig_arg;
6332       /* We only form one instance of each template specialization.
6333          Therefore, if we use a non-canonical variant (i.e., a
6334          typedef), any future messages referring to the type will use
6335          the typedef, which is confusing if those future uses do not
6336          themselves also use the typedef.  */
6337       if (TYPE_P (val))
6338         val = canonicalize_type_argument (val, complain);
6339     }
6340   else
6341     {
6342       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
6343
6344       if (invalid_nontype_parm_type_p (t, complain))
6345         return error_mark_node;
6346
6347       if (template_parameter_pack_p (parm) && ARGUMENT_PACK_P (orig_arg))
6348         {
6349           if (same_type_p (t, TREE_TYPE (orig_arg)))
6350             val = orig_arg;
6351           else
6352             {
6353               /* Not sure if this is reachable, but it doesn't hurt
6354                  to be robust.  */
6355               error ("type mismatch in nontype parameter pack");
6356               val = error_mark_node;
6357             }
6358         }
6359       else if (!uses_template_parms (orig_arg) && !uses_template_parms (t))
6360         /* We used to call digest_init here.  However, digest_init
6361            will report errors, which we don't want when complain
6362            is zero.  More importantly, digest_init will try too
6363            hard to convert things: for example, `0' should not be
6364            converted to pointer type at this point according to
6365            the standard.  Accepting this is not merely an
6366            extension, since deciding whether or not these
6367            conversions can occur is part of determining which
6368            function template to call, or whether a given explicit
6369            argument specification is valid.  */
6370         val = convert_nontype_argument (t, orig_arg, complain);
6371       else
6372         val = orig_arg;
6373
6374       if (val == NULL_TREE)
6375         val = error_mark_node;
6376       else if (val == error_mark_node && (complain & tf_error))
6377         error ("could not convert template argument %qE to %qT",  orig_arg, t);
6378
6379       if (TREE_CODE (val) == SCOPE_REF)
6380         {
6381           /* Strip typedefs from the SCOPE_REF.  */
6382           tree type = canonicalize_type_argument (TREE_TYPE (val), complain);
6383           tree scope = canonicalize_type_argument (TREE_OPERAND (val, 0),
6384                                                    complain);
6385           val = build_qualified_name (type, scope, TREE_OPERAND (val, 1),
6386                                       QUALIFIED_NAME_IS_TEMPLATE (val));
6387         }
6388     }
6389
6390   return val;
6391 }
6392
6393 /* Coerces the remaining template arguments in INNER_ARGS (from
6394    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
6395    Returns the coerced argument pack. PARM_IDX is the position of this
6396    parameter in the template parameter list. ARGS is the original
6397    template argument list.  */
6398 static tree
6399 coerce_template_parameter_pack (tree parms,
6400                                 int parm_idx,
6401                                 tree args,
6402                                 tree inner_args,
6403                                 int arg_idx,
6404                                 tree new_args,
6405                                 int* lost,
6406                                 tree in_decl,
6407                                 tsubst_flags_t complain)
6408 {
6409   tree parm = TREE_VEC_ELT (parms, parm_idx);
6410   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6411   tree packed_args;
6412   tree argument_pack;
6413   tree packed_types = NULL_TREE;
6414
6415   if (arg_idx > nargs)
6416     arg_idx = nargs;
6417
6418   packed_args = make_tree_vec (nargs - arg_idx);
6419
6420   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
6421       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
6422     {
6423       /* When the template parameter is a non-type template
6424          parameter pack whose type uses parameter packs, we need
6425          to look at each of the template arguments
6426          separately. Build a vector of the types for these
6427          non-type template parameters in PACKED_TYPES.  */
6428       tree expansion 
6429         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
6430       packed_types = tsubst_pack_expansion (expansion, args,
6431                                             complain, in_decl);
6432
6433       if (packed_types == error_mark_node)
6434         return error_mark_node;
6435
6436       /* Check that we have the right number of arguments.  */
6437       if (arg_idx < nargs
6438           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
6439           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
6440         {
6441           int needed_parms 
6442             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
6443           error ("wrong number of template arguments (%d, should be %d)",
6444                  nargs, needed_parms);
6445           return error_mark_node;
6446         }
6447
6448       /* If we aren't able to check the actual arguments now
6449          (because they haven't been expanded yet), we can at least
6450          verify that all of the types used for the non-type
6451          template parameter pack are, in fact, valid for non-type
6452          template parameters.  */
6453       if (arg_idx < nargs 
6454           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
6455         {
6456           int j, len = TREE_VEC_LENGTH (packed_types);
6457           for (j = 0; j < len; ++j)
6458             {
6459               tree t = TREE_VEC_ELT (packed_types, j);
6460               if (invalid_nontype_parm_type_p (t, complain))
6461                 return error_mark_node;
6462             }
6463         }
6464     }
6465
6466   /* Convert the remaining arguments, which will be a part of the
6467      parameter pack "parm".  */
6468   for (; arg_idx < nargs; ++arg_idx)
6469     {
6470       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
6471       tree actual_parm = TREE_VALUE (parm);
6472
6473       if (packed_types && !PACK_EXPANSION_P (arg))
6474         {
6475           /* When we have a vector of types (corresponding to the
6476              non-type template parameter pack that uses parameter
6477              packs in its type, as mention above), and the
6478              argument is not an expansion (which expands to a
6479              currently unknown number of arguments), clone the
6480              parm and give it the next type in PACKED_TYPES.  */
6481           actual_parm = copy_node (actual_parm);
6482           TREE_TYPE (actual_parm) = 
6483             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
6484         }
6485
6486       if (arg != error_mark_node)
6487         arg = convert_template_argument (actual_parm, 
6488                                          arg, new_args, complain, parm_idx,
6489                                          in_decl);
6490       if (arg == error_mark_node)
6491         (*lost)++;
6492       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
6493     }
6494
6495   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
6496       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
6497     argument_pack = cxx_make_type (TYPE_ARGUMENT_PACK);
6498   else
6499     {
6500       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
6501       TREE_TYPE (argument_pack) 
6502         = tsubst (TREE_TYPE (TREE_VALUE (parm)), new_args, complain, in_decl);
6503       TREE_CONSTANT (argument_pack) = 1;
6504     }
6505
6506   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
6507 #ifdef ENABLE_CHECKING
6508   SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (packed_args,
6509                                        TREE_VEC_LENGTH (packed_args));
6510 #endif
6511   return argument_pack;
6512 }
6513
6514 /* Convert all template arguments to their appropriate types, and
6515    return a vector containing the innermost resulting template
6516    arguments.  If any error occurs, return error_mark_node. Error and
6517    warning messages are issued under control of COMPLAIN.
6518
6519    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
6520    for arguments not specified in ARGS.  Otherwise, if
6521    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
6522    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
6523    USE_DEFAULT_ARGS is false, then all arguments must be specified in
6524    ARGS.  */
6525
6526 static tree
6527 coerce_template_parms (tree parms,
6528                        tree args,
6529                        tree in_decl,
6530                        tsubst_flags_t complain,
6531                        bool require_all_args,
6532                        bool use_default_args)
6533 {
6534   int nparms, nargs, parm_idx, arg_idx, lost = 0;
6535   tree inner_args;
6536   tree new_args;
6537   tree new_inner_args;
6538   int saved_unevaluated_operand;
6539   int saved_inhibit_evaluation_warnings;
6540
6541   /* When used as a boolean value, indicates whether this is a
6542      variadic template parameter list. Since it's an int, we can also
6543      subtract it from nparms to get the number of non-variadic
6544      parameters.  */
6545   int variadic_p = 0;
6546   int post_variadic_parms = 0;
6547
6548   if (args == error_mark_node)
6549     return error_mark_node;
6550
6551   nparms = TREE_VEC_LENGTH (parms);
6552
6553   /* Determine if there are any parameter packs.  */
6554   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
6555     {
6556       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
6557       if (variadic_p)
6558         ++post_variadic_parms;
6559       if (template_parameter_pack_p (tparm))
6560         ++variadic_p;
6561     }
6562
6563   inner_args = INNERMOST_TEMPLATE_ARGS (args);
6564   /* If there are no parameters that follow a parameter pack, we need to
6565      expand any argument packs so that we can deduce a parameter pack from
6566      some non-packed args followed by an argument pack, as in variadic85.C.
6567      If there are such parameters, we need to leave argument packs intact
6568      so the arguments are assigned properly.  This can happen when dealing
6569      with a nested class inside a partial specialization of a class
6570      template, as in variadic92.C, or when deducing a template parameter pack
6571      from a sub-declarator, as in variadic114.C.  */
6572   if (!post_variadic_parms)
6573     inner_args = expand_template_argument_pack (inner_args);
6574
6575   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
6576   if ((nargs > nparms && !variadic_p)
6577       || (nargs < nparms - variadic_p
6578           && require_all_args
6579           && (!use_default_args
6580               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
6581                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
6582     {
6583       if (complain & tf_error)
6584         {
6585           if (variadic_p)
6586             {
6587               nparms -= variadic_p;
6588               error ("wrong number of template arguments "
6589                      "(%d, should be %d or more)", nargs, nparms);
6590             }
6591           else
6592              error ("wrong number of template arguments "
6593                     "(%d, should be %d)", nargs, nparms);
6594
6595           if (in_decl)
6596             error ("provided for %q+D", in_decl);
6597         }
6598
6599       return error_mark_node;
6600     }
6601
6602   /* We need to evaluate the template arguments, even though this
6603      template-id may be nested within a "sizeof".  */
6604   saved_unevaluated_operand = cp_unevaluated_operand;
6605   cp_unevaluated_operand = 0;
6606   saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
6607   c_inhibit_evaluation_warnings = 0;
6608   new_inner_args = make_tree_vec (nparms);
6609   new_args = add_outermost_template_args (args, new_inner_args);
6610   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
6611     {
6612       tree arg;
6613       tree parm;
6614
6615       /* Get the Ith template parameter.  */
6616       parm = TREE_VEC_ELT (parms, parm_idx);
6617  
6618       if (parm == error_mark_node)
6619       {
6620         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
6621         continue;
6622       }
6623
6624       /* Calculate the next argument.  */
6625       if (arg_idx < nargs)
6626         arg = TREE_VEC_ELT (inner_args, arg_idx);
6627       else
6628         arg = NULL_TREE;
6629
6630       if (template_parameter_pack_p (TREE_VALUE (parm))
6631           && !(arg && ARGUMENT_PACK_P (arg)))
6632         {
6633           /* All remaining arguments will be placed in the
6634              template parameter pack PARM.  */
6635           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
6636                                                 inner_args, arg_idx,
6637                                                 new_args, &lost,
6638                                                 in_decl, complain);
6639
6640           /* Store this argument.  */
6641           if (arg == error_mark_node)
6642             lost++;
6643           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
6644
6645           /* We are done with all of the arguments.  */
6646           arg_idx = nargs;
6647           
6648           continue;
6649         }
6650       else if (arg)
6651         {
6652           if (PACK_EXPANSION_P (arg))
6653             {
6654               if (complain & tf_error)
6655                 {
6656                   /* FIXME this restriction was removed by N2555; see
6657                      bug 35722.  */
6658                   /* If ARG is a pack expansion, but PARM is not a
6659                      template parameter pack (if it were, we would have
6660                      handled it above), we're trying to expand into a
6661                      fixed-length argument list.  */
6662                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
6663                     sorry ("cannot expand %<%E%> into a fixed-length "
6664                            "argument list", arg);
6665                   else
6666                     sorry ("cannot expand %<%T%> into a fixed-length "
6667                            "argument list", arg);
6668                 }
6669               ++lost;
6670             }
6671         }
6672       else if (require_all_args)
6673         {
6674           /* There must be a default arg in this case.  */
6675           arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
6676                                      complain, in_decl);
6677           /* The position of the first default template argument,
6678              is also the number of non-defaulted arguments in NEW_INNER_ARGS.
6679              Record that.  */
6680           if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6681             SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args, arg_idx);
6682         }
6683       else
6684         break;
6685
6686       if (arg == error_mark_node)
6687         {
6688           if (complain & tf_error)
6689             error ("template argument %d is invalid", arg_idx + 1);
6690         }
6691       else if (!arg)
6692         /* This only occurs if there was an error in the template
6693            parameter list itself (which we would already have
6694            reported) that we are trying to recover from, e.g., a class
6695            template with a parameter list such as
6696            template<typename..., typename>.  */
6697         ++lost;
6698       else
6699         arg = convert_template_argument (TREE_VALUE (parm),
6700                                          arg, new_args, complain, 
6701                                          parm_idx, in_decl);
6702
6703       if (arg == error_mark_node)
6704         lost++;
6705       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
6706     }
6707   cp_unevaluated_operand = saved_unevaluated_operand;
6708   c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
6709
6710   if (lost)
6711     return error_mark_node;
6712
6713 #ifdef ENABLE_CHECKING
6714   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args))
6715     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (new_inner_args,
6716                                          TREE_VEC_LENGTH (new_inner_args));
6717 #endif
6718
6719   return new_inner_args;
6720 }
6721
6722 /* Returns 1 if template args OT and NT are equivalent.  */
6723
6724 static int
6725 template_args_equal (tree ot, tree nt)
6726 {
6727   if (nt == ot)
6728     return 1;
6729   if (nt == NULL_TREE || ot == NULL_TREE)
6730     return false;
6731
6732   if (TREE_CODE (nt) == TREE_VEC)
6733     /* For member templates */
6734     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
6735   else if (PACK_EXPANSION_P (ot))
6736     return PACK_EXPANSION_P (nt) 
6737       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
6738                               PACK_EXPANSION_PATTERN (nt));
6739   else if (ARGUMENT_PACK_P (ot))
6740     {
6741       int i, len;
6742       tree opack, npack;
6743
6744       if (!ARGUMENT_PACK_P (nt))
6745         return 0;
6746
6747       opack = ARGUMENT_PACK_ARGS (ot);
6748       npack = ARGUMENT_PACK_ARGS (nt);
6749       len = TREE_VEC_LENGTH (opack);
6750       if (TREE_VEC_LENGTH (npack) != len)
6751         return 0;
6752       for (i = 0; i < len; ++i)
6753         if (!template_args_equal (TREE_VEC_ELT (opack, i),
6754                                   TREE_VEC_ELT (npack, i)))
6755           return 0;
6756       return 1;
6757     }
6758   else if (ot && TREE_CODE (ot) == ARGUMENT_PACK_SELECT)
6759     {
6760       /* We get here probably because we are in the middle of substituting
6761          into the pattern of a pack expansion. In that case the
6762          ARGUMENT_PACK_SELECT temporarily replaces the pack argument we are
6763          interested in. So we want to use the initial pack argument for
6764          the comparison.  */
6765       ot = ARGUMENT_PACK_SELECT_FROM_PACK (ot);
6766       if (nt && TREE_CODE (nt) == ARGUMENT_PACK_SELECT)
6767         nt = ARGUMENT_PACK_SELECT_FROM_PACK (nt);
6768       return template_args_equal (ot, nt);
6769     }
6770   else if (TYPE_P (nt))
6771     return TYPE_P (ot) && same_type_p (ot, nt);
6772   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
6773     return 0;
6774   else
6775     return cp_tree_equal (ot, nt);
6776 }
6777
6778 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets of
6779    template arguments.  Returns 0 otherwise, and updates OLDARG_PTR and
6780    NEWARG_PTR with the offending arguments if they are non-NULL.  */
6781
6782 static int
6783 comp_template_args_with_info (tree oldargs, tree newargs,
6784                               tree *oldarg_ptr, tree *newarg_ptr)
6785 {
6786   int i;
6787
6788   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
6789     return 0;
6790
6791   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
6792     {
6793       tree nt = TREE_VEC_ELT (newargs, i);
6794       tree ot = TREE_VEC_ELT (oldargs, i);
6795
6796       if (! template_args_equal (ot, nt))
6797         {
6798           if (oldarg_ptr != NULL)
6799             *oldarg_ptr = ot;
6800           if (newarg_ptr != NULL)
6801             *newarg_ptr = nt;
6802           return 0;
6803         }
6804     }
6805   return 1;
6806 }
6807
6808 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
6809    of template arguments.  Returns 0 otherwise.  */
6810
6811 int
6812 comp_template_args (tree oldargs, tree newargs)
6813 {
6814   return comp_template_args_with_info (oldargs, newargs, NULL, NULL);
6815 }
6816
6817 static void
6818 add_pending_template (tree d)
6819 {
6820   tree ti = (TYPE_P (d)
6821              ? CLASSTYPE_TEMPLATE_INFO (d)
6822              : DECL_TEMPLATE_INFO (d));
6823   struct pending_template *pt;
6824   int level;
6825
6826   if (TI_PENDING_TEMPLATE_FLAG (ti))
6827     return;
6828
6829   /* We are called both from instantiate_decl, where we've already had a
6830      tinst_level pushed, and instantiate_template, where we haven't.
6831      Compensate.  */
6832   level = !current_tinst_level || current_tinst_level->decl != d;
6833
6834   if (level)
6835     push_tinst_level (d);
6836
6837   pt = ggc_alloc_pending_template ();
6838   pt->next = NULL;
6839   pt->tinst = current_tinst_level;
6840   if (last_pending_template)
6841     last_pending_template->next = pt;
6842   else
6843     pending_templates = pt;
6844
6845   last_pending_template = pt;
6846
6847   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
6848
6849   if (level)
6850     pop_tinst_level ();
6851 }
6852
6853
6854 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
6855    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
6856    documentation for TEMPLATE_ID_EXPR.  */
6857
6858 tree
6859 lookup_template_function (tree fns, tree arglist)
6860 {
6861   tree type;
6862
6863   if (fns == error_mark_node || arglist == error_mark_node)
6864     return error_mark_node;
6865
6866   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
6867
6868   if (!is_overloaded_fn (fns) && TREE_CODE (fns) != IDENTIFIER_NODE)
6869     {
6870       error ("%q#D is not a function template", fns);
6871       return error_mark_node;
6872     }
6873
6874   if (BASELINK_P (fns))
6875     {
6876       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
6877                                          unknown_type_node,
6878                                          BASELINK_FUNCTIONS (fns),
6879                                          arglist);
6880       return fns;
6881     }
6882
6883   type = TREE_TYPE (fns);
6884   if (TREE_CODE (fns) == OVERLOAD || !type)
6885     type = unknown_type_node;
6886
6887   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
6888 }
6889
6890 /* Within the scope of a template class S<T>, the name S gets bound
6891    (in build_self_reference) to a TYPE_DECL for the class, not a
6892    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
6893    or one of its enclosing classes, and that type is a template,
6894    return the associated TEMPLATE_DECL.  Otherwise, the original
6895    DECL is returned.
6896
6897    Also handle the case when DECL is a TREE_LIST of ambiguous
6898    injected-class-names from different bases.  */
6899
6900 tree
6901 maybe_get_template_decl_from_type_decl (tree decl)
6902 {
6903   if (decl == NULL_TREE)
6904     return decl;
6905
6906   /* DR 176: A lookup that finds an injected-class-name (10.2
6907      [class.member.lookup]) can result in an ambiguity in certain cases
6908      (for example, if it is found in more than one base class). If all of
6909      the injected-class-names that are found refer to specializations of
6910      the same class template, and if the name is followed by a
6911      template-argument-list, the reference refers to the class template
6912      itself and not a specialization thereof, and is not ambiguous.  */
6913   if (TREE_CODE (decl) == TREE_LIST)
6914     {
6915       tree t, tmpl = NULL_TREE;
6916       for (t = decl; t; t = TREE_CHAIN (t))
6917         {
6918           tree elt = maybe_get_template_decl_from_type_decl (TREE_VALUE (t));
6919           if (!tmpl)
6920             tmpl = elt;
6921           else if (tmpl != elt)
6922             break;
6923         }
6924       if (tmpl && t == NULL_TREE)
6925         return tmpl;
6926       else
6927         return decl;
6928     }
6929
6930   return (decl != NULL_TREE
6931           && DECL_SELF_REFERENCE_P (decl)
6932           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
6933     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
6934 }
6935
6936 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
6937    parameters, find the desired type.
6938
6939    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
6940
6941    IN_DECL, if non-NULL, is the template declaration we are trying to
6942    instantiate.
6943
6944    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
6945    the class we are looking up.
6946
6947    Issue error and warning messages under control of COMPLAIN.
6948
6949    If the template class is really a local class in a template
6950    function, then the FUNCTION_CONTEXT is the function in which it is
6951    being instantiated.
6952
6953    ??? Note that this function is currently called *twice* for each
6954    template-id: the first time from the parser, while creating the
6955    incomplete type (finish_template_type), and the second type during the
6956    real instantiation (instantiate_template_class). This is surely something
6957    that we want to avoid. It also causes some problems with argument
6958    coercion (see convert_nontype_argument for more information on this).  */
6959
6960 static tree
6961 lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
6962                          int entering_scope, tsubst_flags_t complain)
6963 {
6964   tree templ = NULL_TREE, parmlist;
6965   tree t;
6966   spec_entry **slot;
6967   spec_entry *entry;
6968   spec_entry elt;
6969   hashval_t hash;
6970
6971   if (TREE_CODE (d1) == IDENTIFIER_NODE)
6972     {
6973       tree value = innermost_non_namespace_value (d1);
6974       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
6975         templ = value;
6976       else
6977         {
6978           if (context)
6979             push_decl_namespace (context);
6980           templ = lookup_name (d1);
6981           templ = maybe_get_template_decl_from_type_decl (templ);
6982           if (context)
6983             pop_decl_namespace ();
6984         }
6985       if (templ)
6986         context = DECL_CONTEXT (templ);
6987     }
6988   else if (TREE_CODE (d1) == TYPE_DECL && MAYBE_CLASS_TYPE_P (TREE_TYPE (d1)))
6989     {
6990       tree type = TREE_TYPE (d1);
6991
6992       /* If we are declaring a constructor, say A<T>::A<T>, we will get
6993          an implicit typename for the second A.  Deal with it.  */
6994       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
6995         type = TREE_TYPE (type);
6996
6997       if (CLASSTYPE_TEMPLATE_INFO (type))
6998         {
6999           templ = CLASSTYPE_TI_TEMPLATE (type);
7000           d1 = DECL_NAME (templ);
7001         }
7002     }
7003   else if (TREE_CODE (d1) == ENUMERAL_TYPE
7004            || (TYPE_P (d1) && MAYBE_CLASS_TYPE_P (d1)))
7005     {
7006       templ = TYPE_TI_TEMPLATE (d1);
7007       d1 = DECL_NAME (templ);
7008     }
7009   else if (TREE_CODE (d1) == TEMPLATE_DECL
7010            && DECL_TEMPLATE_RESULT (d1)
7011            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
7012     {
7013       templ = d1;
7014       d1 = DECL_NAME (templ);
7015       context = DECL_CONTEXT (templ);
7016     }
7017
7018   /* Issue an error message if we didn't find a template.  */
7019   if (! templ)
7020     {
7021       if (complain & tf_error)
7022         error ("%qT is not a template", d1);
7023       return error_mark_node;
7024     }
7025
7026   if (TREE_CODE (templ) != TEMPLATE_DECL
7027          /* Make sure it's a user visible template, if it was named by
7028             the user.  */
7029       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (templ)
7030           && !PRIMARY_TEMPLATE_P (templ)))
7031     {
7032       if (complain & tf_error)
7033         {
7034           error ("non-template type %qT used as a template", d1);
7035           if (in_decl)
7036             error ("for template declaration %q+D", in_decl);
7037         }
7038       return error_mark_node;
7039     }
7040
7041   complain &= ~tf_user;
7042
7043   if (DECL_TEMPLATE_TEMPLATE_PARM_P (templ))
7044     {
7045       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
7046          template arguments */
7047
7048       tree parm;
7049       tree arglist2;
7050       tree outer;
7051
7052       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (templ);
7053
7054       /* Consider an example where a template template parameter declared as
7055
7056            template <class T, class U = std::allocator<T> > class TT
7057
7058          The template parameter level of T and U are one level larger than
7059          of TT.  To proper process the default argument of U, say when an
7060          instantiation `TT<int>' is seen, we need to build the full
7061          arguments containing {int} as the innermost level.  Outer levels,
7062          available when not appearing as default template argument, can be
7063          obtained from the arguments of the enclosing template.
7064
7065          Suppose that TT is later substituted with std::vector.  The above
7066          instantiation is `TT<int, std::allocator<T> >' with TT at
7067          level 1, and T at level 2, while the template arguments at level 1
7068          becomes {std::vector} and the inner level 2 is {int}.  */
7069
7070       outer = DECL_CONTEXT (templ);
7071       if (outer)
7072         outer = TI_ARGS (get_template_info (DECL_TEMPLATE_RESULT (outer)));
7073       else if (current_template_parms)
7074         /* This is an argument of the current template, so we haven't set
7075            DECL_CONTEXT yet.  */
7076         outer = current_template_args ();
7077
7078       if (outer)
7079         arglist = add_to_template_args (outer, arglist);
7080
7081       arglist2 = coerce_template_parms (parmlist, arglist, templ,
7082                                         complain,
7083                                         /*require_all_args=*/true,
7084                                         /*use_default_args=*/true);
7085       if (arglist2 == error_mark_node
7086           || (!uses_template_parms (arglist2)
7087               && check_instantiated_args (templ, arglist2, complain)))
7088         return error_mark_node;
7089
7090       parm = bind_template_template_parm (TREE_TYPE (templ), arglist2);
7091       return parm;
7092     }
7093   else
7094     {
7095       tree template_type = TREE_TYPE (templ);
7096       tree gen_tmpl;
7097       tree type_decl;
7098       tree found = NULL_TREE;
7099       int arg_depth;
7100       int parm_depth;
7101       int is_dependent_type;
7102       int use_partial_inst_tmpl = false;
7103
7104       gen_tmpl = most_general_template (templ);
7105       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
7106       parm_depth = TMPL_PARMS_DEPTH (parmlist);
7107       arg_depth = TMPL_ARGS_DEPTH (arglist);
7108
7109       if (arg_depth == 1 && parm_depth > 1)
7110         {
7111           /* We've been given an incomplete set of template arguments.
7112              For example, given:
7113
7114                template <class T> struct S1 {
7115                  template <class U> struct S2 {};
7116                  template <class U> struct S2<U*> {};
7117                 };
7118
7119              we will be called with an ARGLIST of `U*', but the
7120              TEMPLATE will be `template <class T> template
7121              <class U> struct S1<T>::S2'.  We must fill in the missing
7122              arguments.  */
7123           arglist
7124             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (templ)),
7125                                            arglist);
7126           arg_depth = TMPL_ARGS_DEPTH (arglist);
7127         }
7128
7129       /* Now we should have enough arguments.  */
7130       gcc_assert (parm_depth == arg_depth);
7131
7132       /* From here on, we're only interested in the most general
7133          template.  */
7134
7135       /* Calculate the BOUND_ARGS.  These will be the args that are
7136          actually tsubst'd into the definition to create the
7137          instantiation.  */
7138       if (parm_depth > 1)
7139         {
7140           /* We have multiple levels of arguments to coerce, at once.  */
7141           int i;
7142           int saved_depth = TMPL_ARGS_DEPTH (arglist);
7143
7144           tree bound_args = make_tree_vec (parm_depth);
7145
7146           for (i = saved_depth,
7147                  t = DECL_TEMPLATE_PARMS (gen_tmpl);
7148                i > 0 && t != NULL_TREE;
7149                --i, t = TREE_CHAIN (t))
7150             {
7151               tree a;
7152               if (i == saved_depth)
7153                 a = coerce_template_parms (TREE_VALUE (t),
7154                                            arglist, gen_tmpl,
7155                                            complain,
7156                                            /*require_all_args=*/true,
7157                                            /*use_default_args=*/true);
7158               else
7159                 /* Outer levels should have already been coerced.  */
7160                 a = TMPL_ARGS_LEVEL (arglist, i);
7161
7162               /* Don't process further if one of the levels fails.  */
7163               if (a == error_mark_node)
7164                 {
7165                   /* Restore the ARGLIST to its full size.  */
7166                   TREE_VEC_LENGTH (arglist) = saved_depth;
7167                   return error_mark_node;
7168                 }
7169
7170               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
7171
7172               /* We temporarily reduce the length of the ARGLIST so
7173                  that coerce_template_parms will see only the arguments
7174                  corresponding to the template parameters it is
7175                  examining.  */
7176               TREE_VEC_LENGTH (arglist)--;
7177             }
7178
7179           /* Restore the ARGLIST to its full size.  */
7180           TREE_VEC_LENGTH (arglist) = saved_depth;
7181
7182           arglist = bound_args;
7183         }
7184       else
7185         arglist
7186           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
7187                                    INNERMOST_TEMPLATE_ARGS (arglist),
7188                                    gen_tmpl,
7189                                    complain,
7190                                    /*require_all_args=*/true,
7191                                    /*use_default_args=*/true);
7192
7193       if (arglist == error_mark_node)
7194         /* We were unable to bind the arguments.  */
7195         return error_mark_node;
7196
7197       /* In the scope of a template class, explicit references to the
7198          template class refer to the type of the template, not any
7199          instantiation of it.  For example, in:
7200
7201            template <class T> class C { void f(C<T>); }
7202
7203          the `C<T>' is just the same as `C'.  Outside of the
7204          class, however, such a reference is an instantiation.  */
7205       if ((entering_scope
7206            || !PRIMARY_TEMPLATE_P (gen_tmpl)
7207            || currently_open_class (template_type))
7208           /* comp_template_args is expensive, check it last.  */
7209           && comp_template_args (TYPE_TI_ARGS (template_type),
7210                                  arglist))
7211         return template_type;
7212
7213       /* If we already have this specialization, return it.  */
7214       elt.tmpl = gen_tmpl;
7215       elt.args = arglist;
7216       hash = hash_specialization (&elt);
7217       entry = (spec_entry *) htab_find_with_hash (type_specializations,
7218                                                   &elt, hash);
7219
7220       if (entry)
7221         return entry->spec;
7222
7223       is_dependent_type = uses_template_parms (arglist);
7224
7225       /* If the deduced arguments are invalid, then the binding
7226          failed.  */
7227       if (!is_dependent_type
7228           && check_instantiated_args (gen_tmpl,
7229                                       INNERMOST_TEMPLATE_ARGS (arglist),
7230                                       complain))
7231         return error_mark_node;
7232
7233       if (!is_dependent_type
7234           && !PRIMARY_TEMPLATE_P (gen_tmpl)
7235           && !LAMBDA_TYPE_P (TREE_TYPE (gen_tmpl))
7236           && TREE_CODE (CP_DECL_CONTEXT (gen_tmpl)) == NAMESPACE_DECL)
7237         {
7238           found = xref_tag_from_type (TREE_TYPE (gen_tmpl),
7239                                       DECL_NAME (gen_tmpl),
7240                                       /*tag_scope=*/ts_global);
7241           return found;
7242         }
7243
7244       context = tsubst (DECL_CONTEXT (gen_tmpl), arglist,
7245                         complain, in_decl);
7246       if (!context)
7247         context = global_namespace;
7248
7249       /* Create the type.  */
7250       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
7251         {
7252           if (!is_dependent_type)
7253             {
7254               set_current_access_from_decl (TYPE_NAME (template_type));
7255               t = start_enum (TYPE_IDENTIFIER (template_type), NULL_TREE,
7256                               tsubst (ENUM_UNDERLYING_TYPE (template_type),
7257                                       arglist, complain, in_decl),
7258                               SCOPED_ENUM_P (template_type), NULL);
7259             }
7260           else
7261             {
7262               /* We don't want to call start_enum for this type, since
7263                  the values for the enumeration constants may involve
7264                  template parameters.  And, no one should be interested
7265                  in the enumeration constants for such a type.  */
7266               t = cxx_make_type (ENUMERAL_TYPE);
7267               SET_SCOPED_ENUM_P (t, SCOPED_ENUM_P (template_type));
7268             }
7269           SET_OPAQUE_ENUM_P (t, OPAQUE_ENUM_P (template_type));
7270           ENUM_FIXED_UNDERLYING_TYPE_P (t)
7271             = ENUM_FIXED_UNDERLYING_TYPE_P (template_type);
7272         }
7273       else
7274         {
7275           t = make_class_type (TREE_CODE (template_type));
7276           CLASSTYPE_DECLARED_CLASS (t)
7277             = CLASSTYPE_DECLARED_CLASS (template_type);
7278           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
7279           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
7280
7281           /* A local class.  Make sure the decl gets registered properly.  */
7282           if (context == current_function_decl)
7283             pushtag (DECL_NAME (gen_tmpl), t, /*tag_scope=*/ts_current);
7284
7285           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
7286             /* This instantiation is another name for the primary
7287                template type. Set the TYPE_CANONICAL field
7288                appropriately. */
7289             TYPE_CANONICAL (t) = template_type;
7290           else if (any_template_arguments_need_structural_equality_p (arglist))
7291             /* Some of the template arguments require structural
7292                equality testing, so this template class requires
7293                structural equality testing. */
7294             SET_TYPE_STRUCTURAL_EQUALITY (t);
7295         }
7296
7297       /* If we called start_enum or pushtag above, this information
7298          will already be set up.  */
7299       if (!TYPE_NAME (t))
7300         {
7301           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
7302
7303           type_decl = create_implicit_typedef (DECL_NAME (gen_tmpl), t);
7304           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
7305           DECL_SOURCE_LOCATION (type_decl)
7306             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
7307         }
7308       else
7309         type_decl = TYPE_NAME (t);
7310
7311       TREE_PRIVATE (type_decl)
7312         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
7313       TREE_PROTECTED (type_decl)
7314         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
7315       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
7316         {
7317           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
7318           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
7319         }
7320
7321       /* Let's consider the explicit specialization of a member
7322          of a class template specialization that is implicitely instantiated,
7323          e.g.:
7324              template<class T>
7325              struct S
7326              {
7327                template<class U> struct M {}; //#0
7328              };
7329
7330              template<>
7331              template<>
7332              struct S<int>::M<char> //#1
7333              {
7334                int i;
7335              };
7336         [temp.expl.spec]/4 says this is valid.
7337
7338         In this case, when we write:
7339         S<int>::M<char> m;
7340
7341         M is instantiated from the CLASSTYPE_TI_TEMPLATE of #1, not from
7342         the one of #0.
7343
7344         When we encounter #1, we want to store the partial instantiation
7345         of M (template<class T> S<int>::M<T>) in it's CLASSTYPE_TI_TEMPLATE.
7346
7347         For all cases other than this "explicit specialization of member of a
7348         class template", we just want to store the most general template into
7349         the CLASSTYPE_TI_TEMPLATE of M.
7350
7351         This case of "explicit specialization of member of a class template"
7352         only happens when:
7353         1/ the enclosing class is an instantiation of, and therefore not
7354         the same as, the context of the most general template, and
7355         2/ we aren't looking at the partial instantiation itself, i.e.
7356         the innermost arguments are not the same as the innermost parms of
7357         the most general template.
7358
7359         So it's only when 1/ and 2/ happens that we want to use the partial
7360         instantiation of the member template in lieu of its most general
7361         template.  */
7362
7363       if (PRIMARY_TEMPLATE_P (gen_tmpl)
7364           && TMPL_ARGS_HAVE_MULTIPLE_LEVELS (arglist)
7365           /* the enclosing class must be an instantiation...  */
7366           && CLASS_TYPE_P (context)
7367           && !same_type_p (context, DECL_CONTEXT (gen_tmpl)))
7368         {
7369           tree partial_inst_args;
7370           TREE_VEC_LENGTH (arglist)--;
7371           ++processing_template_decl;
7372           partial_inst_args =
7373             tsubst (INNERMOST_TEMPLATE_ARGS
7374                         (CLASSTYPE_TI_ARGS (TREE_TYPE (gen_tmpl))),
7375                     arglist, complain, NULL_TREE);
7376           --processing_template_decl;
7377           TREE_VEC_LENGTH (arglist)++;
7378           use_partial_inst_tmpl =
7379             /*...and we must not be looking at the partial instantiation
7380              itself. */
7381             !comp_template_args (INNERMOST_TEMPLATE_ARGS (arglist),
7382                                  partial_inst_args);
7383         }
7384
7385       if (!use_partial_inst_tmpl)
7386         /* This case is easy; there are no member templates involved.  */
7387         found = gen_tmpl;
7388       else
7389         {
7390           /* This is a full instantiation of a member template.  Find
7391              the partial instantiation of which this is an instance.  */
7392
7393           /* Temporarily reduce by one the number of levels in the ARGLIST
7394              so as to avoid comparing the last set of arguments.  */
7395           TREE_VEC_LENGTH (arglist)--;
7396           found = tsubst (gen_tmpl, arglist, complain, NULL_TREE);
7397           TREE_VEC_LENGTH (arglist)++;
7398           found = CLASSTYPE_TI_TEMPLATE (found);
7399         }
7400
7401       SET_TYPE_TEMPLATE_INFO (t, build_template_info (found, arglist));
7402
7403       elt.spec = t;
7404       slot = (spec_entry **) htab_find_slot_with_hash (type_specializations,
7405                                                        &elt, hash, INSERT);
7406       *slot = ggc_alloc_spec_entry ();
7407       **slot = elt;
7408
7409       /* Note this use of the partial instantiation so we can check it
7410          later in maybe_process_partial_specialization.  */
7411       DECL_TEMPLATE_INSTANTIATIONS (templ)
7412         = tree_cons (arglist, t,
7413                      DECL_TEMPLATE_INSTANTIATIONS (templ));
7414
7415       if (TREE_CODE (t) == ENUMERAL_TYPE && !is_dependent_type)
7416         /* Now that the type has been registered on the instantiations
7417            list, we set up the enumerators.  Because the enumeration
7418            constants may involve the enumeration type itself, we make
7419            sure to register the type first, and then create the
7420            constants.  That way, doing tsubst_expr for the enumeration
7421            constants won't result in recursive calls here; we'll find
7422            the instantiation and exit above.  */
7423         tsubst_enum (template_type, t, arglist);
7424
7425       if (is_dependent_type)
7426         /* If the type makes use of template parameters, the
7427            code that generates debugging information will crash.  */
7428         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
7429
7430       /* Possibly limit visibility based on template args.  */
7431       TREE_PUBLIC (type_decl) = 1;
7432       determine_visibility (type_decl);
7433
7434       return t;
7435     }
7436 }
7437
7438 /* Wrapper for lookup_template_class_1.  */
7439
7440 tree
7441 lookup_template_class (tree d1, tree arglist, tree in_decl, tree context,
7442                        int entering_scope, tsubst_flags_t complain)
7443 {
7444   tree ret;
7445   timevar_push (TV_TEMPLATE_INST);
7446   ret = lookup_template_class_1 (d1, arglist, in_decl, context,
7447                                  entering_scope, complain);
7448   timevar_pop (TV_TEMPLATE_INST);
7449   return ret;
7450 }
7451 \f
7452 struct pair_fn_data
7453 {
7454   tree_fn_t fn;
7455   void *data;
7456   /* True when we should also visit template parameters that occur in
7457      non-deduced contexts.  */
7458   bool include_nondeduced_p;
7459   struct pointer_set_t *visited;
7460 };
7461
7462 /* Called from for_each_template_parm via walk_tree.  */
7463
7464 static tree
7465 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
7466 {
7467   tree t = *tp;
7468   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
7469   tree_fn_t fn = pfd->fn;
7470   void *data = pfd->data;
7471
7472   if (TYPE_P (t)
7473       && (pfd->include_nondeduced_p || TREE_CODE (t) != TYPENAME_TYPE)
7474       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited,
7475                                  pfd->include_nondeduced_p))
7476     return error_mark_node;
7477
7478   switch (TREE_CODE (t))
7479     {
7480     case RECORD_TYPE:
7481       if (TYPE_PTRMEMFUNC_P (t))
7482         break;
7483       /* Fall through.  */
7484
7485     case UNION_TYPE:
7486     case ENUMERAL_TYPE:
7487       if (!TYPE_TEMPLATE_INFO (t))
7488         *walk_subtrees = 0;
7489       else if (for_each_template_parm (TI_ARGS (TYPE_TEMPLATE_INFO (t)),
7490                                        fn, data, pfd->visited, 
7491                                        pfd->include_nondeduced_p))
7492         return error_mark_node;
7493       break;
7494
7495     case INTEGER_TYPE:
7496       if (for_each_template_parm (TYPE_MIN_VALUE (t),
7497                                   fn, data, pfd->visited, 
7498                                   pfd->include_nondeduced_p)
7499           || for_each_template_parm (TYPE_MAX_VALUE (t),
7500                                      fn, data, pfd->visited,
7501                                      pfd->include_nondeduced_p))
7502         return error_mark_node;
7503       break;
7504
7505     case METHOD_TYPE:
7506       /* Since we're not going to walk subtrees, we have to do this
7507          explicitly here.  */
7508       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
7509                                   pfd->visited, pfd->include_nondeduced_p))
7510         return error_mark_node;
7511       /* Fall through.  */
7512
7513     case FUNCTION_TYPE:
7514       /* Check the return type.  */
7515       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7516                                   pfd->include_nondeduced_p))
7517         return error_mark_node;
7518
7519       /* Check the parameter types.  Since default arguments are not
7520          instantiated until they are needed, the TYPE_ARG_TYPES may
7521          contain expressions that involve template parameters.  But,
7522          no-one should be looking at them yet.  And, once they're
7523          instantiated, they don't contain template parameters, so
7524          there's no point in looking at them then, either.  */
7525       {
7526         tree parm;
7527
7528         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
7529           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
7530                                       pfd->visited, pfd->include_nondeduced_p))
7531             return error_mark_node;
7532
7533         /* Since we've already handled the TYPE_ARG_TYPES, we don't
7534            want walk_tree walking into them itself.  */
7535         *walk_subtrees = 0;
7536       }
7537       break;
7538
7539     case TYPEOF_TYPE:
7540     case UNDERLYING_TYPE:
7541       if (pfd->include_nondeduced_p
7542           && for_each_template_parm (TYPE_FIELDS (t), fn, data,
7543                                      pfd->visited, 
7544                                      pfd->include_nondeduced_p))
7545         return error_mark_node;
7546       break;
7547
7548     case FUNCTION_DECL:
7549     case VAR_DECL:
7550       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
7551           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
7552                                      pfd->visited, pfd->include_nondeduced_p))
7553         return error_mark_node;
7554       /* Fall through.  */
7555
7556     case PARM_DECL:
7557     case CONST_DECL:
7558       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
7559           && for_each_template_parm (DECL_INITIAL (t), fn, data,
7560                                      pfd->visited, pfd->include_nondeduced_p))
7561         return error_mark_node;
7562       if (DECL_CONTEXT (t)
7563           && pfd->include_nondeduced_p
7564           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
7565                                      pfd->visited, pfd->include_nondeduced_p))
7566         return error_mark_node;
7567       break;
7568
7569     case BOUND_TEMPLATE_TEMPLATE_PARM:
7570       /* Record template parameters such as `T' inside `TT<T>'.  */
7571       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited,
7572                                   pfd->include_nondeduced_p))
7573         return error_mark_node;
7574       /* Fall through.  */
7575
7576     case TEMPLATE_TEMPLATE_PARM:
7577     case TEMPLATE_TYPE_PARM:
7578     case TEMPLATE_PARM_INDEX:
7579       if (fn && (*fn)(t, data))
7580         return error_mark_node;
7581       else if (!fn)
7582         return error_mark_node;
7583       break;
7584
7585     case TEMPLATE_DECL:
7586       /* A template template parameter is encountered.  */
7587       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
7588           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited,
7589                                      pfd->include_nondeduced_p))
7590         return error_mark_node;
7591
7592       /* Already substituted template template parameter */
7593       *walk_subtrees = 0;
7594       break;
7595
7596     case TYPENAME_TYPE:
7597       if (!fn
7598           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
7599                                      data, pfd->visited, 
7600                                      pfd->include_nondeduced_p))
7601         return error_mark_node;
7602       break;
7603
7604     case CONSTRUCTOR:
7605       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
7606           && pfd->include_nondeduced_p
7607           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
7608                                      (TREE_TYPE (t)), fn, data,
7609                                      pfd->visited, pfd->include_nondeduced_p))
7610         return error_mark_node;
7611       break;
7612
7613     case INDIRECT_REF:
7614     case COMPONENT_REF:
7615       /* If there's no type, then this thing must be some expression
7616          involving template parameters.  */
7617       if (!fn && !TREE_TYPE (t))
7618         return error_mark_node;
7619       break;
7620
7621     case MODOP_EXPR:
7622     case CAST_EXPR:
7623     case REINTERPRET_CAST_EXPR:
7624     case CONST_CAST_EXPR:
7625     case STATIC_CAST_EXPR:
7626     case DYNAMIC_CAST_EXPR:
7627     case ARROW_EXPR:
7628     case DOTSTAR_EXPR:
7629     case TYPEID_EXPR:
7630     case PSEUDO_DTOR_EXPR:
7631       if (!fn)
7632         return error_mark_node;
7633       break;
7634
7635     default:
7636       break;
7637     }
7638
7639   /* We didn't find any template parameters we liked.  */
7640   return NULL_TREE;
7641 }
7642
7643 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
7644    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
7645    call FN with the parameter and the DATA.
7646    If FN returns nonzero, the iteration is terminated, and
7647    for_each_template_parm returns 1.  Otherwise, the iteration
7648    continues.  If FN never returns a nonzero value, the value
7649    returned by for_each_template_parm is 0.  If FN is NULL, it is
7650    considered to be the function which always returns 1.
7651
7652    If INCLUDE_NONDEDUCED_P, then this routine will also visit template
7653    parameters that occur in non-deduced contexts.  When false, only
7654    visits those template parameters that can be deduced.  */
7655
7656 static int
7657 for_each_template_parm (tree t, tree_fn_t fn, void* data,
7658                         struct pointer_set_t *visited,
7659                         bool include_nondeduced_p)
7660 {
7661   struct pair_fn_data pfd;
7662   int result;
7663
7664   /* Set up.  */
7665   pfd.fn = fn;
7666   pfd.data = data;
7667   pfd.include_nondeduced_p = include_nondeduced_p;
7668
7669   /* Walk the tree.  (Conceptually, we would like to walk without
7670      duplicates, but for_each_template_parm_r recursively calls
7671      for_each_template_parm, so we would need to reorganize a fair
7672      bit to use walk_tree_without_duplicates, so we keep our own
7673      visited list.)  */
7674   if (visited)
7675     pfd.visited = visited;
7676   else
7677     pfd.visited = pointer_set_create ();
7678   result = cp_walk_tree (&t,
7679                          for_each_template_parm_r,
7680                          &pfd,
7681                          pfd.visited) != NULL_TREE;
7682
7683   /* Clean up.  */
7684   if (!visited)
7685     {
7686       pointer_set_destroy (pfd.visited);
7687       pfd.visited = 0;
7688     }
7689
7690   return result;
7691 }
7692
7693 /* Returns true if T depends on any template parameter.  */
7694
7695 int
7696 uses_template_parms (tree t)
7697 {
7698   bool dependent_p;
7699   int saved_processing_template_decl;
7700
7701   saved_processing_template_decl = processing_template_decl;
7702   if (!saved_processing_template_decl)
7703     processing_template_decl = 1;
7704   if (TYPE_P (t))
7705     dependent_p = dependent_type_p (t);
7706   else if (TREE_CODE (t) == TREE_VEC)
7707     dependent_p = any_dependent_template_arguments_p (t);
7708   else if (TREE_CODE (t) == TREE_LIST)
7709     dependent_p = (uses_template_parms (TREE_VALUE (t))
7710                    || uses_template_parms (TREE_CHAIN (t)));
7711   else if (TREE_CODE (t) == TYPE_DECL)
7712     dependent_p = dependent_type_p (TREE_TYPE (t));
7713   else if (DECL_P (t)
7714            || EXPR_P (t)
7715            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
7716            || TREE_CODE (t) == OVERLOAD
7717            || TREE_CODE (t) == BASELINK
7718            || TREE_CODE (t) == IDENTIFIER_NODE
7719            || TREE_CODE (t) == TRAIT_EXPR
7720            || TREE_CODE (t) == CONSTRUCTOR
7721            || CONSTANT_CLASS_P (t))
7722     dependent_p = (type_dependent_expression_p (t)
7723                    || value_dependent_expression_p (t));
7724   else
7725     {
7726       gcc_assert (t == error_mark_node);
7727       dependent_p = false;
7728     }
7729
7730   processing_template_decl = saved_processing_template_decl;
7731
7732   return dependent_p;
7733 }
7734
7735 /* Returns true if T depends on any template parameter with level LEVEL.  */
7736
7737 int
7738 uses_template_parms_level (tree t, int level)
7739 {
7740   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL,
7741                                  /*include_nondeduced_p=*/true);
7742 }
7743
7744 /* Returns TRUE iff INST is an instantiation we don't need to do in an
7745    ill-formed translation unit, i.e. a variable or function that isn't
7746    usable in a constant expression.  */
7747
7748 static inline bool
7749 neglectable_inst_p (tree d)
7750 {
7751   return (DECL_P (d)
7752           && !(TREE_CODE (d) == FUNCTION_DECL ? DECL_DECLARED_CONSTEXPR_P (d)
7753                : decl_maybe_constant_var_p (d)));
7754 }
7755
7756 /* Returns TRUE iff we should refuse to instantiate DECL because it's
7757    neglectable and instantiated from within an erroneous instantiation.  */
7758
7759 static bool
7760 limit_bad_template_recursion (tree decl)
7761 {
7762   struct tinst_level *lev = current_tinst_level;
7763   int errs = errorcount + sorrycount;
7764   if (lev == NULL || errs == 0 || !neglectable_inst_p (decl))
7765     return false;
7766
7767   for (; lev; lev = lev->next)
7768     if (neglectable_inst_p (lev->decl))
7769       break;
7770
7771   return (lev && errs > lev->errors);
7772 }
7773
7774 static int tinst_depth;
7775 extern int max_tinst_depth;
7776 #ifdef GATHER_STATISTICS
7777 int depth_reached;
7778 #endif
7779 static GTY(()) struct tinst_level *last_error_tinst_level;
7780
7781 /* We're starting to instantiate D; record the template instantiation context
7782    for diagnostics and to restore it later.  */
7783
7784 int
7785 push_tinst_level (tree d)
7786 {
7787   struct tinst_level *new_level;
7788
7789   if (tinst_depth >= max_tinst_depth)
7790     {
7791       last_error_tinst_level = current_tinst_level;
7792       if (TREE_CODE (d) == TREE_LIST)
7793         error ("template instantiation depth exceeds maximum of %d (use "
7794                "-ftemplate-depth= to increase the maximum) substituting %qS",
7795                max_tinst_depth, d);
7796       else
7797         error ("template instantiation depth exceeds maximum of %d (use "
7798                "-ftemplate-depth= to increase the maximum) instantiating %qD",
7799                max_tinst_depth, d);
7800
7801       print_instantiation_context ();
7802
7803       return 0;
7804     }
7805
7806   /* If the current instantiation caused problems, don't let it instantiate
7807      anything else.  Do allow deduction substitution and decls usable in
7808      constant expressions.  */
7809   if (limit_bad_template_recursion (d))
7810     return 0;
7811
7812   new_level = ggc_alloc_tinst_level ();
7813   new_level->decl = d;
7814   new_level->locus = input_location;
7815   new_level->errors = errorcount+sorrycount;
7816   new_level->in_system_header_p = in_system_header;
7817   new_level->next = current_tinst_level;
7818   current_tinst_level = new_level;
7819
7820   ++tinst_depth;
7821 #ifdef GATHER_STATISTICS
7822   if (tinst_depth > depth_reached)
7823     depth_reached = tinst_depth;
7824 #endif
7825
7826   return 1;
7827 }
7828
7829 /* We're done instantiating this template; return to the instantiation
7830    context.  */
7831
7832 void
7833 pop_tinst_level (void)
7834 {
7835   /* Restore the filename and line number stashed away when we started
7836      this instantiation.  */
7837   input_location = current_tinst_level->locus;
7838   current_tinst_level = current_tinst_level->next;
7839   --tinst_depth;
7840 }
7841
7842 /* We're instantiating a deferred template; restore the template
7843    instantiation context in which the instantiation was requested, which
7844    is one step out from LEVEL.  Return the corresponding DECL or TYPE.  */
7845
7846 static tree
7847 reopen_tinst_level (struct tinst_level *level)
7848 {
7849   struct tinst_level *t;
7850
7851   tinst_depth = 0;
7852   for (t = level; t; t = t->next)
7853     ++tinst_depth;
7854
7855   current_tinst_level = level;
7856   pop_tinst_level ();
7857   if (current_tinst_level)
7858     current_tinst_level->errors = errorcount+sorrycount;
7859   return level->decl;
7860 }
7861
7862 /* Returns the TINST_LEVEL which gives the original instantiation
7863    context.  */
7864
7865 struct tinst_level *
7866 outermost_tinst_level (void)
7867 {
7868   struct tinst_level *level = current_tinst_level;
7869   if (level)
7870     while (level->next)
7871       level = level->next;
7872   return level;
7873 }
7874
7875 /* Returns TRUE if PARM is a parameter of the template TEMPL.  */
7876
7877 bool
7878 parameter_of_template_p (tree parm, tree templ)
7879 {
7880   tree parms;
7881   int i;
7882
7883   if (!parm || !templ)
7884     return false;
7885
7886   gcc_assert (DECL_TEMPLATE_PARM_P (parm));
7887   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
7888
7889   parms = DECL_TEMPLATE_PARMS (templ);
7890   parms = INNERMOST_TEMPLATE_PARMS (parms);
7891
7892   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
7893     if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i)))
7894       return true;
7895
7896   return false;
7897 }
7898
7899 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
7900    vector of template arguments, as for tsubst.
7901
7902    Returns an appropriate tsubst'd friend declaration.  */
7903
7904 static tree
7905 tsubst_friend_function (tree decl, tree args)
7906 {
7907   tree new_friend;
7908
7909   if (TREE_CODE (decl) == FUNCTION_DECL
7910       && DECL_TEMPLATE_INSTANTIATION (decl)
7911       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
7912     /* This was a friend declared with an explicit template
7913        argument list, e.g.:
7914
7915        friend void f<>(T);
7916
7917        to indicate that f was a template instantiation, not a new
7918        function declaration.  Now, we have to figure out what
7919        instantiation of what template.  */
7920     {
7921       tree template_id, arglist, fns;
7922       tree new_args;
7923       tree tmpl;
7924       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
7925
7926       /* Friend functions are looked up in the containing namespace scope.
7927          We must enter that scope, to avoid finding member functions of the
7928          current class with same name.  */
7929       push_nested_namespace (ns);
7930       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
7931                          tf_warning_or_error, NULL_TREE,
7932                          /*integral_constant_expression_p=*/false);
7933       pop_nested_namespace (ns);
7934       arglist = tsubst (DECL_TI_ARGS (decl), args,
7935                         tf_warning_or_error, NULL_TREE);
7936       template_id = lookup_template_function (fns, arglist);
7937
7938       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7939       tmpl = determine_specialization (template_id, new_friend,
7940                                        &new_args,
7941                                        /*need_member_template=*/0,
7942                                        TREE_VEC_LENGTH (args),
7943                                        tsk_none);
7944       return instantiate_template (tmpl, new_args, tf_error);
7945     }
7946
7947   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
7948
7949   /* The NEW_FRIEND will look like an instantiation, to the
7950      compiler, but is not an instantiation from the point of view of
7951      the language.  For example, we might have had:
7952
7953      template <class T> struct S {
7954        template <class U> friend void f(T, U);
7955      };
7956
7957      Then, in S<int>, template <class U> void f(int, U) is not an
7958      instantiation of anything.  */
7959   if (new_friend == error_mark_node)
7960     return error_mark_node;
7961
7962   DECL_USE_TEMPLATE (new_friend) = 0;
7963   if (TREE_CODE (decl) == TEMPLATE_DECL)
7964     {
7965       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
7966       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
7967         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
7968     }
7969
7970   /* The mangled name for the NEW_FRIEND is incorrect.  The function
7971      is not a template instantiation and should not be mangled like
7972      one.  Therefore, we forget the mangling here; we'll recompute it
7973      later if we need it.  */
7974   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
7975     {
7976       SET_DECL_RTL (new_friend, NULL);
7977       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
7978     }
7979
7980   if (DECL_NAMESPACE_SCOPE_P (new_friend))
7981     {
7982       tree old_decl;
7983       tree new_friend_template_info;
7984       tree new_friend_result_template_info;
7985       tree ns;
7986       int  new_friend_is_defn;
7987
7988       /* We must save some information from NEW_FRIEND before calling
7989          duplicate decls since that function will free NEW_FRIEND if
7990          possible.  */
7991       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
7992       new_friend_is_defn =
7993             (DECL_INITIAL (DECL_TEMPLATE_RESULT
7994                            (template_for_substitution (new_friend)))
7995              != NULL_TREE);
7996       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
7997         {
7998           /* This declaration is a `primary' template.  */
7999           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
8000
8001           new_friend_result_template_info
8002             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
8003         }
8004       else
8005         new_friend_result_template_info = NULL_TREE;
8006
8007       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
8008       if (new_friend_is_defn)
8009         DECL_INITIAL (new_friend) = error_mark_node;
8010
8011       /* Inside pushdecl_namespace_level, we will push into the
8012          current namespace. However, the friend function should go
8013          into the namespace of the template.  */
8014       ns = decl_namespace_context (new_friend);
8015       push_nested_namespace (ns);
8016       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
8017       pop_nested_namespace (ns);
8018
8019       if (old_decl == error_mark_node)
8020         return error_mark_node;
8021
8022       if (old_decl != new_friend)
8023         {
8024           /* This new friend declaration matched an existing
8025              declaration.  For example, given:
8026
8027                template <class T> void f(T);
8028                template <class U> class C {
8029                  template <class T> friend void f(T) {}
8030                };
8031
8032              the friend declaration actually provides the definition
8033              of `f', once C has been instantiated for some type.  So,
8034              old_decl will be the out-of-class template declaration,
8035              while new_friend is the in-class definition.
8036
8037              But, if `f' was called before this point, the
8038              instantiation of `f' will have DECL_TI_ARGS corresponding
8039              to `T' but not to `U', references to which might appear
8040              in the definition of `f'.  Previously, the most general
8041              template for an instantiation of `f' was the out-of-class
8042              version; now it is the in-class version.  Therefore, we
8043              run through all specialization of `f', adding to their
8044              DECL_TI_ARGS appropriately.  In particular, they need a
8045              new set of outer arguments, corresponding to the
8046              arguments for this class instantiation.
8047
8048              The same situation can arise with something like this:
8049
8050                friend void f(int);
8051                template <class T> class C {
8052                  friend void f(T) {}
8053                };
8054
8055              when `C<int>' is instantiated.  Now, `f(int)' is defined
8056              in the class.  */
8057
8058           if (!new_friend_is_defn)
8059             /* On the other hand, if the in-class declaration does
8060                *not* provide a definition, then we don't want to alter
8061                existing definitions.  We can just leave everything
8062                alone.  */
8063             ;
8064           else
8065             {
8066               tree new_template = TI_TEMPLATE (new_friend_template_info);
8067               tree new_args = TI_ARGS (new_friend_template_info);
8068
8069               /* Overwrite whatever template info was there before, if
8070                  any, with the new template information pertaining to
8071                  the declaration.  */
8072               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
8073
8074               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
8075                 {
8076                   /* We should have called reregister_specialization in
8077                      duplicate_decls.  */
8078                   gcc_assert (retrieve_specialization (new_template,
8079                                                        new_args, 0)
8080                               == old_decl);
8081
8082                   /* Instantiate it if the global has already been used.  */
8083                   if (DECL_ODR_USED (old_decl))
8084                     instantiate_decl (old_decl, /*defer_ok=*/true,
8085                                       /*expl_inst_class_mem_p=*/false);
8086                 }
8087               else
8088                 {
8089                   tree t;
8090
8091                   /* Indicate that the old function template is a partial
8092                      instantiation.  */
8093                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
8094                     = new_friend_result_template_info;
8095
8096                   gcc_assert (new_template
8097                               == most_general_template (new_template));
8098                   gcc_assert (new_template != old_decl);
8099
8100                   /* Reassign any specializations already in the hash table
8101                      to the new more general template, and add the
8102                      additional template args.  */
8103                   for (t = DECL_TEMPLATE_INSTANTIATIONS (old_decl);
8104                        t != NULL_TREE;
8105                        t = TREE_CHAIN (t))
8106                     {
8107                       tree spec = TREE_VALUE (t);
8108                       spec_entry elt;
8109
8110                       elt.tmpl = old_decl;
8111                       elt.args = DECL_TI_ARGS (spec);
8112                       elt.spec = NULL_TREE;
8113
8114                       htab_remove_elt (decl_specializations, &elt);
8115
8116                       DECL_TI_ARGS (spec)
8117                         = add_outermost_template_args (new_args,
8118                                                        DECL_TI_ARGS (spec));
8119
8120                       register_specialization
8121                         (spec, new_template, DECL_TI_ARGS (spec), true, 0);
8122
8123                     }
8124                   DECL_TEMPLATE_INSTANTIATIONS (old_decl) = NULL_TREE;
8125                 }
8126             }
8127
8128           /* The information from NEW_FRIEND has been merged into OLD_DECL
8129              by duplicate_decls.  */
8130           new_friend = old_decl;
8131         }
8132     }
8133   else
8134     {
8135       tree context = DECL_CONTEXT (new_friend);
8136       bool dependent_p;
8137
8138       /* In the code
8139            template <class T> class C {
8140              template <class U> friend void C1<U>::f (); // case 1
8141              friend void C2<T>::f ();                    // case 2
8142            };
8143          we only need to make sure CONTEXT is a complete type for
8144          case 2.  To distinguish between the two cases, we note that
8145          CONTEXT of case 1 remains dependent type after tsubst while
8146          this isn't true for case 2.  */
8147       ++processing_template_decl;
8148       dependent_p = dependent_type_p (context);
8149       --processing_template_decl;
8150
8151       if (!dependent_p
8152           && !complete_type_or_else (context, NULL_TREE))
8153         return error_mark_node;
8154
8155       if (COMPLETE_TYPE_P (context))
8156         {
8157           /* Check to see that the declaration is really present, and,
8158              possibly obtain an improved declaration.  */
8159           tree fn = check_classfn (context,
8160                                    new_friend, NULL_TREE);
8161
8162           if (fn)
8163             new_friend = fn;
8164         }
8165     }
8166
8167   return new_friend;
8168 }
8169
8170 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
8171    template arguments, as for tsubst.
8172
8173    Returns an appropriate tsubst'd friend type or error_mark_node on
8174    failure.  */
8175
8176 static tree
8177 tsubst_friend_class (tree friend_tmpl, tree args)
8178 {
8179   tree friend_type;
8180   tree tmpl;
8181   tree context;
8182
8183   context = CP_DECL_CONTEXT (friend_tmpl);
8184
8185   if (context != global_namespace)
8186     {
8187       if (TREE_CODE (context) == NAMESPACE_DECL)
8188         push_nested_namespace (context);
8189       else
8190         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
8191     }
8192
8193   /* Look for a class template declaration.  We look for hidden names
8194      because two friend declarations of the same template are the
8195      same.  For example, in:
8196
8197        struct A { 
8198          template <typename> friend class F;
8199        };
8200        template <typename> struct B { 
8201          template <typename> friend class F;
8202        };
8203
8204      both F templates are the same.  */
8205   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
8206                            /*block_p=*/true, 0, 
8207                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
8208
8209   /* But, if we don't find one, it might be because we're in a
8210      situation like this:
8211
8212        template <class T>
8213        struct S {
8214          template <class U>
8215          friend struct S;
8216        };
8217
8218      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
8219      for `S<int>', not the TEMPLATE_DECL.  */
8220   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
8221     {
8222       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
8223       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
8224     }
8225
8226   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
8227     {
8228       /* The friend template has already been declared.  Just
8229          check to see that the declarations match, and install any new
8230          default parameters.  We must tsubst the default parameters,
8231          of course.  We only need the innermost template parameters
8232          because that is all that redeclare_class_template will look
8233          at.  */
8234       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
8235           > TMPL_ARGS_DEPTH (args))
8236         {
8237           tree parms;
8238           location_t saved_input_location;
8239           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
8240                                          args, tf_warning_or_error);
8241
8242           saved_input_location = input_location;
8243           input_location = DECL_SOURCE_LOCATION (friend_tmpl);
8244           redeclare_class_template (TREE_TYPE (tmpl), parms);
8245           input_location = saved_input_location;
8246           
8247         }
8248
8249       friend_type = TREE_TYPE (tmpl);
8250     }
8251   else
8252     {
8253       /* The friend template has not already been declared.  In this
8254          case, the instantiation of the template class will cause the
8255          injection of this template into the global scope.  */
8256       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
8257       if (tmpl == error_mark_node)
8258         return error_mark_node;
8259
8260       /* The new TMPL is not an instantiation of anything, so we
8261          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
8262          the new type because that is supposed to be the corresponding
8263          template decl, i.e., TMPL.  */
8264       DECL_USE_TEMPLATE (tmpl) = 0;
8265       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
8266       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
8267       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
8268         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
8269
8270       /* Inject this template into the global scope.  */
8271       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
8272     }
8273
8274   if (context != global_namespace)
8275     {
8276       if (TREE_CODE (context) == NAMESPACE_DECL)
8277         pop_nested_namespace (context);
8278       else
8279         pop_nested_class ();
8280     }
8281
8282   return friend_type;
8283 }
8284
8285 /* Returns zero if TYPE cannot be completed later due to circularity.
8286    Otherwise returns one.  */
8287
8288 static int
8289 can_complete_type_without_circularity (tree type)
8290 {
8291   if (type == NULL_TREE || type == error_mark_node)
8292     return 0;
8293   else if (COMPLETE_TYPE_P (type))
8294     return 1;
8295   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
8296     return can_complete_type_without_circularity (TREE_TYPE (type));
8297   else if (CLASS_TYPE_P (type)
8298            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
8299     return 0;
8300   else
8301     return 1;
8302 }
8303
8304 /* Apply any attributes which had to be deferred until instantiation
8305    time.  DECL_P, ATTRIBUTES and ATTR_FLAGS are as cplus_decl_attributes;
8306    ARGS, COMPLAIN, IN_DECL are as tsubst.  */
8307
8308 static void
8309 apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags,
8310                                 tree args, tsubst_flags_t complain, tree in_decl)
8311 {
8312   tree last_dep = NULL_TREE;
8313   tree t;
8314   tree *p;
8315
8316   for (t = attributes; t; t = TREE_CHAIN (t))
8317     if (ATTR_IS_DEPENDENT (t))
8318       {
8319         last_dep = t;
8320         attributes = copy_list (attributes);
8321         break;
8322       }
8323
8324   if (DECL_P (*decl_p))
8325     {
8326       if (TREE_TYPE (*decl_p) == error_mark_node)
8327         return;
8328       p = &DECL_ATTRIBUTES (*decl_p);
8329     }
8330   else
8331     p = &TYPE_ATTRIBUTES (*decl_p);
8332
8333   if (last_dep)
8334     {
8335       tree late_attrs = NULL_TREE;
8336       tree *q = &late_attrs;
8337
8338       for (*p = attributes; *p; )
8339         {
8340           t = *p;
8341           if (ATTR_IS_DEPENDENT (t))
8342             {
8343               *p = TREE_CHAIN (t);
8344               TREE_CHAIN (t) = NULL_TREE;
8345               /* If the first attribute argument is an identifier, don't
8346                  pass it through tsubst.  Attributes like mode, format,
8347                  cleanup and several target specific attributes expect it
8348                  unmodified.  */
8349               if (TREE_VALUE (t)
8350                   && TREE_CODE (TREE_VALUE (t)) == TREE_LIST
8351                   && TREE_VALUE (TREE_VALUE (t))
8352                   && (TREE_CODE (TREE_VALUE (TREE_VALUE (t)))
8353                       == IDENTIFIER_NODE))
8354                 {
8355                   tree chain
8356                     = tsubst_expr (TREE_CHAIN (TREE_VALUE (t)), args, complain,
8357                                    in_decl,
8358                                    /*integral_constant_expression_p=*/false);
8359                   if (chain != TREE_CHAIN (TREE_VALUE (t)))
8360                     TREE_VALUE (t)
8361                       = tree_cons (NULL_TREE, TREE_VALUE (TREE_VALUE (t)),
8362                                    chain);
8363                 }
8364               else
8365                 TREE_VALUE (t)
8366                   = tsubst_expr (TREE_VALUE (t), args, complain, in_decl,
8367                                  /*integral_constant_expression_p=*/false);
8368               *q = t;
8369               q = &TREE_CHAIN (t);
8370             }
8371           else
8372             p = &TREE_CHAIN (t);
8373         }
8374
8375       cplus_decl_attributes (decl_p, late_attrs, attr_flags);
8376     }
8377 }
8378
8379 /* Perform (or defer) access check for typedefs that were referenced
8380    from within the template TMPL code.
8381    This is a subroutine of instantiate_template and instantiate_class_template.
8382    TMPL is the template to consider and TARGS is the list of arguments of
8383    that template.  */
8384
8385 static void
8386 perform_typedefs_access_check (tree tmpl, tree targs)
8387 {
8388   location_t saved_location;
8389   int i;
8390   qualified_typedef_usage_t *iter;
8391
8392   if (!tmpl
8393       || (!CLASS_TYPE_P (tmpl)
8394           && TREE_CODE (tmpl) != FUNCTION_DECL))
8395     return;
8396
8397   saved_location = input_location;
8398   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
8399                     get_types_needing_access_check (tmpl),
8400                     i, iter)
8401     {
8402       tree type_decl = iter->typedef_decl;
8403       tree type_scope = iter->context;
8404
8405       if (!type_decl || !type_scope || !CLASS_TYPE_P (type_scope))
8406         continue;
8407
8408       if (uses_template_parms (type_decl))
8409         type_decl = tsubst (type_decl, targs, tf_error, NULL_TREE);
8410       if (uses_template_parms (type_scope))
8411         type_scope = tsubst (type_scope, targs, tf_error, NULL_TREE);
8412
8413       /* Make access check error messages point to the location
8414          of the use of the typedef.  */
8415       input_location = iter->locus;
8416       perform_or_defer_access_check (TYPE_BINFO (type_scope),
8417                                      type_decl, type_decl);
8418     }
8419     input_location = saved_location;
8420 }
8421
8422 static tree
8423 instantiate_class_template_1 (tree type)
8424 {
8425   tree templ, args, pattern, t, member;
8426   tree typedecl;
8427   tree pbinfo;
8428   tree base_list;
8429   unsigned int saved_maximum_field_alignment;
8430
8431   if (type == error_mark_node)
8432     return error_mark_node;
8433
8434   if (COMPLETE_OR_OPEN_TYPE_P (type)
8435       || uses_template_parms (type))
8436     return type;
8437
8438   /* Figure out which template is being instantiated.  */
8439   templ = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
8440   gcc_assert (TREE_CODE (templ) == TEMPLATE_DECL);
8441
8442   /* Determine what specialization of the original template to
8443      instantiate.  */
8444   t = most_specialized_class (type, templ, tf_warning_or_error);
8445   if (t == error_mark_node)
8446     {
8447       TYPE_BEING_DEFINED (type) = 1;
8448       return error_mark_node;
8449     }
8450   else if (t)
8451     {
8452       /* This TYPE is actually an instantiation of a partial
8453          specialization.  We replace the innermost set of ARGS with
8454          the arguments appropriate for substitution.  For example,
8455          given:
8456
8457            template <class T> struct S {};
8458            template <class T> struct S<T*> {};
8459
8460          and supposing that we are instantiating S<int*>, ARGS will
8461          presently be {int*} -- but we need {int}.  */
8462       pattern = TREE_TYPE (t);
8463       args = TREE_PURPOSE (t);
8464     }
8465   else
8466     {
8467       pattern = TREE_TYPE (templ);
8468       args = CLASSTYPE_TI_ARGS (type);
8469     }
8470
8471   /* If the template we're instantiating is incomplete, then clearly
8472      there's nothing we can do.  */
8473   if (!COMPLETE_TYPE_P (pattern))
8474     return type;
8475
8476   /* If we've recursively instantiated too many templates, stop.  */
8477   if (! push_tinst_level (type))
8478     return type;
8479
8480   /* Now we're really doing the instantiation.  Mark the type as in
8481      the process of being defined.  */
8482   TYPE_BEING_DEFINED (type) = 1;
8483
8484   /* We may be in the middle of deferred access check.  Disable
8485      it now.  */
8486   push_deferring_access_checks (dk_no_deferred);
8487
8488   push_to_top_level ();
8489   /* Use #pragma pack from the template context.  */
8490   saved_maximum_field_alignment = maximum_field_alignment;
8491   maximum_field_alignment = TYPE_PRECISION (pattern);
8492
8493   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
8494
8495   /* Set the input location to the most specialized template definition.
8496      This is needed if tsubsting causes an error.  */
8497   typedecl = TYPE_MAIN_DECL (pattern);
8498   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (type)) =
8499     DECL_SOURCE_LOCATION (typedecl);
8500
8501   TYPE_HAS_USER_CONSTRUCTOR (type) = TYPE_HAS_USER_CONSTRUCTOR (pattern);
8502   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
8503   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
8504   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
8505   TYPE_HAS_COPY_ASSIGN (type) = TYPE_HAS_COPY_ASSIGN (pattern);
8506   TYPE_HAS_CONST_COPY_ASSIGN (type) = TYPE_HAS_CONST_COPY_ASSIGN (pattern);
8507   TYPE_HAS_COPY_CTOR (type) = TYPE_HAS_COPY_CTOR (pattern);
8508   TYPE_HAS_CONST_COPY_CTOR (type) = TYPE_HAS_CONST_COPY_CTOR (pattern);
8509   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
8510   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
8511   TYPE_PACKED (type) = TYPE_PACKED (pattern);
8512   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
8513   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
8514   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
8515   if (ANON_AGGR_TYPE_P (pattern))
8516     SET_ANON_AGGR_TYPE_P (type);
8517   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
8518     {
8519       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
8520       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
8521     }
8522   CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
8523
8524   pbinfo = TYPE_BINFO (pattern);
8525
8526   /* We should never instantiate a nested class before its enclosing
8527      class; we need to look up the nested class by name before we can
8528      instantiate it, and that lookup should instantiate the enclosing
8529      class.  */
8530   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
8531               || COMPLETE_OR_OPEN_TYPE_P (TYPE_CONTEXT (type)));
8532
8533   base_list = NULL_TREE;
8534   if (BINFO_N_BASE_BINFOS (pbinfo))
8535     {
8536       tree pbase_binfo;
8537       tree pushed_scope;
8538       int i;
8539
8540       /* We must enter the scope containing the type, as that is where
8541          the accessibility of types named in dependent bases are
8542          looked up from.  */
8543       pushed_scope = push_scope (CP_TYPE_CONTEXT (type));
8544
8545       /* Substitute into each of the bases to determine the actual
8546          basetypes.  */
8547       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
8548         {
8549           tree base;
8550           tree access = BINFO_BASE_ACCESS (pbinfo, i);
8551           tree expanded_bases = NULL_TREE;
8552           int idx, len = 1;
8553
8554           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
8555             {
8556               expanded_bases = 
8557                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
8558                                        args, tf_error, NULL_TREE);
8559               if (expanded_bases == error_mark_node)
8560                 continue;
8561
8562               len = TREE_VEC_LENGTH (expanded_bases);
8563             }
8564
8565           for (idx = 0; idx < len; idx++)
8566             {
8567               if (expanded_bases)
8568                 /* Extract the already-expanded base class.  */
8569                 base = TREE_VEC_ELT (expanded_bases, idx);
8570               else
8571                 /* Substitute to figure out the base class.  */
8572                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
8573                                NULL_TREE);
8574
8575               if (base == error_mark_node)
8576                 continue;
8577
8578               base_list = tree_cons (access, base, base_list);
8579               if (BINFO_VIRTUAL_P (pbase_binfo))
8580                 TREE_TYPE (base_list) = integer_type_node;
8581             }
8582         }
8583
8584       /* The list is now in reverse order; correct that.  */
8585       base_list = nreverse (base_list);
8586
8587       if (pushed_scope)
8588         pop_scope (pushed_scope);
8589     }
8590   /* Now call xref_basetypes to set up all the base-class
8591      information.  */
8592   xref_basetypes (type, base_list);
8593
8594   apply_late_template_attributes (&type, TYPE_ATTRIBUTES (pattern),
8595                                   (int) ATTR_FLAG_TYPE_IN_PLACE,
8596                                   args, tf_error, NULL_TREE);
8597   fixup_attribute_variants (type);
8598
8599   /* Now that our base classes are set up, enter the scope of the
8600      class, so that name lookups into base classes, etc. will work
8601      correctly.  This is precisely analogous to what we do in
8602      begin_class_definition when defining an ordinary non-template
8603      class, except we also need to push the enclosing classes.  */
8604   push_nested_class (type);
8605
8606   /* Now members are processed in the order of declaration.  */
8607   for (member = CLASSTYPE_DECL_LIST (pattern);
8608        member; member = TREE_CHAIN (member))
8609     {
8610       tree t = TREE_VALUE (member);
8611
8612       if (TREE_PURPOSE (member))
8613         {
8614           if (TYPE_P (t))
8615             {
8616               /* Build new CLASSTYPE_NESTED_UTDS.  */
8617
8618               tree newtag;
8619               bool class_template_p;
8620
8621               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
8622                                   && TYPE_LANG_SPECIFIC (t)
8623                                   && CLASSTYPE_IS_TEMPLATE (t));
8624               /* If the member is a class template, then -- even after
8625                  substitution -- there may be dependent types in the
8626                  template argument list for the class.  We increment
8627                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
8628                  that function will assume that no types are dependent
8629                  when outside of a template.  */
8630               if (class_template_p)
8631                 ++processing_template_decl;
8632               newtag = tsubst (t, args, tf_error, NULL_TREE);
8633               if (class_template_p)
8634                 --processing_template_decl;
8635               if (newtag == error_mark_node)
8636                 continue;
8637
8638               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
8639                 {
8640                   tree name = TYPE_IDENTIFIER (t);
8641
8642                   if (class_template_p)
8643                     /* Unfortunately, lookup_template_class sets
8644                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
8645                        instantiation (i.e., for the type of a member
8646                        template class nested within a template class.)
8647                        This behavior is required for
8648                        maybe_process_partial_specialization to work
8649                        correctly, but is not accurate in this case;
8650                        the TAG is not an instantiation of anything.
8651                        (The corresponding TEMPLATE_DECL is an
8652                        instantiation, but the TYPE is not.) */
8653                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
8654
8655                   /* Now, we call pushtag to put this NEWTAG into the scope of
8656                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
8657                      pushtag calling push_template_decl.  We don't have to do
8658                      this for enums because it will already have been done in
8659                      tsubst_enum.  */
8660                   if (name)
8661                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
8662                   pushtag (name, newtag, /*tag_scope=*/ts_current);
8663                 }
8664             }
8665           else if (TREE_CODE (t) == FUNCTION_DECL
8666                    || DECL_FUNCTION_TEMPLATE_P (t))
8667             {
8668               /* Build new TYPE_METHODS.  */
8669               tree r;
8670
8671               if (TREE_CODE (t) == TEMPLATE_DECL)
8672                 ++processing_template_decl;
8673               r = tsubst (t, args, tf_error, NULL_TREE);
8674               if (TREE_CODE (t) == TEMPLATE_DECL)
8675                 --processing_template_decl;
8676               set_current_access_from_decl (r);
8677               finish_member_declaration (r);
8678             }
8679           else
8680             {
8681               /* Build new TYPE_FIELDS.  */
8682               if (TREE_CODE (t) == STATIC_ASSERT)
8683                 {
8684                   tree condition = 
8685                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
8686                                  tf_warning_or_error, NULL_TREE,
8687                                  /*integral_constant_expression_p=*/true);
8688                   finish_static_assert (condition,
8689                                         STATIC_ASSERT_MESSAGE (t), 
8690                                         STATIC_ASSERT_SOURCE_LOCATION (t),
8691                                         /*member_p=*/true);
8692                 }
8693               else if (TREE_CODE (t) != CONST_DECL)
8694                 {
8695                   tree r;
8696
8697                   /* The file and line for this declaration, to
8698                      assist in error message reporting.  Since we
8699                      called push_tinst_level above, we don't need to
8700                      restore these.  */
8701                   input_location = DECL_SOURCE_LOCATION (t);
8702
8703                   if (TREE_CODE (t) == TEMPLATE_DECL)
8704                     ++processing_template_decl;
8705                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
8706                   if (TREE_CODE (t) == TEMPLATE_DECL)
8707                     --processing_template_decl;
8708                   if (TREE_CODE (r) == VAR_DECL)
8709                     {
8710                       /* In [temp.inst]:
8711
8712                            [t]he initialization (and any associated
8713                            side-effects) of a static data member does
8714                            not occur unless the static data member is
8715                            itself used in a way that requires the
8716                            definition of the static data member to
8717                            exist.
8718
8719                          Therefore, we do not substitute into the
8720                          initialized for the static data member here.  */
8721                       finish_static_data_member_decl
8722                         (r,
8723                          /*init=*/NULL_TREE,
8724                          /*init_const_expr_p=*/false,
8725                          /*asmspec_tree=*/NULL_TREE,
8726                          /*flags=*/0);
8727                     }
8728                   else if (TREE_CODE (r) == FIELD_DECL)
8729                     {
8730                       /* Determine whether R has a valid type and can be
8731                          completed later.  If R is invalid, then it is
8732                          replaced by error_mark_node so that it will not be
8733                          added to TYPE_FIELDS.  */
8734                       tree rtype = TREE_TYPE (r);
8735                       if (can_complete_type_without_circularity (rtype))
8736                         complete_type (rtype);
8737
8738                       if (!COMPLETE_TYPE_P (rtype))
8739                         {
8740                           cxx_incomplete_type_error (r, rtype);
8741                           r = error_mark_node;
8742                         }
8743                     }
8744
8745                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
8746                      such a thing will already have been added to the field
8747                      list by tsubst_enum in finish_member_declaration in the
8748                      CLASSTYPE_NESTED_UTDS case above.  */
8749                   if (!(TREE_CODE (r) == TYPE_DECL
8750                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
8751                         && DECL_ARTIFICIAL (r)))
8752                     {
8753                       set_current_access_from_decl (r);
8754                       finish_member_declaration (r);
8755                     }
8756                 }
8757             }
8758         }
8759       else
8760         {
8761           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
8762             {
8763               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
8764
8765               tree friend_type = t;
8766               bool adjust_processing_template_decl = false;
8767
8768               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8769                 {
8770                   /* template <class T> friend class C;  */
8771                   friend_type = tsubst_friend_class (friend_type, args);
8772                   adjust_processing_template_decl = true;
8773                 }
8774               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
8775                 {
8776                   /* template <class T> friend class C::D;  */
8777                   friend_type = tsubst (friend_type, args,
8778                                         tf_warning_or_error, NULL_TREE);
8779                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
8780                     friend_type = TREE_TYPE (friend_type);
8781                   adjust_processing_template_decl = true;
8782                 }
8783               else if (TREE_CODE (friend_type) == TYPENAME_TYPE
8784                        || TREE_CODE (friend_type) == TEMPLATE_TYPE_PARM)
8785                 {
8786                   /* This could be either
8787
8788                        friend class T::C;
8789
8790                      when dependent_type_p is false or
8791
8792                        template <class U> friend class T::C;
8793
8794                      otherwise.  */
8795                   friend_type = tsubst (friend_type, args,
8796                                         tf_warning_or_error, NULL_TREE);
8797                   /* Bump processing_template_decl for correct
8798                      dependent_type_p calculation.  */
8799                   ++processing_template_decl;
8800                   if (dependent_type_p (friend_type))
8801                     adjust_processing_template_decl = true;
8802                   --processing_template_decl;
8803                 }
8804               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
8805                        && hidden_name_p (TYPE_NAME (friend_type)))
8806                 {
8807                   /* friend class C;
8808
8809                      where C hasn't been declared yet.  Let's lookup name
8810                      from namespace scope directly, bypassing any name that
8811                      come from dependent base class.  */
8812                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
8813
8814                   /* The call to xref_tag_from_type does injection for friend
8815                      classes.  */
8816                   push_nested_namespace (ns);
8817                   friend_type =
8818                     xref_tag_from_type (friend_type, NULL_TREE,
8819                                         /*tag_scope=*/ts_current);
8820                   pop_nested_namespace (ns);
8821                 }
8822               else if (uses_template_parms (friend_type))
8823                 /* friend class C<T>;  */
8824                 friend_type = tsubst (friend_type, args,
8825                                       tf_warning_or_error, NULL_TREE);
8826               /* Otherwise it's
8827
8828                    friend class C;
8829
8830                  where C is already declared or
8831
8832                    friend class C<int>;
8833
8834                  We don't have to do anything in these cases.  */
8835
8836               if (adjust_processing_template_decl)
8837                 /* Trick make_friend_class into realizing that the friend
8838                    we're adding is a template, not an ordinary class.  It's
8839                    important that we use make_friend_class since it will
8840                    perform some error-checking and output cross-reference
8841                    information.  */
8842                 ++processing_template_decl;
8843
8844               if (friend_type != error_mark_node)
8845                 make_friend_class (type, friend_type, /*complain=*/false);
8846
8847               if (adjust_processing_template_decl)
8848                 --processing_template_decl;
8849             }
8850           else
8851             {
8852               /* Build new DECL_FRIENDLIST.  */
8853               tree r;
8854
8855               /* The file and line for this declaration, to
8856                  assist in error message reporting.  Since we
8857                  called push_tinst_level above, we don't need to
8858                  restore these.  */
8859               input_location = DECL_SOURCE_LOCATION (t);
8860
8861               if (TREE_CODE (t) == TEMPLATE_DECL)
8862                 {
8863                   ++processing_template_decl;
8864                   push_deferring_access_checks (dk_no_check);
8865                 }
8866
8867               r = tsubst_friend_function (t, args);
8868               add_friend (type, r, /*complain=*/false);
8869               if (TREE_CODE (t) == TEMPLATE_DECL)
8870                 {
8871                   pop_deferring_access_checks ();
8872                   --processing_template_decl;
8873                 }
8874             }
8875         }
8876     }
8877
8878   if (CLASSTYPE_LAMBDA_EXPR (type))
8879     maybe_add_lambda_conv_op (type);
8880
8881   /* Set the file and line number information to whatever is given for
8882      the class itself.  This puts error messages involving generated
8883      implicit functions at a predictable point, and the same point
8884      that would be used for non-template classes.  */
8885   input_location = DECL_SOURCE_LOCATION (typedecl);
8886
8887   unreverse_member_declarations (type);
8888   finish_struct_1 (type);
8889   TYPE_BEING_DEFINED (type) = 0;
8890
8891   /* We don't instantiate default arguments for member functions.  14.7.1:
8892
8893      The implicit instantiation of a class template specialization causes
8894      the implicit instantiation of the declarations, but not of the
8895      definitions or default arguments, of the class member functions,
8896      member classes, static data members and member templates....  */
8897
8898   /* Some typedefs referenced from within the template code need to be access
8899      checked at template instantiation time, i.e now. These types were
8900      added to the template at parsing time. Let's get those and perform
8901      the access checks then.  */
8902   perform_typedefs_access_check (pattern, args);
8903   perform_deferred_access_checks ();
8904   pop_nested_class ();
8905   maximum_field_alignment = saved_maximum_field_alignment;
8906   pop_from_top_level ();
8907   pop_deferring_access_checks ();
8908   pop_tinst_level ();
8909
8910   /* The vtable for a template class can be emitted in any translation
8911      unit in which the class is instantiated.  When there is no key
8912      method, however, finish_struct_1 will already have added TYPE to
8913      the keyed_classes list.  */
8914   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
8915     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
8916
8917   return type;
8918 }
8919
8920 /* Wrapper for instantiate_class_template_1.  */
8921
8922 tree
8923 instantiate_class_template (tree type)
8924 {
8925   tree ret;
8926   timevar_push (TV_TEMPLATE_INST);
8927   ret = instantiate_class_template_1 (type);
8928   timevar_pop (TV_TEMPLATE_INST);
8929   return ret;
8930 }
8931
8932 static tree
8933 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8934 {
8935   tree r;
8936
8937   if (!t)
8938     r = t;
8939   else if (TYPE_P (t))
8940     r = tsubst (t, args, complain, in_decl);
8941   else
8942     {
8943       if (!(complain & tf_warning))
8944         ++c_inhibit_evaluation_warnings;
8945       r = tsubst_expr (t, args, complain, in_decl,
8946                        /*integral_constant_expression_p=*/true);
8947       if (!(complain & tf_warning))
8948         --c_inhibit_evaluation_warnings;
8949       /* Preserve the raw-reference nature of T.  */
8950       if (TREE_TYPE (t) && TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE
8951           && REFERENCE_REF_P (r))
8952         r = TREE_OPERAND (r, 0);
8953     }
8954   return r;
8955 }
8956
8957 /* Given a function parameter pack TMPL_PARM and some function parameters
8958    instantiated from it at *SPEC_P, return a NONTYPE_ARGUMENT_PACK of them
8959    and set *SPEC_P to point at the next point in the list.  */
8960
8961 static tree
8962 extract_fnparm_pack (tree tmpl_parm, tree *spec_p)
8963 {
8964   /* Collect all of the extra "packed" parameters into an
8965      argument pack.  */
8966   tree parmvec;
8967   tree parmtypevec;
8968   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
8969   tree argtypepack = cxx_make_type (TYPE_ARGUMENT_PACK);
8970   tree spec_parm = *spec_p;
8971   int i, len;
8972
8973   for (len = 0; spec_parm; ++len, spec_parm = TREE_CHAIN (spec_parm))
8974     if (tmpl_parm
8975         && !function_parameter_expanded_from_pack_p (spec_parm, tmpl_parm))
8976       break;
8977
8978   /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
8979   parmvec = make_tree_vec (len);
8980   parmtypevec = make_tree_vec (len);
8981   spec_parm = *spec_p;
8982   for (i = 0; i < len; i++, spec_parm = DECL_CHAIN (spec_parm))
8983     {
8984       TREE_VEC_ELT (parmvec, i) = spec_parm;
8985       TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
8986     }
8987
8988   /* Build the argument packs.  */
8989   SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
8990   SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
8991   TREE_TYPE (argpack) = argtypepack;
8992   *spec_p = spec_parm;
8993
8994   return argpack;
8995 }
8996
8997 /* Give a chain SPEC_PARM of PARM_DECLs, pack them into a
8998    NONTYPE_ARGUMENT_PACK.  */
8999
9000 static tree
9001 make_fnparm_pack (tree spec_parm)
9002 {
9003   return extract_fnparm_pack (NULL_TREE, &spec_parm);
9004 }
9005
9006 /* Substitute ARGS into T, which is an pack expansion
9007    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
9008    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
9009    (if only a partial substitution could be performed) or
9010    ERROR_MARK_NODE if there was an error.  */
9011 tree
9012 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
9013                        tree in_decl)
9014 {
9015   tree pattern;
9016   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
9017   int i, len = -1;
9018   tree result;
9019   int incomplete = 0;
9020   htab_t saved_local_specializations = NULL;
9021
9022   gcc_assert (PACK_EXPANSION_P (t));
9023   pattern = PACK_EXPANSION_PATTERN (t);
9024
9025   /* Determine the argument packs that will instantiate the parameter
9026      packs used in the expansion expression. While we're at it,
9027      compute the number of arguments to be expanded and make sure it
9028      is consistent.  */
9029   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
9030        pack = TREE_CHAIN (pack))
9031     {
9032       tree parm_pack = TREE_VALUE (pack);
9033       tree arg_pack = NULL_TREE;
9034       tree orig_arg = NULL_TREE;
9035
9036       if (TREE_CODE (parm_pack) == PARM_DECL)
9037         {
9038           if (!cp_unevaluated_operand)
9039             arg_pack = retrieve_local_specialization (parm_pack);
9040           else
9041             {
9042               /* We can't rely on local_specializations for a parameter
9043                  name used later in a function declaration (such as in a
9044                  late-specified return type).  Even if it exists, it might
9045                  have the wrong value for a recursive call.  Just make a
9046                  dummy decl, since it's only used for its type.  */
9047               arg_pack = tsubst_decl (parm_pack, args, complain);
9048               if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack))
9049                 /* Partial instantiation of the parm_pack, we can't build
9050                    up an argument pack yet.  */
9051                 arg_pack = NULL_TREE;
9052               else
9053                 arg_pack = make_fnparm_pack (arg_pack);
9054             }
9055         }
9056       else
9057         {
9058           int level, idx, levels;
9059           template_parm_level_and_index (parm_pack, &level, &idx);
9060
9061           levels = TMPL_ARGS_DEPTH (args);
9062           if (level <= levels)
9063             arg_pack = TMPL_ARG (args, level, idx);
9064         }
9065
9066       orig_arg = arg_pack;
9067       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
9068         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
9069       
9070       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
9071         /* This can only happen if we forget to expand an argument
9072            pack somewhere else. Just return an error, silently.  */
9073         {
9074           result = make_tree_vec (1);
9075           TREE_VEC_ELT (result, 0) = error_mark_node;
9076           return result;
9077         }
9078
9079       /* For clarity in the comments below let's use the
9080          representation 'argument_pack<elements>' to denote an
9081          argument pack and its elements.
9082
9083          In the 'if' block below, we want to detect cases where
9084          ARG_PACK is argument_pack<PARM_PACK...>.  I.e, we want to
9085          check if ARG_PACK is an argument pack which sole element is
9086          the expansion of PARM_PACK.  That argument pack is typically
9087          created by template_parm_to_arg when passed a parameter
9088          pack.  */
9089       if (arg_pack
9090           && TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack)) == 1
9091           && PACK_EXPANSION_P (TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0)))
9092         {
9093           tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
9094           tree pattern = PACK_EXPANSION_PATTERN (expansion);
9095           /* So we have an argument_pack<P...>.  We want to test if P
9096              is actually PARM_PACK.  We will not use cp_tree_equal to
9097              test P and PARM_PACK because during type fixup (by
9098              fixup_template_parm) P can be a pre-fixup version of a
9099              type and PARM_PACK be its post-fixup version.
9100              cp_tree_equal would consider them as different even
9101              though we would want to consider them compatible for our
9102              precise purpose here.
9103
9104              Thus we are going to consider that P and PARM_PACK are
9105              compatible if they have the same DECL.  */
9106           if ((/* If ARG_PACK is a type parameter pack named by the
9107                   same DECL as parm_pack ...  */
9108                (TYPE_P (pattern)
9109                 && TYPE_P (parm_pack)
9110                 && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
9111                /* ... or if ARG_PACK is a non-type parameter
9112                   named by the same DECL as parm_pack ...  */
9113                || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
9114                    && TREE_CODE (parm_pack) == PARM_DECL
9115                    && TEMPLATE_PARM_DECL (pattern)
9116                    == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
9117               && template_parameter_pack_p (pattern))
9118             /* ... then the argument pack that the parameter maps to
9119                is just an expansion of the parameter itself, such as
9120                one would find in the implicit typedef of a class
9121                inside the class itself.  Consider this parameter
9122                "unsubstituted", so that we will maintain the outer
9123                pack expansion.  */
9124             arg_pack = NULL_TREE;
9125         }
9126           
9127       if (arg_pack)
9128         {
9129           int my_len = 
9130             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
9131
9132           /* It's all-or-nothing with incomplete argument packs.  */
9133           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9134             return error_mark_node;
9135           
9136           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
9137             incomplete = 1;
9138
9139           if (len < 0)
9140             len = my_len;
9141           else if (len != my_len)
9142             {
9143               if (incomplete)
9144                 /* We got explicit args for some packs but not others;
9145                    do nothing now and try again after deduction.  */
9146                 return t;
9147               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
9148                 error ("mismatched argument pack lengths while expanding "
9149                        "%<%T%>",
9150                        pattern);
9151               else
9152                 error ("mismatched argument pack lengths while expanding "
9153                        "%<%E%>",
9154                        pattern);
9155               return error_mark_node;
9156             }
9157
9158           /* Keep track of the parameter packs and their corresponding
9159              argument packs.  */
9160           packs = tree_cons (parm_pack, arg_pack, packs);
9161           TREE_TYPE (packs) = orig_arg;
9162         }
9163       else
9164         /* We can't substitute for this parameter pack.  */
9165         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
9166                                          TREE_VALUE (pack),
9167                                          unsubstituted_packs);
9168     }
9169
9170   /* We cannot expand this expansion expression, because we don't have
9171      all of the argument packs we need. Substitute into the pattern
9172      and return a PACK_EXPANSION_*. The caller will need to deal with
9173      that.  */
9174   if (unsubstituted_packs)
9175     {
9176       tree new_pat;
9177       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9178         new_pat = tsubst_expr (pattern, args, complain, in_decl,
9179                                /*integral_constant_expression_p=*/false);
9180       else
9181         new_pat = tsubst (pattern, args, complain, in_decl);
9182       return make_pack_expansion (new_pat);
9183     }
9184
9185   /* We could not find any argument packs that work.  */
9186   if (len < 0)
9187     return error_mark_node;
9188
9189   if (cp_unevaluated_operand)
9190     {
9191       /* We're in a late-specified return type, so create our own local
9192          specializations table; the current table is either NULL or (in the
9193          case of recursive unification) might have bindings that we don't
9194          want to use or alter.  */
9195       saved_local_specializations = local_specializations;
9196       local_specializations = htab_create (37,
9197                                            hash_local_specialization,
9198                                            eq_local_specializations,
9199                                            NULL);
9200     }
9201
9202   /* For each argument in each argument pack, substitute into the
9203      pattern.  */
9204   result = make_tree_vec (len + incomplete);
9205   for (i = 0; i < len + incomplete; ++i)
9206     {
9207       /* For parameter pack, change the substitution of the parameter
9208          pack to the ith argument in its argument pack, then expand
9209          the pattern.  */
9210       for (pack = packs; pack; pack = TREE_CHAIN (pack))
9211         {
9212           tree parm = TREE_PURPOSE (pack);
9213
9214           if (TREE_CODE (parm) == PARM_DECL)
9215             {
9216               /* Select the Ith argument from the pack.  */
9217               tree arg = make_node (ARGUMENT_PACK_SELECT);
9218               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
9219               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
9220               mark_used (parm);
9221               register_local_specialization (arg, parm);
9222             }
9223           else
9224             {
9225               tree value = parm;
9226               int idx, level;
9227               template_parm_level_and_index (parm, &level, &idx);
9228               
9229               if (i < len) 
9230                 {
9231                   /* Select the Ith argument from the pack. */
9232                   value = make_node (ARGUMENT_PACK_SELECT);
9233                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
9234                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
9235                 }
9236
9237               /* Update the corresponding argument.  */
9238               TMPL_ARG (args, level, idx) = value;
9239             }
9240         }
9241
9242       /* Substitute into the PATTERN with the altered arguments.  */
9243       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
9244         TREE_VEC_ELT (result, i) = 
9245           tsubst_expr (pattern, args, complain, in_decl,
9246                        /*integral_constant_expression_p=*/false);
9247       else
9248         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
9249
9250       if (i == len)
9251         /* When we have incomplete argument packs, the last "expanded"
9252            result is itself a pack expansion, which allows us
9253            to deduce more arguments.  */
9254         TREE_VEC_ELT (result, i) = 
9255           make_pack_expansion (TREE_VEC_ELT (result, i));
9256
9257       if (TREE_VEC_ELT (result, i) == error_mark_node)
9258         {
9259           result = error_mark_node;
9260           break;
9261         }
9262     }
9263
9264   /* Update ARGS to restore the substitution from parameter packs to
9265      their argument packs.  */
9266   for (pack = packs; pack; pack = TREE_CHAIN (pack))
9267     {
9268       tree parm = TREE_PURPOSE (pack);
9269
9270       if (TREE_CODE (parm) == PARM_DECL)
9271         register_local_specialization (TREE_TYPE (pack), parm);
9272       else
9273         {
9274           int idx, level;
9275           template_parm_level_and_index (parm, &level, &idx);
9276           
9277           /* Update the corresponding argument.  */
9278           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
9279             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
9280               TREE_TYPE (pack);
9281           else
9282             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
9283         }
9284     }
9285
9286   if (saved_local_specializations)
9287     {
9288       htab_delete (local_specializations);
9289       local_specializations = saved_local_specializations;
9290     }
9291   
9292   return result;
9293 }
9294
9295 /* Given PARM_DECL PARM, find the corresponding PARM_DECL in the template
9296    TMPL.  We do this using DECL_PARM_INDEX, which should work even with
9297    parameter packs; all parms generated from a function parameter pack will
9298    have the same DECL_PARM_INDEX.  */
9299
9300 tree
9301 get_pattern_parm (tree parm, tree tmpl)
9302 {
9303   tree pattern = DECL_TEMPLATE_RESULT (tmpl);
9304   tree patparm;
9305
9306   if (DECL_ARTIFICIAL (parm))
9307     {
9308       for (patparm = DECL_ARGUMENTS (pattern);
9309            patparm; patparm = DECL_CHAIN (patparm))
9310         if (DECL_ARTIFICIAL (patparm)
9311             && DECL_NAME (parm) == DECL_NAME (patparm))
9312           break;
9313     }
9314   else
9315     {
9316       patparm = FUNCTION_FIRST_USER_PARM (DECL_TEMPLATE_RESULT (tmpl));
9317       patparm = chain_index (DECL_PARM_INDEX (parm)-1, patparm);
9318       gcc_assert (DECL_PARM_INDEX (patparm)
9319                   == DECL_PARM_INDEX (parm));
9320     }
9321
9322   return patparm;
9323 }
9324
9325 /* Substitute ARGS into the vector or list of template arguments T.  */
9326
9327 static tree
9328 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9329 {
9330   tree orig_t = t;
9331   int len, need_new = 0, i, expanded_len_adjust = 0, out;
9332   tree *elts;
9333
9334   if (t == error_mark_node)
9335     return error_mark_node;
9336
9337   len = TREE_VEC_LENGTH (t);
9338   elts = XALLOCAVEC (tree, len);
9339
9340   for (i = 0; i < len; i++)
9341     {
9342       tree orig_arg = TREE_VEC_ELT (t, i);
9343       tree new_arg;
9344
9345       if (TREE_CODE (orig_arg) == TREE_VEC)
9346         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
9347       else if (PACK_EXPANSION_P (orig_arg))
9348         {
9349           /* Substitute into an expansion expression.  */
9350           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
9351
9352           if (TREE_CODE (new_arg) == TREE_VEC)
9353             /* Add to the expanded length adjustment the number of
9354                expanded arguments. We subtract one from this
9355                measurement, because the argument pack expression
9356                itself is already counted as 1 in
9357                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
9358                the argument pack is empty.  */
9359             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
9360         }
9361       else if (ARGUMENT_PACK_P (orig_arg))
9362         {
9363           /* Substitute into each of the arguments.  */
9364           new_arg = TYPE_P (orig_arg)
9365             ? cxx_make_type (TREE_CODE (orig_arg))
9366             : make_node (TREE_CODE (orig_arg));
9367           
9368           SET_ARGUMENT_PACK_ARGS (
9369             new_arg,
9370             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
9371                                   args, complain, in_decl));
9372
9373           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
9374             new_arg = error_mark_node;
9375
9376           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
9377             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
9378                                           complain, in_decl);
9379             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
9380
9381             if (TREE_TYPE (new_arg) == error_mark_node)
9382               new_arg = error_mark_node;
9383           }
9384         }
9385       else
9386         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
9387
9388       if (new_arg == error_mark_node)
9389         return error_mark_node;
9390
9391       elts[i] = new_arg;
9392       if (new_arg != orig_arg)
9393         need_new = 1;
9394     }
9395
9396   if (!need_new)
9397     return t;
9398
9399   /* Make space for the expanded arguments coming from template
9400      argument packs.  */
9401   t = make_tree_vec (len + expanded_len_adjust);
9402   /* ORIG_T can contain TREE_VECs. That happens if ORIG_T contains the
9403      arguments for a member template.
9404      In that case each TREE_VEC in ORIG_T represents a level of template
9405      arguments, and ORIG_T won't carry any non defaulted argument count.
9406      It will rather be the nested TREE_VECs that will carry one.
9407      In other words, ORIG_T carries a non defaulted argument count only
9408      if it doesn't contain any nested TREE_VEC.  */
9409   if (NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t))
9410     {
9411       int count = GET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (orig_t);
9412       count += expanded_len_adjust;
9413       SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (t, count);
9414     }
9415   for (i = 0, out = 0; i < len; i++)
9416     {
9417       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
9418            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
9419           && TREE_CODE (elts[i]) == TREE_VEC)
9420         {
9421           int idx;
9422
9423           /* Now expand the template argument pack "in place".  */
9424           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
9425             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
9426         }
9427       else
9428         {
9429           TREE_VEC_ELT (t, out) = elts[i];
9430           out++;
9431         }
9432     }
9433
9434   return t;
9435 }
9436
9437 /* Return the result of substituting ARGS into the template parameters
9438    given by PARMS.  If there are m levels of ARGS and m + n levels of
9439    PARMS, then the result will contain n levels of PARMS.  For
9440    example, if PARMS is `template <class T> template <class U>
9441    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
9442    result will be `template <int*, double, class V>'.  */
9443
9444 static tree
9445 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
9446 {
9447   tree r = NULL_TREE;
9448   tree* new_parms;
9449
9450   /* When substituting into a template, we must set
9451      PROCESSING_TEMPLATE_DECL as the template parameters may be
9452      dependent if they are based on one-another, and the dependency
9453      predicates are short-circuit outside of templates.  */
9454   ++processing_template_decl;
9455
9456   for (new_parms = &r;
9457        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
9458        new_parms = &(TREE_CHAIN (*new_parms)),
9459          parms = TREE_CHAIN (parms))
9460     {
9461       tree new_vec =
9462         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
9463       int i;
9464
9465       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
9466         {
9467           tree tuple;
9468
9469           if (parms == error_mark_node)
9470             continue;
9471
9472           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
9473
9474           if (tuple == error_mark_node)
9475             continue;
9476
9477           TREE_VEC_ELT (new_vec, i) =
9478             tsubst_template_parm (tuple, args, complain);
9479         }
9480
9481       *new_parms =
9482         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
9483                              - TMPL_ARGS_DEPTH (args)),
9484                    new_vec, NULL_TREE);
9485     }
9486
9487   --processing_template_decl;
9488
9489   return r;
9490 }
9491
9492 /* Return the result of substituting ARGS into one template parameter
9493    given by T. T Must be a TREE_LIST which TREE_VALUE is the template
9494    parameter and which TREE_PURPOSE is the default argument of the
9495    template parameter.  */
9496
9497 static tree
9498 tsubst_template_parm (tree t, tree args, tsubst_flags_t complain)
9499 {
9500   tree default_value, parm_decl;
9501
9502   if (args == NULL_TREE
9503       || t == NULL_TREE
9504       || t == error_mark_node)
9505     return t;
9506
9507   gcc_assert (TREE_CODE (t) == TREE_LIST);
9508
9509   default_value = TREE_PURPOSE (t);
9510   parm_decl = TREE_VALUE (t);
9511
9512   parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
9513   if (TREE_CODE (parm_decl) == PARM_DECL
9514       && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
9515     parm_decl = error_mark_node;
9516   default_value = tsubst_template_arg (default_value, args,
9517                                        complain, NULL_TREE);
9518
9519   return build_tree_list (default_value, parm_decl);
9520 }
9521
9522 /* Substitute the ARGS into the indicated aggregate (or enumeration)
9523    type T.  If T is not an aggregate or enumeration type, it is
9524    handled as if by tsubst.  IN_DECL is as for tsubst.  If
9525    ENTERING_SCOPE is nonzero, T is the context for a template which
9526    we are presently tsubst'ing.  Return the substituted value.  */
9527
9528 static tree
9529 tsubst_aggr_type (tree t,
9530                   tree args,
9531                   tsubst_flags_t complain,
9532                   tree in_decl,
9533                   int entering_scope)
9534 {
9535   if (t == NULL_TREE)
9536     return NULL_TREE;
9537
9538   switch (TREE_CODE (t))
9539     {
9540     case RECORD_TYPE:
9541       if (TYPE_PTRMEMFUNC_P (t))
9542         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
9543
9544       /* Else fall through.  */
9545     case ENUMERAL_TYPE:
9546     case UNION_TYPE:
9547       if (TYPE_TEMPLATE_INFO (t) && uses_template_parms (t))
9548         {
9549           tree argvec;
9550           tree context;
9551           tree r;
9552           int saved_unevaluated_operand;
9553           int saved_inhibit_evaluation_warnings;
9554
9555           /* In "sizeof(X<I>)" we need to evaluate "I".  */
9556           saved_unevaluated_operand = cp_unevaluated_operand;
9557           cp_unevaluated_operand = 0;
9558           saved_inhibit_evaluation_warnings = c_inhibit_evaluation_warnings;
9559           c_inhibit_evaluation_warnings = 0;
9560
9561           /* First, determine the context for the type we are looking
9562              up.  */
9563           context = TYPE_CONTEXT (t);
9564           if (context)
9565             {
9566               context = tsubst_aggr_type (context, args, complain,
9567                                           in_decl, /*entering_scope=*/1);
9568               /* If context is a nested class inside a class template,
9569                  it may still need to be instantiated (c++/33959).  */
9570               if (TYPE_P (context))
9571                 context = complete_type (context);
9572             }
9573
9574           /* Then, figure out what arguments are appropriate for the
9575              type we are trying to find.  For example, given:
9576
9577                template <class T> struct S;
9578                template <class T, class U> void f(T, U) { S<U> su; }
9579
9580              and supposing that we are instantiating f<int, double>,
9581              then our ARGS will be {int, double}, but, when looking up
9582              S we only want {double}.  */
9583           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
9584                                          complain, in_decl);
9585           if (argvec == error_mark_node)
9586             r = error_mark_node;
9587           else
9588             {
9589               r = lookup_template_class (t, argvec, in_decl, context,
9590                                          entering_scope, complain);
9591               r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
9592             }
9593
9594           cp_unevaluated_operand = saved_unevaluated_operand;
9595           c_inhibit_evaluation_warnings = saved_inhibit_evaluation_warnings;
9596
9597           return r;
9598         }
9599       else
9600         /* This is not a template type, so there's nothing to do.  */
9601         return t;
9602
9603     default:
9604       return tsubst (t, args, complain, in_decl);
9605     }
9606 }
9607
9608 /* Substitute into the default argument ARG (a default argument for
9609    FN), which has the indicated TYPE.  */
9610
9611 tree
9612 tsubst_default_argument (tree fn, tree type, tree arg)
9613 {
9614   tree saved_class_ptr = NULL_TREE;
9615   tree saved_class_ref = NULL_TREE;
9616
9617   /* This can happen in invalid code.  */
9618   if (TREE_CODE (arg) == DEFAULT_ARG)
9619     return arg;
9620
9621   /* This default argument came from a template.  Instantiate the
9622      default argument here, not in tsubst.  In the case of
9623      something like:
9624
9625        template <class T>
9626        struct S {
9627          static T t();
9628          void f(T = t());
9629        };
9630
9631      we must be careful to do name lookup in the scope of S<T>,
9632      rather than in the current class.  */
9633   push_access_scope (fn);
9634   /* The "this" pointer is not valid in a default argument.  */
9635   if (cfun)
9636     {
9637       saved_class_ptr = current_class_ptr;
9638       cp_function_chain->x_current_class_ptr = NULL_TREE;
9639       saved_class_ref = current_class_ref;
9640       cp_function_chain->x_current_class_ref = NULL_TREE;
9641     }
9642
9643   push_deferring_access_checks(dk_no_deferred);
9644   /* The default argument expression may cause implicitly defined
9645      member functions to be synthesized, which will result in garbage
9646      collection.  We must treat this situation as if we were within
9647      the body of function so as to avoid collecting live data on the
9648      stack.  */
9649   ++function_depth;
9650   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
9651                      tf_warning_or_error, NULL_TREE,
9652                      /*integral_constant_expression_p=*/false);
9653   --function_depth;
9654   pop_deferring_access_checks();
9655
9656   /* Restore the "this" pointer.  */
9657   if (cfun)
9658     {
9659       cp_function_chain->x_current_class_ptr = saved_class_ptr;
9660       cp_function_chain->x_current_class_ref = saved_class_ref;
9661     }
9662
9663   /* Make sure the default argument is reasonable.  */
9664   arg = check_default_argument (type, arg);
9665
9666   pop_access_scope (fn);
9667
9668   return arg;
9669 }
9670
9671 /* Substitute into all the default arguments for FN.  */
9672
9673 static void
9674 tsubst_default_arguments (tree fn)
9675 {
9676   tree arg;
9677   tree tmpl_args;
9678
9679   tmpl_args = DECL_TI_ARGS (fn);
9680
9681   /* If this function is not yet instantiated, we certainly don't need
9682      its default arguments.  */
9683   if (uses_template_parms (tmpl_args))
9684     return;
9685   /* Don't do this again for clones.  */
9686   if (DECL_CLONED_FUNCTION_P (fn))
9687     return;
9688
9689   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
9690        arg;
9691        arg = TREE_CHAIN (arg))
9692     if (TREE_PURPOSE (arg))
9693       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
9694                                                     TREE_VALUE (arg),
9695                                                     TREE_PURPOSE (arg));
9696 }
9697
9698 /* Substitute the ARGS into the T, which is a _DECL.  Return the
9699    result of the substitution.  Issue error and warning messages under
9700    control of COMPLAIN.  */
9701
9702 static tree
9703 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
9704 {
9705 #define RETURN(EXP) do { r = (EXP); goto out; } while(0)
9706   location_t saved_loc;
9707   tree r = NULL_TREE;
9708   tree in_decl = t;
9709   hashval_t hash = 0;
9710
9711   /* Set the filename and linenumber to improve error-reporting.  */
9712   saved_loc = input_location;
9713   input_location = DECL_SOURCE_LOCATION (t);
9714
9715   switch (TREE_CODE (t))
9716     {
9717     case TEMPLATE_DECL:
9718       {
9719         /* We can get here when processing a member function template,
9720            member class template, or template template parameter.  */
9721         tree decl = DECL_TEMPLATE_RESULT (t);
9722         tree spec;
9723         tree tmpl_args;
9724         tree full_args;
9725
9726         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9727           {
9728             /* Template template parameter is treated here.  */
9729             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9730             if (new_type == error_mark_node)
9731               RETURN (error_mark_node);
9732
9733             r = copy_decl (t);
9734             DECL_CHAIN (r) = NULL_TREE;
9735             TREE_TYPE (r) = new_type;
9736             DECL_TEMPLATE_RESULT (r)
9737               = build_decl (DECL_SOURCE_LOCATION (decl),
9738                             TYPE_DECL, DECL_NAME (decl), new_type);
9739             DECL_TEMPLATE_PARMS (r)
9740               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9741                                        complain);
9742             TYPE_NAME (new_type) = r;
9743             break;
9744           }
9745
9746         /* We might already have an instance of this template.
9747            The ARGS are for the surrounding class type, so the
9748            full args contain the tsubst'd args for the context,
9749            plus the innermost args from the template decl.  */
9750         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
9751           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
9752           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
9753         /* Because this is a template, the arguments will still be
9754            dependent, even after substitution.  If
9755            PROCESSING_TEMPLATE_DECL is not set, the dependency
9756            predicates will short-circuit.  */
9757         ++processing_template_decl;
9758         full_args = tsubst_template_args (tmpl_args, args,
9759                                           complain, in_decl);
9760         --processing_template_decl;
9761         if (full_args == error_mark_node)
9762           RETURN (error_mark_node);
9763
9764         /* If this is a default template template argument,
9765            tsubst might not have changed anything.  */
9766         if (full_args == tmpl_args)
9767           RETURN (t);
9768
9769         hash = hash_tmpl_and_args (t, full_args);
9770         spec = retrieve_specialization (t, full_args, hash);
9771         if (spec != NULL_TREE)
9772           {
9773             r = spec;
9774             break;
9775           }
9776
9777         /* Make a new template decl.  It will be similar to the
9778            original, but will record the current template arguments.
9779            We also create a new function declaration, which is just
9780            like the old one, but points to this new template, rather
9781            than the old one.  */
9782         r = copy_decl (t);
9783         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
9784         DECL_CHAIN (r) = NULL_TREE;
9785
9786         DECL_TEMPLATE_INFO (r) = build_template_info (t, args);
9787
9788         if (TREE_CODE (decl) == TYPE_DECL)
9789           {
9790             tree new_type;
9791             ++processing_template_decl;
9792             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9793             --processing_template_decl;
9794             if (new_type == error_mark_node)
9795               RETURN (error_mark_node);
9796
9797             TREE_TYPE (r) = new_type;
9798             CLASSTYPE_TI_TEMPLATE (new_type) = r;
9799             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
9800             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
9801             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
9802           }
9803         else
9804           {
9805             tree new_decl;
9806             ++processing_template_decl;
9807             new_decl = tsubst (decl, args, complain, in_decl);
9808             --processing_template_decl;
9809             if (new_decl == error_mark_node)
9810               RETURN (error_mark_node);
9811
9812             DECL_TEMPLATE_RESULT (r) = new_decl;
9813             DECL_TI_TEMPLATE (new_decl) = r;
9814             TREE_TYPE (r) = TREE_TYPE (new_decl);
9815             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
9816             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
9817           }
9818
9819         SET_DECL_IMPLICIT_INSTANTIATION (r);
9820         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
9821         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
9822
9823         /* The template parameters for this new template are all the
9824            template parameters for the old template, except the
9825            outermost level of parameters.  */
9826         DECL_TEMPLATE_PARMS (r)
9827           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
9828                                    complain);
9829
9830         if (PRIMARY_TEMPLATE_P (t))
9831           DECL_PRIMARY_TEMPLATE (r) = r;
9832
9833         if (TREE_CODE (decl) != TYPE_DECL)
9834           /* Record this non-type partial instantiation.  */
9835           register_specialization (r, t,
9836                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
9837                                    false, hash);
9838       }
9839       break;
9840
9841     case FUNCTION_DECL:
9842       {
9843         tree ctx;
9844         tree argvec = NULL_TREE;
9845         tree *friends;
9846         tree gen_tmpl;
9847         tree type;
9848         int member;
9849         int args_depth;
9850         int parms_depth;
9851
9852         /* Nobody should be tsubst'ing into non-template functions.  */
9853         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
9854
9855         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
9856           {
9857             tree spec;
9858             bool dependent_p;
9859
9860             /* If T is not dependent, just return it.  We have to
9861                increment PROCESSING_TEMPLATE_DECL because
9862                value_dependent_expression_p assumes that nothing is
9863                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
9864             ++processing_template_decl;
9865             dependent_p = value_dependent_expression_p (t);
9866             --processing_template_decl;
9867             if (!dependent_p)
9868               RETURN (t);
9869
9870             /* Calculate the most general template of which R is a
9871                specialization, and the complete set of arguments used to
9872                specialize R.  */
9873             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
9874             argvec = tsubst_template_args (DECL_TI_ARGS
9875                                           (DECL_TEMPLATE_RESULT
9876                                                  (DECL_TI_TEMPLATE (t))),
9877                                            args, complain, in_decl);
9878             if (argvec == error_mark_node)
9879               RETURN (error_mark_node);
9880
9881             /* Check to see if we already have this specialization.  */
9882             hash = hash_tmpl_and_args (gen_tmpl, argvec);
9883             spec = retrieve_specialization (gen_tmpl, argvec, hash);
9884
9885             if (spec)
9886               {
9887                 r = spec;
9888                 break;
9889               }
9890
9891             /* We can see more levels of arguments than parameters if
9892                there was a specialization of a member template, like
9893                this:
9894
9895                  template <class T> struct S { template <class U> void f(); }
9896                  template <> template <class U> void S<int>::f(U);
9897
9898                Here, we'll be substituting into the specialization,
9899                because that's where we can find the code we actually
9900                want to generate, but we'll have enough arguments for
9901                the most general template.
9902
9903                We also deal with the peculiar case:
9904
9905                  template <class T> struct S {
9906                    template <class U> friend void f();
9907                  };
9908                  template <class U> void f() {}
9909                  template S<int>;
9910                  template void f<double>();
9911
9912                Here, the ARGS for the instantiation of will be {int,
9913                double}.  But, we only need as many ARGS as there are
9914                levels of template parameters in CODE_PATTERN.  We are
9915                careful not to get fooled into reducing the ARGS in
9916                situations like:
9917
9918                  template <class T> struct S { template <class U> void f(U); }
9919                  template <class T> template <> void S<T>::f(int) {}
9920
9921                which we can spot because the pattern will be a
9922                specialization in this case.  */
9923             args_depth = TMPL_ARGS_DEPTH (args);
9924             parms_depth =
9925               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
9926             if (args_depth > parms_depth
9927                 && !DECL_TEMPLATE_SPECIALIZATION (t))
9928               args = get_innermost_template_args (args, parms_depth);
9929           }
9930         else
9931           {
9932             /* This special case arises when we have something like this:
9933
9934                  template <class T> struct S {
9935                    friend void f<int>(int, double);
9936                  };
9937
9938                Here, the DECL_TI_TEMPLATE for the friend declaration
9939                will be an IDENTIFIER_NODE.  We are being called from
9940                tsubst_friend_function, and we want only to create a
9941                new decl (R) with appropriate types so that we can call
9942                determine_specialization.  */
9943             gen_tmpl = NULL_TREE;
9944           }
9945
9946         if (DECL_CLASS_SCOPE_P (t))
9947           {
9948             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
9949               member = 2;
9950             else
9951               member = 1;
9952             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
9953                                     complain, t, /*entering_scope=*/1);
9954           }
9955         else
9956           {
9957             member = 0;
9958             ctx = DECL_CONTEXT (t);
9959           }
9960         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9961         if (type == error_mark_node)
9962           RETURN (error_mark_node);
9963
9964         /* We do NOT check for matching decls pushed separately at this
9965            point, as they may not represent instantiations of this
9966            template, and in any case are considered separate under the
9967            discrete model.  */
9968         r = copy_decl (t);
9969         DECL_USE_TEMPLATE (r) = 0;
9970         TREE_TYPE (r) = type;
9971         /* Clear out the mangled name and RTL for the instantiation.  */
9972         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
9973         SET_DECL_RTL (r, NULL);
9974         /* Leave DECL_INITIAL set on deleted instantiations.  */
9975         if (!DECL_DELETED_FN (r))
9976           DECL_INITIAL (r) = NULL_TREE;
9977         DECL_CONTEXT (r) = ctx;
9978
9979         if (member && DECL_CONV_FN_P (r))
9980           /* Type-conversion operator.  Reconstruct the name, in
9981              case it's the name of one of the template's parameters.  */
9982           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
9983
9984         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
9985                                      complain, t);
9986         DECL_RESULT (r) = NULL_TREE;
9987
9988         TREE_STATIC (r) = 0;
9989         TREE_PUBLIC (r) = TREE_PUBLIC (t);
9990         DECL_EXTERNAL (r) = 1;
9991         /* If this is an instantiation of a function with internal
9992            linkage, we already know what object file linkage will be
9993            assigned to the instantiation.  */
9994         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
9995         DECL_DEFER_OUTPUT (r) = 0;
9996         DECL_CHAIN (r) = NULL_TREE;
9997         DECL_PENDING_INLINE_INFO (r) = 0;
9998         DECL_PENDING_INLINE_P (r) = 0;
9999         DECL_SAVED_TREE (r) = NULL_TREE;
10000         DECL_STRUCT_FUNCTION (r) = NULL;
10001         TREE_USED (r) = 0;
10002         /* We'll re-clone as appropriate in instantiate_template.  */
10003         DECL_CLONED_FUNCTION (r) = NULL_TREE;
10004
10005         /* If we aren't complaining now, return on error before we register
10006            the specialization so that we'll complain eventually.  */
10007         if ((complain & tf_error) == 0
10008             && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10009             && !grok_op_properties (r, /*complain=*/false))
10010           RETURN (error_mark_node);
10011
10012         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
10013            this in the special friend case mentioned above where
10014            GEN_TMPL is NULL.  */
10015         if (gen_tmpl)
10016           {
10017             DECL_TEMPLATE_INFO (r)
10018               = build_template_info (gen_tmpl, argvec);
10019             SET_DECL_IMPLICIT_INSTANTIATION (r);
10020             register_specialization (r, gen_tmpl, argvec, false, hash);
10021
10022             /* We're not supposed to instantiate default arguments
10023                until they are called, for a template.  But, for a
10024                declaration like:
10025
10026                  template <class T> void f ()
10027                  { extern void g(int i = T()); }
10028
10029                we should do the substitution when the template is
10030                instantiated.  We handle the member function case in
10031                instantiate_class_template since the default arguments
10032                might refer to other members of the class.  */
10033             if (!member
10034                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
10035                 && !uses_template_parms (argvec))
10036               tsubst_default_arguments (r);
10037           }
10038         else
10039           DECL_TEMPLATE_INFO (r) = NULL_TREE;
10040
10041         /* Copy the list of befriending classes.  */
10042         for (friends = &DECL_BEFRIENDING_CLASSES (r);
10043              *friends;
10044              friends = &TREE_CHAIN (*friends))
10045           {
10046             *friends = copy_node (*friends);
10047             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
10048                                             args, complain,
10049                                             in_decl);
10050           }
10051
10052         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
10053           {
10054             maybe_retrofit_in_chrg (r);
10055             if (DECL_CONSTRUCTOR_P (r))
10056               grok_ctor_properties (ctx, r);
10057             /* If this is an instantiation of a member template, clone it.
10058                If it isn't, that'll be handled by
10059                clone_constructors_and_destructors.  */
10060             if (PRIMARY_TEMPLATE_P (gen_tmpl))
10061               clone_function_decl (r, /*update_method_vec_p=*/0);
10062           }
10063         else if ((complain & tf_error) != 0
10064                  && IDENTIFIER_OPNAME_P (DECL_NAME (r))
10065                  && !grok_op_properties (r, /*complain=*/true))
10066           RETURN (error_mark_node);
10067
10068         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
10069           SET_DECL_FRIEND_CONTEXT (r,
10070                                    tsubst (DECL_FRIEND_CONTEXT (t),
10071                                             args, complain, in_decl));
10072
10073         /* Possibly limit visibility based on template args.  */
10074         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10075         if (DECL_VISIBILITY_SPECIFIED (t))
10076           {
10077             DECL_VISIBILITY_SPECIFIED (r) = 0;
10078             DECL_ATTRIBUTES (r)
10079               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10080           }
10081         determine_visibility (r);
10082         if (DECL_DEFAULTED_OUTSIDE_CLASS_P (r)
10083             && !processing_template_decl)
10084           defaulted_late_check (r);
10085
10086         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10087                                         args, complain, in_decl);
10088       }
10089       break;
10090
10091     case PARM_DECL:
10092       {
10093         tree type = NULL_TREE;
10094         int i, len = 1;
10095         tree expanded_types = NULL_TREE;
10096         tree prev_r = NULL_TREE;
10097         tree first_r = NULL_TREE;
10098
10099         if (FUNCTION_PARAMETER_PACK_P (t))
10100           {
10101             /* If there is a local specialization that isn't a
10102                parameter pack, it means that we're doing a "simple"
10103                substitution from inside tsubst_pack_expansion. Just
10104                return the local specialization (which will be a single
10105                parm).  */
10106             tree spec = retrieve_local_specialization (t);
10107             if (spec 
10108                 && TREE_CODE (spec) == PARM_DECL
10109                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
10110               RETURN (spec);
10111
10112             /* Expand the TYPE_PACK_EXPANSION that provides the types for
10113                the parameters in this function parameter pack.  */
10114             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
10115                                                     complain, in_decl);
10116             if (TREE_CODE (expanded_types) == TREE_VEC)
10117               {
10118                 len = TREE_VEC_LENGTH (expanded_types);
10119
10120                 /* Zero-length parameter packs are boring. Just substitute
10121                    into the chain.  */
10122                 if (len == 0)
10123                   RETURN (tsubst (TREE_CHAIN (t), args, complain,
10124                                   TREE_CHAIN (t)));
10125               }
10126             else
10127               {
10128                 /* All we did was update the type. Make a note of that.  */
10129                 type = expanded_types;
10130                 expanded_types = NULL_TREE;
10131               }
10132           }
10133
10134         /* Loop through all of the parameter's we'll build. When T is
10135            a function parameter pack, LEN is the number of expanded
10136            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
10137         r = NULL_TREE;
10138         for (i = 0; i < len; ++i)
10139           {
10140             prev_r = r;
10141             r = copy_node (t);
10142             if (DECL_TEMPLATE_PARM_P (t))
10143               SET_DECL_TEMPLATE_PARM_P (r);
10144
10145             if (expanded_types)
10146               /* We're on the Ith parameter of the function parameter
10147                  pack.  */
10148               {
10149                 /* An argument of a function parameter pack is not a parameter
10150                    pack.  */
10151                 FUNCTION_PARAMETER_PACK_P (r) = false;
10152
10153                 /* Get the Ith type.  */
10154                 type = TREE_VEC_ELT (expanded_types, i);
10155
10156                 if (DECL_NAME (r))
10157                   /* Rename the parameter to include the index.  */
10158                   DECL_NAME (r) =
10159                     make_ith_pack_parameter_name (DECL_NAME (r), i);
10160               }
10161             else if (!type)
10162               /* We're dealing with a normal parameter.  */
10163               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10164
10165             type = type_decays_to (type);
10166             TREE_TYPE (r) = type;
10167             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10168
10169             if (DECL_INITIAL (r))
10170               {
10171                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
10172                   DECL_INITIAL (r) = TREE_TYPE (r);
10173                 else
10174                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
10175                                              complain, in_decl);
10176               }
10177
10178             DECL_CONTEXT (r) = NULL_TREE;
10179
10180             if (!DECL_TEMPLATE_PARM_P (r))
10181               DECL_ARG_TYPE (r) = type_passed_as (type);
10182
10183             apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10184                                             args, complain, in_decl);
10185
10186             /* Keep track of the first new parameter we
10187                generate. That's what will be returned to the
10188                caller.  */
10189             if (!first_r)
10190               first_r = r;
10191
10192             /* Build a proper chain of parameters when substituting
10193                into a function parameter pack.  */
10194             if (prev_r)
10195               DECL_CHAIN (prev_r) = r;
10196           }
10197
10198         if (DECL_CHAIN (t))
10199           DECL_CHAIN (r) = tsubst (DECL_CHAIN (t), args,
10200                                    complain, DECL_CHAIN (t));
10201
10202         /* FIRST_R contains the start of the chain we've built.  */
10203         r = first_r;
10204       }
10205       break;
10206
10207     case FIELD_DECL:
10208       {
10209         tree type;
10210
10211         r = copy_decl (t);
10212         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10213         if (type == error_mark_node)
10214           RETURN (error_mark_node);
10215         TREE_TYPE (r) = type;
10216         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10217
10218         /* DECL_INITIAL gives the number of bits in a bit-field.  */
10219         DECL_INITIAL (r)
10220           = tsubst_expr (DECL_INITIAL (t), args,
10221                          complain, in_decl,
10222                          /*integral_constant_expression_p=*/true);
10223         /* We don't have to set DECL_CONTEXT here; it is set by
10224            finish_member_declaration.  */
10225         DECL_CHAIN (r) = NULL_TREE;
10226         if (VOID_TYPE_P (type))
10227           error ("instantiation of %q+D as type %qT", r, type);
10228
10229         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r), 0,
10230                                         args, complain, in_decl);
10231       }
10232       break;
10233
10234     case USING_DECL:
10235       /* We reach here only for member using decls.  */
10236       if (DECL_DEPENDENT_P (t))
10237         {
10238           r = do_class_using_decl
10239             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
10240              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
10241           if (!r)
10242             r = error_mark_node;
10243           else
10244             {
10245               TREE_PROTECTED (r) = TREE_PROTECTED (t);
10246               TREE_PRIVATE (r) = TREE_PRIVATE (t);
10247             }
10248         }
10249       else
10250         {
10251           r = copy_node (t);
10252           DECL_CHAIN (r) = NULL_TREE;
10253         }
10254       break;
10255
10256     case TYPE_DECL:
10257     case VAR_DECL:
10258       {
10259         tree argvec = NULL_TREE;
10260         tree gen_tmpl = NULL_TREE;
10261         tree spec;
10262         tree tmpl = NULL_TREE;
10263         tree ctx;
10264         tree type = NULL_TREE;
10265         bool local_p;
10266
10267         if (TREE_CODE (t) == TYPE_DECL
10268             && t == TYPE_MAIN_DECL (TREE_TYPE (t)))
10269           {
10270             /* If this is the canonical decl, we don't have to
10271                mess with instantiations, and often we can't (for
10272                typename, template type parms and such).  Note that
10273                TYPE_NAME is not correct for the above test if
10274                we've copied the type for a typedef.  */
10275             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10276             if (type == error_mark_node)
10277               RETURN (error_mark_node);
10278             r = TYPE_NAME (type);
10279             break;
10280           }
10281
10282         /* Check to see if we already have the specialization we
10283            need.  */
10284         spec = NULL_TREE;
10285         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
10286           {
10287             /* T is a static data member or namespace-scope entity.
10288                We have to substitute into namespace-scope variables
10289                (even though such entities are never templates) because
10290                of cases like:
10291                
10292                  template <class T> void f() { extern T t; }
10293
10294                where the entity referenced is not known until
10295                instantiation time.  */
10296             local_p = false;
10297             ctx = DECL_CONTEXT (t);
10298             if (DECL_CLASS_SCOPE_P (t))
10299               {
10300                 ctx = tsubst_aggr_type (ctx, args,
10301                                         complain,
10302                                         in_decl, /*entering_scope=*/1);
10303                 /* If CTX is unchanged, then T is in fact the
10304                    specialization we want.  That situation occurs when
10305                    referencing a static data member within in its own
10306                    class.  We can use pointer equality, rather than
10307                    same_type_p, because DECL_CONTEXT is always
10308                    canonical.  */
10309                 if (ctx == DECL_CONTEXT (t))
10310                   spec = t;
10311               }
10312
10313             if (!spec)
10314               {
10315                 tmpl = DECL_TI_TEMPLATE (t);
10316                 gen_tmpl = most_general_template (tmpl);
10317                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
10318                 hash = hash_tmpl_and_args (gen_tmpl, argvec);
10319                 spec = retrieve_specialization (gen_tmpl, argvec, hash);
10320               }
10321           }
10322         else
10323           {
10324             /* A local variable.  */
10325             local_p = true;
10326             /* Subsequent calls to pushdecl will fill this in.  */
10327             ctx = NULL_TREE;
10328             spec = retrieve_local_specialization (t);
10329           }
10330         /* If we already have the specialization we need, there is
10331            nothing more to do.  */ 
10332         if (spec)
10333           {
10334             r = spec;
10335             break;
10336           }
10337
10338         /* Create a new node for the specialization we need.  */
10339         r = copy_decl (t);
10340         if (type == NULL_TREE)
10341           {
10342             if (is_typedef_decl (t))
10343               type = DECL_ORIGINAL_TYPE (t);
10344             else
10345               type = TREE_TYPE (t);
10346             if (TREE_CODE (t) == VAR_DECL && VAR_HAD_UNKNOWN_BOUND (t))
10347               type = strip_array_domain (type);
10348             type = tsubst (type, args, complain, in_decl);
10349           }
10350         if (TREE_CODE (r) == VAR_DECL)
10351           {
10352             /* Even if the original location is out of scope, the
10353                newly substituted one is not.  */
10354             DECL_DEAD_FOR_LOCAL (r) = 0;
10355             DECL_INITIALIZED_P (r) = 0;
10356             DECL_TEMPLATE_INSTANTIATED (r) = 0;
10357             if (type == error_mark_node)
10358               RETURN (error_mark_node);
10359             if (TREE_CODE (type) == FUNCTION_TYPE)
10360               {
10361                 /* It may seem that this case cannot occur, since:
10362
10363                      typedef void f();
10364                      void g() { f x; }
10365
10366                    declares a function, not a variable.  However:
10367       
10368                      typedef void f();
10369                      template <typename T> void g() { T t; }
10370                      template void g<f>();
10371
10372                    is an attempt to declare a variable with function
10373                    type.  */
10374                 error ("variable %qD has function type",
10375                        /* R is not yet sufficiently initialized, so we
10376                           just use its name.  */
10377                        DECL_NAME (r));
10378                 RETURN (error_mark_node);
10379               }
10380             type = complete_type (type);
10381             /* Wait until cp_finish_decl to set this again, to handle
10382                circular dependency (template/instantiate6.C). */
10383             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r) = 0;
10384             type = check_var_type (DECL_NAME (r), type);
10385
10386             if (DECL_HAS_VALUE_EXPR_P (t))
10387               {
10388                 tree ve = DECL_VALUE_EXPR (t);
10389                 ve = tsubst_expr (ve, args, complain, in_decl,
10390                                   /*constant_expression_p=*/false);
10391                 if (REFERENCE_REF_P (ve))
10392                   {
10393                     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
10394                     ve = TREE_OPERAND (ve, 0);
10395                   }
10396                 SET_DECL_VALUE_EXPR (r, ve);
10397               }
10398           }
10399         else if (DECL_SELF_REFERENCE_P (t))
10400           SET_DECL_SELF_REFERENCE_P (r);
10401         TREE_TYPE (r) = type;
10402         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
10403         DECL_CONTEXT (r) = ctx;
10404         /* Clear out the mangled name and RTL for the instantiation.  */
10405         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
10406         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10407           SET_DECL_RTL (r, NULL);
10408         /* The initializer must not be expanded until it is required;
10409            see [temp.inst].  */
10410         DECL_INITIAL (r) = NULL_TREE;
10411         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
10412           SET_DECL_RTL (r, NULL);
10413         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
10414         if (TREE_CODE (r) == VAR_DECL)
10415           {
10416             /* Possibly limit visibility based on template args.  */
10417             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
10418             if (DECL_VISIBILITY_SPECIFIED (t))
10419               {
10420                 DECL_VISIBILITY_SPECIFIED (r) = 0;
10421                 DECL_ATTRIBUTES (r)
10422                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
10423               }
10424             determine_visibility (r);
10425           }
10426
10427         if (!local_p)
10428           {
10429             /* A static data member declaration is always marked
10430                external when it is declared in-class, even if an
10431                initializer is present.  We mimic the non-template
10432                processing here.  */
10433             DECL_EXTERNAL (r) = 1;
10434
10435             register_specialization (r, gen_tmpl, argvec, false, hash);
10436             DECL_TEMPLATE_INFO (r) = build_template_info (tmpl, argvec);
10437             SET_DECL_IMPLICIT_INSTANTIATION (r);
10438           }
10439         else if (cp_unevaluated_operand)
10440           {
10441             /* We're substituting this var in a decltype outside of its
10442                scope, such as for a lambda return type.  Don't add it to
10443                local_specializations, do perform auto deduction.  */
10444             tree auto_node = type_uses_auto (type);
10445             if (auto_node)
10446               {
10447                 tree init
10448                   = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl,
10449                                  /*constant_expression_p=*/false);
10450                 init = resolve_nondeduced_context (init);
10451                 TREE_TYPE (r) = type
10452                   = do_auto_deduction (type, init, auto_node);
10453               }
10454           }
10455         else
10456           register_local_specialization (r, t);
10457
10458         DECL_CHAIN (r) = NULL_TREE;
10459
10460         apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
10461                                         /*flags=*/0,
10462                                         args, complain, in_decl);
10463
10464         /* Preserve a typedef that names a type.  */
10465         if (is_typedef_decl (r))
10466           {
10467             DECL_ORIGINAL_TYPE (r) = NULL_TREE;
10468             set_underlying_type (r);
10469           }
10470
10471         layout_decl (r, 0);
10472       }
10473       break;
10474
10475     default:
10476       gcc_unreachable ();
10477     }
10478 #undef RETURN
10479
10480  out:
10481   /* Restore the file and line information.  */
10482   input_location = saved_loc;
10483
10484   return r;
10485 }
10486
10487 /* Substitute into the ARG_TYPES of a function type.  */
10488
10489 static tree
10490 tsubst_arg_types (tree arg_types,
10491                   tree args,
10492                   tsubst_flags_t complain,
10493                   tree in_decl)
10494 {
10495   tree remaining_arg_types;
10496   tree type = NULL_TREE;
10497   int i = 1;
10498   tree expanded_args = NULL_TREE;
10499   tree default_arg;
10500
10501   if (!arg_types || arg_types == void_list_node)
10502     return arg_types;
10503
10504   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
10505                                           args, complain, in_decl);
10506   if (remaining_arg_types == error_mark_node)
10507     return error_mark_node;
10508
10509   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
10510     {
10511       /* For a pack expansion, perform substitution on the
10512          entire expression. Later on, we'll handle the arguments
10513          one-by-one.  */
10514       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
10515                                             args, complain, in_decl);
10516
10517       if (TREE_CODE (expanded_args) == TREE_VEC)
10518         /* So that we'll spin through the parameters, one by one.  */
10519         i = TREE_VEC_LENGTH (expanded_args);
10520       else
10521         {
10522           /* We only partially substituted into the parameter
10523              pack. Our type is TYPE_PACK_EXPANSION.  */
10524           type = expanded_args;
10525           expanded_args = NULL_TREE;
10526         }
10527     }
10528
10529   while (i > 0) {
10530     --i;
10531     
10532     if (expanded_args)
10533       type = TREE_VEC_ELT (expanded_args, i);
10534     else if (!type)
10535       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
10536
10537     if (type == error_mark_node)
10538       return error_mark_node;
10539     if (VOID_TYPE_P (type))
10540       {
10541         if (complain & tf_error)
10542           {
10543             error ("invalid parameter type %qT", type);
10544             if (in_decl)
10545               error ("in declaration %q+D", in_decl);
10546           }
10547         return error_mark_node;
10548     }
10549     
10550     /* Do array-to-pointer, function-to-pointer conversion, and ignore
10551        top-level qualifiers as required.  */
10552     type = cv_unqualified (type_decays_to (type));
10553
10554     /* We do not substitute into default arguments here.  The standard
10555        mandates that they be instantiated only when needed, which is
10556        done in build_over_call.  */
10557     default_arg = TREE_PURPOSE (arg_types);
10558
10559     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
10560       {
10561         /* We've instantiated a template before its default arguments
10562            have been parsed.  This can happen for a nested template
10563            class, and is not an error unless we require the default
10564            argument in a call of this function.  */
10565         remaining_arg_types = 
10566           tree_cons (default_arg, type, remaining_arg_types);
10567         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
10568                        remaining_arg_types);
10569       }
10570     else
10571       remaining_arg_types = 
10572         hash_tree_cons (default_arg, type, remaining_arg_types);
10573   }
10574         
10575   return remaining_arg_types;
10576 }
10577
10578 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
10579    *not* handle the exception-specification for FNTYPE, because the
10580    initial substitution of explicitly provided template parameters
10581    during argument deduction forbids substitution into the
10582    exception-specification:
10583
10584      [temp.deduct]
10585
10586      All references in the function type of the function template to  the
10587      corresponding template parameters are replaced by the specified tem-
10588      plate argument values.  If a substitution in a template parameter or
10589      in  the function type of the function template results in an invalid
10590      type, type deduction fails.  [Note: The equivalent  substitution  in
10591      exception specifications is done only when the function is instanti-
10592      ated, at which point a program is  ill-formed  if  the  substitution
10593      results in an invalid type.]  */
10594
10595 static tree
10596 tsubst_function_type (tree t,
10597                       tree args,
10598                       tsubst_flags_t complain,
10599                       tree in_decl)
10600 {
10601   tree return_type;
10602   tree arg_types;
10603   tree fntype;
10604
10605   /* The TYPE_CONTEXT is not used for function/method types.  */
10606   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
10607
10608   /* Substitute the return type.  */
10609   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10610   if (return_type == error_mark_node)
10611     return error_mark_node;
10612   /* The standard does not presently indicate that creation of a
10613      function type with an invalid return type is a deduction failure.
10614      However, that is clearly analogous to creating an array of "void"
10615      or a reference to a reference.  This is core issue #486.  */
10616   if (TREE_CODE (return_type) == ARRAY_TYPE
10617       || TREE_CODE (return_type) == FUNCTION_TYPE)
10618     {
10619       if (complain & tf_error)
10620         {
10621           if (TREE_CODE (return_type) == ARRAY_TYPE)
10622             error ("function returning an array");
10623           else
10624             error ("function returning a function");
10625         }
10626       return error_mark_node;
10627     }
10628
10629   /* Substitute the argument types.  */
10630   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
10631                                 complain, in_decl);
10632   if (arg_types == error_mark_node)
10633     return error_mark_node;
10634
10635   /* Construct a new type node and return it.  */
10636   if (TREE_CODE (t) == FUNCTION_TYPE)
10637     {
10638       fntype = build_function_type (return_type, arg_types);
10639       fntype = apply_memfn_quals (fntype, type_memfn_quals (t));
10640     }
10641   else
10642     {
10643       tree r = TREE_TYPE (TREE_VALUE (arg_types));
10644       if (! MAYBE_CLASS_TYPE_P (r))
10645         {
10646           /* [temp.deduct]
10647
10648              Type deduction may fail for any of the following
10649              reasons:
10650
10651              -- Attempting to create "pointer to member of T" when T
10652              is not a class type.  */
10653           if (complain & tf_error)
10654             error ("creating pointer to member function of non-class type %qT",
10655                       r);
10656           return error_mark_node;
10657         }
10658
10659       fntype = build_method_type_directly (r, return_type,
10660                                            TREE_CHAIN (arg_types));
10661     }
10662   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
10663
10664   return fntype;
10665 }
10666
10667 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
10668    ARGS into that specification, and return the substituted
10669    specification.  If there is no specification, return NULL_TREE.  */
10670
10671 static tree
10672 tsubst_exception_specification (tree fntype,
10673                                 tree args,
10674                                 tsubst_flags_t complain,
10675                                 tree in_decl,
10676                                 bool defer_ok)
10677 {
10678   tree specs;
10679   tree new_specs;
10680
10681   specs = TYPE_RAISES_EXCEPTIONS (fntype);
10682   new_specs = NULL_TREE;
10683   if (specs && TREE_PURPOSE (specs))
10684     {
10685       /* A noexcept-specifier.  */
10686       tree expr = TREE_PURPOSE (specs);
10687       if (expr == boolean_true_node || expr == boolean_false_node)
10688         new_specs = expr;
10689       else if (defer_ok)
10690         {
10691           /* Defer instantiation of noexcept-specifiers to avoid
10692              excessive instantiations (c++/49107).  */
10693           new_specs = make_node (DEFERRED_NOEXCEPT);
10694           if (DEFERRED_NOEXCEPT_SPEC_P (specs))
10695             {
10696               /* We already partially instantiated this member template,
10697                  so combine the new args with the old.  */
10698               DEFERRED_NOEXCEPT_PATTERN (new_specs)
10699                 = DEFERRED_NOEXCEPT_PATTERN (expr);
10700               DEFERRED_NOEXCEPT_ARGS (new_specs)
10701                 = add_to_template_args (DEFERRED_NOEXCEPT_ARGS (expr), args);
10702             }
10703           else
10704             {
10705               DEFERRED_NOEXCEPT_PATTERN (new_specs) = expr;
10706               DEFERRED_NOEXCEPT_ARGS (new_specs) = args;
10707             }
10708         }
10709       else
10710         new_specs = tsubst_copy_and_build
10711           (expr, args, complain, in_decl, /*function_p=*/false,
10712            /*integral_constant_expression_p=*/true);
10713       new_specs = build_noexcept_spec (new_specs, complain);
10714     }
10715   else if (specs)
10716     {
10717       if (! TREE_VALUE (specs))
10718         new_specs = specs;
10719       else
10720         while (specs)
10721           {
10722             tree spec;
10723             int i, len = 1;
10724             tree expanded_specs = NULL_TREE;
10725
10726             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
10727               {
10728                 /* Expand the pack expansion type.  */
10729                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
10730                                                        args, complain,
10731                                                        in_decl);
10732
10733                 if (expanded_specs == error_mark_node)
10734                   return error_mark_node;
10735                 else if (TREE_CODE (expanded_specs) == TREE_VEC)
10736                   len = TREE_VEC_LENGTH (expanded_specs);
10737                 else
10738                   {
10739                     /* We're substituting into a member template, so
10740                        we got a TYPE_PACK_EXPANSION back.  Add that
10741                        expansion and move on.  */
10742                     gcc_assert (TREE_CODE (expanded_specs) 
10743                                 == TYPE_PACK_EXPANSION);
10744                     new_specs = add_exception_specifier (new_specs,
10745                                                          expanded_specs,
10746                                                          complain);
10747                     specs = TREE_CHAIN (specs);
10748                     continue;
10749                   }
10750               }
10751
10752             for (i = 0; i < len; ++i)
10753               {
10754                 if (expanded_specs)
10755                   spec = TREE_VEC_ELT (expanded_specs, i);
10756                 else
10757                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
10758                 if (spec == error_mark_node)
10759                   return spec;
10760                 new_specs = add_exception_specifier (new_specs, spec, 
10761                                                      complain);
10762               }
10763
10764             specs = TREE_CHAIN (specs);
10765           }
10766     }
10767   return new_specs;
10768 }
10769
10770 /* Take the tree structure T and replace template parameters used
10771    therein with the argument vector ARGS.  IN_DECL is an associated
10772    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
10773    Issue error and warning messages under control of COMPLAIN.  Note
10774    that we must be relatively non-tolerant of extensions here, in
10775    order to preserve conformance; if we allow substitutions that
10776    should not be allowed, we may allow argument deductions that should
10777    not succeed, and therefore report ambiguous overload situations
10778    where there are none.  In theory, we could allow the substitution,
10779    but indicate that it should have failed, and allow our caller to
10780    make sure that the right thing happens, but we don't try to do this
10781    yet.
10782
10783    This function is used for dealing with types, decls and the like;
10784    for expressions, use tsubst_expr or tsubst_copy.  */
10785
10786 tree
10787 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
10788 {
10789   enum tree_code code;
10790   tree type, r;
10791
10792   if (t == NULL_TREE || t == error_mark_node
10793       || t == integer_type_node
10794       || t == void_type_node
10795       || t == char_type_node
10796       || t == unknown_type_node
10797       || TREE_CODE (t) == NAMESPACE_DECL
10798       || TREE_CODE (t) == TRANSLATION_UNIT_DECL)
10799     return t;
10800
10801   if (DECL_P (t))
10802     return tsubst_decl (t, args, complain);
10803
10804   if (args == NULL_TREE)
10805     return t;
10806
10807   code = TREE_CODE (t);
10808
10809   if (code == IDENTIFIER_NODE)
10810     type = IDENTIFIER_TYPE_VALUE (t);
10811   else
10812     type = TREE_TYPE (t);
10813
10814   gcc_assert (type != unknown_type_node);
10815
10816   /* Reuse typedefs.  We need to do this to handle dependent attributes,
10817      such as attribute aligned.  */
10818   if (TYPE_P (t)
10819       && typedef_variant_p (t))
10820     {
10821       tree decl = TYPE_NAME (t);
10822       
10823       if (DECL_CLASS_SCOPE_P (decl)
10824           && CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
10825           && uses_template_parms (DECL_CONTEXT (decl)))
10826         {
10827           tree tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
10828           tree gen_args = tsubst (DECL_TI_ARGS (decl), args, complain, in_decl);
10829           r = retrieve_specialization (tmpl, gen_args, 0);
10830         }
10831       else if (DECL_FUNCTION_SCOPE_P (decl)
10832                && DECL_TEMPLATE_INFO (DECL_CONTEXT (decl))
10833                && uses_template_parms (DECL_TI_ARGS (DECL_CONTEXT (decl))))
10834         r = retrieve_local_specialization (decl);
10835       else
10836         /* The typedef is from a non-template context.  */
10837         return t;
10838
10839       if (r)
10840         {
10841           r = TREE_TYPE (r);
10842           r = cp_build_qualified_type_real
10843             (r, cp_type_quals (t) | cp_type_quals (r),
10844              complain | tf_ignore_bad_quals);
10845           return r;
10846         }
10847       /* Else we must be instantiating the typedef, so fall through.  */
10848     }
10849
10850   if (type
10851       && code != TYPENAME_TYPE
10852       && code != TEMPLATE_TYPE_PARM
10853       && code != IDENTIFIER_NODE
10854       && code != FUNCTION_TYPE
10855       && code != METHOD_TYPE)
10856     type = tsubst (type, args, complain, in_decl);
10857   if (type == error_mark_node)
10858     return error_mark_node;
10859
10860   switch (code)
10861     {
10862     case RECORD_TYPE:
10863     case UNION_TYPE:
10864     case ENUMERAL_TYPE:
10865       return tsubst_aggr_type (t, args, complain, in_decl,
10866                                /*entering_scope=*/0);
10867
10868     case ERROR_MARK:
10869     case IDENTIFIER_NODE:
10870     case VOID_TYPE:
10871     case REAL_TYPE:
10872     case COMPLEX_TYPE:
10873     case VECTOR_TYPE:
10874     case BOOLEAN_TYPE:
10875     case NULLPTR_TYPE:
10876     case LANG_TYPE:
10877       return t;
10878
10879     case INTEGER_TYPE:
10880       if (t == integer_type_node)
10881         return t;
10882
10883       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
10884           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
10885         return t;
10886
10887       {
10888         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
10889
10890         max = tsubst_expr (omax, args, complain, in_decl,
10891                            /*integral_constant_expression_p=*/false);
10892
10893         /* Fix up type of the magic NOP_EXPR with TREE_SIDE_EFFECTS if
10894            needed.  */
10895         if (TREE_CODE (max) == NOP_EXPR
10896             && TREE_SIDE_EFFECTS (omax)
10897             && !TREE_TYPE (max))
10898           TREE_TYPE (max) = TREE_TYPE (TREE_OPERAND (max, 0));
10899
10900         /* If we're in a partial instantiation, preserve the magic NOP_EXPR
10901            with TREE_SIDE_EFFECTS that indicates this is not an integral
10902            constant expression.  */
10903         if (processing_template_decl
10904             && TREE_SIDE_EFFECTS (omax) && TREE_CODE (omax) == NOP_EXPR)
10905           {
10906             gcc_assert (TREE_CODE (max) == NOP_EXPR);
10907             TREE_SIDE_EFFECTS (max) = 1;
10908           }
10909
10910         return compute_array_index_type (NULL_TREE, max, complain);
10911       }
10912
10913     case TEMPLATE_TYPE_PARM:
10914     case TEMPLATE_TEMPLATE_PARM:
10915     case BOUND_TEMPLATE_TEMPLATE_PARM:
10916     case TEMPLATE_PARM_INDEX:
10917       {
10918         int idx;
10919         int level;
10920         int levels;
10921         tree arg = NULL_TREE;
10922
10923         r = NULL_TREE;
10924
10925         gcc_assert (TREE_VEC_LENGTH (args) > 0);
10926         template_parm_level_and_index (t, &level, &idx); 
10927
10928         levels = TMPL_ARGS_DEPTH (args);
10929         if (level <= levels)
10930           {
10931             arg = TMPL_ARG (args, level, idx);
10932
10933             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
10934               /* See through ARGUMENT_PACK_SELECT arguments. */
10935               arg = ARGUMENT_PACK_SELECT_ARG (arg);
10936           }
10937
10938         if (arg == error_mark_node)
10939           return error_mark_node;
10940         else if (arg != NULL_TREE)
10941           {
10942             if (ARGUMENT_PACK_P (arg))
10943               /* If ARG is an argument pack, we don't actually want to
10944                  perform a substitution here, because substitutions
10945                  for argument packs are only done
10946                  element-by-element. We can get to this point when
10947                  substituting the type of a non-type template
10948                  parameter pack, when that type actually contains
10949                  template parameter packs from an outer template, e.g.,
10950
10951                  template<typename... Types> struct A {
10952                    template<Types... Values> struct B { };
10953                  };  */
10954               return t;
10955
10956             if (code == TEMPLATE_TYPE_PARM)
10957               {
10958                 int quals;
10959                 gcc_assert (TYPE_P (arg));
10960
10961                 quals = cp_type_quals (arg) | cp_type_quals (t);
10962                   
10963                 return cp_build_qualified_type_real
10964                   (arg, quals, complain | tf_ignore_bad_quals);
10965               }
10966             else if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
10967               {
10968                 /* We are processing a type constructed from a
10969                    template template parameter.  */
10970                 tree argvec = tsubst (TYPE_TI_ARGS (t),
10971                                       args, complain, in_decl);
10972                 if (argvec == error_mark_node)
10973                   return error_mark_node;
10974
10975                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
10976                    are resolving nested-types in the signature of a
10977                    member function templates.  Otherwise ARG is a
10978                    TEMPLATE_DECL and is the real template to be
10979                    instantiated.  */
10980                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
10981                   arg = TYPE_NAME (arg);
10982
10983                 r = lookup_template_class (arg,
10984                                            argvec, in_decl,
10985                                            DECL_CONTEXT (arg),
10986                                             /*entering_scope=*/0,
10987                                            complain);
10988                 return cp_build_qualified_type_real
10989                   (r, cp_type_quals (t), complain);
10990               }
10991             else
10992               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
10993               return convert_from_reference (unshare_expr (arg));
10994           }
10995
10996         if (level == 1)
10997           /* This can happen during the attempted tsubst'ing in
10998              unify.  This means that we don't yet have any information
10999              about the template parameter in question.  */
11000           return t;
11001
11002         /* If we get here, we must have been looking at a parm for a
11003            more deeply nested template.  Make a new version of this
11004            template parameter, but with a lower level.  */
11005         switch (code)
11006           {
11007           case TEMPLATE_TYPE_PARM:
11008           case TEMPLATE_TEMPLATE_PARM:
11009           case BOUND_TEMPLATE_TEMPLATE_PARM:
11010             if (cp_type_quals (t))
11011               {
11012                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
11013                 r = cp_build_qualified_type_real
11014                   (r, cp_type_quals (t),
11015                    complain | (code == TEMPLATE_TYPE_PARM
11016                                ? tf_ignore_bad_quals : 0));
11017               }
11018             else
11019               {
11020                 r = copy_type (t);
11021                 TEMPLATE_TYPE_PARM_INDEX (r)
11022                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
11023                                                 r, levels, args, complain);
11024                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
11025                 TYPE_MAIN_VARIANT (r) = r;
11026                 TYPE_POINTER_TO (r) = NULL_TREE;
11027                 TYPE_REFERENCE_TO (r) = NULL_TREE;
11028
11029                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
11030                   /* We have reduced the level of the template
11031                      template parameter, but not the levels of its
11032                      template parameters, so canonical_type_parameter
11033                      will not be able to find the canonical template
11034                      template parameter for this level. Thus, we
11035                      require structural equality checking to compare
11036                      TEMPLATE_TEMPLATE_PARMs. */
11037                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11038                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
11039                   SET_TYPE_STRUCTURAL_EQUALITY (r);
11040                 else
11041                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
11042
11043                 if (code == BOUND_TEMPLATE_TEMPLATE_PARM)
11044                   {
11045                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
11046                                           complain, in_decl);
11047                     if (argvec == error_mark_node)
11048                       return error_mark_node;
11049
11050                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
11051                       = build_template_info (TYPE_TI_TEMPLATE (t), argvec);
11052                   }
11053               }
11054             break;
11055
11056           case TEMPLATE_PARM_INDEX:
11057             r = reduce_template_parm_level (t, type, levels, args, complain);
11058             break;
11059
11060           default:
11061             gcc_unreachable ();
11062           }
11063
11064         return r;
11065       }
11066
11067     case TREE_LIST:
11068       {
11069         tree purpose, value, chain;
11070
11071         if (t == void_list_node)
11072           return t;
11073
11074         purpose = TREE_PURPOSE (t);
11075         if (purpose)
11076           {
11077             purpose = tsubst (purpose, args, complain, in_decl);
11078             if (purpose == error_mark_node)
11079               return error_mark_node;
11080           }
11081         value = TREE_VALUE (t);
11082         if (value)
11083           {
11084             value = tsubst (value, args, complain, in_decl);
11085             if (value == error_mark_node)
11086               return error_mark_node;
11087           }
11088         chain = TREE_CHAIN (t);
11089         if (chain && chain != void_type_node)
11090           {
11091             chain = tsubst (chain, args, complain, in_decl);
11092             if (chain == error_mark_node)
11093               return error_mark_node;
11094           }
11095         if (purpose == TREE_PURPOSE (t)
11096             && value == TREE_VALUE (t)
11097             && chain == TREE_CHAIN (t))
11098           return t;
11099         return hash_tree_cons (purpose, value, chain);
11100       }
11101
11102     case TREE_BINFO:
11103       /* We should never be tsubsting a binfo.  */
11104       gcc_unreachable ();
11105
11106     case TREE_VEC:
11107       /* A vector of template arguments.  */
11108       gcc_assert (!type);
11109       return tsubst_template_args (t, args, complain, in_decl);
11110
11111     case POINTER_TYPE:
11112     case REFERENCE_TYPE:
11113       {
11114         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
11115           return t;
11116
11117         /* [temp.deduct]
11118
11119            Type deduction may fail for any of the following
11120            reasons:
11121
11122            -- Attempting to create a pointer to reference type.
11123            -- Attempting to create a reference to a reference type or
11124               a reference to void.
11125
11126           Core issue 106 says that creating a reference to a reference
11127           during instantiation is no longer a cause for failure. We
11128           only enforce this check in strict C++98 mode.  */
11129         if ((TREE_CODE (type) == REFERENCE_TYPE
11130              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
11131             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
11132           {
11133             static location_t last_loc;
11134
11135             /* We keep track of the last time we issued this error
11136                message to avoid spewing a ton of messages during a
11137                single bad template instantiation.  */
11138             if (complain & tf_error
11139                 && last_loc != input_location)
11140               {
11141                 if (TREE_CODE (type) == VOID_TYPE)
11142                   error ("forming reference to void");
11143                else if (code == POINTER_TYPE)
11144                  error ("forming pointer to reference type %qT", type);
11145                else
11146                   error ("forming reference to reference type %qT", type);
11147                 last_loc = input_location;
11148               }
11149
11150             return error_mark_node;
11151           }
11152         else if (code == POINTER_TYPE)
11153           {
11154             r = build_pointer_type (type);
11155             if (TREE_CODE (type) == METHOD_TYPE)
11156               r = build_ptrmemfunc_type (r);
11157           }
11158         else if (TREE_CODE (type) == REFERENCE_TYPE)
11159           /* In C++0x, during template argument substitution, when there is an
11160              attempt to create a reference to a reference type, reference
11161              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
11162
11163              "If a template-argument for a template-parameter T names a type
11164              that is a reference to a type A, an attempt to create the type
11165              'lvalue reference to cv T' creates the type 'lvalue reference to
11166              A,' while an attempt to create the type type rvalue reference to
11167              cv T' creates the type T"
11168           */
11169           r = cp_build_reference_type
11170               (TREE_TYPE (type),
11171                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
11172         else
11173           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
11174         r = cp_build_qualified_type_real (r, cp_type_quals (t), complain);
11175
11176         if (r != error_mark_node)
11177           /* Will this ever be needed for TYPE_..._TO values?  */
11178           layout_type (r);
11179
11180         return r;
11181       }
11182     case OFFSET_TYPE:
11183       {
11184         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
11185         if (r == error_mark_node || !MAYBE_CLASS_TYPE_P (r))
11186           {
11187             /* [temp.deduct]
11188
11189                Type deduction may fail for any of the following
11190                reasons:
11191
11192                -- Attempting to create "pointer to member of T" when T
11193                   is not a class type.  */
11194             if (complain & tf_error)
11195               error ("creating pointer to member of non-class type %qT", r);
11196             return error_mark_node;
11197           }
11198         if (TREE_CODE (type) == REFERENCE_TYPE)
11199           {
11200             if (complain & tf_error)
11201               error ("creating pointer to member reference type %qT", type);
11202             return error_mark_node;
11203           }
11204         if (TREE_CODE (type) == VOID_TYPE)
11205           {
11206             if (complain & tf_error)
11207               error ("creating pointer to member of type void");
11208             return error_mark_node;
11209           }
11210         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11211         if (TREE_CODE (type) == FUNCTION_TYPE)
11212           {
11213             /* The type of the implicit object parameter gets its
11214                cv-qualifiers from the FUNCTION_TYPE. */
11215             tree memptr;
11216             tree method_type = build_memfn_type (type, r, type_memfn_quals (type));
11217             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
11218             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
11219                                                  complain);
11220           }
11221         else
11222           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
11223                                                cp_type_quals (t),
11224                                                complain);
11225       }
11226     case FUNCTION_TYPE:
11227     case METHOD_TYPE:
11228       {
11229         tree fntype;
11230         tree specs;
11231         fntype = tsubst_function_type (t, args, complain, in_decl);
11232         if (fntype == error_mark_node)
11233           return error_mark_node;
11234
11235         /* Substitute the exception specification.  */
11236         specs = tsubst_exception_specification (t, args, complain,
11237                                                 in_decl, /*defer_ok*/true);
11238         if (specs == error_mark_node)
11239           return error_mark_node;
11240         if (specs)
11241           fntype = build_exception_variant (fntype, specs);
11242         return fntype;
11243       }
11244     case ARRAY_TYPE:
11245       {
11246         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
11247         if (domain == error_mark_node)
11248           return error_mark_node;
11249
11250         /* As an optimization, we avoid regenerating the array type if
11251            it will obviously be the same as T.  */
11252         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
11253           return t;
11254
11255         /* These checks should match the ones in grokdeclarator.
11256
11257            [temp.deduct]
11258
11259            The deduction may fail for any of the following reasons:
11260
11261            -- Attempting to create an array with an element type that
11262               is void, a function type, or a reference type, or [DR337]
11263               an abstract class type.  */
11264         if (TREE_CODE (type) == VOID_TYPE
11265             || TREE_CODE (type) == FUNCTION_TYPE
11266             || TREE_CODE (type) == REFERENCE_TYPE)
11267           {
11268             if (complain & tf_error)
11269               error ("creating array of %qT", type);
11270             return error_mark_node;
11271           }
11272         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
11273           {
11274             if (complain & tf_error)
11275               error ("creating array of %qT, which is an abstract class type",
11276                      type);
11277             return error_mark_node;
11278           }
11279
11280         r = build_cplus_array_type (type, domain);
11281
11282         if (TYPE_USER_ALIGN (t))
11283           {
11284             TYPE_ALIGN (r) = TYPE_ALIGN (t);
11285             TYPE_USER_ALIGN (r) = 1;
11286           }
11287
11288         return r;
11289       }
11290
11291     case TYPENAME_TYPE:
11292       {
11293         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11294                                      in_decl, /*entering_scope=*/1);
11295         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
11296                               complain, in_decl);
11297
11298         if (ctx == error_mark_node || f == error_mark_node)
11299           return error_mark_node;
11300
11301         if (!MAYBE_CLASS_TYPE_P (ctx))
11302           {
11303             if (complain & tf_error)
11304               error ("%qT is not a class, struct, or union type", ctx);
11305             return error_mark_node;
11306           }
11307         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
11308           {
11309             /* Normally, make_typename_type does not require that the CTX
11310                have complete type in order to allow things like:
11311
11312                  template <class T> struct S { typename S<T>::X Y; };
11313
11314                But, such constructs have already been resolved by this
11315                point, so here CTX really should have complete type, unless
11316                it's a partial instantiation.  */
11317             ctx = complete_type (ctx);
11318             if (!COMPLETE_TYPE_P (ctx))
11319               {
11320                 if (complain & tf_error)
11321                   cxx_incomplete_type_error (NULL_TREE, ctx);
11322                 return error_mark_node;
11323               }
11324           }
11325
11326         f = make_typename_type (ctx, f, typename_type,
11327                                 (complain & tf_error) | tf_keep_type_decl);
11328         if (f == error_mark_node)
11329           return f;
11330         if (TREE_CODE (f) == TYPE_DECL)
11331           {
11332             complain |= tf_ignore_bad_quals;
11333             f = TREE_TYPE (f);
11334           }
11335
11336         if (TREE_CODE (f) != TYPENAME_TYPE)
11337           {
11338             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
11339               {
11340                 if (complain & tf_error)
11341                   error ("%qT resolves to %qT, which is not an enumeration type",
11342                          t, f);
11343                 else
11344                   return error_mark_node;
11345               }
11346             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
11347               {
11348                 if (complain & tf_error)
11349                   error ("%qT resolves to %qT, which is is not a class type",
11350                          t, f);
11351                 else
11352                   return error_mark_node;
11353               }
11354           }
11355
11356         return cp_build_qualified_type_real
11357           (f, cp_type_quals (f) | cp_type_quals (t), complain);
11358       }
11359
11360     case UNBOUND_CLASS_TEMPLATE:
11361       {
11362         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
11363                                      in_decl, /*entering_scope=*/1);
11364         tree name = TYPE_IDENTIFIER (t);
11365         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
11366
11367         if (ctx == error_mark_node || name == error_mark_node)
11368           return error_mark_node;
11369
11370         if (parm_list)
11371           parm_list = tsubst_template_parms (parm_list, args, complain);
11372         return make_unbound_class_template (ctx, name, parm_list, complain);
11373       }
11374
11375     case TYPEOF_TYPE:
11376       {
11377         tree type;
11378
11379         ++cp_unevaluated_operand;
11380         ++c_inhibit_evaluation_warnings;
11381
11382         type = tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
11383                             complain, in_decl,
11384                             /*integral_constant_expression_p=*/false);
11385
11386         --cp_unevaluated_operand;
11387         --c_inhibit_evaluation_warnings;
11388
11389         type = finish_typeof (type);
11390         return cp_build_qualified_type_real (type,
11391                                              cp_type_quals (t)
11392                                              | cp_type_quals (type),
11393                                              complain);
11394       }
11395
11396     case DECLTYPE_TYPE:
11397       {
11398         tree type;
11399
11400         ++cp_unevaluated_operand;
11401         ++c_inhibit_evaluation_warnings;
11402
11403         type = tsubst_expr (DECLTYPE_TYPE_EXPR (t), args,
11404                             complain, in_decl,
11405                             /*integral_constant_expression_p=*/false);
11406
11407         --cp_unevaluated_operand;
11408         --c_inhibit_evaluation_warnings;
11409
11410         if (DECLTYPE_FOR_LAMBDA_CAPTURE (t))
11411           type = lambda_capture_field_type (type);
11412         else if (DECLTYPE_FOR_LAMBDA_RETURN (t))
11413           type = lambda_return_type (type);
11414         else if (DECLTYPE_FOR_LAMBDA_PROXY (t))
11415           type = lambda_proxy_type (type);
11416         else
11417           type = finish_decltype_type
11418             (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
11419         return cp_build_qualified_type_real (type,
11420                                              cp_type_quals (t)
11421                                              | cp_type_quals (type),
11422                                              complain);
11423       }
11424
11425     case UNDERLYING_TYPE:
11426       {
11427         tree type = tsubst (UNDERLYING_TYPE_TYPE (t), args,
11428                             complain, in_decl);
11429         return finish_underlying_type (type);
11430       }
11431
11432     case TYPE_ARGUMENT_PACK:
11433     case NONTYPE_ARGUMENT_PACK:
11434       {
11435         tree r = TYPE_P (t) ? cxx_make_type (code) : make_node (code);
11436         tree packed_out = 
11437           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
11438                                 args,
11439                                 complain,
11440                                 in_decl);
11441         SET_ARGUMENT_PACK_ARGS (r, packed_out);
11442
11443         /* For template nontype argument packs, also substitute into
11444            the type.  */
11445         if (code == NONTYPE_ARGUMENT_PACK)
11446           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
11447
11448         return r;
11449       }
11450       break;
11451
11452     case INTEGER_CST:
11453     case REAL_CST:
11454     case STRING_CST:
11455     case PLUS_EXPR:
11456     case MINUS_EXPR:
11457     case NEGATE_EXPR:
11458     case NOP_EXPR:
11459     case INDIRECT_REF:
11460     case ADDR_EXPR:
11461     case CALL_EXPR:
11462     case ARRAY_REF:
11463     case SCOPE_REF:
11464       /* We should use one of the expression tsubsts for these codes.  */
11465       gcc_unreachable ();
11466
11467     default:
11468       sorry ("use of %qs in template", tree_code_name [(int) code]);
11469       return error_mark_node;
11470     }
11471 }
11472
11473 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
11474    type of the expression on the left-hand side of the "." or "->"
11475    operator.  */
11476
11477 static tree
11478 tsubst_baselink (tree baselink, tree object_type,
11479                  tree args, tsubst_flags_t complain, tree in_decl)
11480 {
11481     tree name;
11482     tree qualifying_scope;
11483     tree fns;
11484     tree optype;
11485     tree template_args = 0;
11486     bool template_id_p = false;
11487
11488     /* A baselink indicates a function from a base class.  Both the
11489        BASELINK_ACCESS_BINFO and the base class referenced may
11490        indicate bases of the template class, rather than the
11491        instantiated class.  In addition, lookups that were not
11492        ambiguous before may be ambiguous now.  Therefore, we perform
11493        the lookup again.  */
11494     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
11495     qualifying_scope = tsubst (qualifying_scope, args,
11496                                complain, in_decl);
11497     fns = BASELINK_FUNCTIONS (baselink);
11498     optype = tsubst (BASELINK_OPTYPE (baselink), args, complain, in_decl);
11499     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
11500       {
11501         template_id_p = true;
11502         template_args = TREE_OPERAND (fns, 1);
11503         fns = TREE_OPERAND (fns, 0);
11504         if (template_args)
11505           template_args = tsubst_template_args (template_args, args,
11506                                                 complain, in_decl);
11507       }
11508     name = DECL_NAME (get_first_fn (fns));
11509     if (IDENTIFIER_TYPENAME_P (name))
11510       name = mangle_conv_op_name_for_type (optype);
11511     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
11512     if (!baselink)
11513       return error_mark_node;
11514
11515     /* If lookup found a single function, mark it as used at this
11516        point.  (If it lookup found multiple functions the one selected
11517        later by overload resolution will be marked as used at that
11518        point.)  */
11519     if (BASELINK_P (baselink))
11520       fns = BASELINK_FUNCTIONS (baselink);
11521     if (!template_id_p && !really_overloaded_fn (fns))
11522       mark_used (OVL_CURRENT (fns));
11523
11524     /* Add back the template arguments, if present.  */
11525     if (BASELINK_P (baselink) && template_id_p)
11526       BASELINK_FUNCTIONS (baselink)
11527         = build_nt (TEMPLATE_ID_EXPR,
11528                     BASELINK_FUNCTIONS (baselink),
11529                     template_args);
11530     /* Update the conversion operator type.  */
11531     BASELINK_OPTYPE (baselink) = optype;
11532
11533     if (!object_type)
11534       object_type = current_class_type;
11535     return adjust_result_of_qualified_name_lookup (baselink,
11536                                                    qualifying_scope,
11537                                                    object_type);
11538 }
11539
11540 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
11541    true if the qualified-id will be a postfix-expression in-and-of
11542    itself; false if more of the postfix-expression follows the
11543    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
11544    of "&".  */
11545
11546 static tree
11547 tsubst_qualified_id (tree qualified_id, tree args,
11548                      tsubst_flags_t complain, tree in_decl,
11549                      bool done, bool address_p)
11550 {
11551   tree expr;
11552   tree scope;
11553   tree name;
11554   bool is_template;
11555   tree template_args;
11556
11557   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
11558
11559   /* Figure out what name to look up.  */
11560   name = TREE_OPERAND (qualified_id, 1);
11561   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
11562     {
11563       is_template = true;
11564       template_args = TREE_OPERAND (name, 1);
11565       if (template_args)
11566         template_args = tsubst_template_args (template_args, args,
11567                                               complain, in_decl);
11568       name = TREE_OPERAND (name, 0);
11569     }
11570   else
11571     {
11572       is_template = false;
11573       template_args = NULL_TREE;
11574     }
11575
11576   /* Substitute into the qualifying scope.  When there are no ARGS, we
11577      are just trying to simplify a non-dependent expression.  In that
11578      case the qualifying scope may be dependent, and, in any case,
11579      substituting will not help.  */
11580   scope = TREE_OPERAND (qualified_id, 0);
11581   if (args)
11582     {
11583       scope = tsubst (scope, args, complain, in_decl);
11584       expr = tsubst_copy (name, args, complain, in_decl);
11585     }
11586   else
11587     expr = name;
11588
11589   if (dependent_scope_p (scope))
11590     {
11591       if (is_template)
11592         expr = build_min_nt (TEMPLATE_ID_EXPR, expr, template_args);
11593       return build_qualified_name (NULL_TREE, scope, expr,
11594                                    QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
11595     }
11596
11597   if (!BASELINK_P (name) && !DECL_P (expr))
11598     {
11599       if (TREE_CODE (expr) == BIT_NOT_EXPR)
11600         {
11601           /* A BIT_NOT_EXPR is used to represent a destructor.  */
11602           if (!check_dtor_name (scope, TREE_OPERAND (expr, 0)))
11603             {
11604               error ("qualifying type %qT does not match destructor name ~%qT",
11605                      scope, TREE_OPERAND (expr, 0));
11606               expr = error_mark_node;
11607             }
11608           else
11609             expr = lookup_qualified_name (scope, complete_dtor_identifier,
11610                                           /*is_type_p=*/0, false);
11611         }
11612       else
11613         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
11614       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
11615                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
11616         {
11617           if (complain & tf_error)
11618             {
11619               error ("dependent-name %qE is parsed as a non-type, but "
11620                      "instantiation yields a type", qualified_id);
11621               inform (input_location, "say %<typename %E%> if a type is meant", qualified_id);
11622             }
11623           return error_mark_node;
11624         }
11625     }
11626
11627   if (DECL_P (expr))
11628     {
11629       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
11630                                            scope);
11631       /* Remember that there was a reference to this entity.  */
11632       mark_used (expr);
11633     }
11634
11635   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
11636     {
11637       if (complain & tf_error)
11638         qualified_name_lookup_error (scope,
11639                                      TREE_OPERAND (qualified_id, 1),
11640                                      expr, input_location);
11641       return error_mark_node;
11642     }
11643
11644   if (is_template)
11645     expr = lookup_template_function (expr, template_args);
11646
11647   if (expr == error_mark_node && complain & tf_error)
11648     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
11649                                  expr, input_location);
11650   else if (TYPE_P (scope))
11651     {
11652       expr = (adjust_result_of_qualified_name_lookup
11653               (expr, scope, current_class_type));
11654       expr = (finish_qualified_id_expr
11655               (scope, expr, done, address_p && PTRMEM_OK_P (qualified_id),
11656                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
11657                /*template_arg_p=*/false));
11658     }
11659
11660   /* Expressions do not generally have reference type.  */
11661   if (TREE_CODE (expr) != SCOPE_REF
11662       /* However, if we're about to form a pointer-to-member, we just
11663          want the referenced member referenced.  */
11664       && TREE_CODE (expr) != OFFSET_REF)
11665     expr = convert_from_reference (expr);
11666
11667   return expr;
11668 }
11669
11670 /* Like tsubst, but deals with expressions.  This function just replaces
11671    template parms; to finish processing the resultant expression, use
11672    tsubst_expr.  */
11673
11674 static tree
11675 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
11676 {
11677   enum tree_code code;
11678   tree r;
11679
11680   if (t == NULL_TREE || t == error_mark_node || args == NULL_TREE)
11681     return t;
11682
11683   code = TREE_CODE (t);
11684
11685   switch (code)
11686     {
11687     case PARM_DECL:
11688       r = retrieve_local_specialization (t);
11689
11690       if (r == NULL)
11691         {
11692           tree c;
11693           /* This can happen for a parameter name used later in a function
11694              declaration (such as in a late-specified return type).  Just
11695              make a dummy decl, since it's only used for its type.  */
11696           gcc_assert (cp_unevaluated_operand != 0);
11697           /* We copy T because want to tsubst the PARM_DECL only,
11698              not the following PARM_DECLs that are chained to T.  */
11699           c = copy_node (t);
11700           r = tsubst_decl (c, args, complain);
11701           /* Give it the template pattern as its context; its true context
11702              hasn't been instantiated yet and this is good enough for
11703              mangling.  */
11704           DECL_CONTEXT (r) = DECL_CONTEXT (t);
11705         }
11706       
11707       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
11708         r = ARGUMENT_PACK_SELECT_ARG (r);
11709       mark_used (r);
11710       return r;
11711
11712     case CONST_DECL:
11713       {
11714         tree enum_type;
11715         tree v;
11716
11717         if (DECL_TEMPLATE_PARM_P (t))
11718           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
11719         /* There is no need to substitute into namespace-scope
11720            enumerators.  */
11721         if (DECL_NAMESPACE_SCOPE_P (t))
11722           return t;
11723         /* If ARGS is NULL, then T is known to be non-dependent.  */
11724         if (args == NULL_TREE)
11725           return integral_constant_value (t);
11726
11727         /* Unfortunately, we cannot just call lookup_name here.
11728            Consider:
11729
11730              template <int I> int f() {
11731              enum E { a = I };
11732              struct S { void g() { E e = a; } };
11733              };
11734
11735            When we instantiate f<7>::S::g(), say, lookup_name is not
11736            clever enough to find f<7>::a.  */
11737         enum_type
11738           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
11739                               /*entering_scope=*/0);
11740
11741         for (v = TYPE_VALUES (enum_type);
11742              v != NULL_TREE;
11743              v = TREE_CHAIN (v))
11744           if (TREE_PURPOSE (v) == DECL_NAME (t))
11745             return TREE_VALUE (v);
11746
11747           /* We didn't find the name.  That should never happen; if
11748              name-lookup found it during preliminary parsing, we
11749              should find it again here during instantiation.  */
11750         gcc_unreachable ();
11751       }
11752       return t;
11753
11754     case FIELD_DECL:
11755       if (DECL_CONTEXT (t))
11756         {
11757           tree ctx;
11758
11759           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
11760                                   /*entering_scope=*/1);
11761           if (ctx != DECL_CONTEXT (t))
11762             {
11763               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
11764               if (!r)
11765                 {
11766                   if (complain & tf_error)
11767                     error ("using invalid field %qD", t);
11768                   return error_mark_node;
11769                 }
11770               return r;
11771             }
11772         }
11773
11774       return t;
11775
11776     case VAR_DECL:
11777     case FUNCTION_DECL:
11778       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
11779           || local_variable_p (t))
11780         t = tsubst (t, args, complain, in_decl);
11781       mark_used (t);
11782       return t;
11783
11784     case OVERLOAD:
11785       /* An OVERLOAD will always be a non-dependent overload set; an
11786          overload set from function scope will just be represented with an
11787          IDENTIFIER_NODE, and from class scope with a BASELINK.  */
11788       gcc_assert (!uses_template_parms (t));
11789       return t;
11790
11791     case BASELINK:
11792       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
11793
11794     case TEMPLATE_DECL:
11795       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
11796         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
11797                        args, complain, in_decl);
11798       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
11799         return tsubst (t, args, complain, in_decl);
11800       else if (DECL_CLASS_SCOPE_P (t)
11801                && uses_template_parms (DECL_CONTEXT (t)))
11802         {
11803           /* Template template argument like the following example need
11804              special treatment:
11805
11806                template <template <class> class TT> struct C {};
11807                template <class T> struct D {
11808                  template <class U> struct E {};
11809                  C<E> c;                                // #1
11810                };
11811                D<int> d;                                // #2
11812
11813              We are processing the template argument `E' in #1 for
11814              the template instantiation #2.  Originally, `E' is a
11815              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
11816              have to substitute this with one having context `D<int>'.  */
11817
11818           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
11819           return lookup_field (context, DECL_NAME(t), 0, false);
11820         }
11821       else
11822         /* Ordinary template template argument.  */
11823         return t;
11824
11825     case CAST_EXPR:
11826     case REINTERPRET_CAST_EXPR:
11827     case CONST_CAST_EXPR:
11828     case STATIC_CAST_EXPR:
11829     case DYNAMIC_CAST_EXPR:
11830     case NOP_EXPR:
11831       return build1
11832         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11833          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11834
11835     case SIZEOF_EXPR:
11836       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
11837         {
11838
11839           tree expanded;
11840           int len = 0;
11841
11842           ++cp_unevaluated_operand;
11843           ++c_inhibit_evaluation_warnings;
11844           /* We only want to compute the number of arguments.  */
11845           expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
11846                                             complain, in_decl);
11847           --cp_unevaluated_operand;
11848           --c_inhibit_evaluation_warnings;
11849
11850           if (TREE_CODE (expanded) == TREE_VEC)
11851             len = TREE_VEC_LENGTH (expanded);
11852
11853           if (expanded == error_mark_node)
11854             return error_mark_node;
11855           else if (PACK_EXPANSION_P (expanded)
11856                    || (TREE_CODE (expanded) == TREE_VEC
11857                        && len > 0
11858                        && PACK_EXPANSION_P (TREE_VEC_ELT (expanded, len-1))))
11859             {
11860               if (TREE_CODE (expanded) == TREE_VEC)
11861                 expanded = TREE_VEC_ELT (expanded, len - 1);
11862
11863               if (TYPE_P (expanded))
11864                 return cxx_sizeof_or_alignof_type (expanded, SIZEOF_EXPR, 
11865                                                    complain & tf_error);
11866               else
11867                 return cxx_sizeof_or_alignof_expr (expanded, SIZEOF_EXPR,
11868                                                    complain & tf_error);
11869             }
11870           else
11871             return build_int_cst (size_type_node, len);
11872         }
11873       /* Fall through */
11874
11875     case INDIRECT_REF:
11876     case NEGATE_EXPR:
11877     case TRUTH_NOT_EXPR:
11878     case BIT_NOT_EXPR:
11879     case ADDR_EXPR:
11880     case UNARY_PLUS_EXPR:      /* Unary + */
11881     case ALIGNOF_EXPR:
11882     case AT_ENCODE_EXPR:
11883     case ARROW_EXPR:
11884     case THROW_EXPR:
11885     case TYPEID_EXPR:
11886     case REALPART_EXPR:
11887     case IMAGPART_EXPR:
11888       return build1
11889         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
11890          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
11891
11892     case COMPONENT_REF:
11893       {
11894         tree object;
11895         tree name;
11896
11897         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
11898         name = TREE_OPERAND (t, 1);
11899         if (TREE_CODE (name) == BIT_NOT_EXPR)
11900           {
11901             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11902                                 complain, in_decl);
11903             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11904           }
11905         else if (TREE_CODE (name) == SCOPE_REF
11906                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
11907           {
11908             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
11909                                      complain, in_decl);
11910             name = TREE_OPERAND (name, 1);
11911             name = tsubst_copy (TREE_OPERAND (name, 0), args,
11912                                 complain, in_decl);
11913             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
11914             name = build_qualified_name (/*type=*/NULL_TREE,
11915                                          base, name,
11916                                          /*template_p=*/false);
11917           }
11918         else if (TREE_CODE (name) == BASELINK)
11919           name = tsubst_baselink (name,
11920                                   non_reference (TREE_TYPE (object)),
11921                                   args, complain,
11922                                   in_decl);
11923         else
11924           name = tsubst_copy (name, args, complain, in_decl);
11925         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
11926       }
11927
11928     case PLUS_EXPR:
11929     case MINUS_EXPR:
11930     case MULT_EXPR:
11931     case TRUNC_DIV_EXPR:
11932     case CEIL_DIV_EXPR:
11933     case FLOOR_DIV_EXPR:
11934     case ROUND_DIV_EXPR:
11935     case EXACT_DIV_EXPR:
11936     case BIT_AND_EXPR:
11937     case BIT_IOR_EXPR:
11938     case BIT_XOR_EXPR:
11939     case TRUNC_MOD_EXPR:
11940     case FLOOR_MOD_EXPR:
11941     case TRUTH_ANDIF_EXPR:
11942     case TRUTH_ORIF_EXPR:
11943     case TRUTH_AND_EXPR:
11944     case TRUTH_OR_EXPR:
11945     case RSHIFT_EXPR:
11946     case LSHIFT_EXPR:
11947     case RROTATE_EXPR:
11948     case LROTATE_EXPR:
11949     case EQ_EXPR:
11950     case NE_EXPR:
11951     case MAX_EXPR:
11952     case MIN_EXPR:
11953     case LE_EXPR:
11954     case GE_EXPR:
11955     case LT_EXPR:
11956     case GT_EXPR:
11957     case COMPOUND_EXPR:
11958     case DOTSTAR_EXPR:
11959     case MEMBER_REF:
11960     case PREDECREMENT_EXPR:
11961     case PREINCREMENT_EXPR:
11962     case POSTDECREMENT_EXPR:
11963     case POSTINCREMENT_EXPR:
11964       return build_nt
11965         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11966          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
11967
11968     case SCOPE_REF:
11969       return build_qualified_name (/*type=*/NULL_TREE,
11970                                    tsubst_copy (TREE_OPERAND (t, 0),
11971                                                 args, complain, in_decl),
11972                                    tsubst_copy (TREE_OPERAND (t, 1),
11973                                                 args, complain, in_decl),
11974                                    QUALIFIED_NAME_IS_TEMPLATE (t));
11975
11976     case ARRAY_REF:
11977       return build_nt
11978         (ARRAY_REF,
11979          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
11980          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
11981          NULL_TREE, NULL_TREE);
11982
11983     case CALL_EXPR:
11984       {
11985         int n = VL_EXP_OPERAND_LENGTH (t);
11986         tree result = build_vl_exp (CALL_EXPR, n);
11987         int i;
11988         for (i = 0; i < n; i++)
11989           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
11990                                              complain, in_decl);
11991         return result;
11992       }
11993
11994     case COND_EXPR:
11995     case MODOP_EXPR:
11996     case PSEUDO_DTOR_EXPR:
11997       {
11998         r = build_nt
11999           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12000            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12001            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12002         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
12003         return r;
12004       }
12005
12006     case NEW_EXPR:
12007       {
12008         r = build_nt
12009         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12010          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
12011          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
12012         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
12013         return r;
12014       }
12015
12016     case DELETE_EXPR:
12017       {
12018         r = build_nt
12019         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12020          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12021         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
12022         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
12023         return r;
12024       }
12025
12026     case TEMPLATE_ID_EXPR:
12027       {
12028         /* Substituted template arguments */
12029         tree fn = TREE_OPERAND (t, 0);
12030         tree targs = TREE_OPERAND (t, 1);
12031
12032         fn = tsubst_copy (fn, args, complain, in_decl);
12033         if (targs)
12034           targs = tsubst_template_args (targs, args, complain, in_decl);
12035
12036         return lookup_template_function (fn, targs);
12037       }
12038
12039     case TREE_LIST:
12040       {
12041         tree purpose, value, chain;
12042
12043         if (t == void_list_node)
12044           return t;
12045
12046         purpose = TREE_PURPOSE (t);
12047         if (purpose)
12048           purpose = tsubst_copy (purpose, args, complain, in_decl);
12049         value = TREE_VALUE (t);
12050         if (value)
12051           value = tsubst_copy (value, args, complain, in_decl);
12052         chain = TREE_CHAIN (t);
12053         if (chain && chain != void_type_node)
12054           chain = tsubst_copy (chain, args, complain, in_decl);
12055         if (purpose == TREE_PURPOSE (t)
12056             && value == TREE_VALUE (t)
12057             && chain == TREE_CHAIN (t))
12058           return t;
12059         return tree_cons (purpose, value, chain);
12060       }
12061
12062     case RECORD_TYPE:
12063     case UNION_TYPE:
12064     case ENUMERAL_TYPE:
12065     case INTEGER_TYPE:
12066     case TEMPLATE_TYPE_PARM:
12067     case TEMPLATE_TEMPLATE_PARM:
12068     case BOUND_TEMPLATE_TEMPLATE_PARM:
12069     case TEMPLATE_PARM_INDEX:
12070     case POINTER_TYPE:
12071     case REFERENCE_TYPE:
12072     case OFFSET_TYPE:
12073     case FUNCTION_TYPE:
12074     case METHOD_TYPE:
12075     case ARRAY_TYPE:
12076     case TYPENAME_TYPE:
12077     case UNBOUND_CLASS_TEMPLATE:
12078     case TYPEOF_TYPE:
12079     case DECLTYPE_TYPE:
12080     case TYPE_DECL:
12081       return tsubst (t, args, complain, in_decl);
12082
12083     case IDENTIFIER_NODE:
12084       if (IDENTIFIER_TYPENAME_P (t))
12085         {
12086           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12087           return mangle_conv_op_name_for_type (new_type);
12088         }
12089       else
12090         return t;
12091
12092     case CONSTRUCTOR:
12093       /* This is handled by tsubst_copy_and_build.  */
12094       gcc_unreachable ();
12095
12096     case VA_ARG_EXPR:
12097       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
12098                                           in_decl),
12099                              tsubst (TREE_TYPE (t), args, complain, in_decl));
12100
12101     case CLEANUP_POINT_EXPR:
12102       /* We shouldn't have built any of these during initial template
12103          generation.  Instead, they should be built during instantiation
12104          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
12105       gcc_unreachable ();
12106
12107     case OFFSET_REF:
12108       r = build2
12109         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
12110          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
12111          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
12112       PTRMEM_OK_P (r) = PTRMEM_OK_P (t);
12113       mark_used (TREE_OPERAND (r, 1));
12114       return r;
12115
12116     case EXPR_PACK_EXPANSION:
12117       error ("invalid use of pack expansion expression");
12118       return error_mark_node;
12119
12120     case NONTYPE_ARGUMENT_PACK:
12121       error ("use %<...%> to expand argument pack");
12122       return error_mark_node;
12123
12124     case INTEGER_CST:
12125     case REAL_CST:
12126     case STRING_CST:
12127     case COMPLEX_CST:
12128       {
12129         /* Instantiate any typedefs in the type.  */
12130         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12131         r = fold_convert (type, t);
12132         gcc_assert (TREE_CODE (r) == code);
12133         return r;
12134       }
12135
12136     case PTRMEM_CST:
12137       /* These can sometimes show up in a partial instantiation, but never
12138          involve template parms.  */
12139       gcc_assert (!uses_template_parms (t));
12140       return t;
12141
12142     default:
12143       /* We shouldn't get here, but keep going if !ENABLE_CHECKING.  */
12144       gcc_checking_assert (false);
12145       return t;
12146     }
12147 }
12148
12149 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
12150
12151 static tree
12152 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
12153                     tree in_decl)
12154 {
12155   tree new_clauses = NULL, nc, oc;
12156
12157   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
12158     {
12159       nc = copy_node (oc);
12160       OMP_CLAUSE_CHAIN (nc) = new_clauses;
12161       new_clauses = nc;
12162
12163       switch (OMP_CLAUSE_CODE (nc))
12164         {
12165         case OMP_CLAUSE_LASTPRIVATE:
12166           if (OMP_CLAUSE_LASTPRIVATE_STMT (oc))
12167             {
12168               OMP_CLAUSE_LASTPRIVATE_STMT (nc) = push_stmt_list ();
12169               tsubst_expr (OMP_CLAUSE_LASTPRIVATE_STMT (oc), args, complain,
12170                            in_decl, /*integral_constant_expression_p=*/false);
12171               OMP_CLAUSE_LASTPRIVATE_STMT (nc)
12172                 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (nc));
12173             }
12174           /* FALLTHRU */
12175         case OMP_CLAUSE_PRIVATE:
12176         case OMP_CLAUSE_SHARED:
12177         case OMP_CLAUSE_FIRSTPRIVATE:
12178         case OMP_CLAUSE_REDUCTION:
12179         case OMP_CLAUSE_COPYIN:
12180         case OMP_CLAUSE_COPYPRIVATE:
12181         case OMP_CLAUSE_IF:
12182         case OMP_CLAUSE_NUM_THREADS:
12183         case OMP_CLAUSE_SCHEDULE:
12184         case OMP_CLAUSE_COLLAPSE:
12185         case OMP_CLAUSE_FINAL:
12186           OMP_CLAUSE_OPERAND (nc, 0)
12187             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
12188                            in_decl, /*integral_constant_expression_p=*/false);
12189           break;
12190         case OMP_CLAUSE_NOWAIT:
12191         case OMP_CLAUSE_ORDERED:
12192         case OMP_CLAUSE_DEFAULT:
12193         case OMP_CLAUSE_UNTIED:
12194         case OMP_CLAUSE_MERGEABLE:
12195           break;
12196         default:
12197           gcc_unreachable ();
12198         }
12199     }
12200
12201   return finish_omp_clauses (nreverse (new_clauses));
12202 }
12203
12204 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
12205
12206 static tree
12207 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
12208                           tree in_decl)
12209 {
12210 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
12211
12212   tree purpose, value, chain;
12213
12214   if (t == NULL)
12215     return t;
12216
12217   if (TREE_CODE (t) != TREE_LIST)
12218     return tsubst_copy_and_build (t, args, complain, in_decl,
12219                                   /*function_p=*/false,
12220                                   /*integral_constant_expression_p=*/false);
12221
12222   if (t == void_list_node)
12223     return t;
12224
12225   purpose = TREE_PURPOSE (t);
12226   if (purpose)
12227     purpose = RECUR (purpose);
12228   value = TREE_VALUE (t);
12229   if (value && TREE_CODE (value) != LABEL_DECL)
12230     value = RECUR (value);
12231   chain = TREE_CHAIN (t);
12232   if (chain && chain != void_type_node)
12233     chain = RECUR (chain);
12234   return tree_cons (purpose, value, chain);
12235 #undef RECUR
12236 }
12237
12238 /* Substitute one OMP_FOR iterator.  */
12239
12240 static void
12241 tsubst_omp_for_iterator (tree t, int i, tree declv, tree initv,
12242                          tree condv, tree incrv, tree *clauses,
12243                          tree args, tsubst_flags_t complain, tree in_decl,
12244                          bool integral_constant_expression_p)
12245 {
12246 #define RECUR(NODE)                             \
12247   tsubst_expr ((NODE), args, complain, in_decl, \
12248                integral_constant_expression_p)
12249   tree decl, init, cond, incr, auto_node;
12250
12251   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
12252   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
12253   decl = RECUR (TREE_OPERAND (init, 0));
12254   init = TREE_OPERAND (init, 1);
12255   auto_node = type_uses_auto (TREE_TYPE (decl));
12256   if (auto_node && init)
12257     {
12258       tree init_expr = init;
12259       if (TREE_CODE (init_expr) == DECL_EXPR)
12260         init_expr = DECL_INITIAL (DECL_EXPR_DECL (init_expr));
12261       init_expr = RECUR (init_expr);
12262       TREE_TYPE (decl)
12263         = do_auto_deduction (TREE_TYPE (decl), init_expr, auto_node);
12264     }
12265   gcc_assert (!type_dependent_expression_p (decl));
12266
12267   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
12268     {
12269       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
12270       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12271       if (TREE_CODE (incr) == MODIFY_EXPR)
12272         incr = build_x_modify_expr (RECUR (TREE_OPERAND (incr, 0)), NOP_EXPR,
12273                                     RECUR (TREE_OPERAND (incr, 1)),
12274                                     complain);
12275       else
12276         incr = RECUR (incr);
12277       TREE_VEC_ELT (declv, i) = decl;
12278       TREE_VEC_ELT (initv, i) = init;
12279       TREE_VEC_ELT (condv, i) = cond;
12280       TREE_VEC_ELT (incrv, i) = incr;
12281       return;
12282     }
12283
12284   if (init && TREE_CODE (init) != DECL_EXPR)
12285     {
12286       tree c;
12287       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
12288         {
12289           if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
12290                || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
12291               && OMP_CLAUSE_DECL (c) == decl)
12292             break;
12293           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
12294                    && OMP_CLAUSE_DECL (c) == decl)
12295             error ("iteration variable %qD should not be firstprivate", decl);
12296           else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
12297                    && OMP_CLAUSE_DECL (c) == decl)
12298             error ("iteration variable %qD should not be reduction", decl);
12299         }
12300       if (c == NULL)
12301         {
12302           c = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
12303           OMP_CLAUSE_DECL (c) = decl;
12304           c = finish_omp_clauses (c);
12305           if (c)
12306             {
12307               OMP_CLAUSE_CHAIN (c) = *clauses;
12308               *clauses = c;
12309             }
12310         }
12311     }
12312   cond = TREE_VEC_ELT (OMP_FOR_COND (t), i);
12313   if (COMPARISON_CLASS_P (cond))
12314     cond = build2 (TREE_CODE (cond), boolean_type_node,
12315                    RECUR (TREE_OPERAND (cond, 0)),
12316                    RECUR (TREE_OPERAND (cond, 1)));
12317   else
12318     cond = RECUR (cond);
12319   incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
12320   switch (TREE_CODE (incr))
12321     {
12322     case PREINCREMENT_EXPR:
12323     case PREDECREMENT_EXPR:
12324     case POSTINCREMENT_EXPR:
12325     case POSTDECREMENT_EXPR:
12326       incr = build2 (TREE_CODE (incr), TREE_TYPE (decl),
12327                      RECUR (TREE_OPERAND (incr, 0)), NULL_TREE);
12328       break;
12329     case MODIFY_EXPR:
12330       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12331           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12332         {
12333           tree rhs = TREE_OPERAND (incr, 1);
12334           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12335                          RECUR (TREE_OPERAND (incr, 0)),
12336                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12337                                  RECUR (TREE_OPERAND (rhs, 0)),
12338                                  RECUR (TREE_OPERAND (rhs, 1))));
12339         }
12340       else
12341         incr = RECUR (incr);
12342       break;
12343     case MODOP_EXPR:
12344       if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
12345           || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
12346         {
12347           tree lhs = RECUR (TREE_OPERAND (incr, 0));
12348           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl), lhs,
12349                          build2 (TREE_CODE (TREE_OPERAND (incr, 1)),
12350                                  TREE_TYPE (decl), lhs,
12351                                  RECUR (TREE_OPERAND (incr, 2))));
12352         }
12353       else if (TREE_CODE (TREE_OPERAND (incr, 1)) == NOP_EXPR
12354                && (TREE_CODE (TREE_OPERAND (incr, 2)) == PLUS_EXPR
12355                    || (TREE_CODE (TREE_OPERAND (incr, 2)) == MINUS_EXPR)))
12356         {
12357           tree rhs = TREE_OPERAND (incr, 2);
12358           incr = build2 (MODIFY_EXPR, TREE_TYPE (decl),
12359                          RECUR (TREE_OPERAND (incr, 0)),
12360                          build2 (TREE_CODE (rhs), TREE_TYPE (decl),
12361                                  RECUR (TREE_OPERAND (rhs, 0)),
12362                                  RECUR (TREE_OPERAND (rhs, 1))));
12363         }
12364       else
12365         incr = RECUR (incr);
12366       break;
12367     default:
12368       incr = RECUR (incr);
12369       break;
12370     }
12371
12372   TREE_VEC_ELT (declv, i) = decl;
12373   TREE_VEC_ELT (initv, i) = init;
12374   TREE_VEC_ELT (condv, i) = cond;
12375   TREE_VEC_ELT (incrv, i) = incr;
12376 #undef RECUR
12377 }
12378
12379 /* Like tsubst_copy for expressions, etc. but also does semantic
12380    processing.  */
12381
12382 static tree
12383 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
12384              bool integral_constant_expression_p)
12385 {
12386 #define RECUR(NODE)                             \
12387   tsubst_expr ((NODE), args, complain, in_decl, \
12388                integral_constant_expression_p)
12389
12390   tree stmt, tmp;
12391
12392   if (t == NULL_TREE || t == error_mark_node)
12393     return t;
12394
12395   if (EXPR_HAS_LOCATION (t))
12396     input_location = EXPR_LOCATION (t);
12397   if (STATEMENT_CODE_P (TREE_CODE (t)))
12398     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
12399
12400   switch (TREE_CODE (t))
12401     {
12402     case STATEMENT_LIST:
12403       {
12404         tree_stmt_iterator i;
12405         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
12406           RECUR (tsi_stmt (i));
12407         break;
12408       }
12409
12410     case CTOR_INITIALIZER:
12411       finish_mem_initializers (tsubst_initializer_list
12412                                (TREE_OPERAND (t, 0), args));
12413       break;
12414
12415     case RETURN_EXPR:
12416       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
12417       break;
12418
12419     case EXPR_STMT:
12420       tmp = RECUR (EXPR_STMT_EXPR (t));
12421       if (EXPR_STMT_STMT_EXPR_RESULT (t))
12422         finish_stmt_expr_expr (tmp, cur_stmt_expr);
12423       else
12424         finish_expr_stmt (tmp);
12425       break;
12426
12427     case USING_STMT:
12428       do_using_directive (USING_STMT_NAMESPACE (t));
12429       break;
12430
12431     case DECL_EXPR:
12432       {
12433         tree decl, pattern_decl;
12434         tree init;
12435
12436         pattern_decl = decl = DECL_EXPR_DECL (t);
12437         if (TREE_CODE (decl) == LABEL_DECL)
12438           finish_label_decl (DECL_NAME (decl));
12439         else if (TREE_CODE (decl) == USING_DECL)
12440           {
12441             tree scope = USING_DECL_SCOPE (decl);
12442             tree name = DECL_NAME (decl);
12443             tree decl;
12444
12445             scope = tsubst (scope, args, complain, in_decl);
12446             decl = lookup_qualified_name (scope, name,
12447                                           /*is_type_p=*/false,
12448                                           /*complain=*/false);
12449             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
12450               qualified_name_lookup_error (scope, name, decl, input_location);
12451             else
12452               do_local_using_decl (decl, scope, name);
12453           }
12454         else
12455           {
12456             init = DECL_INITIAL (decl);
12457             decl = tsubst (decl, args, complain, in_decl);
12458             if (decl != error_mark_node)
12459               {
12460                 /* By marking the declaration as instantiated, we avoid
12461                    trying to instantiate it.  Since instantiate_decl can't
12462                    handle local variables, and since we've already done
12463                    all that needs to be done, that's the right thing to
12464                    do.  */
12465                 if (TREE_CODE (decl) == VAR_DECL)
12466                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12467                 if (TREE_CODE (decl) == VAR_DECL
12468                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
12469                   /* Anonymous aggregates are a special case.  */
12470                   finish_anon_union (decl);
12471                 else
12472                   {
12473                     int const_init = false;
12474                     maybe_push_decl (decl);
12475                     if (TREE_CODE (decl) == VAR_DECL
12476                         && DECL_PRETTY_FUNCTION_P (decl))
12477                       {
12478                         /* For __PRETTY_FUNCTION__ we have to adjust the
12479                            initializer.  */
12480                         const char *const name
12481                           = cxx_printable_name (current_function_decl, 2);
12482                         init = cp_fname_init (name, &TREE_TYPE (decl));
12483                       }
12484                     else
12485                       {
12486                         tree t = RECUR (init);
12487
12488                         if (init && !t)
12489                           {
12490                             /* If we had an initializer but it
12491                                instantiated to nothing,
12492                                value-initialize the object.  This will
12493                                only occur when the initializer was a
12494                                pack expansion where the parameter packs
12495                                used in that expansion were of length
12496                                zero.  */
12497                             init = build_value_init (TREE_TYPE (decl),
12498                                                      complain);
12499                             if (TREE_CODE (init) == AGGR_INIT_EXPR)
12500                               init = get_target_expr_sfinae (init, complain);
12501                           }
12502                         else
12503                           init = t;
12504                       }
12505
12506                     if (TREE_CODE (decl) == VAR_DECL)
12507                       const_init = (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P
12508                                     (pattern_decl));
12509                     cp_finish_decl (decl, init, const_init, NULL_TREE, 0);
12510                   }
12511               }
12512           }
12513
12514         /* A DECL_EXPR can also be used as an expression, in the condition
12515            clause of an if/for/while construct.  */
12516         return decl;
12517       }
12518
12519     case FOR_STMT:
12520       stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12521       RECUR (FOR_INIT_STMT (t));
12522       finish_for_init_stmt (stmt);
12523       tmp = RECUR (FOR_COND (t));
12524       finish_for_cond (tmp, stmt);
12525       tmp = RECUR (FOR_EXPR (t));
12526       finish_for_expr (tmp, stmt);
12527       RECUR (FOR_BODY (t));
12528       finish_for_stmt (stmt);
12529       break;
12530
12531     case RANGE_FOR_STMT:
12532       {
12533         tree decl, expr;
12534         stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
12535         decl = RANGE_FOR_DECL (t);
12536         decl = tsubst (decl, args, complain, in_decl);
12537         maybe_push_decl (decl);
12538         expr = RECUR (RANGE_FOR_EXPR (t));
12539         stmt = cp_convert_range_for (stmt, decl, expr);
12540         RECUR (RANGE_FOR_BODY (t));
12541         finish_for_stmt (stmt);
12542       }
12543       break;
12544
12545     case WHILE_STMT:
12546       stmt = begin_while_stmt ();
12547       tmp = RECUR (WHILE_COND (t));
12548       finish_while_stmt_cond (tmp, stmt);
12549       RECUR (WHILE_BODY (t));
12550       finish_while_stmt (stmt);
12551       break;
12552
12553     case DO_STMT:
12554       stmt = begin_do_stmt ();
12555       RECUR (DO_BODY (t));
12556       finish_do_body (stmt);
12557       tmp = RECUR (DO_COND (t));
12558       finish_do_stmt (tmp, stmt);
12559       break;
12560
12561     case IF_STMT:
12562       stmt = begin_if_stmt ();
12563       tmp = RECUR (IF_COND (t));
12564       finish_if_stmt_cond (tmp, stmt);
12565       RECUR (THEN_CLAUSE (t));
12566       finish_then_clause (stmt);
12567
12568       if (ELSE_CLAUSE (t))
12569         {
12570           begin_else_clause (stmt);
12571           RECUR (ELSE_CLAUSE (t));
12572           finish_else_clause (stmt);
12573         }
12574
12575       finish_if_stmt (stmt);
12576       break;
12577
12578     case BIND_EXPR:
12579       if (BIND_EXPR_BODY_BLOCK (t))
12580         stmt = begin_function_body ();
12581       else
12582         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
12583                                     ? BCS_TRY_BLOCK : 0);
12584
12585       RECUR (BIND_EXPR_BODY (t));
12586
12587       if (BIND_EXPR_BODY_BLOCK (t))
12588         finish_function_body (stmt);
12589       else
12590         finish_compound_stmt (stmt);
12591       break;
12592
12593     case BREAK_STMT:
12594       finish_break_stmt ();
12595       break;
12596
12597     case CONTINUE_STMT:
12598       finish_continue_stmt ();
12599       break;
12600
12601     case SWITCH_STMT:
12602       stmt = begin_switch_stmt ();
12603       tmp = RECUR (SWITCH_STMT_COND (t));
12604       finish_switch_cond (tmp, stmt);
12605       RECUR (SWITCH_STMT_BODY (t));
12606       finish_switch_stmt (stmt);
12607       break;
12608
12609     case CASE_LABEL_EXPR:
12610       finish_case_label (EXPR_LOCATION (t),
12611                          RECUR (CASE_LOW (t)),
12612                          RECUR (CASE_HIGH (t)));
12613       break;
12614
12615     case LABEL_EXPR:
12616       {
12617         tree decl = LABEL_EXPR_LABEL (t);
12618         tree label;
12619
12620         label = finish_label_stmt (DECL_NAME (decl));
12621         if (DECL_ATTRIBUTES (decl) != NULL_TREE)
12622           cplus_decl_attributes (&label, DECL_ATTRIBUTES (decl), 0);
12623       }
12624       break;
12625
12626     case GOTO_EXPR:
12627       tmp = GOTO_DESTINATION (t);
12628       if (TREE_CODE (tmp) != LABEL_DECL)
12629         /* Computed goto's must be tsubst'd into.  On the other hand,
12630            non-computed gotos must not be; the identifier in question
12631            will have no binding.  */
12632         tmp = RECUR (tmp);
12633       else
12634         tmp = DECL_NAME (tmp);
12635       finish_goto_stmt (tmp);
12636       break;
12637
12638     case ASM_EXPR:
12639       tmp = finish_asm_stmt
12640         (ASM_VOLATILE_P (t),
12641          RECUR (ASM_STRING (t)),
12642          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
12643          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
12644          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl),
12645          tsubst_copy_asm_operands (ASM_LABELS (t), args, complain, in_decl));
12646       {
12647         tree asm_expr = tmp;
12648         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
12649           asm_expr = TREE_OPERAND (asm_expr, 0);
12650         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
12651       }
12652       break;
12653
12654     case TRY_BLOCK:
12655       if (CLEANUP_P (t))
12656         {
12657           stmt = begin_try_block ();
12658           RECUR (TRY_STMTS (t));
12659           finish_cleanup_try_block (stmt);
12660           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
12661         }
12662       else
12663         {
12664           tree compound_stmt = NULL_TREE;
12665
12666           if (FN_TRY_BLOCK_P (t))
12667             stmt = begin_function_try_block (&compound_stmt);
12668           else
12669             stmt = begin_try_block ();
12670
12671           RECUR (TRY_STMTS (t));
12672
12673           if (FN_TRY_BLOCK_P (t))
12674             finish_function_try_block (stmt);
12675           else
12676             finish_try_block (stmt);
12677
12678           RECUR (TRY_HANDLERS (t));
12679           if (FN_TRY_BLOCK_P (t))
12680             finish_function_handler_sequence (stmt, compound_stmt);
12681           else
12682             finish_handler_sequence (stmt);
12683         }
12684       break;
12685
12686     case HANDLER:
12687       {
12688         tree decl = HANDLER_PARMS (t);
12689
12690         if (decl)
12691           {
12692             decl = tsubst (decl, args, complain, in_decl);
12693             /* Prevent instantiate_decl from trying to instantiate
12694                this variable.  We've already done all that needs to be
12695                done.  */
12696             if (decl != error_mark_node)
12697               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
12698           }
12699         stmt = begin_handler ();
12700         finish_handler_parms (decl, stmt);
12701         RECUR (HANDLER_BODY (t));
12702         finish_handler (stmt);
12703       }
12704       break;
12705
12706     case TAG_DEFN:
12707       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
12708       break;
12709
12710     case STATIC_ASSERT:
12711       {
12712         tree condition = 
12713           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
12714                        args,
12715                        complain, in_decl,
12716                        /*integral_constant_expression_p=*/true);
12717         finish_static_assert (condition,
12718                               STATIC_ASSERT_MESSAGE (t),
12719                               STATIC_ASSERT_SOURCE_LOCATION (t),
12720                               /*member_p=*/false);
12721       }
12722       break;
12723
12724     case OMP_PARALLEL:
12725       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
12726                                 args, complain, in_decl);
12727       stmt = begin_omp_parallel ();
12728       RECUR (OMP_PARALLEL_BODY (t));
12729       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
12730         = OMP_PARALLEL_COMBINED (t);
12731       break;
12732
12733     case OMP_TASK:
12734       tmp = tsubst_omp_clauses (OMP_TASK_CLAUSES (t),
12735                                 args, complain, in_decl);
12736       stmt = begin_omp_task ();
12737       RECUR (OMP_TASK_BODY (t));
12738       finish_omp_task (tmp, stmt);
12739       break;
12740
12741     case OMP_FOR:
12742       {
12743         tree clauses, body, pre_body;
12744         tree declv, initv, condv, incrv;
12745         int i;
12746
12747         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
12748                                       args, complain, in_decl);
12749         declv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12750         initv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12751         condv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12752         incrv = make_tree_vec (TREE_VEC_LENGTH (OMP_FOR_INIT (t)));
12753
12754         for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INIT (t)); i++)
12755           tsubst_omp_for_iterator (t, i, declv, initv, condv, incrv,
12756                                    &clauses, args, complain, in_decl,
12757                                    integral_constant_expression_p);
12758
12759         stmt = begin_omp_structured_block ();
12760
12761         for (i = 0; i < TREE_VEC_LENGTH (initv); i++)
12762           if (TREE_VEC_ELT (initv, i) == NULL
12763               || TREE_CODE (TREE_VEC_ELT (initv, i)) != DECL_EXPR)
12764             TREE_VEC_ELT (initv, i) = RECUR (TREE_VEC_ELT (initv, i));
12765           else if (CLASS_TYPE_P (TREE_TYPE (TREE_VEC_ELT (initv, i))))
12766             {
12767               tree init = RECUR (TREE_VEC_ELT (initv, i));
12768               gcc_assert (init == TREE_VEC_ELT (declv, i));
12769               TREE_VEC_ELT (initv, i) = NULL_TREE;
12770             }
12771           else
12772             {
12773               tree decl_expr = TREE_VEC_ELT (initv, i);
12774               tree init = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
12775               gcc_assert (init != NULL);
12776               TREE_VEC_ELT (initv, i) = RECUR (init);
12777               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL;
12778               RECUR (decl_expr);
12779               DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init;
12780             }
12781
12782         pre_body = push_stmt_list ();
12783         RECUR (OMP_FOR_PRE_BODY (t));
12784         pre_body = pop_stmt_list (pre_body);
12785
12786         body = push_stmt_list ();
12787         RECUR (OMP_FOR_BODY (t));
12788         body = pop_stmt_list (body);
12789
12790         t = finish_omp_for (EXPR_LOCATION (t), declv, initv, condv, incrv,
12791                             body, pre_body, clauses);
12792
12793         add_stmt (finish_omp_structured_block (stmt));
12794       }
12795       break;
12796
12797     case OMP_SECTIONS:
12798     case OMP_SINGLE:
12799       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
12800       stmt = push_stmt_list ();
12801       RECUR (OMP_BODY (t));
12802       stmt = pop_stmt_list (stmt);
12803
12804       t = copy_node (t);
12805       OMP_BODY (t) = stmt;
12806       OMP_CLAUSES (t) = tmp;
12807       add_stmt (t);
12808       break;
12809
12810     case OMP_SECTION:
12811     case OMP_CRITICAL:
12812     case OMP_MASTER:
12813     case OMP_ORDERED:
12814       stmt = push_stmt_list ();
12815       RECUR (OMP_BODY (t));
12816       stmt = pop_stmt_list (stmt);
12817
12818       t = copy_node (t);
12819       OMP_BODY (t) = stmt;
12820       add_stmt (t);
12821       break;
12822
12823     case OMP_ATOMIC:
12824       gcc_assert (OMP_ATOMIC_DEPENDENT_P (t));
12825       if (TREE_CODE (TREE_OPERAND (t, 1)) != MODIFY_EXPR)
12826         {
12827           tree op1 = TREE_OPERAND (t, 1);
12828           tree rhs1 = NULL_TREE;
12829           tree lhs, rhs;
12830           if (TREE_CODE (op1) == COMPOUND_EXPR)
12831             {
12832               rhs1 = RECUR (TREE_OPERAND (op1, 0));
12833               op1 = TREE_OPERAND (op1, 1);
12834             }
12835           lhs = RECUR (TREE_OPERAND (op1, 0));
12836           rhs = RECUR (TREE_OPERAND (op1, 1));
12837           finish_omp_atomic (OMP_ATOMIC, TREE_CODE (op1), lhs, rhs,
12838                              NULL_TREE, NULL_TREE, rhs1);
12839         }
12840       else
12841         {
12842           tree op1 = TREE_OPERAND (t, 1);
12843           tree v = NULL_TREE, lhs, rhs = NULL_TREE, lhs1 = NULL_TREE;
12844           tree rhs1 = NULL_TREE;
12845           enum tree_code code = TREE_CODE (TREE_OPERAND (op1, 1));
12846           enum tree_code opcode = NOP_EXPR;
12847           if (code == OMP_ATOMIC_READ)
12848             {
12849               v = RECUR (TREE_OPERAND (op1, 0));
12850               lhs = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
12851             }
12852           else if (code == OMP_ATOMIC_CAPTURE_OLD
12853                    || code == OMP_ATOMIC_CAPTURE_NEW)
12854             {
12855               tree op11 = TREE_OPERAND (TREE_OPERAND (op1, 1), 1);
12856               v = RECUR (TREE_OPERAND (op1, 0));
12857               lhs1 = RECUR (TREE_OPERAND (TREE_OPERAND (op1, 1), 0));
12858               if (TREE_CODE (op11) == COMPOUND_EXPR)
12859                 {
12860                   rhs1 = RECUR (TREE_OPERAND (op11, 0));
12861                   op11 = TREE_OPERAND (op11, 1);
12862                 }
12863               lhs = RECUR (TREE_OPERAND (op11, 0));
12864               rhs = RECUR (TREE_OPERAND (op11, 1));
12865               opcode = TREE_CODE (op11);
12866             }
12867           else
12868             {
12869               code = OMP_ATOMIC;
12870               lhs = RECUR (TREE_OPERAND (op1, 0));
12871               rhs = RECUR (TREE_OPERAND (op1, 1));
12872             }
12873           finish_omp_atomic (code, opcode, lhs, rhs, v, lhs1, rhs1);
12874         }
12875       break;
12876
12877     case EXPR_PACK_EXPANSION:
12878       error ("invalid use of pack expansion expression");
12879       return error_mark_node;
12880
12881     case NONTYPE_ARGUMENT_PACK:
12882       error ("use %<...%> to expand argument pack");
12883       return error_mark_node;
12884
12885     default:
12886       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
12887
12888       return tsubst_copy_and_build (t, args, complain, in_decl,
12889                                     /*function_p=*/false,
12890                                     integral_constant_expression_p);
12891     }
12892
12893   return NULL_TREE;
12894 #undef RECUR
12895 }
12896
12897 /* T is a postfix-expression that is not being used in a function
12898    call.  Return the substituted version of T.  */
12899
12900 static tree
12901 tsubst_non_call_postfix_expression (tree t, tree args,
12902                                     tsubst_flags_t complain,
12903                                     tree in_decl)
12904 {
12905   if (TREE_CODE (t) == SCOPE_REF)
12906     t = tsubst_qualified_id (t, args, complain, in_decl,
12907                              /*done=*/false, /*address_p=*/false);
12908   else
12909     t = tsubst_copy_and_build (t, args, complain, in_decl,
12910                                /*function_p=*/false,
12911                                /*integral_constant_expression_p=*/false);
12912
12913   return t;
12914 }
12915
12916 /* Like tsubst but deals with expressions and performs semantic
12917    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
12918
12919 tree
12920 tsubst_copy_and_build (tree t,
12921                        tree args,
12922                        tsubst_flags_t complain,
12923                        tree in_decl,
12924                        bool function_p,
12925                        bool integral_constant_expression_p)
12926 {
12927 #define RECUR(NODE)                                             \
12928   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
12929                          /*function_p=*/false,                  \
12930                          integral_constant_expression_p)
12931
12932   tree op1;
12933
12934   if (t == NULL_TREE || t == error_mark_node)
12935     return t;
12936
12937   switch (TREE_CODE (t))
12938     {
12939     case USING_DECL:
12940       t = DECL_NAME (t);
12941       /* Fall through.  */
12942     case IDENTIFIER_NODE:
12943       {
12944         tree decl;
12945         cp_id_kind idk;
12946         bool non_integral_constant_expression_p;
12947         const char *error_msg;
12948
12949         if (IDENTIFIER_TYPENAME_P (t))
12950           {
12951             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
12952             t = mangle_conv_op_name_for_type (new_type);
12953           }
12954
12955         /* Look up the name.  */
12956         decl = lookup_name (t);
12957
12958         /* By convention, expressions use ERROR_MARK_NODE to indicate
12959            failure, not NULL_TREE.  */
12960         if (decl == NULL_TREE)
12961           decl = error_mark_node;
12962
12963         decl = finish_id_expression (t, decl, NULL_TREE,
12964                                      &idk,
12965                                      integral_constant_expression_p,
12966                                      /*allow_non_integral_constant_expression_p=*/false,
12967                                      &non_integral_constant_expression_p,
12968                                      /*template_p=*/false,
12969                                      /*done=*/true,
12970                                      /*address_p=*/false,
12971                                      /*template_arg_p=*/false,
12972                                      &error_msg,
12973                                      input_location);
12974         if (error_msg)
12975           error (error_msg);
12976         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
12977           decl = unqualified_name_lookup_error (decl);
12978         return decl;
12979       }
12980
12981     case TEMPLATE_ID_EXPR:
12982       {
12983         tree object;
12984         tree templ = RECUR (TREE_OPERAND (t, 0));
12985         tree targs = TREE_OPERAND (t, 1);
12986
12987         if (targs)
12988           targs = tsubst_template_args (targs, args, complain, in_decl);
12989
12990         if (TREE_CODE (templ) == COMPONENT_REF)
12991           {
12992             object = TREE_OPERAND (templ, 0);
12993             templ = TREE_OPERAND (templ, 1);
12994           }
12995         else
12996           object = NULL_TREE;
12997         templ = lookup_template_function (templ, targs);
12998
12999         if (object)
13000           return build3 (COMPONENT_REF, TREE_TYPE (templ),
13001                          object, templ, NULL_TREE);
13002         else
13003           return baselink_for_fns (templ);
13004       }
13005
13006     case INDIRECT_REF:
13007       {
13008         tree r = RECUR (TREE_OPERAND (t, 0));
13009
13010         if (REFERENCE_REF_P (t))
13011           {
13012             /* A type conversion to reference type will be enclosed in
13013                such an indirect ref, but the substitution of the cast
13014                will have also added such an indirect ref.  */
13015             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
13016               r = convert_from_reference (r);
13017           }
13018         else
13019           r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
13020         return r;
13021       }
13022
13023     case NOP_EXPR:
13024       return build_nop
13025         (tsubst (TREE_TYPE (t), args, complain, in_decl),
13026          RECUR (TREE_OPERAND (t, 0)));
13027
13028     case CAST_EXPR:
13029     case REINTERPRET_CAST_EXPR:
13030     case CONST_CAST_EXPR:
13031     case DYNAMIC_CAST_EXPR:
13032     case STATIC_CAST_EXPR:
13033       {
13034         tree type;
13035         tree op;
13036
13037         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13038         if (integral_constant_expression_p
13039             && !cast_valid_in_integral_constant_expression_p (type))
13040           {
13041             if (complain & tf_error)
13042               error ("a cast to a type other than an integral or "
13043                      "enumeration type cannot appear in a constant-expression");
13044             return error_mark_node; 
13045           }
13046
13047         op = RECUR (TREE_OPERAND (t, 0));
13048
13049         switch (TREE_CODE (t))
13050           {
13051           case CAST_EXPR:
13052             return build_functional_cast (type, op, complain);
13053           case REINTERPRET_CAST_EXPR:
13054             return build_reinterpret_cast (type, op, complain);
13055           case CONST_CAST_EXPR:
13056             return build_const_cast (type, op, complain);
13057           case DYNAMIC_CAST_EXPR:
13058             return build_dynamic_cast (type, op, complain);
13059           case STATIC_CAST_EXPR:
13060             return build_static_cast (type, op, complain);
13061           default:
13062             gcc_unreachable ();
13063           }
13064       }
13065
13066     case POSTDECREMENT_EXPR:
13067     case POSTINCREMENT_EXPR:
13068       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13069                                                 args, complain, in_decl);
13070       return build_x_unary_op (TREE_CODE (t), op1, complain);
13071
13072     case PREDECREMENT_EXPR:
13073     case PREINCREMENT_EXPR:
13074     case NEGATE_EXPR:
13075     case BIT_NOT_EXPR:
13076     case ABS_EXPR:
13077     case TRUTH_NOT_EXPR:
13078     case UNARY_PLUS_EXPR:  /* Unary + */
13079     case REALPART_EXPR:
13080     case IMAGPART_EXPR:
13081       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
13082                                complain);
13083
13084     case ADDR_EXPR:
13085       op1 = TREE_OPERAND (t, 0);
13086       if (TREE_CODE (op1) == LABEL_DECL)
13087         return finish_label_address_expr (DECL_NAME (op1),
13088                                           EXPR_LOCATION (op1));
13089       if (TREE_CODE (op1) == SCOPE_REF)
13090         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
13091                                    /*done=*/true, /*address_p=*/true);
13092       else
13093         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
13094                                                   in_decl);
13095       return build_x_unary_op (ADDR_EXPR, op1, complain);
13096
13097     case PLUS_EXPR:
13098     case MINUS_EXPR:
13099     case MULT_EXPR:
13100     case TRUNC_DIV_EXPR:
13101     case CEIL_DIV_EXPR:
13102     case FLOOR_DIV_EXPR:
13103     case ROUND_DIV_EXPR:
13104     case EXACT_DIV_EXPR:
13105     case BIT_AND_EXPR:
13106     case BIT_IOR_EXPR:
13107     case BIT_XOR_EXPR:
13108     case TRUNC_MOD_EXPR:
13109     case FLOOR_MOD_EXPR:
13110     case TRUTH_ANDIF_EXPR:
13111     case TRUTH_ORIF_EXPR:
13112     case TRUTH_AND_EXPR:
13113     case TRUTH_OR_EXPR:
13114     case RSHIFT_EXPR:
13115     case LSHIFT_EXPR:
13116     case RROTATE_EXPR:
13117     case LROTATE_EXPR:
13118     case EQ_EXPR:
13119     case NE_EXPR:
13120     case MAX_EXPR:
13121     case MIN_EXPR:
13122     case LE_EXPR:
13123     case GE_EXPR:
13124     case LT_EXPR:
13125     case GT_EXPR:
13126     case MEMBER_REF:
13127     case DOTSTAR_EXPR:
13128       return build_x_binary_op
13129         (TREE_CODE (t),
13130          RECUR (TREE_OPERAND (t, 0)),
13131          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
13132           ? ERROR_MARK
13133           : TREE_CODE (TREE_OPERAND (t, 0))),
13134          RECUR (TREE_OPERAND (t, 1)),
13135          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
13136           ? ERROR_MARK
13137           : TREE_CODE (TREE_OPERAND (t, 1))),
13138          /*overload=*/NULL,
13139          complain);
13140
13141     case SCOPE_REF:
13142       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
13143                                   /*address_p=*/false);
13144     case ARRAY_REF:
13145       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13146                                                 args, complain, in_decl);
13147       return build_x_array_ref (op1, RECUR (TREE_OPERAND (t, 1)), complain);
13148
13149     case SIZEOF_EXPR:
13150       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
13151         return tsubst_copy (t, args, complain, in_decl);
13152       /* Fall through */
13153       
13154     case ALIGNOF_EXPR:
13155       op1 = TREE_OPERAND (t, 0);
13156       if (!args)
13157         {
13158           /* When there are no ARGS, we are trying to evaluate a
13159              non-dependent expression from the parser.  Trying to do
13160              the substitutions may not work.  */
13161           if (!TYPE_P (op1))
13162             op1 = TREE_TYPE (op1);
13163         }
13164       else
13165         {
13166           ++cp_unevaluated_operand;
13167           ++c_inhibit_evaluation_warnings;
13168           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13169                                        /*function_p=*/false,
13170                                        /*integral_constant_expression_p=*/false);
13171           --cp_unevaluated_operand;
13172           --c_inhibit_evaluation_warnings;
13173         }
13174       if (TYPE_P (op1))
13175         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), 
13176                                            complain & tf_error);
13177       else
13178         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t), 
13179                                            complain & tf_error);
13180
13181     case AT_ENCODE_EXPR:
13182       {
13183         op1 = TREE_OPERAND (t, 0);
13184         ++cp_unevaluated_operand;
13185         ++c_inhibit_evaluation_warnings;
13186         op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13187                                      /*function_p=*/false,
13188                                      /*integral_constant_expression_p=*/false);
13189         --cp_unevaluated_operand;
13190         --c_inhibit_evaluation_warnings;
13191         return objc_build_encode_expr (op1);
13192       }
13193
13194     case NOEXCEPT_EXPR:
13195       op1 = TREE_OPERAND (t, 0);
13196       ++cp_unevaluated_operand;
13197       ++c_inhibit_evaluation_warnings;
13198       op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
13199                                    /*function_p=*/false,
13200                                    /*integral_constant_expression_p=*/false);
13201       --cp_unevaluated_operand;
13202       --c_inhibit_evaluation_warnings;
13203       return finish_noexcept_expr (op1, complain);
13204
13205     case MODOP_EXPR:
13206       {
13207         tree r = build_x_modify_expr
13208           (RECUR (TREE_OPERAND (t, 0)),
13209            TREE_CODE (TREE_OPERAND (t, 1)),
13210            RECUR (TREE_OPERAND (t, 2)),
13211            complain);
13212         /* TREE_NO_WARNING must be set if either the expression was
13213            parenthesized or it uses an operator such as >>= rather
13214            than plain assignment.  In the former case, it was already
13215            set and must be copied.  In the latter case,
13216            build_x_modify_expr sets it and it must not be reset
13217            here.  */
13218         if (TREE_NO_WARNING (t))
13219           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
13220         return r;
13221       }
13222
13223     case ARROW_EXPR:
13224       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13225                                                 args, complain, in_decl);
13226       /* Remember that there was a reference to this entity.  */
13227       if (DECL_P (op1))
13228         mark_used (op1);
13229       return build_x_arrow (op1);
13230
13231     case NEW_EXPR:
13232       {
13233         tree placement = RECUR (TREE_OPERAND (t, 0));
13234         tree init = RECUR (TREE_OPERAND (t, 3));
13235         VEC(tree,gc) *placement_vec;
13236         VEC(tree,gc) *init_vec;
13237         tree ret;
13238
13239         if (placement == NULL_TREE)
13240           placement_vec = NULL;
13241         else
13242           {
13243             placement_vec = make_tree_vector ();
13244             for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
13245               VEC_safe_push (tree, gc, placement_vec, TREE_VALUE (placement));
13246           }
13247
13248         /* If there was an initializer in the original tree, but it
13249            instantiated to an empty list, then we should pass a
13250            non-NULL empty vector to tell build_new that it was an
13251            empty initializer() rather than no initializer.  This can
13252            only happen when the initializer is a pack expansion whose
13253            parameter packs are of length zero.  */
13254         if (init == NULL_TREE && TREE_OPERAND (t, 3) == NULL_TREE)
13255           init_vec = NULL;
13256         else
13257           {
13258             init_vec = make_tree_vector ();
13259             if (init == void_zero_node)
13260               gcc_assert (init_vec != NULL);
13261             else
13262               {
13263                 for (; init != NULL_TREE; init = TREE_CHAIN (init))
13264                   VEC_safe_push (tree, gc, init_vec, TREE_VALUE (init));
13265               }
13266           }
13267
13268         ret = build_new (&placement_vec,
13269                          tsubst (TREE_OPERAND (t, 1), args, complain, in_decl),
13270                          RECUR (TREE_OPERAND (t, 2)),
13271                          &init_vec,
13272                          NEW_EXPR_USE_GLOBAL (t),
13273                          complain);
13274
13275         if (placement_vec != NULL)
13276           release_tree_vector (placement_vec);
13277         if (init_vec != NULL)
13278           release_tree_vector (init_vec);
13279
13280         return ret;
13281       }
13282
13283     case DELETE_EXPR:
13284      return delete_sanity
13285        (RECUR (TREE_OPERAND (t, 0)),
13286         RECUR (TREE_OPERAND (t, 1)),
13287         DELETE_EXPR_USE_VEC (t),
13288         DELETE_EXPR_USE_GLOBAL (t),
13289         complain);
13290
13291     case COMPOUND_EXPR:
13292       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
13293                                     RECUR (TREE_OPERAND (t, 1)),
13294                                     complain);
13295
13296     case CALL_EXPR:
13297       {
13298         tree function;
13299         VEC(tree,gc) *call_args;
13300         unsigned int nargs, i;
13301         bool qualified_p;
13302         bool koenig_p;
13303         tree ret;
13304
13305         function = CALL_EXPR_FN (t);
13306         /* When we parsed the expression,  we determined whether or
13307            not Koenig lookup should be performed.  */
13308         koenig_p = KOENIG_LOOKUP_P (t);
13309         if (TREE_CODE (function) == SCOPE_REF)
13310           {
13311             qualified_p = true;
13312             function = tsubst_qualified_id (function, args, complain, in_decl,
13313                                             /*done=*/false,
13314                                             /*address_p=*/false);
13315           }
13316         else if (koenig_p && TREE_CODE (function) == IDENTIFIER_NODE)
13317           {
13318             /* Do nothing; calling tsubst_copy_and_build on an identifier
13319                would incorrectly perform unqualified lookup again.
13320
13321                Note that we can also have an IDENTIFIER_NODE if the earlier
13322                unqualified lookup found a member function; in that case
13323                koenig_p will be false and we do want to do the lookup
13324                again to find the instantiated member function.
13325
13326                FIXME but doing that causes c++/15272, so we need to stop
13327                using IDENTIFIER_NODE in that situation.  */
13328             qualified_p = false;
13329           }
13330         else
13331           {
13332             if (TREE_CODE (function) == COMPONENT_REF)
13333               {
13334                 tree op = TREE_OPERAND (function, 1);
13335
13336                 qualified_p = (TREE_CODE (op) == SCOPE_REF
13337                                || (BASELINK_P (op)
13338                                    && BASELINK_QUALIFIED_P (op)));
13339               }
13340             else
13341               qualified_p = false;
13342
13343             function = tsubst_copy_and_build (function, args, complain,
13344                                               in_decl,
13345                                               !qualified_p,
13346                                               integral_constant_expression_p);
13347
13348             if (BASELINK_P (function))
13349               qualified_p = true;
13350           }
13351
13352         nargs = call_expr_nargs (t);
13353         call_args = make_tree_vector ();
13354         for (i = 0; i < nargs; ++i)
13355           {
13356             tree arg = CALL_EXPR_ARG (t, i);
13357
13358             if (!PACK_EXPANSION_P (arg))
13359               VEC_safe_push (tree, gc, call_args,
13360                              RECUR (CALL_EXPR_ARG (t, i)));
13361             else
13362               {
13363                 /* Expand the pack expansion and push each entry onto
13364                    CALL_ARGS.  */
13365                 arg = tsubst_pack_expansion (arg, args, complain, in_decl);
13366                 if (TREE_CODE (arg) == TREE_VEC)
13367                   {
13368                     unsigned int len, j;
13369
13370                     len = TREE_VEC_LENGTH (arg);
13371                     for (j = 0; j < len; ++j)
13372                       {
13373                         tree value = TREE_VEC_ELT (arg, j);
13374                         if (value != NULL_TREE)
13375                           value = convert_from_reference (value);
13376                         VEC_safe_push (tree, gc, call_args, value);
13377                       }
13378                   }
13379                 else
13380                   {
13381                     /* A partial substitution.  Add one entry.  */
13382                     VEC_safe_push (tree, gc, call_args, arg);
13383                   }
13384               }
13385           }
13386
13387         /* We do not perform argument-dependent lookup if normal
13388            lookup finds a non-function, in accordance with the
13389            expected resolution of DR 218.  */
13390         if (koenig_p
13391             && ((is_overloaded_fn (function)
13392                  /* If lookup found a member function, the Koenig lookup is
13393                     not appropriate, even if an unqualified-name was used
13394                     to denote the function.  */
13395                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
13396                 || TREE_CODE (function) == IDENTIFIER_NODE)
13397             /* Only do this when substitution turns a dependent call
13398                into a non-dependent call.  */
13399             && type_dependent_expression_p_push (t)
13400             && !any_type_dependent_arguments_p (call_args))
13401           function = perform_koenig_lookup (function, call_args, false,
13402                                             tf_none);
13403
13404         if (TREE_CODE (function) == IDENTIFIER_NODE
13405             && !any_type_dependent_arguments_p (call_args))
13406           {
13407             if (koenig_p && (complain & tf_warning_or_error))
13408               {
13409                 /* For backwards compatibility and good diagnostics, try
13410                    the unqualified lookup again if we aren't in SFINAE
13411                    context.  */
13412                 tree unq = (tsubst_copy_and_build
13413                             (function, args, complain, in_decl, true,
13414                              integral_constant_expression_p));
13415                 if (unq != function)
13416                   {
13417                     tree fn = unq;
13418                     if (TREE_CODE (fn) == COMPONENT_REF)
13419                       fn = TREE_OPERAND (fn, 1);
13420                     if (is_overloaded_fn (fn))
13421                       fn = get_first_fn (fn);
13422                     permerror (EXPR_LOC_OR_HERE (t),
13423                                "%qD was not declared in this scope, "
13424                                "and no declarations were found by "
13425                                "argument-dependent lookup at the point "
13426                                "of instantiation", function);
13427                     if (DECL_CLASS_SCOPE_P (fn))
13428                       {
13429                         inform (EXPR_LOC_OR_HERE (t),
13430                                 "declarations in dependent base %qT are "
13431                                 "not found by unqualified lookup",
13432                                 DECL_CLASS_CONTEXT (fn));
13433                         if (current_class_ptr)
13434                           inform (EXPR_LOC_OR_HERE (t),
13435                                   "use %<this->%D%> instead", function);
13436                         else
13437                           inform (EXPR_LOC_OR_HERE (t),
13438                                   "use %<%T::%D%> instead",
13439                                   current_class_name, function);
13440                       }
13441                     else
13442                       inform (0, "%q+D declared here, later in the "
13443                                 "translation unit", fn);
13444                     function = unq;
13445                   }
13446               }
13447             if (TREE_CODE (function) == IDENTIFIER_NODE)
13448               {
13449                 unqualified_name_lookup_error (function);
13450                 release_tree_vector (call_args);
13451                 return error_mark_node;
13452               }
13453           }
13454
13455         /* Remember that there was a reference to this entity.  */
13456         if (DECL_P (function))
13457           mark_used (function);
13458
13459         if (TREE_CODE (function) == OFFSET_REF)
13460           ret = build_offset_ref_call_from_tree (function, &call_args);
13461         else if (TREE_CODE (function) == COMPONENT_REF)
13462           {
13463             tree instance = TREE_OPERAND (function, 0);
13464             tree fn = TREE_OPERAND (function, 1);
13465
13466             if (processing_template_decl
13467                 && (type_dependent_expression_p (instance)
13468                     || (!BASELINK_P (fn)
13469                         && TREE_CODE (fn) != FIELD_DECL)
13470                     || type_dependent_expression_p (fn)
13471                     || any_type_dependent_arguments_p (call_args)))
13472               ret = build_nt_call_vec (function, call_args);
13473             else if (!BASELINK_P (fn))
13474               ret = finish_call_expr (function, &call_args,
13475                                        /*disallow_virtual=*/false,
13476                                        /*koenig_p=*/false,
13477                                        complain);
13478             else
13479               ret = (build_new_method_call
13480                       (instance, fn,
13481                        &call_args, NULL_TREE,
13482                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
13483                        /*fn_p=*/NULL,
13484                        complain));
13485           }
13486         else
13487           ret = finish_call_expr (function, &call_args,
13488                                   /*disallow_virtual=*/qualified_p,
13489                                   koenig_p,
13490                                   complain);
13491
13492         release_tree_vector (call_args);
13493
13494         return ret;
13495       }
13496
13497     case COND_EXPR:
13498       return build_x_conditional_expr
13499         (RECUR (TREE_OPERAND (t, 0)),
13500          RECUR (TREE_OPERAND (t, 1)),
13501          RECUR (TREE_OPERAND (t, 2)),
13502          complain);
13503
13504     case PSEUDO_DTOR_EXPR:
13505       return finish_pseudo_destructor_expr
13506         (RECUR (TREE_OPERAND (t, 0)),
13507          RECUR (TREE_OPERAND (t, 1)),
13508          tsubst (TREE_OPERAND (t, 2), args, complain, in_decl));
13509
13510     case TREE_LIST:
13511       {
13512         tree purpose, value, chain;
13513
13514         if (t == void_list_node)
13515           return t;
13516
13517         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
13518             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
13519           {
13520             /* We have pack expansions, so expand those and
13521                create a new list out of it.  */
13522             tree purposevec = NULL_TREE;
13523             tree valuevec = NULL_TREE;
13524             tree chain;
13525             int i, len = -1;
13526
13527             /* Expand the argument expressions.  */
13528             if (TREE_PURPOSE (t))
13529               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
13530                                                  complain, in_decl);
13531             if (TREE_VALUE (t))
13532               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
13533                                                complain, in_decl);
13534
13535             /* Build the rest of the list.  */
13536             chain = TREE_CHAIN (t);
13537             if (chain && chain != void_type_node)
13538               chain = RECUR (chain);
13539
13540             /* Determine the number of arguments.  */
13541             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
13542               {
13543                 len = TREE_VEC_LENGTH (purposevec);
13544                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
13545               }
13546             else if (TREE_CODE (valuevec) == TREE_VEC)
13547               len = TREE_VEC_LENGTH (valuevec);
13548             else
13549               {
13550                 /* Since we only performed a partial substitution into
13551                    the argument pack, we only return a single list
13552                    node.  */
13553                 if (purposevec == TREE_PURPOSE (t)
13554                     && valuevec == TREE_VALUE (t)
13555                     && chain == TREE_CHAIN (t))
13556                   return t;
13557
13558                 return tree_cons (purposevec, valuevec, chain);
13559               }
13560             
13561             /* Convert the argument vectors into a TREE_LIST */
13562             i = len;
13563             while (i > 0)
13564               {
13565                 /* Grab the Ith values.  */
13566                 i--;
13567                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
13568                                      : NULL_TREE;
13569                 value 
13570                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
13571                              : NULL_TREE;
13572
13573                 /* Build the list (backwards).  */
13574                 chain = tree_cons (purpose, value, chain);
13575               }
13576
13577             return chain;
13578           }
13579
13580         purpose = TREE_PURPOSE (t);
13581         if (purpose)
13582           purpose = RECUR (purpose);
13583         value = TREE_VALUE (t);
13584         if (value)
13585           value = RECUR (value);
13586         chain = TREE_CHAIN (t);
13587         if (chain && chain != void_type_node)
13588           chain = RECUR (chain);
13589         if (purpose == TREE_PURPOSE (t)
13590             && value == TREE_VALUE (t)
13591             && chain == TREE_CHAIN (t))
13592           return t;
13593         return tree_cons (purpose, value, chain);
13594       }
13595
13596     case COMPONENT_REF:
13597       {
13598         tree object;
13599         tree object_type;
13600         tree member;
13601
13602         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
13603                                                      args, complain, in_decl);
13604         /* Remember that there was a reference to this entity.  */
13605         if (DECL_P (object))
13606           mark_used (object);
13607         object_type = TREE_TYPE (object);
13608
13609         member = TREE_OPERAND (t, 1);
13610         if (BASELINK_P (member))
13611           member = tsubst_baselink (member,
13612                                     non_reference (TREE_TYPE (object)),
13613                                     args, complain, in_decl);
13614         else
13615           member = tsubst_copy (member, args, complain, in_decl);
13616         if (member == error_mark_node)
13617           return error_mark_node;
13618
13619         if (object_type && !CLASS_TYPE_P (object_type))
13620           {
13621             if (SCALAR_TYPE_P (object_type))
13622               {
13623                 tree s = NULL_TREE;
13624                 tree dtor = member;
13625
13626                 if (TREE_CODE (dtor) == SCOPE_REF)
13627                   {
13628                     s = TREE_OPERAND (dtor, 0);
13629                     dtor = TREE_OPERAND (dtor, 1);
13630                   }
13631                 if (TREE_CODE (dtor) == BIT_NOT_EXPR)
13632                   {
13633                     dtor = TREE_OPERAND (dtor, 0);
13634                     if (TYPE_P (dtor))
13635                       return finish_pseudo_destructor_expr (object, s, dtor);
13636                   }
13637               }
13638           }
13639         else if (TREE_CODE (member) == SCOPE_REF
13640                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
13641           {
13642             tree tmpl;
13643             tree args;
13644
13645             /* Lookup the template functions now that we know what the
13646                scope is.  */
13647             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
13648             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
13649             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
13650                                             /*is_type_p=*/false,
13651                                             /*complain=*/false);
13652             if (BASELINK_P (member))
13653               {
13654                 BASELINK_FUNCTIONS (member)
13655                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
13656                               args);
13657                 member = (adjust_result_of_qualified_name_lookup
13658                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
13659                            object_type));
13660               }
13661             else
13662               {
13663                 qualified_name_lookup_error (object_type, tmpl, member,
13664                                              input_location);
13665                 return error_mark_node;
13666               }
13667           }
13668         else if (TREE_CODE (member) == SCOPE_REF
13669                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
13670                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
13671           {
13672             if (complain & tf_error)
13673               {
13674                 if (TYPE_P (TREE_OPERAND (member, 0)))
13675                   error ("%qT is not a class or namespace",
13676                          TREE_OPERAND (member, 0));
13677                 else
13678                   error ("%qD is not a class or namespace",
13679                          TREE_OPERAND (member, 0));
13680               }
13681             return error_mark_node;
13682           }
13683         else if (TREE_CODE (member) == FIELD_DECL)
13684           return finish_non_static_data_member (member, object, NULL_TREE);
13685
13686         return finish_class_member_access_expr (object, member,
13687                                                 /*template_p=*/false,
13688                                                 complain);
13689       }
13690
13691     case THROW_EXPR:
13692       return build_throw
13693         (RECUR (TREE_OPERAND (t, 0)));
13694
13695     case CONSTRUCTOR:
13696       {
13697         VEC(constructor_elt,gc) *n;
13698         constructor_elt *ce;
13699         unsigned HOST_WIDE_INT idx;
13700         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
13701         bool process_index_p;
13702         int newlen;
13703         bool need_copy_p = false;
13704         tree r;
13705
13706         if (type == error_mark_node)
13707           return error_mark_node;
13708
13709         /* digest_init will do the wrong thing if we let it.  */
13710         if (type && TYPE_PTRMEMFUNC_P (type))
13711           return t;
13712
13713         /* We do not want to process the index of aggregate
13714            initializers as they are identifier nodes which will be
13715            looked up by digest_init.  */
13716         process_index_p = !(type && MAYBE_CLASS_TYPE_P (type));
13717
13718         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
13719         newlen = VEC_length (constructor_elt, n);
13720         FOR_EACH_VEC_ELT (constructor_elt, n, idx, ce)
13721           {
13722             if (ce->index && process_index_p)
13723               ce->index = RECUR (ce->index);
13724
13725             if (PACK_EXPANSION_P (ce->value))
13726               {
13727                 /* Substitute into the pack expansion.  */
13728                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
13729                                                   in_decl);
13730
13731                 if (ce->value == error_mark_node
13732                     || PACK_EXPANSION_P (ce->value))
13733                   ;
13734                 else if (TREE_VEC_LENGTH (ce->value) == 1)
13735                   /* Just move the argument into place.  */
13736                   ce->value = TREE_VEC_ELT (ce->value, 0);
13737                 else
13738                   {
13739                     /* Update the length of the final CONSTRUCTOR
13740                        arguments vector, and note that we will need to
13741                        copy.*/
13742                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
13743                     need_copy_p = true;
13744                   }
13745               }
13746             else
13747               ce->value = RECUR (ce->value);
13748           }
13749
13750         if (need_copy_p)
13751           {
13752             VEC(constructor_elt,gc) *old_n = n;
13753
13754             n = VEC_alloc (constructor_elt, gc, newlen);
13755             FOR_EACH_VEC_ELT (constructor_elt, old_n, idx, ce)
13756               {
13757                 if (TREE_CODE (ce->value) == TREE_VEC)
13758                   {
13759                     int i, len = TREE_VEC_LENGTH (ce->value);
13760                     for (i = 0; i < len; ++i)
13761                       CONSTRUCTOR_APPEND_ELT (n, 0,
13762                                               TREE_VEC_ELT (ce->value, i));
13763                   }
13764                 else
13765                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
13766               }
13767           }
13768
13769         r = build_constructor (init_list_type_node, n);
13770         CONSTRUCTOR_IS_DIRECT_INIT (r) = CONSTRUCTOR_IS_DIRECT_INIT (t);
13771
13772         if (TREE_HAS_CONSTRUCTOR (t))
13773           return finish_compound_literal (type, r, complain);
13774
13775         TREE_TYPE (r) = type;
13776         return r;
13777       }
13778
13779     case TYPEID_EXPR:
13780       {
13781         tree operand_0 = TREE_OPERAND (t, 0);
13782         if (TYPE_P (operand_0))
13783           {
13784             operand_0 = tsubst (operand_0, args, complain, in_decl);
13785             return get_typeid (operand_0);
13786           }
13787         else
13788           {
13789             operand_0 = RECUR (operand_0);
13790             return build_typeid (operand_0);
13791           }
13792       }
13793
13794     case VAR_DECL:
13795       if (!args)
13796         return t;
13797       /* Fall through */
13798
13799     case PARM_DECL:
13800       {
13801         tree r = tsubst_copy (t, args, complain, in_decl);
13802
13803         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
13804           /* If the original type was a reference, we'll be wrapped in
13805              the appropriate INDIRECT_REF.  */
13806           r = convert_from_reference (r);
13807         return r;
13808       }
13809
13810     case VA_ARG_EXPR:
13811       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
13812                              tsubst (TREE_TYPE (t), args, complain, in_decl));
13813
13814     case OFFSETOF_EXPR:
13815       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
13816
13817     case TRAIT_EXPR:
13818       {
13819         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
13820                                   complain, in_decl);
13821
13822         tree type2 = TRAIT_EXPR_TYPE2 (t);
13823         if (type2)
13824           type2 = tsubst_copy (type2, args, complain, in_decl);
13825         
13826         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
13827       }
13828
13829     case STMT_EXPR:
13830       {
13831         tree old_stmt_expr = cur_stmt_expr;
13832         tree stmt_expr = begin_stmt_expr ();
13833
13834         cur_stmt_expr = stmt_expr;
13835         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
13836                      integral_constant_expression_p);
13837         stmt_expr = finish_stmt_expr (stmt_expr, false);
13838         cur_stmt_expr = old_stmt_expr;
13839
13840         /* If the resulting list of expression statement is empty,
13841            fold it further into void_zero_node.  */
13842         if (empty_expr_stmt_p (stmt_expr))
13843           stmt_expr = void_zero_node;
13844
13845         return stmt_expr;
13846       }
13847
13848     case CONST_DECL:
13849       t = tsubst_copy (t, args, complain, in_decl);
13850       /* As in finish_id_expression, we resolve enumeration constants
13851          to their underlying values.  */
13852       if (TREE_CODE (t) == CONST_DECL)
13853         {
13854           used_types_insert (TREE_TYPE (t));
13855           return DECL_INITIAL (t);
13856         }
13857       return t;
13858
13859     case LAMBDA_EXPR:
13860       {
13861         tree r = build_lambda_expr ();
13862
13863         tree type = tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
13864         TREE_TYPE (r) = type;
13865         CLASSTYPE_LAMBDA_EXPR (type) = r;
13866
13867         LAMBDA_EXPR_LOCATION (r)
13868           = LAMBDA_EXPR_LOCATION (t);
13869         LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r)
13870           = LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (t);
13871         LAMBDA_EXPR_MUTABLE_P (r) = LAMBDA_EXPR_MUTABLE_P (t);
13872         LAMBDA_EXPR_DISCRIMINATOR (r)
13873           = (LAMBDA_EXPR_DISCRIMINATOR (t));
13874         LAMBDA_EXPR_CAPTURE_LIST (r)
13875           = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
13876         LAMBDA_EXPR_EXTRA_SCOPE (r)
13877           = RECUR (LAMBDA_EXPR_EXTRA_SCOPE (t));
13878         gcc_assert (LAMBDA_EXPR_THIS_CAPTURE (t) == NULL_TREE
13879                     && LAMBDA_EXPR_PENDING_PROXIES (t) == NULL);
13880
13881         /* Do this again now that LAMBDA_EXPR_EXTRA_SCOPE is set.  */
13882         determine_visibility (TYPE_NAME (type));
13883         /* Now that we know visibility, instantiate the type so we have a
13884            declaration of the op() for later calls to lambda_function.  */
13885         complete_type (type);
13886
13887         type = tsubst (LAMBDA_EXPR_RETURN_TYPE (t), args, complain, in_decl);
13888         if (type)
13889           apply_lambda_return_type (r, type);
13890
13891         return build_lambda_object (r);
13892       }
13893
13894     case TARGET_EXPR:
13895       /* We can get here for a constant initializer of non-dependent type.
13896          FIXME stop folding in cp_parser_initializer_clause.  */
13897       gcc_assert (TREE_CONSTANT (t));
13898       {
13899         tree r = get_target_expr (RECUR (TARGET_EXPR_INITIAL (t)));
13900         TREE_CONSTANT (r) = true;
13901         return r;
13902       }
13903
13904     default:
13905       /* Handle Objective-C++ constructs, if appropriate.  */
13906       {
13907         tree subst
13908           = objcp_tsubst_copy_and_build (t, args, complain,
13909                                          in_decl, /*function_p=*/false);
13910         if (subst)
13911           return subst;
13912       }
13913       return tsubst_copy (t, args, complain, in_decl);
13914     }
13915
13916 #undef RECUR
13917 }
13918
13919 /* Verify that the instantiated ARGS are valid. For type arguments,
13920    make sure that the type's linkage is ok. For non-type arguments,
13921    make sure they are constants if they are integral or enumerations.
13922    Emit an error under control of COMPLAIN, and return TRUE on error.  */
13923
13924 static bool
13925 check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
13926 {
13927   if (ARGUMENT_PACK_P (t))
13928     {
13929       tree vec = ARGUMENT_PACK_ARGS (t);
13930       int len = TREE_VEC_LENGTH (vec);
13931       bool result = false;
13932       int i;
13933
13934       for (i = 0; i < len; ++i)
13935         if (check_instantiated_arg (tmpl, TREE_VEC_ELT (vec, i), complain))
13936           result = true;
13937       return result;
13938     }
13939   else if (TYPE_P (t))
13940     {
13941       /* [basic.link]: A name with no linkage (notably, the name
13942          of a class or enumeration declared in a local scope)
13943          shall not be used to declare an entity with linkage.
13944          This implies that names with no linkage cannot be used as
13945          template arguments
13946
13947          DR 757 relaxes this restriction for C++0x.  */
13948       tree nt = (cxx_dialect > cxx98 ? NULL_TREE
13949                  : no_linkage_check (t, /*relaxed_p=*/false));
13950
13951       if (nt)
13952         {
13953           /* DR 488 makes use of a type with no linkage cause
13954              type deduction to fail.  */
13955           if (complain & tf_error)
13956             {
13957               if (TYPE_ANONYMOUS_P (nt))
13958                 error ("%qT is/uses anonymous type", t);
13959               else
13960                 error ("template argument for %qD uses local type %qT",
13961                        tmpl, t);
13962             }
13963           return true;
13964         }
13965       /* In order to avoid all sorts of complications, we do not
13966          allow variably-modified types as template arguments.  */
13967       else if (variably_modified_type_p (t, NULL_TREE))
13968         {
13969           if (complain & tf_error)
13970             error ("%qT is a variably modified type", t);
13971           return true;
13972         }
13973     }
13974   /* A non-type argument of integral or enumerated type must be a
13975      constant.  */
13976   else if (TREE_TYPE (t)
13977            && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
13978            && !TREE_CONSTANT (t))
13979     {
13980       if (complain & tf_error)
13981         error ("integral expression %qE is not constant", t);
13982       return true;
13983     }
13984   return false;
13985 }
13986
13987 static bool
13988 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
13989 {
13990   int ix, len = DECL_NTPARMS (tmpl);
13991   bool result = false;
13992
13993   for (ix = 0; ix != len; ix++)
13994     {
13995       if (check_instantiated_arg (tmpl, TREE_VEC_ELT (args, ix), complain))
13996         result = true;
13997     }
13998   if (result && (complain & tf_error))
13999     error ("  trying to instantiate %qD", tmpl);
14000   return result;
14001 }
14002
14003 /* In C++0x, it's possible to have a function template whose type depends
14004    on itself recursively.  This is most obvious with decltype, but can also
14005    occur with enumeration scope (c++/48969).  So we need to catch infinite
14006    recursion and reject the substitution at deduction time; this function
14007    will return error_mark_node for any repeated substitution.
14008
14009    This also catches excessive recursion such as when f<N> depends on
14010    f<N-1> across all integers, and returns error_mark_node for all the
14011    substitutions back up to the initial one.
14012
14013    This is, of course, not reentrant.  */
14014
14015 static tree
14016 deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain)
14017 {
14018   static bool excessive_deduction_depth;
14019   static int deduction_depth;
14020   struct pending_template *old_last_pend = last_pending_template;
14021   struct tinst_level *old_error_tinst = last_error_tinst_level;
14022
14023   tree fntype = TREE_TYPE (fn);
14024   tree tinst;
14025   tree r;
14026
14027   if (excessive_deduction_depth)
14028     return error_mark_node;
14029
14030   tinst = build_tree_list (fn, targs);
14031   if (!push_tinst_level (tinst))
14032     {
14033       excessive_deduction_depth = true;
14034       ggc_free (tinst);
14035       return error_mark_node;
14036     }
14037
14038   input_location = DECL_SOURCE_LOCATION (fn);
14039   ++deduction_depth;
14040   push_deduction_access_scope (fn);
14041   r = tsubst (fntype, targs, complain, NULL_TREE);
14042   pop_deduction_access_scope (fn);
14043   --deduction_depth;
14044
14045   if (excessive_deduction_depth)
14046     {
14047       r = error_mark_node;
14048       if (deduction_depth == 0)
14049         /* Reset once we're all the way out.  */
14050         excessive_deduction_depth = false;
14051     }
14052
14053   pop_tinst_level ();
14054   /* We can't free this if a pending_template entry or last_error_tinst_level
14055      is pointing at it.  */
14056   if (last_pending_template == old_last_pend
14057       && last_error_tinst_level == old_error_tinst)
14058     ggc_free (tinst);
14059   return r;
14060 }
14061
14062 /* Instantiate the indicated variable or function template TMPL with
14063    the template arguments in TARG_PTR.  */
14064
14065 static tree
14066 instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain)
14067 {
14068   tree targ_ptr = orig_args;
14069   tree fndecl;
14070   tree gen_tmpl;
14071   tree spec;
14072   HOST_WIDE_INT saved_processing_template_decl;
14073
14074   if (tmpl == error_mark_node)
14075     return error_mark_node;
14076
14077   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
14078
14079   /* If this function is a clone, handle it specially.  */
14080   if (DECL_CLONED_FUNCTION_P (tmpl))
14081     {
14082       tree spec;
14083       tree clone;
14084
14085       /* Use DECL_ABSTRACT_ORIGIN because only FUNCTION_DECLs have
14086          DECL_CLONED_FUNCTION.  */
14087       spec = instantiate_template (DECL_ABSTRACT_ORIGIN (tmpl),
14088                                    targ_ptr, complain);
14089       if (spec == error_mark_node)
14090         return error_mark_node;
14091
14092       /* Look for the clone.  */
14093       FOR_EACH_CLONE (clone, spec)
14094         if (DECL_NAME (clone) == DECL_NAME (tmpl))
14095           return clone;
14096       /* We should always have found the clone by now.  */
14097       gcc_unreachable ();
14098       return NULL_TREE;
14099     }
14100
14101   /* Check to see if we already have this specialization.  */
14102   gen_tmpl = most_general_template (tmpl);
14103   if (tmpl != gen_tmpl)
14104     /* The TMPL is a partial instantiation.  To get a full set of
14105        arguments we must add the arguments used to perform the
14106        partial instantiation.  */
14107     targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
14108                                             targ_ptr);
14109
14110   /* It would be nice to avoid hashing here and then again in tsubst_decl,
14111      but it doesn't seem to be on the hot path.  */
14112   spec = retrieve_specialization (gen_tmpl, targ_ptr, 0);
14113
14114   gcc_assert (tmpl == gen_tmpl
14115               || ((fndecl = retrieve_specialization (tmpl, orig_args, 0))
14116                   == spec)
14117               || fndecl == NULL_TREE);
14118
14119   if (spec != NULL_TREE)
14120     return spec;
14121
14122   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
14123                                complain))
14124     return error_mark_node;
14125
14126   /* We are building a FUNCTION_DECL, during which the access of its
14127      parameters and return types have to be checked.  However this
14128      FUNCTION_DECL which is the desired context for access checking
14129      is not built yet.  We solve this chicken-and-egg problem by
14130      deferring all checks until we have the FUNCTION_DECL.  */
14131   push_deferring_access_checks (dk_deferred);
14132
14133   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
14134      (because, for example, we have encountered a non-dependent
14135      function call in the body of a template function and must now
14136      determine which of several overloaded functions will be called),
14137      within the instantiation itself we are not processing a
14138      template.  */  
14139   saved_processing_template_decl = processing_template_decl;
14140   processing_template_decl = 0;
14141   /* Substitute template parameters to obtain the specialization.  */
14142   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
14143                    targ_ptr, complain, gen_tmpl);
14144   processing_template_decl = saved_processing_template_decl;
14145   if (fndecl == error_mark_node)
14146     return error_mark_node;
14147
14148   /* Now we know the specialization, compute access previously
14149      deferred.  */
14150   push_access_scope (fndecl);
14151
14152   /* Some typedefs referenced from within the template code need to be access
14153      checked at template instantiation time, i.e now. These types were
14154      added to the template at parsing time. Let's get those and perfom
14155      the acces checks then.  */
14156   perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr);
14157   perform_deferred_access_checks ();
14158   pop_access_scope (fndecl);
14159   pop_deferring_access_checks ();
14160
14161   /* The DECL_TI_TEMPLATE should always be the immediate parent
14162      template, not the most general template.  */
14163   DECL_TI_TEMPLATE (fndecl) = tmpl;
14164
14165   /* If we've just instantiated the main entry point for a function,
14166      instantiate all the alternate entry points as well.  We do this
14167      by cloning the instantiation of the main entry point, not by
14168      instantiating the template clones.  */
14169   if (DECL_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (DECL_CHAIN (gen_tmpl)))
14170     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
14171
14172   return fndecl;
14173 }
14174
14175 /* Wrapper for instantiate_template_1.  */
14176
14177 tree
14178 instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain)
14179 {
14180   tree ret;
14181   timevar_push (TV_TEMPLATE_INST);
14182   ret = instantiate_template_1 (tmpl, orig_args,  complain);
14183   timevar_pop (TV_TEMPLATE_INST);
14184   return ret;
14185 }
14186
14187 /* We're going to do deduction substitution on the type of TMPL, a function
14188    template.  In C++11 mode, push into that access scope.  In C++03 mode,
14189    disable access checking.  */
14190
14191 static void
14192 push_deduction_access_scope (tree tmpl)
14193 {
14194   if (cxx_dialect >= cxx0x)
14195     {
14196       int ptd = processing_template_decl;
14197       push_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14198       /* Preserve processing_template_decl across push_to_top_level.  */
14199       if (ptd && !processing_template_decl)
14200         ++processing_template_decl;
14201     }
14202   else
14203     push_deferring_access_checks (dk_no_check);
14204 }
14205
14206 /* And pop back out.  */
14207
14208 static void
14209 pop_deduction_access_scope (tree tmpl)
14210 {
14211   if (cxx_dialect >= cxx0x)
14212     pop_access_scope (DECL_TEMPLATE_RESULT (tmpl));
14213   else
14214     pop_deferring_access_checks ();
14215 }
14216
14217 /* The FN is a TEMPLATE_DECL for a function.  ARGS is an array with
14218    NARGS elements of the arguments that are being used when calling
14219    it.  TARGS is a vector into which the deduced template arguments
14220    are placed.
14221
14222    Return zero for success, 2 for an incomplete match that doesn't resolve
14223    all the types, and 1 for complete failure.  An error message will be
14224    printed only for an incomplete match.
14225
14226    If FN is a conversion operator, or we are trying to produce a specific
14227    specialization, RETURN_TYPE is the return type desired.
14228
14229    The EXPLICIT_TARGS are explicit template arguments provided via a
14230    template-id.
14231
14232    The parameter STRICT is one of:
14233
14234    DEDUCE_CALL:
14235      We are deducing arguments for a function call, as in
14236      [temp.deduct.call].
14237
14238    DEDUCE_CONV:
14239      We are deducing arguments for a conversion function, as in
14240      [temp.deduct.conv].
14241
14242    DEDUCE_EXACT:
14243      We are deducing arguments when doing an explicit instantiation
14244      as in [temp.explicit], when determining an explicit specialization
14245      as in [temp.expl.spec], or when taking the address of a function
14246      template, as in [temp.deduct.funcaddr].  */
14247
14248 int
14249 fn_type_unification (tree fn,
14250                      tree explicit_targs,
14251                      tree targs,
14252                      const tree *args,
14253                      unsigned int nargs,
14254                      tree return_type,
14255                      unification_kind_t strict,
14256                      int flags,
14257                      bool explain_p)
14258 {
14259   tree parms;
14260   tree fntype;
14261   int result;
14262   bool incomplete_argument_packs_p = false;
14263
14264   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
14265
14266   fntype = TREE_TYPE (fn);
14267   if (explicit_targs)
14268     {
14269       /* [temp.deduct]
14270
14271          The specified template arguments must match the template
14272          parameters in kind (i.e., type, nontype, template), and there
14273          must not be more arguments than there are parameters;
14274          otherwise type deduction fails.
14275
14276          Nontype arguments must match the types of the corresponding
14277          nontype template parameters, or must be convertible to the
14278          types of the corresponding nontype parameters as specified in
14279          _temp.arg.nontype_, otherwise type deduction fails.
14280
14281          All references in the function type of the function template
14282          to the corresponding template parameters are replaced by the
14283          specified template argument values.  If a substitution in a
14284          template parameter or in the function type of the function
14285          template results in an invalid type, type deduction fails.  */
14286       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
14287       int i, len = TREE_VEC_LENGTH (tparms);
14288       tree converted_args;
14289       bool incomplete = false;
14290
14291       if (explicit_targs == error_mark_node)
14292         return unify_invalid (explain_p);
14293
14294       converted_args
14295         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE,
14296                                   (explain_p
14297                                    ? tf_warning_or_error
14298                                    : tf_none),
14299                                    /*require_all_args=*/false,
14300                                    /*use_default_args=*/false));
14301       if (converted_args == error_mark_node)
14302         return 1;
14303
14304       /* Substitute the explicit args into the function type.  This is
14305          necessary so that, for instance, explicitly declared function
14306          arguments can match null pointed constants.  If we were given
14307          an incomplete set of explicit args, we must not do semantic
14308          processing during substitution as we could create partial
14309          instantiations.  */
14310       for (i = 0; i < len; i++)
14311         {
14312           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14313           bool parameter_pack = false;
14314
14315           /* Dig out the actual parm.  */
14316           if (TREE_CODE (parm) == TYPE_DECL
14317               || TREE_CODE (parm) == TEMPLATE_DECL)
14318             {
14319               parm = TREE_TYPE (parm);
14320               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
14321             }
14322           else if (TREE_CODE (parm) == PARM_DECL)
14323             {
14324               parm = DECL_INITIAL (parm);
14325               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
14326             }
14327
14328           if (parameter_pack)
14329             {
14330               int level, idx;
14331               tree targ;
14332               template_parm_level_and_index (parm, &level, &idx);
14333
14334               /* Mark the argument pack as "incomplete". We could
14335                  still deduce more arguments during unification.
14336                  We remove this mark in type_unification_real.  */
14337               targ = TMPL_ARG (converted_args, level, idx);
14338               if (targ)
14339                 {
14340                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
14341                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
14342                     = ARGUMENT_PACK_ARGS (targ);
14343                 }
14344
14345               /* We have some incomplete argument packs.  */
14346               incomplete_argument_packs_p = true;
14347             }
14348         }
14349
14350       if (incomplete_argument_packs_p)
14351         /* Any substitution is guaranteed to be incomplete if there
14352            are incomplete argument packs, because we can still deduce
14353            more arguments.  */
14354         incomplete = 1;
14355       else
14356         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
14357
14358       processing_template_decl += incomplete;
14359       fntype = deduction_tsubst_fntype (fn, converted_args,
14360                                         (explain_p
14361                                          ? tf_warning_or_error
14362                                          : tf_none));
14363       processing_template_decl -= incomplete;
14364
14365       if (fntype == error_mark_node)
14366         return 1;
14367
14368       /* Place the explicitly specified arguments in TARGS.  */
14369       for (i = NUM_TMPL_ARGS (converted_args); i--;)
14370         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
14371     }
14372
14373   /* Never do unification on the 'this' parameter.  */
14374   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
14375
14376   if (return_type)
14377     {
14378       tree *new_args;
14379
14380       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
14381       new_args = XALLOCAVEC (tree, nargs + 1);
14382       new_args[0] = return_type;
14383       memcpy (new_args + 1, args, nargs * sizeof (tree));
14384       args = new_args;
14385       ++nargs;
14386     }
14387
14388   /* We allow incomplete unification without an error message here
14389      because the standard doesn't seem to explicitly prohibit it.  Our
14390      callers must be ready to deal with unification failures in any
14391      event.  */
14392   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
14393                                   targs, parms, args, nargs, /*subr=*/0,
14394                                   strict, flags, explain_p);
14395
14396   /* Now that we have bindings for all of the template arguments,
14397      ensure that the arguments deduced for the template template
14398      parameters have compatible template parameter lists.  We cannot
14399      check this property before we have deduced all template
14400      arguments, because the template parameter types of a template
14401      template parameter might depend on prior template parameters
14402      deduced after the template template parameter.  The following
14403      ill-formed example illustrates this issue:
14404
14405        template<typename T, template<T> class C> void f(C<5>, T);
14406
14407        template<int N> struct X {};
14408
14409        void g() {
14410          f(X<5>(), 5l); // error: template argument deduction fails
14411        }
14412
14413      The template parameter list of 'C' depends on the template type
14414      parameter 'T', but 'C' is deduced to 'X' before 'T' is deduced to
14415      'long'.  Thus, we can't check that 'C' cannot bind to 'X' at the
14416      time that we deduce 'C'.  */
14417   if (result == 0
14418       && !template_template_parm_bindings_ok_p 
14419            (DECL_INNERMOST_TEMPLATE_PARMS (fn), targs))
14420     return unify_inconsistent_template_template_parameters (explain_p);
14421
14422   if (result == 0)
14423     /* All is well so far.  Now, check:
14424
14425        [temp.deduct]
14426
14427        When all template arguments have been deduced, all uses of
14428        template parameters in nondeduced contexts are replaced with
14429        the corresponding deduced argument values.  If the
14430        substitution results in an invalid type, as described above,
14431        type deduction fails.  */
14432     {
14433       tree substed = deduction_tsubst_fntype (fn, targs,
14434                                               (explain_p
14435                                                ? tf_warning_or_error
14436                                                : tf_none));
14437       if (substed == error_mark_node)
14438         return 1;
14439
14440       /* If we're looking for an exact match, check that what we got
14441          is indeed an exact match.  It might not be if some template
14442          parameters are used in non-deduced contexts.  */
14443       if (strict == DEDUCE_EXACT)
14444         {
14445           unsigned int i;
14446
14447           tree sarg
14448             = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (substed));
14449           if (return_type)
14450             sarg = tree_cons (NULL_TREE, TREE_TYPE (substed), sarg);
14451           for (i = 0; i < nargs && sarg; ++i, sarg = TREE_CHAIN (sarg))
14452             if (!same_type_p (args[i], TREE_VALUE (sarg)))
14453               return unify_type_mismatch (explain_p, args[i],
14454                                           TREE_VALUE (sarg));
14455         }
14456     }
14457
14458   return result;
14459 }
14460
14461 /* Adjust types before performing type deduction, as described in
14462    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
14463    sections are symmetric.  PARM is the type of a function parameter
14464    or the return type of the conversion function.  ARG is the type of
14465    the argument passed to the call, or the type of the value
14466    initialized with the result of the conversion function.
14467    ARG_EXPR is the original argument expression, which may be null.  */
14468
14469 static int
14470 maybe_adjust_types_for_deduction (unification_kind_t strict,
14471                                   tree* parm,
14472                                   tree* arg,
14473                                   tree arg_expr)
14474 {
14475   int result = 0;
14476
14477   switch (strict)
14478     {
14479     case DEDUCE_CALL:
14480       break;
14481
14482     case DEDUCE_CONV:
14483       {
14484         /* Swap PARM and ARG throughout the remainder of this
14485            function; the handling is precisely symmetric since PARM
14486            will initialize ARG rather than vice versa.  */
14487         tree* temp = parm;
14488         parm = arg;
14489         arg = temp;
14490         break;
14491       }
14492
14493     case DEDUCE_EXACT:
14494       /* Core issue #873: Do the DR606 thing (see below) for these cases,
14495          too, but here handle it by stripping the reference from PARM
14496          rather than by adding it to ARG.  */
14497       if (TREE_CODE (*parm) == REFERENCE_TYPE
14498           && TYPE_REF_IS_RVALUE (*parm)
14499           && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14500           && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14501           && TREE_CODE (*arg) == REFERENCE_TYPE
14502           && !TYPE_REF_IS_RVALUE (*arg))
14503         *parm = TREE_TYPE (*parm);
14504       /* Nothing else to do in this case.  */
14505       return 0;
14506
14507     default:
14508       gcc_unreachable ();
14509     }
14510
14511   if (TREE_CODE (*parm) != REFERENCE_TYPE)
14512     {
14513       /* [temp.deduct.call]
14514
14515          If P is not a reference type:
14516
14517          --If A is an array type, the pointer type produced by the
14518          array-to-pointer standard conversion (_conv.array_) is
14519          used in place of A for type deduction; otherwise,
14520
14521          --If A is a function type, the pointer type produced by
14522          the function-to-pointer standard conversion
14523          (_conv.func_) is used in place of A for type deduction;
14524          otherwise,
14525
14526          --If A is a cv-qualified type, the top level
14527          cv-qualifiers of A's type are ignored for type
14528          deduction.  */
14529       if (TREE_CODE (*arg) == ARRAY_TYPE)
14530         *arg = build_pointer_type (TREE_TYPE (*arg));
14531       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
14532         *arg = build_pointer_type (*arg);
14533       else
14534         *arg = TYPE_MAIN_VARIANT (*arg);
14535     }
14536
14537   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
14538      of the form T&&, where T is a template parameter, and the argument
14539      is an lvalue, T is deduced as A& */
14540   if (TREE_CODE (*parm) == REFERENCE_TYPE
14541       && TYPE_REF_IS_RVALUE (*parm)
14542       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
14543       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
14544       && (arg_expr ? real_lvalue_p (arg_expr)
14545           /* try_one_overload doesn't provide an arg_expr, but
14546              functions are always lvalues.  */
14547           : TREE_CODE (*arg) == FUNCTION_TYPE))
14548     *arg = build_reference_type (*arg);
14549
14550   /* [temp.deduct.call]
14551
14552      If P is a cv-qualified type, the top level cv-qualifiers
14553      of P's type are ignored for type deduction.  If P is a
14554      reference type, the type referred to by P is used for
14555      type deduction.  */
14556   *parm = TYPE_MAIN_VARIANT (*parm);
14557   if (TREE_CODE (*parm) == REFERENCE_TYPE)
14558     {
14559       *parm = TREE_TYPE (*parm);
14560       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
14561     }
14562
14563   /* DR 322. For conversion deduction, remove a reference type on parm
14564      too (which has been swapped into ARG).  */
14565   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
14566     *arg = TREE_TYPE (*arg);
14567
14568   return result;
14569 }
14570
14571 /* Most parms like fn_type_unification.
14572
14573    If SUBR is 1, we're being called recursively (to unify the
14574    arguments of a function or method parameter of a function
14575    template). */
14576
14577 static int
14578 type_unification_real (tree tparms,
14579                        tree targs,
14580                        tree xparms,
14581                        const tree *xargs,
14582                        unsigned int xnargs,
14583                        int subr,
14584                        unification_kind_t strict,
14585                        int flags,
14586                        bool explain_p)
14587 {
14588   tree parm, arg, arg_expr;
14589   int i;
14590   int ntparms = TREE_VEC_LENGTH (tparms);
14591   int sub_strict;
14592   int saw_undeduced = 0;
14593   tree parms;
14594   const tree *args;
14595   unsigned int nargs;
14596   unsigned int ia;
14597
14598   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
14599   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
14600   gcc_assert (ntparms > 0);
14601
14602   /* Reset the number of non-defaulted template arguments contained
14603      in TARGS.  */
14604   NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs) = NULL_TREE;
14605
14606   switch (strict)
14607     {
14608     case DEDUCE_CALL:
14609       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
14610                     | UNIFY_ALLOW_DERIVED);
14611       break;
14612
14613     case DEDUCE_CONV:
14614       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
14615       break;
14616
14617     case DEDUCE_EXACT:
14618       sub_strict = UNIFY_ALLOW_NONE;
14619       break;
14620
14621     default:
14622       gcc_unreachable ();
14623     }
14624
14625  again:
14626   parms = xparms;
14627   args = xargs;
14628   nargs = xnargs;
14629
14630   ia = 0;
14631   while (parms && parms != void_list_node
14632          && ia < nargs)
14633     {
14634       parm = TREE_VALUE (parms);
14635
14636       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION
14637           && (!TREE_CHAIN (parms) || TREE_CHAIN (parms) == void_list_node))
14638         /* For a function parameter pack that occurs at the end of the
14639            parameter-declaration-list, the type A of each remaining
14640            argument of the call is compared with the type P of the
14641            declarator-id of the function parameter pack.  */
14642         break;
14643
14644       parms = TREE_CHAIN (parms);
14645
14646       if (TREE_CODE (parm) == TYPE_PACK_EXPANSION)
14647         /* For a function parameter pack that does not occur at the
14648            end of the parameter-declaration-list, the type of the
14649            parameter pack is a non-deduced context.  */
14650         continue;
14651
14652       arg = args[ia];
14653       ++ia;
14654       arg_expr = NULL;
14655
14656       if (arg == error_mark_node)
14657         return unify_invalid (explain_p);
14658       if (arg == unknown_type_node)
14659         /* We can't deduce anything from this, but we might get all the
14660            template args from other function args.  */
14661         continue;
14662
14663       /* Conversions will be performed on a function argument that
14664          corresponds with a function parameter that contains only
14665          non-deducible template parameters and explicitly specified
14666          template parameters.  */
14667       if (!uses_template_parms (parm))
14668         {
14669           tree type;
14670
14671           if (!TYPE_P (arg))
14672             type = TREE_TYPE (arg);
14673           else
14674             type = arg;
14675
14676           if (same_type_p (parm, type))
14677             continue;
14678           if (strict != DEDUCE_EXACT
14679               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
14680                                   flags))
14681             continue;
14682
14683           if (strict == DEDUCE_EXACT)
14684             return unify_type_mismatch (explain_p, parm, arg);
14685           else
14686             return unify_arg_conversion (explain_p, parm, type, arg);
14687         }
14688
14689       if (!TYPE_P (arg))
14690         {
14691           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
14692           if (type_unknown_p (arg))
14693             {
14694               /* [temp.deduct.type] 
14695
14696                  A template-argument can be deduced from a pointer to
14697                  function or pointer to member function argument if
14698                  the set of overloaded functions does not contain
14699                  function templates and at most one of a set of
14700                  overloaded functions provides a unique match.  */
14701               if (resolve_overloaded_unification
14702                   (tparms, targs, parm, arg, strict, sub_strict, explain_p))
14703                 continue;
14704
14705               return unify_overload_resolution_failure (explain_p, arg);
14706             }
14707           arg_expr = arg;
14708           arg = unlowered_expr_type (arg);
14709           if (arg == error_mark_node)
14710             return unify_invalid (explain_p);
14711         }
14712
14713       {
14714         int arg_strict = sub_strict;
14715
14716         if (!subr)
14717           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
14718                                                           arg_expr);
14719
14720         if (arg == init_list_type_node && arg_expr)
14721           arg = arg_expr;
14722         if (unify (tparms, targs, parm, arg, arg_strict, explain_p))
14723           /* If unification failed, the recursive call will have updated
14724              UI appropriately.  */
14725           return 1;
14726       }
14727     }
14728
14729
14730   if (parms 
14731       && parms != void_list_node
14732       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
14733     {
14734       /* Unify the remaining arguments with the pack expansion type.  */
14735       tree argvec;
14736       tree parmvec = make_tree_vec (1);
14737
14738       /* Allocate a TREE_VEC and copy in all of the arguments */ 
14739       argvec = make_tree_vec (nargs - ia);
14740       for (i = 0; ia < nargs; ++ia, ++i)
14741         TREE_VEC_ELT (argvec, i) = args[ia];
14742
14743       /* Copy the parameter into parmvec.  */
14744       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
14745       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
14746                                 /*call_args_p=*/true, /*subr=*/subr, explain_p))
14747         return 1;
14748
14749       /* Advance to the end of the list of parameters.  */
14750       parms = TREE_CHAIN (parms);
14751     }
14752
14753   /* Fail if we've reached the end of the parm list, and more args
14754      are present, and the parm list isn't variadic.  */
14755   if (ia < nargs && parms == void_list_node)
14756     return unify_too_many_arguments (explain_p, nargs, ia);
14757   /* Fail if parms are left and they don't have default values.  */
14758   if (parms && parms != void_list_node
14759       && TREE_PURPOSE (parms) == NULL_TREE)
14760     {
14761       unsigned int count = nargs;
14762       tree p = parms;
14763       while (p && p != void_list_node)
14764         {
14765           count++;
14766           p = TREE_CHAIN (p);
14767         }
14768       return unify_too_few_arguments (explain_p, ia, count);
14769     }
14770
14771   if (!subr)
14772     {
14773       /* Check to see if we need another pass before we start clearing
14774          ARGUMENT_PACK_INCOMPLETE_P.  */
14775       for (i = 0; i < ntparms; i++)
14776         {
14777           tree targ = TREE_VEC_ELT (targs, i);
14778           tree tparm = TREE_VEC_ELT (tparms, i);
14779
14780           if (targ || tparm == error_mark_node)
14781             continue;
14782           tparm = TREE_VALUE (tparm);
14783
14784           /* If this is an undeduced nontype parameter that depends on
14785              a type parameter, try another pass; its type may have been
14786              deduced from a later argument than the one from which
14787              this parameter can be deduced.  */
14788           if (TREE_CODE (tparm) == PARM_DECL
14789               && uses_template_parms (TREE_TYPE (tparm))
14790               && !saw_undeduced++)
14791             goto again;
14792         }
14793
14794       for (i = 0; i < ntparms; i++)
14795         {
14796           tree targ = TREE_VEC_ELT (targs, i);
14797           tree tparm = TREE_VEC_ELT (tparms, i);
14798
14799           /* Clear the "incomplete" flags on all argument packs now so that
14800              substituting them into later default arguments works.  */
14801           if (targ && ARGUMENT_PACK_P (targ))
14802             {
14803               ARGUMENT_PACK_INCOMPLETE_P (targ) = 0;
14804               ARGUMENT_PACK_EXPLICIT_ARGS (targ) = NULL_TREE;
14805             }
14806
14807           if (targ || tparm == error_mark_node)
14808             continue;
14809           tparm = TREE_VALUE (tparm);
14810
14811           /* Core issue #226 (C++0x) [temp.deduct]:
14812
14813              If a template argument has not been deduced, its
14814              default template argument, if any, is used. 
14815
14816              When we are in C++98 mode, TREE_PURPOSE will either
14817              be NULL_TREE or ERROR_MARK_NODE, so we do not need
14818              to explicitly check cxx_dialect here.  */
14819           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
14820             {
14821               tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
14822               tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
14823               arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
14824               arg = convert_template_argument (parm, arg, targs,
14825                                                (explain_p
14826                                                 ? tf_warning_or_error
14827                                                 : tf_none),
14828                                                i, NULL_TREE);
14829               if (arg == error_mark_node)
14830                 return 1;
14831               else
14832                 {
14833                   TREE_VEC_ELT (targs, i) = arg;
14834                   /* The position of the first default template argument,
14835                      is also the number of non-defaulted arguments in TARGS.
14836                      Record that.  */
14837                   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14838                     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, i);
14839                   continue;
14840                 }
14841             }
14842
14843           /* If the type parameter is a parameter pack, then it will
14844              be deduced to an empty parameter pack.  */
14845           if (template_parameter_pack_p (tparm))
14846             {
14847               tree arg;
14848
14849               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
14850                 {
14851                   arg = make_node (NONTYPE_ARGUMENT_PACK);
14852                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
14853                   TREE_CONSTANT (arg) = 1;
14854                 }
14855               else
14856                 arg = cxx_make_type (TYPE_ARGUMENT_PACK);
14857
14858               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
14859
14860               TREE_VEC_ELT (targs, i) = arg;
14861               continue;
14862             }
14863
14864           return unify_parameter_deduction_failure (explain_p, tparm);
14865         }
14866     }
14867 #ifdef ENABLE_CHECKING
14868   if (!NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs))
14869     SET_NON_DEFAULT_TEMPLATE_ARGS_COUNT (targs, TREE_VEC_LENGTH (targs));
14870 #endif
14871
14872   return unify_success (explain_p);
14873 }
14874
14875 /* Subroutine of type_unification_real.  Args are like the variables
14876    at the call site.  ARG is an overloaded function (or template-id);
14877    we try deducing template args from each of the overloads, and if
14878    only one succeeds, we go with that.  Modifies TARGS and returns
14879    true on success.  */
14880
14881 static bool
14882 resolve_overloaded_unification (tree tparms,
14883                                 tree targs,
14884                                 tree parm,
14885                                 tree arg,
14886                                 unification_kind_t strict,
14887                                 int sub_strict,
14888                                 bool explain_p)
14889 {
14890   tree tempargs = copy_node (targs);
14891   int good = 0;
14892   tree goodfn = NULL_TREE;
14893   bool addr_p;
14894
14895   if (TREE_CODE (arg) == ADDR_EXPR)
14896     {
14897       arg = TREE_OPERAND (arg, 0);
14898       addr_p = true;
14899     }
14900   else
14901     addr_p = false;
14902
14903   if (TREE_CODE (arg) == COMPONENT_REF)
14904     /* Handle `&x' where `x' is some static or non-static member
14905        function name.  */
14906     arg = TREE_OPERAND (arg, 1);
14907
14908   if (TREE_CODE (arg) == OFFSET_REF)
14909     arg = TREE_OPERAND (arg, 1);
14910
14911   /* Strip baselink information.  */
14912   if (BASELINK_P (arg))
14913     arg = BASELINK_FUNCTIONS (arg);
14914
14915   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
14916     {
14917       /* If we got some explicit template args, we need to plug them into
14918          the affected templates before we try to unify, in case the
14919          explicit args will completely resolve the templates in question.  */
14920
14921       int ok = 0;
14922       tree expl_subargs = TREE_OPERAND (arg, 1);
14923       arg = TREE_OPERAND (arg, 0);
14924
14925       for (; arg; arg = OVL_NEXT (arg))
14926         {
14927           tree fn = OVL_CURRENT (arg);
14928           tree subargs, elem;
14929
14930           if (TREE_CODE (fn) != TEMPLATE_DECL)
14931             continue;
14932
14933           ++processing_template_decl;
14934           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
14935                                   expl_subargs, /*check_ret=*/false);
14936           if (subargs && !any_dependent_template_arguments_p (subargs))
14937             {
14938               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
14939               if (try_one_overload (tparms, targs, tempargs, parm,
14940                                     elem, strict, sub_strict, addr_p, explain_p)
14941                   && (!goodfn || !decls_match (goodfn, elem)))
14942                 {
14943                   goodfn = elem;
14944                   ++good;
14945                 }
14946             }
14947           else if (subargs)
14948             ++ok;
14949           --processing_template_decl;
14950         }
14951       /* If no templates (or more than one) are fully resolved by the
14952          explicit arguments, this template-id is a non-deduced context; it
14953          could still be OK if we deduce all template arguments for the
14954          enclosing call through other arguments.  */
14955       if (good != 1)
14956         good = ok;
14957     }
14958   else if (TREE_CODE (arg) != OVERLOAD
14959            && TREE_CODE (arg) != FUNCTION_DECL)
14960     /* If ARG is, for example, "(0, &f)" then its type will be unknown
14961        -- but the deduction does not succeed because the expression is
14962        not just the function on its own.  */
14963     return false;
14964   else
14965     for (; arg; arg = OVL_NEXT (arg))
14966       if (try_one_overload (tparms, targs, tempargs, parm,
14967                             TREE_TYPE (OVL_CURRENT (arg)),
14968                             strict, sub_strict, addr_p, explain_p)
14969           && (!goodfn || !decls_match (goodfn, OVL_CURRENT (arg))))
14970         {
14971           goodfn = OVL_CURRENT (arg);
14972           ++good;
14973         }
14974
14975   /* [temp.deduct.type] A template-argument can be deduced from a pointer
14976      to function or pointer to member function argument if the set of
14977      overloaded functions does not contain function templates and at most
14978      one of a set of overloaded functions provides a unique match.
14979
14980      So if we found multiple possibilities, we return success but don't
14981      deduce anything.  */
14982
14983   if (good == 1)
14984     {
14985       int i = TREE_VEC_LENGTH (targs);
14986       for (; i--; )
14987         if (TREE_VEC_ELT (tempargs, i))
14988           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
14989     }
14990   if (good)
14991     return true;
14992
14993   return false;
14994 }
14995
14996 /* Core DR 115: In contexts where deduction is done and fails, or in
14997    contexts where deduction is not done, if a template argument list is
14998    specified and it, along with any default template arguments, identifies
14999    a single function template specialization, then the template-id is an
15000    lvalue for the function template specialization.  */
15001
15002 tree
15003 resolve_nondeduced_context (tree orig_expr)
15004 {
15005   tree expr, offset, baselink;
15006   bool addr;
15007
15008   if (!type_unknown_p (orig_expr))
15009     return orig_expr;
15010
15011   expr = orig_expr;
15012   addr = false;
15013   offset = NULL_TREE;
15014   baselink = NULL_TREE;
15015
15016   if (TREE_CODE (expr) == ADDR_EXPR)
15017     {
15018       expr = TREE_OPERAND (expr, 0);
15019       addr = true;
15020     }
15021   if (TREE_CODE (expr) == OFFSET_REF)
15022     {
15023       offset = expr;
15024       expr = TREE_OPERAND (expr, 1);
15025     }
15026   if (TREE_CODE (expr) == BASELINK)
15027     {
15028       baselink = expr;
15029       expr = BASELINK_FUNCTIONS (expr);
15030     }
15031
15032   if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
15033     {
15034       int good = 0;
15035       tree goodfn = NULL_TREE;
15036
15037       /* If we got some explicit template args, we need to plug them into
15038          the affected templates before we try to unify, in case the
15039          explicit args will completely resolve the templates in question.  */
15040
15041       tree expl_subargs = TREE_OPERAND (expr, 1);
15042       tree arg = TREE_OPERAND (expr, 0);
15043       tree badfn = NULL_TREE;
15044       tree badargs = NULL_TREE;
15045
15046       for (; arg; arg = OVL_NEXT (arg))
15047         {
15048           tree fn = OVL_CURRENT (arg);
15049           tree subargs, elem;
15050
15051           if (TREE_CODE (fn) != TEMPLATE_DECL)
15052             continue;
15053
15054           ++processing_template_decl;
15055           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
15056                                   expl_subargs, /*check_ret=*/false);
15057           if (subargs && !any_dependent_template_arguments_p (subargs))
15058             {
15059               elem = instantiate_template (fn, subargs, tf_none);
15060               if (elem == error_mark_node)
15061                 {
15062                   badfn = fn;
15063                   badargs = subargs;
15064                 }
15065               else if (elem && (!goodfn || !decls_match (goodfn, elem)))
15066                 {
15067                   goodfn = elem;
15068                   ++good;
15069                 }
15070             }
15071           --processing_template_decl;
15072         }
15073       if (good == 1)
15074         {
15075           mark_used (goodfn);
15076           expr = goodfn;
15077           if (baselink)
15078             expr = build_baselink (BASELINK_BINFO (baselink),
15079                                    BASELINK_ACCESS_BINFO (baselink),
15080                                    expr, BASELINK_OPTYPE (baselink));
15081           if (offset)
15082             {
15083               tree base
15084                 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (offset, 0)));
15085               expr = build_offset_ref (base, expr, addr);
15086             }
15087           if (addr)
15088             expr = cp_build_addr_expr (expr, tf_warning_or_error);
15089           return expr;
15090         }
15091       else if (good == 0 && badargs)
15092         /* There were no good options and at least one bad one, so let the
15093            user know what the problem is.  */
15094         instantiate_template (badfn, badargs, tf_warning_or_error);
15095     }
15096   return orig_expr;
15097 }
15098
15099 /* Subroutine of resolve_overloaded_unification; does deduction for a single
15100    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
15101    different overloads deduce different arguments for a given parm.
15102    ADDR_P is true if the expression for which deduction is being
15103    performed was of the form "& fn" rather than simply "fn".
15104
15105    Returns 1 on success.  */
15106
15107 static int
15108 try_one_overload (tree tparms,
15109                   tree orig_targs,
15110                   tree targs,
15111                   tree parm,
15112                   tree arg,
15113                   unification_kind_t strict,
15114                   int sub_strict,
15115                   bool addr_p,
15116                   bool explain_p)
15117 {
15118   int nargs;
15119   tree tempargs;
15120   int i;
15121
15122   /* [temp.deduct.type] A template-argument can be deduced from a pointer
15123      to function or pointer to member function argument if the set of
15124      overloaded functions does not contain function templates and at most
15125      one of a set of overloaded functions provides a unique match.
15126
15127      So if this is a template, just return success.  */
15128
15129   if (uses_template_parms (arg))
15130     return 1;
15131
15132   if (TREE_CODE (arg) == METHOD_TYPE)
15133     arg = build_ptrmemfunc_type (build_pointer_type (arg));
15134   else if (addr_p)
15135     arg = build_pointer_type (arg);
15136
15137   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
15138
15139   /* We don't copy orig_targs for this because if we have already deduced
15140      some template args from previous args, unify would complain when we
15141      try to deduce a template parameter for the same argument, even though
15142      there isn't really a conflict.  */
15143   nargs = TREE_VEC_LENGTH (targs);
15144   tempargs = make_tree_vec (nargs);
15145
15146   if (unify (tparms, tempargs, parm, arg, sub_strict, explain_p))
15147     return 0;
15148
15149   /* First make sure we didn't deduce anything that conflicts with
15150      explicitly specified args.  */
15151   for (i = nargs; i--; )
15152     {
15153       tree elt = TREE_VEC_ELT (tempargs, i);
15154       tree oldelt = TREE_VEC_ELT (orig_targs, i);
15155
15156       if (!elt)
15157         /*NOP*/;
15158       else if (uses_template_parms (elt))
15159         /* Since we're unifying against ourselves, we will fill in
15160            template args used in the function parm list with our own
15161            template parms.  Discard them.  */
15162         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
15163       else if (oldelt && !template_args_equal (oldelt, elt))
15164         return 0;
15165     }
15166
15167   for (i = nargs; i--; )
15168     {
15169       tree elt = TREE_VEC_ELT (tempargs, i);
15170
15171       if (elt)
15172         TREE_VEC_ELT (targs, i) = elt;
15173     }
15174
15175   return 1;
15176 }
15177
15178 /* PARM is a template class (perhaps with unbound template
15179    parameters).  ARG is a fully instantiated type.  If ARG can be
15180    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
15181    TARGS are as for unify.  */
15182
15183 static tree
15184 try_class_unification (tree tparms, tree targs, tree parm, tree arg,
15185                        bool explain_p)
15186 {
15187   tree copy_of_targs;
15188
15189   if (!CLASSTYPE_TEMPLATE_INFO (arg)
15190       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
15191           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
15192     return NULL_TREE;
15193
15194   /* We need to make a new template argument vector for the call to
15195      unify.  If we used TARGS, we'd clutter it up with the result of
15196      the attempted unification, even if this class didn't work out.
15197      We also don't want to commit ourselves to all the unifications
15198      we've already done, since unification is supposed to be done on
15199      an argument-by-argument basis.  In other words, consider the
15200      following pathological case:
15201
15202        template <int I, int J, int K>
15203        struct S {};
15204
15205        template <int I, int J>
15206        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
15207
15208        template <int I, int J, int K>
15209        void f(S<I, J, K>, S<I, I, I>);
15210
15211        void g() {
15212          S<0, 0, 0> s0;
15213          S<0, 1, 2> s2;
15214
15215          f(s0, s2);
15216        }
15217
15218      Now, by the time we consider the unification involving `s2', we
15219      already know that we must have `f<0, 0, 0>'.  But, even though
15220      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
15221      because there are two ways to unify base classes of S<0, 1, 2>
15222      with S<I, I, I>.  If we kept the already deduced knowledge, we
15223      would reject the possibility I=1.  */
15224   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
15225
15226   /* If unification failed, we're done.  */
15227   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
15228              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE, explain_p))
15229     return NULL_TREE;
15230
15231   return arg;
15232 }
15233
15234 /* Given a template type PARM and a class type ARG, find the unique
15235    base type in ARG that is an instance of PARM.  We do not examine
15236    ARG itself; only its base-classes.  If there is not exactly one
15237    appropriate base class, return NULL_TREE.  PARM may be the type of
15238    a partial specialization, as well as a plain template type.  Used
15239    by unify.  */
15240
15241 static enum template_base_result
15242 get_template_base (tree tparms, tree targs, tree parm, tree arg,
15243                    bool explain_p, tree *result)
15244 {
15245   tree rval = NULL_TREE;
15246   tree binfo;
15247
15248   gcc_assert (RECORD_OR_UNION_CODE_P (TREE_CODE (arg)));
15249
15250   binfo = TYPE_BINFO (complete_type (arg));
15251   if (!binfo)
15252     {
15253       /* The type could not be completed.  */
15254       *result = NULL_TREE;
15255       return tbr_incomplete_type;
15256     }
15257
15258   /* Walk in inheritance graph order.  The search order is not
15259      important, and this avoids multiple walks of virtual bases.  */
15260   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
15261     {
15262       tree r = try_class_unification (tparms, targs, parm,
15263                                       BINFO_TYPE (binfo), explain_p);
15264
15265       if (r)
15266         {
15267           /* If there is more than one satisfactory baseclass, then:
15268
15269                [temp.deduct.call]
15270
15271               If they yield more than one possible deduced A, the type
15272               deduction fails.
15273
15274              applies.  */
15275           if (rval && !same_type_p (r, rval))
15276             {
15277               *result = NULL_TREE;
15278               return tbr_ambiguous_baseclass;
15279             }
15280
15281           rval = r;
15282         }
15283     }
15284
15285   *result = rval;
15286   return tbr_success;
15287 }
15288
15289 /* Returns the level of DECL, which declares a template parameter.  */
15290
15291 static int
15292 template_decl_level (tree decl)
15293 {
15294   switch (TREE_CODE (decl))
15295     {
15296     case TYPE_DECL:
15297     case TEMPLATE_DECL:
15298       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
15299
15300     case PARM_DECL:
15301       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
15302
15303     default:
15304       gcc_unreachable ();
15305     }
15306   return 0;
15307 }
15308
15309 /* Decide whether ARG can be unified with PARM, considering only the
15310    cv-qualifiers of each type, given STRICT as documented for unify.
15311    Returns nonzero iff the unification is OK on that basis.  */
15312
15313 static int
15314 check_cv_quals_for_unify (int strict, tree arg, tree parm)
15315 {
15316   int arg_quals = cp_type_quals (arg);
15317   int parm_quals = cp_type_quals (parm);
15318
15319   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15320       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15321     {
15322       /*  Although a CVR qualifier is ignored when being applied to a
15323           substituted template parameter ([8.3.2]/1 for example), that
15324           does not allow us to unify "const T" with "int&" because both
15325           types are not of the form "cv-list T" [14.8.2.5 temp.deduct.type].
15326           It is ok when we're allowing additional CV qualifiers
15327           at the outer level [14.8.2.1]/3,1st bullet.  */
15328       if ((TREE_CODE (arg) == REFERENCE_TYPE
15329            || TREE_CODE (arg) == FUNCTION_TYPE
15330            || TREE_CODE (arg) == METHOD_TYPE)
15331           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
15332         return 0;
15333
15334       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
15335           && (parm_quals & TYPE_QUAL_RESTRICT))
15336         return 0;
15337     }
15338
15339   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
15340       && (arg_quals & parm_quals) != parm_quals)
15341     return 0;
15342
15343   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
15344       && (parm_quals & arg_quals) != arg_quals)
15345     return 0;
15346
15347   return 1;
15348 }
15349
15350 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
15351 void 
15352 template_parm_level_and_index (tree parm, int* level, int* index)
15353 {
15354   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15355       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15356       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15357     {
15358       *index = TEMPLATE_TYPE_IDX (parm);
15359       *level = TEMPLATE_TYPE_LEVEL (parm);
15360     }
15361   else
15362     {
15363       *index = TEMPLATE_PARM_IDX (parm);
15364       *level = TEMPLATE_PARM_LEVEL (parm);
15365     }
15366 }
15367
15368 #define RECUR_AND_CHECK_FAILURE(TP, TA, P, A, S, EP)                    \
15369   do {                                                                  \
15370     if (unify (TP, TA, P, A, S, EP))                                    \
15371       return 1;                                                         \
15372   } while (0);
15373
15374 /* Unifies the remaining arguments in PACKED_ARGS with the pack
15375    expansion at the end of PACKED_PARMS. Returns 0 if the type
15376    deduction succeeds, 1 otherwise. STRICT is the same as in
15377    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
15378    call argument list. We'll need to adjust the arguments to make them
15379    types. SUBR tells us if this is from a recursive call to
15380    type_unification_real.  */
15381 static int
15382 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
15383                       tree packed_args, int strict, bool call_args_p,
15384                       bool subr, bool explain_p)
15385 {
15386   tree parm 
15387     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
15388   tree pattern = PACK_EXPANSION_PATTERN (parm);
15389   tree pack, packs = NULL_TREE;
15390   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
15391   int len = TREE_VEC_LENGTH (packed_args);
15392
15393   /* Determine the parameter packs we will be deducing from the
15394      pattern, and record their current deductions.  */
15395   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
15396        pack; pack = TREE_CHAIN (pack))
15397     {
15398       tree parm_pack = TREE_VALUE (pack);
15399       int idx, level;
15400
15401       /* Determine the index and level of this parameter pack.  */
15402       template_parm_level_and_index (parm_pack, &level, &idx);
15403
15404       /* Keep track of the parameter packs and their corresponding
15405          argument packs.  */
15406       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
15407       TREE_TYPE (packs) = make_tree_vec (len - start);
15408     }
15409   
15410   /* Loop through all of the arguments that have not yet been
15411      unified and unify each with the pattern.  */
15412   for (i = start; i < len; i++)
15413     {
15414       tree parm = pattern;
15415
15416       /* For each parameter pack, clear out the deduced value so that
15417          we can deduce it again.  */
15418       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15419         {
15420           int idx, level;
15421           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15422
15423           TMPL_ARG (targs, level, idx) = NULL_TREE;
15424         }
15425
15426       /* Unify the pattern with the current argument.  */
15427       {
15428         tree arg = TREE_VEC_ELT (packed_args, i);
15429         tree arg_expr = NULL_TREE;
15430         int arg_strict = strict;
15431         bool skip_arg_p = false;
15432
15433         if (call_args_p)
15434           {
15435             int sub_strict;
15436
15437             /* This mirrors what we do in type_unification_real.  */
15438             switch (strict)
15439               {
15440               case DEDUCE_CALL:
15441                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
15442                               | UNIFY_ALLOW_MORE_CV_QUAL
15443                               | UNIFY_ALLOW_DERIVED);
15444                 break;
15445                 
15446               case DEDUCE_CONV:
15447                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
15448                 break;
15449                 
15450               case DEDUCE_EXACT:
15451                 sub_strict = UNIFY_ALLOW_NONE;
15452                 break;
15453                 
15454               default:
15455                 gcc_unreachable ();
15456               }
15457
15458             if (!TYPE_P (arg))
15459               {
15460                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
15461                 if (type_unknown_p (arg))
15462                   {
15463                     /* [temp.deduct.type] A template-argument can be
15464                        deduced from a pointer to function or pointer
15465                        to member function argument if the set of
15466                        overloaded functions does not contain function
15467                        templates and at most one of a set of
15468                        overloaded functions provides a unique
15469                        match.  */
15470
15471                     if (resolve_overloaded_unification
15472                         (tparms, targs, parm, arg,
15473                          (unification_kind_t) strict,
15474                          sub_strict, explain_p)
15475                         != 0)
15476                       return 1;
15477                     skip_arg_p = true;
15478                   }
15479
15480                 if (!skip_arg_p)
15481                   {
15482                     arg_expr = arg;
15483                     arg = unlowered_expr_type (arg);
15484                     if (arg == error_mark_node)
15485                       return 1;
15486                   }
15487               }
15488       
15489             arg_strict = sub_strict;
15490
15491             if (!subr)
15492               arg_strict |= 
15493                 maybe_adjust_types_for_deduction ((unification_kind_t) strict,
15494                                                   &parm, &arg, arg_expr);
15495           }
15496
15497         if (!skip_arg_p)
15498           {
15499             /* For deduction from an init-list we need the actual list.  */
15500             if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
15501               arg = arg_expr;
15502             RECUR_AND_CHECK_FAILURE (tparms, targs, parm, arg, arg_strict,
15503                                      explain_p);
15504           }
15505       }
15506
15507       /* For each parameter pack, collect the deduced value.  */
15508       for (pack = packs; pack; pack = TREE_CHAIN (pack))
15509         {
15510           int idx, level;
15511           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15512
15513           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
15514             TMPL_ARG (targs, level, idx);
15515         }
15516     }
15517
15518   /* Verify that the results of unification with the parameter packs
15519      produce results consistent with what we've seen before, and make
15520      the deduced argument packs available.  */
15521   for (pack = packs; pack; pack = TREE_CHAIN (pack))
15522     {
15523       tree old_pack = TREE_VALUE (pack);
15524       tree new_args = TREE_TYPE (pack);
15525       int i, len = TREE_VEC_LENGTH (new_args);
15526       int idx, level;
15527       bool nondeduced_p = false;
15528
15529       /* By default keep the original deduced argument pack.
15530          If necessary, more specific code is going to update the
15531          resulting deduced argument later down in this function.  */
15532       template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
15533       TMPL_ARG (targs, level, idx) = old_pack;
15534
15535       /* If NEW_ARGS contains any NULL_TREE entries, we didn't
15536          actually deduce anything.  */
15537       for (i = 0; i < len && !nondeduced_p; ++i)
15538         if (TREE_VEC_ELT (new_args, i) == NULL_TREE)
15539           nondeduced_p = true;
15540       if (nondeduced_p)
15541         continue;
15542
15543       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
15544         {
15545           /* Prepend the explicit arguments onto NEW_ARGS.  */
15546           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15547           tree old_args = new_args;
15548           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
15549           int len = explicit_len + TREE_VEC_LENGTH (old_args);
15550
15551           /* Copy the explicit arguments.  */
15552           new_args = make_tree_vec (len);
15553           for (i = 0; i < explicit_len; i++)
15554             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
15555
15556           /* Copy the deduced arguments.  */
15557           for (; i < len; i++)
15558             TREE_VEC_ELT (new_args, i) =
15559               TREE_VEC_ELT (old_args, i - explicit_len);
15560         }
15561
15562       if (!old_pack)
15563         {
15564           tree result;
15565           /* Build the deduced *_ARGUMENT_PACK.  */
15566           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
15567             {
15568               result = make_node (NONTYPE_ARGUMENT_PACK);
15569               TREE_TYPE (result) = 
15570                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
15571               TREE_CONSTANT (result) = 1;
15572             }
15573           else
15574             result = cxx_make_type (TYPE_ARGUMENT_PACK);
15575
15576           SET_ARGUMENT_PACK_ARGS (result, new_args);
15577
15578           /* Note the deduced argument packs for this parameter
15579              pack.  */
15580           TMPL_ARG (targs, level, idx) = result;
15581         }
15582       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
15583                && (ARGUMENT_PACK_ARGS (old_pack) 
15584                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
15585         {
15586           /* We only had the explicitly-provided arguments before, but
15587              now we have a complete set of arguments.  */
15588           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
15589
15590           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
15591           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
15592           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
15593         }
15594       else
15595         {
15596           tree bad_old_arg, bad_new_arg;
15597           tree old_args = ARGUMENT_PACK_ARGS (old_pack);
15598
15599           if (!comp_template_args_with_info (old_args, new_args,
15600                                              &bad_old_arg, &bad_new_arg))
15601             /* Inconsistent unification of this parameter pack.  */
15602             return unify_parameter_pack_inconsistent (explain_p,
15603                                                       bad_old_arg,
15604                                                       bad_new_arg);
15605         }
15606     }
15607
15608   return unify_success (explain_p);
15609 }
15610
15611 /* Deduce the value of template parameters.  TPARMS is the (innermost)
15612    set of template parameters to a template.  TARGS is the bindings
15613    for those template parameters, as determined thus far; TARGS may
15614    include template arguments for outer levels of template parameters
15615    as well.  PARM is a parameter to a template function, or a
15616    subcomponent of that parameter; ARG is the corresponding argument.
15617    This function attempts to match PARM with ARG in a manner
15618    consistent with the existing assignments in TARGS.  If more values
15619    are deduced, then TARGS is updated.
15620
15621    Returns 0 if the type deduction succeeds, 1 otherwise.  The
15622    parameter STRICT is a bitwise or of the following flags:
15623
15624      UNIFY_ALLOW_NONE:
15625        Require an exact match between PARM and ARG.
15626      UNIFY_ALLOW_MORE_CV_QUAL:
15627        Allow the deduced ARG to be more cv-qualified (by qualification
15628        conversion) than ARG.
15629      UNIFY_ALLOW_LESS_CV_QUAL:
15630        Allow the deduced ARG to be less cv-qualified than ARG.
15631      UNIFY_ALLOW_DERIVED:
15632        Allow the deduced ARG to be a template base class of ARG,
15633        or a pointer to a template base class of the type pointed to by
15634        ARG.
15635      UNIFY_ALLOW_INTEGER:
15636        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
15637        case for more information.
15638      UNIFY_ALLOW_OUTER_LEVEL:
15639        This is the outermost level of a deduction. Used to determine validity
15640        of qualification conversions. A valid qualification conversion must
15641        have const qualified pointers leading up to the inner type which
15642        requires additional CV quals, except at the outer level, where const
15643        is not required [conv.qual]. It would be normal to set this flag in
15644        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
15645      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
15646        This is the outermost level of a deduction, and PARM can be more CV
15647        qualified at this point.
15648      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
15649        This is the outermost level of a deduction, and PARM can be less CV
15650        qualified at this point.  */
15651
15652 static int
15653 unify (tree tparms, tree targs, tree parm, tree arg, int strict,
15654        bool explain_p)
15655 {
15656   int idx;
15657   tree targ;
15658   tree tparm;
15659   int strict_in = strict;
15660
15661   /* I don't think this will do the right thing with respect to types.
15662      But the only case I've seen it in so far has been array bounds, where
15663      signedness is the only information lost, and I think that will be
15664      okay.  */
15665   while (TREE_CODE (parm) == NOP_EXPR)
15666     parm = TREE_OPERAND (parm, 0);
15667
15668   if (arg == error_mark_node)
15669     return unify_invalid (explain_p);
15670   if (arg == unknown_type_node
15671       || arg == init_list_type_node)
15672     /* We can't deduce anything from this, but we might get all the
15673        template args from other function args.  */
15674     return unify_success (explain_p);
15675
15676   /* If PARM uses template parameters, then we can't bail out here,
15677      even if ARG == PARM, since we won't record unifications for the
15678      template parameters.  We might need them if we're trying to
15679      figure out which of two things is more specialized.  */
15680   if (arg == parm && !uses_template_parms (parm))
15681     return unify_success (explain_p);
15682
15683   /* Handle init lists early, so the rest of the function can assume
15684      we're dealing with a type. */
15685   if (BRACE_ENCLOSED_INITIALIZER_P (arg))
15686     {
15687       tree elt, elttype;
15688       unsigned i;
15689       tree orig_parm = parm;
15690
15691       /* Replace T with std::initializer_list<T> for deduction.  */
15692       if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15693           && flag_deduce_init_list)
15694         parm = listify (parm);
15695
15696       if (!is_std_init_list (parm))
15697         /* We can only deduce from an initializer list argument if the
15698            parameter is std::initializer_list; otherwise this is a
15699            non-deduced context. */
15700         return unify_success (explain_p);
15701
15702       elttype = TREE_VEC_ELT (CLASSTYPE_TI_ARGS (parm), 0);
15703
15704       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg), i, elt)
15705         {
15706           int elt_strict = strict;
15707
15708           if (elt == error_mark_node)
15709             return unify_invalid (explain_p);
15710
15711           if (!BRACE_ENCLOSED_INITIALIZER_P (elt))
15712             {
15713               tree type = TREE_TYPE (elt);
15714               /* It should only be possible to get here for a call.  */
15715               gcc_assert (elt_strict & UNIFY_ALLOW_OUTER_LEVEL);
15716               elt_strict |= maybe_adjust_types_for_deduction
15717                 (DEDUCE_CALL, &elttype, &type, elt);
15718               elt = type;
15719             }
15720
15721           RECUR_AND_CHECK_FAILURE (tparms, targs, elttype, elt, elt_strict,
15722                                    explain_p);
15723         }
15724
15725       /* If the std::initializer_list<T> deduction worked, replace the
15726          deduced A with std::initializer_list<A>.  */
15727       if (orig_parm != parm)
15728         {
15729           idx = TEMPLATE_TYPE_IDX (orig_parm);
15730           targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15731           targ = listify (targ);
15732           TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = targ;
15733         }
15734       return unify_success (explain_p);
15735     }
15736
15737   /* Immediately reject some pairs that won't unify because of
15738      cv-qualification mismatches.  */
15739   if (TREE_CODE (arg) == TREE_CODE (parm)
15740       && TYPE_P (arg)
15741       /* It is the elements of the array which hold the cv quals of an array
15742          type, and the elements might be template type parms. We'll check
15743          when we recurse.  */
15744       && TREE_CODE (arg) != ARRAY_TYPE
15745       /* We check the cv-qualifiers when unifying with template type
15746          parameters below.  We want to allow ARG `const T' to unify with
15747          PARM `T' for example, when computing which of two templates
15748          is more specialized, for example.  */
15749       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
15750       && !check_cv_quals_for_unify (strict_in, arg, parm))
15751     return unify_cv_qual_mismatch (explain_p, parm, arg);
15752
15753   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
15754       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
15755     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
15756   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
15757   strict &= ~UNIFY_ALLOW_DERIVED;
15758   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
15759   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
15760
15761   switch (TREE_CODE (parm))
15762     {
15763     case TYPENAME_TYPE:
15764     case SCOPE_REF:
15765     case UNBOUND_CLASS_TEMPLATE:
15766       /* In a type which contains a nested-name-specifier, template
15767          argument values cannot be deduced for template parameters used
15768          within the nested-name-specifier.  */
15769       return unify_success (explain_p);
15770
15771     case TEMPLATE_TYPE_PARM:
15772     case TEMPLATE_TEMPLATE_PARM:
15773     case BOUND_TEMPLATE_TEMPLATE_PARM:
15774       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15775       if (tparm == error_mark_node)
15776         return unify_invalid (explain_p);
15777
15778       if (TEMPLATE_TYPE_LEVEL (parm)
15779           != template_decl_level (tparm))
15780         /* The PARM is not one we're trying to unify.  Just check
15781            to see if it matches ARG.  */
15782         {
15783           if (TREE_CODE (arg) == TREE_CODE (parm)
15784               && same_type_p (parm, arg))
15785             return unify_success (explain_p);
15786           else
15787             return unify_type_mismatch (explain_p, parm, arg);
15788         }
15789       idx = TEMPLATE_TYPE_IDX (parm);
15790       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15791       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
15792
15793       /* Check for mixed types and values.  */
15794       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
15795            && TREE_CODE (tparm) != TYPE_DECL)
15796           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15797               && TREE_CODE (tparm) != TEMPLATE_DECL))
15798         gcc_unreachable ();
15799
15800       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15801         {
15802           /* ARG must be constructed from a template class or a template
15803              template parameter.  */
15804           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
15805               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
15806             return unify_template_deduction_failure (explain_p, parm, arg);
15807
15808           {
15809             tree parmvec = TYPE_TI_ARGS (parm);
15810             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
15811             tree full_argvec = add_to_template_args (targs, argvec);
15812             tree parm_parms 
15813               = DECL_INNERMOST_TEMPLATE_PARMS
15814                   (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (parm));
15815             int i, len;
15816             int parm_variadic_p = 0;
15817
15818             /* The resolution to DR150 makes clear that default
15819                arguments for an N-argument may not be used to bind T
15820                to a template template parameter with fewer than N
15821                parameters.  It is not safe to permit the binding of
15822                default arguments as an extension, as that may change
15823                the meaning of a conforming program.  Consider:
15824
15825                   struct Dense { static const unsigned int dim = 1; };
15826
15827                   template <template <typename> class View,
15828                             typename Block>
15829                   void operator+(float, View<Block> const&);
15830
15831                   template <typename Block,
15832                             unsigned int Dim = Block::dim>
15833                   struct Lvalue_proxy { operator float() const; };
15834
15835                   void
15836                   test_1d (void) {
15837                     Lvalue_proxy<Dense> p;
15838                     float b;
15839                     b + p;
15840                   }
15841
15842               Here, if Lvalue_proxy is permitted to bind to View, then
15843               the global operator+ will be used; if they are not, the
15844               Lvalue_proxy will be converted to float.  */
15845             if (coerce_template_parms (parm_parms,
15846                                        full_argvec,
15847                                        TYPE_TI_TEMPLATE (parm),
15848                                        (explain_p
15849                                         ? tf_warning_or_error
15850                                         : tf_none),
15851                                        /*require_all_args=*/true,
15852                                        /*use_default_args=*/false)
15853                 == error_mark_node)
15854               return 1;
15855
15856             /* Deduce arguments T, i from TT<T> or TT<i>.
15857                We check each element of PARMVEC and ARGVEC individually
15858                rather than the whole TREE_VEC since they can have
15859                different number of elements.  */
15860
15861             parmvec = expand_template_argument_pack (parmvec);
15862             argvec = expand_template_argument_pack (argvec);
15863
15864             len = TREE_VEC_LENGTH (parmvec);
15865
15866             /* Check if the parameters end in a pack, making them
15867                variadic.  */
15868             if (len > 0
15869                 && PACK_EXPANSION_P (TREE_VEC_ELT (parmvec, len - 1)))
15870               parm_variadic_p = 1;
15871             
15872             if (TREE_VEC_LENGTH (argvec) < len - parm_variadic_p)
15873               return unify_too_few_arguments (explain_p,
15874                                               TREE_VEC_LENGTH (argvec), len);
15875
15876              for (i = 0; i < len - parm_variadic_p; ++i)
15877               {
15878                 RECUR_AND_CHECK_FAILURE (tparms, targs,
15879                                          TREE_VEC_ELT (parmvec, i),
15880                                          TREE_VEC_ELT (argvec, i),
15881                                          UNIFY_ALLOW_NONE, explain_p);
15882               }
15883
15884             if (parm_variadic_p
15885                 && unify_pack_expansion (tparms, targs,
15886                                          parmvec, argvec,
15887                                          UNIFY_ALLOW_NONE,
15888                                          /*call_args_p=*/false,
15889                                          /*subr=*/false, explain_p))
15890               return 1;
15891           }
15892           arg = TYPE_TI_TEMPLATE (arg);
15893
15894           /* Fall through to deduce template name.  */
15895         }
15896
15897       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
15898           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
15899         {
15900           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
15901
15902           /* Simple cases: Value already set, does match or doesn't.  */
15903           if (targ != NULL_TREE && template_args_equal (targ, arg))
15904             return unify_success (explain_p);
15905           else if (targ)
15906             return unify_inconsistency (explain_p, parm, targ, arg);
15907         }
15908       else
15909         {
15910           /* If PARM is `const T' and ARG is only `int', we don't have
15911              a match unless we are allowing additional qualification.
15912              If ARG is `const int' and PARM is just `T' that's OK;
15913              that binds `const int' to `T'.  */
15914           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
15915                                          arg, parm))
15916             return unify_cv_qual_mismatch (explain_p, parm, arg);
15917
15918           /* Consider the case where ARG is `const volatile int' and
15919              PARM is `const T'.  Then, T should be `volatile int'.  */
15920           arg = cp_build_qualified_type_real
15921             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
15922           if (arg == error_mark_node)
15923             return unify_invalid (explain_p);
15924
15925           /* Simple cases: Value already set, does match or doesn't.  */
15926           if (targ != NULL_TREE && same_type_p (targ, arg))
15927             return unify_success (explain_p);
15928           else if (targ)
15929             return unify_inconsistency (explain_p, parm, targ, arg);
15930
15931           /* Make sure that ARG is not a variable-sized array.  (Note
15932              that were talking about variable-sized arrays (like
15933              `int[n]'), rather than arrays of unknown size (like
15934              `int[]').)  We'll get very confused by such a type since
15935              the bound of the array is not constant, and therefore
15936              not mangleable.  Besides, such types are not allowed in
15937              ISO C++, so we can do as we please here.  We do allow
15938              them for 'auto' deduction, since that isn't ABI-exposed.  */
15939           if (!is_auto (parm) && variably_modified_type_p (arg, NULL_TREE))
15940             return unify_vla_arg (explain_p, arg);
15941
15942           /* Strip typedefs as in convert_template_argument.  */
15943           arg = canonicalize_type_argument (arg, tf_none);
15944         }
15945
15946       /* If ARG is a parameter pack or an expansion, we cannot unify
15947          against it unless PARM is also a parameter pack.  */
15948       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
15949           && !template_parameter_pack_p (parm))
15950         return unify_parameter_pack_mismatch (explain_p, parm, arg);
15951
15952       /* If the argument deduction results is a METHOD_TYPE,
15953          then there is a problem.
15954          METHOD_TYPE doesn't map to any real C++ type the result of
15955          the deduction can not be of that type.  */
15956       if (TREE_CODE (arg) == METHOD_TYPE)
15957         return unify_method_type_error (explain_p, arg);
15958
15959       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
15960       return unify_success (explain_p);
15961
15962     case TEMPLATE_PARM_INDEX:
15963       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
15964       if (tparm == error_mark_node)
15965         return unify_invalid (explain_p);
15966
15967       if (TEMPLATE_PARM_LEVEL (parm)
15968           != template_decl_level (tparm))
15969         {
15970           /* The PARM is not one we're trying to unify.  Just check
15971              to see if it matches ARG.  */
15972           int result = !(TREE_CODE (arg) == TREE_CODE (parm)
15973                          && cp_tree_equal (parm, arg));
15974           if (result)
15975             unify_expression_unequal (explain_p, parm, arg);
15976           return result;
15977         }
15978
15979       idx = TEMPLATE_PARM_IDX (parm);
15980       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
15981
15982       if (targ)
15983         {
15984           int x = !cp_tree_equal (targ, arg);
15985           if (x)
15986             unify_inconsistency (explain_p, parm, targ, arg);
15987           return x;
15988         }
15989
15990       /* [temp.deduct.type] If, in the declaration of a function template
15991          with a non-type template-parameter, the non-type
15992          template-parameter is used in an expression in the function
15993          parameter-list and, if the corresponding template-argument is
15994          deduced, the template-argument type shall match the type of the
15995          template-parameter exactly, except that a template-argument
15996          deduced from an array bound may be of any integral type.
15997          The non-type parameter might use already deduced type parameters.  */
15998       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
15999       if (!TREE_TYPE (arg))
16000         /* Template-parameter dependent expression.  Just accept it for now.
16001            It will later be processed in convert_template_argument.  */
16002         ;
16003       else if (same_type_p (TREE_TYPE (arg), tparm))
16004         /* OK */;
16005       else if ((strict & UNIFY_ALLOW_INTEGER)
16006                && (TREE_CODE (tparm) == INTEGER_TYPE
16007                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
16008         /* Convert the ARG to the type of PARM; the deduced non-type
16009            template argument must exactly match the types of the
16010            corresponding parameter.  */
16011         arg = fold (build_nop (tparm, arg));
16012       else if (uses_template_parms (tparm))
16013         /* We haven't deduced the type of this parameter yet.  Try again
16014            later.  */
16015         return unify_success (explain_p);
16016       else
16017         return unify_type_mismatch (explain_p, tparm, arg);
16018
16019       /* If ARG is a parameter pack or an expansion, we cannot unify
16020          against it unless PARM is also a parameter pack.  */
16021       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
16022           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
16023         return unify_parameter_pack_mismatch (explain_p, parm, arg);
16024
16025       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
16026       return unify_success (explain_p);
16027
16028     case PTRMEM_CST:
16029      {
16030         /* A pointer-to-member constant can be unified only with
16031          another constant.  */
16032       if (TREE_CODE (arg) != PTRMEM_CST)
16033         return unify_ptrmem_cst_mismatch (explain_p, parm, arg);
16034
16035       /* Just unify the class member. It would be useless (and possibly
16036          wrong, depending on the strict flags) to unify also
16037          PTRMEM_CST_CLASS, because we want to be sure that both parm and
16038          arg refer to the same variable, even if through different
16039          classes. For instance:
16040
16041          struct A { int x; };
16042          struct B : A { };
16043
16044          Unification of &A::x and &B::x must succeed.  */
16045       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
16046                     PTRMEM_CST_MEMBER (arg), strict, explain_p);
16047      }
16048
16049     case POINTER_TYPE:
16050       {
16051         if (TREE_CODE (arg) != POINTER_TYPE)
16052           return unify_type_mismatch (explain_p, parm, arg);
16053
16054         /* [temp.deduct.call]
16055
16056            A can be another pointer or pointer to member type that can
16057            be converted to the deduced A via a qualification
16058            conversion (_conv.qual_).
16059
16060            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
16061            This will allow for additional cv-qualification of the
16062            pointed-to types if appropriate.  */
16063
16064         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
16065           /* The derived-to-base conversion only persists through one
16066              level of pointers.  */
16067           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
16068
16069         return unify (tparms, targs, TREE_TYPE (parm),
16070                       TREE_TYPE (arg), strict, explain_p);
16071       }
16072
16073     case REFERENCE_TYPE:
16074       if (TREE_CODE (arg) != REFERENCE_TYPE)
16075         return unify_type_mismatch (explain_p, parm, arg);
16076       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16077                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16078
16079     case ARRAY_TYPE:
16080       if (TREE_CODE (arg) != ARRAY_TYPE)
16081         return unify_type_mismatch (explain_p, parm, arg);
16082       if ((TYPE_DOMAIN (parm) == NULL_TREE)
16083           != (TYPE_DOMAIN (arg) == NULL_TREE))
16084         return unify_type_mismatch (explain_p, parm, arg);
16085       if (TYPE_DOMAIN (parm) != NULL_TREE)
16086         {
16087           tree parm_max;
16088           tree arg_max;
16089           bool parm_cst;
16090           bool arg_cst;
16091
16092           /* Our representation of array types uses "N - 1" as the
16093              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
16094              not an integer constant.  We cannot unify arbitrarily
16095              complex expressions, so we eliminate the MINUS_EXPRs
16096              here.  */
16097           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
16098           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
16099           if (!parm_cst)
16100             {
16101               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
16102               parm_max = TREE_OPERAND (parm_max, 0);
16103             }
16104           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
16105           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
16106           if (!arg_cst)
16107             {
16108               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
16109                  trying to unify the type of a variable with the type
16110                  of a template parameter.  For example:
16111
16112                    template <unsigned int N>
16113                    void f (char (&) [N]);
16114                    int g(); 
16115                    void h(int i) {
16116                      char a[g(i)];
16117                      f(a); 
16118                    }
16119
16120                 Here, the type of the ARG will be "int [g(i)]", and
16121                 may be a SAVE_EXPR, etc.  */
16122               if (TREE_CODE (arg_max) != MINUS_EXPR)
16123                 return unify_vla_arg (explain_p, arg);
16124               arg_max = TREE_OPERAND (arg_max, 0);
16125             }
16126
16127           /* If only one of the bounds used a MINUS_EXPR, compensate
16128              by adding one to the other bound.  */
16129           if (parm_cst && !arg_cst)
16130             parm_max = fold_build2_loc (input_location, PLUS_EXPR,
16131                                     integer_type_node,
16132                                     parm_max,
16133                                     integer_one_node);
16134           else if (arg_cst && !parm_cst)
16135             arg_max = fold_build2_loc (input_location, PLUS_EXPR,
16136                                    integer_type_node,
16137                                    arg_max,
16138                                    integer_one_node);
16139
16140           RECUR_AND_CHECK_FAILURE (tparms, targs, parm_max, arg_max,
16141                                    UNIFY_ALLOW_INTEGER, explain_p);
16142         }
16143       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16144                     strict & UNIFY_ALLOW_MORE_CV_QUAL, explain_p);
16145
16146     case REAL_TYPE:
16147     case COMPLEX_TYPE:
16148     case VECTOR_TYPE:
16149     case INTEGER_TYPE:
16150     case BOOLEAN_TYPE:
16151     case ENUMERAL_TYPE:
16152     case VOID_TYPE:
16153       if (TREE_CODE (arg) != TREE_CODE (parm))
16154         return unify_type_mismatch (explain_p, parm, arg);
16155
16156       /* We have already checked cv-qualification at the top of the
16157          function.  */
16158       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
16159         return unify_type_mismatch (explain_p, parm, arg);
16160
16161       /* As far as unification is concerned, this wins.  Later checks
16162          will invalidate it if necessary.  */
16163       return unify_success (explain_p);
16164
16165       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
16166       /* Type INTEGER_CST can come from ordinary constant template args.  */
16167     case INTEGER_CST:
16168       while (TREE_CODE (arg) == NOP_EXPR)
16169         arg = TREE_OPERAND (arg, 0);
16170
16171       if (TREE_CODE (arg) != INTEGER_CST)
16172         return unify_template_argument_mismatch (explain_p, parm, arg);
16173       return (tree_int_cst_equal (parm, arg)
16174               ? unify_success (explain_p)
16175               : unify_template_argument_mismatch (explain_p, parm, arg));
16176
16177     case TREE_VEC:
16178       {
16179         int i;
16180         if (TREE_CODE (arg) != TREE_VEC)
16181           return unify_template_argument_mismatch (explain_p, parm, arg);
16182         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
16183           return unify_arity (explain_p, TREE_VEC_LENGTH (arg),
16184                               TREE_VEC_LENGTH (parm));
16185         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
16186           RECUR_AND_CHECK_FAILURE (tparms, targs,
16187                                    TREE_VEC_ELT (parm, i),
16188                                    TREE_VEC_ELT (arg, i),
16189                                    UNIFY_ALLOW_NONE, explain_p);
16190         return unify_success (explain_p);
16191       }
16192
16193     case RECORD_TYPE:
16194     case UNION_TYPE:
16195       if (TREE_CODE (arg) != TREE_CODE (parm))
16196         return unify_type_mismatch (explain_p, parm, arg);
16197
16198       if (TYPE_PTRMEMFUNC_P (parm))
16199         {
16200           if (!TYPE_PTRMEMFUNC_P (arg))
16201             return unify_type_mismatch (explain_p, parm, arg);
16202
16203           return unify (tparms, targs,
16204                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
16205                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
16206                         strict, explain_p);
16207         }
16208
16209       if (CLASSTYPE_TEMPLATE_INFO (parm))
16210         {
16211           tree t = NULL_TREE;
16212
16213           if (strict_in & UNIFY_ALLOW_DERIVED)
16214             {
16215               /* First, we try to unify the PARM and ARG directly.  */
16216               t = try_class_unification (tparms, targs,
16217                                          parm, arg, explain_p);
16218
16219               if (!t)
16220                 {
16221                   /* Fallback to the special case allowed in
16222                      [temp.deduct.call]:
16223
16224                        If P is a class, and P has the form
16225                        template-id, then A can be a derived class of
16226                        the deduced A.  Likewise, if P is a pointer to
16227                        a class of the form template-id, A can be a
16228                        pointer to a derived class pointed to by the
16229                        deduced A.  */
16230                   enum template_base_result r;
16231                   r = get_template_base (tparms, targs, parm, arg,
16232                                          explain_p, &t);
16233
16234                   if (!t)
16235                     return unify_no_common_base (explain_p, r, parm, arg);
16236                 }
16237             }
16238           else if (CLASSTYPE_TEMPLATE_INFO (arg)
16239                    && (CLASSTYPE_TI_TEMPLATE (parm)
16240                        == CLASSTYPE_TI_TEMPLATE (arg)))
16241             /* Perhaps PARM is something like S<U> and ARG is S<int>.
16242                Then, we should unify `int' and `U'.  */
16243             t = arg;
16244           else
16245             /* There's no chance of unification succeeding.  */
16246             return unify_type_mismatch (explain_p, parm, arg);
16247
16248           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
16249                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE, explain_p);
16250         }
16251       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
16252         return unify_type_mismatch (explain_p, parm, arg);
16253       return unify_success (explain_p);
16254
16255     case METHOD_TYPE:
16256     case FUNCTION_TYPE:
16257       {
16258         unsigned int nargs;
16259         tree *args;
16260         tree a;
16261         unsigned int i;
16262
16263         if (TREE_CODE (arg) != TREE_CODE (parm))
16264           return unify_type_mismatch (explain_p, parm, arg);
16265
16266         /* CV qualifications for methods can never be deduced, they must
16267            match exactly.  We need to check them explicitly here,
16268            because type_unification_real treats them as any other
16269            cv-qualified parameter.  */
16270         if (TREE_CODE (parm) == METHOD_TYPE
16271             && (!check_cv_quals_for_unify
16272                 (UNIFY_ALLOW_NONE,
16273                  class_of_this_parm (arg),
16274                  class_of_this_parm (parm))))
16275           return unify_cv_qual_mismatch (explain_p, parm, arg);
16276
16277         RECUR_AND_CHECK_FAILURE (tparms, targs, TREE_TYPE (parm),
16278                                  TREE_TYPE (arg), UNIFY_ALLOW_NONE, explain_p);
16279
16280         nargs = list_length (TYPE_ARG_TYPES (arg));
16281         args = XALLOCAVEC (tree, nargs);
16282         for (a = TYPE_ARG_TYPES (arg), i = 0;
16283              a != NULL_TREE && a != void_list_node;
16284              a = TREE_CHAIN (a), ++i)
16285           args[i] = TREE_VALUE (a);
16286         nargs = i;
16287
16288         return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
16289                                       args, nargs, 1, DEDUCE_EXACT,
16290                                       LOOKUP_NORMAL, explain_p);
16291       }
16292
16293     case OFFSET_TYPE:
16294       /* Unify a pointer to member with a pointer to member function, which
16295          deduces the type of the member as a function type. */
16296       if (TYPE_PTRMEMFUNC_P (arg))
16297         {
16298           tree method_type;
16299           tree fntype;
16300
16301           /* Check top-level cv qualifiers */
16302           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
16303             return unify_cv_qual_mismatch (explain_p, parm, arg);
16304
16305           RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16306                                    TYPE_PTRMEMFUNC_OBJECT_TYPE (arg),
16307                                    UNIFY_ALLOW_NONE, explain_p);
16308
16309           /* Determine the type of the function we are unifying against. */
16310           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
16311           fntype =
16312             build_function_type (TREE_TYPE (method_type),
16313                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
16314
16315           /* Extract the cv-qualifiers of the member function from the
16316              implicit object parameter and place them on the function
16317              type to be restored later. */
16318           fntype = apply_memfn_quals (fntype, type_memfn_quals (method_type));
16319           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict, explain_p);
16320         }
16321
16322       if (TREE_CODE (arg) != OFFSET_TYPE)
16323         return unify_type_mismatch (explain_p, parm, arg);
16324       RECUR_AND_CHECK_FAILURE (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
16325                                TYPE_OFFSET_BASETYPE (arg),
16326                                UNIFY_ALLOW_NONE, explain_p);
16327       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
16328                     strict, explain_p);
16329
16330     case CONST_DECL:
16331       if (DECL_TEMPLATE_PARM_P (parm))
16332         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict, explain_p);
16333       if (arg != integral_constant_value (parm))
16334         return unify_template_argument_mismatch (explain_p, parm, arg);
16335       return unify_success (explain_p);
16336
16337     case FIELD_DECL:
16338     case TEMPLATE_DECL:
16339       /* Matched cases are handled by the ARG == PARM test above.  */
16340       return unify_template_argument_mismatch (explain_p, parm, arg);
16341
16342     case VAR_DECL:
16343       /* A non-type template parameter that is a variable should be a
16344          an integral constant, in which case, it whould have been
16345          folded into its (constant) value. So we should not be getting
16346          a variable here.  */
16347       gcc_unreachable ();
16348
16349     case TYPE_ARGUMENT_PACK:
16350     case NONTYPE_ARGUMENT_PACK:
16351       {
16352         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
16353         tree packed_args = ARGUMENT_PACK_ARGS (arg);
16354         int i, len = TREE_VEC_LENGTH (packed_parms);
16355         int argslen = TREE_VEC_LENGTH (packed_args);
16356         int parm_variadic_p = 0;
16357
16358         for (i = 0; i < len; ++i)
16359           {
16360             if (PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, i)))
16361               {
16362                 if (i == len - 1)
16363                   /* We can unify against something with a trailing
16364                      parameter pack.  */
16365                   parm_variadic_p = 1;
16366                 else
16367                   /* Since there is something following the pack
16368                      expansion, we cannot unify this template argument
16369                      list.  */
16370                   return unify_success (explain_p);
16371               }
16372           }
16373           
16374
16375         /* If we don't have enough arguments to satisfy the parameters
16376            (not counting the pack expression at the end), or we have
16377            too many arguments for a parameter list that doesn't end in
16378            a pack expression, we can't unify.  */
16379         if (argslen < (len - parm_variadic_p))
16380           return unify_too_few_arguments (explain_p, argslen, len);
16381         if (argslen > len && !parm_variadic_p)
16382           return unify_too_many_arguments (explain_p, argslen, len);
16383
16384         /* Unify all of the parameters that precede the (optional)
16385            pack expression.  */
16386         for (i = 0; i < len - parm_variadic_p; ++i)
16387           {
16388             RECUR_AND_CHECK_FAILURE (tparms, targs,
16389                                      TREE_VEC_ELT (packed_parms, i),
16390                                      TREE_VEC_ELT (packed_args, i),
16391                                      strict, explain_p);
16392           }
16393
16394         if (parm_variadic_p)
16395           return unify_pack_expansion (tparms, targs, 
16396                                        packed_parms, packed_args,
16397                                        strict, /*call_args_p=*/false,
16398                                        /*subr=*/false, explain_p);
16399         return unify_success (explain_p);
16400       }
16401
16402       break;
16403
16404     case TYPEOF_TYPE:
16405     case DECLTYPE_TYPE:
16406     case UNDERLYING_TYPE:
16407       /* Cannot deduce anything from TYPEOF_TYPE, DECLTYPE_TYPE,
16408          or UNDERLYING_TYPE nodes.  */
16409       return unify_success (explain_p);
16410
16411     case ERROR_MARK:
16412       /* Unification fails if we hit an error node.  */
16413       return unify_invalid (explain_p);
16414
16415     default:
16416       /* An unresolved overload is a nondeduced context.  */
16417       if (type_unknown_p (parm))
16418         return unify_success (explain_p);
16419       gcc_assert (EXPR_P (parm));
16420
16421       /* We must be looking at an expression.  This can happen with
16422          something like:
16423
16424            template <int I>
16425            void foo(S<I>, S<I + 2>);
16426
16427          This is a "nondeduced context":
16428
16429            [deduct.type]
16430
16431            The nondeduced contexts are:
16432
16433            --A type that is a template-id in which one or more of
16434              the template-arguments is an expression that references
16435              a template-parameter.
16436
16437          In these cases, we assume deduction succeeded, but don't
16438          actually infer any unifications.  */
16439
16440       if (!uses_template_parms (parm)
16441           && !template_args_equal (parm, arg))
16442         return unify_expression_unequal (explain_p, parm, arg);
16443       else
16444         return unify_success (explain_p);
16445     }
16446 }
16447 #undef RECUR_AND_CHECK_FAILURE
16448 \f
16449 /* Note that DECL can be defined in this translation unit, if
16450    required.  */
16451
16452 static void
16453 mark_definable (tree decl)
16454 {
16455   tree clone;
16456   DECL_NOT_REALLY_EXTERN (decl) = 1;
16457   FOR_EACH_CLONE (clone, decl)
16458     DECL_NOT_REALLY_EXTERN (clone) = 1;
16459 }
16460
16461 /* Called if RESULT is explicitly instantiated, or is a member of an
16462    explicitly instantiated class.  */
16463
16464 void
16465 mark_decl_instantiated (tree result, int extern_p)
16466 {
16467   SET_DECL_EXPLICIT_INSTANTIATION (result);
16468
16469   /* If this entity has already been written out, it's too late to
16470      make any modifications.  */
16471   if (TREE_ASM_WRITTEN (result))
16472     return;
16473
16474   if (TREE_CODE (result) != FUNCTION_DECL)
16475     /* The TREE_PUBLIC flag for function declarations will have been
16476        set correctly by tsubst.  */
16477     TREE_PUBLIC (result) = 1;
16478
16479   /* This might have been set by an earlier implicit instantiation.  */
16480   DECL_COMDAT (result) = 0;
16481
16482   if (extern_p)
16483     DECL_NOT_REALLY_EXTERN (result) = 0;
16484   else
16485     {
16486       mark_definable (result);
16487       /* Always make artificials weak.  */
16488       if (DECL_ARTIFICIAL (result) && flag_weak)
16489         comdat_linkage (result);
16490       /* For WIN32 we also want to put explicit instantiations in
16491          linkonce sections.  */
16492       else if (TREE_PUBLIC (result))
16493         maybe_make_one_only (result);
16494     }
16495
16496   /* If EXTERN_P, then this function will not be emitted -- unless
16497      followed by an explicit instantiation, at which point its linkage
16498      will be adjusted.  If !EXTERN_P, then this function will be
16499      emitted here.  In neither circumstance do we want
16500      import_export_decl to adjust the linkage.  */
16501   DECL_INTERFACE_KNOWN (result) = 1;
16502 }
16503
16504 /* Subroutine of more_specialized_fn: check whether TARGS is missing any
16505    important template arguments.  If any are missing, we check whether
16506    they're important by using error_mark_node for substituting into any
16507    args that were used for partial ordering (the ones between ARGS and END)
16508    and seeing if it bubbles up.  */
16509
16510 static bool
16511 check_undeduced_parms (tree targs, tree args, tree end)
16512 {
16513   bool found = false;
16514   int i;
16515   for (i = TREE_VEC_LENGTH (targs) - 1; i >= 0; --i)
16516     if (TREE_VEC_ELT (targs, i) == NULL_TREE)
16517       {
16518         found = true;
16519         TREE_VEC_ELT (targs, i) = error_mark_node;
16520       }
16521   if (found)
16522     {
16523       for (; args != end; args = TREE_CHAIN (args))
16524         {
16525           tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
16526           if (substed == error_mark_node)
16527             return true;
16528         }
16529     }
16530   return false;
16531 }
16532
16533 /* Given two function templates PAT1 and PAT2, return:
16534
16535    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
16536    -1 if PAT2 is more specialized than PAT1.
16537    0 if neither is more specialized.
16538
16539    LEN indicates the number of parameters we should consider
16540    (defaulted parameters should not be considered).
16541
16542    The 1998 std underspecified function template partial ordering, and
16543    DR214 addresses the issue.  We take pairs of arguments, one from
16544    each of the templates, and deduce them against each other.  One of
16545    the templates will be more specialized if all the *other*
16546    template's arguments deduce against its arguments and at least one
16547    of its arguments *does* *not* deduce against the other template's
16548    corresponding argument.  Deduction is done as for class templates.
16549    The arguments used in deduction have reference and top level cv
16550    qualifiers removed.  Iff both arguments were originally reference
16551    types *and* deduction succeeds in both directions, the template
16552    with the more cv-qualified argument wins for that pairing (if
16553    neither is more cv-qualified, they both are equal).  Unlike regular
16554    deduction, after all the arguments have been deduced in this way,
16555    we do *not* verify the deduced template argument values can be
16556    substituted into non-deduced contexts.
16557
16558    The logic can be a bit confusing here, because we look at deduce1 and
16559    targs1 to see if pat2 is at least as specialized, and vice versa; if we
16560    can find template arguments for pat1 to make arg1 look like arg2, that
16561    means that arg2 is at least as specialized as arg1.  */
16562
16563 int
16564 more_specialized_fn (tree pat1, tree pat2, int len)
16565 {
16566   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
16567   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
16568   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
16569   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
16570   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
16571   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
16572   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
16573   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
16574   tree origs1, origs2;
16575   bool lose1 = false;
16576   bool lose2 = false;
16577
16578   /* Remove the this parameter from non-static member functions.  If
16579      one is a non-static member function and the other is not a static
16580      member function, remove the first parameter from that function
16581      also.  This situation occurs for operator functions where we
16582      locate both a member function (with this pointer) and non-member
16583      operator (with explicit first operand).  */
16584   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
16585     {
16586       len--; /* LEN is the number of significant arguments for DECL1 */
16587       args1 = TREE_CHAIN (args1);
16588       if (!DECL_STATIC_FUNCTION_P (decl2))
16589         args2 = TREE_CHAIN (args2);
16590     }
16591   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
16592     {
16593       args2 = TREE_CHAIN (args2);
16594       if (!DECL_STATIC_FUNCTION_P (decl1))
16595         {
16596           len--;
16597           args1 = TREE_CHAIN (args1);
16598         }
16599     }
16600
16601   /* If only one is a conversion operator, they are unordered.  */
16602   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
16603     return 0;
16604
16605   /* Consider the return type for a conversion function */
16606   if (DECL_CONV_FN_P (decl1))
16607     {
16608       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
16609       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
16610       len++;
16611     }
16612
16613   processing_template_decl++;
16614
16615   origs1 = args1;
16616   origs2 = args2;
16617
16618   while (len--
16619          /* Stop when an ellipsis is seen.  */
16620          && args1 != NULL_TREE && args2 != NULL_TREE)
16621     {
16622       tree arg1 = TREE_VALUE (args1);
16623       tree arg2 = TREE_VALUE (args2);
16624       int deduce1, deduce2;
16625       int quals1 = -1;
16626       int quals2 = -1;
16627
16628       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16629           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16630         {
16631           /* When both arguments are pack expansions, we need only
16632              unify the patterns themselves.  */
16633           arg1 = PACK_EXPANSION_PATTERN (arg1);
16634           arg2 = PACK_EXPANSION_PATTERN (arg2);
16635
16636           /* This is the last comparison we need to do.  */
16637           len = 0;
16638         }
16639
16640       if (TREE_CODE (arg1) == REFERENCE_TYPE)
16641         {
16642           arg1 = TREE_TYPE (arg1);
16643           quals1 = cp_type_quals (arg1);
16644         }
16645
16646       if (TREE_CODE (arg2) == REFERENCE_TYPE)
16647         {
16648           arg2 = TREE_TYPE (arg2);
16649           quals2 = cp_type_quals (arg2);
16650         }
16651
16652       if ((quals1 < 0) != (quals2 < 0))
16653         {
16654           /* Only of the args is a reference, see if we should apply
16655              array/function pointer decay to it.  This is not part of
16656              DR214, but is, IMHO, consistent with the deduction rules
16657              for the function call itself, and with our earlier
16658              implementation of the underspecified partial ordering
16659              rules.  (nathan).  */
16660           if (quals1 >= 0)
16661             {
16662               switch (TREE_CODE (arg1))
16663                 {
16664                 case ARRAY_TYPE:
16665                   arg1 = TREE_TYPE (arg1);
16666                   /* FALLTHROUGH. */
16667                 case FUNCTION_TYPE:
16668                   arg1 = build_pointer_type (arg1);
16669                   break;
16670
16671                 default:
16672                   break;
16673                 }
16674             }
16675           else
16676             {
16677               switch (TREE_CODE (arg2))
16678                 {
16679                 case ARRAY_TYPE:
16680                   arg2 = TREE_TYPE (arg2);
16681                   /* FALLTHROUGH. */
16682                 case FUNCTION_TYPE:
16683                   arg2 = build_pointer_type (arg2);
16684                   break;
16685
16686                 default:
16687                   break;
16688                 }
16689             }
16690         }
16691
16692       arg1 = TYPE_MAIN_VARIANT (arg1);
16693       arg2 = TYPE_MAIN_VARIANT (arg2);
16694
16695       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
16696         {
16697           int i, len2 = list_length (args2);
16698           tree parmvec = make_tree_vec (1);
16699           tree argvec = make_tree_vec (len2);
16700           tree ta = args2;
16701
16702           /* Setup the parameter vector, which contains only ARG1.  */
16703           TREE_VEC_ELT (parmvec, 0) = arg1;
16704
16705           /* Setup the argument vector, which contains the remaining
16706              arguments.  */
16707           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
16708             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16709
16710           deduce1 = (unify_pack_expansion (tparms1, targs1, parmvec,
16711                                            argvec, UNIFY_ALLOW_NONE, 
16712                                            /*call_args_p=*/false, 
16713                                            /*subr=*/0, /*explain_p=*/false)
16714                      == 0);
16715
16716           /* We cannot deduce in the other direction, because ARG1 is
16717              a pack expansion but ARG2 is not.  */
16718           deduce2 = 0;
16719         }
16720       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16721         {
16722           int i, len1 = list_length (args1);
16723           tree parmvec = make_tree_vec (1);
16724           tree argvec = make_tree_vec (len1);
16725           tree ta = args1;
16726
16727           /* Setup the parameter vector, which contains only ARG1.  */
16728           TREE_VEC_ELT (parmvec, 0) = arg2;
16729
16730           /* Setup the argument vector, which contains the remaining
16731              arguments.  */
16732           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
16733             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
16734
16735           deduce2 = (unify_pack_expansion (tparms2, targs2, parmvec,
16736                                            argvec, UNIFY_ALLOW_NONE, 
16737                                            /*call_args_p=*/false, 
16738                                            /*subr=*/0, /*explain_p=*/false)
16739                      == 0);
16740
16741           /* We cannot deduce in the other direction, because ARG2 is
16742              a pack expansion but ARG1 is not.*/
16743           deduce1 = 0;
16744         }
16745
16746       else
16747         {
16748           /* The normal case, where neither argument is a pack
16749              expansion.  */
16750           deduce1 = (unify (tparms1, targs1, arg1, arg2,
16751                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
16752                      == 0);
16753           deduce2 = (unify (tparms2, targs2, arg2, arg1,
16754                             UNIFY_ALLOW_NONE, /*explain_p=*/false)
16755                      == 0);
16756         }
16757
16758       /* If we couldn't deduce arguments for tparms1 to make arg1 match
16759          arg2, then arg2 is not as specialized as arg1.  */
16760       if (!deduce1)
16761         lose2 = true;
16762       if (!deduce2)
16763         lose1 = true;
16764
16765       /* "If, for a given type, deduction succeeds in both directions
16766          (i.e., the types are identical after the transformations above)
16767          and if the type from the argument template is more cv-qualified
16768          than the type from the parameter template (as described above)
16769          that type is considered to be more specialized than the other. If
16770          neither type is more cv-qualified than the other then neither type
16771          is more specialized than the other."  */
16772
16773       if (deduce1 && deduce2
16774           && quals1 != quals2 && quals1 >= 0 && quals2 >= 0)
16775         {
16776           if ((quals1 & quals2) == quals2)
16777             lose2 = true;
16778           if ((quals1 & quals2) == quals1)
16779             lose1 = true;
16780         }
16781
16782       if (lose1 && lose2)
16783         /* We've failed to deduce something in either direction.
16784            These must be unordered.  */
16785         break;
16786
16787       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
16788           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
16789         /* We have already processed all of the arguments in our
16790            handing of the pack expansion type.  */
16791         len = 0;
16792
16793       args1 = TREE_CHAIN (args1);
16794       args2 = TREE_CHAIN (args2);
16795     }
16796
16797   /* "In most cases, all template parameters must have values in order for
16798      deduction to succeed, but for partial ordering purposes a template
16799      parameter may remain without a value provided it is not used in the
16800      types being used for partial ordering."
16801
16802      Thus, if we are missing any of the targs1 we need to substitute into
16803      origs1, then pat2 is not as specialized as pat1.  This can happen when
16804      there is a nondeduced context.  */
16805   if (!lose2 && check_undeduced_parms (targs1, origs1, args1))
16806     lose2 = true;
16807   if (!lose1 && check_undeduced_parms (targs2, origs2, args2))
16808     lose1 = true;
16809
16810   processing_template_decl--;
16811
16812   /* All things being equal, if the next argument is a pack expansion
16813      for one function but not for the other, prefer the
16814      non-variadic function.  FIXME this is bogus; see c++/41958.  */
16815   if (lose1 == lose2
16816       && args1 && TREE_VALUE (args1)
16817       && args2 && TREE_VALUE (args2))
16818     {
16819       lose1 = TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION;
16820       lose2 = TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION;
16821     }
16822
16823   if (lose1 == lose2)
16824     return 0;
16825   else if (!lose1)
16826     return 1;
16827   else
16828     return -1;
16829 }
16830
16831 /* Determine which of two partial specializations is more specialized.
16832
16833    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
16834    to the first partial specialization.  The TREE_VALUE is the
16835    innermost set of template parameters for the partial
16836    specialization.  PAT2 is similar, but for the second template.
16837
16838    Return 1 if the first partial specialization is more specialized;
16839    -1 if the second is more specialized; 0 if neither is more
16840    specialized.
16841
16842    See [temp.class.order] for information about determining which of
16843    two templates is more specialized.  */
16844
16845 static int
16846 more_specialized_class (tree pat1, tree pat2)
16847 {
16848   tree targs;
16849   tree tmpl1, tmpl2;
16850   int winner = 0;
16851   bool any_deductions = false;
16852
16853   tmpl1 = TREE_TYPE (pat1);
16854   tmpl2 = TREE_TYPE (pat2);
16855
16856   /* Just like what happens for functions, if we are ordering between
16857      different class template specializations, we may encounter dependent
16858      types in the arguments, and we need our dependency check functions
16859      to behave correctly.  */
16860   ++processing_template_decl;
16861   targs = get_class_bindings (TREE_VALUE (pat1),
16862                               CLASSTYPE_TI_ARGS (tmpl1),
16863                               CLASSTYPE_TI_ARGS (tmpl2));
16864   if (targs)
16865     {
16866       --winner;
16867       any_deductions = true;
16868     }
16869
16870   targs = get_class_bindings (TREE_VALUE (pat2),
16871                               CLASSTYPE_TI_ARGS (tmpl2),
16872                               CLASSTYPE_TI_ARGS (tmpl1));
16873   if (targs)
16874     {
16875       ++winner;
16876       any_deductions = true;
16877     }
16878   --processing_template_decl;
16879
16880   /* In the case of a tie where at least one of the class templates
16881      has a parameter pack at the end, the template with the most
16882      non-packed parameters wins.  */
16883   if (winner == 0
16884       && any_deductions
16885       && (template_args_variadic_p (TREE_PURPOSE (pat1))
16886           || template_args_variadic_p (TREE_PURPOSE (pat2))))
16887     {
16888       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
16889       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
16890       int len1 = TREE_VEC_LENGTH (args1);
16891       int len2 = TREE_VEC_LENGTH (args2);
16892
16893       /* We don't count the pack expansion at the end.  */
16894       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
16895         --len1;
16896       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
16897         --len2;
16898
16899       if (len1 > len2)
16900         return 1;
16901       else if (len1 < len2)
16902         return -1;
16903     }
16904
16905   return winner;
16906 }
16907
16908 /* Return the template arguments that will produce the function signature
16909    DECL from the function template FN, with the explicit template
16910    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
16911    also match.  Return NULL_TREE if no satisfactory arguments could be
16912    found.  */
16913
16914 static tree
16915 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
16916 {
16917   int ntparms = DECL_NTPARMS (fn);
16918   tree targs = make_tree_vec (ntparms);
16919   tree decl_type;
16920   tree decl_arg_types;
16921   tree *args;
16922   unsigned int nargs, ix;
16923   tree arg;
16924
16925   /* Substitute the explicit template arguments into the type of DECL.
16926      The call to fn_type_unification will handle substitution into the
16927      FN.  */
16928   decl_type = TREE_TYPE (decl);
16929   if (explicit_args && uses_template_parms (decl_type))
16930     {
16931       tree tmpl;
16932       tree converted_args;
16933
16934       if (DECL_TEMPLATE_INFO (decl))
16935         tmpl = DECL_TI_TEMPLATE (decl);
16936       else
16937         /* We can get here for some invalid specializations.  */
16938         return NULL_TREE;
16939
16940       converted_args
16941         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
16942                                  explicit_args, NULL_TREE,
16943                                  tf_none,
16944                                  /*require_all_args=*/false,
16945                                  /*use_default_args=*/false);
16946       if (converted_args == error_mark_node)
16947         return NULL_TREE;
16948
16949       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
16950       if (decl_type == error_mark_node)
16951         return NULL_TREE;
16952     }
16953
16954   /* Never do unification on the 'this' parameter.  */
16955   decl_arg_types = skip_artificial_parms_for (decl, 
16956                                               TYPE_ARG_TYPES (decl_type));
16957
16958   nargs = list_length (decl_arg_types);
16959   args = XALLOCAVEC (tree, nargs);
16960   for (arg = decl_arg_types, ix = 0;
16961        arg != NULL_TREE && arg != void_list_node;
16962        arg = TREE_CHAIN (arg), ++ix)
16963     args[ix] = TREE_VALUE (arg);
16964
16965   if (fn_type_unification (fn, explicit_args, targs,
16966                            args, ix,
16967                            (check_rettype || DECL_CONV_FN_P (fn)
16968                             ? TREE_TYPE (decl_type) : NULL_TREE),
16969                            DEDUCE_EXACT, LOOKUP_NORMAL, /*explain_p=*/false))
16970     return NULL_TREE;
16971
16972   return targs;
16973 }
16974
16975 /* Return the innermost template arguments that, when applied to a
16976    template specialization whose innermost template parameters are
16977    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
16978    ARGS.
16979
16980    For example, suppose we have:
16981
16982      template <class T, class U> struct S {};
16983      template <class T> struct S<T*, int> {};
16984
16985    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
16986    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
16987    int}.  The resulting vector will be {double}, indicating that `T'
16988    is bound to `double'.  */
16989
16990 static tree
16991 get_class_bindings (tree tparms, tree spec_args, tree args)
16992 {
16993   int i, ntparms = TREE_VEC_LENGTH (tparms);
16994   tree deduced_args;
16995   tree innermost_deduced_args;
16996
16997   innermost_deduced_args = make_tree_vec (ntparms);
16998   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
16999     {
17000       deduced_args = copy_node (args);
17001       SET_TMPL_ARGS_LEVEL (deduced_args,
17002                            TMPL_ARGS_DEPTH (deduced_args),
17003                            innermost_deduced_args);
17004     }
17005   else
17006     deduced_args = innermost_deduced_args;
17007
17008   if (unify (tparms, deduced_args,
17009              INNERMOST_TEMPLATE_ARGS (spec_args),
17010              INNERMOST_TEMPLATE_ARGS (args),
17011              UNIFY_ALLOW_NONE, /*explain_p=*/false))
17012     return NULL_TREE;
17013
17014   for (i =  0; i < ntparms; ++i)
17015     if (! TREE_VEC_ELT (innermost_deduced_args, i))
17016       return NULL_TREE;
17017
17018   /* Verify that nondeduced template arguments agree with the type
17019      obtained from argument deduction.
17020
17021      For example:
17022
17023        struct A { typedef int X; };
17024        template <class T, class U> struct C {};
17025        template <class T> struct C<T, typename T::X> {};
17026
17027      Then with the instantiation `C<A, int>', we can deduce that
17028      `T' is `A' but unify () does not check whether `typename T::X'
17029      is `int'.  */
17030   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
17031   if (spec_args == error_mark_node
17032       /* We only need to check the innermost arguments; the other
17033          arguments will always agree.  */
17034       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
17035                               INNERMOST_TEMPLATE_ARGS (args)))
17036     return NULL_TREE;
17037
17038   /* Now that we have bindings for all of the template arguments,
17039      ensure that the arguments deduced for the template template
17040      parameters have compatible template parameter lists.  See the use
17041      of template_template_parm_bindings_ok_p in fn_type_unification
17042      for more information.  */
17043   if (!template_template_parm_bindings_ok_p (tparms, deduced_args))
17044     return NULL_TREE;
17045
17046   return deduced_args;
17047 }
17048
17049 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
17050    Return the TREE_LIST node with the most specialized template, if
17051    any.  If there is no most specialized template, the error_mark_node
17052    is returned.
17053
17054    Note that this function does not look at, or modify, the
17055    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
17056    returned is one of the elements of INSTANTIATIONS, callers may
17057    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
17058    and retrieve it from the value returned.  */
17059
17060 tree
17061 most_specialized_instantiation (tree templates)
17062 {
17063   tree fn, champ;
17064
17065   ++processing_template_decl;
17066
17067   champ = templates;
17068   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
17069     {
17070       int fate = 0;
17071
17072       if (get_bindings (TREE_VALUE (champ),
17073                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17074                         NULL_TREE, /*check_ret=*/true))
17075         fate--;
17076
17077       if (get_bindings (TREE_VALUE (fn),
17078                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17079                         NULL_TREE, /*check_ret=*/true))
17080         fate++;
17081
17082       if (fate == -1)
17083         champ = fn;
17084       else if (!fate)
17085         {
17086           /* Equally specialized, move to next function.  If there
17087              is no next function, nothing's most specialized.  */
17088           fn = TREE_CHAIN (fn);
17089           champ = fn;
17090           if (!fn)
17091             break;
17092         }
17093     }
17094
17095   if (champ)
17096     /* Now verify that champ is better than everything earlier in the
17097        instantiation list.  */
17098     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
17099       if (get_bindings (TREE_VALUE (champ),
17100                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
17101                         NULL_TREE, /*check_ret=*/true)
17102           || !get_bindings (TREE_VALUE (fn),
17103                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
17104                             NULL_TREE, /*check_ret=*/true))
17105         {
17106           champ = NULL_TREE;
17107           break;
17108         }
17109
17110   processing_template_decl--;
17111
17112   if (!champ)
17113     return error_mark_node;
17114
17115   return champ;
17116 }
17117
17118 /* If DECL is a specialization of some template, return the most
17119    general such template.  Otherwise, returns NULL_TREE.
17120
17121    For example, given:
17122
17123      template <class T> struct S { template <class U> void f(U); };
17124
17125    if TMPL is `template <class U> void S<int>::f(U)' this will return
17126    the full template.  This function will not trace past partial
17127    specializations, however.  For example, given in addition:
17128
17129      template <class T> struct S<T*> { template <class U> void f(U); };
17130
17131    if TMPL is `template <class U> void S<int*>::f(U)' this will return
17132    `template <class T> template <class U> S<T*>::f(U)'.  */
17133
17134 tree
17135 most_general_template (tree decl)
17136 {
17137   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
17138      an immediate specialization.  */
17139   if (TREE_CODE (decl) == FUNCTION_DECL)
17140     {
17141       if (DECL_TEMPLATE_INFO (decl)) {
17142         decl = DECL_TI_TEMPLATE (decl);
17143
17144         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
17145            template friend.  */
17146         if (TREE_CODE (decl) != TEMPLATE_DECL)
17147           return NULL_TREE;
17148       } else
17149         return NULL_TREE;
17150     }
17151
17152   /* Look for more and more general templates.  */
17153   while (DECL_TEMPLATE_INFO (decl))
17154     {
17155       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
17156          (See cp-tree.h for details.)  */
17157       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
17158         break;
17159
17160       if (CLASS_TYPE_P (TREE_TYPE (decl))
17161           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
17162         break;
17163
17164       /* Stop if we run into an explicitly specialized class template.  */
17165       if (!DECL_NAMESPACE_SCOPE_P (decl)
17166           && DECL_CONTEXT (decl)
17167           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
17168         break;
17169
17170       decl = DECL_TI_TEMPLATE (decl);
17171     }
17172
17173   return decl;
17174 }
17175
17176 /* Return the most specialized of the class template partial
17177    specializations of TMPL which can produce TYPE, a specialization of
17178    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
17179    a _TYPE node corresponding to the partial specialization, while the
17180    TREE_PURPOSE is the set of template arguments that must be
17181    substituted into the TREE_TYPE in order to generate TYPE.
17182
17183    If the choice of partial specialization is ambiguous, a diagnostic
17184    is issued, and the error_mark_node is returned.  If there are no
17185    partial specializations of TMPL matching TYPE, then NULL_TREE is
17186    returned.  */
17187
17188 static tree
17189 most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
17190 {
17191   tree list = NULL_TREE;
17192   tree t;
17193   tree champ;
17194   int fate;
17195   bool ambiguous_p;
17196   tree args;
17197   tree outer_args = NULL_TREE;
17198
17199   tmpl = most_general_template (tmpl);
17200   args = CLASSTYPE_TI_ARGS (type);
17201
17202   /* For determining which partial specialization to use, only the
17203      innermost args are interesting.  */
17204   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
17205     {
17206       outer_args = strip_innermost_template_args (args, 1);
17207       args = INNERMOST_TEMPLATE_ARGS (args);
17208     }
17209
17210   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
17211     {
17212       tree partial_spec_args;
17213       tree spec_args;
17214       tree parms = TREE_VALUE (t);
17215
17216       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
17217
17218       ++processing_template_decl;
17219
17220       if (outer_args)
17221         {
17222           int i;
17223
17224           /* Discard the outer levels of args, and then substitute in the
17225              template args from the enclosing class.  */
17226           partial_spec_args = INNERMOST_TEMPLATE_ARGS (partial_spec_args);
17227           partial_spec_args = tsubst_template_args
17228             (partial_spec_args, outer_args, tf_none, NULL_TREE);
17229
17230           /* PARMS already refers to just the innermost parms, but the
17231              template parms in partial_spec_args had their levels lowered
17232              by tsubst, so we need to do the same for the parm list.  We
17233              can't just tsubst the TREE_VEC itself, as tsubst wants to
17234              treat a TREE_VEC as an argument vector.  */
17235           parms = copy_node (parms);
17236           for (i = TREE_VEC_LENGTH (parms) - 1; i >= 0; --i)
17237             TREE_VEC_ELT (parms, i) =
17238               tsubst (TREE_VEC_ELT (parms, i), outer_args, tf_none, NULL_TREE);
17239
17240         }
17241
17242       partial_spec_args =
17243           coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
17244                                  add_to_template_args (outer_args,
17245                                                        partial_spec_args),
17246                                  tmpl, tf_none,
17247                                  /*require_all_args=*/true,
17248                                  /*use_default_args=*/true);
17249
17250       --processing_template_decl;
17251
17252       if (partial_spec_args == error_mark_node)
17253         return error_mark_node;
17254
17255       spec_args = get_class_bindings (parms,
17256                                       partial_spec_args,
17257                                       args);
17258       if (spec_args)
17259         {
17260           if (outer_args)
17261             spec_args = add_to_template_args (outer_args, spec_args);
17262           list = tree_cons (spec_args, TREE_VALUE (t), list);
17263           TREE_TYPE (list) = TREE_TYPE (t);
17264         }
17265     }
17266
17267   if (! list)
17268     return NULL_TREE;
17269
17270   ambiguous_p = false;
17271   t = list;
17272   champ = t;
17273   t = TREE_CHAIN (t);
17274   for (; t; t = TREE_CHAIN (t))
17275     {
17276       fate = more_specialized_class (champ, t);
17277       if (fate == 1)
17278         ;
17279       else
17280         {
17281           if (fate == 0)
17282             {
17283               t = TREE_CHAIN (t);
17284               if (! t)
17285                 {
17286                   ambiguous_p = true;
17287                   break;
17288                 }
17289             }
17290           champ = t;
17291         }
17292     }
17293
17294   if (!ambiguous_p)
17295     for (t = list; t && t != champ; t = TREE_CHAIN (t))
17296       {
17297         fate = more_specialized_class (champ, t);
17298         if (fate != 1)
17299           {
17300             ambiguous_p = true;
17301             break;
17302           }
17303       }
17304
17305   if (ambiguous_p)
17306     {
17307       const char *str;
17308       char *spaces = NULL;
17309       if (!(complain & tf_error))
17310         return error_mark_node;
17311       error ("ambiguous class template instantiation for %q#T", type);
17312       str = ngettext ("candidate is:", "candidates are:", list_length (list));
17313       for (t = list; t; t = TREE_CHAIN (t))
17314         {
17315           error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
17316           spaces = spaces ? spaces : get_spaces (str);
17317         }
17318       free (spaces);
17319       return error_mark_node;
17320     }
17321
17322   return champ;
17323 }
17324
17325 /* Explicitly instantiate DECL.  */
17326
17327 void
17328 do_decl_instantiation (tree decl, tree storage)
17329 {
17330   tree result = NULL_TREE;
17331   int extern_p = 0;
17332
17333   if (!decl || decl == error_mark_node)
17334     /* An error occurred, for which grokdeclarator has already issued
17335        an appropriate message.  */
17336     return;
17337   else if (! DECL_LANG_SPECIFIC (decl))
17338     {
17339       error ("explicit instantiation of non-template %q#D", decl);
17340       return;
17341     }
17342   else if (TREE_CODE (decl) == VAR_DECL)
17343     {
17344       /* There is an asymmetry here in the way VAR_DECLs and
17345          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
17346          the latter, the DECL we get back will be marked as a
17347          template instantiation, and the appropriate
17348          DECL_TEMPLATE_INFO will be set up.  This does not happen for
17349          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
17350          should handle VAR_DECLs as it currently handles
17351          FUNCTION_DECLs.  */
17352       if (!DECL_CLASS_SCOPE_P (decl))
17353         {
17354           error ("%qD is not a static data member of a class template", decl);
17355           return;
17356         }
17357       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
17358       if (!result || TREE_CODE (result) != VAR_DECL)
17359         {
17360           error ("no matching template for %qD found", decl);
17361           return;
17362         }
17363       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
17364         {
17365           error ("type %qT for explicit instantiation %qD does not match "
17366                  "declared type %qT", TREE_TYPE (result), decl,
17367                  TREE_TYPE (decl));
17368           return;
17369         }
17370     }
17371   else if (TREE_CODE (decl) != FUNCTION_DECL)
17372     {
17373       error ("explicit instantiation of %q#D", decl);
17374       return;
17375     }
17376   else
17377     result = decl;
17378
17379   /* Check for various error cases.  Note that if the explicit
17380      instantiation is valid the RESULT will currently be marked as an
17381      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
17382      until we get here.  */
17383
17384   if (DECL_TEMPLATE_SPECIALIZATION (result))
17385     {
17386       /* DR 259 [temp.spec].
17387
17388          Both an explicit instantiation and a declaration of an explicit
17389          specialization shall not appear in a program unless the explicit
17390          instantiation follows a declaration of the explicit specialization.
17391
17392          For a given set of template parameters, if an explicit
17393          instantiation of a template appears after a declaration of an
17394          explicit specialization for that template, the explicit
17395          instantiation has no effect.  */
17396       return;
17397     }
17398   else if (DECL_EXPLICIT_INSTANTIATION (result))
17399     {
17400       /* [temp.spec]
17401
17402          No program shall explicitly instantiate any template more
17403          than once.
17404
17405          We check DECL_NOT_REALLY_EXTERN so as not to complain when
17406          the first instantiation was `extern' and the second is not,
17407          and EXTERN_P for the opposite case.  */
17408       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
17409         permerror (input_location, "duplicate explicit instantiation of %q#D", result);
17410       /* If an "extern" explicit instantiation follows an ordinary
17411          explicit instantiation, the template is instantiated.  */
17412       if (extern_p)
17413         return;
17414     }
17415   else if (!DECL_IMPLICIT_INSTANTIATION (result))
17416     {
17417       error ("no matching template for %qD found", result);
17418       return;
17419     }
17420   else if (!DECL_TEMPLATE_INFO (result))
17421     {
17422       permerror (input_location, "explicit instantiation of non-template %q#D", result);
17423       return;
17424     }
17425
17426   if (storage == NULL_TREE)
17427     ;
17428   else if (storage == ridpointers[(int) RID_EXTERN])
17429     {
17430       if (!in_system_header && (cxx_dialect == cxx98))
17431         pedwarn (input_location, OPT_pedantic, 
17432                  "ISO C++ 1998 forbids the use of %<extern%> on explicit "
17433                  "instantiations");
17434       extern_p = 1;
17435     }
17436   else
17437     error ("storage class %qD applied to template instantiation", storage);
17438
17439   check_explicit_instantiation_namespace (result);
17440   mark_decl_instantiated (result, extern_p);
17441   if (! extern_p)
17442     instantiate_decl (result, /*defer_ok=*/1,
17443                       /*expl_inst_class_mem_p=*/false);
17444 }
17445
17446 static void
17447 mark_class_instantiated (tree t, int extern_p)
17448 {
17449   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
17450   SET_CLASSTYPE_INTERFACE_KNOWN (t);
17451   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
17452   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
17453   if (! extern_p)
17454     {
17455       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
17456       rest_of_type_compilation (t, 1);
17457     }
17458 }
17459
17460 /* Called from do_type_instantiation through binding_table_foreach to
17461    do recursive instantiation for the type bound in ENTRY.  */
17462 static void
17463 bt_instantiate_type_proc (binding_entry entry, void *data)
17464 {
17465   tree storage = *(tree *) data;
17466
17467   if (MAYBE_CLASS_TYPE_P (entry->type)
17468       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
17469     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
17470 }
17471
17472 /* Called from do_type_instantiation to instantiate a member
17473    (a member function or a static member variable) of an
17474    explicitly instantiated class template.  */
17475 static void
17476 instantiate_class_member (tree decl, int extern_p)
17477 {
17478   mark_decl_instantiated (decl, extern_p);
17479   if (! extern_p)
17480     instantiate_decl (decl, /*defer_ok=*/1,
17481                       /*expl_inst_class_mem_p=*/true);
17482 }
17483
17484 /* Perform an explicit instantiation of template class T.  STORAGE, if
17485    non-null, is the RID for extern, inline or static.  COMPLAIN is
17486    nonzero if this is called from the parser, zero if called recursively,
17487    since the standard is unclear (as detailed below).  */
17488
17489 void
17490 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
17491 {
17492   int extern_p = 0;
17493   int nomem_p = 0;
17494   int static_p = 0;
17495   int previous_instantiation_extern_p = 0;
17496
17497   if (TREE_CODE (t) == TYPE_DECL)
17498     t = TREE_TYPE (t);
17499
17500   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
17501     {
17502       error ("explicit instantiation of non-template type %qT", t);
17503       return;
17504     }
17505
17506   complete_type (t);
17507
17508   if (!COMPLETE_TYPE_P (t))
17509     {
17510       if (complain & tf_error)
17511         error ("explicit instantiation of %q#T before definition of template",
17512                t);
17513       return;
17514     }
17515
17516   if (storage != NULL_TREE)
17517     {
17518       if (!in_system_header)
17519         {
17520           if (storage == ridpointers[(int) RID_EXTERN])
17521             {
17522               if (cxx_dialect == cxx98)
17523                 pedwarn (input_location, OPT_pedantic, 
17524                          "ISO C++ 1998 forbids the use of %<extern%> on "
17525                          "explicit instantiations");
17526             }
17527           else
17528             pedwarn (input_location, OPT_pedantic, 
17529                      "ISO C++ forbids the use of %qE"
17530                      " on explicit instantiations", storage);
17531         }
17532
17533       if (storage == ridpointers[(int) RID_INLINE])
17534         nomem_p = 1;
17535       else if (storage == ridpointers[(int) RID_EXTERN])
17536         extern_p = 1;
17537       else if (storage == ridpointers[(int) RID_STATIC])
17538         static_p = 1;
17539       else
17540         {
17541           error ("storage class %qD applied to template instantiation",
17542                  storage);
17543           extern_p = 0;
17544         }
17545     }
17546
17547   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
17548     {
17549       /* DR 259 [temp.spec].
17550
17551          Both an explicit instantiation and a declaration of an explicit
17552          specialization shall not appear in a program unless the explicit
17553          instantiation follows a declaration of the explicit specialization.
17554
17555          For a given set of template parameters, if an explicit
17556          instantiation of a template appears after a declaration of an
17557          explicit specialization for that template, the explicit
17558          instantiation has no effect.  */
17559       return;
17560     }
17561   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
17562     {
17563       /* [temp.spec]
17564
17565          No program shall explicitly instantiate any template more
17566          than once.
17567
17568          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
17569          instantiation was `extern'.  If EXTERN_P then the second is.
17570          These cases are OK.  */
17571       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
17572
17573       if (!previous_instantiation_extern_p && !extern_p
17574           && (complain & tf_error))
17575         permerror (input_location, "duplicate explicit instantiation of %q#T", t);
17576
17577       /* If we've already instantiated the template, just return now.  */
17578       if (!CLASSTYPE_INTERFACE_ONLY (t))
17579         return;
17580     }
17581
17582   check_explicit_instantiation_namespace (TYPE_NAME (t));
17583   mark_class_instantiated (t, extern_p);
17584
17585   if (nomem_p)
17586     return;
17587
17588   {
17589     tree tmp;
17590
17591     /* In contrast to implicit instantiation, where only the
17592        declarations, and not the definitions, of members are
17593        instantiated, we have here:
17594
17595          [temp.explicit]
17596
17597          The explicit instantiation of a class template specialization
17598          implies the instantiation of all of its members not
17599          previously explicitly specialized in the translation unit
17600          containing the explicit instantiation.
17601
17602        Of course, we can't instantiate member template classes, since
17603        we don't have any arguments for them.  Note that the standard
17604        is unclear on whether the instantiation of the members are
17605        *explicit* instantiations or not.  However, the most natural
17606        interpretation is that it should be an explicit instantiation.  */
17607
17608     if (! static_p)
17609       for (tmp = TYPE_METHODS (t); tmp; tmp = DECL_CHAIN (tmp))
17610         if (TREE_CODE (tmp) == FUNCTION_DECL
17611             && DECL_TEMPLATE_INSTANTIATION (tmp))
17612           instantiate_class_member (tmp, extern_p);
17613
17614     for (tmp = TYPE_FIELDS (t); tmp; tmp = DECL_CHAIN (tmp))
17615       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
17616         instantiate_class_member (tmp, extern_p);
17617
17618     if (CLASSTYPE_NESTED_UTDS (t))
17619       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
17620                              bt_instantiate_type_proc, &storage);
17621   }
17622 }
17623
17624 /* Given a function DECL, which is a specialization of TMPL, modify
17625    DECL to be a re-instantiation of TMPL with the same template
17626    arguments.  TMPL should be the template into which tsubst'ing
17627    should occur for DECL, not the most general template.
17628
17629    One reason for doing this is a scenario like this:
17630
17631      template <class T>
17632      void f(const T&, int i);
17633
17634      void g() { f(3, 7); }
17635
17636      template <class T>
17637      void f(const T& t, const int i) { }
17638
17639    Note that when the template is first instantiated, with
17640    instantiate_template, the resulting DECL will have no name for the
17641    first parameter, and the wrong type for the second.  So, when we go
17642    to instantiate the DECL, we regenerate it.  */
17643
17644 static void
17645 regenerate_decl_from_template (tree decl, tree tmpl)
17646 {
17647   /* The arguments used to instantiate DECL, from the most general
17648      template.  */
17649   tree args;
17650   tree code_pattern;
17651
17652   args = DECL_TI_ARGS (decl);
17653   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
17654
17655   /* Make sure that we can see identifiers, and compute access
17656      correctly.  */
17657   push_access_scope (decl);
17658
17659   if (TREE_CODE (decl) == FUNCTION_DECL)
17660     {
17661       tree decl_parm;
17662       tree pattern_parm;
17663       tree specs;
17664       int args_depth;
17665       int parms_depth;
17666
17667       args_depth = TMPL_ARGS_DEPTH (args);
17668       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
17669       if (args_depth > parms_depth)
17670         args = get_innermost_template_args (args, parms_depth);
17671
17672       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
17673                                               args, tf_error, NULL_TREE,
17674                                               /*defer_ok*/false);
17675       if (specs)
17676         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
17677                                                     specs);
17678
17679       /* Merge parameter declarations.  */
17680       decl_parm = skip_artificial_parms_for (decl,
17681                                              DECL_ARGUMENTS (decl));
17682       pattern_parm
17683         = skip_artificial_parms_for (code_pattern,
17684                                      DECL_ARGUMENTS (code_pattern));
17685       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
17686         {
17687           tree parm_type;
17688           tree attributes;
17689           
17690           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17691             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
17692           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
17693                               NULL_TREE);
17694           parm_type = type_decays_to (parm_type);
17695           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17696             TREE_TYPE (decl_parm) = parm_type;
17697           attributes = DECL_ATTRIBUTES (pattern_parm);
17698           if (DECL_ATTRIBUTES (decl_parm) != attributes)
17699             {
17700               DECL_ATTRIBUTES (decl_parm) = attributes;
17701               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17702             }
17703           decl_parm = DECL_CHAIN (decl_parm);
17704           pattern_parm = DECL_CHAIN (pattern_parm);
17705         }
17706       /* Merge any parameters that match with the function parameter
17707          pack.  */
17708       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
17709         {
17710           int i, len;
17711           tree expanded_types;
17712           /* Expand the TYPE_PACK_EXPANSION that provides the types for
17713              the parameters in this function parameter pack.  */
17714           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
17715                                                  args, tf_error, NULL_TREE);
17716           len = TREE_VEC_LENGTH (expanded_types);
17717           for (i = 0; i < len; i++)
17718             {
17719               tree parm_type;
17720               tree attributes;
17721           
17722               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
17723                 /* Rename the parameter to include the index.  */
17724                 DECL_NAME (decl_parm) = 
17725                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
17726               parm_type = TREE_VEC_ELT (expanded_types, i);
17727               parm_type = type_decays_to (parm_type);
17728               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
17729                 TREE_TYPE (decl_parm) = parm_type;
17730               attributes = DECL_ATTRIBUTES (pattern_parm);
17731               if (DECL_ATTRIBUTES (decl_parm) != attributes)
17732                 {
17733                   DECL_ATTRIBUTES (decl_parm) = attributes;
17734                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
17735                 }
17736               decl_parm = DECL_CHAIN (decl_parm);
17737             }
17738         }
17739       /* Merge additional specifiers from the CODE_PATTERN.  */
17740       if (DECL_DECLARED_INLINE_P (code_pattern)
17741           && !DECL_DECLARED_INLINE_P (decl))
17742         DECL_DECLARED_INLINE_P (decl) = 1;
17743     }
17744   else if (TREE_CODE (decl) == VAR_DECL)
17745     {
17746       DECL_INITIAL (decl) =
17747         tsubst_expr (DECL_INITIAL (code_pattern), args,
17748                      tf_error, DECL_TI_TEMPLATE (decl),
17749                      /*integral_constant_expression_p=*/false);
17750       if (VAR_HAD_UNKNOWN_BOUND (decl))
17751         TREE_TYPE (decl) = tsubst (TREE_TYPE (code_pattern), args,
17752                                    tf_error, DECL_TI_TEMPLATE (decl));
17753     }
17754   else
17755     gcc_unreachable ();
17756
17757   pop_access_scope (decl);
17758 }
17759
17760 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
17761    substituted to get DECL.  */
17762
17763 tree
17764 template_for_substitution (tree decl)
17765 {
17766   tree tmpl = DECL_TI_TEMPLATE (decl);
17767
17768   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
17769      for the instantiation.  This is not always the most general
17770      template.  Consider, for example:
17771
17772         template <class T>
17773         struct S { template <class U> void f();
17774                    template <> void f<int>(); };
17775
17776      and an instantiation of S<double>::f<int>.  We want TD to be the
17777      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
17778   while (/* An instantiation cannot have a definition, so we need a
17779             more general template.  */
17780          DECL_TEMPLATE_INSTANTIATION (tmpl)
17781            /* We must also deal with friend templates.  Given:
17782
17783                 template <class T> struct S {
17784                   template <class U> friend void f() {};
17785                 };
17786
17787               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
17788               so far as the language is concerned, but that's still
17789               where we get the pattern for the instantiation from.  On
17790               other hand, if the definition comes outside the class, say:
17791
17792                 template <class T> struct S {
17793                   template <class U> friend void f();
17794                 };
17795                 template <class U> friend void f() {}
17796
17797               we don't need to look any further.  That's what the check for
17798               DECL_INITIAL is for.  */
17799           || (TREE_CODE (decl) == FUNCTION_DECL
17800               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
17801               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
17802     {
17803       /* The present template, TD, should not be a definition.  If it
17804          were a definition, we should be using it!  Note that we
17805          cannot restructure the loop to just keep going until we find
17806          a template with a definition, since that might go too far if
17807          a specialization was declared, but not defined.  */
17808       gcc_assert (TREE_CODE (decl) != VAR_DECL
17809                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
17810
17811       /* Fetch the more general template.  */
17812       tmpl = DECL_TI_TEMPLATE (tmpl);
17813     }
17814
17815   return tmpl;
17816 }
17817
17818 /* Returns true if we need to instantiate this template instance even if we
17819    know we aren't going to emit it..  */
17820
17821 bool
17822 always_instantiate_p (tree decl)
17823 {
17824   /* We always instantiate inline functions so that we can inline them.  An
17825      explicit instantiation declaration prohibits implicit instantiation of
17826      non-inline functions.  With high levels of optimization, we would
17827      normally inline non-inline functions -- but we're not allowed to do
17828      that for "extern template" functions.  Therefore, we check
17829      DECL_DECLARED_INLINE_P, rather than possibly_inlined_p.  */
17830   return ((TREE_CODE (decl) == FUNCTION_DECL
17831            && DECL_DECLARED_INLINE_P (decl))
17832           /* And we need to instantiate static data members so that
17833              their initializers are available in integral constant
17834              expressions.  */
17835           || (TREE_CODE (decl) == VAR_DECL
17836               && decl_maybe_constant_var_p (decl)));
17837 }
17838
17839 /* If FN has a noexcept-specifier that hasn't been instantiated yet,
17840    instantiate it now, modifying TREE_TYPE (fn).  */
17841
17842 void
17843 maybe_instantiate_noexcept (tree fn)
17844 {
17845   tree fntype, spec, noex, clone;
17846
17847   if (DECL_CLONED_FUNCTION_P (fn))
17848     fn = DECL_CLONED_FUNCTION (fn);
17849   fntype = TREE_TYPE (fn);
17850   spec = TYPE_RAISES_EXCEPTIONS (fntype);
17851
17852   if (!DEFERRED_NOEXCEPT_SPEC_P (spec))
17853     return;
17854
17855   noex = TREE_PURPOSE (spec);
17856
17857   if (TREE_CODE (noex) == DEFERRED_NOEXCEPT)
17858     {
17859       push_tinst_level (fn);
17860       push_access_scope (fn);
17861       input_location = DECL_SOURCE_LOCATION (fn);
17862       noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
17863                                     DEFERRED_NOEXCEPT_ARGS (noex),
17864                                     tf_warning_or_error, fn, /*function_p=*/false,
17865                                     /*integral_constant_expression_p=*/true);
17866       pop_access_scope (fn);
17867       pop_tinst_level ();
17868       spec = build_noexcept_spec (noex, tf_warning_or_error);
17869       if (spec == error_mark_node)
17870         spec = noexcept_false_spec;
17871     }
17872   else
17873     {
17874       /* This is an implicitly declared function, so NOEX is a list of
17875          other functions to evaluate and merge.  */
17876       tree elt;
17877       spec = noexcept_true_spec;
17878       for (elt = noex; elt; elt = OVL_NEXT (elt))
17879         {
17880           tree fn = OVL_CURRENT (elt);
17881           tree subspec;
17882           maybe_instantiate_noexcept (fn);
17883           subspec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn));
17884           spec = merge_exception_specifiers (spec, subspec, NULL_TREE);
17885         }
17886     }
17887
17888   TREE_TYPE (fn) = build_exception_variant (fntype, spec);
17889
17890   FOR_EACH_CLONE (clone, fn)
17891     {
17892       if (TREE_TYPE (clone) == fntype)
17893         TREE_TYPE (clone) = TREE_TYPE (fn);
17894       else
17895         TREE_TYPE (clone) = build_exception_variant (TREE_TYPE (clone), spec);
17896     }
17897 }
17898
17899 /* Produce the definition of D, a _DECL generated from a template.  If
17900    DEFER_OK is nonzero, then we don't have to actually do the
17901    instantiation now; we just have to do it sometime.  Normally it is
17902    an error if this is an explicit instantiation but D is undefined.
17903    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
17904    explicitly instantiated class template.  */
17905
17906 tree
17907 instantiate_decl (tree d, int defer_ok,
17908                   bool expl_inst_class_mem_p)
17909 {
17910   tree tmpl = DECL_TI_TEMPLATE (d);
17911   tree gen_args;
17912   tree args;
17913   tree td;
17914   tree code_pattern;
17915   tree spec;
17916   tree gen_tmpl;
17917   bool pattern_defined;
17918   int need_push;
17919   location_t saved_loc = input_location;
17920   bool external_p;
17921
17922   /* This function should only be used to instantiate templates for
17923      functions and static member variables.  */
17924   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
17925               || TREE_CODE (d) == VAR_DECL);
17926
17927   /* Variables are never deferred; if instantiation is required, they
17928      are instantiated right away.  That allows for better code in the
17929      case that an expression refers to the value of the variable --
17930      if the variable has a constant value the referring expression can
17931      take advantage of that fact.  */
17932   if (TREE_CODE (d) == VAR_DECL
17933       || DECL_DECLARED_CONSTEXPR_P (d))
17934     defer_ok = 0;
17935
17936   /* Don't instantiate cloned functions.  Instead, instantiate the
17937      functions they cloned.  */
17938   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
17939     d = DECL_CLONED_FUNCTION (d);
17940
17941   if (DECL_TEMPLATE_INSTANTIATED (d)
17942       || DECL_TEMPLATE_SPECIALIZATION (d))
17943     /* D has already been instantiated or explicitly specialized, so
17944        there's nothing for us to do here.
17945
17946        It might seem reasonable to check whether or not D is an explicit
17947        instantiation, and, if so, stop here.  But when an explicit
17948        instantiation is deferred until the end of the compilation,
17949        DECL_EXPLICIT_INSTANTIATION is set, even though we still need to do
17950        the instantiation.  */
17951     return d;
17952
17953   /* Check to see whether we know that this template will be
17954      instantiated in some other file, as with "extern template"
17955      extension.  */
17956   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
17957
17958   /* In general, we do not instantiate such templates.  */
17959   if (external_p && !always_instantiate_p (d))
17960     return d;
17961
17962   gen_tmpl = most_general_template (tmpl);
17963   gen_args = DECL_TI_ARGS (d);
17964
17965   if (tmpl != gen_tmpl)
17966     /* We should already have the extra args.  */
17967     gcc_assert (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (gen_tmpl))
17968                 == TMPL_ARGS_DEPTH (gen_args));
17969   /* And what's in the hash table should match D.  */
17970   gcc_assert ((spec = retrieve_specialization (gen_tmpl, gen_args, 0)) == d
17971               || spec == NULL_TREE);
17972
17973   /* This needs to happen before any tsubsting.  */
17974   if (! push_tinst_level (d))
17975     return d;
17976
17977   timevar_push (TV_TEMPLATE_INST);
17978
17979   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
17980      for the instantiation.  */
17981   td = template_for_substitution (d);
17982   code_pattern = DECL_TEMPLATE_RESULT (td);
17983
17984   /* We should never be trying to instantiate a member of a class
17985      template or partial specialization.  */
17986   gcc_assert (d != code_pattern);
17987
17988   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
17989       || DECL_TEMPLATE_SPECIALIZATION (td))
17990     /* In the case of a friend template whose definition is provided
17991        outside the class, we may have too many arguments.  Drop the
17992        ones we don't need.  The same is true for specializations.  */
17993     args = get_innermost_template_args
17994       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
17995   else
17996     args = gen_args;
17997
17998   if (TREE_CODE (d) == FUNCTION_DECL)
17999     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE
18000                        || DECL_DEFAULTED_OUTSIDE_CLASS_P (code_pattern));
18001   else
18002     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
18003
18004   /* We may be in the middle of deferred access check.  Disable it now.  */
18005   push_deferring_access_checks (dk_no_deferred);
18006
18007   /* Unless an explicit instantiation directive has already determined
18008      the linkage of D, remember that a definition is available for
18009      this entity.  */
18010   if (pattern_defined
18011       && !DECL_INTERFACE_KNOWN (d)
18012       && !DECL_NOT_REALLY_EXTERN (d))
18013     mark_definable (d);
18014
18015   DECL_SOURCE_LOCATION (td) = DECL_SOURCE_LOCATION (code_pattern);
18016   DECL_SOURCE_LOCATION (d) = DECL_SOURCE_LOCATION (code_pattern);
18017   input_location = DECL_SOURCE_LOCATION (d);
18018
18019   /* If D is a member of an explicitly instantiated class template,
18020      and no definition is available, treat it like an implicit
18021      instantiation.  */
18022   if (!pattern_defined && expl_inst_class_mem_p
18023       && DECL_EXPLICIT_INSTANTIATION (d))
18024     {
18025       /* Leave linkage flags alone on instantiations with anonymous
18026          visibility.  */
18027       if (TREE_PUBLIC (d))
18028         {
18029           DECL_NOT_REALLY_EXTERN (d) = 0;
18030           DECL_INTERFACE_KNOWN (d) = 0;
18031         }
18032       SET_DECL_IMPLICIT_INSTANTIATION (d);
18033     }
18034
18035   if (TREE_CODE (d) == FUNCTION_DECL)
18036     maybe_instantiate_noexcept (d);
18037
18038   /* Recheck the substitutions to obtain any warning messages
18039      about ignoring cv qualifiers.  Don't do this for artificial decls,
18040      as it breaks the context-sensitive substitution for lambda op(). */
18041   if (!defer_ok && !DECL_ARTIFICIAL (d))
18042     {
18043       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
18044       tree type = TREE_TYPE (gen);
18045
18046       /* Make sure that we can see identifiers, and compute access
18047          correctly.  D is already the target FUNCTION_DECL with the
18048          right context.  */
18049       push_access_scope (d);
18050
18051       if (TREE_CODE (gen) == FUNCTION_DECL)
18052         {
18053           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
18054           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
18055                                           d, /*defer_ok*/true);
18056           /* Don't simply tsubst the function type, as that will give
18057              duplicate warnings about poor parameter qualifications.
18058              The function arguments are the same as the decl_arguments
18059              without the top level cv qualifiers.  */
18060           type = TREE_TYPE (type);
18061         }
18062       tsubst (type, gen_args, tf_warning_or_error, d);
18063
18064       pop_access_scope (d);
18065     }
18066
18067   /* Defer all other templates, unless we have been explicitly
18068      forbidden from doing so.  */
18069   if (/* If there is no definition, we cannot instantiate the
18070          template.  */
18071       ! pattern_defined
18072       /* If it's OK to postpone instantiation, do so.  */
18073       || defer_ok
18074       /* If this is a static data member that will be defined
18075          elsewhere, we don't want to instantiate the entire data
18076          member, but we do want to instantiate the initializer so that
18077          we can substitute that elsewhere.  */
18078       || (external_p && TREE_CODE (d) == VAR_DECL))
18079     {
18080       /* The definition of the static data member is now required so
18081          we must substitute the initializer.  */
18082       if (TREE_CODE (d) == VAR_DECL
18083           && !DECL_INITIAL (d)
18084           && DECL_INITIAL (code_pattern))
18085         {
18086           tree ns;
18087           tree init;
18088           bool const_init = false;
18089
18090           ns = decl_namespace_context (d);
18091           push_nested_namespace (ns);
18092           push_nested_class (DECL_CONTEXT (d));
18093           init = tsubst_expr (DECL_INITIAL (code_pattern),
18094                               args,
18095                               tf_warning_or_error, NULL_TREE,
18096                               /*integral_constant_expression_p=*/false);
18097           /* Make sure the initializer is still constant, in case of
18098              circular dependency (template/instantiate6.C). */
18099           const_init
18100             = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18101           cp_finish_decl (d, init, /*init_const_expr_p=*/const_init,
18102                           /*asmspec_tree=*/NULL_TREE,
18103                           LOOKUP_ONLYCONVERTING);
18104           pop_nested_class ();
18105           pop_nested_namespace (ns);
18106         }
18107
18108       /* We restore the source position here because it's used by
18109          add_pending_template.  */
18110       input_location = saved_loc;
18111
18112       if (at_eof && !pattern_defined
18113           && DECL_EXPLICIT_INSTANTIATION (d)
18114           && DECL_NOT_REALLY_EXTERN (d))
18115         /* [temp.explicit]
18116
18117            The definition of a non-exported function template, a
18118            non-exported member function template, or a non-exported
18119            member function or static data member of a class template
18120            shall be present in every translation unit in which it is
18121            explicitly instantiated.  */
18122         permerror (input_location,  "explicit instantiation of %qD "
18123                    "but no definition available", d);
18124
18125       /* If we're in unevaluated context, we just wanted to get the
18126          constant value; this isn't an odr use, so don't queue
18127          a full instantiation.  */
18128       if (cp_unevaluated_operand != 0)
18129         goto out;
18130       /* ??? Historically, we have instantiated inline functions, even
18131          when marked as "extern template".  */
18132       if (!(external_p && TREE_CODE (d) == VAR_DECL))
18133         add_pending_template (d);
18134       goto out;
18135     }
18136   /* Tell the repository that D is available in this translation unit
18137      -- and see if it is supposed to be instantiated here.  */
18138   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
18139     {
18140       /* In a PCH file, despite the fact that the repository hasn't
18141          requested instantiation in the PCH it is still possible that
18142          an instantiation will be required in a file that includes the
18143          PCH.  */
18144       if (pch_file)
18145         add_pending_template (d);
18146       /* Instantiate inline functions so that the inliner can do its
18147          job, even though we'll not be emitting a copy of this
18148          function.  */
18149       if (!(TREE_CODE (d) == FUNCTION_DECL && possibly_inlined_p (d)))
18150         goto out;
18151     }
18152
18153   need_push = !cfun || !global_bindings_p ();
18154   if (need_push)
18155     push_to_top_level ();
18156
18157   /* Mark D as instantiated so that recursive calls to
18158      instantiate_decl do not try to instantiate it again.  */
18159   DECL_TEMPLATE_INSTANTIATED (d) = 1;
18160
18161   /* Regenerate the declaration in case the template has been modified
18162      by a subsequent redeclaration.  */
18163   regenerate_decl_from_template (d, td);
18164
18165   /* We already set the file and line above.  Reset them now in case
18166      they changed as a result of calling regenerate_decl_from_template.  */
18167   input_location = DECL_SOURCE_LOCATION (d);
18168
18169   if (TREE_CODE (d) == VAR_DECL)
18170     {
18171       tree init;
18172       bool const_init = false;
18173
18174       /* Clear out DECL_RTL; whatever was there before may not be right
18175          since we've reset the type of the declaration.  */
18176       SET_DECL_RTL (d, NULL);
18177       DECL_IN_AGGR_P (d) = 0;
18178
18179       /* The initializer is placed in DECL_INITIAL by
18180          regenerate_decl_from_template so we don't need to
18181          push/pop_access_scope again here.  Pull it out so that
18182          cp_finish_decl can process it.  */
18183       init = DECL_INITIAL (d);
18184       DECL_INITIAL (d) = NULL_TREE;
18185       DECL_INITIALIZED_P (d) = 0;
18186
18187       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
18188          initializer.  That function will defer actual emission until
18189          we have a chance to determine linkage.  */
18190       DECL_EXTERNAL (d) = 0;
18191
18192       /* Enter the scope of D so that access-checking works correctly.  */
18193       push_nested_class (DECL_CONTEXT (d));
18194       const_init = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (code_pattern);
18195       cp_finish_decl (d, init, const_init, NULL_TREE, 0);
18196       pop_nested_class ();
18197     }
18198   else if (TREE_CODE (d) == FUNCTION_DECL && DECL_DEFAULTED_FN (code_pattern))
18199     synthesize_method (d);
18200   else if (TREE_CODE (d) == FUNCTION_DECL)
18201     {
18202       htab_t saved_local_specializations;
18203       tree subst_decl;
18204       tree tmpl_parm;
18205       tree spec_parm;
18206
18207       /* Save away the current list, in case we are instantiating one
18208          template from within the body of another.  */
18209       saved_local_specializations = local_specializations;
18210
18211       /* Set up the list of local specializations.  */
18212       local_specializations = htab_create (37,
18213                                            hash_local_specialization,
18214                                            eq_local_specializations,
18215                                            NULL);
18216
18217       /* Set up context.  */
18218       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
18219
18220       /* Create substitution entries for the parameters.  */
18221       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
18222       tmpl_parm = DECL_ARGUMENTS (subst_decl);
18223       spec_parm = DECL_ARGUMENTS (d);
18224       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
18225         {
18226           register_local_specialization (spec_parm, tmpl_parm);
18227           spec_parm = skip_artificial_parms_for (d, spec_parm);
18228           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
18229         }
18230       for (; tmpl_parm; tmpl_parm = DECL_CHAIN (tmpl_parm))
18231         {
18232           if (!FUNCTION_PARAMETER_PACK_P (tmpl_parm))
18233             {
18234               register_local_specialization (spec_parm, tmpl_parm);
18235               spec_parm = DECL_CHAIN (spec_parm);
18236             }
18237           else
18238             {
18239               /* Register the (value) argument pack as a specialization of
18240                  TMPL_PARM, then move on.  */
18241               tree argpack = extract_fnparm_pack (tmpl_parm, &spec_parm);
18242               register_local_specialization (argpack, tmpl_parm);
18243             }
18244         }
18245       gcc_assert (!spec_parm);
18246
18247       /* Substitute into the body of the function.  */
18248       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
18249                    tf_warning_or_error, tmpl,
18250                    /*integral_constant_expression_p=*/false);
18251
18252       /* Set the current input_location to the end of the function
18253          so that finish_function knows where we are.  */
18254       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
18255
18256       /* We don't need the local specializations any more.  */
18257       htab_delete (local_specializations);
18258       local_specializations = saved_local_specializations;
18259
18260       /* Finish the function.  */
18261       d = finish_function (0);
18262       expand_or_defer_fn (d);
18263     }
18264
18265   /* We're not deferring instantiation any more.  */
18266   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
18267
18268   if (need_push)
18269     pop_from_top_level ();
18270
18271 out:
18272   input_location = saved_loc;
18273   pop_deferring_access_checks ();
18274   pop_tinst_level ();
18275
18276   timevar_pop (TV_TEMPLATE_INST);
18277
18278   return d;
18279 }
18280
18281 /* Run through the list of templates that we wish we could
18282    instantiate, and instantiate any we can.  RETRIES is the
18283    number of times we retry pending template instantiation.  */
18284
18285 void
18286 instantiate_pending_templates (int retries)
18287 {
18288   int reconsider;
18289   location_t saved_loc = input_location;
18290
18291   /* Instantiating templates may trigger vtable generation.  This in turn
18292      may require further template instantiations.  We place a limit here
18293      to avoid infinite loop.  */
18294   if (pending_templates && retries >= max_tinst_depth)
18295     {
18296       tree decl = pending_templates->tinst->decl;
18297
18298       error ("template instantiation depth exceeds maximum of %d"
18299              " instantiating %q+D, possibly from virtual table generation"
18300              " (use -ftemplate-depth= to increase the maximum)",
18301              max_tinst_depth, decl);
18302       if (TREE_CODE (decl) == FUNCTION_DECL)
18303         /* Pretend that we defined it.  */
18304         DECL_INITIAL (decl) = error_mark_node;
18305       return;
18306     }
18307
18308   do
18309     {
18310       struct pending_template **t = &pending_templates;
18311       struct pending_template *last = NULL;
18312       reconsider = 0;
18313       while (*t)
18314         {
18315           tree instantiation = reopen_tinst_level ((*t)->tinst);
18316           bool complete = false;
18317
18318           if (TYPE_P (instantiation))
18319             {
18320               tree fn;
18321
18322               if (!COMPLETE_TYPE_P (instantiation))
18323                 {
18324                   instantiate_class_template (instantiation);
18325                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
18326                     for (fn = TYPE_METHODS (instantiation);
18327                          fn;
18328                          fn = TREE_CHAIN (fn))
18329                       if (! DECL_ARTIFICIAL (fn))
18330                         instantiate_decl (fn,
18331                                           /*defer_ok=*/0,
18332                                           /*expl_inst_class_mem_p=*/false);
18333                   if (COMPLETE_TYPE_P (instantiation))
18334                     reconsider = 1;
18335                 }
18336
18337               complete = COMPLETE_TYPE_P (instantiation);
18338             }
18339           else
18340             {
18341               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
18342                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
18343                 {
18344                   instantiation
18345                     = instantiate_decl (instantiation,
18346                                         /*defer_ok=*/0,
18347                                         /*expl_inst_class_mem_p=*/false);
18348                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
18349                     reconsider = 1;
18350                 }
18351
18352               complete = (DECL_TEMPLATE_SPECIALIZATION (instantiation)
18353                           || DECL_TEMPLATE_INSTANTIATED (instantiation));
18354             }
18355
18356           if (complete)
18357             /* If INSTANTIATION has been instantiated, then we don't
18358                need to consider it again in the future.  */
18359             *t = (*t)->next;
18360           else
18361             {
18362               last = *t;
18363               t = &(*t)->next;
18364             }
18365           tinst_depth = 0;
18366           current_tinst_level = NULL;
18367         }
18368       last_pending_template = last;
18369     }
18370   while (reconsider);
18371
18372   input_location = saved_loc;
18373 }
18374
18375 /* Substitute ARGVEC into T, which is a list of initializers for
18376    either base class or a non-static data member.  The TREE_PURPOSEs
18377    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
18378    instantiate_decl.  */
18379
18380 static tree
18381 tsubst_initializer_list (tree t, tree argvec)
18382 {
18383   tree inits = NULL_TREE;
18384
18385   for (; t; t = TREE_CHAIN (t))
18386     {
18387       tree decl;
18388       tree init;
18389       tree expanded_bases = NULL_TREE;
18390       tree expanded_arguments = NULL_TREE;
18391       int i, len = 1;
18392
18393       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
18394         {
18395           tree expr;
18396           tree arg;
18397
18398           /* Expand the base class expansion type into separate base
18399              classes.  */
18400           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
18401                                                  tf_warning_or_error,
18402                                                  NULL_TREE);
18403           if (expanded_bases == error_mark_node)
18404             continue;
18405           
18406           /* We'll be building separate TREE_LISTs of arguments for
18407              each base.  */
18408           len = TREE_VEC_LENGTH (expanded_bases);
18409           expanded_arguments = make_tree_vec (len);
18410           for (i = 0; i < len; i++)
18411             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
18412
18413           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
18414              expand each argument in the TREE_VALUE of t.  */
18415           expr = make_node (EXPR_PACK_EXPANSION);
18416           PACK_EXPANSION_PARAMETER_PACKS (expr) =
18417             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
18418
18419           if (TREE_VALUE (t) == void_type_node)
18420             /* VOID_TYPE_NODE is used to indicate
18421                value-initialization.  */
18422             {
18423               for (i = 0; i < len; i++)
18424                 TREE_VEC_ELT (expanded_arguments, i) = void_type_node;
18425             }
18426           else
18427             {
18428               /* Substitute parameter packs into each argument in the
18429                  TREE_LIST.  */
18430               in_base_initializer = 1;
18431               for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
18432                 {
18433                   tree expanded_exprs;
18434
18435                   /* Expand the argument.  */
18436                   SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
18437                   expanded_exprs 
18438                     = tsubst_pack_expansion (expr, argvec,
18439                                              tf_warning_or_error,
18440                                              NULL_TREE);
18441                   if (expanded_exprs == error_mark_node)
18442                     continue;
18443
18444                   /* Prepend each of the expanded expressions to the
18445                      corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
18446                   for (i = 0; i < len; i++)
18447                     {
18448                       TREE_VEC_ELT (expanded_arguments, i) = 
18449                         tree_cons (NULL_TREE, 
18450                                    TREE_VEC_ELT (expanded_exprs, i),
18451                                    TREE_VEC_ELT (expanded_arguments, i));
18452                     }
18453                 }
18454               in_base_initializer = 0;
18455
18456               /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
18457                  since we built them backwards.  */
18458               for (i = 0; i < len; i++)
18459                 {
18460                   TREE_VEC_ELT (expanded_arguments, i) = 
18461                     nreverse (TREE_VEC_ELT (expanded_arguments, i));
18462                 }
18463             }
18464         }
18465
18466       for (i = 0; i < len; ++i)
18467         {
18468           if (expanded_bases)
18469             {
18470               decl = TREE_VEC_ELT (expanded_bases, i);
18471               decl = expand_member_init (decl);
18472               init = TREE_VEC_ELT (expanded_arguments, i);
18473             }
18474           else
18475             {
18476               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
18477                                   tf_warning_or_error, NULL_TREE);
18478
18479               decl = expand_member_init (decl);
18480               if (decl && !DECL_P (decl))
18481                 in_base_initializer = 1;
18482
18483               init = TREE_VALUE (t);
18484               if (init != void_type_node)
18485                 init = tsubst_expr (init, argvec,
18486                                     tf_warning_or_error, NULL_TREE,
18487                                     /*integral_constant_expression_p=*/false);
18488               in_base_initializer = 0;
18489             }
18490
18491           if (decl)
18492             {
18493               init = build_tree_list (decl, init);
18494               TREE_CHAIN (init) = inits;
18495               inits = init;
18496             }
18497         }
18498     }
18499   return inits;
18500 }
18501
18502 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
18503
18504 static void
18505 set_current_access_from_decl (tree decl)
18506 {
18507   if (TREE_PRIVATE (decl))
18508     current_access_specifier = access_private_node;
18509   else if (TREE_PROTECTED (decl))
18510     current_access_specifier = access_protected_node;
18511   else
18512     current_access_specifier = access_public_node;
18513 }
18514
18515 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
18516    is the instantiation (which should have been created with
18517    start_enum) and ARGS are the template arguments to use.  */
18518
18519 static void
18520 tsubst_enum (tree tag, tree newtag, tree args)
18521 {
18522   tree e;
18523
18524   if (SCOPED_ENUM_P (newtag))
18525     begin_scope (sk_scoped_enum, newtag);
18526
18527   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
18528     {
18529       tree value;
18530       tree decl;
18531
18532       decl = TREE_VALUE (e);
18533       /* Note that in a template enum, the TREE_VALUE is the
18534          CONST_DECL, not the corresponding INTEGER_CST.  */
18535       value = tsubst_expr (DECL_INITIAL (decl),
18536                            args, tf_warning_or_error, NULL_TREE,
18537                            /*integral_constant_expression_p=*/true);
18538
18539       /* Give this enumeration constant the correct access.  */
18540       set_current_access_from_decl (decl);
18541
18542       /* Actually build the enumerator itself.  */
18543       build_enumerator
18544         (DECL_NAME (decl), value, newtag, DECL_SOURCE_LOCATION (decl));
18545     }
18546
18547   if (SCOPED_ENUM_P (newtag))
18548     finish_scope ();
18549
18550   finish_enum_value_list (newtag);
18551   finish_enum (newtag);
18552
18553   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
18554     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
18555 }
18556
18557 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
18558    its type -- but without substituting the innermost set of template
18559    arguments.  So, innermost set of template parameters will appear in
18560    the type.  */
18561
18562 tree
18563 get_mostly_instantiated_function_type (tree decl)
18564 {
18565   tree fn_type;
18566   tree tmpl;
18567   tree targs;
18568   tree tparms;
18569   int parm_depth;
18570
18571   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
18572   targs = DECL_TI_ARGS (decl);
18573   tparms = DECL_TEMPLATE_PARMS (tmpl);
18574   parm_depth = TMPL_PARMS_DEPTH (tparms);
18575
18576   /* There should be as many levels of arguments as there are levels
18577      of parameters.  */
18578   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
18579
18580   fn_type = TREE_TYPE (tmpl);
18581
18582   if (parm_depth == 1)
18583     /* No substitution is necessary.  */
18584     ;
18585   else
18586     {
18587       int i;
18588       tree partial_args;
18589
18590       /* Replace the innermost level of the TARGS with NULL_TREEs to
18591          let tsubst know not to substitute for those parameters.  */
18592       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
18593       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
18594         SET_TMPL_ARGS_LEVEL (partial_args, i,
18595                              TMPL_ARGS_LEVEL (targs, i));
18596       SET_TMPL_ARGS_LEVEL (partial_args,
18597                            TMPL_ARGS_DEPTH (targs),
18598                            make_tree_vec (DECL_NTPARMS (tmpl)));
18599
18600       /* Make sure that we can see identifiers, and compute access
18601          correctly.  */
18602       push_access_scope (decl);
18603
18604       ++processing_template_decl;
18605       /* Now, do the (partial) substitution to figure out the
18606          appropriate function type.  */
18607       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
18608       --processing_template_decl;
18609
18610       /* Substitute into the template parameters to obtain the real
18611          innermost set of parameters.  This step is important if the
18612          innermost set of template parameters contains value
18613          parameters whose types depend on outer template parameters.  */
18614       TREE_VEC_LENGTH (partial_args)--;
18615       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
18616
18617       pop_access_scope (decl);
18618     }
18619
18620   return fn_type;
18621 }
18622
18623 /* Return truthvalue if we're processing a template different from
18624    the last one involved in diagnostics.  */
18625 int
18626 problematic_instantiation_changed (void)
18627 {
18628   return current_tinst_level != last_error_tinst_level;
18629 }
18630
18631 /* Remember current template involved in diagnostics.  */
18632 void
18633 record_last_problematic_instantiation (void)
18634 {
18635   last_error_tinst_level = current_tinst_level;
18636 }
18637
18638 struct tinst_level *
18639 current_instantiation (void)
18640 {
18641   return current_tinst_level;
18642 }
18643
18644 /* [temp.param] Check that template non-type parm TYPE is of an allowable
18645    type. Return zero for ok, nonzero for disallowed. Issue error and
18646    warning messages under control of COMPLAIN.  */
18647
18648 static int
18649 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
18650 {
18651   if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
18652     return 0;
18653   else if (POINTER_TYPE_P (type))
18654     return 0;
18655   else if (TYPE_PTR_TO_MEMBER_P (type))
18656     return 0;
18657   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
18658     return 0;
18659   else if (TREE_CODE (type) == TYPENAME_TYPE)
18660     return 0;
18661   else if (TREE_CODE (type) == DECLTYPE_TYPE)
18662     return 0;
18663
18664   if (complain & tf_error)
18665     error ("%q#T is not a valid type for a template constant parameter", type);
18666   return 1;
18667 }
18668
18669 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
18670    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
18671
18672 static bool
18673 dependent_type_p_r (tree type)
18674 {
18675   tree scope;
18676
18677   /* [temp.dep.type]
18678
18679      A type is dependent if it is:
18680
18681      -- a template parameter. Template template parameters are types
18682         for us (since TYPE_P holds true for them) so we handle
18683         them here.  */
18684   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
18685       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
18686     return true;
18687   /* -- a qualified-id with a nested-name-specifier which contains a
18688         class-name that names a dependent type or whose unqualified-id
18689         names a dependent type.  */
18690   if (TREE_CODE (type) == TYPENAME_TYPE)
18691     return true;
18692   /* -- a cv-qualified type where the cv-unqualified type is
18693         dependent.  */
18694   type = TYPE_MAIN_VARIANT (type);
18695   /* -- a compound type constructed from any dependent type.  */
18696   if (TYPE_PTR_TO_MEMBER_P (type))
18697     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
18698             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
18699                                            (type)));
18700   else if (TREE_CODE (type) == POINTER_TYPE
18701            || TREE_CODE (type) == REFERENCE_TYPE)
18702     return dependent_type_p (TREE_TYPE (type));
18703   else if (TREE_CODE (type) == FUNCTION_TYPE
18704            || TREE_CODE (type) == METHOD_TYPE)
18705     {
18706       tree arg_type;
18707
18708       if (dependent_type_p (TREE_TYPE (type)))
18709         return true;
18710       for (arg_type = TYPE_ARG_TYPES (type);
18711            arg_type;
18712            arg_type = TREE_CHAIN (arg_type))
18713         if (dependent_type_p (TREE_VALUE (arg_type)))
18714           return true;
18715       return false;
18716     }
18717   /* -- an array type constructed from any dependent type or whose
18718         size is specified by a constant expression that is
18719         value-dependent.
18720
18721         We checked for type- and value-dependence of the bounds in
18722         compute_array_index_type, so TYPE_DEPENDENT_P is already set.  */
18723   if (TREE_CODE (type) == ARRAY_TYPE)
18724     {
18725       if (TYPE_DOMAIN (type)
18726           && dependent_type_p (TYPE_DOMAIN (type)))
18727         return true;
18728       return dependent_type_p (TREE_TYPE (type));
18729     }
18730
18731   /* -- a template-id in which either the template name is a template
18732      parameter ...  */
18733   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
18734     return true;
18735   /* ... or any of the template arguments is a dependent type or
18736         an expression that is type-dependent or value-dependent.  */
18737   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
18738            && (any_dependent_template_arguments_p
18739                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
18740     return true;
18741
18742   /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are
18743      dependent; if the argument of the `typeof' expression is not
18744      type-dependent, then it should already been have resolved.  */
18745   if (TREE_CODE (type) == TYPEOF_TYPE
18746       || TREE_CODE (type) == DECLTYPE_TYPE
18747       || TREE_CODE (type) == UNDERLYING_TYPE)
18748     return true;
18749
18750   /* A template argument pack is dependent if any of its packed
18751      arguments are.  */
18752   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
18753     {
18754       tree args = ARGUMENT_PACK_ARGS (type);
18755       int i, len = TREE_VEC_LENGTH (args);
18756       for (i = 0; i < len; ++i)
18757         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
18758           return true;
18759     }
18760
18761   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
18762      be template parameters.  */
18763   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
18764     return true;
18765
18766   /* The standard does not specifically mention types that are local
18767      to template functions or local classes, but they should be
18768      considered dependent too.  For example:
18769
18770        template <int I> void f() {
18771          enum E { a = I };
18772          S<sizeof (E)> s;
18773        }
18774
18775      The size of `E' cannot be known until the value of `I' has been
18776      determined.  Therefore, `E' must be considered dependent.  */
18777   scope = TYPE_CONTEXT (type);
18778   if (scope && TYPE_P (scope))
18779     return dependent_type_p (scope);
18780   /* Don't use type_dependent_expression_p here, as it can lead
18781      to infinite recursion trying to determine whether a lambda
18782      nested in a lambda is dependent (c++/47687).  */
18783   else if (scope && TREE_CODE (scope) == FUNCTION_DECL
18784            && DECL_LANG_SPECIFIC (scope)
18785            && DECL_TEMPLATE_INFO (scope)
18786            && (any_dependent_template_arguments_p
18787                (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (scope)))))
18788     return true;
18789
18790   /* Other types are non-dependent.  */
18791   return false;
18792 }
18793
18794 /* Returns TRUE if TYPE is dependent, in the sense of
18795    [temp.dep.type].  Note that a NULL type is considered dependent.  */
18796
18797 bool
18798 dependent_type_p (tree type)
18799 {
18800   /* If there are no template parameters in scope, then there can't be
18801      any dependent types.  */
18802   if (!processing_template_decl)
18803     {
18804       /* If we are not processing a template, then nobody should be
18805          providing us with a dependent type.  */
18806       gcc_assert (type);
18807       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM || is_auto (type));
18808       return false;
18809     }
18810
18811   /* If the type is NULL, we have not computed a type for the entity
18812      in question; in that case, the type is dependent.  */
18813   if (!type)
18814     return true;
18815
18816   /* Erroneous types can be considered non-dependent.  */
18817   if (type == error_mark_node)
18818     return false;
18819
18820   /* If we have not already computed the appropriate value for TYPE,
18821      do so now.  */
18822   if (!TYPE_DEPENDENT_P_VALID (type))
18823     {
18824       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
18825       TYPE_DEPENDENT_P_VALID (type) = 1;
18826     }
18827
18828   return TYPE_DEPENDENT_P (type);
18829 }
18830
18831 /* Returns TRUE if SCOPE is a dependent scope, in which we can't do any
18832    lookup.  In other words, a dependent type that is not the current
18833    instantiation.  */
18834
18835 bool
18836 dependent_scope_p (tree scope)
18837 {
18838   return (scope && TYPE_P (scope) && dependent_type_p (scope)
18839           && !currently_open_class (scope));
18840 }
18841
18842 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
18843    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
18844    expression.  */
18845
18846 /* Note that this predicate is not appropriate for general expressions;
18847    only constant expressions (that satisfy potential_constant_expression)
18848    can be tested for value dependence.
18849
18850    We should really also have a predicate for "instantiation-dependent".
18851
18852    fold_non_dependent_expr: fold if constant and not type-dependent and not value-dependent.
18853      (what about instantiation-dependent constant-expressions?)
18854    is_late_template_attribute: defer if instantiation-dependent.
18855    compute_array_index_type: proceed if constant and not t- or v-dependent
18856      if instantiation-dependent, need to remember full expression
18857    uses_template_parms: FIXME - need to audit callers
18858    tsubst_decl [function_decl]: Why is this using value_dependent_expression_p?
18859    dependent_type_p [array_type]: dependent if index type is dependent
18860      (or non-constant?)
18861    static_assert - instantiation-dependent */
18862
18863 bool
18864 value_dependent_expression_p (tree expression)
18865 {
18866   if (!processing_template_decl)
18867     return false;
18868
18869   /* A name declared with a dependent type.  */
18870   if (DECL_P (expression) && type_dependent_expression_p (expression))
18871     return true;
18872
18873   switch (TREE_CODE (expression))
18874     {
18875     case IDENTIFIER_NODE:
18876       /* A name that has not been looked up -- must be dependent.  */
18877       return true;
18878
18879     case TEMPLATE_PARM_INDEX:
18880       /* A non-type template parm.  */
18881       return true;
18882
18883     case CONST_DECL:
18884       /* A non-type template parm.  */
18885       if (DECL_TEMPLATE_PARM_P (expression))
18886         return true;
18887       return value_dependent_expression_p (DECL_INITIAL (expression));
18888
18889     case VAR_DECL:
18890        /* A constant with literal type and is initialized
18891           with an expression that is value-dependent.  */
18892       if (DECL_INITIAL (expression)
18893           && decl_constant_var_p (expression)
18894           && value_dependent_expression_p (DECL_INITIAL (expression)))
18895         return true;
18896       return false;
18897
18898     case DYNAMIC_CAST_EXPR:
18899     case STATIC_CAST_EXPR:
18900     case CONST_CAST_EXPR:
18901     case REINTERPRET_CAST_EXPR:
18902     case CAST_EXPR:
18903       /* These expressions are value-dependent if the type to which
18904          the cast occurs is dependent or the expression being casted
18905          is value-dependent.  */
18906       {
18907         tree type = TREE_TYPE (expression);
18908
18909         if (dependent_type_p (type))
18910           return true;
18911
18912         /* A functional cast has a list of operands.  */
18913         expression = TREE_OPERAND (expression, 0);
18914         if (!expression)
18915           {
18916             /* If there are no operands, it must be an expression such
18917                as "int()". This should not happen for aggregate types
18918                because it would form non-constant expressions.  */
18919             gcc_assert (cxx_dialect >= cxx0x
18920                         || INTEGRAL_OR_ENUMERATION_TYPE_P (type));
18921
18922             return false;
18923           }
18924
18925         if (TREE_CODE (expression) == TREE_LIST)
18926           return any_value_dependent_elements_p (expression);
18927
18928         return value_dependent_expression_p (expression);
18929       }
18930
18931     case SIZEOF_EXPR:
18932     case ALIGNOF_EXPR:
18933     case TYPEID_EXPR:
18934       /* A `sizeof' expression is value-dependent if the operand is
18935          type-dependent or is a pack expansion.  */
18936       expression = TREE_OPERAND (expression, 0);
18937       if (PACK_EXPANSION_P (expression))
18938         return true;
18939       else if (TYPE_P (expression))
18940         return dependent_type_p (expression);
18941       return type_dependent_expression_p (expression);
18942
18943     case AT_ENCODE_EXPR:
18944       /* An 'encode' expression is value-dependent if the operand is
18945          type-dependent.  */
18946       expression = TREE_OPERAND (expression, 0);
18947       return dependent_type_p (expression);
18948
18949     case NOEXCEPT_EXPR:
18950       expression = TREE_OPERAND (expression, 0);
18951       return type_dependent_expression_p (expression);
18952
18953     case SCOPE_REF:
18954       {
18955         tree name = TREE_OPERAND (expression, 1);
18956         return value_dependent_expression_p (name);
18957       }
18958
18959     case COMPONENT_REF:
18960       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
18961               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
18962
18963     case NONTYPE_ARGUMENT_PACK:
18964       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
18965          is value-dependent.  */
18966       {
18967         tree values = ARGUMENT_PACK_ARGS (expression);
18968         int i, len = TREE_VEC_LENGTH (values);
18969         
18970         for (i = 0; i < len; ++i)
18971           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
18972             return true;
18973         
18974         return false;
18975       }
18976
18977     case TRAIT_EXPR:
18978       {
18979         tree type2 = TRAIT_EXPR_TYPE2 (expression);
18980         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
18981                 || (type2 ? dependent_type_p (type2) : false));
18982       }
18983
18984     case MODOP_EXPR:
18985       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18986               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
18987
18988     case ARRAY_REF:
18989       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
18990               || (value_dependent_expression_p (TREE_OPERAND (expression, 1))));
18991
18992     case ADDR_EXPR:
18993       {
18994         tree op = TREE_OPERAND (expression, 0);
18995         return (value_dependent_expression_p (op)
18996                 || has_value_dependent_address (op));
18997       }
18998
18999     case CALL_EXPR:
19000       {
19001         tree fn = get_callee_fndecl (expression);
19002         int i, nargs;
19003         if (!fn && value_dependent_expression_p (CALL_EXPR_FN (expression)))
19004           return true;
19005         nargs = call_expr_nargs (expression);
19006         for (i = 0; i < nargs; ++i)
19007           {
19008             tree op = CALL_EXPR_ARG (expression, i);
19009             /* In a call to a constexpr member function, look through the
19010                implicit ADDR_EXPR on the object argument so that it doesn't
19011                cause the call to be considered value-dependent.  We also
19012                look through it in potential_constant_expression.  */
19013             if (i == 0 && fn && DECL_DECLARED_CONSTEXPR_P (fn)
19014                 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
19015                 && TREE_CODE (op) == ADDR_EXPR)
19016               op = TREE_OPERAND (op, 0);
19017             if (value_dependent_expression_p (op))
19018               return true;
19019           }
19020         return false;
19021       }
19022
19023     case TEMPLATE_ID_EXPR:
19024       /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
19025          type-dependent.  */
19026       return type_dependent_expression_p (expression);
19027
19028     case CONSTRUCTOR:
19029       {
19030         unsigned ix;
19031         tree val;
19032         FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), ix, val)
19033           if (value_dependent_expression_p (val))
19034             return true;
19035         return false;
19036       }
19037
19038     default:
19039       /* A constant expression is value-dependent if any subexpression is
19040          value-dependent.  */
19041       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
19042         {
19043         case tcc_reference:
19044         case tcc_unary:
19045         case tcc_comparison:
19046         case tcc_binary:
19047         case tcc_expression:
19048         case tcc_vl_exp:
19049           {
19050             int i, len = cp_tree_operand_length (expression);
19051
19052             for (i = 0; i < len; i++)
19053               {
19054                 tree t = TREE_OPERAND (expression, i);
19055
19056                 /* In some cases, some of the operands may be missing.l
19057                    (For example, in the case of PREDECREMENT_EXPR, the
19058                    amount to increment by may be missing.)  That doesn't
19059                    make the expression dependent.  */
19060                 if (t && value_dependent_expression_p (t))
19061                   return true;
19062               }
19063           }
19064           break;
19065         default:
19066           break;
19067         }
19068       break;
19069     }
19070
19071   /* The expression is not value-dependent.  */
19072   return false;
19073 }
19074
19075 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
19076    [temp.dep.expr].  Note that an expression with no type is
19077    considered dependent.  Other parts of the compiler arrange for an
19078    expression with type-dependent subexpressions to have no type, so
19079    this function doesn't have to be fully recursive.  */
19080
19081 bool
19082 type_dependent_expression_p (tree expression)
19083 {
19084   if (!processing_template_decl)
19085     return false;
19086
19087   if (expression == error_mark_node)
19088     return false;
19089
19090   /* An unresolved name is always dependent.  */
19091   if (TREE_CODE (expression) == IDENTIFIER_NODE
19092       || TREE_CODE (expression) == USING_DECL)
19093     return true;
19094
19095   /* Some expression forms are never type-dependent.  */
19096   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
19097       || TREE_CODE (expression) == SIZEOF_EXPR
19098       || TREE_CODE (expression) == ALIGNOF_EXPR
19099       || TREE_CODE (expression) == AT_ENCODE_EXPR
19100       || TREE_CODE (expression) == NOEXCEPT_EXPR
19101       || TREE_CODE (expression) == TRAIT_EXPR
19102       || TREE_CODE (expression) == TYPEID_EXPR
19103       || TREE_CODE (expression) == DELETE_EXPR
19104       || TREE_CODE (expression) == VEC_DELETE_EXPR
19105       || TREE_CODE (expression) == THROW_EXPR)
19106     return false;
19107
19108   /* The types of these expressions depends only on the type to which
19109      the cast occurs.  */
19110   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
19111       || TREE_CODE (expression) == STATIC_CAST_EXPR
19112       || TREE_CODE (expression) == CONST_CAST_EXPR
19113       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
19114       || TREE_CODE (expression) == CAST_EXPR)
19115     return dependent_type_p (TREE_TYPE (expression));
19116
19117   /* The types of these expressions depends only on the type created
19118      by the expression.  */
19119   if (TREE_CODE (expression) == NEW_EXPR
19120       || TREE_CODE (expression) == VEC_NEW_EXPR)
19121     {
19122       /* For NEW_EXPR tree nodes created inside a template, either
19123          the object type itself or a TREE_LIST may appear as the
19124          operand 1.  */
19125       tree type = TREE_OPERAND (expression, 1);
19126       if (TREE_CODE (type) == TREE_LIST)
19127         /* This is an array type.  We need to check array dimensions
19128            as well.  */
19129         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
19130                || value_dependent_expression_p
19131                     (TREE_OPERAND (TREE_VALUE (type), 1));
19132       else
19133         return dependent_type_p (type);
19134     }
19135
19136   if (TREE_CODE (expression) == SCOPE_REF)
19137     {
19138       tree scope = TREE_OPERAND (expression, 0);
19139       tree name = TREE_OPERAND (expression, 1);
19140
19141       /* 14.6.2.2 [temp.dep.expr]: An id-expression is type-dependent if it
19142          contains an identifier associated by name lookup with one or more
19143          declarations declared with a dependent type, or...a
19144          nested-name-specifier or qualified-id that names a member of an
19145          unknown specialization.  */
19146       return (type_dependent_expression_p (name)
19147               || dependent_scope_p (scope));
19148     }
19149
19150   if (TREE_CODE (expression) == FUNCTION_DECL
19151       && DECL_LANG_SPECIFIC (expression)
19152       && DECL_TEMPLATE_INFO (expression)
19153       && (any_dependent_template_arguments_p
19154           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
19155     return true;
19156
19157   if (TREE_CODE (expression) == TEMPLATE_DECL
19158       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
19159     return false;
19160
19161   if (TREE_CODE (expression) == STMT_EXPR)
19162     expression = stmt_expr_value_expr (expression);
19163
19164   if (BRACE_ENCLOSED_INITIALIZER_P (expression))
19165     {
19166       tree elt;
19167       unsigned i;
19168
19169       FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expression), i, elt)
19170         {
19171           if (type_dependent_expression_p (elt))
19172             return true;
19173         }
19174       return false;
19175     }
19176
19177   /* A static data member of the current instantiation with incomplete
19178      array type is type-dependent, as the definition and specializations
19179      can have different bounds.  */
19180   if (TREE_CODE (expression) == VAR_DECL
19181       && DECL_CLASS_SCOPE_P (expression)
19182       && dependent_type_p (DECL_CONTEXT (expression))
19183       && VAR_HAD_UNKNOWN_BOUND (expression))
19184     return true;
19185
19186   if (TREE_TYPE (expression) == unknown_type_node)
19187     {
19188       if (TREE_CODE (expression) == ADDR_EXPR)
19189         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
19190       if (TREE_CODE (expression) == COMPONENT_REF
19191           || TREE_CODE (expression) == OFFSET_REF)
19192         {
19193           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
19194             return true;
19195           expression = TREE_OPERAND (expression, 1);
19196           if (TREE_CODE (expression) == IDENTIFIER_NODE)
19197             return false;
19198         }
19199       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
19200       if (TREE_CODE (expression) == SCOPE_REF)
19201         return false;
19202
19203       if (TREE_CODE (expression) == BASELINK)
19204         expression = BASELINK_FUNCTIONS (expression);
19205
19206       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
19207         {
19208           if (any_dependent_template_arguments_p
19209               (TREE_OPERAND (expression, 1)))
19210             return true;
19211           expression = TREE_OPERAND (expression, 0);
19212         }
19213       gcc_assert (TREE_CODE (expression) == OVERLOAD
19214                   || TREE_CODE (expression) == FUNCTION_DECL);
19215
19216       while (expression)
19217         {
19218           if (type_dependent_expression_p (OVL_CURRENT (expression)))
19219             return true;
19220           expression = OVL_NEXT (expression);
19221         }
19222       return false;
19223     }
19224
19225   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
19226
19227   return (dependent_type_p (TREE_TYPE (expression)));
19228 }
19229
19230 /* Like type_dependent_expression_p, but it also works while not processing
19231    a template definition, i.e. during substitution or mangling.  */
19232
19233 bool
19234 type_dependent_expression_p_push (tree expr)
19235 {
19236   bool b;
19237   ++processing_template_decl;
19238   b = type_dependent_expression_p (expr);
19239   --processing_template_decl;
19240   return b;
19241 }
19242
19243 /* Returns TRUE if ARGS contains a type-dependent expression.  */
19244
19245 bool
19246 any_type_dependent_arguments_p (const VEC(tree,gc) *args)
19247 {
19248   unsigned int i;
19249   tree arg;
19250
19251   FOR_EACH_VEC_ELT (tree, args, i, arg)
19252     {
19253       if (type_dependent_expression_p (arg))
19254         return true;
19255     }
19256   return false;
19257 }
19258
19259 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19260    expressions) contains any type-dependent expressions.  */
19261
19262 bool
19263 any_type_dependent_elements_p (const_tree list)
19264 {
19265   for (; list; list = TREE_CHAIN (list))
19266     if (value_dependent_expression_p (TREE_VALUE (list)))
19267       return true;
19268
19269   return false;
19270 }
19271
19272 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
19273    expressions) contains any value-dependent expressions.  */
19274
19275 bool
19276 any_value_dependent_elements_p (const_tree list)
19277 {
19278   for (; list; list = TREE_CHAIN (list))
19279     if (value_dependent_expression_p (TREE_VALUE (list)))
19280       return true;
19281
19282   return false;
19283 }
19284
19285 /* Returns TRUE if the ARG (a template argument) is dependent.  */
19286
19287 bool
19288 dependent_template_arg_p (tree arg)
19289 {
19290   if (!processing_template_decl)
19291     return false;
19292
19293   /* Assume a template argument that was wrongly written by the user
19294      is dependent. This is consistent with what
19295      any_dependent_template_arguments_p [that calls this function]
19296      does.  */
19297   if (!arg || arg == error_mark_node)
19298     return true;
19299
19300   if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
19301     arg = ARGUMENT_PACK_SELECT_ARG (arg);
19302
19303   if (TREE_CODE (arg) == TEMPLATE_DECL
19304       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19305     return dependent_template_p (arg);
19306   else if (ARGUMENT_PACK_P (arg))
19307     {
19308       tree args = ARGUMENT_PACK_ARGS (arg);
19309       int i, len = TREE_VEC_LENGTH (args);
19310       for (i = 0; i < len; ++i)
19311         {
19312           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
19313             return true;
19314         }
19315
19316       return false;
19317     }
19318   else if (TYPE_P (arg))
19319     return dependent_type_p (arg);
19320   else
19321     return (type_dependent_expression_p (arg)
19322             || value_dependent_expression_p (arg));
19323 }
19324
19325 /* Returns true if ARGS (a collection of template arguments) contains
19326    any types that require structural equality testing.  */
19327
19328 bool
19329 any_template_arguments_need_structural_equality_p (tree args)
19330 {
19331   int i;
19332   int j;
19333
19334   if (!args)
19335     return false;
19336   if (args == error_mark_node)
19337     return true;
19338
19339   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19340     {
19341       tree level = TMPL_ARGS_LEVEL (args, i + 1);
19342       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19343         {
19344           tree arg = TREE_VEC_ELT (level, j);
19345           tree packed_args = NULL_TREE;
19346           int k, len = 1;
19347
19348           if (ARGUMENT_PACK_P (arg))
19349             {
19350               /* Look inside the argument pack.  */
19351               packed_args = ARGUMENT_PACK_ARGS (arg);
19352               len = TREE_VEC_LENGTH (packed_args);
19353             }
19354
19355           for (k = 0; k < len; ++k)
19356             {
19357               if (packed_args)
19358                 arg = TREE_VEC_ELT (packed_args, k);
19359
19360               if (error_operand_p (arg))
19361                 return true;
19362               else if (TREE_CODE (arg) == TEMPLATE_DECL
19363                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
19364                 continue;
19365               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
19366                 return true;
19367               else if (!TYPE_P (arg) && TREE_TYPE (arg)
19368                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
19369                 return true;
19370             }
19371         }
19372     }
19373
19374   return false;
19375 }
19376
19377 /* Returns true if ARGS (a collection of template arguments) contains
19378    any dependent arguments.  */
19379
19380 bool
19381 any_dependent_template_arguments_p (const_tree args)
19382 {
19383   int i;
19384   int j;
19385
19386   if (!args)
19387     return false;
19388   if (args == error_mark_node)
19389     return true;
19390
19391   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
19392     {
19393       const_tree level = TMPL_ARGS_LEVEL (args, i + 1);
19394       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
19395         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
19396           return true;
19397     }
19398
19399   return false;
19400 }
19401
19402 /* Returns TRUE if the template TMPL is dependent.  */
19403
19404 bool
19405 dependent_template_p (tree tmpl)
19406 {
19407   if (TREE_CODE (tmpl) == OVERLOAD)
19408     {
19409       while (tmpl)
19410         {
19411           if (dependent_template_p (OVL_CURRENT (tmpl)))
19412             return true;
19413           tmpl = OVL_NEXT (tmpl);
19414         }
19415       return false;
19416     }
19417
19418   /* Template template parameters are dependent.  */
19419   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
19420       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
19421     return true;
19422   /* So are names that have not been looked up.  */
19423   if (TREE_CODE (tmpl) == SCOPE_REF
19424       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
19425     return true;
19426   /* So are member templates of dependent classes.  */
19427   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
19428     return dependent_type_p (DECL_CONTEXT (tmpl));
19429   return false;
19430 }
19431
19432 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
19433
19434 bool
19435 dependent_template_id_p (tree tmpl, tree args)
19436 {
19437   return (dependent_template_p (tmpl)
19438           || any_dependent_template_arguments_p (args));
19439 }
19440
19441 /* Returns TRUE if OMP_FOR with DECLV, INITV, CONDV and INCRV vectors
19442    is dependent.  */
19443
19444 bool
19445 dependent_omp_for_p (tree declv, tree initv, tree condv, tree incrv)
19446 {
19447   int i;
19448
19449   if (!processing_template_decl)
19450     return false;
19451
19452   for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
19453     {
19454       tree decl = TREE_VEC_ELT (declv, i);
19455       tree init = TREE_VEC_ELT (initv, i);
19456       tree cond = TREE_VEC_ELT (condv, i);
19457       tree incr = TREE_VEC_ELT (incrv, i);
19458
19459       if (type_dependent_expression_p (decl))
19460         return true;
19461
19462       if (init && type_dependent_expression_p (init))
19463         return true;
19464
19465       if (type_dependent_expression_p (cond))
19466         return true;
19467
19468       if (COMPARISON_CLASS_P (cond)
19469           && (type_dependent_expression_p (TREE_OPERAND (cond, 0))
19470               || type_dependent_expression_p (TREE_OPERAND (cond, 1))))
19471         return true;
19472
19473       if (TREE_CODE (incr) == MODOP_EXPR)
19474         {
19475           if (type_dependent_expression_p (TREE_OPERAND (incr, 0))
19476               || type_dependent_expression_p (TREE_OPERAND (incr, 2)))
19477             return true;
19478         }
19479       else if (type_dependent_expression_p (incr))
19480         return true;
19481       else if (TREE_CODE (incr) == MODIFY_EXPR)
19482         {
19483           if (type_dependent_expression_p (TREE_OPERAND (incr, 0)))
19484             return true;
19485           else if (BINARY_CLASS_P (TREE_OPERAND (incr, 1)))
19486             {
19487               tree t = TREE_OPERAND (incr, 1);
19488               if (type_dependent_expression_p (TREE_OPERAND (t, 0))
19489                   || type_dependent_expression_p (TREE_OPERAND (t, 1)))
19490                 return true;
19491             }
19492         }
19493     }
19494
19495   return false;
19496 }
19497
19498 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
19499    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
19500    no such TYPE can be found.  Note that this function peers inside
19501    uninstantiated templates and therefore should be used only in
19502    extremely limited situations.  ONLY_CURRENT_P restricts this
19503    peering to the currently open classes hierarchy (which is required
19504    when comparing types).  */
19505
19506 tree
19507 resolve_typename_type (tree type, bool only_current_p)
19508 {
19509   tree scope;
19510   tree name;
19511   tree decl;
19512   int quals;
19513   tree pushed_scope;
19514   tree result;
19515
19516   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
19517
19518   scope = TYPE_CONTEXT (type);
19519   /* Usually the non-qualified identifier of a TYPENAME_TYPE is
19520      TYPE_IDENTIFIER (type). But when 'type' is a typedef variant of
19521      a TYPENAME_TYPE node, then TYPE_NAME (type) is set to the TYPE_DECL representing
19522      the typedef. In that case TYPE_IDENTIFIER (type) is not the non-qualified
19523      identifier  of the TYPENAME_TYPE anymore.
19524      So by getting the TYPE_IDENTIFIER of the _main declaration_ of the
19525      TYPENAME_TYPE instead, we avoid messing up with a possible
19526      typedef variant case.  */
19527   name = TYPE_IDENTIFIER (TYPE_MAIN_VARIANT (type));
19528
19529   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
19530      it first before we can figure out what NAME refers to.  */
19531   if (TREE_CODE (scope) == TYPENAME_TYPE)
19532     scope = resolve_typename_type (scope, only_current_p);
19533   /* If we don't know what SCOPE refers to, then we cannot resolve the
19534      TYPENAME_TYPE.  */
19535   if (TREE_CODE (scope) == TYPENAME_TYPE)
19536     return type;
19537   /* If the SCOPE is a template type parameter, we have no way of
19538      resolving the name.  */
19539   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
19540     return type;
19541   /* If the SCOPE is not the current instantiation, there's no reason
19542      to look inside it.  */
19543   if (only_current_p && !currently_open_class (scope))
19544     return type;
19545   /* If this is a typedef, we don't want to look inside (c++/11987).  */
19546   if (typedef_variant_p (type))
19547     return type;
19548   /* If SCOPE isn't the template itself, it will not have a valid
19549      TYPE_FIELDS list.  */
19550   if (same_type_p (scope, CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope)))
19551     /* scope is either the template itself or a compatible instantiation
19552        like X<T>, so look up the name in the original template.  */
19553     scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
19554   else
19555     /* scope is a partial instantiation, so we can't do the lookup or we
19556        will lose the template arguments.  */
19557     return type;
19558   /* Enter the SCOPE so that name lookup will be resolved as if we
19559      were in the class definition.  In particular, SCOPE will no
19560      longer be considered a dependent type.  */
19561   pushed_scope = push_scope (scope);
19562   /* Look up the declaration.  */
19563   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
19564
19565   result = NULL_TREE;
19566   
19567   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
19568      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
19569   if (!decl)
19570     /*nop*/;
19571   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
19572            && TREE_CODE (decl) == TYPE_DECL)
19573     {
19574       result = TREE_TYPE (decl);
19575       if (result == error_mark_node)
19576         result = NULL_TREE;
19577     }
19578   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
19579            && DECL_CLASS_TEMPLATE_P (decl))
19580     {
19581       tree tmpl;
19582       tree args;
19583       /* Obtain the template and the arguments.  */
19584       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
19585       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
19586       /* Instantiate the template.  */
19587       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
19588                                       /*entering_scope=*/0,
19589                                       tf_error | tf_user);
19590       if (result == error_mark_node)
19591         result = NULL_TREE;
19592     }
19593   
19594   /* Leave the SCOPE.  */
19595   if (pushed_scope)
19596     pop_scope (pushed_scope);
19597
19598   /* If we failed to resolve it, return the original typename.  */
19599   if (!result)
19600     return type;
19601   
19602   /* If lookup found a typename type, resolve that too.  */
19603   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
19604     {
19605       /* Ill-formed programs can cause infinite recursion here, so we
19606          must catch that.  */
19607       TYPENAME_IS_RESOLVING_P (type) = 1;
19608       result = resolve_typename_type (result, only_current_p);
19609       TYPENAME_IS_RESOLVING_P (type) = 0;
19610     }
19611   
19612   /* Qualify the resulting type.  */
19613   quals = cp_type_quals (type);
19614   if (quals)
19615     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
19616
19617   return result;
19618 }
19619
19620 /* EXPR is an expression which is not type-dependent.  Return a proxy
19621    for EXPR that can be used to compute the types of larger
19622    expressions containing EXPR.  */
19623
19624 tree
19625 build_non_dependent_expr (tree expr)
19626 {
19627   tree inner_expr;
19628
19629 #ifdef ENABLE_CHECKING
19630   /* Try to get a constant value for all non-type-dependent expressions in
19631       order to expose bugs in *_dependent_expression_p and constexpr.  */
19632   if (cxx_dialect >= cxx0x)
19633     maybe_constant_value (fold_non_dependent_expr_sfinae (expr, tf_none));
19634 #endif
19635
19636   /* Preserve OVERLOADs; the functions must be available to resolve
19637      types.  */
19638   inner_expr = expr;
19639   if (TREE_CODE (inner_expr) == STMT_EXPR)
19640     inner_expr = stmt_expr_value_expr (inner_expr);
19641   if (TREE_CODE (inner_expr) == ADDR_EXPR)
19642     inner_expr = TREE_OPERAND (inner_expr, 0);
19643   if (TREE_CODE (inner_expr) == COMPONENT_REF)
19644     inner_expr = TREE_OPERAND (inner_expr, 1);
19645   if (is_overloaded_fn (inner_expr)
19646       || TREE_CODE (inner_expr) == OFFSET_REF)
19647     return expr;
19648   /* There is no need to return a proxy for a variable.  */
19649   if (TREE_CODE (expr) == VAR_DECL)
19650     return expr;
19651   /* Preserve string constants; conversions from string constants to
19652      "char *" are allowed, even though normally a "const char *"
19653      cannot be used to initialize a "char *".  */
19654   if (TREE_CODE (expr) == STRING_CST)
19655     return expr;
19656   /* Preserve arithmetic constants, as an optimization -- there is no
19657      reason to create a new node.  */
19658   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
19659     return expr;
19660   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
19661      There is at least one place where we want to know that a
19662      particular expression is a throw-expression: when checking a ?:
19663      expression, there are special rules if the second or third
19664      argument is a throw-expression.  */
19665   if (TREE_CODE (expr) == THROW_EXPR)
19666     return expr;
19667
19668   if (TREE_CODE (expr) == COND_EXPR)
19669     return build3 (COND_EXPR,
19670                    TREE_TYPE (expr),
19671                    TREE_OPERAND (expr, 0),
19672                    (TREE_OPERAND (expr, 1)
19673                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
19674                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
19675                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
19676   if (TREE_CODE (expr) == COMPOUND_EXPR
19677       && !COMPOUND_EXPR_OVERLOADED (expr))
19678     return build2 (COMPOUND_EXPR,
19679                    TREE_TYPE (expr),
19680                    TREE_OPERAND (expr, 0),
19681                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
19682
19683   /* If the type is unknown, it can't really be non-dependent */
19684   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
19685
19686   /* Otherwise, build a NON_DEPENDENT_EXPR.  */
19687   return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
19688 }
19689
19690 /* ARGS is a vector of expressions as arguments to a function call.
19691    Replace the arguments with equivalent non-dependent expressions.
19692    This modifies ARGS in place.  */
19693
19694 void
19695 make_args_non_dependent (VEC(tree,gc) *args)
19696 {
19697   unsigned int ix;
19698   tree arg;
19699
19700   FOR_EACH_VEC_ELT (tree, args, ix, arg)
19701     {
19702       tree newarg = build_non_dependent_expr (arg);
19703       if (newarg != arg)
19704         VEC_replace (tree, args, ix, newarg);
19705     }
19706 }
19707
19708 /* Returns a type which represents 'auto'.  We use a TEMPLATE_TYPE_PARM
19709    with a level one deeper than the actual template parms.  */
19710
19711 tree
19712 make_auto (void)
19713 {
19714   tree au = cxx_make_type (TEMPLATE_TYPE_PARM);
19715   TYPE_NAME (au) = build_decl (BUILTINS_LOCATION,
19716                                TYPE_DECL, get_identifier ("auto"), au);
19717   TYPE_STUB_DECL (au) = TYPE_NAME (au);
19718   TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
19719     (0, processing_template_decl + 1, processing_template_decl + 1,
19720      0, TYPE_NAME (au), NULL_TREE);
19721   TYPE_CANONICAL (au) = canonical_type_parameter (au);
19722   DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
19723   SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
19724
19725   return au;
19726 }
19727
19728 /* Given type ARG, return std::initializer_list<ARG>.  */
19729
19730 static tree
19731 listify (tree arg)
19732 {
19733   tree std_init_list = namespace_binding
19734     (get_identifier ("initializer_list"), std_node);
19735   tree argvec;
19736   if (!std_init_list || !DECL_CLASS_TEMPLATE_P (std_init_list))
19737     {    
19738       error ("deducing from brace-enclosed initializer list requires "
19739              "#include <initializer_list>");
19740       return error_mark_node;
19741     }
19742   argvec = make_tree_vec (1);
19743   TREE_VEC_ELT (argvec, 0) = arg;
19744   return lookup_template_class (std_init_list, argvec, NULL_TREE,
19745                                 NULL_TREE, 0, tf_warning_or_error);
19746 }
19747
19748 /* Replace auto in TYPE with std::initializer_list<auto>.  */
19749
19750 static tree
19751 listify_autos (tree type, tree auto_node)
19752 {
19753   tree init_auto = listify (auto_node);
19754   tree argvec = make_tree_vec (1);
19755   TREE_VEC_ELT (argvec, 0) = init_auto;
19756   if (processing_template_decl)
19757     argvec = add_to_template_args (current_template_args (), argvec);
19758   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
19759 }
19760
19761 /* walk_tree helper for do_auto_deduction.  */
19762
19763 static tree
19764 contains_auto_r (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED,
19765                  void *type)
19766 {
19767   /* Is this a variable with the type we're looking for?  */
19768   if (DECL_P (*tp)
19769       && TREE_TYPE (*tp) == type)
19770     return *tp;
19771   else
19772     return NULL_TREE;
19773 }
19774
19775 /* Replace occurrences of 'auto' in TYPE with the appropriate type deduced
19776    from INIT.  AUTO_NODE is the TEMPLATE_TYPE_PARM used for 'auto' in TYPE.  */
19777
19778 tree
19779 do_auto_deduction (tree type, tree init, tree auto_node)
19780 {
19781   tree parms, tparms, targs;
19782   tree args[1];
19783   tree decl;
19784   int val;
19785
19786   if (processing_template_decl
19787       && (TREE_TYPE (init) == NULL_TREE
19788           || BRACE_ENCLOSED_INITIALIZER_P (init)))
19789     /* Not enough information to try this yet.  */
19790     return type;
19791
19792   /* The name of the object being declared shall not appear in the
19793      initializer expression.  */
19794   decl = cp_walk_tree_without_duplicates (&init, contains_auto_r, type);
19795   if (decl)
19796     {
19797       error ("variable %q#D with %<auto%> type used in its own "
19798              "initializer", decl);
19799       return error_mark_node;
19800     }
19801
19802   /* [dcl.spec.auto]: Obtain P from T by replacing the occurrences of auto
19803      with either a new invented type template parameter U or, if the
19804      initializer is a braced-init-list (8.5.4), with
19805      std::initializer_list<U>.  */
19806   if (BRACE_ENCLOSED_INITIALIZER_P (init))
19807     type = listify_autos (type, auto_node);
19808
19809   init = resolve_nondeduced_context (init);
19810
19811   parms = build_tree_list (NULL_TREE, type);
19812   args[0] = init;
19813   tparms = make_tree_vec (1);
19814   targs = make_tree_vec (1);
19815   TREE_VEC_ELT (tparms, 0)
19816     = build_tree_list (NULL_TREE, TYPE_NAME (auto_node));
19817   val = type_unification_real (tparms, targs, parms, args, 1, 0,
19818                                DEDUCE_CALL, LOOKUP_NORMAL,
19819                                /*explain_p=*/false);
19820   if (val > 0)
19821     {
19822       if (processing_template_decl)
19823         /* Try again at instantiation time.  */
19824         return type;
19825       if (type && type != error_mark_node)
19826         /* If type is error_mark_node a diagnostic must have been
19827            emitted by now.  Also, having a mention to '<type error>'
19828            in the diagnostic is not really useful to the user.  */
19829         error ("unable to deduce %qT from %qE", type, init);
19830       return error_mark_node;
19831     }
19832
19833   /* If the list of declarators contains more than one declarator, the type
19834      of each declared variable is determined as described above. If the
19835      type deduced for the template parameter U is not the same in each
19836      deduction, the program is ill-formed.  */
19837   if (TREE_TYPE (auto_node)
19838       && !same_type_p (TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0)))
19839     {
19840       error ("inconsistent deduction for %qT: %qT and then %qT",
19841              auto_node, TREE_TYPE (auto_node), TREE_VEC_ELT (targs, 0));
19842       return error_mark_node;
19843     }
19844   TREE_TYPE (auto_node) = TREE_VEC_ELT (targs, 0);
19845
19846   if (processing_template_decl)
19847     targs = add_to_template_args (current_template_args (), targs);
19848   return tsubst (type, targs, tf_warning_or_error, NULL_TREE);
19849 }
19850
19851 /* Substitutes LATE_RETURN_TYPE for 'auto' in TYPE and returns the
19852    result.  */
19853
19854 tree
19855 splice_late_return_type (tree type, tree late_return_type)
19856 {
19857   tree argvec;
19858
19859   if (late_return_type == NULL_TREE)
19860     return type;
19861   argvec = make_tree_vec (1);
19862   TREE_VEC_ELT (argvec, 0) = late_return_type;
19863   if (processing_template_parmlist)
19864     /* For a late-specified return type in a template type-parameter, we
19865        need to add a dummy argument level for its parmlist.  */
19866     argvec = add_to_template_args
19867       (make_tree_vec (processing_template_parmlist), argvec);
19868   if (current_template_parms)
19869     argvec = add_to_template_args (current_template_args (), argvec);
19870   return tsubst (type, argvec, tf_warning_or_error, NULL_TREE);
19871 }
19872
19873 /* Returns true iff TYPE is a TEMPLATE_TYPE_PARM representing 'auto'.  */
19874
19875 bool
19876 is_auto (const_tree type)
19877 {
19878   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
19879       && TYPE_IDENTIFIER (type) == get_identifier ("auto"))
19880     return true;
19881   else
19882     return false;
19883 }
19884
19885 /* Returns true iff TYPE contains a use of 'auto'.  Since auto can only
19886    appear as a type-specifier for the declaration in question, we don't
19887    have to look through the whole type.  */
19888
19889 tree
19890 type_uses_auto (tree type)
19891 {
19892   enum tree_code code;
19893   if (is_auto (type))
19894     return type;
19895
19896   code = TREE_CODE (type);
19897
19898   if (code == POINTER_TYPE || code == REFERENCE_TYPE
19899       || code == OFFSET_TYPE || code == FUNCTION_TYPE
19900       || code == METHOD_TYPE || code == ARRAY_TYPE)
19901     return type_uses_auto (TREE_TYPE (type));
19902
19903   if (TYPE_PTRMEMFUNC_P (type))
19904     return type_uses_auto (TREE_TYPE (TREE_TYPE
19905                                    (TYPE_PTRMEMFUNC_FN_TYPE (type))));
19906
19907   return NULL_TREE;
19908 }
19909
19910 /* For a given template T, return the vector of typedefs referenced
19911    in T for which access check is needed at T instantiation time.
19912    T is either  a FUNCTION_DECL or a RECORD_TYPE.
19913    Those typedefs were added to T by the function
19914    append_type_to_template_for_access_check.  */
19915
19916 VEC(qualified_typedef_usage_t,gc)*
19917 get_types_needing_access_check (tree t)
19918 {
19919   tree ti;
19920   VEC(qualified_typedef_usage_t,gc) *result = NULL;
19921
19922   if (!t || t == error_mark_node)
19923     return NULL;
19924
19925   if (!(ti = get_template_info (t)))
19926     return NULL;
19927
19928   if (CLASS_TYPE_P (t)
19929       || TREE_CODE (t) == FUNCTION_DECL)
19930     {
19931       if (!TI_TEMPLATE (ti))
19932         return NULL;
19933
19934       result = TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti);
19935     }
19936
19937   return result;
19938 }
19939
19940 /* Append the typedef TYPE_DECL used in template T to a list of typedefs
19941    tied to T. That list of typedefs will be access checked at
19942    T instantiation time.
19943    T is either a FUNCTION_DECL or a RECORD_TYPE.
19944    TYPE_DECL is a TYPE_DECL node representing a typedef.
19945    SCOPE is the scope through which TYPE_DECL is accessed.
19946    LOCATION is the location of the usage point of TYPE_DECL.
19947
19948    This function is a subroutine of
19949    append_type_to_template_for_access_check.  */
19950
19951 static void
19952 append_type_to_template_for_access_check_1 (tree t,
19953                                             tree type_decl,
19954                                             tree scope,
19955                                             location_t location)
19956 {
19957   qualified_typedef_usage_t typedef_usage;
19958   tree ti;
19959
19960   if (!t || t == error_mark_node)
19961     return;
19962
19963   gcc_assert ((TREE_CODE (t) == FUNCTION_DECL
19964                || CLASS_TYPE_P (t))
19965               && type_decl
19966               && TREE_CODE (type_decl) == TYPE_DECL
19967               && scope);
19968
19969   if (!(ti = get_template_info (t)))
19970     return;
19971
19972   gcc_assert (TI_TEMPLATE (ti));
19973
19974   typedef_usage.typedef_decl = type_decl;
19975   typedef_usage.context = scope;
19976   typedef_usage.locus = location;
19977
19978   VEC_safe_push (qualified_typedef_usage_t, gc,
19979                  TI_TYPEDEFS_NEEDING_ACCESS_CHECKING (ti),
19980                  &typedef_usage);
19981 }
19982
19983 /* Append TYPE_DECL to the template TEMPL.
19984    TEMPL is either a class type, a FUNCTION_DECL or a a TEMPLATE_DECL.
19985    At TEMPL instanciation time, TYPE_DECL will be checked to see
19986    if it can be accessed through SCOPE.
19987    LOCATION is the location of the usage point of TYPE_DECL.
19988
19989    e.g. consider the following code snippet:
19990
19991      class C
19992      {
19993        typedef int myint;
19994      };
19995
19996      template<class U> struct S
19997      {
19998        C::myint mi; // <-- usage point of the typedef C::myint
19999      };
20000
20001      S<char> s;
20002
20003    At S<char> instantiation time, we need to check the access of C::myint
20004    In other words, we need to check the access of the myint typedef through
20005    the C scope. For that purpose, this function will add the myint typedef
20006    and the scope C through which its being accessed to a list of typedefs
20007    tied to the template S. That list will be walked at template instantiation
20008    time and access check performed on each typedefs it contains.
20009    Note that this particular code snippet should yield an error because
20010    myint is private to C.  */
20011
20012 void
20013 append_type_to_template_for_access_check (tree templ,
20014                                           tree type_decl,
20015                                           tree scope,
20016                                           location_t location)
20017 {
20018   qualified_typedef_usage_t *iter;
20019   int i;
20020
20021   gcc_assert (type_decl && (TREE_CODE (type_decl) == TYPE_DECL));
20022
20023   /* Make sure we don't append the type to the template twice.  */
20024   FOR_EACH_VEC_ELT (qualified_typedef_usage_t,
20025                     get_types_needing_access_check (templ),
20026                     i, iter)
20027     if (iter->typedef_decl == type_decl && scope == iter->context)
20028       return;
20029
20030   append_type_to_template_for_access_check_1 (templ, type_decl,
20031                                               scope, location);
20032 }
20033
20034 /* Set up the hash tables for template instantiations.  */
20035
20036 void
20037 init_template_processing (void)
20038 {
20039   decl_specializations = htab_create_ggc (37,
20040                                           hash_specialization,
20041                                           eq_specializations,
20042                                           ggc_free);
20043   type_specializations = htab_create_ggc (37,
20044                                           hash_specialization,
20045                                           eq_specializations,
20046                                           ggc_free);
20047 }
20048
20049 /* Print stats about the template hash tables for -fstats.  */
20050
20051 void
20052 print_template_statistics (void)
20053 {
20054   fprintf (stderr, "decl_specializations: size %ld, %ld elements, "
20055            "%f collisions\n", (long) htab_size (decl_specializations),
20056            (long) htab_elements (decl_specializations),
20057            htab_collisions (decl_specializations));
20058   fprintf (stderr, "type_specializations: size %ld, %ld elements, "
20059            "%f collisions\n", (long) htab_size (type_specializations),
20060            (long) htab_elements (type_specializations),
20061            htab_collisions (type_specializations));
20062 }
20063
20064 #include "gt-cp-pt.h"