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, 2007  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 3, 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 COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 /* Known bugs or deficiencies include:
24
25      all methods must be provided in header files; can't use a source
26      file that contains only the method templates and "just win".  */
27
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "obstack.h"
33 #include "tree.h"
34 #include "pointer-set.h"
35 #include "flags.h"
36 #include "c-common.h"
37 #include "cp-tree.h"
38 #include "cp-objcp-common.h"
39 #include "tree-inline.h"
40 #include "decl.h"
41 #include "output.h"
42 #include "except.h"
43 #include "toplev.h"
44 #include "rtl.h"
45 #include "timevar.h"
46 #include "tree-iterator.h"
47 #include "vecprim.h"
48
49 /* The type of functions taking a tree, and some additional data, and
50    returning an int.  */
51 typedef int (*tree_fn_t) (tree, void*);
52
53 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
54    instantiations have been deferred, either because their definitions
55    were not yet available, or because we were putting off doing the work.
56    The TREE_PURPOSE of each entry is either a DECL (for a function or
57    static data member), or a TYPE (for a class) indicating what we are
58    hoping to instantiate.  The TREE_VALUE is not used.  */
59 static GTY(()) tree pending_templates;
60 static GTY(()) tree last_pending_template;
61
62 int processing_template_parmlist;
63 static int template_header_count;
64
65 static GTY(()) tree saved_trees;
66 static VEC(int,heap) *inline_parm_levels;
67
68 static GTY(()) tree current_tinst_level;
69
70 static GTY(()) tree saved_access_scope;
71
72 /* Live only within one (recursive) call to tsubst_expr.  We use
73    this to pass the statement expression node from the STMT_EXPR
74    to the EXPR_STMT that is its result.  */
75 static tree cur_stmt_expr;
76
77 /* A map from local variable declarations in the body of the template
78    presently being instantiated to the corresponding instantiated
79    local variables.  */
80 static htab_t local_specializations;
81
82 /* Contains canonical template parameter types. The vector is indexed by
83    the TEMPLATE_TYPE_IDX of the template parameter. Each element is a
84    TREE_LIST, whose TREE_VALUEs contain the canonical template
85    parameters of various types and levels.  */
86 static GTY(()) VEC(tree,gc) *canonical_template_parms;
87
88 #define UNIFY_ALLOW_NONE 0
89 #define UNIFY_ALLOW_MORE_CV_QUAL 1
90 #define UNIFY_ALLOW_LESS_CV_QUAL 2
91 #define UNIFY_ALLOW_DERIVED 4
92 #define UNIFY_ALLOW_INTEGER 8
93 #define UNIFY_ALLOW_OUTER_LEVEL 16
94 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
95 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
96
97 static void push_access_scope (tree);
98 static void pop_access_scope (tree);
99 static bool resolve_overloaded_unification (tree, tree, tree, tree,
100                                             unification_kind_t, int);
101 static int try_one_overload (tree, tree, tree, tree, tree,
102                              unification_kind_t, int, bool);
103 static int unify (tree, tree, tree, tree, int);
104 static void add_pending_template (tree);
105 static int push_tinst_level (tree);
106 static void pop_tinst_level (void);
107 static void reopen_tinst_level (tree);
108 static tree tsubst_initializer_list (tree, tree);
109 static tree get_class_bindings (tree, tree, tree);
110 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t,
111                                    bool, bool);
112 static void tsubst_enum (tree, tree, tree);
113 static tree add_to_template_args (tree, tree);
114 static tree add_outermost_template_args (tree, tree);
115 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
116 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*,
117                                              tree);
118 static int  type_unification_real (tree, tree, tree, tree,
119                                    int, unification_kind_t, int);
120 static void note_template_header (int);
121 static tree convert_nontype_argument_function (tree, tree);
122 static tree convert_nontype_argument (tree, tree);
123 static tree convert_template_argument (tree, tree, tree,
124                                        tsubst_flags_t, int, tree);
125 static int for_each_template_parm (tree, tree_fn_t, void*,
126                                    struct pointer_set_t*);
127 static tree expand_template_argument_pack (tree);
128 static tree build_template_parm_index (int, int, int, tree, tree);
129 static bool inline_needs_template_parms (tree);
130 static void push_inline_template_parms_recursive (tree, int);
131 static tree retrieve_local_specialization (tree);
132 static void register_local_specialization (tree, tree);
133 static tree reduce_template_parm_level (tree, tree, int);
134 static int mark_template_parm (tree, void *);
135 static int template_parm_this_level_p (tree, void *);
136 static tree tsubst_friend_function (tree, tree);
137 static tree tsubst_friend_class (tree, tree);
138 static int can_complete_type_without_circularity (tree);
139 static tree get_bindings (tree, tree, tree, bool);
140 static int template_decl_level (tree);
141 static int check_cv_quals_for_unify (int, tree, tree);
142 static void template_parm_level_and_index (tree, int*, int*);
143 static int unify_pack_expansion (tree, tree, tree, tree, int, bool, bool);
144 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
145 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
146 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
147 static void regenerate_decl_from_template (tree, tree);
148 static tree most_specialized_class (tree, tree);
149 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
150 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
151 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
152 static bool check_specialization_scope (void);
153 static tree process_partial_specialization (tree);
154 static void set_current_access_from_decl (tree);
155 static tree get_template_base (tree, tree, tree, tree);
156 static tree try_class_unification (tree, tree, tree, tree);
157 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
158                                            tree, tree);
159 static int template_args_equal (tree, tree);
160 static void tsubst_default_arguments (tree);
161 static tree for_each_template_parm_r (tree *, int *, void *);
162 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
163 static void copy_default_args_to_explicit_spec (tree);
164 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
165 static int eq_local_specializations (const void *, const void *);
166 static bool dependent_template_arg_p (tree);
167 static bool any_template_arguments_need_structural_equality_p (tree);
168 static bool dependent_type_p_r (tree);
169 static tree tsubst (tree, tree, tsubst_flags_t, tree);
170 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree, bool);
171 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
172 static tree tsubst_pack_expansion (tree, tree, tsubst_flags_t, tree);
173
174 /* Make the current scope suitable for access checking when we are
175    processing T.  T can be FUNCTION_DECL for instantiated function
176    template, or VAR_DECL for static member variable (need by
177    instantiate_decl).  */
178
179 static void
180 push_access_scope (tree t)
181 {
182   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
183               || TREE_CODE (t) == VAR_DECL);
184
185   if (DECL_FRIEND_CONTEXT (t))
186     push_nested_class (DECL_FRIEND_CONTEXT (t));
187   else if (DECL_CLASS_SCOPE_P (t))
188     push_nested_class (DECL_CONTEXT (t));
189   else
190     push_to_top_level ();
191
192   if (TREE_CODE (t) == FUNCTION_DECL)
193     {
194       saved_access_scope = tree_cons
195         (NULL_TREE, current_function_decl, saved_access_scope);
196       current_function_decl = t;
197     }
198 }
199
200 /* Restore the scope set up by push_access_scope.  T is the node we
201    are processing.  */
202
203 static void
204 pop_access_scope (tree t)
205 {
206   if (TREE_CODE (t) == FUNCTION_DECL)
207     {
208       current_function_decl = TREE_VALUE (saved_access_scope);
209       saved_access_scope = TREE_CHAIN (saved_access_scope);
210     }
211
212   if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t))
213     pop_nested_class ();
214   else
215     pop_from_top_level ();
216 }
217
218 /* Do any processing required when DECL (a member template
219    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
220    to DECL, unless it is a specialization, in which case the DECL
221    itself is returned.  */
222
223 tree
224 finish_member_template_decl (tree decl)
225 {
226   if (decl == error_mark_node)
227     return error_mark_node;
228
229   gcc_assert (DECL_P (decl));
230
231   if (TREE_CODE (decl) == TYPE_DECL)
232     {
233       tree type;
234
235       type = TREE_TYPE (decl);
236       if (IS_AGGR_TYPE (type)
237           && CLASSTYPE_TEMPLATE_INFO (type)
238           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
239         {
240           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
241           check_member_template (tmpl);
242           return tmpl;
243         }
244       return NULL_TREE;
245     }
246   else if (TREE_CODE (decl) == FIELD_DECL)
247     error ("data member %qD cannot be a member template", decl);
248   else if (DECL_TEMPLATE_INFO (decl))
249     {
250       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
251         {
252           check_member_template (DECL_TI_TEMPLATE (decl));
253           return DECL_TI_TEMPLATE (decl);
254         }
255       else
256         return decl;
257     }
258   else
259     error ("invalid member template declaration %qD", decl);
260
261   return error_mark_node;
262 }
263
264 /* Returns the template nesting level of the indicated class TYPE.
265
266    For example, in:
267      template <class T>
268      struct A
269      {
270        template <class U>
271        struct B {};
272      };
273
274    A<T>::B<U> has depth two, while A<T> has depth one.
275    Both A<T>::B<int> and A<int>::B<U> have depth one, if
276    they are instantiations, not specializations.
277
278    This function is guaranteed to return 0 if passed NULL_TREE so
279    that, for example, `template_class_depth (current_class_type)' is
280    always safe.  */
281
282 int
283 template_class_depth (tree type)
284 {
285   int depth;
286
287   for (depth = 0;
288        type && TREE_CODE (type) != NAMESPACE_DECL;
289        type = (TREE_CODE (type) == FUNCTION_DECL)
290          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
291     {
292       if (TREE_CODE (type) != FUNCTION_DECL)
293         {
294           if (CLASSTYPE_TEMPLATE_INFO (type)
295               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
296               && uses_template_parms (CLASSTYPE_TI_ARGS (type)))
297             ++depth;
298         }
299       else
300         {
301           if (DECL_TEMPLATE_INFO (type)
302               && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
303               && uses_template_parms (DECL_TI_ARGS (type)))
304             ++depth;
305         }
306     }
307
308   return depth;
309 }
310
311 /* Subroutine of maybe_begin_member_template_processing.
312    Returns true if processing DECL needs us to push template parms.  */
313
314 static bool
315 inline_needs_template_parms (tree decl)
316 {
317   if (! DECL_TEMPLATE_INFO (decl))
318     return false;
319
320   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
321           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
322 }
323
324 /* Subroutine of maybe_begin_member_template_processing.
325    Push the template parms in PARMS, starting from LEVELS steps into the
326    chain, and ending at the beginning, since template parms are listed
327    innermost first.  */
328
329 static void
330 push_inline_template_parms_recursive (tree parmlist, int levels)
331 {
332   tree parms = TREE_VALUE (parmlist);
333   int i;
334
335   if (levels > 1)
336     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
337
338   ++processing_template_decl;
339   current_template_parms
340     = tree_cons (size_int (processing_template_decl),
341                  parms, current_template_parms);
342   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
343
344   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
345                NULL);
346   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
347     {
348       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
349
350       if (parm == error_mark_node)
351         continue;
352
353       gcc_assert (DECL_P (parm));
354
355       switch (TREE_CODE (parm))
356         {
357         case TYPE_DECL:
358         case TEMPLATE_DECL:
359           pushdecl (parm);
360           break;
361
362         case PARM_DECL:
363           {
364             /* Make a CONST_DECL as is done in process_template_parm.
365                It is ugly that we recreate this here; the original
366                version built in process_template_parm is no longer
367                available.  */
368             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
369                                     TREE_TYPE (parm));
370             DECL_ARTIFICIAL (decl) = 1;
371             TREE_CONSTANT (decl) = 1;
372             TREE_INVARIANT (decl) = 1;
373             TREE_READONLY (decl) = 1;
374             DECL_INITIAL (decl) = DECL_INITIAL (parm);
375             SET_DECL_TEMPLATE_PARM_P (decl);
376             pushdecl (decl);
377           }
378           break;
379
380         default:
381           gcc_unreachable ();
382         }
383     }
384 }
385
386 /* Restore the template parameter context for a member template or
387    a friend template defined in a class definition.  */
388
389 void
390 maybe_begin_member_template_processing (tree decl)
391 {
392   tree parms;
393   int levels = 0;
394
395   if (inline_needs_template_parms (decl))
396     {
397       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
398       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
399
400       if (DECL_TEMPLATE_SPECIALIZATION (decl))
401         {
402           --levels;
403           parms = TREE_CHAIN (parms);
404         }
405
406       push_inline_template_parms_recursive (parms, levels);
407     }
408
409   /* Remember how many levels of template parameters we pushed so that
410      we can pop them later.  */
411   VEC_safe_push (int, heap, inline_parm_levels, levels);
412 }
413
414 /* Undo the effects of maybe_begin_member_template_processing.  */
415
416 void
417 maybe_end_member_template_processing (void)
418 {
419   int i;
420   int last;
421
422   if (VEC_length (int, inline_parm_levels) == 0)
423     return;
424
425   last = VEC_pop (int, inline_parm_levels);
426   for (i = 0; i < last; ++i)
427     {
428       --processing_template_decl;
429       current_template_parms = TREE_CHAIN (current_template_parms);
430       poplevel (0, 0, 0);
431     }
432 }
433
434 /* Return a new template argument vector which contains all of ARGS,
435    but has as its innermost set of arguments the EXTRA_ARGS.  */
436
437 static tree
438 add_to_template_args (tree args, tree extra_args)
439 {
440   tree new_args;
441   int extra_depth;
442   int i;
443   int j;
444
445   extra_depth = TMPL_ARGS_DEPTH (extra_args);
446   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
447
448   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
449     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
450
451   for (j = 1; j <= extra_depth; ++j, ++i)
452     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
453
454   return new_args;
455 }
456
457 /* Like add_to_template_args, but only the outermost ARGS are added to
458    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
459    (EXTRA_ARGS) levels are added.  This function is used to combine
460    the template arguments from a partial instantiation with the
461    template arguments used to attain the full instantiation from the
462    partial instantiation.  */
463
464 static tree
465 add_outermost_template_args (tree args, tree extra_args)
466 {
467   tree new_args;
468
469   /* If there are more levels of EXTRA_ARGS than there are ARGS,
470      something very fishy is going on.  */
471   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
472
473   /* If *all* the new arguments will be the EXTRA_ARGS, just return
474      them.  */
475   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
476     return extra_args;
477
478   /* For the moment, we make ARGS look like it contains fewer levels.  */
479   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
480
481   new_args = add_to_template_args (args, extra_args);
482
483   /* Now, we restore ARGS to its full dimensions.  */
484   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
485
486   return new_args;
487 }
488
489 /* Return the N levels of innermost template arguments from the ARGS.  */
490
491 tree
492 get_innermost_template_args (tree args, int n)
493 {
494   tree new_args;
495   int extra_levels;
496   int i;
497
498   gcc_assert (n >= 0);
499
500   /* If N is 1, just return the innermost set of template arguments.  */
501   if (n == 1)
502     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
503
504   /* If we're not removing anything, just return the arguments we were
505      given.  */
506   extra_levels = TMPL_ARGS_DEPTH (args) - n;
507   gcc_assert (extra_levels >= 0);
508   if (extra_levels == 0)
509     return args;
510
511   /* Make a new set of arguments, not containing the outer arguments.  */
512   new_args = make_tree_vec (n);
513   for (i = 1; i <= n; ++i)
514     SET_TMPL_ARGS_LEVEL (new_args, i,
515                          TMPL_ARGS_LEVEL (args, i + extra_levels));
516
517   return new_args;
518 }
519
520 /* We've got a template header coming up; push to a new level for storing
521    the parms.  */
522
523 void
524 begin_template_parm_list (void)
525 {
526   /* We use a non-tag-transparent scope here, which causes pushtag to
527      put tags in this scope, rather than in the enclosing class or
528      namespace scope.  This is the right thing, since we want
529      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
530      global template class, push_template_decl handles putting the
531      TEMPLATE_DECL into top-level scope.  For a nested template class,
532      e.g.:
533
534        template <class T> struct S1 {
535          template <class T> struct S2 {};
536        };
537
538      pushtag contains special code to call pushdecl_with_scope on the
539      TEMPLATE_DECL for S2.  */
540   begin_scope (sk_template_parms, NULL);
541   ++processing_template_decl;
542   ++processing_template_parmlist;
543   note_template_header (0);
544 }
545
546 /* This routine is called when a specialization is declared.  If it is
547    invalid to declare a specialization here, an error is reported and
548    false is returned, otherwise this routine will return true.  */
549
550 static bool
551 check_specialization_scope (void)
552 {
553   tree scope = current_scope ();
554
555   /* [temp.expl.spec]
556
557      An explicit specialization shall be declared in the namespace of
558      which the template is a member, or, for member templates, in the
559      namespace of which the enclosing class or enclosing class
560      template is a member.  An explicit specialization of a member
561      function, member class or static data member of a class template
562      shall be declared in the namespace of which the class template
563      is a member.  */
564   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
565     {
566       error ("explicit specialization in non-namespace scope %qD", scope);
567       return false;
568     }
569
570   /* [temp.expl.spec]
571
572      In an explicit specialization declaration for a member of a class
573      template or a member template that appears in namespace scope,
574      the member template and some of its enclosing class templates may
575      remain unspecialized, except that the declaration shall not
576      explicitly specialize a class member template if its enclosing
577      class templates are not explicitly specialized as well.  */
578   if (current_template_parms)
579     {
580       error ("enclosing class templates are not explicitly specialized");
581       return false;
582     }
583
584   return true;
585 }
586
587 /* We've just seen template <>.  */
588
589 bool
590 begin_specialization (void)
591 {
592   begin_scope (sk_template_spec, NULL);
593   note_template_header (1);
594   return check_specialization_scope ();
595 }
596
597 /* Called at then end of processing a declaration preceded by
598    template<>.  */
599
600 void
601 end_specialization (void)
602 {
603   finish_scope ();
604   reset_specialization ();
605 }
606
607 /* Any template <>'s that we have seen thus far are not referring to a
608    function specialization.  */
609
610 void
611 reset_specialization (void)
612 {
613   processing_specialization = 0;
614   template_header_count = 0;
615 }
616
617 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
618    it was of the form template <>.  */
619
620 static void
621 note_template_header (int specialization)
622 {
623   processing_specialization = specialization;
624   template_header_count++;
625 }
626
627 /* We're beginning an explicit instantiation.  */
628
629 void
630 begin_explicit_instantiation (void)
631 {
632   gcc_assert (!processing_explicit_instantiation);
633   processing_explicit_instantiation = true;
634 }
635
636
637 void
638 end_explicit_instantiation (void)
639 {
640   gcc_assert (processing_explicit_instantiation);
641   processing_explicit_instantiation = false;
642 }
643
644 /* An explicit specialization or partial specialization TMPL is being
645    declared.  Check that the namespace in which the specialization is
646    occurring is permissible.  Returns false iff it is invalid to
647    specialize TMPL in the current namespace.  */
648
649 static bool
650 check_specialization_namespace (tree tmpl)
651 {
652   tree tpl_ns = decl_namespace_context (tmpl);
653
654   /* [tmpl.expl.spec]
655
656      An explicit specialization shall be declared in the namespace of
657      which the template is a member, or, for member templates, in the
658      namespace of which the enclosing class or enclosing class
659      template is a member.  An explicit specialization of a member
660      function, member class or static data member of a class template
661      shall be declared in the namespace of which the class template is
662      a member.  */
663   if (is_associated_namespace (current_namespace, tpl_ns))
664     /* Same or super-using namespace.  */
665     return true;
666   else
667     {
668       pedwarn ("specialization of %qD in different namespace", tmpl);
669       pedwarn ("  from definition of %q+#D", tmpl);
670       return false;
671     }
672 }
673
674 /* SPEC is an explicit instantiation.  Check that it is valid to
675    perform this explicit instantiation in the current namespace.  */
676
677 static void
678 check_explicit_instantiation_namespace (tree spec)
679 {
680   tree ns;
681
682   /* DR 275: An explicit instantiation shall appear in an enclosing
683      namespace of its template.  */
684   ns = decl_namespace_context (spec);
685   if (!is_ancestor (current_namespace, ns))
686     pedwarn ("explicit instantiation of %qD in namespace %qD "
687              "(which does not enclose namespace %qD)",
688              spec, current_namespace, ns);
689 }
690
691 /* The TYPE is being declared.  If it is a template type, that means it
692    is a partial specialization.  Do appropriate error-checking.  */
693
694 tree
695 maybe_process_partial_specialization (tree type)
696 {
697   tree context;
698
699   if (type == error_mark_node)
700     return error_mark_node;
701
702   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
703     {
704       error ("name of class shadows template template parameter %qD",
705              TYPE_NAME (type));
706       return error_mark_node;
707     }
708
709   context = TYPE_CONTEXT (type);
710
711   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
712     {
713       /* This is for ordinary explicit specialization and partial
714          specialization of a template class such as:
715
716            template <> class C<int>;
717
718          or:
719
720            template <class T> class C<T*>;
721
722          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
723
724       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
725           && !COMPLETE_TYPE_P (type))
726         {
727           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
728           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
729           if (processing_template_decl)
730             push_template_decl (TYPE_MAIN_DECL (type));
731         }
732       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
733         error ("specialization of %qT after instantiation", type);
734     }
735   else if (CLASS_TYPE_P (type)
736            && !CLASSTYPE_USE_TEMPLATE (type)
737            && CLASSTYPE_TEMPLATE_INFO (type)
738            && context && CLASS_TYPE_P (context)
739            && CLASSTYPE_TEMPLATE_INFO (context))
740     {
741       /* This is for an explicit specialization of member class
742          template according to [temp.expl.spec/18]:
743
744            template <> template <class U> class C<int>::D;
745
746          The context `C<int>' must be an implicit instantiation.
747          Otherwise this is just a member class template declared
748          earlier like:
749
750            template <> class C<int> { template <class U> class D; };
751            template <> template <class U> class C<int>::D;
752
753          In the first case, `C<int>::D' is a specialization of `C<T>::D'
754          while in the second case, `C<int>::D' is a primary template
755          and `C<T>::D' may not exist.  */
756
757       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
758           && !COMPLETE_TYPE_P (type))
759         {
760           tree t;
761
762           if (current_namespace
763               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
764             {
765               pedwarn ("specializing %q#T in different namespace", type);
766               pedwarn ("  from definition of %q+#D",
767                        CLASSTYPE_TI_TEMPLATE (type));
768             }
769
770           /* Check for invalid specialization after instantiation:
771
772                template <> template <> class C<int>::D<int>;
773                template <> template <class U> class C<int>::D;  */
774
775           for (t = DECL_TEMPLATE_INSTANTIATIONS
776                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
777                t; t = TREE_CHAIN (t))
778             if (TREE_VALUE (t) != type
779                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
780               error ("specialization %qT after instantiation %qT",
781                      type, TREE_VALUE (t));
782
783           /* Mark TYPE as a specialization.  And as a result, we only
784              have one level of template argument for the innermost
785              class template.  */
786           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
787           CLASSTYPE_TI_ARGS (type)
788             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
789         }
790     }
791   else if (processing_specialization)
792     {
793       error ("explicit specialization of non-template %qT", type);
794       return error_mark_node;
795     }
796
797   return type;
798 }
799
800 /* Returns nonzero if we can optimize the retrieval of specializations
801    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
802    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
803
804 static inline bool
805 optimize_specialization_lookup_p (tree tmpl)
806 {
807   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
808           && DECL_CLASS_SCOPE_P (tmpl)
809           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
810              parameter.  */
811           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
812           /* The optimized lookup depends on the fact that the
813              template arguments for the member function template apply
814              purely to the containing class, which is not true if the
815              containing class is an explicit or partial
816              specialization.  */
817           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
818           && !DECL_MEMBER_TEMPLATE_P (tmpl)
819           && !DECL_CONV_FN_P (tmpl)
820           /* It is possible to have a template that is not a member
821              template and is not a member of a template class:
822
823              template <typename T>
824              struct S { friend A::f(); };
825
826              Here, the friend function is a template, but the context does
827              not have template information.  The optimized lookup relies
828              on having ARGS be the template arguments for both the class
829              and the function template.  */
830           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
831 }
832
833 /* Retrieve the specialization (in the sense of [temp.spec] - a
834    specialization is either an instantiation or an explicit
835    specialization) of TMPL for the given template ARGS.  If there is
836    no such specialization, return NULL_TREE.  The ARGS are a vector of
837    arguments, or a vector of vectors of arguments, in the case of
838    templates with more than one level of parameters.
839
840    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
841    then we search for a partial specialization matching ARGS.  This
842    parameter is ignored if TMPL is not a class template.  */
843
844 static tree
845 retrieve_specialization (tree tmpl, tree args,
846                          bool class_specializations_p)
847 {
848   if (args == error_mark_node)
849     return NULL_TREE;
850
851   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
852
853   /* There should be as many levels of arguments as there are
854      levels of parameters.  */
855   gcc_assert (TMPL_ARGS_DEPTH (args)
856               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
857
858   if (optimize_specialization_lookup_p (tmpl))
859     {
860       tree class_template;
861       tree class_specialization;
862       VEC(tree,gc) *methods;
863       tree fns;
864       int idx;
865
866       /* The template arguments actually apply to the containing
867          class.  Find the class specialization with those
868          arguments.  */
869       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
870       class_specialization
871         = retrieve_specialization (class_template, args,
872                                    /*class_specializations_p=*/false);
873       if (!class_specialization)
874         return NULL_TREE;
875       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
876          for the specialization.  */
877       idx = class_method_index_for_fn (class_specialization, tmpl);
878       if (idx == -1)
879         return NULL_TREE;
880       /* Iterate through the methods with the indicated name, looking
881          for the one that has an instance of TMPL.  */
882       methods = CLASSTYPE_METHOD_VEC (class_specialization);
883       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
884         {
885           tree fn = OVL_CURRENT (fns);
886           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
887             return fn;
888         }
889       return NULL_TREE;
890     }
891   else
892     {
893       tree *sp;
894       tree *head;
895
896       /* Class templates store their instantiations on the
897          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
898          DECL_TEMPLATE_SPECIALIZATIONS list.  */
899       if (!class_specializations_p
900           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
901         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
902       else
903         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
904       head = sp;
905       /* Iterate through the list until we find a matching template.  */
906       while (*sp != NULL_TREE)
907         {
908           tree spec = *sp;
909
910           if (comp_template_args (TREE_PURPOSE (spec), args))
911             {
912               /* Use the move-to-front heuristic to speed up future
913                  searches.  */
914               if (spec != *head)
915                 {
916                   *sp = TREE_CHAIN (*sp);
917                   TREE_CHAIN (spec) = *head;
918                   *head = spec;
919                 }
920               return TREE_VALUE (spec);
921             }
922           sp = &TREE_CHAIN (spec);
923         }
924     }
925
926   return NULL_TREE;
927 }
928
929 /* Like retrieve_specialization, but for local declarations.  */
930
931 static tree
932 retrieve_local_specialization (tree tmpl)
933 {
934   tree spec = (tree) htab_find_with_hash (local_specializations, tmpl,
935                                           htab_hash_pointer (tmpl));
936   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
937 }
938
939 /* Returns nonzero iff DECL is a specialization of TMPL.  */
940
941 int
942 is_specialization_of (tree decl, tree tmpl)
943 {
944   tree t;
945
946   if (TREE_CODE (decl) == FUNCTION_DECL)
947     {
948       for (t = decl;
949            t != NULL_TREE;
950            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
951         if (t == tmpl)
952           return 1;
953     }
954   else
955     {
956       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
957
958       for (t = TREE_TYPE (decl);
959            t != NULL_TREE;
960            t = CLASSTYPE_USE_TEMPLATE (t)
961              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
962         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
963           return 1;
964     }
965
966   return 0;
967 }
968
969 /* Returns nonzero iff DECL is a specialization of friend declaration
970    FRIEND according to [temp.friend].  */
971
972 bool
973 is_specialization_of_friend (tree decl, tree friend)
974 {
975   bool need_template = true;
976   int template_depth;
977
978   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
979               || TREE_CODE (decl) == TYPE_DECL);
980
981   /* For [temp.friend/6] when FRIEND is an ordinary member function
982      of a template class, we want to check if DECL is a specialization
983      if this.  */
984   if (TREE_CODE (friend) == FUNCTION_DECL
985       && DECL_TEMPLATE_INFO (friend)
986       && !DECL_USE_TEMPLATE (friend))
987     {
988       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
989       friend = DECL_TI_TEMPLATE (friend);
990       need_template = false;
991     }
992   else if (TREE_CODE (friend) == TEMPLATE_DECL
993            && !PRIMARY_TEMPLATE_P (friend))
994     need_template = false;
995
996   /* There is nothing to do if this is not a template friend.  */
997   if (TREE_CODE (friend) != TEMPLATE_DECL)
998     return false;
999
1000   if (is_specialization_of (decl, friend))
1001     return true;
1002
1003   /* [temp.friend/6]
1004      A member of a class template may be declared to be a friend of a
1005      non-template class.  In this case, the corresponding member of
1006      every specialization of the class template is a friend of the
1007      class granting friendship.
1008
1009      For example, given a template friend declaration
1010
1011        template <class T> friend void A<T>::f();
1012
1013      the member function below is considered a friend
1014
1015        template <> struct A<int> {
1016          void f();
1017        };
1018
1019      For this type of template friend, TEMPLATE_DEPTH below will be
1020      nonzero.  To determine if DECL is a friend of FRIEND, we first
1021      check if the enclosing class is a specialization of another.  */
1022
1023   template_depth = template_class_depth (DECL_CONTEXT (friend));
1024   if (template_depth
1025       && DECL_CLASS_SCOPE_P (decl)
1026       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)),
1027                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
1028     {
1029       /* Next, we check the members themselves.  In order to handle
1030          a few tricky cases, such as when FRIEND's are
1031
1032            template <class T> friend void A<T>::g(T t);
1033            template <class T> template <T t> friend void A<T>::h();
1034
1035          and DECL's are
1036
1037            void A<int>::g(int);
1038            template <int> void A<int>::h();
1039
1040          we need to figure out ARGS, the template arguments from
1041          the context of DECL.  This is required for template substitution
1042          of `T' in the function parameter of `g' and template parameter
1043          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1044
1045       tree context = DECL_CONTEXT (decl);
1046       tree args = NULL_TREE;
1047       int current_depth = 0;
1048
1049       while (current_depth < template_depth)
1050         {
1051           if (CLASSTYPE_TEMPLATE_INFO (context))
1052             {
1053               if (current_depth == 0)
1054                 args = TYPE_TI_ARGS (context);
1055               else
1056                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1057               current_depth++;
1058             }
1059           context = TYPE_CONTEXT (context);
1060         }
1061
1062       if (TREE_CODE (decl) == FUNCTION_DECL)
1063         {
1064           bool is_template;
1065           tree friend_type;
1066           tree decl_type;
1067           tree friend_args_type;
1068           tree decl_args_type;
1069
1070           /* Make sure that both DECL and FRIEND are templates or
1071              non-templates.  */
1072           is_template = DECL_TEMPLATE_INFO (decl)
1073                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1074           if (need_template ^ is_template)
1075             return false;
1076           else if (is_template)
1077             {
1078               /* If both are templates, check template parameter list.  */
1079               tree friend_parms
1080                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1081                                          args, tf_none);
1082               if (!comp_template_parms
1083                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1084                       friend_parms))
1085                 return false;
1086
1087               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1088             }
1089           else
1090             decl_type = TREE_TYPE (decl);
1091
1092           friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1093                                               tf_none, NULL_TREE);
1094           if (friend_type == error_mark_node)
1095             return false;
1096
1097           /* Check if return types match.  */
1098           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1099             return false;
1100
1101           /* Check if function parameter types match, ignoring the
1102              `this' parameter.  */
1103           friend_args_type = TYPE_ARG_TYPES (friend_type);
1104           decl_args_type = TYPE_ARG_TYPES (decl_type);
1105           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1106             friend_args_type = TREE_CHAIN (friend_args_type);
1107           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1108             decl_args_type = TREE_CHAIN (decl_args_type);
1109
1110           return compparms (decl_args_type, friend_args_type);
1111         }
1112       else
1113         {
1114           /* DECL is a TYPE_DECL */
1115           bool is_template;
1116           tree decl_type = TREE_TYPE (decl);
1117
1118           /* Make sure that both DECL and FRIEND are templates or
1119              non-templates.  */
1120           is_template
1121             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1122               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1123
1124           if (need_template ^ is_template)
1125             return false;
1126           else if (is_template)
1127             {
1128               tree friend_parms;
1129               /* If both are templates, check the name of the two
1130                  TEMPLATE_DECL's first because is_friend didn't.  */
1131               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1132                   != DECL_NAME (friend))
1133                 return false;
1134
1135               /* Now check template parameter list.  */
1136               friend_parms
1137                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1138                                          args, tf_none);
1139               return comp_template_parms
1140                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1141                  friend_parms);
1142             }
1143           else
1144             return (DECL_NAME (decl)
1145                     == DECL_NAME (friend));
1146         }
1147     }
1148   return false;
1149 }
1150
1151 /* Register the specialization SPEC as a specialization of TMPL with
1152    the indicated ARGS.  IS_FRIEND indicates whether the specialization
1153    is actually just a friend declaration.  Returns SPEC, or an
1154    equivalent prior declaration, if available.  */
1155
1156 static tree
1157 register_specialization (tree spec, tree tmpl, tree args, bool is_friend)
1158 {
1159   tree fn;
1160
1161   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1162
1163   if (TREE_CODE (spec) == FUNCTION_DECL
1164       && uses_template_parms (DECL_TI_ARGS (spec)))
1165     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1166        register it; we want the corresponding TEMPLATE_DECL instead.
1167        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1168        the more obvious `uses_template_parms (spec)' to avoid problems
1169        with default function arguments.  In particular, given
1170        something like this:
1171
1172           template <class T> void f(T t1, T t = T())
1173
1174        the default argument expression is not substituted for in an
1175        instantiation unless and until it is actually needed.  */
1176     return spec;
1177
1178   fn = retrieve_specialization (tmpl, args,
1179                                 /*class_specializations_p=*/false);
1180   /* We can sometimes try to re-register a specialization that we've
1181      already got.  In particular, regenerate_decl_from_template calls
1182      duplicate_decls which will update the specialization list.  But,
1183      we'll still get called again here anyhow.  It's more convenient
1184      to simply allow this than to try to prevent it.  */
1185   if (fn == spec)
1186     return spec;
1187   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1188     {
1189       if (DECL_TEMPLATE_INSTANTIATION (fn))
1190         {
1191           if (TREE_USED (fn)
1192               || DECL_EXPLICIT_INSTANTIATION (fn))
1193             {
1194               error ("specialization of %qD after instantiation",
1195                      fn);
1196               return error_mark_node;
1197             }
1198           else
1199             {
1200               tree clone;
1201               /* This situation should occur only if the first
1202                  specialization is an implicit instantiation, the
1203                  second is an explicit specialization, and the
1204                  implicit instantiation has not yet been used.  That
1205                  situation can occur if we have implicitly
1206                  instantiated a member function and then specialized
1207                  it later.
1208
1209                  We can also wind up here if a friend declaration that
1210                  looked like an instantiation turns out to be a
1211                  specialization:
1212
1213                    template <class T> void foo(T);
1214                    class S { friend void foo<>(int) };
1215                    template <> void foo(int);
1216
1217                  We transform the existing DECL in place so that any
1218                  pointers to it become pointers to the updated
1219                  declaration.
1220
1221                  If there was a definition for the template, but not
1222                  for the specialization, we want this to look as if
1223                  there were no definition, and vice versa.  */
1224               DECL_INITIAL (fn) = NULL_TREE;
1225               duplicate_decls (spec, fn, is_friend);
1226               /* The call to duplicate_decls will have applied
1227                  [temp.expl.spec]:
1228
1229                    An explicit specialization of a function template
1230                    is inline only if it is explicitly declared to be,
1231                    and independently of whether its function template
1232                    is.
1233
1234                 to the primary function; now copy the inline bits to
1235                 the various clones.  */
1236               FOR_EACH_CLONE (clone, fn)
1237                 {
1238                   DECL_DECLARED_INLINE_P (clone)
1239                     = DECL_DECLARED_INLINE_P (fn);
1240                   DECL_INLINE (clone)
1241                     = DECL_INLINE (fn);
1242                 }
1243               check_specialization_namespace (fn);
1244
1245               return fn;
1246             }
1247         }
1248       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1249         {
1250           if (!duplicate_decls (spec, fn, is_friend) && DECL_INITIAL (spec))
1251             /* Dup decl failed, but this is a new definition. Set the
1252                line number so any errors match this new
1253                definition.  */
1254             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1255
1256           return fn;
1257         }
1258     }
1259
1260   /* A specialization must be declared in the same namespace as the
1261      template it is specializing.  */
1262   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1263       && !check_specialization_namespace (tmpl))
1264     DECL_CONTEXT (spec) = FROB_CONTEXT (decl_namespace_context (tmpl));
1265
1266   if (!optimize_specialization_lookup_p (tmpl))
1267     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1268       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1269
1270   return spec;
1271 }
1272
1273 /* Unregister the specialization SPEC as a specialization of TMPL.
1274    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1275    if the SPEC was listed as a specialization of TMPL.  */
1276
1277 bool
1278 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1279 {
1280   tree* s;
1281
1282   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1283        *s != NULL_TREE;
1284        s = &TREE_CHAIN (*s))
1285     if (TREE_VALUE (*s) == spec)
1286       {
1287         if (!new_spec)
1288           *s = TREE_CHAIN (*s);
1289         else
1290           TREE_VALUE (*s) = new_spec;
1291         return 1;
1292       }
1293
1294   return 0;
1295 }
1296
1297 /* Compare an entry in the local specializations hash table P1 (which
1298    is really a pointer to a TREE_LIST) with P2 (which is really a
1299    DECL).  */
1300
1301 static int
1302 eq_local_specializations (const void *p1, const void *p2)
1303 {
1304   return TREE_VALUE ((const_tree) p1) == (const_tree) p2;
1305 }
1306
1307 /* Hash P1, an entry in the local specializations table.  */
1308
1309 static hashval_t
1310 hash_local_specialization (const void* p1)
1311 {
1312   return htab_hash_pointer (TREE_VALUE ((const_tree) p1));
1313 }
1314
1315 /* Like register_specialization, but for local declarations.  We are
1316    registering SPEC, an instantiation of TMPL.  */
1317
1318 static void
1319 register_local_specialization (tree spec, tree tmpl)
1320 {
1321   void **slot;
1322
1323   slot = htab_find_slot_with_hash (local_specializations, tmpl,
1324                                    htab_hash_pointer (tmpl), INSERT);
1325   *slot = build_tree_list (spec, tmpl);
1326 }
1327
1328 /* TYPE is a class type.  Returns true if TYPE is an explicitly
1329    specialized class.  */
1330
1331 bool
1332 explicit_class_specialization_p (tree type)
1333 {
1334   if (!CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
1335     return false;
1336   return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
1337 }
1338
1339 /* Print the list of candidate FNS in an error message.  */
1340
1341 void
1342 print_candidates (tree fns)
1343 {
1344   tree fn;
1345
1346   const char *str = "candidates are:";
1347
1348   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1349     {
1350       tree f;
1351
1352       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1353         error ("%s %+#D", str, OVL_CURRENT (f));
1354       str = "               ";
1355     }
1356 }
1357
1358 /* Returns the template (one of the functions given by TEMPLATE_ID)
1359    which can be specialized to match the indicated DECL with the
1360    explicit template args given in TEMPLATE_ID.  The DECL may be
1361    NULL_TREE if none is available.  In that case, the functions in
1362    TEMPLATE_ID are non-members.
1363
1364    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1365    specialization of a member template.
1366
1367    The TEMPLATE_COUNT is the number of references to qualifying
1368    template classes that appeared in the name of the function. See
1369    check_explicit_specialization for a more accurate description.
1370
1371    TSK indicates what kind of template declaration (if any) is being
1372    declared.  TSK_TEMPLATE indicates that the declaration given by
1373    DECL, though a FUNCTION_DECL, has template parameters, and is
1374    therefore a template function.
1375
1376    The template args (those explicitly specified and those deduced)
1377    are output in a newly created vector *TARGS_OUT.
1378
1379    If it is impossible to determine the result, an error message is
1380    issued.  The error_mark_node is returned to indicate failure.  */
1381
1382 static tree
1383 determine_specialization (tree template_id,
1384                           tree decl,
1385                           tree* targs_out,
1386                           int need_member_template,
1387                           int template_count,
1388                           tmpl_spec_kind tsk)
1389 {
1390   tree fns;
1391   tree targs;
1392   tree explicit_targs;
1393   tree candidates = NULL_TREE;
1394   /* A TREE_LIST of templates of which DECL may be a specialization.
1395      The TREE_VALUE of each node is a TEMPLATE_DECL.  The
1396      corresponding TREE_PURPOSE is the set of template arguments that,
1397      when used to instantiate the template, would produce a function
1398      with the signature of DECL.  */
1399   tree templates = NULL_TREE;
1400   int header_count;
1401   struct cp_binding_level *b;
1402
1403   *targs_out = NULL_TREE;
1404
1405   if (template_id == error_mark_node || decl == error_mark_node)
1406     return error_mark_node;
1407
1408   fns = TREE_OPERAND (template_id, 0);
1409   explicit_targs = TREE_OPERAND (template_id, 1);
1410
1411   if (fns == error_mark_node)
1412     return error_mark_node;
1413
1414   /* Check for baselinks.  */
1415   if (BASELINK_P (fns))
1416     fns = BASELINK_FUNCTIONS (fns);
1417
1418   if (!is_overloaded_fn (fns))
1419     {
1420       error ("%qD is not a function template", fns);
1421       return error_mark_node;
1422     }
1423
1424   /* Count the number of template headers specified for this
1425      specialization.  */
1426   header_count = 0;
1427   for (b = current_binding_level;
1428        b->kind == sk_template_parms;
1429        b = b->level_chain)
1430     ++header_count;
1431
1432   for (; fns; fns = OVL_NEXT (fns))
1433     {
1434       tree fn = OVL_CURRENT (fns);
1435
1436       if (TREE_CODE (fn) == TEMPLATE_DECL)
1437         {
1438           tree decl_arg_types;
1439           tree fn_arg_types;
1440
1441           /* In case of explicit specialization, we need to check if
1442              the number of template headers appearing in the specialization
1443              is correct. This is usually done in check_explicit_specialization,
1444              but the check done there cannot be exhaustive when specializing
1445              member functions. Consider the following code:
1446
1447              template <> void A<int>::f(int);
1448              template <> template <> void A<int>::f(int);
1449
1450              Assuming that A<int> is not itself an explicit specialization
1451              already, the first line specializes "f" which is a non-template
1452              member function, whilst the second line specializes "f" which
1453              is a template member function. So both lines are syntactically
1454              correct, and check_explicit_specialization does not reject
1455              them.
1456
1457              Here, we can do better, as we are matching the specialization
1458              against the declarations. We count the number of template
1459              headers, and we check if they match TEMPLATE_COUNT + 1
1460              (TEMPLATE_COUNT is the number of qualifying template classes,
1461              plus there must be another header for the member template
1462              itself).
1463
1464              Notice that if header_count is zero, this is not a
1465              specialization but rather a template instantiation, so there
1466              is no check we can perform here.  */
1467           if (header_count && header_count != template_count + 1)
1468             continue;
1469
1470           /* Check that the number of template arguments at the
1471              innermost level for DECL is the same as for FN.  */
1472           if (current_binding_level->kind == sk_template_parms
1473               && !current_binding_level->explicit_spec_p
1474               && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn))
1475                   != TREE_VEC_LENGTH (INNERMOST_TEMPLATE_PARMS
1476                                       (current_template_parms))))
1477             continue;
1478
1479           /* DECL might be a specialization of FN.  */
1480           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1481           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1482
1483           /* For a non-static member function, we need to make sure
1484              that the const qualification is the same.  Since
1485              get_bindings does not try to merge the "this" parameter,
1486              we must do the comparison explicitly.  */
1487           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1488               && !same_type_p (TREE_VALUE (fn_arg_types),
1489                                TREE_VALUE (decl_arg_types)))
1490             continue;
1491
1492           /* Skip the "this" parameter and, for constructors of
1493              classes with virtual bases, the VTT parameter.  A
1494              full specialization of a constructor will have a VTT
1495              parameter, but a template never will.  */ 
1496           decl_arg_types 
1497             = skip_artificial_parms_for (decl, decl_arg_types);
1498           fn_arg_types 
1499             = skip_artificial_parms_for (fn, fn_arg_types);
1500
1501           /* Check that the number of function parameters matches.
1502              For example,
1503                template <class T> void f(int i = 0);
1504                template <> void f<int>();
1505              The specialization f<int> is invalid but is not caught
1506              by get_bindings below.  */
1507           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1508             continue;
1509
1510           /* Function templates cannot be specializations; there are
1511              no partial specializations of functions.  Therefore, if
1512              the type of DECL does not match FN, there is no
1513              match.  */
1514           if (tsk == tsk_template)
1515             {
1516               if (compparms (fn_arg_types, decl_arg_types))
1517                 candidates = tree_cons (NULL_TREE, fn, candidates);
1518               continue;
1519             }
1520
1521           /* See whether this function might be a specialization of this
1522              template.  */
1523           targs = get_bindings (fn, decl, explicit_targs, /*check_ret=*/true);
1524
1525           if (!targs)
1526             /* We cannot deduce template arguments that when used to
1527                specialize TMPL will produce DECL.  */
1528             continue;
1529
1530           /* Save this template, and the arguments deduced.  */
1531           templates = tree_cons (targs, fn, templates);
1532         }
1533       else if (need_member_template)
1534         /* FN is an ordinary member function, and we need a
1535            specialization of a member template.  */
1536         ;
1537       else if (TREE_CODE (fn) != FUNCTION_DECL)
1538         /* We can get IDENTIFIER_NODEs here in certain erroneous
1539            cases.  */
1540         ;
1541       else if (!DECL_FUNCTION_MEMBER_P (fn))
1542         /* This is just an ordinary non-member function.  Nothing can
1543            be a specialization of that.  */
1544         ;
1545       else if (DECL_ARTIFICIAL (fn))
1546         /* Cannot specialize functions that are created implicitly.  */
1547         ;
1548       else
1549         {
1550           tree decl_arg_types;
1551
1552           /* This is an ordinary member function.  However, since
1553              we're here, we can assume it's enclosing class is a
1554              template class.  For example,
1555
1556                template <typename T> struct S { void f(); };
1557                template <> void S<int>::f() {}
1558
1559              Here, S<int>::f is a non-template, but S<int> is a
1560              template class.  If FN has the same type as DECL, we
1561              might be in business.  */
1562
1563           if (!DECL_TEMPLATE_INFO (fn))
1564             /* Its enclosing class is an explicit specialization
1565                of a template class.  This is not a candidate.  */
1566             continue;
1567
1568           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1569                             TREE_TYPE (TREE_TYPE (fn))))
1570             /* The return types differ.  */
1571             continue;
1572
1573           /* Adjust the type of DECL in case FN is a static member.  */
1574           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1575           if (DECL_STATIC_FUNCTION_P (fn)
1576               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1577             decl_arg_types = TREE_CHAIN (decl_arg_types);
1578
1579           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)),
1580                          decl_arg_types))
1581             /* They match!  */
1582             candidates = tree_cons (NULL_TREE, fn, candidates);
1583         }
1584     }
1585
1586   if (templates && TREE_CHAIN (templates))
1587     {
1588       /* We have:
1589
1590            [temp.expl.spec]
1591
1592            It is possible for a specialization with a given function
1593            signature to be instantiated from more than one function
1594            template.  In such cases, explicit specification of the
1595            template arguments must be used to uniquely identify the
1596            function template specialization being specialized.
1597
1598          Note that here, there's no suggestion that we're supposed to
1599          determine which of the candidate templates is most
1600          specialized.  However, we, also have:
1601
1602            [temp.func.order]
1603
1604            Partial ordering of overloaded function template
1605            declarations is used in the following contexts to select
1606            the function template to which a function template
1607            specialization refers:
1608
1609            -- when an explicit specialization refers to a function
1610               template.
1611
1612          So, we do use the partial ordering rules, at least for now.
1613          This extension can only serve to make invalid programs valid,
1614          so it's safe.  And, there is strong anecdotal evidence that
1615          the committee intended the partial ordering rules to apply;
1616          the EDG front end has that behavior, and John Spicer claims
1617          that the committee simply forgot to delete the wording in
1618          [temp.expl.spec].  */
1619       tree tmpl = most_specialized_instantiation (templates);
1620       if (tmpl != error_mark_node)
1621         {
1622           templates = tmpl;
1623           TREE_CHAIN (templates) = NULL_TREE;
1624         }
1625     }
1626
1627   if (templates == NULL_TREE && candidates == NULL_TREE)
1628     {
1629       error ("template-id %qD for %q+D does not match any template "
1630              "declaration", template_id, decl);
1631       return error_mark_node;
1632     }
1633   else if ((templates && TREE_CHAIN (templates))
1634            || (candidates && TREE_CHAIN (candidates))
1635            || (templates && candidates))
1636     {
1637       error ("ambiguous template specialization %qD for %q+D",
1638              template_id, decl);
1639       chainon (candidates, templates);
1640       print_candidates (candidates);
1641       return error_mark_node;
1642     }
1643
1644   /* We have one, and exactly one, match.  */
1645   if (candidates)
1646     {
1647       tree fn = TREE_VALUE (candidates);
1648       /* DECL is a re-declaration of a template function.  */
1649       if (TREE_CODE (fn) == TEMPLATE_DECL)
1650         return fn;
1651       /* It was a specialization of an ordinary member function in a
1652          template class.  */
1653       *targs_out = copy_node (DECL_TI_ARGS (fn));
1654       return DECL_TI_TEMPLATE (fn);
1655     }
1656
1657   /* It was a specialization of a template.  */
1658   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1659   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1660     {
1661       *targs_out = copy_node (targs);
1662       SET_TMPL_ARGS_LEVEL (*targs_out,
1663                            TMPL_ARGS_DEPTH (*targs_out),
1664                            TREE_PURPOSE (templates));
1665     }
1666   else
1667     *targs_out = TREE_PURPOSE (templates);
1668   return TREE_VALUE (templates);
1669 }
1670
1671 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1672    but with the default argument values filled in from those in the
1673    TMPL_TYPES.  */
1674
1675 static tree
1676 copy_default_args_to_explicit_spec_1 (tree spec_types,
1677                                       tree tmpl_types)
1678 {
1679   tree new_spec_types;
1680
1681   if (!spec_types)
1682     return NULL_TREE;
1683
1684   if (spec_types == void_list_node)
1685     return void_list_node;
1686
1687   /* Substitute into the rest of the list.  */
1688   new_spec_types =
1689     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1690                                           TREE_CHAIN (tmpl_types));
1691
1692   /* Add the default argument for this parameter.  */
1693   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1694                          TREE_VALUE (spec_types),
1695                          new_spec_types);
1696 }
1697
1698 /* DECL is an explicit specialization.  Replicate default arguments
1699    from the template it specializes.  (That way, code like:
1700
1701      template <class T> void f(T = 3);
1702      template <> void f(double);
1703      void g () { f (); }
1704
1705    works, as required.)  An alternative approach would be to look up
1706    the correct default arguments at the call-site, but this approach
1707    is consistent with how implicit instantiations are handled.  */
1708
1709 static void
1710 copy_default_args_to_explicit_spec (tree decl)
1711 {
1712   tree tmpl;
1713   tree spec_types;
1714   tree tmpl_types;
1715   tree new_spec_types;
1716   tree old_type;
1717   tree new_type;
1718   tree t;
1719   tree object_type = NULL_TREE;
1720   tree in_charge = NULL_TREE;
1721   tree vtt = NULL_TREE;
1722
1723   /* See if there's anything we need to do.  */
1724   tmpl = DECL_TI_TEMPLATE (decl);
1725   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1726   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1727     if (TREE_PURPOSE (t))
1728       break;
1729   if (!t)
1730     return;
1731
1732   old_type = TREE_TYPE (decl);
1733   spec_types = TYPE_ARG_TYPES (old_type);
1734
1735   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1736     {
1737       /* Remove the this pointer, but remember the object's type for
1738          CV quals.  */
1739       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1740       spec_types = TREE_CHAIN (spec_types);
1741       tmpl_types = TREE_CHAIN (tmpl_types);
1742
1743       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1744         {
1745           /* DECL may contain more parameters than TMPL due to the extra
1746              in-charge parameter in constructors and destructors.  */
1747           in_charge = spec_types;
1748           spec_types = TREE_CHAIN (spec_types);
1749         }
1750       if (DECL_HAS_VTT_PARM_P (decl))
1751         {
1752           vtt = spec_types;
1753           spec_types = TREE_CHAIN (spec_types);
1754         }
1755     }
1756
1757   /* Compute the merged default arguments.  */
1758   new_spec_types =
1759     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1760
1761   /* Compute the new FUNCTION_TYPE.  */
1762   if (object_type)
1763     {
1764       if (vtt)
1765         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1766                                          TREE_VALUE (vtt),
1767                                          new_spec_types);
1768
1769       if (in_charge)
1770         /* Put the in-charge parameter back.  */
1771         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1772                                          TREE_VALUE (in_charge),
1773                                          new_spec_types);
1774
1775       new_type = build_method_type_directly (object_type,
1776                                              TREE_TYPE (old_type),
1777                                              new_spec_types);
1778     }
1779   else
1780     new_type = build_function_type (TREE_TYPE (old_type),
1781                                     new_spec_types);
1782   new_type = cp_build_type_attribute_variant (new_type,
1783                                               TYPE_ATTRIBUTES (old_type));
1784   new_type = build_exception_variant (new_type,
1785                                       TYPE_RAISES_EXCEPTIONS (old_type));
1786   TREE_TYPE (decl) = new_type;
1787 }
1788
1789 /* Check to see if the function just declared, as indicated in
1790    DECLARATOR, and in DECL, is a specialization of a function
1791    template.  We may also discover that the declaration is an explicit
1792    instantiation at this point.
1793
1794    Returns DECL, or an equivalent declaration that should be used
1795    instead if all goes well.  Issues an error message if something is
1796    amiss.  Returns error_mark_node if the error is not easily
1797    recoverable.
1798
1799    FLAGS is a bitmask consisting of the following flags:
1800
1801    2: The function has a definition.
1802    4: The function is a friend.
1803
1804    The TEMPLATE_COUNT is the number of references to qualifying
1805    template classes that appeared in the name of the function.  For
1806    example, in
1807
1808      template <class T> struct S { void f(); };
1809      void S<int>::f();
1810
1811    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1812    classes are not counted in the TEMPLATE_COUNT, so that in
1813
1814      template <class T> struct S {};
1815      template <> struct S<int> { void f(); }
1816      template <> void S<int>::f();
1817
1818    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1819    invalid; there should be no template <>.)
1820
1821    If the function is a specialization, it is marked as such via
1822    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1823    is set up correctly, and it is added to the list of specializations
1824    for that template.  */
1825
1826 tree
1827 check_explicit_specialization (tree declarator,
1828                                tree decl,
1829                                int template_count,
1830                                int flags)
1831 {
1832   int have_def = flags & 2;
1833   int is_friend = flags & 4;
1834   int specialization = 0;
1835   int explicit_instantiation = 0;
1836   int member_specialization = 0;
1837   tree ctype = DECL_CLASS_CONTEXT (decl);
1838   tree dname = DECL_NAME (decl);
1839   tmpl_spec_kind tsk;
1840
1841   if (is_friend)
1842     {
1843       if (!processing_specialization)
1844         tsk = tsk_none;
1845       else
1846         tsk = tsk_excessive_parms;
1847     }
1848   else
1849     tsk = current_tmpl_spec_kind (template_count);
1850
1851   switch (tsk)
1852     {
1853     case tsk_none:
1854       if (processing_specialization)
1855         {
1856           specialization = 1;
1857           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1858         }
1859       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1860         {
1861           if (is_friend)
1862             /* This could be something like:
1863
1864                template <class T> void f(T);
1865                class S { friend void f<>(int); }  */
1866             specialization = 1;
1867           else
1868             {
1869               /* This case handles bogus declarations like template <>
1870                  template <class T> void f<int>(); */
1871
1872               error ("template-id %qD in declaration of primary template",
1873                      declarator);
1874               return decl;
1875             }
1876         }
1877       break;
1878
1879     case tsk_invalid_member_spec:
1880       /* The error has already been reported in
1881          check_specialization_scope.  */
1882       return error_mark_node;
1883
1884     case tsk_invalid_expl_inst:
1885       error ("template parameter list used in explicit instantiation");
1886
1887       /* Fall through.  */
1888
1889     case tsk_expl_inst:
1890       if (have_def)
1891         error ("definition provided for explicit instantiation");
1892
1893       explicit_instantiation = 1;
1894       break;
1895
1896     case tsk_excessive_parms:
1897     case tsk_insufficient_parms:
1898       if (tsk == tsk_excessive_parms)
1899         error ("too many template parameter lists in declaration of %qD",
1900                decl);
1901       else if (template_header_count)
1902         error("too few template parameter lists in declaration of %qD", decl);
1903       else
1904         error("explicit specialization of %qD must be introduced by "
1905               "%<template <>%>", decl);
1906
1907       /* Fall through.  */
1908     case tsk_expl_spec:
1909       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1910       if (ctype)
1911         member_specialization = 1;
1912       else
1913         specialization = 1;
1914       break;
1915
1916     case tsk_template:
1917       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1918         {
1919           /* This case handles bogus declarations like template <>
1920              template <class T> void f<int>(); */
1921
1922           if (uses_template_parms (declarator))
1923             error ("function template partial specialization %qD "
1924                    "is not allowed", declarator);
1925           else
1926             error ("template-id %qD in declaration of primary template",
1927                    declarator);
1928           return decl;
1929         }
1930
1931       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1932         /* This is a specialization of a member template, without
1933            specialization the containing class.  Something like:
1934
1935              template <class T> struct S {
1936                template <class U> void f (U);
1937              };
1938              template <> template <class U> void S<int>::f(U) {}
1939
1940            That's a specialization -- but of the entire template.  */
1941         specialization = 1;
1942       break;
1943
1944     default:
1945       gcc_unreachable ();
1946     }
1947
1948   if (specialization || member_specialization)
1949     {
1950       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1951       for (; t; t = TREE_CHAIN (t))
1952         if (TREE_PURPOSE (t))
1953           {
1954             pedwarn
1955               ("default argument specified in explicit specialization");
1956             break;
1957           }
1958     }
1959
1960   if (specialization || member_specialization || explicit_instantiation)
1961     {
1962       tree tmpl = NULL_TREE;
1963       tree targs = NULL_TREE;
1964
1965       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
1966       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1967         {
1968           tree fns;
1969
1970           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
1971           if (ctype)
1972             fns = dname;
1973           else
1974             {
1975               /* If there is no class context, the explicit instantiation
1976                  must be at namespace scope.  */
1977               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
1978
1979               /* Find the namespace binding, using the declaration
1980                  context.  */
1981               fns = lookup_qualified_name (CP_DECL_CONTEXT (decl), dname,
1982                                            false, true);
1983               if (!fns || !is_overloaded_fn (fns))
1984                 {
1985                   error ("%qD is not a template function", dname);
1986                   fns = error_mark_node;
1987                 }
1988               else
1989                 {
1990                   tree fn = OVL_CURRENT (fns);
1991                   if (!is_associated_namespace (CP_DECL_CONTEXT (decl),
1992                                                 CP_DECL_CONTEXT (fn)))
1993                     error ("%qD is not declared in %qD",
1994                            decl, current_namespace);
1995                 }
1996             }
1997
1998           declarator = lookup_template_function (fns, NULL_TREE);
1999         }
2000
2001       if (declarator == error_mark_node)
2002         return error_mark_node;
2003
2004       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
2005         {
2006           if (!explicit_instantiation)
2007             /* A specialization in class scope.  This is invalid,
2008                but the error will already have been flagged by
2009                check_specialization_scope.  */
2010             return error_mark_node;
2011           else
2012             {
2013               /* It's not valid to write an explicit instantiation in
2014                  class scope, e.g.:
2015
2016                    class C { template void f(); }
2017
2018                    This case is caught by the parser.  However, on
2019                    something like:
2020
2021                    template class C { void f(); };
2022
2023                    (which is invalid) we can get here.  The error will be
2024                    issued later.  */
2025               ;
2026             }
2027
2028           return decl;
2029         }
2030       else if (ctype != NULL_TREE
2031                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
2032                    IDENTIFIER_NODE))
2033         {
2034           /* Find the list of functions in ctype that have the same
2035              name as the declared function.  */
2036           tree name = TREE_OPERAND (declarator, 0);
2037           tree fns = NULL_TREE;
2038           int idx;
2039
2040           if (constructor_name_p (name, ctype))
2041             {
2042               int is_constructor = DECL_CONSTRUCTOR_P (decl);
2043
2044               if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
2045                   : !CLASSTYPE_DESTRUCTORS (ctype))
2046                 {
2047                   /* From [temp.expl.spec]:
2048
2049                      If such an explicit specialization for the member
2050                      of a class template names an implicitly-declared
2051                      special member function (clause _special_), the
2052                      program is ill-formed.
2053
2054                      Similar language is found in [temp.explicit].  */
2055                   error ("specialization of implicitly-declared special member function");
2056                   return error_mark_node;
2057                 }
2058
2059               name = is_constructor ? ctor_identifier : dtor_identifier;
2060             }
2061
2062           if (!DECL_CONV_FN_P (decl))
2063             {
2064               idx = lookup_fnfields_1 (ctype, name);
2065               if (idx >= 0)
2066                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
2067             }
2068           else
2069             {
2070               VEC(tree,gc) *methods;
2071               tree ovl;
2072
2073               /* For a type-conversion operator, we cannot do a
2074                  name-based lookup.  We might be looking for `operator
2075                  int' which will be a specialization of `operator T'.
2076                  So, we find *all* the conversion operators, and then
2077                  select from them.  */
2078               fns = NULL_TREE;
2079
2080               methods = CLASSTYPE_METHOD_VEC (ctype);
2081               if (methods)
2082                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
2083                      VEC_iterate (tree, methods, idx, ovl);
2084                      ++idx)
2085                   {
2086                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
2087                       /* There are no more conversion functions.  */
2088                       break;
2089
2090                     /* Glue all these conversion functions together
2091                        with those we already have.  */
2092                     for (; ovl; ovl = OVL_NEXT (ovl))
2093                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
2094                   }
2095             }
2096
2097           if (fns == NULL_TREE)
2098             {
2099               error ("no member function %qD declared in %qT", name, ctype);
2100               return error_mark_node;
2101             }
2102           else
2103             TREE_OPERAND (declarator, 0) = fns;
2104         }
2105
2106       /* Figure out what exactly is being specialized at this point.
2107          Note that for an explicit instantiation, even one for a
2108          member function, we cannot tell apriori whether the
2109          instantiation is for a member template, or just a member
2110          function of a template class.  Even if a member template is
2111          being instantiated, the member template arguments may be
2112          elided if they can be deduced from the rest of the
2113          declaration.  */
2114       tmpl = determine_specialization (declarator, decl,
2115                                        &targs,
2116                                        member_specialization,
2117                                        template_count,
2118                                        tsk);
2119
2120       if (!tmpl || tmpl == error_mark_node)
2121         /* We couldn't figure out what this declaration was
2122            specializing.  */
2123         return error_mark_node;
2124       else
2125         {
2126           tree gen_tmpl = most_general_template (tmpl);
2127
2128           if (explicit_instantiation)
2129             {
2130               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2131                  is done by do_decl_instantiation later.  */
2132
2133               int arg_depth = TMPL_ARGS_DEPTH (targs);
2134               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2135
2136               if (arg_depth > parm_depth)
2137                 {
2138                   /* If TMPL is not the most general template (for
2139                      example, if TMPL is a friend template that is
2140                      injected into namespace scope), then there will
2141                      be too many levels of TARGS.  Remove some of them
2142                      here.  */
2143                   int i;
2144                   tree new_targs;
2145
2146                   new_targs = make_tree_vec (parm_depth);
2147                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2148                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2149                       = TREE_VEC_ELT (targs, i);
2150                   targs = new_targs;
2151                 }
2152
2153               return instantiate_template (tmpl, targs, tf_error);
2154             }
2155
2156           /* If we thought that the DECL was a member function, but it
2157              turns out to be specializing a static member function,
2158              make DECL a static member function as well.  */
2159           if (DECL_STATIC_FUNCTION_P (tmpl)
2160               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2161             revert_static_member_fn (decl);
2162
2163           /* If this is a specialization of a member template of a
2164              template class, we want to return the TEMPLATE_DECL, not
2165              the specialization of it.  */
2166           if (tsk == tsk_template)
2167             {
2168               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2169               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2170               if (have_def)
2171                 {
2172                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2173                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2174                     = DECL_SOURCE_LOCATION (decl);
2175                   /* We want to use the argument list specified in the
2176                      definition, not in the original declaration.  */
2177                   DECL_ARGUMENTS (DECL_TEMPLATE_RESULT (tmpl))
2178                     = DECL_ARGUMENTS (decl);
2179                 }
2180               return tmpl;
2181             }
2182
2183           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2184           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2185
2186           /* Inherit default function arguments from the template
2187              DECL is specializing.  */
2188           copy_default_args_to_explicit_spec (decl);
2189
2190           /* This specialization has the same protection as the
2191              template it specializes.  */
2192           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2193           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2194
2195           /* 7.1.1-1 [dcl.stc]
2196
2197              A storage-class-specifier shall not be specified in an
2198              explicit specialization...
2199
2200              The parser rejects these, so unless action is taken here,
2201              explicit function specializations will always appear with
2202              global linkage.
2203
2204              The action recommended by the C++ CWG in response to C++
2205              defect report 605 is to make the storage class and linkage
2206              of the explicit specialization match the templated function:
2207
2208              http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#605
2209            */
2210           if (tsk == tsk_expl_spec && DECL_FUNCTION_TEMPLATE_P (gen_tmpl))
2211             {
2212               tree tmpl_func = DECL_TEMPLATE_RESULT (gen_tmpl);
2213               gcc_assert (TREE_CODE (tmpl_func) == FUNCTION_DECL);
2214
2215               /* This specialization has the same linkage and visibility as
2216                  the function template it specializes.  */
2217               TREE_PUBLIC (decl) = TREE_PUBLIC (tmpl_func);
2218               DECL_THIS_STATIC (decl) = DECL_THIS_STATIC (tmpl_func);
2219               if (DECL_VISIBILITY_SPECIFIED (tmpl_func))
2220                 {
2221                   DECL_VISIBILITY_SPECIFIED (decl) = 1;
2222                   DECL_VISIBILITY (decl) = DECL_VISIBILITY (tmpl_func);
2223                 }
2224             }
2225
2226           /* If DECL is a friend declaration, declared using an
2227              unqualified name, the namespace associated with DECL may
2228              have been set incorrectly.  For example, in:
2229
2230                template <typename T> void f(T);
2231                namespace N {
2232                  struct S { friend void f<int>(int); }
2233                }
2234
2235              we will have set the DECL_CONTEXT for the friend
2236              declaration to N, rather than to the global namespace.  */
2237           if (DECL_NAMESPACE_SCOPE_P (decl))
2238             DECL_CONTEXT (decl) = DECL_CONTEXT (tmpl);
2239
2240           if (is_friend && !have_def)
2241             /* This is not really a declaration of a specialization.
2242                It's just the name of an instantiation.  But, it's not
2243                a request for an instantiation, either.  */
2244             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2245           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2246             /* This is indeed a specialization.  In case of constructors
2247                and destructors, we need in-charge and not-in-charge
2248                versions in V3 ABI.  */
2249             clone_function_decl (decl, /*update_method_vec_p=*/0);
2250
2251           /* Register this specialization so that we can find it
2252              again.  */
2253           decl = register_specialization (decl, gen_tmpl, targs, is_friend);
2254         }
2255     }
2256
2257   return decl;
2258 }
2259
2260 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2261    parameters.  These are represented in the same format used for
2262    DECL_TEMPLATE_PARMS.  */
2263
2264 int
2265 comp_template_parms (tree parms1, tree parms2)
2266 {
2267   tree p1;
2268   tree p2;
2269
2270   if (parms1 == parms2)
2271     return 1;
2272
2273   for (p1 = parms1, p2 = parms2;
2274        p1 != NULL_TREE && p2 != NULL_TREE;
2275        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2276     {
2277       tree t1 = TREE_VALUE (p1);
2278       tree t2 = TREE_VALUE (p2);
2279       int i;
2280
2281       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2282       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2283
2284       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2285         return 0;
2286
2287       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i)
2288         {
2289           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2290           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2291
2292           /* If either of the template parameters are invalid, assume
2293              they match for the sake of error recovery. */
2294           if (parm1 == error_mark_node || parm2 == error_mark_node)
2295             return 1;
2296
2297           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2298             return 0;
2299
2300           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM
2301               && (TEMPLATE_TYPE_PARAMETER_PACK (parm1)
2302                   == TEMPLATE_TYPE_PARAMETER_PACK (parm2)))
2303             continue;
2304           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2305             return 0;
2306         }
2307     }
2308
2309   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2310     /* One set of parameters has more parameters lists than the
2311        other.  */
2312     return 0;
2313
2314   return 1;
2315 }
2316
2317 /* Determine whether PARM is a parameter pack.  */
2318 bool 
2319 template_parameter_pack_p (tree parm)
2320 {
2321   /* Determine if we have a non-type template parameter pack.  */
2322   if (TREE_CODE (parm) == PARM_DECL)
2323     return (DECL_TEMPLATE_PARM_P (parm) 
2324             && TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)));
2325
2326   /* If this is a list of template parameters, we could get a
2327      TYPE_DECL or a TEMPLATE_DECL.  */ 
2328   if (TREE_CODE (parm) == TYPE_DECL || TREE_CODE (parm) == TEMPLATE_DECL)
2329     parm = TREE_TYPE (parm);
2330
2331   return ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
2332            || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
2333           && TEMPLATE_TYPE_PARAMETER_PACK (parm));
2334 }
2335
2336 /* Determine whether ARGS describes a variadic template args list,
2337    i.e., one that is terminated by a template argument pack.  */
2338 static bool 
2339 template_args_variadic_p (tree args)
2340 {
2341   int nargs;
2342   tree last_parm;
2343
2344   if (args == NULL_TREE)
2345     return false;
2346
2347   args = INNERMOST_TEMPLATE_ARGS (args);
2348   nargs = TREE_VEC_LENGTH (args);
2349
2350   if (nargs == 0)
2351     return false;
2352
2353   last_parm = TREE_VEC_ELT (args, nargs - 1);
2354
2355   return ARGUMENT_PACK_P (last_parm);
2356 }
2357
2358 /* Generate a new name for the parameter pack name NAME (an
2359    IDENTIFIER_NODE) that incorporates its */
2360 static tree
2361 make_ith_pack_parameter_name (tree name, int i)
2362 {
2363   /* Munge the name to include the parameter index.  */
2364   char numbuf[128];
2365   char* newname;
2366   
2367   sprintf(numbuf, "%i", i);
2368   newname = (char*)alloca (IDENTIFIER_LENGTH (name) + strlen(numbuf) + 2);
2369   sprintf(newname, "%s#%i", IDENTIFIER_POINTER (name), i);
2370   return get_identifier (newname);
2371 }
2372
2373 /* Structure used to track the progress of find_parameter_pack_r.  */
2374 struct find_parameter_pack_data 
2375 {
2376   tree* parameter_packs;
2377   struct pointer_set_t *visited;
2378 };
2379
2380 /* Identifiers all of the argument packs that occur in a template
2381    argument and appends them to the TREE_LIST inside DATA, which is a
2382    find_parameter_pack_Data structure. This is a subroutine of
2383    make_pack_expansion and uses_parameter_packs.  */
2384 static tree
2385 find_parameter_packs_r (tree *tp, int *walk_subtrees, void* data)
2386 {
2387   tree t = *tp;
2388   struct find_parameter_pack_data* ppd = 
2389     (struct find_parameter_pack_data*)data;
2390
2391   if (TYPE_P (t))
2392     {
2393       tree context = TYPE_CONTEXT (t);
2394       walk_tree (&context, &find_parameter_packs_r, ppd, ppd->visited);
2395     }
2396
2397   /* This switch statement will return immediately if we don't find a
2398      parameter pack.  */
2399   switch (TREE_CODE (t)) 
2400     {
2401     case TEMPLATE_PARM_INDEX:
2402       if (TEMPLATE_PARM_PARAMETER_PACK (t))
2403         break;
2404       return NULL_TREE;
2405
2406     case BOUND_TEMPLATE_TEMPLATE_PARM:
2407       /* Check the template arguments.  */
2408       walk_tree (&TYPE_TI_ARGS (t), &find_parameter_packs_r, ppd, 
2409                  ppd->visited);
2410
2411       /* Dig out the underlying TEMPLATE_TEMPLATE_PARM.  */
2412       t = TYPE_TI_TEMPLATE (t);
2413       if (DECL_P (t) && TREE_TYPE (t))
2414         t = TREE_TYPE (t);
2415       *walk_subtrees = 0;
2416       
2417       /* Fall through.  */
2418
2419     case TEMPLATE_TYPE_PARM:
2420     case TEMPLATE_TEMPLATE_PARM:
2421       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
2422         break;
2423       return NULL_TREE;
2424
2425     case PARM_DECL:
2426       if (FUNCTION_PARAMETER_PACK_P (t))
2427         {
2428           /* We don't want to walk into the type of a PARM_DECL,
2429              because we don't want to see the type parameter pack.*/
2430           *walk_subtrees = 0;
2431           break;
2432         }
2433       return NULL_TREE;
2434
2435     case RECORD_TYPE:
2436       if (TYPE_PTRMEMFUNC_P (t))
2437         return NULL_TREE;
2438       /* Fall through.  */
2439
2440     case UNION_TYPE:
2441     case ENUMERAL_TYPE:
2442       if (TYPE_TEMPLATE_INFO (t))
2443         {
2444           tree args = TREE_VALUE (TYPE_TEMPLATE_INFO (t));
2445           walk_tree (&args, &find_parameter_packs_r, ppd, ppd->visited);
2446         }
2447
2448       *walk_subtrees = 0;
2449       return NULL_TREE;
2450
2451     case TEMPLATE_DECL:
2452       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
2453           && TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (t)))
2454         break;
2455       
2456       *walk_subtrees = 0;
2457       return NULL_TREE;
2458        
2459     case TYPE_PACK_EXPANSION:
2460     case EXPR_PACK_EXPANSION:
2461       *walk_subtrees = 0;
2462       return NULL_TREE;
2463
2464     case INTEGER_TYPE:
2465       walk_tree (&TYPE_MAX_VALUE (t), &find_parameter_packs_r, 
2466                  ppd, ppd->visited);
2467       *walk_subtrees = 0;
2468       return NULL_TREE;
2469
2470     default:
2471       return NULL_TREE;
2472     }
2473   
2474   /* Add this parameter pack to the list.  */
2475   *ppd->parameter_packs = tree_cons (NULL_TREE, t, *ppd->parameter_packs);
2476
2477   return NULL_TREE;
2478 }
2479
2480 /* Determines if the expression or type T uses any parameter packs.  */
2481 bool
2482 uses_parameter_packs (tree t)
2483 {
2484   tree parameter_packs = NULL_TREE;
2485   struct find_parameter_pack_data ppd;
2486   ppd.parameter_packs = &parameter_packs;
2487   ppd.visited = pointer_set_create ();
2488   walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2489   pointer_set_destroy (ppd.visited);
2490   return parameter_packs != NULL_TREE;
2491 }
2492
2493 /* Turn ARG, which may be an expression, type, or a TREE_LIST
2494    representation a base-class initializer into a parameter pack
2495    expansion. If all goes well, the resulting node will be an
2496    EXPR_PACK_EXPANSION, TYPE_PACK_EXPANSION, or TREE_LIST,
2497    respectively.  */
2498 tree 
2499 make_pack_expansion (tree arg)
2500 {
2501   tree result;
2502   tree parameter_packs = NULL_TREE;
2503   bool for_types = false;
2504   struct find_parameter_pack_data ppd;
2505
2506   if (!arg || arg == error_mark_node)
2507     return arg;
2508
2509   if (TREE_CODE (arg) == TREE_LIST)
2510     {
2511       /* The only time we will see a TREE_LIST here is for a base
2512          class initializer.  In this case, the TREE_PURPOSE will be a
2513          _TYPE node (representing the base class expansion we're
2514          initializing) and the TREE_VALUE will be a TREE_LIST
2515          containing the initialization arguments. 
2516
2517          The resulting expansion looks somewhat different from most
2518          expansions. Rather than returning just one _EXPANSION, we
2519          return a TREE_LIST whose TREE_PURPOSE is a
2520          TYPE_PACK_EXPANSION containing the bases that will be
2521          initialized.  The TREE_VALUE will be identical to the
2522          original TREE_VALUE, which is a list of arguments that will
2523          be passed to each base.  We do not introduce any new pack
2524          expansion nodes into the TREE_VALUE (although it is possible
2525          that some already exist), because the TREE_PURPOSE and
2526          TREE_VALUE all need to be expanded together with the same
2527          _EXPANSION node.  Note that the TYPE_PACK_EXPANSION in the
2528          resulting TREE_PURPOSE will mention the parameter packs in
2529          both the bases and the arguments to the bases.  */
2530       tree purpose;
2531       tree value;
2532       tree parameter_packs = NULL_TREE;
2533
2534       /* Determine which parameter packs will be used by the base
2535          class expansion.  */
2536       ppd.visited = pointer_set_create ();
2537       ppd.parameter_packs = &parameter_packs;
2538       walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
2539                  &ppd, ppd.visited);
2540
2541       if (parameter_packs == NULL_TREE)
2542         {
2543           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
2544           pointer_set_destroy (ppd.visited);
2545           return error_mark_node;
2546         }
2547
2548       if (TREE_VALUE (arg) != void_type_node)
2549         {
2550           /* Collect the sets of parameter packs used in each of the
2551              initialization arguments.  */
2552           for (value = TREE_VALUE (arg); value; value = TREE_CHAIN (value))
2553             {
2554               /* Determine which parameter packs will be expanded in this
2555                  argument.  */
2556               walk_tree (&TREE_VALUE (value), &find_parameter_packs_r, 
2557                          &ppd, ppd.visited);
2558             }
2559         }
2560
2561       pointer_set_destroy (ppd.visited);
2562
2563       /* Create the pack expansion type for the base type.  */
2564       purpose = make_node (TYPE_PACK_EXPANSION);
2565       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
2566       PACK_EXPANSION_PARAMETER_PACKS (purpose) = parameter_packs;
2567
2568       /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2569          they will rarely be compared to anything.  */
2570       SET_TYPE_STRUCTURAL_EQUALITY (purpose);
2571
2572       return tree_cons (purpose, TREE_VALUE (arg), NULL_TREE);
2573     }
2574
2575   if (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL)
2576     for_types = true;
2577
2578   /* Build the PACK_EXPANSION_* node.  */
2579   result = make_node (for_types ? TYPE_PACK_EXPANSION : EXPR_PACK_EXPANSION);
2580   SET_PACK_EXPANSION_PATTERN (result, arg);
2581   if (TREE_CODE (result) == EXPR_PACK_EXPANSION)
2582     {
2583       /* Propagate type and const-expression information.  */
2584       TREE_TYPE (result) = TREE_TYPE (arg);
2585       TREE_CONSTANT (result) = TREE_CONSTANT (arg);
2586     }
2587   else
2588     /* Just use structural equality for these TYPE_PACK_EXPANSIONS;
2589        they will rarely be compared to anything.  */
2590     SET_TYPE_STRUCTURAL_EQUALITY (result);
2591
2592   /* Determine which parameter packs will be expanded.  */
2593   ppd.parameter_packs = &parameter_packs;
2594   ppd.visited = pointer_set_create ();
2595   walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
2596   pointer_set_destroy (ppd.visited);
2597
2598   /* Make sure we found some parameter packs.  */
2599   if (parameter_packs == NULL_TREE)
2600     {
2601       if (TYPE_P (arg))
2602         error ("expansion pattern %<%T%> contains no argument packs", arg);
2603       else
2604         error ("expansion pattern %<%E%> contains no argument packs", arg);
2605       return error_mark_node;
2606     }
2607   PACK_EXPANSION_PARAMETER_PACKS (result) = parameter_packs;
2608
2609   return result;
2610 }
2611
2612 /* Checks T for any "bare" parameter packs, which have not yet been
2613    expanded, and issues an error if any are found. This operation can
2614    only be done on full expressions or types (e.g., an expression
2615    statement, "if" condition, etc.), because we could have expressions like:
2616
2617      foo(f(g(h(args)))...)
2618
2619    where "args" is a parameter pack. check_for_bare_parameter_packs
2620    should not be called for the subexpressions args, h(args),
2621    g(h(args)), or f(g(h(args))), because we would produce erroneous
2622    error messages. 
2623
2624    Returns TRUE if there were no bare parameter packs, returns FALSE
2625    (and emits an error) if there were bare parameter packs.*/
2626 bool 
2627 check_for_bare_parameter_packs (tree t)
2628 {
2629   tree parameter_packs = NULL_TREE;
2630   struct find_parameter_pack_data ppd;
2631
2632   if (!processing_template_decl || !t || t == error_mark_node)
2633     return true;
2634
2635   if (TREE_CODE (t) == TYPE_DECL)
2636     t = TREE_TYPE (t);
2637
2638   ppd.parameter_packs = &parameter_packs;
2639   ppd.visited = pointer_set_create ();
2640   walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
2641   pointer_set_destroy (ppd.visited);
2642
2643   if (parameter_packs) 
2644     {
2645       error ("parameter packs not expanded with `...':");
2646       while (parameter_packs)
2647         {
2648           tree pack = TREE_VALUE (parameter_packs);
2649           tree name = NULL_TREE;
2650
2651           if (TREE_CODE (pack) == TEMPLATE_TYPE_PARM
2652               || TREE_CODE (pack) == TEMPLATE_TEMPLATE_PARM)
2653             name = TYPE_NAME (pack);
2654           else if (TREE_CODE (pack) == TEMPLATE_PARM_INDEX)
2655             name = DECL_NAME (TEMPLATE_PARM_DECL (pack));
2656           else
2657             name = DECL_NAME (pack);
2658           inform ("        %qD", name);
2659
2660           parameter_packs = TREE_CHAIN (parameter_packs);
2661         }
2662
2663       return false;
2664     }
2665
2666   return true;
2667 }
2668
2669 /* Expand any parameter packs that occur in the template arguments in
2670    ARGS.  */
2671 tree
2672 expand_template_argument_pack (tree args)
2673 {
2674   tree result_args = NULL_TREE;
2675   int in_arg, out_arg = 0, nargs = args ? TREE_VEC_LENGTH (args) : 0;
2676   int num_result_args = -1;
2677
2678   /* First, determine if we need to expand anything, and the number of
2679      slots we'll need.  */
2680   for (in_arg = 0; in_arg < nargs; ++in_arg)
2681     {
2682       tree arg = TREE_VEC_ELT (args, in_arg);
2683       if (ARGUMENT_PACK_P (arg))
2684         {
2685           int num_packed = TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg));
2686           if (num_result_args < 0)
2687             num_result_args = in_arg + num_packed;
2688           else
2689             num_result_args += num_packed;
2690         }
2691       else
2692         {
2693           if (num_result_args >= 0)
2694             num_result_args++;
2695         }
2696     }
2697
2698   /* If no expansion is necessary, we're done.  */
2699   if (num_result_args < 0)
2700     return args;
2701
2702   /* Expand arguments.  */
2703   result_args = make_tree_vec (num_result_args);
2704   for (in_arg = 0; in_arg < nargs; ++in_arg)
2705     {
2706       tree arg = TREE_VEC_ELT (args, in_arg);
2707       if (ARGUMENT_PACK_P (arg))
2708         {
2709           tree packed = ARGUMENT_PACK_ARGS (arg);
2710           int i, num_packed = TREE_VEC_LENGTH (packed);
2711           for (i = 0; i < num_packed; ++i, ++out_arg)
2712             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
2713         }
2714       else
2715         {
2716           TREE_VEC_ELT (result_args, out_arg) = arg;
2717           ++out_arg;
2718         }
2719     }
2720
2721   return result_args;
2722 }
2723
2724 /* Complain if DECL shadows a template parameter.
2725
2726    [temp.local]: A template-parameter shall not be redeclared within its
2727    scope (including nested scopes).  */
2728
2729 void
2730 check_template_shadow (tree decl)
2731 {
2732   tree olddecl;
2733
2734   /* If we're not in a template, we can't possibly shadow a template
2735      parameter.  */
2736   if (!current_template_parms)
2737     return;
2738
2739   /* Figure out what we're shadowing.  */
2740   if (TREE_CODE (decl) == OVERLOAD)
2741     decl = OVL_CURRENT (decl);
2742   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2743
2744   /* If there's no previous binding for this name, we're not shadowing
2745      anything, let alone a template parameter.  */
2746   if (!olddecl)
2747     return;
2748
2749   /* If we're not shadowing a template parameter, we're done.  Note
2750      that OLDDECL might be an OVERLOAD (or perhaps even an
2751      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2752      node.  */
2753   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2754     return;
2755
2756   /* We check for decl != olddecl to avoid bogus errors for using a
2757      name inside a class.  We check TPFI to avoid duplicate errors for
2758      inline member templates.  */
2759   if (decl == olddecl
2760       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2761     return;
2762
2763   error ("declaration of %q+#D", decl);
2764   error (" shadows template parm %q+#D", olddecl);
2765 }
2766
2767 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2768    ORIG_LEVEL, DECL, and TYPE.  */
2769
2770 static tree
2771 build_template_parm_index (int index,
2772                            int level,
2773                            int orig_level,
2774                            tree decl,
2775                            tree type)
2776 {
2777   tree t = make_node (TEMPLATE_PARM_INDEX);
2778   TEMPLATE_PARM_IDX (t) = index;
2779   TEMPLATE_PARM_LEVEL (t) = level;
2780   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2781   TEMPLATE_PARM_DECL (t) = decl;
2782   TREE_TYPE (t) = type;
2783   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2784   TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2785   TREE_READONLY (t) = TREE_READONLY (decl);
2786
2787   return t;
2788 }
2789
2790 /* Find the canonical type parameter for the given template type
2791    parameter.  Returns the canonical type parameter, which may be TYPE
2792    if no such parameter existed.  */
2793 static tree
2794 canonical_type_parameter (tree type)
2795 {
2796   tree list;
2797   int idx = TEMPLATE_TYPE_IDX (type);
2798   if (!canonical_template_parms)
2799     canonical_template_parms = VEC_alloc (tree, gc, idx+1);
2800
2801   while (VEC_length (tree, canonical_template_parms) <= (unsigned)idx)
2802     VEC_safe_push (tree, gc, canonical_template_parms, NULL_TREE);
2803
2804   list = VEC_index (tree, canonical_template_parms, idx);
2805   while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
2806     list = TREE_CHAIN (list);
2807
2808   if (list)
2809     return TREE_VALUE (list);
2810   else
2811     {
2812       VEC_replace(tree, canonical_template_parms, idx,
2813                   tree_cons (NULL_TREE, type, 
2814                              VEC_index (tree, canonical_template_parms, idx)));
2815       return type;
2816     }
2817 }
2818
2819 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2820    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2821    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2822    new one is created.  */
2823
2824 static tree
2825 reduce_template_parm_level (tree index, tree type, int levels)
2826 {
2827   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2828       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2829           != TEMPLATE_PARM_LEVEL (index) - levels))
2830     {
2831       tree orig_decl = TEMPLATE_PARM_DECL (index);
2832       tree decl, t;
2833
2834       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2835       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2836       TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2837       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2838       DECL_ARTIFICIAL (decl) = 1;
2839       SET_DECL_TEMPLATE_PARM_P (decl);
2840
2841       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2842                                      TEMPLATE_PARM_LEVEL (index) - levels,
2843                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2844                                      decl, type);
2845       TEMPLATE_PARM_DESCENDANTS (index) = t;
2846       TEMPLATE_PARM_PARAMETER_PACK (t) 
2847         = TEMPLATE_PARM_PARAMETER_PACK (index);
2848
2849         /* Template template parameters need this.  */
2850       if (TREE_CODE (decl) != CONST_DECL)
2851         DECL_TEMPLATE_PARMS (decl)
2852           = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2853     }
2854
2855   return TEMPLATE_PARM_DESCENDANTS (index);
2856 }
2857
2858 /* Process information from new template parameter PARM and append it to the
2859    LIST being built.  This new parameter is a non-type parameter iff
2860    IS_NON_TYPE is true. This new parameter is a parameter
2861    pack iff IS_PARAMETER_PACK is true.  */
2862
2863 tree
2864 process_template_parm (tree list, tree parm, bool is_non_type, 
2865                        bool is_parameter_pack)
2866 {
2867   tree decl = 0;
2868   tree defval;
2869   tree err_parm_list;
2870   int idx = 0;
2871
2872   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2873   defval = TREE_PURPOSE (parm);
2874
2875   if (list)
2876     {
2877       tree p = tree_last (list);
2878
2879       if (p && TREE_VALUE (p) != error_mark_node)
2880         {
2881           p = TREE_VALUE (p);
2882           if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2883             idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2884           else
2885             idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2886         }
2887
2888       ++idx;
2889     }
2890   else
2891     idx = 0;
2892
2893   if (is_non_type)
2894     {
2895       parm = TREE_VALUE (parm);
2896
2897       SET_DECL_TEMPLATE_PARM_P (parm);
2898
2899       if (TREE_TYPE (parm) == error_mark_node)
2900         {
2901           err_parm_list = build_tree_list (defval, parm);
2902           TREE_VALUE (err_parm_list) = error_mark_node;
2903            return chainon (list, err_parm_list);
2904         }
2905       else
2906       {
2907         /* [temp.param]
2908
2909            The top-level cv-qualifiers on the template-parameter are
2910            ignored when determining its type.  */
2911         TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2912         if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2913           {
2914             err_parm_list = build_tree_list (defval, parm);
2915             TREE_VALUE (err_parm_list) = error_mark_node;
2916              return chainon (list, err_parm_list);
2917           }
2918
2919         if (uses_parameter_packs (TREE_TYPE (parm)) && !is_parameter_pack)
2920           {
2921             /* This template parameter is not a parameter pack, but it
2922                should be. Complain about "bare" parameter packs.  */
2923             check_for_bare_parameter_packs (TREE_TYPE (parm));
2924             
2925             /* Recover by calling this a parameter pack.  */
2926             is_parameter_pack = true;
2927           }
2928       }
2929
2930       /* A template parameter is not modifiable.  */
2931       TREE_CONSTANT (parm) = 1;
2932       TREE_INVARIANT (parm) = 1;
2933       TREE_READONLY (parm) = 1;
2934       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2935       TREE_CONSTANT (decl) = 1;
2936       TREE_INVARIANT (decl) = 1;
2937       TREE_READONLY (decl) = 1;
2938       DECL_INITIAL (parm) = DECL_INITIAL (decl)
2939         = build_template_parm_index (idx, processing_template_decl,
2940                                      processing_template_decl,
2941                                      decl, TREE_TYPE (parm));
2942
2943       TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) 
2944         = is_parameter_pack;
2945     }
2946   else
2947     {
2948       tree t;
2949       parm = TREE_VALUE (TREE_VALUE (parm));
2950
2951       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2952         {
2953           t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2954           /* This is for distinguishing between real templates and template
2955              template parameters */
2956           TREE_TYPE (parm) = t;
2957           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2958           decl = parm;
2959         }
2960       else
2961         {
2962           t = make_aggr_type (TEMPLATE_TYPE_PARM);
2963           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
2964           decl = build_decl (TYPE_DECL, parm, t);
2965         }
2966
2967       TYPE_NAME (t) = decl;
2968       TYPE_STUB_DECL (t) = decl;
2969       parm = decl;
2970       TEMPLATE_TYPE_PARM_INDEX (t)
2971         = build_template_parm_index (idx, processing_template_decl,
2972                                      processing_template_decl,
2973                                      decl, TREE_TYPE (parm));
2974       TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
2975       TYPE_CANONICAL (t) = canonical_type_parameter (t);
2976     }
2977   DECL_ARTIFICIAL (decl) = 1;
2978   SET_DECL_TEMPLATE_PARM_P (decl);
2979   pushdecl (decl);
2980   parm = build_tree_list (defval, parm);
2981   return chainon (list, parm);
2982 }
2983
2984 /* The end of a template parameter list has been reached.  Process the
2985    tree list into a parameter vector, converting each parameter into a more
2986    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
2987    as PARM_DECLs.  */
2988
2989 tree
2990 end_template_parm_list (tree parms)
2991 {
2992   int nparms;
2993   tree parm, next;
2994   tree saved_parmlist = make_tree_vec (list_length (parms));
2995
2996   current_template_parms
2997     = tree_cons (size_int (processing_template_decl),
2998                  saved_parmlist, current_template_parms);
2999
3000   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
3001     {
3002       next = TREE_CHAIN (parm);
3003       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
3004       TREE_CHAIN (parm) = NULL_TREE;
3005     }
3006
3007   --processing_template_parmlist;
3008
3009   return saved_parmlist;
3010 }
3011
3012 /* end_template_decl is called after a template declaration is seen.  */
3013
3014 void
3015 end_template_decl (void)
3016 {
3017   reset_specialization ();
3018
3019   if (! processing_template_decl)
3020     return;
3021
3022   /* This matches the pushlevel in begin_template_parm_list.  */
3023   finish_scope ();
3024
3025   --processing_template_decl;
3026   current_template_parms = TREE_CHAIN (current_template_parms);
3027 }
3028
3029 /* Within the declaration of a template, return all levels of template
3030    parameters that apply.  The template parameters are represented as
3031    a TREE_VEC, in the form documented in cp-tree.h for template
3032    arguments.  */
3033
3034 static tree
3035 current_template_args (void)
3036 {
3037   tree header;
3038   tree args = NULL_TREE;
3039   int length = TMPL_PARMS_DEPTH (current_template_parms);
3040   int l = length;
3041
3042   /* If there is only one level of template parameters, we do not
3043      create a TREE_VEC of TREE_VECs.  Instead, we return a single
3044      TREE_VEC containing the arguments.  */
3045   if (length > 1)
3046     args = make_tree_vec (length);
3047
3048   for (header = current_template_parms; header; header = TREE_CHAIN (header))
3049     {
3050       tree a = copy_node (TREE_VALUE (header));
3051       int i;
3052
3053       TREE_TYPE (a) = NULL_TREE;
3054       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
3055         {
3056           tree t = TREE_VEC_ELT (a, i);
3057
3058           /* T will be a list if we are called from within a
3059              begin/end_template_parm_list pair, but a vector directly
3060              if within a begin/end_member_template_processing pair.  */
3061           if (TREE_CODE (t) == TREE_LIST)
3062             {
3063               t = TREE_VALUE (t);
3064
3065               if (t != error_mark_node)
3066                 {
3067                   if (TREE_CODE (t) == TYPE_DECL
3068                       || TREE_CODE (t) == TEMPLATE_DECL)
3069                     {
3070                       t = TREE_TYPE (t);
3071                       
3072                       if (TEMPLATE_TYPE_PARAMETER_PACK (t))
3073                         {
3074                           /* Turn this argument into a TYPE_ARGUMENT_PACK
3075                              with a single element, which expands T.  */
3076                           tree vec = make_tree_vec (1);
3077                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3078                           
3079                           t = make_node (TYPE_ARGUMENT_PACK);
3080                           SET_ARGUMENT_PACK_ARGS (t, vec);
3081                         }
3082                     }
3083                   else
3084                     {
3085                       t = DECL_INITIAL (t);
3086                       
3087                       if (TEMPLATE_PARM_PARAMETER_PACK (t))
3088                         {
3089                           /* Turn this argument into a NONTYPE_ARGUMENT_PACK
3090                              with a single element, which expands T.  */
3091                           tree vec = make_tree_vec (1);
3092                           tree type = TREE_TYPE (TEMPLATE_PARM_DECL (t));
3093                           TREE_VEC_ELT (vec, 0) = make_pack_expansion (t);
3094                           
3095                           t  = make_node (NONTYPE_ARGUMENT_PACK);
3096                           SET_ARGUMENT_PACK_ARGS (t, vec);
3097                           TREE_TYPE (t) = type;
3098                         }
3099                     }
3100                 }
3101               TREE_VEC_ELT (a, i) = t;
3102             }
3103         }
3104
3105       if (length > 1)
3106         TREE_VEC_ELT (args, --l) = a;
3107       else
3108         args = a;
3109     }
3110
3111   return args;
3112 }
3113
3114 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
3115    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
3116    a member template.  Used by push_template_decl below.  */
3117
3118 static tree
3119 build_template_decl (tree decl, tree parms, bool member_template_p)
3120 {
3121   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
3122   DECL_TEMPLATE_PARMS (tmpl) = parms;
3123   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
3124   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
3125   if (DECL_LANG_SPECIFIC (decl))
3126     {
3127       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
3128       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
3129       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
3130       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
3131       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
3132       if (DECL_OVERLOADED_OPERATOR_P (decl))
3133         SET_OVERLOADED_OPERATOR_CODE (tmpl,
3134                                       DECL_OVERLOADED_OPERATOR_P (decl));
3135     }
3136
3137   return tmpl;
3138 }
3139
3140 struct template_parm_data
3141 {
3142   /* The level of the template parameters we are currently
3143      processing.  */
3144   int level;
3145
3146   /* The index of the specialization argument we are currently
3147      processing.  */
3148   int current_arg;
3149
3150   /* An array whose size is the number of template parameters.  The
3151      elements are nonzero if the parameter has been used in any one
3152      of the arguments processed so far.  */
3153   int* parms;
3154
3155   /* An array whose size is the number of template arguments.  The
3156      elements are nonzero if the argument makes use of template
3157      parameters of this level.  */
3158   int* arg_uses_template_parms;
3159 };
3160
3161 /* Subroutine of push_template_decl used to see if each template
3162    parameter in a partial specialization is used in the explicit
3163    argument list.  If T is of the LEVEL given in DATA (which is
3164    treated as a template_parm_data*), then DATA->PARMS is marked
3165    appropriately.  */
3166
3167 static int
3168 mark_template_parm (tree t, void* data)
3169 {
3170   int level;
3171   int idx;
3172   struct template_parm_data* tpd = (struct template_parm_data*) data;
3173
3174   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3175     {
3176       level = TEMPLATE_PARM_LEVEL (t);
3177       idx = TEMPLATE_PARM_IDX (t);
3178     }
3179   else
3180     {
3181       level = TEMPLATE_TYPE_LEVEL (t);
3182       idx = TEMPLATE_TYPE_IDX (t);
3183     }
3184
3185   if (level == tpd->level)
3186     {
3187       tpd->parms[idx] = 1;
3188       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
3189     }
3190
3191   /* Return zero so that for_each_template_parm will continue the
3192      traversal of the tree; we want to mark *every* template parm.  */
3193   return 0;
3194 }
3195
3196 /* Process the partial specialization DECL.  */
3197
3198 static tree
3199 process_partial_specialization (tree decl)
3200 {
3201   tree type = TREE_TYPE (decl);
3202   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
3203   tree specargs = CLASSTYPE_TI_ARGS (type);
3204   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
3205   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3206   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
3207   int nargs = TREE_VEC_LENGTH (inner_args);
3208   int ntparms = TREE_VEC_LENGTH (inner_parms);
3209   int  i;
3210   int did_error_intro = 0;
3211   struct template_parm_data tpd;
3212   struct template_parm_data tpd2;
3213
3214   /* We check that each of the template parameters given in the
3215      partial specialization is used in the argument list to the
3216      specialization.  For example:
3217
3218        template <class T> struct S;
3219        template <class T> struct S<T*>;
3220
3221      The second declaration is OK because `T*' uses the template
3222      parameter T, whereas
3223
3224        template <class T> struct S<int>;
3225
3226      is no good.  Even trickier is:
3227
3228        template <class T>
3229        struct S1
3230        {
3231           template <class U>
3232           struct S2;
3233           template <class U>
3234           struct S2<T>;
3235        };
3236
3237      The S2<T> declaration is actually invalid; it is a
3238      full-specialization.  Of course,
3239
3240           template <class U>
3241           struct S2<T (*)(U)>;
3242
3243      or some such would have been OK.  */
3244   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
3245   tpd.parms = (int *) alloca (sizeof (int) * ntparms);
3246   memset (tpd.parms, 0, sizeof (int) * ntparms);
3247
3248   tpd.arg_uses_template_parms = (int *) alloca (sizeof (int) * nargs);
3249   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
3250   for (i = 0; i < nargs; ++i)
3251     {
3252       tpd.current_arg = i;
3253       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
3254                               &mark_template_parm,
3255                               &tpd,
3256                               NULL);
3257     }
3258   for (i = 0; i < ntparms; ++i)
3259     if (tpd.parms[i] == 0)
3260       {
3261         /* One of the template parms was not used in the
3262            specialization.  */
3263         if (!did_error_intro)
3264           {
3265             error ("template parameters not used in partial specialization:");
3266             did_error_intro = 1;
3267           }
3268
3269         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
3270       }
3271
3272   /* [temp.class.spec]
3273
3274      The argument list of the specialization shall not be identical to
3275      the implicit argument list of the primary template.  */
3276   if (comp_template_args
3277       (inner_args,
3278        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
3279                                                    (maintmpl)))))
3280     error ("partial specialization %qT does not specialize any template arguments", type);
3281
3282   /* [temp.class.spec]
3283
3284      A partially specialized non-type argument expression shall not
3285      involve template parameters of the partial specialization except
3286      when the argument expression is a simple identifier.
3287
3288      The type of a template parameter corresponding to a specialized
3289      non-type argument shall not be dependent on a parameter of the
3290      specialization. 
3291
3292      Also, we verify that pack expansions only occur at the
3293      end of the argument list.  */
3294   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
3295   tpd2.parms = 0;
3296   for (i = 0; i < nargs; ++i)
3297     {
3298       tree parm = TREE_VALUE (TREE_VEC_ELT (main_inner_parms, i));
3299       tree arg = TREE_VEC_ELT (inner_args, i);
3300       tree packed_args = NULL_TREE;
3301       int j, len = 1;
3302
3303       if (ARGUMENT_PACK_P (arg))
3304         {
3305           /* Extract the arguments from the argument pack. We'll be
3306              iterating over these in the following loop.  */
3307           packed_args = ARGUMENT_PACK_ARGS (arg);
3308           len = TREE_VEC_LENGTH (packed_args);
3309         }
3310
3311       for (j = 0; j < len; j++)
3312         {
3313           if (packed_args)
3314             /* Get the Jth argument in the parameter pack.  */
3315             arg = TREE_VEC_ELT (packed_args, j);
3316
3317           if (PACK_EXPANSION_P (arg))
3318             {
3319               /* Pack expansions must come at the end of the
3320                  argument list.  */
3321               if ((packed_args && j < len - 1)
3322                   || (!packed_args && i < nargs - 1))
3323                 {
3324                   if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3325                     error ("parameter pack argument %qE must be at the end of the template argument list", arg);
3326                   else
3327                     error ("parameter pack argument %qT must be at the end of the template argument list", arg);                   
3328                 }
3329             }
3330
3331           if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
3332             /* We only care about the pattern.  */
3333             arg = PACK_EXPANSION_PATTERN (arg);
3334
3335           if (/* These first two lines are the `non-type' bit.  */
3336               !TYPE_P (arg)
3337               && TREE_CODE (arg) != TEMPLATE_DECL
3338               /* This next line is the `argument expression is not just a
3339                  simple identifier' condition and also the `specialized
3340                  non-type argument' bit.  */
3341               && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
3342             {
3343               if ((!packed_args && tpd.arg_uses_template_parms[i])
3344                   || (packed_args && uses_template_parms (arg)))
3345                 error ("template argument %qE involves template parameter(s)",
3346                        arg);
3347               else 
3348                 {
3349                   /* Look at the corresponding template parameter,
3350                      marking which template parameters its type depends
3351                      upon.  */
3352                   tree type = TREE_TYPE (parm);
3353
3354                   if (!tpd2.parms)
3355                     {
3356                       /* We haven't yet initialized TPD2.  Do so now.  */
3357                       tpd2.arg_uses_template_parms 
3358                         = (int *) alloca (sizeof (int) * nargs);
3359                       /* The number of parameters here is the number in the
3360                          main template, which, as checked in the assertion
3361                          above, is NARGS.  */
3362                       tpd2.parms = (int *) alloca (sizeof (int) * nargs);
3363                       tpd2.level = 
3364                         TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
3365                     }
3366
3367                   /* Mark the template parameters.  But this time, we're
3368                      looking for the template parameters of the main
3369                      template, not in the specialization.  */
3370                   tpd2.current_arg = i;
3371                   tpd2.arg_uses_template_parms[i] = 0;
3372                   memset (tpd2.parms, 0, sizeof (int) * nargs);
3373                   for_each_template_parm (type,
3374                                           &mark_template_parm,
3375                                           &tpd2,
3376                                           NULL);
3377
3378                   if (tpd2.arg_uses_template_parms [i])
3379                     {
3380                       /* The type depended on some template parameters.
3381                          If they are fully specialized in the
3382                          specialization, that's OK.  */
3383                       int j;
3384                       for (j = 0; j < nargs; ++j)
3385                         if (tpd2.parms[j] != 0
3386                             && tpd.arg_uses_template_parms [j])
3387                           {
3388                             error ("type %qT of template argument %qE depends "
3389                                    "on template parameter(s)", 
3390                                    type,
3391                                    arg);
3392                             break;
3393                           }
3394                     }
3395                 }
3396             }
3397         }
3398     }
3399
3400   if (retrieve_specialization (maintmpl, specargs,
3401                                /*class_specializations_p=*/true))
3402     /* We've already got this specialization.  */
3403     return decl;
3404
3405   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
3406     = tree_cons (specargs, inner_parms,
3407                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
3408   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
3409   return decl;
3410 }
3411
3412 /* Check that a template declaration's use of default arguments is not
3413    invalid.  Here, PARMS are the template parameters.  IS_PRIMARY is
3414    nonzero if DECL is the thing declared by a primary template.
3415    IS_PARTIAL is nonzero if DECL is a partial specialization.
3416    
3417
3418    IS_FRIEND_DECL is nonzero if DECL is a friend function template
3419    declaration (but not a definition); 1 indicates a declaration, 2
3420    indicates a redeclaration. When IS_FRIEND_DECL=2, no errors are
3421    emitted for extraneous default arguments.
3422
3423    Returns TRUE if there were no errors found, FALSE otherwise. */
3424
3425 bool
3426 check_default_tmpl_args (tree decl, tree parms, int is_primary, 
3427                          int is_partial, int is_friend_decl)
3428 {
3429   const char *msg;
3430   int last_level_to_check;
3431   tree parm_level;
3432   bool no_errors = true;
3433
3434   /* [temp.param]
3435
3436      A default template-argument shall not be specified in a
3437      function template declaration or a function template definition, nor
3438      in the template-parameter-list of the definition of a member of a
3439      class template.  */
3440
3441   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
3442     /* You can't have a function template declaration in a local
3443        scope, nor you can you define a member of a class template in a
3444        local scope.  */
3445     return true;
3446
3447   if (current_class_type
3448       && !TYPE_BEING_DEFINED (current_class_type)
3449       && DECL_LANG_SPECIFIC (decl)
3450       /* If this is either a friend defined in the scope of the class
3451          or a member function.  */
3452       && (DECL_FUNCTION_MEMBER_P (decl)
3453           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
3454           : DECL_FRIEND_CONTEXT (decl)
3455           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
3456           : false)
3457       /* And, if it was a member function, it really was defined in
3458          the scope of the class.  */
3459       && (!DECL_FUNCTION_MEMBER_P (decl)
3460           || DECL_INITIALIZED_IN_CLASS_P (decl)))
3461     /* We already checked these parameters when the template was
3462        declared, so there's no need to do it again now.  This function
3463        was defined in class scope, but we're processing it's body now
3464        that the class is complete.  */
3465     return true;
3466
3467   /* Core issue 226 (C++0x only): the following only applies to class
3468      templates.  */
3469   if ((cxx_dialect == cxx98) || TREE_CODE (decl) != FUNCTION_DECL)
3470     {
3471       /* [temp.param]
3472
3473          If a template-parameter has a default template-argument, all
3474          subsequent template-parameters shall have a default
3475          template-argument supplied.  */
3476       for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
3477         {
3478           tree inner_parms = TREE_VALUE (parm_level);
3479           int ntparms = TREE_VEC_LENGTH (inner_parms);
3480           int seen_def_arg_p = 0;
3481           int i;
3482
3483           for (i = 0; i < ntparms; ++i)
3484             {
3485               tree parm = TREE_VEC_ELT (inner_parms, i);
3486
3487               if (parm == error_mark_node)
3488                 continue;
3489
3490               if (TREE_PURPOSE (parm))
3491                 seen_def_arg_p = 1;
3492               else if (seen_def_arg_p)
3493                 {
3494                   error ("no default argument for %qD", TREE_VALUE (parm));
3495                   /* For better subsequent error-recovery, we indicate that
3496                      there should have been a default argument.  */
3497                   TREE_PURPOSE (parm) = error_mark_node;
3498                   no_errors = false;
3499                 }
3500             }
3501         }
3502     }
3503
3504   if (((cxx_dialect == cxx98) && TREE_CODE (decl) != TYPE_DECL)
3505       || is_partial 
3506       || !is_primary
3507       || is_friend_decl)
3508     /* For an ordinary class template, default template arguments are
3509        allowed at the innermost level, e.g.:
3510          template <class T = int>
3511          struct S {};
3512        but, in a partial specialization, they're not allowed even
3513        there, as we have in [temp.class.spec]:
3514
3515          The template parameter list of a specialization shall not
3516          contain default template argument values.
3517
3518        So, for a partial specialization, or for a function template
3519        (in C++98/C++03), we look at all of them.  */
3520     ;
3521   else
3522     /* But, for a primary class template that is not a partial
3523        specialization we look at all template parameters except the
3524        innermost ones.  */
3525     parms = TREE_CHAIN (parms);
3526
3527   /* Figure out what error message to issue.  */
3528   if (is_friend_decl == 2)
3529     msg = "default template arguments may not be used in function template friend re-declaration";
3530   else if (is_friend_decl)
3531     msg = "default template arguments may not be used in function template friend declarations";
3532   else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
3533     msg = "default template arguments may not be used in function templates";
3534   else if (is_partial)
3535     msg = "default template arguments may not be used in partial specializations";
3536   else
3537     msg = "default argument for template parameter for class enclosing %qD";
3538
3539   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
3540     /* If we're inside a class definition, there's no need to
3541        examine the parameters to the class itself.  On the one
3542        hand, they will be checked when the class is defined, and,
3543        on the other, default arguments are valid in things like:
3544          template <class T = double>
3545          struct S { template <class U> void f(U); };
3546        Here the default argument for `S' has no bearing on the
3547        declaration of `f'.  */
3548     last_level_to_check = template_class_depth (current_class_type) + 1;
3549   else
3550     /* Check everything.  */
3551     last_level_to_check = 0;
3552
3553   for (parm_level = parms;
3554        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check;
3555        parm_level = TREE_CHAIN (parm_level))
3556     {
3557       tree inner_parms = TREE_VALUE (parm_level);
3558       int i;
3559       int ntparms;
3560
3561       ntparms = TREE_VEC_LENGTH (inner_parms);
3562       for (i = 0; i < ntparms; ++i)
3563         {
3564           if (TREE_VEC_ELT (inner_parms, i) == error_mark_node)
3565             continue;
3566
3567           if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
3568             {
3569               if (msg)
3570                 {
3571                   no_errors = false;
3572                   if (is_friend_decl == 2)
3573                     return no_errors;
3574
3575                   error (msg, decl);
3576                   msg = 0;
3577                 }
3578
3579               /* Clear out the default argument so that we are not
3580                  confused later.  */
3581               TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
3582             }
3583         }
3584
3585       /* At this point, if we're still interested in issuing messages,
3586          they must apply to classes surrounding the object declared.  */
3587       if (msg)
3588         msg = "default argument for template parameter for class enclosing %qD";
3589     }
3590
3591   return no_errors;
3592 }
3593
3594 /* Worker for push_template_decl_real, called via
3595    for_each_template_parm.  DATA is really an int, indicating the
3596    level of the parameters we are interested in.  If T is a template
3597    parameter of that level, return nonzero.  */
3598
3599 static int
3600 template_parm_this_level_p (tree t, void* data)
3601 {
3602   int this_level = *(int *)data;
3603   int level;
3604
3605   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
3606     level = TEMPLATE_PARM_LEVEL (t);
3607   else
3608     level = TEMPLATE_TYPE_LEVEL (t);
3609   return level == this_level;
3610 }
3611
3612 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
3613    parameters given by current_template_args, or reuses a
3614    previously existing one, if appropriate.  Returns the DECL, or an
3615    equivalent one, if it is replaced via a call to duplicate_decls.
3616
3617    If IS_FRIEND is true, DECL is a friend declaration.  */
3618
3619 tree
3620 push_template_decl_real (tree decl, bool is_friend)
3621 {
3622   tree tmpl;
3623   tree args;
3624   tree info;
3625   tree ctx;
3626   int primary;
3627   int is_partial;
3628   int new_template_p = 0;
3629   /* True if the template is a member template, in the sense of
3630      [temp.mem].  */
3631   bool member_template_p = false;
3632
3633   if (decl == error_mark_node)
3634     return decl;
3635
3636   /* See if this is a partial specialization.  */
3637   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
3638                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3639                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
3640
3641   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl))
3642     is_friend = true;
3643
3644   if (is_friend)
3645     /* For a friend, we want the context of the friend function, not
3646        the type of which it is a friend.  */
3647     ctx = DECL_CONTEXT (decl);
3648   else if (CP_DECL_CONTEXT (decl)
3649            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
3650     /* In the case of a virtual function, we want the class in which
3651        it is defined.  */
3652     ctx = CP_DECL_CONTEXT (decl);
3653   else
3654     /* Otherwise, if we're currently defining some class, the DECL
3655        is assumed to be a member of the class.  */
3656     ctx = current_scope ();
3657
3658   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
3659     ctx = NULL_TREE;
3660
3661   if (!DECL_CONTEXT (decl))
3662     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
3663
3664   /* See if this is a primary template.  */
3665   if (is_friend && ctx)
3666     /* A friend template that specifies a class context, i.e.
3667          template <typename T> friend void A<T>::f();
3668        is not primary.  */
3669     primary = 0;
3670   else
3671     primary = template_parm_scope_p ();
3672
3673   if (primary)
3674     {
3675       if (DECL_CLASS_SCOPE_P (decl))
3676         member_template_p = true;
3677       if (TREE_CODE (decl) == TYPE_DECL
3678           && ANON_AGGRNAME_P (DECL_NAME (decl)))
3679         error ("template class without a name");
3680       else if (TREE_CODE (decl) == FUNCTION_DECL)
3681         {
3682           if (DECL_DESTRUCTOR_P (decl))
3683             {
3684               /* [temp.mem]
3685
3686                  A destructor shall not be a member template.  */
3687               error ("destructor %qD declared as member template", decl);
3688               return error_mark_node;
3689             }
3690           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
3691               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
3692                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
3693                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
3694                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
3695                       == void_list_node)))
3696             {
3697               /* [basic.stc.dynamic.allocation]
3698
3699                  An allocation function can be a function
3700                  template. ... Template allocation functions shall
3701                  have two or more parameters.  */
3702               error ("invalid template declaration of %qD", decl);
3703               return error_mark_node;
3704             }
3705         }
3706       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3707                && CLASS_TYPE_P (TREE_TYPE (decl)))
3708         /* OK */;
3709       else
3710         {
3711           error ("template declaration of %q#D", decl);
3712           return error_mark_node;
3713         }
3714     }
3715
3716   /* Check to see that the rules regarding the use of default
3717      arguments are not being violated.  */
3718   check_default_tmpl_args (decl, current_template_parms,
3719                            primary, is_partial, /*is_friend_decl=*/0);
3720
3721   /* Ensure that there are no parameter packs in the type of this
3722      declaration that have not been expanded.  */
3723   if (TREE_CODE (decl) == FUNCTION_DECL)
3724     {
3725       /* Check each of the arguments individually to see if there are
3726          any bare parameter packs.  */
3727       tree type = TREE_TYPE (decl);
3728       tree arg = DECL_ARGUMENTS (decl);
3729       tree argtype = TYPE_ARG_TYPES (type);
3730
3731       while (arg && argtype)
3732         {
3733           if (!FUNCTION_PARAMETER_PACK_P (arg)
3734               && !check_for_bare_parameter_packs (TREE_TYPE (arg)))
3735             {
3736             /* This is a PARM_DECL that contains unexpanded parameter
3737                packs. We have already complained about this in the
3738                check_for_bare_parameter_packs call, so just replace
3739                these types with ERROR_MARK_NODE.  */
3740               TREE_TYPE (arg) = error_mark_node;
3741               TREE_VALUE (argtype) = error_mark_node;
3742             }
3743
3744           arg = TREE_CHAIN (arg);
3745           argtype = TREE_CHAIN (argtype);
3746         }
3747
3748       /* Check for bare parameter packs in the return type and the
3749          exception specifiers.  */
3750       check_for_bare_parameter_packs (TREE_TYPE (type));
3751       check_for_bare_parameter_packs (TYPE_RAISES_EXCEPTIONS (type));
3752     }
3753   else
3754     check_for_bare_parameter_packs (TREE_TYPE (decl));
3755
3756   if (is_partial)
3757     return process_partial_specialization (decl);
3758
3759   /* A primary class template can only have one parameter pack, at the
3760      end of the template parameter list.  */
3761   if (primary && TREE_CODE (decl) == TYPE_DECL)
3762     {
3763       tree inner_parms 
3764         = INNERMOST_TEMPLATE_PARMS (current_template_parms);
3765       int i, len = TREE_VEC_LENGTH (inner_parms);
3766       for (i = 0; i < len - 1; i++)
3767         {
3768           tree parm = TREE_VALUE (TREE_VEC_ELT (inner_parms, i));
3769
3770           if (template_parameter_pack_p (parm))
3771             {
3772               if (TREE_CODE (parm) == PARM_DECL)
3773                 error ("parameter pack %qE must be at the end of the"
3774                        " template parameter list", parm);
3775               else
3776                 error ("parameter pack %qT must be at the end of the"
3777                        " template parameter list", TREE_TYPE (parm));
3778             }
3779         }
3780     }
3781
3782   args = current_template_args ();
3783
3784   if (!ctx
3785       || TREE_CODE (ctx) == FUNCTION_DECL
3786       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3787       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3788     {
3789       if (DECL_LANG_SPECIFIC (decl)
3790           && DECL_TEMPLATE_INFO (decl)
3791           && DECL_TI_TEMPLATE (decl))
3792         tmpl = DECL_TI_TEMPLATE (decl);
3793       /* If DECL is a TYPE_DECL for a class-template, then there won't
3794          be DECL_LANG_SPECIFIC.  The information equivalent to
3795          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3796       else if (DECL_IMPLICIT_TYPEDEF_P (decl)
3797                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3798                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3799         {
3800           /* Since a template declaration already existed for this
3801              class-type, we must be redeclaring it here.  Make sure
3802              that the redeclaration is valid.  */
3803           redeclare_class_template (TREE_TYPE (decl),
3804                                     current_template_parms);
3805           /* We don't need to create a new TEMPLATE_DECL; just use the
3806              one we already had.  */
3807           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3808         }
3809       else
3810         {
3811           tmpl = build_template_decl (decl, current_template_parms,
3812                                       member_template_p);
3813           new_template_p = 1;
3814
3815           if (DECL_LANG_SPECIFIC (decl)
3816               && DECL_TEMPLATE_SPECIALIZATION (decl))
3817             {
3818               /* A specialization of a member template of a template
3819                  class.  */
3820               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3821               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3822               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3823             }
3824         }
3825     }
3826   else
3827     {
3828       tree a, t, current, parms;
3829       int i;
3830
3831       if (TREE_CODE (decl) == TYPE_DECL)
3832         {
3833           if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3834                || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3835               && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3836               && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3837             tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3838           else
3839             {
3840               error ("%qD does not declare a template type", decl);
3841               return decl;
3842             }
3843         }
3844       else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3845         {
3846           error ("template definition of non-template %q#D", decl);
3847           return decl;
3848         }
3849       else
3850         tmpl = DECL_TI_TEMPLATE (decl);
3851
3852       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3853           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl)
3854           && DECL_TEMPLATE_SPECIALIZATION (decl)
3855           && DECL_MEMBER_TEMPLATE_P (tmpl))
3856         {
3857           tree new_tmpl;
3858
3859           /* The declaration is a specialization of a member
3860              template, declared outside the class.  Therefore, the
3861              innermost template arguments will be NULL, so we
3862              replace them with the arguments determined by the
3863              earlier call to check_explicit_specialization.  */
3864           args = DECL_TI_ARGS (decl);
3865
3866           new_tmpl
3867             = build_template_decl (decl, current_template_parms,
3868                                    member_template_p);
3869           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3870           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3871           DECL_TI_TEMPLATE (decl) = new_tmpl;
3872           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3873           DECL_TEMPLATE_INFO (new_tmpl)
3874             = tree_cons (tmpl, args, NULL_TREE);
3875
3876           register_specialization (new_tmpl,
3877                                    most_general_template (tmpl),
3878                                    args,
3879                                    is_friend);
3880           return decl;
3881         }
3882
3883       /* Make sure the template headers we got make sense.  */
3884
3885       parms = DECL_TEMPLATE_PARMS (tmpl);
3886       i = TMPL_PARMS_DEPTH (parms);
3887       if (TMPL_ARGS_DEPTH (args) != i)
3888         {
3889           error ("expected %d levels of template parms for %q#D, got %d",
3890                  i, decl, TMPL_ARGS_DEPTH (args));
3891         }
3892       else
3893         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3894           {
3895             a = TMPL_ARGS_LEVEL (args, i);
3896             t = INNERMOST_TEMPLATE_PARMS (parms);
3897
3898             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3899               {
3900                 if (current == decl)
3901                   error ("got %d template parameters for %q#D",
3902                          TREE_VEC_LENGTH (a), decl);
3903                 else
3904                   error ("got %d template parameters for %q#T",
3905                          TREE_VEC_LENGTH (a), current);
3906                 error ("  but %d required", TREE_VEC_LENGTH (t));
3907                 return error_mark_node;
3908               }
3909
3910             /* Perhaps we should also check that the parms are used in the
3911                appropriate qualifying scopes in the declarator?  */
3912
3913             if (current == decl)
3914               current = ctx;
3915             else
3916               current = (TYPE_P (current)
3917                          ? TYPE_CONTEXT (current)
3918                          : DECL_CONTEXT (current));
3919           }
3920     }
3921
3922   DECL_TEMPLATE_RESULT (tmpl) = decl;
3923   TREE_TYPE (tmpl) = TREE_TYPE (decl);
3924
3925   /* Push template declarations for global functions and types.  Note
3926      that we do not try to push a global template friend declared in a
3927      template class; such a thing may well depend on the template
3928      parameters of the class.  */
3929   if (new_template_p && !ctx
3930       && !(is_friend && template_class_depth (current_class_type) > 0))
3931     {
3932       tmpl = pushdecl_namespace_level (tmpl, is_friend);
3933       if (tmpl == error_mark_node)
3934         return error_mark_node;
3935
3936       /* Hide template friend classes that haven't been declared yet.  */
3937       if (is_friend && TREE_CODE (decl) == TYPE_DECL)
3938         {
3939           DECL_ANTICIPATED (tmpl) = 1;
3940           DECL_FRIEND_P (tmpl) = 1;
3941         }
3942     }
3943
3944   if (primary)
3945     {
3946       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3947       if (DECL_CONV_FN_P (tmpl))
3948         {
3949           int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3950
3951           /* It is a conversion operator. See if the type converted to
3952              depends on innermost template operands.  */
3953
3954           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3955                                          depth))
3956             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3957         }
3958     }
3959
3960   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3961      back to its most general template.  If TMPL is a specialization,
3962      ARGS may only have the innermost set of arguments.  Add the missing
3963      argument levels if necessary.  */
3964   if (DECL_TEMPLATE_INFO (tmpl))
3965     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3966
3967   info = tree_cons (tmpl, args, NULL_TREE);
3968
3969   if (DECL_IMPLICIT_TYPEDEF_P (decl))
3970     SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3971   else if (DECL_LANG_SPECIFIC (decl))
3972     DECL_TEMPLATE_INFO (decl) = info;
3973
3974   return DECL_TEMPLATE_RESULT (tmpl);
3975 }
3976
3977 tree
3978 push_template_decl (tree decl)
3979 {
3980   return push_template_decl_real (decl, false);
3981 }
3982
3983 /* Called when a class template TYPE is redeclared with the indicated
3984    template PARMS, e.g.:
3985
3986      template <class T> struct S;
3987      template <class T> struct S {};  */
3988
3989 bool
3990 redeclare_class_template (tree type, tree parms)
3991 {
3992   tree tmpl;
3993   tree tmpl_parms;
3994   int i;
3995
3996   if (!TYPE_TEMPLATE_INFO (type))
3997     {
3998       error ("%qT is not a template type", type);
3999       return false;
4000     }
4001
4002   tmpl = TYPE_TI_TEMPLATE (type);
4003   if (!PRIMARY_TEMPLATE_P (tmpl))
4004     /* The type is nested in some template class.  Nothing to worry
4005        about here; there are no new template parameters for the nested
4006        type.  */
4007     return true;
4008
4009   if (!parms)
4010     {
4011       error ("template specifiers not specified in declaration of %qD",
4012              tmpl);
4013       return false;
4014     }
4015
4016   parms = INNERMOST_TEMPLATE_PARMS (parms);
4017   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
4018
4019   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
4020     {
4021       error ("previous declaration %q+D", tmpl);
4022       error ("used %d template parameter(s) instead of %d",
4023              TREE_VEC_LENGTH (tmpl_parms),
4024              TREE_VEC_LENGTH (parms));
4025       return false;
4026     }
4027
4028   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
4029     {
4030       tree tmpl_parm;
4031       tree parm;
4032       tree tmpl_default;
4033       tree parm_default;
4034
4035       if (TREE_VEC_ELT (tmpl_parms, i) == error_mark_node
4036           || TREE_VEC_ELT (parms, i) == error_mark_node)
4037         continue;
4038
4039       tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
4040       parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4041       tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
4042       parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
4043
4044       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
4045          TEMPLATE_DECL.  */
4046       if (tmpl_parm != error_mark_node
4047            && (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
4048            || (TREE_CODE (tmpl_parm) != TYPE_DECL
4049                && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm)))))
4050         {
4051           error ("template parameter %q+#D", tmpl_parm);
4052           error ("redeclared here as %q#D", parm);
4053           return false;
4054         }
4055
4056       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
4057         {
4058           /* We have in [temp.param]:
4059
4060              A template-parameter may not be given default arguments
4061              by two different declarations in the same scope.  */
4062           error ("redefinition of default argument for %q#D", parm);
4063           error ("%J  original definition appeared here", tmpl_parm);
4064           return false;
4065         }
4066
4067       if (parm_default != NULL_TREE)
4068         /* Update the previous template parameters (which are the ones
4069            that will really count) with the new default value.  */
4070         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
4071       else if (tmpl_default != NULL_TREE)
4072         /* Update the new parameters, too; they'll be used as the
4073            parameters for any members.  */
4074         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
4075     }
4076
4077     return true;
4078 }
4079
4080 /* Simplify EXPR if it is a non-dependent expression.  Returns the
4081    (possibly simplified) expression.  */
4082
4083 tree
4084 fold_non_dependent_expr (tree expr)
4085 {
4086   if (expr == NULL_TREE)
4087     return NULL_TREE;
4088
4089   /* If we're in a template, but EXPR isn't value dependent, simplify
4090      it.  We're supposed to treat:
4091
4092        template <typename T> void f(T[1 + 1]);
4093        template <typename T> void f(T[2]);
4094
4095      as two declarations of the same function, for example.  */
4096   if (processing_template_decl
4097       && !type_dependent_expression_p (expr)
4098       && !value_dependent_expression_p (expr))
4099     {
4100       HOST_WIDE_INT saved_processing_template_decl;
4101
4102       saved_processing_template_decl = processing_template_decl;
4103       processing_template_decl = 0;
4104       expr = tsubst_copy_and_build (expr,
4105                                     /*args=*/NULL_TREE,
4106                                     tf_error,
4107                                     /*in_decl=*/NULL_TREE,
4108                                     /*function_p=*/false,
4109                                     /*integral_constant_expression_p=*/true);
4110       processing_template_decl = saved_processing_template_decl;
4111     }
4112   return expr;
4113 }
4114
4115 /* EXPR is an expression which is used in a constant-expression context.
4116    For instance, it could be a VAR_DECL with a constant initializer.
4117    Extract the innest constant expression.
4118
4119    This is basically a more powerful version of
4120    integral_constant_value, which can be used also in templates where
4121    initializers can maintain a syntactic rather than semantic form
4122    (even if they are non-dependent, for access-checking purposes).  */
4123
4124 static tree
4125 fold_decl_constant_value (tree expr)
4126 {
4127   tree const_expr = expr;
4128   do
4129     {
4130       expr = fold_non_dependent_expr (const_expr);
4131       const_expr = integral_constant_value (expr);
4132     }
4133   while (expr != const_expr);
4134
4135   return expr;
4136 }
4137
4138 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
4139    must be a function or a pointer-to-function type, as specified
4140    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
4141    and check that the resulting function has external linkage.  */
4142
4143 static tree
4144 convert_nontype_argument_function (tree type, tree expr)
4145 {
4146   tree fns = expr;
4147   tree fn, fn_no_ptr;
4148
4149   fn = instantiate_type (type, fns, tf_none);
4150   if (fn == error_mark_node)
4151     return error_mark_node;
4152
4153   fn_no_ptr = fn;
4154   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
4155     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
4156   if (TREE_CODE (fn_no_ptr) == BASELINK)
4157     fn_no_ptr = BASELINK_FUNCTIONS (fn_no_ptr);
4158  
4159   /* [temp.arg.nontype]/1
4160
4161      A template-argument for a non-type, non-template template-parameter
4162      shall be one of:
4163      [...]
4164      -- the address of an object or function with external linkage.  */
4165   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
4166     {
4167       error ("%qE is not a valid template argument for type %qT "
4168              "because function %qD has not external linkage",
4169              expr, type, fn_no_ptr);
4170       return NULL_TREE;
4171     }
4172
4173   return fn;
4174 }
4175
4176 /* Attempt to convert the non-type template parameter EXPR to the
4177    indicated TYPE.  If the conversion is successful, return the
4178    converted value.  If the conversion is unsuccessful, return
4179    NULL_TREE if we issued an error message, or error_mark_node if we
4180    did not.  We issue error messages for out-and-out bad template
4181    parameters, but not simply because the conversion failed, since we
4182    might be just trying to do argument deduction.  Both TYPE and EXPR
4183    must be non-dependent.
4184
4185    The conversion follows the special rules described in
4186    [temp.arg.nontype], and it is much more strict than an implicit
4187    conversion.
4188
4189    This function is called twice for each template argument (see
4190    lookup_template_class for a more accurate description of this
4191    problem). This means that we need to handle expressions which
4192    are not valid in a C++ source, but can be created from the
4193    first call (for instance, casts to perform conversions). These
4194    hacks can go away after we fix the double coercion problem.  */
4195
4196 static tree
4197 convert_nontype_argument (tree type, tree expr)
4198 {
4199   tree expr_type;
4200
4201   /* Detect immediately string literals as invalid non-type argument.
4202      This special-case is not needed for correctness (we would easily
4203      catch this later), but only to provide better diagnostic for this
4204      common user mistake. As suggested by DR 100, we do not mention
4205      linkage issues in the diagnostic as this is not the point.  */
4206   if (TREE_CODE (expr) == STRING_CST)
4207     {
4208       error ("%qE is not a valid template argument for type %qT "
4209              "because string literals can never be used in this context",
4210              expr, type);
4211       return NULL_TREE;
4212     }
4213
4214   /* If we are in a template, EXPR may be non-dependent, but still
4215      have a syntactic, rather than semantic, form.  For example, EXPR
4216      might be a SCOPE_REF, rather than the VAR_DECL to which the
4217      SCOPE_REF refers.  Preserving the qualifying scope is necessary
4218      so that access checking can be performed when the template is
4219      instantiated -- but here we need the resolved form so that we can
4220      convert the argument.  */
4221   expr = fold_non_dependent_expr (expr);
4222   if (error_operand_p (expr))
4223     return error_mark_node;
4224   expr_type = TREE_TYPE (expr);
4225
4226   /* HACK: Due to double coercion, we can get a
4227      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
4228      which is the tree that we built on the first call (see
4229      below when coercing to reference to object or to reference to
4230      function). We just strip everything and get to the arg.
4231      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
4232      for examples.  */
4233   if (TREE_CODE (expr) == NOP_EXPR)
4234     {
4235       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
4236         {
4237           /* ??? Maybe we could use convert_from_reference here, but we
4238              would need to relax its constraints because the NOP_EXPR
4239              could actually change the type to something more cv-qualified,
4240              and this is not folded by convert_from_reference.  */
4241           tree addr = TREE_OPERAND (expr, 0);
4242           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
4243           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
4244           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
4245           gcc_assert (same_type_ignoring_top_level_qualifiers_p
4246                       (TREE_TYPE (expr_type),
4247                        TREE_TYPE (TREE_TYPE (addr))));
4248
4249           expr = TREE_OPERAND (addr, 0);
4250           expr_type = TREE_TYPE (expr);
4251         }
4252
4253       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
4254          parameter is a pointer to object, through decay and
4255          qualification conversion. Let's strip everything.  */
4256       else if (TYPE_PTROBV_P (type))
4257         {
4258           STRIP_NOPS (expr);
4259           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
4260           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
4261           /* Skip the ADDR_EXPR only if it is part of the decay for
4262              an array. Otherwise, it is part of the original argument
4263              in the source code.  */
4264           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
4265             expr = TREE_OPERAND (expr, 0);
4266           expr_type = TREE_TYPE (expr);
4267         }
4268     }
4269
4270   /* [temp.arg.nontype]/5, bullet 1
4271
4272      For a non-type template-parameter of integral or enumeration type,
4273      integral promotions (_conv.prom_) and integral conversions
4274      (_conv.integral_) are applied.  */
4275   if (INTEGRAL_TYPE_P (type))
4276     {
4277       if (!INTEGRAL_TYPE_P (expr_type))
4278         return error_mark_node;
4279
4280       expr = fold_decl_constant_value (expr);
4281       /* Notice that there are constant expressions like '4 % 0' which
4282          do not fold into integer constants.  */
4283       if (TREE_CODE (expr) != INTEGER_CST)
4284         {
4285           error ("%qE is not a valid template argument for type %qT "
4286                  "because it is a non-constant expression", expr, type);
4287           return NULL_TREE;
4288         }
4289
4290       /* At this point, an implicit conversion does what we want,
4291          because we already know that the expression is of integral
4292          type.  */
4293       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
4294       if (expr == error_mark_node)
4295         return error_mark_node;
4296
4297       /* Conversion was allowed: fold it to a bare integer constant.  */
4298       expr = fold (expr);
4299     }
4300   /* [temp.arg.nontype]/5, bullet 2
4301
4302      For a non-type template-parameter of type pointer to object,
4303      qualification conversions (_conv.qual_) and the array-to-pointer
4304      conversion (_conv.array_) are applied.  */
4305   else if (TYPE_PTROBV_P (type))
4306     {
4307       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
4308
4309          A template-argument for a non-type, non-template template-parameter
4310          shall be one of: [...]
4311
4312          -- the name of a non-type template-parameter;
4313          -- the address of an object or function with external linkage, [...]
4314             expressed as "& id-expression" where the & is optional if the name
4315             refers to a function or array, or if the corresponding
4316             template-parameter is a reference.
4317
4318         Here, we do not care about functions, as they are invalid anyway
4319         for a parameter of type pointer-to-object.  */
4320
4321       if (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr))
4322         /* Non-type template parameters are OK.  */
4323         ;
4324       else if (TREE_CODE (expr) != ADDR_EXPR
4325                && TREE_CODE (expr_type) != ARRAY_TYPE)
4326         {
4327           if (TREE_CODE (expr) == VAR_DECL)
4328             {
4329               error ("%qD is not a valid template argument "
4330                      "because %qD is a variable, not the address of "
4331                      "a variable",
4332                      expr, expr);
4333               return NULL_TREE;
4334             }
4335           /* Other values, like integer constants, might be valid
4336              non-type arguments of some other type.  */
4337           return error_mark_node;
4338         }
4339       else
4340         {
4341           tree decl;
4342
4343           decl = ((TREE_CODE (expr) == ADDR_EXPR)
4344                   ? TREE_OPERAND (expr, 0) : expr);
4345           if (TREE_CODE (decl) != VAR_DECL)
4346             {
4347               error ("%qE is not a valid template argument of type %qT "
4348                      "because %qE is not a variable",
4349                      expr, type, decl);
4350               return NULL_TREE;
4351             }
4352           else if (!DECL_EXTERNAL_LINKAGE_P (decl))
4353             {
4354               error ("%qE is not a valid template argument of type %qT "
4355                      "because %qD does not have external linkage",
4356                      expr, type, decl);
4357               return NULL_TREE;
4358             }
4359         }
4360
4361       expr = decay_conversion (expr);
4362       if (expr == error_mark_node)
4363         return error_mark_node;
4364
4365       expr = perform_qualification_conversions (type, expr);
4366       if (expr == error_mark_node)
4367         return error_mark_node;
4368     }
4369   /* [temp.arg.nontype]/5, bullet 3
4370
4371      For a non-type template-parameter of type reference to object, no
4372      conversions apply. The type referred to by the reference may be more
4373      cv-qualified than the (otherwise identical) type of the
4374      template-argument. The template-parameter is bound directly to the
4375      template-argument, which must be an lvalue.  */
4376   else if (TYPE_REF_OBJ_P (type))
4377     {
4378       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
4379                                                       expr_type))
4380         return error_mark_node;
4381
4382       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
4383         {
4384           error ("%qE is not a valid template argument for type %qT "
4385                  "because of conflicts in cv-qualification", expr, type);
4386           return NULL_TREE;
4387         }
4388
4389       if (!real_lvalue_p (expr))
4390         {
4391           error ("%qE is not a valid template argument for type %qT "
4392                  "because it is not an lvalue", expr, type);
4393           return NULL_TREE;
4394         }
4395
4396       /* [temp.arg.nontype]/1
4397
4398          A template-argument for a non-type, non-template template-parameter
4399          shall be one of: [...]
4400
4401          -- the address of an object or function with external linkage.  */
4402       if (!DECL_EXTERNAL_LINKAGE_P (expr))
4403         {
4404           error ("%qE is not a valid template argument for type %qT "
4405                  "because object %qD has not external linkage",
4406                  expr, type, expr);
4407           return NULL_TREE;
4408         }
4409
4410       expr = build_nop (type, build_address (expr));
4411     }
4412   /* [temp.arg.nontype]/5, bullet 4
4413
4414      For a non-type template-parameter of type pointer to function, only
4415      the function-to-pointer conversion (_conv.func_) is applied. If the
4416      template-argument represents a set of overloaded functions (or a
4417      pointer to such), the matching function is selected from the set
4418      (_over.over_).  */
4419   else if (TYPE_PTRFN_P (type))
4420     {
4421       /* If the argument is a template-id, we might not have enough
4422          context information to decay the pointer.  */
4423       if (!type_unknown_p (expr_type))
4424         {
4425           expr = decay_conversion (expr);
4426           if (expr == error_mark_node)
4427             return error_mark_node;
4428         }
4429
4430       expr = convert_nontype_argument_function (type, expr);
4431       if (!expr || expr == error_mark_node)
4432         return expr;
4433     }
4434   /* [temp.arg.nontype]/5, bullet 5
4435
4436      For a non-type template-parameter of type reference to function, no
4437      conversions apply. If the template-argument represents a set of
4438      overloaded functions, the matching function is selected from the set
4439      (_over.over_).  */
4440   else if (TYPE_REFFN_P (type))
4441     {
4442       if (TREE_CODE (expr) == ADDR_EXPR)
4443         {
4444           error ("%qE is not a valid template argument for type %qT "
4445                  "because it is a pointer", expr, type);
4446           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
4447           return NULL_TREE;
4448         }
4449
4450       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
4451       if (!expr || expr == error_mark_node)
4452         return expr;
4453
4454       expr = build_nop (type, build_address (expr));
4455     }
4456   /* [temp.arg.nontype]/5, bullet 6
4457
4458      For a non-type template-parameter of type pointer to member function,
4459      no conversions apply. If the template-argument represents a set of
4460      overloaded member functions, the matching member function is selected
4461      from the set (_over.over_).  */
4462   else if (TYPE_PTRMEMFUNC_P (type))
4463     {
4464       expr = instantiate_type (type, expr, tf_none);
4465       if (expr == error_mark_node)
4466         return error_mark_node;
4467
4468       /* There is no way to disable standard conversions in
4469          resolve_address_of_overloaded_function (called by
4470          instantiate_type). It is possible that the call succeeded by
4471          converting &B::I to &D::I (where B is a base of D), so we need
4472          to reject this conversion here.
4473
4474          Actually, even if there was a way to disable standard conversions,
4475          it would still be better to reject them here so that we can
4476          provide a superior diagnostic.  */
4477       if (!same_type_p (TREE_TYPE (expr), type))
4478         {
4479           /* Make sure we are just one standard conversion off.  */
4480           gcc_assert (can_convert (type, TREE_TYPE (expr)));
4481           error ("%qE is not a valid template argument for type %qT "
4482                  "because it is of type %qT", expr, type,
4483                  TREE_TYPE (expr));
4484           inform ("standard conversions are not allowed in this context");
4485           return NULL_TREE;
4486         }
4487     }
4488   /* [temp.arg.nontype]/5, bullet 7
4489
4490      For a non-type template-parameter of type pointer to data member,
4491      qualification conversions (_conv.qual_) are applied.  */
4492   else if (TYPE_PTRMEM_P (type))
4493     {
4494       expr = perform_qualification_conversions (type, expr);
4495       if (expr == error_mark_node)
4496         return expr;
4497     }
4498   /* A template non-type parameter must be one of the above.  */
4499   else
4500     gcc_unreachable ();
4501
4502   /* Sanity check: did we actually convert the argument to the
4503      right type?  */
4504   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
4505   return expr;
4506 }
4507
4508
4509 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for
4510    template template parameters.  Both PARM_PARMS and ARG_PARMS are
4511    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL
4512    or PARM_DECL.
4513
4514    Consider the example:
4515      template <class T> class A;
4516      template<template <class U> class TT> class B;
4517
4518    For B<A>, PARM_PARMS are the parameters to TT, while ARG_PARMS are
4519    the parameters to A, and OUTER_ARGS contains A.  */
4520
4521 static int
4522 coerce_template_template_parms (tree parm_parms,
4523                                 tree arg_parms,
4524                                 tsubst_flags_t complain,
4525                                 tree in_decl,
4526                                 tree outer_args)
4527 {
4528   int nparms, nargs, i;
4529   tree parm, arg;
4530
4531   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
4532   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
4533
4534   nparms = TREE_VEC_LENGTH (parm_parms);
4535   nargs = TREE_VEC_LENGTH (arg_parms);
4536
4537   if (nargs != nparms)
4538     return 0;
4539
4540   for (i = 0; i < nparms; ++i)
4541     {
4542       if (TREE_VEC_ELT (parm_parms, i) == error_mark_node
4543           || TREE_VEC_ELT (arg_parms, i) == error_mark_node)
4544         continue;
4545
4546       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
4547       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
4548
4549       if (arg == NULL_TREE || arg == error_mark_node
4550           || parm == NULL_TREE || parm == error_mark_node)
4551         return 0;
4552
4553       if (TREE_CODE (arg) != TREE_CODE (parm))
4554         return 0;
4555
4556       switch (TREE_CODE (parm))
4557         {
4558         case TEMPLATE_DECL:
4559           /* We encounter instantiations of templates like
4560                template <template <template <class> class> class TT>
4561                class C;  */
4562           {
4563             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4564             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
4565
4566             if (!coerce_template_template_parms
4567                 (parmparm, argparm, complain, in_decl, outer_args))
4568               return 0;
4569           }
4570           /* Fall through.  */
4571
4572         case TYPE_DECL:
4573           if (TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (parm))
4574               != TEMPLATE_TYPE_PARAMETER_PACK (TREE_TYPE (arg)))
4575             /* One is a parameter pack, the other is not.  */
4576             return 0;
4577           break;
4578
4579         case PARM_DECL:
4580           /* The tsubst call is used to handle cases such as
4581
4582                template <int> class C {};
4583                template <class T, template <T> class TT> class D {};
4584                D<int, C> d;
4585
4586              i.e. the parameter list of TT depends on earlier parameters.  */
4587           if (!dependent_type_p (TREE_TYPE (arg))
4588               && !same_type_p
4589                     (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
4590                              TREE_TYPE (arg)))
4591             return 0;
4592
4593           if (TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
4594               != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (arg)))
4595             /* One is a parameter pack, the other is not.  */
4596             return 0;
4597           break;
4598
4599         default:
4600           gcc_unreachable ();
4601         }
4602     }
4603   return 1;
4604 }
4605
4606 /* Convert the indicated template ARG as necessary to match the
4607    indicated template PARM.  Returns the converted ARG, or
4608    error_mark_node if the conversion was unsuccessful.  Error and
4609    warning messages are issued under control of COMPLAIN.  This
4610    conversion is for the Ith parameter in the parameter list.  ARGS is
4611    the full set of template arguments deduced so far.  */
4612
4613 static tree
4614 convert_template_argument (tree parm,
4615                            tree arg,
4616                            tree args,
4617                            tsubst_flags_t complain,
4618                            int i,
4619                            tree in_decl)
4620 {
4621   tree val;
4622   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
4623   tree check_arg = arg;
4624
4625   if (TREE_CODE (arg) == TREE_LIST
4626       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
4627     {
4628       /* The template argument was the name of some
4629          member function.  That's usually
4630          invalid, but static members are OK.  In any
4631          case, grab the underlying fields/functions
4632          and issue an error later if required.  */
4633       arg = TREE_VALUE (arg);
4634       TREE_TYPE (arg) = unknown_type_node;
4635     }
4636
4637   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
4638   requires_type = (TREE_CODE (parm) == TYPE_DECL
4639                    || requires_tmpl_type);
4640
4641   /* When determining whether an argument pack expansion is a template,
4642      look at the pattern.  */
4643   if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4644     check_arg = PACK_EXPANSION_PATTERN (check_arg);
4645
4646   is_tmpl_type = 
4647     ((TREE_CODE (check_arg) == TEMPLATE_DECL
4648       && TREE_CODE (DECL_TEMPLATE_RESULT (check_arg)) == TYPE_DECL)
4649      || TREE_CODE (check_arg) == TEMPLATE_TEMPLATE_PARM
4650      || TREE_CODE (check_arg) == UNBOUND_CLASS_TEMPLATE);
4651
4652   if (is_tmpl_type
4653       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
4654           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
4655     arg = TYPE_STUB_DECL (arg);
4656
4657   is_type = TYPE_P (arg) || is_tmpl_type;
4658
4659   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
4660       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
4661     {
4662       pedwarn ("to refer to a type member of a template parameter, "
4663                "use %<typename %E%>", arg);
4664
4665       arg = make_typename_type (TREE_OPERAND (arg, 0),
4666                                 TREE_OPERAND (arg, 1),
4667                                 typename_type,
4668                                 complain & tf_error);
4669       is_type = 1;
4670     }
4671   if (is_type != requires_type)
4672     {
4673       if (in_decl)
4674         {
4675           if (complain & tf_error)
4676             {
4677               error ("type/value mismatch at argument %d in template "
4678                      "parameter list for %qD",
4679                      i + 1, in_decl);
4680               if (is_type)
4681                 error ("  expected a constant of type %qT, got %qT",
4682                        TREE_TYPE (parm),
4683                        (is_tmpl_type ? DECL_NAME (arg) : arg));
4684               else if (requires_tmpl_type)
4685                 error ("  expected a class template, got %qE", arg);
4686               else
4687                 error ("  expected a type, got %qE", arg);
4688             }
4689         }
4690       return error_mark_node;
4691     }
4692   if (is_tmpl_type ^ requires_tmpl_type)
4693     {
4694       if (in_decl && (complain & tf_error))
4695         {
4696           error ("type/value mismatch at argument %d in template "
4697                  "parameter list for %qD",
4698                  i + 1, in_decl);
4699           if (is_tmpl_type)
4700             error ("  expected a type, got %qT", DECL_NAME (arg));
4701           else
4702             error ("  expected a class template, got %qT", arg);
4703         }
4704       return error_mark_node;
4705     }
4706
4707   if (is_type)
4708     {
4709       if (requires_tmpl_type)
4710         {
4711           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
4712             /* The number of argument required is not known yet.
4713                Just accept it for now.  */
4714             val = TREE_TYPE (arg);
4715           else
4716             {
4717               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
4718               tree argparm;
4719
4720               check_arg = arg;
4721               /* When determining whether a pack expansion is a template,
4722                  look at the pattern.  */
4723               if (TREE_CODE (check_arg) == TYPE_PACK_EXPANSION)
4724                 check_arg = PACK_EXPANSION_PATTERN (check_arg);
4725
4726               argparm = DECL_INNERMOST_TEMPLATE_PARMS (check_arg);
4727
4728               if (coerce_template_template_parms (parmparm, argparm,
4729                                                   complain, in_decl,
4730                                                   args))
4731                 {
4732                   val = arg;
4733
4734                   /* TEMPLATE_TEMPLATE_PARM node is preferred over
4735                      TEMPLATE_DECL.  */
4736                   if (val != error_mark_node)
4737                     {
4738                       if (DECL_TEMPLATE_TEMPLATE_PARM_P (val))
4739                         val = TREE_TYPE (val);
4740                       else if (TREE_CODE (val) == TYPE_PACK_EXPANSION
4741                                && DECL_TEMPLATE_TEMPLATE_PARM_P (check_arg))
4742                         {
4743                           val = TREE_TYPE (check_arg);
4744                           val = make_pack_expansion (val);
4745                         }
4746                     }
4747                 }
4748               else
4749                 {
4750                   if (in_decl && (complain & tf_error))
4751                     {
4752                       error ("type/value mismatch at argument %d in "
4753                              "template parameter list for %qD",
4754                              i + 1, in_decl);
4755                       error ("  expected a template of type %qD, got %qD",
4756                              parm, arg);
4757                     }
4758
4759                   val = error_mark_node;
4760                 }
4761             }
4762         }
4763       else
4764         val = arg;
4765       /* We only form one instance of each template specialization.
4766          Therefore, if we use a non-canonical variant (i.e., a
4767          typedef), any future messages referring to the type will use
4768          the typedef, which is confusing if those future uses do not
4769          themselves also use the typedef.  */
4770       if (TYPE_P (val))
4771         val = canonical_type_variant (val);
4772     }
4773   else
4774     {
4775       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
4776
4777       if (invalid_nontype_parm_type_p (t, complain))
4778         return error_mark_node;
4779
4780       if (!uses_template_parms (arg) && !uses_template_parms (t))
4781         /* We used to call digest_init here.  However, digest_init
4782            will report errors, which we don't want when complain
4783            is zero.  More importantly, digest_init will try too
4784            hard to convert things: for example, `0' should not be
4785            converted to pointer type at this point according to
4786            the standard.  Accepting this is not merely an
4787            extension, since deciding whether or not these
4788            conversions can occur is part of determining which
4789            function template to call, or whether a given explicit
4790            argument specification is valid.  */
4791         val = convert_nontype_argument (t, arg);
4792       else
4793         val = arg;
4794
4795       if (val == NULL_TREE)
4796         val = error_mark_node;
4797       else if (val == error_mark_node && (complain & tf_error))
4798         error ("could not convert template argument %qE to %qT",  arg, t);
4799     }
4800
4801   return val;
4802 }
4803
4804 /* Coerces the remaining template arguments in INNER_ARGS (from
4805    ARG_IDX to the end) into the parameter pack at PARM_IDX in PARMS.
4806    Returns the coerced argument pack. PARM_IDX is the position of this
4807    parameter in the template parameter list. ARGS is the original
4808    template argument list.  */
4809 static tree
4810 coerce_template_parameter_pack (tree parms,
4811                                 int parm_idx,
4812                                 tree args,
4813                                 tree inner_args,
4814                                 int arg_idx,
4815                                 tree new_args,
4816                                 int* lost,
4817                                 tree in_decl,
4818                                 tsubst_flags_t complain)
4819 {
4820   tree parm = TREE_VEC_ELT (parms, parm_idx);
4821   int nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4822   tree packed_args;
4823   tree argument_pack;
4824   tree packed_types = NULL_TREE;
4825
4826   if (arg_idx > nargs)
4827     arg_idx = nargs;
4828
4829   packed_args = make_tree_vec (nargs - arg_idx);
4830
4831   if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL
4832       && uses_parameter_packs (TREE_TYPE (TREE_VALUE (parm))))
4833     {
4834       /* When the template parameter is a non-type template
4835          parameter pack whose type uses parameter packs, we need
4836          to look at each of the template arguments
4837          separately. Build a vector of the types for these
4838          non-type template parameters in PACKED_TYPES.  */
4839       tree expansion 
4840         = make_pack_expansion (TREE_TYPE (TREE_VALUE (parm)));
4841       packed_types = tsubst_pack_expansion (expansion, args,
4842                                             complain, in_decl);
4843
4844       if (packed_types == error_mark_node)
4845         return error_mark_node;
4846
4847       /* Check that we have the right number of arguments.  */
4848       if (arg_idx < nargs
4849           && !PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx))
4850           && nargs - arg_idx != TREE_VEC_LENGTH (packed_types))
4851         {
4852           int needed_parms 
4853             = TREE_VEC_LENGTH (parms) - 1 + TREE_VEC_LENGTH (packed_types);
4854           error ("wrong number of template arguments (%d, should be %d)",
4855                  nargs, needed_parms);
4856           return error_mark_node;
4857         }
4858
4859       /* If we aren't able to check the actual arguments now
4860          (because they haven't been expanded yet), we can at least
4861          verify that all of the types used for the non-type
4862          template parameter pack are, in fact, valid for non-type
4863          template parameters.  */
4864       if (arg_idx < nargs 
4865           && PACK_EXPANSION_P (TREE_VEC_ELT (inner_args, arg_idx)))
4866         {
4867           int j, len = TREE_VEC_LENGTH (packed_types);
4868           for (j = 0; j < len; ++j)
4869             {
4870               tree t = TREE_VEC_ELT (packed_types, j);
4871               if (invalid_nontype_parm_type_p (t, complain))
4872                 return error_mark_node;
4873             }
4874         }
4875     }
4876
4877   /* Convert the remaining arguments, which will be a part of the
4878      parameter pack "parm".  */
4879   for (; arg_idx < nargs; ++arg_idx)
4880     {
4881       tree arg = TREE_VEC_ELT (inner_args, arg_idx);
4882       tree actual_parm = TREE_VALUE (parm);
4883
4884       if (packed_types && !PACK_EXPANSION_P (arg))
4885         {
4886           /* When we have a vector of types (corresponding to the
4887              non-type template parameter pack that uses parameter
4888              packs in its type, as mention above), and the
4889              argument is not an expansion (which expands to a
4890              currently unknown number of arguments), clone the
4891              parm and give it the next type in PACKED_TYPES.  */
4892           actual_parm = copy_node (actual_parm);
4893           TREE_TYPE (actual_parm) = 
4894             TREE_VEC_ELT (packed_types, arg_idx - parm_idx);
4895         }
4896
4897       arg = convert_template_argument (actual_parm, 
4898                                        arg, new_args, complain, parm_idx,
4899                                        in_decl);
4900       if (arg == error_mark_node)
4901         (*lost)++;
4902       TREE_VEC_ELT (packed_args, arg_idx - parm_idx) = arg; 
4903     }
4904
4905   if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL
4906       || TREE_CODE (TREE_VALUE (parm)) == TEMPLATE_DECL)
4907     argument_pack = make_node (TYPE_ARGUMENT_PACK);
4908   else
4909     {
4910       argument_pack = make_node (NONTYPE_ARGUMENT_PACK);
4911       TREE_TYPE (argument_pack) = TREE_TYPE (TREE_VALUE (parm));
4912       TREE_CONSTANT (argument_pack) = 1;
4913     }
4914
4915   SET_ARGUMENT_PACK_ARGS (argument_pack, packed_args);
4916   return argument_pack;
4917 }
4918
4919 /* Convert all template arguments to their appropriate types, and
4920    return a vector containing the innermost resulting template
4921    arguments.  If any error occurs, return error_mark_node. Error and
4922    warning messages are issued under control of COMPLAIN.
4923
4924    If REQUIRE_ALL_ARGS is false, argument deduction will be performed
4925    for arguments not specified in ARGS.  Otherwise, if
4926    USE_DEFAULT_ARGS is true, default arguments will be used to fill in
4927    unspecified arguments.  If REQUIRE_ALL_ARGS is true, but
4928    USE_DEFAULT_ARGS is false, then all arguments must be specified in
4929    ARGS.  */
4930
4931 static tree
4932 coerce_template_parms (tree parms,
4933                        tree args,
4934                        tree in_decl,
4935                        tsubst_flags_t complain,
4936                        bool require_all_args,
4937                        bool use_default_args)
4938 {
4939   int nparms, nargs, parm_idx, arg_idx, lost = 0;
4940   tree inner_args;
4941   tree new_args;
4942   tree new_inner_args;
4943   bool saved_skip_evaluation;
4944
4945   /* When used as a boolean value, indicates whether this is a
4946      variadic template parameter list. Since it's an int, we can also
4947      subtract it from nparms to get the number of non-variadic
4948      parameters.  */
4949   int variadic_p = 0;
4950
4951   inner_args 
4952     = expand_template_argument_pack (INNERMOST_TEMPLATE_ARGS (args));
4953
4954   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
4955   nparms = TREE_VEC_LENGTH (parms);
4956
4957   /* Determine if there are any parameter packs.  */
4958   for (parm_idx = 0; parm_idx < nparms; ++parm_idx)
4959     {
4960       tree tparm = TREE_VALUE (TREE_VEC_ELT (parms, parm_idx));
4961       if (template_parameter_pack_p (tparm))
4962         {
4963           variadic_p = 1;
4964           break;
4965         }
4966     }
4967
4968   if ((nargs > nparms - variadic_p && !variadic_p)
4969       || (nargs < nparms - variadic_p
4970           && require_all_args
4971           && (!use_default_args
4972               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
4973                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
4974     {
4975       if (complain & tf_error)
4976         {
4977           const char *or_more = "";
4978           if (variadic_p)
4979             {
4980               or_more = " or more";
4981               --nparms;
4982             }
4983
4984           error ("wrong number of template arguments (%d, should be %d%s)",
4985                  nargs, nparms, or_more);
4986
4987           if (in_decl)
4988             error ("provided for %q+D", in_decl);
4989         }
4990
4991       return error_mark_node;
4992     }
4993
4994   /* We need to evaluate the template arguments, even though this
4995      template-id may be nested within a "sizeof".  */
4996   saved_skip_evaluation = skip_evaluation;
4997   skip_evaluation = false;
4998   new_inner_args = make_tree_vec (nparms);
4999   new_args = add_outermost_template_args (args, new_inner_args);
5000   for (parm_idx = 0, arg_idx = 0; parm_idx < nparms; parm_idx++, arg_idx++)
5001     {
5002       tree arg;
5003       tree parm;
5004
5005       /* Get the Ith template parameter.  */
5006       parm = TREE_VEC_ELT (parms, parm_idx);
5007  
5008       if (parm == error_mark_node)
5009       {
5010         TREE_VEC_ELT (new_inner_args, arg_idx) = error_mark_node;
5011         continue;
5012       }
5013
5014       /* Calculate the next argument.  */
5015       if (template_parameter_pack_p (TREE_VALUE (parm)))
5016         {
5017           /* All remaining arguments will be placed in the
5018              template parameter pack PARM.  */
5019           arg = coerce_template_parameter_pack (parms, parm_idx, args, 
5020                                                 inner_args, arg_idx,
5021                                                 new_args, &lost,
5022                                                 in_decl, complain);
5023           
5024           /* Store this argument.  */
5025           if (arg == error_mark_node)
5026             lost++;
5027           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
5028
5029           /* We are done with all of the arguments.  */
5030           arg_idx = nargs;
5031
5032           continue;
5033         }
5034       else if (arg_idx < nargs)
5035         {
5036           arg = TREE_VEC_ELT (inner_args, arg_idx);
5037
5038           if (arg && PACK_EXPANSION_P (arg))
5039             {
5040               /* If ARG is a pack expansion, but PARM is not a
5041                  template parameter pack (if it were, we would have
5042                  handled it above), we're trying to expand into a
5043                  fixed-length argument list.  */
5044               if (TREE_CODE (arg) == EXPR_PACK_EXPANSION)
5045                 error ("cannot expand %<%E%> into a fixed-length "
5046                        "argument list", arg);
5047               else
5048                 error ("cannot expand %<%T%> into a fixed-length "
5049                        "argument list", arg);
5050             }
5051         }
5052       else if (require_all_args)
5053         /* There must be a default arg in this case.  */
5054         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
5055                                    complain, in_decl);
5056       else
5057         break;
5058
5059       if (arg == error_mark_node)
5060         {
5061           if (complain & tf_error)
5062             error ("template argument %d is invalid", arg_idx + 1);
5063         }
5064       else if (!arg)
5065         /* This only occurs if there was an error in the template
5066            parameter list itself (which we would already have
5067            reported) that we are trying to recover from, e.g., a class
5068            template with a parameter list such as
5069            template<typename..., typename>.  */
5070         return error_mark_node;
5071       else
5072         arg = convert_template_argument (TREE_VALUE (parm),
5073                                          arg, new_args, complain, 
5074                                          parm_idx, in_decl);
5075
5076       if (arg == error_mark_node)
5077         lost++;
5078       TREE_VEC_ELT (new_inner_args, arg_idx) = arg;
5079     }
5080   skip_evaluation = saved_skip_evaluation;
5081
5082   if (lost)
5083     return error_mark_node;
5084
5085   return new_inner_args;
5086 }
5087
5088 /* Returns 1 if template args OT and NT are equivalent.  */
5089
5090 static int
5091 template_args_equal (tree ot, tree nt)
5092 {
5093   if (nt == ot)
5094     return 1;
5095
5096   if (TREE_CODE (nt) == TREE_VEC)
5097     /* For member templates */
5098     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
5099   else if (PACK_EXPANSION_P (ot))
5100     return PACK_EXPANSION_P (nt) 
5101       && template_args_equal (PACK_EXPANSION_PATTERN (ot),
5102                               PACK_EXPANSION_PATTERN (nt));
5103   else if (TYPE_P (nt))
5104     return TYPE_P (ot) && same_type_p (ot, nt);
5105   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
5106     return 0;
5107   else
5108     return cp_tree_equal (ot, nt);
5109 }
5110
5111 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
5112    of template arguments.  Returns 0 otherwise.  */
5113
5114 int
5115 comp_template_args (tree oldargs, tree newargs)
5116 {
5117   int i;
5118
5119   oldargs = expand_template_argument_pack (oldargs);
5120   newargs = expand_template_argument_pack (newargs);
5121
5122   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
5123     return 0;
5124
5125   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
5126     {
5127       tree nt = TREE_VEC_ELT (newargs, i);
5128       tree ot = TREE_VEC_ELT (oldargs, i);
5129
5130       if (! template_args_equal (ot, nt))
5131         return 0;
5132     }
5133   return 1;
5134 }
5135
5136 static void
5137 add_pending_template (tree d)
5138 {
5139   tree ti = (TYPE_P (d)
5140              ? CLASSTYPE_TEMPLATE_INFO (d)
5141              : DECL_TEMPLATE_INFO (d));
5142   tree pt;
5143   int level;
5144
5145   if (TI_PENDING_TEMPLATE_FLAG (ti))
5146     return;
5147
5148   /* We are called both from instantiate_decl, where we've already had a
5149      tinst_level pushed, and instantiate_template, where we haven't.
5150      Compensate.  */
5151   level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
5152
5153   if (level)
5154     push_tinst_level (d);
5155
5156   pt = tree_cons (current_tinst_level, d, NULL_TREE);
5157   if (last_pending_template)
5158     TREE_CHAIN (last_pending_template) = pt;
5159   else
5160     pending_templates = pt;
5161
5162   last_pending_template = pt;
5163
5164   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
5165
5166   if (level)
5167     pop_tinst_level ();
5168 }
5169
5170
5171 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
5172    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
5173    documentation for TEMPLATE_ID_EXPR.  */
5174
5175 tree
5176 lookup_template_function (tree fns, tree arglist)
5177 {
5178   tree type;
5179
5180   if (fns == error_mark_node || arglist == error_mark_node)
5181     return error_mark_node;
5182
5183   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
5184   gcc_assert (fns && (is_overloaded_fn (fns)
5185                       || TREE_CODE (fns) == IDENTIFIER_NODE));
5186
5187   if (BASELINK_P (fns))
5188     {
5189       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
5190                                          unknown_type_node,
5191                                          BASELINK_FUNCTIONS (fns),
5192                                          arglist);
5193       return fns;
5194     }
5195
5196   type = TREE_TYPE (fns);
5197   if (TREE_CODE (fns) == OVERLOAD || !type)
5198     type = unknown_type_node;
5199
5200   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
5201 }
5202
5203 /* Within the scope of a template class S<T>, the name S gets bound
5204    (in build_self_reference) to a TYPE_DECL for the class, not a
5205    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
5206    or one of its enclosing classes, and that type is a template,
5207    return the associated TEMPLATE_DECL.  Otherwise, the original
5208    DECL is returned.  */
5209
5210 tree
5211 maybe_get_template_decl_from_type_decl (tree decl)
5212 {
5213   return (decl != NULL_TREE
5214           && TREE_CODE (decl) == TYPE_DECL
5215           && DECL_ARTIFICIAL (decl)
5216           && CLASS_TYPE_P (TREE_TYPE (decl))
5217           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
5218     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
5219 }
5220
5221 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
5222    parameters, find the desired type.
5223
5224    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
5225
5226    IN_DECL, if non-NULL, is the template declaration we are trying to
5227    instantiate.
5228
5229    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
5230    the class we are looking up.
5231
5232    Issue error and warning messages under control of COMPLAIN.
5233
5234    If the template class is really a local class in a template
5235    function, then the FUNCTION_CONTEXT is the function in which it is
5236    being instantiated.
5237
5238    ??? Note that this function is currently called *twice* for each
5239    template-id: the first time from the parser, while creating the
5240    incomplete type (finish_template_type), and the second type during the
5241    real instantiation (instantiate_template_class). This is surely something
5242    that we want to avoid. It also causes some problems with argument
5243    coercion (see convert_nontype_argument for more information on this).  */
5244
5245 tree
5246 lookup_template_class (tree d1,
5247                        tree arglist,
5248                        tree in_decl,
5249                        tree context,
5250                        int entering_scope,
5251                        tsubst_flags_t complain)
5252 {
5253   tree template = NULL_TREE, parmlist;
5254   tree t;
5255
5256   timevar_push (TV_NAME_LOOKUP);
5257
5258   if (TREE_CODE (d1) == IDENTIFIER_NODE)
5259     {
5260       tree value = innermost_non_namespace_value (d1);
5261       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
5262         template = value;
5263       else
5264         {
5265           if (context)
5266             push_decl_namespace (context);
5267           template = lookup_name (d1);
5268           template = maybe_get_template_decl_from_type_decl (template);
5269           if (context)
5270             pop_decl_namespace ();
5271         }
5272       if (template)
5273         context = DECL_CONTEXT (template);
5274     }
5275   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
5276     {
5277       tree type = TREE_TYPE (d1);
5278
5279       /* If we are declaring a constructor, say A<T>::A<T>, we will get
5280          an implicit typename for the second A.  Deal with it.  */
5281       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
5282         type = TREE_TYPE (type);
5283
5284       if (CLASSTYPE_TEMPLATE_INFO (type))
5285         {
5286           template = CLASSTYPE_TI_TEMPLATE (type);
5287           d1 = DECL_NAME (template);
5288         }
5289     }
5290   else if (TREE_CODE (d1) == ENUMERAL_TYPE
5291            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
5292     {
5293       template = TYPE_TI_TEMPLATE (d1);
5294       d1 = DECL_NAME (template);
5295     }
5296   else if (TREE_CODE (d1) == TEMPLATE_DECL
5297            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
5298     {
5299       template = d1;
5300       d1 = DECL_NAME (template);
5301       context = DECL_CONTEXT (template);
5302     }
5303
5304   /* Issue an error message if we didn't find a template.  */
5305   if (! template)
5306     {
5307       if (complain & tf_error)
5308         error ("%qT is not a template", d1);
5309       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5310     }
5311
5312   if (TREE_CODE (template) != TEMPLATE_DECL
5313          /* Make sure it's a user visible template, if it was named by
5314             the user.  */
5315       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
5316           && !PRIMARY_TEMPLATE_P (template)))
5317     {
5318       if (complain & tf_error)
5319         {
5320           error ("non-template type %qT used as a template", d1);
5321           if (in_decl)
5322             error ("for template declaration %q+D", in_decl);
5323         }
5324       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5325     }
5326
5327   complain &= ~tf_user;
5328
5329   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
5330     {
5331       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
5332          template arguments */
5333
5334       tree parm;
5335       tree arglist2;
5336
5337       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
5338
5339       /* Consider an example where a template template parameter declared as
5340
5341            template <class T, class U = std::allocator<T> > class TT
5342
5343          The template parameter level of T and U are one level larger than
5344          of TT.  To proper process the default argument of U, say when an
5345          instantiation `TT<int>' is seen, we need to build the full
5346          arguments containing {int} as the innermost level.  Outer levels,
5347          available when not appearing as default template argument, can be
5348          obtained from `current_template_args ()'.
5349
5350          Suppose that TT is later substituted with std::vector.  The above
5351          instantiation is `TT<int, std::allocator<T> >' with TT at
5352          level 1, and T at level 2, while the template arguments at level 1
5353          becomes {std::vector} and the inner level 2 is {int}.  */
5354
5355       if (current_template_parms)
5356         arglist = add_to_template_args (current_template_args (), arglist);
5357
5358       arglist2 = coerce_template_parms (parmlist, arglist, template,
5359                                         complain,
5360                                         /*require_all_args=*/true,
5361                                         /*use_default_args=*/true);
5362       if (arglist2 == error_mark_node
5363           || (!uses_template_parms (arglist2)
5364               && check_instantiated_args (template, arglist2, complain)))
5365         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5366
5367       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
5368       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
5369     }
5370   else
5371     {
5372       tree template_type = TREE_TYPE (template);
5373       tree gen_tmpl;
5374       tree type_decl;
5375       tree found = NULL_TREE;
5376       int arg_depth;
5377       int parm_depth;
5378       int is_partial_instantiation;
5379
5380       gen_tmpl = most_general_template (template);
5381       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
5382       parm_depth = TMPL_PARMS_DEPTH (parmlist);
5383       arg_depth = TMPL_ARGS_DEPTH (arglist);
5384
5385       if (arg_depth == 1 && parm_depth > 1)
5386         {
5387           /* We've been given an incomplete set of template arguments.
5388              For example, given:
5389
5390                template <class T> struct S1 {
5391                  template <class U> struct S2 {};
5392                  template <class U> struct S2<U*> {};
5393                 };
5394
5395              we will be called with an ARGLIST of `U*', but the
5396              TEMPLATE will be `template <class T> template
5397              <class U> struct S1<T>::S2'.  We must fill in the missing
5398              arguments.  */
5399           arglist
5400             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
5401                                            arglist);
5402           arg_depth = TMPL_ARGS_DEPTH (arglist);
5403         }
5404
5405       /* Now we should have enough arguments.  */
5406       gcc_assert (parm_depth == arg_depth);
5407
5408       /* From here on, we're only interested in the most general
5409          template.  */
5410       template = gen_tmpl;
5411
5412       /* Calculate the BOUND_ARGS.  These will be the args that are
5413          actually tsubst'd into the definition to create the
5414          instantiation.  */
5415       if (parm_depth > 1)
5416         {
5417           /* We have multiple levels of arguments to coerce, at once.  */
5418           int i;
5419           int saved_depth = TMPL_ARGS_DEPTH (arglist);
5420
5421           tree bound_args = make_tree_vec (parm_depth);
5422
5423           for (i = saved_depth,
5424                  t = DECL_TEMPLATE_PARMS (template);
5425                i > 0 && t != NULL_TREE;
5426                --i, t = TREE_CHAIN (t))
5427             {
5428               tree a = coerce_template_parms (TREE_VALUE (t),
5429                                               arglist, template,
5430                                               complain,
5431                                               /*require_all_args=*/true,
5432                                               /*use_default_args=*/true);
5433
5434               /* Don't process further if one of the levels fails.  */
5435               if (a == error_mark_node)
5436                 {
5437                   /* Restore the ARGLIST to its full size.  */
5438                   TREE_VEC_LENGTH (arglist) = saved_depth;
5439                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5440                 }
5441
5442               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
5443
5444               /* We temporarily reduce the length of the ARGLIST so
5445                  that coerce_template_parms will see only the arguments
5446                  corresponding to the template parameters it is
5447                  examining.  */
5448               TREE_VEC_LENGTH (arglist)--;
5449             }
5450
5451           /* Restore the ARGLIST to its full size.  */
5452           TREE_VEC_LENGTH (arglist) = saved_depth;
5453
5454           arglist = bound_args;
5455         }
5456       else
5457         arglist
5458           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
5459                                    INNERMOST_TEMPLATE_ARGS (arglist),
5460                                    template,
5461                                    complain,
5462                                    /*require_all_args=*/true,
5463                                    /*use_default_args=*/true);
5464
5465       if (arglist == error_mark_node)
5466         /* We were unable to bind the arguments.  */
5467         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5468
5469       /* In the scope of a template class, explicit references to the
5470          template class refer to the type of the template, not any
5471          instantiation of it.  For example, in:
5472
5473            template <class T> class C { void f(C<T>); }
5474
5475          the `C<T>' is just the same as `C'.  Outside of the
5476          class, however, such a reference is an instantiation.  */
5477       if (comp_template_args (TYPE_TI_ARGS (template_type),
5478                               arglist))
5479         {
5480           found = template_type;
5481
5482           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
5483             {
5484               tree ctx;
5485
5486               for (ctx = current_class_type;
5487                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
5488                    ctx = (TYPE_P (ctx)
5489                           ? TYPE_CONTEXT (ctx)
5490                           : DECL_CONTEXT (ctx)))
5491                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
5492                   goto found_ctx;
5493
5494               /* We're not in the scope of the class, so the
5495                  TEMPLATE_TYPE is not the type we want after all.  */
5496               found = NULL_TREE;
5497             found_ctx:;
5498             }
5499         }
5500       if (found)
5501         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5502
5503       /* If we already have this specialization, return it.  */
5504       found = retrieve_specialization (template, arglist,
5505                                        /*class_specializations_p=*/false);
5506       if (found)
5507         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5508
5509       /* This type is a "partial instantiation" if any of the template
5510          arguments still involve template parameters.  Note that we set
5511          IS_PARTIAL_INSTANTIATION for partial specializations as
5512          well.  */
5513       is_partial_instantiation = uses_template_parms (arglist);
5514
5515       /* If the deduced arguments are invalid, then the binding
5516          failed.  */
5517       if (!is_partial_instantiation
5518           && check_instantiated_args (template,
5519                                       INNERMOST_TEMPLATE_ARGS (arglist),
5520                                       complain))
5521         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
5522
5523       if (!is_partial_instantiation
5524           && !PRIMARY_TEMPLATE_P (template)
5525           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
5526         {
5527           found = xref_tag_from_type (TREE_TYPE (template),
5528                                       DECL_NAME (template),
5529                                       /*tag_scope=*/ts_global);
5530           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
5531         }
5532
5533       context = tsubst (DECL_CONTEXT (template), arglist,
5534                         complain, in_decl);
5535       if (!context)
5536         context = global_namespace;
5537
5538       /* Create the type.  */
5539       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
5540         {
5541           if (!is_partial_instantiation)
5542             {
5543               set_current_access_from_decl (TYPE_NAME (template_type));
5544               t = start_enum (TYPE_IDENTIFIER (template_type));
5545             }
5546           else
5547             /* We don't want to call start_enum for this type, since
5548                the values for the enumeration constants may involve
5549                template parameters.  And, no one should be interested
5550                in the enumeration constants for such a type.  */
5551             t = make_node (ENUMERAL_TYPE);
5552         }
5553       else
5554         {
5555           t = make_aggr_type (TREE_CODE (template_type));
5556           CLASSTYPE_DECLARED_CLASS (t)
5557             = CLASSTYPE_DECLARED_CLASS (template_type);
5558           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
5559           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
5560
5561           /* A local class.  Make sure the decl gets registered properly.  */
5562           if (context == current_function_decl)
5563             pushtag (DECL_NAME (template), t, /*tag_scope=*/ts_current);
5564
5565           if (comp_template_args (CLASSTYPE_TI_ARGS (template_type), arglist))
5566             /* This instantiation is another name for the primary
5567                template type. Set the TYPE_CANONICAL field
5568                appropriately. */
5569             TYPE_CANONICAL (t) = template_type;
5570           else if (any_template_arguments_need_structural_equality_p (arglist))
5571             /* Some of the template arguments require structural
5572                equality testing, so this template class requires
5573                structural equality testing. */
5574             SET_TYPE_STRUCTURAL_EQUALITY (t);
5575         }
5576
5577       /* If we called start_enum or pushtag above, this information
5578          will already be set up.  */
5579       if (!TYPE_NAME (t))
5580         {
5581           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
5582
5583           type_decl = create_implicit_typedef (DECL_NAME (template), t);
5584           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
5585           TYPE_STUB_DECL (t) = type_decl;
5586           DECL_SOURCE_LOCATION (type_decl)
5587             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
5588         }
5589       else
5590         type_decl = TYPE_NAME (t);
5591
5592       TREE_PRIVATE (type_decl)
5593         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
5594       TREE_PROTECTED (type_decl)
5595         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
5596       DECL_IN_SYSTEM_HEADER (type_decl)
5597         = DECL_IN_SYSTEM_HEADER (template);
5598       if (CLASSTYPE_VISIBILITY_SPECIFIED (template_type))
5599         {
5600           DECL_VISIBILITY_SPECIFIED (type_decl) = 1;
5601           DECL_VISIBILITY (type_decl) = CLASSTYPE_VISIBILITY (template_type);
5602         }
5603
5604       /* Set up the template information.  We have to figure out which
5605          template is the immediate parent if this is a full
5606          instantiation.  */
5607       if (parm_depth == 1 || is_partial_instantiation
5608           || !PRIMARY_TEMPLATE_P (template))
5609         /* This case is easy; there are no member templates involved.  */
5610         found = template;
5611       else
5612         {
5613           /* This is a full instantiation of a member template.  Look
5614              for a partial instantiation of which this is an instance.  */
5615
5616           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
5617                found; found = TREE_CHAIN (found))
5618             {
5619               int success;
5620               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
5621
5622               /* We only want partial instantiations, here, not
5623                  specializations or full instantiations.  */
5624               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
5625                   || !uses_template_parms (TREE_VALUE (found)))
5626                 continue;
5627
5628               /* Temporarily reduce by one the number of levels in the
5629                  ARGLIST and in FOUND so as to avoid comparing the
5630                  last set of arguments.  */
5631               TREE_VEC_LENGTH (arglist)--;
5632               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
5633
5634               /* See if the arguments match.  If they do, then TMPL is
5635                  the partial instantiation we want.  */
5636               success = comp_template_args (TREE_PURPOSE (found), arglist);
5637
5638               /* Restore the argument vectors to their full size.  */
5639               TREE_VEC_LENGTH (arglist)++;
5640               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
5641
5642               if (success)
5643                 {
5644                   found = tmpl;
5645                   break;
5646                 }
5647             }
5648
5649           if (!found)
5650             {
5651               /* There was no partial instantiation. This happens
5652                  where C<T> is a member template of A<T> and it's used
5653                  in something like
5654
5655                   template <typename T> struct B { A<T>::C<int> m; };
5656                   B<float>;
5657
5658                  Create the partial instantiation.
5659                */
5660               TREE_VEC_LENGTH (arglist)--;
5661               found = tsubst (template, arglist, complain, NULL_TREE);
5662               TREE_VEC_LENGTH (arglist)++;
5663             }
5664         }
5665
5666       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));
5667       DECL_TEMPLATE_INSTANTIATIONS (template)
5668         = tree_cons (arglist, t,
5669                      DECL_TEMPLATE_INSTANTIATIONS (template));
5670
5671       if (TREE_CODE (t) == ENUMERAL_TYPE
5672           && !is_partial_instantiation)
5673         /* Now that the type has been registered on the instantiations
5674            list, we set up the enumerators.  Because the enumeration
5675            constants may involve the enumeration type itself, we make
5676            sure to register the type first, and then create the
5677            constants.  That way, doing tsubst_expr for the enumeration
5678            constants won't result in recursive calls here; we'll find
5679            the instantiation and exit above.  */
5680         tsubst_enum (template_type, t, arglist);
5681
5682       if (is_partial_instantiation)
5683         /* If the type makes use of template parameters, the
5684            code that generates debugging information will crash.  */
5685         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
5686
5687       /* Possibly limit visibility based on template args.  */
5688       TREE_PUBLIC (type_decl) = 1;
5689       determine_visibility (type_decl);
5690
5691       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
5692     }
5693   timevar_pop (TV_NAME_LOOKUP);
5694 }
5695 \f
5696 struct pair_fn_data
5697 {
5698   tree_fn_t fn;
5699   void *data;
5700   struct pointer_set_t *visited;
5701 };
5702
5703 /* Called from for_each_template_parm via walk_tree.  */
5704
5705 static tree
5706 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
5707 {
5708   tree t = *tp;
5709   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
5710   tree_fn_t fn = pfd->fn;
5711   void *data = pfd->data;
5712
5713   if (TYPE_P (t)
5714       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
5715     return error_mark_node;
5716
5717   switch (TREE_CODE (t))
5718     {
5719     case RECORD_TYPE:
5720       if (TYPE_PTRMEMFUNC_P (t))
5721         break;
5722       /* Fall through.  */
5723
5724     case UNION_TYPE:
5725     case ENUMERAL_TYPE:
5726       if (!TYPE_TEMPLATE_INFO (t))
5727         *walk_subtrees = 0;
5728       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
5729                                        fn, data, pfd->visited))
5730         return error_mark_node;
5731       break;
5732
5733     case INTEGER_TYPE:
5734       if (for_each_template_parm (TYPE_MIN_VALUE (t),
5735                                   fn, data, pfd->visited)
5736           || for_each_template_parm (TYPE_MAX_VALUE (t),
5737                                      fn, data, pfd->visited))
5738         return error_mark_node;
5739       break;
5740
5741     case METHOD_TYPE:
5742       /* Since we're not going to walk subtrees, we have to do this
5743          explicitly here.  */
5744       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
5745                                   pfd->visited))
5746         return error_mark_node;
5747       /* Fall through.  */
5748
5749     case FUNCTION_TYPE:
5750       /* Check the return type.  */
5751       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5752         return error_mark_node;
5753
5754       /* Check the parameter types.  Since default arguments are not
5755          instantiated until they are needed, the TYPE_ARG_TYPES may
5756          contain expressions that involve template parameters.  But,
5757          no-one should be looking at them yet.  And, once they're
5758          instantiated, they don't contain template parameters, so
5759          there's no point in looking at them then, either.  */
5760       {
5761         tree parm;
5762
5763         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
5764           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
5765                                       pfd->visited))
5766             return error_mark_node;
5767
5768         /* Since we've already handled the TYPE_ARG_TYPES, we don't
5769            want walk_tree walking into them itself.  */
5770         *walk_subtrees = 0;
5771       }
5772       break;
5773
5774     case TYPEOF_TYPE:
5775       if (for_each_template_parm (TYPE_FIELDS (t), fn, data,
5776                                   pfd->visited))
5777         return error_mark_node;
5778       break;
5779
5780     case FUNCTION_DECL:
5781     case VAR_DECL:
5782       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
5783           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
5784                                      pfd->visited))
5785         return error_mark_node;
5786       /* Fall through.  */
5787
5788     case PARM_DECL:
5789     case CONST_DECL:
5790       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
5791           && for_each_template_parm (DECL_INITIAL (t), fn, data,
5792                                      pfd->visited))
5793         return error_mark_node;
5794       if (DECL_CONTEXT (t)
5795           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
5796                                      pfd->visited))
5797         return error_mark_node;
5798       break;
5799
5800     case BOUND_TEMPLATE_TEMPLATE_PARM:
5801       /* Record template parameters such as `T' inside `TT<T>'.  */
5802       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
5803         return error_mark_node;
5804       /* Fall through.  */
5805
5806     case TEMPLATE_TEMPLATE_PARM:
5807     case TEMPLATE_TYPE_PARM:
5808     case TEMPLATE_PARM_INDEX:
5809       if (fn && (*fn)(t, data))
5810         return error_mark_node;
5811       else if (!fn)
5812         return error_mark_node;
5813       break;
5814
5815     case TEMPLATE_DECL:
5816       /* A template template parameter is encountered.  */
5817       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
5818           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
5819         return error_mark_node;
5820
5821       /* Already substituted template template parameter */
5822       *walk_subtrees = 0;
5823       break;
5824
5825     case TYPENAME_TYPE:
5826       if (!fn
5827           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
5828                                      data, pfd->visited))
5829         return error_mark_node;
5830       break;
5831
5832     case CONSTRUCTOR:
5833       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
5834           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
5835                                      (TREE_TYPE (t)), fn, data,
5836                                      pfd->visited))
5837         return error_mark_node;
5838       break;
5839
5840     case INDIRECT_REF:
5841     case COMPONENT_REF:
5842       /* If there's no type, then this thing must be some expression
5843          involving template parameters.  */
5844       if (!fn && !TREE_TYPE (t))
5845         return error_mark_node;
5846       break;
5847
5848     case MODOP_EXPR:
5849     case CAST_EXPR:
5850     case REINTERPRET_CAST_EXPR:
5851     case CONST_CAST_EXPR:
5852     case STATIC_CAST_EXPR:
5853     case DYNAMIC_CAST_EXPR:
5854     case ARROW_EXPR:
5855     case DOTSTAR_EXPR:
5856     case TYPEID_EXPR:
5857     case PSEUDO_DTOR_EXPR:
5858       if (!fn)
5859         return error_mark_node;
5860       break;
5861
5862     default:
5863       break;
5864     }
5865
5866   /* We didn't find any template parameters we liked.  */
5867   return NULL_TREE;
5868 }
5869
5870 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM,
5871    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T,
5872    call FN with the parameter and the DATA.
5873    If FN returns nonzero, the iteration is terminated, and
5874    for_each_template_parm returns 1.  Otherwise, the iteration
5875    continues.  If FN never returns a nonzero value, the value
5876    returned by for_each_template_parm is 0.  If FN is NULL, it is
5877    considered to be the function which always returns 1.  */
5878
5879 static int
5880 for_each_template_parm (tree t, tree_fn_t fn, void* data,
5881                         struct pointer_set_t *visited)
5882 {
5883   struct pair_fn_data pfd;
5884   int result;
5885
5886   /* Set up.  */
5887   pfd.fn = fn;
5888   pfd.data = data;
5889
5890   /* Walk the tree.  (Conceptually, we would like to walk without
5891      duplicates, but for_each_template_parm_r recursively calls
5892      for_each_template_parm, so we would need to reorganize a fair
5893      bit to use walk_tree_without_duplicates, so we keep our own
5894      visited list.)  */
5895   if (visited)
5896     pfd.visited = visited;
5897   else
5898     pfd.visited = pointer_set_create ();
5899   result = walk_tree (&t,
5900                       for_each_template_parm_r,
5901                       &pfd,
5902                       pfd.visited) != NULL_TREE;
5903
5904   /* Clean up.  */
5905   if (!visited)
5906     {
5907       pointer_set_destroy (pfd.visited);
5908       pfd.visited = 0;
5909     }
5910
5911   return result;
5912 }
5913
5914 /* Returns true if T depends on any template parameter.  */
5915
5916 int
5917 uses_template_parms (tree t)
5918 {
5919   bool dependent_p;
5920   int saved_processing_template_decl;
5921
5922   saved_processing_template_decl = processing_template_decl;
5923   if (!saved_processing_template_decl)
5924     processing_template_decl = 1;
5925   if (TYPE_P (t))
5926     dependent_p = dependent_type_p (t);
5927   else if (TREE_CODE (t) == TREE_VEC)
5928     dependent_p = any_dependent_template_arguments_p (t);
5929   else if (TREE_CODE (t) == TREE_LIST)
5930     dependent_p = (uses_template_parms (TREE_VALUE (t))
5931                    || uses_template_parms (TREE_CHAIN (t)));
5932   else if (TREE_CODE (t) == TYPE_DECL)
5933     dependent_p = dependent_type_p (TREE_TYPE (t));
5934   else if (DECL_P (t)
5935            || EXPR_P (t)
5936            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
5937            || TREE_CODE (t) == OVERLOAD
5938            || TREE_CODE (t) == BASELINK
5939            || TREE_CODE (t) == IDENTIFIER_NODE
5940            || TREE_CODE (t) == TRAIT_EXPR
5941            || CONSTANT_CLASS_P (t))
5942     dependent_p = (type_dependent_expression_p (t)
5943                    || value_dependent_expression_p (t));
5944   else
5945     {
5946       gcc_assert (t == error_mark_node);
5947       dependent_p = false;
5948     }
5949
5950   processing_template_decl = saved_processing_template_decl;
5951
5952   return dependent_p;
5953 }
5954
5955 /* Returns true if T depends on any template parameter with level LEVEL.  */
5956
5957 int
5958 uses_template_parms_level (tree t, int level)
5959 {
5960   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
5961 }
5962
5963 static int tinst_depth;
5964 extern int max_tinst_depth;
5965 #ifdef GATHER_STATISTICS
5966 int depth_reached;
5967 #endif
5968 static int tinst_level_tick;
5969 static int last_template_error_tick;
5970
5971 /* We're starting to instantiate D; record the template instantiation context
5972    for diagnostics and to restore it later.  */
5973
5974 static int
5975 push_tinst_level (tree d)
5976 {
5977   tree new;
5978
5979   if (tinst_depth >= max_tinst_depth)
5980     {
5981       /* If the instantiation in question still has unbound template parms,
5982          we don't really care if we can't instantiate it, so just return.
5983          This happens with base instantiation for implicit `typename'.  */
5984       if (uses_template_parms (d))
5985         return 0;
5986
5987       last_template_error_tick = tinst_level_tick;
5988       error ("template instantiation depth exceeds maximum of %d (use "
5989              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
5990              max_tinst_depth, d);
5991
5992       print_instantiation_context ();
5993
5994       return 0;
5995     }
5996
5997   new = make_node (TINST_LEVEL);
5998   TINST_DECL (new) = d;
5999   TINST_LOCATION (new) = input_location;
6000   TINST_IN_SYSTEM_HEADER_P (new) = in_system_header;
6001   TREE_CHAIN (new) = current_tinst_level;
6002   current_tinst_level = new;
6003
6004   ++tinst_depth;
6005 #ifdef GATHER_STATISTICS
6006   if (tinst_depth > depth_reached)
6007     depth_reached = tinst_depth;
6008 #endif
6009
6010   ++tinst_level_tick;
6011   return 1;
6012 }
6013
6014 /* We're done instantiating this template; return to the instantiation
6015    context.  */
6016
6017 static void
6018 pop_tinst_level (void)
6019 {
6020   tree old = current_tinst_level;
6021
6022   /* Restore the filename and line number stashed away when we started
6023      this instantiation.  */
6024   input_location = TINST_LOCATION (old);
6025   in_system_header = TINST_IN_SYSTEM_HEADER_P (old);
6026   current_tinst_level = TREE_CHAIN (old);
6027   --tinst_depth;
6028   ++tinst_level_tick;
6029 }
6030
6031 /* We're instantiating a deferred template; restore the template
6032    instantiation context in which the instantiation was requested, which
6033    is one step out from LEVEL.  */
6034
6035 static void
6036 reopen_tinst_level (tree level)
6037 {
6038   tree t;
6039
6040   tinst_depth = 0;
6041   for (t = level; t; t = TREE_CHAIN (t))
6042     ++tinst_depth;
6043
6044   current_tinst_level = level;
6045   pop_tinst_level ();
6046 }
6047
6048 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6049    vector of template arguments, as for tsubst.
6050
6051    Returns an appropriate tsubst'd friend declaration.  */
6052
6053 static tree
6054 tsubst_friend_function (tree decl, tree args)
6055 {
6056   tree new_friend;
6057
6058   if (TREE_CODE (decl) == FUNCTION_DECL
6059       && DECL_TEMPLATE_INSTANTIATION (decl)
6060       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6061     /* This was a friend declared with an explicit template
6062        argument list, e.g.:
6063
6064        friend void f<>(T);
6065
6066        to indicate that f was a template instantiation, not a new
6067        function declaration.  Now, we have to figure out what
6068        instantiation of what template.  */
6069     {
6070       tree template_id, arglist, fns;
6071       tree new_args;
6072       tree tmpl;
6073       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6074
6075       /* Friend functions are looked up in the containing namespace scope.
6076          We must enter that scope, to avoid finding member functions of the
6077          current cless with same name.  */
6078       push_nested_namespace (ns);
6079       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6080                          tf_warning_or_error, NULL_TREE,
6081                          /*integral_constant_expression_p=*/false);
6082       pop_nested_namespace (ns);
6083       arglist = tsubst (DECL_TI_ARGS (decl), args,
6084                         tf_warning_or_error, NULL_TREE);
6085       template_id = lookup_template_function (fns, arglist);
6086
6087       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6088       tmpl = determine_specialization (template_id, new_friend,
6089                                        &new_args,
6090                                        /*need_member_template=*/0,
6091                                        TREE_VEC_LENGTH (args),
6092                                        tsk_none);
6093       return instantiate_template (tmpl, new_args, tf_error);
6094     }
6095
6096   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6097
6098   /* The NEW_FRIEND will look like an instantiation, to the
6099      compiler, but is not an instantiation from the point of view of
6100      the language.  For example, we might have had:
6101
6102      template <class T> struct S {
6103        template <class U> friend void f(T, U);
6104      };
6105
6106      Then, in S<int>, template <class U> void f(int, U) is not an
6107      instantiation of anything.  */
6108   if (new_friend == error_mark_node)
6109     return error_mark_node;
6110
6111   DECL_USE_TEMPLATE (new_friend) = 0;
6112   if (TREE_CODE (decl) == TEMPLATE_DECL)
6113     {
6114       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6115       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6116         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6117     }
6118
6119   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6120      is not a template instantiation and should not be mangled like
6121      one.  Therefore, we forget the mangling here; we'll recompute it
6122      later if we need it.  */
6123   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6124     {
6125       SET_DECL_RTL (new_friend, NULL_RTX);
6126       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6127     }
6128
6129   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6130     {
6131       tree old_decl;
6132       tree new_friend_template_info;
6133       tree new_friend_result_template_info;
6134       tree ns;
6135       int  new_friend_is_defn;
6136
6137       /* We must save some information from NEW_FRIEND before calling
6138          duplicate decls since that function will free NEW_FRIEND if
6139          possible.  */
6140       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6141       new_friend_is_defn =
6142             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6143                            (template_for_substitution (new_friend)))
6144              != NULL_TREE);
6145       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6146         {
6147           /* This declaration is a `primary' template.  */
6148           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6149
6150           new_friend_result_template_info
6151             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6152         }
6153       else
6154         new_friend_result_template_info = NULL_TREE;
6155
6156       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6157       if (new_friend_is_defn)
6158         DECL_INITIAL (new_friend) = error_mark_node;
6159
6160       /* Inside pushdecl_namespace_level, we will push into the
6161          current namespace. However, the friend function should go
6162          into the namespace of the template.  */
6163       ns = decl_namespace_context (new_friend);
6164       push_nested_namespace (ns);
6165       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6166       pop_nested_namespace (ns);
6167
6168       if (old_decl == error_mark_node)
6169         return error_mark_node;
6170
6171       if (old_decl != new_friend)
6172         {
6173           /* This new friend declaration matched an existing
6174              declaration.  For example, given:
6175
6176                template <class T> void f(T);
6177                template <class U> class C {
6178                  template <class T> friend void f(T) {}
6179                };
6180
6181              the friend declaration actually provides the definition
6182              of `f', once C has been instantiated for some type.  So,
6183              old_decl will be the out-of-class template declaration,
6184              while new_friend is the in-class definition.
6185
6186              But, if `f' was called before this point, the
6187              instantiation of `f' will have DECL_TI_ARGS corresponding
6188              to `T' but not to `U', references to which might appear
6189              in the definition of `f'.  Previously, the most general
6190              template for an instantiation of `f' was the out-of-class
6191              version; now it is the in-class version.  Therefore, we
6192              run through all specialization of `f', adding to their
6193              DECL_TI_ARGS appropriately.  In particular, they need a
6194              new set of outer arguments, corresponding to the
6195              arguments for this class instantiation.
6196
6197              The same situation can arise with something like this:
6198
6199                friend void f(int);
6200                template <class T> class C {
6201                  friend void f(T) {}
6202                };
6203
6204              when `C<int>' is instantiated.  Now, `f(int)' is defined
6205              in the class.  */
6206
6207           if (!new_friend_is_defn)
6208             /* On the other hand, if the in-class declaration does
6209                *not* provide a definition, then we don't want to alter
6210                existing definitions.  We can just leave everything
6211                alone.  */
6212             ;
6213           else
6214             {
6215               /* Overwrite whatever template info was there before, if
6216                  any, with the new template information pertaining to
6217                  the declaration.  */
6218               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6219
6220               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6221                 reregister_specialization (new_friend,
6222                                            most_general_template (old_decl),
6223                                            old_decl);
6224               else
6225                 {
6226                   tree t;
6227                   tree new_friend_args;
6228
6229                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6230                     = new_friend_result_template_info;
6231
6232                   new_friend_args = TI_ARGS (new_friend_template_info);
6233                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6234                        t != NULL_TREE;
6235                        t = TREE_CHAIN (t))
6236                     {
6237                       tree spec = TREE_VALUE (t);
6238
6239                       DECL_TI_ARGS (spec)
6240                         = add_outermost_template_args (new_friend_args,
6241                                                        DECL_TI_ARGS (spec));
6242                     }
6243
6244                   /* Now, since specializations are always supposed to
6245                      hang off of the most general template, we must move
6246                      them.  */
6247                   t = most_general_template (old_decl);
6248                   if (t != old_decl)
6249                     {
6250                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6251                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6252                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6253                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6254                     }
6255                 }
6256             }
6257
6258           /* The information from NEW_FRIEND has been merged into OLD_DECL
6259              by duplicate_decls.  */
6260           new_friend = old_decl;
6261         }
6262     }
6263   else
6264     {
6265       tree context = DECL_CONTEXT (new_friend);
6266       bool dependent_p;
6267
6268       /* In the code
6269            template <class T> class C {
6270              template <class U> friend void C1<U>::f (); // case 1
6271              friend void C2<T>::f ();                    // case 2
6272            };
6273          we only need to make sure CONTEXT is a complete type for
6274          case 2.  To distinguish between the two cases, we note that
6275          CONTEXT of case 1 remains dependent type after tsubst while
6276          this isn't true for case 2.  */
6277       ++processing_template_decl;
6278       dependent_p = dependent_type_p (context);
6279       --processing_template_decl;
6280
6281       if (!dependent_p
6282           && !complete_type_or_else (context, NULL_TREE))
6283         return error_mark_node;
6284
6285       if (COMPLETE_TYPE_P (context))
6286         {
6287           /* Check to see that the declaration is really present, and,
6288              possibly obtain an improved declaration.  */
6289           tree fn = check_classfn (context,
6290                                    new_friend, NULL_TREE);
6291
6292           if (fn && fn != error_mark_node)
6293             new_friend = fn;
6294         }
6295     }
6296
6297   return new_friend;
6298 }
6299
6300 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6301    template arguments, as for tsubst.
6302
6303    Returns an appropriate tsubst'd friend type or error_mark_node on
6304    failure.  */
6305
6306 static tree
6307 tsubst_friend_class (tree friend_tmpl, tree args)
6308 {
6309   tree friend_type;
6310   tree tmpl;
6311   tree context;
6312
6313   context = DECL_CONTEXT (friend_tmpl);
6314
6315   if (context)
6316     {
6317       if (TREE_CODE (context) == NAMESPACE_DECL)
6318         push_nested_namespace (context);
6319       else
6320         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6321     }
6322
6323   /* Look for a class template declaration.  We look for hidden names
6324      because two friend declarations of the same template are the
6325      same.  For example, in:
6326
6327        struct A { 
6328          template <typename> friend class F;
6329        };
6330        template <typename> struct B { 
6331          template <typename> friend class F;
6332        };
6333
6334      both F templates are the same.  */
6335   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6336                            /*block_p=*/true, 0, 
6337                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6338
6339   /* But, if we don't find one, it might be because we're in a
6340      situation like this:
6341
6342        template <class T>
6343        struct S {
6344          template <class U>
6345          friend struct S;
6346        };
6347
6348      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6349      for `S<int>', not the TEMPLATE_DECL.  */
6350   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6351     {
6352       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6353       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6354     }
6355
6356   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6357     {
6358       /* The friend template has already been declared.  Just
6359          check to see that the declarations match, and install any new
6360          default parameters.  We must tsubst the default parameters,
6361          of course.  We only need the innermost template parameters
6362          because that is all that redeclare_class_template will look
6363          at.  */
6364       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6365           > TMPL_ARGS_DEPTH (args))
6366         {
6367           tree parms;
6368           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6369                                          args, tf_warning_or_error);
6370           redeclare_class_template (TREE_TYPE (tmpl), parms);
6371         }
6372
6373       friend_type = TREE_TYPE (tmpl);
6374     }
6375   else
6376     {
6377       /* The friend template has not already been declared.  In this
6378          case, the instantiation of the template class will cause the
6379          injection of this template into the global scope.  */
6380       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6381       if (tmpl == error_mark_node)
6382         return error_mark_node;
6383
6384       /* The new TMPL is not an instantiation of anything, so we
6385          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6386          the new type because that is supposed to be the corresponding
6387          template decl, i.e., TMPL.  */
6388       DECL_USE_TEMPLATE (tmpl) = 0;
6389       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6390       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6391       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6392         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6393
6394       /* Inject this template into the global scope.  */
6395       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6396     }
6397
6398   if (context)
6399     {
6400       if (TREE_CODE (context) == NAMESPACE_DECL)
6401         pop_nested_namespace (context);
6402       else
6403         pop_nested_class ();
6404     }
6405
6406   return friend_type;
6407 }
6408
6409 /* Returns zero if TYPE cannot be completed later due to circularity.
6410    Otherwise returns one.  */
6411
6412 static int
6413 can_complete_type_without_circularity (tree type)
6414 {
6415   if (type == NULL_TREE || type == error_mark_node)
6416     return 0;
6417   else if (COMPLETE_TYPE_P (type))
6418     return 1;
6419   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6420     return can_complete_type_without_circularity (TREE_TYPE (type));
6421   else if (CLASS_TYPE_P (type)
6422            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6423     return 0;
6424   else
6425     return 1;
6426 }
6427
6428 tree
6429 instantiate_class_template (tree type)
6430 {
6431   tree template, args, pattern, t, member;
6432   tree typedecl;
6433   tree pbinfo;
6434   tree base_list;
6435
6436   if (type == error_mark_node)
6437     return error_mark_node;
6438
6439   if (TYPE_BEING_DEFINED (type)
6440       || COMPLETE_TYPE_P (type)
6441       || dependent_type_p (type))
6442     return type;
6443
6444   /* Figure out which template is being instantiated.  */
6445   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6446   gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6447
6448   /* Determine what specialization of the original template to
6449      instantiate.  */
6450   t = most_specialized_class (type, template);
6451   if (t == error_mark_node)
6452     {
6453       TYPE_BEING_DEFINED (type) = 1;
6454       return error_mark_node;
6455     }
6456   else if (t)
6457     {
6458       /* This TYPE is actually an instantiation of a partial
6459          specialization.  We replace the innermost set of ARGS with
6460          the arguments appropriate for substitution.  For example,
6461          given:
6462
6463            template <class T> struct S {};
6464            template <class T> struct S<T*> {};
6465
6466          and supposing that we are instantiating S<int*>, ARGS will
6467          presently be {int*} -- but we need {int}.  */
6468       pattern = TREE_TYPE (t);
6469       args = TREE_PURPOSE (t);
6470     }
6471   else
6472     {
6473       pattern = TREE_TYPE (template);
6474       args = CLASSTYPE_TI_ARGS (type);
6475     }
6476
6477   /* If the template we're instantiating is incomplete, then clearly
6478      there's nothing we can do.  */
6479   if (!COMPLETE_TYPE_P (pattern))
6480     return type;
6481
6482   /* If we've recursively instantiated too many templates, stop.  */
6483   if (! push_tinst_level (type))
6484     return type;
6485
6486   /* Now we're really doing the instantiation.  Mark the type as in
6487      the process of being defined.  */
6488   TYPE_BEING_DEFINED (type) = 1;
6489
6490   /* We may be in the middle of deferred access check.  Disable
6491      it now.  */
6492   push_deferring_access_checks (dk_no_deferred);
6493
6494   push_to_top_level ();
6495
6496   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6497
6498   /* Set the input location to the template definition. This is needed
6499      if tsubsting causes an error.  */
6500   typedecl = TYPE_MAIN_DECL (type);
6501   input_location = DECL_SOURCE_LOCATION (typedecl);
6502   in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6503
6504   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6505   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6506   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6507   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6508   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6509   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6510   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6511   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6512   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6513   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6514   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6515   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6516   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6517   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6518   if (ANON_AGGR_TYPE_P (pattern))
6519     SET_ANON_AGGR_TYPE_P (type);
6520   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6521     {
6522       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6523       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6524     }
6525
6526   pbinfo = TYPE_BINFO (pattern);
6527
6528   /* We should never instantiate a nested class before its enclosing
6529      class; we need to look up the nested class by name before we can
6530      instantiate it, and that lookup should instantiate the enclosing
6531      class.  */
6532   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6533               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6534               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6535
6536   base_list = NULL_TREE;
6537   if (BINFO_N_BASE_BINFOS (pbinfo))
6538     {
6539       tree pbase_binfo;
6540       tree context = TYPE_CONTEXT (type);
6541       tree pushed_scope;
6542       int i;
6543
6544       /* We must enter the scope containing the type, as that is where
6545          the accessibility of types named in dependent bases are
6546          looked up from.  */
6547       pushed_scope = push_scope (context ? context : global_namespace);
6548
6549       /* Substitute into each of the bases to determine the actual
6550          basetypes.  */
6551       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6552         {
6553           tree base;
6554           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6555           tree expanded_bases = NULL_TREE;
6556           int idx, len = 1;
6557
6558           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6559             {
6560               expanded_bases = 
6561                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6562                                        args, tf_error, NULL_TREE);
6563               if (expanded_bases == error_mark_node)
6564                 continue;
6565
6566               len = TREE_VEC_LENGTH (expanded_bases);
6567             }
6568
6569           for (idx = 0; idx < len; idx++)
6570             {
6571               if (expanded_bases)
6572                 /* Extract the already-expanded base class.  */
6573                 base = TREE_VEC_ELT (expanded_bases, idx);
6574               else
6575                 /* Substitute to figure out the base class.  */
6576                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6577                                NULL_TREE);
6578
6579               if (base == error_mark_node)
6580                 continue;
6581
6582               base_list = tree_cons (access, base, base_list);
6583               if (BINFO_VIRTUAL_P (pbase_binfo))
6584                 TREE_TYPE (base_list) = integer_type_node;
6585             }
6586         }
6587
6588       /* The list is now in reverse order; correct that.  */
6589       base_list = nreverse (base_list);
6590
6591       if (pushed_scope)
6592         pop_scope (pushed_scope);
6593     }
6594   /* Now call xref_basetypes to set up all the base-class
6595      information.  */
6596   xref_basetypes (type, base_list);
6597
6598
6599   /* Now that our base classes are set up, enter the scope of the
6600      class, so that name lookups into base classes, etc. will work
6601      correctly.  This is precisely analogous to what we do in
6602      begin_class_definition when defining an ordinary non-template
6603      class.  */
6604   pushclass (type);
6605
6606   /* Now members are processed in the order of declaration.  */
6607   for (member = CLASSTYPE_DECL_LIST (pattern);
6608        member; member = TREE_CHAIN (member))
6609     {
6610       tree t = TREE_VALUE (member);
6611
6612       if (TREE_PURPOSE (member))
6613         {
6614           if (TYPE_P (t))
6615             {
6616               /* Build new CLASSTYPE_NESTED_UTDS.  */
6617
6618               tree newtag;
6619               bool class_template_p;
6620
6621               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6622                                   && TYPE_LANG_SPECIFIC (t)
6623                                   && CLASSTYPE_IS_TEMPLATE (t));
6624               /* If the member is a class template, then -- even after
6625                  substitution -- there may be dependent types in the
6626                  template argument list for the class.  We increment
6627                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6628                  that function will assume that no types are dependent
6629                  when outside of a template.  */
6630               if (class_template_p)
6631                 ++processing_template_decl;
6632               newtag = tsubst (t, args, tf_error, NULL_TREE);
6633               if (class_template_p)
6634                 --processing_template_decl;
6635               if (newtag == error_mark_node)
6636                 continue;
6637
6638               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6639                 {
6640                   tree name = TYPE_IDENTIFIER (t);
6641
6642                   if (class_template_p)
6643                     /* Unfortunately, lookup_template_class sets
6644                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6645                        instantiation (i.e., for the type of a member
6646                        template class nested within a template class.)
6647                        This behavior is required for
6648                        maybe_process_partial_specialization to work
6649                        correctly, but is not accurate in this case;
6650                        the TAG is not an instantiation of anything.
6651                        (The corresponding TEMPLATE_DECL is an
6652                        instantiation, but the TYPE is not.) */
6653                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6654
6655                   /* Now, we call pushtag to put this NEWTAG into the scope of
6656                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
6657                      pushtag calling push_template_decl.  We don't have to do
6658                      this for enums because it will already have been done in
6659                      tsubst_enum.  */
6660                   if (name)
6661                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6662                   pushtag (name, newtag, /*tag_scope=*/ts_current);
6663                 }
6664             }
6665           else if (TREE_CODE (t) == FUNCTION_DECL
6666                    || DECL_FUNCTION_TEMPLATE_P (t))
6667             {
6668               /* Build new TYPE_METHODS.  */
6669               tree r;
6670
6671               if (TREE_CODE (t) == TEMPLATE_DECL)
6672                 ++processing_template_decl;
6673               r = tsubst (t, args, tf_error, NULL_TREE);
6674               if (TREE_CODE (t) == TEMPLATE_DECL)
6675                 --processing_template_decl;
6676               set_current_access_from_decl (r);
6677               finish_member_declaration (r);
6678             }
6679           else
6680             {
6681               /* Build new TYPE_FIELDS.  */
6682               if (TREE_CODE (t) == STATIC_ASSERT)
6683                 {
6684                   tree condition = 
6685                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
6686                                  tf_warning_or_error, NULL_TREE,
6687                                  /*integral_constant_expression_p=*/true);
6688                   finish_static_assert (condition,
6689                                         STATIC_ASSERT_MESSAGE (t), 
6690                                         STATIC_ASSERT_SOURCE_LOCATION (t),
6691                                         /*member_p=*/true);
6692                 }
6693               else if (TREE_CODE (t) != CONST_DECL)
6694                 {
6695                   tree r;
6696
6697                   /* The the file and line for this declaration, to
6698                      assist in error message reporting.  Since we
6699                      called push_tinst_level above, we don't need to
6700                      restore these.  */
6701                   input_location = DECL_SOURCE_LOCATION (t);
6702
6703                   if (TREE_CODE (t) == TEMPLATE_DECL)
6704                     ++processing_template_decl;
6705                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
6706                   if (TREE_CODE (t) == TEMPLATE_DECL)
6707                     --processing_template_decl;
6708                   if (TREE_CODE (r) == VAR_DECL)
6709                     {
6710                       /* In [temp.inst]:
6711
6712                            [t]he initialization (and any associated
6713                            side-effects) of a static data member does
6714                            not occur unless the static data member is
6715                            itself used in a way that requires the
6716                            definition of the static data member to
6717                            exist.
6718
6719                          Therefore, we do not substitute into the
6720                          initialized for the static data member here.  */
6721                       finish_static_data_member_decl
6722                         (r,
6723                          /*init=*/NULL_TREE,
6724                          /*init_const_expr_p=*/false,
6725                          /*asmspec_tree=*/NULL_TREE,
6726                          /*flags=*/0);
6727                       if (DECL_INITIALIZED_IN_CLASS_P (r))
6728                         check_static_variable_definition (r, TREE_TYPE (r));
6729                     }
6730                   else if (TREE_CODE (r) == FIELD_DECL)
6731                     {
6732                       /* Determine whether R has a valid type and can be
6733                          completed later.  If R is invalid, then it is
6734                          replaced by error_mark_node so that it will not be
6735                          added to TYPE_FIELDS.  */
6736                       tree rtype = TREE_TYPE (r);
6737                       if (can_complete_type_without_circularity (rtype))
6738                         complete_type (rtype);
6739
6740                       if (!COMPLETE_TYPE_P (rtype))
6741                         {
6742                           cxx_incomplete_type_error (r, rtype);
6743                           r = error_mark_node;
6744                         }
6745                     }
6746
6747                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6748                      such a thing will already have been added to the field
6749                      list by tsubst_enum in finish_member_declaration in the
6750                      CLASSTYPE_NESTED_UTDS case above.  */
6751                   if (!(TREE_CODE (r) == TYPE_DECL
6752                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
6753                         && DECL_ARTIFICIAL (r)))
6754                     {
6755                       set_current_access_from_decl (r);
6756                       finish_member_declaration (r);
6757                     }
6758                 }
6759             }
6760         }
6761       else
6762         {
6763           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6764             {
6765               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
6766
6767               tree friend_type = t;
6768               bool adjust_processing_template_decl = false;
6769
6770               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6771                 {
6772                   /* template <class T> friend class C;  */
6773                   friend_type = tsubst_friend_class (friend_type, args);
6774                   adjust_processing_template_decl = true;
6775                 }
6776               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6777                 {
6778                   /* template <class T> friend class C::D;  */
6779                   friend_type = tsubst (friend_type, args,
6780                                         tf_warning_or_error, NULL_TREE);
6781                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6782                     friend_type = TREE_TYPE (friend_type);
6783                   adjust_processing_template_decl = true;
6784                 }
6785               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6786                 {
6787                   /* This could be either
6788
6789                        friend class T::C;
6790
6791                      when dependent_type_p is false or
6792
6793                        template <class U> friend class T::C;
6794
6795                      otherwise.  */
6796                   friend_type = tsubst (friend_type, args,
6797                                         tf_warning_or_error, NULL_TREE);
6798                   /* Bump processing_template_decl for correct
6799                      dependent_type_p calculation.  */
6800                   ++processing_template_decl;
6801                   if (dependent_type_p (friend_type))
6802                     adjust_processing_template_decl = true;
6803                   --processing_template_decl;
6804                 }
6805               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6806                        && hidden_name_p (TYPE_NAME (friend_type)))
6807                 {
6808                   /* friend class C;
6809
6810                      where C hasn't been declared yet.  Let's lookup name
6811                      from namespace scope directly, bypassing any name that
6812                      come from dependent base class.  */
6813                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6814
6815                   /* The call to xref_tag_from_type does injection for friend
6816                      classes.  */
6817                   push_nested_namespace (ns);
6818                   friend_type =
6819                     xref_tag_from_type (friend_type, NULL_TREE,
6820                                         /*tag_scope=*/ts_current);
6821                   pop_nested_namespace (ns);
6822                 }
6823               else if (uses_template_parms (friend_type))
6824                 /* friend class C<T>;  */
6825                 friend_type = tsubst (friend_type, args,
6826                                       tf_warning_or_error, NULL_TREE);
6827               /* Otherwise it's
6828
6829                    friend class C;
6830
6831                  where C is already declared or
6832
6833                    friend class C<int>;
6834
6835                  We don't have to do anything in these cases.  */
6836
6837               if (adjust_processing_template_decl)
6838                 /* Trick make_friend_class into realizing that the friend
6839                    we're adding is a template, not an ordinary class.  It's
6840                    important that we use make_friend_class since it will
6841                    perform some error-checking and output cross-reference
6842                    information.  */
6843                 ++processing_template_decl;
6844
6845               if (friend_type != error_mark_node)
6846                 make_friend_class (type, friend_type, /*complain=*/false);
6847
6848               if (adjust_processing_template_decl)
6849                 --processing_template_decl;
6850             }
6851           else
6852             {
6853               /* Build new DECL_FRIENDLIST.  */
6854               tree r;
6855
6856               /* The the file and line for this declaration, to
6857                  assist in error message reporting.  Since we
6858                  called push_tinst_level above, we don't need to
6859                  restore these.  */
6860               input_location = DECL_SOURCE_LOCATION (t);
6861
6862               if (TREE_CODE (t) == TEMPLATE_DECL)
6863                 {
6864                   ++processing_template_decl;
6865                   push_deferring_access_checks (dk_no_check);
6866                 }
6867
6868               r = tsubst_friend_function (t, args);
6869               add_friend (type, r, /*complain=*/false);
6870               if (TREE_CODE (t) == TEMPLATE_DECL)
6871                 {
6872                   pop_deferring_access_checks ();
6873                   --processing_template_decl;
6874                 }
6875             }
6876         }
6877     }
6878
6879   /* Set the file and line number information to whatever is given for
6880      the class itself.  This puts error messages involving generated
6881      implicit functions at a predictable point, and the same point
6882      that would be used for non-template classes.  */
6883   input_location = DECL_SOURCE_LOCATION (typedecl);
6884
6885   unreverse_member_declarations (type);
6886   finish_struct_1 (type);
6887   TYPE_BEING_DEFINED (type) = 0;
6888
6889   /* Now that the class is complete, instantiate default arguments for
6890      any member functions.  We don't do this earlier because the
6891      default arguments may reference members of the class.  */
6892   if (!PRIMARY_TEMPLATE_P (template))
6893     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
6894       if (TREE_CODE (t) == FUNCTION_DECL
6895           /* Implicitly generated member functions will not have template
6896              information; they are not instantiations, but instead are
6897              created "fresh" for each instantiation.  */
6898           && DECL_TEMPLATE_INFO (t))
6899         tsubst_default_arguments (t);
6900
6901   popclass ();
6902   pop_from_top_level ();
6903   pop_deferring_access_checks ();
6904   pop_tinst_level ();
6905
6906   /* The vtable for a template class can be emitted in any translation
6907      unit in which the class is instantiated.  When there is no key
6908      method, however, finish_struct_1 will already have added TYPE to
6909      the keyed_classes list.  */
6910   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
6911     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
6912
6913   return type;
6914 }
6915
6916 static tree
6917 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6918 {
6919   tree r;
6920
6921   if (!t)
6922     r = t;
6923   else if (TYPE_P (t))
6924     r = tsubst (t, args, complain, in_decl);
6925   else
6926     {
6927       r = tsubst_expr (t, args, complain, in_decl,
6928                        /*integral_constant_expression_p=*/true);
6929       r = fold_non_dependent_expr (r);
6930     }
6931   return r;
6932 }
6933
6934 /* Substitute ARGS into T, which is an pack expansion
6935    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
6936    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
6937    (if only a partial substitution could be performed) or
6938    ERROR_MARK_NODE if there was an error.  */
6939 tree
6940 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
6941                        tree in_decl)
6942 {
6943   tree pattern;
6944   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
6945   tree first_arg_pack; int i, len = -1;
6946   tree result;
6947   int incomplete = 0;
6948
6949   gcc_assert (PACK_EXPANSION_P (t));
6950   pattern = PACK_EXPANSION_PATTERN (t);
6951
6952   /* Determine the argument packs that will instantiate the parameter
6953      packs used in the expansion expression. While we're at it,
6954      compute the number of arguments to be expanded and make sure it
6955      is consistent.  */
6956   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
6957        pack = TREE_CHAIN (pack))
6958     {
6959       tree parm_pack = TREE_VALUE (pack);
6960       tree arg_pack = NULL_TREE;
6961       tree orig_arg = NULL_TREE;
6962
6963       if (TREE_CODE (parm_pack) == PARM_DECL)
6964         {
6965           if (local_specializations)
6966             arg_pack = retrieve_local_specialization (parm_pack);
6967         }
6968       else
6969         {
6970           int level, idx, levels;
6971           template_parm_level_and_index (parm_pack, &level, &idx);
6972
6973           levels = TMPL_ARGS_DEPTH (args);
6974           if (level <= levels)
6975             arg_pack = TMPL_ARG (args, level, idx);
6976         }
6977
6978       orig_arg = arg_pack;
6979       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
6980         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
6981       
6982       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
6983         /* This can only happen if we forget to expand an argument
6984            pack somewhere else. Just return an error, silently.  */
6985         {
6986           result = make_tree_vec (1);
6987           TREE_VEC_ELT (result, 0) = error_mark_node;
6988           return result;
6989         }
6990
6991       if (arg_pack)
6992         {
6993           int my_len = 
6994             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
6995
6996           /* It's all-or-nothing with incomplete argument packs.  */
6997           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
6998             return error_mark_node;
6999           
7000           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7001             incomplete = 1;
7002
7003           if (len < 0)
7004             {
7005               len = my_len;
7006               first_arg_pack = arg_pack;
7007             }
7008           else if (len != my_len)
7009             {
7010               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7011                 error ("mismatched argument pack lengths while expanding "
7012                        "%<%T%>",
7013                        pattern);
7014               else
7015                 error ("mismatched argument pack lengths while expanding "
7016                        "%<%E%>",
7017                        pattern);
7018               return error_mark_node;
7019             }
7020
7021           /* Keep track of the parameter packs and their corresponding
7022              argument packs.  */
7023           packs = tree_cons (parm_pack, arg_pack, packs);
7024           TREE_TYPE (packs) = orig_arg;
7025         }
7026       else
7027         /* We can't substitute for this parameter pack.  */
7028         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7029                                          TREE_VALUE (pack),
7030                                          unsubstituted_packs);
7031     }
7032
7033   /* We cannot expand this expansion expression, because we don't have
7034      all of the argument packs we need. Substitute into the pattern
7035      and return a PACK_EXPANSION_*. The caller will need to deal with
7036      that.  */
7037   if (unsubstituted_packs)
7038     return make_pack_expansion (tsubst (pattern, args, complain, 
7039                                         in_decl));
7040
7041   /* We could not find any argument packs that work.  */
7042   if (len < 0)
7043     return error_mark_node;
7044
7045   /* For each argument in each argument pack, substitute into the
7046      pattern.  */
7047   result = make_tree_vec (len + incomplete);
7048   for (i = 0; i < len + incomplete; ++i)
7049     {
7050       /* For parameter pack, change the substitution of the parameter
7051          pack to the ith argument in its argument pack, then expand
7052          the pattern.  */
7053       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7054         {
7055           tree parm = TREE_PURPOSE (pack);
7056
7057           if (TREE_CODE (parm) == PARM_DECL)
7058             {
7059               /* Select the Ith argument from the pack.  */
7060               tree arg = make_node (ARGUMENT_PACK_SELECT);
7061               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7062               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7063               mark_used (parm);
7064               register_local_specialization (arg, parm);
7065             }
7066           else
7067             {
7068               tree value = parm;
7069               int idx, level;
7070               template_parm_level_and_index (parm, &level, &idx);
7071               
7072               if (i < len) 
7073                 {
7074                   /* Select the Ith argument from the pack. */
7075                   value = make_node (ARGUMENT_PACK_SELECT);
7076                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7077                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7078                 }
7079
7080               /* Update the corresponding argument.  */
7081               TMPL_ARG (args, level, idx) = value;
7082             }
7083         }
7084
7085       /* Substitute into the PATTERN with the altered arguments.  */
7086       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7087         TREE_VEC_ELT (result, i) = 
7088           tsubst_expr (pattern, args, complain, in_decl,
7089                        /*integral_constant_expression_p=*/false);
7090       else
7091         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7092
7093       if (i == len)
7094         /* When we have incomplete argument packs, the last "expanded"
7095            result is itself a pack expansion, which allows us
7096            to deduce more arguments.  */
7097         TREE_VEC_ELT (result, i) = 
7098           make_pack_expansion (TREE_VEC_ELT (result, i));
7099
7100       if (TREE_VEC_ELT (result, i) == error_mark_node)
7101         {
7102           result = error_mark_node;
7103           break;
7104         }
7105     }
7106   
7107   /* Update ARGS to restore the substitution from parameter packs to
7108      their argument packs.  */
7109   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7110     {
7111       tree parm = TREE_PURPOSE (pack);
7112
7113       if (TREE_CODE (parm) == PARM_DECL)
7114         register_local_specialization (TREE_TYPE (pack), parm);
7115       else
7116         {
7117           int idx, level;
7118           template_parm_level_and_index (parm, &level, &idx);
7119           
7120           /* Update the corresponding argument.  */
7121           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7122             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7123               TREE_TYPE (pack);
7124           else
7125             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7126         }
7127     }
7128
7129   return result;
7130 }
7131
7132 /* Substitute ARGS into the vector or list of template arguments T.  */
7133
7134 static tree
7135 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7136 {
7137   tree orig_t = t;
7138   int len = TREE_VEC_LENGTH (t);
7139   int need_new = 0, i, expanded_len_adjust = 0, out;
7140   tree *elts = (tree *) alloca (len * sizeof (tree));
7141
7142   for (i = 0; i < len; i++)
7143     {
7144       tree orig_arg = TREE_VEC_ELT (t, i);
7145       tree new_arg;
7146
7147       if (TREE_CODE (orig_arg) == TREE_VEC)
7148         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7149       else if (PACK_EXPANSION_P (orig_arg))
7150         {
7151           /* Substitute into an expansion expression.  */
7152           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7153
7154           if (TREE_CODE (new_arg) == TREE_VEC)
7155             /* Add to the expanded length adjustment the number of
7156                expanded arguments. We subtract one from this
7157                measurement, because the argument pack expression
7158                itself is already counted as 1 in
7159                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7160                the argument pack is empty.  */
7161             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7162         }
7163       else if (ARGUMENT_PACK_P (orig_arg))
7164         {
7165           /* Substitute into each of the arguments.  */
7166           new_arg = make_node (TREE_CODE (orig_arg));
7167           
7168           SET_ARGUMENT_PACK_ARGS (
7169             new_arg,
7170             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7171                                   args, complain, in_decl));
7172
7173           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7174             new_arg = error_mark_node;
7175
7176           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7177             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7178                                           complain, in_decl);
7179             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7180
7181             if (TREE_TYPE (new_arg) == error_mark_node)
7182               new_arg = error_mark_node;
7183           }
7184         }
7185       else
7186         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7187
7188       if (new_arg == error_mark_node)
7189         return error_mark_node;
7190
7191       elts[i] = new_arg;
7192       if (new_arg != orig_arg)
7193         need_new = 1;
7194     }
7195
7196   if (!need_new)
7197     return t;
7198
7199   /* Make space for the expanded arguments coming from template
7200      argument packs.  */
7201   t = make_tree_vec (len + expanded_len_adjust);
7202   for (i = 0, out = 0; i < len; i++)
7203     {
7204       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7205            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7206           && TREE_CODE (elts[i]) == TREE_VEC)
7207         {
7208           int idx;
7209
7210           /* Now expand the template argument pack "in place".  */
7211           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7212             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7213         }
7214       else
7215         {
7216           TREE_VEC_ELT (t, out) = elts[i];
7217           out++;
7218         }
7219     }
7220
7221   return t;
7222 }
7223
7224 /* Return the result of substituting ARGS into the template parameters
7225    given by PARMS.  If there are m levels of ARGS and m + n levels of
7226    PARMS, then the result will contain n levels of PARMS.  For
7227    example, if PARMS is `template <class T> template <class U>
7228    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7229    result will be `template <int*, double, class V>'.  */
7230
7231 static tree
7232 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7233 {
7234   tree r = NULL_TREE;
7235   tree* new_parms;
7236
7237   /* When substituting into a template, we must set
7238      PROCESSING_TEMPLATE_DECL as the template parameters may be
7239      dependent if they are based on one-another, and the dependency
7240      predicates are short-circuit outside of templates.  */
7241   ++processing_template_decl;
7242
7243   for (new_parms = &r;
7244        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7245        new_parms = &(TREE_CHAIN (*new_parms)),
7246          parms = TREE_CHAIN (parms))
7247     {
7248       tree new_vec =
7249         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7250       int i;
7251
7252       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7253         {
7254           tree tuple;
7255           tree default_value;
7256           tree parm_decl;
7257
7258           if (parms == error_mark_node)
7259             continue;
7260
7261           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7262
7263           if (tuple == error_mark_node)
7264             continue;
7265
7266           default_value = TREE_PURPOSE (tuple);
7267           parm_decl = TREE_VALUE (tuple);
7268
7269           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7270           if (TREE_CODE (parm_decl) == PARM_DECL
7271               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7272             parm_decl = error_mark_node;
7273           default_value = tsubst_template_arg (default_value, args,
7274                                                complain, NULL_TREE);
7275
7276           tuple = build_tree_list (default_value, parm_decl);
7277           TREE_VEC_ELT (new_vec, i) = tuple;
7278         }
7279
7280       *new_parms =
7281         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7282                              - TMPL_ARGS_DEPTH (args)),
7283                    new_vec, NULL_TREE);
7284     }
7285
7286   --processing_template_decl;
7287
7288   return r;
7289 }
7290
7291 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7292    type T.  If T is not an aggregate or enumeration type, it is
7293    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7294    ENTERING_SCOPE is nonzero, T is the context for a template which
7295    we are presently tsubst'ing.  Return the substituted value.  */
7296
7297 static tree
7298 tsubst_aggr_type (tree t,
7299                   tree args,
7300                   tsubst_flags_t complain,
7301                   tree in_decl,
7302                   int entering_scope)
7303 {
7304   if (t == NULL_TREE)
7305     return NULL_TREE;
7306
7307   switch (TREE_CODE (t))
7308     {
7309     case RECORD_TYPE:
7310       if (TYPE_PTRMEMFUNC_P (t))
7311         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7312
7313       /* Else fall through.  */
7314     case ENUMERAL_TYPE:
7315     case UNION_TYPE:
7316       if (TYPE_TEMPLATE_INFO (t))
7317         {
7318           tree argvec;
7319           tree context;
7320           tree r;
7321           bool saved_skip_evaluation;
7322
7323           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7324           saved_skip_evaluation = skip_evaluation;
7325           skip_evaluation = false;
7326
7327           /* First, determine the context for the type we are looking
7328              up.  */
7329           context = TYPE_CONTEXT (t);
7330           if (context)
7331             context = tsubst_aggr_type (context, args, complain,
7332                                         in_decl, /*entering_scope=*/1);
7333
7334           /* Then, figure out what arguments are appropriate for the
7335              type we are trying to find.  For example, given:
7336
7337                template <class T> struct S;
7338                template <class T, class U> void f(T, U) { S<U> su; }
7339
7340              and supposing that we are instantiating f<int, double>,
7341              then our ARGS will be {int, double}, but, when looking up
7342              S we only want {double}.  */
7343           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7344                                          complain, in_decl);
7345           if (argvec == error_mark_node)
7346             r = error_mark_node;
7347           else
7348             {
7349               r = lookup_template_class (t, argvec, in_decl, context,
7350                                          entering_scope, complain);
7351               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7352             }
7353
7354           skip_evaluation = saved_skip_evaluation;
7355
7356           return r;
7357         }
7358       else
7359         /* This is not a template type, so there's nothing to do.  */
7360         return t;
7361
7362     default:
7363       return tsubst (t, args, complain, in_decl);
7364     }
7365 }
7366
7367 /* Substitute into the default argument ARG (a default argument for
7368    FN), which has the indicated TYPE.  */
7369
7370 tree
7371 tsubst_default_argument (tree fn, tree type, tree arg)
7372 {
7373   tree saved_class_ptr = NULL_TREE;
7374   tree saved_class_ref = NULL_TREE;
7375
7376   /* This default argument came from a template.  Instantiate the
7377      default argument here, not in tsubst.  In the case of
7378      something like:
7379
7380        template <class T>
7381        struct S {
7382          static T t();
7383          void f(T = t());
7384        };
7385
7386      we must be careful to do name lookup in the scope of S<T>,
7387      rather than in the current class.  */
7388   push_access_scope (fn);
7389   /* The "this" pointer is not valid in a default argument.  */
7390   if (cfun)
7391     {
7392       saved_class_ptr = current_class_ptr;
7393       cp_function_chain->x_current_class_ptr = NULL_TREE;
7394       saved_class_ref = current_class_ref;
7395       cp_function_chain->x_current_class_ref = NULL_TREE;
7396     }
7397
7398   push_deferring_access_checks(dk_no_deferred);
7399   /* The default argument expression may cause implicitly defined
7400      member functions to be synthesized, which will result in garbage
7401      collection.  We must treat this situation as if we were within
7402      the body of function so as to avoid collecting live data on the
7403      stack.  */
7404   ++function_depth;
7405   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7406                      tf_warning_or_error, NULL_TREE,
7407                      /*integral_constant_expression_p=*/false);
7408   --function_depth;
7409   pop_deferring_access_checks();
7410
7411   /* Restore the "this" pointer.  */
7412   if (cfun)
7413     {
7414       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7415       cp_function_chain->x_current_class_ref = saved_class_ref;
7416     }
7417
7418   pop_access_scope (fn);
7419
7420   /* Make sure the default argument is reasonable.  */
7421   arg = check_default_argument (type, arg);
7422
7423   return arg;
7424 }
7425
7426 /* Substitute into all the default arguments for FN.  */
7427
7428 static void
7429 tsubst_default_arguments (tree fn)
7430 {
7431   tree arg;
7432   tree tmpl_args;
7433
7434   tmpl_args = DECL_TI_ARGS (fn);
7435
7436   /* If this function is not yet instantiated, we certainly don't need
7437      its default arguments.  */
7438   if (uses_template_parms (tmpl_args))
7439     return;
7440
7441   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7442        arg;
7443        arg = TREE_CHAIN (arg))
7444     if (TREE_PURPOSE (arg))
7445       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7446                                                     TREE_VALUE (arg),
7447                                                     TREE_PURPOSE (arg));
7448 }
7449
7450 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7451    result of the substitution.  Issue error and warning messages under
7452    control of COMPLAIN.  */
7453
7454 static tree
7455 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7456 {
7457   location_t saved_loc;
7458   tree r = NULL_TREE;
7459   tree in_decl = t;
7460
7461   /* Set the filename and linenumber to improve error-reporting.  */
7462   saved_loc = input_location;
7463   input_location = DECL_SOURCE_LOCATION (t);
7464
7465   switch (TREE_CODE (t))
7466     {
7467     case TEMPLATE_DECL:
7468       {
7469         /* We can get here when processing a member function template,
7470            member class template, and template template parameter of
7471            a template class.  */
7472         tree decl = DECL_TEMPLATE_RESULT (t);
7473         tree spec;
7474         tree tmpl_args;
7475         tree full_args;
7476
7477         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7478           {
7479             /* Template template parameter is treated here.  */
7480             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7481             if (new_type == error_mark_node)
7482               return error_mark_node;
7483
7484             r = copy_decl (t);
7485             TREE_CHAIN (r) = NULL_TREE;
7486             TREE_TYPE (r) = new_type;
7487             DECL_TEMPLATE_RESULT (r)
7488               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7489             DECL_TEMPLATE_PARMS (r)
7490               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7491                                        complain);
7492             TYPE_NAME (new_type) = r;
7493             break;
7494           }
7495
7496         /* We might already have an instance of this template.
7497            The ARGS are for the surrounding class type, so the
7498            full args contain the tsubst'd args for the context,
7499            plus the innermost args from the template decl.  */
7500         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7501           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7502           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7503         /* Because this is a template, the arguments will still be
7504            dependent, even after substitution.  If
7505            PROCESSING_TEMPLATE_DECL is not set, the dependency
7506            predicates will short-circuit.  */
7507         ++processing_template_decl;
7508         full_args = tsubst_template_args (tmpl_args, args,
7509                                           complain, in_decl);
7510         --processing_template_decl;
7511         if (full_args == error_mark_node)
7512           return error_mark_node;
7513
7514         /* tsubst_template_args doesn't copy the vector if
7515            nothing changed.  But, *something* should have
7516            changed.  */
7517         gcc_assert (full_args != tmpl_args);
7518
7519         spec = retrieve_specialization (t, full_args,
7520                                         /*class_specializations_p=*/true);
7521         if (spec != NULL_TREE)
7522           {
7523             r = spec;
7524             break;
7525           }
7526
7527         /* Make a new template decl.  It will be similar to the
7528            original, but will record the current template arguments.
7529            We also create a new function declaration, which is just
7530            like the old one, but points to this new template, rather
7531            than the old one.  */
7532         r = copy_decl (t);
7533         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7534         TREE_CHAIN (r) = NULL_TREE;
7535
7536         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7537
7538         if (TREE_CODE (decl) == TYPE_DECL)
7539           {
7540             tree new_type;
7541             ++processing_template_decl;
7542             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7543             --processing_template_decl;
7544             if (new_type == error_mark_node)
7545               return error_mark_node;
7546
7547             TREE_TYPE (r) = new_type;
7548             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7549             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7550             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7551             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7552           }
7553         else
7554           {
7555             tree new_decl;
7556             ++processing_template_decl;
7557             new_decl = tsubst (decl, args, complain, in_decl);
7558             --processing_template_decl;
7559             if (new_decl == error_mark_node)
7560               return error_mark_node;
7561
7562             DECL_TEMPLATE_RESULT (r) = new_decl;
7563             DECL_TI_TEMPLATE (new_decl) = r;
7564             TREE_TYPE (r) = TREE_TYPE (new_decl);
7565             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7566             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7567           }
7568
7569         SET_DECL_IMPLICIT_INSTANTIATION (r);
7570         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7571         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7572
7573         /* The template parameters for this new template are all the
7574            template parameters for the old template, except the
7575            outermost level of parameters.  */
7576         DECL_TEMPLATE_PARMS (r)
7577           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7578                                    complain);
7579
7580         if (PRIMARY_TEMPLATE_P (t))
7581           DECL_PRIMARY_TEMPLATE (r) = r;
7582
7583         if (TREE_CODE (decl) != TYPE_DECL)
7584           /* Record this non-type partial instantiation.  */
7585           register_specialization (r, t,
7586                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7587                                    false);
7588       }
7589       break;
7590
7591     case FUNCTION_DECL:
7592       {
7593         tree ctx;
7594         tree argvec = NULL_TREE;
7595         tree *friends;
7596         tree gen_tmpl;
7597         tree type;
7598         int member;
7599         int args_depth;
7600         int parms_depth;
7601
7602         /* Nobody should be tsubst'ing into non-template functions.  */
7603         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7604
7605         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7606           {
7607             tree spec;
7608             bool dependent_p;
7609
7610             /* If T is not dependent, just return it.  We have to
7611                increment PROCESSING_TEMPLATE_DECL because
7612                value_dependent_expression_p assumes that nothing is
7613                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
7614             ++processing_template_decl;
7615             dependent_p = value_dependent_expression_p (t);
7616             --processing_template_decl;
7617             if (!dependent_p)
7618               return t;
7619
7620             /* Calculate the most general template of which R is a
7621                specialization, and the complete set of arguments used to
7622                specialize R.  */
7623             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7624             argvec = tsubst_template_args (DECL_TI_ARGS
7625                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
7626                                            args, complain, in_decl);
7627
7628             /* Check to see if we already have this specialization.  */
7629             spec = retrieve_specialization (gen_tmpl, argvec,
7630                                             /*class_specializations_p=*/false);
7631
7632             if (spec)
7633               {
7634                 r = spec;
7635                 break;
7636               }
7637
7638             /* We can see more levels of arguments than parameters if
7639                there was a specialization of a member template, like
7640                this:
7641
7642                  template <class T> struct S { template <class U> void f(); }
7643                  template <> template <class U> void S<int>::f(U);
7644
7645                Here, we'll be substituting into the specialization,
7646                because that's where we can find the code we actually
7647                want to generate, but we'll have enough arguments for
7648                the most general template.
7649
7650                We also deal with the peculiar case:
7651
7652                  template <class T> struct S {
7653                    template <class U> friend void f();
7654                  };
7655                  template <class U> void f() {}
7656                  template S<int>;
7657                  template void f<double>();
7658
7659                Here, the ARGS for the instantiation of will be {int,
7660                double}.  But, we only need as many ARGS as there are
7661                levels of template parameters in CODE_PATTERN.  We are
7662                careful not to get fooled into reducing the ARGS in
7663                situations like:
7664
7665                  template <class T> struct S { template <class U> void f(U); }
7666                  template <class T> template <> void S<T>::f(int) {}
7667
7668                which we can spot because the pattern will be a
7669                specialization in this case.  */
7670             args_depth = TMPL_ARGS_DEPTH (args);
7671             parms_depth =
7672               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7673             if (args_depth > parms_depth
7674                 && !DECL_TEMPLATE_SPECIALIZATION (t))
7675               args = get_innermost_template_args (args, parms_depth);
7676           }
7677         else
7678           {
7679             /* This special case arises when we have something like this:
7680
7681                  template <class T> struct S {
7682                    friend void f<int>(int, double);
7683                  };
7684
7685                Here, the DECL_TI_TEMPLATE for the friend declaration
7686                will be an IDENTIFIER_NODE.  We are being called from
7687                tsubst_friend_function, and we want only to create a
7688                new decl (R) with appropriate types so that we can call
7689                determine_specialization.  */
7690             gen_tmpl = NULL_TREE;
7691           }
7692
7693         if (DECL_CLASS_SCOPE_P (t))
7694           {
7695             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7696               member = 2;
7697             else
7698               member = 1;
7699             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
7700                                     complain, t, /*entering_scope=*/1);
7701           }
7702         else
7703           {
7704             member = 0;
7705             ctx = DECL_CONTEXT (t);
7706           }
7707         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7708         if (type == error_mark_node)
7709           return error_mark_node;
7710
7711         /* We do NOT check for matching decls pushed separately at this
7712            point, as they may not represent instantiations of this
7713            template, and in any case are considered separate under the
7714            discrete model.  */
7715         r = copy_decl (t);
7716         DECL_USE_TEMPLATE (r) = 0;
7717         TREE_TYPE (r) = type;
7718         /* Clear out the mangled name and RTL for the instantiation.  */
7719         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7720         SET_DECL_RTL (r, NULL_RTX);
7721         DECL_INITIAL (r) = NULL_TREE;
7722         DECL_CONTEXT (r) = ctx;
7723
7724         if (member && DECL_CONV_FN_P (r))
7725           /* Type-conversion operator.  Reconstruct the name, in
7726              case it's the name of one of the template's parameters.  */
7727           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
7728
7729         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
7730                                      complain, t);
7731         DECL_RESULT (r) = NULL_TREE;
7732
7733         TREE_STATIC (r) = 0;
7734         TREE_PUBLIC (r) = TREE_PUBLIC (t);
7735         DECL_EXTERNAL (r) = 1;
7736         /* If this is an instantiation of a function with internal
7737            linkage, we already know what object file linkage will be
7738            assigned to the instantiation.  */
7739         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
7740         DECL_DEFER_OUTPUT (r) = 0;
7741         TREE_CHAIN (r) = NULL_TREE;
7742         DECL_PENDING_INLINE_INFO (r) = 0;
7743         DECL_PENDING_INLINE_P (r) = 0;
7744         DECL_SAVED_TREE (r) = NULL_TREE;
7745         TREE_USED (r) = 0;
7746         if (DECL_CLONED_FUNCTION (r))
7747           {
7748             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
7749                                                args, complain, t);
7750             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7751             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7752           }
7753
7754         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
7755            this in the special friend case mentioned above where
7756            GEN_TMPL is NULL.  */
7757         if (gen_tmpl)
7758           {
7759             DECL_TEMPLATE_INFO (r)
7760               = tree_cons (gen_tmpl, argvec, NULL_TREE);
7761             SET_DECL_IMPLICIT_INSTANTIATION (r);
7762             register_specialization (r, gen_tmpl, argvec, false);
7763
7764             /* We're not supposed to instantiate default arguments
7765                until they are called, for a template.  But, for a
7766                declaration like:
7767
7768                  template <class T> void f ()
7769                  { extern void g(int i = T()); }
7770
7771                we should do the substitution when the template is
7772                instantiated.  We handle the member function case in
7773                instantiate_class_template since the default arguments
7774                might refer to other members of the class.  */
7775             if (!member
7776                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7777                 && !uses_template_parms (argvec))
7778               tsubst_default_arguments (r);
7779           }
7780         else
7781           DECL_TEMPLATE_INFO (r) = NULL_TREE;
7782
7783         /* Copy the list of befriending classes.  */
7784         for (friends = &DECL_BEFRIENDING_CLASSES (r);
7785              *friends;
7786              friends = &TREE_CHAIN (*friends))
7787           {
7788             *friends = copy_node (*friends);
7789             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
7790                                             args, complain,
7791                                             in_decl);
7792           }
7793
7794         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
7795           {
7796             maybe_retrofit_in_chrg (r);
7797             if (DECL_CONSTRUCTOR_P (r))
7798               grok_ctor_properties (ctx, r);
7799             /* If this is an instantiation of a member template, clone it.
7800                If it isn't, that'll be handled by
7801                clone_constructors_and_destructors.  */
7802             if (PRIMARY_TEMPLATE_P (gen_tmpl))
7803               clone_function_decl (r, /*update_method_vec_p=*/0);
7804           }
7805         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7806                  && !grok_op_properties (r, (complain & tf_error) != 0))
7807           return error_mark_node;
7808
7809         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7810           SET_DECL_FRIEND_CONTEXT (r,
7811                                    tsubst (DECL_FRIEND_CONTEXT (t),
7812                                             args, complain, in_decl));
7813
7814         /* Possibly limit visibility based on template args.  */
7815         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
7816         if (DECL_VISIBILITY_SPECIFIED (t))
7817           {
7818             DECL_VISIBILITY_SPECIFIED (r) = 0;
7819             DECL_ATTRIBUTES (r)
7820               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7821           }
7822         determine_visibility (r);
7823       }
7824       break;
7825
7826     case PARM_DECL:
7827       {
7828         tree type = NULL_TREE;
7829         int i, len = 1;
7830         tree expanded_types = NULL_TREE;
7831         tree prev_r = NULL_TREE;
7832         tree first_r = NULL_TREE;
7833
7834         if (FUNCTION_PARAMETER_PACK_P (t))
7835           {
7836             /* If there is a local specialization that isn't a
7837                parameter pack, it means that we're doing a "simple"
7838                substitution from inside tsubst_pack_expansion. Just
7839                return the local specialization (which will be a single
7840                parm).  */
7841             tree spec = NULL_TREE;
7842             if (local_specializations)
7843               spec = retrieve_local_specialization (t);
7844             if (spec 
7845                 && TREE_CODE (spec) == PARM_DECL
7846                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
7847               return spec;
7848
7849             /* Expand the TYPE_PACK_EXPANSION that provides the types for
7850                the parameters in this function parameter pack.  */
7851             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
7852                                                     complain, in_decl);
7853             if (TREE_CODE (expanded_types) == TREE_VEC)
7854               {
7855                 len = TREE_VEC_LENGTH (expanded_types);
7856
7857                 /* Zero-length parameter packs are boring. Just substitute
7858                    into the chain.  */
7859                 if (len == 0)
7860                   return tsubst (TREE_CHAIN (t), args, complain, 
7861                                  TREE_CHAIN (t));
7862               }
7863             else
7864               {
7865                 /* All we did was update the type. Make a note of that.  */
7866                 type = expanded_types;
7867                 expanded_types = NULL_TREE;
7868               }
7869           }
7870
7871         /* Loop through all of the parameter's we'll build. When T is
7872            a function parameter pack, LEN is the number of expanded
7873            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
7874         r = NULL_TREE;
7875         for (i = 0; i < len; ++i)
7876           {
7877             prev_r = r;
7878             r = copy_node (t);
7879             if (DECL_TEMPLATE_PARM_P (t))
7880               SET_DECL_TEMPLATE_PARM_P (r);
7881
7882             if (expanded_types)
7883               /* We're on the Ith parameter of the function parameter
7884                  pack.  */
7885               {
7886                 /* Get the Ith type.  */
7887                 type = TREE_VEC_ELT (expanded_types, i);
7888
7889                 if (DECL_NAME (r))
7890                   /* Rename the parameter to include the index.  */
7891                   DECL_NAME (r) =
7892                     make_ith_pack_parameter_name (DECL_NAME (r), i);
7893               }
7894             else if (!type)
7895               /* We're dealing with a normal parameter.  */
7896               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7897
7898             type = type_decays_to (type);
7899             TREE_TYPE (r) = type;
7900             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7901
7902             if (DECL_INITIAL (r))
7903               {
7904                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
7905                   DECL_INITIAL (r) = TREE_TYPE (r);
7906                 else
7907                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
7908                                              complain, in_decl);
7909               }
7910
7911             DECL_CONTEXT (r) = NULL_TREE;
7912
7913             if (!DECL_TEMPLATE_PARM_P (r))
7914               DECL_ARG_TYPE (r) = type_passed_as (type);
7915
7916             /* Keep track of the first new parameter we
7917                generate. That's what will be returned to the
7918                caller.  */
7919             if (!first_r)
7920               first_r = r;
7921
7922             /* Build a proper chain of parameters when substituting
7923                into a function parameter pack.  */
7924             if (prev_r)
7925               TREE_CHAIN (prev_r) = r;
7926           }
7927
7928         if (TREE_CHAIN (t))
7929           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
7930                                    complain, TREE_CHAIN (t));
7931
7932         /* FIRST_R contains the start of the chain we've built.  */
7933         r = first_r;
7934       }
7935       break;
7936
7937     case FIELD_DECL:
7938       {
7939         tree type;
7940
7941         r = copy_decl (t);
7942         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7943         if (type == error_mark_node)
7944           return error_mark_node;
7945         TREE_TYPE (r) = type;
7946         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7947
7948         /* DECL_INITIAL gives the number of bits in a bit-field.  */
7949         DECL_INITIAL (r)
7950           = tsubst_expr (DECL_INITIAL (t), args,
7951                          complain, in_decl,
7952                          /*integral_constant_expression_p=*/true);
7953         /* We don't have to set DECL_CONTEXT here; it is set by
7954            finish_member_declaration.  */
7955         TREE_CHAIN (r) = NULL_TREE;
7956         if (VOID_TYPE_P (type))
7957           error ("instantiation of %q+D as type %qT", r, type);
7958       }
7959       break;
7960
7961     case USING_DECL:
7962       /* We reach here only for member using decls.  */
7963       if (DECL_DEPENDENT_P (t))
7964         {
7965           r = do_class_using_decl
7966             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
7967              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
7968           if (!r)
7969             r = error_mark_node;
7970         }
7971       else
7972         {
7973           r = copy_node (t);
7974           TREE_CHAIN (r) = NULL_TREE;
7975         }
7976       break;
7977
7978     case TYPE_DECL:
7979     case VAR_DECL:
7980       {
7981         tree argvec = NULL_TREE;
7982         tree gen_tmpl = NULL_TREE;
7983         tree spec;
7984         tree tmpl = NULL_TREE;
7985         tree ctx;
7986         tree type = NULL_TREE;
7987         bool local_p;
7988
7989         if (TREE_CODE (t) == TYPE_DECL)
7990           {
7991             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7992             if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
7993                 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
7994               {
7995                 /* If this is the canonical decl, we don't have to
7996                    mess with instantiations, and often we can't (for
7997                    typename, template type parms and such).  Note that
7998                    TYPE_NAME is not correct for the above test if
7999                    we've copied the type for a typedef.  */
8000                 r = TYPE_NAME (type);
8001                 break;
8002               }
8003           }
8004
8005         /* Check to see if we already have the specialization we
8006            need.  */
8007         spec = NULL_TREE;
8008         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8009           {
8010             /* T is a static data member or namespace-scope entity.
8011                We have to substitute into namespace-scope variables
8012                (even though such entities are never templates) because
8013                of cases like:
8014                
8015                  template <class T> void f() { extern T t; }
8016
8017                where the entity referenced is not known until
8018                instantiation time.  */
8019             local_p = false;
8020             ctx = DECL_CONTEXT (t);
8021             if (DECL_CLASS_SCOPE_P (t))
8022               {
8023                 ctx = tsubst_aggr_type (ctx, args,
8024                                         complain,
8025                                         in_decl, /*entering_scope=*/1);
8026                 /* If CTX is unchanged, then T is in fact the
8027                    specialization we want.  That situation occurs when
8028                    referencing a static data member within in its own
8029                    class.  We can use pointer equality, rather than
8030                    same_type_p, because DECL_CONTEXT is always
8031                    canonical.  */
8032                 if (ctx == DECL_CONTEXT (t))
8033                   spec = t;
8034               }
8035
8036             if (!spec)
8037               {
8038                 tmpl = DECL_TI_TEMPLATE (t);
8039                 gen_tmpl = most_general_template (tmpl);
8040                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8041                 spec = (retrieve_specialization 
8042                         (gen_tmpl, argvec,
8043                          /*class_specializations_p=*/false));
8044               }
8045           }
8046         else
8047           {
8048             /* A local variable.  */
8049             local_p = true;
8050             /* Subsequent calls to pushdecl will fill this in.  */
8051             ctx = NULL_TREE;
8052             spec = retrieve_local_specialization (t);
8053           }
8054         /* If we already have the specialization we need, there is
8055            nothing more to do.  */ 
8056         if (spec)
8057           {
8058             r = spec;
8059             break;
8060           }
8061
8062         /* Create a new node for the specialization we need.  */
8063         r = copy_decl (t);
8064         if (TREE_CODE (r) == VAR_DECL)
8065           {
8066             /* Even if the original location is out of scope, the
8067                newly substituted one is not.  */
8068             DECL_DEAD_FOR_LOCAL (r) = 0;
8069             DECL_INITIALIZED_P (r) = 0;
8070             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8071             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8072             if (type == error_mark_node)
8073               return error_mark_node;
8074             if (TREE_CODE (type) == FUNCTION_TYPE)
8075               {
8076                 /* It may seem that this case cannot occur, since:
8077
8078                      typedef void f();
8079                      void g() { f x; }
8080
8081                    declares a function, not a variable.  However:
8082       
8083                      typedef void f();
8084                      template <typename T> void g() { T t; }
8085                      template void g<f>();
8086
8087                    is an attempt to declare a variable with function
8088                    type.  */
8089                 error ("variable %qD has function type",
8090                        /* R is not yet sufficiently initialized, so we
8091                           just use its name.  */
8092                        DECL_NAME (r));
8093                 return error_mark_node;
8094               }
8095             type = complete_type (type);
8096             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8097               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8098             type = check_var_type (DECL_NAME (r), type);
8099
8100             if (DECL_HAS_VALUE_EXPR_P (t))
8101               {
8102                 tree ve = DECL_VALUE_EXPR (t);
8103                 ve = tsubst_expr (ve, args, complain, in_decl,
8104                                   /*constant_expression_p=*/false);
8105                 SET_DECL_VALUE_EXPR (r, ve);
8106               }
8107           }
8108         else if (DECL_SELF_REFERENCE_P (t))
8109           SET_DECL_SELF_REFERENCE_P (r);
8110         TREE_TYPE (r) = type;
8111         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8112         DECL_CONTEXT (r) = ctx;
8113         /* Clear out the mangled name and RTL for the instantiation.  */
8114         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8115         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8116           SET_DECL_RTL (r, NULL_RTX);
8117         /* The initializer must not be expanded until it is required;
8118            see [temp.inst].  */
8119         DECL_INITIAL (r) = NULL_TREE;
8120         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8121           SET_DECL_RTL (r, NULL_RTX);
8122         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8123         if (TREE_CODE (r) == VAR_DECL)
8124           {
8125             /* Possibly limit visibility based on template args.  */
8126             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8127             if (DECL_VISIBILITY_SPECIFIED (t))
8128               {
8129                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8130                 DECL_ATTRIBUTES (r)
8131                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8132               }
8133             determine_visibility (r);
8134           }
8135
8136         if (!local_p)
8137           {
8138             /* A static data member declaration is always marked
8139                external when it is declared in-class, even if an
8140                initializer is present.  We mimic the non-template
8141                processing here.  */
8142             DECL_EXTERNAL (r) = 1;
8143
8144             register_specialization (r, gen_tmpl, argvec, false);
8145             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8146             SET_DECL_IMPLICIT_INSTANTIATION (r);
8147           }
8148         else
8149           register_local_specialization (r, t);
8150
8151         TREE_CHAIN (r) = NULL_TREE;
8152         layout_decl (r, 0);
8153       }
8154       break;
8155
8156     default:
8157       gcc_unreachable ();
8158     }
8159
8160   /* Restore the file and line information.  */
8161   input_location = saved_loc;
8162
8163   return r;
8164 }
8165
8166 /* Substitute into the ARG_TYPES of a function type.  */
8167
8168 static tree
8169 tsubst_arg_types (tree arg_types,
8170                   tree args,
8171                   tsubst_flags_t complain,
8172                   tree in_decl)
8173 {
8174   tree remaining_arg_types;
8175   tree type = NULL_TREE;
8176   int i = 1;
8177   tree expanded_args = NULL_TREE;
8178   tree default_arg;
8179
8180   if (!arg_types || arg_types == void_list_node)
8181     return arg_types;
8182
8183   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8184                                           args, complain, in_decl);
8185   if (remaining_arg_types == error_mark_node)
8186     return error_mark_node;
8187
8188   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8189     {
8190       /* For a pack expansion, perform substitution on the
8191          entire expression. Later on, we'll handle the arguments
8192          one-by-one.  */
8193       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8194                                             args, complain, in_decl);
8195
8196       if (TREE_CODE (expanded_args) == TREE_VEC)
8197         /* So that we'll spin through the parameters, one by one.  */
8198         i = TREE_VEC_LENGTH (expanded_args);
8199       else
8200         {
8201           /* We only partially substituted into the parameter
8202              pack. Our type is TYPE_PACK_EXPANSION.  */
8203           type = expanded_args;
8204           expanded_args = NULL_TREE;
8205         }
8206     }
8207
8208   while (i > 0) {
8209     --i;
8210     
8211     if (expanded_args)
8212       type = TREE_VEC_ELT (expanded_args, i);
8213     else if (!type)
8214       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8215
8216     if (type == error_mark_node)
8217       return error_mark_node;
8218     if (VOID_TYPE_P (type))
8219       {
8220         if (complain & tf_error)
8221           {
8222             error ("invalid parameter type %qT", type);
8223             if (in_decl)
8224               error ("in declaration %q+D", in_decl);
8225           }
8226         return error_mark_node;
8227     }
8228     
8229     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8230        top-level qualifiers as required.  */
8231     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8232
8233     /* We do not substitute into default arguments here.  The standard
8234        mandates that they be instantiated only when needed, which is
8235        done in build_over_call.  */
8236     default_arg = TREE_PURPOSE (arg_types);
8237
8238     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8239       {
8240         /* We've instantiated a template before its default arguments
8241            have been parsed.  This can happen for a nested template
8242            class, and is not an error unless we require the default
8243            argument in a call of this function.  */
8244         remaining_arg_types = 
8245           tree_cons (default_arg, type, remaining_arg_types);
8246         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8247                        remaining_arg_types);
8248       }
8249     else
8250       remaining_arg_types = 
8251         hash_tree_cons (default_arg, type, remaining_arg_types);
8252   }
8253         
8254   return remaining_arg_types;
8255 }
8256
8257 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8258    *not* handle the exception-specification for FNTYPE, because the
8259    initial substitution of explicitly provided template parameters
8260    during argument deduction forbids substitution into the
8261    exception-specification:
8262
8263      [temp.deduct]
8264
8265      All references in the function type of the function template to  the
8266      corresponding template parameters are replaced by the specified tem-
8267      plate argument values.  If a substitution in a template parameter or
8268      in  the function type of the function template results in an invalid
8269      type, type deduction fails.  [Note: The equivalent  substitution  in
8270      exception specifications is done only when the function is instanti-
8271      ated, at which point a program is  ill-formed  if  the  substitution
8272      results in an invalid type.]  */
8273
8274 static tree
8275 tsubst_function_type (tree t,
8276                       tree args,
8277                       tsubst_flags_t complain,
8278                       tree in_decl)
8279 {
8280   tree return_type;
8281   tree arg_types;
8282   tree fntype;
8283
8284   /* The TYPE_CONTEXT is not used for function/method types.  */
8285   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8286
8287   /* Substitute the return type.  */
8288   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8289   if (return_type == error_mark_node)
8290     return error_mark_node;
8291   /* The standard does not presently indicate that creation of a
8292      function type with an invalid return type is a deduction failure.
8293      However, that is clearly analogous to creating an array of "void"
8294      or a reference to a reference.  This is core issue #486.  */
8295   if (TREE_CODE (return_type) == ARRAY_TYPE
8296       || TREE_CODE (return_type) == FUNCTION_TYPE)
8297     {
8298       if (complain & tf_error)
8299         {
8300           if (TREE_CODE (return_type) == ARRAY_TYPE)
8301             error ("function returning an array");
8302           else
8303             error ("function returning a function");
8304         }
8305       return error_mark_node;
8306     }
8307
8308   /* Substitute the argument types.  */
8309   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8310                                 complain, in_decl);
8311   if (arg_types == error_mark_node)
8312     return error_mark_node;
8313
8314   if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8315       && in_decl != NULL_TREE
8316       && !TREE_NO_WARNING (in_decl)
8317       && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8318     warning (OPT_Wreturn_type,
8319             "type qualifiers ignored on function return type");
8320
8321   /* Construct a new type node and return it.  */
8322   if (TREE_CODE (t) == FUNCTION_TYPE)
8323     fntype = build_function_type (return_type, arg_types);
8324   else
8325     {
8326       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8327       if (! IS_AGGR_TYPE (r))
8328         {
8329           /* [temp.deduct]
8330
8331              Type deduction may fail for any of the following
8332              reasons:
8333
8334              -- Attempting to create "pointer to member of T" when T
8335              is not a class type.  */
8336           if (complain & tf_error)
8337             error ("creating pointer to member function of non-class type %qT",
8338                       r);
8339           return error_mark_node;
8340         }
8341
8342       fntype = build_method_type_directly (r, return_type,
8343                                            TREE_CHAIN (arg_types));
8344     }
8345   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8346   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8347
8348   return fntype;
8349 }
8350
8351 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8352    ARGS into that specification, and return the substituted
8353    specification.  If there is no specification, return NULL_TREE.  */
8354
8355 static tree
8356 tsubst_exception_specification (tree fntype,
8357                                 tree args,
8358                                 tsubst_flags_t complain,
8359                                 tree in_decl)
8360 {
8361   tree specs;
8362   tree new_specs;
8363
8364   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8365   new_specs = NULL_TREE;
8366   if (specs)
8367     {
8368       if (! TREE_VALUE (specs))
8369         new_specs = specs;
8370       else
8371         while (specs)
8372           {
8373             tree spec;
8374             int i, len = 1;
8375             tree expanded_specs = NULL_TREE;
8376
8377             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8378               {
8379                 /* Expand the pack expansion type.  */
8380                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8381                                                        args, complain,
8382                                                        in_decl);
8383                 len = TREE_VEC_LENGTH (expanded_specs);
8384               }
8385
8386             for (i = 0; i < len; ++i)
8387               {
8388                 if (expanded_specs)
8389                   spec = TREE_VEC_ELT (expanded_specs, i);
8390                 else
8391                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8392                 if (spec == error_mark_node)
8393                   return spec;
8394                 new_specs = add_exception_specifier (new_specs, spec, 
8395                                                      complain);
8396               }
8397
8398             specs = TREE_CHAIN (specs);
8399           }
8400     }
8401   return new_specs;
8402 }
8403
8404 /* Take the tree structure T and replace template parameters used
8405    therein with the argument vector ARGS.  IN_DECL is an associated
8406    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8407    Issue error and warning messages under control of COMPLAIN.  Note
8408    that we must be relatively non-tolerant of extensions here, in
8409    order to preserve conformance; if we allow substitutions that
8410    should not be allowed, we may allow argument deductions that should
8411    not succeed, and therefore report ambiguous overload situations
8412    where there are none.  In theory, we could allow the substitution,
8413    but indicate that it should have failed, and allow our caller to
8414    make sure that the right thing happens, but we don't try to do this
8415    yet.
8416
8417    This function is used for dealing with types, decls and the like;
8418    for expressions, use tsubst_expr or tsubst_copy.  */
8419
8420 static tree
8421 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8422 {
8423   tree type, r;
8424
8425   if (t == NULL_TREE || t == error_mark_node
8426       || t == integer_type_node
8427       || t == void_type_node
8428       || t == char_type_node
8429       || t == unknown_type_node
8430       || TREE_CODE (t) == NAMESPACE_DECL)
8431     return t;
8432
8433   if (DECL_P (t))
8434     return tsubst_decl (t, args, complain);
8435
8436   if (TREE_CODE (t) == IDENTIFIER_NODE)
8437     type = IDENTIFIER_TYPE_VALUE (t);
8438   else
8439     type = TREE_TYPE (t);
8440
8441   gcc_assert (type != unknown_type_node);
8442
8443   if (type
8444       && TREE_CODE (t) != TYPENAME_TYPE
8445       && TREE_CODE (t) != IDENTIFIER_NODE
8446       && TREE_CODE (t) != FUNCTION_TYPE
8447       && TREE_CODE (t) != METHOD_TYPE)
8448     type = tsubst (type, args, complain, in_decl);
8449   if (type == error_mark_node)
8450     return error_mark_node;
8451
8452   switch (TREE_CODE (t))
8453     {
8454     case RECORD_TYPE:
8455     case UNION_TYPE:
8456     case ENUMERAL_TYPE:
8457       return tsubst_aggr_type (t, args, complain, in_decl,
8458                                /*entering_scope=*/0);
8459
8460     case ERROR_MARK:
8461     case IDENTIFIER_NODE:
8462     case VOID_TYPE:
8463     case REAL_TYPE:
8464     case COMPLEX_TYPE:
8465     case VECTOR_TYPE:
8466     case BOOLEAN_TYPE:
8467     case INTEGER_CST:
8468     case REAL_CST:
8469     case STRING_CST:
8470       return t;
8471
8472     case INTEGER_TYPE:
8473       if (t == integer_type_node)
8474         return t;
8475
8476       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8477           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8478         return t;
8479
8480       {
8481         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8482
8483         max = tsubst_expr (omax, args, complain, in_decl,
8484                            /*integral_constant_expression_p=*/false);
8485         max = fold_decl_constant_value (max);
8486
8487         if (TREE_CODE (max) != INTEGER_CST 
8488             && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8489             && !at_function_scope_p ())
8490           {
8491             if (complain & tf_error)
8492               error ("array bound is not an integer constant");
8493             return error_mark_node;
8494           }
8495
8496         /* [temp.deduct]
8497
8498            Type deduction may fail for any of the following
8499            reasons:
8500
8501              Attempting to create an array with a size that is
8502              zero or negative.  */
8503         if (integer_zerop (max) && !(complain & tf_error))
8504           /* We must fail if performing argument deduction (as
8505              indicated by the state of complain), so that
8506              another substitution can be found.  */
8507           return error_mark_node;
8508         else if (TREE_CODE (max) == INTEGER_CST
8509                  && INT_CST_LT (max, integer_zero_node))
8510           {
8511             if (complain & tf_error)
8512               error ("creating array with negative size (%qE)", max);
8513
8514             return error_mark_node;
8515           }
8516
8517         return compute_array_index_type (NULL_TREE, max);
8518       }
8519
8520     case TEMPLATE_TYPE_PARM:
8521     case TEMPLATE_TEMPLATE_PARM:
8522     case BOUND_TEMPLATE_TEMPLATE_PARM:
8523     case TEMPLATE_PARM_INDEX:
8524       {
8525         int idx;
8526         int level;
8527         int levels;
8528         tree arg = NULL_TREE;
8529
8530         r = NULL_TREE;
8531
8532         gcc_assert (TREE_VEC_LENGTH (args) > 0);
8533         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8534             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
8535             || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8536           {
8537             idx = TEMPLATE_TYPE_IDX (t);
8538             level = TEMPLATE_TYPE_LEVEL (t);
8539           }
8540         else
8541           {
8542             idx = TEMPLATE_PARM_IDX (t);
8543             level = TEMPLATE_PARM_LEVEL (t);
8544           }
8545
8546         levels = TMPL_ARGS_DEPTH (args);
8547         if (level <= levels)
8548           {
8549             arg = TMPL_ARG (args, level, idx);
8550
8551             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8552               /* See through ARGUMENT_PACK_SELECT arguments. */
8553               arg = ARGUMENT_PACK_SELECT_ARG (arg);
8554           }
8555
8556         if (arg == error_mark_node)
8557           return error_mark_node;
8558         else if (arg != NULL_TREE)
8559           {
8560             if (ARGUMENT_PACK_P (arg))
8561               /* If ARG is an argument pack, we don't actually want to
8562                  perform a substitution here, because substitutions
8563                  for argument packs are only done
8564                  element-by-element. We can get to this point when
8565                  substituting the type of a non-type template
8566                  parameter pack, when that type actually contains
8567                  template parameter packs from an outer template, e.g.,
8568
8569                  template<typename... Types> struct A {
8570                    template<Types... Values> struct B { };
8571                  };  */
8572               return t;
8573
8574             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8575               {
8576                 int quals;
8577                 gcc_assert (TYPE_P (arg));
8578
8579                 /* cv-quals from the template are discarded when
8580                    substituting in a function or reference type.  */
8581                 if (TREE_CODE (arg) == FUNCTION_TYPE
8582                     || TREE_CODE (arg) == METHOD_TYPE
8583                     || TREE_CODE (arg) == REFERENCE_TYPE)
8584                   quals = cp_type_quals (arg);
8585                 else
8586                   quals = cp_type_quals (arg) | cp_type_quals (t);
8587                   
8588                 return cp_build_qualified_type_real
8589                   (arg, quals, complain | tf_ignore_bad_quals);
8590               }
8591             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8592               {
8593                 /* We are processing a type constructed from a
8594                    template template parameter.  */
8595                 tree argvec = tsubst (TYPE_TI_ARGS (t),
8596                                       args, complain, in_decl);
8597                 if (argvec == error_mark_node)
8598                   return error_mark_node;
8599
8600                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8601                    are resolving nested-types in the signature of a
8602                    member function templates.  Otherwise ARG is a
8603                    TEMPLATE_DECL and is the real template to be
8604                    instantiated.  */
8605                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8606                   arg = TYPE_NAME (arg);
8607
8608                 r = lookup_template_class (arg,
8609                                            argvec, in_decl,
8610                                            DECL_CONTEXT (arg),
8611                                             /*entering_scope=*/0,
8612                                            complain);
8613                 return cp_build_qualified_type_real
8614                   (r, TYPE_QUALS (t), complain);
8615               }
8616             else
8617               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
8618               return arg;
8619           }
8620
8621         if (level == 1)
8622           /* This can happen during the attempted tsubst'ing in
8623              unify.  This means that we don't yet have any information
8624              about the template parameter in question.  */
8625           return t;
8626
8627         /* If we get here, we must have been looking at a parm for a
8628            more deeply nested template.  Make a new version of this
8629            template parameter, but with a lower level.  */
8630         switch (TREE_CODE (t))
8631           {
8632           case TEMPLATE_TYPE_PARM:
8633           case TEMPLATE_TEMPLATE_PARM:
8634           case BOUND_TEMPLATE_TEMPLATE_PARM:
8635             if (cp_type_quals (t))
8636               {
8637                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
8638                 r = cp_build_qualified_type_real
8639                   (r, cp_type_quals (t),
8640                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8641                                ? tf_ignore_bad_quals : 0));
8642               }
8643             else
8644               {
8645                 r = copy_type (t);
8646                 TEMPLATE_TYPE_PARM_INDEX (r)
8647                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8648                                                 r, levels);
8649                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8650                 TYPE_MAIN_VARIANT (r) = r;
8651                 TYPE_POINTER_TO (r) = NULL_TREE;
8652                 TYPE_REFERENCE_TO (r) = NULL_TREE;
8653
8654                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8655                   /* We have reduced the level of the template
8656                      template parameter, but not the levels of its
8657                      template parameters, so canonical_type_parameter
8658                      will not be able to find the canonical template
8659                      template parameter for this level. Thus, we
8660                      require structural equality checking to compare
8661                      TEMPLATE_TEMPLATE_PARMs. */
8662                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8663                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8664                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8665                 else
8666                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
8667
8668                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8669                   {
8670                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
8671                                           complain, in_decl);
8672                     if (argvec == error_mark_node)
8673                       return error_mark_node;
8674
8675                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8676                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8677                   }
8678               }
8679             break;
8680
8681           case TEMPLATE_PARM_INDEX:
8682             r = reduce_template_parm_level (t, type, levels);
8683             break;
8684
8685           default:
8686             gcc_unreachable ();
8687           }
8688
8689         return r;
8690       }
8691
8692     case TREE_LIST:
8693       {
8694         tree purpose, value, chain;
8695
8696         if (t == void_list_node)
8697           return t;
8698
8699         purpose = TREE_PURPOSE (t);
8700         if (purpose)
8701           {
8702             purpose = tsubst (purpose, args, complain, in_decl);
8703             if (purpose == error_mark_node)
8704               return error_mark_node;
8705           }
8706         value = TREE_VALUE (t);
8707         if (value)
8708           {
8709             value = tsubst (value, args, complain, in_decl);
8710             if (value == error_mark_node)
8711               return error_mark_node;
8712           }
8713         chain = TREE_CHAIN (t);
8714         if (chain && chain != void_type_node)
8715           {
8716             chain = tsubst (chain, args, complain, in_decl);
8717             if (chain == error_mark_node)
8718               return error_mark_node;
8719           }
8720         if (purpose == TREE_PURPOSE (t)
8721             && value == TREE_VALUE (t)
8722             && chain == TREE_CHAIN (t))
8723           return t;
8724         return hash_tree_cons (purpose, value, chain);
8725       }
8726
8727     case TREE_BINFO:
8728       /* We should never be tsubsting a binfo.  */
8729       gcc_unreachable ();
8730
8731     case TREE_VEC:
8732       /* A vector of template arguments.  */
8733       gcc_assert (!type);
8734       return tsubst_template_args (t, args, complain, in_decl);
8735
8736     case POINTER_TYPE:
8737     case REFERENCE_TYPE:
8738       {
8739         enum tree_code code;
8740
8741         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8742           return t;
8743
8744         code = TREE_CODE (t);
8745
8746
8747         /* [temp.deduct]
8748
8749            Type deduction may fail for any of the following
8750            reasons:
8751
8752            -- Attempting to create a pointer to reference type.
8753            -- Attempting to create a reference to a reference type or
8754               a reference to void.
8755
8756           Core issue 106 says that creating a reference to a reference
8757           during instantiation is no longer a cause for failure. We
8758           only enforce this check in strict C++98 mode.  */
8759         if ((TREE_CODE (type) == REFERENCE_TYPE
8760              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
8761             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
8762           {
8763             static location_t last_loc;
8764
8765             /* We keep track of the last time we issued this error
8766                message to avoid spewing a ton of messages during a
8767                single bad template instantiation.  */
8768             if (complain & tf_error
8769 #ifdef USE_MAPPED_LOCATION
8770                 && last_loc != input_location
8771 #else
8772                 && (last_loc.line != input_line
8773                     || last_loc.file != input_filename)
8774 #endif
8775                   )
8776               {
8777                 if (TREE_CODE (type) == VOID_TYPE)
8778                   error ("forming reference to void");
8779                 else
8780                   error ("forming %s to reference type %qT",
8781                          (code == POINTER_TYPE) ? "pointer" : "reference",
8782                          type);
8783                 last_loc = input_location;
8784               }
8785
8786             return error_mark_node;
8787           }
8788         else if (code == POINTER_TYPE)
8789           {
8790             r = build_pointer_type (type);
8791             if (TREE_CODE (type) == METHOD_TYPE)
8792               r = build_ptrmemfunc_type (r);
8793           }
8794         else if (TREE_CODE (type) == REFERENCE_TYPE)
8795           /* In C++0x, during template argument substitution, when there is an
8796              attempt to create a reference to a reference type, reference
8797              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8798
8799              "If a template-argument for a template-parameter T names a type
8800              that is a reference to a type A, an attempt to create the type
8801              'lvalue reference to cv T' creates the type 'lvalue reference to
8802              A,' while an attempt to create the type type rvalue reference to
8803              cv T' creates the type T"
8804           */
8805           r = cp_build_reference_type
8806               (TREE_TYPE (type),
8807                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
8808         else
8809           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
8810         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8811
8812         if (r != error_mark_node)
8813           /* Will this ever be needed for TYPE_..._TO values?  */
8814           layout_type (r);
8815
8816         return r;
8817       }
8818     case OFFSET_TYPE:
8819       {
8820         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
8821         if (r == error_mark_node || !IS_AGGR_TYPE (r))
8822           {
8823             /* [temp.deduct]
8824
8825                Type deduction may fail for any of the following
8826                reasons:
8827
8828                -- Attempting to create "pointer to member of T" when T
8829                   is not a class type.  */
8830             if (complain & tf_error)
8831               error ("creating pointer to member of non-class type %qT", r);
8832             return error_mark_node;
8833           }
8834         if (TREE_CODE (type) == REFERENCE_TYPE)
8835           {
8836             if (complain & tf_error)
8837               error ("creating pointer to member reference type %qT", type);
8838             return error_mark_node;
8839           }
8840         if (TREE_CODE (type) == VOID_TYPE)
8841           {
8842             if (complain & tf_error)
8843               error ("creating pointer to member of type void");
8844             return error_mark_node;
8845           }
8846         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
8847         if (TREE_CODE (type) == FUNCTION_TYPE)
8848           {
8849             /* The type of the implicit object parameter gets its
8850                cv-qualifiers from the FUNCTION_TYPE. */
8851             tree method_type;
8852             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
8853                                                       cp_type_quals (type));
8854             tree memptr;
8855             method_type = build_method_type_directly (this_type,
8856                                                       TREE_TYPE (type),
8857                                                       TYPE_ARG_TYPES (type));
8858             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
8859             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
8860                                                  complain);
8861           }
8862         else
8863           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
8864                                                TYPE_QUALS (t),
8865                                                complain);
8866       }
8867     case FUNCTION_TYPE:
8868     case METHOD_TYPE:
8869       {
8870         tree fntype;
8871         tree specs;
8872         fntype = tsubst_function_type (t, args, complain, in_decl);
8873         if (fntype == error_mark_node)
8874           return error_mark_node;
8875
8876         /* Substitute the exception specification.  */
8877         specs = tsubst_exception_specification (t, args, complain,
8878                                                 in_decl);
8879         if (specs == error_mark_node)
8880           return error_mark_node;
8881         if (specs)
8882           fntype = build_exception_variant (fntype, specs);
8883         return fntype;
8884       }
8885     case ARRAY_TYPE:
8886       {
8887         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
8888         if (domain == error_mark_node)
8889           return error_mark_node;
8890
8891         /* As an optimization, we avoid regenerating the array type if
8892            it will obviously be the same as T.  */
8893         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
8894           return t;
8895
8896         /* These checks should match the ones in grokdeclarator.
8897
8898            [temp.deduct]
8899
8900            The deduction may fail for any of the following reasons:
8901
8902            -- Attempting to create an array with an element type that
8903               is void, a function type, or a reference type, or [DR337]
8904               an abstract class type.  */
8905         if (TREE_CODE (type) == VOID_TYPE
8906             || TREE_CODE (type) == FUNCTION_TYPE
8907             || TREE_CODE (type) == REFERENCE_TYPE)
8908           {
8909             if (complain & tf_error)
8910               error ("creating array of %qT", type);
8911             return error_mark_node;
8912           }
8913         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
8914           {
8915             if (complain & tf_error)
8916               error ("creating array of %qT, which is an abstract class type",
8917                      type);
8918             return error_mark_node;
8919           }
8920
8921         r = build_cplus_array_type (type, domain);
8922         return r;
8923       }
8924
8925     case PLUS_EXPR:
8926     case MINUS_EXPR:
8927       {
8928         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8929         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
8930
8931         if (e1 == error_mark_node || e2 == error_mark_node)
8932           return error_mark_node;
8933
8934         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
8935       }
8936
8937     case NEGATE_EXPR:
8938     case NOP_EXPR:
8939       {
8940         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8941         if (e == error_mark_node)
8942           return error_mark_node;
8943
8944         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
8945       }
8946
8947     case TYPENAME_TYPE:
8948       {
8949         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
8950                                      in_decl, /*entering_scope=*/1);
8951         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
8952                               complain, in_decl);
8953
8954         if (ctx == error_mark_node || f == error_mark_node)
8955           return error_mark_node;
8956
8957         if (!IS_AGGR_TYPE (ctx))
8958           {
8959             if (complain & tf_error)
8960               error ("%qT is not a class, struct, or union type", ctx);
8961             return error_mark_node;
8962           }
8963         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
8964           {
8965             /* Normally, make_typename_type does not require that the CTX
8966                have complete type in order to allow things like:
8967
8968                  template <class T> struct S { typename S<T>::X Y; };
8969
8970                But, such constructs have already been resolved by this
8971                point, so here CTX really should have complete type, unless
8972                it's a partial instantiation.  */
8973             ctx = complete_type (ctx);
8974             if (!COMPLETE_TYPE_P (ctx))
8975               {
8976                 if (complain & tf_error)
8977                   cxx_incomplete_type_error (NULL_TREE, ctx);
8978                 return error_mark_node;
8979               }
8980           }
8981
8982         f = make_typename_type (ctx, f, typename_type,
8983                                 (complain & tf_error) | tf_keep_type_decl);
8984         if (f == error_mark_node)
8985           return f;
8986         if (TREE_CODE (f) == TYPE_DECL)
8987           {
8988             complain |= tf_ignore_bad_quals;
8989             f = TREE_TYPE (f);
8990           }
8991
8992         if (TREE_CODE (f) != TYPENAME_TYPE)
8993           {
8994             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
8995               error ("%qT resolves to %qT, which is not an enumeration type",
8996                      t, f);
8997             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
8998               error ("%qT resolves to %qT, which is is not a class type",
8999                      t, f);
9000           }
9001
9002         return cp_build_qualified_type_real
9003           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9004       }
9005
9006     case UNBOUND_CLASS_TEMPLATE:
9007       {
9008         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9009                                      in_decl, /*entering_scope=*/1);
9010         tree name = TYPE_IDENTIFIER (t);
9011         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9012
9013         if (ctx == error_mark_node || name == error_mark_node)
9014           return error_mark_node;
9015
9016         if (parm_list)
9017           parm_list = tsubst_template_parms (parm_list, args, complain);
9018         return make_unbound_class_template (ctx, name, parm_list, complain);
9019       }
9020
9021     case INDIRECT_REF:
9022     case ADDR_EXPR:
9023     case CALL_EXPR:
9024       gcc_unreachable ();
9025
9026     case ARRAY_REF:
9027       {
9028         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9029         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9030                                /*integral_constant_expression_p=*/false);
9031         if (e1 == error_mark_node || e2 == error_mark_node)
9032           return error_mark_node;
9033
9034         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9035       }
9036
9037     case SCOPE_REF:
9038       {
9039         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9040         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9041         if (e1 == error_mark_node || e2 == error_mark_node)
9042           return error_mark_node;
9043
9044         return build_qualified_name (/*type=*/NULL_TREE,
9045                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9046       }
9047
9048     case TYPEOF_TYPE:
9049       {
9050         tree type;
9051
9052         type = finish_typeof (tsubst_expr 
9053                               (TYPEOF_TYPE_EXPR (t), args,
9054                                complain, in_decl,
9055                                /*integral_constant_expression_p=*/false));
9056         return cp_build_qualified_type_real (type,
9057                                              cp_type_quals (t)
9058                                              | cp_type_quals (type),
9059                                              complain);
9060       }
9061
9062     case DECLTYPE_TYPE:
9063       {
9064         tree type;
9065
9066         type = 
9067           finish_decltype_type (tsubst_expr 
9068                                 (DECLTYPE_TYPE_EXPR (t), args,
9069                                  complain, in_decl,
9070                                  /*integral_constant_expression_p=*/false),
9071                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9072         return cp_build_qualified_type_real (type,
9073                                              cp_type_quals (t)
9074                                              | cp_type_quals (type),
9075                                              complain);
9076       }
9077
9078     case TYPE_ARGUMENT_PACK:
9079     case NONTYPE_ARGUMENT_PACK:
9080       {
9081         tree r = make_node (TREE_CODE (t));
9082         tree packed_out = 
9083           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9084                                 args,
9085                                 complain,
9086                                 in_decl);
9087         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9088
9089         /* For template nontype argument packs, also substitute into
9090            the type.  */
9091         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9092           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9093
9094         return r;
9095       }
9096       break;
9097
9098     default:
9099       sorry ("use of %qs in template",
9100              tree_code_name [(int) TREE_CODE (t)]);
9101       return error_mark_node;
9102     }
9103 }
9104
9105 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9106    type of the expression on the left-hand side of the "." or "->"
9107    operator.  */
9108
9109 static tree
9110 tsubst_baselink (tree baselink, tree object_type,
9111                  tree args, tsubst_flags_t complain, tree in_decl)
9112 {
9113     tree name;
9114     tree qualifying_scope;
9115     tree fns;
9116     tree optype;
9117     tree template_args = 0;
9118     bool template_id_p = false;
9119
9120     /* A baselink indicates a function from a base class.  Both the
9121        BASELINK_ACCESS_BINFO and the base class referenced may
9122        indicate bases of the template class, rather than the
9123        instantiated class.  In addition, lookups that were not
9124        ambiguous before may be ambiguous now.  Therefore, we perform
9125        the lookup again.  */
9126     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9127     qualifying_scope = tsubst (qualifying_scope, args,
9128                                complain, in_decl);
9129     fns = BASELINK_FUNCTIONS (baselink);
9130     optype = BASELINK_OPTYPE (baselink);
9131     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9132       {
9133         template_id_p = true;
9134         template_args = TREE_OPERAND (fns, 1);
9135         fns = TREE_OPERAND (fns, 0);
9136         if (template_args)
9137           template_args = tsubst_template_args (template_args, args,
9138                                                 complain, in_decl);
9139       }
9140     name = DECL_NAME (get_first_fn (fns));
9141     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9142
9143     /* If lookup found a single function, mark it as used at this
9144        point.  (If it lookup found multiple functions the one selected
9145        later by overload resolution will be marked as used at that
9146        point.)  */
9147     if (BASELINK_P (baselink))
9148       fns = BASELINK_FUNCTIONS (baselink);
9149     if (!template_id_p && !really_overloaded_fn (fns))
9150       mark_used (OVL_CURRENT (fns));
9151
9152     /* Add back the template arguments, if present.  */
9153     if (BASELINK_P (baselink) && template_id_p)
9154       BASELINK_FUNCTIONS (baselink)
9155         = build_nt (TEMPLATE_ID_EXPR,
9156                     BASELINK_FUNCTIONS (baselink),
9157                     template_args);
9158     /* Update the conversion operator type.  */
9159     BASELINK_OPTYPE (baselink) 
9160       = tsubst (optype, args, complain, in_decl);
9161
9162     if (!object_type)
9163       object_type = current_class_type;
9164     return adjust_result_of_qualified_name_lookup (baselink,
9165                                                    qualifying_scope,
9166                                                    object_type);
9167 }
9168
9169 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9170    true if the qualified-id will be a postfix-expression in-and-of
9171    itself; false if more of the postfix-expression follows the
9172    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9173    of "&".  */
9174
9175 static tree
9176 tsubst_qualified_id (tree qualified_id, tree args,
9177                      tsubst_flags_t complain, tree in_decl,
9178                      bool done, bool address_p)
9179 {
9180   tree expr;
9181   tree scope;
9182   tree name;
9183   bool is_template;
9184   tree template_args;
9185
9186   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9187
9188   /* Figure out what name to look up.  */
9189   name = TREE_OPERAND (qualified_id, 1);
9190   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9191     {
9192       is_template = true;
9193       template_args = TREE_OPERAND (name, 1);
9194       if (template_args)
9195         template_args = tsubst_template_args (template_args, args,
9196                                               complain, in_decl);
9197       name = TREE_OPERAND (name, 0);
9198     }
9199   else
9200     {
9201       is_template = false;
9202       template_args = NULL_TREE;
9203     }
9204
9205   /* Substitute into the qualifying scope.  When there are no ARGS, we
9206      are just trying to simplify a non-dependent expression.  In that
9207      case the qualifying scope may be dependent, and, in any case,
9208      substituting will not help.  */
9209   scope = TREE_OPERAND (qualified_id, 0);
9210   if (args)
9211     {
9212       scope = tsubst (scope, args, complain, in_decl);
9213       expr = tsubst_copy (name, args, complain, in_decl);
9214     }
9215   else
9216     expr = name;
9217
9218   if (dependent_type_p (scope))
9219     return build_qualified_name (/*type=*/NULL_TREE,
9220                                  scope, expr,
9221                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9222
9223   if (!BASELINK_P (name) && !DECL_P (expr))
9224     {
9225       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9226         /* If this were actually a destructor call, it would have been
9227            parsed as such by the parser.  */
9228         expr = error_mark_node;
9229       else
9230         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9231       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9232                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9233         {
9234           if (complain & tf_error)
9235             {
9236               error ("dependent-name %qE is parsed as a non-type, but "
9237                      "instantiation yields a type", qualified_id);
9238               inform ("say %<typename %E%> if a type is meant", qualified_id);
9239             }
9240           return error_mark_node;
9241         }
9242     }
9243
9244   if (DECL_P (expr))
9245     {
9246       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9247                                            scope);
9248       /* Remember that there was a reference to this entity.  */
9249       mark_used (expr);
9250     }
9251
9252   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9253     {
9254       if (complain & tf_error)
9255         qualified_name_lookup_error (scope,
9256                                      TREE_OPERAND (qualified_id, 1),
9257                                      expr);
9258       return error_mark_node;
9259     }
9260
9261   if (is_template)
9262     expr = lookup_template_function (expr, template_args);
9263
9264   if (expr == error_mark_node && complain & tf_error)
9265     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9266                                  expr);
9267   else if (TYPE_P (scope))
9268     {
9269       expr = (adjust_result_of_qualified_name_lookup
9270               (expr, scope, current_class_type));
9271       expr = (finish_qualified_id_expr
9272               (scope, expr, done, address_p,
9273                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9274                /*template_arg_p=*/false));
9275     }
9276
9277   /* Expressions do not generally have reference type.  */
9278   if (TREE_CODE (expr) != SCOPE_REF
9279       /* However, if we're about to form a pointer-to-member, we just
9280          want the referenced member referenced.  */
9281       && TREE_CODE (expr) != OFFSET_REF)
9282     expr = convert_from_reference (expr);
9283
9284   return expr;
9285 }
9286
9287 /* Like tsubst, but deals with expressions.  This function just replaces
9288    template parms; to finish processing the resultant expression, use
9289    tsubst_expr.  */
9290
9291 static tree
9292 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9293 {
9294   enum tree_code code;
9295   tree r;
9296
9297   if (t == NULL_TREE || t == error_mark_node)
9298     return t;
9299
9300   code = TREE_CODE (t);
9301
9302   switch (code)
9303     {
9304     case PARM_DECL:
9305       r = retrieve_local_specialization (t);
9306       gcc_assert (r != NULL);
9307       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9308         r = ARGUMENT_PACK_SELECT_ARG (r);
9309       mark_used (r);
9310       return r;
9311
9312     case CONST_DECL:
9313       {
9314         tree enum_type;
9315         tree v;
9316
9317         if (DECL_TEMPLATE_PARM_P (t))
9318           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9319         /* There is no need to substitute into namespace-scope
9320            enumerators.  */
9321         if (DECL_NAMESPACE_SCOPE_P (t))
9322           return t;
9323         /* If ARGS is NULL, then T is known to be non-dependent.  */
9324         if (args == NULL_TREE)
9325           return integral_constant_value (t);
9326
9327         /* Unfortunately, we cannot just call lookup_name here.
9328            Consider:
9329
9330              template <int I> int f() {
9331              enum E { a = I };
9332              struct S { void g() { E e = a; } };
9333              };
9334
9335            When we instantiate f<7>::S::g(), say, lookup_name is not
9336            clever enough to find f<7>::a.  */
9337         enum_type
9338           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9339                               /*entering_scope=*/0);
9340
9341         for (v = TYPE_VALUES (enum_type);
9342              v != NULL_TREE;
9343              v = TREE_CHAIN (v))
9344           if (TREE_PURPOSE (v) == DECL_NAME (t))
9345             return TREE_VALUE (v);
9346
9347           /* We didn't find the name.  That should never happen; if
9348              name-lookup found it during preliminary parsing, we
9349              should find it again here during instantiation.  */
9350         gcc_unreachable ();
9351       }
9352       return t;
9353
9354     case FIELD_DECL:
9355       if (DECL_CONTEXT (t))
9356         {
9357           tree ctx;
9358
9359           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9360                                   /*entering_scope=*/1);
9361           if (ctx != DECL_CONTEXT (t))
9362             {
9363               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9364               if (!r)
9365                 {
9366                   if (complain & tf_error)
9367                     error ("using invalid field %qD", t);
9368                   return error_mark_node;
9369                 }
9370               return r;
9371             }
9372         }
9373
9374       return t;
9375
9376     case VAR_DECL:
9377     case FUNCTION_DECL:
9378       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9379           || local_variable_p (t))
9380         t = tsubst (t, args, complain, in_decl);
9381       mark_used (t);
9382       return t;
9383
9384     case BASELINK:
9385       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9386
9387     case TEMPLATE_DECL:
9388       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9389         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9390                        args, complain, in_decl);
9391       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9392         return tsubst (t, args, complain, in_decl);
9393       else if (DECL_CLASS_SCOPE_P (t)
9394                && uses_template_parms (DECL_CONTEXT (t)))
9395         {
9396           /* Template template argument like the following example need
9397              special treatment:
9398
9399                template <template <class> class TT> struct C {};
9400                template <class T> struct D {
9401                  template <class U> struct E {};
9402                  C<E> c;                                // #1
9403                };
9404                D<int> d;                                // #2
9405
9406              We are processing the template argument `E' in #1 for
9407              the template instantiation #2.  Originally, `E' is a
9408              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9409              have to substitute this with one having context `D<int>'.  */
9410
9411           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9412           return lookup_field (context, DECL_NAME(t), 0, false);
9413         }
9414       else
9415         /* Ordinary template template argument.  */
9416         return t;
9417
9418     case CAST_EXPR:
9419     case REINTERPRET_CAST_EXPR:
9420     case CONST_CAST_EXPR:
9421     case STATIC_CAST_EXPR:
9422     case DYNAMIC_CAST_EXPR:
9423     case NOP_EXPR:
9424       return build1
9425         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9426          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9427
9428     case SIZEOF_EXPR:
9429       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9430         {
9431           /* We only want to compute the number of arguments.  */
9432           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9433                                                 complain, in_decl);
9434           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9435         }
9436       /* Fall through */
9437
9438     case INDIRECT_REF:
9439     case NEGATE_EXPR:
9440     case TRUTH_NOT_EXPR:
9441     case BIT_NOT_EXPR:
9442     case ADDR_EXPR:
9443     case UNARY_PLUS_EXPR:      /* Unary + */
9444     case ALIGNOF_EXPR:
9445     case ARROW_EXPR:
9446     case THROW_EXPR:
9447     case TYPEID_EXPR:
9448     case REALPART_EXPR:
9449     case IMAGPART_EXPR:
9450       return build1
9451         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9452          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9453
9454     case COMPONENT_REF:
9455       {
9456         tree object;
9457         tree name;
9458
9459         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9460         name = TREE_OPERAND (t, 1);
9461         if (TREE_CODE (name) == BIT_NOT_EXPR)
9462           {
9463             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9464                                 complain, in_decl);
9465             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9466           }
9467         else if (TREE_CODE (name) == SCOPE_REF
9468                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9469           {
9470             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9471                                      complain, in_decl);
9472             name = TREE_OPERAND (name, 1);
9473             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9474                                 complain, in_decl);
9475             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9476             name = build_qualified_name (/*type=*/NULL_TREE,
9477                                          base, name,
9478                                          /*template_p=*/false);
9479           }
9480         else if (TREE_CODE (name) == BASELINK)
9481           name = tsubst_baselink (name,
9482                                   non_reference (TREE_TYPE (object)),
9483                                   args, complain,
9484                                   in_decl);
9485         else
9486           name = tsubst_copy (name, args, complain, in_decl);
9487         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9488       }
9489
9490     case PLUS_EXPR:
9491     case MINUS_EXPR:
9492     case MULT_EXPR:
9493     case TRUNC_DIV_EXPR:
9494     case CEIL_DIV_EXPR:
9495     case FLOOR_DIV_EXPR:
9496     case ROUND_DIV_EXPR:
9497     case EXACT_DIV_EXPR:
9498     case BIT_AND_EXPR:
9499     case BIT_IOR_EXPR:
9500     case BIT_XOR_EXPR:
9501     case TRUNC_MOD_EXPR:
9502     case FLOOR_MOD_EXPR:
9503     case TRUTH_ANDIF_EXPR:
9504     case TRUTH_ORIF_EXPR:
9505     case TRUTH_AND_EXPR:
9506     case TRUTH_OR_EXPR:
9507     case RSHIFT_EXPR:
9508     case LSHIFT_EXPR:
9509     case RROTATE_EXPR:
9510     case LROTATE_EXPR:
9511     case EQ_EXPR:
9512     case NE_EXPR:
9513     case MAX_EXPR:
9514     case MIN_EXPR:
9515     case LE_EXPR:
9516     case GE_EXPR:
9517     case LT_EXPR:
9518     case GT_EXPR:
9519     case COMPOUND_EXPR:
9520     case DOTSTAR_EXPR:
9521     case MEMBER_REF:
9522     case PREDECREMENT_EXPR:
9523     case PREINCREMENT_EXPR:
9524     case POSTDECREMENT_EXPR:
9525     case POSTINCREMENT_EXPR:
9526       return build_nt
9527         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9528          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9529
9530     case SCOPE_REF:
9531       return build_qualified_name (/*type=*/NULL_TREE,
9532                                    tsubst_copy (TREE_OPERAND (t, 0),
9533                                                 args, complain, in_decl),
9534                                    tsubst_copy (TREE_OPERAND (t, 1),
9535                                                 args, complain, in_decl),
9536                                    QUALIFIED_NAME_IS_TEMPLATE (t));
9537
9538     case ARRAY_REF:
9539       return build_nt
9540         (ARRAY_REF,
9541          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9542          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9543          NULL_TREE, NULL_TREE);
9544
9545     case CALL_EXPR:
9546       {
9547         int n = VL_EXP_OPERAND_LENGTH (t);
9548         tree result = build_vl_exp (CALL_EXPR, n);
9549         int i;
9550         for (i = 0; i < n; i++)
9551           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9552                                              complain, in_decl);
9553         return result;
9554       }
9555
9556     case COND_EXPR:
9557     case MODOP_EXPR:
9558     case PSEUDO_DTOR_EXPR:
9559       {
9560         r = build_nt
9561           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9562            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9563            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9564         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9565         return r;
9566       }
9567
9568     case NEW_EXPR:
9569       {
9570         r = build_nt
9571         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9572          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9573          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9574         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9575         return r;
9576       }
9577
9578     case DELETE_EXPR:
9579       {
9580         r = build_nt
9581         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9582          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9583         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9584         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9585         return r;
9586       }
9587
9588     case TEMPLATE_ID_EXPR:
9589       {
9590         /* Substituted template arguments */
9591         tree fn = TREE_OPERAND (t, 0);
9592         tree targs = TREE_OPERAND (t, 1);
9593
9594         fn = tsubst_copy (fn, args, complain, in_decl);
9595         if (targs)
9596           targs = tsubst_template_args (targs, args, complain, in_decl);
9597
9598         return lookup_template_function (fn, targs);
9599       }
9600
9601     case TREE_LIST:
9602       {
9603         tree purpose, value, chain;
9604
9605         if (t == void_list_node)
9606           return t;
9607
9608         purpose = TREE_PURPOSE (t);
9609         if (purpose)
9610           purpose = tsubst_copy (purpose, args, complain, in_decl);
9611         value = TREE_VALUE (t);
9612         if (value)
9613           value = tsubst_copy (value, args, complain, in_decl);
9614         chain = TREE_CHAIN (t);
9615         if (chain && chain != void_type_node)
9616           chain = tsubst_copy (chain, args, complain, in_decl);
9617         if (purpose == TREE_PURPOSE (t)
9618             && value == TREE_VALUE (t)
9619             && chain == TREE_CHAIN (t))
9620           return t;
9621         return tree_cons (purpose, value, chain);
9622       }
9623
9624     case RECORD_TYPE:
9625     case UNION_TYPE:
9626     case ENUMERAL_TYPE:
9627     case INTEGER_TYPE:
9628     case TEMPLATE_TYPE_PARM:
9629     case TEMPLATE_TEMPLATE_PARM:
9630     case BOUND_TEMPLATE_TEMPLATE_PARM:
9631     case TEMPLATE_PARM_INDEX:
9632     case POINTER_TYPE:
9633     case REFERENCE_TYPE:
9634     case OFFSET_TYPE:
9635     case FUNCTION_TYPE:
9636     case METHOD_TYPE:
9637     case ARRAY_TYPE:
9638     case TYPENAME_TYPE:
9639     case UNBOUND_CLASS_TEMPLATE:
9640     case TYPEOF_TYPE:
9641     case DECLTYPE_TYPE:
9642     case TYPE_DECL:
9643       return tsubst (t, args, complain, in_decl);
9644
9645     case IDENTIFIER_NODE:
9646       if (IDENTIFIER_TYPENAME_P (t))
9647         {
9648           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9649           return mangle_conv_op_name_for_type (new_type);
9650         }
9651       else
9652         return t;
9653
9654     case CONSTRUCTOR:
9655       /* This is handled by tsubst_copy_and_build.  */
9656       gcc_unreachable ();
9657
9658     case VA_ARG_EXPR:
9659       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
9660                                           in_decl),
9661                              tsubst (TREE_TYPE (t), args, complain, in_decl));
9662
9663     case CLEANUP_POINT_EXPR:
9664       /* We shouldn't have built any of these during initial template
9665          generation.  Instead, they should be built during instantiation
9666          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
9667       gcc_unreachable ();
9668
9669     case OFFSET_REF:
9670       mark_used (TREE_OPERAND (t, 1));
9671       return t;
9672
9673     case EXPR_PACK_EXPANSION:
9674       error ("invalid use of pack expansion expression");
9675       return error_mark_node;
9676
9677     case NONTYPE_ARGUMENT_PACK:
9678       error ("use %<...%> to expand argument pack");
9679       return error_mark_node;
9680
9681     default:
9682       return t;
9683     }
9684 }
9685
9686 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
9687
9688 static tree
9689 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9690                     tree in_decl)
9691 {
9692   tree new_clauses = NULL, nc, oc;
9693
9694   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9695     {
9696       nc = copy_node (oc);
9697       OMP_CLAUSE_CHAIN (nc) = new_clauses;
9698       new_clauses = nc;
9699
9700       switch (OMP_CLAUSE_CODE (nc))
9701         {
9702         case OMP_CLAUSE_PRIVATE:
9703         case OMP_CLAUSE_SHARED:
9704         case OMP_CLAUSE_FIRSTPRIVATE:
9705         case OMP_CLAUSE_LASTPRIVATE:
9706         case OMP_CLAUSE_REDUCTION:
9707         case OMP_CLAUSE_COPYIN:
9708         case OMP_CLAUSE_COPYPRIVATE:
9709         case OMP_CLAUSE_IF:
9710         case OMP_CLAUSE_NUM_THREADS:
9711         case OMP_CLAUSE_SCHEDULE:
9712           OMP_CLAUSE_OPERAND (nc, 0)
9713             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
9714                            in_decl, /*integral_constant_expression_p=*/false);
9715           break;
9716         case OMP_CLAUSE_NOWAIT:
9717         case OMP_CLAUSE_ORDERED:
9718         case OMP_CLAUSE_DEFAULT:
9719           break;
9720         default:
9721           gcc_unreachable ();
9722         }
9723     }
9724
9725   return finish_omp_clauses (nreverse (new_clauses));
9726 }
9727
9728 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
9729
9730 static tree
9731 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9732                           tree in_decl)
9733 {
9734 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9735
9736   tree purpose, value, chain;
9737
9738   if (t == NULL)
9739     return t;
9740
9741   if (TREE_CODE (t) != TREE_LIST)
9742     return tsubst_copy_and_build (t, args, complain, in_decl,
9743                                   /*function_p=*/false,
9744                                   /*integral_constant_expression_p=*/false);
9745
9746   if (t == void_list_node)
9747     return t;
9748
9749   purpose = TREE_PURPOSE (t);
9750   if (purpose)
9751     purpose = RECUR (purpose);
9752   value = TREE_VALUE (t);
9753   if (value)
9754     value = RECUR (value);
9755   chain = TREE_CHAIN (t);
9756   if (chain && chain != void_type_node)
9757     chain = RECUR (chain);
9758   return tree_cons (purpose, value, chain);
9759 #undef RECUR
9760 }
9761
9762 /* Like tsubst_copy for expressions, etc. but also does semantic
9763    processing.  */
9764
9765 static tree
9766 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9767              bool integral_constant_expression_p)
9768 {
9769 #define RECUR(NODE)                             \
9770   tsubst_expr ((NODE), args, complain, in_decl, \
9771                integral_constant_expression_p)
9772
9773   tree stmt, tmp;
9774
9775   if (t == NULL_TREE || t == error_mark_node)
9776     return t;
9777
9778   if (EXPR_HAS_LOCATION (t))
9779     input_location = EXPR_LOCATION (t);
9780   if (STATEMENT_CODE_P (TREE_CODE (t)))
9781     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9782
9783   switch (TREE_CODE (t))
9784     {
9785     case STATEMENT_LIST:
9786       {
9787         tree_stmt_iterator i;
9788         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
9789           RECUR (tsi_stmt (i));
9790         break;
9791       }
9792
9793     case CTOR_INITIALIZER:
9794       finish_mem_initializers (tsubst_initializer_list
9795                                (TREE_OPERAND (t, 0), args));
9796       break;
9797
9798     case RETURN_EXPR:
9799       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
9800       break;
9801
9802     case EXPR_STMT:
9803       tmp = RECUR (EXPR_STMT_EXPR (t));
9804       if (EXPR_STMT_STMT_EXPR_RESULT (t))
9805         finish_stmt_expr_expr (tmp, cur_stmt_expr);
9806       else
9807         finish_expr_stmt (tmp);
9808       break;
9809
9810     case USING_STMT:
9811       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
9812       break;
9813
9814     case DECL_EXPR:
9815       {
9816         tree decl;
9817         tree init;
9818
9819         decl = DECL_EXPR_DECL (t);
9820         if (TREE_CODE (decl) == LABEL_DECL)
9821           finish_label_decl (DECL_NAME (decl));
9822         else if (TREE_CODE (decl) == USING_DECL)
9823           {
9824             tree scope = USING_DECL_SCOPE (decl);
9825             tree name = DECL_NAME (decl);
9826             tree decl;
9827
9828             scope = RECUR (scope);
9829             decl = lookup_qualified_name (scope, name,
9830                                           /*is_type_p=*/false,
9831                                           /*complain=*/false);
9832             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
9833               qualified_name_lookup_error (scope, name, decl);
9834             else
9835               do_local_using_decl (decl, scope, name);
9836           }
9837         else
9838           {
9839             init = DECL_INITIAL (decl);
9840             decl = tsubst (decl, args, complain, in_decl);
9841             if (decl != error_mark_node)
9842               {
9843                 /* By marking the declaration as instantiated, we avoid
9844                    trying to instantiate it.  Since instantiate_decl can't
9845                    handle local variables, and since we've already done
9846                    all that needs to be done, that's the right thing to
9847                    do.  */
9848                 if (TREE_CODE (decl) == VAR_DECL)
9849                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
9850                 if (TREE_CODE (decl) == VAR_DECL
9851                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
9852                   /* Anonymous aggregates are a special case.  */
9853                   finish_anon_union (decl);
9854                 else
9855                   {
9856                     maybe_push_decl (decl);
9857                     if (TREE_CODE (decl) == VAR_DECL
9858                         && DECL_PRETTY_FUNCTION_P (decl))
9859                       {
9860                         /* For __PRETTY_FUNCTION__ we have to adjust the
9861                            initializer.  */
9862                         const char *const name
9863                           = cxx_printable_name (current_function_decl, 2);
9864                         init = cp_fname_init (name, &TREE_TYPE (decl));
9865                       }
9866                     else
9867                       init = RECUR (init);
9868                     finish_decl (decl, init, NULL_TREE);
9869                   }
9870               }
9871           }
9872
9873         /* A DECL_EXPR can also be used as an expression, in the condition
9874            clause of an if/for/while construct.  */
9875         return decl;
9876       }
9877
9878     case FOR_STMT:
9879       stmt = begin_for_stmt ();
9880                           RECUR (FOR_INIT_STMT (t));
9881       finish_for_init_stmt (stmt);
9882       tmp = RECUR (FOR_COND (t));
9883       finish_for_cond (tmp, stmt);
9884       tmp = RECUR (FOR_EXPR (t));
9885       finish_for_expr (tmp, stmt);
9886       RECUR (FOR_BODY (t));
9887       finish_for_stmt (stmt);
9888       break;
9889
9890     case WHILE_STMT:
9891       stmt = begin_while_stmt ();
9892       tmp = RECUR (WHILE_COND (t));
9893       finish_while_stmt_cond (tmp, stmt);
9894       RECUR (WHILE_BODY (t));
9895       finish_while_stmt (stmt);
9896       break;
9897
9898     case DO_STMT:
9899       stmt = begin_do_stmt ();
9900       RECUR (DO_BODY (t));
9901       finish_do_body (stmt);
9902       tmp = RECUR (DO_COND (t));
9903       finish_do_stmt (tmp, stmt);
9904       break;
9905
9906     case IF_STMT:
9907       stmt = begin_if_stmt ();
9908       tmp = RECUR (IF_COND (t));
9909       finish_if_stmt_cond (tmp, stmt);
9910       RECUR (THEN_CLAUSE (t));
9911       finish_then_clause (stmt);
9912
9913       if (ELSE_CLAUSE (t))
9914         {
9915           begin_else_clause (stmt);
9916           RECUR (ELSE_CLAUSE (t));
9917           finish_else_clause (stmt);
9918         }
9919
9920       finish_if_stmt (stmt);
9921       break;
9922
9923     case BIND_EXPR:
9924       if (BIND_EXPR_BODY_BLOCK (t))
9925         stmt = begin_function_body ();
9926       else
9927         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
9928                                     ? BCS_TRY_BLOCK : 0);
9929
9930       RECUR (BIND_EXPR_BODY (t));
9931
9932       if (BIND_EXPR_BODY_BLOCK (t))
9933         finish_function_body (stmt);
9934       else
9935         finish_compound_stmt (stmt);
9936       break;
9937
9938     case BREAK_STMT:
9939       finish_break_stmt ();
9940       break;
9941
9942     case CONTINUE_STMT:
9943       finish_continue_stmt ();
9944       break;
9945
9946     case SWITCH_STMT:
9947       stmt = begin_switch_stmt ();
9948       tmp = RECUR (SWITCH_STMT_COND (t));
9949       finish_switch_cond (tmp, stmt);
9950       RECUR (SWITCH_STMT_BODY (t));
9951       finish_switch_stmt (stmt);
9952       break;
9953
9954     case CASE_LABEL_EXPR:
9955       finish_case_label (RECUR (CASE_LOW (t)),
9956                          RECUR (CASE_HIGH (t)));
9957       break;
9958
9959     case LABEL_EXPR:
9960       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
9961       break;
9962
9963     case GOTO_EXPR:
9964       tmp = GOTO_DESTINATION (t);
9965       if (TREE_CODE (tmp) != LABEL_DECL)
9966         /* Computed goto's must be tsubst'd into.  On the other hand,
9967            non-computed gotos must not be; the identifier in question
9968            will have no binding.  */
9969         tmp = RECUR (tmp);
9970       else
9971         tmp = DECL_NAME (tmp);
9972       finish_goto_stmt (tmp);
9973       break;
9974
9975     case ASM_EXPR:
9976       tmp = finish_asm_stmt
9977         (ASM_VOLATILE_P (t),
9978          RECUR (ASM_STRING (t)),
9979          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
9980          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
9981          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
9982       {
9983         tree asm_expr = tmp;
9984         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
9985           asm_expr = TREE_OPERAND (asm_expr, 0);
9986         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
9987       }
9988       break;
9989
9990     case TRY_BLOCK:
9991       if (CLEANUP_P (t))
9992         {
9993           stmt = begin_try_block ();
9994           RECUR (TRY_STMTS (t));
9995           finish_cleanup_try_block (stmt);
9996           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
9997         }
9998       else
9999         {
10000           tree compound_stmt = NULL_TREE;
10001
10002           if (FN_TRY_BLOCK_P (t))
10003             stmt = begin_function_try_block (&compound_stmt);
10004           else
10005             stmt = begin_try_block ();
10006
10007           RECUR (TRY_STMTS (t));
10008
10009           if (FN_TRY_BLOCK_P (t))
10010             finish_function_try_block (stmt);
10011           else
10012             finish_try_block (stmt);
10013
10014           RECUR (TRY_HANDLERS (t));
10015           if (FN_TRY_BLOCK_P (t))
10016             finish_function_handler_sequence (stmt, compound_stmt);
10017           else
10018             finish_handler_sequence (stmt);
10019         }
10020       break;
10021
10022     case HANDLER:
10023       {
10024         tree decl = HANDLER_PARMS (t);
10025
10026         if (decl)
10027           {
10028             decl = tsubst (decl, args, complain, in_decl);
10029             /* Prevent instantiate_decl from trying to instantiate
10030                this variable.  We've already done all that needs to be
10031                done.  */
10032             if (decl != error_mark_node)
10033               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10034           }
10035         stmt = begin_handler ();
10036         finish_handler_parms (decl, stmt);
10037         RECUR (HANDLER_BODY (t));
10038         finish_handler (stmt);
10039       }
10040       break;
10041
10042     case TAG_DEFN:
10043       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10044       break;
10045
10046     case STATIC_ASSERT:
10047       {
10048         tree condition = 
10049           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10050                        args,
10051                        complain, in_decl,
10052                        /*integral_constant_expression_p=*/true);
10053         finish_static_assert (condition,
10054                               STATIC_ASSERT_MESSAGE (t),
10055                               STATIC_ASSERT_SOURCE_LOCATION (t),
10056                               /*member_p=*/false);
10057       }
10058       break;
10059
10060     case OMP_PARALLEL:
10061       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10062                                 args, complain, in_decl);
10063       stmt = begin_omp_parallel ();
10064       RECUR (OMP_PARALLEL_BODY (t));
10065       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10066         = OMP_PARALLEL_COMBINED (t);
10067       break;
10068
10069     case OMP_FOR:
10070       {
10071         tree clauses, decl, init, cond, incr, body, pre_body;
10072
10073         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10074                                       args, complain, in_decl);
10075         init = OMP_FOR_INIT (t);
10076         gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10077         decl = RECUR (TREE_OPERAND (init, 0));
10078         init = RECUR (TREE_OPERAND (init, 1));
10079         cond = RECUR (OMP_FOR_COND (t));
10080         incr = RECUR (OMP_FOR_INCR (t));
10081
10082         stmt = begin_omp_structured_block ();
10083
10084         pre_body = push_stmt_list ();
10085         RECUR (OMP_FOR_PRE_BODY (t));
10086         pre_body = pop_stmt_list (pre_body);
10087
10088         body = push_stmt_list ();
10089         RECUR (OMP_FOR_BODY (t));
10090         body = pop_stmt_list (body);
10091
10092         t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10093                             pre_body);
10094         if (t)
10095           OMP_FOR_CLAUSES (t) = clauses;
10096
10097         add_stmt (finish_omp_structured_block (stmt));
10098       }
10099       break;
10100
10101     case OMP_SECTIONS:
10102     case OMP_SINGLE:
10103       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10104       stmt = push_stmt_list ();
10105       RECUR (OMP_BODY (t));
10106       stmt = pop_stmt_list (stmt);
10107
10108       t = copy_node (t);
10109       OMP_BODY (t) = stmt;
10110       OMP_CLAUSES (t) = tmp;
10111       add_stmt (t);
10112       break;
10113
10114     case OMP_SECTION:
10115     case OMP_CRITICAL:
10116     case OMP_MASTER:
10117     case OMP_ORDERED:
10118       stmt = push_stmt_list ();
10119       RECUR (OMP_BODY (t));
10120       stmt = pop_stmt_list (stmt);
10121
10122       t = copy_node (t);
10123       OMP_BODY (t) = stmt;
10124       add_stmt (t);
10125       break;
10126
10127     case OMP_ATOMIC:
10128       if (OMP_ATOMIC_DEPENDENT_P (t))
10129         {
10130           tree op1 = TREE_OPERAND (t, 1);
10131           tree lhs = RECUR (TREE_OPERAND (op1, 0));
10132           tree rhs = RECUR (TREE_OPERAND (op1, 1));
10133           finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10134         }
10135       break;
10136
10137     case EXPR_PACK_EXPANSION:
10138       error ("invalid use of pack expansion expression");
10139       return error_mark_node;
10140
10141     case NONTYPE_ARGUMENT_PACK:
10142       error ("use %<...%> to expand argument pack");
10143       return error_mark_node;
10144
10145     default:
10146       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10147
10148       return tsubst_copy_and_build (t, args, complain, in_decl,
10149                                     /*function_p=*/false,
10150                                     integral_constant_expression_p);
10151     }
10152
10153   return NULL_TREE;
10154 #undef RECUR
10155 }
10156
10157 /* T is a postfix-expression that is not being used in a function
10158    call.  Return the substituted version of T.  */
10159
10160 static tree
10161 tsubst_non_call_postfix_expression (tree t, tree args,
10162                                     tsubst_flags_t complain,
10163                                     tree in_decl)
10164 {
10165   if (TREE_CODE (t) == SCOPE_REF)
10166     t = tsubst_qualified_id (t, args, complain, in_decl,
10167                              /*done=*/false, /*address_p=*/false);
10168   else
10169     t = tsubst_copy_and_build (t, args, complain, in_decl,
10170                                /*function_p=*/false,
10171                                /*integral_constant_expression_p=*/false);
10172
10173   return t;
10174 }
10175
10176 /* Like tsubst but deals with expressions and performs semantic
10177    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10178
10179 tree
10180 tsubst_copy_and_build (tree t,
10181                        tree args,
10182                        tsubst_flags_t complain,
10183                        tree in_decl,
10184                        bool function_p,
10185                        bool integral_constant_expression_p)
10186 {
10187 #define RECUR(NODE)                                             \
10188   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10189                          /*function_p=*/false,                  \
10190                          integral_constant_expression_p)
10191
10192   tree op1;
10193
10194   if (t == NULL_TREE || t == error_mark_node)
10195     return t;
10196
10197   switch (TREE_CODE (t))
10198     {
10199     case USING_DECL:
10200       t = DECL_NAME (t);
10201       /* Fall through.  */
10202     case IDENTIFIER_NODE:
10203       {
10204         tree decl;
10205         cp_id_kind idk;
10206         bool non_integral_constant_expression_p;
10207         const char *error_msg;
10208
10209         if (IDENTIFIER_TYPENAME_P (t))
10210           {
10211             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10212             t = mangle_conv_op_name_for_type (new_type);
10213           }
10214
10215         /* Look up the name.  */
10216         decl = lookup_name (t);
10217
10218         /* By convention, expressions use ERROR_MARK_NODE to indicate
10219            failure, not NULL_TREE.  */
10220         if (decl == NULL_TREE)
10221           decl = error_mark_node;
10222
10223         decl = finish_id_expression (t, decl, NULL_TREE,
10224                                      &idk,
10225                                      integral_constant_expression_p,
10226                                      /*allow_non_integral_constant_expression_p=*/false,
10227                                      &non_integral_constant_expression_p,
10228                                      /*template_p=*/false,
10229                                      /*done=*/true,
10230                                      /*address_p=*/false,
10231                                      /*template_arg_p=*/false,
10232                                      &error_msg);
10233         if (error_msg)
10234           error (error_msg);
10235         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10236           decl = unqualified_name_lookup_error (decl);
10237         return decl;
10238       }
10239
10240     case TEMPLATE_ID_EXPR:
10241       {
10242         tree object;
10243         tree template = RECUR (TREE_OPERAND (t, 0));
10244         tree targs = TREE_OPERAND (t, 1);
10245
10246         if (targs)
10247           targs = tsubst_template_args (targs, args, complain, in_decl);
10248
10249         if (TREE_CODE (template) == COMPONENT_REF)
10250           {
10251             object = TREE_OPERAND (template, 0);
10252             template = TREE_OPERAND (template, 1);
10253           }
10254         else
10255           object = NULL_TREE;
10256         template = lookup_template_function (template, targs);
10257
10258         if (object)
10259           return build3 (COMPONENT_REF, TREE_TYPE (template),
10260                          object, template, NULL_TREE);
10261         else
10262           return baselink_for_fns (template);
10263       }
10264
10265     case INDIRECT_REF:
10266       {
10267         tree r = RECUR (TREE_OPERAND (t, 0));
10268
10269         if (REFERENCE_REF_P (t))
10270           {
10271             /* A type conversion to reference type will be enclosed in
10272                such an indirect ref, but the substitution of the cast
10273                will have also added such an indirect ref.  */
10274             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10275               r = convert_from_reference (r);
10276           }
10277         else
10278           r = build_x_indirect_ref (r, "unary *");
10279         return r;
10280       }
10281
10282     case NOP_EXPR:
10283       return build_nop
10284         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10285          RECUR (TREE_OPERAND (t, 0)));
10286
10287     case CAST_EXPR:
10288     case REINTERPRET_CAST_EXPR:
10289     case CONST_CAST_EXPR:
10290     case DYNAMIC_CAST_EXPR:
10291     case STATIC_CAST_EXPR:
10292       {
10293         tree type;
10294         tree op;
10295
10296         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10297         if (integral_constant_expression_p
10298             && !cast_valid_in_integral_constant_expression_p (type))
10299           {
10300             error ("a cast to a type other than an integral or "
10301                    "enumeration type cannot appear in a constant-expression");
10302             return error_mark_node; 
10303           }
10304
10305         op = RECUR (TREE_OPERAND (t, 0));
10306
10307         switch (TREE_CODE (t))
10308           {
10309           case CAST_EXPR:
10310             return build_functional_cast (type, op);
10311           case REINTERPRET_CAST_EXPR:
10312             return build_reinterpret_cast (type, op);
10313           case CONST_CAST_EXPR:
10314             return build_const_cast (type, op);
10315           case DYNAMIC_CAST_EXPR:
10316             return build_dynamic_cast (type, op);
10317           case STATIC_CAST_EXPR:
10318             return build_static_cast (type, op);
10319           default:
10320             gcc_unreachable ();
10321           }
10322       }
10323
10324     case POSTDECREMENT_EXPR:
10325     case POSTINCREMENT_EXPR:
10326       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10327                                                 args, complain, in_decl);
10328       return build_x_unary_op (TREE_CODE (t), op1);
10329
10330     case PREDECREMENT_EXPR:
10331     case PREINCREMENT_EXPR:
10332     case NEGATE_EXPR:
10333     case BIT_NOT_EXPR:
10334     case ABS_EXPR:
10335     case TRUTH_NOT_EXPR:
10336     case UNARY_PLUS_EXPR:  /* Unary + */
10337     case REALPART_EXPR:
10338     case IMAGPART_EXPR:
10339       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10340
10341     case ADDR_EXPR:
10342       op1 = TREE_OPERAND (t, 0);
10343       if (TREE_CODE (op1) == SCOPE_REF)
10344         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10345                                    /*done=*/true, /*address_p=*/true);
10346       else
10347         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10348                                                   in_decl);
10349       if (TREE_CODE (op1) == LABEL_DECL)
10350         return finish_label_address_expr (DECL_NAME (op1));
10351       return build_x_unary_op (ADDR_EXPR, op1);
10352
10353     case PLUS_EXPR:
10354     case MINUS_EXPR:
10355     case MULT_EXPR:
10356     case TRUNC_DIV_EXPR:
10357     case CEIL_DIV_EXPR:
10358     case FLOOR_DIV_EXPR:
10359     case ROUND_DIV_EXPR:
10360     case EXACT_DIV_EXPR:
10361     case BIT_AND_EXPR:
10362     case BIT_IOR_EXPR:
10363     case BIT_XOR_EXPR:
10364     case TRUNC_MOD_EXPR:
10365     case FLOOR_MOD_EXPR:
10366     case TRUTH_ANDIF_EXPR:
10367     case TRUTH_ORIF_EXPR:
10368     case TRUTH_AND_EXPR:
10369     case TRUTH_OR_EXPR:
10370     case RSHIFT_EXPR:
10371     case LSHIFT_EXPR:
10372     case RROTATE_EXPR:
10373     case LROTATE_EXPR:
10374     case EQ_EXPR:
10375     case NE_EXPR:
10376     case MAX_EXPR:
10377     case MIN_EXPR:
10378     case LE_EXPR:
10379     case GE_EXPR:
10380     case LT_EXPR:
10381     case GT_EXPR:
10382     case MEMBER_REF:
10383     case DOTSTAR_EXPR:
10384       return build_x_binary_op
10385         (TREE_CODE (t),
10386          RECUR (TREE_OPERAND (t, 0)),
10387          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10388           ? ERROR_MARK
10389           : TREE_CODE (TREE_OPERAND (t, 0))),
10390          RECUR (TREE_OPERAND (t, 1)),
10391          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10392           ? ERROR_MARK
10393           : TREE_CODE (TREE_OPERAND (t, 1))),
10394          /*overloaded_p=*/NULL);
10395
10396     case SCOPE_REF:
10397       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10398                                   /*address_p=*/false);
10399     case ARRAY_REF:
10400       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10401                                                 args, complain, in_decl);
10402       return build_x_binary_op (ARRAY_REF, op1,
10403                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10404                                  ? ERROR_MARK
10405                                  : TREE_CODE (TREE_OPERAND (t, 0))),
10406                                 RECUR (TREE_OPERAND (t, 1)),
10407                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10408                                  ? ERROR_MARK
10409                                  : TREE_CODE (TREE_OPERAND (t, 1))),
10410                                 /*overloaded_p=*/NULL);
10411
10412     case SIZEOF_EXPR:
10413       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10414         {
10415           /* We only want to compute the number of arguments.  */
10416           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10417                                                 complain, in_decl);
10418           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10419         }
10420       /* Fall through */
10421       
10422     case ALIGNOF_EXPR:
10423       op1 = TREE_OPERAND (t, 0);
10424       if (!args)
10425         {
10426           /* When there are no ARGS, we are trying to evaluate a
10427              non-dependent expression from the parser.  Trying to do
10428              the substitutions may not work.  */
10429           if (!TYPE_P (op1))
10430             op1 = TREE_TYPE (op1);
10431         }
10432       else
10433         {
10434           ++skip_evaluation;
10435           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10436                                        /*function_p=*/false,
10437                                        /*integral_constant_expression_p=*/false);
10438           --skip_evaluation;
10439         }
10440       if (TYPE_P (op1))
10441         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10442       else
10443         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10444
10445     case MODOP_EXPR:
10446       {
10447         tree r = build_x_modify_expr
10448           (RECUR (TREE_OPERAND (t, 0)),
10449            TREE_CODE (TREE_OPERAND (t, 1)),
10450            RECUR (TREE_OPERAND (t, 2)));
10451         /* TREE_NO_WARNING must be set if either the expression was
10452            parenthesized or it uses an operator such as >>= rather
10453            than plain assignment.  In the former case, it was already
10454            set and must be copied.  In the latter case,
10455            build_x_modify_expr sets it and it must not be reset
10456            here.  */
10457         if (TREE_NO_WARNING (t))
10458           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10459         return r;
10460       }
10461
10462     case ARROW_EXPR:
10463       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10464                                                 args, complain, in_decl);
10465       /* Remember that there was a reference to this entity.  */
10466       if (DECL_P (op1))
10467         mark_used (op1);
10468       return build_x_arrow (op1);
10469
10470     case NEW_EXPR:
10471       return build_new
10472         (RECUR (TREE_OPERAND (t, 0)),
10473          RECUR (TREE_OPERAND (t, 1)),
10474          RECUR (TREE_OPERAND (t, 2)),
10475          RECUR (TREE_OPERAND (t, 3)),
10476          NEW_EXPR_USE_GLOBAL (t));
10477
10478     case DELETE_EXPR:
10479      return delete_sanity
10480        (RECUR (TREE_OPERAND (t, 0)),
10481         RECUR (TREE_OPERAND (t, 1)),
10482         DELETE_EXPR_USE_VEC (t),
10483         DELETE_EXPR_USE_GLOBAL (t));
10484
10485     case COMPOUND_EXPR:
10486       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10487                                     RECUR (TREE_OPERAND (t, 1)));
10488
10489     case CALL_EXPR:
10490       {
10491         tree function;
10492         tree call_args;
10493         bool qualified_p;
10494         bool koenig_p;
10495
10496         function = CALL_EXPR_FN (t);
10497         /* When we parsed the expression,  we determined whether or
10498            not Koenig lookup should be performed.  */
10499         koenig_p = KOENIG_LOOKUP_P (t);
10500         if (TREE_CODE (function) == SCOPE_REF)
10501           {
10502             qualified_p = true;
10503             function = tsubst_qualified_id (function, args, complain, in_decl,
10504                                             /*done=*/false,
10505                                             /*address_p=*/false);
10506           }
10507         else
10508           {
10509             if (TREE_CODE (function) == COMPONENT_REF)
10510               {
10511                 tree op = TREE_OPERAND (function, 1);
10512
10513                 qualified_p = (TREE_CODE (op) == SCOPE_REF
10514                                || (BASELINK_P (op)
10515                                    && BASELINK_QUALIFIED_P (op)));
10516               }
10517             else
10518               qualified_p = false;
10519
10520             function = tsubst_copy_and_build (function, args, complain,
10521                                               in_decl,
10522                                               !qualified_p,
10523                                               integral_constant_expression_p);
10524
10525             if (BASELINK_P (function))
10526               qualified_p = true;
10527           }
10528
10529         /* FIXME:  Rewrite this so as not to construct an arglist.  */
10530         call_args = RECUR (CALL_EXPR_ARGS (t));
10531
10532         /* We do not perform argument-dependent lookup if normal
10533            lookup finds a non-function, in accordance with the
10534            expected resolution of DR 218.  */
10535         if (koenig_p
10536             && ((is_overloaded_fn (function)
10537                  /* If lookup found a member function, the Koenig lookup is
10538                     not appropriate, even if an unqualified-name was used
10539                     to denote the function.  */
10540                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10541                 || TREE_CODE (function) == IDENTIFIER_NODE))
10542           function = perform_koenig_lookup (function, call_args);
10543
10544         if (TREE_CODE (function) == IDENTIFIER_NODE)
10545           {
10546             unqualified_name_lookup_error (function);
10547             return error_mark_node;
10548           }
10549
10550         /* Remember that there was a reference to this entity.  */
10551         if (DECL_P (function))
10552           mark_used (function);
10553
10554         if (TREE_CODE (function) == OFFSET_REF)
10555           return build_offset_ref_call_from_tree (function, call_args);
10556         if (TREE_CODE (function) == COMPONENT_REF)
10557           {
10558             if (!BASELINK_P (TREE_OPERAND (function, 1)))
10559               return finish_call_expr (function, call_args,
10560                                        /*disallow_virtual=*/false,
10561                                        /*koenig_p=*/false);
10562             else
10563               return (build_new_method_call
10564                       (TREE_OPERAND (function, 0),
10565                        TREE_OPERAND (function, 1),
10566                        call_args, NULL_TREE,
10567                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10568                        /*fn_p=*/NULL));
10569           }
10570         return finish_call_expr (function, call_args,
10571                                  /*disallow_virtual=*/qualified_p,
10572                                  koenig_p);
10573       }
10574
10575     case COND_EXPR:
10576       return build_x_conditional_expr
10577         (RECUR (TREE_OPERAND (t, 0)),
10578          RECUR (TREE_OPERAND (t, 1)),
10579          RECUR (TREE_OPERAND (t, 2)));
10580
10581     case PSEUDO_DTOR_EXPR:
10582       return finish_pseudo_destructor_expr
10583         (RECUR (TREE_OPERAND (t, 0)),
10584          RECUR (TREE_OPERAND (t, 1)),
10585          RECUR (TREE_OPERAND (t, 2)));
10586
10587     case TREE_LIST:
10588       {
10589         tree purpose, value, chain;
10590
10591         if (t == void_list_node)
10592           return t;
10593
10594         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10595             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10596           {
10597             /* We have pack expansions, so expand those and
10598                create a new list out of it.  */
10599             tree purposevec = NULL_TREE;
10600             tree valuevec = NULL_TREE;
10601             tree chain;
10602             int i, len = -1;
10603
10604             /* Expand the argument expressions.  */
10605             if (TREE_PURPOSE (t))
10606               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10607                                                  complain, in_decl);
10608             if (TREE_VALUE (t))
10609               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10610                                                complain, in_decl);
10611
10612             /* Build the rest of the list.  */
10613             chain = TREE_CHAIN (t);
10614             if (chain && chain != void_type_node)
10615               chain = RECUR (chain);
10616
10617             /* Determine the number of arguments.  */
10618             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10619               {
10620                 len = TREE_VEC_LENGTH (purposevec);
10621                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10622               }
10623             else if (TREE_CODE (valuevec) == TREE_VEC)
10624               len = TREE_VEC_LENGTH (valuevec);
10625             else
10626               {
10627                 /* Since we only performed a partial substitution into
10628                    the argument pack, we only return a single list
10629                    node.  */
10630                 if (purposevec == TREE_PURPOSE (t)
10631                     && valuevec == TREE_VALUE (t)
10632                     && chain == TREE_CHAIN (t))
10633                   return t;
10634
10635                 return tree_cons (purposevec, valuevec, chain);
10636               }
10637             
10638             /* Convert the argument vectors into a TREE_LIST */
10639             i = len;
10640             while (i > 0)
10641               {
10642                 /* Grab the Ith values.  */
10643                 i--;
10644                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
10645                                      : NULL_TREE;
10646                 value 
10647                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
10648                              : NULL_TREE;
10649
10650                 /* Build the list (backwards).  */
10651                 chain = tree_cons (purpose, value, chain);
10652               }
10653
10654             return chain;
10655           }
10656
10657         purpose = TREE_PURPOSE (t);
10658         if (purpose)
10659           purpose = RECUR (purpose);
10660         value = TREE_VALUE (t);
10661         if (value)
10662           value = RECUR (value);
10663         chain = TREE_CHAIN (t);
10664         if (chain && chain != void_type_node)
10665           chain = RECUR (chain);
10666         if (purpose == TREE_PURPOSE (t)
10667             && value == TREE_VALUE (t)
10668             && chain == TREE_CHAIN (t))
10669           return t;
10670         return tree_cons (purpose, value, chain);
10671       }
10672
10673     case COMPONENT_REF:
10674       {
10675         tree object;
10676         tree object_type;
10677         tree member;
10678
10679         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10680                                                      args, complain, in_decl);
10681         /* Remember that there was a reference to this entity.  */
10682         if (DECL_P (object))
10683           mark_used (object);
10684         object_type = TREE_TYPE (object);
10685
10686         member = TREE_OPERAND (t, 1);
10687         if (BASELINK_P (member))
10688           member = tsubst_baselink (member,
10689                                     non_reference (TREE_TYPE (object)),
10690                                     args, complain, in_decl);
10691         else
10692           member = tsubst_copy (member, args, complain, in_decl);
10693         if (member == error_mark_node)
10694           return error_mark_node;
10695
10696         if (object_type && !CLASS_TYPE_P (object_type))
10697           {
10698             if (TREE_CODE (member) == BIT_NOT_EXPR)
10699               return finish_pseudo_destructor_expr (object,
10700                                                     NULL_TREE,
10701                                                     object_type);
10702             else if (TREE_CODE (member) == SCOPE_REF
10703                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
10704               return finish_pseudo_destructor_expr (object,
10705                                                     object,
10706                                                     object_type);
10707           }
10708         else if (TREE_CODE (member) == SCOPE_REF
10709                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10710           {
10711             tree tmpl;
10712             tree args;
10713
10714             /* Lookup the template functions now that we know what the
10715                scope is.  */
10716             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10717             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
10718             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
10719                                             /*is_type_p=*/false,
10720                                             /*complain=*/false);
10721             if (BASELINK_P (member))
10722               {
10723                 BASELINK_FUNCTIONS (member)
10724                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10725                               args);
10726                 member = (adjust_result_of_qualified_name_lookup
10727                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
10728                            object_type));
10729               }
10730             else
10731               {
10732                 qualified_name_lookup_error (object_type, tmpl, member);
10733                 return error_mark_node;
10734               }
10735           }
10736         else if (TREE_CODE (member) == SCOPE_REF
10737                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10738                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10739           {
10740             if (complain & tf_error)
10741               {
10742                 if (TYPE_P (TREE_OPERAND (member, 0)))
10743                   error ("%qT is not a class or namespace",
10744                          TREE_OPERAND (member, 0));
10745                 else
10746                   error ("%qD is not a class or namespace",
10747                          TREE_OPERAND (member, 0));
10748               }
10749             return error_mark_node;
10750           }
10751         else if (TREE_CODE (member) == FIELD_DECL)
10752           return finish_non_static_data_member (member, object, NULL_TREE);
10753
10754         return finish_class_member_access_expr (object, member,
10755                                                 /*template_p=*/false);
10756       }
10757
10758     case THROW_EXPR:
10759       return build_throw
10760         (RECUR (TREE_OPERAND (t, 0)));
10761
10762     case CONSTRUCTOR:
10763       {
10764         VEC(constructor_elt,gc) *n;
10765         constructor_elt *ce;
10766         unsigned HOST_WIDE_INT idx;
10767         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10768         bool process_index_p;
10769         int newlen;
10770         bool need_copy_p = false;
10771
10772         if (type == error_mark_node)
10773           return error_mark_node;
10774
10775         /* digest_init will do the wrong thing if we let it.  */
10776         if (type && TYPE_PTRMEMFUNC_P (type))
10777           return t;
10778
10779         /* We do not want to process the index of aggregate
10780            initializers as they are identifier nodes which will be
10781            looked up by digest_init.  */
10782         process_index_p = !(type && IS_AGGR_TYPE (type));
10783
10784         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
10785         newlen = VEC_length (constructor_elt, n);
10786         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
10787           {
10788             if (ce->index && process_index_p)
10789               ce->index = RECUR (ce->index);
10790
10791             if (PACK_EXPANSION_P (ce->value))
10792               {
10793                 /* Substitute into the pack expansion.  */
10794                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
10795                                                   in_decl);
10796
10797                 if (TREE_VEC_LENGTH (ce->value) == 1)
10798                   /* Just move the argument into place.  */
10799                   ce->value = TREE_VEC_ELT (ce->value, 0);
10800                 else
10801                   {
10802                     /* Update the length of the final CONSTRUCTOR
10803                        arguments vector, and note that we will need to
10804                        copy.*/
10805                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
10806                     need_copy_p = true;
10807                   }
10808               }
10809             else
10810               ce->value = RECUR (ce->value);
10811           }
10812
10813         if (need_copy_p)
10814           {
10815             VEC(constructor_elt,gc) *old_n = n;
10816
10817             n = VEC_alloc (constructor_elt, gc, newlen);
10818             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
10819                  idx++)
10820               {
10821                 if (TREE_CODE (ce->value) == TREE_VEC)
10822                   {
10823                     int i, len = TREE_VEC_LENGTH (ce->value);
10824                     for (i = 0; i < len; ++i)
10825                       CONSTRUCTOR_APPEND_ELT (n, 0,
10826                                               TREE_VEC_ELT (ce->value, i));
10827                   }
10828                 else
10829                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
10830               }
10831           }
10832
10833         if (TREE_HAS_CONSTRUCTOR (t))
10834           return finish_compound_literal (type, n);
10835
10836         return build_constructor (NULL_TREE, n);
10837       }
10838
10839     case TYPEID_EXPR:
10840       {
10841         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
10842         if (TYPE_P (operand_0))
10843           return get_typeid (operand_0);
10844         return build_typeid (operand_0);
10845       }
10846
10847     case VAR_DECL:
10848       if (!args)
10849         return t;
10850       /* Fall through */
10851
10852     case PARM_DECL:
10853       {
10854         tree r = tsubst_copy (t, args, complain, in_decl);
10855
10856         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
10857           /* If the original type was a reference, we'll be wrapped in
10858              the appropriate INDIRECT_REF.  */
10859           r = convert_from_reference (r);
10860         return r;
10861       }
10862
10863     case VA_ARG_EXPR:
10864       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
10865                              tsubst_copy (TREE_TYPE (t), args, complain,
10866                                           in_decl));
10867
10868     case OFFSETOF_EXPR:
10869       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
10870
10871     case TRAIT_EXPR:
10872       {
10873         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
10874                                   complain, in_decl);
10875
10876         tree type2 = TRAIT_EXPR_TYPE2 (t);
10877         if (type2)
10878           type2 = tsubst_copy (type2, args, complain, in_decl);
10879         
10880         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
10881       }
10882
10883     case STMT_EXPR:
10884       {
10885         tree old_stmt_expr = cur_stmt_expr;
10886         tree stmt_expr = begin_stmt_expr ();
10887
10888         cur_stmt_expr = stmt_expr;
10889         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
10890                      integral_constant_expression_p);
10891         stmt_expr = finish_stmt_expr (stmt_expr, false);
10892         cur_stmt_expr = old_stmt_expr;
10893
10894         return stmt_expr;
10895       }
10896
10897     case CONST_DECL:
10898       t = tsubst_copy (t, args, complain, in_decl);
10899       /* As in finish_id_expression, we resolve enumeration constants
10900          to their underlying values.  */
10901       if (TREE_CODE (t) == CONST_DECL)
10902         {
10903           used_types_insert (TREE_TYPE (t));
10904           return DECL_INITIAL (t);
10905         }
10906       return t;
10907
10908     default:
10909       /* Handle Objective-C++ constructs, if appropriate.  */
10910       {
10911         tree subst
10912           = objcp_tsubst_copy_and_build (t, args, complain,
10913                                          in_decl, /*function_p=*/false);
10914         if (subst)
10915           return subst;
10916       }
10917       return tsubst_copy (t, args, complain, in_decl);
10918     }
10919
10920 #undef RECUR
10921 }
10922
10923 /* Verify that the instantiated ARGS are valid. For type arguments,
10924    make sure that the type's linkage is ok. For non-type arguments,
10925    make sure they are constants if they are integral or enumerations.
10926    Emit an error under control of COMPLAIN, and return TRUE on error.  */
10927
10928 static bool
10929 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
10930 {
10931   int ix, len = DECL_NTPARMS (tmpl);
10932   bool result = false;
10933
10934   for (ix = 0; ix != len; ix++)
10935     {
10936       tree t = TREE_VEC_ELT (args, ix);
10937
10938       if (TYPE_P (t))
10939         {
10940           /* [basic.link]: A name with no linkage (notably, the name
10941              of a class or enumeration declared in a local scope)
10942              shall not be used to declare an entity with linkage.
10943              This implies that names with no linkage cannot be used as
10944              template arguments.  */
10945           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
10946
10947           if (nt)
10948             {
10949               /* DR 488 makes use of a type with no linkage cause
10950                  type deduction to fail.  */
10951               if (complain & tf_error)
10952                 {
10953                   if (TYPE_ANONYMOUS_P (nt))
10954                     error ("%qT is/uses anonymous type", t);
10955                   else
10956                     error ("template argument for %qD uses local type %qT",
10957                            tmpl, t);
10958                 }
10959               result = true;
10960             }
10961           /* In order to avoid all sorts of complications, we do not
10962              allow variably-modified types as template arguments.  */
10963           else if (variably_modified_type_p (t, NULL_TREE))
10964             {
10965               if (complain & tf_error)
10966                 error ("%qT is a variably modified type", t);
10967               result = true;
10968             }
10969         }
10970       /* A non-type argument of integral or enumerated type must be a
10971          constant.  */
10972       else if (TREE_TYPE (t)
10973                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
10974                && !TREE_CONSTANT (t))
10975         {
10976           if (complain & tf_error)
10977             error ("integral expression %qE is not constant", t);
10978           result = true;
10979         }
10980     }
10981   if (result && (complain & tf_error))
10982     error ("  trying to instantiate %qD", tmpl);
10983   return result;
10984 }
10985
10986 /* Instantiate the indicated variable or function template TMPL with
10987    the template arguments in TARG_PTR.  */
10988
10989 tree
10990 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
10991 {
10992   tree fndecl;
10993   tree gen_tmpl;
10994   tree spec;
10995   HOST_WIDE_INT saved_processing_template_decl;
10996
10997   if (tmpl == error_mark_node)
10998     return error_mark_node;
10999
11000   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11001
11002   /* If this function is a clone, handle it specially.  */
11003   if (DECL_CLONED_FUNCTION_P (tmpl))
11004     {
11005       tree spec;
11006       tree clone;
11007
11008       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11009                                    complain);
11010       if (spec == error_mark_node)
11011         return error_mark_node;
11012
11013       /* Look for the clone.  */
11014       FOR_EACH_CLONE (clone, spec)
11015         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11016           return clone;
11017       /* We should always have found the clone by now.  */
11018       gcc_unreachable ();
11019       return NULL_TREE;
11020     }
11021
11022   /* Check to see if we already have this specialization.  */
11023   spec = retrieve_specialization (tmpl, targ_ptr,
11024                                   /*class_specializations_p=*/false);
11025   if (spec != NULL_TREE)
11026     return spec;
11027
11028   gen_tmpl = most_general_template (tmpl);
11029   if (tmpl != gen_tmpl)
11030     {
11031       /* The TMPL is a partial instantiation.  To get a full set of
11032          arguments we must add the arguments used to perform the
11033          partial instantiation.  */
11034       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11035                                               targ_ptr);
11036
11037       /* Check to see if we already have this specialization.  */
11038       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11039                                       /*class_specializations_p=*/false);
11040       if (spec != NULL_TREE)
11041         return spec;
11042     }
11043
11044   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11045                                complain))
11046     return error_mark_node;
11047
11048   /* We are building a FUNCTION_DECL, during which the access of its
11049      parameters and return types have to be checked.  However this
11050      FUNCTION_DECL which is the desired context for access checking
11051      is not built yet.  We solve this chicken-and-egg problem by
11052      deferring all checks until we have the FUNCTION_DECL.  */
11053   push_deferring_access_checks (dk_deferred);
11054
11055   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11056      (because, for example, we have encountered a non-dependent
11057      function call in the body of a template function and must now
11058      determine which of several overloaded functions will be called),
11059      within the instantiation itself we are not processing a
11060      template.  */  
11061   saved_processing_template_decl = processing_template_decl;
11062   processing_template_decl = 0;
11063   /* Substitute template parameters to obtain the specialization.  */
11064   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11065                    targ_ptr, complain, gen_tmpl);
11066   processing_template_decl = saved_processing_template_decl;
11067   if (fndecl == error_mark_node)
11068     return error_mark_node;
11069
11070   /* Now we know the specialization, compute access previously
11071      deferred.  */
11072   push_access_scope (fndecl);
11073   perform_deferred_access_checks ();
11074   pop_access_scope (fndecl);
11075   pop_deferring_access_checks ();
11076
11077   /* The DECL_TI_TEMPLATE should always be the immediate parent
11078      template, not the most general template.  */
11079   DECL_TI_TEMPLATE (fndecl) = tmpl;
11080
11081   /* If we've just instantiated the main entry point for a function,
11082      instantiate all the alternate entry points as well.  We do this
11083      by cloning the instantiation of the main entry point, not by
11084      instantiating the template clones.  */
11085   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11086     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11087
11088   return fndecl;
11089 }
11090
11091 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11092    arguments that are being used when calling it.  TARGS is a vector
11093    into which the deduced template arguments are placed.
11094
11095    Return zero for success, 2 for an incomplete match that doesn't resolve
11096    all the types, and 1 for complete failure.  An error message will be
11097    printed only for an incomplete match.
11098
11099    If FN is a conversion operator, or we are trying to produce a specific
11100    specialization, RETURN_TYPE is the return type desired.
11101
11102    The EXPLICIT_TARGS are explicit template arguments provided via a
11103    template-id.
11104
11105    The parameter STRICT is one of:
11106
11107    DEDUCE_CALL:
11108      We are deducing arguments for a function call, as in
11109      [temp.deduct.call].
11110
11111    DEDUCE_CONV:
11112      We are deducing arguments for a conversion function, as in
11113      [temp.deduct.conv].
11114
11115    DEDUCE_EXACT:
11116      We are deducing arguments when doing an explicit instantiation
11117      as in [temp.explicit], when determining an explicit specialization
11118      as in [temp.expl.spec], or when taking the address of a function
11119      template, as in [temp.deduct.funcaddr].  */
11120
11121 int
11122 fn_type_unification (tree fn,
11123                      tree explicit_targs,
11124                      tree targs,
11125                      tree args,
11126                      tree return_type,
11127                      unification_kind_t strict,
11128                      int flags)
11129 {
11130   tree parms;
11131   tree fntype;
11132   int result;
11133   bool incomplete_argument_packs_p = false;
11134
11135   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11136
11137   fntype = TREE_TYPE (fn);
11138   if (explicit_targs)
11139     {
11140       /* [temp.deduct]
11141
11142          The specified template arguments must match the template
11143          parameters in kind (i.e., type, nontype, template), and there
11144          must not be more arguments than there are parameters;
11145          otherwise type deduction fails.
11146
11147          Nontype arguments must match the types of the corresponding
11148          nontype template parameters, or must be convertible to the
11149          types of the corresponding nontype parameters as specified in
11150          _temp.arg.nontype_, otherwise type deduction fails.
11151
11152          All references in the function type of the function template
11153          to the corresponding template parameters are replaced by the
11154          specified template argument values.  If a substitution in a
11155          template parameter or in the function type of the function
11156          template results in an invalid type, type deduction fails.  */
11157       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11158       int i, len = TREE_VEC_LENGTH (tparms);
11159       tree converted_args;
11160       bool incomplete = false;
11161
11162       if (explicit_targs == error_mark_node)
11163         return 1;
11164
11165       converted_args
11166         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11167                                   /*require_all_args=*/false,
11168                                   /*use_default_args=*/false));
11169       if (converted_args == error_mark_node)
11170         return 1;
11171
11172       /* Substitute the explicit args into the function type.  This is
11173          necessary so that, for instance, explicitly declared function
11174          arguments can match null pointed constants.  If we were given
11175          an incomplete set of explicit args, we must not do semantic
11176          processing during substitution as we could create partial
11177          instantiations.  */
11178       for (i = 0; i < len; i++)
11179         {
11180           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11181           bool parameter_pack = false;
11182
11183           /* Dig out the actual parm.  */
11184           if (TREE_CODE (parm) == TYPE_DECL
11185               || TREE_CODE (parm) == TEMPLATE_DECL)
11186             {
11187               parm = TREE_TYPE (parm);
11188               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11189             }
11190           else if (TREE_CODE (parm) == PARM_DECL)
11191             {
11192               parm = DECL_INITIAL (parm);
11193               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11194             }
11195
11196           if (parameter_pack)
11197             {
11198               int level, idx;
11199               tree targ;
11200               template_parm_level_and_index (parm, &level, &idx);
11201
11202               /* Mark the argument pack as "incomplete". We could
11203                  still deduce more arguments during unification.  */
11204               targ = TMPL_ARG (converted_args, level, idx);
11205               if (targ)
11206                 {
11207                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11208                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11209                     = ARGUMENT_PACK_ARGS (targ);
11210                 }
11211
11212               /* We have some incomplete argument packs.  */
11213               incomplete_argument_packs_p = true;
11214             }
11215         }
11216
11217       if (incomplete_argument_packs_p)
11218         /* Any substitution is guaranteed to be incomplete if there
11219            are incomplete argument packs, because we can still deduce
11220            more arguments.  */
11221         incomplete = 1;
11222       else
11223         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11224
11225       processing_template_decl += incomplete;
11226       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11227       processing_template_decl -= incomplete;
11228
11229       if (fntype == error_mark_node)
11230         return 1;
11231
11232       /* Place the explicitly specified arguments in TARGS.  */
11233       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11234         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11235     }
11236
11237   /* Never do unification on the 'this' parameter.  */
11238   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11239
11240   if (return_type)
11241     {
11242       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11243       args = tree_cons (NULL_TREE, return_type, args);
11244     }
11245
11246   /* We allow incomplete unification without an error message here
11247      because the standard doesn't seem to explicitly prohibit it.  Our
11248      callers must be ready to deal with unification failures in any
11249      event.  */
11250   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11251                                   targs, parms, args, /*subr=*/0,
11252                                   strict, flags);
11253
11254   if (result == 0 && incomplete_argument_packs_p)
11255     {
11256       int i, len = NUM_TMPL_ARGS (targs);
11257
11258       /* Clear the "incomplete" flags on all argument packs.  */
11259       for (i = 0; i < len; i++)
11260         {
11261           tree arg = TREE_VEC_ELT (targs, i);
11262           if (ARGUMENT_PACK_P (arg))
11263             {
11264               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11265               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11266             }
11267         }
11268     }
11269
11270   if (result == 0)
11271     /* All is well so far.  Now, check:
11272
11273        [temp.deduct]
11274
11275        When all template arguments have been deduced, all uses of
11276        template parameters in nondeduced contexts are replaced with
11277        the corresponding deduced argument values.  If the
11278        substitution results in an invalid type, as described above,
11279        type deduction fails.  */
11280     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11281         == error_mark_node)
11282       return 1;
11283
11284   return result;
11285 }
11286
11287 /* Adjust types before performing type deduction, as described in
11288    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
11289    sections are symmetric.  PARM is the type of a function parameter
11290    or the return type of the conversion function.  ARG is the type of
11291    the argument passed to the call, or the type of the value
11292    initialized with the result of the conversion function.
11293    ARG_EXPR is the original argument expression, which may be null.  */
11294
11295 static int
11296 maybe_adjust_types_for_deduction (unification_kind_t strict,
11297                                   tree* parm,
11298                                   tree* arg,
11299                                   tree arg_expr)
11300 {
11301   int result = 0;
11302
11303   switch (strict)
11304     {
11305     case DEDUCE_CALL:
11306       break;
11307
11308     case DEDUCE_CONV:
11309       {
11310         /* Swap PARM and ARG throughout the remainder of this
11311            function; the handling is precisely symmetric since PARM
11312            will initialize ARG rather than vice versa.  */
11313         tree* temp = parm;
11314         parm = arg;
11315         arg = temp;
11316         break;
11317       }
11318
11319     case DEDUCE_EXACT:
11320       /* There is nothing to do in this case.  */
11321       return 0;
11322
11323     default:
11324       gcc_unreachable ();
11325     }
11326
11327   if (TREE_CODE (*parm) != REFERENCE_TYPE)
11328     {
11329       /* [temp.deduct.call]
11330
11331          If P is not a reference type:
11332
11333          --If A is an array type, the pointer type produced by the
11334          array-to-pointer standard conversion (_conv.array_) is
11335          used in place of A for type deduction; otherwise,
11336
11337          --If A is a function type, the pointer type produced by
11338          the function-to-pointer standard conversion
11339          (_conv.func_) is used in place of A for type deduction;
11340          otherwise,
11341
11342          --If A is a cv-qualified type, the top level
11343          cv-qualifiers of A's type are ignored for type
11344          deduction.  */
11345       if (TREE_CODE (*arg) == ARRAY_TYPE)
11346         *arg = build_pointer_type (TREE_TYPE (*arg));
11347       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11348         *arg = build_pointer_type (*arg);
11349       else
11350         *arg = TYPE_MAIN_VARIANT (*arg);
11351     }
11352
11353   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11354      of the form T&&, where T is a template parameter, and the argument
11355      is an lvalue, T is deduced as A& */
11356   if (TREE_CODE (*parm) == REFERENCE_TYPE
11357       && TYPE_REF_IS_RVALUE (*parm)
11358       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11359       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11360       && arg_expr && real_lvalue_p (arg_expr))
11361     *arg = build_reference_type (*arg);
11362
11363   /* [temp.deduct.call]
11364
11365      If P is a cv-qualified type, the top level cv-qualifiers
11366      of P's type are ignored for type deduction.  If P is a
11367      reference type, the type referred to by P is used for
11368      type deduction.  */
11369   *parm = TYPE_MAIN_VARIANT (*parm);
11370   if (TREE_CODE (*parm) == REFERENCE_TYPE)
11371     {
11372       *parm = TREE_TYPE (*parm);
11373       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11374     }
11375
11376   /* DR 322. For conversion deduction, remove a reference type on parm
11377      too (which has been swapped into ARG).  */
11378   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11379     *arg = TREE_TYPE (*arg);
11380
11381   return result;
11382 }
11383
11384 /* Most parms like fn_type_unification.
11385
11386    If SUBR is 1, we're being called recursively (to unify the
11387    arguments of a function or method parameter of a function
11388    template). */
11389
11390 static int
11391 type_unification_real (tree tparms,
11392                        tree targs,
11393                        tree xparms,
11394                        tree xargs,
11395                        int subr,
11396                        unification_kind_t strict,
11397                        int flags)
11398 {
11399   tree parm, arg, arg_expr;
11400   int i;
11401   int ntparms = TREE_VEC_LENGTH (tparms);
11402   int sub_strict;
11403   int saw_undeduced = 0;
11404   tree parms, args;
11405
11406   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11407   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11408   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11409   gcc_assert (ntparms > 0);
11410
11411   switch (strict)
11412     {
11413     case DEDUCE_CALL:
11414       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11415                     | UNIFY_ALLOW_DERIVED);
11416       break;
11417
11418     case DEDUCE_CONV:
11419       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11420       break;
11421
11422     case DEDUCE_EXACT:
11423       sub_strict = UNIFY_ALLOW_NONE;
11424       break;
11425
11426     default:
11427       gcc_unreachable ();
11428     }
11429
11430  again:
11431   parms = xparms;
11432   args = xargs;
11433
11434   while (parms && parms != void_list_node
11435          && args && args != void_list_node)
11436     {
11437       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11438         break;
11439
11440       parm = TREE_VALUE (parms);
11441       parms = TREE_CHAIN (parms);
11442       arg = TREE_VALUE (args);
11443       args = TREE_CHAIN (args);
11444       arg_expr = NULL;
11445
11446       if (arg == error_mark_node)
11447         return 1;
11448       if (arg == unknown_type_node)
11449         /* We can't deduce anything from this, but we might get all the
11450            template args from other function args.  */
11451         continue;
11452
11453       /* Conversions will be performed on a function argument that
11454          corresponds with a function parameter that contains only
11455          non-deducible template parameters and explicitly specified
11456          template parameters.  */
11457       if (!uses_template_parms (parm))
11458         {
11459           tree type;
11460
11461           if (!TYPE_P (arg))
11462             type = TREE_TYPE (arg);
11463           else
11464             type = arg;
11465
11466           if (same_type_p (parm, type))
11467             continue;
11468           if (strict != DEDUCE_EXACT
11469               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11470                                   flags))
11471             continue;
11472
11473           return 1;
11474         }
11475
11476       if (!TYPE_P (arg))
11477         {
11478           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11479           if (type_unknown_p (arg))
11480             {
11481               /* [temp.deduct.type] 
11482
11483                  A template-argument can be deduced from a pointer to
11484                  function or pointer to member function argument if
11485                  the set of overloaded functions does not contain
11486                  function templates and at most one of a set of
11487                  overloaded functions provides a unique match.  */
11488               if (resolve_overloaded_unification
11489                   (tparms, targs, parm, arg, strict, sub_strict))
11490                 continue;
11491
11492               return 1;
11493             }
11494           arg_expr = arg;
11495           arg = unlowered_expr_type (arg);
11496           if (arg == error_mark_node)
11497             return 1;
11498         }
11499
11500       {
11501         int arg_strict = sub_strict;
11502
11503         if (!subr)
11504           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11505                                                           arg_expr);
11506
11507         if (unify (tparms, targs, parm, arg, arg_strict))
11508           return 1;
11509       }
11510     }
11511
11512
11513   if (parms 
11514       && parms != void_list_node
11515       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11516     {
11517       /* Unify the remaining arguments with the pack expansion type.  */
11518       tree argvec;
11519       tree parmvec = make_tree_vec (1);
11520       int len = 0;
11521       tree t;
11522
11523       /* Count the number of arguments that remain.  */
11524       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11525         len++;
11526         
11527       /* Allocate a TREE_VEC and copy in all of the arguments */ 
11528       argvec = make_tree_vec (len);
11529       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11530         {
11531           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11532           ++i;
11533         }
11534
11535       /* Copy the parameter into parmvec.  */
11536       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11537       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11538                                 /*call_args_p=*/true, /*subr=*/subr))
11539         return 1;
11540
11541       /* Advance to the end of the list of parameters.  */
11542       parms = TREE_CHAIN (parms);
11543     }
11544
11545   /* Fail if we've reached the end of the parm list, and more args
11546      are present, and the parm list isn't variadic.  */
11547   if (args && args != void_list_node && parms == void_list_node)
11548     return 1;
11549   /* Fail if parms are left and they don't have default values.  */
11550   if (parms && parms != void_list_node
11551       && TREE_PURPOSE (parms) == NULL_TREE)
11552     return 1;
11553
11554   if (!subr)
11555     for (i = 0; i < ntparms; i++)
11556       if (!TREE_VEC_ELT (targs, i))
11557         {
11558           tree tparm;
11559
11560           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11561             continue;
11562
11563           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11564
11565           /* If this is an undeduced nontype parameter that depends on
11566              a type parameter, try another pass; its type may have been
11567              deduced from a later argument than the one from which
11568              this parameter can be deduced.  */
11569           if (TREE_CODE (tparm) == PARM_DECL
11570               && uses_template_parms (TREE_TYPE (tparm))
11571               && !saw_undeduced++)
11572             goto again;
11573
11574           /* Core issue #226 (C++0x) [temp.deduct]:
11575
11576                If a template argument has not been deduced, its
11577                default template argument, if any, is used. 
11578
11579              When we are in C++98 mode, TREE_PURPOSE will either
11580              be NULL_TREE or ERROR_MARK_NODE, so we do not need
11581              to explicitly check cxx_dialect here.  */
11582           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11583             {
11584               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
11585                                  targs, tf_none, NULL_TREE);
11586               if (arg == error_mark_node)
11587                 return 1;
11588               else
11589                 {
11590                   TREE_VEC_ELT (targs, i) = arg;
11591                   continue;
11592                 }
11593             }
11594
11595           /* If the type parameter is a parameter pack, then it will
11596              be deduced to an empty parameter pack.  */
11597           if (template_parameter_pack_p (tparm))
11598             {
11599               tree arg;
11600
11601               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11602                 {
11603                   arg = make_node (NONTYPE_ARGUMENT_PACK);
11604                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11605                   TREE_CONSTANT (arg) = 1;
11606                 }
11607               else
11608                 arg = make_node (TYPE_ARGUMENT_PACK);
11609
11610               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11611
11612               TREE_VEC_ELT (targs, i) = arg;
11613               continue;
11614             }
11615
11616           return 2;
11617         }
11618
11619   return 0;
11620 }
11621
11622 /* Subroutine of type_unification_real.  Args are like the variables
11623    at the call site.  ARG is an overloaded function (or template-id);
11624    we try deducing template args from each of the overloads, and if
11625    only one succeeds, we go with that.  Modifies TARGS and returns
11626    true on success.  */
11627
11628 static bool
11629 resolve_overloaded_unification (tree tparms,
11630                                 tree targs,
11631                                 tree parm,
11632                                 tree arg,
11633                                 unification_kind_t strict,
11634                                 int sub_strict)
11635 {
11636   tree tempargs = copy_node (targs);
11637   int good = 0;
11638   bool addr_p;
11639
11640   if (TREE_CODE (arg) == ADDR_EXPR)
11641     {
11642       arg = TREE_OPERAND (arg, 0);
11643       addr_p = true;
11644     }
11645   else
11646     addr_p = false;
11647
11648   if (TREE_CODE (arg) == COMPONENT_REF)
11649     /* Handle `&x' where `x' is some static or non-static member
11650        function name.  */
11651     arg = TREE_OPERAND (arg, 1);
11652
11653   if (TREE_CODE (arg) == OFFSET_REF)
11654     arg = TREE_OPERAND (arg, 1);
11655
11656   /* Strip baselink information.  */
11657   if (BASELINK_P (arg))
11658     arg = BASELINK_FUNCTIONS (arg);
11659
11660   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11661     {
11662       /* If we got some explicit template args, we need to plug them into
11663          the affected templates before we try to unify, in case the
11664          explicit args will completely resolve the templates in question.  */
11665
11666       tree expl_subargs = TREE_OPERAND (arg, 1);
11667       arg = TREE_OPERAND (arg, 0);
11668
11669       for (; arg; arg = OVL_NEXT (arg))
11670         {
11671           tree fn = OVL_CURRENT (arg);
11672           tree subargs, elem;
11673
11674           if (TREE_CODE (fn) != TEMPLATE_DECL)
11675             continue;
11676
11677           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11678                                   expl_subargs, /*check_ret=*/false);
11679           if (subargs)
11680             {
11681               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
11682               good += try_one_overload (tparms, targs, tempargs, parm,
11683                                         elem, strict, sub_strict, addr_p);
11684             }
11685         }
11686     }
11687   else if (TREE_CODE (arg) != OVERLOAD
11688            && TREE_CODE (arg) != FUNCTION_DECL)
11689     /* If ARG is, for example, "(0, &f)" then its type will be unknown
11690        -- but the deduction does not succeed because the expression is
11691        not just the function on its own.  */
11692     return false;
11693   else
11694     for (; arg; arg = OVL_NEXT (arg))
11695       good += try_one_overload (tparms, targs, tempargs, parm,
11696                                 TREE_TYPE (OVL_CURRENT (arg)),
11697                                 strict, sub_strict, addr_p);
11698
11699   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11700      to function or pointer to member function argument if the set of
11701      overloaded functions does not contain function templates and at most
11702      one of a set of overloaded functions provides a unique match.
11703
11704      So if we found multiple possibilities, we return success but don't
11705      deduce anything.  */
11706
11707   if (good == 1)
11708     {
11709       int i = TREE_VEC_LENGTH (targs);
11710       for (; i--; )
11711         if (TREE_VEC_ELT (tempargs, i))
11712           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11713     }
11714   if (good)
11715     return true;
11716
11717   return false;
11718 }
11719
11720 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11721    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
11722    different overloads deduce different arguments for a given parm.
11723    ADDR_P is true if the expression for which deduction is being
11724    performed was of the form "& fn" rather than simply "fn".
11725
11726    Returns 1 on success.  */
11727
11728 static int
11729 try_one_overload (tree tparms,
11730                   tree orig_targs,
11731                   tree targs,
11732                   tree parm,
11733                   tree arg,
11734                   unification_kind_t strict,
11735                   int sub_strict,
11736                   bool addr_p)
11737 {
11738   int nargs;
11739   tree tempargs;
11740   int i;
11741
11742   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11743      to function or pointer to member function argument if the set of
11744      overloaded functions does not contain function templates and at most
11745      one of a set of overloaded functions provides a unique match.
11746
11747      So if this is a template, just return success.  */
11748
11749   if (uses_template_parms (arg))
11750     return 1;
11751
11752   if (TREE_CODE (arg) == METHOD_TYPE)
11753     arg = build_ptrmemfunc_type (build_pointer_type (arg));
11754   else if (addr_p)
11755     arg = build_pointer_type (arg);
11756
11757   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
11758
11759   /* We don't copy orig_targs for this because if we have already deduced
11760      some template args from previous args, unify would complain when we
11761      try to deduce a template parameter for the same argument, even though
11762      there isn't really a conflict.  */
11763   nargs = TREE_VEC_LENGTH (targs);
11764   tempargs = make_tree_vec (nargs);
11765
11766   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
11767     return 0;
11768
11769   /* First make sure we didn't deduce anything that conflicts with
11770      explicitly specified args.  */
11771   for (i = nargs; i--; )
11772     {
11773       tree elt = TREE_VEC_ELT (tempargs, i);
11774       tree oldelt = TREE_VEC_ELT (orig_targs, i);
11775
11776       if (!elt)
11777         /*NOP*/;
11778       else if (uses_template_parms (elt))
11779         /* Since we're unifying against ourselves, we will fill in
11780            template args used in the function parm list with our own
11781            template parms.  Discard them.  */
11782         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
11783       else if (oldelt && !template_args_equal (oldelt, elt))
11784         return 0;
11785     }
11786
11787   for (i = nargs; i--; )
11788     {
11789       tree elt = TREE_VEC_ELT (tempargs, i);
11790
11791       if (elt)
11792         TREE_VEC_ELT (targs, i) = elt;
11793     }
11794
11795   return 1;
11796 }
11797
11798 /* PARM is a template class (perhaps with unbound template
11799    parameters).  ARG is a fully instantiated type.  If ARG can be
11800    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
11801    TARGS are as for unify.  */
11802
11803 static tree
11804 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
11805 {
11806   tree copy_of_targs;
11807
11808   if (!CLASSTYPE_TEMPLATE_INFO (arg)
11809       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
11810           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
11811     return NULL_TREE;
11812
11813   /* We need to make a new template argument vector for the call to
11814      unify.  If we used TARGS, we'd clutter it up with the result of
11815      the attempted unification, even if this class didn't work out.
11816      We also don't want to commit ourselves to all the unifications
11817      we've already done, since unification is supposed to be done on
11818      an argument-by-argument basis.  In other words, consider the
11819      following pathological case:
11820
11821        template <int I, int J, int K>
11822        struct S {};
11823
11824        template <int I, int J>
11825        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
11826
11827        template <int I, int J, int K>
11828        void f(S<I, J, K>, S<I, I, I>);
11829
11830        void g() {
11831          S<0, 0, 0> s0;
11832          S<0, 1, 2> s2;
11833
11834          f(s0, s2);
11835        }
11836
11837      Now, by the time we consider the unification involving `s2', we
11838      already know that we must have `f<0, 0, 0>'.  But, even though
11839      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
11840      because there are two ways to unify base classes of S<0, 1, 2>
11841      with S<I, I, I>.  If we kept the already deduced knowledge, we
11842      would reject the possibility I=1.  */
11843   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
11844
11845   /* If unification failed, we're done.  */
11846   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
11847              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
11848     return NULL_TREE;
11849
11850   return arg;
11851 }
11852
11853 /* Given a template type PARM and a class type ARG, find the unique
11854    base type in ARG that is an instance of PARM.  We do not examine
11855    ARG itself; only its base-classes.  If there is not exactly one
11856    appropriate base class, return NULL_TREE.  PARM may be the type of
11857    a partial specialization, as well as a plain template type.  Used
11858    by unify.  */
11859
11860 static tree
11861 get_template_base (tree tparms, tree targs, tree parm, tree arg)
11862 {
11863   tree rval = NULL_TREE;
11864   tree binfo;
11865
11866   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
11867
11868   binfo = TYPE_BINFO (complete_type (arg));
11869   if (!binfo)
11870     /* The type could not be completed.  */
11871     return NULL_TREE;
11872
11873   /* Walk in inheritance graph order.  The search order is not
11874      important, and this avoids multiple walks of virtual bases.  */
11875   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
11876     {
11877       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
11878
11879       if (r)
11880         {
11881           /* If there is more than one satisfactory baseclass, then:
11882
11883                [temp.deduct.call]
11884
11885               If they yield more than one possible deduced A, the type
11886               deduction fails.
11887
11888              applies.  */
11889           if (rval && !same_type_p (r, rval))
11890             return NULL_TREE;
11891
11892           rval = r;
11893         }
11894     }
11895
11896   return rval;
11897 }
11898
11899 /* Returns the level of DECL, which declares a template parameter.  */
11900
11901 static int
11902 template_decl_level (tree decl)
11903 {
11904   switch (TREE_CODE (decl))
11905     {
11906     case TYPE_DECL:
11907     case TEMPLATE_DECL:
11908       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
11909
11910     case PARM_DECL:
11911       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
11912
11913     default:
11914       gcc_unreachable ();
11915     }
11916   return 0;
11917 }
11918
11919 /* Decide whether ARG can be unified with PARM, considering only the
11920    cv-qualifiers of each type, given STRICT as documented for unify.
11921    Returns nonzero iff the unification is OK on that basis.  */
11922
11923 static int
11924 check_cv_quals_for_unify (int strict, tree arg, tree parm)
11925 {
11926   int arg_quals = cp_type_quals (arg);
11927   int parm_quals = cp_type_quals (parm);
11928
11929   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11930       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
11931     {
11932       /*  Although a CVR qualifier is ignored when being applied to a
11933           substituted template parameter ([8.3.2]/1 for example), that
11934           does not apply during deduction [14.8.2.4]/1, (even though
11935           that is not explicitly mentioned, [14.8.2.4]/9 indicates
11936           this).  Except when we're allowing additional CV qualifiers
11937           at the outer level [14.8.2.1]/3,1st bullet.  */
11938       if ((TREE_CODE (arg) == REFERENCE_TYPE
11939            || TREE_CODE (arg) == FUNCTION_TYPE
11940            || TREE_CODE (arg) == METHOD_TYPE)
11941           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
11942         return 0;
11943
11944       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
11945           && (parm_quals & TYPE_QUAL_RESTRICT))
11946         return 0;
11947     }
11948
11949   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
11950       && (arg_quals & parm_quals) != parm_quals)
11951     return 0;
11952
11953   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
11954       && (parm_quals & arg_quals) != arg_quals)
11955     return 0;
11956
11957   return 1;
11958 }
11959
11960 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
11961 void 
11962 template_parm_level_and_index (tree parm, int* level, int* index)
11963 {
11964   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11965       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
11966       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
11967     {
11968       *index = TEMPLATE_TYPE_IDX (parm);
11969       *level = TEMPLATE_TYPE_LEVEL (parm);
11970     }
11971   else
11972     {
11973       *index = TEMPLATE_PARM_IDX (parm);
11974       *level = TEMPLATE_PARM_LEVEL (parm);
11975     }
11976 }
11977
11978 /* Unifies the remaining arguments in PACKED_ARGS with the pack
11979    expansion at the end of PACKED_PARMS. Returns 0 if the type
11980    deduction succeeds, 1 otherwise. STRICT is the same as in
11981    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
11982    call argument list. We'll need to adjust the arguments to make them
11983    types. SUBR tells us if this is from a recursive call to
11984    type_unification_real.  */
11985 int
11986 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
11987                       tree packed_args, int strict, bool call_args_p,
11988                       bool subr)
11989 {
11990   tree parm 
11991     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
11992   tree pattern = PACK_EXPANSION_PATTERN (parm);
11993   tree pack, packs = NULL_TREE;
11994   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
11995   int len = TREE_VEC_LENGTH (packed_args);
11996
11997   /* Determine the parameter packs we will be deducing from the
11998      pattern, and record their current deductions.  */
11999   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12000        pack; pack = TREE_CHAIN (pack))
12001     {
12002       tree parm_pack = TREE_VALUE (pack);
12003       int idx, level;
12004
12005       /* Determine the index and level of this parameter pack.  */
12006       template_parm_level_and_index (parm_pack, &level, &idx);
12007
12008       /* Keep track of the parameter packs and their corresponding
12009          argument packs.  */
12010       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12011       TREE_TYPE (packs) = make_tree_vec (len - start);
12012     }
12013   
12014   /* Loop through all of the arguments that have not yet been
12015      unified and unify each with the pattern.  */
12016   for (i = start; i < len; i++)
12017     {
12018       tree parm = pattern;
12019
12020       /* For each parameter pack, clear out the deduced value so that
12021          we can deduce it again.  */
12022       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12023         {
12024           int idx, level;
12025           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12026
12027           TMPL_ARG (targs, level, idx) = NULL_TREE;
12028         }
12029
12030       /* Unify the pattern with the current argument.  */
12031       {
12032         tree arg = TREE_VEC_ELT (packed_args, i);
12033         int arg_strict = strict;
12034         bool skip_arg_p = false;
12035
12036         if (call_args_p)
12037           {
12038             int sub_strict;
12039
12040             /* This mirrors what we do in type_unification_real.  */
12041             switch (strict)
12042               {
12043               case DEDUCE_CALL:
12044                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12045                               | UNIFY_ALLOW_MORE_CV_QUAL
12046                               | UNIFY_ALLOW_DERIVED);
12047                 break;
12048                 
12049               case DEDUCE_CONV:
12050                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12051                 break;
12052                 
12053               case DEDUCE_EXACT:
12054                 sub_strict = UNIFY_ALLOW_NONE;
12055                 break;
12056                 
12057               default:
12058                 gcc_unreachable ();
12059               }
12060
12061             if (!TYPE_P (arg))
12062               {
12063                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12064                 if (type_unknown_p (arg))
12065                   {
12066                     /* [temp.deduct.type] A template-argument can be
12067                        deduced from a pointer to function or pointer
12068                        to member function argument if the set of
12069                        overloaded functions does not contain function
12070                        templates and at most one of a set of
12071                        overloaded functions provides a unique
12072                        match.  */
12073
12074                     if (resolve_overloaded_unification
12075                         (tparms, targs, parm, arg, strict, sub_strict)
12076                         != 0)
12077                       return 1;
12078                     skip_arg_p = true;
12079                   }
12080
12081                 if (!skip_arg_p)
12082                   {
12083                     arg = TREE_TYPE (arg);
12084                     if (arg == error_mark_node)
12085                       return 1;
12086                   }
12087               }
12088       
12089             arg_strict = sub_strict;
12090
12091             if (!subr)
12092               arg_strict |= 
12093                 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12094           }
12095
12096         if (!skip_arg_p)
12097           {
12098             if (unify (tparms, targs, parm, arg, arg_strict))
12099               return 1;
12100           }
12101       }
12102
12103       /* For each parameter pack, collect the deduced value.  */
12104       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12105         {
12106           int idx, level;
12107           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12108
12109           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12110             TMPL_ARG (targs, level, idx);
12111         }
12112     }
12113
12114   /* Verify that the results of unification with the parameter packs
12115      produce results consistent with what we've seen before, and make
12116      the deduced argument packs available.  */
12117   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12118     {
12119       tree old_pack = TREE_VALUE (pack);
12120       tree new_args = TREE_TYPE (pack);
12121
12122       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12123         {
12124           /* Prepend the explicit arguments onto NEW_ARGS.  */
12125           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12126           tree old_args = new_args;
12127           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12128           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12129
12130           /* Copy the explicit arguments.  */
12131           new_args = make_tree_vec (len);
12132           for (i = 0; i < explicit_len; i++)
12133             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12134
12135           /* Copy the deduced arguments.  */
12136           for (; i < len; i++)
12137             TREE_VEC_ELT (new_args, i) =
12138               TREE_VEC_ELT (old_args, i - explicit_len);
12139         }
12140
12141       if (!old_pack)
12142         {
12143           tree result;
12144           int idx, level;
12145           
12146           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12147
12148           /* Build the deduced *_ARGUMENT_PACK.  */
12149           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12150             {
12151               result = make_node (NONTYPE_ARGUMENT_PACK);
12152               TREE_TYPE (result) = 
12153                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12154               TREE_CONSTANT (result) = 1;
12155             }
12156           else
12157             result = make_node (TYPE_ARGUMENT_PACK);
12158
12159           SET_ARGUMENT_PACK_ARGS (result, new_args);
12160
12161           /* Note the deduced argument packs for this parameter
12162              pack.  */
12163           TMPL_ARG (targs, level, idx) = result;
12164         }
12165       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12166                && (ARGUMENT_PACK_ARGS (old_pack) 
12167                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12168         {
12169           /* We only had the explicitly-provided arguments before, but
12170              now we have a complete set of arguments.  */
12171           int idx, level;
12172           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12173           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12174
12175           /* Keep the original deduced argument pack.  */
12176           TMPL_ARG (targs, level, idx) = old_pack;
12177
12178           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12179           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12180           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12181         }
12182       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12183                                     new_args))
12184         /* Inconsistent unification of this parameter pack.  */
12185         return 1;
12186       else
12187         {
12188           int idx, level;
12189           
12190           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12191
12192           /* Keep the original deduced argument pack.  */
12193           TMPL_ARG (targs, level, idx) = old_pack;
12194         }
12195     }
12196
12197   return 0;
12198 }
12199
12200 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12201    set of template parameters to a template.  TARGS is the bindings
12202    for those template parameters, as determined thus far; TARGS may
12203    include template arguments for outer levels of template parameters
12204    as well.  PARM is a parameter to a template function, or a
12205    subcomponent of that parameter; ARG is the corresponding argument.
12206    This function attempts to match PARM with ARG in a manner
12207    consistent with the existing assignments in TARGS.  If more values
12208    are deduced, then TARGS is updated.
12209
12210    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12211    parameter STRICT is a bitwise or of the following flags:
12212
12213      UNIFY_ALLOW_NONE:
12214        Require an exact match between PARM and ARG.
12215      UNIFY_ALLOW_MORE_CV_QUAL:
12216        Allow the deduced ARG to be more cv-qualified (by qualification
12217        conversion) than ARG.
12218      UNIFY_ALLOW_LESS_CV_QUAL:
12219        Allow the deduced ARG to be less cv-qualified than ARG.
12220      UNIFY_ALLOW_DERIVED:
12221        Allow the deduced ARG to be a template base class of ARG,
12222        or a pointer to a template base class of the type pointed to by
12223        ARG.
12224      UNIFY_ALLOW_INTEGER:
12225        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
12226        case for more information.
12227      UNIFY_ALLOW_OUTER_LEVEL:
12228        This is the outermost level of a deduction. Used to determine validity
12229        of qualification conversions. A valid qualification conversion must
12230        have const qualified pointers leading up to the inner type which
12231        requires additional CV quals, except at the outer level, where const
12232        is not required [conv.qual]. It would be normal to set this flag in
12233        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12234      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12235        This is the outermost level of a deduction, and PARM can be more CV
12236        qualified at this point.
12237      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12238        This is the outermost level of a deduction, and PARM can be less CV
12239        qualified at this point.  */
12240
12241 static int
12242 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12243 {
12244   int idx;
12245   tree targ;
12246   tree tparm;
12247   int strict_in = strict;
12248
12249   /* I don't think this will do the right thing with respect to types.
12250      But the only case I've seen it in so far has been array bounds, where
12251      signedness is the only information lost, and I think that will be
12252      okay.  */
12253   while (TREE_CODE (parm) == NOP_EXPR)
12254     parm = TREE_OPERAND (parm, 0);
12255
12256   if (arg == error_mark_node)
12257     return 1;
12258   if (arg == unknown_type_node)
12259     /* We can't deduce anything from this, but we might get all the
12260        template args from other function args.  */
12261     return 0;
12262
12263   /* If PARM uses template parameters, then we can't bail out here,
12264      even if ARG == PARM, since we won't record unifications for the
12265      template parameters.  We might need them if we're trying to
12266      figure out which of two things is more specialized.  */
12267   if (arg == parm && !uses_template_parms (parm))
12268     return 0;
12269
12270   /* Immediately reject some pairs that won't unify because of
12271      cv-qualification mismatches.  */
12272   if (TREE_CODE (arg) == TREE_CODE (parm)
12273       && TYPE_P (arg)
12274       /* It is the elements of the array which hold the cv quals of an array
12275          type, and the elements might be template type parms. We'll check
12276          when we recurse.  */
12277       && TREE_CODE (arg) != ARRAY_TYPE
12278       /* We check the cv-qualifiers when unifying with template type
12279          parameters below.  We want to allow ARG `const T' to unify with
12280          PARM `T' for example, when computing which of two templates
12281          is more specialized, for example.  */
12282       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12283       && !check_cv_quals_for_unify (strict_in, arg, parm))
12284     return 1;
12285
12286   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12287       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12288     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12289   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12290   strict &= ~UNIFY_ALLOW_DERIVED;
12291   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12292   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12293
12294   switch (TREE_CODE (parm))
12295     {
12296     case TYPENAME_TYPE:
12297     case SCOPE_REF:
12298     case UNBOUND_CLASS_TEMPLATE:
12299       /* In a type which contains a nested-name-specifier, template
12300          argument values cannot be deduced for template parameters used
12301          within the nested-name-specifier.  */
12302       return 0;
12303
12304     case TEMPLATE_TYPE_PARM:
12305     case TEMPLATE_TEMPLATE_PARM:
12306     case BOUND_TEMPLATE_TEMPLATE_PARM:
12307       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12308       if (tparm == error_mark_node)
12309         return 1;
12310
12311       if (TEMPLATE_TYPE_LEVEL (parm)
12312           != template_decl_level (tparm))
12313         /* The PARM is not one we're trying to unify.  Just check
12314            to see if it matches ARG.  */
12315         return (TREE_CODE (arg) == TREE_CODE (parm)
12316                 && same_type_p (parm, arg)) ? 0 : 1;
12317       idx = TEMPLATE_TYPE_IDX (parm);
12318       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12319       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12320
12321       /* Check for mixed types and values.  */
12322       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12323            && TREE_CODE (tparm) != TYPE_DECL)
12324           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12325               && TREE_CODE (tparm) != TEMPLATE_DECL))
12326         return 1;
12327
12328       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12329         {
12330           /* ARG must be constructed from a template class or a template
12331              template parameter.  */
12332           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12333               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12334             return 1;
12335
12336           {
12337             tree parmvec = TYPE_TI_ARGS (parm);
12338             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12339             tree argtmplvec
12340               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12341             int i;
12342
12343             /* The resolution to DR150 makes clear that default
12344                arguments for an N-argument may not be used to bind T
12345                to a template template parameter with fewer than N
12346                parameters.  It is not safe to permit the binding of
12347                default arguments as an extension, as that may change
12348                the meaning of a conforming program.  Consider:
12349
12350                   struct Dense { static const unsigned int dim = 1; };
12351
12352                   template <template <typename> class View,
12353                             typename Block>
12354                   void operator+(float, View<Block> const&);
12355
12356                   template <typename Block,
12357                             unsigned int Dim = Block::dim>
12358                   struct Lvalue_proxy { operator float() const; };
12359
12360                   void
12361                   test_1d (void) {
12362                     Lvalue_proxy<Dense> p;
12363                     float b;
12364                     b + p;
12365                   }
12366
12367               Here, if Lvalue_proxy is permitted to bind to View, then
12368               the global operator+ will be used; if they are not, the
12369               Lvalue_proxy will be converted to float.  */
12370             if (coerce_template_parms (argtmplvec, parmvec,
12371                                        TYPE_TI_TEMPLATE (parm),
12372                                        tf_none,
12373                                        /*require_all_args=*/true,
12374                                        /*use_default_args=*/false)
12375                 == error_mark_node)
12376               return 1;
12377
12378             /* Deduce arguments T, i from TT<T> or TT<i>.
12379                We check each element of PARMVEC and ARGVEC individually
12380                rather than the whole TREE_VEC since they can have
12381                different number of elements.  */
12382
12383             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12384               {
12385                 if (unify (tparms, targs,
12386                            TREE_VEC_ELT (parmvec, i),
12387                            TREE_VEC_ELT (argvec, i),
12388                            UNIFY_ALLOW_NONE))
12389                   return 1;
12390               }
12391           }
12392           arg = TYPE_TI_TEMPLATE (arg);
12393
12394           /* Fall through to deduce template name.  */
12395         }
12396
12397       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12398           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12399         {
12400           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
12401
12402           /* Simple cases: Value already set, does match or doesn't.  */
12403           if (targ != NULL_TREE && template_args_equal (targ, arg))
12404             return 0;
12405           else if (targ)
12406             return 1;
12407         }
12408       else
12409         {
12410           /* If PARM is `const T' and ARG is only `int', we don't have
12411              a match unless we are allowing additional qualification.
12412              If ARG is `const int' and PARM is just `T' that's OK;
12413              that binds `const int' to `T'.  */
12414           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12415                                          arg, parm))
12416             return 1;
12417
12418           /* Consider the case where ARG is `const volatile int' and
12419              PARM is `const T'.  Then, T should be `volatile int'.  */
12420           arg = cp_build_qualified_type_real
12421             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12422           if (arg == error_mark_node)
12423             return 1;
12424
12425           /* Simple cases: Value already set, does match or doesn't.  */
12426           if (targ != NULL_TREE && same_type_p (targ, arg))
12427             return 0;
12428           else if (targ)
12429             return 1;
12430
12431           /* Make sure that ARG is not a variable-sized array.  (Note
12432              that were talking about variable-sized arrays (like
12433              `int[n]'), rather than arrays of unknown size (like
12434              `int[]').)  We'll get very confused by such a type since
12435              the bound of the array will not be computable in an
12436              instantiation.  Besides, such types are not allowed in
12437              ISO C++, so we can do as we please here.  */
12438           if (variably_modified_type_p (arg, NULL_TREE))
12439             return 1;
12440         }
12441
12442       /* If ARG is a parameter pack or an expansion, we cannot unify
12443          against it unless PARM is also a parameter pack.  */
12444       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12445           && !template_parameter_pack_p (parm))
12446         return 1;
12447
12448       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12449       return 0;
12450
12451     case TEMPLATE_PARM_INDEX:
12452       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12453       if (tparm == error_mark_node)
12454         return 1;
12455
12456       if (TEMPLATE_PARM_LEVEL (parm)
12457           != template_decl_level (tparm))
12458         /* The PARM is not one we're trying to unify.  Just check
12459            to see if it matches ARG.  */
12460         return !(TREE_CODE (arg) == TREE_CODE (parm)
12461                  && cp_tree_equal (parm, arg));
12462
12463       idx = TEMPLATE_PARM_IDX (parm);
12464       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12465
12466       if (targ)
12467         return !cp_tree_equal (targ, arg);
12468
12469       /* [temp.deduct.type] If, in the declaration of a function template
12470          with a non-type template-parameter, the non-type
12471          template-parameter is used in an expression in the function
12472          parameter-list and, if the corresponding template-argument is
12473          deduced, the template-argument type shall match the type of the
12474          template-parameter exactly, except that a template-argument
12475          deduced from an array bound may be of any integral type.
12476          The non-type parameter might use already deduced type parameters.  */
12477       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12478       if (!TREE_TYPE (arg))
12479         /* Template-parameter dependent expression.  Just accept it for now.
12480            It will later be processed in convert_template_argument.  */
12481         ;
12482       else if (same_type_p (TREE_TYPE (arg), tparm))
12483         /* OK */;
12484       else if ((strict & UNIFY_ALLOW_INTEGER)
12485                && (TREE_CODE (tparm) == INTEGER_TYPE
12486                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
12487         /* Convert the ARG to the type of PARM; the deduced non-type
12488            template argument must exactly match the types of the
12489            corresponding parameter.  */
12490         arg = fold (build_nop (TREE_TYPE (parm), arg));
12491       else if (uses_template_parms (tparm))
12492         /* We haven't deduced the type of this parameter yet.  Try again
12493            later.  */
12494         return 0;
12495       else
12496         return 1;
12497
12498       /* If ARG is a parameter pack or an expansion, we cannot unify
12499          against it unless PARM is also a parameter pack.  */
12500       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12501           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12502         return 1;
12503
12504       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12505       return 0;
12506
12507     case PTRMEM_CST:
12508      {
12509         /* A pointer-to-member constant can be unified only with
12510          another constant.  */
12511       if (TREE_CODE (arg) != PTRMEM_CST)
12512         return 1;
12513
12514       /* Just unify the class member. It would be useless (and possibly
12515          wrong, depending on the strict flags) to unify also
12516          PTRMEM_CST_CLASS, because we want to be sure that both parm and
12517          arg refer to the same variable, even if through different
12518          classes. For instance:
12519
12520          struct A { int x; };
12521          struct B : A { };
12522
12523          Unification of &A::x and &B::x must succeed.  */
12524       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
12525                     PTRMEM_CST_MEMBER (arg), strict);
12526      }
12527
12528     case POINTER_TYPE:
12529       {
12530         if (TREE_CODE (arg) != POINTER_TYPE)
12531           return 1;
12532
12533         /* [temp.deduct.call]
12534
12535            A can be another pointer or pointer to member type that can
12536            be converted to the deduced A via a qualification
12537            conversion (_conv.qual_).
12538
12539            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12540            This will allow for additional cv-qualification of the
12541            pointed-to types if appropriate.  */
12542
12543         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
12544           /* The derived-to-base conversion only persists through one
12545              level of pointers.  */
12546           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
12547
12548         return unify (tparms, targs, TREE_TYPE (parm),
12549                       TREE_TYPE (arg), strict);
12550       }
12551
12552     case REFERENCE_TYPE:
12553       if (TREE_CODE (arg) != REFERENCE_TYPE)
12554         return 1;
12555       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12556                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12557
12558     case ARRAY_TYPE:
12559       if (TREE_CODE (arg) != ARRAY_TYPE)
12560         return 1;
12561       if ((TYPE_DOMAIN (parm) == NULL_TREE)
12562           != (TYPE_DOMAIN (arg) == NULL_TREE))
12563         return 1;
12564       if (TYPE_DOMAIN (parm) != NULL_TREE)
12565         {
12566           tree parm_max;
12567           tree arg_max;
12568           bool parm_cst;
12569           bool arg_cst;
12570
12571           /* Our representation of array types uses "N - 1" as the
12572              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12573              not an integer constant.  We cannot unify arbitrarily
12574              complex expressions, so we eliminate the MINUS_EXPRs
12575              here.  */
12576           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12577           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12578           if (!parm_cst)
12579             {
12580               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
12581               parm_max = TREE_OPERAND (parm_max, 0);
12582             }
12583           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12584           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12585           if (!arg_cst)
12586             {
12587               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12588                  trying to unify the type of a variable with the type
12589                  of a template parameter.  For example:
12590
12591                    template <unsigned int N>
12592                    void f (char (&) [N]);
12593                    int g(); 
12594                    void h(int i) {
12595                      char a[g(i)];
12596                      f(a); 
12597                    }
12598
12599                 Here, the type of the ARG will be "int [g(i)]", and
12600                 may be a SAVE_EXPR, etc.  */
12601               if (TREE_CODE (arg_max) != MINUS_EXPR)
12602                 return 1;
12603               arg_max = TREE_OPERAND (arg_max, 0);
12604             }
12605
12606           /* If only one of the bounds used a MINUS_EXPR, compensate
12607              by adding one to the other bound.  */
12608           if (parm_cst && !arg_cst)
12609             parm_max = fold_build2 (PLUS_EXPR,
12610                                     integer_type_node,
12611                                     parm_max,
12612                                     integer_one_node);
12613           else if (arg_cst && !parm_cst)
12614             arg_max = fold_build2 (PLUS_EXPR,
12615                                    integer_type_node,
12616                                    arg_max,
12617                                    integer_one_node);
12618
12619           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12620             return 1;
12621         }
12622       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12623                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12624
12625     case REAL_TYPE:
12626     case COMPLEX_TYPE:
12627     case VECTOR_TYPE:
12628     case INTEGER_TYPE:
12629     case BOOLEAN_TYPE:
12630     case ENUMERAL_TYPE:
12631     case VOID_TYPE:
12632       if (TREE_CODE (arg) != TREE_CODE (parm))
12633         return 1;
12634
12635       /* We have already checked cv-qualification at the top of the
12636          function.  */
12637       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
12638         return 1;
12639
12640       /* As far as unification is concerned, this wins.  Later checks
12641          will invalidate it if necessary.  */
12642       return 0;
12643
12644       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
12645       /* Type INTEGER_CST can come from ordinary constant template args.  */
12646     case INTEGER_CST:
12647       while (TREE_CODE (arg) == NOP_EXPR)
12648         arg = TREE_OPERAND (arg, 0);
12649
12650       if (TREE_CODE (arg) != INTEGER_CST)
12651         return 1;
12652       return !tree_int_cst_equal (parm, arg);
12653
12654     case TREE_VEC:
12655       {
12656         int i;
12657         if (TREE_CODE (arg) != TREE_VEC)
12658           return 1;
12659         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12660           return 1;
12661         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
12662           if (unify (tparms, targs,
12663                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
12664                      UNIFY_ALLOW_NONE))
12665             return 1;
12666         return 0;
12667       }
12668
12669     case RECORD_TYPE:
12670     case UNION_TYPE:
12671       if (TREE_CODE (arg) != TREE_CODE (parm))
12672         return 1;
12673
12674       if (TYPE_PTRMEMFUNC_P (parm))
12675         {
12676           if (!TYPE_PTRMEMFUNC_P (arg))
12677             return 1;
12678
12679           return unify (tparms, targs,
12680                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
12681                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
12682                         strict);
12683         }
12684
12685       if (CLASSTYPE_TEMPLATE_INFO (parm))
12686         {
12687           tree t = NULL_TREE;
12688
12689           if (strict_in & UNIFY_ALLOW_DERIVED)
12690             {
12691               /* First, we try to unify the PARM and ARG directly.  */
12692               t = try_class_unification (tparms, targs,
12693                                          parm, arg);
12694
12695               if (!t)
12696                 {
12697                   /* Fallback to the special case allowed in
12698                      [temp.deduct.call]:
12699
12700                        If P is a class, and P has the form
12701                        template-id, then A can be a derived class of
12702                        the deduced A.  Likewise, if P is a pointer to
12703                        a class of the form template-id, A can be a
12704                        pointer to a derived class pointed to by the
12705                        deduced A.  */
12706                   t = get_template_base (tparms, targs, parm, arg);
12707
12708                   if (!t)
12709                     return 1;
12710                 }
12711             }
12712           else if (CLASSTYPE_TEMPLATE_INFO (arg)
12713                    && (CLASSTYPE_TI_TEMPLATE (parm)
12714                        == CLASSTYPE_TI_TEMPLATE (arg)))
12715             /* Perhaps PARM is something like S<U> and ARG is S<int>.
12716                Then, we should unify `int' and `U'.  */
12717             t = arg;
12718           else
12719             /* There's no chance of unification succeeding.  */
12720             return 1;
12721
12722           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
12723                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
12724         }
12725       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
12726         return 1;
12727       return 0;
12728
12729     case METHOD_TYPE:
12730     case FUNCTION_TYPE:
12731       if (TREE_CODE (arg) != TREE_CODE (parm))
12732         return 1;
12733
12734       /* CV qualifications for methods can never be deduced, they must
12735          match exactly.  We need to check them explicitly here,
12736          because type_unification_real treats them as any other
12737          cvqualified parameter.  */
12738       if (TREE_CODE (parm) == METHOD_TYPE
12739           && (!check_cv_quals_for_unify
12740               (UNIFY_ALLOW_NONE,
12741                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12742                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12743         return 1;
12744
12745       if (unify (tparms, targs, TREE_TYPE (parm),
12746                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
12747         return 1;
12748       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
12749                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
12750                                     LOOKUP_NORMAL);
12751
12752     case OFFSET_TYPE:
12753       /* Unify a pointer to member with a pointer to member function, which
12754          deduces the type of the member as a function type. */
12755       if (TYPE_PTRMEMFUNC_P (arg))
12756         {
12757           tree method_type;
12758           tree fntype;
12759           cp_cv_quals cv_quals;
12760
12761           /* Check top-level cv qualifiers */
12762           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
12763             return 1;
12764
12765           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12766                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
12767             return 1;
12768
12769           /* Determine the type of the function we are unifying against. */
12770           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
12771           fntype =
12772             build_function_type (TREE_TYPE (method_type),
12773                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
12774
12775           /* Extract the cv-qualifiers of the member function from the
12776              implicit object parameter and place them on the function
12777              type to be restored later. */
12778           cv_quals =
12779             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
12780           fntype = build_qualified_type (fntype, cv_quals);
12781           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
12782         }
12783
12784       if (TREE_CODE (arg) != OFFSET_TYPE)
12785         return 1;
12786       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12787                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
12788         return 1;
12789       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12790                     strict);
12791
12792     case CONST_DECL:
12793       if (DECL_TEMPLATE_PARM_P (parm))
12794         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
12795       if (arg != integral_constant_value (parm))
12796         return 1;
12797       return 0;
12798
12799     case FIELD_DECL:
12800     case TEMPLATE_DECL:
12801       /* Matched cases are handled by the ARG == PARM test above.  */
12802       return 1;
12803
12804     case TYPE_ARGUMENT_PACK:
12805     case NONTYPE_ARGUMENT_PACK:
12806       {
12807         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
12808         tree packed_args = ARGUMENT_PACK_ARGS (arg);
12809         int i, len = TREE_VEC_LENGTH (packed_parms);
12810         int argslen = TREE_VEC_LENGTH (packed_args);
12811         int parm_variadic_p = 0;
12812
12813         /* Check if the parameters end in a pack, making them variadic.  */
12814         if (len > 0 
12815             && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
12816           parm_variadic_p = 1;
12817
12818         /* If we don't have enough arguments to satisfy the parameters
12819            (not counting the pack expression at the end), or we have
12820            too many arguments for a parameter list that doesn't end in
12821            a pack expression, we can't unify.  */
12822         if (argslen < (len - parm_variadic_p)
12823             || (argslen > len && !parm_variadic_p))
12824           return 1;
12825
12826         /* Unify all of the parameters that precede the (optional)
12827            pack expression.  */
12828         for (i = 0; i < len - parm_variadic_p; ++i)
12829           {
12830             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
12831                        TREE_VEC_ELT (packed_args, i), strict))
12832               return 1;
12833           }
12834
12835         if (parm_variadic_p)
12836           return unify_pack_expansion (tparms, targs, 
12837                                        packed_parms, packed_args,
12838                                        strict, /*call_args_p=*/false,
12839                                        /*subr=*/false);
12840         return 0;
12841       }
12842
12843       break;
12844
12845     case TYPEOF_TYPE:
12846     case DECLTYPE_TYPE:
12847       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
12848          nodes.  */
12849       return 0;
12850
12851     default:
12852       gcc_assert (EXPR_P (parm));
12853
12854       /* We must be looking at an expression.  This can happen with
12855          something like:
12856
12857            template <int I>
12858            void foo(S<I>, S<I + 2>);
12859
12860          This is a "nondeduced context":
12861
12862            [deduct.type]
12863
12864            The nondeduced contexts are:
12865
12866            --A type that is a template-id in which one or more of
12867              the template-arguments is an expression that references
12868              a template-parameter.
12869
12870          In these cases, we assume deduction succeeded, but don't
12871          actually infer any unifications.  */
12872
12873       if (!uses_template_parms (parm)
12874           && !template_args_equal (parm, arg))
12875         return 1;
12876       else
12877         return 0;
12878     }
12879 }
12880 \f
12881 /* Note that DECL can be defined in this translation unit, if
12882    required.  */
12883
12884 static void
12885 mark_definable (tree decl)
12886 {
12887   tree clone;
12888   DECL_NOT_REALLY_EXTERN (decl) = 1;
12889   FOR_EACH_CLONE (clone, decl)
12890     DECL_NOT_REALLY_EXTERN (clone) = 1;
12891 }
12892
12893 /* Called if RESULT is explicitly instantiated, or is a member of an
12894    explicitly instantiated class.  */
12895
12896 void
12897 mark_decl_instantiated (tree result, int extern_p)
12898 {
12899   SET_DECL_EXPLICIT_INSTANTIATION (result);
12900
12901   /* If this entity has already been written out, it's too late to
12902      make any modifications.  */
12903   if (TREE_ASM_WRITTEN (result))
12904     return;
12905
12906   if (TREE_CODE (result) != FUNCTION_DECL)
12907     /* The TREE_PUBLIC flag for function declarations will have been
12908        set correctly by tsubst.  */
12909     TREE_PUBLIC (result) = 1;
12910
12911   /* This might have been set by an earlier implicit instantiation.  */
12912   DECL_COMDAT (result) = 0;
12913
12914   if (extern_p)
12915     DECL_NOT_REALLY_EXTERN (result) = 0;
12916   else
12917     {
12918       mark_definable (result);
12919       /* Always make artificials weak.  */
12920       if (DECL_ARTIFICIAL (result) && flag_weak)
12921         comdat_linkage (result);
12922       /* For WIN32 we also want to put explicit instantiations in
12923          linkonce sections.  */
12924       else if (TREE_PUBLIC (result))
12925         maybe_make_one_only (result);
12926     }
12927
12928   /* If EXTERN_P, then this function will not be emitted -- unless
12929      followed by an explicit instantiation, at which point its linkage
12930      will be adjusted.  If !EXTERN_P, then this function will be
12931      emitted here.  In neither circumstance do we want
12932      import_export_decl to adjust the linkage.  */
12933   DECL_INTERFACE_KNOWN (result) = 1;
12934 }
12935
12936 /* Given two function templates PAT1 and PAT2, return:
12937
12938    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
12939    -1 if PAT2 is more specialized than PAT1.
12940    0 if neither is more specialized.
12941
12942    LEN indicates the number of parameters we should consider
12943    (defaulted parameters should not be considered).
12944
12945    The 1998 std underspecified function template partial ordering, and
12946    DR214 addresses the issue.  We take pairs of arguments, one from
12947    each of the templates, and deduce them against each other.  One of
12948    the templates will be more specialized if all the *other*
12949    template's arguments deduce against its arguments and at least one
12950    of its arguments *does* *not* deduce against the other template's
12951    corresponding argument.  Deduction is done as for class templates.
12952    The arguments used in deduction have reference and top level cv
12953    qualifiers removed.  Iff both arguments were originally reference
12954    types *and* deduction succeeds in both directions, the template
12955    with the more cv-qualified argument wins for that pairing (if
12956    neither is more cv-qualified, they both are equal).  Unlike regular
12957    deduction, after all the arguments have been deduced in this way,
12958    we do *not* verify the deduced template argument values can be
12959    substituted into non-deduced contexts, nor do we have to verify
12960    that all template arguments have been deduced.  */
12961
12962 int
12963 more_specialized_fn (tree pat1, tree pat2, int len)
12964 {
12965   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
12966   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
12967   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
12968   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
12969   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
12970   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
12971   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
12972   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
12973   int better1 = 0;
12974   int better2 = 0;
12975
12976   /* Remove the this parameter from non-static member functions.  If
12977      one is a non-static member function and the other is not a static
12978      member function, remove the first parameter from that function
12979      also.  This situation occurs for operator functions where we
12980      locate both a member function (with this pointer) and non-member
12981      operator (with explicit first operand).  */
12982   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
12983     {
12984       len--; /* LEN is the number of significant arguments for DECL1 */
12985       args1 = TREE_CHAIN (args1);
12986       if (!DECL_STATIC_FUNCTION_P (decl2))
12987         args2 = TREE_CHAIN (args2);
12988     }
12989   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
12990     {
12991       args2 = TREE_CHAIN (args2);
12992       if (!DECL_STATIC_FUNCTION_P (decl1))
12993         {
12994           len--;
12995           args1 = TREE_CHAIN (args1);
12996         }
12997     }
12998
12999   /* If only one is a conversion operator, they are unordered.  */
13000   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13001     return 0;
13002
13003   /* Consider the return type for a conversion function */
13004   if (DECL_CONV_FN_P (decl1))
13005     {
13006       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13007       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13008       len++;
13009     }
13010
13011   processing_template_decl++;
13012
13013   while (len--)
13014     {
13015       tree arg1 = TREE_VALUE (args1);
13016       tree arg2 = TREE_VALUE (args2);
13017       int deduce1, deduce2;
13018       int quals1 = -1;
13019       int quals2 = -1;
13020
13021       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13022           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13023         {
13024           /* When both arguments are pack expansions, we need only
13025              unify the patterns themselves.  */
13026           arg1 = PACK_EXPANSION_PATTERN (arg1);
13027           arg2 = PACK_EXPANSION_PATTERN (arg2);
13028
13029           /* This is the last comparison we need to do.  */
13030           len = 0;
13031         }
13032
13033       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13034         {
13035           arg1 = TREE_TYPE (arg1);
13036           quals1 = cp_type_quals (arg1);
13037         }
13038
13039       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13040         {
13041           arg2 = TREE_TYPE (arg2);
13042           quals2 = cp_type_quals (arg2);
13043         }
13044
13045       if ((quals1 < 0) != (quals2 < 0))
13046         {
13047           /* Only of the args is a reference, see if we should apply
13048              array/function pointer decay to it.  This is not part of
13049              DR214, but is, IMHO, consistent with the deduction rules
13050              for the function call itself, and with our earlier
13051              implementation of the underspecified partial ordering
13052              rules.  (nathan).  */
13053           if (quals1 >= 0)
13054             {
13055               switch (TREE_CODE (arg1))
13056                 {
13057                 case ARRAY_TYPE:
13058                   arg1 = TREE_TYPE (arg1);
13059                   /* FALLTHROUGH. */
13060                 case FUNCTION_TYPE:
13061                   arg1 = build_pointer_type (arg1);
13062                   break;
13063
13064                 default:
13065                   break;
13066                 }
13067             }
13068           else
13069             {
13070               switch (TREE_CODE (arg2))
13071                 {
13072                 case ARRAY_TYPE:
13073                   arg2 = TREE_TYPE (arg2);
13074                   /* FALLTHROUGH. */
13075                 case FUNCTION_TYPE:
13076                   arg2 = build_pointer_type (arg2);
13077                   break;
13078
13079                 default:
13080                   break;
13081                 }
13082             }
13083         }
13084
13085       arg1 = TYPE_MAIN_VARIANT (arg1);
13086       arg2 = TYPE_MAIN_VARIANT (arg2);
13087
13088       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13089         {
13090           int i, len2 = list_length (args2);
13091           tree parmvec = make_tree_vec (1);
13092           tree argvec = make_tree_vec (len2);
13093           tree ta = args2;
13094
13095           /* Setup the parameter vector, which contains only ARG1.  */
13096           TREE_VEC_ELT (parmvec, 0) = arg1;
13097
13098           /* Setup the argument vector, which contains the remaining
13099              arguments.  */
13100           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13101             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13102
13103           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13104                                            argvec, UNIFY_ALLOW_NONE, 
13105                                            /*call_args_p=*/false, 
13106                                            /*subr=*/0);
13107
13108           /* We cannot deduce in the other direction, because ARG1 is
13109              a pack expansion but ARG2 is not.  */
13110           deduce2 = 0;
13111         }
13112       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13113         {
13114           int i, len1 = list_length (args1);
13115           tree parmvec = make_tree_vec (1);
13116           tree argvec = make_tree_vec (len1);
13117           tree ta = args1;
13118
13119           /* Setup the parameter vector, which contains only ARG1.  */
13120           TREE_VEC_ELT (parmvec, 0) = arg2;
13121
13122           /* Setup the argument vector, which contains the remaining
13123              arguments.  */
13124           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13125             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13126
13127           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13128                                            argvec, UNIFY_ALLOW_NONE, 
13129                                            /*call_args_p=*/false, 
13130                                            /*subr=*/0);
13131
13132           /* We cannot deduce in the other direction, because ARG2 is
13133              a pack expansion but ARG1 is not.*/
13134           deduce1 = 0;
13135         }
13136
13137       else
13138         {
13139           /* The normal case, where neither argument is a pack
13140              expansion.  */
13141           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13142           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13143         }
13144
13145       if (!deduce1)
13146         better2 = -1;
13147       if (!deduce2)
13148         better1 = -1;
13149       if (better1 < 0 && better2 < 0)
13150         /* We've failed to deduce something in either direction.
13151            These must be unordered.  */
13152         break;
13153
13154       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13155         {
13156           /* Deduces in both directions, see if quals can
13157              disambiguate.  Pretend the worse one failed to deduce. */
13158           if ((quals1 & quals2) == quals2)
13159             deduce1 = 0;
13160           if ((quals1 & quals2) == quals1)
13161             deduce2 = 0;
13162         }
13163       if (deduce1 && !deduce2 && !better2)
13164         better2 = 1;
13165       if (deduce2 && !deduce1 && !better1)
13166         better1 = 1;
13167
13168       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13169           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13170         /* We have already processed all of the arguments in our
13171            handing of the pack expansion type.  */
13172         len = 0;
13173
13174       args1 = TREE_CHAIN (args1);
13175       args2 = TREE_CHAIN (args2);
13176     }
13177
13178   processing_template_decl--;
13179
13180   /* All things being equal, if the next argument is a pack expansion
13181      for one function but not for the other, prefer the
13182      non-variadic function.  */
13183   if ((better1 > 0) - (better2 > 0) == 0
13184       && args1 && TREE_VALUE (args1)
13185       && args2 && TREE_VALUE (args2))
13186     {
13187       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13188         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13189       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13190         return 1;
13191     }
13192
13193   return (better1 > 0) - (better2 > 0);
13194 }
13195
13196 /* Determine which of two partial specializations is more specialized.
13197
13198    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13199    to the first partial specialization.  The TREE_VALUE is the
13200    innermost set of template parameters for the partial
13201    specialization.  PAT2 is similar, but for the second template.
13202
13203    Return 1 if the first partial specialization is more specialized;
13204    -1 if the second is more specialized; 0 if neither is more
13205    specialized.
13206
13207    See [temp.class.order] for information about determining which of
13208    two templates is more specialized.  */
13209
13210 static int
13211 more_specialized_class (tree pat1, tree pat2)
13212 {
13213   tree targs;
13214   tree tmpl1, tmpl2;
13215   int winner = 0;
13216   bool any_deductions = false;
13217
13218   tmpl1 = TREE_TYPE (pat1);
13219   tmpl2 = TREE_TYPE (pat2);
13220
13221   /* Just like what happens for functions, if we are ordering between
13222      different class template specializations, we may encounter dependent
13223      types in the arguments, and we need our dependency check functions
13224      to behave correctly.  */
13225   ++processing_template_decl;
13226   targs = get_class_bindings (TREE_VALUE (pat1),
13227                               CLASSTYPE_TI_ARGS (tmpl1),
13228                               CLASSTYPE_TI_ARGS (tmpl2));
13229   if (targs)
13230     {
13231       --winner;
13232       any_deductions = true;
13233     }
13234
13235   targs = get_class_bindings (TREE_VALUE (pat2),
13236                               CLASSTYPE_TI_ARGS (tmpl2),
13237                               CLASSTYPE_TI_ARGS (tmpl1));
13238   if (targs)
13239     {
13240       ++winner;
13241       any_deductions = true;
13242     }
13243   --processing_template_decl;
13244
13245   /* In the case of a tie where at least one of the class templates
13246      has a parameter pack at the end, the template with the most
13247      non-packed parameters wins.  */
13248   if (winner == 0
13249       && any_deductions
13250       && (template_args_variadic_p (TREE_PURPOSE (pat1))
13251           || template_args_variadic_p (TREE_PURPOSE (pat2))))
13252     {
13253       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13254       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13255       int len1 = TREE_VEC_LENGTH (args1);
13256       int len2 = TREE_VEC_LENGTH (args2);
13257
13258       /* We don't count the pack expansion at the end.  */
13259       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13260         --len1;
13261       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13262         --len2;
13263
13264       if (len1 > len2)
13265         return 1;
13266       else if (len1 < len2)
13267         return -1;
13268     }
13269
13270   return winner;
13271 }
13272
13273 /* Return the template arguments that will produce the function signature
13274    DECL from the function template FN, with the explicit template
13275    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
13276    also match.  Return NULL_TREE if no satisfactory arguments could be
13277    found.  */
13278
13279 static tree
13280 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13281 {
13282   int ntparms = DECL_NTPARMS (fn);
13283   tree targs = make_tree_vec (ntparms);
13284   tree decl_type;
13285   tree decl_arg_types;
13286
13287   /* Substitute the explicit template arguments into the type of DECL.
13288      The call to fn_type_unification will handle substitution into the
13289      FN.  */
13290   decl_type = TREE_TYPE (decl);
13291   if (explicit_args && uses_template_parms (decl_type))
13292     {
13293       tree tmpl;
13294       tree converted_args;
13295
13296       if (DECL_TEMPLATE_INFO (decl))
13297         tmpl = DECL_TI_TEMPLATE (decl);
13298       else
13299         /* We can get here for some invalid specializations.  */
13300         return NULL_TREE;
13301
13302       converted_args
13303         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13304                                  explicit_args, NULL_TREE,
13305                                  tf_none,
13306                                  /*require_all_args=*/false,
13307                                  /*use_default_args=*/false);
13308       if (converted_args == error_mark_node)
13309         return NULL_TREE;
13310
13311       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13312       if (decl_type == error_mark_node)
13313         return NULL_TREE;
13314     }
13315
13316   /* Never do unification on the 'this' parameter.  */
13317   decl_arg_types = skip_artificial_parms_for (decl, 
13318                                               TYPE_ARG_TYPES (decl_type));
13319
13320   if (fn_type_unification (fn, explicit_args, targs,
13321                            decl_arg_types,
13322                            (check_rettype || DECL_CONV_FN_P (fn)
13323                             ? TREE_TYPE (decl_type) : NULL_TREE),
13324                            DEDUCE_EXACT, LOOKUP_NORMAL))
13325     return NULL_TREE;
13326
13327   return targs;
13328 }
13329
13330 /* Return the innermost template arguments that, when applied to a
13331    template specialization whose innermost template parameters are
13332    TPARMS, and whose specialization arguments are PARMS, yield the
13333    ARGS.
13334
13335    For example, suppose we have:
13336
13337      template <class T, class U> struct S {};
13338      template <class T> struct S<T*, int> {};
13339
13340    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
13341    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13342    int}.  The resulting vector will be {double}, indicating that `T'
13343    is bound to `double'.  */
13344
13345 static tree
13346 get_class_bindings (tree tparms, tree spec_args, tree args)
13347 {
13348   int i, ntparms = TREE_VEC_LENGTH (tparms);
13349   tree deduced_args;
13350   tree innermost_deduced_args;
13351
13352   innermost_deduced_args = make_tree_vec (ntparms);
13353   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13354     {
13355       deduced_args = copy_node (args);
13356       SET_TMPL_ARGS_LEVEL (deduced_args,
13357                            TMPL_ARGS_DEPTH (deduced_args),
13358                            innermost_deduced_args);
13359     }
13360   else
13361     deduced_args = innermost_deduced_args;
13362
13363   if (unify (tparms, deduced_args,
13364              INNERMOST_TEMPLATE_ARGS (spec_args),
13365              INNERMOST_TEMPLATE_ARGS (args),
13366              UNIFY_ALLOW_NONE))
13367     return NULL_TREE;
13368
13369   for (i =  0; i < ntparms; ++i)
13370     if (! TREE_VEC_ELT (innermost_deduced_args, i))
13371       return NULL_TREE;
13372
13373   /* Verify that nondeduced template arguments agree with the type
13374      obtained from argument deduction.
13375
13376      For example:
13377
13378        struct A { typedef int X; };
13379        template <class T, class U> struct C {};
13380        template <class T> struct C<T, typename T::X> {};
13381
13382      Then with the instantiation `C<A, int>', we can deduce that
13383      `T' is `A' but unify () does not check whether `typename T::X'
13384      is `int'.  */
13385   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13386   if (spec_args == error_mark_node
13387       /* We only need to check the innermost arguments; the other
13388          arguments will always agree.  */
13389       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13390                               INNERMOST_TEMPLATE_ARGS (args)))
13391     return NULL_TREE;
13392
13393   return deduced_args;
13394 }
13395
13396 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
13397    Return the TREE_LIST node with the most specialized template, if
13398    any.  If there is no most specialized template, the error_mark_node
13399    is returned.
13400
13401    Note that this function does not look at, or modify, the
13402    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
13403    returned is one of the elements of INSTANTIATIONS, callers may
13404    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13405    and retrieve it from the value returned.  */
13406
13407 tree
13408 most_specialized_instantiation (tree templates)
13409 {
13410   tree fn, champ;
13411
13412   ++processing_template_decl;
13413
13414   champ = templates;
13415   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13416     {
13417       int fate = 0;
13418
13419       if (get_bindings (TREE_VALUE (champ),
13420                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13421                         NULL_TREE, /*check_ret=*/false))
13422         fate--;
13423
13424       if (get_bindings (TREE_VALUE (fn),
13425                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13426                         NULL_TREE, /*check_ret=*/false))
13427         fate++;
13428
13429       if (fate == -1)
13430         champ = fn;
13431       else if (!fate)
13432         {
13433           /* Equally specialized, move to next function.  If there
13434              is no next function, nothing's most specialized.  */
13435           fn = TREE_CHAIN (fn);
13436           champ = fn;
13437           if (!fn)
13438             break;
13439         }
13440     }
13441
13442   if (champ)
13443     /* Now verify that champ is better than everything earlier in the
13444        instantiation list.  */
13445     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13446       if (get_bindings (TREE_VALUE (champ),
13447                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13448                         NULL_TREE, /*check_ret=*/false)
13449           || !get_bindings (TREE_VALUE (fn),
13450                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13451                             NULL_TREE, /*check_ret=*/false))
13452         {
13453           champ = NULL_TREE;
13454           break;
13455         }
13456
13457   processing_template_decl--;
13458
13459   if (!champ)
13460     return error_mark_node;
13461
13462   return champ;
13463 }
13464
13465 /* If DECL is a specialization of some template, return the most
13466    general such template.  Otherwise, returns NULL_TREE.
13467
13468    For example, given:
13469
13470      template <class T> struct S { template <class U> void f(U); };
13471
13472    if TMPL is `template <class U> void S<int>::f(U)' this will return
13473    the full template.  This function will not trace past partial
13474    specializations, however.  For example, given in addition:
13475
13476      template <class T> struct S<T*> { template <class U> void f(U); };
13477
13478    if TMPL is `template <class U> void S<int*>::f(U)' this will return
13479    `template <class T> template <class U> S<T*>::f(U)'.  */
13480
13481 tree
13482 most_general_template (tree decl)
13483 {
13484   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13485      an immediate specialization.  */
13486   if (TREE_CODE (decl) == FUNCTION_DECL)
13487     {
13488       if (DECL_TEMPLATE_INFO (decl)) {
13489         decl = DECL_TI_TEMPLATE (decl);
13490
13491         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13492            template friend.  */
13493         if (TREE_CODE (decl) != TEMPLATE_DECL)
13494           return NULL_TREE;
13495       } else
13496         return NULL_TREE;
13497     }
13498
13499   /* Look for more and more general templates.  */
13500   while (DECL_TEMPLATE_INFO (decl))
13501     {
13502       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13503          (See cp-tree.h for details.)  */
13504       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13505         break;
13506
13507       if (CLASS_TYPE_P (TREE_TYPE (decl))
13508           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13509         break;
13510
13511       /* Stop if we run into an explicitly specialized class template.  */
13512       if (!DECL_NAMESPACE_SCOPE_P (decl)
13513           && DECL_CONTEXT (decl)
13514           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13515         break;
13516
13517       decl = DECL_TI_TEMPLATE (decl);
13518     }
13519
13520   return decl;
13521 }
13522
13523 /* Return the most specialized of the class template partial
13524    specializations of TMPL which can produce TYPE, a specialization of
13525    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
13526    a _TYPE node corresponding to the partial specialization, while the
13527    TREE_PURPOSE is the set of template arguments that must be
13528    substituted into the TREE_TYPE in order to generate TYPE.
13529
13530    If the choice of partial specialization is ambiguous, a diagnostic
13531    is issued, and the error_mark_node is returned.  If there are no
13532    partial specializations of TMPL matching TYPE, then NULL_TREE is
13533    returned.  */
13534
13535 static tree
13536 most_specialized_class (tree type, tree tmpl)
13537 {
13538   tree list = NULL_TREE;
13539   tree t;
13540   tree champ;
13541   int fate;
13542   bool ambiguous_p;
13543   tree args;
13544
13545   tmpl = most_general_template (tmpl);
13546   args = CLASSTYPE_TI_ARGS (type);
13547   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
13548     {
13549       tree partial_spec_args;
13550       tree spec_args;
13551
13552       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
13553       spec_args = get_class_bindings (TREE_VALUE (t),
13554                                       partial_spec_args,
13555                                       args);
13556       if (spec_args)
13557         {
13558           list = tree_cons (spec_args, TREE_VALUE (t), list);
13559           TREE_TYPE (list) = TREE_TYPE (t);
13560         }
13561     }
13562
13563   if (! list)
13564     return NULL_TREE;
13565
13566   ambiguous_p = false;
13567   t = list;
13568   champ = t;
13569   t = TREE_CHAIN (t);
13570   for (; t; t = TREE_CHAIN (t))
13571     {
13572       fate = more_specialized_class (champ, t);
13573       if (fate == 1)
13574         ;
13575       else
13576         {
13577           if (fate == 0)
13578             {
13579               t = TREE_CHAIN (t);
13580               if (! t)
13581                 {
13582                   ambiguous_p = true;
13583                   break;
13584                 }
13585             }
13586           champ = t;
13587         }
13588     }
13589
13590   if (!ambiguous_p)
13591     for (t = list; t && t != champ; t = TREE_CHAIN (t))
13592       {
13593         fate = more_specialized_class (champ, t);
13594         if (fate != 1)
13595           {
13596             ambiguous_p = true;
13597             break;
13598           }
13599       }
13600
13601   if (ambiguous_p)
13602     {
13603       const char *str = "candidates are:";
13604       error ("ambiguous class template instantiation for %q#T", type);
13605       for (t = list; t; t = TREE_CHAIN (t))
13606         {
13607           error ("%s %+#T", str, TREE_TYPE (t));
13608           str = "               ";
13609         }
13610       return error_mark_node;
13611     }
13612
13613   return champ;
13614 }
13615
13616 /* Explicitly instantiate DECL.  */
13617
13618 void
13619 do_decl_instantiation (tree decl, tree storage)
13620 {
13621   tree result = NULL_TREE;
13622   int extern_p = 0;
13623
13624   if (!decl || decl == error_mark_node)
13625     /* An error occurred, for which grokdeclarator has already issued
13626        an appropriate message.  */
13627     return;
13628   else if (! DECL_LANG_SPECIFIC (decl))
13629     {
13630       error ("explicit instantiation of non-template %q#D", decl);
13631       return;
13632     }
13633   else if (TREE_CODE (decl) == VAR_DECL)
13634     {
13635       /* There is an asymmetry here in the way VAR_DECLs and
13636          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
13637          the latter, the DECL we get back will be marked as a
13638          template instantiation, and the appropriate
13639          DECL_TEMPLATE_INFO will be set up.  This does not happen for
13640          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
13641          should handle VAR_DECLs as it currently handles
13642          FUNCTION_DECLs.  */
13643       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
13644       if (!result || TREE_CODE (result) != VAR_DECL)
13645         {
13646           error ("no matching template for %qD found", decl);
13647           return;
13648         }
13649       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13650         {
13651           error ("type %qT for explicit instantiation %qD does not match "
13652                  "declared type %qT", TREE_TYPE (result), decl,
13653                  TREE_TYPE (decl));
13654           return;
13655         }
13656     }
13657   else if (TREE_CODE (decl) != FUNCTION_DECL)
13658     {
13659       error ("explicit instantiation of %q#D", decl);
13660       return;
13661     }
13662   else
13663     result = decl;
13664
13665   /* Check for various error cases.  Note that if the explicit
13666      instantiation is valid the RESULT will currently be marked as an
13667      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13668      until we get here.  */
13669
13670   if (DECL_TEMPLATE_SPECIALIZATION (result))
13671     {
13672       /* DR 259 [temp.spec].
13673
13674          Both an explicit instantiation and a declaration of an explicit
13675          specialization shall not appear in a program unless the explicit
13676          instantiation follows a declaration of the explicit specialization.
13677
13678          For a given set of template parameters, if an explicit
13679          instantiation of a template appears after a declaration of an
13680          explicit specialization for that template, the explicit
13681          instantiation has no effect.  */
13682       return;
13683     }
13684   else if (DECL_EXPLICIT_INSTANTIATION (result))
13685     {
13686       /* [temp.spec]
13687
13688          No program shall explicitly instantiate any template more
13689          than once.
13690
13691          We check DECL_NOT_REALLY_EXTERN so as not to complain when
13692          the first instantiation was `extern' and the second is not,
13693          and EXTERN_P for the opposite case.  */
13694       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
13695         pedwarn ("duplicate explicit instantiation of %q#D", result);
13696       /* If an "extern" explicit instantiation follows an ordinary
13697          explicit instantiation, the template is instantiated.  */
13698       if (extern_p)
13699         return;
13700     }
13701   else if (!DECL_IMPLICIT_INSTANTIATION (result))
13702     {
13703       error ("no matching template for %qD found", result);
13704       return;
13705     }
13706   else if (!DECL_TEMPLATE_INFO (result))
13707     {
13708       pedwarn ("explicit instantiation of non-template %q#D", result);
13709       return;
13710     }
13711
13712   if (storage == NULL_TREE)
13713     ;
13714   else if (storage == ridpointers[(int) RID_EXTERN])
13715     {
13716       if (pedantic && !in_system_header)
13717         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
13718                  "instantiations");
13719       extern_p = 1;
13720     }
13721   else
13722     error ("storage class %qD applied to template instantiation", storage);
13723
13724   check_explicit_instantiation_namespace (result);
13725   mark_decl_instantiated (result, extern_p);
13726   if (! extern_p)
13727     instantiate_decl (result, /*defer_ok=*/1,
13728                       /*expl_inst_class_mem_p=*/false);
13729 }
13730
13731 static void
13732 mark_class_instantiated (tree t, int extern_p)
13733 {
13734   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
13735   SET_CLASSTYPE_INTERFACE_KNOWN (t);
13736   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
13737   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
13738   if (! extern_p)
13739     {
13740       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
13741       rest_of_type_compilation (t, 1);
13742     }
13743 }
13744
13745 /* Called from do_type_instantiation through binding_table_foreach to
13746    do recursive instantiation for the type bound in ENTRY.  */
13747 static void
13748 bt_instantiate_type_proc (binding_entry entry, void *data)
13749 {
13750   tree storage = *(tree *) data;
13751
13752   if (IS_AGGR_TYPE (entry->type)
13753       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
13754     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
13755 }
13756
13757 /* Called from do_type_instantiation to instantiate a member
13758    (a member function or a static member variable) of an
13759    explicitly instantiated class template.  */
13760 static void
13761 instantiate_class_member (tree decl, int extern_p)
13762 {
13763   mark_decl_instantiated (decl, extern_p);
13764   if (! extern_p)
13765     instantiate_decl (decl, /*defer_ok=*/1,
13766                       /*expl_inst_class_mem_p=*/true);
13767 }
13768
13769 /* Perform an explicit instantiation of template class T.  STORAGE, if
13770    non-null, is the RID for extern, inline or static.  COMPLAIN is
13771    nonzero if this is called from the parser, zero if called recursively,
13772    since the standard is unclear (as detailed below).  */
13773
13774 void
13775 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
13776 {
13777   int extern_p = 0;
13778   int nomem_p = 0;
13779   int static_p = 0;
13780   int previous_instantiation_extern_p = 0;
13781
13782   if (TREE_CODE (t) == TYPE_DECL)
13783     t = TREE_TYPE (t);
13784
13785   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
13786     {
13787       error ("explicit instantiation of non-template type %qT", t);
13788       return;
13789     }
13790
13791   complete_type (t);
13792
13793   if (!COMPLETE_TYPE_P (t))
13794     {
13795       if (complain & tf_error)
13796         error ("explicit instantiation of %q#T before definition of template",
13797                t);
13798       return;
13799     }
13800
13801   if (storage != NULL_TREE)
13802     {
13803       if (pedantic && !in_system_header)
13804         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
13805                 storage);
13806
13807       if (storage == ridpointers[(int) RID_INLINE])
13808         nomem_p = 1;
13809       else if (storage == ridpointers[(int) RID_EXTERN])
13810         extern_p = 1;
13811       else if (storage == ridpointers[(int) RID_STATIC])
13812         static_p = 1;
13813       else
13814         {
13815           error ("storage class %qD applied to template instantiation",
13816                  storage);
13817           extern_p = 0;
13818         }
13819     }
13820
13821   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
13822     {
13823       /* DR 259 [temp.spec].
13824
13825          Both an explicit instantiation and a declaration of an explicit
13826          specialization shall not appear in a program unless the explicit
13827          instantiation follows a declaration of the explicit specialization.
13828
13829          For a given set of template parameters, if an explicit
13830          instantiation of a template appears after a declaration of an
13831          explicit specialization for that template, the explicit
13832          instantiation has no effect.  */
13833       return;
13834     }
13835   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
13836     {
13837       /* [temp.spec]
13838
13839          No program shall explicitly instantiate any template more
13840          than once.
13841
13842          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
13843          instantiation was `extern'.  If EXTERN_P then the second is.
13844          These cases are OK.  */
13845       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
13846
13847       if (!previous_instantiation_extern_p && !extern_p
13848           && (complain & tf_error))
13849         pedwarn ("duplicate explicit instantiation of %q#T", t);
13850
13851       /* If we've already instantiated the template, just return now.  */
13852       if (!CLASSTYPE_INTERFACE_ONLY (t))
13853         return;
13854     }
13855
13856   check_explicit_instantiation_namespace (TYPE_NAME (t));
13857   mark_class_instantiated (t, extern_p);
13858
13859   if (nomem_p)
13860     return;
13861
13862   {
13863     tree tmp;
13864
13865     /* In contrast to implicit instantiation, where only the
13866        declarations, and not the definitions, of members are
13867        instantiated, we have here:
13868
13869          [temp.explicit]
13870
13871          The explicit instantiation of a class template specialization
13872          implies the instantiation of all of its members not
13873          previously explicitly specialized in the translation unit
13874          containing the explicit instantiation.
13875
13876        Of course, we can't instantiate member template classes, since
13877        we don't have any arguments for them.  Note that the standard
13878        is unclear on whether the instantiation of the members are
13879        *explicit* instantiations or not.  However, the most natural
13880        interpretation is that it should be an explicit instantiation.  */
13881
13882     if (! static_p)
13883       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
13884         if (TREE_CODE (tmp) == FUNCTION_DECL
13885             && DECL_TEMPLATE_INSTANTIATION (tmp))
13886           instantiate_class_member (tmp, extern_p);
13887
13888     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
13889       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
13890         instantiate_class_member (tmp, extern_p);
13891
13892     if (CLASSTYPE_NESTED_UTDS (t))
13893       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
13894                              bt_instantiate_type_proc, &storage);
13895   }
13896 }
13897
13898 /* Given a function DECL, which is a specialization of TMPL, modify
13899    DECL to be a re-instantiation of TMPL with the same template
13900    arguments.  TMPL should be the template into which tsubst'ing
13901    should occur for DECL, not the most general template.
13902
13903    One reason for doing this is a scenario like this:
13904
13905      template <class T>
13906      void f(const T&, int i);
13907
13908      void g() { f(3, 7); }
13909
13910      template <class T>
13911      void f(const T& t, const int i) { }
13912
13913    Note that when the template is first instantiated, with
13914    instantiate_template, the resulting DECL will have no name for the
13915    first parameter, and the wrong type for the second.  So, when we go
13916    to instantiate the DECL, we regenerate it.  */
13917
13918 static void
13919 regenerate_decl_from_template (tree decl, tree tmpl)
13920 {
13921   /* The arguments used to instantiate DECL, from the most general
13922      template.  */
13923   tree args;
13924   tree code_pattern;
13925
13926   args = DECL_TI_ARGS (decl);
13927   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
13928
13929   /* Make sure that we can see identifiers, and compute access
13930      correctly.  */
13931   push_access_scope (decl);
13932
13933   if (TREE_CODE (decl) == FUNCTION_DECL)
13934     {
13935       tree decl_parm;
13936       tree pattern_parm;
13937       tree specs;
13938       int args_depth;
13939       int parms_depth;
13940
13941       args_depth = TMPL_ARGS_DEPTH (args);
13942       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
13943       if (args_depth > parms_depth)
13944         args = get_innermost_template_args (args, parms_depth);
13945
13946       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
13947                                               args, tf_error, NULL_TREE);
13948       if (specs)
13949         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
13950                                                     specs);
13951
13952       /* Merge parameter declarations.  */
13953       decl_parm = skip_artificial_parms_for (decl,
13954                                              DECL_ARGUMENTS (decl));
13955       pattern_parm
13956         = skip_artificial_parms_for (code_pattern,
13957                                      DECL_ARGUMENTS (code_pattern));
13958       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
13959         {
13960           tree parm_type;
13961           tree attributes;
13962           
13963           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
13964             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
13965           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
13966                               NULL_TREE);
13967           parm_type = type_decays_to (parm_type);
13968           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
13969             TREE_TYPE (decl_parm) = parm_type;
13970           attributes = DECL_ATTRIBUTES (pattern_parm);
13971           if (DECL_ATTRIBUTES (decl_parm) != attributes)
13972             {
13973               DECL_ATTRIBUTES (decl_parm) = attributes;
13974               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
13975             }
13976           decl_parm = TREE_CHAIN (decl_parm);
13977           pattern_parm = TREE_CHAIN (pattern_parm);
13978         }
13979       /* Merge any parameters that match with the function parameter
13980          pack.  */
13981       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
13982         {
13983           int i, len;
13984           tree expanded_types;
13985           /* Expand the TYPE_PACK_EXPANSION that provides the types for
13986              the parameters in this function parameter pack.  */
13987           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
13988                                                  args, tf_error, NULL_TREE);
13989           len = TREE_VEC_LENGTH (expanded_types);
13990           for (i = 0; i < len; i++)
13991             {
13992               tree parm_type;
13993               tree attributes;
13994           
13995               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
13996                 /* Rename the parameter to include the index.  */
13997                 DECL_NAME (decl_parm) = 
13998                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
13999               parm_type = TREE_VEC_ELT (expanded_types, i);
14000               parm_type = type_decays_to (parm_type);
14001               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14002                 TREE_TYPE (decl_parm) = parm_type;
14003               attributes = DECL_ATTRIBUTES (pattern_parm);
14004               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14005                 {
14006                   DECL_ATTRIBUTES (decl_parm) = attributes;
14007                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14008                 }
14009               decl_parm = TREE_CHAIN (decl_parm);
14010             }
14011         }
14012       /* Merge additional specifiers from the CODE_PATTERN.  */
14013       if (DECL_DECLARED_INLINE_P (code_pattern)
14014           && !DECL_DECLARED_INLINE_P (decl))
14015         DECL_DECLARED_INLINE_P (decl) = 1;
14016       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14017         DECL_INLINE (decl) = 1;
14018     }
14019   else if (TREE_CODE (decl) == VAR_DECL)
14020     DECL_INITIAL (decl) =
14021       tsubst_expr (DECL_INITIAL (code_pattern), args,
14022                    tf_error, DECL_TI_TEMPLATE (decl),
14023                    /*integral_constant_expression_p=*/false);
14024   else
14025     gcc_unreachable ();
14026
14027   pop_access_scope (decl);
14028 }
14029
14030 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14031    substituted to get DECL.  */
14032
14033 tree
14034 template_for_substitution (tree decl)
14035 {
14036   tree tmpl = DECL_TI_TEMPLATE (decl);
14037
14038   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14039      for the instantiation.  This is not always the most general
14040      template.  Consider, for example:
14041
14042         template <class T>
14043         struct S { template <class U> void f();
14044                    template <> void f<int>(); };
14045
14046      and an instantiation of S<double>::f<int>.  We want TD to be the
14047      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14048   while (/* An instantiation cannot have a definition, so we need a
14049             more general template.  */
14050          DECL_TEMPLATE_INSTANTIATION (tmpl)
14051            /* We must also deal with friend templates.  Given:
14052
14053                 template <class T> struct S {
14054                   template <class U> friend void f() {};
14055                 };
14056
14057               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14058               so far as the language is concerned, but that's still
14059               where we get the pattern for the instantiation from.  On
14060               other hand, if the definition comes outside the class, say:
14061
14062                 template <class T> struct S {
14063                   template <class U> friend void f();
14064                 };
14065                 template <class U> friend void f() {}
14066
14067               we don't need to look any further.  That's what the check for
14068               DECL_INITIAL is for.  */
14069           || (TREE_CODE (decl) == FUNCTION_DECL
14070               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14071               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14072     {
14073       /* The present template, TD, should not be a definition.  If it
14074          were a definition, we should be using it!  Note that we
14075          cannot restructure the loop to just keep going until we find
14076          a template with a definition, since that might go too far if
14077          a specialization was declared, but not defined.  */
14078       gcc_assert (TREE_CODE (decl) != VAR_DECL
14079                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14080
14081       /* Fetch the more general template.  */
14082       tmpl = DECL_TI_TEMPLATE (tmpl);
14083     }
14084
14085   return tmpl;
14086 }
14087
14088 /* Produce the definition of D, a _DECL generated from a template.  If
14089    DEFER_OK is nonzero, then we don't have to actually do the
14090    instantiation now; we just have to do it sometime.  Normally it is
14091    an error if this is an explicit instantiation but D is undefined.
14092    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14093    explicitly instantiated class template.  */
14094
14095 tree
14096 instantiate_decl (tree d, int defer_ok,
14097                   bool expl_inst_class_mem_p)
14098 {
14099   tree tmpl = DECL_TI_TEMPLATE (d);
14100   tree gen_args;
14101   tree args;
14102   tree td;
14103   tree code_pattern;
14104   tree spec;
14105   tree gen_tmpl;
14106   bool pattern_defined;
14107   int need_push;
14108   location_t saved_loc = input_location;
14109   int saved_in_system_header = in_system_header;
14110   bool external_p;
14111
14112   /* This function should only be used to instantiate templates for
14113      functions and static member variables.  */
14114   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14115               || TREE_CODE (d) == VAR_DECL);
14116
14117   /* Variables are never deferred; if instantiation is required, they
14118      are instantiated right away.  That allows for better code in the
14119      case that an expression refers to the value of the variable --
14120      if the variable has a constant value the referring expression can
14121      take advantage of that fact.  */
14122   if (TREE_CODE (d) == VAR_DECL)
14123     defer_ok = 0;
14124
14125   /* Don't instantiate cloned functions.  Instead, instantiate the
14126      functions they cloned.  */
14127   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14128     d = DECL_CLONED_FUNCTION (d);
14129
14130   if (DECL_TEMPLATE_INSTANTIATED (d))
14131     /* D has already been instantiated.  It might seem reasonable to
14132        check whether or not D is an explicit instantiation, and, if so,
14133        stop here.  But when an explicit instantiation is deferred
14134        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14135        is set, even though we still need to do the instantiation.  */
14136     return d;
14137
14138   /* If we already have a specialization of this declaration, then
14139      there's no reason to instantiate it.  Note that
14140      retrieve_specialization gives us both instantiations and
14141      specializations, so we must explicitly check
14142      DECL_TEMPLATE_SPECIALIZATION.  */
14143   gen_tmpl = most_general_template (tmpl);
14144   gen_args = DECL_TI_ARGS (d);
14145   spec = retrieve_specialization (gen_tmpl, gen_args,
14146                                   /*class_specializations_p=*/false);
14147   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14148     return spec;
14149
14150   /* This needs to happen before any tsubsting.  */
14151   if (! push_tinst_level (d))
14152     return d;
14153
14154   timevar_push (TV_PARSE);
14155
14156   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14157      for the instantiation.  */
14158   td = template_for_substitution (d);
14159   code_pattern = DECL_TEMPLATE_RESULT (td);
14160
14161   /* We should never be trying to instantiate a member of a class
14162      template or partial specialization.  */
14163   gcc_assert (d != code_pattern);
14164
14165   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14166       || DECL_TEMPLATE_SPECIALIZATION (td))
14167     /* In the case of a friend template whose definition is provided
14168        outside the class, we may have too many arguments.  Drop the
14169        ones we don't need.  The same is true for specializations.  */
14170     args = get_innermost_template_args
14171       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
14172   else
14173     args = gen_args;
14174
14175   if (TREE_CODE (d) == FUNCTION_DECL)
14176     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14177   else
14178     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14179
14180   /* We may be in the middle of deferred access check.  Disable it now.  */
14181   push_deferring_access_checks (dk_no_deferred);
14182
14183   /* Unless an explicit instantiation directive has already determined
14184      the linkage of D, remember that a definition is available for
14185      this entity.  */
14186   if (pattern_defined
14187       && !DECL_INTERFACE_KNOWN (d)
14188       && !DECL_NOT_REALLY_EXTERN (d))
14189     mark_definable (d);
14190
14191   input_location = DECL_SOURCE_LOCATION (d);
14192   in_system_header = DECL_IN_SYSTEM_HEADER (d);
14193
14194   /* If D is a member of an explicitly instantiated class template,
14195      and no definition is available, treat it like an implicit
14196      instantiation.  */
14197   if (!pattern_defined && expl_inst_class_mem_p
14198       && DECL_EXPLICIT_INSTANTIATION (d))
14199     {
14200       DECL_NOT_REALLY_EXTERN (d) = 0;
14201       DECL_INTERFACE_KNOWN (d) = 0;
14202       SET_DECL_IMPLICIT_INSTANTIATION (d);
14203     }
14204
14205   if (!defer_ok)
14206     {
14207       /* Recheck the substitutions to obtain any warning messages
14208          about ignoring cv qualifiers.  */
14209       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14210       tree type = TREE_TYPE (gen);
14211
14212       /* Make sure that we can see identifiers, and compute access
14213          correctly.  D is already the target FUNCTION_DECL with the
14214          right context.  */
14215       push_access_scope (d);
14216
14217       if (TREE_CODE (gen) == FUNCTION_DECL)
14218         {
14219           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14220           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14221                                           d);
14222           /* Don't simply tsubst the function type, as that will give
14223              duplicate warnings about poor parameter qualifications.
14224              The function arguments are the same as the decl_arguments
14225              without the top level cv qualifiers.  */
14226           type = TREE_TYPE (type);
14227         }
14228       tsubst (type, gen_args, tf_warning_or_error, d);
14229
14230       pop_access_scope (d);
14231     }
14232
14233   /* Check to see whether we know that this template will be
14234      instantiated in some other file, as with "extern template"
14235      extension.  */
14236   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14237   /* In general, we do not instantiate such templates...  */
14238   if (external_p
14239       /* ... but we instantiate inline functions so that we can inline
14240          them and ... */
14241       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14242       /* ... we instantiate static data members whose values are
14243          needed in integral constant expressions.  */
14244       && ! (TREE_CODE (d) == VAR_DECL
14245             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14246     goto out;
14247   /* Defer all other templates, unless we have been explicitly
14248      forbidden from doing so.  */
14249   if (/* If there is no definition, we cannot instantiate the
14250          template.  */
14251       ! pattern_defined
14252       /* If it's OK to postpone instantiation, do so.  */
14253       || defer_ok
14254       /* If this is a static data member that will be defined
14255          elsewhere, we don't want to instantiate the entire data
14256          member, but we do want to instantiate the initializer so that
14257          we can substitute that elsewhere.  */
14258       || (external_p && TREE_CODE (d) == VAR_DECL))
14259     {
14260       /* The definition of the static data member is now required so
14261          we must substitute the initializer.  */
14262       if (TREE_CODE (d) == VAR_DECL
14263           && !DECL_INITIAL (d)
14264           && DECL_INITIAL (code_pattern))
14265         {
14266           tree ns;
14267           tree init;
14268
14269           ns = decl_namespace_context (d);
14270           push_nested_namespace (ns);
14271           push_nested_class (DECL_CONTEXT (d));
14272           init = tsubst_expr (DECL_INITIAL (code_pattern),
14273                               args,
14274                               tf_warning_or_error, NULL_TREE,
14275                               /*integral_constant_expression_p=*/false);
14276           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14277                           /*asmspec_tree=*/NULL_TREE,
14278                           LOOKUP_ONLYCONVERTING);
14279           pop_nested_class ();
14280           pop_nested_namespace (ns);
14281         }
14282
14283       /* We restore the source position here because it's used by
14284          add_pending_template.  */
14285       input_location = saved_loc;
14286
14287       if (at_eof && !pattern_defined
14288           && DECL_EXPLICIT_INSTANTIATION (d))
14289         /* [temp.explicit]
14290
14291            The definition of a non-exported function template, a
14292            non-exported member function template, or a non-exported
14293            member function or static data member of a class template
14294            shall be present in every translation unit in which it is
14295            explicitly instantiated.  */
14296         pedwarn
14297           ("explicit instantiation of %qD but no definition available", d);
14298
14299       /* ??? Historically, we have instantiated inline functions, even
14300          when marked as "extern template".  */
14301       if (!(external_p && TREE_CODE (d) == VAR_DECL))
14302         add_pending_template (d);
14303       goto out;
14304     }
14305   /* Tell the repository that D is available in this translation unit
14306      -- and see if it is supposed to be instantiated here.  */
14307   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14308     {
14309       /* In a PCH file, despite the fact that the repository hasn't
14310          requested instantiation in the PCH it is still possible that
14311          an instantiation will be required in a file that includes the
14312          PCH.  */
14313       if (pch_file)
14314         add_pending_template (d);
14315       /* Instantiate inline functions so that the inliner can do its
14316          job, even though we'll not be emitting a copy of this
14317          function.  */
14318       if (!(TREE_CODE (d) == FUNCTION_DECL
14319             && flag_inline_trees
14320             && DECL_DECLARED_INLINE_P (d)))
14321         goto out;
14322     }
14323
14324   need_push = !cfun || !global_bindings_p ();
14325   if (need_push)
14326     push_to_top_level ();
14327
14328   /* Mark D as instantiated so that recursive calls to
14329      instantiate_decl do not try to instantiate it again.  */
14330   DECL_TEMPLATE_INSTANTIATED (d) = 1;
14331
14332   /* Regenerate the declaration in case the template has been modified
14333      by a subsequent redeclaration.  */
14334   regenerate_decl_from_template (d, td);
14335
14336   /* We already set the file and line above.  Reset them now in case
14337      they changed as a result of calling regenerate_decl_from_template.  */
14338   input_location = DECL_SOURCE_LOCATION (d);
14339
14340   if (TREE_CODE (d) == VAR_DECL)
14341     {
14342       tree init;
14343
14344       /* Clear out DECL_RTL; whatever was there before may not be right
14345          since we've reset the type of the declaration.  */
14346       SET_DECL_RTL (d, NULL_RTX);
14347       DECL_IN_AGGR_P (d) = 0;
14348
14349       /* The initializer is placed in DECL_INITIAL by
14350          regenerate_decl_from_template.  Pull it out so that
14351          finish_decl can process it.  */
14352       init = DECL_INITIAL (d);
14353       DECL_INITIAL (d) = NULL_TREE;
14354       DECL_INITIALIZED_P (d) = 0;
14355
14356       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14357          initializer.  That function will defer actual emission until
14358          we have a chance to determine linkage.  */
14359       DECL_EXTERNAL (d) = 0;
14360
14361       /* Enter the scope of D so that access-checking works correctly.  */
14362       push_nested_class (DECL_CONTEXT (d));
14363       finish_decl (d, init, NULL_TREE);
14364       pop_nested_class ();
14365     }
14366   else if (TREE_CODE (d) == FUNCTION_DECL)
14367     {
14368       htab_t saved_local_specializations;
14369       tree subst_decl;
14370       tree tmpl_parm;
14371       tree spec_parm;
14372
14373       /* Save away the current list, in case we are instantiating one
14374          template from within the body of another.  */
14375       saved_local_specializations = local_specializations;
14376
14377       /* Set up the list of local specializations.  */
14378       local_specializations = htab_create (37,
14379                                            hash_local_specialization,
14380                                            eq_local_specializations,
14381                                            NULL);
14382
14383       /* Set up context.  */
14384       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14385
14386       /* Create substitution entries for the parameters.  */
14387       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14388       tmpl_parm = DECL_ARGUMENTS (subst_decl);
14389       spec_parm = DECL_ARGUMENTS (d);
14390       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14391         {
14392           register_local_specialization (spec_parm, tmpl_parm);
14393           spec_parm = skip_artificial_parms_for (d, spec_parm);
14394           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14395         }
14396       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14397         {
14398           register_local_specialization (spec_parm, tmpl_parm);
14399           tmpl_parm = TREE_CHAIN (tmpl_parm);
14400           spec_parm = TREE_CHAIN (spec_parm);
14401         }
14402       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14403         {
14404           /* Collect all of the extra "packed" parameters into an
14405              argument pack.  */
14406           tree parmvec;
14407           tree parmtypevec;
14408           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14409           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14410           int i, len = 0;
14411           tree t;
14412           
14413           /* Count how many parameters remain.  */
14414           for (t = spec_parm; t; t = TREE_CHAIN (t))
14415             len++;
14416
14417           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
14418           parmvec = make_tree_vec (len);
14419           parmtypevec = make_tree_vec (len);
14420           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14421             {
14422               TREE_VEC_ELT (parmvec, i) = spec_parm;
14423               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14424             }
14425
14426           /* Build the argument packs.  */
14427           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14428           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14429           TREE_TYPE (argpack) = argtypepack;
14430           
14431           /* Register the (value) argument pack as a specialization of
14432              TMPL_PARM, then move on.  */
14433           register_local_specialization (argpack, tmpl_parm);
14434           tmpl_parm = TREE_CHAIN (tmpl_parm);
14435         }
14436       gcc_assert (!spec_parm);
14437
14438       /* Substitute into the body of the function.  */
14439       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
14440                    tf_warning_or_error, tmpl,
14441                    /*integral_constant_expression_p=*/false);
14442
14443       /* We don't need the local specializations any more.  */
14444       htab_delete (local_specializations);
14445       local_specializations = saved_local_specializations;
14446
14447       /* Finish the function.  */
14448       d = finish_function (0);
14449       expand_or_defer_fn (d);
14450     }
14451
14452   /* We're not deferring instantiation any more.  */
14453   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14454
14455   if (need_push)
14456     pop_from_top_level ();
14457
14458 out:
14459   input_location = saved_loc;
14460   in_system_header = saved_in_system_header;
14461   pop_deferring_access_checks ();
14462   pop_tinst_level ();
14463
14464   timevar_pop (TV_PARSE);
14465
14466   return d;
14467 }
14468
14469 /* Run through the list of templates that we wish we could
14470    instantiate, and instantiate any we can.  RETRIES is the
14471    number of times we retry pending template instantiation.  */
14472
14473 void
14474 instantiate_pending_templates (int retries)
14475 {
14476   tree *t;
14477   tree last = NULL_TREE;
14478   int reconsider;
14479   location_t saved_loc = input_location;
14480   int saved_in_system_header = in_system_header;
14481
14482   /* Instantiating templates may trigger vtable generation.  This in turn
14483      may require further template instantiations.  We place a limit here
14484      to avoid infinite loop.  */
14485   if (pending_templates && retries >= max_tinst_depth)
14486     {
14487       tree decl = TREE_VALUE (pending_templates);
14488
14489       error ("template instantiation depth exceeds maximum of %d"
14490              " instantiating %q+D, possibly from virtual table generation"
14491              " (use -ftemplate-depth-NN to increase the maximum)",
14492              max_tinst_depth, decl);
14493       if (TREE_CODE (decl) == FUNCTION_DECL)
14494         /* Pretend that we defined it.  */
14495         DECL_INITIAL (decl) = error_mark_node;
14496       return;
14497     }
14498
14499   do
14500     {
14501       reconsider = 0;
14502
14503       t = &pending_templates;
14504       while (*t)
14505         {
14506           tree instantiation = TREE_VALUE (*t);
14507
14508           reopen_tinst_level (TREE_PURPOSE (*t));
14509
14510           if (TYPE_P (instantiation))
14511             {
14512               tree fn;
14513
14514               if (!COMPLETE_TYPE_P (instantiation))
14515                 {
14516                   instantiate_class_template (instantiation);
14517                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
14518                     for (fn = TYPE_METHODS (instantiation);
14519                          fn;
14520                          fn = TREE_CHAIN (fn))
14521                       if (! DECL_ARTIFICIAL (fn))
14522                         instantiate_decl (fn,
14523                                           /*defer_ok=*/0,
14524                                           /*expl_inst_class_mem_p=*/false);
14525                   if (COMPLETE_TYPE_P (instantiation))
14526                     reconsider = 1;
14527                 }
14528
14529               if (COMPLETE_TYPE_P (instantiation))
14530                 /* If INSTANTIATION has been instantiated, then we don't
14531                    need to consider it again in the future.  */
14532                 *t = TREE_CHAIN (*t);
14533               else
14534                 {
14535                   last = *t;
14536                   t = &TREE_CHAIN (*t);
14537                 }
14538             }
14539           else
14540             {
14541               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
14542                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14543                 {
14544                   instantiation
14545                     = instantiate_decl (instantiation,
14546                                         /*defer_ok=*/0,
14547                                         /*expl_inst_class_mem_p=*/false);
14548                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
14549                     reconsider = 1;
14550                 }
14551
14552               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
14553                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
14554                 /* If INSTANTIATION has been instantiated, then we don't
14555                    need to consider it again in the future.  */
14556                 *t = TREE_CHAIN (*t);
14557               else
14558                 {
14559                   last = *t;
14560                   t = &TREE_CHAIN (*t);
14561                 }
14562             }
14563           tinst_depth = 0;
14564           current_tinst_level = NULL_TREE;
14565         }
14566       last_pending_template = last;
14567     }
14568   while (reconsider);
14569
14570   input_location = saved_loc;
14571   in_system_header = saved_in_system_header;
14572 }
14573
14574 /* Substitute ARGVEC into T, which is a list of initializers for
14575    either base class or a non-static data member.  The TREE_PURPOSEs
14576    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
14577    instantiate_decl.  */
14578
14579 static tree
14580 tsubst_initializer_list (tree t, tree argvec)
14581 {
14582   tree inits = NULL_TREE;
14583
14584   for (; t; t = TREE_CHAIN (t))
14585     {
14586       tree decl;
14587       tree init;
14588       tree expanded_bases = NULL_TREE;
14589       tree expanded_arguments = NULL_TREE;
14590       int i, len = 1;
14591
14592       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14593         {
14594           tree expr;
14595           tree arg;
14596
14597           /* Expand the base class expansion type into separate base
14598              classes.  */
14599           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14600                                                  tf_warning_or_error,
14601                                                  NULL_TREE);
14602           if (expanded_bases == error_mark_node)
14603             continue;
14604           
14605           /* We'll be building separate TREE_LISTs of arguments for
14606              each base.  */
14607           len = TREE_VEC_LENGTH (expanded_bases);
14608           expanded_arguments = make_tree_vec (len);
14609           for (i = 0; i < len; i++)
14610             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14611
14612           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14613              expand each argument in the TREE_VALUE of t.  */
14614           expr = make_node (EXPR_PACK_EXPANSION);
14615           PACK_EXPANSION_PARAMETER_PACKS (expr) =
14616             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14617
14618           /* Substitute parameter packs into each argument in the
14619              TREE_LIST.  */
14620           in_base_initializer = 1;
14621           for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14622             {
14623               tree expanded_exprs;
14624
14625               /* Expand the argument.  */
14626               SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14627               expanded_exprs = tsubst_pack_expansion (expr, argvec,
14628                                                       tf_warning_or_error,
14629                                                       NULL_TREE);
14630
14631               /* Prepend each of the expanded expressions to the
14632                  corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
14633               for (i = 0; i < len; i++)
14634                 {
14635                   TREE_VEC_ELT (expanded_arguments, i) = 
14636                     tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14637                                TREE_VEC_ELT (expanded_arguments, i));
14638                 }
14639             }
14640           in_base_initializer = 0;
14641
14642           /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14643              since we built them backwards.  */
14644           for (i = 0; i < len; i++)
14645             {
14646               TREE_VEC_ELT (expanded_arguments, i) = 
14647                 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14648             }
14649         }
14650
14651       for (i = 0; i < len; ++i)
14652         {
14653           if (expanded_bases)
14654             {
14655               decl = TREE_VEC_ELT (expanded_bases, i);
14656               decl = expand_member_init (decl);
14657               init = TREE_VEC_ELT (expanded_arguments, i);
14658             }
14659           else
14660             {
14661               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
14662                                   tf_warning_or_error, NULL_TREE);
14663
14664               decl = expand_member_init (decl);
14665               if (decl && !DECL_P (decl))
14666                 in_base_initializer = 1;
14667
14668               init = tsubst_expr (TREE_VALUE (t), argvec, 
14669                                   tf_warning_or_error, NULL_TREE,
14670                                   /*integral_constant_expression_p=*/false);
14671               in_base_initializer = 0;
14672             }
14673
14674           if (decl)
14675             {
14676               init = build_tree_list (decl, init);
14677               TREE_CHAIN (init) = inits;
14678               inits = init;
14679             }
14680         }
14681     }
14682   return inits;
14683 }
14684
14685 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
14686
14687 static void
14688 set_current_access_from_decl (tree decl)
14689 {
14690   if (TREE_PRIVATE (decl))
14691     current_access_specifier = access_private_node;
14692   else if (TREE_PROTECTED (decl))
14693     current_access_specifier = access_protected_node;
14694   else
14695     current_access_specifier = access_public_node;
14696 }
14697
14698 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
14699    is the instantiation (which should have been created with
14700    start_enum) and ARGS are the template arguments to use.  */
14701
14702 static void
14703 tsubst_enum (tree tag, tree newtag, tree args)
14704 {
14705   tree e;
14706
14707   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14708     {
14709       tree value;
14710       tree decl;
14711
14712       decl = TREE_VALUE (e);
14713       /* Note that in a template enum, the TREE_VALUE is the
14714          CONST_DECL, not the corresponding INTEGER_CST.  */
14715       value = tsubst_expr (DECL_INITIAL (decl),
14716                            args, tf_warning_or_error, NULL_TREE,
14717                            /*integral_constant_expression_p=*/true);
14718
14719       /* Give this enumeration constant the correct access.  */
14720       set_current_access_from_decl (decl);
14721
14722       /* Actually build the enumerator itself.  */
14723       build_enumerator (DECL_NAME (decl), value, newtag);
14724     }
14725
14726   finish_enum (newtag);
14727   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
14728     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
14729 }
14730
14731 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
14732    its type -- but without substituting the innermost set of template
14733    arguments.  So, innermost set of template parameters will appear in
14734    the type.  */
14735
14736 tree
14737 get_mostly_instantiated_function_type (tree decl)
14738 {
14739   tree fn_type;
14740   tree tmpl;
14741   tree targs;
14742   tree tparms;
14743   int parm_depth;
14744
14745   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14746   targs = DECL_TI_ARGS (decl);
14747   tparms = DECL_TEMPLATE_PARMS (tmpl);
14748   parm_depth = TMPL_PARMS_DEPTH (tparms);
14749
14750   /* There should be as many levels of arguments as there are levels
14751      of parameters.  */
14752   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
14753
14754   fn_type = TREE_TYPE (tmpl);
14755
14756   if (parm_depth == 1)
14757     /* No substitution is necessary.  */
14758     ;
14759   else
14760     {
14761       int i, save_access_control;
14762       tree partial_args;
14763
14764       /* Replace the innermost level of the TARGS with NULL_TREEs to
14765          let tsubst know not to substitute for those parameters.  */
14766       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
14767       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
14768         SET_TMPL_ARGS_LEVEL (partial_args, i,
14769                              TMPL_ARGS_LEVEL (targs, i));
14770       SET_TMPL_ARGS_LEVEL (partial_args,
14771                            TMPL_ARGS_DEPTH (targs),
14772                            make_tree_vec (DECL_NTPARMS (tmpl)));
14773
14774       /* Disable access control as this function is used only during
14775          name-mangling.  */
14776       save_access_control = flag_access_control;
14777       flag_access_control = 0;
14778
14779       ++processing_template_decl;
14780       /* Now, do the (partial) substitution to figure out the
14781          appropriate function type.  */
14782       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
14783       --processing_template_decl;
14784
14785       /* Substitute into the template parameters to obtain the real
14786          innermost set of parameters.  This step is important if the
14787          innermost set of template parameters contains value
14788          parameters whose types depend on outer template parameters.  */
14789       TREE_VEC_LENGTH (partial_args)--;
14790       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
14791
14792       flag_access_control = save_access_control;
14793     }
14794
14795   return fn_type;
14796 }
14797
14798 /* Return truthvalue if we're processing a template different from
14799    the last one involved in diagnostics.  */
14800 int
14801 problematic_instantiation_changed (void)
14802 {
14803   return last_template_error_tick != tinst_level_tick;
14804 }
14805
14806 /* Remember current template involved in diagnostics.  */
14807 void
14808 record_last_problematic_instantiation (void)
14809 {
14810   last_template_error_tick = tinst_level_tick;
14811 }
14812
14813 tree
14814 current_instantiation (void)
14815 {
14816   return current_tinst_level;
14817 }
14818
14819 /* [temp.param] Check that template non-type parm TYPE is of an allowable
14820    type. Return zero for ok, nonzero for disallowed. Issue error and
14821    warning messages under control of COMPLAIN.  */
14822
14823 static int
14824 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
14825 {
14826   if (INTEGRAL_TYPE_P (type))
14827     return 0;
14828   else if (POINTER_TYPE_P (type))
14829     return 0;
14830   else if (TYPE_PTR_TO_MEMBER_P (type))
14831     return 0;
14832   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
14833     return 0;
14834   else if (TREE_CODE (type) == TYPENAME_TYPE)
14835     return 0;
14836
14837   if (complain & tf_error)
14838     error ("%q#T is not a valid type for a template constant parameter", type);
14839   return 1;
14840 }
14841
14842 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
14843    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
14844
14845 static bool
14846 dependent_type_p_r (tree type)
14847 {
14848   tree scope;
14849
14850   /* [temp.dep.type]
14851
14852      A type is dependent if it is:
14853
14854      -- a template parameter. Template template parameters are types
14855         for us (since TYPE_P holds true for them) so we handle
14856         them here.  */
14857   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
14858       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
14859     return true;
14860   /* -- a qualified-id with a nested-name-specifier which contains a
14861         class-name that names a dependent type or whose unqualified-id
14862         names a dependent type.  */
14863   if (TREE_CODE (type) == TYPENAME_TYPE)
14864     return true;
14865   /* -- a cv-qualified type where the cv-unqualified type is
14866         dependent.  */
14867   type = TYPE_MAIN_VARIANT (type);
14868   /* -- a compound type constructed from any dependent type.  */
14869   if (TYPE_PTR_TO_MEMBER_P (type))
14870     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
14871             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
14872                                            (type)));
14873   else if (TREE_CODE (type) == POINTER_TYPE
14874            || TREE_CODE (type) == REFERENCE_TYPE)
14875     return dependent_type_p (TREE_TYPE (type));
14876   else if (TREE_CODE (type) == FUNCTION_TYPE
14877            || TREE_CODE (type) == METHOD_TYPE)
14878     {
14879       tree arg_type;
14880
14881       if (dependent_type_p (TREE_TYPE (type)))
14882         return true;
14883       for (arg_type = TYPE_ARG_TYPES (type);
14884            arg_type;
14885            arg_type = TREE_CHAIN (arg_type))
14886         if (dependent_type_p (TREE_VALUE (arg_type)))
14887           return true;
14888       return false;
14889     }
14890   /* -- an array type constructed from any dependent type or whose
14891         size is specified by a constant expression that is
14892         value-dependent.  */
14893   if (TREE_CODE (type) == ARRAY_TYPE)
14894     {
14895       if (TYPE_DOMAIN (type)
14896           && ((value_dependent_expression_p
14897                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
14898               || (type_dependent_expression_p
14899                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
14900         return true;
14901       return dependent_type_p (TREE_TYPE (type));
14902     }
14903
14904   /* -- a template-id in which either the template name is a template
14905      parameter ...  */
14906   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
14907     return true;
14908   /* ... or any of the template arguments is a dependent type or
14909         an expression that is type-dependent or value-dependent.  */
14910   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
14911            && (any_dependent_template_arguments_p
14912                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
14913     return true;
14914
14915   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
14916      argument of the `typeof' expression is not type-dependent, then
14917      it should already been have resolved.  */
14918   if (TREE_CODE (type) == TYPEOF_TYPE
14919       || TREE_CODE (type) == DECLTYPE_TYPE)
14920     return true;
14921
14922   /* A template argument pack is dependent if any of its packed
14923      arguments are.  */
14924   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
14925     {
14926       tree args = ARGUMENT_PACK_ARGS (type);
14927       int i, len = TREE_VEC_LENGTH (args);
14928       for (i = 0; i < len; ++i)
14929         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
14930           return true;
14931     }
14932
14933   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
14934      be template parameters.  */
14935   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
14936     return true;
14937
14938   /* The standard does not specifically mention types that are local
14939      to template functions or local classes, but they should be
14940      considered dependent too.  For example:
14941
14942        template <int I> void f() {
14943          enum E { a = I };
14944          S<sizeof (E)> s;
14945        }
14946
14947      The size of `E' cannot be known until the value of `I' has been
14948      determined.  Therefore, `E' must be considered dependent.  */
14949   scope = TYPE_CONTEXT (type);
14950   if (scope && TYPE_P (scope))
14951     return dependent_type_p (scope);
14952   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
14953     return type_dependent_expression_p (scope);
14954
14955   /* Other types are non-dependent.  */
14956   return false;
14957 }
14958
14959 /* Returns TRUE if TYPE is dependent, in the sense of
14960    [temp.dep.type].  */
14961
14962 bool
14963 dependent_type_p (tree type)
14964 {
14965   /* If there are no template parameters in scope, then there can't be
14966      any dependent types.  */
14967   if (!processing_template_decl)
14968     {
14969       /* If we are not processing a template, then nobody should be
14970          providing us with a dependent type.  */
14971       gcc_assert (type);
14972       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
14973       return false;
14974     }
14975
14976   /* If the type is NULL, we have not computed a type for the entity
14977      in question; in that case, the type is dependent.  */
14978   if (!type)
14979     return true;
14980
14981   /* Erroneous types can be considered non-dependent.  */
14982   if (type == error_mark_node)
14983     return false;
14984
14985   /* If we have not already computed the appropriate value for TYPE,
14986      do so now.  */
14987   if (!TYPE_DEPENDENT_P_VALID (type))
14988     {
14989       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
14990       TYPE_DEPENDENT_P_VALID (type) = 1;
14991     }
14992
14993   return TYPE_DEPENDENT_P (type);
14994 }
14995
14996 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
14997
14998 static bool
14999 dependent_scope_ref_p (tree expression, bool criterion (tree))
15000 {
15001   tree scope;
15002   tree name;
15003
15004   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15005
15006   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15007     return true;
15008
15009   scope = TREE_OPERAND (expression, 0);
15010   name = TREE_OPERAND (expression, 1);
15011
15012   /* [temp.dep.expr]
15013
15014      An id-expression is type-dependent if it contains a
15015      nested-name-specifier that contains a class-name that names a
15016      dependent type.  */
15017   /* The suggested resolution to Core Issue 2 implies that if the
15018      qualifying type is the current class, then we must peek
15019      inside it.  */
15020   if (DECL_P (name)
15021       && currently_open_class (scope)
15022       && !criterion (name))
15023     return false;
15024   if (dependent_type_p (scope))
15025     return true;
15026
15027   return false;
15028 }
15029
15030 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15031    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15032    expression.  */
15033
15034 bool
15035 value_dependent_expression_p (tree expression)
15036 {
15037   if (!processing_template_decl)
15038     return false;
15039
15040   /* A name declared with a dependent type.  */
15041   if (DECL_P (expression) && type_dependent_expression_p (expression))
15042     return true;
15043
15044   switch (TREE_CODE (expression))
15045     {
15046     case IDENTIFIER_NODE:
15047       /* A name that has not been looked up -- must be dependent.  */
15048       return true;
15049
15050     case TEMPLATE_PARM_INDEX:
15051       /* A non-type template parm.  */
15052       return true;
15053
15054     case CONST_DECL:
15055       /* A non-type template parm.  */
15056       if (DECL_TEMPLATE_PARM_P (expression))
15057         return true;
15058       return false;
15059
15060     case VAR_DECL:
15061        /* A constant with integral or enumeration type and is initialized
15062           with an expression that is value-dependent.  */
15063       if (DECL_INITIAL (expression)
15064           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15065           && value_dependent_expression_p (DECL_INITIAL (expression)))
15066         return true;
15067       return false;
15068
15069     case DYNAMIC_CAST_EXPR:
15070     case STATIC_CAST_EXPR:
15071     case CONST_CAST_EXPR:
15072     case REINTERPRET_CAST_EXPR:
15073     case CAST_EXPR:
15074       /* These expressions are value-dependent if the type to which
15075          the cast occurs is dependent or the expression being casted
15076          is value-dependent.  */
15077       {
15078         tree type = TREE_TYPE (expression);
15079
15080         if (dependent_type_p (type))
15081           return true;
15082
15083         /* A functional cast has a list of operands.  */
15084         expression = TREE_OPERAND (expression, 0);
15085         if (!expression)
15086           {
15087             /* If there are no operands, it must be an expression such
15088                as "int()". This should not happen for aggregate types
15089                because it would form non-constant expressions.  */
15090             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15091
15092             return false;
15093           }
15094
15095         if (TREE_CODE (expression) == TREE_LIST)
15096           return any_value_dependent_elements_p (expression);
15097
15098         return value_dependent_expression_p (expression);
15099       }
15100
15101     case SIZEOF_EXPR:
15102     case ALIGNOF_EXPR:
15103       /* A `sizeof' expression is value-dependent if the operand is
15104          type-dependent or is a pack expansion.  */
15105       expression = TREE_OPERAND (expression, 0);
15106       if (PACK_EXPANSION_P (expression))
15107         return true;
15108       else if (TYPE_P (expression))
15109         return dependent_type_p (expression);
15110       return type_dependent_expression_p (expression);
15111
15112     case SCOPE_REF:
15113       return dependent_scope_ref_p (expression, value_dependent_expression_p);
15114
15115     case COMPONENT_REF:
15116       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15117               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15118
15119     case CALL_EXPR:
15120       /* A CALL_EXPR may appear in a constant expression if it is a
15121          call to a builtin function, e.g., __builtin_constant_p.  All
15122          such calls are value-dependent.  */
15123       return true;
15124
15125     case NONTYPE_ARGUMENT_PACK:
15126       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15127          is value-dependent.  */
15128       {
15129         tree values = ARGUMENT_PACK_ARGS (expression);
15130         int i, len = TREE_VEC_LENGTH (values);
15131         
15132         for (i = 0; i < len; ++i)
15133           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15134             return true;
15135         
15136         return false;
15137       }
15138
15139     case TRAIT_EXPR:
15140       {
15141         tree type2 = TRAIT_EXPR_TYPE2 (expression);
15142         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15143                 || (type2 ? dependent_type_p (type2) : false));
15144       }
15145
15146     case MODOP_EXPR:
15147       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15148               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15149
15150     default:
15151       /* A constant expression is value-dependent if any subexpression is
15152          value-dependent.  */
15153       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15154         {
15155         case tcc_reference:
15156         case tcc_unary:
15157           return (value_dependent_expression_p
15158                   (TREE_OPERAND (expression, 0)));
15159
15160         case tcc_comparison:
15161         case tcc_binary:
15162           return ((value_dependent_expression_p
15163                    (TREE_OPERAND (expression, 0)))
15164                   || (value_dependent_expression_p
15165                       (TREE_OPERAND (expression, 1))));
15166
15167         case tcc_expression:
15168         case tcc_vl_exp:
15169           {
15170             int i;
15171             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15172               /* In some cases, some of the operands may be missing.
15173                  (For example, in the case of PREDECREMENT_EXPR, the
15174                  amount to increment by may be missing.)  That doesn't
15175                  make the expression dependent.  */
15176               if (TREE_OPERAND (expression, i)
15177                   && (value_dependent_expression_p
15178                       (TREE_OPERAND (expression, i))))
15179                 return true;
15180             return false;
15181           }
15182
15183         default:
15184           break;
15185         }
15186     }
15187
15188   /* The expression is not value-dependent.  */
15189   return false;
15190 }
15191
15192 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15193    [temp.dep.expr].  */
15194
15195 bool
15196 type_dependent_expression_p (tree expression)
15197 {
15198   if (!processing_template_decl)
15199     return false;
15200
15201   if (expression == error_mark_node)
15202     return false;
15203
15204   /* An unresolved name is always dependent.  */
15205   if (TREE_CODE (expression) == IDENTIFIER_NODE
15206       || TREE_CODE (expression) == USING_DECL)
15207     return true;
15208
15209   /* Some expression forms are never type-dependent.  */
15210   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15211       || TREE_CODE (expression) == SIZEOF_EXPR
15212       || TREE_CODE (expression) == ALIGNOF_EXPR
15213       || TREE_CODE (expression) == TRAIT_EXPR
15214       || TREE_CODE (expression) == TYPEID_EXPR
15215       || TREE_CODE (expression) == DELETE_EXPR
15216       || TREE_CODE (expression) == VEC_DELETE_EXPR
15217       || TREE_CODE (expression) == THROW_EXPR)
15218     return false;
15219
15220   /* The types of these expressions depends only on the type to which
15221      the cast occurs.  */
15222   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15223       || TREE_CODE (expression) == STATIC_CAST_EXPR
15224       || TREE_CODE (expression) == CONST_CAST_EXPR
15225       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15226       || TREE_CODE (expression) == CAST_EXPR)
15227     return dependent_type_p (TREE_TYPE (expression));
15228
15229   /* The types of these expressions depends only on the type created
15230      by the expression.  */
15231   if (TREE_CODE (expression) == NEW_EXPR
15232       || TREE_CODE (expression) == VEC_NEW_EXPR)
15233     {
15234       /* For NEW_EXPR tree nodes created inside a template, either
15235          the object type itself or a TREE_LIST may appear as the
15236          operand 1.  */
15237       tree type = TREE_OPERAND (expression, 1);
15238       if (TREE_CODE (type) == TREE_LIST)
15239         /* This is an array type.  We need to check array dimensions
15240            as well.  */
15241         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15242                || value_dependent_expression_p
15243                     (TREE_OPERAND (TREE_VALUE (type), 1));
15244       else
15245         return dependent_type_p (type);
15246     }
15247
15248   if (TREE_CODE (expression) == SCOPE_REF
15249       && dependent_scope_ref_p (expression,
15250                                 type_dependent_expression_p))
15251     return true;
15252
15253   if (TREE_CODE (expression) == FUNCTION_DECL
15254       && DECL_LANG_SPECIFIC (expression)
15255       && DECL_TEMPLATE_INFO (expression)
15256       && (any_dependent_template_arguments_p
15257           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15258     return true;
15259
15260   if (TREE_CODE (expression) == TEMPLATE_DECL
15261       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15262     return false;
15263
15264   if (TREE_TYPE (expression) == unknown_type_node)
15265     {
15266       if (TREE_CODE (expression) == ADDR_EXPR)
15267         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15268       if (TREE_CODE (expression) == COMPONENT_REF
15269           || TREE_CODE (expression) == OFFSET_REF)
15270         {
15271           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15272             return true;
15273           expression = TREE_OPERAND (expression, 1);
15274           if (TREE_CODE (expression) == IDENTIFIER_NODE)
15275             return false;
15276         }
15277       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
15278       if (TREE_CODE (expression) == SCOPE_REF)
15279         return false;
15280
15281       if (TREE_CODE (expression) == BASELINK)
15282         expression = BASELINK_FUNCTIONS (expression);
15283
15284       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15285         {
15286           if (any_dependent_template_arguments_p
15287               (TREE_OPERAND (expression, 1)))
15288             return true;
15289           expression = TREE_OPERAND (expression, 0);
15290         }
15291       gcc_assert (TREE_CODE (expression) == OVERLOAD
15292                   || TREE_CODE (expression) == FUNCTION_DECL);
15293
15294       while (expression)
15295         {
15296           if (type_dependent_expression_p (OVL_CURRENT (expression)))
15297             return true;
15298           expression = OVL_NEXT (expression);
15299         }
15300       return false;
15301     }
15302
15303   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15304
15305   return (dependent_type_p (TREE_TYPE (expression)));
15306 }
15307
15308 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15309    contains a type-dependent expression.  */
15310
15311 bool
15312 any_type_dependent_arguments_p (tree args)
15313 {
15314   while (args)
15315     {
15316       tree arg = TREE_VALUE (args);
15317
15318       if (type_dependent_expression_p (arg))
15319         return true;
15320       args = TREE_CHAIN (args);
15321     }
15322   return false;
15323 }
15324
15325 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15326    expressions) contains any value-dependent expressions.  */
15327
15328 bool
15329 any_value_dependent_elements_p (tree list)
15330 {
15331   for (; list; list = TREE_CHAIN (list))
15332     if (value_dependent_expression_p (TREE_VALUE (list)))
15333       return true;
15334
15335   return false;
15336 }
15337
15338 /* Returns TRUE if the ARG (a template argument) is dependent.  */
15339
15340 bool
15341 dependent_template_arg_p (tree arg)
15342 {
15343   if (!processing_template_decl)
15344     return false;
15345
15346   if (TREE_CODE (arg) == TEMPLATE_DECL
15347       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15348     return dependent_template_p (arg);
15349   else if (ARGUMENT_PACK_P (arg))
15350     {
15351       tree args = ARGUMENT_PACK_ARGS (arg);
15352       int i, len = TREE_VEC_LENGTH (args);
15353       for (i = 0; i < len; ++i)
15354         {
15355           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15356             return true;
15357         }
15358
15359       return false;
15360     }
15361   else if (TYPE_P (arg))
15362     return dependent_type_p (arg);
15363   else
15364     return (type_dependent_expression_p (arg)
15365             || value_dependent_expression_p (arg));
15366 }
15367
15368 /* Returns true if ARGS (a collection of template arguments) contains
15369    any types that require structural equality testing.  */
15370
15371 bool
15372 any_template_arguments_need_structural_equality_p (tree args)
15373 {
15374   int i;
15375   int j;
15376
15377   if (!args)
15378     return false;
15379   if (args == error_mark_node)
15380     return true;
15381
15382   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15383     {
15384       tree level = TMPL_ARGS_LEVEL (args, i + 1);
15385       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15386         {
15387           tree arg = TREE_VEC_ELT (level, j);
15388           tree packed_args = NULL_TREE;
15389           int k, len = 1;
15390
15391           if (ARGUMENT_PACK_P (arg))
15392             {
15393               /* Look inside the argument pack.  */
15394               packed_args = ARGUMENT_PACK_ARGS (arg);
15395               len = TREE_VEC_LENGTH (packed_args);
15396             }
15397
15398           for (k = 0; k < len; ++k)
15399             {
15400               if (packed_args)
15401                 arg = TREE_VEC_ELT (packed_args, k);
15402
15403               if (error_operand_p (arg))
15404                 return true;
15405               else if (TREE_CODE (arg) == TEMPLATE_DECL
15406                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15407                 continue;
15408               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15409                 return true;
15410               else if (!TYPE_P (arg) && TREE_TYPE (arg)
15411                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15412                 return true;
15413             }
15414         }
15415     }
15416
15417   return false;
15418 }
15419
15420 /* Returns true if ARGS (a collection of template arguments) contains
15421    any dependent arguments.  */
15422
15423 bool
15424 any_dependent_template_arguments_p (tree args)
15425 {
15426   int i;
15427   int j;
15428
15429   if (!args)
15430     return false;
15431   if (args == error_mark_node)
15432     return true;
15433
15434   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15435     {
15436       tree level = TMPL_ARGS_LEVEL (args, i + 1);
15437       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15438         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15439           return true;
15440     }
15441
15442   return false;
15443 }
15444
15445 /* Returns TRUE if the template TMPL is dependent.  */
15446
15447 bool
15448 dependent_template_p (tree tmpl)
15449 {
15450   if (TREE_CODE (tmpl) == OVERLOAD)
15451     {
15452       while (tmpl)
15453         {
15454           if (dependent_template_p (OVL_FUNCTION (tmpl)))
15455             return true;
15456           tmpl = OVL_CHAIN (tmpl);
15457         }
15458       return false;
15459     }
15460
15461   /* Template template parameters are dependent.  */
15462   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15463       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15464     return true;
15465   /* So are names that have not been looked up.  */
15466   if (TREE_CODE (tmpl) == SCOPE_REF
15467       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
15468     return true;
15469   /* So are member templates of dependent classes.  */
15470   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15471     return dependent_type_p (DECL_CONTEXT (tmpl));
15472   return false;
15473 }
15474
15475 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
15476
15477 bool
15478 dependent_template_id_p (tree tmpl, tree args)
15479 {
15480   return (dependent_template_p (tmpl)
15481           || any_dependent_template_arguments_p (args));
15482 }
15483
15484 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
15485    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
15486    no such TYPE can be found.  Note that this function peers inside
15487    uninstantiated templates and therefore should be used only in
15488    extremely limited situations.  ONLY_CURRENT_P restricts this
15489    peering to the currently open classes hierarchy (which is required
15490    when comparing types).  */
15491
15492 tree
15493 resolve_typename_type (tree type, bool only_current_p)
15494 {
15495   tree scope;
15496   tree name;
15497   tree decl;
15498   int quals;
15499   tree pushed_scope;
15500   tree result;
15501
15502   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
15503
15504   scope = TYPE_CONTEXT (type);
15505   name = TYPE_IDENTIFIER (type);
15506
15507   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15508      it first before we can figure out what NAME refers to.  */
15509   if (TREE_CODE (scope) == TYPENAME_TYPE)
15510     scope = resolve_typename_type (scope, only_current_p);
15511   /* If we don't know what SCOPE refers to, then we cannot resolve the
15512      TYPENAME_TYPE.  */
15513   if (TREE_CODE (scope) == TYPENAME_TYPE)
15514     return type;
15515   /* If the SCOPE is a template type parameter, we have no way of
15516      resolving the name.  */
15517   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15518     return type;
15519   /* If the SCOPE is not the current instantiation, there's no reason
15520      to look inside it.  */
15521   if (only_current_p && !currently_open_class (scope))
15522     return type;
15523   /* If SCOPE is a partial instantiation, it will not have a valid
15524      TYPE_FIELDS list, so use the original template.  */
15525   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
15526   /* Enter the SCOPE so that name lookup will be resolved as if we
15527      were in the class definition.  In particular, SCOPE will no
15528      longer be considered a dependent type.  */
15529   pushed_scope = push_scope (scope);
15530   /* Look up the declaration.  */
15531   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
15532
15533   result = NULL_TREE;
15534   
15535   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15536      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
15537   if (!decl)
15538     /*nop*/;
15539   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
15540            && TREE_CODE (decl) == TYPE_DECL)
15541     {
15542       result = TREE_TYPE (decl);
15543       if (result == error_mark_node)
15544         result = NULL_TREE;
15545     }
15546   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
15547            && DECL_CLASS_TEMPLATE_P (decl))
15548     {
15549       tree tmpl;
15550       tree args;
15551       /* Obtain the template and the arguments.  */
15552       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
15553       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
15554       /* Instantiate the template.  */
15555       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
15556                                       /*entering_scope=*/0,
15557                                       tf_error | tf_user);
15558       if (result == error_mark_node)
15559         result = NULL_TREE;
15560     }
15561   
15562   /* Leave the SCOPE.  */
15563   if (pushed_scope)
15564     pop_scope (pushed_scope);
15565
15566   /* If we failed to resolve it, return the original typename.  */
15567   if (!result)
15568     return type;
15569   
15570   /* If lookup found a typename type, resolve that too.  */
15571   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
15572     {
15573       /* Ill-formed programs can cause infinite recursion here, so we
15574          must catch that.  */
15575       TYPENAME_IS_RESOLVING_P (type) = 1;
15576       result = resolve_typename_type (result, only_current_p);
15577       TYPENAME_IS_RESOLVING_P (type) = 0;
15578     }
15579   
15580   /* Qualify the resulting type.  */
15581   quals = cp_type_quals (type);
15582   if (quals)
15583     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
15584
15585   return result;
15586 }
15587
15588 /* EXPR is an expression which is not type-dependent.  Return a proxy
15589    for EXPR that can be used to compute the types of larger
15590    expressions containing EXPR.  */
15591
15592 tree
15593 build_non_dependent_expr (tree expr)
15594 {
15595   tree inner_expr;
15596
15597   /* Preserve null pointer constants so that the type of things like
15598      "p == 0" where "p" is a pointer can be determined.  */
15599   if (null_ptr_cst_p (expr))
15600     return expr;
15601   /* Preserve OVERLOADs; the functions must be available to resolve
15602      types.  */
15603   inner_expr = expr;
15604   if (TREE_CODE (inner_expr) == ADDR_EXPR)
15605     inner_expr = TREE_OPERAND (inner_expr, 0);
15606   if (TREE_CODE (inner_expr) == COMPONENT_REF)
15607     inner_expr = TREE_OPERAND (inner_expr, 1);
15608   if (is_overloaded_fn (inner_expr)
15609       || TREE_CODE (inner_expr) == OFFSET_REF)
15610     return expr;
15611   /* There is no need to return a proxy for a variable.  */
15612   if (TREE_CODE (expr) == VAR_DECL)
15613     return expr;
15614   /* Preserve string constants; conversions from string constants to
15615      "char *" are allowed, even though normally a "const char *"
15616      cannot be used to initialize a "char *".  */
15617   if (TREE_CODE (expr) == STRING_CST)
15618     return expr;
15619   /* Preserve arithmetic constants, as an optimization -- there is no
15620      reason to create a new node.  */
15621   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
15622     return expr;
15623   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15624      There is at least one place where we want to know that a
15625      particular expression is a throw-expression: when checking a ?:
15626      expression, there are special rules if the second or third
15627      argument is a throw-expression.  */
15628   if (TREE_CODE (expr) == THROW_EXPR)
15629     return expr;
15630
15631   if (TREE_CODE (expr) == COND_EXPR)
15632     return build3 (COND_EXPR,
15633                    TREE_TYPE (expr),
15634                    TREE_OPERAND (expr, 0),
15635                    (TREE_OPERAND (expr, 1)
15636                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
15637                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
15638                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
15639   if (TREE_CODE (expr) == COMPOUND_EXPR
15640       && !COMPOUND_EXPR_OVERLOADED (expr))
15641     return build2 (COMPOUND_EXPR,
15642                    TREE_TYPE (expr),
15643                    TREE_OPERAND (expr, 0),
15644                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
15645
15646   /* If the type is unknown, it can't really be non-dependent */
15647   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
15648
15649   /* Otherwise, build a NON_DEPENDENT_EXPR.
15650
15651      REFERENCE_TYPEs are not stripped for expressions in templates
15652      because doing so would play havoc with mangling.  Consider, for
15653      example:
15654
15655        template <typename T> void f<T& g>() { g(); }
15656
15657      In the body of "f", the expression for "g" will have
15658      REFERENCE_TYPE, even though the standard says that it should
15659      not.  The reason is that we must preserve the syntactic form of
15660      the expression so that mangling (say) "f<g>" inside the body of
15661      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
15662      stripped here.  */
15663   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
15664 }
15665
15666 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
15667    Return a new TREE_LIST with the various arguments replaced with
15668    equivalent non-dependent expressions.  */
15669
15670 tree
15671 build_non_dependent_args (tree args)
15672 {
15673   tree a;
15674   tree new_args;
15675
15676   new_args = NULL_TREE;
15677   for (a = args; a; a = TREE_CHAIN (a))
15678     new_args = tree_cons (NULL_TREE,
15679                           build_non_dependent_expr (TREE_VALUE (a)),
15680                           new_args);
15681   return nreverse (new_args);
15682 }
15683
15684 #include "gt-cp-pt.h"