OSDN Git Service

/cp
[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  Free Software Foundation, Inc.
4    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5    Rewritten by Jason Merrill (jason@cygnus.com).
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING.  If not, write to
21 the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 Boston, MA 02110-1301, USA.  */
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 "obstack.h"
34 #include "tree.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "c-common.h"
38 #include "cp-tree.h"
39 #include "cp-objcp-common.h"
40 #include "tree-inline.h"
41 #include "decl.h"
42 #include "output.h"
43 #include "except.h"
44 #include "toplev.h"
45 #include "rtl.h"
46 #include "timevar.h"
47 #include "tree-iterator.h"
48 #include "vecprim.h"
49
50 /* The type of functions taking a tree, and some additional data, and
51    returning an int.  */
52 typedef int (*tree_fn_t) (tree, void*);
53
54 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
55    instantiations have been deferred, either because their definitions
56    were not yet available, or because we were putting off doing the work.
57    The TREE_PURPOSE of each entry is either a DECL (for a function or
58    static data member), or a TYPE (for a class) indicating what we are
59    hoping to instantiate.  The TREE_VALUE is not used.  */
60 static GTY(()) tree pending_templates;
61 static GTY(()) tree last_pending_template;
62
63 int processing_template_parmlist;
64 static int template_header_count;
65
66 static GTY(()) tree saved_trees;
67 static VEC(int,heap) *inline_parm_levels;
68
69 static GTY(()) tree current_tinst_level;
70
71 static GTY(()) tree saved_access_scope;
72
73 /* Live only within one (recursive) call to tsubst_expr.  We use
74    this to pass the statement expression node from the STMT_EXPR
75    to the EXPR_STMT that is its result.  */
76 static tree cur_stmt_expr;
77
78 /* A map from local variable declarations in the body of the template
79    presently being instantiated to the corresponding instantiated
80    local variables.  */
81 static htab_t local_specializations;
82
83 /* Contains canonical template parameter types. The vector is indexed by
84    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
85    TREE_LIST, whose TREE_VALUEs contain the canonical template
86    parameters of various types and levels.  */
87 static GTY(()) VEC(tree,gc) *canonical_template_parms;
88
89 #define UNIFY_ALLOW_NONE 0
90 #define UNIFY_ALLOW_MORE_CV_QUAL 1
91 #define UNIFY_ALLOW_LESS_CV_QUAL 2
92 #define UNIFY_ALLOW_DERIVED 4
93 #define UNIFY_ALLOW_INTEGER 8
94 #define UNIFY_ALLOW_OUTER_LEVEL 16
95 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
96 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
97
98 static void push_access_scope (tree);
99 static void pop_access_scope (tree);
100 static bool resolve_overloaded_unification (tree, tree, tree, tree,
101                                             unification_kind_t, int);
102 static int try_one_overload (tree, tree, tree, tree, tree,
103                              unification_kind_t, int, bool);
104 static int unify (tree, tree, tree, tree, int);
105 static void add_pending_template (tree);
106 static int push_tinst_level (tree);
107 static void pop_tinst_level (void);
108 static void reopen_tinst_level (tree);
109 static tree tsubst_initializer_list (tree, tree);
110 static tree get_class_bindings (tree, tree, tree);
111 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
112                                    bool, bool);
113 static void tsubst_enum (tree, tree, tree);
114 static tree add_to_template_args (tree, tree);
115 static tree add_outermost_template_args (tree, tree);
116 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
117 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
118                                              tree);
119 static int  type_unification_real (tree, tree, tree, tree,
120                                    int, unification_kind_t, int);
121 static void note_template_header (int);
122 static tree convert_nontype_argument_function (tree, tree);
123 static tree convert_nontype_argument (tree, tree);
124 static tree convert_template_argument (tree, tree, tree,
125                                        tsubst_flags_t, int, tree);
126 static int for_each_template_parm (tree, tree_fn_t, void*,
127                                    struct pointer_set_t*);
128 static tree expand_template_argument_pack (tree);
129 static tree build_template_parm_index (int, int, int, tree, tree);
130 static int inline_needs_template_parms (tree);
131 static void push_inline_template_parms_recursive (tree, int);
132 static tree retrieve_local_specialization (tree);
133 static void register_local_specialization (tree, tree);
134 static tree reduce_template_parm_level (tree, tree, int);
135 static int mark_template_parm (tree, void *);
136 static int template_parm_this_level_p (tree, void *);
137 static tree tsubst_friend_function (tree, tree);
138 static tree tsubst_friend_class (tree, tree);
139 static int can_complete_type_without_circularity (tree);
140 static tree get_bindings (tree, tree, tree, bool);
141 static int template_decl_level (tree);
142 static int check_cv_quals_for_unify (int, tree, tree);
143 static void template_parm_level_and_index (tree, int*, int*);
144 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
145 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
146 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
147 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
148 static void regenerate_decl_from_template (tree, tree);
149 static tree most_specialized_class (tree, tree);
150 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
151 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
152 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
153 static bool check_specialization_scope (void);
154 static tree process_partial_specialization (tree);
155 static void set_current_access_from_decl (tree);
156 static tree get_template_base (tree, tree, tree, tree);
157 static tree try_class_unification (tree, tree, tree, tree);
158 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
159                                            tree, tree);
160 static int template_args_equal (tree, tree);
161 static void tsubst_default_arguments (tree);
162 static tree for_each_template_parm_r (tree *, int *, void *);
163 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
164 static void copy_default_args_to_explicit_spec (tree);
165 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
166 static int eq_local_specializations (const void *, const void *);
167 static bool dependent_template_arg_p (tree);
168 static bool any_template_arguments_need_structural_equality_p (tree);
169 static bool dependent_type_p_r (tree);
170 static tree tsubst (tree, tree, tsubst_flags_t, tree);
171 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
172 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
173 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
174
175 /* Make the current scope suitable for access checking when we are
176    processing T.  T can be FUNCTION_DECL for instantiated function
177    template, or VAR_DECL for static member variable (need by
178    instantiate_decl).  */
179
180 static void
181 push_access_scope (tree t)
182 {
183   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
184               || TREE_CODE (t) == VAR_DECL);
185
186   if (DECL_FRIEND_CONTEXT (t))
187     push_nested_class (DECL_FRIEND_CONTEXT (t));
188   else if (DECL_CLASS_SCOPE_P (t))
189     push_nested_class (DECL_CONTEXT (t));
190   else
191     push_to_top_level ();
192
193   if (TREE_CODE (t) == FUNCTION_DECL)
194     {
195       saved_access_scope = tree_cons
196         (NULL_TREE, current_function_decl, saved_access_scope);
197       current_function_decl = t;
198     }
199 }
200
201 /* Restore the scope set up by push_access_scope.  T is the node we
202    are processing.  */
203
204 static void
205 pop_access_scope (tree t)
206 {
207   if (TREE_CODE (t) == FUNCTION_DECL)
208     {
209       current_function_decl = TREE_VALUE (saved_access_scope);
210       saved_access_scope = TREE_CHAIN (saved_access_scope);
211     }
212
213   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
214     pop_nested_class ();
215   else
216     pop_from_top_level ();
217 }
218
219 /* Do any processing required when DECL (a member template
220    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
221    to DECL, unless it is a specialization, in which case the DECL
222    itself is returned.  */
223
224 tree
225 finish_member_template_decl (tree decl)
226 {
227   if (decl == error_mark_node)
228     return error_mark_node;
229
230   gcc_assert (DECL_P (decl));
231
232   if (TREE_CODE (decl) == TYPE_DECL)
233     {
234       tree type;
235
236       type = TREE_TYPE (decl);
237       if (IS_AGGR_TYPE (type)
238           && CLASSTYPE_TEMPLATE_INFO (type)
239           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
240         {
241           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
242           check_member_template (tmpl);
243           return tmpl;
244         }
245       return NULL_TREE;
246     }
247   else if (TREE_CODE (decl) == FIELD_DECL)
248     error ("data member %qD cannot be a member template", decl);
249   else if (DECL_TEMPLATE_INFO (decl))
250     {
251       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
252         {
253           check_member_template (DECL_TI_TEMPLATE (decl));
254           return DECL_TI_TEMPLATE (decl);
255         }
256       else
257         return decl;
258     }
259   else
260     error ("invalid member template declaration %qD", decl);
261
262   return error_mark_node;
263 }
264
265 /* Returns the template nesting level of the indicated class TYPE.
266
267    For example, in:
268      template <class T>
269      struct A
270      {
271        template <class U>
272        struct B {};
273      };
274
275    A<T>::B<U> has depth two, while A<T> has depth one.
276    Both A<T>::B<int> and A<int>::B<U> have depth one, if
277    they are instantiations, not specializations.
278
279    This function is guaranteed to return 0 if passed NULL_TREE so
280    that, for example, `template_class_depth (current_class_type)' is
281    always safe.  */
282
283 int
284 template_class_depth (tree type)
285 {
286   int depth;
287
288   for (depth = 0;
289        type && TREE_CODE (type) != NAMESPACE_DECL;
290        type = (TREE_CODE (type) == FUNCTION_DECL)
291          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
292     {
293       if (TREE_CODE (type) != FUNCTION_DECL)
294         {
295           if (CLASSTYPE_TEMPLATE_INFO (type)
296               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
297               && uses_template_parms (CLASSTYPE_TI_ARGS (type)))
298             ++depth;
299         }
300       else
301         {
302           if (DECL_TEMPLATE_INFO (type)
303               && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
304               && uses_template_parms (DECL_TI_ARGS (type)))
305             ++depth;
306         }
307     }
308
309   return depth;
310 }
311
312 /* Returns 1 if processing DECL as part of do_pending_inlines
313    needs us to push template parms.  */
314
315 static int
316 inline_needs_template_parms (tree decl)
317 {
318   if (! DECL_TEMPLATE_INFO (decl))
319     return 0;
320
321   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
322           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
323 }
324
325 /* Subroutine of maybe_begin_member_template_processing.
326    Push the template parms in PARMS, starting from LEVELS steps into the
327    chain, and ending at the beginning, since template parms are listed
328    innermost first.  */
329
330 static void
331 push_inline_template_parms_recursive (tree parmlist, int levels)
332 {
333   tree parms = TREE_VALUE (parmlist);
334   int i;
335
336   if (levels > 1)
337     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
338
339   ++processing_template_decl;
340   current_template_parms
341     = tree_cons (size_int (processing_template_decl),
342                  parms, current_template_parms);
343   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
344
345   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
346                NULL);
347   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
348     {
349       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
350
351       if (parm == error_mark_node)
352         continue;
353
354       gcc_assert (DECL_P (parm));
355
356       switch (TREE_CODE (parm))
357         {
358         case TYPE_DECL:
359         case TEMPLATE_DECL:
360           pushdecl (parm);
361           break;
362
363         case PARM_DECL:
364           {
365             /* Make a CONST_DECL as is done in process_template_parm.
366                It is ugly that we recreate this here; the original
367                version built in process_template_parm is no longer
368                available.  */
369             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
370                                     TREE_TYPE (parm));
371             DECL_ARTIFICIAL (decl) = 1;
372             TREE_CONSTANT (decl) = 1;
373             TREE_INVARIANT (decl) = 1;
374             TREE_READONLY (decl) = 1;
375             DECL_INITIAL (decl) = DECL_INITIAL (parm);
376             SET_DECL_TEMPLATE_PARM_P (decl);
377             pushdecl (decl);
378           }
379           break;
380
381         default:
382           gcc_unreachable ();
383         }
384     }
385 }
386
387 /* Restore the template parameter context for a member template or
388    a friend template defined in a class definition.  */
389
390 void
391 maybe_begin_member_template_processing (tree decl)
392 {
393   tree parms;
394   int levels = 0;
395
396   if (inline_needs_template_parms (decl))
397     {
398       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
399       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
400
401       if (DECL_TEMPLATE_SPECIALIZATION (decl))
402         {
403           --levels;
404           parms = TREE_CHAIN (parms);
405         }
406
407       push_inline_template_parms_recursive (parms, levels);
408     }
409
410   /* Remember how many levels of template parameters we pushed so that
411      we can pop them later.  */
412   VEC_safe_push (int, heap, inline_parm_levels, levels);
413 }
414
415 /* Undo the effects of maybe_begin_member_template_processing.  */
416
417 void
418 maybe_end_member_template_processing (void)
419 {
420   int i;
421   int last;
422
423   if (VEC_length (int, inline_parm_levels) == 0)
424     return;
425
426   last = VEC_pop (int, inline_parm_levels);
427   for (i = 0; i < last; ++i)
428     {
429       --processing_template_decl;
430       current_template_parms = TREE_CHAIN (current_template_parms);
431       poplevel (0, 0, 0);
432     }
433 }
434
435 /* Return a new template argument vector which contains all of ARGS,
436    but has as its innermost set of arguments the EXTRA_ARGS.  */
437
438 static tree
439 add_to_template_args (tree args, tree extra_args)
440 {
441   tree new_args;
442   int extra_depth;
443   int i;
444   int j;
445
446   extra_depth = TMPL_ARGS_DEPTH (extra_args);
447   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
448
449   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
450     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
451
452   for (j = 1; j <= extra_depth; ++j, ++i)
453     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
454
455   return new_args;
456 }
457
458 /* Like add_to_template_args, but only the outermost ARGS are added to
459    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
460    (EXTRA_ARGS) levels are added.  This function is used to combine
461    the template arguments from a partial instantiation with the
462    template arguments used to attain the full instantiation from the
463    partial instantiation.  */
464
465 static tree
466 add_outermost_template_args (tree args, tree extra_args)
467 {
468   tree new_args;
469
470   /* If there are more levels of EXTRA_ARGS than there are ARGS,
471      something very fishy is going on.  */
472   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
473
474   /* If *all* the new arguments will be the EXTRA_ARGS, just return
475      them.  */
476   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
477     return extra_args;
478
479   /* For the moment, we make ARGS look like it contains fewer levels.  */
480   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
481
482   new_args = add_to_template_args (args, extra_args);
483
484   /* Now, we restore ARGS to its full dimensions.  */
485   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
486
487   return new_args;
488 }
489
490 /* Return the N levels of innermost template arguments from the ARGS.  */
491
492 tree
493 get_innermost_template_args (tree args, int n)
494 {
495   tree new_args;
496   int extra_levels;
497   int i;
498
499   gcc_assert (n >= 0);
500
501   /* If N is 1, just return the innermost set of template arguments.  */
502   if (n == 1)
503     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
504
505   /* If we're not removing anything, just return the arguments we were
506      given.  */
507   extra_levels = TMPL_ARGS_DEPTH (args) - n;
508   gcc_assert (extra_levels >= 0);
509   if (extra_levels == 0)
510     return args;
511
512   /* Make a new set of arguments, not containing the outer arguments.  */
513   new_args = make_tree_vec (n);
514   for (i = 1; i <= n; ++i)
515     SET_TMPL_ARGS_LEVEL (new_args, i,
516                          TMPL_ARGS_LEVEL (args, i + extra_levels));
517
518   return new_args;
519 }
520
521 /* We've got a template header coming up; push to a new level for storing
522    the parms.  */
523
524 void
525 begin_template_parm_list (void)
526 {
527   /* We use a non-tag-transparent scope here, which causes pushtag to
528      put tags in this scope, rather than in the enclosing class or
529      namespace scope.  This is the right thing, since we want
530      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
531      global template class, push_template_decl handles putting the
532      TEMPLATE_DECL into top-level scope.  For a nested template class,
533      e.g.:
534
535        template <class T> struct S1 {
536          template <class T> struct S2 {};
537        };
538
539      pushtag contains special code to call pushdecl_with_scope on the
540      TEMPLATE_DECL for S2.  */
541   begin_scope (sk_template_parms, NULL);
542   ++processing_template_decl;
543   ++processing_template_parmlist;
544   note_template_header (0);
545 }
546
547 /* This routine is called when a specialization is declared.  If it is
548    invalid to declare a specialization here, an error is reported and
549    false is returned, otherwise this routine will return true.  */
550
551 static bool
552 check_specialization_scope (void)
553 {
554   tree scope = current_scope ();
555
556   /* [temp.expl.spec]
557
558      An explicit specialization shall be declared in the namespace of
559      which the template is a member, or, for member templates, in the
560      namespace of which the enclosing class or enclosing class
561      template is a member.  An explicit specialization of a member
562      function, member class or static data member of a class template
563      shall be declared in the namespace of which the class template
564      is a member.  */
565   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
566     {
567       error ("explicit specialization in non-namespace scope %qD", scope);
568       return false;
569     }
570
571   /* [temp.expl.spec]
572
573      In an explicit specialization declaration for a member of a class
574      template or a member template that appears in namespace scope,
575      the member template and some of its enclosing class templates may
576      remain unspecialized, except that the declaration shall not
577      explicitly specialize a class member template if its enclosing
578      class templates are not explicitly specialized as well.  */
579   if (current_template_parms)
580     {
581       error ("enclosing class templates are not explicitly specialized");
582       return false;
583     }
584
585   return true;
586 }
587
588 /* We've just seen template <>.  */
589
590 bool
591 begin_specialization (void)
592 {
593   begin_scope (sk_template_spec, NULL);
594   note_template_header (1);
595   return check_specialization_scope ();
596 }
597
598 /* Called at then end of processing a declaration preceded by
599    template<>.  */
600
601 void
602 end_specialization (void)
603 {
604   finish_scope ();
605   reset_specialization ();
606 }
607
608 /* Any template <>'s that we have seen thus far are not referring to a
609    function specialization.  */
610
611 void
612 reset_specialization (void)
613 {
614   processing_specialization = 0;
615   template_header_count = 0;
616 }
617
618 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
619    it was of the form template <>.  */
620
621 static void
622 note_template_header (int specialization)
623 {
624   processing_specialization = specialization;
625   template_header_count++;
626 }
627
628 /* We're beginning an explicit instantiation.  */
629
630 void
631 begin_explicit_instantiation (void)
632 {
633   gcc_assert (!processing_explicit_instantiation);
634   processing_explicit_instantiation = true;
635 }
636
637
638 void
639 end_explicit_instantiation (void)
640 {
641   gcc_assert (processing_explicit_instantiation);
642   processing_explicit_instantiation = false;
643 }
644
645 /* An explicit specialization or partial specialization TMPL is being
646    declared.  Check that the namespace in which the specialization is
647    occurring is permissible.  Returns false iff it is invalid to
648    specialize TMPL in the current namespace.  */
649
650 static bool
651 check_specialization_namespace (tree tmpl)
652 {
653   tree tpl_ns = decl_namespace_context (tmpl);
654
655   /* [tmpl.expl.spec]
656
657      An explicit specialization shall be declared in the namespace of
658      which the template is a member, or, for member templates, in the
659      namespace of which the enclosing class or enclosing class
660      template is a member.  An explicit specialization of a member
661      function, member class or static data member of a class template
662      shall be declared in the namespace of which the class template is
663      a member.  */
664   if (is_associated_namespace (current_namespace, tpl_ns))
665     /* Same or super-using namespace.  */
666     return true;
667   else
668     {
669       pedwarn ("specialization of %qD in different namespace", tmpl);
670       pedwarn ("  from definition of %q+#D", tmpl);
671       return false;
672     }
673 }
674
675 /* SPEC is an explicit instantiation.  Check that it is valid to
676    perform this explicit instantiation in the current namespace.  */
677
678 static void
679 check_explicit_instantiation_namespace (tree spec)
680 {
681   tree ns;
682
683   /* DR 275: An explicit instantiation shall appear in an enclosing
684      namespace of its template.  */
685   ns = decl_namespace_context (spec);
686   if (!is_ancestor (current_namespace, ns))
687     pedwarn ("explicit instantiation of %qD in namespace %qD "
688              "(which does not enclose namespace %qD)",
689              spec, current_namespace, ns);
690 }
691
692 /* The TYPE is being declared.  If it is a template type, that means it
693    is a partial specialization.  Do appropriate error-checking.  */
694
695 tree
696 maybe_process_partial_specialization (tree type)
697 {
698   tree context;
699
700   if (type == error_mark_node)
701     return error_mark_node;
702
703   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
704     {
705       error ("name of class shadows template template parameter %qD",
706              TYPE_NAME (type));
707       return error_mark_node;
708     }
709
710   context = TYPE_CONTEXT (type);
711
712   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
713     {
714       /* This is for ordinary explicit specialization and partial
715          specialization of a template class such as:
716
717            template <> class C<int>;
718
719          or:
720
721            template <class T> class C<T*>;
722
723          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
724
725       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
726           && !COMPLETE_TYPE_P (type))
727         {
728           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
729           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
730           if (processing_template_decl)
731             push_template_decl (TYPE_MAIN_DECL (type));
732         }
733       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
734         error ("specialization of %qT after instantiation", type);
735     }
736   else if (CLASS_TYPE_P (type)
737            && !CLASSTYPE_USE_TEMPLATE (type)
738            && CLASSTYPE_TEMPLATE_INFO (type)
739            && context && CLASS_TYPE_P (context)
740            && CLASSTYPE_TEMPLATE_INFO (context))
741     {
742       /* This is for an explicit specialization of member class
743          template according to [temp.expl.spec/18]:
744
745            template <> template <class U> class C<int>::D;
746
747          The context `C<int>' must be an implicit instantiation.
748          Otherwise this is just a member class template declared
749          earlier like:
750
751            template <> class C<int> { template <class U> class D; };
752            template <> template <class U> class C<int>::D;
753
754          In the first case, `C<int>::D' is a specialization of `C<T>::D'
755          while in the second case, `C<int>::D' is a primary template
756          and `C<T>::D' may not exist.  */
757
758       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
759           && !COMPLETE_TYPE_P (type))
760         {
761           tree t;
762
763           if (current_namespace
764               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
765             {
766               pedwarn ("specializing %q#T in different namespace", type);
767               pedwarn ("  from definition of %q+#D",
768                        CLASSTYPE_TI_TEMPLATE (type));
769             }
770
771           /* Check for invalid specialization after instantiation:
772
773                template <> template <> class C<int>::D<int>;
774                template <> template <class U> class C<int>::D;  */
775
776           for (t = DECL_TEMPLATE_INSTANTIATIONS
777                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
778                t; t = TREE_CHAIN (t))
779             if (TREE_VALUE (t) != type
780                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
781               error ("specialization %qT after instantiation %qT",
782                      type, TREE_VALUE (t));
783
784           /* Mark TYPE as a specialization.  And as a result, we only
785              have one level of template argument for the innermost
786              class template.  */
787           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
788           CLASSTYPE_TI_ARGS (type)
789             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
790         }
791     }
792   else if (processing_specialization)
793     {
794       error ("explicit specialization of non-template %qT", type);
795       return error_mark_node;
796     }
797
798   return type;
799 }
800
801 /* Returns nonzero if we can optimize the retrieval of specializations
802    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
803    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
804
805 static inline bool
806 optimize_specialization_lookup_p (tree tmpl)
807 {
808   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
809           && DECL_CLASS_SCOPE_P (tmpl)
810           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
811              parameter.  */
812           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
813           /* The optimized lookup depends on the fact that the
814              template arguments for the member function template apply
815              purely to the containing class, which is not true if the
816              containing class is an explicit or partial
817              specialization.  */
818           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
819           && !DECL_MEMBER_TEMPLATE_P (tmpl)
820           && !DECL_CONV_FN_P (tmpl)
821           /* It is possible to have a template that is not a member
822              template and is not a member of a template class:
823
824              template <typename T>
825              struct S { friend A::f(); };
826
827              Here, the friend function is a template, but the context does
828              not have template information.  The optimized lookup relies
829              on having ARGS be the template arguments for both the class
830              and the function template.  */
831           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
832 }
833
834 /* Retrieve the specialization (in the sense of [temp.spec] - a
835    specialization is either an instantiation or an explicit
836    specialization) of TMPL for the given template ARGS.  If there is
837    no such specialization, return NULL_TREE.  The ARGS are a vector of
838    arguments, or a vector of vectors of arguments, in the case of
839    templates with more than one level of parameters.
840
841    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
842    then we search for a partial specialization matching ARGS.  This
843    parameter is ignored if TMPL is not a class template.  */
844
845 static tree
846 retrieve_specialization (tree tmpl, tree args,
847                          bool class_specializations_p)
848 {
849   if (args == error_mark_node)
850     return NULL_TREE;
851
852   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
853
854   /* There should be as many levels of arguments as there are
855      levels of parameters.  */
856   gcc_assert (TMPL_ARGS_DEPTH (args)
857               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
858
859   if (optimize_specialization_lookup_p (tmpl))
860     {
861       tree class_template;
862       tree class_specialization;
863       VEC(tree,gc) *methods;
864       tree fns;
865       int idx;
866
867       /* The template arguments actually apply to the containing
868          class.  Find the class specialization with those
869          arguments.  */
870       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
871       class_specialization
872         = retrieve_specialization (class_template, args,
873                                    /*class_specializations_p=*/false);
874       if (!class_specialization)
875         return NULL_TREE;
876       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
877          for the specialization.  */
878       idx = class_method_index_for_fn (class_specialization, tmpl);
879       if (idx == -1)
880         return NULL_TREE;
881       /* Iterate through the methods with the indicated name, looking
882          for the one that has an instance of TMPL.  */
883       methods = CLASSTYPE_METHOD_VEC (class_specialization);
884       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
885         {
886           tree fn = OVL_CURRENT (fns);
887           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
888             return fn;
889         }
890       return NULL_TREE;
891     }
892   else
893     {
894       tree *sp;
895       tree *head;
896
897       /* Class templates store their instantiations on the
898          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
899          DECL_TEMPLATE_SPECIALIZATIONS list.  */
900       if (!class_specializations_p
901           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
902         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
903       else
904         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
905       head = sp;
906       /* Iterate through the list until we find a matching template.  */
907       while (*sp != NULL_TREE)
908         {
909           tree spec = *sp;
910
911           if (comp_template_args (TREE_PURPOSE (spec), args))
912             {
913               /* Use the move-to-front heuristic to speed up future
914                  searches.  */
915               if (spec != *head)
916                 {
917                   *sp = TREE_CHAIN (*sp);
918                   TREE_CHAIN (spec) = *head;
919                   *head = spec;
920                 }
921               return TREE_VALUE (spec);
922             }
923           sp = &TREE_CHAIN (spec);
924         }
925     }
926
927   return NULL_TREE;
928 }
929
930 /* Like retrieve_specialization, but for local declarations.  */
931
932 static tree
933 retrieve_local_specialization (tree tmpl)
934 {
935   tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
936                                           htab_hash_pointer (tmpl));
937   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
938 }
939
940 /* Returns nonzero iff DECL is a specialization of TMPL.  */
941
942 int
943 is_specialization_of (tree decl, tree tmpl)
944 {
945   tree t;
946
947   if (TREE_CODE (decl) == FUNCTION_DECL)
948     {
949       for (t = decl;
950            t != NULL_TREE;
951            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
952         if (t == tmpl)
953           return 1;
954     }
955   else
956     {
957       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
958
959       for (t = TREE_TYPE (decl);
960            t != NULL_TREE;
961            t = CLASSTYPE_USE_TEMPLATE (t)
962              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
963         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
964           return 1;
965     }
966
967   return 0;
968 }
969
970 /* Returns nonzero iff DECL is a specialization of friend declaration
971    FRIEND according to [temp.friend].  */
972
973 bool
974 is_specialization_of_friend (tree decl, tree friend)
975 {
976   bool need_template = true;
977   int template_depth;
978
979   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
980               || TREE_CODE (decl) == TYPE_DECL);
981
982   /* For [temp.friend/6] when FRIEND is an ordinary member function
983      of a template class, we want to check if DECL is a specialization
984      if this.  */
985   if (TREE_CODE (friend) == FUNCTION_DECL
986       && DECL_TEMPLATE_INFO (friend)
987       && !DECL_USE_TEMPLATE (friend))
988     {
989       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
990       friend = DECL_TI_TEMPLATE (friend);
991       need_template = false;
992     }
993   else if (TREE_CODE (friend) == TEMPLATE_DECL
994            && !PRIMARY_TEMPLATE_P (friend))
995     need_template = false;
996
997   /* There is nothing to do if this is not a template friend.  */
998   if (TREE_CODE (friend) != TEMPLATE_DECL)
999     return false;
1000
1001   if (is_specialization_of (decl, friend))
1002     return true;
1003
1004   /* [temp.friend/6]
1005      A member of a class template may be declared to be a friend of a
1006      non-template class.  In this case, the corresponding member of
1007      every specialization of the class template is a friend of the
1008      class granting friendship.
1009
1010      For example, given a template friend declaration
1011
1012        template <class T> friend void A<T>::f();
1013
1014      the member function below is considered a friend
1015
1016        template <> struct A<int> {
1017          void f();
1018        };
1019
1020      For this type of template friend, TEMPLATE_DEPTH below will be
1021      nonzero.  To determine if DECL is a friend of FRIEND, we first
1022      check if the enclosing class is a specialization of another.  */
1023
1024   template_depth = template_class_depth (DECL_CONTEXT (friend));
1025   if (template_depth
1026       && DECL_CLASS_SCOPE_P (decl)
1027       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1028                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1029     {
1030       /* Next, we check the members themselves.  In order to handle
1031          a few tricky cases, such as when FRIEND's are
1032
1033            template <class T> friend void A<T>::g(T t);
1034            template <class T> template <T t> friend void A<T>::h();
1035
1036          and DECL's are
1037
1038            void A<int>::g(int);
1039            template <int> void A<int>::h();
1040
1041          we need to figure out ARGS, the template arguments from
1042          the context of DECL.  This is required for template substitution
1043          of `T' in the function parameter of `g' and template parameter
1044          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1045
1046       tree context = DECL_CONTEXT (decl);
1047       tree args = NULL_TREE;
1048       int current_depth = 0;
1049
1050       while (current_depth < template_depth)
1051         {
1052           if (CLASSTYPE_TEMPLATE_INFO (context))
1053             {
1054               if (current_depth == 0)
1055                 args = TYPE_TI_ARGS (context);
1056               else
1057                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1058               current_depth++;
1059             }
1060           context = TYPE_CONTEXT (context);
1061         }
1062
1063       if (TREE_CODE (decl) == FUNCTION_DECL)
1064         {
1065           bool is_template;
1066           tree friend_type;
1067           tree decl_type;
1068           tree friend_args_type;
1069           tree decl_args_type;
1070
1071           /* Make sure that both DECL and FRIEND are templates or
1072              non-templates.  */
1073           is_template = DECL_TEMPLATE_INFO (decl)
1074                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1075           if (need_template ^ is_template)
1076             return false;
1077           else if (is_template)
1078             {
1079               /* If both are templates, check template parameter list.  */
1080               tree friend_parms
1081                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1082                                          args, tf_none);
1083               if (!comp_template_parms
1084                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1085                       friend_parms))
1086                 return false;
1087
1088               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1089             }
1090           else
1091             decl_type = TREE_TYPE (decl);
1092
1093           friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1094                                               tf_none, NULL_TREE);
1095           if (friend_type == error_mark_node)
1096             return false;
1097
1098           /* Check if return types match.  */
1099           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1100             return false;
1101
1102           /* Check if function parameter types match, ignoring the
1103              `this' parameter.  */
1104           friend_args_type = TYPE_ARG_TYPES (friend_type);
1105           decl_args_type = TYPE_ARG_TYPES (decl_type);
1106           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1107             friend_args_type = TREE_CHAIN (friend_args_type);
1108           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1109             decl_args_type = TREE_CHAIN (decl_args_type);
1110
1111           return compparms (decl_args_type, friend_args_type);
1112         }
1113       else
1114         {
1115           /* DECL is a TYPE_DECL */
1116           bool is_template;
1117           tree decl_type = TREE_TYPE (decl);
1118
1119           /* Make sure that both DECL and FRIEND are templates or
1120              non-templates.  */
1121           is_template
1122             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1123               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1124
1125           if (need_template ^ is_template)
1126             return false;
1127           else if (is_template)
1128             {
1129               tree friend_parms;
1130               /* If both are templates, check the name of the two
1131                  TEMPLATE_DECL's first because is_friend didn't.  */
1132               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1133                   != DECL_NAME (friend))
1134                 return false;
1135
1136               /* Now check template parameter list.  */
1137               friend_parms
1138                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1139                                          args, tf_none);
1140               return comp_template_parms
1141                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1142                  friend_parms);
1143             }
1144           else
1145             return (DECL_NAME (decl)
1146                     == DECL_NAME (friend));
1147         }
1148     }
1149   return false;
1150 }
1151
1152 /* Register the specialization SPEC as a specialization of TMPL with
1153    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1154    is actually just a friend declaration.  Returns SPEC, or an
1155    equivalent prior declaration, if available.  */
1156
1157 static tree
1158 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1159 {
1160   tree fn;
1161
1162   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1163
1164   if (TREE_CODE (spec) == FUNCTION_DECL
1165       && uses_template_parms (DECL_TI_ARGS (spec)))
1166     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1167        register it; we want the corresponding TEMPLATE_DECL instead.
1168        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1169        the more obvious `uses_template_parms (spec)' to avoid problems
1170        with default function arguments.  In particular, given
1171        something like this:
1172
1173           template <class T> void f(T t1, T t = T())
1174
1175        the default argument expression is not substituted for in an
1176        instantiation unless and until it is actually needed.  */
1177     return spec;
1178
1179   fn = retrieve_specialization (tmpl, args,
1180                                 /*class_specializations_p=*/false);
1181   /* We can sometimes try to re-register a specialization that we've
1182      already got.  In particular, regenerate_decl_from_template calls
1183      duplicate_decls which will update the specialization list.  But,
1184      we'll still get called again here anyhow.  It's more convenient
1185      to simply allow this than to try to prevent it.  */
1186   if (fn == spec)
1187     return spec;
1188   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1189     {
1190       if (DECL_TEMPLATE_INSTANTIATION (fn))
1191         {
1192           if (TREE_USED (fn)
1193               || DECL_EXPLICIT_INSTANTIATION (fn))
1194             {
1195               error ("specialization of %qD after instantiation",
1196                      fn);
1197               return error_mark_node;
1198             }
1199           else
1200             {
1201               tree clone;
1202               /* This situation should occur only if the first
1203                  specialization is an implicit instantiation, the
1204                  second is an explicit specialization, and the
1205                  implicit instantiation has not yet been used.  That
1206                  situation can occur if we have implicitly
1207                  instantiated a member function and then specialized
1208                  it later.
1209
1210                  We can also wind up here if a friend declaration that
1211                  looked like an instantiation turns out to be a
1212                  specialization:
1213
1214                    template <class T> void foo(T);
1215                    class S { friend void foo<>(int) };
1216                    template <> void foo(int);
1217
1218                  We transform the existing DECL in place so that any
1219                  pointers to it become pointers to the updated
1220                  declaration.
1221
1222                  If there was a definition for the template, but not
1223                  for the specialization, we want this to look as if
1224                  there were no definition, and vice versa.  */
1225               DECL_INITIAL (fn) = NULL_TREE;
1226               duplicate_decls (spec, fn, is_friend);
1227               /* The call to duplicate_decls will have applied
1228                  [temp.expl.spec]:
1229
1230                    An explicit specialization of a function template
1231                    is inline only if it is explicitly declared to be,
1232                    and independently of whether its function template
1233                    is.
1234
1235                 to the primary function; now copy the inline bits to
1236                 the various clones.  */
1237               FOR_EACH_CLONE (clone, fn)
1238                 {
1239                   DECL_DECLARED_INLINE_P (clone)
1240                     = DECL_DECLARED_INLINE_P (fn);
1241                   DECL_INLINE (clone)
1242                     = DECL_INLINE (fn);
1243                 }
1244               check_specialization_namespace (fn);
1245
1246               return fn;
1247             }
1248         }
1249       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1250         {
1251           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1252             /* Dup decl failed, but this is a new definition. Set the
1253                line number so any errors match this new
1254                definition.  */
1255             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1256
1257           return fn;
1258         }
1259     }
1260
1261   /* A specialization must be declared in the same namespace as the
1262      template it is specializing.  */
1263   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1264       && !check_specialization_namespace (tmpl))
1265     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1266
1267   if (!optimize_specialization_lookup_p (tmpl))
1268     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1269       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1270
1271   return spec;
1272 }
1273
1274 /* Unregister the specialization SPEC as a specialization of TMPL.
1275    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1276    if the SPEC was listed as a specialization of TMPL.  */
1277
1278 bool
1279 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1280 {
1281   tree* s;
1282
1283   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1284        *s != NULL_TREE;
1285        s = &TREE_CHAIN (*s))
1286     if (TREE_VALUE (*s) == spec)
1287       {
1288         if (!new_spec)
1289           *s = TREE_CHAIN (*s);
1290         else
1291           TREE_VALUE (*s) = new_spec;
1292         return 1;
1293       }
1294
1295   return 0;
1296 }
1297
1298 /* Compare an entry in the local specializations hash table P1 (which
1299    is really a pointer to a TREE_LIST) with P2 (which is really a
1300    DECL).  */
1301
1302 static int
1303 eq_local_specializations (const void *p1, const void *p2)
1304 {
1305   return TREE_VALUE ((tree) p1) == (tree) p2;
1306 }
1307
1308 /* Hash P1, an entry in the local specializations table.  */
1309
1310 static hashval_t
1311 hash_local_specialization (const void* p1)
1312 {
1313   return htab_hash_pointer (TREE_VALUE ((tree) p1));
1314 }
1315
1316 /* Like register_specialization, but for local declarations.  We are
1317    registering SPEC, an instantiation of TMPL.  */
1318
1319 static void
1320 register_local_specialization (tree spec, tree tmpl)
1321 {
1322   void **slot;
1323
1324   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1325                                    htab_hash_pointer (tmpl), INSERT);
1326   *slot = build_tree_list (spec, tmpl);
1327 }
1328
1329 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1330    specialized class.  */
1331
1332 bool
1333 explicit_class_specialization_p (tree type)
1334 {
1335   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1336     return false;
1337   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1338 }
1339
1340 /* Print the list of candidate FNS in an error message.  */
1341
1342 void
1343 print_candidates (tree fns)
1344 {
1345   tree fn;
1346
1347   const char *str = "candidates are:";
1348
1349   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1350     {
1351       tree f;
1352
1353       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1354         error ("%s %+#D", str, OVL_CURRENT (f));
1355       str = "               ";
1356     }
1357 }
1358
1359 /* Returns the template (one of the functions given by TEMPLATE_ID)
1360    which can be specialized to match the indicated DECL with the
1361    explicit template args given in TEMPLATE_ID.  The DECL may be
1362    NULL_TREE if none is available.  In that case, the functions in
1363    TEMPLATE_ID are non-members.
1364
1365    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1366    specialization of a member template.
1367
1368    The TEMPLATE_COUNT is the number of references to qualifying
1369    template classes that appeared in the name of the function. See
1370    check_explicit_specialization for a more accurate description.
1371
1372    TSK indicates what kind of template declaration (if any) is being
1373    declared.  TSK_TEMPLATE indicates that the declaration given by
1374    DECL, though a FUNCTION_DECL, has template parameters, and is
1375    therefore a template function.
1376
1377    The template args (those explicitly specified and those deduced)
1378    are output in a newly created vector *TARGS_OUT.
1379
1380    If it is impossible to determine the result, an error message is
1381    issued.  The error_mark_node is returned to indicate failure.  */
1382
1383 static tree
1384 determine_specialization (tree template_id,
1385                           tree decl,
1386                           tree* targs_out,
1387                           int need_member_template,
1388                           int template_count,
1389                           tmpl_spec_kind tsk)
1390 {
1391   tree fns;
1392   tree targs;
1393   tree explicit_targs;
1394   tree candidates = NULL_TREE;
1395   /* A TREE_LIST of templates of which DECL may be a specialization.
1396      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1397      corresponding TREE_PURPOSE is the set of template arguments that,
1398      when used to instantiate the template, would produce a function
1399      with the signature of DECL.  */
1400   tree templates = NULL_TREE;
1401   int header_count;
1402   struct cp_binding_level *b;
1403
1404   *targs_out = NULL_TREE;
1405
1406   if (template_id == error_mark_node || decl == error_mark_node)
1407     return error_mark_node;
1408
1409   fns = TREE_OPERAND (template_id, 0);
1410   explicit_targs = TREE_OPERAND (template_id, 1);
1411
1412   if (fns == error_mark_node)
1413     return error_mark_node;
1414
1415   /* Check for baselinks.  */
1416   if (BASELINK_P (fns))
1417     fns = BASELINK_FUNCTIONS (fns);
1418
1419   if (!is_overloaded_fn (fns))
1420     {
1421       error ("%qD is not a function template", fns);
1422       return error_mark_node;
1423     }
1424
1425   /* Count the number of template headers specified for this
1426      specialization.  */
1427   header_count = 0;
1428   for (b = current_binding_level;
1429        b->kind == sk_template_parms;
1430        b = b->level_chain)
1431     ++header_count;
1432
1433   for (; fns; fns = OVL_NEXT (fns))
1434     {
1435       tree fn = OVL_CURRENT (fns);
1436
1437       if (TREE_CODE (fn) == TEMPLATE_DECL)
1438         {
1439           tree decl_arg_types;
1440           tree fn_arg_types;
1441
1442           /* In case of explicit specialization, we need to check if
1443              the number of template headers appearing in the specialization
1444              is correct. This is usually done in check_explicit_specialization,
1445              but the check done there cannot be exhaustive when specializing
1446              member functions. Consider the following code:
1447
1448              template <> void A<int>::f(int);
1449              template <> template <> void A<int>::f(int);
1450
1451              Assuming that A<int> is not itself an explicit specialization
1452              already, the first line specializes "f" which is a non-template
1453              member function, whilst the second line specializes "f" which
1454              is a template member function. So both lines are syntactically
1455              correct, and check_explicit_specialization does not reject
1456              them.
1457
1458              Here, we can do better, as we are matching the specialization
1459              against the declarations. We count the number of template
1460              headers, and we check if they match TEMPLATE_COUNT + 1
1461              (TEMPLATE_COUNT is the number of qualifying template classes,
1462              plus there must be another header for the member template
1463              itself).
1464
1465              Notice that if header_count is zero, this is not a
1466              specialization but rather a template instantiation, so there
1467              is no check we can perform here.  */
1468           if (header_count && header_count != template_count + 1)
1469             continue;
1470
1471           /* Check that the number of template arguments at the
1472              innermost level for DECL is the same as for FN.  */
1473           if (current_binding_level->kind == sk_template_parms
1474               && !current_binding_level->explicit_spec_p
1475               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1476                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1477                                       (current_template_parms))))
1478             continue;
1479
1480           /* DECL might be a specialization of FN.  */
1481           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1482           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1483
1484           /* For a non-static member function, we need to make sure
1485              that the const qualification is the same.  Since
1486              get_bindings does not try to merge the "this" parameter,
1487              we must do the comparison explicitly.  */
1488           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1489               && !same_type_p (TREE_VALUE (fn_arg_types),
1490                                TREE_VALUE (decl_arg_types)))
1491             continue;
1492
1493           /* Skip the "this" parameter and, for constructors of
1494              classes with virtual bases, the VTT parameter.  A
1495              full specialization of a constructor will have a VTT
1496              parameter, but a template never will.  */ 
1497           decl_arg_types 
1498             = skip_artificial_parms_for (decl, decl_arg_types);
1499           fn_arg_types 
1500             = skip_artificial_parms_for (fn, fn_arg_types);
1501
1502           /* Check that the number of function parameters matches.
1503              For example,
1504                template <class T> void f(int i = 0);
1505                template <> void f<int>();
1506              The specialization f<int> is invalid but is not caught
1507              by get_bindings below.  */
1508           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1509             continue;
1510
1511           /* Function templates cannot be specializations; there are
1512              no partial specializations of functions.  Therefore, if
1513              the type of DECL does not match FN, there is no
1514              match.  */
1515           if (tsk == tsk_template)
1516             {
1517               if (compparms (fn_arg_types, decl_arg_types))
1518                 candidates = tree_cons (NULL_TREE, fn, candidates);
1519               continue;
1520             }
1521
1522           /* See whether this function might be a specialization of this
1523              template.  */
1524           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1525
1526           if (!targs)
1527             /* We cannot deduce template arguments that when used to
1528                specialize TMPL will produce DECL.  */
1529             continue;
1530
1531           /* Save this template, and the arguments deduced.  */
1532           templates = tree_cons (targs, fn, templates);
1533         }
1534       else if (need_member_template)
1535         /* FN is an ordinary member function, and we need a
1536            specialization of a member template.  */
1537         ;
1538       else if (TREE_CODE (fn) != FUNCTION_DECL)
1539         /* We can get IDENTIFIER_NODEs here in certain erroneous
1540            cases.  */
1541         ;
1542       else if (!DECL_FUNCTION_MEMBER_P (fn))
1543         /* This is just an ordinary non-member function.  Nothing can
1544            be a specialization of that.  */
1545         ;
1546       else if (DECL_ARTIFICIAL (fn))
1547         /* Cannot specialize functions that are created implicitly.  */
1548         ;
1549       else
1550         {
1551           tree decl_arg_types;
1552
1553           /* This is an ordinary member function.  However, since
1554              we're here, we can assume it's enclosing class is a
1555              template class.  For example,
1556
1557                template <typename T> struct S { void f(); };
1558                template <> void S<int>::f() {}
1559
1560              Here, S<int>::f is a non-template, but S<int> is a
1561              template class.  If FN has the same type as DECL, we
1562              might be in business.  */
1563
1564           if (!DECL_TEMPLATE_INFO (fn))
1565             /* Its enclosing class is an explicit specialization
1566                of a template class.  This is not a candidate.  */
1567             continue;
1568
1569           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1570                             TREE_TYPE (TREE_TYPE (fn))))
1571             /* The return types differ.  */
1572             continue;
1573
1574           /* Adjust the type of DECL in case FN is a static member.  */
1575           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1576           if (DECL_STATIC_FUNCTION_P (fn)
1577               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1578             decl_arg_types = TREE_CHAIN (decl_arg_types);
1579
1580           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1581                          decl_arg_types))
1582             /* They match!  */
1583             candidates = tree_cons (NULL_TREE, fn, candidates);
1584         }
1585     }
1586
1587   if (templates && TREE_CHAIN (templates))
1588     {
1589       /* We have:
1590
1591            [temp.expl.spec]
1592
1593            It is possible for a specialization with a given function
1594            signature to be instantiated from more than one function
1595            template.  In such cases, explicit specification of the
1596            template arguments must be used to uniquely identify the
1597            function template specialization being specialized.
1598
1599          Note that here, there's no suggestion that we're supposed to
1600          determine which of the candidate templates is most
1601          specialized.  However, we, also have:
1602
1603            [temp.func.order]
1604
1605            Partial ordering of overloaded function template
1606            declarations is used in the following contexts to select
1607            the function template to which a function template
1608            specialization refers:
1609
1610            -- when an explicit specialization refers to a function
1611               template.
1612
1613          So, we do use the partial ordering rules, at least for now.
1614          This extension can only serve to make invalid programs valid,
1615          so it's safe.  And, there is strong anecdotal evidence that
1616          the committee intended the partial ordering rules to apply;
1617          the EDG front end has that behavior, and John Spicer claims
1618          that the committee simply forgot to delete the wording in
1619          [temp.expl.spec].  */
1620       tree tmpl = most_specialized_instantiation (templates);
1621       if (tmpl != error_mark_node)
1622         {
1623           templates = tmpl;
1624           TREE_CHAIN (templates) = NULL_TREE;
1625         }
1626     }
1627
1628   if (templates == NULL_TREE && candidates == NULL_TREE)
1629     {
1630       error ("template-id %qD for %q+D does not match any template "
1631              "declaration", template_id, decl);
1632       return error_mark_node;
1633     }
1634   else if ((templates && TREE_CHAIN (templates))
1635            || (candidates && TREE_CHAIN (candidates))
1636            || (templates && candidates))
1637     {
1638       error ("ambiguous template specialization %qD for %q+D",
1639              template_id, decl);
1640       chainon (candidates, templates);
1641       print_candidates (candidates);
1642       return error_mark_node;
1643     }
1644
1645   /* We have one, and exactly one, match.  */
1646   if (candidates)
1647     {
1648       tree fn = TREE_VALUE (candidates);
1649       /* DECL is a re-declaration of a template function.  */
1650       if (TREE_CODE (fn) == TEMPLATE_DECL)
1651         return fn;
1652       /* It was a specialization of an ordinary member function in a
1653          template class.  */
1654       *targs_out = copy_node (DECL_TI_ARGS (fn));
1655       return DECL_TI_TEMPLATE (fn);
1656     }
1657
1658   /* It was a specialization of a template.  */
1659   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1660   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1661     {
1662       *targs_out = copy_node (targs);
1663       SET_TMPL_ARGS_LEVEL (*targs_out,
1664                            TMPL_ARGS_DEPTH (*targs_out),
1665                            TREE_PURPOSE (templates));
1666     }
1667   else
1668     *targs_out = TREE_PURPOSE (templates);
1669   return TREE_VALUE (templates);
1670 }
1671
1672 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1673    but with the default argument values filled in from those in the
1674    TMPL_TYPES.  */
1675
1676 static tree
1677 copy_default_args_to_explicit_spec_1 (tree spec_types,
1678                                       tree tmpl_types)
1679 {
1680   tree new_spec_types;
1681
1682   if (!spec_types)
1683     return NULL_TREE;
1684
1685   if (spec_types == void_list_node)
1686     return void_list_node;
1687
1688   /* Substitute into the rest of the list.  */
1689   new_spec_types =
1690     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1691                                           TREE_CHAIN (tmpl_types));
1692
1693   /* Add the default argument for this parameter.  */
1694   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1695                          TREE_VALUE (spec_types),
1696                          new_spec_types);
1697 }
1698
1699 /* DECL is an explicit specialization.  Replicate default arguments
1700    from the template it specializes.  (That way, code like:
1701
1702      template <class T> void f(T = 3);
1703      template <> void f(double);
1704      void g () { f (); }
1705
1706    works, as required.)  An alternative approach would be to look up
1707    the correct default arguments at the call-site, but this approach
1708    is consistent with how implicit instantiations are handled.  */
1709
1710 static void
1711 copy_default_args_to_explicit_spec (tree decl)
1712 {
1713   tree tmpl;
1714   tree spec_types;
1715   tree tmpl_types;
1716   tree new_spec_types;
1717   tree old_type;
1718   tree new_type;
1719   tree t;
1720   tree object_type = NULL_TREE;
1721   tree in_charge = NULL_TREE;
1722   tree vtt = NULL_TREE;
1723
1724   /* See if there's anything we need to do.  */
1725   tmpl = DECL_TI_TEMPLATE (decl);
1726   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1727   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1728     if (TREE_PURPOSE (t))
1729       break;
1730   if (!t)
1731     return;
1732
1733   old_type = TREE_TYPE (decl);
1734   spec_types = TYPE_ARG_TYPES (old_type);
1735
1736   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1737     {
1738       /* Remove the this pointer, but remember the object's type for
1739          CV quals.  */
1740       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1741       spec_types = TREE_CHAIN (spec_types);
1742       tmpl_types = TREE_CHAIN (tmpl_types);
1743
1744       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1745         {
1746           /* DECL may contain more parameters than TMPL due to the extra
1747              in-charge parameter in constructors and destructors.  */
1748           in_charge = spec_types;
1749           spec_types = TREE_CHAIN (spec_types);
1750         }
1751       if (DECL_HAS_VTT_PARM_P (decl))
1752         {
1753           vtt = spec_types;
1754           spec_types = TREE_CHAIN (spec_types);
1755         }
1756     }
1757
1758   /* Compute the merged default arguments.  */
1759   new_spec_types =
1760     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1761
1762   /* Compute the new FUNCTION_TYPE.  */
1763   if (object_type)
1764     {
1765       if (vtt)
1766         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1767                                          TREE_VALUE (vtt),
1768                                          new_spec_types);
1769
1770       if (in_charge)
1771         /* Put the in-charge parameter back.  */
1772         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1773                                          TREE_VALUE (in_charge),
1774                                          new_spec_types);
1775
1776       new_type = build_method_type_directly (object_type,
1777                                              TREE_TYPE (old_type),
1778                                              new_spec_types);
1779     }
1780   else
1781     new_type = build_function_type (TREE_TYPE (old_type),
1782                                     new_spec_types);
1783   new_type = cp_build_type_attribute_variant (new_type,
1784                                               TYPE_ATTRIBUTES (old_type));
1785   new_type = build_exception_variant (new_type,
1786                                       TYPE_RAISES_EXCEPTIONS (old_type));
1787   TREE_TYPE (decl) = new_type;
1788 }
1789
1790 /* Check to see if the function just declared, as indicated in
1791    DECLARATOR, and in DECL, is a specialization of a function
1792    template.  We may also discover that the declaration is an explicit
1793    instantiation at this point.
1794
1795    Returns DECL, or an equivalent declaration that should be used
1796    instead if all goes well.  Issues an error message if something is
1797    amiss.  Returns error_mark_node if the error is not easily
1798    recoverable.
1799
1800    FLAGS is a bitmask consisting of the following flags:
1801
1802    2: The function has a definition.
1803    4: The function is a friend.
1804
1805    The TEMPLATE_COUNT is the number of references to qualifying
1806    template classes that appeared in the name of the function.  For
1807    example, in
1808
1809      template <class T> struct S { void f(); };
1810      void S<int>::f();
1811
1812    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1813    classes are not counted in the TEMPLATE_COUNT, so that in
1814
1815      template <class T> struct S {};
1816      template <> struct S<int> { void f(); }
1817      template <> void S<int>::f();
1818
1819    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1820    invalid; there should be no template <>.)
1821
1822    If the function is a specialization, it is marked as such via
1823    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1824    is set up correctly, and it is added to the list of specializations
1825    for that template.  */
1826
1827 tree
1828 check_explicit_specialization (tree declarator,
1829                                tree decl,
1830                                int template_count,
1831                                int flags)
1832 {
1833   int have_def = flags & 2;
1834   int is_friend = flags & 4;
1835   int specialization = 0;
1836   int explicit_instantiation = 0;
1837   int member_specialization = 0;
1838   tree ctype = DECL_CLASS_CONTEXT (decl);
1839   tree dname = DECL_NAME (decl);
1840   tmpl_spec_kind tsk;
1841
1842   if (is_friend)
1843     {
1844       if (!processing_specialization)
1845         tsk = tsk_none;
1846       else
1847         tsk = tsk_excessive_parms;
1848     }
1849   else
1850     tsk = current_tmpl_spec_kind (template_count);
1851
1852   switch (tsk)
1853     {
1854     case tsk_none:
1855       if (processing_specialization)
1856         {
1857           specialization = 1;
1858           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1859         }
1860       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1861         {
1862           if (is_friend)
1863             /* This could be something like:
1864
1865                template <class T> void f(T);
1866                class S { friend void f<>(int); }  */
1867             specialization = 1;
1868           else
1869             {
1870               /* This case handles bogus declarations like template <>
1871                  template <class T> void f<int>(); */
1872
1873               error ("template-id %qD in declaration of primary template",
1874                      declarator);
1875               return decl;
1876             }
1877         }
1878       break;
1879
1880     case tsk_invalid_member_spec:
1881       /* The error has already been reported in
1882          check_specialization_scope.  */
1883       return error_mark_node;
1884
1885     case tsk_invalid_expl_inst:
1886       error ("template parameter list used in explicit instantiation");
1887
1888       /* Fall through.  */
1889
1890     case tsk_expl_inst:
1891       if (have_def)
1892         error ("definition provided for explicit instantiation");
1893
1894       explicit_instantiation = 1;
1895       break;
1896
1897     case tsk_excessive_parms:
1898     case tsk_insufficient_parms:
1899       if (tsk == tsk_excessive_parms)
1900         error ("too many template parameter lists in declaration of %qD",
1901                decl);
1902       else if (template_header_count)
1903         error("too few template parameter lists in declaration of %qD", decl);
1904       else
1905         error("explicit specialization of %qD must be introduced by "
1906               "%<template <>%>", decl);
1907
1908       /* Fall through.  */
1909     case tsk_expl_spec:
1910       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1911       if (ctype)
1912         member_specialization = 1;
1913       else
1914         specialization = 1;
1915       break;
1916
1917     case tsk_template:
1918       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1919         {
1920           /* This case handles bogus declarations like template <>
1921              template <class T> void f<int>(); */
1922
1923           if (uses_template_parms (declarator))
1924             error ("function template partial specialization %qD "
1925                    "is not allowed", declarator);
1926           else
1927             error ("template-id %qD in declaration of primary template",
1928                    declarator);
1929           return decl;
1930         }
1931
1932       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1933         /* This is a specialization of a member template, without
1934            specialization the containing class.  Something like:
1935
1936              template <class T> struct S {
1937                template <class U> void f (U);
1938              };
1939              template <> template <class U> void S<int>::f(U) {}
1940
1941            That's a specialization -- but of the entire template.  */
1942         specialization = 1;
1943       break;
1944
1945     default:
1946       gcc_unreachable ();
1947     }
1948
1949   if (specialization || member_specialization)
1950     {
1951       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1952       for (; t; t = TREE_CHAIN (t))
1953         if (TREE_PURPOSE (t))
1954           {
1955             pedwarn
1956               ("default argument specified in explicit specialization");
1957             break;
1958           }
1959     }
1960
1961   if (specialization || member_specialization || explicit_instantiation)
1962     {
1963       tree tmpl = NULL_TREE;
1964       tree targs = NULL_TREE;
1965
1966       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
1967       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1968         {
1969           tree fns;
1970
1971           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
1972           if (ctype)
1973             fns = dname;
1974           else
1975             {
1976               /* If there is no class context, the explicit instantiation
1977                  must be at namespace scope.  */
1978               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
1979
1980               /* Find the namespace binding, using the declaration
1981                  context.  */
1982               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
1983                                            false, true);
1984               if (!fns || !is_overloaded_fn (fns))
1985                 {
1986                   error ("%qD is not a template function", dname);
1987                   fns = error_mark_node;
1988                 }
1989               else
1990                 {
1991                   tree fn = OVL_CURRENT (fns);
1992                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
1993                                                 CP_DECL_CONTEXT (fn)))
1994                     error ("%qD is not declared in %qD",
1995                            decl, current_namespace);
1996                 }
1997             }
1998
1999           declarator = lookup_template_function (fns, NULL_TREE);
2000         }
2001
2002       if (declarator == error_mark_node)
2003         return error_mark_node;
2004
2005       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2006         {
2007           if (!explicit_instantiation)
2008             /* A specialization in class scope.  This is invalid,
2009                but the error will already have been flagged by
2010                check_specialization_scope.  */
2011             return error_mark_node;
2012           else
2013             {
2014               /* It's not valid to write an explicit instantiation in
2015                  class scope, e.g.:
2016
2017                    class C { template void f(); }
2018
2019                    This case is caught by the parser.  However, on
2020                    something like:
2021
2022                    template class C { void f(); };
2023
2024                    (which is invalid) we can get here.  The error will be
2025                    issued later.  */
2026               ;
2027             }
2028
2029           return decl;
2030         }
2031       else if (ctype != NULL_TREE
2032                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2033                    IDENTIFIER_NODE))
2034         {
2035           /* Find the list of functions in ctype that have the same
2036              name as the declared function.  */
2037           tree name = TREE_OPERAND (declarator, 0);
2038           tree fns = NULL_TREE;
2039           int idx;
2040
2041           if (constructor_name_p (name, ctype))
2042             {
2043               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2044
2045               if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
2046                   : !CLASSTYPE_DESTRUCTORS (ctype))
2047                 {
2048                   /* From [temp.expl.spec]:
2049
2050                      If such an explicit specialization for the member
2051                      of a class template names an implicitly-declared
2052                      special member function (clause _special_), the
2053                      program is ill-formed.
2054
2055                      Similar language is found in [temp.explicit].  */
2056                   error ("specialization of implicitly-declared special member function");
2057                   return error_mark_node;
2058                 }
2059
2060               name = is_constructor ? ctor_identifier : dtor_identifier;
2061             }
2062
2063           if (!DECL_CONV_FN_P (decl))
2064             {
2065               idx = lookup_fnfields_1 (ctype, name);
2066               if (idx >= 0)
2067                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2068             }
2069           else
2070             {
2071               VEC(tree,gc) *methods;
2072               tree ovl;
2073
2074               /* For a type-conversion operator, we cannot do a
2075                  name-based lookup.  We might be looking for `operator
2076                  int' which will be a specialization of `operator T'.
2077                  So, we find *all* the conversion operators, and then
2078                  select from them.  */
2079               fns = NULL_TREE;
2080
2081               methods = CLASSTYPE_METHOD_VEC (ctype);
2082               if (methods)
2083                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2084                      VEC_iterate (tree, methods, idx, ovl);
2085                      ++idx)
2086                   {
2087                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2088                       /* There are no more conversion functions.  */
2089                       break;
2090
2091                     /* Glue all these conversion functions together
2092                        with those we already have.  */
2093                     for (; ovl; ovl = OVL_NEXT (ovl))
2094                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2095                   }
2096             }
2097
2098           if (fns == NULL_TREE)
2099             {
2100               error ("no member function %qD declared in %qT", name, ctype);
2101               return error_mark_node;
2102             }
2103           else
2104             TREE_OPERAND (declarator, 0) = fns;
2105         }
2106
2107       /* Figure out what exactly is being specialized at this point.
2108          Note that for an explicit instantiation, even one for a
2109          member function, we cannot tell apriori whether the
2110          instantiation is for a member template, or just a member
2111          function of a template class.  Even if a member template is
2112          being instantiated, the member template arguments may be
2113          elided if they can be deduced from the rest of the
2114          declaration.  */
2115       tmpl = determine_specialization (declarator, decl,
2116                                        &targs,
2117                                        member_specialization,
2118                                        template_count,
2119                                        tsk);
2120
2121       if (!tmpl || tmpl == error_mark_node)
2122         /* We couldn't figure out what this declaration was
2123            specializing.  */
2124         return error_mark_node;
2125       else
2126         {
2127           tree gen_tmpl = most_general_template (tmpl);
2128
2129           if (explicit_instantiation)
2130             {
2131               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2132                  is done by do_decl_instantiation later.  */
2133
2134               int arg_depth = TMPL_ARGS_DEPTH (targs);
2135               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2136
2137               if (arg_depth > parm_depth)
2138                 {
2139                   /* If TMPL is not the most general template (for
2140                      example, if TMPL is a friend template that is
2141                      injected into namespace scope), then there will
2142                      be too many levels of TARGS.  Remove some of them
2143                      here.  */
2144                   int i;
2145                   tree new_targs;
2146
2147                   new_targs = make_tree_vec (parm_depth);
2148                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2149                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2150                       = TREE_VEC_ELT (targs, i);
2151                   targs = new_targs;
2152                 }
2153
2154               return instantiate_template (tmpl, targs, tf_error);
2155             }
2156
2157           /* If we thought that the DECL was a member function, but it
2158              turns out to be specializing a static member function,
2159              make DECL a static member function as well.  */
2160           if (DECL_STATIC_FUNCTION_P (tmpl)
2161               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2162             revert_static_member_fn (decl);
2163
2164           /* If this is a specialization of a member template of a
2165              template class, we want to return the TEMPLATE_DECL, not
2166              the specialization of it.  */
2167           if (tsk == tsk_template)
2168             {
2169               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2170               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2171               if (have_def)
2172                 {
2173                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2174                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2175                     = DECL_SOURCE_LOCATION (decl);
2176                   /* We want to use the argument list specified in the
2177                      definition, not in the original declaration.  */
2178                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2179                     = DECL_ARGUMENTS (decl);
2180                 }
2181               return tmpl;
2182             }
2183
2184           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2185           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2186
2187           /* Inherit default function arguments from the template
2188              DECL is specializing.  */
2189           copy_default_args_to_explicit_spec (decl);
2190
2191           /* This specialization has the same protection as the
2192              template it specializes.  */
2193           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2194           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2195
2196           /* 7.1.1-1 [dcl.stc]
2197
2198              A storage-class-specifier shall not be specified in an
2199              explicit specialization...
2200
2201              The parser rejects these, so unless action is taken here,
2202              explicit function specializations will always appear with
2203              global linkage.
2204
2205              The action recommended by the C++ CWG in response to C++
2206              defect report 605 is to make the storage class and linkage
2207              of the explicit specialization match the templated function:
2208
2209              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2210            */
2211           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2212             {
2213               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2214               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2215
2216               /* This specialization has the same linkage and visiblity as
2217                  the function template it specializes.  */
2218               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2219               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2220               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2221                 {
2222                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2223                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2224                 }
2225             }
2226
2227           /* If DECL is a friend declaration, declared using an
2228              unqualified name, the namespace associated with DECL may
2229              have been set incorrectly.  For example, in:
2230
2231                template <typename T> void f(T);
2232                namespace N {
2233                  struct S { friend void f<int>(int); }
2234                }
2235
2236              we will have set the DECL_CONTEXT for the friend
2237              declaration to N, rather than to the global namespace.  */
2238           if (DECL_NAMESPACE_SCOPE_P (decl))
2239             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2240
2241           if (is_friend && !have_def)
2242             /* This is not really a declaration of a specialization.
2243                It's just the name of an instantiation.  But, it's not
2244                a request for an instantiation, either.  */
2245             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2246           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2247             /* This is indeed a specialization.  In case of constructors
2248                and destructors, we need in-charge and not-in-charge
2249                versions in V3 ABI.  */
2250             clone_function_decl (decl, /*update_method_vec_p=*/0);
2251
2252           /* Register this specialization so that we can find it
2253              again.  */
2254           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2255         }
2256     }
2257
2258   return decl;
2259 }
2260
2261 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2262    parameters.  These are represented in the same format used for
2263    DECL_TEMPLATE_PARMS.  */
2264
2265 int
2266 comp_template_parms (tree parms1, tree parms2)
2267 {
2268   tree p1;
2269   tree p2;
2270
2271   if (parms1 == parms2)
2272     return 1;
2273
2274   for (p1 = parms1, p2 = parms2;
2275        p1 != NULL_TREE && p2 != NULL_TREE;
2276        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2277     {
2278       tree t1 = TREE_VALUE (p1);
2279       tree t2 = TREE_VALUE (p2);
2280       int i;
2281
2282       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2283       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2284
2285       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2286         return 0;
2287
2288       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2289         {
2290           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2291           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2292
2293           /* If either of the template parameters are invalid, assume
2294              they match for the sake of error recovery. */
2295           if (parm1 == error_mark_node || parm2 == error_mark_node)
2296             return 1;
2297
2298           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2299             return 0;
2300
2301           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2302               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2303                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2304             continue;
2305           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2306             return 0;
2307         }
2308     }
2309
2310   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2311     /* One set of parameters has more parameters lists than the
2312        other.  */
2313     return 0;
2314
2315   return 1;
2316 }
2317
2318 /* Determine whether PARM is a parameter pack.  */
2319 bool 
2320 template_parameter_pack_p (tree parm)
2321 {
2322   /* Determine if we have a non-type template parameter pack.  */
2323   if (TREE_CODE (parm) == PARM_DECL)
2324     return (DECL_TEMPLATE_PARM_P (parm) 
2325             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2326
2327   /* If this is a list of template parameters, we could get a
2328      TYPE_DECL or a TEMPLATE_DECL.  */ 
2329   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2330     parm = TREE_TYPE (parm);
2331
2332   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2333            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2334           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2335 }
2336
2337 /* Determine whether PARMS describes a variadic template parameter
2338    list, i.e., one that is terminated by a template parameter pack.  */
2339 bool 
2340 template_parms_variadic_p (tree parms)
2341 {
2342   int nparms = TREE_VEC_LENGTH (parms);
2343   tree last_parm = TREE_VALUE (TREE_VEC_ELT (parms, nparms - 1));
2344   
2345   return template_parameter_pack_p (last_parm);
2346 }
2347
2348 /* Determine whether ARGS describes a variadic template args list,
2349    i.e., one that is terminated by a template argument pack.  */
2350 static bool 
2351 template_args_variadic_p (tree args)
2352 {
2353   int nargs;
2354   tree last_parm;
2355
2356   if (args == NULL_TREE)
2357     return false;
2358
2359   args = INNERMOST_TEMPLATE_ARGS (args);
2360   nargs = TREE_VEC_LENGTH (args);
2361
2362   if (nargs == 0)
2363     return false;
2364
2365   last_parm = TREE_VEC_ELT (args, nargs - 1);
2366
2367   return ARGUMENT_PACK_P (last_parm);
2368 }
2369
2370 /* Generate a new name for the parameter pack name NAME (an
2371    IDENTIFIER_NODE) that incorporates its */
2372 static tree
2373 make_ith_pack_parameter_name (tree name, int i)
2374 {
2375   /* Munge the name to include the parameter index.  */
2376   char numbuf[128];
2377   char* newname;
2378   
2379   sprintf(numbuf, "%i", i);
2380   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2381   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2382   return get_identifier (newname);
2383 }
2384
2385 /* Structure used to track the progress of find_parameter_pack_r.  */
2386 struct find_parameter_pack_data 
2387 {
2388   tree* parameter_packs;
2389   struct pointer_set_t *visited;
2390 };
2391
2392 /* Identifiers all of the argument packs that occur in a template
2393    argument and appends them to the TREE_LIST inside DATA, which is a
2394    find_parameter_pack_Data structure. This is a subroutine of
2395    make_pack_expansion and uses_parameter_packs.  */
2396 static tree
2397 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2398 {
2399   tree t = *tp;
2400   struct find_parameter_pack_data* ppd = 
2401     (struct find_parameter_pack_data*)data;
2402
2403   if (TYPE_P (t))
2404     {
2405       tree context = TYPE_CONTEXT (t);
2406       walk_tree (&context, &find_parameter_packs_r, ppd, ppd->visited);
2407     }
2408
2409   /* This switch statement will return immediately if we don't find a
2410      parameter pack.  */
2411   switch (TREE_CODE (t)) 
2412     {
2413     case TEMPLATE_PARM_INDEX:
2414       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2415         break;
2416       return NULL_TREE;
2417
2418     case BOUND_TEMPLATE_TEMPLATE_PARM:
2419       /* Check the template arguments.  */
2420       walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2421                  ppd->visited);
2422
2423       /* Dig out the underlying TEMPLATE_TEMPLATE_PARM.  */
2424       t = TYPE_TI_TEMPLATE (t);
2425       if (DECL_P (t) && TREE_TYPE (t))
2426         t = TREE_TYPE (t);
2427       *walk_subtrees = 0;
2428       
2429       /* Fall through.  */
2430
2431     case TEMPLATE_TYPE_PARM:
2432     case TEMPLATE_TEMPLATE_PARM:
2433       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2434         break;
2435       return NULL_TREE;
2436
2437     case PARM_DECL:
2438       if (FUNCTION_PARAMETER_PACK_P (t))
2439         {
2440           /* We don't want to walk into the type of a PARM_DECL,
2441              because we don't want to see the type parameter pack.*/
2442           *walk_subtrees = 0;
2443           break;
2444         }
2445       return NULL_TREE;
2446
2447     case RECORD_TYPE:
2448       if (TYPE_PTRMEMFUNC_P (t))
2449         return NULL_TREE;
2450       /* Fall through.  */
2451
2452     case UNION_TYPE:
2453     case ENUMERAL_TYPE:
2454       if (TYPE_TEMPLATE_INFO (t))
2455         {
2456           tree args = TREE_VALUE (TYPE_TEMPLATE_INFO (t));
2457           walk_tree (&args, &find_parameter_packs_r, ppd, ppd->visited);
2458         }
2459
2460       *walk_subtrees = 0;
2461       return NULL_TREE;
2462
2463     case TEMPLATE_DECL:
2464       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
2465           && TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
2466         break;
2467       
2468       *walk_subtrees = 0;
2469       return NULL_TREE;
2470        
2471     case TYPE_PACK_EXPANSION:
2472     case EXPR_PACK_EXPANSION:
2473       *walk_subtrees = 0;
2474       return NULL_TREE;
2475
2476     case INTEGER_TYPE:
2477       walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2478                  ppd, ppd->visited);
2479       *walk_subtrees = 0;
2480       return NULL_TREE;
2481
2482     default:
2483       return NULL_TREE;
2484     }
2485   
2486   /* Add this parameter pack to the list.  */
2487   *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2488
2489   return NULL_TREE;
2490 }
2491
2492 /* Determines if the expression or type T uses any parameter packs.  */
2493 bool
2494 uses_parameter_packs (tree t)
2495 {
2496   tree parameter_packs = NULL_TREE;
2497   struct find_parameter_pack_data ppd;
2498   ppd.parameter_packs = &parameter_packs;
2499   ppd.visited = pointer_set_create ();
2500   walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2501   pointer_set_destroy (ppd.visited);
2502   return parameter_packs != NULL_TREE;
2503 }
2504
2505 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2506    representation a base-class initializer into a parameter pack
2507    expansion. If all goes well, the resulting node will be an
2508    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2509    respectively.  */
2510 tree 
2511 make_pack_expansion (tree arg)
2512 {
2513   tree result;
2514   tree parameter_packs = NULL_TREE;
2515   bool for_types = false;
2516   struct find_parameter_pack_data ppd;
2517
2518   if (!arg || arg == error_mark_node)
2519     return arg;
2520
2521   if (TREE_CODE (arg) == TREE_LIST)
2522     {
2523       /* The only time we will see a TREE_LIST here is for a base
2524          class initializer.  In this case, the TREE_PURPOSE will be a
2525          _TYPE node (representing the base class expansion we're
2526          initializing) and the TREE_VALUE will be a TREE_LIST
2527          containing the initialization arguments. 
2528
2529          The resulting expansion looks somewhat different from most
2530          expansions. Rather than returning just one _EXPANSION, we
2531          return a TREE_LIST whose TREE_PURPOSE is a
2532          TYPE_PACK_EXPANSION containing the bases that will be
2533          initialized.  The TREE_VALUE will be identical to the
2534          original TREE_VALUE, which is a list of arguments that will
2535          be passed to each base.  We do not introduce any new pack
2536          expansion nodes into the TREE_VALUE (although it is possible
2537          that some already exist), because the TREE_PURPOSE and
2538          TREE_VALUE all need to be expanded together with the same
2539          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2540          resulting TREE_PURPOSE will mention the parameter packs in
2541          both the bases and the arguments to the bases.  */
2542       tree purpose;
2543       tree value;
2544       tree parameter_packs = NULL_TREE;
2545
2546       /* Determine which parameter packs will be used by the base
2547          class expansion.  */
2548       ppd.visited = pointer_set_create ();
2549       ppd.parameter_packs = &parameter_packs;
2550       walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2551                  &ppd, ppd.visited);
2552
2553       if (parameter_packs == NULL_TREE)
2554         {
2555           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2556           pointer_set_destroy (ppd.visited);
2557           return error_mark_node;
2558         }
2559
2560       if (TREE_VALUE (arg) != void_type_node)
2561         {
2562           /* Collect the sets of parameter packs used in each of the
2563              initialization arguments.  */
2564           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2565             {
2566               /* Determine which parameter packs will be expanded in this
2567                  argument.  */
2568               walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2569                          &ppd, ppd.visited);
2570             }
2571         }
2572
2573       pointer_set_destroy (ppd.visited);
2574
2575       /* Create the pack expansion type for the base type.  */
2576       purpose = make_node (TYPE_PACK_EXPANSION);
2577       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2578       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2579
2580       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2581          they will rarely be compared to anything.  */
2582       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2583
2584       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2585     }
2586
2587   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2588     for_types = true;
2589
2590   /* Build the PACK_EXPANSION_* node.  */
2591   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2592   SET_PACK_EXPANSION_PATTERN (result, arg);
2593   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2594     {
2595       /* Propagate type and const-expression information.  */
2596       TREE_TYPE (result) = TREE_TYPE (arg);
2597       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2598     }
2599   else
2600     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2601        they will rarely be compared to anything.  */
2602     SET_TYPE_STRUCTURAL_EQUALITY (result);
2603
2604   /* Determine which parameter packs will be expanded.  */
2605   ppd.parameter_packs = &parameter_packs;
2606   ppd.visited = pointer_set_create ();
2607   walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2608   pointer_set_destroy (ppd.visited);
2609
2610   /* Make sure we found some parameter packs.  */
2611   if (parameter_packs == NULL_TREE)
2612     {
2613       if (TYPE_P (arg))
2614         error ("expansion pattern %<%T%> contains no argument packs", arg);
2615       else
2616         error ("expansion pattern %<%E%> contains no argument packs", arg);
2617       return error_mark_node;
2618     }
2619   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2620
2621   return result;
2622 }
2623
2624 /* Checks T for any "bare" parameter packs, which have not yet been
2625    expanded, and issues an error if any are found. This operation can
2626    only be done on full expressions or types (e.g., an expression
2627    statement, "if" condition, etc.), because we could have expressions like:
2628
2629      foo(f(g(h(args)))...)
2630
2631    where "args" is a parameter pack. check_for_bare_parameter_packs
2632    should not be called for the subexpressions args, h(args),
2633    g(h(args)), or f(g(h(args))), because we would produce erroneous
2634    error messages. 
2635
2636    Returns TRUE if there were no bare parameter packs, returns FALSE
2637    (and emits an error) if there were bare parameter packs.*/
2638 bool 
2639 check_for_bare_parameter_packs (tree t)
2640 {
2641   tree parameter_packs = NULL_TREE;
2642   struct find_parameter_pack_data ppd;
2643
2644   if (!processing_template_decl || !t || t == error_mark_node)
2645     return true;
2646
2647   if (TREE_CODE (t) == TYPE_DECL)
2648     t = TREE_TYPE (t);
2649
2650   ppd.parameter_packs = &parameter_packs;
2651   ppd.visited = pointer_set_create ();
2652   walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2653   pointer_set_destroy (ppd.visited);
2654
2655   if (parameter_packs) 
2656     {
2657       error ("parameter packs not expanded with `...':");
2658       while (parameter_packs)
2659         {
2660           tree pack = TREE_VALUE (parameter_packs);
2661           tree name = NULL_TREE;
2662
2663           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2664               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2665             name = TYPE_NAME (pack);
2666           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2667             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2668           else
2669             name = DECL_NAME (pack);
2670           inform ("        %qD", name);
2671
2672           parameter_packs = TREE_CHAIN (parameter_packs);
2673         }
2674
2675       return false;
2676     }
2677
2678   return true;
2679 }
2680
2681 /* Expand any parameter packs that occur in the template arguments in
2682    ARGS.  */
2683 tree
2684 expand_template_argument_pack (tree args)
2685 {
2686   tree result_args = NULL_TREE;
2687   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2688   int num_result_args = -1;
2689
2690   /* First, determine if we need to expand anything, and the number of
2691      slots we'll need.  */
2692   for (in_arg = 0; in_arg < nargs; ++in_arg)
2693     {
2694       tree arg = TREE_VEC_ELT (args, in_arg);
2695       if (ARGUMENT_PACK_P (arg))
2696         {
2697           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2698           if (num_result_args < 0)
2699             num_result_args = in_arg + num_packed;
2700           else
2701             num_result_args += num_packed;
2702         }
2703       else
2704         {
2705           if (num_result_args >= 0)
2706             num_result_args++;
2707         }
2708     }
2709
2710   /* If no expansion is necessary, we're done.  */
2711   if (num_result_args < 0)
2712     return args;
2713
2714   /* Expand arguments.  */
2715   result_args = make_tree_vec (num_result_args);
2716   for (in_arg = 0; in_arg < nargs; ++in_arg)
2717     {
2718       tree arg = TREE_VEC_ELT (args, in_arg);
2719       if (ARGUMENT_PACK_P (arg))
2720         {
2721           tree packed = ARGUMENT_PACK_ARGS (arg);
2722           int i, num_packed = TREE_VEC_LENGTH (packed);
2723           for (i = 0; i < num_packed; ++i, ++out_arg)
2724             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2725         }
2726       else
2727         {
2728           TREE_VEC_ELT (result_args, out_arg) = arg;
2729           ++out_arg;
2730         }
2731     }
2732
2733   return result_args;
2734 }
2735
2736 /* Complain if DECL shadows a template parameter.
2737
2738    [temp.local]: A template-parameter shall not be redeclared within its
2739    scope (including nested scopes).  */
2740
2741 void
2742 check_template_shadow (tree decl)
2743 {
2744   tree olddecl;
2745
2746   /* If we're not in a template, we can't possibly shadow a template
2747      parameter.  */
2748   if (!current_template_parms)
2749     return;
2750
2751   /* Figure out what we're shadowing.  */
2752   if (TREE_CODE (decl) == OVERLOAD)
2753     decl = OVL_CURRENT (decl);
2754   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2755
2756   /* If there's no previous binding for this name, we're not shadowing
2757      anything, let alone a template parameter.  */
2758   if (!olddecl)
2759     return;
2760
2761   /* If we're not shadowing a template parameter, we're done.  Note
2762      that OLDDECL might be an OVERLOAD (or perhaps even an
2763      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2764      node.  */
2765   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2766     return;
2767
2768   /* We check for decl != olddecl to avoid bogus errors for using a
2769      name inside a class.  We check TPFI to avoid duplicate errors for
2770      inline member templates.  */
2771   if (decl == olddecl
2772       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2773     return;
2774
2775   error ("declaration of %q+#D", decl);
2776   error (" shadows template parm %q+#D", olddecl);
2777 }
2778
2779 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2780    ORIG_LEVEL, DECL, and TYPE.  */
2781
2782 static tree
2783 build_template_parm_index (int index,
2784                            int level,
2785                            int orig_level,
2786                            tree decl,
2787                            tree type)
2788 {
2789   tree t = make_node (TEMPLATE_PARM_INDEX);
2790   TEMPLATE_PARM_IDX (t) = index;
2791   TEMPLATE_PARM_LEVEL (t) = level;
2792   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2793   TEMPLATE_PARM_DECL (t) = decl;
2794   TREE_TYPE (t) = type;
2795   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2796   TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2797   TREE_READONLY (t) = TREE_READONLY (decl);
2798
2799   return t;
2800 }
2801
2802 /* Find the canonical type parameter for the given template type
2803    parameter.  Returns the canonical type parameter, which may be TYPE
2804    if no such parameter existed.  */
2805 static tree
2806 canonical_type_parameter (tree type)
2807 {
2808   tree list;
2809   int idx = TEMPLATE_TYPE_IDX (type);
2810   if (!canonical_template_parms)
2811     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2812
2813   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2814     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2815
2816   list = VEC_index (tree, canonical_template_parms, idx);
2817   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2818     list = TREE_CHAIN (list);
2819
2820   if (list)
2821     return TREE_VALUE (list);
2822   else
2823     {
2824       VEC_replace(tree, canonical_template_parms, idx,
2825                   tree_cons (NULL_TREE, type, 
2826                              VEC_index (tree, canonical_template_parms, idx)));
2827       return type;
2828     }
2829 }
2830
2831 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2832    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2833    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2834    new one is created.  */
2835
2836 static tree
2837 reduce_template_parm_level (tree index, tree type, int levels)
2838 {
2839   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2840       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2841           != TEMPLATE_PARM_LEVEL (index) - levels))
2842     {
2843       tree orig_decl = TEMPLATE_PARM_DECL (index);
2844       tree decl, t;
2845
2846       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2847       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2848       TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2849       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2850       DECL_ARTIFICIAL (decl) = 1;
2851       SET_DECL_TEMPLATE_PARM_P (decl);
2852
2853       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2854                                      TEMPLATE_PARM_LEVEL (index) - levels,
2855                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2856                                      decl, type);
2857       TEMPLATE_PARM_DESCENDANTS (index) = t;
2858       TEMPLATE_PARM_PARAMETER_PACK (t) 
2859         = TEMPLATE_PARM_PARAMETER_PACK (index);
2860
2861         /* Template template parameters need this.  */
2862       if (TREE_CODE (decl) != CONST_DECL)
2863         DECL_TEMPLATE_PARMS (decl)
2864           = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2865     }
2866
2867   return TEMPLATE_PARM_DESCENDANTS (index);
2868 }
2869
2870 /* Process information from new template parameter PARM and append it to the
2871    LIST being built.  This new parameter is a non-type parameter iff
2872    IS_NON_TYPE is true. This new parameter is a parameter
2873    pack iff IS_PARAMETER_PACK is true.  */
2874
2875 tree
2876 process_template_parm (tree list, tree parm, bool is_non_type, 
2877                        bool is_parameter_pack)
2878 {
2879   tree decl = 0;
2880   tree defval;
2881   tree err_parm_list;
2882   int idx = 0;
2883
2884   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2885   defval = TREE_PURPOSE (parm);
2886
2887   if (list)
2888     {
2889       tree p = tree_last (list);
2890
2891       if (p && TREE_VALUE (p) != error_mark_node)
2892         {
2893           p = TREE_VALUE (p);
2894           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2895             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2896           else
2897             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2898         }
2899
2900       ++idx;
2901     }
2902   else
2903     idx = 0;
2904
2905   if (is_non_type)
2906     {
2907       parm = TREE_VALUE (parm);
2908
2909       SET_DECL_TEMPLATE_PARM_P (parm);
2910
2911       if (TREE_TYPE (parm) == error_mark_node)
2912         {
2913           err_parm_list = build_tree_list (defval, parm);
2914           TREE_VALUE (err_parm_list) = error_mark_node;
2915            return chainon (list, err_parm_list);
2916         }
2917       else
2918       {
2919         /* [temp.param]
2920
2921            The top-level cv-qualifiers on the template-parameter are
2922            ignored when determining its type.  */
2923         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2924         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2925           {
2926             err_parm_list = build_tree_list (defval, parm);
2927             TREE_VALUE (err_parm_list) = error_mark_node;
2928              return chainon (list, err_parm_list);
2929           }
2930
2931         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
2932           {
2933             /* This template parameter is not a parameter pack, but it
2934                should be. Complain about "bare" parameter packs.  */
2935             check_for_bare_parameter_packs (TREE_TYPE (parm));
2936             
2937             /* Recover by calling this a parameter pack.  */
2938             is_parameter_pack = true;
2939           }
2940       }
2941
2942       /* A template parameter is not modifiable.  */
2943       TREE_CONSTANT (parm) = 1;
2944       TREE_INVARIANT (parm) = 1;
2945       TREE_READONLY (parm) = 1;
2946       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2947       TREE_CONSTANT (decl) = 1;
2948       TREE_INVARIANT (decl) = 1;
2949       TREE_READONLY (decl) = 1;
2950       DECL_INITIAL (parm) = DECL_INITIAL (decl)
2951         = build_template_parm_index (idx, processing_template_decl,
2952                                      processing_template_decl,
2953                                      decl, TREE_TYPE (parm));
2954
2955       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
2956         = is_parameter_pack;
2957     }
2958   else
2959     {
2960       tree t;
2961       parm = TREE_VALUE (TREE_VALUE (parm));
2962
2963       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2964         {
2965           t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2966           /* This is for distinguishing between real templates and template
2967              template parameters */
2968           TREE_TYPE (parm) = t;
2969           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2970           decl = parm;
2971         }
2972       else
2973         {
2974           t = make_aggr_type (TEMPLATE_TYPE_PARM);
2975           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
2976           decl = build_decl (TYPE_DECL, parm, t);
2977         }
2978
2979       TYPE_NAME (t) = decl;
2980       TYPE_STUB_DECL (t) = decl;
2981       parm = decl;
2982       TEMPLATE_TYPE_PARM_INDEX (t)
2983         = build_template_parm_index (idx, processing_template_decl,
2984                                      processing_template_decl,
2985                                      decl, TREE_TYPE (parm));
2986       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
2987       TYPE_CANONICAL (t) = canonical_type_parameter (t);
2988     }
2989   DECL_ARTIFICIAL (decl) = 1;
2990   SET_DECL_TEMPLATE_PARM_P (decl);
2991   pushdecl (decl);
2992   parm = build_tree_list (defval, parm);
2993   return chainon (list, parm);
2994 }
2995
2996 /* The end of a template parameter list has been reached.  Process the
2997    tree list into a parameter vector, converting each parameter into a more
2998    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
2999    as PARM_DECLs.  */
3000
3001 tree
3002 end_template_parm_list (tree parms)
3003 {
3004   int nparms;
3005   tree parm, next;
3006   tree saved_parmlist = make_tree_vec (list_length (parms));
3007
3008   current_template_parms
3009     = tree_cons (size_int (processing_template_decl),
3010                  saved_parmlist, current_template_parms);
3011
3012   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3013     {
3014       next = TREE_CHAIN (parm);
3015       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3016       TREE_CHAIN (parm) = NULL_TREE;
3017     }
3018
3019   --processing_template_parmlist;
3020
3021   return saved_parmlist;
3022 }
3023
3024 /* end_template_decl is called after a template declaration is seen.  */
3025
3026 void
3027 end_template_decl (void)
3028 {
3029   reset_specialization ();
3030
3031   if (! processing_template_decl)
3032     return;
3033
3034   /* This matches the pushlevel in begin_template_parm_list.  */
3035   finish_scope ();
3036
3037   --processing_template_decl;
3038   current_template_parms = TREE_CHAIN (current_template_parms);
3039 }
3040
3041 /* Within the declaration of a template, return all levels of template
3042    parameters that apply.  The template parameters are represented as
3043    a TREE_VEC, in the form documented in cp-tree.h for template
3044    arguments.  */
3045
3046 static tree
3047 current_template_args (void)
3048 {
3049   tree header;
3050   tree args = NULL_TREE;
3051   int length = TMPL_PARMS_DEPTH (current_template_parms);
3052   int l = length;
3053
3054   /* If there is only one level of template parameters, we do not
3055      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3056      TREE_VEC containing the arguments.  */
3057   if (length > 1)
3058     args = make_tree_vec (length);
3059
3060   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3061     {
3062       tree a = copy_node (TREE_VALUE (header));
3063       int i;
3064
3065       TREE_TYPE (a) = NULL_TREE;
3066       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3067         {
3068           tree t = TREE_VEC_ELT (a, i);
3069
3070           /* T will be a list if we are called from within a
3071              begin/end_template_parm_list pair, but a vector directly
3072              if within a begin/end_member_template_processing pair.  */
3073           if (TREE_CODE (t) == TREE_LIST)
3074             {
3075               t = TREE_VALUE (t);
3076
3077               if (t != error_mark_node)
3078                 {
3079                   if (TREE_CODE (t) == TYPE_DECL
3080                       || TREE_CODE (t) == TEMPLATE_DECL)
3081                     {
3082                       t = TREE_TYPE (t);
3083                       
3084                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3085                         {
3086                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3087                              with a single element, which expands T.  */
3088                           tree vec = make_tree_vec (1);
3089                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3090                           
3091                           t = make_node (TYPE_ARGUMENT_PACK);
3092                           SET_ARGUMENT_PACK_ARGS (t, vec);
3093                         }
3094                     }
3095                   else
3096                     {
3097                       t = DECL_INITIAL (t);
3098                       
3099                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3100                         {
3101                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3102                              with a single element, which expands T.  */
3103                           tree vec = make_tree_vec (1);
3104                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3105                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3106                           
3107                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3108                           SET_ARGUMENT_PACK_ARGS (t, vec);
3109                           TREE_TYPE (t) = type;
3110                         }
3111                     }
3112                 }
3113               TREE_VEC_ELT (a, i) = t;
3114             }
3115         }
3116
3117       if (length > 1)
3118         TREE_VEC_ELT (args, --l) = a;
3119       else
3120         args = a;
3121     }
3122
3123   return args;
3124 }
3125
3126 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3127    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3128    a member template.  Used by push_template_decl below.  */
3129
3130 static tree
3131 build_template_decl (tree decl, tree parms, bool member_template_p)
3132 {
3133   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3134   DECL_TEMPLATE_PARMS (tmpl) = parms;
3135   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3136   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3137   if (DECL_LANG_SPECIFIC (decl))
3138     {
3139       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3140       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3141       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3142       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3143       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3144       if (DECL_OVERLOADED_OPERATOR_P (decl))
3145         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3146                                       DECL_OVERLOADED_OPERATOR_P (decl));
3147     }
3148
3149   return tmpl;
3150 }
3151
3152 struct template_parm_data
3153 {
3154   /* The level of the template parameters we are currently
3155      processing.  */
3156   int level;
3157
3158   /* The index of the specialization argument we are currently
3159      processing.  */
3160   int current_arg;
3161
3162   /* An array whose size is the number of template parameters.  The
3163      elements are nonzero if the parameter has been used in any one
3164      of the arguments processed so far.  */
3165   int* parms;
3166
3167   /* An array whose size is the number of template arguments.  The
3168      elements are nonzero if the argument makes use of template
3169      parameters of this level.  */
3170   int* arg_uses_template_parms;
3171 };
3172
3173 /* Subroutine of push_template_decl used to see if each template
3174    parameter in a partial specialization is used in the explicit
3175    argument list.  If T is of the LEVEL given in DATA (which is
3176    treated as a template_parm_data*), then DATA->PARMS is marked
3177    appropriately.  */
3178
3179 static int
3180 mark_template_parm (tree t, void* data)
3181 {
3182   int level;
3183   int idx;
3184   struct template_parm_data* tpd = (struct template_parm_data*) data;
3185
3186   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3187     {
3188       level = TEMPLATE_PARM_LEVEL (t);
3189       idx = TEMPLATE_PARM_IDX (t);
3190     }
3191   else
3192     {
3193       level = TEMPLATE_TYPE_LEVEL (t);
3194       idx = TEMPLATE_TYPE_IDX (t);
3195     }
3196
3197   if (level == tpd->level)
3198     {
3199       tpd->parms[idx] = 1;
3200       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3201     }
3202
3203   /* Return zero so that for_each_template_parm will continue the
3204      traversal of the tree; we want to mark *every* template parm.  */
3205   return 0;
3206 }
3207
3208 /* Process the partial specialization DECL.  */
3209
3210 static tree
3211 process_partial_specialization (tree decl)
3212 {
3213   tree type = TREE_TYPE (decl);
3214   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3215   tree specargs = CLASSTYPE_TI_ARGS (type);
3216   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3217   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3218   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3219   int nargs = TREE_VEC_LENGTH (inner_args);
3220   int ntparms = TREE_VEC_LENGTH (inner_parms);
3221   int  i;
3222   int did_error_intro = 0;
3223   struct template_parm_data tpd;
3224   struct template_parm_data tpd2;
3225
3226   /* We check that each of the template parameters given in the
3227      partial specialization is used in the argument list to the
3228      specialization.  For example:
3229
3230        template <class T> struct S;
3231        template <class T> struct S<T*>;
3232
3233      The second declaration is OK because `T*' uses the template
3234      parameter T, whereas
3235
3236        template <class T> struct S<int>;
3237
3238      is no good.  Even trickier is:
3239
3240        template <class T>
3241        struct S1
3242        {
3243           template <class U>
3244           struct S2;
3245           template <class U>
3246           struct S2<T>;
3247        };
3248
3249      The S2<T> declaration is actually invalid; it is a
3250      full-specialization.  Of course,
3251
3252           template <class U>
3253           struct S2<T (*)(U)>;
3254
3255      or some such would have been OK.  */
3256   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3257   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3258   memset (tpd.parms, 0, sizeof (int) * ntparms);
3259
3260   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3261   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3262   for (i = 0; i < nargs; ++i)
3263     {
3264       tpd.current_arg = i;
3265       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3266                               &mark_template_parm,
3267                               &tpd,
3268                               NULL);
3269     }
3270   for (i = 0; i < ntparms; ++i)
3271     if (tpd.parms[i] == 0)
3272       {
3273         /* One of the template parms was not used in the
3274            specialization.  */
3275         if (!did_error_intro)
3276           {
3277             error ("template parameters not used in partial specialization:");
3278             did_error_intro = 1;
3279           }
3280
3281         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3282       }
3283
3284   /* [temp.class.spec]
3285
3286      The argument list of the specialization shall not be identical to
3287      the implicit argument list of the primary template.  */
3288   if (comp_template_args
3289       (inner_args,
3290        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3291                                                    (maintmpl)))))
3292     error ("partial specialization %qT does not specialize any template arguments", type);
3293
3294   /* [temp.class.spec]
3295
3296      A partially specialized non-type argument expression shall not
3297      involve template parameters of the partial specialization except
3298      when the argument expression is a simple identifier.
3299
3300      The type of a template parameter corresponding to a specialized
3301      non-type argument shall not be dependent on a parameter of the
3302      specialization. 
3303
3304      Also, we verify that pack expansions only occur at the
3305      end of the argument list.  */
3306   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3307   tpd2.parms = 0;
3308   for (i = 0; i < nargs; ++i)
3309     {
3310       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3311       tree arg = TREE_VEC_ELT (inner_args, i);
3312       tree packed_args = NULL_TREE;
3313       int j, len = 1;
3314
3315       if (ARGUMENT_PACK_P (arg))
3316         {
3317           /* Extract the arguments from the argument pack. We'll be
3318              iterating over these in the following loop.  */
3319           packed_args = ARGUMENT_PACK_ARGS (arg);
3320           len = TREE_VEC_LENGTH (packed_args);
3321         }
3322
3323       for (j = 0; j < len; j++)
3324         {
3325           if (packed_args)
3326             /* Get the Jth argument in the parameter pack.  */
3327             arg = TREE_VEC_ELT (packed_args, j);
3328
3329           if (PACK_EXPANSION_P (arg))
3330             {
3331               /* Pack expansions must come at the end of the
3332                  argument list.  */
3333               if ((packed_args && j < len - 1)
3334                   || (!packed_args && i < nargs - 1))
3335                 {
3336                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3337                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3338                   else
3339                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);                   
3340                 }
3341             }
3342
3343           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3344             /* We only care about the pattern.  */
3345             arg = PACK_EXPANSION_PATTERN (arg);
3346
3347           if (/* These first two lines are the `non-type' bit.  */
3348               !TYPE_P (arg)
3349               && TREE_CODE (arg) != TEMPLATE_DECL
3350               /* This next line is the `argument expression is not just a
3351                  simple identifier' condition and also the `specialized
3352                  non-type argument' bit.  */
3353               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3354             {
3355               if ((!packed_args && tpd.arg_uses_template_parms[i])
3356                   || (packed_args && uses_template_parms (arg)))
3357                 error ("template argument %qE involves template parameter(s)",
3358                        arg);
3359               else 
3360                 {
3361                   /* Look at the corresponding template parameter,
3362                      marking which template parameters its type depends
3363                      upon.  */
3364                   tree type = TREE_TYPE (parm);
3365
3366                   if (!tpd2.parms)
3367                     {
3368                       /* We haven't yet initialized TPD2.  Do so now.  */
3369                       tpd2.arg_uses_template_parms 
3370                         = (int *) alloca (sizeof (int) * nargs);
3371                       /* The number of parameters here is the number in the
3372                          main template, which, as checked in the assertion
3373                          above, is NARGS.  */
3374                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3375                       tpd2.level = 
3376                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3377                     }
3378
3379                   /* Mark the template parameters.  But this time, we're
3380                      looking for the template parameters of the main
3381                      template, not in the specialization.  */
3382                   tpd2.current_arg = i;
3383                   tpd2.arg_uses_template_parms[i] = 0;
3384                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3385                   for_each_template_parm (type,
3386                                           &mark_template_parm,
3387                                           &tpd2,
3388                                           NULL);
3389
3390                   if (tpd2.arg_uses_template_parms [i])
3391                     {
3392                       /* The type depended on some template parameters.
3393                          If they are fully specialized in the
3394                          specialization, that's OK.  */
3395                       int j;
3396                       for (j = 0; j < nargs; ++j)
3397                         if (tpd2.parms[j] != 0
3398                             && tpd.arg_uses_template_parms [j])
3399                           {
3400                             error ("type %qT of template argument %qE depends "
3401                                    "on template parameter(s)", 
3402                                    type,
3403                                    arg);
3404                             break;
3405                           }
3406                     }
3407                 }
3408             }
3409         }
3410     }
3411
3412   if (retrieve_specialization (maintmpl, specargs,
3413                                /*class_specializations_p=*/true))
3414     /* We've already got this specialization.  */
3415     return decl;
3416
3417   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3418     = tree_cons (specargs, inner_parms,
3419                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3420   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3421   return decl;
3422 }
3423
3424 /* Check that a template declaration's use of default arguments is not
3425    invalid.  Here, PARMS are the template parameters.  IS_PRIMARY is
3426    nonzero if DECL is the thing declared by a primary template.
3427    IS_PARTIAL is nonzero if DECL is a partial specialization.
3428    
3429
3430    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3431    declaration (but not a definition); 1 indicates a declaration, 2
3432    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3433    emitted for extraneous default arguments.
3434
3435    Returns TRUE if there were no errors found, FALSE otherwise. */
3436
3437 bool
3438 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3439                          int is_partial, int is_friend_decl)
3440 {
3441   const char *msg;
3442   int last_level_to_check;
3443   tree parm_level;
3444   bool no_errors = true;
3445
3446   /* [temp.param]
3447
3448      A default template-argument shall not be specified in a
3449      function template declaration or a function template definition, nor
3450      in the template-parameter-list of the definition of a member of a
3451      class template.  */
3452
3453   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3454     /* You can't have a function template declaration in a local
3455        scope, nor you can you define a member of a class template in a
3456        local scope.  */
3457     return true;
3458
3459   if (current_class_type
3460       && !TYPE_BEING_DEFINED (current_class_type)
3461       && DECL_LANG_SPECIFIC (decl)
3462       /* If this is either a friend defined in the scope of the class
3463          or a member function.  */
3464       && (DECL_FUNCTION_MEMBER_P (decl)
3465           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3466           : DECL_FRIEND_CONTEXT (decl)
3467           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3468           : false)
3469       /* And, if it was a member function, it really was defined in
3470          the scope of the class.  */
3471       && (!DECL_FUNCTION_MEMBER_P (decl)
3472           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3473     /* We already checked these parameters when the template was
3474        declared, so there's no need to do it again now.  This function
3475        was defined in class scope, but we're processing it's body now
3476        that the class is complete.  */
3477     return true;
3478
3479   /* Core issue 226 (C++0x only): the following only applies to class
3480      templates.  */
3481   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3482     {
3483       /* [temp.param]
3484
3485          If a template-parameter has a default template-argument, all
3486          subsequent template-parameters shall have a default
3487          template-argument supplied.  */
3488       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3489         {
3490           tree inner_parms = TREE_VALUE (parm_level);
3491           int ntparms = TREE_VEC_LENGTH (inner_parms);
3492           int seen_def_arg_p = 0;
3493           int i;
3494
3495           for (i = 0; i < ntparms; ++i)
3496             {
3497               tree parm = TREE_VEC_ELT (inner_parms, i);
3498
3499               if (parm == error_mark_node)
3500                 continue;
3501
3502               if (TREE_PURPOSE (parm))
3503                 seen_def_arg_p = 1;
3504               else if (seen_def_arg_p)
3505                 {
3506                   error ("no default argument for %qD", TREE_VALUE (parm));
3507                   /* For better subsequent error-recovery, we indicate that
3508                      there should have been a default argument.  */
3509                   TREE_PURPOSE (parm) = error_mark_node;
3510                   no_errors = false;
3511                 }
3512             }
3513         }
3514     }
3515
3516   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3517       || is_partial 
3518       || !is_primary
3519       || is_friend_decl)
3520     /* For an ordinary class template, default template arguments are
3521        allowed at the innermost level, e.g.:
3522          template <class T = int>
3523          struct S {};
3524        but, in a partial specialization, they're not allowed even
3525        there, as we have in [temp.class.spec]:
3526
3527          The template parameter list of a specialization shall not
3528          contain default template argument values.
3529
3530        So, for a partial specialization, or for a function template
3531        (in C++98/C++03), we look at all of them.  */
3532     ;
3533   else
3534     /* But, for a primary class template that is not a partial
3535        specialization we look at all template parameters except the
3536        innermost ones.  */
3537     parms = TREE_CHAIN (parms);
3538
3539   /* Figure out what error message to issue.  */
3540   if (is_friend_decl == 2)
3541     msg = "default template arguments may not be used in function template friend re-declaration";
3542   else if (is_friend_decl)
3543     msg = "default template arguments may not be used in function template friend declarations";
3544   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3545     msg = "default template arguments may not be used in function templates";
3546   else if (is_partial)
3547     msg = "default template arguments may not be used in partial specializations";
3548   else
3549     msg = "default argument for template parameter for class enclosing %qD";
3550
3551   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3552     /* If we're inside a class definition, there's no need to
3553        examine the parameters to the class itself.  On the one
3554        hand, they will be checked when the class is defined, and,
3555        on the other, default arguments are valid in things like:
3556          template <class T = double>
3557          struct S { template <class U> void f(U); };
3558        Here the default argument for `S' has no bearing on the
3559        declaration of `f'.  */
3560     last_level_to_check = template_class_depth (current_class_type) + 1;
3561   else
3562     /* Check everything.  */
3563     last_level_to_check = 0;
3564
3565   for (parm_level = parms;
3566        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3567        parm_level = TREE_CHAIN (parm_level))
3568     {
3569       tree inner_parms = TREE_VALUE (parm_level);
3570       int i;
3571       int ntparms;
3572
3573       ntparms = TREE_VEC_LENGTH (inner_parms);
3574       for (i = 0; i < ntparms; ++i)
3575         {
3576           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3577             continue;
3578
3579           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3580             {
3581               if (msg)
3582                 {
3583                   no_errors = false;
3584                   if (is_friend_decl == 2)
3585                     return no_errors;
3586
3587                   error (msg, decl);
3588                   msg = 0;
3589                 }
3590
3591               /* Clear out the default argument so that we are not
3592                  confused later.  */
3593               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3594             }
3595         }
3596
3597       /* At this point, if we're still interested in issuing messages,
3598          they must apply to classes surrounding the object declared.  */
3599       if (msg)
3600         msg = "default argument for template parameter for class enclosing %qD";
3601     }
3602
3603   return no_errors;
3604 }
3605
3606 /* Worker for push_template_decl_real, called via
3607    for_each_template_parm.  DATA is really an int, indicating the
3608    level of the parameters we are interested in.  If T is a template
3609    parameter of that level, return nonzero.  */
3610
3611 static int
3612 template_parm_this_level_p (tree t, void* data)
3613 {
3614   int this_level = *(int *)data;
3615   int level;
3616
3617   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3618     level = TEMPLATE_PARM_LEVEL (t);
3619   else
3620     level = TEMPLATE_TYPE_LEVEL (t);
3621   return level == this_level;
3622 }
3623
3624 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3625    parameters given by current_template_args, or reuses a
3626    previously existing one, if appropriate.  Returns the DECL, or an
3627    equivalent one, if it is replaced via a call to duplicate_decls.
3628
3629    If IS_FRIEND is true, DECL is a friend declaration.  */
3630
3631 tree
3632 push_template_decl_real (tree decl, bool is_friend)
3633 {
3634   tree tmpl;
3635   tree args;
3636   tree info;
3637   tree ctx;
3638   int primary;
3639   int is_partial;
3640   int new_template_p = 0;
3641   /* True if the template is a member template, in the sense of
3642      [temp.mem].  */
3643   bool member_template_p = false;
3644
3645   if (decl == error_mark_node)
3646     return decl;
3647
3648   /* See if this is a partial specialization.  */
3649   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3650                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3651                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3652
3653   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3654     is_friend = true;
3655
3656   if (is_friend)
3657     /* For a friend, we want the context of the friend function, not
3658        the type of which it is a friend.  */
3659     ctx = DECL_CONTEXT (decl);
3660   else if (CP_DECL_CONTEXT (decl)
3661            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3662     /* In the case of a virtual function, we want the class in which
3663        it is defined.  */
3664     ctx = CP_DECL_CONTEXT (decl);
3665   else
3666     /* Otherwise, if we're currently defining some class, the DECL
3667        is assumed to be a member of the class.  */
3668     ctx = current_scope ();
3669
3670   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3671     ctx = NULL_TREE;
3672
3673   if (!DECL_CONTEXT (decl))
3674     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3675
3676   /* See if this is a primary template.  */
3677   if (is_friend && ctx)
3678     /* A friend template that specifies a class context, i.e.
3679          template <typename T> friend void A<T>::f();
3680        is not primary.  */
3681     primary = 0;
3682   else
3683     primary = template_parm_scope_p ();
3684
3685   if (primary)
3686     {
3687       if (DECL_CLASS_SCOPE_P (decl))
3688         member_template_p = true;
3689       if (TREE_CODE (decl) == TYPE_DECL
3690           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3691         error ("template class without a name");
3692       else if (TREE_CODE (decl) == FUNCTION_DECL)
3693         {
3694           if (DECL_DESTRUCTOR_P (decl))
3695             {
3696               /* [temp.mem]
3697
3698                  A destructor shall not be a member template.  */
3699               error ("destructor %qD declared as member template", decl);
3700               return error_mark_node;
3701             }
3702           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3703               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3704                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3705                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3706                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3707                       == void_list_node)))
3708             {
3709               /* [basic.stc.dynamic.allocation]
3710
3711                  An allocation function can be a function
3712                  template. ... Template allocation functions shall
3713                  have two or more parameters.  */
3714               error ("invalid template declaration of %qD", decl);
3715               return error_mark_node;
3716             }
3717         }
3718       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3719                && CLASS_TYPE_P (TREE_TYPE (decl)))
3720         /* OK */;
3721       else
3722         {
3723           error ("template declaration of %q#D", decl);
3724           return error_mark_node;
3725         }
3726     }
3727
3728   /* Check to see that the rules regarding the use of default
3729      arguments are not being violated.  */
3730   check_default_tmpl_args (decl, current_template_parms,
3731                            primary, is_partial, /*is_friend_decl=*/0);
3732
3733   /* Ensure that there are no parameter packs in the type of this
3734      declaration that have not been expanded.  */
3735   if (TREE_CODE (decl) == FUNCTION_DECL)
3736     {
3737       /* Check each of the arguments individually to see if there are
3738          any bare parameter packs.  */
3739       tree type = TREE_TYPE (decl);
3740       tree arg = DECL_ARGUMENTS (decl);
3741       tree argtype = TYPE_ARG_TYPES (type);
3742
3743       while (arg && argtype)
3744         {
3745           if (!FUNCTION_PARAMETER_PACK_P (arg)
3746               && !check_for_bare_parameter_packs (TREE_TYPE (arg)))
3747             {
3748             /* This is a PARM_DECL that contains unexpanded parameter
3749                packs. We have already complained about this in the
3750                check_for_bare_parameter_packs call, so just replace
3751                these types with ERROR_MARK_NODE.  */
3752               TREE_TYPE (arg) = error_mark_node;
3753               TREE_VALUE (argtype) = error_mark_node;
3754             }
3755
3756           arg = TREE_CHAIN (arg);
3757           argtype = TREE_CHAIN (argtype);
3758         }
3759
3760       /* Check for bare parameter packs in the return type and the
3761          exception specifiers.  */
3762       check_for_bare_parameter_packs (TREE_TYPE (type));
3763       check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type));
3764     }
3765   else
3766     check_for_bare_parameter_packs (TREE_TYPE (decl));
3767
3768   if (is_partial)
3769     return process_partial_specialization (decl);
3770
3771   /* A primary class template can only have one parameter pack, at the
3772      end of the template parameter list.  */
3773   if (primary && TREE_CODE (decl) == TYPE_DECL)
3774     {
3775       tree inner_parms 
3776         = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3777       int i, len = TREE_VEC_LENGTH (inner_parms);
3778       for (i = 0; i < len - 1; i++)
3779         {
3780           tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
3781
3782           if (template_parameter_pack_p (parm))
3783             {
3784               if (TREE_CODE (parm) == PARM_DECL)
3785                 error ("parameter pack %qE must be at the end of the"
3786                        " template parameter list", parm);
3787               else
3788                 error ("parameter pack %qT must be at the end of the"
3789                        " template parameter list", TREE_TYPE (parm));
3790             }
3791         }
3792     }
3793
3794   args = current_template_args ();
3795
3796   if (!ctx
3797       || TREE_CODE (ctx) == FUNCTION_DECL
3798       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3799       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3800     {
3801       if (DECL_LANG_SPECIFIC (decl)
3802           && DECL_TEMPLATE_INFO (decl)
3803           && DECL_TI_TEMPLATE (decl))
3804         tmpl = DECL_TI_TEMPLATE (decl);
3805       /* If DECL is a TYPE_DECL for a class-template, then there won't
3806          be DECL_LANG_SPECIFIC.  The information equivalent to
3807          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3808       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3809                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3810                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3811         {
3812           /* Since a template declaration already existed for this
3813              class-type, we must be redeclaring it here.  Make sure
3814              that the redeclaration is valid.  */
3815           redeclare_class_template (TREE_TYPE (decl),
3816                                     current_template_parms);
3817           /* We don't need to create a new TEMPLATE_DECL; just use the
3818              one we already had.  */
3819           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3820         }
3821       else
3822         {
3823           tmpl = build_template_decl (decl, current_template_parms,
3824                                       member_template_p);
3825           new_template_p = 1;
3826
3827           if (DECL_LANG_SPECIFIC (decl)
3828               && DECL_TEMPLATE_SPECIALIZATION (decl))
3829             {
3830               /* A specialization of a member template of a template
3831                  class.  */
3832               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3833               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3834               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3835             }
3836         }
3837     }
3838   else
3839     {
3840       tree a, t, current, parms;
3841       int i;
3842
3843       if (TREE_CODE (decl) == TYPE_DECL)
3844         {
3845           if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3846                || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3847               && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3848               && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3849             tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3850           else
3851             {
3852               error ("%qD does not declare a template type", decl);
3853               return decl;
3854             }
3855         }
3856       else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3857         {
3858           error ("template definition of non-template %q#D", decl);
3859           return decl;
3860         }
3861       else
3862         tmpl = DECL_TI_TEMPLATE (decl);
3863
3864       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3865           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3866           && DECL_TEMPLATE_SPECIALIZATION (decl)
3867           && DECL_MEMBER_TEMPLATE_P (tmpl))
3868         {
3869           tree new_tmpl;
3870
3871           /* The declaration is a specialization of a member
3872              template, declared outside the class.  Therefore, the
3873              innermost template arguments will be NULL, so we
3874              replace them with the arguments determined by the
3875              earlier call to check_explicit_specialization.  */
3876           args = DECL_TI_ARGS (decl);
3877
3878           new_tmpl
3879             = build_template_decl (decl, current_template_parms,
3880                                    member_template_p);
3881           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3882           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3883           DECL_TI_TEMPLATE (decl) = new_tmpl;
3884           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3885           DECL_TEMPLATE_INFO (new_tmpl)
3886             = tree_cons (tmpl, args, NULL_TREE);
3887
3888           register_specialization (new_tmpl,
3889                                    most_general_template (tmpl),
3890                                    args,
3891                                    is_friend);
3892           return decl;
3893         }
3894
3895       /* Make sure the template headers we got make sense.  */
3896
3897       parms = DECL_TEMPLATE_PARMS (tmpl);
3898       i = TMPL_PARMS_DEPTH (parms);
3899       if (TMPL_ARGS_DEPTH (args) != i)
3900         {
3901           error ("expected %d levels of template parms for %q#D, got %d",
3902                  i, decl, TMPL_ARGS_DEPTH (args));
3903         }
3904       else
3905         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3906           {
3907             a = TMPL_ARGS_LEVEL (args, i);
3908             t = INNERMOST_TEMPLATE_PARMS (parms);
3909
3910             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3911               {
3912                 if (current == decl)
3913                   error ("got %d template parameters for %q#D",
3914                          TREE_VEC_LENGTH (a), decl);
3915                 else
3916                   error ("got %d template parameters for %q#T",
3917                          TREE_VEC_LENGTH (a), current);
3918                 error ("  but %d required", TREE_VEC_LENGTH (t));
3919                 return error_mark_node;
3920               }
3921
3922             /* Perhaps we should also check that the parms are used in the
3923                appropriate qualifying scopes in the declarator?  */
3924
3925             if (current == decl)
3926               current = ctx;
3927             else
3928               current = TYPE_CONTEXT (current);
3929           }
3930     }
3931
3932   DECL_TEMPLATE_RESULT (tmpl) = decl;
3933   TREE_TYPE (tmpl) = TREE_TYPE (decl);
3934
3935   /* Push template declarations for global functions and types.  Note
3936      that we do not try to push a global template friend declared in a
3937      template class; such a thing may well depend on the template
3938      parameters of the class.  */
3939   if (new_template_p && !ctx
3940       && !(is_friend && template_class_depth (current_class_type) > 0))
3941     {
3942       tmpl = pushdecl_namespace_level (tmpl, is_friend);
3943       if (tmpl == error_mark_node)
3944         return error_mark_node;
3945
3946       /* Hide template friend classes that haven't been declared yet.  */
3947       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3948         {
3949           DECL_ANTICIPATED (tmpl) = 1;
3950           DECL_FRIEND_P (tmpl) = 1;
3951         }
3952     }
3953
3954   if (primary)
3955     {
3956       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3957       if (DECL_CONV_FN_P (tmpl))
3958         {
3959           int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3960
3961           /* It is a conversion operator. See if the type converted to
3962              depends on innermost template operands.  */
3963
3964           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3965                                          depth))
3966             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3967         }
3968     }
3969
3970   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3971      back to its most general template.  If TMPL is a specialization,
3972      ARGS may only have the innermost set of arguments.  Add the missing
3973      argument levels if necessary.  */
3974   if (DECL_TEMPLATE_INFO (tmpl))
3975     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3976
3977   info = tree_cons (tmpl, args, NULL_TREE);
3978
3979   if (DECL_IMPLICIT_TYPEDEF_P (decl))
3980     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3981   else if (DECL_LANG_SPECIFIC (decl))
3982     DECL_TEMPLATE_INFO (decl) = info;
3983
3984   return DECL_TEMPLATE_RESULT (tmpl);
3985 }
3986
3987 tree
3988 push_template_decl (tree decl)
3989 {
3990   return push_template_decl_real (decl, false);
3991 }
3992
3993 /* Called when a class template TYPE is redeclared with the indicated
3994    template PARMS, e.g.:
3995
3996      template <class T> struct S;
3997      template <class T> struct S {};  */
3998
3999 bool
4000 redeclare_class_template (tree type, tree parms)
4001 {
4002   tree tmpl;
4003   tree tmpl_parms;
4004   int i;
4005
4006   if (!TYPE_TEMPLATE_INFO (type))
4007     {
4008       error ("%qT is not a template type", type);
4009       return false;
4010     }
4011
4012   tmpl = TYPE_TI_TEMPLATE (type);
4013   if (!PRIMARY_TEMPLATE_P (tmpl))
4014     /* The type is nested in some template class.  Nothing to worry
4015        about here; there are no new template parameters for the nested
4016        type.  */
4017     return true;
4018
4019   if (!parms)
4020     {
4021       error ("template specifiers not specified in declaration of %qD",
4022              tmpl);
4023       return false;
4024     }
4025
4026   parms = INNERMOST_TEMPLATE_PARMS (parms);
4027   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4028
4029   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4030     {
4031       error ("previous declaration %q+D", tmpl);
4032       error ("used %d template parameter(s) instead of %d",
4033              TREE_VEC_LENGTH (tmpl_parms),
4034              TREE_VEC_LENGTH (parms));
4035       return false;
4036     }
4037
4038   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4039     {
4040       tree tmpl_parm;
4041       tree parm;
4042       tree tmpl_default;
4043       tree parm_default;
4044
4045       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4046           || TREE_VEC_ELT (parms, i) == error_mark_node)
4047         continue;
4048
4049       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4050       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4051       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4052       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4053
4054       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4055          TEMPLATE_DECL.  */
4056       if (tmpl_parm != error_mark_node
4057            && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4058            || (TREE_CODE (tmpl_parm) != TYPE_DECL
4059                && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))))
4060         {
4061           error ("template parameter %q+#D", tmpl_parm);
4062           error ("redeclared here as %q#D", parm);
4063           return false;
4064         }
4065
4066       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4067         {
4068           /* We have in [temp.param]:
4069
4070              A template-parameter may not be given default arguments
4071              by two different declarations in the same scope.  */
4072           error ("redefinition of default argument for %q#D", parm);
4073           error ("%J  original definition appeared here", tmpl_parm);
4074           return false;
4075         }
4076
4077       if (parm_default != NULL_TREE)
4078         /* Update the previous template parameters (which are the ones
4079            that will really count) with the new default value.  */
4080         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4081       else if (tmpl_default != NULL_TREE)
4082         /* Update the new parameters, too; they'll be used as the
4083            parameters for any members.  */
4084         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4085     }
4086
4087     return true;
4088 }
4089
4090 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4091    (possibly simplified) expression.  */
4092
4093 tree
4094 fold_non_dependent_expr (tree expr)
4095 {
4096   if (expr == NULL_TREE)
4097     return NULL_TREE;
4098
4099   /* If we're in a template, but EXPR isn't value dependent, simplify
4100      it.  We're supposed to treat:
4101
4102        template <typename T> void f(T[1 + 1]);
4103        template <typename T> void f(T[2]);
4104
4105      as two declarations of the same function, for example.  */
4106   if (processing_template_decl
4107       && !type_dependent_expression_p (expr)
4108       && !value_dependent_expression_p (expr))
4109     {
4110       HOST_WIDE_INT saved_processing_template_decl;
4111
4112       saved_processing_template_decl = processing_template_decl;
4113       processing_template_decl = 0;
4114       expr = tsubst_copy_and_build (expr,
4115                                     /*args=*/NULL_TREE,
4116                                     tf_error,
4117                                     /*in_decl=*/NULL_TREE,
4118                                     /*function_p=*/false,
4119                                     /*integral_constant_expression_p=*/true);
4120       processing_template_decl = saved_processing_template_decl;
4121     }
4122   return expr;
4123 }
4124
4125 /* EXPR is an expression which is used in a constant-expression context.
4126    For instance, it could be a VAR_DECL with a constant initializer.
4127    Extract the innest constant expression.
4128
4129    This is basically a more powerful version of
4130    integral_constant_value, which can be used also in templates where
4131    initializers can maintain a syntactic rather than semantic form
4132    (even if they are non-dependent, for access-checking purposes).  */
4133
4134 static tree
4135 fold_decl_constant_value (tree expr)
4136 {
4137   tree const_expr = expr;
4138   do
4139     {
4140       expr = fold_non_dependent_expr (const_expr);
4141       const_expr = integral_constant_value (expr);
4142     }
4143   while (expr != const_expr);
4144
4145   return expr;
4146 }
4147
4148 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4149    must be a function or a pointer-to-function type, as specified
4150    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4151    and check that the resulting function has external linkage.  */
4152
4153 static tree
4154 convert_nontype_argument_function (tree type, tree expr)
4155 {
4156   tree fns = expr;
4157   tree fn, fn_no_ptr;
4158
4159   fn = instantiate_type (type, fns, tf_none);
4160   if (fn == error_mark_node)
4161     return error_mark_node;
4162
4163   fn_no_ptr = fn;
4164   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4165     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4166   if (TREE_CODE (fn_no_ptr) == BASELINK)
4167     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4168  
4169   /* [temp.arg.nontype]/1
4170
4171      A template-argument for a non-type, non-template template-parameter
4172      shall be one of:
4173      [...]
4174      -- the address of an object or function with external linkage.  */
4175   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4176     {
4177       error ("%qE is not a valid template argument for type %qT "
4178              "because function %qD has not external linkage",
4179              expr, type, fn_no_ptr);
4180       return NULL_TREE;
4181     }
4182
4183   return fn;
4184 }
4185
4186 /* Attempt to convert the non-type template parameter EXPR to the
4187    indicated TYPE.  If the conversion is successful, return the
4188    converted value.  If the conversion is unsuccessful, return
4189    NULL_TREE if we issued an error message, or error_mark_node if we
4190    did not.  We issue error messages for out-and-out bad template
4191    parameters, but not simply because the conversion failed, since we
4192    might be just trying to do argument deduction.  Both TYPE and EXPR
4193    must be non-dependent.
4194
4195    The conversion follows the special rules described in
4196    [temp.arg.nontype], and it is much more strict than an implicit
4197    conversion.
4198
4199    This function is called twice for each template argument (see
4200    lookup_template_class for a more accurate description of this
4201    problem). This means that we need to handle expressions which
4202    are not valid in a C++ source, but can be created from the
4203    first call (for instance, casts to perform conversions). These
4204    hacks can go away after we fix the double coercion problem.  */
4205
4206 static tree
4207 convert_nontype_argument (tree type, tree expr)
4208 {
4209   tree expr_type;
4210
4211   /* Detect immediately string literals as invalid non-type argument.
4212      This special-case is not needed for correctness (we would easily
4213      catch this later), but only to provide better diagnostic for this
4214      common user mistake. As suggested by DR 100, we do not mention
4215      linkage issues in the diagnostic as this is not the point.  */
4216   if (TREE_CODE (expr) == STRING_CST)
4217     {
4218       error ("%qE is not a valid template argument for type %qT "
4219              "because string literals can never be used in this context",
4220              expr, type);
4221       return NULL_TREE;
4222     }
4223
4224   /* If we are in a template, EXPR may be non-dependent, but still
4225      have a syntactic, rather than semantic, form.  For example, EXPR
4226      might be a SCOPE_REF, rather than the VAR_DECL to which the
4227      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4228      so that access checking can be performed when the template is
4229      instantiated -- but here we need the resolved form so that we can
4230      convert the argument.  */
4231   expr = fold_non_dependent_expr (expr);
4232   if (error_operand_p (expr))
4233     return error_mark_node;
4234   expr_type = TREE_TYPE (expr);
4235
4236   /* HACK: Due to double coercion, we can get a
4237      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4238      which is the tree that we built on the first call (see
4239      below when coercing to reference to object or to reference to
4240      function). We just strip everything and get to the arg.
4241      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4242      for examples.  */
4243   if (TREE_CODE (expr) == NOP_EXPR)
4244     {
4245       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4246         {
4247           /* ??? Maybe we could use convert_from_reference here, but we
4248              would need to relax its constraints because the NOP_EXPR
4249              could actually change the type to something more cv-qualified,
4250              and this is not folded by convert_from_reference.  */
4251           tree addr = TREE_OPERAND (expr, 0);
4252           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4253           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4254           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4255           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4256                       (TREE_TYPE (expr_type),
4257                        TREE_TYPE (TREE_TYPE (addr))));
4258
4259           expr = TREE_OPERAND (addr, 0);
4260           expr_type = TREE_TYPE (expr);
4261         }
4262
4263       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4264          parameter is a pointer to object, through decay and
4265          qualification conversion. Let's strip everything.  */
4266       else if (TYPE_PTROBV_P (type))
4267         {
4268           STRIP_NOPS (expr);
4269           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4270           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4271           /* Skip the ADDR_EXPR only if it is part of the decay for
4272              an array. Otherwise, it is part of the original argument
4273              in the source code.  */
4274           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4275             expr = TREE_OPERAND (expr, 0);
4276           expr_type = TREE_TYPE (expr);
4277         }
4278     }
4279
4280   /* [temp.arg.nontype]/5, bullet 1
4281
4282      For a non-type template-parameter of integral or enumeration type,
4283      integral promotions (_conv.prom_) and integral conversions
4284      (_conv.integral_) are applied.  */
4285   if (INTEGRAL_TYPE_P (type))
4286     {
4287       if (!INTEGRAL_TYPE_P (expr_type))
4288         return error_mark_node;
4289
4290       expr = fold_decl_constant_value (expr);
4291       /* Notice that there are constant expressions like '4 % 0' which
4292          do not fold into integer constants.  */
4293       if (TREE_CODE (expr) != INTEGER_CST)
4294         {
4295           error ("%qE is not a valid template argument for type %qT "
4296                  "because it is a non-constant expression", expr, type);
4297           return NULL_TREE;
4298         }
4299
4300       /* At this point, an implicit conversion does what we want,
4301          because we already know that the expression is of integral
4302          type.  */
4303       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4304       if (expr == error_mark_node)
4305         return error_mark_node;
4306
4307       /* Conversion was allowed: fold it to a bare integer constant.  */
4308       expr = fold (expr);
4309     }
4310   /* [temp.arg.nontype]/5, bullet 2
4311
4312      For a non-type template-parameter of type pointer to object,
4313      qualification conversions (_conv.qual_) and the array-to-pointer
4314      conversion (_conv.array_) are applied.  */
4315   else if (TYPE_PTROBV_P (type))
4316     {
4317       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4318
4319          A template-argument for a non-type, non-template template-parameter
4320          shall be one of: [...]
4321
4322          -- the name of a non-type template-parameter;
4323          -- the address of an object or function with external linkage, [...]
4324             expressed as "& id-expression" where the & is optional if the name
4325             refers to a function or array, or if the corresponding
4326             template-parameter is a reference.
4327
4328         Here, we do not care about functions, as they are invalid anyway
4329         for a parameter of type pointer-to-object.  */
4330
4331       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4332         /* Non-type template parameters are OK.  */
4333         ;
4334       else if (TREE_CODE (expr) != ADDR_EXPR
4335                && TREE_CODE (expr_type) != ARRAY_TYPE)
4336         {
4337           if (TREE_CODE (expr) == VAR_DECL)
4338             {
4339               error ("%qD is not a valid template argument "
4340                      "because %qD is a variable, not the address of "
4341                      "a variable",
4342                      expr, expr);
4343               return NULL_TREE;
4344             }
4345           /* Other values, like integer constants, might be valid
4346              non-type arguments of some other type.  */
4347           return error_mark_node;
4348         }
4349       else
4350         {
4351           tree decl;
4352
4353           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4354                   ? TREE_OPERAND (expr, 0) : expr);
4355           if (TREE_CODE (decl) != VAR_DECL)
4356             {
4357               error ("%qE is not a valid template argument of type %qT "
4358                      "because %qE is not a variable",
4359                      expr, type, decl);
4360               return NULL_TREE;
4361             }
4362           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4363             {
4364               error ("%qE is not a valid template argument of type %qT "
4365                      "because %qD does not have external linkage",
4366                      expr, type, decl);
4367               return NULL_TREE;
4368             }
4369         }
4370
4371       expr = decay_conversion (expr);
4372       if (expr == error_mark_node)
4373         return error_mark_node;
4374
4375       expr = perform_qualification_conversions (type, expr);
4376       if (expr == error_mark_node)
4377         return error_mark_node;
4378     }
4379   /* [temp.arg.nontype]/5, bullet 3
4380
4381      For a non-type template-parameter of type reference to object, no
4382      conversions apply. The type referred to by the reference may be more
4383      cv-qualified than the (otherwise identical) type of the
4384      template-argument. The template-parameter is bound directly to the
4385      template-argument, which must be an lvalue.  */
4386   else if (TYPE_REF_OBJ_P (type))
4387     {
4388       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4389                                                       expr_type))
4390         return error_mark_node;
4391
4392       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4393         {
4394           error ("%qE is not a valid template argument for type %qT "
4395                  "because of conflicts in cv-qualification", expr, type);
4396           return NULL_TREE;
4397         }
4398
4399       if (!real_lvalue_p (expr))
4400         {
4401           error ("%qE is not a valid template argument for type %qT "
4402                  "because it is not an lvalue", expr, type);
4403           return NULL_TREE;
4404         }
4405
4406       /* [temp.arg.nontype]/1
4407
4408          A template-argument for a non-type, non-template template-parameter
4409          shall be one of: [...]
4410
4411          -- the address of an object or function with external linkage.  */
4412       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4413         {
4414           error ("%qE is not a valid template argument for type %qT "
4415                  "because object %qD has not external linkage",
4416                  expr, type, expr);
4417           return NULL_TREE;
4418         }
4419
4420       expr = build_nop (type, build_address (expr));
4421     }
4422   /* [temp.arg.nontype]/5, bullet 4
4423
4424      For a non-type template-parameter of type pointer to function, only
4425      the function-to-pointer conversion (_conv.func_) is applied. If the
4426      template-argument represents a set of overloaded functions (or a
4427      pointer to such), the matching function is selected from the set
4428      (_over.over_).  */
4429   else if (TYPE_PTRFN_P (type))
4430     {
4431       /* If the argument is a template-id, we might not have enough
4432          context information to decay the pointer.  */
4433       if (!type_unknown_p (expr_type))
4434         {
4435           expr = decay_conversion (expr);
4436           if (expr == error_mark_node)
4437             return error_mark_node;
4438         }
4439
4440       expr = convert_nontype_argument_function (type, expr);
4441       if (!expr || expr == error_mark_node)
4442         return expr;
4443     }
4444   /* [temp.arg.nontype]/5, bullet 5
4445
4446      For a non-type template-parameter of type reference to function, no
4447      conversions apply. If the template-argument represents a set of
4448      overloaded functions, the matching function is selected from the set
4449      (_over.over_).  */
4450   else if (TYPE_REFFN_P (type))
4451     {
4452       if (TREE_CODE (expr) == ADDR_EXPR)
4453         {
4454           error ("%qE is not a valid template argument for type %qT "
4455                  "because it is a pointer", expr, type);
4456           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4457           return NULL_TREE;
4458         }
4459
4460       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4461       if (!expr || expr == error_mark_node)
4462         return expr;
4463
4464       expr = build_nop (type, build_address (expr));
4465     }
4466   /* [temp.arg.nontype]/5, bullet 6
4467
4468      For a non-type template-parameter of type pointer to member function,
4469      no conversions apply. If the template-argument represents a set of
4470      overloaded member functions, the matching member function is selected
4471      from the set (_over.over_).  */
4472   else if (TYPE_PTRMEMFUNC_P (type))
4473     {
4474       expr = instantiate_type (type, expr, tf_none);
4475       if (expr == error_mark_node)
4476         return error_mark_node;
4477
4478       /* There is no way to disable standard conversions in
4479          resolve_address_of_overloaded_function (called by
4480          instantiate_type). It is possible that the call succeeded by
4481          converting &B::I to &D::I (where B is a base of D), so we need
4482          to reject this conversion here.
4483
4484          Actually, even if there was a way to disable standard conversions,
4485          it would still be better to reject them here so that we can
4486          provide a superior diagnostic.  */
4487       if (!same_type_p (TREE_TYPE (expr), type))
4488         {
4489           /* Make sure we are just one standard conversion off.  */
4490           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4491           error ("%qE is not a valid template argument for type %qT "
4492                  "because it is of type %qT", expr, type,
4493                  TREE_TYPE (expr));
4494           inform ("standard conversions are not allowed in this context");
4495           return NULL_TREE;
4496         }
4497     }
4498   /* [temp.arg.nontype]/5, bullet 7
4499
4500      For a non-type template-parameter of type pointer to data member,
4501      qualification conversions (_conv.qual_) are applied.  */
4502   else if (TYPE_PTRMEM_P (type))
4503     {
4504       expr = perform_qualification_conversions (type, expr);
4505       if (expr == error_mark_node)
4506         return expr;
4507     }
4508   /* A template non-type parameter must be one of the above.  */
4509   else
4510     gcc_unreachable ();
4511
4512   /* Sanity check: did we actually convert the argument to the
4513      right type?  */
4514   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4515   return expr;
4516 }
4517
4518
4519 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4520    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4521    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4522    or PARM_DECL.
4523
4524    Consider the example:
4525      template <class T> class A;
4526      template<template <class U> class TT> class B;
4527
4528    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4529    the parameters to A, and OUTER_ARGS contains A.  */
4530
4531 static int
4532 coerce_template_template_parms (tree parm_parms,
4533                                 tree arg_parms,
4534                                 tsubst_flags_t complain,
4535                                 tree in_decl,
4536                                 tree outer_args)
4537 {
4538   int nparms, nargs, i;
4539   tree parm, arg;
4540
4541   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4542   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4543
4544   nparms = TREE_VEC_LENGTH (parm_parms);
4545   nargs = TREE_VEC_LENGTH (arg_parms);
4546
4547   if (nargs != nparms)
4548     return 0;
4549
4550   for (i = 0; i < nparms; ++i)
4551     {
4552       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4553           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4554         continue;
4555
4556       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4557       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4558
4559       if (arg == NULL_TREE || arg == error_mark_node
4560           || parm == NULL_TREE || parm == error_mark_node)
4561         return 0;
4562
4563       if (TREE_CODE (arg) != TREE_CODE (parm))
4564         return 0;
4565
4566       switch (TREE_CODE (parm))
4567         {
4568         case TEMPLATE_DECL:
4569           /* We encounter instantiations of templates like
4570                template <template <template <class> class> class TT>
4571                class C;  */
4572           {
4573             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4574             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4575
4576             if (!coerce_template_template_parms
4577                 (parmparm, argparm, complain, in_decl, outer_args))
4578               return 0;
4579           }
4580           /* Fall through.  */
4581
4582         case TYPE_DECL:
4583           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4584               != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4585             /* One is a parameter pack, the other is not.  */
4586             return 0;
4587           break;
4588
4589         case PARM_DECL:
4590           /* The tsubst call is used to handle cases such as
4591
4592                template <int> class C {};
4593                template <class T, template <T> class TT> class D {};
4594                D<int, C> d;
4595
4596              i.e. the parameter list of TT depends on earlier parameters.  */
4597           if (!dependent_type_p (TREE_TYPE (arg))
4598               && !same_type_p
4599                     (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4600                              TREE_TYPE (arg)))
4601             return 0;
4602
4603           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4604               != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4605             /* One is a parameter pack, the other is not.  */
4606             return 0;
4607           break;
4608
4609         default:
4610           gcc_unreachable ();
4611         }
4612     }
4613   return 1;
4614 }
4615
4616 /* Convert the indicated template ARG as necessary to match the
4617    indicated template PARM.  Returns the converted ARG, or
4618    error_mark_node if the conversion was unsuccessful.  Error and
4619    warning messages are issued under control of COMPLAIN.  This
4620    conversion is for the Ith parameter in the parameter list.  ARGS is
4621    the full set of template arguments deduced so far.  */
4622
4623 static tree
4624 convert_template_argument (tree parm,
4625                            tree arg,
4626                            tree args,
4627                            tsubst_flags_t complain,
4628                            int i,
4629                            tree in_decl)
4630 {
4631   tree val;
4632   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4633   tree check_arg = arg;
4634
4635   if (TREE_CODE (arg) == TREE_LIST
4636       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4637     {
4638       /* The template argument was the name of some
4639          member function.  That's usually
4640          invalid, but static members are OK.  In any
4641          case, grab the underlying fields/functions
4642          and issue an error later if required.  */
4643       arg = TREE_VALUE (arg);
4644       TREE_TYPE (arg) = unknown_type_node;
4645     }
4646
4647   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4648   requires_type = (TREE_CODE (parm) == TYPE_DECL
4649                    || requires_tmpl_type);
4650
4651   /* When determining whether a argument pack expansion is a template,
4652      look at the pattern.  */
4653   if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4654     check_arg = PACK_EXPANSION_PATTERN (check_arg);
4655
4656   is_tmpl_type = 
4657     ((TREE_CODE (check_arg) == TEMPLATE_DECL
4658       && TREE_CODE (DECL_TEMPLATE_RESULT (check_arg)) == TYPE_DECL)
4659      || TREE_CODE (check_arg) == TEMPLATE_TEMPLATE_PARM
4660      || TREE_CODE (check_arg) == UNBOUND_CLASS_TEMPLATE);
4661
4662   if (is_tmpl_type
4663       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4664           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4665     arg = TYPE_STUB_DECL (arg);
4666
4667   is_type = TYPE_P (arg) || is_tmpl_type;
4668
4669   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4670       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4671     {
4672       pedwarn ("to refer to a type member of a template parameter, "
4673                "use %<typename %E%>", arg);
4674
4675       arg = make_typename_type (TREE_OPERAND (arg, 0),
4676                                 TREE_OPERAND (arg, 1),
4677                                 typename_type,
4678                                 complain & tf_error);
4679       is_type = 1;
4680     }
4681   if (is_type != requires_type)
4682     {
4683       if (in_decl)
4684         {
4685           if (complain & tf_error)
4686             {
4687               error ("type/value mismatch at argument %d in template "
4688                      "parameter list for %qD",
4689                      i + 1, in_decl);
4690               if (is_type)
4691                 error ("  expected a constant of type %qT, got %qT",
4692                        TREE_TYPE (parm),
4693                        (is_tmpl_type ? DECL_NAME (arg) : arg));
4694               else if (requires_tmpl_type)
4695                 error ("  expected a class template, got %qE", arg);
4696               else
4697                 error ("  expected a type, got %qE", arg);
4698             }
4699         }
4700       return error_mark_node;
4701     }
4702   if (is_tmpl_type ^ requires_tmpl_type)
4703     {
4704       if (in_decl && (complain & tf_error))
4705         {
4706           error ("type/value mismatch at argument %d in template "
4707                  "parameter list for %qD",
4708                  i + 1, in_decl);
4709           if (is_tmpl_type)
4710             error ("  expected a type, got %qT", DECL_NAME (arg));
4711           else
4712             error ("  expected a class template, got %qT", arg);
4713         }
4714       return error_mark_node;
4715     }
4716
4717   if (is_type)
4718     {
4719       if (requires_tmpl_type)
4720         {
4721           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4722             /* The number of argument required is not known yet.
4723                Just accept it for now.  */
4724             val = TREE_TYPE (arg);
4725           else
4726             {
4727               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4728               tree argparm;
4729
4730               check_arg = arg;
4731               /* When determining whether a pack expansion is a template,
4732                  look at the pattern.  */
4733               if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4734                 check_arg = PACK_EXPANSION_PATTERN (check_arg);
4735
4736               argparm = DECL_INNERMOST_TEMPLATE_PARMS (check_arg);
4737
4738               if (coerce_template_template_parms (parmparm, argparm,
4739                                                   complain, in_decl,
4740                                                   args))
4741                 {
4742                   val = arg;
4743
4744                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
4745                      TEMPLATE_DECL.  */
4746                   if (val != error_mark_node)
4747                     {
4748                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4749                         val = TREE_TYPE (val);
4750                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4751                                && DECL_TEMPLATE_TEMPLATE_PARM_P (check_arg))
4752                         {
4753                           val = TREE_TYPE (check_arg);
4754                           val = make_pack_expansion (val);
4755                         }
4756                     }
4757                 }
4758               else
4759                 {
4760                   if (in_decl && (complain & tf_error))
4761                     {
4762                       error ("type/value mismatch at argument %d in "
4763                              "template parameter list for %qD",
4764                              i + 1, in_decl);
4765                       error ("  expected a template of type %qD, got %qD",
4766                              parm, arg);
4767                     }
4768
4769                   val = error_mark_node;
4770                 }
4771             }
4772         }
4773       else
4774         val = arg;
4775       /* We only form one instance of each template specialization.
4776          Therefore, if we use a non-canonical variant (i.e., a
4777          typedef), any future messages referring to the type will use
4778          the typedef, which is confusing if those future uses do not
4779          themselves also use the typedef.  */
4780       if (TYPE_P (val))
4781         val = canonical_type_variant (val);
4782     }
4783   else
4784     {
4785       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
4786
4787       if (invalid_nontype_parm_type_p (t, complain))
4788         return error_mark_node;
4789
4790       if (!uses_template_parms (arg) && !uses_template_parms (t))
4791         /* We used to call digest_init here.  However, digest_init
4792            will report errors, which we don't want when complain
4793            is zero.  More importantly, digest_init will try too
4794            hard to convert things: for example, `0' should not be
4795            converted to pointer type at this point according to
4796            the standard.  Accepting this is not merely an
4797            extension, since deciding whether or not these
4798            conversions can occur is part of determining which
4799            function template to call, or whether a given explicit
4800            argument specification is valid.  */
4801         val = convert_nontype_argument (t, arg);
4802       else
4803         val = arg;
4804
4805       if (val == NULL_TREE)
4806         val = error_mark_node;
4807       else if (val == error_mark_node && (complain & tf_error))
4808         error ("could not convert template argument %qE to %qT",  arg, t);
4809     }
4810
4811   return val;
4812 }
4813
4814 /* Coerces the remaining template arguments in INNER_ARGS (from
4815    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
4816    Returns the coerced argument pack. PARM_IDX is the position of this
4817    parameter in the template parameter list. ARGS is the original
4818    template argument list.  */
4819 static tree
4820 coerce_template_parameter_pack (tree parms,
4821                                 int parm_idx,
4822                                 tree args,
4823                                 tree inner_args,
4824                                 int arg_idx,
4825                                 tree new_args,
4826                                 int* lost,
4827                                 tree in_decl,
4828                                 tsubst_flags_t complain)
4829 {
4830   tree parm = TREE_VEC_ELT (parms, parm_idx);
4831   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4832   tree packed_args;
4833   tree argument_pack;
4834   tree packed_types = NULL_TREE;
4835
4836   if (arg_idx > nargs)
4837     arg_idx = nargs;
4838
4839   packed_args = make_tree_vec (nargs - arg_idx);
4840
4841   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
4842       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
4843     {
4844       /* When the template parameter is a non-type template
4845          parameter pack whose type uses parameter packs, we need
4846          to look at each of the template arguments
4847          separately. Build a vector of the types for these
4848          non-type template parameters in PACKED_TYPES.  */
4849       tree expansion 
4850         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
4851       packed_types = tsubst_pack_expansion (expansion, args,
4852                                             complain, in_decl);
4853
4854       if (packed_types == error_mark_node)
4855         return error_mark_node;
4856
4857       /* Check that we have the right number of arguments.  */
4858       if (arg_idx < nargs
4859           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
4860           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
4861         {
4862           int needed_parms 
4863             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
4864           error ("wrong number of template arguments (%d, should be %d)",
4865                  nargs, needed_parms);
4866           return error_mark_node;
4867         }
4868
4869       /* If we aren't able to check the actual arguments now
4870          (because they haven't been expanded yet), we can at least
4871          verify that all of the types used for the non-type
4872          template parameter pack are, in fact, valid for non-type
4873          template parameters.  */
4874       if (arg_idx < nargs 
4875           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
4876         {
4877           int j, len = TREE_VEC_LENGTH (packed_types);
4878           for (j = 0; j < len; ++j)
4879             {
4880               tree t = TREE_VEC_ELT (packed_types, j);
4881               if (invalid_nontype_parm_type_p (t, complain))
4882                 return error_mark_node;
4883             }
4884         }
4885     }
4886
4887   /* Convert the remaining arguments, which will be a part of the
4888      parameter pack "parm".  */
4889   for (; arg_idx < nargs; ++arg_idx)
4890     {
4891       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
4892       tree actual_parm = TREE_VALUE (parm);
4893
4894       if (packed_types && !PACK_EXPANSION_P (arg))
4895         {
4896           /* When we have a vector of types (corresponding to the
4897              non-type template parameter pack that uses parameter
4898              packs in its type, as mention above), and the
4899              argument is not an expansion (which expands to a
4900              currently unknown number of arguments), clone the
4901              parm and give it the next type in PACKED_TYPES.  */
4902           actual_parm = copy_node (actual_parm);
4903           TREE_TYPE (actual_parm) = 
4904             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
4905         }
4906
4907       arg = convert_template_argument (actual_parm, 
4908                                        arg, new_args, complain, parm_idx,
4909                                        in_decl);
4910       if (arg == error_mark_node)
4911         (*lost)++;
4912       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
4913     }
4914
4915   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
4916       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
4917     argument_pack = make_node (TYPE_ARGUMENT_PACK);
4918   else
4919     {
4920       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
4921       TREE_TYPE (argument_pack) = TREE_TYPE (TREE_VALUE (parm));
4922       TREE_CONSTANT (argument_pack) = 1;
4923     }
4924
4925   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
4926   return argument_pack;
4927 }
4928
4929 /* Convert all template arguments to their appropriate types, and
4930    return a vector containing the innermost resulting template
4931    arguments.  If any error occurs, return error_mark_node. Error and
4932    warning messages are issued under control of COMPLAIN.
4933
4934    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
4935    for arguments not specified in ARGS.  Otherwise, if
4936    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
4937    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
4938    USE_DEFAULT_ARGS is false, then all arguments must be specified in
4939    ARGS.  */
4940
4941 static tree
4942 coerce_template_parms (tree parms,
4943                        tree args,
4944                        tree in_decl,
4945                        tsubst_flags_t complain,
4946                        bool require_all_args,
4947                        bool use_default_args)
4948 {
4949   int nparms, nargs, parm_idx, arg_idx, lost = 0;
4950   tree inner_args;
4951   tree new_args;
4952   tree new_inner_args;
4953   bool saved_skip_evaluation;
4954
4955   /* When used as a boolean value, indicates whether this is a
4956      variadic template parameter list. Since it's an int, we can also
4957      subtract it from nparms to get the number of non-variadic
4958      parameters.  */
4959   int variadic_p = 0;
4960
4961   inner_args 
4962     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
4963
4964   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4965   nparms = TREE_VEC_LENGTH (parms);
4966
4967   /* Determine if there are any parameter packs.  */
4968   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
4969     {
4970       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
4971       if (template_parameter_pack_p (tparm))
4972         {
4973           variadic_p = 1;
4974           break;
4975         }
4976     }
4977
4978   if ((nargs > nparms - variadic_p && !variadic_p)
4979       || (nargs < nparms - variadic_p
4980           && require_all_args
4981           && (!use_default_args
4982               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
4983                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
4984     {
4985       if (complain & tf_error)
4986         {
4987           const char *or_more = "";
4988           if (variadic_p)
4989             {
4990               or_more = " or more";
4991               --nparms;
4992             }
4993
4994           error ("wrong number of template arguments (%d, should be %d%s)",
4995                  nargs, nparms, or_more);
4996
4997           if (in_decl)
4998             error ("provided for %q+D", in_decl);
4999         }
5000
5001       return error_mark_node;
5002     }
5003
5004   /* We need to evaluate the template arguments, even though this
5005      template-id may be nested within a "sizeof".  */
5006   saved_skip_evaluation = skip_evaluation;
5007   skip_evaluation = false;
5008   new_inner_args = make_tree_vec (nparms);
5009   new_args = add_outermost_template_args (args, new_inner_args);
5010   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5011     {
5012       tree arg;
5013       tree parm;
5014
5015       /* Get the Ith template parameter.  */
5016       parm = TREE_VEC_ELT (parms, parm_idx);
5017  
5018       if (parm == error_mark_node)
5019       {
5020         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5021         continue;
5022       }
5023
5024       /* Calculate the next argument.  */
5025       if (template_parameter_pack_p (TREE_VALUE (parm)))
5026         {
5027           /* All remaining arguments will be placed in the
5028              template parameter pack PARM.  */
5029           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5030                                                 inner_args, arg_idx,
5031                                                 new_args, &lost,
5032                                                 in_decl, complain);
5033           
5034           /* Store this argument.  */
5035           if (arg == error_mark_node)
5036             lost++;
5037           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5038
5039           /* We are done with all of the arguments.  */
5040           arg_idx = nargs;
5041
5042           continue;
5043         }
5044       else if (arg_idx < nargs)
5045         {
5046           arg = TREE_VEC_ELT (inner_args, arg_idx);
5047
5048           if (arg && PACK_EXPANSION_P (arg))
5049             {
5050               /* If ARG is a pack expansion, but PARM is not a
5051                  template parameter pack (if it were, we would have
5052                  handled it above), we're trying to expand into a
5053                  fixed-length argument list.  */
5054               if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5055                 error ("cannot expand %<%E%> into a fixed-length "
5056                        "argument list", arg);
5057               else
5058                 error ("cannot expand %<%T%> into a fixed-length "
5059                        "argument list", arg);
5060             }
5061         }
5062       else if (require_all_args)
5063         /* There must be a default arg in this case.  */
5064         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5065                                    complain, in_decl);
5066       else
5067         break;
5068
5069       if (arg == error_mark_node)
5070         {
5071           if (complain & tf_error)
5072             error ("template argument %d is invalid", arg_idx + 1);
5073         }
5074       else if (!arg)
5075         /* This only occurs if there was an error in the template
5076            parameter list itself (which we would already have
5077            reported) that we are trying to recover from, e.g., a class
5078            template with a parameter list such as
5079            template<typename..., typename>.  */
5080         return error_mark_node;
5081       else
5082         arg = convert_template_argument (TREE_VALUE (parm),
5083                                          arg, new_args, complain, 
5084                                          parm_idx, in_decl);
5085
5086       if (arg == error_mark_node)
5087         lost++;
5088       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5089     }
5090   skip_evaluation = saved_skip_evaluation;
5091
5092   if (lost)
5093     return error_mark_node;
5094
5095   return new_inner_args;
5096 }
5097
5098 /* Returns 1 if template args OT and NT are equivalent.  */
5099
5100 static int
5101 template_args_equal (tree ot, tree nt)
5102 {
5103   if (nt == ot)
5104     return 1;
5105
5106   if (TREE_CODE (nt) == TREE_VEC)
5107     /* For member templates */
5108     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5109   else if (PACK_EXPANSION_P (ot))
5110     return PACK_EXPANSION_P (nt) 
5111       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5112                               PACK_EXPANSION_PATTERN (nt));
5113   else if (TYPE_P (nt))
5114     return TYPE_P (ot) && same_type_p (ot, nt);
5115   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5116     return 0;
5117   else
5118     return cp_tree_equal (ot, nt);
5119 }
5120
5121 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5122    of template arguments.  Returns 0 otherwise.  */
5123
5124 int
5125 comp_template_args (tree oldargs, tree newargs)
5126 {
5127   int i;
5128
5129   oldargs = expand_template_argument_pack (oldargs);
5130   newargs = expand_template_argument_pack (newargs);
5131
5132   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5133     return 0;
5134
5135   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5136     {
5137       tree nt = TREE_VEC_ELT (newargs, i);
5138       tree ot = TREE_VEC_ELT (oldargs, i);
5139
5140       if (! template_args_equal (ot, nt))
5141         return 0;
5142     }
5143   return 1;
5144 }
5145
5146 static void
5147 add_pending_template (tree d)
5148 {
5149   tree ti = (TYPE_P (d)
5150              ? CLASSTYPE_TEMPLATE_INFO (d)
5151              : DECL_TEMPLATE_INFO (d));
5152   tree pt;
5153   int level;
5154
5155   if (TI_PENDING_TEMPLATE_FLAG (ti))
5156     return;
5157
5158   /* We are called both from instantiate_decl, where we've already had a
5159      tinst_level pushed, and instantiate_template, where we haven't.
5160      Compensate.  */
5161   level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
5162
5163   if (level)
5164     push_tinst_level (d);
5165
5166   pt = tree_cons (current_tinst_level, d, NULL_TREE);
5167   if (last_pending_template)
5168     TREE_CHAIN (last_pending_template) = pt;
5169   else
5170     pending_templates = pt;
5171
5172   last_pending_template = pt;
5173
5174   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5175
5176   if (level)
5177     pop_tinst_level ();
5178 }
5179
5180
5181 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5182    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5183    documentation for TEMPLATE_ID_EXPR.  */
5184
5185 tree
5186 lookup_template_function (tree fns, tree arglist)
5187 {
5188   tree type;
5189
5190   if (fns == error_mark_node || arglist == error_mark_node)
5191     return error_mark_node;
5192
5193   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5194   gcc_assert (fns && (is_overloaded_fn (fns)
5195                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5196
5197   if (BASELINK_P (fns))
5198     {
5199       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5200                                          unknown_type_node,
5201                                          BASELINK_FUNCTIONS (fns),
5202                                          arglist);
5203       return fns;
5204     }
5205
5206   type = TREE_TYPE (fns);
5207   if (TREE_CODE (fns) == OVERLOAD || !type)
5208     type = unknown_type_node;
5209
5210   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5211 }
5212
5213 /* Within the scope of a template class S<T>, the name S gets bound
5214    (in build_self_reference) to a TYPE_DECL for the class, not a
5215    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5216    or one of its enclosing classes, and that type is a template,
5217    return the associated TEMPLATE_DECL.  Otherwise, the original
5218    DECL is returned.  */
5219
5220 tree
5221 maybe_get_template_decl_from_type_decl (tree decl)
5222 {
5223   return (decl != NULL_TREE
5224           && TREE_CODE (decl) == TYPE_DECL
5225           && DECL_ARTIFICIAL (decl)
5226           && CLASS_TYPE_P (TREE_TYPE (decl))
5227           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5228     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5229 }
5230
5231 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5232    parameters, find the desired type.
5233
5234    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5235
5236    IN_DECL, if non-NULL, is the template declaration we are trying to
5237    instantiate.
5238
5239    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5240    the class we are looking up.
5241
5242    Issue error and warning messages under control of COMPLAIN.
5243
5244    If the template class is really a local class in a template
5245    function, then the FUNCTION_CONTEXT is the function in which it is
5246    being instantiated.
5247
5248    ??? Note that this function is currently called *twice* for each
5249    template-id: the first time from the parser, while creating the
5250    incomplete type (finish_template_type), and the second type during the
5251    real instantiation (instantiate_template_class). This is surely something
5252    that we want to avoid. It also causes some problems with argument
5253    coercion (see convert_nontype_argument for more information on this).  */
5254
5255 tree
5256 lookup_template_class (tree d1,
5257                        tree arglist,
5258                        tree in_decl,
5259                        tree context,
5260                        int entering_scope,
5261                        tsubst_flags_t complain)
5262 {
5263   tree template = NULL_TREE, parmlist;
5264   tree t;
5265
5266   timevar_push (TV_NAME_LOOKUP);
5267
5268   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5269     {
5270       tree value = innermost_non_namespace_value (d1);
5271       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5272         template = value;
5273       else
5274         {
5275           if (context)
5276             push_decl_namespace (context);
5277           template = lookup_name (d1);
5278           template = maybe_get_template_decl_from_type_decl (template);
5279           if (context)
5280             pop_decl_namespace ();
5281         }
5282       if (template)
5283         context = DECL_CONTEXT (template);
5284     }
5285   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5286     {
5287       tree type = TREE_TYPE (d1);
5288
5289       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5290          an implicit typename for the second A.  Deal with it.  */
5291       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5292         type = TREE_TYPE (type);
5293
5294       if (CLASSTYPE_TEMPLATE_INFO (type))
5295         {
5296           template = CLASSTYPE_TI_TEMPLATE (type);
5297           d1 = DECL_NAME (template);
5298         }
5299     }
5300   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5301            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5302     {
5303       template = TYPE_TI_TEMPLATE (d1);
5304       d1 = DECL_NAME (template);
5305     }
5306   else if (TREE_CODE (d1) == TEMPLATE_DECL
5307            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5308     {
5309       template = d1;
5310       d1 = DECL_NAME (template);
5311       context = DECL_CONTEXT (template);
5312     }
5313
5314   /* Issue an error message if we didn't find a template.  */
5315   if (! template)
5316     {
5317       if (complain & tf_error)
5318         error ("%qT is not a template", d1);
5319       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5320     }
5321
5322   if (TREE_CODE (template) != TEMPLATE_DECL
5323          /* Make sure it's a user visible template, if it was named by
5324             the user.  */
5325       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5326           && !PRIMARY_TEMPLATE_P (template)))
5327     {
5328       if (complain & tf_error)
5329         {
5330           error ("non-template type %qT used as a template", d1);
5331           if (in_decl)
5332             error ("for template declaration %q+D", in_decl);
5333         }
5334       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5335     }
5336
5337   complain &= ~tf_user;
5338
5339   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5340     {
5341       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5342          template arguments */
5343
5344       tree parm;
5345       tree arglist2;
5346
5347       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5348
5349       /* Consider an example where a template template parameter declared as
5350
5351            template <class T, class U = std::allocator<T> > class TT
5352
5353          The template parameter level of T and U are one level larger than
5354          of TT.  To proper process the default argument of U, say when an
5355          instantiation `TT<int>' is seen, we need to build the full
5356          arguments containing {int} as the innermost level.  Outer levels,
5357          available when not appearing as default template argument, can be
5358          obtained from `current_template_args ()'.
5359
5360          Suppose that TT is later substituted with std::vector.  The above
5361          instantiation is `TT<int, std::allocator<T> >' with TT at
5362          level 1, and T at level 2, while the template arguments at level 1
5363          becomes {std::vector} and the inner level 2 is {int}.  */
5364
5365       if (current_template_parms)
5366         arglist = add_to_template_args (current_template_args (), arglist);
5367
5368       arglist2 = coerce_template_parms (parmlist, arglist, template,
5369                                         complain,
5370                                         /*require_all_args=*/true,
5371                                         /*use_default_args=*/true);
5372       if (arglist2 == error_mark_node
5373           || (!uses_template_parms (arglist2)
5374               && check_instantiated_args (template, arglist2, complain)))
5375         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5376
5377       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5378       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5379     }
5380   else
5381     {
5382       tree template_type = TREE_TYPE (template);
5383       tree gen_tmpl;
5384       tree type_decl;
5385       tree found = NULL_TREE;
5386       int arg_depth;
5387       int parm_depth;
5388       int is_partial_instantiation;
5389
5390       gen_tmpl = most_general_template (template);
5391       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5392       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5393       arg_depth = TMPL_ARGS_DEPTH (arglist);
5394
5395       if (arg_depth == 1 && parm_depth > 1)
5396         {
5397           /* We've been given an incomplete set of template arguments.
5398              For example, given:
5399
5400                template <class T> struct S1 {
5401                  template <class U> struct S2 {};
5402                  template <class U> struct S2<U*> {};
5403                 };
5404
5405              we will be called with an ARGLIST of `U*', but the
5406              TEMPLATE will be `template <class T> template
5407              <class U> struct S1<T>::S2'.  We must fill in the missing
5408              arguments.  */
5409           arglist
5410             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5411                                            arglist);
5412           arg_depth = TMPL_ARGS_DEPTH (arglist);
5413         }
5414
5415       /* Now we should have enough arguments.  */
5416       gcc_assert (parm_depth == arg_depth);
5417
5418       /* From here on, we're only interested in the most general
5419          template.  */
5420       template = gen_tmpl;
5421
5422       /* Calculate the BOUND_ARGS.  These will be the args that are
5423          actually tsubst'd into the definition to create the
5424          instantiation.  */
5425       if (parm_depth > 1)
5426         {
5427           /* We have multiple levels of arguments to coerce, at once.  */
5428           int i;
5429           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5430
5431           tree bound_args = make_tree_vec (parm_depth);
5432
5433           for (i = saved_depth,
5434                  t = DECL_TEMPLATE_PARMS (template);
5435                i > 0 && t != NULL_TREE;
5436                --i, t = TREE_CHAIN (t))
5437             {
5438               tree a = coerce_template_parms (TREE_VALUE (t),
5439                                               arglist, template,
5440                                               complain,
5441                                               /*require_all_args=*/true,
5442                                               /*use_default_args=*/true);
5443
5444               /* Don't process further if one of the levels fails.  */
5445               if (a == error_mark_node)
5446                 {
5447                   /* Restore the ARGLIST to its full size.  */
5448                   TREE_VEC_LENGTH (arglist) = saved_depth;
5449                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5450                 }
5451
5452               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5453
5454               /* We temporarily reduce the length of the ARGLIST so
5455                  that coerce_template_parms will see only the arguments
5456                  corresponding to the template parameters it is
5457                  examining.  */
5458               TREE_VEC_LENGTH (arglist)--;
5459             }
5460
5461           /* Restore the ARGLIST to its full size.  */
5462           TREE_VEC_LENGTH (arglist) = saved_depth;
5463
5464           arglist = bound_args;
5465         }
5466       else
5467         arglist
5468           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5469                                    INNERMOST_TEMPLATE_ARGS (arglist),
5470                                    template,
5471                                    complain,
5472                                    /*require_all_args=*/true,
5473                                    /*use_default_args=*/true);
5474
5475       if (arglist == error_mark_node)
5476         /* We were unable to bind the arguments.  */
5477         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5478
5479       /* In the scope of a template class, explicit references to the
5480          template class refer to the type of the template, not any
5481          instantiation of it.  For example, in:
5482
5483            template <class T> class C { void f(C<T>); }
5484
5485          the `C<T>' is just the same as `C'.  Outside of the
5486          class, however, such a reference is an instantiation.  */
5487       if (comp_template_args (TYPE_TI_ARGS (template_type),
5488                               arglist))
5489         {
5490           found = template_type;
5491
5492           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5493             {
5494               tree ctx;
5495
5496               for (ctx = current_class_type;
5497                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5498                    ctx = (TYPE_P (ctx)
5499                           ? TYPE_CONTEXT (ctx)
5500                           : DECL_CONTEXT (ctx)))
5501                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5502                   goto found_ctx;
5503
5504               /* We're not in the scope of the class, so the
5505                  TEMPLATE_TYPE is not the type we want after all.  */
5506               found = NULL_TREE;
5507             found_ctx:;
5508             }
5509         }
5510       if (found)
5511         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5512
5513       /* If we already have this specialization, return it.  */
5514       found = retrieve_specialization (template, arglist,
5515                                        /*class_specializations_p=*/false);
5516       if (found)
5517         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5518
5519       /* This type is a "partial instantiation" if any of the template
5520          arguments still involve template parameters.  Note that we set
5521          IS_PARTIAL_INSTANTIATION for partial specializations as
5522          well.  */
5523       is_partial_instantiation = uses_template_parms (arglist);
5524
5525       /* If the deduced arguments are invalid, then the binding
5526          failed.  */
5527       if (!is_partial_instantiation
5528           && check_instantiated_args (template,
5529                                       INNERMOST_TEMPLATE_ARGS (arglist),
5530                                       complain))
5531         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5532
5533       if (!is_partial_instantiation
5534           && !PRIMARY_TEMPLATE_P (template)
5535           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5536         {
5537           found = xref_tag_from_type (TREE_TYPE (template),
5538                                       DECL_NAME (template),
5539                                       /*tag_scope=*/ts_global);
5540           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5541         }
5542
5543       context = tsubst (DECL_CONTEXT (template), arglist,
5544                         complain, in_decl);
5545       if (!context)
5546         context = global_namespace;
5547
5548       /* Create the type.  */
5549       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5550         {
5551           if (!is_partial_instantiation)
5552             {
5553               set_current_access_from_decl (TYPE_NAME (template_type));
5554               t = start_enum (TYPE_IDENTIFIER (template_type));
5555             }
5556           else
5557             /* We don't want to call start_enum for this type, since
5558                the values for the enumeration constants may involve
5559                template parameters.  And, no one should be interested
5560                in the enumeration constants for such a type.  */
5561             t = make_node (ENUMERAL_TYPE);
5562         }
5563       else
5564         {
5565           t = make_aggr_type (TREE_CODE (template_type));
5566           CLASSTYPE_DECLARED_CLASS (t)
5567             = CLASSTYPE_DECLARED_CLASS (template_type);
5568           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5569           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5570
5571           /* A local class.  Make sure the decl gets registered properly.  */
5572           if (context == current_function_decl)
5573             pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5574
5575           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5576             /* This instantiation is another name for the primary
5577                template type. Set the TYPE_CANONICAL field
5578                appropriately. */
5579             TYPE_CANONICAL (t) = template_type;
5580           else if (any_template_arguments_need_structural_equality_p (arglist))
5581             /* Some of the template arguments require structural
5582                equality testing, so this template class requires
5583                structural equality testing. */
5584             SET_TYPE_STRUCTURAL_EQUALITY (t);
5585         }
5586
5587       /* If we called start_enum or pushtag above, this information
5588          will already be set up.  */
5589       if (!TYPE_NAME (t))
5590         {
5591           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5592
5593           type_decl = create_implicit_typedef (DECL_NAME (template), t);
5594           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5595           TYPE_STUB_DECL (t) = type_decl;
5596           DECL_SOURCE_LOCATION (type_decl)
5597             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5598         }
5599       else
5600         type_decl = TYPE_NAME (t);
5601
5602       TREE_PRIVATE (type_decl)
5603         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5604       TREE_PROTECTED (type_decl)
5605         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5606       DECL_IN_SYSTEM_HEADER (type_decl)
5607         = DECL_IN_SYSTEM_HEADER (template);
5608       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5609         {
5610           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5611           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5612         }
5613
5614       /* Set up the template information.  We have to figure out which
5615          template is the immediate parent if this is a full
5616          instantiation.  */
5617       if (parm_depth == 1 || is_partial_instantiation
5618           || !PRIMARY_TEMPLATE_P (template))
5619         /* This case is easy; there are no member templates involved.  */
5620         found = template;
5621       else
5622         {
5623           /* This is a full instantiation of a member template.  Look
5624              for a partial instantiation of which this is an instance.  */
5625
5626           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5627                found; found = TREE_CHAIN (found))
5628             {
5629               int success;
5630               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5631
5632               /* We only want partial instantiations, here, not
5633                  specializations or full instantiations.  */
5634               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5635                   || !uses_template_parms (TREE_VALUE (found)))
5636                 continue;
5637
5638               /* Temporarily reduce by one the number of levels in the
5639                  ARGLIST and in FOUND so as to avoid comparing the
5640                  last set of arguments.  */
5641               TREE_VEC_LENGTH (arglist)--;
5642               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5643
5644               /* See if the arguments match.  If they do, then TMPL is
5645                  the partial instantiation we want.  */
5646               success = comp_template_args (TREE_PURPOSE (found), arglist);
5647
5648               /* Restore the argument vectors to their full size.  */
5649               TREE_VEC_LENGTH (arglist)++;
5650               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5651
5652               if (success)
5653                 {
5654                   found = tmpl;
5655                   break;
5656                 }
5657             }
5658
5659           if (!found)
5660             {
5661               /* There was no partial instantiation. This happens
5662                  where C<T> is a member template of A<T> and it's used
5663                  in something like
5664
5665                   template <typename T> struct B { A<T>::C<int> m; };
5666                   B<float>;
5667
5668                  Create the partial instantiation.
5669                */
5670               TREE_VEC_LENGTH (arglist)--;
5671               found = tsubst (template, arglist, complain, NULL_TREE);
5672               TREE_VEC_LENGTH (arglist)++;
5673             }
5674         }
5675
5676       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5677       DECL_TEMPLATE_INSTANTIATIONS (template)
5678         = tree_cons (arglist, t,
5679                      DECL_TEMPLATE_INSTANTIATIONS (template));
5680
5681       if (TREE_CODE (t) == ENUMERAL_TYPE
5682           && !is_partial_instantiation)
5683         /* Now that the type has been registered on the instantiations
5684            list, we set up the enumerators.  Because the enumeration
5685            constants may involve the enumeration type itself, we make
5686            sure to register the type first, and then create the
5687            constants.  That way, doing tsubst_expr for the enumeration
5688            constants won't result in recursive calls here; we'll find
5689            the instantiation and exit above.  */
5690         tsubst_enum (template_type, t, arglist);
5691
5692       if (is_partial_instantiation)
5693         /* If the type makes use of template parameters, the
5694            code that generates debugging information will crash.  */
5695         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5696
5697       /* Possibly limit visibility based on template args.  */
5698       TREE_PUBLIC (type_decl) = 1;
5699       determine_visibility (type_decl);
5700
5701       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5702     }
5703   timevar_pop (TV_NAME_LOOKUP);
5704 }
5705 \f
5706 struct pair_fn_data
5707 {
5708   tree_fn_t fn;
5709   void *data;
5710   struct pointer_set_t *visited;
5711 };
5712
5713 /* Called from for_each_template_parm via walk_tree.  */
5714
5715 static tree
5716 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5717 {
5718   tree t = *tp;
5719   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5720   tree_fn_t fn = pfd->fn;
5721   void *data = pfd->data;
5722
5723   if (TYPE_P (t)
5724       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
5725     return error_mark_node;
5726
5727   switch (TREE_CODE (t))
5728     {
5729     case RECORD_TYPE:
5730       if (TYPE_PTRMEMFUNC_P (t))
5731         break;
5732       /* Fall through.  */
5733
5734     case UNION_TYPE:
5735     case ENUMERAL_TYPE:
5736       if (!TYPE_TEMPLATE_INFO (t))
5737         *walk_subtrees = 0;
5738       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5739                                        fn, data, pfd->visited))
5740         return error_mark_node;
5741       break;
5742
5743     case INTEGER_TYPE:
5744       if (for_each_template_parm (TYPE_MIN_VALUE (t),
5745                                   fn, data, pfd->visited)
5746           || for_each_template_parm (TYPE_MAX_VALUE (t),
5747                                      fn, data, pfd->visited))
5748         return error_mark_node;
5749       break;
5750
5751     case METHOD_TYPE:
5752       /* Since we're not going to walk subtrees, we have to do this
5753          explicitly here.  */
5754       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5755                                   pfd->visited))
5756         return error_mark_node;
5757       /* Fall through.  */
5758
5759     case FUNCTION_TYPE:
5760       /* Check the return type.  */
5761       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5762         return error_mark_node;
5763
5764       /* Check the parameter types.  Since default arguments are not
5765          instantiated until they are needed, the TYPE_ARG_TYPES may
5766          contain expressions that involve template parameters.  But,
5767          no-one should be looking at them yet.  And, once they're
5768          instantiated, they don't contain template parameters, so
5769          there's no point in looking at them then, either.  */
5770       {
5771         tree parm;
5772
5773         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5774           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5775                                       pfd->visited))
5776             return error_mark_node;
5777
5778         /* Since we've already handled the TYPE_ARG_TYPES, we don't
5779            want walk_tree walking into them itself.  */
5780         *walk_subtrees = 0;
5781       }
5782       break;
5783
5784     case TYPEOF_TYPE:
5785       if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
5786                                   pfd->visited))
5787         return error_mark_node;
5788       break;
5789
5790     case FUNCTION_DECL:
5791     case VAR_DECL:
5792       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
5793           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
5794                                      pfd->visited))
5795         return error_mark_node;
5796       /* Fall through.  */
5797
5798     case PARM_DECL:
5799     case CONST_DECL:
5800       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
5801           && for_each_template_parm (DECL_INITIAL (t), fn, data,
5802                                      pfd->visited))
5803         return error_mark_node;
5804       if (DECL_CONTEXT (t)
5805           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
5806                                      pfd->visited))
5807         return error_mark_node;
5808       break;
5809
5810     case BOUND_TEMPLATE_TEMPLATE_PARM:
5811       /* Record template parameters such as `T' inside `TT<T>'.  */
5812       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
5813         return error_mark_node;
5814       /* Fall through.  */
5815
5816     case TEMPLATE_TEMPLATE_PARM:
5817     case TEMPLATE_TYPE_PARM:
5818     case TEMPLATE_PARM_INDEX:
5819       if (fn && (*fn)(t, data))
5820         return error_mark_node;
5821       else if (!fn)
5822         return error_mark_node;
5823       break;
5824
5825     case TEMPLATE_DECL:
5826       /* A template template parameter is encountered.  */
5827       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
5828           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5829         return error_mark_node;
5830
5831       /* Already substituted template template parameter */
5832       *walk_subtrees = 0;
5833       break;
5834
5835     case TYPENAME_TYPE:
5836       if (!fn
5837           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
5838                                      data, pfd->visited))
5839         return error_mark_node;
5840       break;
5841
5842     case CONSTRUCTOR:
5843       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
5844           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
5845                                      (TREE_TYPE (t)), fn, data,
5846                                      pfd->visited))
5847         return error_mark_node;
5848       break;
5849
5850     case INDIRECT_REF:
5851     case COMPONENT_REF:
5852       /* If there's no type, then this thing must be some expression
5853          involving template parameters.  */
5854       if (!fn && !TREE_TYPE (t))
5855         return error_mark_node;
5856       break;
5857
5858     case MODOP_EXPR:
5859     case CAST_EXPR:
5860     case REINTERPRET_CAST_EXPR:
5861     case CONST_CAST_EXPR:
5862     case STATIC_CAST_EXPR:
5863     case DYNAMIC_CAST_EXPR:
5864     case ARROW_EXPR:
5865     case DOTSTAR_EXPR:
5866     case TYPEID_EXPR:
5867     case PSEUDO_DTOR_EXPR:
5868       if (!fn)
5869         return error_mark_node;
5870       break;
5871
5872     default:
5873       break;
5874     }
5875
5876   /* We didn't find any template parameters we liked.  */
5877   return NULL_TREE;
5878 }
5879
5880 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
5881    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
5882    call FN with the parameter and the DATA.
5883    If FN returns nonzero, the iteration is terminated, and
5884    for_each_template_parm returns 1.  Otherwise, the iteration
5885    continues.  If FN never returns a nonzero value, the value
5886    returned by for_each_template_parm is 0.  If FN is NULL, it is
5887    considered to be the function which always returns 1.  */
5888
5889 static int
5890 for_each_template_parm (tree t, tree_fn_t fn, void* data,
5891                         struct pointer_set_t *visited)
5892 {
5893   struct pair_fn_data pfd;
5894   int result;
5895
5896   /* Set up.  */
5897   pfd.fn = fn;
5898   pfd.data = data;
5899
5900   /* Walk the tree.  (Conceptually, we would like to walk without
5901      duplicates, but for_each_template_parm_r recursively calls
5902      for_each_template_parm, so we would need to reorganize a fair
5903      bit to use walk_tree_without_duplicates, so we keep our own
5904      visited list.)  */
5905   if (visited)
5906     pfd.visited = visited;
5907   else
5908     pfd.visited = pointer_set_create ();
5909   result = walk_tree (&t,
5910                       for_each_template_parm_r,
5911                       &pfd,
5912                       pfd.visited) != NULL_TREE;
5913
5914   /* Clean up.  */
5915   if (!visited)
5916     {
5917       pointer_set_destroy (pfd.visited);
5918       pfd.visited = 0;
5919     }
5920
5921   return result;
5922 }
5923
5924 /* Returns true if T depends on any template parameter.  */
5925
5926 int
5927 uses_template_parms (tree t)
5928 {
5929   bool dependent_p;
5930   int saved_processing_template_decl;
5931
5932   saved_processing_template_decl = processing_template_decl;
5933   if (!saved_processing_template_decl)
5934     processing_template_decl = 1;
5935   if (TYPE_P (t))
5936     dependent_p = dependent_type_p (t);
5937   else if (TREE_CODE (t) == TREE_VEC)
5938     dependent_p = any_dependent_template_arguments_p (t);
5939   else if (TREE_CODE (t) == TREE_LIST)
5940     dependent_p = (uses_template_parms (TREE_VALUE (t))
5941                    || uses_template_parms (TREE_CHAIN (t)));
5942   else if (TREE_CODE (t) == TYPE_DECL)
5943     dependent_p = dependent_type_p (TREE_TYPE (t));
5944   else if (DECL_P (t)
5945            || EXPR_P (t)
5946            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5947            || TREE_CODE (t) == OVERLOAD
5948            || TREE_CODE (t) == BASELINK
5949            || TREE_CODE (t) == IDENTIFIER_NODE
5950            || TREE_CODE (t) == TRAIT_EXPR
5951            || CONSTANT_CLASS_P (t))
5952     dependent_p = (type_dependent_expression_p (t)
5953                    || value_dependent_expression_p (t));
5954   else
5955     {
5956       gcc_assert (t == error_mark_node);
5957       dependent_p = false;
5958     }
5959
5960   processing_template_decl = saved_processing_template_decl;
5961
5962   return dependent_p;
5963 }
5964
5965 /* Returns true if T depends on any template parameter with level LEVEL.  */
5966
5967 int
5968 uses_template_parms_level (tree t, int level)
5969 {
5970   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
5971 }
5972
5973 static int tinst_depth;
5974 extern int max_tinst_depth;
5975 #ifdef GATHER_STATISTICS
5976 int depth_reached;
5977 #endif
5978 static int tinst_level_tick;
5979 static int last_template_error_tick;
5980
5981 /* We're starting to instantiate D; record the template instantiation context
5982    for diagnostics and to restore it later.  */
5983
5984 static int
5985 push_tinst_level (tree d)
5986 {
5987   tree new;
5988
5989   if (tinst_depth >= max_tinst_depth)
5990     {
5991       /* If the instantiation in question still has unbound template parms,
5992          we don't really care if we can't instantiate it, so just return.
5993          This happens with base instantiation for implicit `typename'.  */
5994       if (uses_template_parms (d))
5995         return 0;
5996
5997       last_template_error_tick = tinst_level_tick;
5998       error ("template instantiation depth exceeds maximum of %d (use "
5999              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
6000              max_tinst_depth, d);
6001
6002       print_instantiation_context ();
6003
6004       return 0;
6005     }
6006
6007   new = make_node (TINST_LEVEL);
6008   TINST_DECL (new) = d;
6009   TINST_LOCATION (new) = input_location;
6010   TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
6011   TREE_CHAIN (new) = current_tinst_level;
6012   current_tinst_level = new;
6013
6014   ++tinst_depth;
6015 #ifdef GATHER_STATISTICS
6016   if (tinst_depth > depth_reached)
6017     depth_reached = tinst_depth;
6018 #endif
6019
6020   ++tinst_level_tick;
6021   return 1;
6022 }
6023
6024 /* We're done instantiating this template; return to the instantiation
6025    context.  */
6026
6027 static void
6028 pop_tinst_level (void)
6029 {
6030   tree old = current_tinst_level;
6031
6032   /* Restore the filename and line number stashed away when we started
6033      this instantiation.  */
6034   input_location = TINST_LOCATION (old);
6035   in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
6036   current_tinst_level = TREE_CHAIN (old);
6037   --tinst_depth;
6038   ++tinst_level_tick;
6039 }
6040
6041 /* We're instantiating a deferred template; restore the template
6042    instantiation context in which the instantiation was requested, which
6043    is one step out from LEVEL.  */
6044
6045 static void
6046 reopen_tinst_level (tree level)
6047 {
6048   tree t;
6049
6050   tinst_depth = 0;
6051   for (t = level; t; t = TREE_CHAIN (t))
6052     ++tinst_depth;
6053
6054   current_tinst_level = level;
6055   pop_tinst_level ();
6056 }
6057
6058 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6059    vector of template arguments, as for tsubst.
6060
6061    Returns an appropriate tsubst'd friend declaration.  */
6062
6063 static tree
6064 tsubst_friend_function (tree decl, tree args)
6065 {
6066   tree new_friend;
6067
6068   if (TREE_CODE (decl) == FUNCTION_DECL
6069       && DECL_TEMPLATE_INSTANTIATION (decl)
6070       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6071     /* This was a friend declared with an explicit template
6072        argument list, e.g.:
6073
6074        friend void f<>(T);
6075
6076        to indicate that f was a template instantiation, not a new
6077        function declaration.  Now, we have to figure out what
6078        instantiation of what template.  */
6079     {
6080       tree template_id, arglist, fns;
6081       tree new_args;
6082       tree tmpl;
6083       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6084
6085       /* Friend functions are looked up in the containing namespace scope.
6086          We must enter that scope, to avoid finding member functions of the
6087          current cless with same name.  */
6088       push_nested_namespace (ns);
6089       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6090                          tf_warning_or_error, NULL_TREE,
6091                          /*integral_constant_expression_p=*/false);
6092       pop_nested_namespace (ns);
6093       arglist = tsubst (DECL_TI_ARGS (decl), args,
6094                         tf_warning_or_error, NULL_TREE);
6095       template_id = lookup_template_function (fns, arglist);
6096
6097       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6098       tmpl = determine_specialization (template_id, new_friend,
6099                                        &new_args,
6100                                        /*need_member_template=*/0,
6101                                        TREE_VEC_LENGTH (args),
6102                                        tsk_none);
6103       return instantiate_template (tmpl, new_args, tf_error);
6104     }
6105
6106   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6107
6108   /* The NEW_FRIEND will look like an instantiation, to the
6109      compiler, but is not an instantiation from the point of view of
6110      the language.  For example, we might have had:
6111
6112      template <class T> struct S {
6113        template <class U> friend void f(T, U);
6114      };
6115
6116      Then, in S<int>, template <class U> void f(int, U) is not an
6117      instantiation of anything.  */
6118   if (new_friend == error_mark_node)
6119     return error_mark_node;
6120
6121   DECL_USE_TEMPLATE (new_friend) = 0;
6122   if (TREE_CODE (decl) == TEMPLATE_DECL)
6123     {
6124       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6125       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6126         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6127     }
6128
6129   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6130      is not a template instantiation and should not be mangled like
6131      one.  Therefore, we forget the mangling here; we'll recompute it
6132      later if we need it.  */
6133   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6134     {
6135       SET_DECL_RTL (new_friend, NULL_RTX);
6136       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6137     }
6138
6139   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6140     {
6141       tree old_decl;
6142       tree new_friend_template_info;
6143       tree new_friend_result_template_info;
6144       tree ns;
6145       int  new_friend_is_defn;
6146
6147       /* We must save some information from NEW_FRIEND before calling
6148          duplicate decls since that function will free NEW_FRIEND if
6149          possible.  */
6150       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6151       new_friend_is_defn =
6152             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6153                            (template_for_substitution (new_friend)))
6154              != NULL_TREE);
6155       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6156         {
6157           /* This declaration is a `primary' template.  */
6158           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6159
6160           new_friend_result_template_info
6161             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6162         }
6163       else
6164         new_friend_result_template_info = NULL_TREE;
6165
6166       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6167       if (new_friend_is_defn)
6168         DECL_INITIAL (new_friend) = error_mark_node;
6169
6170       /* Inside pushdecl_namespace_level, we will push into the
6171          current namespace. However, the friend function should go
6172          into the namespace of the template.  */
6173       ns = decl_namespace_context (new_friend);
6174       push_nested_namespace (ns);
6175       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6176       pop_nested_namespace (ns);
6177
6178       if (old_decl == error_mark_node)
6179         return error_mark_node;
6180
6181       if (old_decl != new_friend)
6182         {
6183           /* This new friend declaration matched an existing
6184              declaration.  For example, given:
6185
6186                template <class T> void f(T);
6187                template <class U> class C {
6188                  template <class T> friend void f(T) {}
6189                };
6190
6191              the friend declaration actually provides the definition
6192              of `f', once C has been instantiated for some type.  So,
6193              old_decl will be the out-of-class template declaration,
6194              while new_friend is the in-class definition.
6195
6196              But, if `f' was called before this point, the
6197              instantiation of `f' will have DECL_TI_ARGS corresponding
6198              to `T' but not to `U', references to which might appear
6199              in the definition of `f'.  Previously, the most general
6200              template for an instantiation of `f' was the out-of-class
6201              version; now it is the in-class version.  Therefore, we
6202              run through all specialization of `f', adding to their
6203              DECL_TI_ARGS appropriately.  In particular, they need a
6204              new set of outer arguments, corresponding to the
6205              arguments for this class instantiation.
6206
6207              The same situation can arise with something like this:
6208
6209                friend void f(int);
6210                template <class T> class C {
6211                  friend void f(T) {}
6212                };
6213
6214              when `C<int>' is instantiated.  Now, `f(int)' is defined
6215              in the class.  */
6216
6217           if (!new_friend_is_defn)
6218             /* On the other hand, if the in-class declaration does
6219                *not* provide a definition, then we don't want to alter
6220                existing definitions.  We can just leave everything
6221                alone.  */
6222             ;
6223           else
6224             {
6225               /* Overwrite whatever template info was there before, if
6226                  any, with the new template information pertaining to
6227                  the declaration.  */
6228               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6229
6230               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6231                 reregister_specialization (new_friend,
6232                                            most_general_template (old_decl),
6233                                            old_decl);
6234               else
6235                 {
6236                   tree t;
6237                   tree new_friend_args;
6238
6239                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6240                     = new_friend_result_template_info;
6241
6242                   new_friend_args = TI_ARGS (new_friend_template_info);
6243                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6244                        t != NULL_TREE;
6245                        t = TREE_CHAIN (t))
6246                     {
6247                       tree spec = TREE_VALUE (t);
6248
6249                       DECL_TI_ARGS (spec)
6250                         = add_outermost_template_args (new_friend_args,
6251                                                        DECL_TI_ARGS (spec));
6252                     }
6253
6254                   /* Now, since specializations are always supposed to
6255                      hang off of the most general template, we must move
6256                      them.  */
6257                   t = most_general_template (old_decl);
6258                   if (t != old_decl)
6259                     {
6260                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6261                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6262                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6263                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6264                     }
6265                 }
6266             }
6267
6268           /* The information from NEW_FRIEND has been merged into OLD_DECL
6269              by duplicate_decls.  */
6270           new_friend = old_decl;
6271         }
6272     }
6273   else
6274     {
6275       tree context = DECL_CONTEXT (new_friend);
6276       bool dependent_p;
6277
6278       /* In the code
6279            template <class T> class C {
6280              template <class U> friend void C1<U>::f (); // case 1
6281              friend void C2<T>::f ();                    // case 2
6282            };
6283          we only need to make sure CONTEXT is a complete type for
6284          case 2.  To distinguish between the two cases, we note that
6285          CONTEXT of case 1 remains dependent type after tsubst while
6286          this isn't true for case 2.  */
6287       ++processing_template_decl;
6288       dependent_p = dependent_type_p (context);
6289       --processing_template_decl;
6290
6291       if (!dependent_p
6292           && !complete_type_or_else (context, NULL_TREE))
6293         return error_mark_node;
6294
6295       if (COMPLETE_TYPE_P (context))
6296         {
6297           /* Check to see that the declaration is really present, and,
6298              possibly obtain an improved declaration.  */
6299           tree fn = check_classfn (context,
6300                                    new_friend, NULL_TREE);
6301
6302           if (fn)
6303             new_friend = fn;
6304         }
6305     }
6306
6307   return new_friend;
6308 }
6309
6310 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6311    template arguments, as for tsubst.
6312
6313    Returns an appropriate tsubst'd friend type or error_mark_node on
6314    failure.  */
6315
6316 static tree
6317 tsubst_friend_class (tree friend_tmpl, tree args)
6318 {
6319   tree friend_type;
6320   tree tmpl;
6321   tree context;
6322
6323   context = DECL_CONTEXT (friend_tmpl);
6324
6325   if (context)
6326     {
6327       if (TREE_CODE (context) == NAMESPACE_DECL)
6328         push_nested_namespace (context);
6329       else
6330         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6331     }
6332
6333   /* Look for a class template declaration.  We look for hidden names
6334      because two friend declarations of the same template are the
6335      same.  For example, in:
6336
6337        struct A { 
6338          template <typename> friend class F;
6339        };
6340        template <typename> struct B { 
6341          template <typename> friend class F;
6342        };
6343
6344      both F templates are the same.  */
6345   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6346                            /*block_p=*/true, 0, 
6347                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6348
6349   /* But, if we don't find one, it might be because we're in a
6350      situation like this:
6351
6352        template <class T>
6353        struct S {
6354          template <class U>
6355          friend struct S;
6356        };
6357
6358      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6359      for `S<int>', not the TEMPLATE_DECL.  */
6360   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6361     {
6362       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6363       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6364     }
6365
6366   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6367     {
6368       /* The friend template has already been declared.  Just
6369          check to see that the declarations match, and install any new
6370          default parameters.  We must tsubst the default parameters,
6371          of course.  We only need the innermost template parameters
6372          because that is all that redeclare_class_template will look
6373          at.  */
6374       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6375           > TMPL_ARGS_DEPTH (args))
6376         {
6377           tree parms;
6378           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6379                                          args, tf_warning_or_error);
6380           redeclare_class_template (TREE_TYPE (tmpl), parms);
6381         }
6382
6383       friend_type = TREE_TYPE (tmpl);
6384     }
6385   else
6386     {
6387       /* The friend template has not already been declared.  In this
6388          case, the instantiation of the template class will cause the
6389          injection of this template into the global scope.  */
6390       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6391       if (tmpl == error_mark_node)
6392         return error_mark_node;
6393
6394       /* The new TMPL is not an instantiation of anything, so we
6395          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6396          the new type because that is supposed to be the corresponding
6397          template decl, i.e., TMPL.  */
6398       DECL_USE_TEMPLATE (tmpl) = 0;
6399       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6400       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6401       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6402         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6403
6404       /* Inject this template into the global scope.  */
6405       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6406     }
6407
6408   if (context)
6409     {
6410       if (TREE_CODE (context) == NAMESPACE_DECL)
6411         pop_nested_namespace (context);
6412       else
6413         pop_nested_class ();
6414     }
6415
6416   return friend_type;
6417 }
6418
6419 /* Returns zero if TYPE cannot be completed later due to circularity.
6420    Otherwise returns one.  */
6421
6422 static int
6423 can_complete_type_without_circularity (tree type)
6424 {
6425   if (type == NULL_TREE || type == error_mark_node)
6426     return 0;
6427   else if (COMPLETE_TYPE_P (type))
6428     return 1;
6429   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6430     return can_complete_type_without_circularity (TREE_TYPE (type));
6431   else if (CLASS_TYPE_P (type)
6432            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6433     return 0;
6434   else
6435     return 1;
6436 }
6437
6438 tree
6439 instantiate_class_template (tree type)
6440 {
6441   tree template, args, pattern, t, member;
6442   tree typedecl;
6443   tree pbinfo;
6444   tree base_list;
6445
6446   if (type == error_mark_node)
6447     return error_mark_node;
6448
6449   if (TYPE_BEING_DEFINED (type)
6450       || COMPLETE_TYPE_P (type)
6451       || dependent_type_p (type))
6452     return type;
6453
6454   /* Figure out which template is being instantiated.  */
6455   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6456   gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6457
6458   /* Determine what specialization of the original template to
6459      instantiate.  */
6460   t = most_specialized_class (type, template);
6461   if (t == error_mark_node)
6462     {
6463       TYPE_BEING_DEFINED (type) = 1;
6464       return error_mark_node;
6465     }
6466   else if (t)
6467     {
6468       /* This TYPE is actually an instantiation of a partial
6469          specialization.  We replace the innermost set of ARGS with
6470          the arguments appropriate for substitution.  For example,
6471          given:
6472
6473            template <class T> struct S {};
6474            template <class T> struct S<T*> {};
6475
6476          and supposing that we are instantiating S<int*>, ARGS will
6477          presently be {int*} -- but we need {int}.  */
6478       pattern = TREE_TYPE (t);
6479       args = TREE_PURPOSE (t);
6480     }
6481   else
6482     {
6483       pattern = TREE_TYPE (template);
6484       args = CLASSTYPE_TI_ARGS (type);
6485     }
6486
6487   /* If the template we're instantiating is incomplete, then clearly
6488      there's nothing we can do.  */
6489   if (!COMPLETE_TYPE_P (pattern))
6490     return type;
6491
6492   /* If we've recursively instantiated too many templates, stop.  */
6493   if (! push_tinst_level (type))
6494     return type;
6495
6496   /* Now we're really doing the instantiation.  Mark the type as in
6497      the process of being defined.  */
6498   TYPE_BEING_DEFINED (type) = 1;
6499
6500   /* We may be in the middle of deferred access check.  Disable
6501      it now.  */
6502   push_deferring_access_checks (dk_no_deferred);
6503
6504   push_to_top_level ();
6505
6506   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6507
6508   /* Set the input location to the template definition. This is needed
6509      if tsubsting causes an error.  */
6510   typedecl = TYPE_MAIN_DECL (type);
6511   input_location = DECL_SOURCE_LOCATION (typedecl);
6512   in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6513
6514   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6515   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6516   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6517   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6518   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6519   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6520   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6521   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6522   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6523   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6524   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6525   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6526   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6527   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6528   if (ANON_AGGR_TYPE_P (pattern))
6529     SET_ANON_AGGR_TYPE_P (type);
6530   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6531     {
6532       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6533       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6534     }
6535
6536   pbinfo = TYPE_BINFO (pattern);
6537
6538   /* We should never instantiate a nested class before its enclosing
6539      class; we need to look up the nested class by name before we can
6540      instantiate it, and that lookup should instantiate the enclosing
6541      class.  */
6542   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6543               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6544               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6545
6546   base_list = NULL_TREE;
6547   if (BINFO_N_BASE_BINFOS (pbinfo))
6548     {
6549       tree pbase_binfo;
6550       tree context = TYPE_CONTEXT (type);
6551       tree pushed_scope;
6552       int i;
6553
6554       /* We must enter the scope containing the type, as that is where
6555          the accessibility of types named in dependent bases are
6556          looked up from.  */
6557       pushed_scope = push_scope (context ? context : global_namespace);
6558
6559       /* Substitute into each of the bases to determine the actual
6560          basetypes.  */
6561       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6562         {
6563           tree base;
6564           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6565           tree expanded_bases = NULL_TREE;
6566           int idx, len = 1;
6567
6568           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6569             {
6570               expanded_bases = 
6571                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6572                                        args, tf_error, NULL_TREE);
6573               if (expanded_bases == error_mark_node)
6574                 continue;
6575
6576               len = TREE_VEC_LENGTH (expanded_bases);
6577             }
6578
6579           for (idx = 0; idx < len; idx++)
6580             {
6581               if (expanded_bases)
6582                 /* Extract the already-expanded base class.  */
6583                 base = TREE_VEC_ELT (expanded_bases, idx);
6584               else
6585                 /* Substitute to figure out the base class.  */
6586                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6587                                NULL_TREE);
6588
6589               if (base == error_mark_node)
6590                 continue;
6591
6592               base_list = tree_cons (access, base, base_list);
6593               if (BINFO_VIRTUAL_P (pbase_binfo))
6594                 TREE_TYPE (base_list) = integer_type_node;
6595             }
6596         }
6597
6598       /* The list is now in reverse order; correct that.  */
6599       base_list = nreverse (base_list);
6600
6601       if (pushed_scope)
6602         pop_scope (pushed_scope);
6603     }
6604   /* Now call xref_basetypes to set up all the base-class
6605      information.  */
6606   xref_basetypes (type, base_list);
6607
6608
6609   /* Now that our base classes are set up, enter the scope of the
6610      class, so that name lookups into base classes, etc. will work
6611      correctly.  This is precisely analogous to what we do in
6612      begin_class_definition when defining an ordinary non-template
6613      class.  */
6614   pushclass (type);
6615
6616   /* Now members are processed in the order of declaration.  */
6617   for (member = CLASSTYPE_DECL_LIST (pattern);
6618        member; member = TREE_CHAIN (member))
6619     {
6620       tree t = TREE_VALUE (member);
6621
6622       if (TREE_PURPOSE (member))
6623         {
6624           if (TYPE_P (t))
6625             {
6626               /* Build new CLASSTYPE_NESTED_UTDS.  */
6627
6628               tree newtag;
6629               bool class_template_p;
6630
6631               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6632                                   && TYPE_LANG_SPECIFIC (t)
6633                                   && CLASSTYPE_IS_TEMPLATE (t));
6634               /* If the member is a class template, then -- even after
6635                  substitution -- there may be dependent types in the
6636                  template argument list for the class.  We increment
6637                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6638                  that function will assume that no types are dependent
6639                  when outside of a template.  */
6640               if (class_template_p)
6641                 ++processing_template_decl;
6642               newtag = tsubst (t, args, tf_error, NULL_TREE);
6643               if (class_template_p)
6644                 --processing_template_decl;
6645               if (newtag == error_mark_node)
6646                 continue;
6647
6648               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6649                 {
6650                   tree name = TYPE_IDENTIFIER (t);
6651
6652                   if (class_template_p)
6653                     /* Unfortunately, lookup_template_class sets
6654                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6655                        instantiation (i.e., for the type of a member
6656                        template class nested within a template class.)
6657                        This behavior is required for
6658                        maybe_process_partial_specialization to work
6659                        correctly, but is not accurate in this case;
6660                        the TAG is not an instantiation of anything.
6661                        (The corresponding TEMPLATE_DECL is an
6662                        instantiation, but the TYPE is not.) */
6663                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6664
6665                   /* Now, we call pushtag to put this NEWTAG into the scope of
6666                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
6667                      pushtag calling push_template_decl.  We don't have to do
6668                      this for enums because it will already have been done in
6669                      tsubst_enum.  */
6670                   if (name)
6671                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6672                   pushtag (name, newtag, /*tag_scope=*/ts_current);
6673                 }
6674             }
6675           else if (TREE_CODE (t) == FUNCTION_DECL
6676                    || DECL_FUNCTION_TEMPLATE_P (t))
6677             {
6678               /* Build new TYPE_METHODS.  */
6679               tree r;
6680
6681               if (TREE_CODE (t) == TEMPLATE_DECL)
6682                 ++processing_template_decl;
6683               r = tsubst (t, args, tf_error, NULL_TREE);
6684               if (TREE_CODE (t) == TEMPLATE_DECL)
6685                 --processing_template_decl;
6686               set_current_access_from_decl (r);
6687               finish_member_declaration (r);
6688             }
6689           else
6690             {
6691               /* Build new TYPE_FIELDS.  */
6692               if (TREE_CODE (t) == STATIC_ASSERT)
6693                 {
6694                   tree condition = 
6695                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
6696                                  tf_warning_or_error, NULL_TREE,
6697                                  /*integral_constant_expression_p=*/true);
6698                   finish_static_assert (condition,
6699                                         STATIC_ASSERT_MESSAGE (t), 
6700                                         STATIC_ASSERT_SOURCE_LOCATION (t),
6701                                         /*member_p=*/true);
6702                 }
6703               else if (TREE_CODE (t) != CONST_DECL)
6704                 {
6705                   tree r;
6706
6707                   /* The the file and line for this declaration, to
6708                      assist in error message reporting.  Since we
6709                      called push_tinst_level above, we don't need to
6710                      restore these.  */
6711                   input_location = DECL_SOURCE_LOCATION (t);
6712
6713                   if (TREE_CODE (t) == TEMPLATE_DECL)
6714                     ++processing_template_decl;
6715                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
6716                   if (TREE_CODE (t) == TEMPLATE_DECL)
6717                     --processing_template_decl;
6718                   if (TREE_CODE (r) == VAR_DECL)
6719                     {
6720                       /* In [temp.inst]:
6721
6722                            [t]he initialization (and any associated
6723                            side-effects) of a static data member does
6724                            not occur unless the static data member is
6725                            itself used in a way that requires the
6726                            definition of the static data member to
6727                            exist.
6728
6729                          Therefore, we do not substitute into the
6730                          initialized for the static data member here.  */
6731                       finish_static_data_member_decl
6732                         (r,
6733                          /*init=*/NULL_TREE,
6734                          /*init_const_expr_p=*/false,
6735                          /*asmspec_tree=*/NULL_TREE,
6736                          /*flags=*/0);
6737                       if (DECL_INITIALIZED_IN_CLASS_P (r))
6738                         check_static_variable_definition (r, TREE_TYPE (r));
6739                     }
6740                   else if (TREE_CODE (r) == FIELD_DECL)
6741                     {
6742                       /* Determine whether R has a valid type and can be
6743                          completed later.  If R is invalid, then it is
6744                          replaced by error_mark_node so that it will not be
6745                          added to TYPE_FIELDS.  */
6746                       tree rtype = TREE_TYPE (r);
6747                       if (can_complete_type_without_circularity (rtype))
6748                         complete_type (rtype);
6749
6750                       if (!COMPLETE_TYPE_P (rtype))
6751                         {
6752                           cxx_incomplete_type_error (r, rtype);
6753                           r = error_mark_node;
6754                         }
6755                     }
6756
6757                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6758                      such a thing will already have been added to the field
6759                      list by tsubst_enum in finish_member_declaration in the
6760                      CLASSTYPE_NESTED_UTDS case above.  */
6761                   if (!(TREE_CODE (r) == TYPE_DECL
6762                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
6763                         && DECL_ARTIFICIAL (r)))
6764                     {
6765                       set_current_access_from_decl (r);
6766                       finish_member_declaration (r);
6767                     }
6768                 }
6769             }
6770         }
6771       else
6772         {
6773           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6774             {
6775               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
6776
6777               tree friend_type = t;
6778               bool adjust_processing_template_decl = false;
6779
6780               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6781                 {
6782                   /* template <class T> friend class C;  */
6783                   friend_type = tsubst_friend_class (friend_type, args);
6784                   adjust_processing_template_decl = true;
6785                 }
6786               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6787                 {
6788                   /* template <class T> friend class C::D;  */
6789                   friend_type = tsubst (friend_type, args,
6790                                         tf_warning_or_error, NULL_TREE);
6791                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6792                     friend_type = TREE_TYPE (friend_type);
6793                   adjust_processing_template_decl = true;
6794                 }
6795               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6796                 {
6797                   /* This could be either
6798
6799                        friend class T::C;
6800
6801                      when dependent_type_p is false or
6802
6803                        template <class U> friend class T::C;
6804
6805                      otherwise.  */
6806                   friend_type = tsubst (friend_type, args,
6807                                         tf_warning_or_error, NULL_TREE);
6808                   /* Bump processing_template_decl for correct
6809                      dependent_type_p calculation.  */
6810                   ++processing_template_decl;
6811                   if (dependent_type_p (friend_type))
6812                     adjust_processing_template_decl = true;
6813                   --processing_template_decl;
6814                 }
6815               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6816                        && hidden_name_p (TYPE_NAME (friend_type)))
6817                 {
6818                   /* friend class C;
6819
6820                      where C hasn't been declared yet.  Let's lookup name
6821                      from namespace scope directly, bypassing any name that
6822                      come from dependent base class.  */
6823                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6824
6825                   /* The call to xref_tag_from_type does injection for friend
6826                      classes.  */
6827                   push_nested_namespace (ns);
6828                   friend_type =
6829                     xref_tag_from_type (friend_type, NULL_TREE,
6830                                         /*tag_scope=*/ts_current);
6831                   pop_nested_namespace (ns);
6832                 }
6833               else if (uses_template_parms (friend_type))
6834                 /* friend class C<T>;  */
6835                 friend_type = tsubst (friend_type, args,
6836                                       tf_warning_or_error, NULL_TREE);
6837               /* Otherwise it's
6838
6839                    friend class C;
6840
6841                  where C is already declared or
6842
6843                    friend class C<int>;
6844
6845                  We don't have to do anything in these cases.  */
6846
6847               if (adjust_processing_template_decl)
6848                 /* Trick make_friend_class into realizing that the friend
6849                    we're adding is a template, not an ordinary class.  It's
6850                    important that we use make_friend_class since it will
6851                    perform some error-checking and output cross-reference
6852                    information.  */
6853                 ++processing_template_decl;
6854
6855               if (friend_type != error_mark_node)
6856                 make_friend_class (type, friend_type, /*complain=*/false);
6857
6858               if (adjust_processing_template_decl)
6859                 --processing_template_decl;
6860             }
6861           else
6862             {
6863               /* Build new DECL_FRIENDLIST.  */
6864               tree r;
6865
6866               /* The the file and line for this declaration, to
6867                  assist in error message reporting.  Since we
6868                  called push_tinst_level above, we don't need to
6869                  restore these.  */
6870               input_location = DECL_SOURCE_LOCATION (t);
6871
6872               if (TREE_CODE (t) == TEMPLATE_DECL)
6873                 {
6874                   ++processing_template_decl;
6875                   push_deferring_access_checks (dk_no_check);
6876                 }
6877
6878               r = tsubst_friend_function (t, args);
6879               add_friend (type, r, /*complain=*/false);
6880               if (TREE_CODE (t) == TEMPLATE_DECL)
6881                 {
6882                   pop_deferring_access_checks ();
6883                   --processing_template_decl;
6884                 }
6885             }
6886         }
6887     }
6888
6889   /* Set the file and line number information to whatever is given for
6890      the class itself.  This puts error messages involving generated
6891      implicit functions at a predictable point, and the same point
6892      that would be used for non-template classes.  */
6893   input_location = DECL_SOURCE_LOCATION (typedecl);
6894
6895   unreverse_member_declarations (type);
6896   finish_struct_1 (type);
6897   TYPE_BEING_DEFINED (type) = 0;
6898
6899   /* Now that the class is complete, instantiate default arguments for
6900      any member functions.  We don't do this earlier because the
6901      default arguments may reference members of the class.  */
6902   if (!PRIMARY_TEMPLATE_P (template))
6903     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
6904       if (TREE_CODE (t) == FUNCTION_DECL
6905           /* Implicitly generated member functions will not have template
6906              information; they are not instantiations, but instead are
6907              created "fresh" for each instantiation.  */
6908           && DECL_TEMPLATE_INFO (t))
6909         tsubst_default_arguments (t);
6910
6911   popclass ();
6912   pop_from_top_level ();
6913   pop_deferring_access_checks ();
6914   pop_tinst_level ();
6915
6916   /* The vtable for a template class can be emitted in any translation
6917      unit in which the class is instantiated.  When there is no key
6918      method, however, finish_struct_1 will already have added TYPE to
6919      the keyed_classes list.  */
6920   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
6921     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
6922
6923   return type;
6924 }
6925
6926 static tree
6927 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6928 {
6929   tree r;
6930
6931   if (!t)
6932     r = t;
6933   else if (TYPE_P (t))
6934     r = tsubst (t, args, complain, in_decl);
6935   else
6936     {
6937       r = tsubst_expr (t, args, complain, in_decl,
6938                        /*integral_constant_expression_p=*/true);
6939       r = fold_non_dependent_expr (r);
6940     }
6941   return r;
6942 }
6943
6944 /* Substitute ARGS into T, which is an pack expansion
6945    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
6946    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
6947    (if only a partial substitution could be performed) or
6948    ERROR_MARK_NODE if there was an error.  */
6949 tree
6950 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
6951                        tree in_decl)
6952 {
6953   tree pattern;
6954   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
6955   tree first_arg_pack; int i, len = -1;
6956   tree result;
6957   int incomplete = 0;
6958
6959   gcc_assert (PACK_EXPANSION_P (t));
6960   pattern = PACK_EXPANSION_PATTERN (t);
6961
6962   /* Determine the argument packs that will instantiate the parameter
6963      packs used in the expansion expression. While we're at it,
6964      compute the number of arguments to be expanded and make sure it
6965      is consistent.  */
6966   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
6967        pack = TREE_CHAIN (pack))
6968     {
6969       tree parm_pack = TREE_VALUE (pack);
6970       tree arg_pack = NULL_TREE;
6971       tree orig_arg = NULL_TREE;
6972
6973       if (TREE_CODE (parm_pack) == PARM_DECL)
6974         {
6975           if (local_specializations)
6976             arg_pack = retrieve_local_specialization (parm_pack);
6977         }
6978       else
6979         {
6980           int level, idx, levels;
6981           template_parm_level_and_index (parm_pack, &level, &idx);
6982
6983           levels = TMPL_ARGS_DEPTH (args);
6984           if (level <= levels)
6985             arg_pack = TMPL_ARG (args, level, idx);
6986         }
6987
6988       orig_arg = arg_pack;
6989       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
6990         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
6991       
6992       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
6993         /* This can only happen if we forget to expand an argument
6994            pack somewhere else. Just return an error, silently.  */
6995         {
6996           result = make_tree_vec (1);
6997           TREE_VEC_ELT (result, 0) = error_mark_node;
6998           return result;
6999         }
7000
7001       if (arg_pack)
7002         {
7003           int my_len = 
7004             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7005
7006           /* It's all-or-nothing with incomplete argument packs.  */
7007           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7008             return error_mark_node;
7009           
7010           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7011             incomplete = 1;
7012
7013           if (len < 0)
7014             {
7015               len = my_len;
7016               first_arg_pack = arg_pack;
7017             }
7018           else if (len != my_len)
7019             {
7020               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7021                 error ("mismatched argument pack lengths while expanding "
7022                        "%<%T%>",
7023                        pattern);
7024               else
7025                 error ("mismatched argument pack lengths while expanding "
7026                        "%<%E%>",
7027                        pattern);
7028               return error_mark_node;
7029             }
7030
7031           /* Keep track of the parameter packs and their corresponding
7032              argument packs.  */
7033           packs = tree_cons (parm_pack, arg_pack, packs);
7034           TREE_TYPE (packs) = orig_arg;
7035         }
7036       else
7037         /* We can't substitute for this parameter pack.  */
7038         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7039                                          TREE_VALUE (pack),
7040                                          unsubstituted_packs);
7041     }
7042
7043   /* We cannot expand this expansion expression, because we don't have
7044      all of the argument packs we need. Substitute into the pattern
7045      and return a PACK_EXPANSION_*. The caller will need to deal with
7046      that.  */
7047   if (unsubstituted_packs)
7048     return make_pack_expansion (tsubst (pattern, args, complain, 
7049                                         in_decl));
7050
7051   /* We could not find any argument packs that work.  */
7052   if (len < 0)
7053     return error_mark_node;
7054
7055   /* For each argument in each argument pack, substitute into the
7056      pattern.  */
7057   result = make_tree_vec (len + incomplete);
7058   for (i = 0; i < len + incomplete; ++i)
7059     {
7060       /* For parameter pack, change the substitution of the parameter
7061          pack to the ith argument in its argument pack, then expand
7062          the pattern.  */
7063       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7064         {
7065           tree parm = TREE_PURPOSE (pack);
7066
7067           if (TREE_CODE (parm) == PARM_DECL)
7068             {
7069               /* Select the Ith argument from the pack.  */
7070               tree arg = make_node (ARGUMENT_PACK_SELECT);
7071               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7072               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7073               mark_used (parm);
7074               register_local_specialization (arg, parm);
7075             }
7076           else
7077             {
7078               tree value = parm;
7079               int idx, level;
7080               template_parm_level_and_index (parm, &level, &idx);
7081               
7082               if (i < len) 
7083                 {
7084                   /* Select the Ith argument from the pack. */
7085                   value = make_node (ARGUMENT_PACK_SELECT);
7086                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7087                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7088                 }
7089
7090               /* Update the corresponding argument.  */
7091               TMPL_ARG (args, level, idx) = value;
7092             }
7093         }
7094
7095       /* Substitute into the PATTERN with the altered arguments.  */
7096       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7097         TREE_VEC_ELT (result, i) = 
7098           tsubst_expr (pattern, args, complain, in_decl,
7099                        /*integral_constant_expression_p=*/false);
7100       else
7101         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7102
7103       if (i == len)
7104         /* When we have incomplete argument packs, the last "expanded"
7105            result is itself a pack expansion, which allows us
7106            to deduce more arguments.  */
7107         TREE_VEC_ELT (result, i) = 
7108           make_pack_expansion (TREE_VEC_ELT (result, i));
7109
7110       if (TREE_VEC_ELT (result, i) == error_mark_node)
7111         {
7112           result = error_mark_node;
7113           break;
7114         }
7115     }
7116   
7117   /* Update ARGS to restore the substitution from parameter packs to
7118      their argument packs.  */
7119   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7120     {
7121       tree parm = TREE_PURPOSE (pack);
7122
7123       if (TREE_CODE (parm) == PARM_DECL)
7124         register_local_specialization (TREE_TYPE (pack), parm);
7125       else
7126         {
7127           int idx, level;
7128           template_parm_level_and_index (parm, &level, &idx);
7129           
7130           /* Update the corresponding argument.  */
7131           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7132             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7133               TREE_TYPE (pack);
7134           else
7135             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7136         }
7137     }
7138
7139   return result;
7140 }
7141
7142 /* Substitute ARGS into the vector or list of template arguments T.  */
7143
7144 static tree
7145 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7146 {
7147   tree orig_t = t;
7148   int len = TREE_VEC_LENGTH (t);
7149   int need_new = 0, i, expanded_len_adjust = 0, out;
7150   tree *elts = (tree *) alloca (len * sizeof (tree));
7151
7152   for (i = 0; i < len; i++)
7153     {
7154       tree orig_arg = TREE_VEC_ELT (t, i);
7155       tree new_arg;
7156
7157       if (TREE_CODE (orig_arg) == TREE_VEC)
7158         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7159       else if (PACK_EXPANSION_P (orig_arg))
7160         {
7161           /* Substitute into an expansion expression.  */
7162           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7163
7164           if (TREE_CODE (new_arg) == TREE_VEC)
7165             /* Add to the expanded length adjustment the number of
7166                expanded arguments. We subtract one from this
7167                measurement, because the argument pack expression
7168                itself is already counted as 1 in
7169                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7170                the argument pack is empty.  */
7171             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7172         }
7173       else if (ARGUMENT_PACK_P (orig_arg))
7174         {
7175           /* Substitute into each of the arguments.  */
7176           new_arg = make_node (TREE_CODE (orig_arg));
7177           
7178           SET_ARGUMENT_PACK_ARGS (
7179             new_arg,
7180             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7181                                   args, complain, in_decl));
7182
7183           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7184             new_arg = error_mark_node;
7185
7186           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7187             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7188                                           complain, in_decl);
7189             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7190
7191             if (TREE_TYPE (new_arg) == error_mark_node)
7192               new_arg = error_mark_node;
7193           }
7194         }
7195       else
7196         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7197
7198       if (new_arg == error_mark_node)
7199         return error_mark_node;
7200
7201       elts[i] = new_arg;
7202       if (new_arg != orig_arg)
7203         need_new = 1;
7204     }
7205
7206   if (!need_new)
7207     return t;
7208
7209   /* Make space for the expanded arguments coming from template
7210      argument packs.  */
7211   t = make_tree_vec (len + expanded_len_adjust);
7212   for (i = 0, out = 0; i < len; i++)
7213     {
7214       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7215            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7216           && TREE_CODE (elts[i]) == TREE_VEC)
7217         {
7218           int idx;
7219
7220           /* Now expand the template argument pack "in place".  */
7221           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7222             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7223         }
7224       else
7225         {
7226           TREE_VEC_ELT (t, out) = elts[i];
7227           out++;
7228         }
7229     }
7230
7231   return t;
7232 }
7233
7234 /* Return the result of substituting ARGS into the template parameters
7235    given by PARMS.  If there are m levels of ARGS and m + n levels of
7236    PARMS, then the result will contain n levels of PARMS.  For
7237    example, if PARMS is `template <class T> template <class U>
7238    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7239    result will be `template <int*, double, class V>'.  */
7240
7241 static tree
7242 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7243 {
7244   tree r = NULL_TREE;
7245   tree* new_parms;
7246
7247   /* When substituting into a template, we must set
7248      PROCESSING_TEMPLATE_DECL as the template parameters may be
7249      dependent if they are based on one-another, and the dependency
7250      predicates are short-circuit outside of templates.  */
7251   ++processing_template_decl;
7252
7253   for (new_parms = &r;
7254        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7255        new_parms = &(TREE_CHAIN (*new_parms)),
7256          parms = TREE_CHAIN (parms))
7257     {
7258       tree new_vec =
7259         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7260       int i;
7261
7262       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7263         {
7264           tree tuple;
7265           tree default_value;
7266           tree parm_decl;
7267
7268           if (parms == error_mark_node)
7269             continue;
7270
7271           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7272
7273           if (tuple == error_mark_node)
7274             continue;
7275
7276           default_value = TREE_PURPOSE (tuple);
7277           parm_decl = TREE_VALUE (tuple);
7278
7279           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7280           if (TREE_CODE (parm_decl) == PARM_DECL
7281               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7282             parm_decl = error_mark_node;
7283           default_value = tsubst_template_arg (default_value, args,
7284                                                complain, NULL_TREE);
7285
7286           tuple = build_tree_list (default_value, parm_decl);
7287           TREE_VEC_ELT (new_vec, i) = tuple;
7288         }
7289
7290       *new_parms =
7291         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7292                              - TMPL_ARGS_DEPTH (args)),
7293                    new_vec, NULL_TREE);
7294     }
7295
7296   --processing_template_decl;
7297
7298   return r;
7299 }
7300
7301 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7302    type T.  If T is not an aggregate or enumeration type, it is
7303    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7304    ENTERING_SCOPE is nonzero, T is the context for a template which
7305    we are presently tsubst'ing.  Return the substituted value.  */
7306
7307 static tree
7308 tsubst_aggr_type (tree t,
7309                   tree args,
7310                   tsubst_flags_t complain,
7311                   tree in_decl,
7312                   int entering_scope)
7313 {
7314   if (t == NULL_TREE)
7315     return NULL_TREE;
7316
7317   switch (TREE_CODE (t))
7318     {
7319     case RECORD_TYPE:
7320       if (TYPE_PTRMEMFUNC_P (t))
7321         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7322
7323       /* Else fall through.  */
7324     case ENUMERAL_TYPE:
7325     case UNION_TYPE:
7326       if (TYPE_TEMPLATE_INFO (t))
7327         {
7328           tree argvec;
7329           tree context;
7330           tree r;
7331           bool saved_skip_evaluation;
7332
7333           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7334           saved_skip_evaluation = skip_evaluation;
7335           skip_evaluation = false;
7336
7337           /* First, determine the context for the type we are looking
7338              up.  */
7339           context = TYPE_CONTEXT (t);
7340           if (context)
7341             context = tsubst_aggr_type (context, args, complain,
7342                                         in_decl, /*entering_scope=*/1);
7343
7344           /* Then, figure out what arguments are appropriate for the
7345              type we are trying to find.  For example, given:
7346
7347                template <class T> struct S;
7348                template <class T, class U> void f(T, U) { S<U> su; }
7349
7350              and supposing that we are instantiating f<int, double>,
7351              then our ARGS will be {int, double}, but, when looking up
7352              S we only want {double}.  */
7353           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7354                                          complain, in_decl);
7355           if (argvec == error_mark_node)
7356             r = error_mark_node;
7357           else
7358             {
7359               r = lookup_template_class (t, argvec, in_decl, context,
7360                                          entering_scope, complain);
7361               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7362             }
7363
7364           skip_evaluation = saved_skip_evaluation;
7365
7366           return r;
7367         }
7368       else
7369         /* This is not a template type, so there's nothing to do.  */
7370         return t;
7371
7372     default:
7373       return tsubst (t, args, complain, in_decl);
7374     }
7375 }
7376
7377 /* Substitute into the default argument ARG (a default argument for
7378    FN), which has the indicated TYPE.  */
7379
7380 tree
7381 tsubst_default_argument (tree fn, tree type, tree arg)
7382 {
7383   tree saved_class_ptr = NULL_TREE;
7384   tree saved_class_ref = NULL_TREE;
7385
7386   /* This default argument came from a template.  Instantiate the
7387      default argument here, not in tsubst.  In the case of
7388      something like:
7389
7390        template <class T>
7391        struct S {
7392          static T t();
7393          void f(T = t());
7394        };
7395
7396      we must be careful to do name lookup in the scope of S<T>,
7397      rather than in the current class.  */
7398   push_access_scope (fn);
7399   /* The "this" pointer is not valid in a default argument.  */
7400   if (cfun)
7401     {
7402       saved_class_ptr = current_class_ptr;
7403       cp_function_chain->x_current_class_ptr = NULL_TREE;
7404       saved_class_ref = current_class_ref;
7405       cp_function_chain->x_current_class_ref = NULL_TREE;
7406     }
7407
7408   push_deferring_access_checks(dk_no_deferred);
7409   /* The default argument expression may cause implicitly defined
7410      member functions to be synthesized, which will result in garbage
7411      collection.  We must treat this situation as if we were within
7412      the body of function so as to avoid collecting live data on the
7413      stack.  */
7414   ++function_depth;
7415   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7416                      tf_warning_or_error, NULL_TREE,
7417                      /*integral_constant_expression_p=*/false);
7418   --function_depth;
7419   pop_deferring_access_checks();
7420
7421   /* Restore the "this" pointer.  */
7422   if (cfun)
7423     {
7424       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7425       cp_function_chain->x_current_class_ref = saved_class_ref;
7426     }
7427
7428   pop_access_scope (fn);
7429
7430   /* Make sure the default argument is reasonable.  */
7431   arg = check_default_argument (type, arg);
7432
7433   return arg;
7434 }
7435
7436 /* Substitute into all the default arguments for FN.  */
7437
7438 static void
7439 tsubst_default_arguments (tree fn)
7440 {
7441   tree arg;
7442   tree tmpl_args;
7443
7444   tmpl_args = DECL_TI_ARGS (fn);
7445
7446   /* If this function is not yet instantiated, we certainly don't need
7447      its default arguments.  */
7448   if (uses_template_parms (tmpl_args))
7449     return;
7450
7451   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7452        arg;
7453        arg = TREE_CHAIN (arg))
7454     if (TREE_PURPOSE (arg))
7455       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7456                                                     TREE_VALUE (arg),
7457                                                     TREE_PURPOSE (arg));
7458 }
7459
7460 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7461    result of the substitution.  Issue error and warning messages under
7462    control of COMPLAIN.  */
7463
7464 static tree
7465 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7466 {
7467   location_t saved_loc;
7468   tree r = NULL_TREE;
7469   tree in_decl = t;
7470
7471   /* Set the filename and linenumber to improve error-reporting.  */
7472   saved_loc = input_location;
7473   input_location = DECL_SOURCE_LOCATION (t);
7474
7475   switch (TREE_CODE (t))
7476     {
7477     case TEMPLATE_DECL:
7478       {
7479         /* We can get here when processing a member function template,
7480            member class template, and template template parameter of
7481            a template class.  */
7482         tree decl = DECL_TEMPLATE_RESULT (t);
7483         tree spec;
7484         tree tmpl_args;
7485         tree full_args;
7486
7487         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7488           {
7489             /* Template template parameter is treated here.  */
7490             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7491             if (new_type == error_mark_node)
7492               return error_mark_node;
7493
7494             r = copy_decl (t);
7495             TREE_CHAIN (r) = NULL_TREE;
7496             TREE_TYPE (r) = new_type;
7497             DECL_TEMPLATE_RESULT (r)
7498               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7499             DECL_TEMPLATE_PARMS (r)
7500               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7501                                        complain);
7502             TYPE_NAME (new_type) = r;
7503             break;
7504           }
7505
7506         /* We might already have an instance of this template.
7507            The ARGS are for the surrounding class type, so the
7508            full args contain the tsubst'd args for the context,
7509            plus the innermost args from the template decl.  */
7510         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7511           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7512           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7513         /* Because this is a template, the arguments will still be
7514            dependent, even after substitution.  If
7515            PROCESSING_TEMPLATE_DECL is not set, the dependency
7516            predicates will short-circuit.  */
7517         ++processing_template_decl;
7518         full_args = tsubst_template_args (tmpl_args, args,
7519                                           complain, in_decl);
7520         --processing_template_decl;
7521         if (full_args == error_mark_node)
7522           return error_mark_node;
7523
7524         /* tsubst_template_args doesn't copy the vector if
7525            nothing changed.  But, *something* should have
7526            changed.  */
7527         gcc_assert (full_args != tmpl_args);
7528
7529         spec = retrieve_specialization (t, full_args,
7530                                         /*class_specializations_p=*/true);
7531         if (spec != NULL_TREE)
7532           {
7533             r = spec;
7534             break;
7535           }
7536
7537         /* Make a new template decl.  It will be similar to the
7538            original, but will record the current template arguments.
7539            We also create a new function declaration, which is just
7540            like the old one, but points to this new template, rather
7541            than the old one.  */
7542         r = copy_decl (t);
7543         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7544         TREE_CHAIN (r) = NULL_TREE;
7545
7546         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7547
7548         if (TREE_CODE (decl) == TYPE_DECL)
7549           {
7550             tree new_type;
7551             ++processing_template_decl;
7552             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7553             --processing_template_decl;
7554             if (new_type == error_mark_node)
7555               return error_mark_node;
7556
7557             TREE_TYPE (r) = new_type;
7558             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7559             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7560             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7561             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7562           }
7563         else
7564           {
7565             tree new_decl;
7566             ++processing_template_decl;
7567             new_decl = tsubst (decl, args, complain, in_decl);
7568             --processing_template_decl;
7569             if (new_decl == error_mark_node)
7570               return error_mark_node;
7571
7572             DECL_TEMPLATE_RESULT (r) = new_decl;
7573             DECL_TI_TEMPLATE (new_decl) = r;
7574             TREE_TYPE (r) = TREE_TYPE (new_decl);
7575             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7576             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7577           }
7578
7579         SET_DECL_IMPLICIT_INSTANTIATION (r);
7580         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7581         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7582
7583         /* The template parameters for this new template are all the
7584            template parameters for the old template, except the
7585            outermost level of parameters.  */
7586         DECL_TEMPLATE_PARMS (r)
7587           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7588                                    complain);
7589
7590         if (PRIMARY_TEMPLATE_P (t))
7591           DECL_PRIMARY_TEMPLATE (r) = r;
7592
7593         if (TREE_CODE (decl) != TYPE_DECL)
7594           /* Record this non-type partial instantiation.  */
7595           register_specialization (r, t,
7596                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7597                                    false);
7598       }
7599       break;
7600
7601     case FUNCTION_DECL:
7602       {
7603         tree ctx;
7604         tree argvec = NULL_TREE;
7605         tree *friends;
7606         tree gen_tmpl;
7607         tree type;
7608         int member;
7609         int args_depth;
7610         int parms_depth;
7611
7612         /* Nobody should be tsubst'ing into non-template functions.  */
7613         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7614
7615         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7616           {
7617             tree spec;
7618             bool dependent_p;
7619
7620             /* If T is not dependent, just return it.  We have to
7621                increment PROCESSING_TEMPLATE_DECL because
7622                value_dependent_expression_p assumes that nothing is
7623                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
7624             ++processing_template_decl;
7625             dependent_p = value_dependent_expression_p (t);
7626             --processing_template_decl;
7627             if (!dependent_p)
7628               return t;
7629
7630             /* Calculate the most general template of which R is a
7631                specialization, and the complete set of arguments used to
7632                specialize R.  */
7633             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7634             argvec = tsubst_template_args (DECL_TI_ARGS
7635                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
7636                                            args, complain, in_decl);
7637
7638             /* Check to see if we already have this specialization.  */
7639             spec = retrieve_specialization (gen_tmpl, argvec,
7640                                             /*class_specializations_p=*/false);
7641
7642             if (spec)
7643               {
7644                 r = spec;
7645                 break;
7646               }
7647
7648             /* We can see more levels of arguments than parameters if
7649                there was a specialization of a member template, like
7650                this:
7651
7652                  template <class T> struct S { template <class U> void f(); }
7653                  template <> template <class U> void S<int>::f(U);
7654
7655                Here, we'll be substituting into the specialization,
7656                because that's where we can find the code we actually
7657                want to generate, but we'll have enough arguments for
7658                the most general template.
7659
7660                We also deal with the peculiar case:
7661
7662                  template <class T> struct S {
7663                    template <class U> friend void f();
7664                  };
7665                  template <class U> void f() {}
7666                  template S<int>;
7667                  template void f<double>();
7668
7669                Here, the ARGS for the instantiation of will be {int,
7670                double}.  But, we only need as many ARGS as there are
7671                levels of template parameters in CODE_PATTERN.  We are
7672                careful not to get fooled into reducing the ARGS in
7673                situations like:
7674
7675                  template <class T> struct S { template <class U> void f(U); }
7676                  template <class T> template <> void S<T>::f(int) {}
7677
7678                which we can spot because the pattern will be a
7679                specialization in this case.  */
7680             args_depth = TMPL_ARGS_DEPTH (args);
7681             parms_depth =
7682               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7683             if (args_depth > parms_depth
7684                 && !DECL_TEMPLATE_SPECIALIZATION (t))
7685               args = get_innermost_template_args (args, parms_depth);
7686           }
7687         else
7688           {
7689             /* This special case arises when we have something like this:
7690
7691                  template <class T> struct S {
7692                    friend void f<int>(int, double);
7693                  };
7694
7695                Here, the DECL_TI_TEMPLATE for the friend declaration
7696                will be an IDENTIFIER_NODE.  We are being called from
7697                tsubst_friend_function, and we want only to create a
7698                new decl (R) with appropriate types so that we can call
7699                determine_specialization.  */
7700             gen_tmpl = NULL_TREE;
7701           }
7702
7703         if (DECL_CLASS_SCOPE_P (t))
7704           {
7705             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7706               member = 2;
7707             else
7708               member = 1;
7709             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
7710                                     complain, t, /*entering_scope=*/1);
7711           }
7712         else
7713           {
7714             member = 0;
7715             ctx = DECL_CONTEXT (t);
7716           }
7717         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7718         if (type == error_mark_node)
7719           return error_mark_node;
7720
7721         /* We do NOT check for matching decls pushed separately at this
7722            point, as they may not represent instantiations of this
7723            template, and in any case are considered separate under the
7724            discrete model.  */
7725         r = copy_decl (t);
7726         DECL_USE_TEMPLATE (r) = 0;
7727         TREE_TYPE (r) = type;
7728         /* Clear out the mangled name and RTL for the instantiation.  */
7729         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7730         SET_DECL_RTL (r, NULL_RTX);
7731         DECL_INITIAL (r) = NULL_TREE;
7732         DECL_CONTEXT (r) = ctx;
7733
7734         if (member && DECL_CONV_FN_P (r))
7735           /* Type-conversion operator.  Reconstruct the name, in
7736              case it's the name of one of the template's parameters.  */
7737           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
7738
7739         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
7740                                      complain, t);
7741         DECL_RESULT (r) = NULL_TREE;
7742
7743         TREE_STATIC (r) = 0;
7744         TREE_PUBLIC (r) = TREE_PUBLIC (t);
7745         DECL_EXTERNAL (r) = 1;
7746         /* If this is an instantiation of a function with internal
7747            linkage, we already know what object file linkage will be
7748            assigned to the instantiation.  */
7749         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
7750         DECL_DEFER_OUTPUT (r) = 0;
7751         TREE_CHAIN (r) = NULL_TREE;
7752         DECL_PENDING_INLINE_INFO (r) = 0;
7753         DECL_PENDING_INLINE_P (r) = 0;
7754         DECL_SAVED_TREE (r) = NULL_TREE;
7755         TREE_USED (r) = 0;
7756         if (DECL_CLONED_FUNCTION (r))
7757           {
7758             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
7759                                                args, complain, t);
7760             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7761             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7762           }
7763
7764         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
7765            this in the special friend case mentioned above where
7766            GEN_TMPL is NULL.  */
7767         if (gen_tmpl)
7768           {
7769             DECL_TEMPLATE_INFO (r)
7770               = tree_cons (gen_tmpl, argvec, NULL_TREE);
7771             SET_DECL_IMPLICIT_INSTANTIATION (r);
7772             register_specialization (r, gen_tmpl, argvec, false);
7773
7774             /* We're not supposed to instantiate default arguments
7775                until they are called, for a template.  But, for a
7776                declaration like:
7777
7778                  template <class T> void f ()
7779                  { extern void g(int i = T()); }
7780
7781                we should do the substitution when the template is
7782                instantiated.  We handle the member function case in
7783                instantiate_class_template since the default arguments
7784                might refer to other members of the class.  */
7785             if (!member
7786                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7787                 && !uses_template_parms (argvec))
7788               tsubst_default_arguments (r);
7789           }
7790         else
7791           DECL_TEMPLATE_INFO (r) = NULL_TREE;
7792
7793         /* Copy the list of befriending classes.  */
7794         for (friends = &DECL_BEFRIENDING_CLASSES (r);
7795              *friends;
7796              friends = &TREE_CHAIN (*friends))
7797           {
7798             *friends = copy_node (*friends);
7799             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
7800                                             args, complain,
7801                                             in_decl);
7802           }
7803
7804         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
7805           {
7806             maybe_retrofit_in_chrg (r);
7807             if (DECL_CONSTRUCTOR_P (r))
7808               grok_ctor_properties (ctx, r);
7809             /* If this is an instantiation of a member template, clone it.
7810                If it isn't, that'll be handled by
7811                clone_constructors_and_destructors.  */
7812             if (PRIMARY_TEMPLATE_P (gen_tmpl))
7813               clone_function_decl (r, /*update_method_vec_p=*/0);
7814           }
7815         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7816                  && !grok_op_properties (r, (complain & tf_error) != 0))
7817           return error_mark_node;
7818
7819         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7820           SET_DECL_FRIEND_CONTEXT (r,
7821                                    tsubst (DECL_FRIEND_CONTEXT (t),
7822                                             args, complain, in_decl));
7823
7824         /* Possibly limit visibility based on template args.  */
7825         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
7826         if (DECL_VISIBILITY_SPECIFIED (t))
7827           {
7828             DECL_VISIBILITY_SPECIFIED (r) = 0;
7829             DECL_ATTRIBUTES (r)
7830               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7831           }
7832         determine_visibility (r);
7833       }
7834       break;
7835
7836     case PARM_DECL:
7837       {
7838         tree type = NULL_TREE;
7839         int i, len = 1;
7840         tree expanded_types = NULL_TREE;
7841         tree prev_r = NULL_TREE;
7842         tree first_r = NULL_TREE;
7843
7844         if (FUNCTION_PARAMETER_PACK_P (t))
7845           {
7846             /* If there is a local specialization that isn't a
7847                parameter pack, it means that we're doing a "simple"
7848                substitution from inside tsubst_pack_expansion. Just
7849                return the local specialization (which will be a single
7850                parm).  */
7851             tree spec = NULL_TREE;
7852             if (local_specializations)
7853               spec = retrieve_local_specialization (t);
7854             if (spec 
7855                 && TREE_CODE (spec) == PARM_DECL
7856                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
7857               return spec;
7858
7859             /* Expand the TYPE_PACK_EXPANSION that provides the types for
7860                the parameters in this function parameter pack.  */
7861             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
7862                                                     complain, in_decl);
7863             if (TREE_CODE (expanded_types) == TREE_VEC)
7864               {
7865                 len = TREE_VEC_LENGTH (expanded_types);
7866
7867                 /* Zero-length parameter packs are boring. Just substitute
7868                    into the chain.  */
7869                 if (len == 0)
7870                   return tsubst (TREE_CHAIN (t), args, complain, 
7871                                  TREE_CHAIN (t));
7872               }
7873             else
7874               {
7875                 /* All we did was update the type. Make a note of that.  */
7876                 type = expanded_types;
7877                 expanded_types = NULL_TREE;
7878               }
7879           }
7880
7881         /* Loop through all of the parameter's we'll build. When T is
7882            a function parameter pack, LEN is the number of expanded
7883            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
7884         r = NULL_TREE;
7885         for (i = 0; i < len; ++i)
7886           {
7887             prev_r = r;
7888             r = copy_node (t);
7889             if (DECL_TEMPLATE_PARM_P (t))
7890               SET_DECL_TEMPLATE_PARM_P (r);
7891
7892             if (expanded_types)
7893               /* We're on the Ith parameter of the function parameter
7894                  pack.  */
7895               {
7896                 /* Get the Ith type.  */
7897                 type = TREE_VEC_ELT (expanded_types, i);
7898
7899                 if (DECL_NAME (r))
7900                   /* Rename the parameter to include the index.  */
7901                   DECL_NAME (r) =
7902                     make_ith_pack_parameter_name (DECL_NAME (r), i);
7903               }
7904             else if (!type)
7905               /* We're dealing with a normal parameter.  */
7906               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7907
7908             type = type_decays_to (type);
7909             TREE_TYPE (r) = type;
7910             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7911
7912             if (DECL_INITIAL (r))
7913               {
7914                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
7915                   DECL_INITIAL (r) = TREE_TYPE (r);
7916                 else
7917                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
7918                                              complain, in_decl);
7919               }
7920
7921             DECL_CONTEXT (r) = NULL_TREE;
7922
7923             if (!DECL_TEMPLATE_PARM_P (r))
7924               DECL_ARG_TYPE (r) = type_passed_as (type);
7925
7926             /* Keep track of the first new parameter we
7927                generate. That's what will be returned to the
7928                caller.  */
7929             if (!first_r)
7930               first_r = r;
7931
7932             /* Build a proper chain of parameters when substituting
7933                into a function parameter pack.  */
7934             if (prev_r)
7935               TREE_CHAIN (prev_r) = r;
7936           }
7937
7938         if (TREE_CHAIN (t))
7939           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
7940                                    complain, TREE_CHAIN (t));
7941
7942         /* FIRST_R contains the start of the chain we've built.  */
7943         r = first_r;
7944       }
7945       break;
7946
7947     case FIELD_DECL:
7948       {
7949         tree type;
7950
7951         r = copy_decl (t);
7952         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7953         if (type == error_mark_node)
7954           return error_mark_node;
7955         TREE_TYPE (r) = type;
7956         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7957
7958         /* DECL_INITIAL gives the number of bits in a bit-field.  */
7959         DECL_INITIAL (r)
7960           = tsubst_expr (DECL_INITIAL (t), args,
7961                          complain, in_decl,
7962                          /*integral_constant_expression_p=*/true);
7963         /* We don't have to set DECL_CONTEXT here; it is set by
7964            finish_member_declaration.  */
7965         TREE_CHAIN (r) = NULL_TREE;
7966         if (VOID_TYPE_P (type))
7967           error ("instantiation of %q+D as type %qT", r, type);
7968       }
7969       break;
7970
7971     case USING_DECL:
7972       /* We reach here only for member using decls.  */
7973       if (DECL_DEPENDENT_P (t))
7974         {
7975           r = do_class_using_decl
7976             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
7977              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
7978           if (!r)
7979             r = error_mark_node;
7980         }
7981       else
7982         {
7983           r = copy_node (t);
7984           TREE_CHAIN (r) = NULL_TREE;
7985         }
7986       break;
7987
7988     case TYPE_DECL:
7989     case VAR_DECL:
7990       {
7991         tree argvec = NULL_TREE;
7992         tree gen_tmpl = NULL_TREE;
7993         tree spec;
7994         tree tmpl = NULL_TREE;
7995         tree ctx;
7996         tree type = NULL_TREE;
7997         bool local_p;
7998
7999         if (TREE_CODE (t) == TYPE_DECL)
8000           {
8001             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8002             if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
8003                 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8004               {
8005                 /* If this is the canonical decl, we don't have to
8006                    mess with instantiations, and often we can't (for
8007                    typename, template type parms and such).  Note that
8008                    TYPE_NAME is not correct for the above test if
8009                    we've copied the type for a typedef.  */
8010                 r = TYPE_NAME (type);
8011                 break;
8012               }
8013           }
8014
8015         /* Check to see if we already have the specialization we
8016            need.  */
8017         spec = NULL_TREE;
8018         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8019           {
8020             /* T is a static data member or namespace-scope entity.
8021                We have to substitute into namespace-scope variables
8022                (even though such entities are never templates) because
8023                of cases like:
8024                
8025                  template <class T> void f() { extern T t; }
8026
8027                where the entity referenced is not known until
8028                instantiation time.  */
8029             local_p = false;
8030             ctx = DECL_CONTEXT (t);
8031             if (DECL_CLASS_SCOPE_P (t))
8032               {
8033                 ctx = tsubst_aggr_type (ctx, args,
8034                                         complain,
8035                                         in_decl, /*entering_scope=*/1);
8036                 /* If CTX is unchanged, then T is in fact the
8037                    specialization we want.  That situation occurs when
8038                    referencing a static data member within in its own
8039                    class.  We can use pointer equality, rather than
8040                    same_type_p, because DECL_CONTEXT is always
8041                    canonical.  */
8042                 if (ctx == DECL_CONTEXT (t))
8043                   spec = t;
8044               }
8045
8046             if (!spec)
8047               {
8048                 tmpl = DECL_TI_TEMPLATE (t);
8049                 gen_tmpl = most_general_template (tmpl);
8050                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8051                 spec = (retrieve_specialization 
8052                         (gen_tmpl, argvec,
8053                          /*class_specializations_p=*/false));
8054               }
8055           }
8056         else
8057           {
8058             /* A local variable.  */
8059             local_p = true;
8060             /* Subsequent calls to pushdecl will fill this in.  */
8061             ctx = NULL_TREE;
8062             spec = retrieve_local_specialization (t);
8063           }
8064         /* If we already have the specialization we need, there is
8065            nothing more to do.  */ 
8066         if (spec)
8067           {
8068             r = spec;
8069             break;
8070           }
8071
8072         /* Create a new node for the specialization we need.  */
8073         r = copy_decl (t);
8074         if (TREE_CODE (r) == VAR_DECL)
8075           {
8076             /* Even if the original location is out of scope, the
8077                newly substituted one is not.  */
8078             DECL_DEAD_FOR_LOCAL (r) = 0;
8079             DECL_INITIALIZED_P (r) = 0;
8080             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8081             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8082             if (type == error_mark_node)
8083               return error_mark_node;
8084             if (TREE_CODE (type) == FUNCTION_TYPE)
8085               {
8086                 /* It may seem that this case cannot occur, since:
8087
8088                      typedef void f();
8089                      void g() { f x; }
8090
8091                    declares a function, not a variable.  However:
8092       
8093                      typedef void f();
8094                      template <typename T> void g() { T t; }
8095                      template void g<f>();
8096
8097                    is an attempt to declare a variable with function
8098                    type.  */
8099                 error ("variable %qD has function type",
8100                        /* R is not yet sufficiently initialized, so we
8101                           just use its name.  */
8102                        DECL_NAME (r));
8103                 return error_mark_node;
8104               }
8105             type = complete_type (type);
8106             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8107               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8108             type = check_var_type (DECL_NAME (r), type);
8109
8110             if (DECL_HAS_VALUE_EXPR_P (t))
8111               {
8112                 tree ve = DECL_VALUE_EXPR (t);
8113                 ve = tsubst_expr (ve, args, complain, in_decl,
8114                                   /*constant_expression_p=*/false);
8115                 SET_DECL_VALUE_EXPR (r, ve);
8116               }
8117           }
8118         else if (DECL_SELF_REFERENCE_P (t))
8119           SET_DECL_SELF_REFERENCE_P (r);
8120         TREE_TYPE (r) = type;
8121         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8122         DECL_CONTEXT (r) = ctx;
8123         /* Clear out the mangled name and RTL for the instantiation.  */
8124         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8125         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8126           SET_DECL_RTL (r, NULL_RTX);
8127         /* The initializer must not be expanded until it is required;
8128            see [temp.inst].  */
8129         DECL_INITIAL (r) = NULL_TREE;
8130         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8131           SET_DECL_RTL (r, NULL_RTX);
8132         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8133         if (TREE_CODE (r) == VAR_DECL)
8134           {
8135             /* Possibly limit visibility based on template args.  */
8136             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8137             if (DECL_VISIBILITY_SPECIFIED (t))
8138               {
8139                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8140                 DECL_ATTRIBUTES (r)
8141                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8142               }
8143             determine_visibility (r);
8144           }
8145
8146         if (!local_p)
8147           {
8148             /* A static data member declaration is always marked
8149                external when it is declared in-class, even if an
8150                initializer is present.  We mimic the non-template
8151                processing here.  */
8152             DECL_EXTERNAL (r) = 1;
8153
8154             register_specialization (r, gen_tmpl, argvec, false);
8155             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8156             SET_DECL_IMPLICIT_INSTANTIATION (r);
8157           }
8158         else
8159           register_local_specialization (r, t);
8160
8161         TREE_CHAIN (r) = NULL_TREE;
8162         layout_decl (r, 0);
8163       }
8164       break;
8165
8166     default:
8167       gcc_unreachable ();
8168     }
8169
8170   /* Restore the file and line information.  */
8171   input_location = saved_loc;
8172
8173   return r;
8174 }
8175
8176 /* Substitute into the ARG_TYPES of a function type.  */
8177
8178 static tree
8179 tsubst_arg_types (tree arg_types,
8180                   tree args,
8181                   tsubst_flags_t complain,
8182                   tree in_decl)
8183 {
8184   tree remaining_arg_types;
8185   tree type = NULL_TREE;
8186   int i = 1;
8187   tree expanded_args = NULL_TREE;
8188   tree default_arg;
8189
8190   if (!arg_types || arg_types == void_list_node)
8191     return arg_types;
8192
8193   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8194                                           args, complain, in_decl);
8195   if (remaining_arg_types == error_mark_node)
8196     return error_mark_node;
8197
8198   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8199     {
8200       /* For a pack expansion, perform substitution on the
8201          entire expression. Later on, we'll handle the arguments
8202          one-by-one.  */
8203       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8204                                             args, complain, in_decl);
8205
8206       if (TREE_CODE (expanded_args) == TREE_VEC)
8207         /* So that we'll spin through the parameters, one by one.  */
8208         i = TREE_VEC_LENGTH (expanded_args);
8209       else
8210         {
8211           /* We only partially substituted into the parameter
8212              pack. Our type is TYPE_PACK_EXPANSION.  */
8213           type = expanded_args;
8214           expanded_args = NULL_TREE;
8215         }
8216     }
8217
8218   while (i > 0) {
8219     --i;
8220     
8221     if (expanded_args)
8222       type = TREE_VEC_ELT (expanded_args, i);
8223     else if (!type)
8224       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8225
8226     if (type == error_mark_node)
8227       return error_mark_node;
8228     if (VOID_TYPE_P (type))
8229       {
8230         if (complain & tf_error)
8231           {
8232             error ("invalid parameter type %qT", type);
8233             if (in_decl)
8234               error ("in declaration %q+D", in_decl);
8235           }
8236         return error_mark_node;
8237     }
8238     
8239     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8240        top-level qualifiers as required.  */
8241     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8242
8243     /* We do not substitute into default arguments here.  The standard
8244        mandates that they be instantiated only when needed, which is
8245        done in build_over_call.  */
8246     default_arg = TREE_PURPOSE (arg_types);
8247
8248     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8249       {
8250         /* We've instantiated a template before its default arguments
8251            have been parsed.  This can happen for a nested template
8252            class, and is not an error unless we require the default
8253            argument in a call of this function.  */
8254         remaining_arg_types = 
8255           tree_cons (default_arg, type, remaining_arg_types);
8256         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8257                        remaining_arg_types);
8258       }
8259     else
8260       remaining_arg_types = 
8261         hash_tree_cons (default_arg, type, remaining_arg_types);
8262   }
8263         
8264   return remaining_arg_types;
8265 }
8266
8267 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8268    *not* handle the exception-specification for FNTYPE, because the
8269    initial substitution of explicitly provided template parameters
8270    during argument deduction forbids substitution into the
8271    exception-specification:
8272
8273      [temp.deduct]
8274
8275      All references in the function type of the function template to  the
8276      corresponding template parameters are replaced by the specified tem-
8277      plate argument values.  If a substitution in a template parameter or
8278      in  the function type of the function template results in an invalid
8279      type, type deduction fails.  [Note: The equivalent  substitution  in
8280      exception specifications is done only when the function is instanti-
8281      ated, at which point a program is  ill-formed  if  the  substitution
8282      results in an invalid type.]  */
8283
8284 static tree
8285 tsubst_function_type (tree t,
8286                       tree args,
8287                       tsubst_flags_t complain,
8288                       tree in_decl)
8289 {
8290   tree return_type;
8291   tree arg_types;
8292   tree fntype;
8293
8294   /* The TYPE_CONTEXT is not used for function/method types.  */
8295   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8296
8297   /* Substitute the return type.  */
8298   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8299   if (return_type == error_mark_node)
8300     return error_mark_node;
8301   /* The standard does not presently indicate that creation of a
8302      function type with an invalid return type is a deduction failure.
8303      However, that is clearly analogous to creating an array of "void"
8304      or a reference to a reference.  This is core issue #486.  */
8305   if (TREE_CODE (return_type) == ARRAY_TYPE
8306       || TREE_CODE (return_type) == FUNCTION_TYPE)
8307     {
8308       if (complain & tf_error)
8309         {
8310           if (TREE_CODE (return_type) == ARRAY_TYPE)
8311             error ("function returning an array");
8312           else
8313             error ("function returning a function");
8314         }
8315       return error_mark_node;
8316     }
8317
8318   /* Substitute the argument types.  */
8319   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8320                                 complain, in_decl);
8321   if (arg_types == error_mark_node)
8322     return error_mark_node;
8323
8324   if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8325       && in_decl != NULL_TREE
8326       && !TREE_NO_WARNING (in_decl)
8327       && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8328     warning (OPT_Wreturn_type,
8329             "type qualifiers ignored on function return type");
8330
8331   /* Construct a new type node and return it.  */
8332   if (TREE_CODE (t) == FUNCTION_TYPE)
8333     fntype = build_function_type (return_type, arg_types);
8334   else
8335     {
8336       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8337       if (! IS_AGGR_TYPE (r))
8338         {
8339           /* [temp.deduct]
8340
8341              Type deduction may fail for any of the following
8342              reasons:
8343
8344              -- Attempting to create "pointer to member of T" when T
8345              is not a class type.  */
8346           if (complain & tf_error)
8347             error ("creating pointer to member function of non-class type %qT",
8348                       r);
8349           return error_mark_node;
8350         }
8351
8352       fntype = build_method_type_directly (r, return_type,
8353                                            TREE_CHAIN (arg_types));
8354     }
8355   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8356   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8357
8358   return fntype;
8359 }
8360
8361 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8362    ARGS into that specification, and return the substituted
8363    specification.  If there is no specification, return NULL_TREE.  */
8364
8365 static tree
8366 tsubst_exception_specification (tree fntype,
8367                                 tree args,
8368                                 tsubst_flags_t complain,
8369                                 tree in_decl)
8370 {
8371   tree specs;
8372   tree new_specs;
8373
8374   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8375   new_specs = NULL_TREE;
8376   if (specs)
8377     {
8378       if (! TREE_VALUE (specs))
8379         new_specs = specs;
8380       else
8381         while (specs)
8382           {
8383             tree spec;
8384             int i, len = 1;
8385             tree expanded_specs = NULL_TREE;
8386
8387             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8388               {
8389                 /* Expand the pack expansion type.  */
8390                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8391                                                        args, complain,
8392                                                        in_decl);
8393                 len = TREE_VEC_LENGTH (expanded_specs);
8394               }
8395
8396             for (i = 0; i < len; ++i)
8397               {
8398                 if (expanded_specs)
8399                   spec = TREE_VEC_ELT (expanded_specs, i);
8400                 else
8401                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8402                 if (spec == error_mark_node)
8403                   return spec;
8404                 new_specs = add_exception_specifier (new_specs, spec, 
8405                                                      complain);
8406               }
8407
8408             specs = TREE_CHAIN (specs);
8409           }
8410     }
8411   return new_specs;
8412 }
8413
8414 /* Take the tree structure T and replace template parameters used
8415    therein with the argument vector ARGS.  IN_DECL is an associated
8416    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8417    Issue error and warning messages under control of COMPLAIN.  Note
8418    that we must be relatively non-tolerant of extensions here, in
8419    order to preserve conformance; if we allow substitutions that
8420    should not be allowed, we may allow argument deductions that should
8421    not succeed, and therefore report ambiguous overload situations
8422    where there are none.  In theory, we could allow the substitution,
8423    but indicate that it should have failed, and allow our caller to
8424    make sure that the right thing happens, but we don't try to do this
8425    yet.
8426
8427    This function is used for dealing with types, decls and the like;
8428    for expressions, use tsubst_expr or tsubst_copy.  */
8429
8430 static tree
8431 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8432 {
8433   tree type, r;
8434
8435   if (t == NULL_TREE || t == error_mark_node
8436       || t == integer_type_node
8437       || t == void_type_node
8438       || t == char_type_node
8439       || t == unknown_type_node
8440       || TREE_CODE (t) == NAMESPACE_DECL)
8441     return t;
8442
8443   if (DECL_P (t))
8444     return tsubst_decl (t, args, complain);
8445
8446   if (TREE_CODE (t) == IDENTIFIER_NODE)
8447     type = IDENTIFIER_TYPE_VALUE (t);
8448   else
8449     type = TREE_TYPE (t);
8450
8451   gcc_assert (type != unknown_type_node);
8452
8453   if (type
8454       && TREE_CODE (t) != TYPENAME_TYPE
8455       && TREE_CODE (t) != IDENTIFIER_NODE
8456       && TREE_CODE (t) != FUNCTION_TYPE
8457       && TREE_CODE (t) != METHOD_TYPE)
8458     type = tsubst (type, args, complain, in_decl);
8459   if (type == error_mark_node)
8460     return error_mark_node;
8461
8462   switch (TREE_CODE (t))
8463     {
8464     case RECORD_TYPE:
8465     case UNION_TYPE:
8466     case ENUMERAL_TYPE:
8467       return tsubst_aggr_type (t, args, complain, in_decl,
8468                                /*entering_scope=*/0);
8469
8470     case ERROR_MARK:
8471     case IDENTIFIER_NODE:
8472     case VOID_TYPE:
8473     case REAL_TYPE:
8474     case COMPLEX_TYPE:
8475     case VECTOR_TYPE:
8476     case BOOLEAN_TYPE:
8477     case INTEGER_CST:
8478     case REAL_CST:
8479     case STRING_CST:
8480       return t;
8481
8482     case INTEGER_TYPE:
8483       if (t == integer_type_node)
8484         return t;
8485
8486       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8487           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8488         return t;
8489
8490       {
8491         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8492
8493         max = tsubst_expr (omax, args, complain, in_decl,
8494                            /*integral_constant_expression_p=*/false);
8495         max = fold_decl_constant_value (max);
8496
8497         if (TREE_CODE (max) != INTEGER_CST 
8498             && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8499             && !at_function_scope_p ())
8500           {
8501             if (complain & tf_error)
8502               error ("array bound is not an integer constant");
8503             return error_mark_node;
8504           }
8505
8506         /* [temp.deduct]
8507
8508            Type deduction may fail for any of the following
8509            reasons:
8510
8511              Attempting to create an array with a size that is
8512              zero or negative.  */
8513         if (integer_zerop (max) && !(complain & tf_error))
8514           /* We must fail if performing argument deduction (as
8515              indicated by the state of complain), so that
8516              another substitution can be found.  */
8517           return error_mark_node;
8518         else if (TREE_CODE (max) == INTEGER_CST
8519                  && INT_CST_LT (max, integer_zero_node))
8520           {
8521             if (complain & tf_error)
8522               error ("creating array with negative size (%qE)", max);
8523
8524             return error_mark_node;
8525           }
8526
8527         return compute_array_index_type (NULL_TREE, max);
8528       }
8529
8530     case TEMPLATE_TYPE_PARM:
8531     case TEMPLATE_TEMPLATE_PARM:
8532     case BOUND_TEMPLATE_TEMPLATE_PARM:
8533     case TEMPLATE_PARM_INDEX:
8534       {
8535         int idx;
8536         int level;
8537         int levels;
8538         tree arg = NULL_TREE;
8539
8540         r = NULL_TREE;
8541
8542         gcc_assert (TREE_VEC_LENGTH (args) > 0);
8543         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8544             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
8545             || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8546           {
8547             idx = TEMPLATE_TYPE_IDX (t);
8548             level = TEMPLATE_TYPE_LEVEL (t);
8549           }
8550         else
8551           {
8552             idx = TEMPLATE_PARM_IDX (t);
8553             level = TEMPLATE_PARM_LEVEL (t);
8554           }
8555
8556         levels = TMPL_ARGS_DEPTH (args);
8557         if (level <= levels)
8558           {
8559             arg = TMPL_ARG (args, level, idx);
8560
8561             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8562               /* See through ARGUMENT_PACK_SELECT arguments. */
8563               arg = ARGUMENT_PACK_SELECT_ARG (arg);
8564           }
8565
8566         if (arg == error_mark_node)
8567           return error_mark_node;
8568         else if (arg != NULL_TREE)
8569           {
8570             if (ARGUMENT_PACK_P (arg))
8571               /* If ARG is an argument pack, we don't actually want to
8572                  perform a substitution here, because substitutions
8573                  for argument packs are only done
8574                  element-by-element. We can get to this point when
8575                  substituting the type of a non-type template
8576                  parameter pack, when that type actually contains
8577                  template parameter packs from an outer template, e.g.,
8578
8579                  template<typename... Types> struct A {
8580                    template<Types... Values> struct B { };
8581                  };  */
8582               return t;
8583
8584             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8585               {
8586                 int quals;
8587                 gcc_assert (TYPE_P (arg));
8588
8589                 /* cv-quals from the template are discarded when
8590                    substituting in a function or reference type.  */
8591                 if (TREE_CODE (arg) == FUNCTION_TYPE
8592                     || TREE_CODE (arg) == METHOD_TYPE
8593                     || TREE_CODE (arg) == REFERENCE_TYPE)
8594                   quals = cp_type_quals (arg);
8595                 else
8596                   quals = cp_type_quals (arg) | cp_type_quals (t);
8597                   
8598                 return cp_build_qualified_type_real
8599                   (arg, quals, complain | tf_ignore_bad_quals);
8600               }
8601             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8602               {
8603                 /* We are processing a type constructed from a
8604                    template template parameter.  */
8605                 tree argvec = tsubst (TYPE_TI_ARGS (t),
8606                                       args, complain, in_decl);
8607                 if (argvec == error_mark_node)
8608                   return error_mark_node;
8609
8610                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8611                    are resolving nested-types in the signature of a
8612                    member function templates.  Otherwise ARG is a
8613                    TEMPLATE_DECL and is the real template to be
8614                    instantiated.  */
8615                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8616                   arg = TYPE_NAME (arg);
8617
8618                 r = lookup_template_class (arg,
8619                                            argvec, in_decl,
8620                                            DECL_CONTEXT (arg),
8621                                             /*entering_scope=*/0,
8622                                            complain);
8623                 return cp_build_qualified_type_real
8624                   (r, TYPE_QUALS (t), complain);
8625               }
8626             else
8627               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
8628               return arg;
8629           }
8630
8631         if (level == 1)
8632           /* This can happen during the attempted tsubst'ing in
8633              unify.  This means that we don't yet have any information
8634              about the template parameter in question.  */
8635           return t;
8636
8637         /* If we get here, we must have been looking at a parm for a
8638            more deeply nested template.  Make a new version of this
8639            template parameter, but with a lower level.  */
8640         switch (TREE_CODE (t))
8641           {
8642           case TEMPLATE_TYPE_PARM:
8643           case TEMPLATE_TEMPLATE_PARM:
8644           case BOUND_TEMPLATE_TEMPLATE_PARM:
8645             if (cp_type_quals (t))
8646               {
8647                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
8648                 r = cp_build_qualified_type_real
8649                   (r, cp_type_quals (t),
8650                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8651                                ? tf_ignore_bad_quals : 0));
8652               }
8653             else
8654               {
8655                 r = copy_type (t);
8656                 TEMPLATE_TYPE_PARM_INDEX (r)
8657                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8658                                                 r, levels);
8659                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8660                 TYPE_MAIN_VARIANT (r) = r;
8661                 TYPE_POINTER_TO (r) = NULL_TREE;
8662                 TYPE_REFERENCE_TO (r) = NULL_TREE;
8663
8664                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8665                   /* We have reduced the level of the template
8666                      template parameter, but not the levels of its
8667                      template parameters, so canonical_type_parameter
8668                      will not be able to find the canonical template
8669                      template parameter for this level. Thus, we
8670                      require structural equality checking to compare
8671                      TEMPLATE_TEMPLATE_PARMs. */
8672                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8673                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8674                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8675                 else
8676                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
8677
8678                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8679                   {
8680                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
8681                                           complain, in_decl);
8682                     if (argvec == error_mark_node)
8683                       return error_mark_node;
8684
8685                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8686                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8687                   }
8688               }
8689             break;
8690
8691           case TEMPLATE_PARM_INDEX:
8692             r = reduce_template_parm_level (t, type, levels);
8693             break;
8694
8695           default:
8696             gcc_unreachable ();
8697           }
8698
8699         return r;
8700       }
8701
8702     case TREE_LIST:
8703       {
8704         tree purpose, value, chain;
8705
8706         if (t == void_list_node)
8707           return t;
8708
8709         purpose = TREE_PURPOSE (t);
8710         if (purpose)
8711           {
8712             purpose = tsubst (purpose, args, complain, in_decl);
8713             if (purpose == error_mark_node)
8714               return error_mark_node;
8715           }
8716         value = TREE_VALUE (t);
8717         if (value)
8718           {
8719             value = tsubst (value, args, complain, in_decl);
8720             if (value == error_mark_node)
8721               return error_mark_node;
8722           }
8723         chain = TREE_CHAIN (t);
8724         if (chain && chain != void_type_node)
8725           {
8726             chain = tsubst (chain, args, complain, in_decl);
8727             if (chain == error_mark_node)
8728               return error_mark_node;
8729           }
8730         if (purpose == TREE_PURPOSE (t)
8731             && value == TREE_VALUE (t)
8732             && chain == TREE_CHAIN (t))
8733           return t;
8734         return hash_tree_cons (purpose, value, chain);
8735       }
8736
8737     case TREE_BINFO:
8738       /* We should never be tsubsting a binfo.  */
8739       gcc_unreachable ();
8740
8741     case TREE_VEC:
8742       /* A vector of template arguments.  */
8743       gcc_assert (!type);
8744       return tsubst_template_args (t, args, complain, in_decl);
8745
8746     case POINTER_TYPE:
8747     case REFERENCE_TYPE:
8748       {
8749         enum tree_code code;
8750
8751         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8752           return t;
8753
8754         code = TREE_CODE (t);
8755
8756
8757         /* [temp.deduct]
8758
8759            Type deduction may fail for any of the following
8760            reasons:
8761
8762            -- Attempting to create a pointer to reference type.
8763            -- Attempting to create a reference to a reference type or
8764               a reference to void.
8765
8766           Core issue 106 says that creating a reference to a reference
8767           during instantiation is no longer a cause for failure. We
8768           only enforce this check in strict C++98 mode.  */
8769         if ((TREE_CODE (type) == REFERENCE_TYPE
8770              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
8771             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
8772           {
8773             static location_t last_loc;
8774
8775             /* We keep track of the last time we issued this error
8776                message to avoid spewing a ton of messages during a
8777                single bad template instantiation.  */
8778             if (complain & tf_error
8779 #ifdef USE_MAPPED_LOCATION
8780                 && last_loc != input_location
8781 #else
8782                 && (last_loc.line != input_line
8783                     || last_loc.file != input_filename)
8784 #endif
8785                   )
8786               {
8787                 if (TREE_CODE (type) == VOID_TYPE)
8788                   error ("forming reference to void");
8789                 else
8790                   error ("forming %s to reference type %qT",
8791                          (code == POINTER_TYPE) ? "pointer" : "reference",
8792                          type);
8793                 last_loc = input_location;
8794               }
8795
8796             return error_mark_node;
8797           }
8798         else if (code == POINTER_TYPE)
8799           {
8800             r = build_pointer_type (type);
8801             if (TREE_CODE (type) == METHOD_TYPE)
8802               r = build_ptrmemfunc_type (r);
8803           }
8804         else if (TREE_CODE (type) == REFERENCE_TYPE)
8805           /* In C++0x, during template argument substitution, when there is an
8806              attempt to create a reference to a reference type, reference
8807              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8808
8809              "If a template-argument for a template-parameter T names a type
8810              that is a reference to a type A, an attempt to create the type
8811              'lvalue reference to cv T' creates the type 'lvalue reference to
8812              A,' while an attempt to create the type type rvalue reference to
8813              cv T' creates the type T"
8814           */
8815           r = cp_build_reference_type
8816               (TREE_TYPE (type),
8817                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
8818         else
8819           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
8820         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8821
8822         if (r != error_mark_node)
8823           /* Will this ever be needed for TYPE_..._TO values?  */
8824           layout_type (r);
8825
8826         return r;
8827       }
8828     case OFFSET_TYPE:
8829       {
8830         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
8831         if (r == error_mark_node || !IS_AGGR_TYPE (r))
8832           {
8833             /* [temp.deduct]
8834
8835                Type deduction may fail for any of the following
8836                reasons:
8837
8838                -- Attempting to create "pointer to member of T" when T
8839                   is not a class type.  */
8840             if (complain & tf_error)
8841               error ("creating pointer to member of non-class type %qT", r);
8842             return error_mark_node;
8843           }
8844         if (TREE_CODE (type) == REFERENCE_TYPE)
8845           {
8846             if (complain & tf_error)
8847               error ("creating pointer to member reference type %qT", type);
8848             return error_mark_node;
8849           }
8850         if (TREE_CODE (type) == VOID_TYPE)
8851           {
8852             if (complain & tf_error)
8853               error ("creating pointer to member of type void");
8854             return error_mark_node;
8855           }
8856         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
8857         if (TREE_CODE (type) == FUNCTION_TYPE)
8858           {
8859             /* The type of the implicit object parameter gets its
8860                cv-qualifiers from the FUNCTION_TYPE. */
8861             tree method_type;
8862             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
8863                                                       cp_type_quals (type));
8864             tree memptr;
8865             method_type = build_method_type_directly (this_type,
8866                                                       TREE_TYPE (type),
8867                                                       TYPE_ARG_TYPES (type));
8868             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
8869             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
8870                                                  complain);
8871           }
8872         else
8873           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
8874                                                TYPE_QUALS (t),
8875                                                complain);
8876       }
8877     case FUNCTION_TYPE:
8878     case METHOD_TYPE:
8879       {
8880         tree fntype;
8881         tree specs;
8882         fntype = tsubst_function_type (t, args, complain, in_decl);
8883         if (fntype == error_mark_node)
8884           return error_mark_node;
8885
8886         /* Substitute the exception specification.  */
8887         specs = tsubst_exception_specification (t, args, complain,
8888                                                 in_decl);
8889         if (specs == error_mark_node)
8890           return error_mark_node;
8891         if (specs)
8892           fntype = build_exception_variant (fntype, specs);
8893         return fntype;
8894       }
8895     case ARRAY_TYPE:
8896       {
8897         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
8898         if (domain == error_mark_node)
8899           return error_mark_node;
8900
8901         /* As an optimization, we avoid regenerating the array type if
8902            it will obviously be the same as T.  */
8903         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
8904           return t;
8905
8906         /* These checks should match the ones in grokdeclarator.
8907
8908            [temp.deduct]
8909
8910            The deduction may fail for any of the following reasons:
8911
8912            -- Attempting to create an array with an element type that
8913               is void, a function type, or a reference type, or [DR337]
8914               an abstract class type.  */
8915         if (TREE_CODE (type) == VOID_TYPE
8916             || TREE_CODE (type) == FUNCTION_TYPE
8917             || TREE_CODE (type) == REFERENCE_TYPE)
8918           {
8919             if (complain & tf_error)
8920               error ("creating array of %qT", type);
8921             return error_mark_node;
8922           }
8923         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
8924           {
8925             if (complain & tf_error)
8926               error ("creating array of %qT, which is an abstract class type",
8927                      type);
8928             return error_mark_node;
8929           }
8930
8931         r = build_cplus_array_type (type, domain);
8932         return r;
8933       }
8934
8935     case PLUS_EXPR:
8936     case MINUS_EXPR:
8937       {
8938         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8939         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
8940
8941         if (e1 == error_mark_node || e2 == error_mark_node)
8942           return error_mark_node;
8943
8944         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
8945       }
8946
8947     case NEGATE_EXPR:
8948     case NOP_EXPR:
8949       {
8950         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8951         if (e == error_mark_node)
8952           return error_mark_node;
8953
8954         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
8955       }
8956
8957     case TYPENAME_TYPE:
8958       {
8959         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
8960                                      in_decl, /*entering_scope=*/1);
8961         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
8962                               complain, in_decl);
8963
8964         if (ctx == error_mark_node || f == error_mark_node)
8965           return error_mark_node;
8966
8967         if (!IS_AGGR_TYPE (ctx))
8968           {
8969             if (complain & tf_error)
8970               error ("%qT is not a class, struct, or union type", ctx);
8971             return error_mark_node;
8972           }
8973         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
8974           {
8975             /* Normally, make_typename_type does not require that the CTX
8976                have complete type in order to allow things like:
8977
8978                  template <class T> struct S { typename S<T>::X Y; };
8979
8980                But, such constructs have already been resolved by this
8981                point, so here CTX really should have complete type, unless
8982                it's a partial instantiation.  */
8983             ctx = complete_type (ctx);
8984             if (!COMPLETE_TYPE_P (ctx))
8985               {
8986                 if (complain & tf_error)
8987                   cxx_incomplete_type_error (NULL_TREE, ctx);
8988                 return error_mark_node;
8989               }
8990           }
8991
8992         f = make_typename_type (ctx, f, typename_type,
8993                                 (complain & tf_error) | tf_keep_type_decl);
8994         if (f == error_mark_node)
8995           return f;
8996         if (TREE_CODE (f) == TYPE_DECL)
8997           {
8998             complain |= tf_ignore_bad_quals;
8999             f = TREE_TYPE (f);
9000           }
9001
9002         if (TREE_CODE (f) != TYPENAME_TYPE)
9003           {
9004             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9005               error ("%qT resolves to %qT, which is not an enumeration type",
9006                      t, f);
9007             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9008               error ("%qT resolves to %qT, which is is not a class type",
9009                      t, f);
9010           }
9011
9012         return cp_build_qualified_type_real
9013           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9014       }
9015
9016     case UNBOUND_CLASS_TEMPLATE:
9017       {
9018         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9019                                      in_decl, /*entering_scope=*/1);
9020         tree name = TYPE_IDENTIFIER (t);
9021         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9022
9023         if (ctx == error_mark_node || name == error_mark_node)
9024           return error_mark_node;
9025
9026         if (parm_list)
9027           parm_list = tsubst_template_parms (parm_list, args, complain);
9028         return make_unbound_class_template (ctx, name, parm_list, complain);
9029       }
9030
9031     case INDIRECT_REF:
9032     case ADDR_EXPR:
9033     case CALL_EXPR:
9034       gcc_unreachable ();
9035
9036     case ARRAY_REF:
9037       {
9038         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9039         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9040                                /*integral_constant_expression_p=*/false);
9041         if (e1 == error_mark_node || e2 == error_mark_node)
9042           return error_mark_node;
9043
9044         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9045       }
9046
9047     case SCOPE_REF:
9048       {
9049         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9050         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9051         if (e1 == error_mark_node || e2 == error_mark_node)
9052           return error_mark_node;
9053
9054         return build_qualified_name (/*type=*/NULL_TREE,
9055                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9056       }
9057
9058     case TYPEOF_TYPE:
9059       {
9060         tree type;
9061
9062         type = finish_typeof (tsubst_expr 
9063                               (TYPEOF_TYPE_EXPR (t), args,
9064                                complain, in_decl,
9065                                /*integral_constant_expression_p=*/false));
9066         return cp_build_qualified_type_real (type,
9067                                              cp_type_quals (t)
9068                                              | cp_type_quals (type),
9069                                              complain);
9070       }
9071
9072     case TYPE_ARGUMENT_PACK:
9073     case NONTYPE_ARGUMENT_PACK:
9074       {
9075         tree r = make_node (TREE_CODE (t));
9076         tree packed_out = 
9077           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9078                                 args,
9079                                 complain,
9080                                 in_decl);
9081         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9082
9083         /* For template nontype argument packs, also substitute into
9084            the type.  */
9085         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9086           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9087
9088         return r;
9089       }
9090       break;
9091
9092     default:
9093       sorry ("use of %qs in template",
9094              tree_code_name [(int) TREE_CODE (t)]);
9095       return error_mark_node;
9096     }
9097 }
9098
9099 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9100    type of the expression on the left-hand side of the "." or "->"
9101    operator.  */
9102
9103 static tree
9104 tsubst_baselink (tree baselink, tree object_type,
9105                  tree args, tsubst_flags_t complain, tree in_decl)
9106 {
9107     tree name;
9108     tree qualifying_scope;
9109     tree fns;
9110     tree optype;
9111     tree template_args = 0;
9112     bool template_id_p = false;
9113
9114     /* A baselink indicates a function from a base class.  Both the
9115        BASELINK_ACCESS_BINFO and the base class referenced may
9116        indicate bases of the template class, rather than the
9117        instantiated class.  In addition, lookups that were not
9118        ambiguous before may be ambiguous now.  Therefore, we perform
9119        the lookup again.  */
9120     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9121     qualifying_scope = tsubst (qualifying_scope, args,
9122                                complain, in_decl);
9123     fns = BASELINK_FUNCTIONS (baselink);
9124     optype = BASELINK_OPTYPE (baselink);
9125     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9126       {
9127         template_id_p = true;
9128         template_args = TREE_OPERAND (fns, 1);
9129         fns = TREE_OPERAND (fns, 0);
9130         if (template_args)
9131           template_args = tsubst_template_args (template_args, args,
9132                                                 complain, in_decl);
9133       }
9134     name = DECL_NAME (get_first_fn (fns));
9135     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9136
9137     /* If lookup found a single function, mark it as used at this
9138        point.  (If it lookup found multiple functions the one selected
9139        later by overload resolution will be marked as used at that
9140        point.)  */
9141     if (BASELINK_P (baselink))
9142       fns = BASELINK_FUNCTIONS (baselink);
9143     if (!template_id_p && !really_overloaded_fn (fns))
9144       mark_used (OVL_CURRENT (fns));
9145
9146     /* Add back the template arguments, if present.  */
9147     if (BASELINK_P (baselink) && template_id_p)
9148       BASELINK_FUNCTIONS (baselink)
9149         = build_nt (TEMPLATE_ID_EXPR,
9150                     BASELINK_FUNCTIONS (baselink),
9151                     template_args);
9152     /* Update the conversion operator type.  */
9153     BASELINK_OPTYPE (baselink) 
9154       = tsubst (optype, args, complain, in_decl);
9155
9156     if (!object_type)
9157       object_type = current_class_type;
9158     return adjust_result_of_qualified_name_lookup (baselink,
9159                                                    qualifying_scope,
9160                                                    object_type);
9161 }
9162
9163 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9164    true if the qualified-id will be a postfix-expression in-and-of
9165    itself; false if more of the postfix-expression follows the
9166    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9167    of "&".  */
9168
9169 static tree
9170 tsubst_qualified_id (tree qualified_id, tree args,
9171                      tsubst_flags_t complain, tree in_decl,
9172                      bool done, bool address_p)
9173 {
9174   tree expr;
9175   tree scope;
9176   tree name;
9177   bool is_template;
9178   tree template_args;
9179
9180   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9181
9182   /* Figure out what name to look up.  */
9183   name = TREE_OPERAND (qualified_id, 1);
9184   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9185     {
9186       is_template = true;
9187       template_args = TREE_OPERAND (name, 1);
9188       if (template_args)
9189         template_args = tsubst_template_args (template_args, args,
9190                                               complain, in_decl);
9191       name = TREE_OPERAND (name, 0);
9192     }
9193   else
9194     {
9195       is_template = false;
9196       template_args = NULL_TREE;
9197     }
9198
9199   /* Substitute into the qualifying scope.  When there are no ARGS, we
9200      are just trying to simplify a non-dependent expression.  In that
9201      case the qualifying scope may be dependent, and, in any case,
9202      substituting will not help.  */
9203   scope = TREE_OPERAND (qualified_id, 0);
9204   if (args)
9205     {
9206       scope = tsubst (scope, args, complain, in_decl);
9207       expr = tsubst_copy (name, args, complain, in_decl);
9208     }
9209   else
9210     expr = name;
9211
9212   if (dependent_type_p (scope))
9213     return build_qualified_name (/*type=*/NULL_TREE,
9214                                  scope, expr,
9215                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9216
9217   if (!BASELINK_P (name) && !DECL_P (expr))
9218     {
9219       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9220         /* If this were actually a destructor call, it would have been
9221            parsed as such by the parser.  */
9222         expr = error_mark_node;
9223       else
9224         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9225       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9226                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9227         {
9228           if (complain & tf_error)
9229             {
9230               error ("dependent-name %qE is parsed as a non-type, but "
9231                      "instantiation yields a type", qualified_id);
9232               inform ("say %<typename %E%> if a type is meant", qualified_id);
9233             }
9234           return error_mark_node;
9235         }
9236     }
9237
9238   if (DECL_P (expr))
9239     {
9240       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9241                                            scope);
9242       /* Remember that there was a reference to this entity.  */
9243       mark_used (expr);
9244     }
9245
9246   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9247     {
9248       if (complain & tf_error)
9249         qualified_name_lookup_error (scope,
9250                                      TREE_OPERAND (qualified_id, 1),
9251                                      expr);
9252       return error_mark_node;
9253     }
9254
9255   if (is_template)
9256     expr = lookup_template_function (expr, template_args);
9257
9258   if (expr == error_mark_node && complain & tf_error)
9259     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9260                                  expr);
9261   else if (TYPE_P (scope))
9262     {
9263       expr = (adjust_result_of_qualified_name_lookup
9264               (expr, scope, current_class_type));
9265       expr = (finish_qualified_id_expr
9266               (scope, expr, done, address_p,
9267                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9268                /*template_arg_p=*/false));
9269     }
9270
9271   /* Expressions do not generally have reference type.  */
9272   if (TREE_CODE (expr) != SCOPE_REF
9273       /* However, if we're about to form a pointer-to-member, we just
9274          want the referenced member referenced.  */
9275       && TREE_CODE (expr) != OFFSET_REF)
9276     expr = convert_from_reference (expr);
9277
9278   return expr;
9279 }
9280
9281 /* Like tsubst, but deals with expressions.  This function just replaces
9282    template parms; to finish processing the resultant expression, use
9283    tsubst_expr.  */
9284
9285 static tree
9286 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9287 {
9288   enum tree_code code;
9289   tree r;
9290
9291   if (t == NULL_TREE || t == error_mark_node)
9292     return t;
9293
9294   code = TREE_CODE (t);
9295
9296   switch (code)
9297     {
9298     case PARM_DECL:
9299       r = retrieve_local_specialization (t);
9300       gcc_assert (r != NULL);
9301       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9302         r = ARGUMENT_PACK_SELECT_ARG (r);
9303       mark_used (r);
9304       return r;
9305
9306     case CONST_DECL:
9307       {
9308         tree enum_type;
9309         tree v;
9310
9311         if (DECL_TEMPLATE_PARM_P (t))
9312           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9313         /* There is no need to substitute into namespace-scope
9314            enumerators.  */
9315         if (DECL_NAMESPACE_SCOPE_P (t))
9316           return t;
9317         /* If ARGS is NULL, then T is known to be non-dependent.  */
9318         if (args == NULL_TREE)
9319           return integral_constant_value (t);
9320
9321         /* Unfortunately, we cannot just call lookup_name here.
9322            Consider:
9323
9324              template <int I> int f() {
9325              enum E { a = I };
9326              struct S { void g() { E e = a; } };
9327              };
9328
9329            When we instantiate f<7>::S::g(), say, lookup_name is not
9330            clever enough to find f<7>::a.  */
9331         enum_type
9332           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9333                               /*entering_scope=*/0);
9334
9335         for (v = TYPE_VALUES (enum_type);
9336              v != NULL_TREE;
9337              v = TREE_CHAIN (v))
9338           if (TREE_PURPOSE (v) == DECL_NAME (t))
9339             return TREE_VALUE (v);
9340
9341           /* We didn't find the name.  That should never happen; if
9342              name-lookup found it during preliminary parsing, we
9343              should find it again here during instantiation.  */
9344         gcc_unreachable ();
9345       }
9346       return t;
9347
9348     case FIELD_DECL:
9349       if (DECL_CONTEXT (t))
9350         {
9351           tree ctx;
9352
9353           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9354                                   /*entering_scope=*/1);
9355           if (ctx != DECL_CONTEXT (t))
9356             {
9357               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9358               if (!r)
9359                 {
9360                   if (complain & tf_error)
9361                     error ("using invalid field %qD", t);
9362                   return error_mark_node;
9363                 }
9364               return r;
9365             }
9366         }
9367
9368       return t;
9369
9370     case VAR_DECL:
9371     case FUNCTION_DECL:
9372       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9373           || local_variable_p (t))
9374         t = tsubst (t, args, complain, in_decl);
9375       mark_used (t);
9376       return t;
9377
9378     case BASELINK:
9379       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9380
9381     case TEMPLATE_DECL:
9382       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9383         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9384                        args, complain, in_decl);
9385       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9386         return tsubst (t, args, complain, in_decl);
9387       else if (DECL_CLASS_SCOPE_P (t)
9388                && uses_template_parms (DECL_CONTEXT (t)))
9389         {
9390           /* Template template argument like the following example need
9391              special treatment:
9392
9393                template <template <class> class TT> struct C {};
9394                template <class T> struct D {
9395                  template <class U> struct E {};
9396                  C<E> c;                                // #1
9397                };
9398                D<int> d;                                // #2
9399
9400              We are processing the template argument `E' in #1 for
9401              the template instantiation #2.  Originally, `E' is a
9402              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9403              have to substitute this with one having context `D<int>'.  */
9404
9405           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9406           return lookup_field (context, DECL_NAME(t), 0, false);
9407         }
9408       else
9409         /* Ordinary template template argument.  */
9410         return t;
9411
9412     case CAST_EXPR:
9413     case REINTERPRET_CAST_EXPR:
9414     case CONST_CAST_EXPR:
9415     case STATIC_CAST_EXPR:
9416     case DYNAMIC_CAST_EXPR:
9417     case NOP_EXPR:
9418       return build1
9419         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9420          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9421
9422     case SIZEOF_EXPR:
9423       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9424         {
9425           /* We only want to compute the number of arguments.  */
9426           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9427                                                 complain, in_decl);
9428           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9429         }
9430       /* Fall through */
9431
9432     case INDIRECT_REF:
9433     case NEGATE_EXPR:
9434     case TRUTH_NOT_EXPR:
9435     case BIT_NOT_EXPR:
9436     case ADDR_EXPR:
9437     case UNARY_PLUS_EXPR:      /* Unary + */
9438     case ALIGNOF_EXPR:
9439     case ARROW_EXPR:
9440     case THROW_EXPR:
9441     case TYPEID_EXPR:
9442     case REALPART_EXPR:
9443     case IMAGPART_EXPR:
9444       return build1
9445         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9446          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9447
9448     case COMPONENT_REF:
9449       {
9450         tree object;
9451         tree name;
9452
9453         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9454         name = TREE_OPERAND (t, 1);
9455         if (TREE_CODE (name) == BIT_NOT_EXPR)
9456           {
9457             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9458                                 complain, in_decl);
9459             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9460           }
9461         else if (TREE_CODE (name) == SCOPE_REF
9462                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9463           {
9464             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9465                                      complain, in_decl);
9466             name = TREE_OPERAND (name, 1);
9467             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9468                                 complain, in_decl);
9469             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9470             name = build_qualified_name (/*type=*/NULL_TREE,
9471                                          base, name,
9472                                          /*template_p=*/false);
9473           }
9474         else if (TREE_CODE (name) == BASELINK)
9475           name = tsubst_baselink (name,
9476                                   non_reference (TREE_TYPE (object)),
9477                                   args, complain,
9478                                   in_decl);
9479         else
9480           name = tsubst_copy (name, args, complain, in_decl);
9481         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9482       }
9483
9484     case PLUS_EXPR:
9485     case MINUS_EXPR:
9486     case MULT_EXPR:
9487     case TRUNC_DIV_EXPR:
9488     case CEIL_DIV_EXPR:
9489     case FLOOR_DIV_EXPR:
9490     case ROUND_DIV_EXPR:
9491     case EXACT_DIV_EXPR:
9492     case BIT_AND_EXPR:
9493     case BIT_IOR_EXPR:
9494     case BIT_XOR_EXPR:
9495     case TRUNC_MOD_EXPR:
9496     case FLOOR_MOD_EXPR:
9497     case TRUTH_ANDIF_EXPR:
9498     case TRUTH_ORIF_EXPR:
9499     case TRUTH_AND_EXPR:
9500     case TRUTH_OR_EXPR:
9501     case RSHIFT_EXPR:
9502     case LSHIFT_EXPR:
9503     case RROTATE_EXPR:
9504     case LROTATE_EXPR:
9505     case EQ_EXPR:
9506     case NE_EXPR:
9507     case MAX_EXPR:
9508     case MIN_EXPR:
9509     case LE_EXPR:
9510     case GE_EXPR:
9511     case LT_EXPR:
9512     case GT_EXPR:
9513     case COMPOUND_EXPR:
9514     case DOTSTAR_EXPR:
9515     case MEMBER_REF:
9516     case PREDECREMENT_EXPR:
9517     case PREINCREMENT_EXPR:
9518     case POSTDECREMENT_EXPR:
9519     case POSTINCREMENT_EXPR:
9520       return build_nt
9521         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9522          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9523
9524     case SCOPE_REF:
9525       return build_qualified_name (/*type=*/NULL_TREE,
9526                                    tsubst_copy (TREE_OPERAND (t, 0),
9527                                                 args, complain, in_decl),
9528                                    tsubst_copy (TREE_OPERAND (t, 1),
9529                                                 args, complain, in_decl),
9530                                    QUALIFIED_NAME_IS_TEMPLATE (t));
9531
9532     case ARRAY_REF:
9533       return build_nt
9534         (ARRAY_REF,
9535          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9536          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9537          NULL_TREE, NULL_TREE);
9538
9539     case CALL_EXPR:
9540       {
9541         int n = VL_EXP_OPERAND_LENGTH (t);
9542         tree result = build_vl_exp (CALL_EXPR, n);
9543         int i;
9544         for (i = 0; i < n; i++)
9545           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9546                                              complain, in_decl);
9547         return result;
9548       }
9549
9550     case COND_EXPR:
9551     case MODOP_EXPR:
9552     case PSEUDO_DTOR_EXPR:
9553       {
9554         r = build_nt
9555           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9556            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9557            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9558         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9559         return r;
9560       }
9561
9562     case NEW_EXPR:
9563       {
9564         r = build_nt
9565         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9566          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9567          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9568         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9569         return r;
9570       }
9571
9572     case DELETE_EXPR:
9573       {
9574         r = build_nt
9575         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9576          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9577         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9578         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9579         return r;
9580       }
9581
9582     case TEMPLATE_ID_EXPR:
9583       {
9584         /* Substituted template arguments */
9585         tree fn = TREE_OPERAND (t, 0);
9586         tree targs = TREE_OPERAND (t, 1);
9587
9588         fn = tsubst_copy (fn, args, complain, in_decl);
9589         if (targs)
9590           targs = tsubst_template_args (targs, args, complain, in_decl);
9591
9592         return lookup_template_function (fn, targs);
9593       }
9594
9595     case TREE_LIST:
9596       {
9597         tree purpose, value, chain;
9598
9599         if (t == void_list_node)
9600           return t;
9601
9602         purpose = TREE_PURPOSE (t);
9603         if (purpose)
9604           purpose = tsubst_copy (purpose, args, complain, in_decl);
9605         value = TREE_VALUE (t);
9606         if (value)
9607           value = tsubst_copy (value, args, complain, in_decl);
9608         chain = TREE_CHAIN (t);
9609         if (chain && chain != void_type_node)
9610           chain = tsubst_copy (chain, args, complain, in_decl);
9611         if (purpose == TREE_PURPOSE (t)
9612             && value == TREE_VALUE (t)
9613             && chain == TREE_CHAIN (t))
9614           return t;
9615         return tree_cons (purpose, value, chain);
9616       }
9617
9618     case RECORD_TYPE:
9619     case UNION_TYPE:
9620     case ENUMERAL_TYPE:
9621     case INTEGER_TYPE:
9622     case TEMPLATE_TYPE_PARM:
9623     case TEMPLATE_TEMPLATE_PARM:
9624     case BOUND_TEMPLATE_TEMPLATE_PARM:
9625     case TEMPLATE_PARM_INDEX:
9626     case POINTER_TYPE:
9627     case REFERENCE_TYPE:
9628     case OFFSET_TYPE:
9629     case FUNCTION_TYPE:
9630     case METHOD_TYPE:
9631     case ARRAY_TYPE:
9632     case TYPENAME_TYPE:
9633     case UNBOUND_CLASS_TEMPLATE:
9634     case TYPEOF_TYPE:
9635     case TYPE_DECL:
9636       return tsubst (t, args, complain, in_decl);
9637
9638     case IDENTIFIER_NODE:
9639       if (IDENTIFIER_TYPENAME_P (t))
9640         {
9641           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9642           return mangle_conv_op_name_for_type (new_type);
9643         }
9644       else
9645         return t;
9646
9647     case CONSTRUCTOR:
9648       /* This is handled by tsubst_copy_and_build.  */
9649       gcc_unreachable ();
9650
9651     case VA_ARG_EXPR:
9652       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
9653                                           in_decl),
9654                              tsubst (TREE_TYPE (t), args, complain, in_decl));
9655
9656     case CLEANUP_POINT_EXPR:
9657       /* We shouldn't have built any of these during initial template
9658          generation.  Instead, they should be built during instantiation
9659          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
9660       gcc_unreachable ();
9661
9662     case OFFSET_REF:
9663       mark_used (TREE_OPERAND (t, 1));
9664       return t;
9665
9666     case EXPR_PACK_EXPANSION:
9667       error ("invalid use of pack expansion expression");
9668       return error_mark_node;
9669
9670     case NONTYPE_ARGUMENT_PACK:
9671       error ("use %<...%> to expand argument pack");
9672       return error_mark_node;
9673
9674     default:
9675       return t;
9676     }
9677 }
9678
9679 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
9680
9681 static tree
9682 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9683                     tree in_decl)
9684 {
9685   tree new_clauses = NULL, nc, oc;
9686
9687   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9688     {
9689       nc = copy_node (oc);
9690       OMP_CLAUSE_CHAIN (nc) = new_clauses;
9691       new_clauses = nc;
9692
9693       switch (OMP_CLAUSE_CODE (nc))
9694         {
9695         case OMP_CLAUSE_PRIVATE:
9696         case OMP_CLAUSE_SHARED:
9697         case OMP_CLAUSE_FIRSTPRIVATE:
9698         case OMP_CLAUSE_LASTPRIVATE:
9699         case OMP_CLAUSE_REDUCTION:
9700         case OMP_CLAUSE_COPYIN:
9701         case OMP_CLAUSE_COPYPRIVATE:
9702         case OMP_CLAUSE_IF:
9703         case OMP_CLAUSE_NUM_THREADS:
9704         case OMP_CLAUSE_SCHEDULE:
9705           OMP_CLAUSE_OPERAND (nc, 0)
9706             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
9707                            in_decl, /*integral_constant_expression_p=*/false);
9708           break;
9709         case OMP_CLAUSE_NOWAIT:
9710         case OMP_CLAUSE_ORDERED:
9711         case OMP_CLAUSE_DEFAULT:
9712           break;
9713         default:
9714           gcc_unreachable ();
9715         }
9716     }
9717
9718   return finish_omp_clauses (nreverse (new_clauses));
9719 }
9720
9721 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
9722
9723 static tree
9724 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9725                           tree in_decl)
9726 {
9727 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9728
9729   tree purpose, value, chain;
9730
9731   if (t == NULL)
9732     return t;
9733
9734   if (TREE_CODE (t) != TREE_LIST)
9735     return tsubst_copy_and_build (t, args, complain, in_decl,
9736                                   /*function_p=*/false,
9737                                   /*integral_constant_expression_p=*/false);
9738
9739   if (t == void_list_node)
9740     return t;
9741
9742   purpose = TREE_PURPOSE (t);
9743   if (purpose)
9744     purpose = RECUR (purpose);
9745   value = TREE_VALUE (t);
9746   if (value)
9747     value = RECUR (value);
9748   chain = TREE_CHAIN (t);
9749   if (chain && chain != void_type_node)
9750     chain = RECUR (chain);
9751   return tree_cons (purpose, value, chain);
9752 #undef RECUR
9753 }
9754
9755 /* Like tsubst_copy for expressions, etc. but also does semantic
9756    processing.  */
9757
9758 static tree
9759 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9760              bool integral_constant_expression_p)
9761 {
9762 #define RECUR(NODE)                             \
9763   tsubst_expr ((NODE), args, complain, in_decl, \
9764                integral_constant_expression_p)
9765
9766   tree stmt, tmp;
9767
9768   if (t == NULL_TREE || t == error_mark_node)
9769     return t;
9770
9771   if (EXPR_HAS_LOCATION (t))
9772     input_location = EXPR_LOCATION (t);
9773   if (STATEMENT_CODE_P (TREE_CODE (t)))
9774     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9775
9776   switch (TREE_CODE (t))
9777     {
9778     case STATEMENT_LIST:
9779       {
9780         tree_stmt_iterator i;
9781         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
9782           RECUR (tsi_stmt (i));
9783         break;
9784       }
9785
9786     case CTOR_INITIALIZER:
9787       finish_mem_initializers (tsubst_initializer_list
9788                                (TREE_OPERAND (t, 0), args));
9789       break;
9790
9791     case RETURN_EXPR:
9792       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
9793       break;
9794
9795     case EXPR_STMT:
9796       tmp = RECUR (EXPR_STMT_EXPR (t));
9797       if (EXPR_STMT_STMT_EXPR_RESULT (t))
9798         finish_stmt_expr_expr (tmp, cur_stmt_expr);
9799       else
9800         finish_expr_stmt (tmp);
9801       break;
9802
9803     case USING_STMT:
9804       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
9805       break;
9806
9807     case DECL_EXPR:
9808       {
9809         tree decl;
9810         tree init;
9811
9812         decl = DECL_EXPR_DECL (t);
9813         if (TREE_CODE (decl) == LABEL_DECL)
9814           finish_label_decl (DECL_NAME (decl));
9815         else if (TREE_CODE (decl) == USING_DECL)
9816           {
9817             tree scope = USING_DECL_SCOPE (decl);
9818             tree name = DECL_NAME (decl);
9819             tree decl;
9820
9821             scope = RECUR (scope);
9822             decl = lookup_qualified_name (scope, name,
9823                                           /*is_type_p=*/false,
9824                                           /*complain=*/false);
9825             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
9826               qualified_name_lookup_error (scope, name, decl);
9827             else
9828               do_local_using_decl (decl, scope, name);
9829           }
9830         else
9831           {
9832             init = DECL_INITIAL (decl);
9833             decl = tsubst (decl, args, complain, in_decl);
9834             if (decl != error_mark_node)
9835               {
9836                 /* By marking the declaration as instantiated, we avoid
9837                    trying to instantiate it.  Since instantiate_decl can't
9838                    handle local variables, and since we've already done
9839                    all that needs to be done, that's the right thing to
9840                    do.  */
9841                 if (TREE_CODE (decl) == VAR_DECL)
9842                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
9843                 if (TREE_CODE (decl) == VAR_DECL
9844                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
9845                   /* Anonymous aggregates are a special case.  */
9846                   finish_anon_union (decl);
9847                 else
9848                   {
9849                     maybe_push_decl (decl);
9850                     if (TREE_CODE (decl) == VAR_DECL
9851                         && DECL_PRETTY_FUNCTION_P (decl))
9852                       {
9853                         /* For __PRETTY_FUNCTION__ we have to adjust the
9854                            initializer.  */
9855                         const char *const name
9856                           = cxx_printable_name (current_function_decl, 2);
9857                         init = cp_fname_init (name, &TREE_TYPE (decl));
9858                       }
9859                     else
9860                       init = RECUR (init);
9861                     finish_decl (decl, init, NULL_TREE);
9862                   }
9863               }
9864           }
9865
9866         /* A DECL_EXPR can also be used as an expression, in the condition
9867            clause of an if/for/while construct.  */
9868         return decl;
9869       }
9870
9871     case FOR_STMT:
9872       stmt = begin_for_stmt ();
9873                           RECUR (FOR_INIT_STMT (t));
9874       finish_for_init_stmt (stmt);
9875       tmp = RECUR (FOR_COND (t));
9876       finish_for_cond (tmp, stmt);
9877       tmp = RECUR (FOR_EXPR (t));
9878       finish_for_expr (tmp, stmt);
9879       RECUR (FOR_BODY (t));
9880       finish_for_stmt (stmt);
9881       break;
9882
9883     case WHILE_STMT:
9884       stmt = begin_while_stmt ();
9885       tmp = RECUR (WHILE_COND (t));
9886       finish_while_stmt_cond (tmp, stmt);
9887       RECUR (WHILE_BODY (t));
9888       finish_while_stmt (stmt);
9889       break;
9890
9891     case DO_STMT:
9892       stmt = begin_do_stmt ();
9893       RECUR (DO_BODY (t));
9894       finish_do_body (stmt);
9895       tmp = RECUR (DO_COND (t));
9896       finish_do_stmt (tmp, stmt);
9897       break;
9898
9899     case IF_STMT:
9900       stmt = begin_if_stmt ();
9901       tmp = RECUR (IF_COND (t));
9902       finish_if_stmt_cond (tmp, stmt);
9903       RECUR (THEN_CLAUSE (t));
9904       finish_then_clause (stmt);
9905
9906       if (ELSE_CLAUSE (t))
9907         {
9908           begin_else_clause (stmt);
9909           RECUR (ELSE_CLAUSE (t));
9910           finish_else_clause (stmt);
9911         }
9912
9913       finish_if_stmt (stmt);
9914       break;
9915
9916     case BIND_EXPR:
9917       if (BIND_EXPR_BODY_BLOCK (t))
9918         stmt = begin_function_body ();
9919       else
9920         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
9921                                     ? BCS_TRY_BLOCK : 0);
9922
9923       RECUR (BIND_EXPR_BODY (t));
9924
9925       if (BIND_EXPR_BODY_BLOCK (t))
9926         finish_function_body (stmt);
9927       else
9928         finish_compound_stmt (stmt);
9929       break;
9930
9931     case BREAK_STMT:
9932       finish_break_stmt ();
9933       break;
9934
9935     case CONTINUE_STMT:
9936       finish_continue_stmt ();
9937       break;
9938
9939     case SWITCH_STMT:
9940       stmt = begin_switch_stmt ();
9941       tmp = RECUR (SWITCH_STMT_COND (t));
9942       finish_switch_cond (tmp, stmt);
9943       RECUR (SWITCH_STMT_BODY (t));
9944       finish_switch_stmt (stmt);
9945       break;
9946
9947     case CASE_LABEL_EXPR:
9948       finish_case_label (RECUR (CASE_LOW (t)),
9949                          RECUR (CASE_HIGH (t)));
9950       break;
9951
9952     case LABEL_EXPR:
9953       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
9954       break;
9955
9956     case GOTO_EXPR:
9957       tmp = GOTO_DESTINATION (t);
9958       if (TREE_CODE (tmp) != LABEL_DECL)
9959         /* Computed goto's must be tsubst'd into.  On the other hand,
9960            non-computed gotos must not be; the identifier in question
9961            will have no binding.  */
9962         tmp = RECUR (tmp);
9963       else
9964         tmp = DECL_NAME (tmp);
9965       finish_goto_stmt (tmp);
9966       break;
9967
9968     case ASM_EXPR:
9969       tmp = finish_asm_stmt
9970         (ASM_VOLATILE_P (t),
9971          RECUR (ASM_STRING (t)),
9972          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
9973          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
9974          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
9975       {
9976         tree asm_expr = tmp;
9977         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
9978           asm_expr = TREE_OPERAND (asm_expr, 0);
9979         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
9980       }
9981       break;
9982
9983     case TRY_BLOCK:
9984       if (CLEANUP_P (t))
9985         {
9986           stmt = begin_try_block ();
9987           RECUR (TRY_STMTS (t));
9988           finish_cleanup_try_block (stmt);
9989           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
9990         }
9991       else
9992         {
9993           tree compound_stmt = NULL_TREE;
9994
9995           if (FN_TRY_BLOCK_P (t))
9996             stmt = begin_function_try_block (&compound_stmt);
9997           else
9998             stmt = begin_try_block ();
9999
10000           RECUR (TRY_STMTS (t));
10001
10002           if (FN_TRY_BLOCK_P (t))
10003             finish_function_try_block (stmt);
10004           else
10005             finish_try_block (stmt);
10006
10007           RECUR (TRY_HANDLERS (t));
10008           if (FN_TRY_BLOCK_P (t))
10009             finish_function_handler_sequence (stmt, compound_stmt);
10010           else
10011             finish_handler_sequence (stmt);
10012         }
10013       break;
10014
10015     case HANDLER:
10016       {
10017         tree decl = HANDLER_PARMS (t);
10018
10019         if (decl)
10020           {
10021             decl = tsubst (decl, args, complain, in_decl);
10022             /* Prevent instantiate_decl from trying to instantiate
10023                this variable.  We've already done all that needs to be
10024                done.  */
10025             if (decl != error_mark_node)
10026               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10027           }
10028         stmt = begin_handler ();
10029         finish_handler_parms (decl, stmt);
10030         RECUR (HANDLER_BODY (t));
10031         finish_handler (stmt);
10032       }
10033       break;
10034
10035     case TAG_DEFN:
10036       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10037       break;
10038
10039     case STATIC_ASSERT:
10040       {
10041         tree condition = 
10042           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10043                        args,
10044                        complain, in_decl,
10045                        /*integral_constant_expression_p=*/true);
10046         finish_static_assert (condition,
10047                               STATIC_ASSERT_MESSAGE (t),
10048                               STATIC_ASSERT_SOURCE_LOCATION (t),
10049                               /*member_p=*/false);
10050       }
10051       break;
10052
10053     case OMP_PARALLEL:
10054       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10055                                 args, complain, in_decl);
10056       stmt = begin_omp_parallel ();
10057       RECUR (OMP_PARALLEL_BODY (t));
10058       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10059         = OMP_PARALLEL_COMBINED (t);
10060       break;
10061
10062     case OMP_FOR:
10063       {
10064         tree clauses, decl, init, cond, incr, body, pre_body;
10065
10066         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10067                                       args, complain, in_decl);
10068         init = OMP_FOR_INIT (t);
10069         gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10070         decl = RECUR (TREE_OPERAND (init, 0));
10071         init = RECUR (TREE_OPERAND (init, 1));
10072         cond = RECUR (OMP_FOR_COND (t));
10073         incr = RECUR (OMP_FOR_INCR (t));
10074
10075         stmt = begin_omp_structured_block ();
10076
10077         pre_body = push_stmt_list ();
10078         RECUR (OMP_FOR_PRE_BODY (t));
10079         pre_body = pop_stmt_list (pre_body);
10080
10081         body = push_stmt_list ();
10082         RECUR (OMP_FOR_BODY (t));
10083         body = pop_stmt_list (body);
10084
10085         t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10086                             pre_body);
10087         if (t)
10088           OMP_FOR_CLAUSES (t) = clauses;
10089
10090         add_stmt (finish_omp_structured_block (stmt));
10091       }
10092       break;
10093
10094     case OMP_SECTIONS:
10095     case OMP_SINGLE:
10096       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10097       stmt = push_stmt_list ();
10098       RECUR (OMP_BODY (t));
10099       stmt = pop_stmt_list (stmt);
10100
10101       t = copy_node (t);
10102       OMP_BODY (t) = stmt;
10103       OMP_CLAUSES (t) = tmp;
10104       add_stmt (t);
10105       break;
10106
10107     case OMP_SECTION:
10108     case OMP_CRITICAL:
10109     case OMP_MASTER:
10110     case OMP_ORDERED:
10111       stmt = push_stmt_list ();
10112       RECUR (OMP_BODY (t));
10113       stmt = pop_stmt_list (stmt);
10114
10115       t = copy_node (t);
10116       OMP_BODY (t) = stmt;
10117       add_stmt (t);
10118       break;
10119
10120     case OMP_ATOMIC:
10121       if (OMP_ATOMIC_DEPENDENT_P (t))
10122         {
10123           tree op1 = TREE_OPERAND (t, 1);
10124           tree lhs = RECUR (TREE_OPERAND (op1, 0));
10125           tree rhs = RECUR (TREE_OPERAND (op1, 1));
10126           finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10127         }
10128       break;
10129
10130     case EXPR_PACK_EXPANSION:
10131       error ("invalid use of pack expansion expression");
10132       return error_mark_node;
10133
10134     case NONTYPE_ARGUMENT_PACK:
10135       error ("use %<...%> to expand argument pack");
10136       return error_mark_node;
10137
10138     default:
10139       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10140
10141       return tsubst_copy_and_build (t, args, complain, in_decl,
10142                                     /*function_p=*/false,
10143                                     integral_constant_expression_p);
10144     }
10145
10146   return NULL_TREE;
10147 #undef RECUR
10148 }
10149
10150 /* T is a postfix-expression that is not being used in a function
10151    call.  Return the substituted version of T.  */
10152
10153 static tree
10154 tsubst_non_call_postfix_expression (tree t, tree args,
10155                                     tsubst_flags_t complain,
10156                                     tree in_decl)
10157 {
10158   if (TREE_CODE (t) == SCOPE_REF)
10159     t = tsubst_qualified_id (t, args, complain, in_decl,
10160                              /*done=*/false, /*address_p=*/false);
10161   else
10162     t = tsubst_copy_and_build (t, args, complain, in_decl,
10163                                /*function_p=*/false,
10164                                /*integral_constant_expression_p=*/false);
10165
10166   return t;
10167 }
10168
10169 /* Like tsubst but deals with expressions and performs semantic
10170    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10171
10172 tree
10173 tsubst_copy_and_build (tree t,
10174                        tree args,
10175                        tsubst_flags_t complain,
10176                        tree in_decl,
10177                        bool function_p,
10178                        bool integral_constant_expression_p)
10179 {
10180 #define RECUR(NODE)                                             \
10181   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10182                          /*function_p=*/false,                  \
10183                          integral_constant_expression_p)
10184
10185   tree op1;
10186
10187   if (t == NULL_TREE || t == error_mark_node)
10188     return t;
10189
10190   switch (TREE_CODE (t))
10191     {
10192     case USING_DECL:
10193       t = DECL_NAME (t);
10194       /* Fall through.  */
10195     case IDENTIFIER_NODE:
10196       {
10197         tree decl;
10198         cp_id_kind idk;
10199         bool non_integral_constant_expression_p;
10200         const char *error_msg;
10201
10202         if (IDENTIFIER_TYPENAME_P (t))
10203           {
10204             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10205             t = mangle_conv_op_name_for_type (new_type);
10206           }
10207
10208         /* Look up the name.  */
10209         decl = lookup_name (t);
10210
10211         /* By convention, expressions use ERROR_MARK_NODE to indicate
10212            failure, not NULL_TREE.  */
10213         if (decl == NULL_TREE)
10214           decl = error_mark_node;
10215
10216         decl = finish_id_expression (t, decl, NULL_TREE,
10217                                      &idk,
10218                                      integral_constant_expression_p,
10219                                      /*allow_non_integral_constant_expression_p=*/false,
10220                                      &non_integral_constant_expression_p,
10221                                      /*template_p=*/false,
10222                                      /*done=*/true,
10223                                      /*address_p=*/false,
10224                                      /*template_arg_p=*/false,
10225                                      &error_msg);
10226         if (error_msg)
10227           error (error_msg);
10228         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10229           decl = unqualified_name_lookup_error (decl);
10230         return decl;
10231       }
10232
10233     case TEMPLATE_ID_EXPR:
10234       {
10235         tree object;
10236         tree template = RECUR (TREE_OPERAND (t, 0));
10237         tree targs = TREE_OPERAND (t, 1);
10238
10239         if (targs)
10240           targs = tsubst_template_args (targs, args, complain, in_decl);
10241
10242         if (TREE_CODE (template) == COMPONENT_REF)
10243           {
10244             object = TREE_OPERAND (template, 0);
10245             template = TREE_OPERAND (template, 1);
10246           }
10247         else
10248           object = NULL_TREE;
10249         template = lookup_template_function (template, targs);
10250
10251         if (object)
10252           return build3 (COMPONENT_REF, TREE_TYPE (template),
10253                          object, template, NULL_TREE);
10254         else
10255           return baselink_for_fns (template);
10256       }
10257
10258     case INDIRECT_REF:
10259       {
10260         tree r = RECUR (TREE_OPERAND (t, 0));
10261
10262         if (REFERENCE_REF_P (t))
10263           {
10264             /* A type conversion to reference type will be enclosed in
10265                such an indirect ref, but the substitution of the cast
10266                will have also added such an indirect ref.  */
10267             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10268               r = convert_from_reference (r);
10269           }
10270         else
10271           r = build_x_indirect_ref (r, "unary *");
10272         return r;
10273       }
10274
10275     case NOP_EXPR:
10276       return build_nop
10277         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10278          RECUR (TREE_OPERAND (t, 0)));
10279
10280     case CAST_EXPR:
10281     case REINTERPRET_CAST_EXPR:
10282     case CONST_CAST_EXPR:
10283     case DYNAMIC_CAST_EXPR:
10284     case STATIC_CAST_EXPR:
10285       {
10286         tree type;
10287         tree op;
10288
10289         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10290         if (integral_constant_expression_p
10291             && !cast_valid_in_integral_constant_expression_p (type))
10292           {
10293             error ("a cast to a type other than an integral or "
10294                    "enumeration type cannot appear in a constant-expression");
10295             return error_mark_node; 
10296           }
10297
10298         op = RECUR (TREE_OPERAND (t, 0));
10299
10300         switch (TREE_CODE (t))
10301           {
10302           case CAST_EXPR:
10303             return build_functional_cast (type, op);
10304           case REINTERPRET_CAST_EXPR:
10305             return build_reinterpret_cast (type, op);
10306           case CONST_CAST_EXPR:
10307             return build_const_cast (type, op);
10308           case DYNAMIC_CAST_EXPR:
10309             return build_dynamic_cast (type, op);
10310           case STATIC_CAST_EXPR:
10311             return build_static_cast (type, op);
10312           default:
10313             gcc_unreachable ();
10314           }
10315       }
10316
10317     case POSTDECREMENT_EXPR:
10318     case POSTINCREMENT_EXPR:
10319       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10320                                                 args, complain, in_decl);
10321       return build_x_unary_op (TREE_CODE (t), op1);
10322
10323     case PREDECREMENT_EXPR:
10324     case PREINCREMENT_EXPR:
10325     case NEGATE_EXPR:
10326     case BIT_NOT_EXPR:
10327     case ABS_EXPR:
10328     case TRUTH_NOT_EXPR:
10329     case UNARY_PLUS_EXPR:  /* Unary + */
10330     case REALPART_EXPR:
10331     case IMAGPART_EXPR:
10332       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10333
10334     case ADDR_EXPR:
10335       op1 = TREE_OPERAND (t, 0);
10336       if (TREE_CODE (op1) == SCOPE_REF)
10337         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10338                                    /*done=*/true, /*address_p=*/true);
10339       else
10340         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10341                                                   in_decl);
10342       if (TREE_CODE (op1) == LABEL_DECL)
10343         return finish_label_address_expr (DECL_NAME (op1));
10344       return build_x_unary_op (ADDR_EXPR, op1);
10345
10346     case PLUS_EXPR:
10347     case MINUS_EXPR:
10348     case MULT_EXPR:
10349     case TRUNC_DIV_EXPR:
10350     case CEIL_DIV_EXPR:
10351     case FLOOR_DIV_EXPR:
10352     case ROUND_DIV_EXPR:
10353     case EXACT_DIV_EXPR:
10354     case BIT_AND_EXPR:
10355     case BIT_IOR_EXPR:
10356     case BIT_XOR_EXPR:
10357     case TRUNC_MOD_EXPR:
10358     case FLOOR_MOD_EXPR:
10359     case TRUTH_ANDIF_EXPR:
10360     case TRUTH_ORIF_EXPR:
10361     case TRUTH_AND_EXPR:
10362     case TRUTH_OR_EXPR:
10363     case RSHIFT_EXPR:
10364     case LSHIFT_EXPR:
10365     case RROTATE_EXPR:
10366     case LROTATE_EXPR:
10367     case EQ_EXPR:
10368     case NE_EXPR:
10369     case MAX_EXPR:
10370     case MIN_EXPR:
10371     case LE_EXPR:
10372     case GE_EXPR:
10373     case LT_EXPR:
10374     case GT_EXPR:
10375     case MEMBER_REF:
10376     case DOTSTAR_EXPR:
10377       return build_x_binary_op
10378         (TREE_CODE (t),
10379          RECUR (TREE_OPERAND (t, 0)),
10380          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10381           ? ERROR_MARK
10382           : TREE_CODE (TREE_OPERAND (t, 0))),
10383          RECUR (TREE_OPERAND (t, 1)),
10384          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10385           ? ERROR_MARK
10386           : TREE_CODE (TREE_OPERAND (t, 1))),
10387          /*overloaded_p=*/NULL);
10388
10389     case SCOPE_REF:
10390       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10391                                   /*address_p=*/false);
10392     case ARRAY_REF:
10393       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10394                                                 args, complain, in_decl);
10395       return build_x_binary_op (ARRAY_REF, op1,
10396                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10397                                  ? ERROR_MARK
10398                                  : TREE_CODE (TREE_OPERAND (t, 0))),
10399                                 RECUR (TREE_OPERAND (t, 1)),
10400                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10401                                  ? ERROR_MARK
10402                                  : TREE_CODE (TREE_OPERAND (t, 1))),
10403                                 /*overloaded_p=*/NULL);
10404
10405     case SIZEOF_EXPR:
10406       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10407         {
10408           /* We only want to compute the number of arguments.  */
10409           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10410                                                 complain, in_decl);
10411           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10412         }
10413       /* Fall through */
10414       
10415     case ALIGNOF_EXPR:
10416       op1 = TREE_OPERAND (t, 0);
10417       if (!args)
10418         {
10419           /* When there are no ARGS, we are trying to evaluate a
10420              non-dependent expression from the parser.  Trying to do
10421              the substitutions may not work.  */
10422           if (!TYPE_P (op1))
10423             op1 = TREE_TYPE (op1);
10424         }
10425       else
10426         {
10427           ++skip_evaluation;
10428           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10429                                        /*function_p=*/false,
10430                                        /*integral_constant_expression_p=*/false);
10431           --skip_evaluation;
10432         }
10433       if (TYPE_P (op1))
10434         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10435       else
10436         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10437
10438     case MODOP_EXPR:
10439       {
10440         tree r = build_x_modify_expr
10441           (RECUR (TREE_OPERAND (t, 0)),
10442            TREE_CODE (TREE_OPERAND (t, 1)),
10443            RECUR (TREE_OPERAND (t, 2)));
10444         /* TREE_NO_WARNING must be set if either the expression was
10445            parenthesized or it uses an operator such as >>= rather
10446            than plain assignment.  In the former case, it was already
10447            set and must be copied.  In the latter case,
10448            build_x_modify_expr sets it and it must not be reset
10449            here.  */
10450         if (TREE_NO_WARNING (t))
10451           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10452         return r;
10453       }
10454
10455     case ARROW_EXPR:
10456       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10457                                                 args, complain, in_decl);
10458       /* Remember that there was a reference to this entity.  */
10459       if (DECL_P (op1))
10460         mark_used (op1);
10461       return build_x_arrow (op1);
10462
10463     case NEW_EXPR:
10464       return build_new
10465         (RECUR (TREE_OPERAND (t, 0)),
10466          RECUR (TREE_OPERAND (t, 1)),
10467          RECUR (TREE_OPERAND (t, 2)),
10468          RECUR (TREE_OPERAND (t, 3)),
10469          NEW_EXPR_USE_GLOBAL (t));
10470
10471     case DELETE_EXPR:
10472      return delete_sanity
10473        (RECUR (TREE_OPERAND (t, 0)),
10474         RECUR (TREE_OPERAND (t, 1)),
10475         DELETE_EXPR_USE_VEC (t),
10476         DELETE_EXPR_USE_GLOBAL (t));
10477
10478     case COMPOUND_EXPR:
10479       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10480                                     RECUR (TREE_OPERAND (t, 1)));
10481
10482     case CALL_EXPR:
10483       {
10484         tree function;
10485         tree call_args;
10486         bool qualified_p;
10487         bool koenig_p;
10488
10489         function = CALL_EXPR_FN (t);
10490         /* When we parsed the expression,  we determined whether or
10491            not Koenig lookup should be performed.  */
10492         koenig_p = KOENIG_LOOKUP_P (t);
10493         if (TREE_CODE (function) == SCOPE_REF)
10494           {
10495             qualified_p = true;
10496             function = tsubst_qualified_id (function, args, complain, in_decl,
10497                                             /*done=*/false,
10498                                             /*address_p=*/false);
10499           }
10500         else
10501           {
10502             if (TREE_CODE (function) == COMPONENT_REF)
10503               {
10504                 tree op = TREE_OPERAND (function, 1);
10505
10506                 qualified_p = (TREE_CODE (op) == SCOPE_REF
10507                                || (BASELINK_P (op)
10508                                    && BASELINK_QUALIFIED_P (op)));
10509               }
10510             else
10511               qualified_p = false;
10512
10513             function = tsubst_copy_and_build (function, args, complain,
10514                                               in_decl,
10515                                               !qualified_p,
10516                                               integral_constant_expression_p);
10517
10518             if (BASELINK_P (function))
10519               qualified_p = true;
10520           }
10521
10522         /* FIXME:  Rewrite this so as not to construct an arglist.  */
10523         call_args = RECUR (CALL_EXPR_ARGS (t));
10524
10525         /* We do not perform argument-dependent lookup if normal
10526            lookup finds a non-function, in accordance with the
10527            expected resolution of DR 218.  */
10528         if (koenig_p
10529             && ((is_overloaded_fn (function)
10530                  /* If lookup found a member function, the Koenig lookup is
10531                     not appropriate, even if an unqualified-name was used
10532                     to denote the function.  */
10533                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10534                 || TREE_CODE (function) == IDENTIFIER_NODE))
10535           function = perform_koenig_lookup (function, call_args);
10536
10537         if (TREE_CODE (function) == IDENTIFIER_NODE)
10538           {
10539             unqualified_name_lookup_error (function);
10540             return error_mark_node;
10541           }
10542
10543         /* Remember that there was a reference to this entity.  */
10544         if (DECL_P (function))
10545           mark_used (function);
10546
10547         if (TREE_CODE (function) == OFFSET_REF)
10548           return build_offset_ref_call_from_tree (function, call_args);
10549         if (TREE_CODE (function) == COMPONENT_REF)
10550           {
10551             if (!BASELINK_P (TREE_OPERAND (function, 1)))
10552               return finish_call_expr (function, call_args,
10553                                        /*disallow_virtual=*/false,
10554                                        /*koenig_p=*/false);
10555             else
10556               return (build_new_method_call
10557                       (TREE_OPERAND (function, 0),
10558                        TREE_OPERAND (function, 1),
10559                        call_args, NULL_TREE,
10560                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10561                        /*fn_p=*/NULL));
10562           }
10563         return finish_call_expr (function, call_args,
10564                                  /*disallow_virtual=*/qualified_p,
10565                                  koenig_p);
10566       }
10567
10568     case COND_EXPR:
10569       return build_x_conditional_expr
10570         (RECUR (TREE_OPERAND (t, 0)),
10571          RECUR (TREE_OPERAND (t, 1)),
10572          RECUR (TREE_OPERAND (t, 2)));
10573
10574     case PSEUDO_DTOR_EXPR:
10575       return finish_pseudo_destructor_expr
10576         (RECUR (TREE_OPERAND (t, 0)),
10577          RECUR (TREE_OPERAND (t, 1)),
10578          RECUR (TREE_OPERAND (t, 2)));
10579
10580     case TREE_LIST:
10581       {
10582         tree purpose, value, chain;
10583
10584         if (t == void_list_node)
10585           return t;
10586
10587         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10588             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10589           {
10590             /* We have pack expansions, so expand those and
10591                create a new list out of it.  */
10592             tree purposevec = NULL_TREE;
10593             tree valuevec = NULL_TREE;
10594             tree chain;
10595             int i, len = -1;
10596
10597             /* Expand the argument expressions.  */
10598             if (TREE_PURPOSE (t))
10599               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10600                                                  complain, in_decl);
10601             if (TREE_VALUE (t))
10602               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10603                                                complain, in_decl);
10604
10605             /* Build the rest of the list.  */
10606             chain = TREE_CHAIN (t);
10607             if (chain && chain != void_type_node)
10608               chain = RECUR (chain);
10609
10610             /* Determine the number of arguments.  */
10611             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10612               {
10613                 len = TREE_VEC_LENGTH (purposevec);
10614                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10615               }
10616             else if (TREE_CODE (valuevec) == TREE_VEC)
10617               len = TREE_VEC_LENGTH (valuevec);
10618             else
10619               {
10620                 /* Since we only performed a partial substitution into
10621                    the argument pack, we only return a single list
10622                    node.  */
10623                 if (purposevec == TREE_PURPOSE (t)
10624                     && valuevec == TREE_VALUE (t)
10625                     && chain == TREE_CHAIN (t))
10626                   return t;
10627
10628                 return tree_cons (purposevec, valuevec, chain);
10629               }
10630             
10631             /* Convert the argument vectors into a TREE_LIST */
10632             i = len;
10633             while (i > 0)
10634               {
10635                 /* Grab the Ith values.  */
10636                 i--;
10637                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
10638                                      : NULL_TREE;
10639                 value 
10640                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
10641                              : NULL_TREE;
10642
10643                 /* Build the list (backwards).  */
10644                 chain = tree_cons (purpose, value, chain);
10645               }
10646
10647             return chain;
10648           }
10649
10650         purpose = TREE_PURPOSE (t);
10651         if (purpose)
10652           purpose = RECUR (purpose);
10653         value = TREE_VALUE (t);
10654         if (value)
10655           value = RECUR (value);
10656         chain = TREE_CHAIN (t);
10657         if (chain && chain != void_type_node)
10658           chain = RECUR (chain);
10659         if (purpose == TREE_PURPOSE (t)
10660             && value == TREE_VALUE (t)
10661             && chain == TREE_CHAIN (t))
10662           return t;
10663         return tree_cons (purpose, value, chain);
10664       }
10665
10666     case COMPONENT_REF:
10667       {
10668         tree object;
10669         tree object_type;
10670         tree member;
10671
10672         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10673                                                      args, complain, in_decl);
10674         /* Remember that there was a reference to this entity.  */
10675         if (DECL_P (object))
10676           mark_used (object);
10677         object_type = TREE_TYPE (object);
10678
10679         member = TREE_OPERAND (t, 1);
10680         if (BASELINK_P (member))
10681           member = tsubst_baselink (member,
10682                                     non_reference (TREE_TYPE (object)),
10683                                     args, complain, in_decl);
10684         else
10685           member = tsubst_copy (member, args, complain, in_decl);
10686         if (member == error_mark_node)
10687           return error_mark_node;
10688
10689         if (object_type && !CLASS_TYPE_P (object_type))
10690           {
10691             if (TREE_CODE (member) == BIT_NOT_EXPR)
10692               return finish_pseudo_destructor_expr (object,
10693                                                     NULL_TREE,
10694                                                     object_type);
10695             else if (TREE_CODE (member) == SCOPE_REF
10696                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
10697               return finish_pseudo_destructor_expr (object,
10698                                                     object,
10699                                                     object_type);
10700           }
10701         else if (TREE_CODE (member) == SCOPE_REF
10702                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10703           {
10704             tree tmpl;
10705             tree args;
10706
10707             /* Lookup the template functions now that we know what the
10708                scope is.  */
10709             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10710             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
10711             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
10712                                             /*is_type_p=*/false,
10713                                             /*complain=*/false);
10714             if (BASELINK_P (member))
10715               {
10716                 BASELINK_FUNCTIONS (member)
10717                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10718                               args);
10719                 member = (adjust_result_of_qualified_name_lookup
10720                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
10721                            object_type));
10722               }
10723             else
10724               {
10725                 qualified_name_lookup_error (object_type, tmpl, member);
10726                 return error_mark_node;
10727               }
10728           }
10729         else if (TREE_CODE (member) == SCOPE_REF
10730                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10731                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10732           {
10733             if (complain & tf_error)
10734               {
10735                 if (TYPE_P (TREE_OPERAND (member, 0)))
10736                   error ("%qT is not a class or namespace",
10737                          TREE_OPERAND (member, 0));
10738                 else
10739                   error ("%qD is not a class or namespace",
10740                          TREE_OPERAND (member, 0));
10741               }
10742             return error_mark_node;
10743           }
10744         else if (TREE_CODE (member) == FIELD_DECL)
10745           return finish_non_static_data_member (member, object, NULL_TREE);
10746
10747         return finish_class_member_access_expr (object, member,
10748                                                 /*template_p=*/false);
10749       }
10750
10751     case THROW_EXPR:
10752       return build_throw
10753         (RECUR (TREE_OPERAND (t, 0)));
10754
10755     case CONSTRUCTOR:
10756       {
10757         VEC(constructor_elt,gc) *n;
10758         constructor_elt *ce;
10759         unsigned HOST_WIDE_INT idx;
10760         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10761         bool process_index_p;
10762         int newlen;
10763         bool need_copy_p = false;
10764
10765         if (type == error_mark_node)
10766           return error_mark_node;
10767
10768         /* digest_init will do the wrong thing if we let it.  */
10769         if (type && TYPE_PTRMEMFUNC_P (type))
10770           return t;
10771
10772         /* We do not want to process the index of aggregate
10773            initializers as they are identifier nodes which will be
10774            looked up by digest_init.  */
10775         process_index_p = !(type && IS_AGGR_TYPE (type));
10776
10777         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
10778         newlen = VEC_length (constructor_elt, n);
10779         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
10780           {
10781             if (ce->index && process_index_p)
10782               ce->index = RECUR (ce->index);
10783
10784             if (PACK_EXPANSION_P (ce->value))
10785               {
10786                 /* Substitute into the pack expansion.  */
10787                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
10788                                                   in_decl);
10789
10790                 if (TREE_VEC_LENGTH (ce->value) == 1)
10791                   /* Just move the argument into place.  */
10792                   ce->value = TREE_VEC_ELT (ce->value, 0);
10793                 else
10794                   {
10795                     /* Update the length of the final CONSTRUCTOR
10796                        arguments vector, and note that we will need to
10797                        copy.*/
10798                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
10799                     need_copy_p = true;
10800                   }
10801               }
10802             else
10803               ce->value = RECUR (ce->value);
10804           }
10805
10806         if (need_copy_p)
10807           {
10808             VEC(constructor_elt,gc) *old_n = n;
10809
10810             n = VEC_alloc (constructor_elt, gc, newlen);
10811             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
10812                  idx++)
10813               {
10814                 if (TREE_CODE (ce->value) == TREE_VEC)
10815                   {
10816                     int i, len = TREE_VEC_LENGTH (ce->value);
10817                     for (i = 0; i < len; ++i)
10818                       CONSTRUCTOR_APPEND_ELT (n, 0,
10819                                               TREE_VEC_ELT (ce->value, i));
10820                   }
10821                 else
10822                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
10823               }
10824           }
10825
10826         if (TREE_HAS_CONSTRUCTOR (t))
10827           return finish_compound_literal (type, n);
10828
10829         return build_constructor (NULL_TREE, n);
10830       }
10831
10832     case TYPEID_EXPR:
10833       {
10834         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
10835         if (TYPE_P (operand_0))
10836           return get_typeid (operand_0);
10837         return build_typeid (operand_0);
10838       }
10839
10840     case VAR_DECL:
10841       if (!args)
10842         return t;
10843       /* Fall through */
10844
10845     case PARM_DECL:
10846       {
10847         tree r = tsubst_copy (t, args, complain, in_decl);
10848
10849         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
10850           /* If the original type was a reference, we'll be wrapped in
10851              the appropriate INDIRECT_REF.  */
10852           r = convert_from_reference (r);
10853         return r;
10854       }
10855
10856     case VA_ARG_EXPR:
10857       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
10858                              tsubst_copy (TREE_TYPE (t), args, complain,
10859                                           in_decl));
10860
10861     case OFFSETOF_EXPR:
10862       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
10863
10864     case TRAIT_EXPR:
10865       {
10866         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
10867                                   complain, in_decl);
10868
10869         tree type2 = TRAIT_EXPR_TYPE2 (t);
10870         if (type2)
10871           type2 = tsubst_copy (type2, args, complain, in_decl);
10872         
10873         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
10874       }
10875
10876     case STMT_EXPR:
10877       {
10878         tree old_stmt_expr = cur_stmt_expr;
10879         tree stmt_expr = begin_stmt_expr ();
10880
10881         cur_stmt_expr = stmt_expr;
10882         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
10883                      integral_constant_expression_p);
10884         stmt_expr = finish_stmt_expr (stmt_expr, false);
10885         cur_stmt_expr = old_stmt_expr;
10886
10887         return stmt_expr;
10888       }
10889
10890     case CONST_DECL:
10891       t = tsubst_copy (t, args, complain, in_decl);
10892       /* As in finish_id_expression, we resolve enumeration constants
10893          to their underlying values.  */
10894       if (TREE_CODE (t) == CONST_DECL)
10895         {
10896           used_types_insert (TREE_TYPE (t));
10897           return DECL_INITIAL (t);
10898         }
10899       return t;
10900
10901     default:
10902       /* Handle Objective-C++ constructs, if appropriate.  */
10903       {
10904         tree subst
10905           = objcp_tsubst_copy_and_build (t, args, complain,
10906                                          in_decl, /*function_p=*/false);
10907         if (subst)
10908           return subst;
10909       }
10910       return tsubst_copy (t, args, complain, in_decl);
10911     }
10912
10913 #undef RECUR
10914 }
10915
10916 /* Verify that the instantiated ARGS are valid. For type arguments,
10917    make sure that the type's linkage is ok. For non-type arguments,
10918    make sure they are constants if they are integral or enumerations.
10919    Emit an error under control of COMPLAIN, and return TRUE on error.  */
10920
10921 static bool
10922 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
10923 {
10924   int ix, len = DECL_NTPARMS (tmpl);
10925   bool result = false;
10926
10927   for (ix = 0; ix != len; ix++)
10928     {
10929       tree t = TREE_VEC_ELT (args, ix);
10930
10931       if (TYPE_P (t))
10932         {
10933           /* [basic.link]: A name with no linkage (notably, the name
10934              of a class or enumeration declared in a local scope)
10935              shall not be used to declare an entity with linkage.
10936              This implies that names with no linkage cannot be used as
10937              template arguments.  */
10938           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
10939
10940           if (nt)
10941             {
10942               /* DR 488 makes use of a type with no linkage cause
10943                  type deduction to fail.  */
10944               if (complain & tf_error)
10945                 {
10946                   if (TYPE_ANONYMOUS_P (nt))
10947                     error ("%qT is/uses anonymous type", t);
10948                   else
10949                     error ("template argument for %qD uses local type %qT",
10950                            tmpl, t);
10951                 }
10952               result = true;
10953             }
10954           /* In order to avoid all sorts of complications, we do not
10955              allow variably-modified types as template arguments.  */
10956           else if (variably_modified_type_p (t, NULL_TREE))
10957             {
10958               if (complain & tf_error)
10959                 error ("%qT is a variably modified type", t);
10960               result = true;
10961             }
10962         }
10963       /* A non-type argument of integral or enumerated type must be a
10964          constant.  */
10965       else if (TREE_TYPE (t)
10966                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
10967                && !TREE_CONSTANT (t))
10968         {
10969           if (complain & tf_error)
10970             error ("integral expression %qE is not constant", t);
10971           result = true;
10972         }
10973     }
10974   if (result && (complain & tf_error))
10975     error ("  trying to instantiate %qD", tmpl);
10976   return result;
10977 }
10978
10979 /* Instantiate the indicated variable or function template TMPL with
10980    the template arguments in TARG_PTR.  */
10981
10982 tree
10983 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
10984 {
10985   tree fndecl;
10986   tree gen_tmpl;
10987   tree spec;
10988   HOST_WIDE_INT saved_processing_template_decl;
10989
10990   if (tmpl == error_mark_node)
10991     return error_mark_node;
10992
10993   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
10994
10995   /* If this function is a clone, handle it specially.  */
10996   if (DECL_CLONED_FUNCTION_P (tmpl))
10997     {
10998       tree spec;
10999       tree clone;
11000
11001       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11002                                    complain);
11003       if (spec == error_mark_node)
11004         return error_mark_node;
11005
11006       /* Look for the clone.  */
11007       FOR_EACH_CLONE (clone, spec)
11008         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11009           return clone;
11010       /* We should always have found the clone by now.  */
11011       gcc_unreachable ();
11012       return NULL_TREE;
11013     }
11014
11015   /* Check to see if we already have this specialization.  */
11016   spec = retrieve_specialization (tmpl, targ_ptr,
11017                                   /*class_specializations_p=*/false);
11018   if (spec != NULL_TREE)
11019     return spec;
11020
11021   gen_tmpl = most_general_template (tmpl);
11022   if (tmpl != gen_tmpl)
11023     {
11024       /* The TMPL is a partial instantiation.  To get a full set of
11025          arguments we must add the arguments used to perform the
11026          partial instantiation.  */
11027       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11028                                               targ_ptr);
11029
11030       /* Check to see if we already have this specialization.  */
11031       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11032                                       /*class_specializations_p=*/false);
11033       if (spec != NULL_TREE)
11034         return spec;
11035     }
11036
11037   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11038                                complain))
11039     return error_mark_node;
11040
11041   /* We are building a FUNCTION_DECL, during which the access of its
11042      parameters and return types have to be checked.  However this
11043      FUNCTION_DECL which is the desired context for access checking
11044      is not built yet.  We solve this chicken-and-egg problem by
11045      deferring all checks until we have the FUNCTION_DECL.  */
11046   push_deferring_access_checks (dk_deferred);
11047
11048   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11049      (because, for example, we have encountered a non-dependent
11050      function call in the body of a template function and must now
11051      determine which of several overloaded functions will be called),
11052      within the instantiation itself we are not processing a
11053      template.  */  
11054   saved_processing_template_decl = processing_template_decl;
11055   processing_template_decl = 0;
11056   /* Substitute template parameters to obtain the specialization.  */
11057   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11058                    targ_ptr, complain, gen_tmpl);
11059   processing_template_decl = saved_processing_template_decl;
11060   if (fndecl == error_mark_node)
11061     return error_mark_node;
11062
11063   /* Now we know the specialization, compute access previously
11064      deferred.  */
11065   push_access_scope (fndecl);
11066   perform_deferred_access_checks ();
11067   pop_access_scope (fndecl);
11068   pop_deferring_access_checks ();
11069
11070   /* The DECL_TI_TEMPLATE should always be the immediate parent
11071      template, not the most general template.  */
11072   DECL_TI_TEMPLATE (fndecl) = tmpl;
11073
11074   /* If we've just instantiated the main entry point for a function,
11075      instantiate all the alternate entry points as well.  We do this
11076      by cloning the instantiation of the main entry point, not by
11077      instantiating the template clones.  */
11078   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11079     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11080
11081   return fndecl;
11082 }
11083
11084 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11085    arguments that are being used when calling it.  TARGS is a vector
11086    into which the deduced template arguments are placed.
11087
11088    Return zero for success, 2 for an incomplete match that doesn't resolve
11089    all the types, and 1 for complete failure.  An error message will be
11090    printed only for an incomplete match.
11091
11092    If FN is a conversion operator, or we are trying to produce a specific
11093    specialization, RETURN_TYPE is the return type desired.
11094
11095    The EXPLICIT_TARGS are explicit template arguments provided via a
11096    template-id.
11097
11098    The parameter STRICT is one of:
11099
11100    DEDUCE_CALL:
11101      We are deducing arguments for a function call, as in
11102      [temp.deduct.call].
11103
11104    DEDUCE_CONV:
11105      We are deducing arguments for a conversion function, as in
11106      [temp.deduct.conv].
11107
11108    DEDUCE_EXACT:
11109      We are deducing arguments when doing an explicit instantiation
11110      as in [temp.explicit], when determining an explicit specialization
11111      as in [temp.expl.spec], or when taking the address of a function
11112      template, as in [temp.deduct.funcaddr].  */
11113
11114 int
11115 fn_type_unification (tree fn,
11116                      tree explicit_targs,
11117                      tree targs,
11118                      tree args,
11119                      tree return_type,
11120                      unification_kind_t strict,
11121                      int flags)
11122 {
11123   tree parms;
11124   tree fntype;
11125   int result;
11126   bool incomplete_argument_packs_p = false;
11127
11128   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11129
11130   fntype = TREE_TYPE (fn);
11131   if (explicit_targs)
11132     {
11133       /* [temp.deduct]
11134
11135          The specified template arguments must match the template
11136          parameters in kind (i.e., type, nontype, template), and there
11137          must not be more arguments than there are parameters;
11138          otherwise type deduction fails.
11139
11140          Nontype arguments must match the types of the corresponding
11141          nontype template parameters, or must be convertible to the
11142          types of the corresponding nontype parameters as specified in
11143          _temp.arg.nontype_, otherwise type deduction fails.
11144
11145          All references in the function type of the function template
11146          to the corresponding template parameters are replaced by the
11147          specified template argument values.  If a substitution in a
11148          template parameter or in the function type of the function
11149          template results in an invalid type, type deduction fails.  */
11150       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11151       int i, len = TREE_VEC_LENGTH (tparms);
11152       tree converted_args;
11153       bool incomplete = false;
11154
11155       if (explicit_targs == error_mark_node)
11156         return 1;
11157
11158       converted_args
11159         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11160                                   /*require_all_args=*/false,
11161                                   /*use_default_args=*/false));
11162       if (converted_args == error_mark_node)
11163         return 1;
11164
11165       /* Substitute the explicit args into the function type.  This is
11166          necessary so that, for instance, explicitly declared function
11167          arguments can match null pointed constants.  If we were given
11168          an incomplete set of explicit args, we must not do semantic
11169          processing during substitution as we could create partial
11170          instantiations.  */
11171       for (i = 0; i < len; i++)
11172         {
11173           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11174           bool parameter_pack = false;
11175
11176           /* Dig out the actual parm.  */
11177           if (TREE_CODE (parm) == TYPE_DECL
11178               || TREE_CODE (parm) == TEMPLATE_DECL)
11179             {
11180               parm = TREE_TYPE (parm);
11181               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11182             }
11183           else if (TREE_CODE (parm) == PARM_DECL)
11184             {
11185               parm = DECL_INITIAL (parm);
11186               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11187             }
11188
11189           if (parameter_pack)
11190             {
11191               int level, idx;
11192               tree targ;
11193               template_parm_level_and_index (parm, &level, &idx);
11194
11195               /* Mark the argument pack as "incomplete". We could
11196                  still deduce more arguments during unification.  */
11197               targ = TMPL_ARG (converted_args, level, idx);
11198               if (targ)
11199                 {
11200                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11201                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11202                     = ARGUMENT_PACK_ARGS (targ);
11203                 }
11204
11205               /* We have some incomplete argument packs.  */
11206               incomplete_argument_packs_p = true;
11207             }
11208         }
11209
11210       if (incomplete_argument_packs_p)
11211         /* Any substitution is guaranteed to be incomplete if there
11212            are incomplete argument packs, because we can still deduce
11213            more arguments.  */
11214         incomplete = 1;
11215       else
11216         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11217
11218       processing_template_decl += incomplete;
11219       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11220       processing_template_decl -= incomplete;
11221
11222       if (fntype == error_mark_node)
11223         return 1;
11224
11225       /* Place the explicitly specified arguments in TARGS.  */
11226       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11227         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11228     }
11229
11230   /* Never do unification on the 'this' parameter.  */
11231   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11232
11233   if (return_type)
11234     {
11235       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11236       args = tree_cons (NULL_TREE, return_type, args);
11237     }
11238
11239   /* We allow incomplete unification without an error message here
11240      because the standard doesn't seem to explicitly prohibit it.  Our
11241      callers must be ready to deal with unification failures in any
11242      event.  */
11243   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11244                                   targs, parms, args, /*subr=*/0,
11245                                   strict, flags);
11246
11247   if (result == 0 && incomplete_argument_packs_p)
11248     {
11249       int i, len = NUM_TMPL_ARGS (targs);
11250
11251       /* Clear the "incomplete" flags on all argument packs.  */
11252       for (i = 0; i < len; i++)
11253         {
11254           tree arg = TREE_VEC_ELT (targs, i);
11255           if (ARGUMENT_PACK_P (arg))
11256             {
11257               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11258               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11259             }
11260         }
11261     }
11262
11263   if (result == 0)
11264     /* All is well so far.  Now, check:
11265
11266        [temp.deduct]
11267
11268        When all template arguments have been deduced, all uses of
11269        template parameters in nondeduced contexts are replaced with
11270        the corresponding deduced argument values.  If the
11271        substitution results in an invalid type, as described above,
11272        type deduction fails.  */
11273     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11274         == error_mark_node)
11275       return 1;
11276
11277   return result;
11278 }
11279
11280 /* Adjust types before performing type deduction, as described in
11281    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
11282    sections are symmetric.  PARM is the type of a function parameter
11283    or the return type of the conversion function.  ARG is the type of
11284    the argument passed to the call, or the type of the value
11285    initialized with the result of the conversion function.
11286    ARG_EXPR is the original argument expression, which may be null.  */
11287
11288 static int
11289 maybe_adjust_types_for_deduction (unification_kind_t strict,
11290                                   tree* parm,
11291                                   tree* arg,
11292                                   tree arg_expr)
11293 {
11294   int result = 0;
11295
11296   switch (strict)
11297     {
11298     case DEDUCE_CALL:
11299       break;
11300
11301     case DEDUCE_CONV:
11302       {
11303         /* Swap PARM and ARG throughout the remainder of this
11304            function; the handling is precisely symmetric since PARM
11305            will initialize ARG rather than vice versa.  */
11306         tree* temp = parm;
11307         parm = arg;
11308         arg = temp;
11309         break;
11310       }
11311
11312     case DEDUCE_EXACT:
11313       /* There is nothing to do in this case.  */
11314       return 0;
11315
11316     default:
11317       gcc_unreachable ();
11318     }
11319
11320   if (TREE_CODE (*parm) != REFERENCE_TYPE)
11321     {
11322       /* [temp.deduct.call]
11323
11324          If P is not a reference type:
11325
11326          --If A is an array type, the pointer type produced by the
11327          array-to-pointer standard conversion (_conv.array_) is
11328          used in place of A for type deduction; otherwise,
11329
11330          --If A is a function type, the pointer type produced by
11331          the function-to-pointer standard conversion
11332          (_conv.func_) is used in place of A for type deduction;
11333          otherwise,
11334
11335          --If A is a cv-qualified type, the top level
11336          cv-qualifiers of A's type are ignored for type
11337          deduction.  */
11338       if (TREE_CODE (*arg) == ARRAY_TYPE)
11339         *arg = build_pointer_type (TREE_TYPE (*arg));
11340       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11341         *arg = build_pointer_type (*arg);
11342       else
11343         *arg = TYPE_MAIN_VARIANT (*arg);
11344     }
11345
11346   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11347      of the form T&&, where T is a template parameter, and the argument
11348      is an lvalue, T is deduced as A& */
11349   if (TREE_CODE (*parm) == REFERENCE_TYPE
11350       && TYPE_REF_IS_RVALUE (*parm)
11351       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11352       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11353       && arg_expr && real_lvalue_p (arg_expr))
11354     *arg = build_reference_type (*arg);
11355
11356   /* [temp.deduct.call]
11357
11358      If P is a cv-qualified type, the top level cv-qualifiers
11359      of P's type are ignored for type deduction.  If P is a
11360      reference type, the type referred to by P is used for
11361      type deduction.  */
11362   *parm = TYPE_MAIN_VARIANT (*parm);
11363   if (TREE_CODE (*parm) == REFERENCE_TYPE)
11364     {
11365       *parm = TREE_TYPE (*parm);
11366       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11367     }
11368
11369   /* DR 322. For conversion deduction, remove a reference type on parm
11370      too (which has been swapped into ARG).  */
11371   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11372     *arg = TREE_TYPE (*arg);
11373
11374   return result;
11375 }
11376
11377 /* Most parms like fn_type_unification.
11378
11379    If SUBR is 1, we're being called recursively (to unify the
11380    arguments of a function or method parameter of a function
11381    template). */
11382
11383 static int
11384 type_unification_real (tree tparms,
11385                        tree targs,
11386                        tree xparms,
11387                        tree xargs,
11388                        int subr,
11389                        unification_kind_t strict,
11390                        int flags)
11391 {
11392   tree parm, arg, arg_expr;
11393   int i;
11394   int ntparms = TREE_VEC_LENGTH (tparms);
11395   int sub_strict;
11396   int saw_undeduced = 0;
11397   tree parms, args;
11398
11399   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11400   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11401   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11402   gcc_assert (ntparms > 0);
11403
11404   switch (strict)
11405     {
11406     case DEDUCE_CALL:
11407       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11408                     | UNIFY_ALLOW_DERIVED);
11409       break;
11410
11411     case DEDUCE_CONV:
11412       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11413       break;
11414
11415     case DEDUCE_EXACT:
11416       sub_strict = UNIFY_ALLOW_NONE;
11417       break;
11418
11419     default:
11420       gcc_unreachable ();
11421     }
11422
11423  again:
11424   parms = xparms;
11425   args = xargs;
11426
11427   while (parms && parms != void_list_node
11428          && args && args != void_list_node)
11429     {
11430       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11431         break;
11432
11433       parm = TREE_VALUE (parms);
11434       parms = TREE_CHAIN (parms);
11435       arg = TREE_VALUE (args);
11436       args = TREE_CHAIN (args);
11437       arg_expr = NULL;
11438
11439       if (arg == error_mark_node)
11440         return 1;
11441       if (arg == unknown_type_node)
11442         /* We can't deduce anything from this, but we might get all the
11443            template args from other function args.  */
11444         continue;
11445
11446       /* Conversions will be performed on a function argument that
11447          corresponds with a function parameter that contains only
11448          non-deducible template parameters and explicitly specified
11449          template parameters.  */
11450       if (!uses_template_parms (parm))
11451         {
11452           tree type;
11453
11454           if (!TYPE_P (arg))
11455             type = TREE_TYPE (arg);
11456           else
11457             type = arg;
11458
11459           if (same_type_p (parm, type))
11460             continue;
11461           if (strict != DEDUCE_EXACT
11462               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11463                                   flags))
11464             continue;
11465
11466           return 1;
11467         }
11468
11469       if (!TYPE_P (arg))
11470         {
11471           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11472           if (type_unknown_p (arg))
11473             {
11474               /* [temp.deduct.type] 
11475
11476                  A template-argument can be deduced from a pointer to
11477                  function or pointer to member function argument if
11478                  the set of overloaded functions does not contain
11479                  function templates and at most one of a set of
11480                  overloaded functions provides a unique match.  */
11481               if (resolve_overloaded_unification
11482                   (tparms, targs, parm, arg, strict, sub_strict))
11483                 continue;
11484
11485               return 1;
11486             }
11487           arg_expr = arg;
11488           arg = unlowered_expr_type (arg);
11489           if (arg == error_mark_node)
11490             return 1;
11491         }
11492
11493       {
11494         int arg_strict = sub_strict;
11495
11496         if (!subr)
11497           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11498                                                           arg_expr);
11499
11500         if (unify (tparms, targs, parm, arg, arg_strict))
11501           return 1;
11502       }
11503     }
11504
11505
11506   if (parms 
11507       && parms != void_list_node
11508       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11509     {
11510       /* Unify the remaining arguments with the pack expansion type.  */
11511       tree argvec;
11512       tree parmvec = make_tree_vec (1);
11513       int len = 0;
11514       tree t;
11515
11516       /* Count the number of arguments that remain.  */
11517       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11518         len++;
11519         
11520       /* Allocate a TREE_VEC and copy in all of the arguments */ 
11521       argvec = make_tree_vec (len);
11522       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11523         {
11524           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11525           ++i;
11526         }
11527
11528       /* Copy the parameter into parmvec.  */
11529       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11530       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11531                                 /*call_args_p=*/true, /*subr=*/subr))
11532         return 1;
11533
11534       /* Advance to the end of the list of parameters.  */
11535       parms = TREE_CHAIN (parms);
11536     }
11537
11538   /* Fail if we've reached the end of the parm list, and more args
11539      are present, and the parm list isn't variadic.  */
11540   if (args && args != void_list_node && parms == void_list_node)
11541     return 1;
11542   /* Fail if parms are left and they don't have default values.  */
11543   if (parms && parms != void_list_node
11544       && TREE_PURPOSE (parms) == NULL_TREE)
11545     return 1;
11546
11547   if (!subr)
11548     for (i = 0; i < ntparms; i++)
11549       if (!TREE_VEC_ELT (targs, i))
11550         {
11551           tree tparm;
11552
11553           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11554             continue;
11555
11556           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11557
11558           /* If this is an undeduced nontype parameter that depends on
11559              a type parameter, try another pass; its type may have been
11560              deduced from a later argument than the one from which
11561              this parameter can be deduced.  */
11562           if (TREE_CODE (tparm) == PARM_DECL
11563               && uses_template_parms (TREE_TYPE (tparm))
11564               && !saw_undeduced++)
11565             goto again;
11566
11567           /* Core issue #226 (C++0x) [temp.deduct]:
11568
11569                If a template argument has not been deduced, its
11570                default template argument, if any, is used. 
11571
11572              When we are in C++98 mode, TREE_PURPOSE will either
11573              be NULL_TREE or ERROR_MARK_NODE, so we do not need
11574              to explicitly check cxx_dialect here.  */
11575           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11576             {
11577               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
11578                                  targs, tf_none, NULL_TREE);
11579               if (arg == error_mark_node)
11580                 return 1;
11581               else
11582                 {
11583                   TREE_VEC_ELT (targs, i) = arg;
11584                   continue;
11585                 }
11586             }
11587
11588           /* If the type parameter is a parameter pack, then it will
11589              be deduced to an empty parameter pack.  */
11590           if (template_parameter_pack_p (tparm))
11591             {
11592               tree arg;
11593
11594               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11595                 {
11596                   arg = make_node (NONTYPE_ARGUMENT_PACK);
11597                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11598                   TREE_CONSTANT (arg) = 1;
11599                 }
11600               else
11601                 arg = make_node (TYPE_ARGUMENT_PACK);
11602
11603               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11604
11605               TREE_VEC_ELT (targs, i) = arg;
11606               continue;
11607             }
11608
11609           return 2;
11610         }
11611
11612   return 0;
11613 }
11614
11615 /* Subroutine of type_unification_real.  Args are like the variables
11616    at the call site.  ARG is an overloaded function (or template-id);
11617    we try deducing template args from each of the overloads, and if
11618    only one succeeds, we go with that.  Modifies TARGS and returns
11619    true on success.  */
11620
11621 static bool
11622 resolve_overloaded_unification (tree tparms,
11623                                 tree targs,
11624                                 tree parm,
11625                                 tree arg,
11626                                 unification_kind_t strict,
11627                                 int sub_strict)
11628 {
11629   tree tempargs = copy_node (targs);
11630   int good = 0;
11631   bool addr_p;
11632
11633   if (TREE_CODE (arg) == ADDR_EXPR)
11634     {
11635       arg = TREE_OPERAND (arg, 0);
11636       addr_p = true;
11637     }
11638   else
11639     addr_p = false;
11640
11641   if (TREE_CODE (arg) == COMPONENT_REF)
11642     /* Handle `&x' where `x' is some static or non-static member
11643        function name.  */
11644     arg = TREE_OPERAND (arg, 1);
11645
11646   if (TREE_CODE (arg) == OFFSET_REF)
11647     arg = TREE_OPERAND (arg, 1);
11648
11649   /* Strip baselink information.  */
11650   if (BASELINK_P (arg))
11651     arg = BASELINK_FUNCTIONS (arg);
11652
11653   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11654     {
11655       /* If we got some explicit template args, we need to plug them into
11656          the affected templates before we try to unify, in case the
11657          explicit args will completely resolve the templates in question.  */
11658
11659       tree expl_subargs = TREE_OPERAND (arg, 1);
11660       arg = TREE_OPERAND (arg, 0);
11661
11662       for (; arg; arg = OVL_NEXT (arg))
11663         {
11664           tree fn = OVL_CURRENT (arg);
11665           tree subargs, elem;
11666
11667           if (TREE_CODE (fn) != TEMPLATE_DECL)
11668             continue;
11669
11670           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11671                                   expl_subargs, /*check_ret=*/false);
11672           if (subargs)
11673             {
11674               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
11675               good += try_one_overload (tparms, targs, tempargs, parm,
11676                                         elem, strict, sub_strict, addr_p);
11677             }
11678         }
11679     }
11680   else if (TREE_CODE (arg) != OVERLOAD
11681            && TREE_CODE (arg) != FUNCTION_DECL)
11682     /* If ARG is, for example, "(0, &f)" then its type will be unknown
11683        -- but the deduction does not succeed because the expression is
11684        not just the function on its own.  */
11685     return false;
11686   else
11687     for (; arg; arg = OVL_NEXT (arg))
11688       good += try_one_overload (tparms, targs, tempargs, parm,
11689                                 TREE_TYPE (OVL_CURRENT (arg)),
11690                                 strict, sub_strict, addr_p);
11691
11692   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11693      to function or pointer to member function argument if the set of
11694      overloaded functions does not contain function templates and at most
11695      one of a set of overloaded functions provides a unique match.
11696
11697      So if we found multiple possibilities, we return success but don't
11698      deduce anything.  */
11699
11700   if (good == 1)
11701     {
11702       int i = TREE_VEC_LENGTH (targs);
11703       for (; i--; )
11704         if (TREE_VEC_ELT (tempargs, i))
11705           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11706     }
11707   if (good)
11708     return true;
11709
11710   return false;
11711 }
11712
11713 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11714    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
11715    different overloads deduce different arguments for a given parm.
11716    ADDR_P is true if the expression for which deduction is being
11717    performed was of the form "& fn" rather than simply "fn".
11718
11719    Returns 1 on success.  */
11720
11721 static int
11722 try_one_overload (tree tparms,
11723                   tree orig_targs,
11724                   tree targs,
11725                   tree parm,
11726                   tree arg,
11727                   unification_kind_t strict,
11728                   int sub_strict,
11729                   bool addr_p)
11730 {
11731   int nargs;
11732   tree tempargs;
11733   int i;
11734
11735   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11736      to function or pointer to member function argument if the set of
11737      overloaded functions does not contain function templates and at most
11738      one of a set of overloaded functions provides a unique match.
11739
11740      So if this is a template, just return success.  */
11741
11742   if (uses_template_parms (arg))
11743     return 1;
11744
11745   if (TREE_CODE (arg) == METHOD_TYPE)
11746     arg = build_ptrmemfunc_type (build_pointer_type (arg));
11747   else if (addr_p)
11748     arg = build_pointer_type (arg);
11749
11750   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
11751
11752   /* We don't copy orig_targs for this because if we have already deduced
11753      some template args from previous args, unify would complain when we
11754      try to deduce a template parameter for the same argument, even though
11755      there isn't really a conflict.  */
11756   nargs = TREE_VEC_LENGTH (targs);
11757   tempargs = make_tree_vec (nargs);
11758
11759   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
11760     return 0;
11761
11762   /* First make sure we didn't deduce anything that conflicts with
11763      explicitly specified args.  */
11764   for (i = nargs; i--; )
11765     {
11766       tree elt = TREE_VEC_ELT (tempargs, i);
11767       tree oldelt = TREE_VEC_ELT (orig_targs, i);
11768
11769       if (!elt)
11770         /*NOP*/;
11771       else if (uses_template_parms (elt))
11772         /* Since we're unifying against ourselves, we will fill in
11773            template args used in the function parm list with our own
11774            template parms.  Discard them.  */
11775         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
11776       else if (oldelt && !template_args_equal (oldelt, elt))
11777         return 0;
11778     }
11779
11780   for (i = nargs; i--; )
11781     {
11782       tree elt = TREE_VEC_ELT (tempargs, i);
11783
11784       if (elt)
11785         TREE_VEC_ELT (targs, i) = elt;
11786     }
11787
11788   return 1;
11789 }
11790
11791 /* PARM is a template class (perhaps with unbound template
11792    parameters).  ARG is a fully instantiated type.  If ARG can be
11793    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
11794    TARGS are as for unify.  */
11795
11796 static tree
11797 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
11798 {
11799   tree copy_of_targs;
11800
11801   if (!CLASSTYPE_TEMPLATE_INFO (arg)
11802       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
11803           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
11804     return NULL_TREE;
11805
11806   /* We need to make a new template argument vector for the call to
11807      unify.  If we used TARGS, we'd clutter it up with the result of
11808      the attempted unification, even if this class didn't work out.
11809      We also don't want to commit ourselves to all the unifications
11810      we've already done, since unification is supposed to be done on
11811      an argument-by-argument basis.  In other words, consider the
11812      following pathological case:
11813
11814        template <int I, int J, int K>
11815        struct S {};
11816
11817        template <int I, int J>
11818        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
11819
11820        template <int I, int J, int K>
11821        void f(S<I, J, K>, S<I, I, I>);
11822
11823        void g() {
11824          S<0, 0, 0> s0;
11825          S<0, 1, 2> s2;
11826
11827          f(s0, s2);
11828        }
11829
11830      Now, by the time we consider the unification involving `s2', we
11831      already know that we must have `f<0, 0, 0>'.  But, even though
11832      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
11833      because there are two ways to unify base classes of S<0, 1, 2>
11834      with S<I, I, I>.  If we kept the already deduced knowledge, we
11835      would reject the possibility I=1.  */
11836   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
11837
11838   /* If unification failed, we're done.  */
11839   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
11840              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
11841     return NULL_TREE;
11842
11843   return arg;
11844 }
11845
11846 /* Given a template type PARM and a class type ARG, find the unique
11847    base type in ARG that is an instance of PARM.  We do not examine
11848    ARG itself; only its base-classes.  If there is not exactly one
11849    appropriate base class, return NULL_TREE.  PARM may be the type of
11850    a partial specialization, as well as a plain template type.  Used
11851    by unify.  */
11852
11853 static tree
11854 get_template_base (tree tparms, tree targs, tree parm, tree arg)
11855 {
11856   tree rval = NULL_TREE;
11857   tree binfo;
11858
11859   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
11860
11861   binfo = TYPE_BINFO (complete_type (arg));
11862   if (!binfo)
11863     /* The type could not be completed.  */
11864     return NULL_TREE;
11865
11866   /* Walk in inheritance graph order.  The search order is not
11867      important, and this avoids multiple walks of virtual bases.  */
11868   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
11869     {
11870       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
11871
11872       if (r)
11873         {
11874           /* If there is more than one satisfactory baseclass, then:
11875
11876                [temp.deduct.call]
11877
11878               If they yield more than one possible deduced A, the type
11879               deduction fails.
11880
11881              applies.  */
11882           if (rval && !same_type_p (r, rval))
11883             return NULL_TREE;
11884
11885           rval = r;
11886         }
11887     }
11888
11889   return rval;
11890 }
11891
11892 /* Returns the level of DECL, which declares a template parameter.  */
11893
11894 static int
11895 template_decl_level (tree decl)
11896 {
11897   switch (TREE_CODE (decl))
11898     {
11899     case TYPE_DECL:
11900     case TEMPLATE_DECL:
11901       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
11902
11903     case PARM_DECL:
11904       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
11905
11906     default:
11907       gcc_unreachable ();
11908     }
11909   return 0;
11910 }
11911
11912 /* Decide whether ARG can be unified with PARM, considering only the
11913    cv-qualifiers of each type, given STRICT as documented for unify.
11914    Returns nonzero iff the unification is OK on that basis.  */
11915
11916 static int
11917 check_cv_quals_for_unify (int strict, tree arg, tree parm)
11918 {
11919   int arg_quals = cp_type_quals (arg);
11920   int parm_quals = cp_type_quals (parm);
11921
11922   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11923       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
11924     {
11925       /*  Although a CVR qualifier is ignored when being applied to a
11926           substituted template parameter ([8.3.2]/1 for example), that
11927           does not apply during deduction [14.8.2.4]/1, (even though
11928           that is not explicitly mentioned, [14.8.2.4]/9 indicates
11929           this).  Except when we're allowing additional CV qualifiers
11930           at the outer level [14.8.2.1]/3,1st bullet.  */
11931       if ((TREE_CODE (arg) == REFERENCE_TYPE
11932            || TREE_CODE (arg) == FUNCTION_TYPE
11933            || TREE_CODE (arg) == METHOD_TYPE)
11934           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
11935         return 0;
11936
11937       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
11938           && (parm_quals & TYPE_QUAL_RESTRICT))
11939         return 0;
11940     }
11941
11942   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
11943       && (arg_quals & parm_quals) != parm_quals)
11944     return 0;
11945
11946   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
11947       && (parm_quals & arg_quals) != arg_quals)
11948     return 0;
11949
11950   return 1;
11951 }
11952
11953 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
11954 void 
11955 template_parm_level_and_index (tree parm, int* level, int* index)
11956 {
11957   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11958       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
11959       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
11960     {
11961       *index = TEMPLATE_TYPE_IDX (parm);
11962       *level = TEMPLATE_TYPE_LEVEL (parm);
11963     }
11964   else
11965     {
11966       *index = TEMPLATE_PARM_IDX (parm);
11967       *level = TEMPLATE_PARM_LEVEL (parm);
11968     }
11969 }
11970
11971 /* Unifies the remaining arguments in PACKED_ARGS with the pack
11972    expansion at the end of PACKED_PARMS. Returns 0 if the type
11973    deduction succeeds, 1 otherwise. STRICT is the same as in
11974    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
11975    call argument list. We'll need to adjust the arguments to make them
11976    types. SUBR tells us if this is from a recursive call to
11977    type_unification_real.  */
11978 int
11979 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
11980                       tree packed_args, int strict, bool call_args_p,
11981                       bool subr)
11982 {
11983   tree parm 
11984     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
11985   tree pattern = PACK_EXPANSION_PATTERN (parm);
11986   tree pack, packs = NULL_TREE;
11987   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
11988   int len = TREE_VEC_LENGTH (packed_args);
11989
11990   /* Determine the parameter packs we will be deducing from the
11991      pattern, and record their current deductions.  */
11992   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
11993        pack; pack = TREE_CHAIN (pack))
11994     {
11995       tree parm_pack = TREE_VALUE (pack);
11996       int idx, level;
11997
11998       /* Determine the index and level of this parameter pack.  */
11999       template_parm_level_and_index (parm_pack, &level, &idx);
12000
12001       /* Keep track of the parameter packs and their corresponding
12002          argument packs.  */
12003       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12004       TREE_TYPE (packs) = make_tree_vec (len - start);
12005     }
12006   
12007   /* Loop through all of the arguments that have not yet been
12008      unified and unify each with the pattern.  */
12009   for (i = start; i < len; i++)
12010     {
12011       tree parm = pattern;
12012
12013       /* For each parameter pack, clear out the deduced value so that
12014          we can deduce it again.  */
12015       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12016         {
12017           int idx, level;
12018           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12019
12020           TMPL_ARG (targs, level, idx) = NULL_TREE;
12021         }
12022
12023       /* Unify the pattern with the current argument.  */
12024       {
12025         tree arg = TREE_VEC_ELT (packed_args, i);
12026         int arg_strict = strict;
12027         bool skip_arg_p = false;
12028
12029         if (call_args_p)
12030           {
12031             int sub_strict;
12032
12033             /* This mirrors what we do in type_unification_real.  */
12034             switch (strict)
12035               {
12036               case DEDUCE_CALL:
12037                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12038                               | UNIFY_ALLOW_MORE_CV_QUAL
12039                               | UNIFY_ALLOW_DERIVED);
12040                 break;
12041                 
12042               case DEDUCE_CONV:
12043                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12044                 break;
12045                 
12046               case DEDUCE_EXACT:
12047                 sub_strict = UNIFY_ALLOW_NONE;
12048                 break;
12049                 
12050               default:
12051                 gcc_unreachable ();
12052               }
12053
12054             if (!TYPE_P (arg))
12055               {
12056                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12057                 if (type_unknown_p (arg))
12058                   {
12059                     /* [temp.deduct.type] A template-argument can be
12060                        deduced from a pointer to function or pointer
12061                        to member function argument if the set of
12062                        overloaded functions does not contain function
12063                        templates and at most one of a set of
12064                        overloaded functions provides a unique
12065                        match.  */
12066
12067                     if (resolve_overloaded_unification
12068                         (tparms, targs, parm, arg, strict, sub_strict)
12069                         != 0)
12070                       return 1;
12071                     skip_arg_p = true;
12072                   }
12073
12074                 if (!skip_arg_p)
12075                   {
12076                     arg = TREE_TYPE (arg);
12077                     if (arg == error_mark_node)
12078                       return 1;
12079                   }
12080               }
12081       
12082             arg_strict = sub_strict;
12083
12084             if (!subr)
12085               arg_strict |= 
12086                 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12087           }
12088
12089         if (!skip_arg_p)
12090           {
12091             if (unify (tparms, targs, parm, arg, arg_strict))
12092               return 1;
12093           }
12094       }
12095
12096       /* For each parameter pack, collect the deduced value.  */
12097       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12098         {
12099           int idx, level;
12100           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12101
12102           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12103             TMPL_ARG (targs, level, idx);
12104         }
12105     }
12106
12107   /* Verify that the results of unification with the parameter packs
12108      produce results consistent with what we've seen before, and make
12109      the deduced argument packs available.  */
12110   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12111     {
12112       tree old_pack = TREE_VALUE (pack);
12113       tree new_args = TREE_TYPE (pack);
12114
12115       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12116         {
12117           /* Prepend the explicit arguments onto NEW_ARGS.  */
12118           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12119           tree old_args = new_args;
12120           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12121           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12122
12123           /* Copy the explicit arguments.  */
12124           new_args = make_tree_vec (len);
12125           for (i = 0; i < explicit_len; i++)
12126             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12127
12128           /* Copy the deduced arguments.  */
12129           for (; i < len; i++)
12130             TREE_VEC_ELT (new_args, i) =
12131               TREE_VEC_ELT (old_args, i - explicit_len);
12132         }
12133
12134       if (!old_pack)
12135         {
12136           tree result;
12137           int idx, level;
12138           
12139           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12140
12141           /* Build the deduced *_ARGUMENT_PACK.  */
12142           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12143             {
12144               result = make_node (NONTYPE_ARGUMENT_PACK);
12145               TREE_TYPE (result) = 
12146                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12147               TREE_CONSTANT (result) = 1;
12148             }
12149           else
12150             result = make_node (TYPE_ARGUMENT_PACK);
12151
12152           SET_ARGUMENT_PACK_ARGS (result, new_args);
12153
12154           /* Note the deduced argument packs for this parameter
12155              pack.  */
12156           TMPL_ARG (targs, level, idx) = result;
12157         }
12158       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12159                && (ARGUMENT_PACK_ARGS (old_pack) 
12160                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12161         {
12162           /* We only had the explicitly-provided arguments before, but
12163              now we have a complete set of arguments.  */
12164           int idx, level;
12165           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12166           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12167
12168           /* Keep the original deduced argument pack.  */
12169           TMPL_ARG (targs, level, idx) = old_pack;
12170
12171           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12172           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12173           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12174         }
12175       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12176                                     new_args))
12177         /* Inconsistent unification of this parameter pack.  */
12178         return 1;
12179       else
12180         {
12181           int idx, level;
12182           
12183           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12184
12185           /* Keep the original deduced argument pack.  */
12186           TMPL_ARG (targs, level, idx) = old_pack;
12187         }
12188     }
12189
12190   return 0;
12191 }
12192
12193 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12194    set of template parameters to a template.  TARGS is the bindings
12195    for those template parameters, as determined thus far; TARGS may
12196    include template arguments for outer levels of template parameters
12197    as well.  PARM is a parameter to a template function, or a
12198    subcomponent of that parameter; ARG is the corresponding argument.
12199    This function attempts to match PARM with ARG in a manner
12200    consistent with the existing assignments in TARGS.  If more values
12201    are deduced, then TARGS is updated.
12202
12203    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12204    parameter STRICT is a bitwise or of the following flags:
12205
12206      UNIFY_ALLOW_NONE:
12207        Require an exact match between PARM and ARG.
12208      UNIFY_ALLOW_MORE_CV_QUAL:
12209        Allow the deduced ARG to be more cv-qualified (by qualification
12210        conversion) than ARG.
12211      UNIFY_ALLOW_LESS_CV_QUAL:
12212        Allow the deduced ARG to be less cv-qualified than ARG.
12213      UNIFY_ALLOW_DERIVED:
12214        Allow the deduced ARG to be a template base class of ARG,
12215        or a pointer to a template base class of the type pointed to by
12216        ARG.
12217      UNIFY_ALLOW_INTEGER:
12218        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
12219        case for more information.
12220      UNIFY_ALLOW_OUTER_LEVEL:
12221        This is the outermost level of a deduction. Used to determine validity
12222        of qualification conversions. A valid qualification conversion must
12223        have const qualified pointers leading up to the inner type which
12224        requires additional CV quals, except at the outer level, where const
12225        is not required [conv.qual]. It would be normal to set this flag in
12226        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12227      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12228        This is the outermost level of a deduction, and PARM can be more CV
12229        qualified at this point.
12230      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12231        This is the outermost level of a deduction, and PARM can be less CV
12232        qualified at this point.  */
12233
12234 static int
12235 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12236 {
12237   int idx;
12238   tree targ;
12239   tree tparm;
12240   int strict_in = strict;
12241
12242   /* I don't think this will do the right thing with respect to types.
12243      But the only case I've seen it in so far has been array bounds, where
12244      signedness is the only information lost, and I think that will be
12245      okay.  */
12246   while (TREE_CODE (parm) == NOP_EXPR)
12247     parm = TREE_OPERAND (parm, 0);
12248
12249   if (arg == error_mark_node)
12250     return 1;
12251   if (arg == unknown_type_node)
12252     /* We can't deduce anything from this, but we might get all the
12253        template args from other function args.  */
12254     return 0;
12255
12256   /* If PARM uses template parameters, then we can't bail out here,
12257      even if ARG == PARM, since we won't record unifications for the
12258      template parameters.  We might need them if we're trying to
12259      figure out which of two things is more specialized.  */
12260   if (arg == parm && !uses_template_parms (parm))
12261     return 0;
12262
12263   /* Immediately reject some pairs that won't unify because of
12264      cv-qualification mismatches.  */
12265   if (TREE_CODE (arg) == TREE_CODE (parm)
12266       && TYPE_P (arg)
12267       /* It is the elements of the array which hold the cv quals of an array
12268          type, and the elements might be template type parms. We'll check
12269          when we recurse.  */
12270       && TREE_CODE (arg) != ARRAY_TYPE
12271       /* We check the cv-qualifiers when unifying with template type
12272          parameters below.  We want to allow ARG `const T' to unify with
12273          PARM `T' for example, when computing which of two templates
12274          is more specialized, for example.  */
12275       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12276       && !check_cv_quals_for_unify (strict_in, arg, parm))
12277     return 1;
12278
12279   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12280       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12281     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12282   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12283   strict &= ~UNIFY_ALLOW_DERIVED;
12284   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12285   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12286
12287   switch (TREE_CODE (parm))
12288     {
12289     case TYPENAME_TYPE:
12290     case SCOPE_REF:
12291     case UNBOUND_CLASS_TEMPLATE:
12292       /* In a type which contains a nested-name-specifier, template
12293          argument values cannot be deduced for template parameters used
12294          within the nested-name-specifier.  */
12295       return 0;
12296
12297     case TEMPLATE_TYPE_PARM:
12298     case TEMPLATE_TEMPLATE_PARM:
12299     case BOUND_TEMPLATE_TEMPLATE_PARM:
12300       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12301       if (tparm == error_mark_node)
12302         return 1;
12303
12304       if (TEMPLATE_TYPE_LEVEL (parm)
12305           != template_decl_level (tparm))
12306         /* The PARM is not one we're trying to unify.  Just check
12307            to see if it matches ARG.  */
12308         return (TREE_CODE (arg) == TREE_CODE (parm)
12309                 && same_type_p (parm, arg)) ? 0 : 1;
12310       idx = TEMPLATE_TYPE_IDX (parm);
12311       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12312       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12313
12314       /* Check for mixed types and values.  */
12315       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12316            && TREE_CODE (tparm) != TYPE_DECL)
12317           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12318               && TREE_CODE (tparm) != TEMPLATE_DECL))
12319         return 1;
12320
12321       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12322         {
12323           /* ARG must be constructed from a template class or a template
12324              template parameter.  */
12325           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12326               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12327             return 1;
12328
12329           {
12330             tree parmvec = TYPE_TI_ARGS (parm);
12331             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12332             tree argtmplvec
12333               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12334             int i;
12335
12336             /* The resolution to DR150 makes clear that default
12337                arguments for an N-argument may not be used to bind T
12338                to a template template parameter with fewer than N
12339                parameters.  It is not safe to permit the binding of
12340                default arguments as an extension, as that may change
12341                the meaning of a conforming program.  Consider:
12342
12343                   struct Dense { static const unsigned int dim = 1; };
12344
12345                   template <template <typename> class View,
12346                             typename Block>
12347                   void operator+(float, View<Block> const&);
12348
12349                   template <typename Block,
12350                             unsigned int Dim = Block::dim>
12351                   struct Lvalue_proxy { operator float() const; };
12352
12353                   void
12354                   test_1d (void) {
12355                     Lvalue_proxy<Dense> p;
12356                     float b;
12357                     b + p;
12358                   }
12359
12360               Here, if Lvalue_proxy is permitted to bind to View, then
12361               the global operator+ will be used; if they are not, the
12362               Lvalue_proxy will be converted to float.  */
12363             if (coerce_template_parms (argtmplvec, parmvec,
12364                                        TYPE_TI_TEMPLATE (parm),
12365                                        tf_none,
12366                                        /*require_all_args=*/true,
12367                                        /*use_default_args=*/false)
12368                 == error_mark_node)
12369               return 1;
12370
12371             /* Deduce arguments T, i from TT<T> or TT<i>.
12372                We check each element of PARMVEC and ARGVEC individually
12373                rather than the whole TREE_VEC since they can have
12374                different number of elements.  */
12375
12376             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12377               {
12378                 if (unify (tparms, targs,
12379                            TREE_VEC_ELT (parmvec, i),
12380                            TREE_VEC_ELT (argvec, i),
12381                            UNIFY_ALLOW_NONE))
12382                   return 1;
12383               }
12384           }
12385           arg = TYPE_TI_TEMPLATE (arg);
12386
12387           /* Fall through to deduce template name.  */
12388         }
12389
12390       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12391           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12392         {
12393           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
12394
12395           /* Simple cases: Value already set, does match or doesn't.  */
12396           if (targ != NULL_TREE && template_args_equal (targ, arg))
12397             return 0;
12398           else if (targ)
12399             return 1;
12400         }
12401       else
12402         {
12403           /* If PARM is `const T' and ARG is only `int', we don't have
12404              a match unless we are allowing additional qualification.
12405              If ARG is `const int' and PARM is just `T' that's OK;
12406              that binds `const int' to `T'.  */
12407           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12408                                          arg, parm))
12409             return 1;
12410
12411           /* Consider the case where ARG is `const volatile int' and
12412              PARM is `const T'.  Then, T should be `volatile int'.  */
12413           arg = cp_build_qualified_type_real
12414             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12415           if (arg == error_mark_node)
12416             return 1;
12417
12418           /* Simple cases: Value already set, does match or doesn't.  */
12419           if (targ != NULL_TREE && same_type_p (targ, arg))
12420             return 0;
12421           else if (targ)
12422             return 1;
12423
12424           /* Make sure that ARG is not a variable-sized array.  (Note
12425              that were talking about variable-sized arrays (like
12426              `int[n]'), rather than arrays of unknown size (like
12427              `int[]').)  We'll get very confused by such a type since
12428              the bound of the array will not be computable in an
12429              instantiation.  Besides, such types are not allowed in
12430              ISO C++, so we can do as we please here.  */
12431           if (variably_modified_type_p (arg, NULL_TREE))
12432             return 1;
12433         }
12434
12435       /* If ARG is a parameter pack or an expansion, we cannot unify
12436          against it unless PARM is also a parameter pack.  */
12437       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12438           && !template_parameter_pack_p (parm))
12439         return 1;
12440
12441       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12442       return 0;
12443
12444     case TEMPLATE_PARM_INDEX:
12445       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12446       if (tparm == error_mark_node)
12447         return 1;
12448
12449       if (TEMPLATE_PARM_LEVEL (parm)
12450           != template_decl_level (tparm))
12451         /* The PARM is not one we're trying to unify.  Just check
12452            to see if it matches ARG.  */
12453         return !(TREE_CODE (arg) == TREE_CODE (parm)
12454                  && cp_tree_equal (parm, arg));
12455
12456       idx = TEMPLATE_PARM_IDX (parm);
12457       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12458
12459       if (targ)
12460         return !cp_tree_equal (targ, arg);
12461
12462       /* [temp.deduct.type] If, in the declaration of a function template
12463          with a non-type template-parameter, the non-type
12464          template-parameter is used in an expression in the function
12465          parameter-list and, if the corresponding template-argument is
12466          deduced, the template-argument type shall match the type of the
12467          template-parameter exactly, except that a template-argument
12468          deduced from an array bound may be of any integral type.
12469          The non-type parameter might use already deduced type parameters.  */
12470       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12471       if (!TREE_TYPE (arg))
12472         /* Template-parameter dependent expression.  Just accept it for now.
12473            It will later be processed in convert_template_argument.  */
12474         ;
12475       else if (same_type_p (TREE_TYPE (arg), tparm))
12476         /* OK */;
12477       else if ((strict & UNIFY_ALLOW_INTEGER)
12478                && (TREE_CODE (tparm) == INTEGER_TYPE
12479                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
12480         /* Convert the ARG to the type of PARM; the deduced non-type
12481            template argument must exactly match the types of the
12482            corresponding parameter.  */
12483         arg = fold (build_nop (TREE_TYPE (parm), arg));
12484       else if (uses_template_parms (tparm))
12485         /* We haven't deduced the type of this parameter yet.  Try again
12486            later.  */
12487         return 0;
12488       else
12489         return 1;
12490
12491       /* If ARG is a parameter pack or an expansion, we cannot unify
12492          against it unless PARM is also a parameter pack.  */
12493       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12494           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12495         return 1;
12496
12497       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12498       return 0;
12499
12500     case PTRMEM_CST:
12501      {
12502         /* A pointer-to-member constant can be unified only with
12503          another constant.  */
12504       if (TREE_CODE (arg) != PTRMEM_CST)
12505         return 1;
12506
12507       /* Just unify the class member. It would be useless (and possibly
12508          wrong, depending on the strict flags) to unify also
12509          PTRMEM_CST_CLASS, because we want to be sure that both parm and
12510          arg refer to the same variable, even if through different
12511          classes. For instance:
12512
12513          struct A { int x; };
12514          struct B : A { };
12515
12516          Unification of &A::x and &B::x must succeed.  */
12517       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
12518                     PTRMEM_CST_MEMBER (arg), strict);
12519      }
12520
12521     case POINTER_TYPE:
12522       {
12523         if (TREE_CODE (arg) != POINTER_TYPE)
12524           return 1;
12525
12526         /* [temp.deduct.call]
12527
12528            A can be another pointer or pointer to member type that can
12529            be converted to the deduced A via a qualification
12530            conversion (_conv.qual_).
12531
12532            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12533            This will allow for additional cv-qualification of the
12534            pointed-to types if appropriate.  */
12535
12536         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
12537           /* The derived-to-base conversion only persists through one
12538              level of pointers.  */
12539           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
12540
12541         return unify (tparms, targs, TREE_TYPE (parm),
12542                       TREE_TYPE (arg), strict);
12543       }
12544
12545     case REFERENCE_TYPE:
12546       if (TREE_CODE (arg) != REFERENCE_TYPE)
12547         return 1;
12548       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12549                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12550
12551     case ARRAY_TYPE:
12552       if (TREE_CODE (arg) != ARRAY_TYPE)
12553         return 1;
12554       if ((TYPE_DOMAIN (parm) == NULL_TREE)
12555           != (TYPE_DOMAIN (arg) == NULL_TREE))
12556         return 1;
12557       if (TYPE_DOMAIN (parm) != NULL_TREE)
12558         {
12559           tree parm_max;
12560           tree arg_max;
12561           bool parm_cst;
12562           bool arg_cst;
12563
12564           /* Our representation of array types uses "N - 1" as the
12565              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12566              not an integer constant.  We cannot unify arbitrarily
12567              complex expressions, so we eliminate the MINUS_EXPRs
12568              here.  */
12569           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12570           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12571           if (!parm_cst)
12572             {
12573               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
12574               parm_max = TREE_OPERAND (parm_max, 0);
12575             }
12576           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12577           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12578           if (!arg_cst)
12579             {
12580               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12581                  trying to unify the type of a variable with the type
12582                  of a template parameter.  For example:
12583
12584                    template <unsigned int N>
12585                    void f (char (&) [N]);
12586                    int g(); 
12587                    void h(int i) {
12588                      char a[g(i)];
12589                      f(a); 
12590                    }
12591
12592                 Here, the type of the ARG will be "int [g(i)]", and
12593                 may be a SAVE_EXPR, etc.  */
12594               if (TREE_CODE (arg_max) != MINUS_EXPR)
12595                 return 1;
12596               arg_max = TREE_OPERAND (arg_max, 0);
12597             }
12598
12599           /* If only one of the bounds used a MINUS_EXPR, compensate
12600              by adding one to the other bound.  */
12601           if (parm_cst && !arg_cst)
12602             parm_max = fold_build2 (PLUS_EXPR,
12603                                     integer_type_node,
12604                                     parm_max,
12605                                     integer_one_node);
12606           else if (arg_cst && !parm_cst)
12607             arg_max = fold_build2 (PLUS_EXPR,
12608                                    integer_type_node,
12609                                    arg_max,
12610                                    integer_one_node);
12611
12612           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12613             return 1;
12614         }
12615       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12616                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12617
12618     case REAL_TYPE:
12619     case COMPLEX_TYPE:
12620     case VECTOR_TYPE:
12621     case INTEGER_TYPE:
12622     case BOOLEAN_TYPE:
12623     case ENUMERAL_TYPE:
12624     case VOID_TYPE:
12625       if (TREE_CODE (arg) != TREE_CODE (parm))
12626         return 1;
12627
12628       /* We have already checked cv-qualification at the top of the
12629          function.  */
12630       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
12631         return 1;
12632
12633       /* As far as unification is concerned, this wins.  Later checks
12634          will invalidate it if necessary.  */
12635       return 0;
12636
12637       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
12638       /* Type INTEGER_CST can come from ordinary constant template args.  */
12639     case INTEGER_CST:
12640       while (TREE_CODE (arg) == NOP_EXPR)
12641         arg = TREE_OPERAND (arg, 0);
12642
12643       if (TREE_CODE (arg) != INTEGER_CST)
12644         return 1;
12645       return !tree_int_cst_equal (parm, arg);
12646
12647     case TREE_VEC:
12648       {
12649         int i;
12650         if (TREE_CODE (arg) != TREE_VEC)
12651           return 1;
12652         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12653           return 1;
12654         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
12655           if (unify (tparms, targs,
12656                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
12657                      UNIFY_ALLOW_NONE))
12658             return 1;
12659         return 0;
12660       }
12661
12662     case RECORD_TYPE:
12663     case UNION_TYPE:
12664       if (TREE_CODE (arg) != TREE_CODE (parm))
12665         return 1;
12666
12667       if (TYPE_PTRMEMFUNC_P (parm))
12668         {
12669           if (!TYPE_PTRMEMFUNC_P (arg))
12670             return 1;
12671
12672           return unify (tparms, targs,
12673                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
12674                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
12675                         strict);
12676         }
12677
12678       if (CLASSTYPE_TEMPLATE_INFO (parm))
12679         {
12680           tree t = NULL_TREE;
12681
12682           if (strict_in & UNIFY_ALLOW_DERIVED)
12683             {
12684               /* First, we try to unify the PARM and ARG directly.  */
12685               t = try_class_unification (tparms, targs,
12686                                          parm, arg);
12687
12688               if (!t)
12689                 {
12690                   /* Fallback to the special case allowed in
12691                      [temp.deduct.call]:
12692
12693                        If P is a class, and P has the form
12694                        template-id, then A can be a derived class of
12695                        the deduced A.  Likewise, if P is a pointer to
12696                        a class of the form template-id, A can be a
12697                        pointer to a derived class pointed to by the
12698                        deduced A.  */
12699                   t = get_template_base (tparms, targs, parm, arg);
12700
12701                   if (!t)
12702                     return 1;
12703                 }
12704             }
12705           else if (CLASSTYPE_TEMPLATE_INFO (arg)
12706                    && (CLASSTYPE_TI_TEMPLATE (parm)
12707                        == CLASSTYPE_TI_TEMPLATE (arg)))
12708             /* Perhaps PARM is something like S<U> and ARG is S<int>.
12709                Then, we should unify `int' and `U'.  */
12710             t = arg;
12711           else
12712             /* There's no chance of unification succeeding.  */
12713             return 1;
12714
12715           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
12716                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
12717         }
12718       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
12719         return 1;
12720       return 0;
12721
12722     case METHOD_TYPE:
12723     case FUNCTION_TYPE:
12724       if (TREE_CODE (arg) != TREE_CODE (parm))
12725         return 1;
12726
12727       /* CV qualifications for methods can never be deduced, they must
12728          match exactly.  We need to check them explicitly here,
12729          because type_unification_real treats them as any other
12730          cvqualified parameter.  */
12731       if (TREE_CODE (parm) == METHOD_TYPE
12732           && (!check_cv_quals_for_unify
12733               (UNIFY_ALLOW_NONE,
12734                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12735                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12736         return 1;
12737
12738       if (unify (tparms, targs, TREE_TYPE (parm),
12739                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
12740         return 1;
12741       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
12742                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
12743                                     LOOKUP_NORMAL);
12744
12745     case OFFSET_TYPE:
12746       /* Unify a pointer to member with a pointer to member function, which
12747          deduces the type of the member as a function type. */
12748       if (TYPE_PTRMEMFUNC_P (arg))
12749         {
12750           tree method_type;
12751           tree fntype;
12752           cp_cv_quals cv_quals;
12753
12754           /* Check top-level cv qualifiers */
12755           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
12756             return 1;
12757
12758           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12759                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
12760             return 1;
12761
12762           /* Determine the type of the function we are unifying against. */
12763           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
12764           fntype =
12765             build_function_type (TREE_TYPE (method_type),
12766                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
12767
12768           /* Extract the cv-qualifiers of the member function from the
12769              implicit object parameter and place them on the function
12770              type to be restored later. */
12771           cv_quals =
12772             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
12773           fntype = build_qualified_type (fntype, cv_quals);
12774           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
12775         }
12776
12777       if (TREE_CODE (arg) != OFFSET_TYPE)
12778         return 1;
12779       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12780                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
12781         return 1;
12782       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12783                     strict);
12784
12785     case CONST_DECL:
12786       if (DECL_TEMPLATE_PARM_P (parm))
12787         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
12788       if (arg != integral_constant_value (parm))
12789         return 1;
12790       return 0;
12791
12792     case FIELD_DECL:
12793     case TEMPLATE_DECL:
12794       /* Matched cases are handled by the ARG == PARM test above.  */
12795       return 1;
12796
12797     case TYPE_ARGUMENT_PACK:
12798     case NONTYPE_ARGUMENT_PACK:
12799       {
12800         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
12801         tree packed_args = ARGUMENT_PACK_ARGS (arg);
12802         int i, len = TREE_VEC_LENGTH (packed_parms);
12803         int argslen = TREE_VEC_LENGTH (packed_args);
12804         int parm_variadic_p = 0;
12805
12806         /* Check if the parameters end in a pack, making them variadic.  */
12807         if (len > 0 
12808             && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
12809           parm_variadic_p = 1;
12810
12811         /* If we don't have enough arguments to satisfy the parameters
12812            (not counting the pack expression at the end), or we have
12813            too many arguments for a parameter list that doesn't end in
12814            a pack expression, we can't unify.  */
12815         if (argslen < (len - parm_variadic_p)
12816             || (argslen > len && !parm_variadic_p))
12817           return 1;
12818
12819         /* Unify all of the parameters that precede the (optional)
12820            pack expression.  */
12821         for (i = 0; i < len - parm_variadic_p; ++i)
12822           {
12823             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
12824                        TREE_VEC_ELT (packed_args, i), strict))
12825               return 1;
12826           }
12827
12828         if (parm_variadic_p)
12829           return unify_pack_expansion (tparms, targs, 
12830                                        packed_parms, packed_args,
12831                                        strict, /*call_args_p=*/false,
12832                                        /*subr=*/false);
12833         return 0;
12834       }
12835
12836       break;
12837
12838     default:
12839       gcc_assert (EXPR_P (parm));
12840
12841       /* We must be looking at an expression.  This can happen with
12842          something like:
12843
12844            template <int I>
12845            void foo(S<I>, S<I + 2>);
12846
12847          This is a "nondeduced context":
12848
12849            [deduct.type]
12850
12851            The nondeduced contexts are:
12852
12853            --A type that is a template-id in which one or more of
12854              the template-arguments is an expression that references
12855              a template-parameter.
12856
12857          In these cases, we assume deduction succeeded, but don't
12858          actually infer any unifications.  */
12859
12860       if (!uses_template_parms (parm)
12861           && !template_args_equal (parm, arg))
12862         return 1;
12863       else
12864         return 0;
12865     }
12866 }
12867 \f
12868 /* Note that DECL can be defined in this translation unit, if
12869    required.  */
12870
12871 static void
12872 mark_definable (tree decl)
12873 {
12874   tree clone;
12875   DECL_NOT_REALLY_EXTERN (decl) = 1;
12876   FOR_EACH_CLONE (clone, decl)
12877     DECL_NOT_REALLY_EXTERN (clone) = 1;
12878 }
12879
12880 /* Called if RESULT is explicitly instantiated, or is a member of an
12881    explicitly instantiated class.  */
12882
12883 void
12884 mark_decl_instantiated (tree result, int extern_p)
12885 {
12886   SET_DECL_EXPLICIT_INSTANTIATION (result);
12887
12888   /* If this entity has already been written out, it's too late to
12889      make any modifications.  */
12890   if (TREE_ASM_WRITTEN (result))
12891     return;
12892
12893   if (TREE_CODE (result) != FUNCTION_DECL)
12894     /* The TREE_PUBLIC flag for function declarations will have been
12895        set correctly by tsubst.  */
12896     TREE_PUBLIC (result) = 1;
12897
12898   /* This might have been set by an earlier implicit instantiation.  */
12899   DECL_COMDAT (result) = 0;
12900
12901   if (extern_p)
12902     DECL_NOT_REALLY_EXTERN (result) = 0;
12903   else
12904     {
12905       mark_definable (result);
12906       /* Always make artificials weak.  */
12907       if (DECL_ARTIFICIAL (result) && flag_weak)
12908         comdat_linkage (result);
12909       /* For WIN32 we also want to put explicit instantiations in
12910          linkonce sections.  */
12911       else if (TREE_PUBLIC (result))
12912         maybe_make_one_only (result);
12913     }
12914
12915   /* If EXTERN_P, then this function will not be emitted -- unless
12916      followed by an explicit instantiation, at which point its linkage
12917      will be adjusted.  If !EXTERN_P, then this function will be
12918      emitted here.  In neither circumstance do we want
12919      import_export_decl to adjust the linkage.  */
12920   DECL_INTERFACE_KNOWN (result) = 1;
12921 }
12922
12923 /* Given two function templates PAT1 and PAT2, return:
12924
12925    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
12926    -1 if PAT2 is more specialized than PAT1.
12927    0 if neither is more specialized.
12928
12929    LEN indicates the number of parameters we should consider
12930    (defaulted parameters should not be considered).
12931
12932    The 1998 std underspecified function template partial ordering, and
12933    DR214 addresses the issue.  We take pairs of arguments, one from
12934    each of the templates, and deduce them against each other.  One of
12935    the templates will be more specialized if all the *other*
12936    template's arguments deduce against its arguments and at least one
12937    of its arguments *does* *not* deduce against the other template's
12938    corresponding argument.  Deduction is done as for class templates.
12939    The arguments used in deduction have reference and top level cv
12940    qualifiers removed.  Iff both arguments were originally reference
12941    types *and* deduction succeeds in both directions, the template
12942    with the more cv-qualified argument wins for that pairing (if
12943    neither is more cv-qualified, they both are equal).  Unlike regular
12944    deduction, after all the arguments have been deduced in this way,
12945    we do *not* verify the deduced template argument values can be
12946    substituted into non-deduced contexts, nor do we have to verify
12947    that all template arguments have been deduced.  */
12948
12949 int
12950 more_specialized_fn (tree pat1, tree pat2, int len)
12951 {
12952   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
12953   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
12954   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
12955   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
12956   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
12957   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
12958   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
12959   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
12960   int better1 = 0;
12961   int better2 = 0;
12962
12963   /* Remove the this parameter from non-static member functions.  If
12964      one is a non-static member function and the other is not a static
12965      member function, remove the first parameter from that function
12966      also.  This situation occurs for operator functions where we
12967      locate both a member function (with this pointer) and non-member
12968      operator (with explicit first operand).  */
12969   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
12970     {
12971       len--; /* LEN is the number of significant arguments for DECL1 */
12972       args1 = TREE_CHAIN (args1);
12973       if (!DECL_STATIC_FUNCTION_P (decl2))
12974         args2 = TREE_CHAIN (args2);
12975     }
12976   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
12977     {
12978       args2 = TREE_CHAIN (args2);
12979       if (!DECL_STATIC_FUNCTION_P (decl1))
12980         {
12981           len--;
12982           args1 = TREE_CHAIN (args1);
12983         }
12984     }
12985
12986   /* If only one is a conversion operator, they are unordered.  */
12987   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
12988     return 0;
12989
12990   /* Consider the return type for a conversion function */
12991   if (DECL_CONV_FN_P (decl1))
12992     {
12993       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
12994       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
12995       len++;
12996     }
12997
12998   processing_template_decl++;
12999
13000   while (len--)
13001     {
13002       tree arg1 = TREE_VALUE (args1);
13003       tree arg2 = TREE_VALUE (args2);
13004       int deduce1, deduce2;
13005       int quals1 = -1;
13006       int quals2 = -1;
13007
13008       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13009           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13010         {
13011           /* When both arguments are pack expansions, we need only
13012              unify the patterns themselves.  */
13013           arg1 = PACK_EXPANSION_PATTERN (arg1);
13014           arg2 = PACK_EXPANSION_PATTERN (arg2);
13015
13016           /* This is the last comparison we need to do.  */
13017           len = 0;
13018         }
13019
13020       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13021         {
13022           arg1 = TREE_TYPE (arg1);
13023           quals1 = cp_type_quals (arg1);
13024         }
13025
13026       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13027         {
13028           arg2 = TREE_TYPE (arg2);
13029           quals2 = cp_type_quals (arg2);
13030         }
13031
13032       if ((quals1 < 0) != (quals2 < 0))
13033         {
13034           /* Only of the args is a reference, see if we should apply
13035              array/function pointer decay to it.  This is not part of
13036              DR214, but is, IMHO, consistent with the deduction rules
13037              for the function call itself, and with our earlier
13038              implementation of the underspecified partial ordering
13039              rules.  (nathan).  */
13040           if (quals1 >= 0)
13041             {
13042               switch (TREE_CODE (arg1))
13043                 {
13044                 case ARRAY_TYPE:
13045                   arg1 = TREE_TYPE (arg1);
13046                   /* FALLTHROUGH. */
13047                 case FUNCTION_TYPE:
13048                   arg1 = build_pointer_type (arg1);
13049                   break;
13050
13051                 default:
13052                   break;
13053                 }
13054             }
13055           else
13056             {
13057               switch (TREE_CODE (arg2))
13058                 {
13059                 case ARRAY_TYPE:
13060                   arg2 = TREE_TYPE (arg2);
13061                   /* FALLTHROUGH. */
13062                 case FUNCTION_TYPE:
13063                   arg2 = build_pointer_type (arg2);
13064                   break;
13065
13066                 default:
13067                   break;
13068                 }
13069             }
13070         }
13071
13072       arg1 = TYPE_MAIN_VARIANT (arg1);
13073       arg2 = TYPE_MAIN_VARIANT (arg2);
13074
13075       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13076         {
13077           int i, len2 = list_length (args2);
13078           tree parmvec = make_tree_vec (1);
13079           tree argvec = make_tree_vec (len2);
13080           tree ta = args2;
13081
13082           /* Setup the parameter vector, which contains only ARG1.  */
13083           TREE_VEC_ELT (parmvec, 0) = arg1;
13084
13085           /* Setup the argument vector, which contains the remaining
13086              arguments.  */
13087           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13088             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13089
13090           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13091                                            argvec, UNIFY_ALLOW_NONE, 
13092                                            /*call_args_p=*/false, 
13093                                            /*subr=*/0);
13094
13095           /* We cannot deduce in the other direction, because ARG1 is
13096              a pack expansion but ARG2 is not.  */
13097           deduce2 = 0;
13098         }
13099       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13100         {
13101           int i, len1 = list_length (args1);
13102           tree parmvec = make_tree_vec (1);
13103           tree argvec = make_tree_vec (len1);
13104           tree ta = args1;
13105
13106           /* Setup the parameter vector, which contains only ARG1.  */
13107           TREE_VEC_ELT (parmvec, 0) = arg2;
13108
13109           /* Setup the argument vector, which contains the remaining
13110              arguments.  */
13111           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13112             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13113
13114           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13115                                            argvec, UNIFY_ALLOW_NONE, 
13116                                            /*call_args_p=*/false, 
13117                                            /*subr=*/0);
13118
13119           /* We cannot deduce in the other direction, because ARG2 is
13120              a pack expansion but ARG1 is not.*/
13121           deduce1 = 0;
13122         }
13123
13124       else
13125         {
13126           /* The normal case, where neither argument is a pack
13127              expansion.  */
13128           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13129           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13130         }
13131
13132       if (!deduce1)
13133         better2 = -1;
13134       if (!deduce2)
13135         better1 = -1;
13136       if (better1 < 0 && better2 < 0)
13137         /* We've failed to deduce something in either direction.
13138            These must be unordered.  */
13139         break;
13140
13141       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13142         {
13143           /* Deduces in both directions, see if quals can
13144              disambiguate.  Pretend the worse one failed to deduce. */
13145           if ((quals1 & quals2) == quals2)
13146             deduce1 = 0;
13147           if ((quals1 & quals2) == quals1)
13148             deduce2 = 0;
13149         }
13150       if (deduce1 && !deduce2 && !better2)
13151         better2 = 1;
13152       if (deduce2 && !deduce1 && !better1)
13153         better1 = 1;
13154
13155       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13156           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13157         /* We have already processed all of the arguments in our
13158            handing of the pack expansion type.  */
13159         len = 0;
13160
13161       args1 = TREE_CHAIN (args1);
13162       args2 = TREE_CHAIN (args2);
13163     }
13164
13165   processing_template_decl--;
13166
13167   /* All things being equal, if the next argument is a pack expansion
13168      for one function but not for the other, prefer the
13169      non-variadic function.  */
13170   if ((better1 > 0) - (better2 > 0) == 0
13171       && args1 && TREE_VALUE (args1)
13172       && args2 && TREE_VALUE (args2))
13173     {
13174       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13175         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13176       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13177         return 1;
13178     }
13179
13180   return (better1 > 0) - (better2 > 0);
13181 }
13182
13183 /* Determine which of two partial specializations is more specialized.
13184
13185    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13186    to the first partial specialization.  The TREE_VALUE is the
13187    innermost set of template parameters for the partial
13188    specialization.  PAT2 is similar, but for the second template.
13189
13190    Return 1 if the first partial specialization is more specialized;
13191    -1 if the second is more specialized; 0 if neither is more
13192    specialized.
13193
13194    See [temp.class.order] for information about determining which of
13195    two templates is more specialized.  */
13196
13197 static int
13198 more_specialized_class (tree pat1, tree pat2)
13199 {
13200   tree targs;
13201   tree tmpl1, tmpl2;
13202   int winner = 0;
13203   bool any_deductions = false;
13204
13205   tmpl1 = TREE_TYPE (pat1);
13206   tmpl2 = TREE_TYPE (pat2);
13207
13208   /* Just like what happens for functions, if we are ordering between
13209      different class template specializations, we may encounter dependent
13210      types in the arguments, and we need our dependency check functions
13211      to behave correctly.  */
13212   ++processing_template_decl;
13213   targs = get_class_bindings (TREE_VALUE (pat1),
13214                               CLASSTYPE_TI_ARGS (tmpl1),
13215                               CLASSTYPE_TI_ARGS (tmpl2));
13216   if (targs)
13217     {
13218       --winner;
13219       any_deductions = true;
13220     }
13221
13222   targs = get_class_bindings (TREE_VALUE (pat2),
13223                               CLASSTYPE_TI_ARGS (tmpl2),
13224                               CLASSTYPE_TI_ARGS (tmpl1));
13225   if (targs)
13226     {
13227       ++winner;
13228       any_deductions = true;
13229     }
13230   --processing_template_decl;
13231
13232   /* In the case of a tie where at least one of the class templates
13233      has a parameter pack at the end, the template with the most
13234      non-packed parameters wins.  */
13235   if (winner == 0
13236       && any_deductions
13237       && (template_args_variadic_p (TREE_PURPOSE (pat1))
13238           || template_args_variadic_p (TREE_PURPOSE (pat2))))
13239     {
13240       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13241       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13242       int len1 = TREE_VEC_LENGTH (args1);
13243       int len2 = TREE_VEC_LENGTH (args2);
13244
13245       /* We don't count the pack expansion at the end.  */
13246       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13247         --len1;
13248       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13249         --len2;
13250
13251       if (len1 > len2)
13252         return 1;
13253       else if (len1 < len2)
13254         return -1;
13255     }
13256
13257   return winner;
13258 }
13259
13260 /* Return the template arguments that will produce the function signature
13261    DECL from the function template FN, with the explicit template
13262    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
13263    also match.  Return NULL_TREE if no satisfactory arguments could be
13264    found.  */
13265
13266 static tree
13267 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13268 {
13269   int ntparms = DECL_NTPARMS (fn);
13270   tree targs = make_tree_vec (ntparms);
13271   tree decl_type;
13272   tree decl_arg_types;
13273
13274   /* Substitute the explicit template arguments into the type of DECL.
13275      The call to fn_type_unification will handle substitution into the
13276      FN.  */
13277   decl_type = TREE_TYPE (decl);
13278   if (explicit_args && uses_template_parms (decl_type))
13279     {
13280       tree tmpl;
13281       tree converted_args;
13282
13283       if (DECL_TEMPLATE_INFO (decl))
13284         tmpl = DECL_TI_TEMPLATE (decl);
13285       else
13286         /* We can get here for some invalid specializations.  */
13287         return NULL_TREE;
13288
13289       converted_args
13290         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13291                                  explicit_args, NULL_TREE,
13292                                  tf_none,
13293                                  /*require_all_args=*/false,
13294                                  /*use_default_args=*/false);
13295       if (converted_args == error_mark_node)
13296         return NULL_TREE;
13297
13298       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13299       if (decl_type == error_mark_node)
13300         return NULL_TREE;
13301     }
13302
13303   /* Never do unification on the 'this' parameter.  */
13304   decl_arg_types = skip_artificial_parms_for (decl, 
13305                                               TYPE_ARG_TYPES (decl_type));
13306
13307   if (fn_type_unification (fn, explicit_args, targs,
13308                            decl_arg_types,
13309                            (check_rettype || DECL_CONV_FN_P (fn)
13310                             ? TREE_TYPE (decl_type) : NULL_TREE),
13311                            DEDUCE_EXACT, LOOKUP_NORMAL))
13312     return NULL_TREE;
13313
13314   return targs;
13315 }
13316
13317 /* Return the innermost template arguments that, when applied to a
13318    template specialization whose innermost template parameters are
13319    TPARMS, and whose specialization arguments are PARMS, yield the
13320    ARGS.
13321
13322    For example, suppose we have:
13323
13324      template <class T, class U> struct S {};
13325      template <class T> struct S<T*, int> {};
13326
13327    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
13328    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13329    int}.  The resulting vector will be {double}, indicating that `T'
13330    is bound to `double'.  */
13331
13332 static tree
13333 get_class_bindings (tree tparms, tree spec_args, tree args)
13334 {
13335   int i, ntparms = TREE_VEC_LENGTH (tparms);
13336   tree deduced_args;
13337   tree innermost_deduced_args;
13338
13339   innermost_deduced_args = make_tree_vec (ntparms);
13340   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13341     {
13342       deduced_args = copy_node (args);
13343       SET_TMPL_ARGS_LEVEL (deduced_args,
13344                            TMPL_ARGS_DEPTH (deduced_args),
13345                            innermost_deduced_args);
13346     }
13347   else
13348     deduced_args = innermost_deduced_args;
13349
13350   if (unify (tparms, deduced_args,
13351              INNERMOST_TEMPLATE_ARGS (spec_args),
13352              INNERMOST_TEMPLATE_ARGS (args),
13353              UNIFY_ALLOW_NONE))
13354     return NULL_TREE;
13355
13356   for (i =  0; i < ntparms; ++i)
13357     if (! TREE_VEC_ELT (innermost_deduced_args, i))
13358       return NULL_TREE;
13359
13360   /* Verify that nondeduced template arguments agree with the type
13361      obtained from argument deduction.
13362
13363      For example:
13364
13365        struct A { typedef int X; };
13366        template <class T, class U> struct C {};
13367        template <class T> struct C<T, typename T::X> {};
13368
13369      Then with the instantiation `C<A, int>', we can deduce that
13370      `T' is `A' but unify () does not check whether `typename T::X'
13371      is `int'.  */
13372   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13373   if (spec_args == error_mark_node
13374       /* We only need to check the innermost arguments; the other
13375          arguments will always agree.  */
13376       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13377                               INNERMOST_TEMPLATE_ARGS (args)))
13378     return NULL_TREE;
13379
13380   return deduced_args;
13381 }
13382
13383 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
13384    Return the TREE_LIST node with the most specialized template, if
13385    any.  If there is no most specialized template, the error_mark_node
13386    is returned.
13387
13388    Note that this function does not look at, or modify, the
13389    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
13390    returned is one of the elements of INSTANTIATIONS, callers may
13391    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13392    and retrieve it from the value returned.  */
13393
13394 tree
13395 most_specialized_instantiation (tree templates)
13396 {
13397   tree fn, champ;
13398
13399   ++processing_template_decl;
13400
13401   champ = templates;
13402   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13403     {
13404       int fate = 0;
13405
13406       if (get_bindings (TREE_VALUE (champ),
13407                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13408                         NULL_TREE, /*check_ret=*/false))
13409         fate--;
13410
13411       if (get_bindings (TREE_VALUE (fn),
13412                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13413                         NULL_TREE, /*check_ret=*/false))
13414         fate++;
13415
13416       if (fate == -1)
13417         champ = fn;
13418       else if (!fate)
13419         {
13420           /* Equally specialized, move to next function.  If there
13421              is no next function, nothing's most specialized.  */
13422           fn = TREE_CHAIN (fn);
13423           champ = fn;
13424           if (!fn)
13425             break;
13426         }
13427     }
13428
13429   if (champ)
13430     /* Now verify that champ is better than everything earlier in the
13431        instantiation list.  */
13432     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13433       if (get_bindings (TREE_VALUE (champ),
13434                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13435                         NULL_TREE, /*check_ret=*/false)
13436           || !get_bindings (TREE_VALUE (fn),
13437                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13438                             NULL_TREE, /*check_ret=*/false))
13439         {
13440           champ = NULL_TREE;
13441           break;
13442         }
13443
13444   processing_template_decl--;
13445
13446   if (!champ)
13447     return error_mark_node;
13448
13449   return champ;
13450 }
13451
13452 /* If DECL is a specialization of some template, return the most
13453    general such template.  Otherwise, returns NULL_TREE.
13454
13455    For example, given:
13456
13457      template <class T> struct S { template <class U> void f(U); };
13458
13459    if TMPL is `template <class U> void S<int>::f(U)' this will return
13460    the full template.  This function will not trace past partial
13461    specializations, however.  For example, given in addition:
13462
13463      template <class T> struct S<T*> { template <class U> void f(U); };
13464
13465    if TMPL is `template <class U> void S<int*>::f(U)' this will return
13466    `template <class T> template <class U> S<T*>::f(U)'.  */
13467
13468 tree
13469 most_general_template (tree decl)
13470 {
13471   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13472      an immediate specialization.  */
13473   if (TREE_CODE (decl) == FUNCTION_DECL)
13474     {
13475       if (DECL_TEMPLATE_INFO (decl)) {
13476         decl = DECL_TI_TEMPLATE (decl);
13477
13478         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13479            template friend.  */
13480         if (TREE_CODE (decl) != TEMPLATE_DECL)
13481           return NULL_TREE;
13482       } else
13483         return NULL_TREE;
13484     }
13485
13486   /* Look for more and more general templates.  */
13487   while (DECL_TEMPLATE_INFO (decl))
13488     {
13489       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13490          (See cp-tree.h for details.)  */
13491       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13492         break;
13493
13494       if (CLASS_TYPE_P (TREE_TYPE (decl))
13495           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13496         break;
13497
13498       /* Stop if we run into an explicitly specialized class template.  */
13499       if (!DECL_NAMESPACE_SCOPE_P (decl)
13500           && DECL_CONTEXT (decl)
13501           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13502         break;
13503
13504       decl = DECL_TI_TEMPLATE (decl);
13505     }
13506
13507   return decl;
13508 }
13509
13510 /* Return the most specialized of the class template partial
13511    specializations of TMPL which can produce TYPE, a specialization of
13512    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
13513    a _TYPE node corresponding to the partial specialization, while the
13514    TREE_PURPOSE is the set of template arguments that must be
13515    substituted into the TREE_TYPE in order to generate TYPE.
13516
13517    If the choice of partial specialization is ambiguous, a diagnostic
13518    is issued, and the error_mark_node is returned.  If there are no
13519    partial specializations of TMPL matching TYPE, then NULL_TREE is
13520    returned.  */
13521
13522 static tree
13523 most_specialized_class (tree type, tree tmpl)
13524 {
13525   tree list = NULL_TREE;
13526   tree t;
13527   tree champ;
13528   int fate;
13529   bool ambiguous_p;
13530   tree args;
13531
13532   tmpl = most_general_template (tmpl);
13533   args = CLASSTYPE_TI_ARGS (type);
13534   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
13535     {
13536       tree partial_spec_args;
13537       tree spec_args;
13538
13539       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
13540       spec_args = get_class_bindings (TREE_VALUE (t),
13541                                       partial_spec_args,
13542                                       args);
13543       if (spec_args)
13544         {
13545           list = tree_cons (spec_args, TREE_VALUE (t), list);
13546           TREE_TYPE (list) = TREE_TYPE (t);
13547         }
13548     }
13549
13550   if (! list)
13551     return NULL_TREE;
13552
13553   ambiguous_p = false;
13554   t = list;
13555   champ = t;
13556   t = TREE_CHAIN (t);
13557   for (; t; t = TREE_CHAIN (t))
13558     {
13559       fate = more_specialized_class (champ, t);
13560       if (fate == 1)
13561         ;
13562       else
13563         {
13564           if (fate == 0)
13565             {
13566               t = TREE_CHAIN (t);
13567               if (! t)
13568                 {
13569                   ambiguous_p = true;
13570                   break;
13571                 }
13572             }
13573           champ = t;
13574         }
13575     }
13576
13577   if (!ambiguous_p)
13578     for (t = list; t && t != champ; t = TREE_CHAIN (t))
13579       {
13580         fate = more_specialized_class (champ, t);
13581         if (fate != 1)
13582           {
13583             ambiguous_p = true;
13584             break;
13585           }
13586       }
13587
13588   if (ambiguous_p)
13589     {
13590       const char *str = "candidates are:";
13591       error ("ambiguous class template instantiation for %q#T", type);
13592       for (t = list; t; t = TREE_CHAIN (t))
13593         {
13594           error ("%s %+#T", str, TREE_TYPE (t));
13595           str = "               ";
13596         }
13597       return error_mark_node;
13598     }
13599
13600   return champ;
13601 }
13602
13603 /* Explicitly instantiate DECL.  */
13604
13605 void
13606 do_decl_instantiation (tree decl, tree storage)
13607 {
13608   tree result = NULL_TREE;
13609   int extern_p = 0;
13610
13611   if (!decl || decl == error_mark_node)
13612     /* An error occurred, for which grokdeclarator has already issued
13613        an appropriate message.  */
13614     return;
13615   else if (! DECL_LANG_SPECIFIC (decl))
13616     {
13617       error ("explicit instantiation of non-template %q#D", decl);
13618       return;
13619     }
13620   else if (TREE_CODE (decl) == VAR_DECL)
13621     {
13622       /* There is an asymmetry here in the way VAR_DECLs and
13623          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
13624          the latter, the DECL we get back will be marked as a
13625          template instantiation, and the appropriate
13626          DECL_TEMPLATE_INFO will be set up.  This does not happen for
13627          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
13628          should handle VAR_DECLs as it currently handles
13629          FUNCTION_DECLs.  */
13630       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
13631       if (!result || TREE_CODE (result) != VAR_DECL)
13632         {
13633           error ("no matching template for %qD found", decl);
13634           return;
13635         }
13636       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13637         {
13638           error ("type %qT for explicit instantiation %qD does not match "
13639                  "declared type %qT", TREE_TYPE (result), decl,
13640                  TREE_TYPE (decl));
13641           return;
13642         }
13643     }
13644   else if (TREE_CODE (decl) != FUNCTION_DECL)
13645     {
13646       error ("explicit instantiation of %q#D", decl);
13647       return;
13648     }
13649   else
13650     result = decl;
13651
13652   /* Check for various error cases.  Note that if the explicit
13653      instantiation is valid the RESULT will currently be marked as an
13654      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13655      until we get here.  */
13656
13657   if (DECL_TEMPLATE_SPECIALIZATION (result))
13658     {
13659       /* DR 259 [temp.spec].
13660
13661          Both an explicit instantiation and a declaration of an explicit
13662          specialization shall not appear in a program unless the explicit
13663          instantiation follows a declaration of the explicit specialization.
13664
13665          For a given set of template parameters, if an explicit
13666          instantiation of a template appears after a declaration of an
13667          explicit specialization for that template, the explicit
13668          instantiation has no effect.  */
13669       return;
13670     }
13671   else if (DECL_EXPLICIT_INSTANTIATION (result))
13672     {
13673       /* [temp.spec]
13674
13675          No program shall explicitly instantiate any template more
13676          than once.
13677
13678          We check DECL_NOT_REALLY_EXTERN so as not to complain when
13679          the first instantiation was `extern' and the second is not,
13680          and EXTERN_P for the opposite case.  */
13681       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
13682         pedwarn ("duplicate explicit instantiation of %q#D", result);
13683       /* If an "extern" explicit instantiation follows an ordinary
13684          explicit instantiation, the template is instantiated.  */
13685       if (extern_p)
13686         return;
13687     }
13688   else if (!DECL_IMPLICIT_INSTANTIATION (result))
13689     {
13690       error ("no matching template for %qD found", result);
13691       return;
13692     }
13693   else if (!DECL_TEMPLATE_INFO (result))
13694     {
13695       pedwarn ("explicit instantiation of non-template %q#D", result);
13696       return;
13697     }
13698
13699   if (storage == NULL_TREE)
13700     ;
13701   else if (storage == ridpointers[(int) RID_EXTERN])
13702     {
13703       if (pedantic && !in_system_header)
13704         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
13705                  "instantiations");
13706       extern_p = 1;
13707     }
13708   else
13709     error ("storage class %qD applied to template instantiation", storage);
13710
13711   check_explicit_instantiation_namespace (result);
13712   mark_decl_instantiated (result, extern_p);
13713   if (! extern_p)
13714     instantiate_decl (result, /*defer_ok=*/1,
13715                       /*expl_inst_class_mem_p=*/false);
13716 }
13717
13718 static void
13719 mark_class_instantiated (tree t, int extern_p)
13720 {
13721   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
13722   SET_CLASSTYPE_INTERFACE_KNOWN (t);
13723   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
13724   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
13725   if (! extern_p)
13726     {
13727       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
13728       rest_of_type_compilation (t, 1);
13729     }
13730 }
13731
13732 /* Called from do_type_instantiation through binding_table_foreach to
13733    do recursive instantiation for the type bound in ENTRY.  */
13734 static void
13735 bt_instantiate_type_proc (binding_entry entry, void *data)
13736 {
13737   tree storage = *(tree *) data;
13738
13739   if (IS_AGGR_TYPE (entry->type)
13740       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
13741     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
13742 }
13743
13744 /* Called from do_type_instantiation to instantiate a member
13745    (a member function or a static member variable) of an
13746    explicitly instantiated class template.  */
13747 static void
13748 instantiate_class_member (tree decl, int extern_p)
13749 {
13750   mark_decl_instantiated (decl, extern_p);
13751   if (! extern_p)
13752     instantiate_decl (decl, /*defer_ok=*/1,
13753                       /*expl_inst_class_mem_p=*/true);
13754 }
13755
13756 /* Perform an explicit instantiation of template class T.  STORAGE, if
13757    non-null, is the RID for extern, inline or static.  COMPLAIN is
13758    nonzero if this is called from the parser, zero if called recursively,
13759    since the standard is unclear (as detailed below).  */
13760
13761 void
13762 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
13763 {
13764   int extern_p = 0;
13765   int nomem_p = 0;
13766   int static_p = 0;
13767   int previous_instantiation_extern_p = 0;
13768
13769   if (TREE_CODE (t) == TYPE_DECL)
13770     t = TREE_TYPE (t);
13771
13772   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
13773     {
13774       error ("explicit instantiation of non-template type %qT", t);
13775       return;
13776     }
13777
13778   complete_type (t);
13779
13780   if (!COMPLETE_TYPE_P (t))
13781     {
13782       if (complain & tf_error)
13783         error ("explicit instantiation of %q#T before definition of template",
13784                t);
13785       return;
13786     }
13787
13788   if (storage != NULL_TREE)
13789     {
13790       if (pedantic && !in_system_header)
13791         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
13792                 storage);
13793
13794       if (storage == ridpointers[(int) RID_INLINE])
13795         nomem_p = 1;
13796       else if (storage == ridpointers[(int) RID_EXTERN])
13797         extern_p = 1;
13798       else if (storage == ridpointers[(int) RID_STATIC])
13799         static_p = 1;
13800       else
13801         {
13802           error ("storage class %qD applied to template instantiation",
13803                  storage);
13804           extern_p = 0;
13805         }
13806     }
13807
13808   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
13809     {
13810       /* DR 259 [temp.spec].
13811
13812          Both an explicit instantiation and a declaration of an explicit
13813          specialization shall not appear in a program unless the explicit
13814          instantiation follows a declaration of the explicit specialization.
13815
13816          For a given set of template parameters, if an explicit
13817          instantiation of a template appears after a declaration of an
13818          explicit specialization for that template, the explicit
13819          instantiation has no effect.  */
13820       return;
13821     }
13822   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
13823     {
13824       /* [temp.spec]
13825
13826          No program shall explicitly instantiate any template more
13827          than once.
13828
13829          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
13830          instantiation was `extern'.  If EXTERN_P then the second is.
13831          These cases are OK.  */
13832       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
13833
13834       if (!previous_instantiation_extern_p && !extern_p
13835           && (complain & tf_error))
13836         pedwarn ("duplicate explicit instantiation of %q#T", t);
13837
13838       /* If we've already instantiated the template, just return now.  */
13839       if (!CLASSTYPE_INTERFACE_ONLY (t))
13840         return;
13841     }
13842
13843   check_explicit_instantiation_namespace (TYPE_NAME (t));
13844   mark_class_instantiated (t, extern_p);
13845
13846   if (nomem_p)
13847     return;
13848
13849   {
13850     tree tmp;
13851
13852     /* In contrast to implicit instantiation, where only the
13853        declarations, and not the definitions, of members are
13854        instantiated, we have here:
13855
13856          [temp.explicit]
13857
13858          The explicit instantiation of a class template specialization
13859          implies the instantiation of all of its members not
13860          previously explicitly specialized in the translation unit
13861          containing the explicit instantiation.
13862
13863        Of course, we can't instantiate member template classes, since
13864        we don't have any arguments for them.  Note that the standard
13865        is unclear on whether the instantiation of the members are
13866        *explicit* instantiations or not.  However, the most natural
13867        interpretation is that it should be an explicit instantiation.  */
13868
13869     if (! static_p)
13870       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
13871         if (TREE_CODE (tmp) == FUNCTION_DECL
13872             && DECL_TEMPLATE_INSTANTIATION (tmp))
13873           instantiate_class_member (tmp, extern_p);
13874
13875     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
13876       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
13877         instantiate_class_member (tmp, extern_p);
13878
13879     if (CLASSTYPE_NESTED_UTDS (t))
13880       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
13881                              bt_instantiate_type_proc, &storage);
13882   }
13883 }
13884
13885 /* Given a function DECL, which is a specialization of TMPL, modify
13886    DECL to be a re-instantiation of TMPL with the same template
13887    arguments.  TMPL should be the template into which tsubst'ing
13888    should occur for DECL, not the most general template.
13889
13890    One reason for doing this is a scenario like this:
13891
13892      template <class T>
13893      void f(const T&, int i);
13894
13895      void g() { f(3, 7); }
13896
13897      template <class T>
13898      void f(const T& t, const int i) { }
13899
13900    Note that when the template is first instantiated, with
13901    instantiate_template, the resulting DECL will have no name for the
13902    first parameter, and the wrong type for the second.  So, when we go
13903    to instantiate the DECL, we regenerate it.  */
13904
13905 static void
13906 regenerate_decl_from_template (tree decl, tree tmpl)
13907 {
13908   /* The arguments used to instantiate DECL, from the most general
13909      template.  */
13910   tree args;
13911   tree code_pattern;
13912
13913   args = DECL_TI_ARGS (decl);
13914   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
13915
13916   /* Make sure that we can see identifiers, and compute access
13917      correctly.  */
13918   push_access_scope (decl);
13919
13920   if (TREE_CODE (decl) == FUNCTION_DECL)
13921     {
13922       tree decl_parm;
13923       tree pattern_parm;
13924       tree specs;
13925       int args_depth;
13926       int parms_depth;
13927
13928       args_depth = TMPL_ARGS_DEPTH (args);
13929       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
13930       if (args_depth > parms_depth)
13931         args = get_innermost_template_args (args, parms_depth);
13932
13933       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
13934                                               args, tf_error, NULL_TREE);
13935       if (specs)
13936         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
13937                                                     specs);
13938
13939       /* Merge parameter declarations.  */
13940       decl_parm = skip_artificial_parms_for (decl,
13941                                              DECL_ARGUMENTS (decl));
13942       pattern_parm
13943         = skip_artificial_parms_for (code_pattern,
13944                                      DECL_ARGUMENTS (code_pattern));
13945       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
13946         {
13947           tree parm_type;
13948           tree attributes;
13949           
13950           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
13951             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
13952           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
13953                               NULL_TREE);
13954           parm_type = type_decays_to (parm_type);
13955           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
13956             TREE_TYPE (decl_parm) = parm_type;
13957           attributes = DECL_ATTRIBUTES (pattern_parm);
13958           if (DECL_ATTRIBUTES (decl_parm) != attributes)
13959             {
13960               DECL_ATTRIBUTES (decl_parm) = attributes;
13961               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
13962             }
13963           decl_parm = TREE_CHAIN (decl_parm);
13964           pattern_parm = TREE_CHAIN (pattern_parm);
13965         }
13966       /* Merge any parameters that match with the function parameter
13967          pack.  */
13968       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
13969         {
13970           int i, len;
13971           tree expanded_types;
13972           /* Expand the TYPE_PACK_EXPANSION that provides the types for
13973              the parameters in this function parameter pack.  */
13974           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
13975                                                  args, tf_error, NULL_TREE);
13976           len = TREE_VEC_LENGTH (expanded_types);
13977           for (i = 0; i < len; i++)
13978             {
13979               tree parm_type;
13980               tree attributes;
13981           
13982               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
13983                 /* Rename the parameter to include the index.  */
13984                 DECL_NAME (decl_parm) = 
13985                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
13986               parm_type = TREE_VEC_ELT (expanded_types, i);
13987               parm_type = type_decays_to (parm_type);
13988               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
13989                 TREE_TYPE (decl_parm) = parm_type;
13990               attributes = DECL_ATTRIBUTES (pattern_parm);
13991               if (DECL_ATTRIBUTES (decl_parm) != attributes)
13992                 {
13993                   DECL_ATTRIBUTES (decl_parm) = attributes;
13994                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
13995                 }
13996               decl_parm = TREE_CHAIN (decl_parm);
13997             }
13998         }
13999       /* Merge additional specifiers from the CODE_PATTERN.  */
14000       if (DECL_DECLARED_INLINE_P (code_pattern)
14001           && !DECL_DECLARED_INLINE_P (decl))
14002         DECL_DECLARED_INLINE_P (decl) = 1;
14003       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14004         DECL_INLINE (decl) = 1;
14005     }
14006   else if (TREE_CODE (decl) == VAR_DECL)
14007     DECL_INITIAL (decl) =
14008       tsubst_expr (DECL_INITIAL (code_pattern), args,
14009                    tf_error, DECL_TI_TEMPLATE (decl),
14010                    /*integral_constant_expression_p=*/false);
14011   else
14012     gcc_unreachable ();
14013
14014   pop_access_scope (decl);
14015 }
14016
14017 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14018    substituted to get DECL.  */
14019
14020 tree
14021 template_for_substitution (tree decl)
14022 {
14023   tree tmpl = DECL_TI_TEMPLATE (decl);
14024
14025   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14026      for the instantiation.  This is not always the most general
14027      template.  Consider, for example:
14028
14029         template <class T>
14030         struct S { template <class U> void f();
14031                    template <> void f<int>(); };
14032
14033      and an instantiation of S<double>::f<int>.  We want TD to be the
14034      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14035   while (/* An instantiation cannot have a definition, so we need a
14036             more general template.  */
14037          DECL_TEMPLATE_INSTANTIATION (tmpl)
14038            /* We must also deal with friend templates.  Given:
14039
14040                 template <class T> struct S {
14041                   template <class U> friend void f() {};
14042                 };
14043
14044               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14045               so far as the language is concerned, but that's still
14046               where we get the pattern for the instantiation from.  On
14047               other hand, if the definition comes outside the class, say:
14048
14049                 template <class T> struct S {
14050                   template <class U> friend void f();
14051                 };
14052                 template <class U> friend void f() {}
14053
14054               we don't need to look any further.  That's what the check for
14055               DECL_INITIAL is for.  */
14056           || (TREE_CODE (decl) == FUNCTION_DECL
14057               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14058               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14059     {
14060       /* The present template, TD, should not be a definition.  If it
14061          were a definition, we should be using it!  Note that we
14062          cannot restructure the loop to just keep going until we find
14063          a template with a definition, since that might go too far if
14064          a specialization was declared, but not defined.  */
14065       gcc_assert (TREE_CODE (decl) != VAR_DECL
14066                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14067
14068       /* Fetch the more general template.  */
14069       tmpl = DECL_TI_TEMPLATE (tmpl);
14070     }
14071
14072   return tmpl;
14073 }
14074
14075 /* Produce the definition of D, a _DECL generated from a template.  If
14076    DEFER_OK is nonzero, then we don't have to actually do the
14077    instantiation now; we just have to do it sometime.  Normally it is
14078    an error if this is an explicit instantiation but D is undefined.
14079    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14080    explicitly instantiated class template.  */
14081
14082 tree
14083 instantiate_decl (tree d, int defer_ok,
14084                   bool expl_inst_class_mem_p)
14085 {
14086   tree tmpl = DECL_TI_TEMPLATE (d);
14087   tree gen_args;
14088   tree args;
14089   tree td;
14090   tree code_pattern;
14091   tree spec;
14092   tree gen_tmpl;
14093   bool pattern_defined;
14094   int need_push;
14095   location_t saved_loc = input_location;
14096   int saved_in_system_header = in_system_header;
14097   bool external_p;
14098
14099   /* This function should only be used to instantiate templates for
14100      functions and static member variables.  */
14101   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14102               || TREE_CODE (d) == VAR_DECL);
14103
14104   /* Variables are never deferred; if instantiation is required, they
14105      are instantiated right away.  That allows for better code in the
14106      case that an expression refers to the value of the variable --
14107      if the variable has a constant value the referring expression can
14108      take advantage of that fact.  */
14109   if (TREE_CODE (d) == VAR_DECL)
14110     defer_ok = 0;
14111
14112   /* Don't instantiate cloned functions.  Instead, instantiate the
14113      functions they cloned.  */
14114   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14115     d = DECL_CLONED_FUNCTION (d);
14116
14117   if (DECL_TEMPLATE_INSTANTIATED (d))
14118     /* D has already been instantiated.  It might seem reasonable to
14119        check whether or not D is an explicit instantiation, and, if so,
14120        stop here.  But when an explicit instantiation is deferred
14121        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14122        is set, even though we still need to do the instantiation.  */
14123     return d;
14124
14125   /* If we already have a specialization of this declaration, then
14126      there's no reason to instantiate it.  Note that
14127      retrieve_specialization gives us both instantiations and
14128      specializations, so we must explicitly check
14129      DECL_TEMPLATE_SPECIALIZATION.  */
14130   gen_tmpl = most_general_template (tmpl);
14131   gen_args = DECL_TI_ARGS (d);
14132   spec = retrieve_specialization (gen_tmpl, gen_args,
14133                                   /*class_specializations_p=*/false);
14134   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14135     return spec;
14136
14137   /* This needs to happen before any tsubsting.  */
14138   if (! push_tinst_level (d))
14139     return d;
14140
14141   timevar_push (TV_PARSE);
14142
14143   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14144      for the instantiation.  */
14145   td = template_for_substitution (d);
14146   code_pattern = DECL_TEMPLATE_RESULT (td);
14147
14148   /* We should never be trying to instantiate a member of a class
14149      template or partial specialization.  */
14150   gcc_assert (d != code_pattern);
14151
14152   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14153       || DECL_TEMPLATE_SPECIALIZATION (td))
14154     /* In the case of a friend template whose definition is provided
14155        outside the class, we may have too many arguments.  Drop the
14156        ones we don't need.  The same is true for specializations.  */
14157     args = get_innermost_template_args
14158       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
14159   else
14160     args = gen_args;
14161
14162   if (TREE_CODE (d) == FUNCTION_DECL)
14163     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14164   else
14165     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14166
14167   /* We may be in the middle of deferred access check.  Disable it now.  */
14168   push_deferring_access_checks (dk_no_deferred);
14169
14170   /* Unless an explicit instantiation directive has already determined
14171      the linkage of D, remember that a definition is available for
14172      this entity.  */
14173   if (pattern_defined
14174       && !DECL_INTERFACE_KNOWN (d)
14175       && !DECL_NOT_REALLY_EXTERN (d))
14176     mark_definable (d);
14177
14178   input_location = DECL_SOURCE_LOCATION (d);
14179   in_system_header = DECL_IN_SYSTEM_HEADER (d);
14180
14181   /* If D is a member of an explicitly instantiated class template,
14182      and no definition is available, treat it like an implicit
14183      instantiation.  */
14184   if (!pattern_defined && expl_inst_class_mem_p
14185       && DECL_EXPLICIT_INSTANTIATION (d))
14186     {
14187       DECL_NOT_REALLY_EXTERN (d) = 0;
14188       DECL_INTERFACE_KNOWN (d) = 0;
14189       SET_DECL_IMPLICIT_INSTANTIATION (d);
14190     }
14191
14192   if (!defer_ok)
14193     {
14194       /* Recheck the substitutions to obtain any warning messages
14195          about ignoring cv qualifiers.  */
14196       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14197       tree type = TREE_TYPE (gen);
14198
14199       /* Make sure that we can see identifiers, and compute access
14200          correctly.  D is already the target FUNCTION_DECL with the
14201          right context.  */
14202       push_access_scope (d);
14203
14204       if (TREE_CODE (gen) == FUNCTION_DECL)
14205         {
14206           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14207           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14208                                           d);
14209           /* Don't simply tsubst the function type, as that will give
14210              duplicate warnings about poor parameter qualifications.
14211              The function arguments are the same as the decl_arguments
14212              without the top level cv qualifiers.  */
14213           type = TREE_TYPE (type);
14214         }
14215       tsubst (type, gen_args, tf_warning_or_error, d);
14216
14217       pop_access_scope (d);
14218     }
14219
14220   /* Check to see whether we know that this template will be
14221      instantiated in some other file, as with "extern template"
14222      extension.  */
14223   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14224   /* In general, we do not instantiate such templates...  */
14225   if (external_p
14226       /* ... but we instantiate inline functions so that we can inline
14227          them and ... */
14228       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14229       /* ... we instantiate static data members whose values are
14230          needed in integral constant expressions.  */
14231       && ! (TREE_CODE (d) == VAR_DECL
14232             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14233     goto out;
14234   /* Defer all other templates, unless we have been explicitly
14235      forbidden from doing so.  */
14236   if (/* If there is no definition, we cannot instantiate the
14237          template.  */
14238       ! pattern_defined
14239       /* If it's OK to postpone instantiation, do so.  */
14240       || defer_ok
14241       /* If this is a static data member that will be defined
14242          elsewhere, we don't want to instantiate the entire data
14243          member, but we do want to instantiate the initializer so that
14244          we can substitute that elsewhere.  */
14245       || (external_p && TREE_CODE (d) == VAR_DECL))
14246     {
14247       /* The definition of the static data member is now required so
14248          we must substitute the initializer.  */
14249       if (TREE_CODE (d) == VAR_DECL
14250           && !DECL_INITIAL (d)
14251           && DECL_INITIAL (code_pattern))
14252         {
14253           tree ns;
14254           tree init;
14255
14256           ns = decl_namespace_context (d);
14257           push_nested_namespace (ns);
14258           push_nested_class (DECL_CONTEXT (d));
14259           init = tsubst_expr (DECL_INITIAL (code_pattern),
14260                               args,
14261                               tf_warning_or_error, NULL_TREE,
14262                               /*integral_constant_expression_p=*/false);
14263           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14264                           /*asmspec_tree=*/NULL_TREE,
14265                           LOOKUP_ONLYCONVERTING);
14266           pop_nested_class ();
14267           pop_nested_namespace (ns);
14268         }
14269
14270       /* We restore the source position here because it's used by
14271          add_pending_template.  */
14272       input_location = saved_loc;
14273
14274       if (at_eof && !pattern_defined
14275           && DECL_EXPLICIT_INSTANTIATION (d))
14276         /* [temp.explicit]
14277
14278            The definition of a non-exported function template, a
14279            non-exported member function template, or a non-exported
14280            member function or static data member of a class template
14281            shall be present in every translation unit in which it is
14282            explicitly instantiated.  */
14283         pedwarn
14284           ("explicit instantiation of %qD but no definition available", d);
14285
14286       /* ??? Historically, we have instantiated inline functions, even
14287          when marked as "extern template".  */
14288       if (!(external_p && TREE_CODE (d) == VAR_DECL))
14289         add_pending_template (d);
14290       goto out;
14291     }
14292   /* Tell the repository that D is available in this translation unit
14293      -- and see if it is supposed to be instantiated here.  */
14294   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14295     {
14296       /* In a PCH file, despite the fact that the repository hasn't
14297          requested instantiation in the PCH it is still possible that
14298          an instantiation will be required in a file that includes the
14299          PCH.  */
14300       if (pch_file)
14301         add_pending_template (d);
14302       /* Instantiate inline functions so that the inliner can do its
14303          job, even though we'll not be emitting a copy of this
14304          function.  */
14305       if (!(TREE_CODE (d) == FUNCTION_DECL
14306             && flag_inline_trees
14307             && DECL_DECLARED_INLINE_P (d)))
14308         goto out;
14309     }
14310
14311   need_push = !cfun || !global_bindings_p ();
14312   if (need_push)
14313     push_to_top_level ();
14314
14315   /* Mark D as instantiated so that recursive calls to
14316      instantiate_decl do not try to instantiate it again.  */
14317   DECL_TEMPLATE_INSTANTIATED (d) = 1;
14318
14319   /* Regenerate the declaration in case the template has been modified
14320      by a subsequent redeclaration.  */
14321   regenerate_decl_from_template (d, td);
14322
14323   /* We already set the file and line above.  Reset them now in case
14324      they changed as a result of calling regenerate_decl_from_template.  */
14325   input_location = DECL_SOURCE_LOCATION (d);
14326
14327   if (TREE_CODE (d) == VAR_DECL)
14328     {
14329       tree init;
14330
14331       /* Clear out DECL_RTL; whatever was there before may not be right
14332          since we've reset the type of the declaration.  */
14333       SET_DECL_RTL (d, NULL_RTX);
14334       DECL_IN_AGGR_P (d) = 0;
14335
14336       /* The initializer is placed in DECL_INITIAL by
14337          regenerate_decl_from_template.  Pull it out so that
14338          finish_decl can process it.  */
14339       init = DECL_INITIAL (d);
14340       DECL_INITIAL (d) = NULL_TREE;
14341       DECL_INITIALIZED_P (d) = 0;
14342
14343       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14344          initializer.  That function will defer actual emission until
14345          we have a chance to determine linkage.  */
14346       DECL_EXTERNAL (d) = 0;
14347
14348       /* Enter the scope of D so that access-checking works correctly.  */
14349       push_nested_class (DECL_CONTEXT (d));
14350       finish_decl (d, init, NULL_TREE);
14351       pop_nested_class ();
14352     }
14353   else if (TREE_CODE (d) == FUNCTION_DECL)
14354     {
14355       htab_t saved_local_specializations;
14356       tree subst_decl;
14357       tree tmpl_parm;
14358       tree spec_parm;
14359
14360       /* Save away the current list, in case we are instantiating one
14361          template from within the body of another.  */
14362       saved_local_specializations = local_specializations;
14363
14364       /* Set up the list of local specializations.  */
14365       local_specializations = htab_create (37,
14366                                            hash_local_specialization,
14367                                            eq_local_specializations,
14368                                            NULL);
14369
14370       /* Set up context.  */
14371       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14372
14373       /* Create substitution entries for the parameters.  */
14374       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14375       tmpl_parm = DECL_ARGUMENTS (subst_decl);
14376       spec_parm = DECL_ARGUMENTS (d);
14377       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14378         {
14379           register_local_specialization (spec_parm, tmpl_parm);
14380           spec_parm = skip_artificial_parms_for (d, spec_parm);
14381           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14382         }
14383       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14384         {
14385           register_local_specialization (spec_parm, tmpl_parm);
14386           tmpl_parm = TREE_CHAIN (tmpl_parm);
14387           spec_parm = TREE_CHAIN (spec_parm);
14388         }
14389       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14390         {
14391           /* Collect all of the extra "packed" parameters into an
14392              argument pack.  */
14393           tree parmvec;
14394           tree parmtypevec;
14395           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14396           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14397           int i, len = 0;
14398           tree t;
14399           
14400           /* Count how many parameters remain.  */
14401           for (t = spec_parm; t; t = TREE_CHAIN (t))
14402             len++;
14403
14404           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
14405           parmvec = make_tree_vec (len);
14406           parmtypevec = make_tree_vec (len);
14407           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14408             {
14409               TREE_VEC_ELT (parmvec, i) = spec_parm;
14410               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14411             }
14412
14413           /* Build the argument packs.  */
14414           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14415           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14416           TREE_TYPE (argpack) = argtypepack;
14417           
14418           /* Register the (value) argument pack as a specialization of
14419              TMPL_PARM, then move on.  */
14420           register_local_specialization (argpack, tmpl_parm);
14421           tmpl_parm = TREE_CHAIN (tmpl_parm);
14422         }
14423       gcc_assert (!spec_parm);
14424
14425       /* Substitute into the body of the function.  */
14426       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
14427                    tf_warning_or_error, tmpl,
14428                    /*integral_constant_expression_p=*/false);
14429
14430       /* We don't need the local specializations any more.  */
14431       htab_delete (local_specializations);
14432       local_specializations = saved_local_specializations;
14433
14434       /* Finish the function.  */
14435       d = finish_function (0);
14436       expand_or_defer_fn (d);
14437     }
14438
14439   /* We're not deferring instantiation any more.  */
14440   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14441
14442   if (need_push)
14443     pop_from_top_level ();
14444
14445 out:
14446   input_location = saved_loc;
14447   in_system_header = saved_in_system_header;
14448   pop_deferring_access_checks ();
14449   pop_tinst_level ();
14450
14451   timevar_pop (TV_PARSE);
14452
14453   return d;
14454 }
14455
14456 /* Run through the list of templates that we wish we could
14457    instantiate, and instantiate any we can.  RETRIES is the
14458    number of times we retry pending template instantiation.  */
14459
14460 void
14461 instantiate_pending_templates (int retries)
14462 {
14463   tree *t;
14464   tree last = NULL_TREE;
14465   int reconsider;
14466   location_t saved_loc = input_location;
14467   int saved_in_system_header = in_system_header;
14468
14469   /* Instantiating templates may trigger vtable generation.  This in turn
14470      may require further template instantiations.  We place a limit here
14471      to avoid infinite loop.  */
14472   if (pending_templates && retries >= max_tinst_depth)
14473     {
14474       tree decl = TREE_VALUE (pending_templates);
14475
14476       error ("template instantiation depth exceeds maximum of %d"
14477              " instantiating %q+D, possibly from virtual table generation"
14478              " (use -ftemplate-depth-NN to increase the maximum)",
14479              max_tinst_depth, decl);
14480       if (TREE_CODE (decl) == FUNCTION_DECL)
14481         /* Pretend that we defined it.  */
14482         DECL_INITIAL (decl) = error_mark_node;
14483       return;
14484     }
14485
14486   do
14487     {
14488       reconsider = 0;
14489
14490       t = &pending_templates;
14491       while (*t)
14492         {
14493           tree instantiation = TREE_VALUE (*t);
14494
14495           reopen_tinst_level (TREE_PURPOSE (*t));
14496
14497           if (TYPE_P (instantiation))
14498             {
14499               tree fn;
14500
14501               if (!COMPLETE_TYPE_P (instantiation))
14502                 {
14503                   instantiate_class_template (instantiation);
14504                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
14505                     for (fn = TYPE_METHODS (instantiation);
14506                          fn;
14507                          fn = TREE_CHAIN (fn))
14508                       if (! DECL_ARTIFICIAL (fn))
14509                         instantiate_decl (fn,
14510                                           /*defer_ok=*/0,
14511                                           /*expl_inst_class_mem_p=*/false);
14512                   if (COMPLETE_TYPE_P (instantiation))
14513                     reconsider = 1;
14514                 }
14515
14516               if (COMPLETE_TYPE_P (instantiation))
14517                 /* If INSTANTIATION has been instantiated, then we don't
14518                    need to consider it again in the future.  */
14519                 *t = TREE_CHAIN (*t);
14520               else
14521                 {
14522                   last = *t;
14523                   t = &TREE_CHAIN (*t);
14524                 }
14525             }
14526           else
14527             {
14528               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
14529                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14530                 {
14531                   instantiation
14532                     = instantiate_decl (instantiation,
14533                                         /*defer_ok=*/0,
14534                                         /*expl_inst_class_mem_p=*/false);
14535                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
14536                     reconsider = 1;
14537                 }
14538
14539               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
14540                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
14541                 /* If INSTANTIATION has been instantiated, then we don't
14542                    need to consider it again in the future.  */
14543                 *t = TREE_CHAIN (*t);
14544               else
14545                 {
14546                   last = *t;
14547                   t = &TREE_CHAIN (*t);
14548                 }
14549             }
14550           tinst_depth = 0;
14551           current_tinst_level = NULL_TREE;
14552         }
14553       last_pending_template = last;
14554     }
14555   while (reconsider);
14556
14557   input_location = saved_loc;
14558   in_system_header = saved_in_system_header;
14559 }
14560
14561 /* Substitute ARGVEC into T, which is a list of initializers for
14562    either base class or a non-static data member.  The TREE_PURPOSEs
14563    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
14564    instantiate_decl.  */
14565
14566 static tree
14567 tsubst_initializer_list (tree t, tree argvec)
14568 {
14569   tree inits = NULL_TREE;
14570
14571   for (; t; t = TREE_CHAIN (t))
14572     {
14573       tree decl;
14574       tree init;
14575       tree expanded_bases = NULL_TREE;
14576       tree expanded_arguments = NULL_TREE;
14577       int i, len = 1;
14578
14579       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14580         {
14581           tree expr;
14582           tree arg;
14583
14584           /* Expand the base class expansion type into separate base
14585              classes.  */
14586           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14587                                                  tf_warning_or_error,
14588                                                  NULL_TREE);
14589           if (expanded_bases == error_mark_node)
14590             continue;
14591           
14592           /* We'll be building separate TREE_LISTs of arguments for
14593              each base.  */
14594           len = TREE_VEC_LENGTH (expanded_bases);
14595           expanded_arguments = make_tree_vec (len);
14596           for (i = 0; i < len; i++)
14597             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14598
14599           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14600              expand each argument in the TREE_VALUE of t.  */
14601           expr = make_node (EXPR_PACK_EXPANSION);
14602           PACK_EXPANSION_PARAMETER_PACKS (expr) =
14603             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14604
14605           /* Substitute parameter packs into each argument in the
14606              TREE_LIST.  */
14607           in_base_initializer = 1;
14608           for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14609             {
14610               tree expanded_exprs;
14611
14612               /* Expand the argument.  */
14613               SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14614               expanded_exprs = tsubst_pack_expansion (expr, argvec,
14615                                                       tf_warning_or_error,
14616                                                       NULL_TREE);
14617
14618               /* Prepend each of the expanded expressions to the
14619                  corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
14620               for (i = 0; i < len; i++)
14621                 {
14622                   TREE_VEC_ELT (expanded_arguments, i) = 
14623                     tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14624                                TREE_VEC_ELT (expanded_arguments, i));
14625                 }
14626             }
14627           in_base_initializer = 0;
14628
14629           /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14630              since we built them backwards.  */
14631           for (i = 0; i < len; i++)
14632             {
14633               TREE_VEC_ELT (expanded_arguments, i) = 
14634                 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14635             }
14636         }
14637
14638       for (i = 0; i < len; ++i)
14639         {
14640           if (expanded_bases)
14641             {
14642               decl = TREE_VEC_ELT (expanded_bases, i);
14643               decl = expand_member_init (decl);
14644               init = TREE_VEC_ELT (expanded_arguments, i);
14645             }
14646           else
14647             {
14648               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
14649                                   tf_warning_or_error, NULL_TREE);
14650
14651               decl = expand_member_init (decl);
14652               if (decl && !DECL_P (decl))
14653                 in_base_initializer = 1;
14654
14655               init = tsubst_expr (TREE_VALUE (t), argvec, 
14656                                   tf_warning_or_error, NULL_TREE,
14657                                   /*integral_constant_expression_p=*/false);
14658               in_base_initializer = 0;
14659             }
14660
14661           if (decl)
14662             {
14663               init = build_tree_list (decl, init);
14664               TREE_CHAIN (init) = inits;
14665               inits = init;
14666             }
14667         }
14668     }
14669   return inits;
14670 }
14671
14672 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
14673
14674 static void
14675 set_current_access_from_decl (tree decl)
14676 {
14677   if (TREE_PRIVATE (decl))
14678     current_access_specifier = access_private_node;
14679   else if (TREE_PROTECTED (decl))
14680     current_access_specifier = access_protected_node;
14681   else
14682     current_access_specifier = access_public_node;
14683 }
14684
14685 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
14686    is the instantiation (which should have been created with
14687    start_enum) and ARGS are the template arguments to use.  */
14688
14689 static void
14690 tsubst_enum (tree tag, tree newtag, tree args)
14691 {
14692   tree e;
14693
14694   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14695     {
14696       tree value;
14697       tree decl;
14698
14699       decl = TREE_VALUE (e);
14700       /* Note that in a template enum, the TREE_VALUE is the
14701          CONST_DECL, not the corresponding INTEGER_CST.  */
14702       value = tsubst_expr (DECL_INITIAL (decl),
14703                            args, tf_warning_or_error, NULL_TREE,
14704                            /*integral_constant_expression_p=*/true);
14705
14706       /* Give this enumeration constant the correct access.  */
14707       set_current_access_from_decl (decl);
14708
14709       /* Actually build the enumerator itself.  */
14710       build_enumerator (DECL_NAME (decl), value, newtag);
14711     }
14712
14713   finish_enum (newtag);
14714   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
14715     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
14716 }
14717
14718 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
14719    its type -- but without substituting the innermost set of template
14720    arguments.  So, innermost set of template parameters will appear in
14721    the type.  */
14722
14723 tree
14724 get_mostly_instantiated_function_type (tree decl)
14725 {
14726   tree fn_type;
14727   tree tmpl;
14728   tree targs;
14729   tree tparms;
14730   int parm_depth;
14731
14732   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14733   targs = DECL_TI_ARGS (decl);
14734   tparms = DECL_TEMPLATE_PARMS (tmpl);
14735   parm_depth = TMPL_PARMS_DEPTH (tparms);
14736
14737   /* There should be as many levels of arguments as there are levels
14738      of parameters.  */
14739   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
14740
14741   fn_type = TREE_TYPE (tmpl);
14742
14743   if (parm_depth == 1)
14744     /* No substitution is necessary.  */
14745     ;
14746   else
14747     {
14748       int i, save_access_control;
14749       tree partial_args;
14750
14751       /* Replace the innermost level of the TARGS with NULL_TREEs to
14752          let tsubst know not to substitute for those parameters.  */
14753       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
14754       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
14755         SET_TMPL_ARGS_LEVEL (partial_args, i,
14756                              TMPL_ARGS_LEVEL (targs, i));
14757       SET_TMPL_ARGS_LEVEL (partial_args,
14758                            TMPL_ARGS_DEPTH (targs),
14759                            make_tree_vec (DECL_NTPARMS (tmpl)));
14760
14761       /* Disable access control as this function is used only during
14762          name-mangling.  */
14763       save_access_control = flag_access_control;
14764       flag_access_control = 0;
14765
14766       ++processing_template_decl;
14767       /* Now, do the (partial) substitution to figure out the
14768          appropriate function type.  */
14769       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
14770       --processing_template_decl;
14771
14772       /* Substitute into the template parameters to obtain the real
14773          innermost set of parameters.  This step is important if the
14774          innermost set of template parameters contains value
14775          parameters whose types depend on outer template parameters.  */
14776       TREE_VEC_LENGTH (partial_args)--;
14777       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
14778
14779       flag_access_control = save_access_control;
14780     }
14781
14782   return fn_type;
14783 }
14784
14785 /* Return truthvalue if we're processing a template different from
14786    the last one involved in diagnostics.  */
14787 int
14788 problematic_instantiation_changed (void)
14789 {
14790   return last_template_error_tick != tinst_level_tick;
14791 }
14792
14793 /* Remember current template involved in diagnostics.  */
14794 void
14795 record_last_problematic_instantiation (void)
14796 {
14797   last_template_error_tick = tinst_level_tick;
14798 }
14799
14800 tree
14801 current_instantiation (void)
14802 {
14803   return current_tinst_level;
14804 }
14805
14806 /* [temp.param] Check that template non-type parm TYPE is of an allowable
14807    type. Return zero for ok, nonzero for disallowed. Issue error and
14808    warning messages under control of COMPLAIN.  */
14809
14810 static int
14811 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
14812 {
14813   if (INTEGRAL_TYPE_P (type))
14814     return 0;
14815   else if (POINTER_TYPE_P (type))
14816     return 0;
14817   else if (TYPE_PTR_TO_MEMBER_P (type))
14818     return 0;
14819   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
14820     return 0;
14821   else if (TREE_CODE (type) == TYPENAME_TYPE)
14822     return 0;
14823
14824   if (complain & tf_error)
14825     error ("%q#T is not a valid type for a template constant parameter", type);
14826   return 1;
14827 }
14828
14829 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
14830    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
14831
14832 static bool
14833 dependent_type_p_r (tree type)
14834 {
14835   tree scope;
14836
14837   /* [temp.dep.type]
14838
14839      A type is dependent if it is:
14840
14841      -- a template parameter. Template template parameters are types
14842         for us (since TYPE_P holds true for them) so we handle
14843         them here.  */
14844   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
14845       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
14846     return true;
14847   /* -- a qualified-id with a nested-name-specifier which contains a
14848         class-name that names a dependent type or whose unqualified-id
14849         names a dependent type.  */
14850   if (TREE_CODE (type) == TYPENAME_TYPE)
14851     return true;
14852   /* -- a cv-qualified type where the cv-unqualified type is
14853         dependent.  */
14854   type = TYPE_MAIN_VARIANT (type);
14855   /* -- a compound type constructed from any dependent type.  */
14856   if (TYPE_PTR_TO_MEMBER_P (type))
14857     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
14858             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
14859                                            (type)));
14860   else if (TREE_CODE (type) == POINTER_TYPE
14861            || TREE_CODE (type) == REFERENCE_TYPE)
14862     return dependent_type_p (TREE_TYPE (type));
14863   else if (TREE_CODE (type) == FUNCTION_TYPE
14864            || TREE_CODE (type) == METHOD_TYPE)
14865     {
14866       tree arg_type;
14867
14868       if (dependent_type_p (TREE_TYPE (type)))
14869         return true;
14870       for (arg_type = TYPE_ARG_TYPES (type);
14871            arg_type;
14872            arg_type = TREE_CHAIN (arg_type))
14873         if (dependent_type_p (TREE_VALUE (arg_type)))
14874           return true;
14875       return false;
14876     }
14877   /* -- an array type constructed from any dependent type or whose
14878         size is specified by a constant expression that is
14879         value-dependent.  */
14880   if (TREE_CODE (type) == ARRAY_TYPE)
14881     {
14882       if (TYPE_DOMAIN (type)
14883           && ((value_dependent_expression_p
14884                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
14885               || (type_dependent_expression_p
14886                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
14887         return true;
14888       return dependent_type_p (TREE_TYPE (type));
14889     }
14890
14891   /* -- a template-id in which either the template name is a template
14892      parameter ...  */
14893   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
14894     return true;
14895   /* ... or any of the template arguments is a dependent type or
14896         an expression that is type-dependent or value-dependent.  */
14897   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
14898            && (any_dependent_template_arguments_p
14899                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
14900     return true;
14901
14902   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
14903      expression is not type-dependent, then it should already been
14904      have resolved.  */
14905   if (TREE_CODE (type) == TYPEOF_TYPE)
14906     return true;
14907
14908   /* A template argument pack is dependent if any of its packed
14909      arguments are.  */
14910   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
14911     {
14912       tree args = ARGUMENT_PACK_ARGS (type);
14913       int i, len = TREE_VEC_LENGTH (args);
14914       for (i = 0; i < len; ++i)
14915         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
14916           return true;
14917     }
14918
14919   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
14920      be template parameters.  */
14921   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
14922     return true;
14923
14924   /* The standard does not specifically mention types that are local
14925      to template functions or local classes, but they should be
14926      considered dependent too.  For example:
14927
14928        template <int I> void f() {
14929          enum E { a = I };
14930          S<sizeof (E)> s;
14931        }
14932
14933      The size of `E' cannot be known until the value of `I' has been
14934      determined.  Therefore, `E' must be considered dependent.  */
14935   scope = TYPE_CONTEXT (type);
14936   if (scope && TYPE_P (scope))
14937     return dependent_type_p (scope);
14938   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
14939     return type_dependent_expression_p (scope);
14940
14941   /* Other types are non-dependent.  */
14942   return false;
14943 }
14944
14945 /* Returns TRUE if TYPE is dependent, in the sense of
14946    [temp.dep.type].  */
14947
14948 bool
14949 dependent_type_p (tree type)
14950 {
14951   /* If there are no template parameters in scope, then there can't be
14952      any dependent types.  */
14953   if (!processing_template_decl)
14954     {
14955       /* If we are not processing a template, then nobody should be
14956          providing us with a dependent type.  */
14957       gcc_assert (type);
14958       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
14959       return false;
14960     }
14961
14962   /* If the type is NULL, we have not computed a type for the entity
14963      in question; in that case, the type is dependent.  */
14964   if (!type)
14965     return true;
14966
14967   /* Erroneous types can be considered non-dependent.  */
14968   if (type == error_mark_node)
14969     return false;
14970
14971   /* If we have not already computed the appropriate value for TYPE,
14972      do so now.  */
14973   if (!TYPE_DEPENDENT_P_VALID (type))
14974     {
14975       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
14976       TYPE_DEPENDENT_P_VALID (type) = 1;
14977     }
14978
14979   return TYPE_DEPENDENT_P (type);
14980 }
14981
14982 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
14983
14984 static bool
14985 dependent_scope_ref_p (tree expression, bool criterion (tree))
14986 {
14987   tree scope;
14988   tree name;
14989
14990   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
14991
14992   if (!TYPE_P (TREE_OPERAND (expression, 0)))
14993     return true;
14994
14995   scope = TREE_OPERAND (expression, 0);
14996   name = TREE_OPERAND (expression, 1);
14997
14998   /* [temp.dep.expr]
14999
15000      An id-expression is type-dependent if it contains a
15001      nested-name-specifier that contains a class-name that names a
15002      dependent type.  */
15003   /* The suggested resolution to Core Issue 2 implies that if the
15004      qualifying type is the current class, then we must peek
15005      inside it.  */
15006   if (DECL_P (name)
15007       && currently_open_class (scope)
15008       && !criterion (name))
15009     return false;
15010   if (dependent_type_p (scope))
15011     return true;
15012
15013   return false;
15014 }
15015
15016 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15017    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15018    expression.  */
15019
15020 bool
15021 value_dependent_expression_p (tree expression)
15022 {
15023   if (!processing_template_decl)
15024     return false;
15025
15026   /* A name declared with a dependent type.  */
15027   if (DECL_P (expression) && type_dependent_expression_p (expression))
15028     return true;
15029
15030   switch (TREE_CODE (expression))
15031     {
15032     case IDENTIFIER_NODE:
15033       /* A name that has not been looked up -- must be dependent.  */
15034       return true;
15035
15036     case TEMPLATE_PARM_INDEX:
15037       /* A non-type template parm.  */
15038       return true;
15039
15040     case CONST_DECL:
15041       /* A non-type template parm.  */
15042       if (DECL_TEMPLATE_PARM_P (expression))
15043         return true;
15044       return false;
15045
15046     case VAR_DECL:
15047        /* A constant with integral or enumeration type and is initialized
15048           with an expression that is value-dependent.  */
15049       if (DECL_INITIAL (expression)
15050           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15051           && value_dependent_expression_p (DECL_INITIAL (expression)))
15052         return true;
15053       return false;
15054
15055     case DYNAMIC_CAST_EXPR:
15056     case STATIC_CAST_EXPR:
15057     case CONST_CAST_EXPR:
15058     case REINTERPRET_CAST_EXPR:
15059     case CAST_EXPR:
15060       /* These expressions are value-dependent if the type to which
15061          the cast occurs is dependent or the expression being casted
15062          is value-dependent.  */
15063       {
15064         tree type = TREE_TYPE (expression);
15065
15066         if (dependent_type_p (type))
15067           return true;
15068
15069         /* A functional cast has a list of operands.  */
15070         expression = TREE_OPERAND (expression, 0);
15071         if (!expression)
15072           {
15073             /* If there are no operands, it must be an expression such
15074                as "int()". This should not happen for aggregate types
15075                because it would form non-constant expressions.  */
15076             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15077
15078             return false;
15079           }
15080
15081         if (TREE_CODE (expression) == TREE_LIST)
15082           return any_value_dependent_elements_p (expression);
15083
15084         return value_dependent_expression_p (expression);
15085       }
15086
15087     case SIZEOF_EXPR:
15088     case ALIGNOF_EXPR:
15089       /* A `sizeof' expression is value-dependent if the operand is
15090          type-dependent or is a pack expansion.  */
15091       expression = TREE_OPERAND (expression, 0);
15092       if (PACK_EXPANSION_P (expression))
15093         return true;
15094       else if (TYPE_P (expression))
15095         return dependent_type_p (expression);
15096       return type_dependent_expression_p (expression);
15097
15098     case SCOPE_REF:
15099       return dependent_scope_ref_p (expression, value_dependent_expression_p);
15100
15101     case COMPONENT_REF:
15102       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15103               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15104
15105     case CALL_EXPR:
15106       /* A CALL_EXPR may appear in a constant expression if it is a
15107          call to a builtin function, e.g., __builtin_constant_p.  All
15108          such calls are value-dependent.  */
15109       return true;
15110
15111     case NONTYPE_ARGUMENT_PACK:
15112       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15113          is value-dependent.  */
15114       {
15115         tree values = ARGUMENT_PACK_ARGS (expression);
15116         int i, len = TREE_VEC_LENGTH (values);
15117         
15118         for (i = 0; i < len; ++i)
15119           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15120             return true;
15121         
15122         return false;
15123       }
15124
15125     case TRAIT_EXPR:
15126       {
15127         tree type2 = TRAIT_EXPR_TYPE2 (expression);
15128         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15129                 || (type2 ? dependent_type_p (type2) : false));
15130       }
15131
15132     case MODOP_EXPR:
15133       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15134               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15135
15136     default:
15137       /* A constant expression is value-dependent if any subexpression is
15138          value-dependent.  */
15139       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15140         {
15141         case tcc_reference:
15142         case tcc_unary:
15143           return (value_dependent_expression_p
15144                   (TREE_OPERAND (expression, 0)));
15145
15146         case tcc_comparison:
15147         case tcc_binary:
15148           return ((value_dependent_expression_p
15149                    (TREE_OPERAND (expression, 0)))
15150                   || (value_dependent_expression_p
15151                       (TREE_OPERAND (expression, 1))));
15152
15153         case tcc_expression:
15154         case tcc_vl_exp:
15155           {
15156             int i;
15157             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15158               /* In some cases, some of the operands may be missing.
15159                  (For example, in the case of PREDECREMENT_EXPR, the
15160                  amount to increment by may be missing.)  That doesn't
15161                  make the expression dependent.  */
15162               if (TREE_OPERAND (expression, i)
15163                   && (value_dependent_expression_p
15164                       (TREE_OPERAND (expression, i))))
15165                 return true;
15166             return false;
15167           }
15168
15169         default:
15170           break;
15171         }
15172     }
15173
15174   /* The expression is not value-dependent.  */
15175   return false;
15176 }
15177
15178 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15179    [temp.dep.expr].  */
15180
15181 bool
15182 type_dependent_expression_p (tree expression)
15183 {
15184   if (!processing_template_decl)
15185     return false;
15186
15187   if (expression == error_mark_node)
15188     return false;
15189
15190   /* An unresolved name is always dependent.  */
15191   if (TREE_CODE (expression) == IDENTIFIER_NODE
15192       || TREE_CODE (expression) == USING_DECL)
15193     return true;
15194
15195   /* Some expression forms are never type-dependent.  */
15196   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15197       || TREE_CODE (expression) == SIZEOF_EXPR
15198       || TREE_CODE (expression) == ALIGNOF_EXPR
15199       || TREE_CODE (expression) == TRAIT_EXPR
15200       || TREE_CODE (expression) == TYPEID_EXPR
15201       || TREE_CODE (expression) == DELETE_EXPR
15202       || TREE_CODE (expression) == VEC_DELETE_EXPR
15203       || TREE_CODE (expression) == THROW_EXPR)
15204     return false;
15205
15206   /* The types of these expressions depends only on the type to which
15207      the cast occurs.  */
15208   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15209       || TREE_CODE (expression) == STATIC_CAST_EXPR
15210       || TREE_CODE (expression) == CONST_CAST_EXPR
15211       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15212       || TREE_CODE (expression) == CAST_EXPR)
15213     return dependent_type_p (TREE_TYPE (expression));
15214
15215   /* The types of these expressions depends only on the type created
15216      by the expression.  */
15217   if (TREE_CODE (expression) == NEW_EXPR
15218       || TREE_CODE (expression) == VEC_NEW_EXPR)
15219     {
15220       /* For NEW_EXPR tree nodes created inside a template, either
15221          the object type itself or a TREE_LIST may appear as the
15222          operand 1.  */
15223       tree type = TREE_OPERAND (expression, 1);
15224       if (TREE_CODE (type) == TREE_LIST)
15225         /* This is an array type.  We need to check array dimensions
15226            as well.  */
15227         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15228                || value_dependent_expression_p
15229                     (TREE_OPERAND (TREE_VALUE (type), 1));
15230       else
15231         return dependent_type_p (type);
15232     }
15233
15234   if (TREE_CODE (expression) == SCOPE_REF
15235       && dependent_scope_ref_p (expression,
15236                                 type_dependent_expression_p))
15237     return true;
15238
15239   if (TREE_CODE (expression) == FUNCTION_DECL
15240       && DECL_LANG_SPECIFIC (expression)
15241       && DECL_TEMPLATE_INFO (expression)
15242       && (any_dependent_template_arguments_p
15243           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15244     return true;
15245
15246   if (TREE_CODE (expression) == TEMPLATE_DECL
15247       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15248     return false;
15249
15250   if (TREE_TYPE (expression) == unknown_type_node)
15251     {
15252       if (TREE_CODE (expression) == ADDR_EXPR)
15253         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15254       if (TREE_CODE (expression) == COMPONENT_REF
15255           || TREE_CODE (expression) == OFFSET_REF)
15256         {
15257           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15258             return true;
15259           expression = TREE_OPERAND (expression, 1);
15260           if (TREE_CODE (expression) == IDENTIFIER_NODE)
15261             return false;
15262         }
15263       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
15264       if (TREE_CODE (expression) == SCOPE_REF)
15265         return false;
15266
15267       if (TREE_CODE (expression) == BASELINK)
15268         expression = BASELINK_FUNCTIONS (expression);
15269
15270       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15271         {
15272           if (any_dependent_template_arguments_p
15273               (TREE_OPERAND (expression, 1)))
15274             return true;
15275           expression = TREE_OPERAND (expression, 0);
15276         }
15277       gcc_assert (TREE_CODE (expression) == OVERLOAD
15278                   || TREE_CODE (expression) == FUNCTION_DECL);
15279
15280       while (expression)
15281         {
15282           if (type_dependent_expression_p (OVL_CURRENT (expression)))
15283             return true;
15284           expression = OVL_NEXT (expression);
15285         }
15286       return false;
15287     }
15288
15289   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15290
15291   return (dependent_type_p (TREE_TYPE (expression)));
15292 }
15293
15294 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15295    contains a type-dependent expression.  */
15296
15297 bool
15298 any_type_dependent_arguments_p (tree args)
15299 {
15300   while (args)
15301     {
15302       tree arg = TREE_VALUE (args);
15303
15304       if (type_dependent_expression_p (arg))
15305         return true;
15306       args = TREE_CHAIN (args);
15307     }
15308   return false;
15309 }
15310
15311 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15312    expressions) contains any value-dependent expressions.  */
15313
15314 bool
15315 any_value_dependent_elements_p (tree list)
15316 {
15317   for (; list; list = TREE_CHAIN (list))
15318     if (value_dependent_expression_p (TREE_VALUE (list)))
15319       return true;
15320
15321   return false;
15322 }
15323
15324 /* Returns TRUE if the ARG (a template argument) is dependent.  */
15325
15326 bool
15327 dependent_template_arg_p (tree arg)
15328 {
15329   if (!processing_template_decl)
15330     return false;
15331
15332   if (TREE_CODE (arg) == TEMPLATE_DECL
15333       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15334     return dependent_template_p (arg);
15335   else if (ARGUMENT_PACK_P (arg))
15336     {
15337       tree args = ARGUMENT_PACK_ARGS (arg);
15338       int i, len = TREE_VEC_LENGTH (args);
15339       for (i = 0; i < len; ++i)
15340         {
15341           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15342             return true;
15343         }
15344
15345       return false;
15346     }
15347   else if (TYPE_P (arg))
15348     return dependent_type_p (arg);
15349   else
15350     return (type_dependent_expression_p (arg)
15351             || value_dependent_expression_p (arg));
15352 }
15353
15354 /* Returns true if ARGS (a collection of template arguments) contains
15355    any types that require structural equality testing.  */
15356
15357 bool
15358 any_template_arguments_need_structural_equality_p (tree args)
15359 {
15360   int i;
15361   int j;
15362
15363   if (!args)
15364     return false;
15365   if (args == error_mark_node)
15366     return true;
15367
15368   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15369     {
15370       tree level = TMPL_ARGS_LEVEL (args, i + 1);
15371       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15372         {
15373           tree arg = TREE_VEC_ELT (level, j);
15374           tree packed_args = NULL_TREE;
15375           int k, len = 1;
15376
15377           if (ARGUMENT_PACK_P (arg))
15378             {
15379               /* Look inside the argument pack.  */
15380               packed_args = ARGUMENT_PACK_ARGS (arg);
15381               len = TREE_VEC_LENGTH (packed_args);
15382             }
15383
15384           for (k = 0; k < len; ++k)
15385             {
15386               if (packed_args)
15387                 arg = TREE_VEC_ELT (packed_args, k);
15388
15389               if (error_operand_p (arg))
15390                 return true;
15391               else if (TREE_CODE (arg) == TEMPLATE_DECL
15392                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15393                 continue;
15394               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15395                 return true;
15396               else if (!TYPE_P (arg) && TREE_TYPE (arg)
15397                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15398                 return true;
15399             }
15400         }
15401     }
15402
15403   return false;
15404 }
15405
15406 /* Returns true if ARGS (a collection of template arguments) contains
15407    any dependent arguments.  */
15408
15409 bool
15410 any_dependent_template_arguments_p (tree args)
15411 {
15412   int i;
15413   int j;
15414
15415   if (!args)
15416     return false;
15417   if (args == error_mark_node)
15418     return true;
15419
15420   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15421     {
15422       tree level = TMPL_ARGS_LEVEL (args, i + 1);
15423       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15424         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15425           return true;
15426     }
15427
15428   return false;
15429 }
15430
15431 /* Returns TRUE if the template TMPL is dependent.  */
15432
15433 bool
15434 dependent_template_p (tree tmpl)
15435 {
15436   if (TREE_CODE (tmpl) == OVERLOAD)
15437     {
15438       while (tmpl)
15439         {
15440           if (dependent_template_p (OVL_FUNCTION (tmpl)))
15441             return true;
15442           tmpl = OVL_CHAIN (tmpl);
15443         }
15444       return false;
15445     }
15446
15447   /* Template template parameters are dependent.  */
15448   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15449       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15450     return true;
15451   /* So are names that have not been looked up.  */
15452   if (TREE_CODE (tmpl) == SCOPE_REF
15453       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
15454     return true;
15455   /* So are member templates of dependent classes.  */
15456   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15457     return dependent_type_p (DECL_CONTEXT (tmpl));
15458   return false;
15459 }
15460
15461 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
15462
15463 bool
15464 dependent_template_id_p (tree tmpl, tree args)
15465 {
15466   return (dependent_template_p (tmpl)
15467           || any_dependent_template_arguments_p (args));
15468 }
15469
15470 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
15471    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
15472    can be found.  Note that this function peers inside uninstantiated
15473    templates and therefore should be used only in extremely limited
15474    situations.  ONLY_CURRENT_P restricts this peering to the currently
15475    open classes hierarchy (which is required when comparing types).  */
15476
15477 tree
15478 resolve_typename_type (tree type, bool only_current_p)
15479 {
15480   tree scope;
15481   tree name;
15482   tree decl;
15483   int quals;
15484   tree pushed_scope;
15485
15486   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
15487
15488   scope = TYPE_CONTEXT (type);
15489   name = TYPE_IDENTIFIER (type);
15490
15491   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15492      it first before we can figure out what NAME refers to.  */
15493   if (TREE_CODE (scope) == TYPENAME_TYPE)
15494     scope = resolve_typename_type (scope, only_current_p);
15495   /* If we don't know what SCOPE refers to, then we cannot resolve the
15496      TYPENAME_TYPE.  */
15497   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
15498     return error_mark_node;
15499   /* If the SCOPE is a template type parameter, we have no way of
15500      resolving the name.  */
15501   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15502     return type;
15503   /* If the SCOPE is not the current instantiation, there's no reason
15504      to look inside it.  */
15505   if (only_current_p && !currently_open_class (scope))
15506     return error_mark_node;
15507   /* If SCOPE is a partial instantiation, it will not have a valid
15508      TYPE_FIELDS list, so use the original template.  */
15509   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
15510   /* Enter the SCOPE so that name lookup will be resolved as if we
15511      were in the class definition.  In particular, SCOPE will no
15512      longer be considered a dependent type.  */
15513   pushed_scope = push_scope (scope);
15514   /* Look up the declaration.  */
15515   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
15516   /* Obtain the set of qualifiers applied to the TYPE.  */
15517   quals = cp_type_quals (type);
15518   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15519      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
15520   if (!decl)
15521     type = error_mark_node;
15522   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
15523            && TREE_CODE (decl) == TYPE_DECL)
15524     type = TREE_TYPE (decl);
15525   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
15526            && DECL_CLASS_TEMPLATE_P (decl))
15527     {
15528       tree tmpl;
15529       tree args;
15530       /* Obtain the template and the arguments.  */
15531       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
15532       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
15533       /* Instantiate the template.  */
15534       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
15535                                     /*entering_scope=*/0, tf_error | tf_user);
15536     }
15537   else
15538     type = error_mark_node;
15539   /* Qualify the resulting type.  */
15540   if (type != error_mark_node && quals)
15541     type = cp_build_qualified_type (type, quals);
15542   /* Leave the SCOPE.  */
15543   if (pushed_scope)
15544     pop_scope (pushed_scope);
15545
15546   return type;
15547 }
15548
15549 /* EXPR is an expression which is not type-dependent.  Return a proxy
15550    for EXPR that can be used to compute the types of larger
15551    expressions containing EXPR.  */
15552
15553 tree
15554 build_non_dependent_expr (tree expr)
15555 {
15556   tree inner_expr;
15557
15558   /* Preserve null pointer constants so that the type of things like
15559      "p == 0" where "p" is a pointer can be determined.  */
15560   if (null_ptr_cst_p (expr))
15561     return expr;
15562   /* Preserve OVERLOADs; the functions must be available to resolve
15563      types.  */
15564   inner_expr = expr;
15565   if (TREE_CODE (inner_expr) == ADDR_EXPR)
15566     inner_expr = TREE_OPERAND (inner_expr, 0);
15567   if (TREE_CODE (inner_expr) == COMPONENT_REF)
15568     inner_expr = TREE_OPERAND (inner_expr, 1);
15569   if (is_overloaded_fn (inner_expr)
15570       || TREE_CODE (inner_expr) == OFFSET_REF)
15571     return expr;
15572   /* There is no need to return a proxy for a variable.  */
15573   if (TREE_CODE (expr) == VAR_DECL)
15574     return expr;
15575   /* Preserve string constants; conversions from string constants to
15576      "char *" are allowed, even though normally a "const char *"
15577      cannot be used to initialize a "char *".  */
15578   if (TREE_CODE (expr) == STRING_CST)
15579     return expr;
15580   /* Preserve arithmetic constants, as an optimization -- there is no
15581      reason to create a new node.  */
15582   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
15583     return expr;
15584   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15585      There is at least one place where we want to know that a
15586      particular expression is a throw-expression: when checking a ?:
15587      expression, there are special rules if the second or third
15588      argument is a throw-expression.  */
15589   if (TREE_CODE (expr) == THROW_EXPR)
15590     return expr;
15591
15592   if (TREE_CODE (expr) == COND_EXPR)
15593     return build3 (COND_EXPR,
15594                    TREE_TYPE (expr),
15595                    TREE_OPERAND (expr, 0),
15596                    (TREE_OPERAND (expr, 1)
15597                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
15598                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
15599                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
15600   if (TREE_CODE (expr) == COMPOUND_EXPR
15601       && !COMPOUND_EXPR_OVERLOADED (expr))
15602     return build2 (COMPOUND_EXPR,
15603                    TREE_TYPE (expr),
15604                    TREE_OPERAND (expr, 0),
15605                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
15606
15607   /* If the type is unknown, it can't really be non-dependent */
15608   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
15609
15610   /* Otherwise, build a NON_DEPENDENT_EXPR.
15611
15612      REFERENCE_TYPEs are not stripped for expressions in templates
15613      because doing so would play havoc with mangling.  Consider, for
15614      example:
15615
15616        template <typename T> void f<T& g>() { g(); }
15617
15618      In the body of "f", the expression for "g" will have
15619      REFERENCE_TYPE, even though the standard says that it should
15620      not.  The reason is that we must preserve the syntactic form of
15621      the expression so that mangling (say) "f<g>" inside the body of
15622      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
15623      stripped here.  */
15624   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
15625 }
15626
15627 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
15628    Return a new TREE_LIST with the various arguments replaced with
15629    equivalent non-dependent expressions.  */
15630
15631 tree
15632 build_non_dependent_args (tree args)
15633 {
15634   tree a;
15635   tree new_args;
15636
15637   new_args = NULL_TREE;
15638   for (a = args; a; a = TREE_CHAIN (a))
15639     new_args = tree_cons (NULL_TREE,
15640                           build_non_dependent_expr (TREE_VALUE (a)),
15641                           new_args);
15642   return nreverse (new_args);
15643 }
15644
15645 #include "gt-cp-pt.h"