OSDN Git Service

PR c++/29365
[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       cp_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       cp_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           cp_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       cp_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   cp_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       cp_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               cp_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   cp_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   cp_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 = cp_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 /* Returns the TINST_LEVEL which gives the original instantiation
6049    context.  */
6050
6051 tree
6052 outermost_tinst_level (void)
6053 {
6054   return tree_last (current_tinst_level);
6055 }
6056
6057 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
6058    vector of template arguments, as for tsubst.
6059
6060    Returns an appropriate tsubst'd friend declaration.  */
6061
6062 static tree
6063 tsubst_friend_function (tree decl, tree args)
6064 {
6065   tree new_friend;
6066
6067   if (TREE_CODE (decl) == FUNCTION_DECL
6068       && DECL_TEMPLATE_INSTANTIATION (decl)
6069       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
6070     /* This was a friend declared with an explicit template
6071        argument list, e.g.:
6072
6073        friend void f<>(T);
6074
6075        to indicate that f was a template instantiation, not a new
6076        function declaration.  Now, we have to figure out what
6077        instantiation of what template.  */
6078     {
6079       tree template_id, arglist, fns;
6080       tree new_args;
6081       tree tmpl;
6082       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
6083
6084       /* Friend functions are looked up in the containing namespace scope.
6085          We must enter that scope, to avoid finding member functions of the
6086          current cless with same name.  */
6087       push_nested_namespace (ns);
6088       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
6089                          tf_warning_or_error, NULL_TREE,
6090                          /*integral_constant_expression_p=*/false);
6091       pop_nested_namespace (ns);
6092       arglist = tsubst (DECL_TI_ARGS (decl), args,
6093                         tf_warning_or_error, NULL_TREE);
6094       template_id = lookup_template_function (fns, arglist);
6095
6096       new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6097       tmpl = determine_specialization (template_id, new_friend,
6098                                        &new_args,
6099                                        /*need_member_template=*/0,
6100                                        TREE_VEC_LENGTH (args),
6101                                        tsk_none);
6102       return instantiate_template (tmpl, new_args, tf_error);
6103     }
6104
6105   new_friend = tsubst (decl, args, tf_warning_or_error, NULL_TREE);
6106
6107   /* The NEW_FRIEND will look like an instantiation, to the
6108      compiler, but is not an instantiation from the point of view of
6109      the language.  For example, we might have had:
6110
6111      template <class T> struct S {
6112        template <class U> friend void f(T, U);
6113      };
6114
6115      Then, in S<int>, template <class U> void f(int, U) is not an
6116      instantiation of anything.  */
6117   if (new_friend == error_mark_node)
6118     return error_mark_node;
6119
6120   DECL_USE_TEMPLATE (new_friend) = 0;
6121   if (TREE_CODE (decl) == TEMPLATE_DECL)
6122     {
6123       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
6124       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
6125         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
6126     }
6127
6128   /* The mangled name for the NEW_FRIEND is incorrect.  The function
6129      is not a template instantiation and should not be mangled like
6130      one.  Therefore, we forget the mangling here; we'll recompute it
6131      later if we need it.  */
6132   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
6133     {
6134       SET_DECL_RTL (new_friend, NULL_RTX);
6135       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
6136     }
6137
6138   if (DECL_NAMESPACE_SCOPE_P (new_friend))
6139     {
6140       tree old_decl;
6141       tree new_friend_template_info;
6142       tree new_friend_result_template_info;
6143       tree ns;
6144       int  new_friend_is_defn;
6145
6146       /* We must save some information from NEW_FRIEND before calling
6147          duplicate decls since that function will free NEW_FRIEND if
6148          possible.  */
6149       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
6150       new_friend_is_defn =
6151             (DECL_INITIAL (DECL_TEMPLATE_RESULT
6152                            (template_for_substitution (new_friend)))
6153              != NULL_TREE);
6154       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
6155         {
6156           /* This declaration is a `primary' template.  */
6157           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
6158
6159           new_friend_result_template_info
6160             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
6161         }
6162       else
6163         new_friend_result_template_info = NULL_TREE;
6164
6165       /* Make the init_value nonzero so pushdecl knows this is a defn.  */
6166       if (new_friend_is_defn)
6167         DECL_INITIAL (new_friend) = error_mark_node;
6168
6169       /* Inside pushdecl_namespace_level, we will push into the
6170          current namespace. However, the friend function should go
6171          into the namespace of the template.  */
6172       ns = decl_namespace_context (new_friend);
6173       push_nested_namespace (ns);
6174       old_decl = pushdecl_namespace_level (new_friend, /*is_friend=*/true);
6175       pop_nested_namespace (ns);
6176
6177       if (old_decl == error_mark_node)
6178         return error_mark_node;
6179
6180       if (old_decl != new_friend)
6181         {
6182           /* This new friend declaration matched an existing
6183              declaration.  For example, given:
6184
6185                template <class T> void f(T);
6186                template <class U> class C {
6187                  template <class T> friend void f(T) {}
6188                };
6189
6190              the friend declaration actually provides the definition
6191              of `f', once C has been instantiated for some type.  So,
6192              old_decl will be the out-of-class template declaration,
6193              while new_friend is the in-class definition.
6194
6195              But, if `f' was called before this point, the
6196              instantiation of `f' will have DECL_TI_ARGS corresponding
6197              to `T' but not to `U', references to which might appear
6198              in the definition of `f'.  Previously, the most general
6199              template for an instantiation of `f' was the out-of-class
6200              version; now it is the in-class version.  Therefore, we
6201              run through all specialization of `f', adding to their
6202              DECL_TI_ARGS appropriately.  In particular, they need a
6203              new set of outer arguments, corresponding to the
6204              arguments for this class instantiation.
6205
6206              The same situation can arise with something like this:
6207
6208                friend void f(int);
6209                template <class T> class C {
6210                  friend void f(T) {}
6211                };
6212
6213              when `C<int>' is instantiated.  Now, `f(int)' is defined
6214              in the class.  */
6215
6216           if (!new_friend_is_defn)
6217             /* On the other hand, if the in-class declaration does
6218                *not* provide a definition, then we don't want to alter
6219                existing definitions.  We can just leave everything
6220                alone.  */
6221             ;
6222           else
6223             {
6224               /* Overwrite whatever template info was there before, if
6225                  any, with the new template information pertaining to
6226                  the declaration.  */
6227               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
6228
6229               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
6230                 reregister_specialization (new_friend,
6231                                            most_general_template (old_decl),
6232                                            old_decl);
6233               else
6234                 {
6235                   tree t;
6236                   tree new_friend_args;
6237
6238                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl))
6239                     = new_friend_result_template_info;
6240
6241                   new_friend_args = TI_ARGS (new_friend_template_info);
6242                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl);
6243                        t != NULL_TREE;
6244                        t = TREE_CHAIN (t))
6245                     {
6246                       tree spec = TREE_VALUE (t);
6247
6248                       DECL_TI_ARGS (spec)
6249                         = add_outermost_template_args (new_friend_args,
6250                                                        DECL_TI_ARGS (spec));
6251                     }
6252
6253                   /* Now, since specializations are always supposed to
6254                      hang off of the most general template, we must move
6255                      them.  */
6256                   t = most_general_template (old_decl);
6257                   if (t != old_decl)
6258                     {
6259                       DECL_TEMPLATE_SPECIALIZATIONS (t)
6260                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
6261                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
6262                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
6263                     }
6264                 }
6265             }
6266
6267           /* The information from NEW_FRIEND has been merged into OLD_DECL
6268              by duplicate_decls.  */
6269           new_friend = old_decl;
6270         }
6271     }
6272   else
6273     {
6274       tree context = DECL_CONTEXT (new_friend);
6275       bool dependent_p;
6276
6277       /* In the code
6278            template <class T> class C {
6279              template <class U> friend void C1<U>::f (); // case 1
6280              friend void C2<T>::f ();                    // case 2
6281            };
6282          we only need to make sure CONTEXT is a complete type for
6283          case 2.  To distinguish between the two cases, we note that
6284          CONTEXT of case 1 remains dependent type after tsubst while
6285          this isn't true for case 2.  */
6286       ++processing_template_decl;
6287       dependent_p = dependent_type_p (context);
6288       --processing_template_decl;
6289
6290       if (!dependent_p
6291           && !complete_type_or_else (context, NULL_TREE))
6292         return error_mark_node;
6293
6294       if (COMPLETE_TYPE_P (context))
6295         {
6296           /* Check to see that the declaration is really present, and,
6297              possibly obtain an improved declaration.  */
6298           tree fn = check_classfn (context,
6299                                    new_friend, NULL_TREE);
6300
6301           if (fn)
6302             new_friend = fn;
6303         }
6304     }
6305
6306   return new_friend;
6307 }
6308
6309 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
6310    template arguments, as for tsubst.
6311
6312    Returns an appropriate tsubst'd friend type or error_mark_node on
6313    failure.  */
6314
6315 static tree
6316 tsubst_friend_class (tree friend_tmpl, tree args)
6317 {
6318   tree friend_type;
6319   tree tmpl;
6320   tree context;
6321
6322   context = DECL_CONTEXT (friend_tmpl);
6323
6324   if (context)
6325     {
6326       if (TREE_CODE (context) == NAMESPACE_DECL)
6327         push_nested_namespace (context);
6328       else
6329         push_nested_class (tsubst (context, args, tf_none, NULL_TREE));
6330     }
6331
6332   /* Look for a class template declaration.  We look for hidden names
6333      because two friend declarations of the same template are the
6334      same.  For example, in:
6335
6336        struct A { 
6337          template <typename> friend class F;
6338        };
6339        template <typename> struct B { 
6340          template <typename> friend class F;
6341        };
6342
6343      both F templates are the same.  */
6344   tmpl = lookup_name_real (DECL_NAME (friend_tmpl), 0, 0,
6345                            /*block_p=*/true, 0, 
6346                            LOOKUP_COMPLAIN | LOOKUP_HIDDEN);
6347
6348   /* But, if we don't find one, it might be because we're in a
6349      situation like this:
6350
6351        template <class T>
6352        struct S {
6353          template <class U>
6354          friend struct S;
6355        };
6356
6357      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
6358      for `S<int>', not the TEMPLATE_DECL.  */
6359   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
6360     {
6361       tmpl = lookup_name_prefer_type (DECL_NAME (friend_tmpl), 1);
6362       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
6363     }
6364
6365   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
6366     {
6367       /* The friend template has already been declared.  Just
6368          check to see that the declarations match, and install any new
6369          default parameters.  We must tsubst the default parameters,
6370          of course.  We only need the innermost template parameters
6371          because that is all that redeclare_class_template will look
6372          at.  */
6373       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
6374           > TMPL_ARGS_DEPTH (args))
6375         {
6376           tree parms;
6377           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
6378                                          args, tf_warning_or_error);
6379           redeclare_class_template (TREE_TYPE (tmpl), parms);
6380         }
6381
6382       friend_type = TREE_TYPE (tmpl);
6383     }
6384   else
6385     {
6386       /* The friend template has not already been declared.  In this
6387          case, the instantiation of the template class will cause the
6388          injection of this template into the global scope.  */
6389       tmpl = tsubst (friend_tmpl, args, tf_warning_or_error, NULL_TREE);
6390       if (tmpl == error_mark_node)
6391         return error_mark_node;
6392
6393       /* The new TMPL is not an instantiation of anything, so we
6394          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
6395          the new type because that is supposed to be the corresponding
6396          template decl, i.e., TMPL.  */
6397       DECL_USE_TEMPLATE (tmpl) = 0;
6398       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
6399       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
6400       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
6401         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
6402
6403       /* Inject this template into the global scope.  */
6404       friend_type = TREE_TYPE (pushdecl_top_level_maybe_friend (tmpl, true));
6405     }
6406
6407   if (context)
6408     {
6409       if (TREE_CODE (context) == NAMESPACE_DECL)
6410         pop_nested_namespace (context);
6411       else
6412         pop_nested_class ();
6413     }
6414
6415   return friend_type;
6416 }
6417
6418 /* Returns zero if TYPE cannot be completed later due to circularity.
6419    Otherwise returns one.  */
6420
6421 static int
6422 can_complete_type_without_circularity (tree type)
6423 {
6424   if (type == NULL_TREE || type == error_mark_node)
6425     return 0;
6426   else if (COMPLETE_TYPE_P (type))
6427     return 1;
6428   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
6429     return can_complete_type_without_circularity (TREE_TYPE (type));
6430   else if (CLASS_TYPE_P (type)
6431            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
6432     return 0;
6433   else
6434     return 1;
6435 }
6436
6437 tree
6438 instantiate_class_template (tree type)
6439 {
6440   tree template, args, pattern, t, member;
6441   tree typedecl;
6442   tree pbinfo;
6443   tree base_list;
6444
6445   if (type == error_mark_node)
6446     return error_mark_node;
6447
6448   if (TYPE_BEING_DEFINED (type)
6449       || COMPLETE_TYPE_P (type)
6450       || dependent_type_p (type))
6451     return type;
6452
6453   /* Figure out which template is being instantiated.  */
6454   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
6455   gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
6456
6457   /* Determine what specialization of the original template to
6458      instantiate.  */
6459   t = most_specialized_class (type, template);
6460   if (t == error_mark_node)
6461     {
6462       TYPE_BEING_DEFINED (type) = 1;
6463       return error_mark_node;
6464     }
6465   else if (t)
6466     {
6467       /* This TYPE is actually an instantiation of a partial
6468          specialization.  We replace the innermost set of ARGS with
6469          the arguments appropriate for substitution.  For example,
6470          given:
6471
6472            template <class T> struct S {};
6473            template <class T> struct S<T*> {};
6474
6475          and supposing that we are instantiating S<int*>, ARGS will
6476          presently be {int*} -- but we need {int}.  */
6477       pattern = TREE_TYPE (t);
6478       args = TREE_PURPOSE (t);
6479     }
6480   else
6481     {
6482       pattern = TREE_TYPE (template);
6483       args = CLASSTYPE_TI_ARGS (type);
6484     }
6485
6486   /* If the template we're instantiating is incomplete, then clearly
6487      there's nothing we can do.  */
6488   if (!COMPLETE_TYPE_P (pattern))
6489     return type;
6490
6491   /* If we've recursively instantiated too many templates, stop.  */
6492   if (! push_tinst_level (type))
6493     return type;
6494
6495   /* Now we're really doing the instantiation.  Mark the type as in
6496      the process of being defined.  */
6497   TYPE_BEING_DEFINED (type) = 1;
6498
6499   /* We may be in the middle of deferred access check.  Disable
6500      it now.  */
6501   push_deferring_access_checks (dk_no_deferred);
6502
6503   push_to_top_level ();
6504
6505   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
6506
6507   /* Set the input location to the template definition. This is needed
6508      if tsubsting causes an error.  */
6509   typedecl = TYPE_MAIN_DECL (type);
6510   input_location = DECL_SOURCE_LOCATION (typedecl);
6511   in_system_header = DECL_IN_SYSTEM_HEADER (typedecl);
6512
6513   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
6514   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
6515   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
6516   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
6517   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
6518   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
6519   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
6520   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
6521   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
6522   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
6523   TYPE_PACKED (type) = TYPE_PACKED (pattern);
6524   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
6525   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
6526   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
6527   if (ANON_AGGR_TYPE_P (pattern))
6528     SET_ANON_AGGR_TYPE_P (type);
6529   if (CLASSTYPE_VISIBILITY_SPECIFIED (pattern))
6530     {
6531       CLASSTYPE_VISIBILITY_SPECIFIED (type) = 1;
6532       CLASSTYPE_VISIBILITY (type) = CLASSTYPE_VISIBILITY (pattern);
6533     }
6534
6535   pbinfo = TYPE_BINFO (pattern);
6536
6537   /* We should never instantiate a nested class before its enclosing
6538      class; we need to look up the nested class by name before we can
6539      instantiate it, and that lookup should instantiate the enclosing
6540      class.  */
6541   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
6542               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
6543               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
6544
6545   base_list = NULL_TREE;
6546   if (BINFO_N_BASE_BINFOS (pbinfo))
6547     {
6548       tree pbase_binfo;
6549       tree context = TYPE_CONTEXT (type);
6550       tree pushed_scope;
6551       int i;
6552
6553       /* We must enter the scope containing the type, as that is where
6554          the accessibility of types named in dependent bases are
6555          looked up from.  */
6556       pushed_scope = push_scope (context ? context : global_namespace);
6557
6558       /* Substitute into each of the bases to determine the actual
6559          basetypes.  */
6560       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
6561         {
6562           tree base;
6563           tree access = BINFO_BASE_ACCESS (pbinfo, i);
6564           tree expanded_bases = NULL_TREE;
6565           int idx, len = 1;
6566
6567           if (PACK_EXPANSION_P (BINFO_TYPE (pbase_binfo)))
6568             {
6569               expanded_bases = 
6570                 tsubst_pack_expansion (BINFO_TYPE (pbase_binfo),
6571                                        args, tf_error, NULL_TREE);
6572               if (expanded_bases == error_mark_node)
6573                 continue;
6574
6575               len = TREE_VEC_LENGTH (expanded_bases);
6576             }
6577
6578           for (idx = 0; idx < len; idx++)
6579             {
6580               if (expanded_bases)
6581                 /* Extract the already-expanded base class.  */
6582                 base = TREE_VEC_ELT (expanded_bases, idx);
6583               else
6584                 /* Substitute to figure out the base class.  */
6585                 base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, 
6586                                NULL_TREE);
6587
6588               if (base == error_mark_node)
6589                 continue;
6590
6591               base_list = tree_cons (access, base, base_list);
6592               if (BINFO_VIRTUAL_P (pbase_binfo))
6593                 TREE_TYPE (base_list) = integer_type_node;
6594             }
6595         }
6596
6597       /* The list is now in reverse order; correct that.  */
6598       base_list = nreverse (base_list);
6599
6600       if (pushed_scope)
6601         pop_scope (pushed_scope);
6602     }
6603   /* Now call xref_basetypes to set up all the base-class
6604      information.  */
6605   xref_basetypes (type, base_list);
6606
6607
6608   /* Now that our base classes are set up, enter the scope of the
6609      class, so that name lookups into base classes, etc. will work
6610      correctly.  This is precisely analogous to what we do in
6611      begin_class_definition when defining an ordinary non-template
6612      class.  */
6613   pushclass (type);
6614
6615   /* Now members are processed in the order of declaration.  */
6616   for (member = CLASSTYPE_DECL_LIST (pattern);
6617        member; member = TREE_CHAIN (member))
6618     {
6619       tree t = TREE_VALUE (member);
6620
6621       if (TREE_PURPOSE (member))
6622         {
6623           if (TYPE_P (t))
6624             {
6625               /* Build new CLASSTYPE_NESTED_UTDS.  */
6626
6627               tree newtag;
6628               bool class_template_p;
6629
6630               class_template_p = (TREE_CODE (t) != ENUMERAL_TYPE
6631                                   && TYPE_LANG_SPECIFIC (t)
6632                                   && CLASSTYPE_IS_TEMPLATE (t));
6633               /* If the member is a class template, then -- even after
6634                  substitution -- there may be dependent types in the
6635                  template argument list for the class.  We increment
6636                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
6637                  that function will assume that no types are dependent
6638                  when outside of a template.  */
6639               if (class_template_p)
6640                 ++processing_template_decl;
6641               newtag = tsubst (t, args, tf_error, NULL_TREE);
6642               if (class_template_p)
6643                 --processing_template_decl;
6644               if (newtag == error_mark_node)
6645                 continue;
6646
6647               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
6648                 {
6649                   tree name = TYPE_IDENTIFIER (t);
6650
6651                   if (class_template_p)
6652                     /* Unfortunately, lookup_template_class sets
6653                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
6654                        instantiation (i.e., for the type of a member
6655                        template class nested within a template class.)
6656                        This behavior is required for
6657                        maybe_process_partial_specialization to work
6658                        correctly, but is not accurate in this case;
6659                        the TAG is not an instantiation of anything.
6660                        (The corresponding TEMPLATE_DECL is an
6661                        instantiation, but the TYPE is not.) */
6662                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
6663
6664                   /* Now, we call pushtag to put this NEWTAG into the scope of
6665                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
6666                      pushtag calling push_template_decl.  We don't have to do
6667                      this for enums because it will already have been done in
6668                      tsubst_enum.  */
6669                   if (name)
6670                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
6671                   pushtag (name, newtag, /*tag_scope=*/ts_current);
6672                 }
6673             }
6674           else if (TREE_CODE (t) == FUNCTION_DECL
6675                    || DECL_FUNCTION_TEMPLATE_P (t))
6676             {
6677               /* Build new TYPE_METHODS.  */
6678               tree r;
6679
6680               if (TREE_CODE (t) == TEMPLATE_DECL)
6681                 ++processing_template_decl;
6682               r = tsubst (t, args, tf_error, NULL_TREE);
6683               if (TREE_CODE (t) == TEMPLATE_DECL)
6684                 --processing_template_decl;
6685               set_current_access_from_decl (r);
6686               finish_member_declaration (r);
6687             }
6688           else
6689             {
6690               /* Build new TYPE_FIELDS.  */
6691               if (TREE_CODE (t) == STATIC_ASSERT)
6692                 {
6693                   tree condition = 
6694                     tsubst_expr (STATIC_ASSERT_CONDITION (t), args, 
6695                                  tf_warning_or_error, NULL_TREE,
6696                                  /*integral_constant_expression_p=*/true);
6697                   finish_static_assert (condition,
6698                                         STATIC_ASSERT_MESSAGE (t), 
6699                                         STATIC_ASSERT_SOURCE_LOCATION (t),
6700                                         /*member_p=*/true);
6701                 }
6702               else if (TREE_CODE (t) != CONST_DECL)
6703                 {
6704                   tree r;
6705
6706                   /* The the file and line for this declaration, to
6707                      assist in error message reporting.  Since we
6708                      called push_tinst_level above, we don't need to
6709                      restore these.  */
6710                   input_location = DECL_SOURCE_LOCATION (t);
6711
6712                   if (TREE_CODE (t) == TEMPLATE_DECL)
6713                     ++processing_template_decl;
6714                   r = tsubst (t, args, tf_warning_or_error, NULL_TREE);
6715                   if (TREE_CODE (t) == TEMPLATE_DECL)
6716                     --processing_template_decl;
6717                   if (TREE_CODE (r) == VAR_DECL)
6718                     {
6719                       /* In [temp.inst]:
6720
6721                            [t]he initialization (and any associated
6722                            side-effects) of a static data member does
6723                            not occur unless the static data member is
6724                            itself used in a way that requires the
6725                            definition of the static data member to
6726                            exist.
6727
6728                          Therefore, we do not substitute into the
6729                          initialized for the static data member here.  */
6730                       finish_static_data_member_decl
6731                         (r,
6732                          /*init=*/NULL_TREE,
6733                          /*init_const_expr_p=*/false,
6734                          /*asmspec_tree=*/NULL_TREE,
6735                          /*flags=*/0);
6736                       if (DECL_INITIALIZED_IN_CLASS_P (r))
6737                         check_static_variable_definition (r, TREE_TYPE (r));
6738                     }
6739                   else if (TREE_CODE (r) == FIELD_DECL)
6740                     {
6741                       /* Determine whether R has a valid type and can be
6742                          completed later.  If R is invalid, then it is
6743                          replaced by error_mark_node so that it will not be
6744                          added to TYPE_FIELDS.  */
6745                       tree rtype = TREE_TYPE (r);
6746                       if (can_complete_type_without_circularity (rtype))
6747                         complete_type (rtype);
6748
6749                       if (!COMPLETE_TYPE_P (rtype))
6750                         {
6751                           cxx_incomplete_type_error (r, rtype);
6752                           r = error_mark_node;
6753                         }
6754                     }
6755
6756                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
6757                      such a thing will already have been added to the field
6758                      list by tsubst_enum in finish_member_declaration in the
6759                      CLASSTYPE_NESTED_UTDS case above.  */
6760                   if (!(TREE_CODE (r) == TYPE_DECL
6761                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
6762                         && DECL_ARTIFICIAL (r)))
6763                     {
6764                       set_current_access_from_decl (r);
6765                       finish_member_declaration (r);
6766                     }
6767                 }
6768             }
6769         }
6770       else
6771         {
6772           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
6773             {
6774               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
6775
6776               tree friend_type = t;
6777               bool adjust_processing_template_decl = false;
6778
6779               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6780                 {
6781                   /* template <class T> friend class C;  */
6782                   friend_type = tsubst_friend_class (friend_type, args);
6783                   adjust_processing_template_decl = true;
6784                 }
6785               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
6786                 {
6787                   /* template <class T> friend class C::D;  */
6788                   friend_type = tsubst (friend_type, args,
6789                                         tf_warning_or_error, NULL_TREE);
6790                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
6791                     friend_type = TREE_TYPE (friend_type);
6792                   adjust_processing_template_decl = true;
6793                 }
6794               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
6795                 {
6796                   /* This could be either
6797
6798                        friend class T::C;
6799
6800                      when dependent_type_p is false or
6801
6802                        template <class U> friend class T::C;
6803
6804                      otherwise.  */
6805                   friend_type = tsubst (friend_type, args,
6806                                         tf_warning_or_error, NULL_TREE);
6807                   /* Bump processing_template_decl for correct
6808                      dependent_type_p calculation.  */
6809                   ++processing_template_decl;
6810                   if (dependent_type_p (friend_type))
6811                     adjust_processing_template_decl = true;
6812                   --processing_template_decl;
6813                 }
6814               else if (!CLASSTYPE_USE_TEMPLATE (friend_type)
6815                        && hidden_name_p (TYPE_NAME (friend_type)))
6816                 {
6817                   /* friend class C;
6818
6819                      where C hasn't been declared yet.  Let's lookup name
6820                      from namespace scope directly, bypassing any name that
6821                      come from dependent base class.  */
6822                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
6823
6824                   /* The call to xref_tag_from_type does injection for friend
6825                      classes.  */
6826                   push_nested_namespace (ns);
6827                   friend_type =
6828                     xref_tag_from_type (friend_type, NULL_TREE,
6829                                         /*tag_scope=*/ts_current);
6830                   pop_nested_namespace (ns);
6831                 }
6832               else if (uses_template_parms (friend_type))
6833                 /* friend class C<T>;  */
6834                 friend_type = tsubst (friend_type, args,
6835                                       tf_warning_or_error, NULL_TREE);
6836               /* Otherwise it's
6837
6838                    friend class C;
6839
6840                  where C is already declared or
6841
6842                    friend class C<int>;
6843
6844                  We don't have to do anything in these cases.  */
6845
6846               if (adjust_processing_template_decl)
6847                 /* Trick make_friend_class into realizing that the friend
6848                    we're adding is a template, not an ordinary class.  It's
6849                    important that we use make_friend_class since it will
6850                    perform some error-checking and output cross-reference
6851                    information.  */
6852                 ++processing_template_decl;
6853
6854               if (friend_type != error_mark_node)
6855                 make_friend_class (type, friend_type, /*complain=*/false);
6856
6857               if (adjust_processing_template_decl)
6858                 --processing_template_decl;
6859             }
6860           else
6861             {
6862               /* Build new DECL_FRIENDLIST.  */
6863               tree r;
6864
6865               /* The the file and line for this declaration, to
6866                  assist in error message reporting.  Since we
6867                  called push_tinst_level above, we don't need to
6868                  restore these.  */
6869               input_location = DECL_SOURCE_LOCATION (t);
6870
6871               if (TREE_CODE (t) == TEMPLATE_DECL)
6872                 {
6873                   ++processing_template_decl;
6874                   push_deferring_access_checks (dk_no_check);
6875                 }
6876
6877               r = tsubst_friend_function (t, args);
6878               add_friend (type, r, /*complain=*/false);
6879               if (TREE_CODE (t) == TEMPLATE_DECL)
6880                 {
6881                   pop_deferring_access_checks ();
6882                   --processing_template_decl;
6883                 }
6884             }
6885         }
6886     }
6887
6888   /* Set the file and line number information to whatever is given for
6889      the class itself.  This puts error messages involving generated
6890      implicit functions at a predictable point, and the same point
6891      that would be used for non-template classes.  */
6892   input_location = DECL_SOURCE_LOCATION (typedecl);
6893
6894   unreverse_member_declarations (type);
6895   finish_struct_1 (type);
6896   TYPE_BEING_DEFINED (type) = 0;
6897
6898   /* Now that the class is complete, instantiate default arguments for
6899      any member functions.  We don't do this earlier because the
6900      default arguments may reference members of the class.  */
6901   if (!PRIMARY_TEMPLATE_P (template))
6902     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
6903       if (TREE_CODE (t) == FUNCTION_DECL
6904           /* Implicitly generated member functions will not have template
6905              information; they are not instantiations, but instead are
6906              created "fresh" for each instantiation.  */
6907           && DECL_TEMPLATE_INFO (t))
6908         tsubst_default_arguments (t);
6909
6910   popclass ();
6911   pop_from_top_level ();
6912   pop_deferring_access_checks ();
6913   pop_tinst_level ();
6914
6915   /* The vtable for a template class can be emitted in any translation
6916      unit in which the class is instantiated.  When there is no key
6917      method, however, finish_struct_1 will already have added TYPE to
6918      the keyed_classes list.  */
6919   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
6920     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
6921
6922   return type;
6923 }
6924
6925 static tree
6926 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6927 {
6928   tree r;
6929
6930   if (!t)
6931     r = t;
6932   else if (TYPE_P (t))
6933     r = tsubst (t, args, complain, in_decl);
6934   else
6935     {
6936       r = tsubst_expr (t, args, complain, in_decl,
6937                        /*integral_constant_expression_p=*/true);
6938       r = fold_non_dependent_expr (r);
6939     }
6940   return r;
6941 }
6942
6943 /* Substitute ARGS into T, which is an pack expansion
6944    (i.e. TYPE_PACK_EXPANSION or EXPR_PACK_EXPANSION). Returns a
6945    TREE_VEC with the substituted arguments, a PACK_EXPANSION_* node
6946    (if only a partial substitution could be performed) or
6947    ERROR_MARK_NODE if there was an error.  */
6948 tree
6949 tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
6950                        tree in_decl)
6951 {
6952   tree pattern;
6953   tree pack, packs = NULL_TREE, unsubstituted_packs = NULL_TREE;
6954   tree first_arg_pack; int i, len = -1;
6955   tree result;
6956   int incomplete = 0;
6957
6958   gcc_assert (PACK_EXPANSION_P (t));
6959   pattern = PACK_EXPANSION_PATTERN (t);
6960
6961   /* Determine the argument packs that will instantiate the parameter
6962      packs used in the expansion expression. While we're at it,
6963      compute the number of arguments to be expanded and make sure it
6964      is consistent.  */
6965   for (pack = PACK_EXPANSION_PARAMETER_PACKS (t); pack; 
6966        pack = TREE_CHAIN (pack))
6967     {
6968       tree parm_pack = TREE_VALUE (pack);
6969       tree arg_pack = NULL_TREE;
6970       tree orig_arg = NULL_TREE;
6971
6972       if (TREE_CODE (parm_pack) == PARM_DECL)
6973         {
6974           if (local_specializations)
6975             arg_pack = retrieve_local_specialization (parm_pack);
6976         }
6977       else
6978         {
6979           int level, idx, levels;
6980           template_parm_level_and_index (parm_pack, &level, &idx);
6981
6982           levels = TMPL_ARGS_DEPTH (args);
6983           if (level <= levels)
6984             arg_pack = TMPL_ARG (args, level, idx);
6985         }
6986
6987       orig_arg = arg_pack;
6988       if (arg_pack && TREE_CODE (arg_pack) == ARGUMENT_PACK_SELECT)
6989         arg_pack = ARGUMENT_PACK_SELECT_FROM_PACK (arg_pack);
6990       
6991       if (arg_pack && !ARGUMENT_PACK_P (arg_pack))
6992         /* This can only happen if we forget to expand an argument
6993            pack somewhere else. Just return an error, silently.  */
6994         {
6995           result = make_tree_vec (1);
6996           TREE_VEC_ELT (result, 0) = error_mark_node;
6997           return result;
6998         }
6999
7000       if (arg_pack)
7001         {
7002           int my_len = 
7003             TREE_VEC_LENGTH (ARGUMENT_PACK_ARGS (arg_pack));
7004
7005           /* It's all-or-nothing with incomplete argument packs.  */
7006           if (incomplete && !ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7007             return error_mark_node;
7008           
7009           if (ARGUMENT_PACK_INCOMPLETE_P (arg_pack))
7010             incomplete = 1;
7011
7012           if (len < 0)
7013             {
7014               len = my_len;
7015               first_arg_pack = arg_pack;
7016             }
7017           else if (len != my_len)
7018             {
7019               if (TREE_CODE (t) == TYPE_PACK_EXPANSION)
7020                 error ("mismatched argument pack lengths while expanding "
7021                        "%<%T%>",
7022                        pattern);
7023               else
7024                 error ("mismatched argument pack lengths while expanding "
7025                        "%<%E%>",
7026                        pattern);
7027               return error_mark_node;
7028             }
7029
7030           /* Keep track of the parameter packs and their corresponding
7031              argument packs.  */
7032           packs = tree_cons (parm_pack, arg_pack, packs);
7033           TREE_TYPE (packs) = orig_arg;
7034         }
7035       else
7036         /* We can't substitute for this parameter pack.  */
7037         unsubstituted_packs = tree_cons (TREE_PURPOSE (pack),
7038                                          TREE_VALUE (pack),
7039                                          unsubstituted_packs);
7040     }
7041
7042   /* We cannot expand this expansion expression, because we don't have
7043      all of the argument packs we need. Substitute into the pattern
7044      and return a PACK_EXPANSION_*. The caller will need to deal with
7045      that.  */
7046   if (unsubstituted_packs)
7047     return make_pack_expansion (tsubst (pattern, args, complain, 
7048                                         in_decl));
7049
7050   /* We could not find any argument packs that work.  */
7051   if (len < 0)
7052     return error_mark_node;
7053
7054   /* For each argument in each argument pack, substitute into the
7055      pattern.  */
7056   result = make_tree_vec (len + incomplete);
7057   for (i = 0; i < len + incomplete; ++i)
7058     {
7059       /* For parameter pack, change the substitution of the parameter
7060          pack to the ith argument in its argument pack, then expand
7061          the pattern.  */
7062       for (pack = packs; pack; pack = TREE_CHAIN (pack))
7063         {
7064           tree parm = TREE_PURPOSE (pack);
7065
7066           if (TREE_CODE (parm) == PARM_DECL)
7067             {
7068               /* Select the Ith argument from the pack.  */
7069               tree arg = make_node (ARGUMENT_PACK_SELECT);
7070               ARGUMENT_PACK_SELECT_FROM_PACK (arg) = TREE_VALUE (pack);
7071               ARGUMENT_PACK_SELECT_INDEX (arg) = i;
7072               mark_used (parm);
7073               register_local_specialization (arg, parm);
7074             }
7075           else
7076             {
7077               tree value = parm;
7078               int idx, level;
7079               template_parm_level_and_index (parm, &level, &idx);
7080               
7081               if (i < len) 
7082                 {
7083                   /* Select the Ith argument from the pack. */
7084                   value = make_node (ARGUMENT_PACK_SELECT);
7085                   ARGUMENT_PACK_SELECT_FROM_PACK (value) = TREE_VALUE (pack);
7086                   ARGUMENT_PACK_SELECT_INDEX (value) = i;
7087                 }
7088
7089               /* Update the corresponding argument.  */
7090               TMPL_ARG (args, level, idx) = value;
7091             }
7092         }
7093
7094       /* Substitute into the PATTERN with the altered arguments.  */
7095       if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
7096         TREE_VEC_ELT (result, i) = 
7097           tsubst_expr (pattern, args, complain, in_decl,
7098                        /*integral_constant_expression_p=*/false);
7099       else
7100         TREE_VEC_ELT (result, i) = tsubst (pattern, args, complain, in_decl);
7101
7102       if (i == len)
7103         /* When we have incomplete argument packs, the last "expanded"
7104            result is itself a pack expansion, which allows us
7105            to deduce more arguments.  */
7106         TREE_VEC_ELT (result, i) = 
7107           make_pack_expansion (TREE_VEC_ELT (result, i));
7108
7109       if (TREE_VEC_ELT (result, i) == error_mark_node)
7110         {
7111           result = error_mark_node;
7112           break;
7113         }
7114     }
7115   
7116   /* Update ARGS to restore the substitution from parameter packs to
7117      their argument packs.  */
7118   for (pack = packs; pack; pack = TREE_CHAIN (pack))
7119     {
7120       tree parm = TREE_PURPOSE (pack);
7121
7122       if (TREE_CODE (parm) == PARM_DECL)
7123         register_local_specialization (TREE_TYPE (pack), parm);
7124       else
7125         {
7126           int idx, level;
7127           template_parm_level_and_index (parm, &level, &idx);
7128           
7129           /* Update the corresponding argument.  */
7130           if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
7131             TREE_VEC_ELT (TREE_VEC_ELT (args, level -1 ), idx) =
7132               TREE_TYPE (pack);
7133           else
7134             TREE_VEC_ELT (args, idx) = TREE_TYPE (pack);
7135         }
7136     }
7137
7138   return result;
7139 }
7140
7141 /* Substitute ARGS into the vector or list of template arguments T.  */
7142
7143 static tree
7144 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7145 {
7146   tree orig_t = t;
7147   int len = TREE_VEC_LENGTH (t);
7148   int need_new = 0, i, expanded_len_adjust = 0, out;
7149   tree *elts = (tree *) alloca (len * sizeof (tree));
7150
7151   for (i = 0; i < len; i++)
7152     {
7153       tree orig_arg = TREE_VEC_ELT (t, i);
7154       tree new_arg;
7155
7156       if (TREE_CODE (orig_arg) == TREE_VEC)
7157         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
7158       else if (PACK_EXPANSION_P (orig_arg))
7159         {
7160           /* Substitute into an expansion expression.  */
7161           new_arg = tsubst_pack_expansion (orig_arg, args, complain, in_decl);
7162
7163           if (TREE_CODE (new_arg) == TREE_VEC)
7164             /* Add to the expanded length adjustment the number of
7165                expanded arguments. We subtract one from this
7166                measurement, because the argument pack expression
7167                itself is already counted as 1 in
7168                LEN. EXPANDED_LEN_ADJUST can actually be negative, if
7169                the argument pack is empty.  */
7170             expanded_len_adjust += TREE_VEC_LENGTH (new_arg) - 1;
7171         }
7172       else if (ARGUMENT_PACK_P (orig_arg))
7173         {
7174           /* Substitute into each of the arguments.  */
7175           new_arg = make_node (TREE_CODE (orig_arg));
7176           
7177           SET_ARGUMENT_PACK_ARGS (
7178             new_arg,
7179             tsubst_template_args (ARGUMENT_PACK_ARGS (orig_arg),
7180                                   args, complain, in_decl));
7181
7182           if (ARGUMENT_PACK_ARGS (new_arg) == error_mark_node)
7183             new_arg = error_mark_node;
7184
7185           if (TREE_CODE (new_arg) == NONTYPE_ARGUMENT_PACK) {
7186             TREE_TYPE (new_arg) = tsubst (TREE_TYPE (orig_arg), args,
7187                                           complain, in_decl);
7188             TREE_CONSTANT (new_arg) = TREE_CONSTANT (orig_arg);
7189
7190             if (TREE_TYPE (new_arg) == error_mark_node)
7191               new_arg = error_mark_node;
7192           }
7193         }
7194       else
7195         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
7196
7197       if (new_arg == error_mark_node)
7198         return error_mark_node;
7199
7200       elts[i] = new_arg;
7201       if (new_arg != orig_arg)
7202         need_new = 1;
7203     }
7204
7205   if (!need_new)
7206     return t;
7207
7208   /* Make space for the expanded arguments coming from template
7209      argument packs.  */
7210   t = make_tree_vec (len + expanded_len_adjust);
7211   for (i = 0, out = 0; i < len; i++)
7212     {
7213       if ((PACK_EXPANSION_P (TREE_VEC_ELT (orig_t, i))
7214            || ARGUMENT_PACK_P (TREE_VEC_ELT (orig_t, i)))
7215           && TREE_CODE (elts[i]) == TREE_VEC)
7216         {
7217           int idx;
7218
7219           /* Now expand the template argument pack "in place".  */
7220           for (idx = 0; idx < TREE_VEC_LENGTH (elts[i]); idx++, out++)
7221             TREE_VEC_ELT (t, out) = TREE_VEC_ELT (elts[i], idx);
7222         }
7223       else
7224         {
7225           TREE_VEC_ELT (t, out) = elts[i];
7226           out++;
7227         }
7228     }
7229
7230   return t;
7231 }
7232
7233 /* Return the result of substituting ARGS into the template parameters
7234    given by PARMS.  If there are m levels of ARGS and m + n levels of
7235    PARMS, then the result will contain n levels of PARMS.  For
7236    example, if PARMS is `template <class T> template <class U>
7237    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
7238    result will be `template <int*, double, class V>'.  */
7239
7240 static tree
7241 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
7242 {
7243   tree r = NULL_TREE;
7244   tree* new_parms;
7245
7246   /* When substituting into a template, we must set
7247      PROCESSING_TEMPLATE_DECL as the template parameters may be
7248      dependent if they are based on one-another, and the dependency
7249      predicates are short-circuit outside of templates.  */
7250   ++processing_template_decl;
7251
7252   for (new_parms = &r;
7253        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
7254        new_parms = &(TREE_CHAIN (*new_parms)),
7255          parms = TREE_CHAIN (parms))
7256     {
7257       tree new_vec =
7258         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
7259       int i;
7260
7261       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
7262         {
7263           tree tuple;
7264           tree default_value;
7265           tree parm_decl;
7266
7267           if (parms == error_mark_node)
7268             continue;
7269
7270           tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
7271
7272           if (tuple == error_mark_node)
7273             continue;
7274
7275           default_value = TREE_PURPOSE (tuple);
7276           parm_decl = TREE_VALUE (tuple);
7277
7278           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
7279           if (TREE_CODE (parm_decl) == PARM_DECL
7280               && invalid_nontype_parm_type_p (TREE_TYPE (parm_decl), complain))
7281             parm_decl = error_mark_node;
7282           default_value = tsubst_template_arg (default_value, args,
7283                                                complain, NULL_TREE);
7284
7285           tuple = build_tree_list (default_value, parm_decl);
7286           TREE_VEC_ELT (new_vec, i) = tuple;
7287         }
7288
7289       *new_parms =
7290         tree_cons (size_int (TMPL_PARMS_DEPTH (parms)
7291                              - TMPL_ARGS_DEPTH (args)),
7292                    new_vec, NULL_TREE);
7293     }
7294
7295   --processing_template_decl;
7296
7297   return r;
7298 }
7299
7300 /* Substitute the ARGS into the indicated aggregate (or enumeration)
7301    type T.  If T is not an aggregate or enumeration type, it is
7302    handled as if by tsubst.  IN_DECL is as for tsubst.  If
7303    ENTERING_SCOPE is nonzero, T is the context for a template which
7304    we are presently tsubst'ing.  Return the substituted value.  */
7305
7306 static tree
7307 tsubst_aggr_type (tree t,
7308                   tree args,
7309                   tsubst_flags_t complain,
7310                   tree in_decl,
7311                   int entering_scope)
7312 {
7313   if (t == NULL_TREE)
7314     return NULL_TREE;
7315
7316   switch (TREE_CODE (t))
7317     {
7318     case RECORD_TYPE:
7319       if (TYPE_PTRMEMFUNC_P (t))
7320         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
7321
7322       /* Else fall through.  */
7323     case ENUMERAL_TYPE:
7324     case UNION_TYPE:
7325       if (TYPE_TEMPLATE_INFO (t))
7326         {
7327           tree argvec;
7328           tree context;
7329           tree r;
7330           bool saved_skip_evaluation;
7331
7332           /* In "sizeof(X<I>)" we need to evaluate "I".  */
7333           saved_skip_evaluation = skip_evaluation;
7334           skip_evaluation = false;
7335
7336           /* First, determine the context for the type we are looking
7337              up.  */
7338           context = TYPE_CONTEXT (t);
7339           if (context)
7340             context = tsubst_aggr_type (context, args, complain,
7341                                         in_decl, /*entering_scope=*/1);
7342
7343           /* Then, figure out what arguments are appropriate for the
7344              type we are trying to find.  For example, given:
7345
7346                template <class T> struct S;
7347                template <class T, class U> void f(T, U) { S<U> su; }
7348
7349              and supposing that we are instantiating f<int, double>,
7350              then our ARGS will be {int, double}, but, when looking up
7351              S we only want {double}.  */
7352           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
7353                                          complain, in_decl);
7354           if (argvec == error_mark_node)
7355             r = error_mark_node;
7356           else
7357             {
7358               r = lookup_template_class (t, argvec, in_decl, context,
7359                                          entering_scope, complain);
7360               r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7361             }
7362
7363           skip_evaluation = saved_skip_evaluation;
7364
7365           return r;
7366         }
7367       else
7368         /* This is not a template type, so there's nothing to do.  */
7369         return t;
7370
7371     default:
7372       return tsubst (t, args, complain, in_decl);
7373     }
7374 }
7375
7376 /* Substitute into the default argument ARG (a default argument for
7377    FN), which has the indicated TYPE.  */
7378
7379 tree
7380 tsubst_default_argument (tree fn, tree type, tree arg)
7381 {
7382   tree saved_class_ptr = NULL_TREE;
7383   tree saved_class_ref = NULL_TREE;
7384
7385   /* This default argument came from a template.  Instantiate the
7386      default argument here, not in tsubst.  In the case of
7387      something like:
7388
7389        template <class T>
7390        struct S {
7391          static T t();
7392          void f(T = t());
7393        };
7394
7395      we must be careful to do name lookup in the scope of S<T>,
7396      rather than in the current class.  */
7397   push_access_scope (fn);
7398   /* The "this" pointer is not valid in a default argument.  */
7399   if (cfun)
7400     {
7401       saved_class_ptr = current_class_ptr;
7402       cp_function_chain->x_current_class_ptr = NULL_TREE;
7403       saved_class_ref = current_class_ref;
7404       cp_function_chain->x_current_class_ref = NULL_TREE;
7405     }
7406
7407   push_deferring_access_checks(dk_no_deferred);
7408   /* The default argument expression may cause implicitly defined
7409      member functions to be synthesized, which will result in garbage
7410      collection.  We must treat this situation as if we were within
7411      the body of function so as to avoid collecting live data on the
7412      stack.  */
7413   ++function_depth;
7414   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
7415                      tf_warning_or_error, NULL_TREE,
7416                      /*integral_constant_expression_p=*/false);
7417   --function_depth;
7418   pop_deferring_access_checks();
7419
7420   /* Restore the "this" pointer.  */
7421   if (cfun)
7422     {
7423       cp_function_chain->x_current_class_ptr = saved_class_ptr;
7424       cp_function_chain->x_current_class_ref = saved_class_ref;
7425     }
7426
7427   pop_access_scope (fn);
7428
7429   /* Make sure the default argument is reasonable.  */
7430   arg = check_default_argument (type, arg);
7431
7432   return arg;
7433 }
7434
7435 /* Substitute into all the default arguments for FN.  */
7436
7437 static void
7438 tsubst_default_arguments (tree fn)
7439 {
7440   tree arg;
7441   tree tmpl_args;
7442
7443   tmpl_args = DECL_TI_ARGS (fn);
7444
7445   /* If this function is not yet instantiated, we certainly don't need
7446      its default arguments.  */
7447   if (uses_template_parms (tmpl_args))
7448     return;
7449
7450   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn));
7451        arg;
7452        arg = TREE_CHAIN (arg))
7453     if (TREE_PURPOSE (arg))
7454       TREE_PURPOSE (arg) = tsubst_default_argument (fn,
7455                                                     TREE_VALUE (arg),
7456                                                     TREE_PURPOSE (arg));
7457 }
7458
7459 /* Substitute the ARGS into the T, which is a _DECL.  Return the
7460    result of the substitution.  Issue error and warning messages under
7461    control of COMPLAIN.  */
7462
7463 static tree
7464 tsubst_decl (tree t, tree args, tsubst_flags_t complain)
7465 {
7466   location_t saved_loc;
7467   tree r = NULL_TREE;
7468   tree in_decl = t;
7469
7470   /* Set the filename and linenumber to improve error-reporting.  */
7471   saved_loc = input_location;
7472   input_location = DECL_SOURCE_LOCATION (t);
7473
7474   switch (TREE_CODE (t))
7475     {
7476     case TEMPLATE_DECL:
7477       {
7478         /* We can get here when processing a member function template,
7479            member class template, and template template parameter of
7480            a template class.  */
7481         tree decl = DECL_TEMPLATE_RESULT (t);
7482         tree spec;
7483         tree tmpl_args;
7484         tree full_args;
7485
7486         if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7487           {
7488             /* Template template parameter is treated here.  */
7489             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7490             if (new_type == error_mark_node)
7491               return error_mark_node;
7492
7493             r = copy_decl (t);
7494             TREE_CHAIN (r) = NULL_TREE;
7495             TREE_TYPE (r) = new_type;
7496             DECL_TEMPLATE_RESULT (r)
7497               = build_decl (TYPE_DECL, DECL_NAME (decl), new_type);
7498             DECL_TEMPLATE_PARMS (r)
7499               = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7500                                        complain);
7501             TYPE_NAME (new_type) = r;
7502             break;
7503           }
7504
7505         /* We might already have an instance of this template.
7506            The ARGS are for the surrounding class type, so the
7507            full args contain the tsubst'd args for the context,
7508            plus the innermost args from the template decl.  */
7509         tmpl_args = DECL_CLASS_TEMPLATE_P (t)
7510           ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
7511           : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
7512         /* Because this is a template, the arguments will still be
7513            dependent, even after substitution.  If
7514            PROCESSING_TEMPLATE_DECL is not set, the dependency
7515            predicates will short-circuit.  */
7516         ++processing_template_decl;
7517         full_args = tsubst_template_args (tmpl_args, args,
7518                                           complain, in_decl);
7519         --processing_template_decl;
7520         if (full_args == error_mark_node)
7521           return error_mark_node;
7522
7523         /* tsubst_template_args doesn't copy the vector if
7524            nothing changed.  But, *something* should have
7525            changed.  */
7526         gcc_assert (full_args != tmpl_args);
7527
7528         spec = retrieve_specialization (t, full_args,
7529                                         /*class_specializations_p=*/true);
7530         if (spec != NULL_TREE)
7531           {
7532             r = spec;
7533             break;
7534           }
7535
7536         /* Make a new template decl.  It will be similar to the
7537            original, but will record the current template arguments.
7538            We also create a new function declaration, which is just
7539            like the old one, but points to this new template, rather
7540            than the old one.  */
7541         r = copy_decl (t);
7542         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
7543         TREE_CHAIN (r) = NULL_TREE;
7544
7545         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
7546
7547         if (TREE_CODE (decl) == TYPE_DECL)
7548           {
7549             tree new_type;
7550             ++processing_template_decl;
7551             new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7552             --processing_template_decl;
7553             if (new_type == error_mark_node)
7554               return error_mark_node;
7555
7556             TREE_TYPE (r) = new_type;
7557             CLASSTYPE_TI_TEMPLATE (new_type) = r;
7558             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
7559             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
7560             DECL_CONTEXT (r) = TYPE_CONTEXT (new_type);
7561           }
7562         else
7563           {
7564             tree new_decl;
7565             ++processing_template_decl;
7566             new_decl = tsubst (decl, args, complain, in_decl);
7567             --processing_template_decl;
7568             if (new_decl == error_mark_node)
7569               return error_mark_node;
7570
7571             DECL_TEMPLATE_RESULT (r) = new_decl;
7572             DECL_TI_TEMPLATE (new_decl) = r;
7573             TREE_TYPE (r) = TREE_TYPE (new_decl);
7574             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
7575             DECL_CONTEXT (r) = DECL_CONTEXT (new_decl);
7576           }
7577
7578         SET_DECL_IMPLICIT_INSTANTIATION (r);
7579         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
7580         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
7581
7582         /* The template parameters for this new template are all the
7583            template parameters for the old template, except the
7584            outermost level of parameters.  */
7585         DECL_TEMPLATE_PARMS (r)
7586           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
7587                                    complain);
7588
7589         if (PRIMARY_TEMPLATE_P (t))
7590           DECL_PRIMARY_TEMPLATE (r) = r;
7591
7592         if (TREE_CODE (decl) != TYPE_DECL)
7593           /* Record this non-type partial instantiation.  */
7594           register_specialization (r, t,
7595                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)),
7596                                    false);
7597       }
7598       break;
7599
7600     case FUNCTION_DECL:
7601       {
7602         tree ctx;
7603         tree argvec = NULL_TREE;
7604         tree *friends;
7605         tree gen_tmpl;
7606         tree type;
7607         int member;
7608         int args_depth;
7609         int parms_depth;
7610
7611         /* Nobody should be tsubst'ing into non-template functions.  */
7612         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
7613
7614         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
7615           {
7616             tree spec;
7617             bool dependent_p;
7618
7619             /* If T is not dependent, just return it.  We have to
7620                increment PROCESSING_TEMPLATE_DECL because
7621                value_dependent_expression_p assumes that nothing is
7622                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
7623             ++processing_template_decl;
7624             dependent_p = value_dependent_expression_p (t);
7625             --processing_template_decl;
7626             if (!dependent_p)
7627               return t;
7628
7629             /* Calculate the most general template of which R is a
7630                specialization, and the complete set of arguments used to
7631                specialize R.  */
7632             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
7633             argvec = tsubst_template_args (DECL_TI_ARGS
7634                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
7635                                            args, complain, in_decl);
7636
7637             /* Check to see if we already have this specialization.  */
7638             spec = retrieve_specialization (gen_tmpl, argvec,
7639                                             /*class_specializations_p=*/false);
7640
7641             if (spec)
7642               {
7643                 r = spec;
7644                 break;
7645               }
7646
7647             /* We can see more levels of arguments than parameters if
7648                there was a specialization of a member template, like
7649                this:
7650
7651                  template <class T> struct S { template <class U> void f(); }
7652                  template <> template <class U> void S<int>::f(U);
7653
7654                Here, we'll be substituting into the specialization,
7655                because that's where we can find the code we actually
7656                want to generate, but we'll have enough arguments for
7657                the most general template.
7658
7659                We also deal with the peculiar case:
7660
7661                  template <class T> struct S {
7662                    template <class U> friend void f();
7663                  };
7664                  template <class U> void f() {}
7665                  template S<int>;
7666                  template void f<double>();
7667
7668                Here, the ARGS for the instantiation of will be {int,
7669                double}.  But, we only need as many ARGS as there are
7670                levels of template parameters in CODE_PATTERN.  We are
7671                careful not to get fooled into reducing the ARGS in
7672                situations like:
7673
7674                  template <class T> struct S { template <class U> void f(U); }
7675                  template <class T> template <> void S<T>::f(int) {}
7676
7677                which we can spot because the pattern will be a
7678                specialization in this case.  */
7679             args_depth = TMPL_ARGS_DEPTH (args);
7680             parms_depth =
7681               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t)));
7682             if (args_depth > parms_depth
7683                 && !DECL_TEMPLATE_SPECIALIZATION (t))
7684               args = get_innermost_template_args (args, parms_depth);
7685           }
7686         else
7687           {
7688             /* This special case arises when we have something like this:
7689
7690                  template <class T> struct S {
7691                    friend void f<int>(int, double);
7692                  };
7693
7694                Here, the DECL_TI_TEMPLATE for the friend declaration
7695                will be an IDENTIFIER_NODE.  We are being called from
7696                tsubst_friend_function, and we want only to create a
7697                new decl (R) with appropriate types so that we can call
7698                determine_specialization.  */
7699             gen_tmpl = NULL_TREE;
7700           }
7701
7702         if (DECL_CLASS_SCOPE_P (t))
7703           {
7704             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
7705               member = 2;
7706             else
7707               member = 1;
7708             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args,
7709                                     complain, t, /*entering_scope=*/1);
7710           }
7711         else
7712           {
7713             member = 0;
7714             ctx = DECL_CONTEXT (t);
7715           }
7716         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7717         if (type == error_mark_node)
7718           return error_mark_node;
7719
7720         /* We do NOT check for matching decls pushed separately at this
7721            point, as they may not represent instantiations of this
7722            template, and in any case are considered separate under the
7723            discrete model.  */
7724         r = copy_decl (t);
7725         DECL_USE_TEMPLATE (r) = 0;
7726         TREE_TYPE (r) = type;
7727         /* Clear out the mangled name and RTL for the instantiation.  */
7728         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
7729         SET_DECL_RTL (r, NULL_RTX);
7730         DECL_INITIAL (r) = NULL_TREE;
7731         DECL_CONTEXT (r) = ctx;
7732
7733         if (member && DECL_CONV_FN_P (r))
7734           /* Type-conversion operator.  Reconstruct the name, in
7735              case it's the name of one of the template's parameters.  */
7736           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
7737
7738         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
7739                                      complain, t);
7740         DECL_RESULT (r) = NULL_TREE;
7741
7742         TREE_STATIC (r) = 0;
7743         TREE_PUBLIC (r) = TREE_PUBLIC (t);
7744         DECL_EXTERNAL (r) = 1;
7745         /* If this is an instantiation of a function with internal
7746            linkage, we already know what object file linkage will be
7747            assigned to the instantiation.  */
7748         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
7749         DECL_DEFER_OUTPUT (r) = 0;
7750         TREE_CHAIN (r) = NULL_TREE;
7751         DECL_PENDING_INLINE_INFO (r) = 0;
7752         DECL_PENDING_INLINE_P (r) = 0;
7753         DECL_SAVED_TREE (r) = NULL_TREE;
7754         TREE_USED (r) = 0;
7755         if (DECL_CLONED_FUNCTION (r))
7756           {
7757             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
7758                                                args, complain, t);
7759             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
7760             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
7761           }
7762
7763         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
7764            this in the special friend case mentioned above where
7765            GEN_TMPL is NULL.  */
7766         if (gen_tmpl)
7767           {
7768             DECL_TEMPLATE_INFO (r)
7769               = tree_cons (gen_tmpl, argvec, NULL_TREE);
7770             SET_DECL_IMPLICIT_INSTANTIATION (r);
7771             register_specialization (r, gen_tmpl, argvec, false);
7772
7773             /* We're not supposed to instantiate default arguments
7774                until they are called, for a template.  But, for a
7775                declaration like:
7776
7777                  template <class T> void f ()
7778                  { extern void g(int i = T()); }
7779
7780                we should do the substitution when the template is
7781                instantiated.  We handle the member function case in
7782                instantiate_class_template since the default arguments
7783                might refer to other members of the class.  */
7784             if (!member
7785                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
7786                 && !uses_template_parms (argvec))
7787               tsubst_default_arguments (r);
7788           }
7789         else
7790           DECL_TEMPLATE_INFO (r) = NULL_TREE;
7791
7792         /* Copy the list of befriending classes.  */
7793         for (friends = &DECL_BEFRIENDING_CLASSES (r);
7794              *friends;
7795              friends = &TREE_CHAIN (*friends))
7796           {
7797             *friends = copy_node (*friends);
7798             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
7799                                             args, complain,
7800                                             in_decl);
7801           }
7802
7803         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
7804           {
7805             maybe_retrofit_in_chrg (r);
7806             if (DECL_CONSTRUCTOR_P (r))
7807               grok_ctor_properties (ctx, r);
7808             /* If this is an instantiation of a member template, clone it.
7809                If it isn't, that'll be handled by
7810                clone_constructors_and_destructors.  */
7811             if (PRIMARY_TEMPLATE_P (gen_tmpl))
7812               clone_function_decl (r, /*update_method_vec_p=*/0);
7813           }
7814         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r))
7815                  && !grok_op_properties (r, (complain & tf_error) != 0))
7816           return error_mark_node;
7817
7818         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
7819           SET_DECL_FRIEND_CONTEXT (r,
7820                                    tsubst (DECL_FRIEND_CONTEXT (t),
7821                                             args, complain, in_decl));
7822
7823         /* Possibly limit visibility based on template args.  */
7824         DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
7825         if (DECL_VISIBILITY_SPECIFIED (t))
7826           {
7827             DECL_VISIBILITY_SPECIFIED (r) = 0;
7828             DECL_ATTRIBUTES (r)
7829               = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
7830           }
7831         determine_visibility (r);
7832       }
7833       break;
7834
7835     case PARM_DECL:
7836       {
7837         tree type = NULL_TREE;
7838         int i, len = 1;
7839         tree expanded_types = NULL_TREE;
7840         tree prev_r = NULL_TREE;
7841         tree first_r = NULL_TREE;
7842
7843         if (FUNCTION_PARAMETER_PACK_P (t))
7844           {
7845             /* If there is a local specialization that isn't a
7846                parameter pack, it means that we're doing a "simple"
7847                substitution from inside tsubst_pack_expansion. Just
7848                return the local specialization (which will be a single
7849                parm).  */
7850             tree spec = NULL_TREE;
7851             if (local_specializations)
7852               spec = retrieve_local_specialization (t);
7853             if (spec 
7854                 && TREE_CODE (spec) == PARM_DECL
7855                 && TREE_CODE (TREE_TYPE (spec)) != TYPE_PACK_EXPANSION)
7856               return spec;
7857
7858             /* Expand the TYPE_PACK_EXPANSION that provides the types for
7859                the parameters in this function parameter pack.  */
7860             expanded_types = tsubst_pack_expansion (TREE_TYPE (t), args,
7861                                                     complain, in_decl);
7862             if (TREE_CODE (expanded_types) == TREE_VEC)
7863               {
7864                 len = TREE_VEC_LENGTH (expanded_types);
7865
7866                 /* Zero-length parameter packs are boring. Just substitute
7867                    into the chain.  */
7868                 if (len == 0)
7869                   return tsubst (TREE_CHAIN (t), args, complain, 
7870                                  TREE_CHAIN (t));
7871               }
7872             else
7873               {
7874                 /* All we did was update the type. Make a note of that.  */
7875                 type = expanded_types;
7876                 expanded_types = NULL_TREE;
7877               }
7878           }
7879
7880         /* Loop through all of the parameter's we'll build. When T is
7881            a function parameter pack, LEN is the number of expanded
7882            types in EXPANDED_TYPES; otherwise, LEN is 1.  */
7883         r = NULL_TREE;
7884         for (i = 0; i < len; ++i)
7885           {
7886             prev_r = r;
7887             r = copy_node (t);
7888             if (DECL_TEMPLATE_PARM_P (t))
7889               SET_DECL_TEMPLATE_PARM_P (r);
7890
7891             if (expanded_types)
7892               /* We're on the Ith parameter of the function parameter
7893                  pack.  */
7894               {
7895                 /* Get the Ith type.  */
7896                 type = TREE_VEC_ELT (expanded_types, i);
7897
7898                 if (DECL_NAME (r))
7899                   /* Rename the parameter to include the index.  */
7900                   DECL_NAME (r) =
7901                     make_ith_pack_parameter_name (DECL_NAME (r), i);
7902               }
7903             else if (!type)
7904               /* We're dealing with a normal parameter.  */
7905               type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7906
7907             type = type_decays_to (type);
7908             TREE_TYPE (r) = type;
7909             cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7910
7911             if (DECL_INITIAL (r))
7912               {
7913                 if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
7914                   DECL_INITIAL (r) = TREE_TYPE (r);
7915                 else
7916                   DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
7917                                              complain, in_decl);
7918               }
7919
7920             DECL_CONTEXT (r) = NULL_TREE;
7921
7922             if (!DECL_TEMPLATE_PARM_P (r))
7923               DECL_ARG_TYPE (r) = type_passed_as (type);
7924
7925             /* Keep track of the first new parameter we
7926                generate. That's what will be returned to the
7927                caller.  */
7928             if (!first_r)
7929               first_r = r;
7930
7931             /* Build a proper chain of parameters when substituting
7932                into a function parameter pack.  */
7933             if (prev_r)
7934               TREE_CHAIN (prev_r) = r;
7935           }
7936
7937         if (TREE_CHAIN (t))
7938           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
7939                                    complain, TREE_CHAIN (t));
7940
7941         /* FIRST_R contains the start of the chain we've built.  */
7942         r = first_r;
7943       }
7944       break;
7945
7946     case FIELD_DECL:
7947       {
7948         tree type;
7949
7950         r = copy_decl (t);
7951         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7952         if (type == error_mark_node)
7953           return error_mark_node;
7954         TREE_TYPE (r) = type;
7955         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
7956
7957         /* DECL_INITIAL gives the number of bits in a bit-field.  */
7958         DECL_INITIAL (r)
7959           = tsubst_expr (DECL_INITIAL (t), args,
7960                          complain, in_decl,
7961                          /*integral_constant_expression_p=*/true);
7962         /* We don't have to set DECL_CONTEXT here; it is set by
7963            finish_member_declaration.  */
7964         TREE_CHAIN (r) = NULL_TREE;
7965         if (VOID_TYPE_P (type))
7966           error ("instantiation of %q+D as type %qT", r, type);
7967       }
7968       break;
7969
7970     case USING_DECL:
7971       /* We reach here only for member using decls.  */
7972       if (DECL_DEPENDENT_P (t))
7973         {
7974           r = do_class_using_decl
7975             (tsubst_copy (USING_DECL_SCOPE (t), args, complain, in_decl),
7976              tsubst_copy (DECL_NAME (t), args, complain, in_decl));
7977           if (!r)
7978             r = error_mark_node;
7979         }
7980       else
7981         {
7982           r = copy_node (t);
7983           TREE_CHAIN (r) = NULL_TREE;
7984         }
7985       break;
7986
7987     case TYPE_DECL:
7988     case VAR_DECL:
7989       {
7990         tree argvec = NULL_TREE;
7991         tree gen_tmpl = NULL_TREE;
7992         tree spec;
7993         tree tmpl = NULL_TREE;
7994         tree ctx;
7995         tree type = NULL_TREE;
7996         bool local_p;
7997
7998         if (TREE_CODE (t) == TYPE_DECL)
7999           {
8000             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8001             if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
8002                 || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
8003               {
8004                 /* If this is the canonical decl, we don't have to
8005                    mess with instantiations, and often we can't (for
8006                    typename, template type parms and such).  Note that
8007                    TYPE_NAME is not correct for the above test if
8008                    we've copied the type for a typedef.  */
8009                 r = TYPE_NAME (type);
8010                 break;
8011               }
8012           }
8013
8014         /* Check to see if we already have the specialization we
8015            need.  */
8016         spec = NULL_TREE;
8017         if (DECL_CLASS_SCOPE_P (t) || DECL_NAMESPACE_SCOPE_P (t))
8018           {
8019             /* T is a static data member or namespace-scope entity.
8020                We have to substitute into namespace-scope variables
8021                (even though such entities are never templates) because
8022                of cases like:
8023                
8024                  template <class T> void f() { extern T t; }
8025
8026                where the entity referenced is not known until
8027                instantiation time.  */
8028             local_p = false;
8029             ctx = DECL_CONTEXT (t);
8030             if (DECL_CLASS_SCOPE_P (t))
8031               {
8032                 ctx = tsubst_aggr_type (ctx, args,
8033                                         complain,
8034                                         in_decl, /*entering_scope=*/1);
8035                 /* If CTX is unchanged, then T is in fact the
8036                    specialization we want.  That situation occurs when
8037                    referencing a static data member within in its own
8038                    class.  We can use pointer equality, rather than
8039                    same_type_p, because DECL_CONTEXT is always
8040                    canonical.  */
8041                 if (ctx == DECL_CONTEXT (t))
8042                   spec = t;
8043               }
8044
8045             if (!spec)
8046               {
8047                 tmpl = DECL_TI_TEMPLATE (t);
8048                 gen_tmpl = most_general_template (tmpl);
8049                 argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
8050                 spec = (retrieve_specialization 
8051                         (gen_tmpl, argvec,
8052                          /*class_specializations_p=*/false));
8053               }
8054           }
8055         else
8056           {
8057             /* A local variable.  */
8058             local_p = true;
8059             /* Subsequent calls to pushdecl will fill this in.  */
8060             ctx = NULL_TREE;
8061             spec = retrieve_local_specialization (t);
8062           }
8063         /* If we already have the specialization we need, there is
8064            nothing more to do.  */ 
8065         if (spec)
8066           {
8067             r = spec;
8068             break;
8069           }
8070
8071         /* Create a new node for the specialization we need.  */
8072         r = copy_decl (t);
8073         if (TREE_CODE (r) == VAR_DECL)
8074           {
8075             /* Even if the original location is out of scope, the
8076                newly substituted one is not.  */
8077             DECL_DEAD_FOR_LOCAL (r) = 0;
8078             DECL_INITIALIZED_P (r) = 0;
8079             DECL_TEMPLATE_INSTANTIATED (r) = 0;
8080             type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8081             if (type == error_mark_node)
8082               return error_mark_node;
8083             if (TREE_CODE (type) == FUNCTION_TYPE)
8084               {
8085                 /* It may seem that this case cannot occur, since:
8086
8087                      typedef void f();
8088                      void g() { f x; }
8089
8090                    declares a function, not a variable.  However:
8091       
8092                      typedef void f();
8093                      template <typename T> void g() { T t; }
8094                      template void g<f>();
8095
8096                    is an attempt to declare a variable with function
8097                    type.  */
8098                 error ("variable %qD has function type",
8099                        /* R is not yet sufficiently initialized, so we
8100                           just use its name.  */
8101                        DECL_NAME (r));
8102                 return error_mark_node;
8103               }
8104             type = complete_type (type);
8105             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
8106               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
8107             type = check_var_type (DECL_NAME (r), type);
8108
8109             if (DECL_HAS_VALUE_EXPR_P (t))
8110               {
8111                 tree ve = DECL_VALUE_EXPR (t);
8112                 ve = tsubst_expr (ve, args, complain, in_decl,
8113                                   /*constant_expression_p=*/false);
8114                 SET_DECL_VALUE_EXPR (r, ve);
8115               }
8116           }
8117         else if (DECL_SELF_REFERENCE_P (t))
8118           SET_DECL_SELF_REFERENCE_P (r);
8119         TREE_TYPE (r) = type;
8120         cp_apply_type_quals_to_decl (cp_type_quals (type), r);
8121         DECL_CONTEXT (r) = ctx;
8122         /* Clear out the mangled name and RTL for the instantiation.  */
8123         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
8124         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8125           SET_DECL_RTL (r, NULL_RTX);
8126         /* The initializer must not be expanded until it is required;
8127            see [temp.inst].  */
8128         DECL_INITIAL (r) = NULL_TREE;
8129         if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_WRTL))
8130           SET_DECL_RTL (r, NULL_RTX);
8131         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
8132         if (TREE_CODE (r) == VAR_DECL)
8133           {
8134             /* Possibly limit visibility based on template args.  */
8135             DECL_VISIBILITY (r) = VISIBILITY_DEFAULT;
8136             if (DECL_VISIBILITY_SPECIFIED (t))
8137               {
8138                 DECL_VISIBILITY_SPECIFIED (r) = 0;
8139                 DECL_ATTRIBUTES (r)
8140                   = remove_attribute ("visibility", DECL_ATTRIBUTES (r));
8141               }
8142             determine_visibility (r);
8143           }
8144
8145         if (!local_p)
8146           {
8147             /* A static data member declaration is always marked
8148                external when it is declared in-class, even if an
8149                initializer is present.  We mimic the non-template
8150                processing here.  */
8151             DECL_EXTERNAL (r) = 1;
8152
8153             register_specialization (r, gen_tmpl, argvec, false);
8154             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
8155             SET_DECL_IMPLICIT_INSTANTIATION (r);
8156           }
8157         else
8158           register_local_specialization (r, t);
8159
8160         TREE_CHAIN (r) = NULL_TREE;
8161         layout_decl (r, 0);
8162       }
8163       break;
8164
8165     default:
8166       gcc_unreachable ();
8167     }
8168
8169   /* Restore the file and line information.  */
8170   input_location = saved_loc;
8171
8172   return r;
8173 }
8174
8175 /* Substitute into the ARG_TYPES of a function type.  */
8176
8177 static tree
8178 tsubst_arg_types (tree arg_types,
8179                   tree args,
8180                   tsubst_flags_t complain,
8181                   tree in_decl)
8182 {
8183   tree remaining_arg_types;
8184   tree type = NULL_TREE;
8185   int i = 1;
8186   tree expanded_args = NULL_TREE;
8187   tree default_arg;
8188
8189   if (!arg_types || arg_types == void_list_node)
8190     return arg_types;
8191
8192   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
8193                                           args, complain, in_decl);
8194   if (remaining_arg_types == error_mark_node)
8195     return error_mark_node;
8196
8197   if (PACK_EXPANSION_P (TREE_VALUE (arg_types)))
8198     {
8199       /* For a pack expansion, perform substitution on the
8200          entire expression. Later on, we'll handle the arguments
8201          one-by-one.  */
8202       expanded_args = tsubst_pack_expansion (TREE_VALUE (arg_types),
8203                                             args, complain, in_decl);
8204
8205       if (TREE_CODE (expanded_args) == TREE_VEC)
8206         /* So that we'll spin through the parameters, one by one.  */
8207         i = TREE_VEC_LENGTH (expanded_args);
8208       else
8209         {
8210           /* We only partially substituted into the parameter
8211              pack. Our type is TYPE_PACK_EXPANSION.  */
8212           type = expanded_args;
8213           expanded_args = NULL_TREE;
8214         }
8215     }
8216
8217   while (i > 0) {
8218     --i;
8219     
8220     if (expanded_args)
8221       type = TREE_VEC_ELT (expanded_args, i);
8222     else if (!type)
8223       type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
8224
8225     if (type == error_mark_node)
8226       return error_mark_node;
8227     if (VOID_TYPE_P (type))
8228       {
8229         if (complain & tf_error)
8230           {
8231             error ("invalid parameter type %qT", type);
8232             if (in_decl)
8233               error ("in declaration %q+D", in_decl);
8234           }
8235         return error_mark_node;
8236     }
8237     
8238     /* Do array-to-pointer, function-to-pointer conversion, and ignore
8239        top-level qualifiers as required.  */
8240     type = TYPE_MAIN_VARIANT (type_decays_to (type));
8241
8242     /* We do not substitute into default arguments here.  The standard
8243        mandates that they be instantiated only when needed, which is
8244        done in build_over_call.  */
8245     default_arg = TREE_PURPOSE (arg_types);
8246
8247     if (default_arg && TREE_CODE (default_arg) == DEFAULT_ARG)
8248       {
8249         /* We've instantiated a template before its default arguments
8250            have been parsed.  This can happen for a nested template
8251            class, and is not an error unless we require the default
8252            argument in a call of this function.  */
8253         remaining_arg_types = 
8254           tree_cons (default_arg, type, remaining_arg_types);
8255         VEC_safe_push (tree, gc, DEFARG_INSTANTIATIONS (default_arg), 
8256                        remaining_arg_types);
8257       }
8258     else
8259       remaining_arg_types = 
8260         hash_tree_cons (default_arg, type, remaining_arg_types);
8261   }
8262         
8263   return remaining_arg_types;
8264 }
8265
8266 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
8267    *not* handle the exception-specification for FNTYPE, because the
8268    initial substitution of explicitly provided template parameters
8269    during argument deduction forbids substitution into the
8270    exception-specification:
8271
8272      [temp.deduct]
8273
8274      All references in the function type of the function template to  the
8275      corresponding template parameters are replaced by the specified tem-
8276      plate argument values.  If a substitution in a template parameter or
8277      in  the function type of the function template results in an invalid
8278      type, type deduction fails.  [Note: The equivalent  substitution  in
8279      exception specifications is done only when the function is instanti-
8280      ated, at which point a program is  ill-formed  if  the  substitution
8281      results in an invalid type.]  */
8282
8283 static tree
8284 tsubst_function_type (tree t,
8285                       tree args,
8286                       tsubst_flags_t complain,
8287                       tree in_decl)
8288 {
8289   tree return_type;
8290   tree arg_types;
8291   tree fntype;
8292
8293   /* The TYPE_CONTEXT is not used for function/method types.  */
8294   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
8295
8296   /* Substitute the return type.  */
8297   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8298   if (return_type == error_mark_node)
8299     return error_mark_node;
8300   /* The standard does not presently indicate that creation of a
8301      function type with an invalid return type is a deduction failure.
8302      However, that is clearly analogous to creating an array of "void"
8303      or a reference to a reference.  This is core issue #486.  */
8304   if (TREE_CODE (return_type) == ARRAY_TYPE
8305       || TREE_CODE (return_type) == FUNCTION_TYPE)
8306     {
8307       if (complain & tf_error)
8308         {
8309           if (TREE_CODE (return_type) == ARRAY_TYPE)
8310             error ("function returning an array");
8311           else
8312             error ("function returning a function");
8313         }
8314       return error_mark_node;
8315     }
8316
8317   /* Substitute the argument types.  */
8318   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
8319                                 complain, in_decl);
8320   if (arg_types == error_mark_node)
8321     return error_mark_node;
8322
8323   if (TYPE_QUALS (return_type) != TYPE_UNQUALIFIED
8324       && in_decl != NULL_TREE
8325       && !TREE_NO_WARNING (in_decl)
8326       && (SCALAR_TYPE_P (return_type) || VOID_TYPE_P (return_type)))
8327     warning (OPT_Wreturn_type,
8328             "type qualifiers ignored on function return type");
8329
8330   /* Construct a new type node and return it.  */
8331   if (TREE_CODE (t) == FUNCTION_TYPE)
8332     fntype = build_function_type (return_type, arg_types);
8333   else
8334     {
8335       tree r = TREE_TYPE (TREE_VALUE (arg_types));
8336       if (! IS_AGGR_TYPE (r))
8337         {
8338           /* [temp.deduct]
8339
8340              Type deduction may fail for any of the following
8341              reasons:
8342
8343              -- Attempting to create "pointer to member of T" when T
8344              is not a class type.  */
8345           if (complain & tf_error)
8346             error ("creating pointer to member function of non-class type %qT",
8347                       r);
8348           return error_mark_node;
8349         }
8350
8351       fntype = build_method_type_directly (r, return_type,
8352                                            TREE_CHAIN (arg_types));
8353     }
8354   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
8355   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
8356
8357   return fntype;
8358 }
8359
8360 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
8361    ARGS into that specification, and return the substituted
8362    specification.  If there is no specification, return NULL_TREE.  */
8363
8364 static tree
8365 tsubst_exception_specification (tree fntype,
8366                                 tree args,
8367                                 tsubst_flags_t complain,
8368                                 tree in_decl)
8369 {
8370   tree specs;
8371   tree new_specs;
8372
8373   specs = TYPE_RAISES_EXCEPTIONS (fntype);
8374   new_specs = NULL_TREE;
8375   if (specs)
8376     {
8377       if (! TREE_VALUE (specs))
8378         new_specs = specs;
8379       else
8380         while (specs)
8381           {
8382             tree spec;
8383             int i, len = 1;
8384             tree expanded_specs = NULL_TREE;
8385
8386             if (PACK_EXPANSION_P (TREE_VALUE (specs)))
8387               {
8388                 /* Expand the pack expansion type.  */
8389                 expanded_specs = tsubst_pack_expansion (TREE_VALUE (specs),
8390                                                        args, complain,
8391                                                        in_decl);
8392                 len = TREE_VEC_LENGTH (expanded_specs);
8393               }
8394
8395             for (i = 0; i < len; ++i)
8396               {
8397                 if (expanded_specs)
8398                   spec = TREE_VEC_ELT (expanded_specs, i);
8399                 else
8400                   spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
8401                 if (spec == error_mark_node)
8402                   return spec;
8403                 new_specs = add_exception_specifier (new_specs, spec, 
8404                                                      complain);
8405               }
8406
8407             specs = TREE_CHAIN (specs);
8408           }
8409     }
8410   return new_specs;
8411 }
8412
8413 /* Take the tree structure T and replace template parameters used
8414    therein with the argument vector ARGS.  IN_DECL is an associated
8415    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
8416    Issue error and warning messages under control of COMPLAIN.  Note
8417    that we must be relatively non-tolerant of extensions here, in
8418    order to preserve conformance; if we allow substitutions that
8419    should not be allowed, we may allow argument deductions that should
8420    not succeed, and therefore report ambiguous overload situations
8421    where there are none.  In theory, we could allow the substitution,
8422    but indicate that it should have failed, and allow our caller to
8423    make sure that the right thing happens, but we don't try to do this
8424    yet.
8425
8426    This function is used for dealing with types, decls and the like;
8427    for expressions, use tsubst_expr or tsubst_copy.  */
8428
8429 static tree
8430 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
8431 {
8432   tree type, r;
8433
8434   if (t == NULL_TREE || t == error_mark_node
8435       || t == integer_type_node
8436       || t == void_type_node
8437       || t == char_type_node
8438       || t == unknown_type_node
8439       || TREE_CODE (t) == NAMESPACE_DECL)
8440     return t;
8441
8442   if (DECL_P (t))
8443     return tsubst_decl (t, args, complain);
8444
8445   if (TREE_CODE (t) == IDENTIFIER_NODE)
8446     type = IDENTIFIER_TYPE_VALUE (t);
8447   else
8448     type = TREE_TYPE (t);
8449
8450   gcc_assert (type != unknown_type_node);
8451
8452   if (type
8453       && TREE_CODE (t) != TYPENAME_TYPE
8454       && TREE_CODE (t) != IDENTIFIER_NODE
8455       && TREE_CODE (t) != FUNCTION_TYPE
8456       && TREE_CODE (t) != METHOD_TYPE)
8457     type = tsubst (type, args, complain, in_decl);
8458   if (type == error_mark_node)
8459     return error_mark_node;
8460
8461   switch (TREE_CODE (t))
8462     {
8463     case RECORD_TYPE:
8464     case UNION_TYPE:
8465     case ENUMERAL_TYPE:
8466       return tsubst_aggr_type (t, args, complain, in_decl,
8467                                /*entering_scope=*/0);
8468
8469     case ERROR_MARK:
8470     case IDENTIFIER_NODE:
8471     case VOID_TYPE:
8472     case REAL_TYPE:
8473     case COMPLEX_TYPE:
8474     case VECTOR_TYPE:
8475     case BOOLEAN_TYPE:
8476     case INTEGER_CST:
8477     case REAL_CST:
8478     case STRING_CST:
8479       return t;
8480
8481     case INTEGER_TYPE:
8482       if (t == integer_type_node)
8483         return t;
8484
8485       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
8486           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
8487         return t;
8488
8489       {
8490         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
8491
8492         max = tsubst_expr (omax, args, complain, in_decl,
8493                            /*integral_constant_expression_p=*/false);
8494         max = fold_decl_constant_value (max);
8495
8496         if (TREE_CODE (max) != INTEGER_CST 
8497             && TREE_CODE (max) != TEMPLATE_PARM_INDEX
8498             && !at_function_scope_p ())
8499           {
8500             if (complain & tf_error)
8501               error ("array bound is not an integer constant");
8502             return error_mark_node;
8503           }
8504
8505         /* [temp.deduct]
8506
8507            Type deduction may fail for any of the following
8508            reasons:
8509
8510              Attempting to create an array with a size that is
8511              zero or negative.  */
8512         if (integer_zerop (max) && !(complain & tf_error))
8513           /* We must fail if performing argument deduction (as
8514              indicated by the state of complain), so that
8515              another substitution can be found.  */
8516           return error_mark_node;
8517         else if (TREE_CODE (max) == INTEGER_CST
8518                  && INT_CST_LT (max, integer_zero_node))
8519           {
8520             if (complain & tf_error)
8521               error ("creating array with negative size (%qE)", max);
8522
8523             return error_mark_node;
8524           }
8525
8526         return compute_array_index_type (NULL_TREE, max);
8527       }
8528
8529     case TEMPLATE_TYPE_PARM:
8530     case TEMPLATE_TEMPLATE_PARM:
8531     case BOUND_TEMPLATE_TEMPLATE_PARM:
8532     case TEMPLATE_PARM_INDEX:
8533       {
8534         int idx;
8535         int level;
8536         int levels;
8537         tree arg = NULL_TREE;
8538
8539         r = NULL_TREE;
8540
8541         gcc_assert (TREE_VEC_LENGTH (args) > 0);
8542         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8543             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
8544             || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8545           {
8546             idx = TEMPLATE_TYPE_IDX (t);
8547             level = TEMPLATE_TYPE_LEVEL (t);
8548           }
8549         else
8550           {
8551             idx = TEMPLATE_PARM_IDX (t);
8552             level = TEMPLATE_PARM_LEVEL (t);
8553           }
8554
8555         levels = TMPL_ARGS_DEPTH (args);
8556         if (level <= levels)
8557           {
8558             arg = TMPL_ARG (args, level, idx);
8559
8560             if (arg && TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
8561               /* See through ARGUMENT_PACK_SELECT arguments. */
8562               arg = ARGUMENT_PACK_SELECT_ARG (arg);
8563           }
8564
8565         if (arg == error_mark_node)
8566           return error_mark_node;
8567         else if (arg != NULL_TREE)
8568           {
8569             if (ARGUMENT_PACK_P (arg))
8570               /* If ARG is an argument pack, we don't actually want to
8571                  perform a substitution here, because substitutions
8572                  for argument packs are only done
8573                  element-by-element. We can get to this point when
8574                  substituting the type of a non-type template
8575                  parameter pack, when that type actually contains
8576                  template parameter packs from an outer template, e.g.,
8577
8578                  template<typename... Types> struct A {
8579                    template<Types... Values> struct B { };
8580                  };  */
8581               return t;
8582
8583             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
8584               {
8585                 int quals;
8586                 gcc_assert (TYPE_P (arg));
8587
8588                 /* cv-quals from the template are discarded when
8589                    substituting in a function or reference type.  */
8590                 if (TREE_CODE (arg) == FUNCTION_TYPE
8591                     || TREE_CODE (arg) == METHOD_TYPE
8592                     || TREE_CODE (arg) == REFERENCE_TYPE)
8593                   quals = cp_type_quals (arg);
8594                 else
8595                   quals = cp_type_quals (arg) | cp_type_quals (t);
8596                   
8597                 return cp_build_qualified_type_real
8598                   (arg, quals, complain | tf_ignore_bad_quals);
8599               }
8600             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8601               {
8602                 /* We are processing a type constructed from a
8603                    template template parameter.  */
8604                 tree argvec = tsubst (TYPE_TI_ARGS (t),
8605                                       args, complain, in_decl);
8606                 if (argvec == error_mark_node)
8607                   return error_mark_node;
8608
8609                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
8610                    are resolving nested-types in the signature of a
8611                    member function templates.  Otherwise ARG is a
8612                    TEMPLATE_DECL and is the real template to be
8613                    instantiated.  */
8614                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
8615                   arg = TYPE_NAME (arg);
8616
8617                 r = lookup_template_class (arg,
8618                                            argvec, in_decl,
8619                                            DECL_CONTEXT (arg),
8620                                             /*entering_scope=*/0,
8621                                            complain);
8622                 return cp_build_qualified_type_real
8623                   (r, TYPE_QUALS (t), complain);
8624               }
8625             else
8626               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
8627               return arg;
8628           }
8629
8630         if (level == 1)
8631           /* This can happen during the attempted tsubst'ing in
8632              unify.  This means that we don't yet have any information
8633              about the template parameter in question.  */
8634           return t;
8635
8636         /* If we get here, we must have been looking at a parm for a
8637            more deeply nested template.  Make a new version of this
8638            template parameter, but with a lower level.  */
8639         switch (TREE_CODE (t))
8640           {
8641           case TEMPLATE_TYPE_PARM:
8642           case TEMPLATE_TEMPLATE_PARM:
8643           case BOUND_TEMPLATE_TEMPLATE_PARM:
8644             if (cp_type_quals (t))
8645               {
8646                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
8647                 r = cp_build_qualified_type_real
8648                   (r, cp_type_quals (t),
8649                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
8650                                ? tf_ignore_bad_quals : 0));
8651               }
8652             else
8653               {
8654                 r = copy_type (t);
8655                 TEMPLATE_TYPE_PARM_INDEX (r)
8656                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
8657                                                 r, levels);
8658                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
8659                 TYPE_MAIN_VARIANT (r) = r;
8660                 TYPE_POINTER_TO (r) = NULL_TREE;
8661                 TYPE_REFERENCE_TO (r) = NULL_TREE;
8662
8663                 if (TREE_CODE (r) == TEMPLATE_TEMPLATE_PARM)
8664                   /* We have reduced the level of the template
8665                      template parameter, but not the levels of its
8666                      template parameters, so canonical_type_parameter
8667                      will not be able to find the canonical template
8668                      template parameter for this level. Thus, we
8669                      require structural equality checking to compare
8670                      TEMPLATE_TEMPLATE_PARMs. */
8671                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8672                 else if (TYPE_STRUCTURAL_EQUALITY_P (t))
8673                   SET_TYPE_STRUCTURAL_EQUALITY (r);
8674                 else
8675                   TYPE_CANONICAL (r) = canonical_type_parameter (r);
8676
8677                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
8678                   {
8679                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
8680                                           complain, in_decl);
8681                     if (argvec == error_mark_node)
8682                       return error_mark_node;
8683
8684                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
8685                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
8686                   }
8687               }
8688             break;
8689
8690           case TEMPLATE_PARM_INDEX:
8691             r = reduce_template_parm_level (t, type, levels);
8692             break;
8693
8694           default:
8695             gcc_unreachable ();
8696           }
8697
8698         return r;
8699       }
8700
8701     case TREE_LIST:
8702       {
8703         tree purpose, value, chain;
8704
8705         if (t == void_list_node)
8706           return t;
8707
8708         purpose = TREE_PURPOSE (t);
8709         if (purpose)
8710           {
8711             purpose = tsubst (purpose, args, complain, in_decl);
8712             if (purpose == error_mark_node)
8713               return error_mark_node;
8714           }
8715         value = TREE_VALUE (t);
8716         if (value)
8717           {
8718             value = tsubst (value, args, complain, in_decl);
8719             if (value == error_mark_node)
8720               return error_mark_node;
8721           }
8722         chain = TREE_CHAIN (t);
8723         if (chain && chain != void_type_node)
8724           {
8725             chain = tsubst (chain, args, complain, in_decl);
8726             if (chain == error_mark_node)
8727               return error_mark_node;
8728           }
8729         if (purpose == TREE_PURPOSE (t)
8730             && value == TREE_VALUE (t)
8731             && chain == TREE_CHAIN (t))
8732           return t;
8733         return hash_tree_cons (purpose, value, chain);
8734       }
8735
8736     case TREE_BINFO:
8737       /* We should never be tsubsting a binfo.  */
8738       gcc_unreachable ();
8739
8740     case TREE_VEC:
8741       /* A vector of template arguments.  */
8742       gcc_assert (!type);
8743       return tsubst_template_args (t, args, complain, in_decl);
8744
8745     case POINTER_TYPE:
8746     case REFERENCE_TYPE:
8747       {
8748         enum tree_code code;
8749
8750         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
8751           return t;
8752
8753         code = TREE_CODE (t);
8754
8755
8756         /* [temp.deduct]
8757
8758            Type deduction may fail for any of the following
8759            reasons:
8760
8761            -- Attempting to create a pointer to reference type.
8762            -- Attempting to create a reference to a reference type or
8763               a reference to void.
8764
8765           Core issue 106 says that creating a reference to a reference
8766           during instantiation is no longer a cause for failure. We
8767           only enforce this check in strict C++98 mode.  */
8768         if ((TREE_CODE (type) == REFERENCE_TYPE
8769              && (((cxx_dialect == cxx98) && flag_iso) || code != REFERENCE_TYPE))
8770             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
8771           {
8772             static location_t last_loc;
8773
8774             /* We keep track of the last time we issued this error
8775                message to avoid spewing a ton of messages during a
8776                single bad template instantiation.  */
8777             if (complain & tf_error
8778 #ifdef USE_MAPPED_LOCATION
8779                 && last_loc != input_location
8780 #else
8781                 && (last_loc.line != input_line
8782                     || last_loc.file != input_filename)
8783 #endif
8784                   )
8785               {
8786                 if (TREE_CODE (type) == VOID_TYPE)
8787                   error ("forming reference to void");
8788                 else
8789                   error ("forming %s to reference type %qT",
8790                          (code == POINTER_TYPE) ? "pointer" : "reference",
8791                          type);
8792                 last_loc = input_location;
8793               }
8794
8795             return error_mark_node;
8796           }
8797         else if (code == POINTER_TYPE)
8798           {
8799             r = build_pointer_type (type);
8800             if (TREE_CODE (type) == METHOD_TYPE)
8801               r = build_ptrmemfunc_type (r);
8802           }
8803         else if (TREE_CODE (type) == REFERENCE_TYPE)
8804           /* In C++0x, during template argument substitution, when there is an
8805              attempt to create a reference to a reference type, reference
8806              collapsing is applied as described in [14.3.1/4 temp.arg.type]:
8807
8808              "If a template-argument for a template-parameter T names a type
8809              that is a reference to a type A, an attempt to create the type
8810              'lvalue reference to cv T' creates the type 'lvalue reference to
8811              A,' while an attempt to create the type type rvalue reference to
8812              cv T' creates the type T"
8813           */
8814           r = cp_build_reference_type
8815               (TREE_TYPE (type),
8816                TYPE_REF_IS_RVALUE (t) && TYPE_REF_IS_RVALUE (type));
8817         else
8818           r = cp_build_reference_type (type, TYPE_REF_IS_RVALUE (t));
8819         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
8820
8821         if (r != error_mark_node)
8822           /* Will this ever be needed for TYPE_..._TO values?  */
8823           layout_type (r);
8824
8825         return r;
8826       }
8827     case OFFSET_TYPE:
8828       {
8829         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
8830         if (r == error_mark_node || !IS_AGGR_TYPE (r))
8831           {
8832             /* [temp.deduct]
8833
8834                Type deduction may fail for any of the following
8835                reasons:
8836
8837                -- Attempting to create "pointer to member of T" when T
8838                   is not a class type.  */
8839             if (complain & tf_error)
8840               error ("creating pointer to member of non-class type %qT", r);
8841             return error_mark_node;
8842           }
8843         if (TREE_CODE (type) == REFERENCE_TYPE)
8844           {
8845             if (complain & tf_error)
8846               error ("creating pointer to member reference type %qT", type);
8847             return error_mark_node;
8848           }
8849         if (TREE_CODE (type) == VOID_TYPE)
8850           {
8851             if (complain & tf_error)
8852               error ("creating pointer to member of type void");
8853             return error_mark_node;
8854           }
8855         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
8856         if (TREE_CODE (type) == FUNCTION_TYPE)
8857           {
8858             /* The type of the implicit object parameter gets its
8859                cv-qualifiers from the FUNCTION_TYPE. */
8860             tree method_type;
8861             tree this_type = cp_build_qualified_type (TYPE_MAIN_VARIANT (r),
8862                                                       cp_type_quals (type));
8863             tree memptr;
8864             method_type = build_method_type_directly (this_type,
8865                                                       TREE_TYPE (type),
8866                                                       TYPE_ARG_TYPES (type));
8867             memptr = build_ptrmemfunc_type (build_pointer_type (method_type));
8868             return cp_build_qualified_type_real (memptr, cp_type_quals (t),
8869                                                  complain);
8870           }
8871         else
8872           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
8873                                                TYPE_QUALS (t),
8874                                                complain);
8875       }
8876     case FUNCTION_TYPE:
8877     case METHOD_TYPE:
8878       {
8879         tree fntype;
8880         tree specs;
8881         fntype = tsubst_function_type (t, args, complain, in_decl);
8882         if (fntype == error_mark_node)
8883           return error_mark_node;
8884
8885         /* Substitute the exception specification.  */
8886         specs = tsubst_exception_specification (t, args, complain,
8887                                                 in_decl);
8888         if (specs == error_mark_node)
8889           return error_mark_node;
8890         if (specs)
8891           fntype = build_exception_variant (fntype, specs);
8892         return fntype;
8893       }
8894     case ARRAY_TYPE:
8895       {
8896         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
8897         if (domain == error_mark_node)
8898           return error_mark_node;
8899
8900         /* As an optimization, we avoid regenerating the array type if
8901            it will obviously be the same as T.  */
8902         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
8903           return t;
8904
8905         /* These checks should match the ones in grokdeclarator.
8906
8907            [temp.deduct]
8908
8909            The deduction may fail for any of the following reasons:
8910
8911            -- Attempting to create an array with an element type that
8912               is void, a function type, or a reference type, or [DR337]
8913               an abstract class type.  */
8914         if (TREE_CODE (type) == VOID_TYPE
8915             || TREE_CODE (type) == FUNCTION_TYPE
8916             || TREE_CODE (type) == REFERENCE_TYPE)
8917           {
8918             if (complain & tf_error)
8919               error ("creating array of %qT", type);
8920             return error_mark_node;
8921           }
8922         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
8923           {
8924             if (complain & tf_error)
8925               error ("creating array of %qT, which is an abstract class type",
8926                      type);
8927             return error_mark_node;
8928           }
8929
8930         r = build_cplus_array_type (type, domain);
8931         return r;
8932       }
8933
8934     case PLUS_EXPR:
8935     case MINUS_EXPR:
8936       {
8937         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8938         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
8939
8940         if (e1 == error_mark_node || e2 == error_mark_node)
8941           return error_mark_node;
8942
8943         return fold_build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2);
8944       }
8945
8946     case NEGATE_EXPR:
8947     case NOP_EXPR:
8948       {
8949         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
8950         if (e == error_mark_node)
8951           return error_mark_node;
8952
8953         return fold_build1 (TREE_CODE (t), TREE_TYPE (t), e);
8954       }
8955
8956     case TYPENAME_TYPE:
8957       {
8958         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
8959                                      in_decl, /*entering_scope=*/1);
8960         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
8961                               complain, in_decl);
8962
8963         if (ctx == error_mark_node || f == error_mark_node)
8964           return error_mark_node;
8965
8966         if (!IS_AGGR_TYPE (ctx))
8967           {
8968             if (complain & tf_error)
8969               error ("%qT is not a class, struct, or union type", ctx);
8970             return error_mark_node;
8971           }
8972         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
8973           {
8974             /* Normally, make_typename_type does not require that the CTX
8975                have complete type in order to allow things like:
8976
8977                  template <class T> struct S { typename S<T>::X Y; };
8978
8979                But, such constructs have already been resolved by this
8980                point, so here CTX really should have complete type, unless
8981                it's a partial instantiation.  */
8982             ctx = complete_type (ctx);
8983             if (!COMPLETE_TYPE_P (ctx))
8984               {
8985                 if (complain & tf_error)
8986                   cxx_incomplete_type_error (NULL_TREE, ctx);
8987                 return error_mark_node;
8988               }
8989           }
8990
8991         f = make_typename_type (ctx, f, typename_type,
8992                                 (complain & tf_error) | tf_keep_type_decl);
8993         if (f == error_mark_node)
8994           return f;
8995         if (TREE_CODE (f) == TYPE_DECL)
8996           {
8997             complain |= tf_ignore_bad_quals;
8998             f = TREE_TYPE (f);
8999           }
9000
9001         if (TREE_CODE (f) != TYPENAME_TYPE)
9002           {
9003             if (TYPENAME_IS_ENUM_P (t) && TREE_CODE (f) != ENUMERAL_TYPE)
9004               error ("%qT resolves to %qT, which is not an enumeration type",
9005                      t, f);
9006             else if (TYPENAME_IS_CLASS_P (t) && !CLASS_TYPE_P (f))
9007               error ("%qT resolves to %qT, which is is not a class type",
9008                      t, f);
9009           }
9010
9011         return cp_build_qualified_type_real
9012           (f, cp_type_quals (f) | cp_type_quals (t), complain);
9013       }
9014
9015     case UNBOUND_CLASS_TEMPLATE:
9016       {
9017         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
9018                                      in_decl, /*entering_scope=*/1);
9019         tree name = TYPE_IDENTIFIER (t);
9020         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
9021
9022         if (ctx == error_mark_node || name == error_mark_node)
9023           return error_mark_node;
9024
9025         if (parm_list)
9026           parm_list = tsubst_template_parms (parm_list, args, complain);
9027         return make_unbound_class_template (ctx, name, parm_list, complain);
9028       }
9029
9030     case INDIRECT_REF:
9031     case ADDR_EXPR:
9032     case CALL_EXPR:
9033       gcc_unreachable ();
9034
9035     case ARRAY_REF:
9036       {
9037         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9038         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl,
9039                                /*integral_constant_expression_p=*/false);
9040         if (e1 == error_mark_node || e2 == error_mark_node)
9041           return error_mark_node;
9042
9043         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
9044       }
9045
9046     case SCOPE_REF:
9047       {
9048         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
9049         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
9050         if (e1 == error_mark_node || e2 == error_mark_node)
9051           return error_mark_node;
9052
9053         return build_qualified_name (/*type=*/NULL_TREE,
9054                                      e1, e2, QUALIFIED_NAME_IS_TEMPLATE (t));
9055       }
9056
9057     case TYPEOF_TYPE:
9058       {
9059         tree type;
9060
9061         type = finish_typeof (tsubst_expr 
9062                               (TYPEOF_TYPE_EXPR (t), args,
9063                                complain, in_decl,
9064                                /*integral_constant_expression_p=*/false));
9065         return cp_build_qualified_type_real (type,
9066                                              cp_type_quals (t)
9067                                              | cp_type_quals (type),
9068                                              complain);
9069       }
9070
9071     case DECLTYPE_TYPE:
9072       {
9073         tree type;
9074
9075         type = 
9076           finish_decltype_type (tsubst_expr 
9077                                 (DECLTYPE_TYPE_EXPR (t), args,
9078                                  complain, in_decl,
9079                                  /*integral_constant_expression_p=*/false),
9080                                 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
9081         return cp_build_qualified_type_real (type,
9082                                              cp_type_quals (t)
9083                                              | cp_type_quals (type),
9084                                              complain);
9085       }
9086
9087     case TYPE_ARGUMENT_PACK:
9088     case NONTYPE_ARGUMENT_PACK:
9089       {
9090         tree r = make_node (TREE_CODE (t));
9091         tree packed_out = 
9092           tsubst_template_args (ARGUMENT_PACK_ARGS (t), 
9093                                 args,
9094                                 complain,
9095                                 in_decl);
9096         SET_ARGUMENT_PACK_ARGS (r, packed_out);
9097
9098         /* For template nontype argument packs, also substitute into
9099            the type.  */
9100         if (TREE_CODE (t) == NONTYPE_ARGUMENT_PACK)
9101           TREE_TYPE (r) = tsubst (TREE_TYPE (t), args, complain, in_decl);
9102
9103         return r;
9104       }
9105       break;
9106
9107     default:
9108       sorry ("use of %qs in template",
9109              tree_code_name [(int) TREE_CODE (t)]);
9110       return error_mark_node;
9111     }
9112 }
9113
9114 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
9115    type of the expression on the left-hand side of the "." or "->"
9116    operator.  */
9117
9118 static tree
9119 tsubst_baselink (tree baselink, tree object_type,
9120                  tree args, tsubst_flags_t complain, tree in_decl)
9121 {
9122     tree name;
9123     tree qualifying_scope;
9124     tree fns;
9125     tree optype;
9126     tree template_args = 0;
9127     bool template_id_p = false;
9128
9129     /* A baselink indicates a function from a base class.  Both the
9130        BASELINK_ACCESS_BINFO and the base class referenced may
9131        indicate bases of the template class, rather than the
9132        instantiated class.  In addition, lookups that were not
9133        ambiguous before may be ambiguous now.  Therefore, we perform
9134        the lookup again.  */
9135     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
9136     qualifying_scope = tsubst (qualifying_scope, args,
9137                                complain, in_decl);
9138     fns = BASELINK_FUNCTIONS (baselink);
9139     optype = BASELINK_OPTYPE (baselink);
9140     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
9141       {
9142         template_id_p = true;
9143         template_args = TREE_OPERAND (fns, 1);
9144         fns = TREE_OPERAND (fns, 0);
9145         if (template_args)
9146           template_args = tsubst_template_args (template_args, args,
9147                                                 complain, in_decl);
9148       }
9149     name = DECL_NAME (get_first_fn (fns));
9150     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
9151
9152     /* If lookup found a single function, mark it as used at this
9153        point.  (If it lookup found multiple functions the one selected
9154        later by overload resolution will be marked as used at that
9155        point.)  */
9156     if (BASELINK_P (baselink))
9157       fns = BASELINK_FUNCTIONS (baselink);
9158     if (!template_id_p && !really_overloaded_fn (fns))
9159       mark_used (OVL_CURRENT (fns));
9160
9161     /* Add back the template arguments, if present.  */
9162     if (BASELINK_P (baselink) && template_id_p)
9163       BASELINK_FUNCTIONS (baselink)
9164         = build_nt (TEMPLATE_ID_EXPR,
9165                     BASELINK_FUNCTIONS (baselink),
9166                     template_args);
9167     /* Update the conversion operator type.  */
9168     BASELINK_OPTYPE (baselink) 
9169       = tsubst (optype, args, complain, in_decl);
9170
9171     if (!object_type)
9172       object_type = current_class_type;
9173     return adjust_result_of_qualified_name_lookup (baselink,
9174                                                    qualifying_scope,
9175                                                    object_type);
9176 }
9177
9178 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
9179    true if the qualified-id will be a postfix-expression in-and-of
9180    itself; false if more of the postfix-expression follows the
9181    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
9182    of "&".  */
9183
9184 static tree
9185 tsubst_qualified_id (tree qualified_id, tree args,
9186                      tsubst_flags_t complain, tree in_decl,
9187                      bool done, bool address_p)
9188 {
9189   tree expr;
9190   tree scope;
9191   tree name;
9192   bool is_template;
9193   tree template_args;
9194
9195   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
9196
9197   /* Figure out what name to look up.  */
9198   name = TREE_OPERAND (qualified_id, 1);
9199   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
9200     {
9201       is_template = true;
9202       template_args = TREE_OPERAND (name, 1);
9203       if (template_args)
9204         template_args = tsubst_template_args (template_args, args,
9205                                               complain, in_decl);
9206       name = TREE_OPERAND (name, 0);
9207     }
9208   else
9209     {
9210       is_template = false;
9211       template_args = NULL_TREE;
9212     }
9213
9214   /* Substitute into the qualifying scope.  When there are no ARGS, we
9215      are just trying to simplify a non-dependent expression.  In that
9216      case the qualifying scope may be dependent, and, in any case,
9217      substituting will not help.  */
9218   scope = TREE_OPERAND (qualified_id, 0);
9219   if (args)
9220     {
9221       scope = tsubst (scope, args, complain, in_decl);
9222       expr = tsubst_copy (name, args, complain, in_decl);
9223     }
9224   else
9225     expr = name;
9226
9227   if (dependent_type_p (scope))
9228     return build_qualified_name (/*type=*/NULL_TREE,
9229                                  scope, expr,
9230                                  QUALIFIED_NAME_IS_TEMPLATE (qualified_id));
9231
9232   if (!BASELINK_P (name) && !DECL_P (expr))
9233     {
9234       if (TREE_CODE (expr) == BIT_NOT_EXPR)
9235         /* If this were actually a destructor call, it would have been
9236            parsed as such by the parser.  */
9237         expr = error_mark_node;
9238       else
9239         expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
9240       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
9241                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
9242         {
9243           if (complain & tf_error)
9244             {
9245               error ("dependent-name %qE is parsed as a non-type, but "
9246                      "instantiation yields a type", qualified_id);
9247               inform ("say %<typename %E%> if a type is meant", qualified_id);
9248             }
9249           return error_mark_node;
9250         }
9251     }
9252
9253   if (DECL_P (expr))
9254     {
9255       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
9256                                            scope);
9257       /* Remember that there was a reference to this entity.  */
9258       mark_used (expr);
9259     }
9260
9261   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
9262     {
9263       if (complain & tf_error)
9264         qualified_name_lookup_error (scope,
9265                                      TREE_OPERAND (qualified_id, 1),
9266                                      expr);
9267       return error_mark_node;
9268     }
9269
9270   if (is_template)
9271     expr = lookup_template_function (expr, template_args);
9272
9273   if (expr == error_mark_node && complain & tf_error)
9274     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
9275                                  expr);
9276   else if (TYPE_P (scope))
9277     {
9278       expr = (adjust_result_of_qualified_name_lookup
9279               (expr, scope, current_class_type));
9280       expr = (finish_qualified_id_expr
9281               (scope, expr, done, address_p,
9282                QUALIFIED_NAME_IS_TEMPLATE (qualified_id),
9283                /*template_arg_p=*/false));
9284     }
9285
9286   /* Expressions do not generally have reference type.  */
9287   if (TREE_CODE (expr) != SCOPE_REF
9288       /* However, if we're about to form a pointer-to-member, we just
9289          want the referenced member referenced.  */
9290       && TREE_CODE (expr) != OFFSET_REF)
9291     expr = convert_from_reference (expr);
9292
9293   return expr;
9294 }
9295
9296 /* Like tsubst, but deals with expressions.  This function just replaces
9297    template parms; to finish processing the resultant expression, use
9298    tsubst_expr.  */
9299
9300 static tree
9301 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
9302 {
9303   enum tree_code code;
9304   tree r;
9305
9306   if (t == NULL_TREE || t == error_mark_node)
9307     return t;
9308
9309   code = TREE_CODE (t);
9310
9311   switch (code)
9312     {
9313     case PARM_DECL:
9314       r = retrieve_local_specialization (t);
9315       gcc_assert (r != NULL);
9316       if (TREE_CODE (r) == ARGUMENT_PACK_SELECT)
9317         r = ARGUMENT_PACK_SELECT_ARG (r);
9318       mark_used (r);
9319       return r;
9320
9321     case CONST_DECL:
9322       {
9323         tree enum_type;
9324         tree v;
9325
9326         if (DECL_TEMPLATE_PARM_P (t))
9327           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
9328         /* There is no need to substitute into namespace-scope
9329            enumerators.  */
9330         if (DECL_NAMESPACE_SCOPE_P (t))
9331           return t;
9332         /* If ARGS is NULL, then T is known to be non-dependent.  */
9333         if (args == NULL_TREE)
9334           return integral_constant_value (t);
9335
9336         /* Unfortunately, we cannot just call lookup_name here.
9337            Consider:
9338
9339              template <int I> int f() {
9340              enum E { a = I };
9341              struct S { void g() { E e = a; } };
9342              };
9343
9344            When we instantiate f<7>::S::g(), say, lookup_name is not
9345            clever enough to find f<7>::a.  */
9346         enum_type
9347           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl,
9348                               /*entering_scope=*/0);
9349
9350         for (v = TYPE_VALUES (enum_type);
9351              v != NULL_TREE;
9352              v = TREE_CHAIN (v))
9353           if (TREE_PURPOSE (v) == DECL_NAME (t))
9354             return TREE_VALUE (v);
9355
9356           /* We didn't find the name.  That should never happen; if
9357              name-lookup found it during preliminary parsing, we
9358              should find it again here during instantiation.  */
9359         gcc_unreachable ();
9360       }
9361       return t;
9362
9363     case FIELD_DECL:
9364       if (DECL_CONTEXT (t))
9365         {
9366           tree ctx;
9367
9368           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
9369                                   /*entering_scope=*/1);
9370           if (ctx != DECL_CONTEXT (t))
9371             {
9372               tree r = lookup_field (ctx, DECL_NAME (t), 0, false);
9373               if (!r)
9374                 {
9375                   if (complain & tf_error)
9376                     error ("using invalid field %qD", t);
9377                   return error_mark_node;
9378                 }
9379               return r;
9380             }
9381         }
9382
9383       return t;
9384
9385     case VAR_DECL:
9386     case FUNCTION_DECL:
9387       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
9388           || local_variable_p (t))
9389         t = tsubst (t, args, complain, in_decl);
9390       mark_used (t);
9391       return t;
9392
9393     case BASELINK:
9394       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
9395
9396     case TEMPLATE_DECL:
9397       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
9398         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)),
9399                        args, complain, in_decl);
9400       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
9401         return tsubst (t, args, complain, in_decl);
9402       else if (DECL_CLASS_SCOPE_P (t)
9403                && uses_template_parms (DECL_CONTEXT (t)))
9404         {
9405           /* Template template argument like the following example need
9406              special treatment:
9407
9408                template <template <class> class TT> struct C {};
9409                template <class T> struct D {
9410                  template <class U> struct E {};
9411                  C<E> c;                                // #1
9412                };
9413                D<int> d;                                // #2
9414
9415              We are processing the template argument `E' in #1 for
9416              the template instantiation #2.  Originally, `E' is a
9417              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
9418              have to substitute this with one having context `D<int>'.  */
9419
9420           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
9421           return lookup_field (context, DECL_NAME(t), 0, false);
9422         }
9423       else
9424         /* Ordinary template template argument.  */
9425         return t;
9426
9427     case CAST_EXPR:
9428     case REINTERPRET_CAST_EXPR:
9429     case CONST_CAST_EXPR:
9430     case STATIC_CAST_EXPR:
9431     case DYNAMIC_CAST_EXPR:
9432     case NOP_EXPR:
9433       return build1
9434         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9435          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9436
9437     case SIZEOF_EXPR:
9438       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
9439         {
9440           /* We only want to compute the number of arguments.  */
9441           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
9442                                                 complain, in_decl);
9443           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
9444         }
9445       /* Fall through */
9446
9447     case INDIRECT_REF:
9448     case NEGATE_EXPR:
9449     case TRUTH_NOT_EXPR:
9450     case BIT_NOT_EXPR:
9451     case ADDR_EXPR:
9452     case UNARY_PLUS_EXPR:      /* Unary + */
9453     case ALIGNOF_EXPR:
9454     case ARROW_EXPR:
9455     case THROW_EXPR:
9456     case TYPEID_EXPR:
9457     case REALPART_EXPR:
9458     case IMAGPART_EXPR:
9459       return build1
9460         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
9461          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
9462
9463     case COMPONENT_REF:
9464       {
9465         tree object;
9466         tree name;
9467
9468         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
9469         name = TREE_OPERAND (t, 1);
9470         if (TREE_CODE (name) == BIT_NOT_EXPR)
9471           {
9472             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9473                                 complain, in_decl);
9474             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9475           }
9476         else if (TREE_CODE (name) == SCOPE_REF
9477                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
9478           {
9479             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
9480                                      complain, in_decl);
9481             name = TREE_OPERAND (name, 1);
9482             name = tsubst_copy (TREE_OPERAND (name, 0), args,
9483                                 complain, in_decl);
9484             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
9485             name = build_qualified_name (/*type=*/NULL_TREE,
9486                                          base, name,
9487                                          /*template_p=*/false);
9488           }
9489         else if (TREE_CODE (name) == BASELINK)
9490           name = tsubst_baselink (name,
9491                                   non_reference (TREE_TYPE (object)),
9492                                   args, complain,
9493                                   in_decl);
9494         else
9495           name = tsubst_copy (name, args, complain, in_decl);
9496         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
9497       }
9498
9499     case PLUS_EXPR:
9500     case MINUS_EXPR:
9501     case MULT_EXPR:
9502     case TRUNC_DIV_EXPR:
9503     case CEIL_DIV_EXPR:
9504     case FLOOR_DIV_EXPR:
9505     case ROUND_DIV_EXPR:
9506     case EXACT_DIV_EXPR:
9507     case BIT_AND_EXPR:
9508     case BIT_IOR_EXPR:
9509     case BIT_XOR_EXPR:
9510     case TRUNC_MOD_EXPR:
9511     case FLOOR_MOD_EXPR:
9512     case TRUTH_ANDIF_EXPR:
9513     case TRUTH_ORIF_EXPR:
9514     case TRUTH_AND_EXPR:
9515     case TRUTH_OR_EXPR:
9516     case RSHIFT_EXPR:
9517     case LSHIFT_EXPR:
9518     case RROTATE_EXPR:
9519     case LROTATE_EXPR:
9520     case EQ_EXPR:
9521     case NE_EXPR:
9522     case MAX_EXPR:
9523     case MIN_EXPR:
9524     case LE_EXPR:
9525     case GE_EXPR:
9526     case LT_EXPR:
9527     case GT_EXPR:
9528     case COMPOUND_EXPR:
9529     case DOTSTAR_EXPR:
9530     case MEMBER_REF:
9531     case PREDECREMENT_EXPR:
9532     case PREINCREMENT_EXPR:
9533     case POSTDECREMENT_EXPR:
9534     case POSTINCREMENT_EXPR:
9535       return build_nt
9536         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9537          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9538
9539     case SCOPE_REF:
9540       return build_qualified_name (/*type=*/NULL_TREE,
9541                                    tsubst_copy (TREE_OPERAND (t, 0),
9542                                                 args, complain, in_decl),
9543                                    tsubst_copy (TREE_OPERAND (t, 1),
9544                                                 args, complain, in_decl),
9545                                    QUALIFIED_NAME_IS_TEMPLATE (t));
9546
9547     case ARRAY_REF:
9548       return build_nt
9549         (ARRAY_REF,
9550          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9551          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9552          NULL_TREE, NULL_TREE);
9553
9554     case CALL_EXPR:
9555       {
9556         int n = VL_EXP_OPERAND_LENGTH (t);
9557         tree result = build_vl_exp (CALL_EXPR, n);
9558         int i;
9559         for (i = 0; i < n; i++)
9560           TREE_OPERAND (t, i) = tsubst_copy (TREE_OPERAND (t, i), args,
9561                                              complain, in_decl);
9562         return result;
9563       }
9564
9565     case COND_EXPR:
9566     case MODOP_EXPR:
9567     case PSEUDO_DTOR_EXPR:
9568       {
9569         r = build_nt
9570           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9571            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9572            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9573         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
9574         return r;
9575       }
9576
9577     case NEW_EXPR:
9578       {
9579         r = build_nt
9580         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9581          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
9582          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
9583         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
9584         return r;
9585       }
9586
9587     case DELETE_EXPR:
9588       {
9589         r = build_nt
9590         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
9591          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
9592         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
9593         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
9594         return r;
9595       }
9596
9597     case TEMPLATE_ID_EXPR:
9598       {
9599         /* Substituted template arguments */
9600         tree fn = TREE_OPERAND (t, 0);
9601         tree targs = TREE_OPERAND (t, 1);
9602
9603         fn = tsubst_copy (fn, args, complain, in_decl);
9604         if (targs)
9605           targs = tsubst_template_args (targs, args, complain, in_decl);
9606
9607         return lookup_template_function (fn, targs);
9608       }
9609
9610     case TREE_LIST:
9611       {
9612         tree purpose, value, chain;
9613
9614         if (t == void_list_node)
9615           return t;
9616
9617         purpose = TREE_PURPOSE (t);
9618         if (purpose)
9619           purpose = tsubst_copy (purpose, args, complain, in_decl);
9620         value = TREE_VALUE (t);
9621         if (value)
9622           value = tsubst_copy (value, args, complain, in_decl);
9623         chain = TREE_CHAIN (t);
9624         if (chain && chain != void_type_node)
9625           chain = tsubst_copy (chain, args, complain, in_decl);
9626         if (purpose == TREE_PURPOSE (t)
9627             && value == TREE_VALUE (t)
9628             && chain == TREE_CHAIN (t))
9629           return t;
9630         return tree_cons (purpose, value, chain);
9631       }
9632
9633     case RECORD_TYPE:
9634     case UNION_TYPE:
9635     case ENUMERAL_TYPE:
9636     case INTEGER_TYPE:
9637     case TEMPLATE_TYPE_PARM:
9638     case TEMPLATE_TEMPLATE_PARM:
9639     case BOUND_TEMPLATE_TEMPLATE_PARM:
9640     case TEMPLATE_PARM_INDEX:
9641     case POINTER_TYPE:
9642     case REFERENCE_TYPE:
9643     case OFFSET_TYPE:
9644     case FUNCTION_TYPE:
9645     case METHOD_TYPE:
9646     case ARRAY_TYPE:
9647     case TYPENAME_TYPE:
9648     case UNBOUND_CLASS_TEMPLATE:
9649     case TYPEOF_TYPE:
9650     case DECLTYPE_TYPE:
9651     case TYPE_DECL:
9652       return tsubst (t, args, complain, in_decl);
9653
9654     case IDENTIFIER_NODE:
9655       if (IDENTIFIER_TYPENAME_P (t))
9656         {
9657           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
9658           return mangle_conv_op_name_for_type (new_type);
9659         }
9660       else
9661         return t;
9662
9663     case CONSTRUCTOR:
9664       /* This is handled by tsubst_copy_and_build.  */
9665       gcc_unreachable ();
9666
9667     case VA_ARG_EXPR:
9668       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
9669                                           in_decl),
9670                              tsubst (TREE_TYPE (t), args, complain, in_decl));
9671
9672     case CLEANUP_POINT_EXPR:
9673       /* We shouldn't have built any of these during initial template
9674          generation.  Instead, they should be built during instantiation
9675          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
9676       gcc_unreachable ();
9677
9678     case OFFSET_REF:
9679       mark_used (TREE_OPERAND (t, 1));
9680       return t;
9681
9682     case EXPR_PACK_EXPANSION:
9683       error ("invalid use of pack expansion expression");
9684       return error_mark_node;
9685
9686     case NONTYPE_ARGUMENT_PACK:
9687       error ("use %<...%> to expand argument pack");
9688       return error_mark_node;
9689
9690     default:
9691       return t;
9692     }
9693 }
9694
9695 /* Like tsubst_copy, but specifically for OpenMP clauses.  */
9696
9697 static tree
9698 tsubst_omp_clauses (tree clauses, tree args, tsubst_flags_t complain,
9699                     tree in_decl)
9700 {
9701   tree new_clauses = NULL, nc, oc;
9702
9703   for (oc = clauses; oc ; oc = OMP_CLAUSE_CHAIN (oc))
9704     {
9705       nc = copy_node (oc);
9706       OMP_CLAUSE_CHAIN (nc) = new_clauses;
9707       new_clauses = nc;
9708
9709       switch (OMP_CLAUSE_CODE (nc))
9710         {
9711         case OMP_CLAUSE_PRIVATE:
9712         case OMP_CLAUSE_SHARED:
9713         case OMP_CLAUSE_FIRSTPRIVATE:
9714         case OMP_CLAUSE_LASTPRIVATE:
9715         case OMP_CLAUSE_REDUCTION:
9716         case OMP_CLAUSE_COPYIN:
9717         case OMP_CLAUSE_COPYPRIVATE:
9718         case OMP_CLAUSE_IF:
9719         case OMP_CLAUSE_NUM_THREADS:
9720         case OMP_CLAUSE_SCHEDULE:
9721           OMP_CLAUSE_OPERAND (nc, 0)
9722             = tsubst_expr (OMP_CLAUSE_OPERAND (oc, 0), args, complain, 
9723                            in_decl, /*integral_constant_expression_p=*/false);
9724           break;
9725         case OMP_CLAUSE_NOWAIT:
9726         case OMP_CLAUSE_ORDERED:
9727         case OMP_CLAUSE_DEFAULT:
9728           break;
9729         default:
9730           gcc_unreachable ();
9731         }
9732     }
9733
9734   return finish_omp_clauses (nreverse (new_clauses));
9735 }
9736
9737 /* Like tsubst_copy_and_build, but unshare TREE_LIST nodes.  */
9738
9739 static tree
9740 tsubst_copy_asm_operands (tree t, tree args, tsubst_flags_t complain,
9741                           tree in_decl)
9742 {
9743 #define RECUR(t) tsubst_copy_asm_operands (t, args, complain, in_decl)
9744
9745   tree purpose, value, chain;
9746
9747   if (t == NULL)
9748     return t;
9749
9750   if (TREE_CODE (t) != TREE_LIST)
9751     return tsubst_copy_and_build (t, args, complain, in_decl,
9752                                   /*function_p=*/false,
9753                                   /*integral_constant_expression_p=*/false);
9754
9755   if (t == void_list_node)
9756     return t;
9757
9758   purpose = TREE_PURPOSE (t);
9759   if (purpose)
9760     purpose = RECUR (purpose);
9761   value = TREE_VALUE (t);
9762   if (value)
9763     value = RECUR (value);
9764   chain = TREE_CHAIN (t);
9765   if (chain && chain != void_type_node)
9766     chain = RECUR (chain);
9767   return tree_cons (purpose, value, chain);
9768 #undef RECUR
9769 }
9770
9771 /* Like tsubst_copy for expressions, etc. but also does semantic
9772    processing.  */
9773
9774 static tree
9775 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
9776              bool integral_constant_expression_p)
9777 {
9778 #define RECUR(NODE)                             \
9779   tsubst_expr ((NODE), args, complain, in_decl, \
9780                integral_constant_expression_p)
9781
9782   tree stmt, tmp;
9783
9784   if (t == NULL_TREE || t == error_mark_node)
9785     return t;
9786
9787   if (EXPR_HAS_LOCATION (t))
9788     input_location = EXPR_LOCATION (t);
9789   if (STATEMENT_CODE_P (TREE_CODE (t)))
9790     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
9791
9792   switch (TREE_CODE (t))
9793     {
9794     case STATEMENT_LIST:
9795       {
9796         tree_stmt_iterator i;
9797         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
9798           RECUR (tsi_stmt (i));
9799         break;
9800       }
9801
9802     case CTOR_INITIALIZER:
9803       finish_mem_initializers (tsubst_initializer_list
9804                                (TREE_OPERAND (t, 0), args));
9805       break;
9806
9807     case RETURN_EXPR:
9808       finish_return_stmt (RECUR (TREE_OPERAND (t, 0)));
9809       break;
9810
9811     case EXPR_STMT:
9812       tmp = RECUR (EXPR_STMT_EXPR (t));
9813       if (EXPR_STMT_STMT_EXPR_RESULT (t))
9814         finish_stmt_expr_expr (tmp, cur_stmt_expr);
9815       else
9816         finish_expr_stmt (tmp);
9817       break;
9818
9819     case USING_STMT:
9820       do_using_directive (RECUR (USING_STMT_NAMESPACE (t)));
9821       break;
9822
9823     case DECL_EXPR:
9824       {
9825         tree decl;
9826         tree init;
9827
9828         decl = DECL_EXPR_DECL (t);
9829         if (TREE_CODE (decl) == LABEL_DECL)
9830           finish_label_decl (DECL_NAME (decl));
9831         else if (TREE_CODE (decl) == USING_DECL)
9832           {
9833             tree scope = USING_DECL_SCOPE (decl);
9834             tree name = DECL_NAME (decl);
9835             tree decl;
9836
9837             scope = RECUR (scope);
9838             decl = lookup_qualified_name (scope, name,
9839                                           /*is_type_p=*/false,
9840                                           /*complain=*/false);
9841             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
9842               qualified_name_lookup_error (scope, name, decl);
9843             else
9844               do_local_using_decl (decl, scope, name);
9845           }
9846         else
9847           {
9848             init = DECL_INITIAL (decl);
9849             decl = tsubst (decl, args, complain, in_decl);
9850             if (decl != error_mark_node)
9851               {
9852                 /* By marking the declaration as instantiated, we avoid
9853                    trying to instantiate it.  Since instantiate_decl can't
9854                    handle local variables, and since we've already done
9855                    all that needs to be done, that's the right thing to
9856                    do.  */
9857                 if (TREE_CODE (decl) == VAR_DECL)
9858                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
9859                 if (TREE_CODE (decl) == VAR_DECL
9860                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
9861                   /* Anonymous aggregates are a special case.  */
9862                   finish_anon_union (decl);
9863                 else
9864                   {
9865                     maybe_push_decl (decl);
9866                     if (TREE_CODE (decl) == VAR_DECL
9867                         && DECL_PRETTY_FUNCTION_P (decl))
9868                       {
9869                         /* For __PRETTY_FUNCTION__ we have to adjust the
9870                            initializer.  */
9871                         const char *const name
9872                           = cxx_printable_name (current_function_decl, 2);
9873                         init = cp_fname_init (name, &TREE_TYPE (decl));
9874                       }
9875                     else
9876                       init = RECUR (init);
9877                     finish_decl (decl, init, NULL_TREE);
9878                   }
9879               }
9880           }
9881
9882         /* A DECL_EXPR can also be used as an expression, in the condition
9883            clause of an if/for/while construct.  */
9884         return decl;
9885       }
9886
9887     case FOR_STMT:
9888       stmt = begin_for_stmt ();
9889                           RECUR (FOR_INIT_STMT (t));
9890       finish_for_init_stmt (stmt);
9891       tmp = RECUR (FOR_COND (t));
9892       finish_for_cond (tmp, stmt);
9893       tmp = RECUR (FOR_EXPR (t));
9894       finish_for_expr (tmp, stmt);
9895       RECUR (FOR_BODY (t));
9896       finish_for_stmt (stmt);
9897       break;
9898
9899     case WHILE_STMT:
9900       stmt = begin_while_stmt ();
9901       tmp = RECUR (WHILE_COND (t));
9902       finish_while_stmt_cond (tmp, stmt);
9903       RECUR (WHILE_BODY (t));
9904       finish_while_stmt (stmt);
9905       break;
9906
9907     case DO_STMT:
9908       stmt = begin_do_stmt ();
9909       RECUR (DO_BODY (t));
9910       finish_do_body (stmt);
9911       tmp = RECUR (DO_COND (t));
9912       finish_do_stmt (tmp, stmt);
9913       break;
9914
9915     case IF_STMT:
9916       stmt = begin_if_stmt ();
9917       tmp = RECUR (IF_COND (t));
9918       finish_if_stmt_cond (tmp, stmt);
9919       RECUR (THEN_CLAUSE (t));
9920       finish_then_clause (stmt);
9921
9922       if (ELSE_CLAUSE (t))
9923         {
9924           begin_else_clause (stmt);
9925           RECUR (ELSE_CLAUSE (t));
9926           finish_else_clause (stmt);
9927         }
9928
9929       finish_if_stmt (stmt);
9930       break;
9931
9932     case BIND_EXPR:
9933       if (BIND_EXPR_BODY_BLOCK (t))
9934         stmt = begin_function_body ();
9935       else
9936         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
9937                                     ? BCS_TRY_BLOCK : 0);
9938
9939       RECUR (BIND_EXPR_BODY (t));
9940
9941       if (BIND_EXPR_BODY_BLOCK (t))
9942         finish_function_body (stmt);
9943       else
9944         finish_compound_stmt (stmt);
9945       break;
9946
9947     case BREAK_STMT:
9948       finish_break_stmt ();
9949       break;
9950
9951     case CONTINUE_STMT:
9952       finish_continue_stmt ();
9953       break;
9954
9955     case SWITCH_STMT:
9956       stmt = begin_switch_stmt ();
9957       tmp = RECUR (SWITCH_STMT_COND (t));
9958       finish_switch_cond (tmp, stmt);
9959       RECUR (SWITCH_STMT_BODY (t));
9960       finish_switch_stmt (stmt);
9961       break;
9962
9963     case CASE_LABEL_EXPR:
9964       finish_case_label (RECUR (CASE_LOW (t)),
9965                          RECUR (CASE_HIGH (t)));
9966       break;
9967
9968     case LABEL_EXPR:
9969       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
9970       break;
9971
9972     case GOTO_EXPR:
9973       tmp = GOTO_DESTINATION (t);
9974       if (TREE_CODE (tmp) != LABEL_DECL)
9975         /* Computed goto's must be tsubst'd into.  On the other hand,
9976            non-computed gotos must not be; the identifier in question
9977            will have no binding.  */
9978         tmp = RECUR (tmp);
9979       else
9980         tmp = DECL_NAME (tmp);
9981       finish_goto_stmt (tmp);
9982       break;
9983
9984     case ASM_EXPR:
9985       tmp = finish_asm_stmt
9986         (ASM_VOLATILE_P (t),
9987          RECUR (ASM_STRING (t)),
9988          tsubst_copy_asm_operands (ASM_OUTPUTS (t), args, complain, in_decl),
9989          tsubst_copy_asm_operands (ASM_INPUTS (t), args, complain, in_decl),
9990          tsubst_copy_asm_operands (ASM_CLOBBERS (t), args, complain, in_decl));
9991       {
9992         tree asm_expr = tmp;
9993         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
9994           asm_expr = TREE_OPERAND (asm_expr, 0);
9995         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
9996       }
9997       break;
9998
9999     case TRY_BLOCK:
10000       if (CLEANUP_P (t))
10001         {
10002           stmt = begin_try_block ();
10003           RECUR (TRY_STMTS (t));
10004           finish_cleanup_try_block (stmt);
10005           finish_cleanup (RECUR (TRY_HANDLERS (t)), stmt);
10006         }
10007       else
10008         {
10009           tree compound_stmt = NULL_TREE;
10010
10011           if (FN_TRY_BLOCK_P (t))
10012             stmt = begin_function_try_block (&compound_stmt);
10013           else
10014             stmt = begin_try_block ();
10015
10016           RECUR (TRY_STMTS (t));
10017
10018           if (FN_TRY_BLOCK_P (t))
10019             finish_function_try_block (stmt);
10020           else
10021             finish_try_block (stmt);
10022
10023           RECUR (TRY_HANDLERS (t));
10024           if (FN_TRY_BLOCK_P (t))
10025             finish_function_handler_sequence (stmt, compound_stmt);
10026           else
10027             finish_handler_sequence (stmt);
10028         }
10029       break;
10030
10031     case HANDLER:
10032       {
10033         tree decl = HANDLER_PARMS (t);
10034
10035         if (decl)
10036           {
10037             decl = tsubst (decl, args, complain, in_decl);
10038             /* Prevent instantiate_decl from trying to instantiate
10039                this variable.  We've already done all that needs to be
10040                done.  */
10041             if (decl != error_mark_node)
10042               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
10043           }
10044         stmt = begin_handler ();
10045         finish_handler_parms (decl, stmt);
10046         RECUR (HANDLER_BODY (t));
10047         finish_handler (stmt);
10048       }
10049       break;
10050
10051     case TAG_DEFN:
10052       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
10053       break;
10054
10055     case STATIC_ASSERT:
10056       {
10057         tree condition = 
10058           tsubst_expr (STATIC_ASSERT_CONDITION (t), 
10059                        args,
10060                        complain, in_decl,
10061                        /*integral_constant_expression_p=*/true);
10062         finish_static_assert (condition,
10063                               STATIC_ASSERT_MESSAGE (t),
10064                               STATIC_ASSERT_SOURCE_LOCATION (t),
10065                               /*member_p=*/false);
10066       }
10067       break;
10068
10069     case OMP_PARALLEL:
10070       tmp = tsubst_omp_clauses (OMP_PARALLEL_CLAUSES (t),
10071                                 args, complain, in_decl);
10072       stmt = begin_omp_parallel ();
10073       RECUR (OMP_PARALLEL_BODY (t));
10074       OMP_PARALLEL_COMBINED (finish_omp_parallel (tmp, stmt))
10075         = OMP_PARALLEL_COMBINED (t);
10076       break;
10077
10078     case OMP_FOR:
10079       {
10080         tree clauses, decl, init, cond, incr, body, pre_body;
10081
10082         clauses = tsubst_omp_clauses (OMP_FOR_CLAUSES (t),
10083                                       args, complain, in_decl);
10084         init = OMP_FOR_INIT (t);
10085         gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
10086         decl = RECUR (TREE_OPERAND (init, 0));
10087         init = RECUR (TREE_OPERAND (init, 1));
10088         cond = RECUR (OMP_FOR_COND (t));
10089         incr = RECUR (OMP_FOR_INCR (t));
10090
10091         stmt = begin_omp_structured_block ();
10092
10093         pre_body = push_stmt_list ();
10094         RECUR (OMP_FOR_PRE_BODY (t));
10095         pre_body = pop_stmt_list (pre_body);
10096
10097         body = push_stmt_list ();
10098         RECUR (OMP_FOR_BODY (t));
10099         body = pop_stmt_list (body);
10100
10101         t = finish_omp_for (EXPR_LOCATION (t), decl, init, cond, incr, body,
10102                             pre_body);
10103         if (t)
10104           OMP_FOR_CLAUSES (t) = clauses;
10105
10106         add_stmt (finish_omp_structured_block (stmt));
10107       }
10108       break;
10109
10110     case OMP_SECTIONS:
10111     case OMP_SINGLE:
10112       tmp = tsubst_omp_clauses (OMP_CLAUSES (t), args, complain, in_decl);
10113       stmt = push_stmt_list ();
10114       RECUR (OMP_BODY (t));
10115       stmt = pop_stmt_list (stmt);
10116
10117       t = copy_node (t);
10118       OMP_BODY (t) = stmt;
10119       OMP_CLAUSES (t) = tmp;
10120       add_stmt (t);
10121       break;
10122
10123     case OMP_SECTION:
10124     case OMP_CRITICAL:
10125     case OMP_MASTER:
10126     case OMP_ORDERED:
10127       stmt = push_stmt_list ();
10128       RECUR (OMP_BODY (t));
10129       stmt = pop_stmt_list (stmt);
10130
10131       t = copy_node (t);
10132       OMP_BODY (t) = stmt;
10133       add_stmt (t);
10134       break;
10135
10136     case OMP_ATOMIC:
10137       if (OMP_ATOMIC_DEPENDENT_P (t))
10138         {
10139           tree op1 = TREE_OPERAND (t, 1);
10140           tree lhs = RECUR (TREE_OPERAND (op1, 0));
10141           tree rhs = RECUR (TREE_OPERAND (op1, 1));
10142           finish_omp_atomic (TREE_CODE (op1), lhs, rhs);
10143         }
10144       break;
10145
10146     case EXPR_PACK_EXPANSION:
10147       error ("invalid use of pack expansion expression");
10148       return error_mark_node;
10149
10150     case NONTYPE_ARGUMENT_PACK:
10151       error ("use %<...%> to expand argument pack");
10152       return error_mark_node;
10153
10154     default:
10155       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
10156
10157       return tsubst_copy_and_build (t, args, complain, in_decl,
10158                                     /*function_p=*/false,
10159                                     integral_constant_expression_p);
10160     }
10161
10162   return NULL_TREE;
10163 #undef RECUR
10164 }
10165
10166 /* T is a postfix-expression that is not being used in a function
10167    call.  Return the substituted version of T.  */
10168
10169 static tree
10170 tsubst_non_call_postfix_expression (tree t, tree args,
10171                                     tsubst_flags_t complain,
10172                                     tree in_decl)
10173 {
10174   if (TREE_CODE (t) == SCOPE_REF)
10175     t = tsubst_qualified_id (t, args, complain, in_decl,
10176                              /*done=*/false, /*address_p=*/false);
10177   else
10178     t = tsubst_copy_and_build (t, args, complain, in_decl,
10179                                /*function_p=*/false,
10180                                /*integral_constant_expression_p=*/false);
10181
10182   return t;
10183 }
10184
10185 /* Like tsubst but deals with expressions and performs semantic
10186    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
10187
10188 tree
10189 tsubst_copy_and_build (tree t,
10190                        tree args,
10191                        tsubst_flags_t complain,
10192                        tree in_decl,
10193                        bool function_p,
10194                        bool integral_constant_expression_p)
10195 {
10196 #define RECUR(NODE)                                             \
10197   tsubst_copy_and_build (NODE, args, complain, in_decl,         \
10198                          /*function_p=*/false,                  \
10199                          integral_constant_expression_p)
10200
10201   tree op1;
10202
10203   if (t == NULL_TREE || t == error_mark_node)
10204     return t;
10205
10206   switch (TREE_CODE (t))
10207     {
10208     case USING_DECL:
10209       t = DECL_NAME (t);
10210       /* Fall through.  */
10211     case IDENTIFIER_NODE:
10212       {
10213         tree decl;
10214         cp_id_kind idk;
10215         bool non_integral_constant_expression_p;
10216         const char *error_msg;
10217
10218         if (IDENTIFIER_TYPENAME_P (t))
10219           {
10220             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10221             t = mangle_conv_op_name_for_type (new_type);
10222           }
10223
10224         /* Look up the name.  */
10225         decl = lookup_name (t);
10226
10227         /* By convention, expressions use ERROR_MARK_NODE to indicate
10228            failure, not NULL_TREE.  */
10229         if (decl == NULL_TREE)
10230           decl = error_mark_node;
10231
10232         decl = finish_id_expression (t, decl, NULL_TREE,
10233                                      &idk,
10234                                      integral_constant_expression_p,
10235                                      /*allow_non_integral_constant_expression_p=*/false,
10236                                      &non_integral_constant_expression_p,
10237                                      /*template_p=*/false,
10238                                      /*done=*/true,
10239                                      /*address_p=*/false,
10240                                      /*template_arg_p=*/false,
10241                                      &error_msg);
10242         if (error_msg)
10243           error (error_msg);
10244         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
10245           decl = unqualified_name_lookup_error (decl);
10246         return decl;
10247       }
10248
10249     case TEMPLATE_ID_EXPR:
10250       {
10251         tree object;
10252         tree template = RECUR (TREE_OPERAND (t, 0));
10253         tree targs = TREE_OPERAND (t, 1);
10254
10255         if (targs)
10256           targs = tsubst_template_args (targs, args, complain, in_decl);
10257
10258         if (TREE_CODE (template) == COMPONENT_REF)
10259           {
10260             object = TREE_OPERAND (template, 0);
10261             template = TREE_OPERAND (template, 1);
10262           }
10263         else
10264           object = NULL_TREE;
10265         template = lookup_template_function (template, targs);
10266
10267         if (object)
10268           return build3 (COMPONENT_REF, TREE_TYPE (template),
10269                          object, template, NULL_TREE);
10270         else
10271           return baselink_for_fns (template);
10272       }
10273
10274     case INDIRECT_REF:
10275       {
10276         tree r = RECUR (TREE_OPERAND (t, 0));
10277
10278         if (REFERENCE_REF_P (t))
10279           {
10280             /* A type conversion to reference type will be enclosed in
10281                such an indirect ref, but the substitution of the cast
10282                will have also added such an indirect ref.  */
10283             if (TREE_CODE (TREE_TYPE (r)) == REFERENCE_TYPE)
10284               r = convert_from_reference (r);
10285           }
10286         else
10287           r = build_x_indirect_ref (r, "unary *");
10288         return r;
10289       }
10290
10291     case NOP_EXPR:
10292       return build_nop
10293         (tsubst (TREE_TYPE (t), args, complain, in_decl),
10294          RECUR (TREE_OPERAND (t, 0)));
10295
10296     case CAST_EXPR:
10297     case REINTERPRET_CAST_EXPR:
10298     case CONST_CAST_EXPR:
10299     case DYNAMIC_CAST_EXPR:
10300     case STATIC_CAST_EXPR:
10301       {
10302         tree type;
10303         tree op;
10304
10305         type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10306         if (integral_constant_expression_p
10307             && !cast_valid_in_integral_constant_expression_p (type))
10308           {
10309             error ("a cast to a type other than an integral or "
10310                    "enumeration type cannot appear in a constant-expression");
10311             return error_mark_node; 
10312           }
10313
10314         op = RECUR (TREE_OPERAND (t, 0));
10315
10316         switch (TREE_CODE (t))
10317           {
10318           case CAST_EXPR:
10319             return build_functional_cast (type, op);
10320           case REINTERPRET_CAST_EXPR:
10321             return build_reinterpret_cast (type, op);
10322           case CONST_CAST_EXPR:
10323             return build_const_cast (type, op);
10324           case DYNAMIC_CAST_EXPR:
10325             return build_dynamic_cast (type, op);
10326           case STATIC_CAST_EXPR:
10327             return build_static_cast (type, op);
10328           default:
10329             gcc_unreachable ();
10330           }
10331       }
10332
10333     case POSTDECREMENT_EXPR:
10334     case POSTINCREMENT_EXPR:
10335       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10336                                                 args, complain, in_decl);
10337       return build_x_unary_op (TREE_CODE (t), op1);
10338
10339     case PREDECREMENT_EXPR:
10340     case PREINCREMENT_EXPR:
10341     case NEGATE_EXPR:
10342     case BIT_NOT_EXPR:
10343     case ABS_EXPR:
10344     case TRUTH_NOT_EXPR:
10345     case UNARY_PLUS_EXPR:  /* Unary + */
10346     case REALPART_EXPR:
10347     case IMAGPART_EXPR:
10348       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
10349
10350     case ADDR_EXPR:
10351       op1 = TREE_OPERAND (t, 0);
10352       if (TREE_CODE (op1) == SCOPE_REF)
10353         op1 = tsubst_qualified_id (op1, args, complain, in_decl,
10354                                    /*done=*/true, /*address_p=*/true);
10355       else
10356         op1 = tsubst_non_call_postfix_expression (op1, args, complain,
10357                                                   in_decl);
10358       if (TREE_CODE (op1) == LABEL_DECL)
10359         return finish_label_address_expr (DECL_NAME (op1));
10360       return build_x_unary_op (ADDR_EXPR, op1);
10361
10362     case PLUS_EXPR:
10363     case MINUS_EXPR:
10364     case MULT_EXPR:
10365     case TRUNC_DIV_EXPR:
10366     case CEIL_DIV_EXPR:
10367     case FLOOR_DIV_EXPR:
10368     case ROUND_DIV_EXPR:
10369     case EXACT_DIV_EXPR:
10370     case BIT_AND_EXPR:
10371     case BIT_IOR_EXPR:
10372     case BIT_XOR_EXPR:
10373     case TRUNC_MOD_EXPR:
10374     case FLOOR_MOD_EXPR:
10375     case TRUTH_ANDIF_EXPR:
10376     case TRUTH_ORIF_EXPR:
10377     case TRUTH_AND_EXPR:
10378     case TRUTH_OR_EXPR:
10379     case RSHIFT_EXPR:
10380     case LSHIFT_EXPR:
10381     case RROTATE_EXPR:
10382     case LROTATE_EXPR:
10383     case EQ_EXPR:
10384     case NE_EXPR:
10385     case MAX_EXPR:
10386     case MIN_EXPR:
10387     case LE_EXPR:
10388     case GE_EXPR:
10389     case LT_EXPR:
10390     case GT_EXPR:
10391     case MEMBER_REF:
10392     case DOTSTAR_EXPR:
10393       return build_x_binary_op
10394         (TREE_CODE (t),
10395          RECUR (TREE_OPERAND (t, 0)),
10396          (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10397           ? ERROR_MARK
10398           : TREE_CODE (TREE_OPERAND (t, 0))),
10399          RECUR (TREE_OPERAND (t, 1)),
10400          (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10401           ? ERROR_MARK
10402           : TREE_CODE (TREE_OPERAND (t, 1))),
10403          /*overloaded_p=*/NULL);
10404
10405     case SCOPE_REF:
10406       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
10407                                   /*address_p=*/false);
10408     case ARRAY_REF:
10409       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10410                                                 args, complain, in_decl);
10411       return build_x_binary_op (ARRAY_REF, op1,
10412                                 (TREE_NO_WARNING (TREE_OPERAND (t, 0))
10413                                  ? ERROR_MARK
10414                                  : TREE_CODE (TREE_OPERAND (t, 0))),
10415                                 RECUR (TREE_OPERAND (t, 1)),
10416                                 (TREE_NO_WARNING (TREE_OPERAND (t, 1))
10417                                  ? ERROR_MARK
10418                                  : TREE_CODE (TREE_OPERAND (t, 1))),
10419                                 /*overloaded_p=*/NULL);
10420
10421     case SIZEOF_EXPR:
10422       if (PACK_EXPANSION_P (TREE_OPERAND (t, 0)))
10423         {
10424           /* We only want to compute the number of arguments.  */
10425           tree expanded = tsubst_pack_expansion (TREE_OPERAND (t, 0), args,
10426                                                 complain, in_decl);
10427           return build_int_cst (size_type_node, TREE_VEC_LENGTH (expanded));
10428         }
10429       /* Fall through */
10430       
10431     case ALIGNOF_EXPR:
10432       op1 = TREE_OPERAND (t, 0);
10433       if (!args)
10434         {
10435           /* When there are no ARGS, we are trying to evaluate a
10436              non-dependent expression from the parser.  Trying to do
10437              the substitutions may not work.  */
10438           if (!TYPE_P (op1))
10439             op1 = TREE_TYPE (op1);
10440         }
10441       else
10442         {
10443           ++skip_evaluation;
10444           op1 = tsubst_copy_and_build (op1, args, complain, in_decl,
10445                                        /*function_p=*/false,
10446                                        /*integral_constant_expression_p=*/false);
10447           --skip_evaluation;
10448         }
10449       if (TYPE_P (op1))
10450         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
10451       else
10452         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
10453
10454     case MODOP_EXPR:
10455       {
10456         tree r = build_x_modify_expr
10457           (RECUR (TREE_OPERAND (t, 0)),
10458            TREE_CODE (TREE_OPERAND (t, 1)),
10459            RECUR (TREE_OPERAND (t, 2)));
10460         /* TREE_NO_WARNING must be set if either the expression was
10461            parenthesized or it uses an operator such as >>= rather
10462            than plain assignment.  In the former case, it was already
10463            set and must be copied.  In the latter case,
10464            build_x_modify_expr sets it and it must not be reset
10465            here.  */
10466         if (TREE_NO_WARNING (t))
10467           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
10468         return r;
10469       }
10470
10471     case ARROW_EXPR:
10472       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10473                                                 args, complain, in_decl);
10474       /* Remember that there was a reference to this entity.  */
10475       if (DECL_P (op1))
10476         mark_used (op1);
10477       return build_x_arrow (op1);
10478
10479     case NEW_EXPR:
10480       return build_new
10481         (RECUR (TREE_OPERAND (t, 0)),
10482          RECUR (TREE_OPERAND (t, 1)),
10483          RECUR (TREE_OPERAND (t, 2)),
10484          RECUR (TREE_OPERAND (t, 3)),
10485          NEW_EXPR_USE_GLOBAL (t));
10486
10487     case DELETE_EXPR:
10488      return delete_sanity
10489        (RECUR (TREE_OPERAND (t, 0)),
10490         RECUR (TREE_OPERAND (t, 1)),
10491         DELETE_EXPR_USE_VEC (t),
10492         DELETE_EXPR_USE_GLOBAL (t));
10493
10494     case COMPOUND_EXPR:
10495       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
10496                                     RECUR (TREE_OPERAND (t, 1)));
10497
10498     case CALL_EXPR:
10499       {
10500         tree function;
10501         tree call_args;
10502         bool qualified_p;
10503         bool koenig_p;
10504
10505         function = CALL_EXPR_FN (t);
10506         /* When we parsed the expression,  we determined whether or
10507            not Koenig lookup should be performed.  */
10508         koenig_p = KOENIG_LOOKUP_P (t);
10509         if (TREE_CODE (function) == SCOPE_REF)
10510           {
10511             qualified_p = true;
10512             function = tsubst_qualified_id (function, args, complain, in_decl,
10513                                             /*done=*/false,
10514                                             /*address_p=*/false);
10515           }
10516         else
10517           {
10518             if (TREE_CODE (function) == COMPONENT_REF)
10519               {
10520                 tree op = TREE_OPERAND (function, 1);
10521
10522                 qualified_p = (TREE_CODE (op) == SCOPE_REF
10523                                || (BASELINK_P (op)
10524                                    && BASELINK_QUALIFIED_P (op)));
10525               }
10526             else
10527               qualified_p = false;
10528
10529             function = tsubst_copy_and_build (function, args, complain,
10530                                               in_decl,
10531                                               !qualified_p,
10532                                               integral_constant_expression_p);
10533
10534             if (BASELINK_P (function))
10535               qualified_p = true;
10536           }
10537
10538         /* FIXME:  Rewrite this so as not to construct an arglist.  */
10539         call_args = RECUR (CALL_EXPR_ARGS (t));
10540
10541         /* We do not perform argument-dependent lookup if normal
10542            lookup finds a non-function, in accordance with the
10543            expected resolution of DR 218.  */
10544         if (koenig_p
10545             && ((is_overloaded_fn (function)
10546                  /* If lookup found a member function, the Koenig lookup is
10547                     not appropriate, even if an unqualified-name was used
10548                     to denote the function.  */
10549                  && !DECL_FUNCTION_MEMBER_P (get_first_fn (function)))
10550                 || TREE_CODE (function) == IDENTIFIER_NODE))
10551           function = perform_koenig_lookup (function, call_args);
10552
10553         if (TREE_CODE (function) == IDENTIFIER_NODE)
10554           {
10555             unqualified_name_lookup_error (function);
10556             return error_mark_node;
10557           }
10558
10559         /* Remember that there was a reference to this entity.  */
10560         if (DECL_P (function))
10561           mark_used (function);
10562
10563         if (TREE_CODE (function) == OFFSET_REF)
10564           return build_offset_ref_call_from_tree (function, call_args);
10565         if (TREE_CODE (function) == COMPONENT_REF)
10566           {
10567             if (!BASELINK_P (TREE_OPERAND (function, 1)))
10568               return finish_call_expr (function, call_args,
10569                                        /*disallow_virtual=*/false,
10570                                        /*koenig_p=*/false);
10571             else
10572               return (build_new_method_call
10573                       (TREE_OPERAND (function, 0),
10574                        TREE_OPERAND (function, 1),
10575                        call_args, NULL_TREE,
10576                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL,
10577                        /*fn_p=*/NULL));
10578           }
10579         return finish_call_expr (function, call_args,
10580                                  /*disallow_virtual=*/qualified_p,
10581                                  koenig_p);
10582       }
10583
10584     case COND_EXPR:
10585       return build_x_conditional_expr
10586         (RECUR (TREE_OPERAND (t, 0)),
10587          RECUR (TREE_OPERAND (t, 1)),
10588          RECUR (TREE_OPERAND (t, 2)));
10589
10590     case PSEUDO_DTOR_EXPR:
10591       return finish_pseudo_destructor_expr
10592         (RECUR (TREE_OPERAND (t, 0)),
10593          RECUR (TREE_OPERAND (t, 1)),
10594          RECUR (TREE_OPERAND (t, 2)));
10595
10596     case TREE_LIST:
10597       {
10598         tree purpose, value, chain;
10599
10600         if (t == void_list_node)
10601           return t;
10602
10603         if ((TREE_PURPOSE (t) && PACK_EXPANSION_P (TREE_PURPOSE (t)))
10604             || (TREE_VALUE (t) && PACK_EXPANSION_P (TREE_VALUE (t))))
10605           {
10606             /* We have pack expansions, so expand those and
10607                create a new list out of it.  */
10608             tree purposevec = NULL_TREE;
10609             tree valuevec = NULL_TREE;
10610             tree chain;
10611             int i, len = -1;
10612
10613             /* Expand the argument expressions.  */
10614             if (TREE_PURPOSE (t))
10615               purposevec = tsubst_pack_expansion (TREE_PURPOSE (t), args,
10616                                                  complain, in_decl);
10617             if (TREE_VALUE (t))
10618               valuevec = tsubst_pack_expansion (TREE_VALUE (t), args,
10619                                                complain, in_decl);
10620
10621             /* Build the rest of the list.  */
10622             chain = TREE_CHAIN (t);
10623             if (chain && chain != void_type_node)
10624               chain = RECUR (chain);
10625
10626             /* Determine the number of arguments.  */
10627             if (purposevec && TREE_CODE (purposevec) == TREE_VEC)
10628               {
10629                 len = TREE_VEC_LENGTH (purposevec);
10630                 gcc_assert (!valuevec || len == TREE_VEC_LENGTH (valuevec));
10631               }
10632             else if (TREE_CODE (valuevec) == TREE_VEC)
10633               len = TREE_VEC_LENGTH (valuevec);
10634             else
10635               {
10636                 /* Since we only performed a partial substitution into
10637                    the argument pack, we only return a single list
10638                    node.  */
10639                 if (purposevec == TREE_PURPOSE (t)
10640                     && valuevec == TREE_VALUE (t)
10641                     && chain == TREE_CHAIN (t))
10642                   return t;
10643
10644                 return tree_cons (purposevec, valuevec, chain);
10645               }
10646             
10647             /* Convert the argument vectors into a TREE_LIST */
10648             i = len;
10649             while (i > 0)
10650               {
10651                 /* Grab the Ith values.  */
10652                 i--;
10653                 purpose = purposevec ? TREE_VEC_ELT (purposevec, i) 
10654                                      : NULL_TREE;
10655                 value 
10656                   = valuevec ? convert_from_reference (TREE_VEC_ELT (valuevec, i)) 
10657                              : NULL_TREE;
10658
10659                 /* Build the list (backwards).  */
10660                 chain = tree_cons (purpose, value, chain);
10661               }
10662
10663             return chain;
10664           }
10665
10666         purpose = TREE_PURPOSE (t);
10667         if (purpose)
10668           purpose = RECUR (purpose);
10669         value = TREE_VALUE (t);
10670         if (value)
10671           value = RECUR (value);
10672         chain = TREE_CHAIN (t);
10673         if (chain && chain != void_type_node)
10674           chain = RECUR (chain);
10675         if (purpose == TREE_PURPOSE (t)
10676             && value == TREE_VALUE (t)
10677             && chain == TREE_CHAIN (t))
10678           return t;
10679         return tree_cons (purpose, value, chain);
10680       }
10681
10682     case COMPONENT_REF:
10683       {
10684         tree object;
10685         tree object_type;
10686         tree member;
10687
10688         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
10689                                                      args, complain, in_decl);
10690         /* Remember that there was a reference to this entity.  */
10691         if (DECL_P (object))
10692           mark_used (object);
10693         object_type = TREE_TYPE (object);
10694
10695         member = TREE_OPERAND (t, 1);
10696         if (BASELINK_P (member))
10697           member = tsubst_baselink (member,
10698                                     non_reference (TREE_TYPE (object)),
10699                                     args, complain, in_decl);
10700         else
10701           member = tsubst_copy (member, args, complain, in_decl);
10702         if (member == error_mark_node)
10703           return error_mark_node;
10704
10705         if (object_type && !CLASS_TYPE_P (object_type))
10706           {
10707             if (TREE_CODE (member) == BIT_NOT_EXPR)
10708               return finish_pseudo_destructor_expr (object,
10709                                                     NULL_TREE,
10710                                                     object_type);
10711             else if (TREE_CODE (member) == SCOPE_REF
10712                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
10713               return finish_pseudo_destructor_expr (object,
10714                                                     object,
10715                                                     object_type);
10716           }
10717         else if (TREE_CODE (member) == SCOPE_REF
10718                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
10719           {
10720             tree tmpl;
10721             tree args;
10722
10723             /* Lookup the template functions now that we know what the
10724                scope is.  */
10725             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
10726             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
10727             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl,
10728                                             /*is_type_p=*/false,
10729                                             /*complain=*/false);
10730             if (BASELINK_P (member))
10731               {
10732                 BASELINK_FUNCTIONS (member)
10733                   = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
10734                               args);
10735                 member = (adjust_result_of_qualified_name_lookup
10736                           (member, BINFO_TYPE (BASELINK_BINFO (member)),
10737                            object_type));
10738               }
10739             else
10740               {
10741                 qualified_name_lookup_error (object_type, tmpl, member);
10742                 return error_mark_node;
10743               }
10744           }
10745         else if (TREE_CODE (member) == SCOPE_REF
10746                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
10747                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
10748           {
10749             if (complain & tf_error)
10750               {
10751                 if (TYPE_P (TREE_OPERAND (member, 0)))
10752                   error ("%qT is not a class or namespace",
10753                          TREE_OPERAND (member, 0));
10754                 else
10755                   error ("%qD is not a class or namespace",
10756                          TREE_OPERAND (member, 0));
10757               }
10758             return error_mark_node;
10759           }
10760         else if (TREE_CODE (member) == FIELD_DECL)
10761           return finish_non_static_data_member (member, object, NULL_TREE);
10762
10763         return finish_class_member_access_expr (object, member,
10764                                                 /*template_p=*/false);
10765       }
10766
10767     case THROW_EXPR:
10768       return build_throw
10769         (RECUR (TREE_OPERAND (t, 0)));
10770
10771     case CONSTRUCTOR:
10772       {
10773         VEC(constructor_elt,gc) *n;
10774         constructor_elt *ce;
10775         unsigned HOST_WIDE_INT idx;
10776         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
10777         bool process_index_p;
10778         int newlen;
10779         bool need_copy_p = false;
10780
10781         if (type == error_mark_node)
10782           return error_mark_node;
10783
10784         /* digest_init will do the wrong thing if we let it.  */
10785         if (type && TYPE_PTRMEMFUNC_P (type))
10786           return t;
10787
10788         /* We do not want to process the index of aggregate
10789            initializers as they are identifier nodes which will be
10790            looked up by digest_init.  */
10791         process_index_p = !(type && IS_AGGR_TYPE (type));
10792
10793         n = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
10794         newlen = VEC_length (constructor_elt, n);
10795         for (idx = 0; VEC_iterate (constructor_elt, n, idx, ce); idx++)
10796           {
10797             if (ce->index && process_index_p)
10798               ce->index = RECUR (ce->index);
10799
10800             if (PACK_EXPANSION_P (ce->value))
10801               {
10802                 /* Substitute into the pack expansion.  */
10803                 ce->value = tsubst_pack_expansion (ce->value, args, complain,
10804                                                   in_decl);
10805
10806                 if (TREE_VEC_LENGTH (ce->value) == 1)
10807                   /* Just move the argument into place.  */
10808                   ce->value = TREE_VEC_ELT (ce->value, 0);
10809                 else
10810                   {
10811                     /* Update the length of the final CONSTRUCTOR
10812                        arguments vector, and note that we will need to
10813                        copy.*/
10814                     newlen = newlen + TREE_VEC_LENGTH (ce->value) - 1;
10815                     need_copy_p = true;
10816                   }
10817               }
10818             else
10819               ce->value = RECUR (ce->value);
10820           }
10821
10822         if (need_copy_p)
10823           {
10824             VEC(constructor_elt,gc) *old_n = n;
10825
10826             n = VEC_alloc (constructor_elt, gc, newlen);
10827             for (idx = 0; VEC_iterate (constructor_elt, old_n, idx, ce); 
10828                  idx++)
10829               {
10830                 if (TREE_CODE (ce->value) == TREE_VEC)
10831                   {
10832                     int i, len = TREE_VEC_LENGTH (ce->value);
10833                     for (i = 0; i < len; ++i)
10834                       CONSTRUCTOR_APPEND_ELT (n, 0,
10835                                               TREE_VEC_ELT (ce->value, i));
10836                   }
10837                 else
10838                   CONSTRUCTOR_APPEND_ELT (n, 0, ce->value);
10839               }
10840           }
10841
10842         if (TREE_HAS_CONSTRUCTOR (t))
10843           return finish_compound_literal (type, n);
10844
10845         return build_constructor (NULL_TREE, n);
10846       }
10847
10848     case TYPEID_EXPR:
10849       {
10850         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
10851         if (TYPE_P (operand_0))
10852           return get_typeid (operand_0);
10853         return build_typeid (operand_0);
10854       }
10855
10856     case VAR_DECL:
10857       if (!args)
10858         return t;
10859       /* Fall through */
10860
10861     case PARM_DECL:
10862       {
10863         tree r = tsubst_copy (t, args, complain, in_decl);
10864
10865         if (TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
10866           /* If the original type was a reference, we'll be wrapped in
10867              the appropriate INDIRECT_REF.  */
10868           r = convert_from_reference (r);
10869         return r;
10870       }
10871
10872     case VA_ARG_EXPR:
10873       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
10874                              tsubst_copy (TREE_TYPE (t), args, complain,
10875                                           in_decl));
10876
10877     case OFFSETOF_EXPR:
10878       return finish_offsetof (RECUR (TREE_OPERAND (t, 0)));
10879
10880     case TRAIT_EXPR:
10881       {
10882         tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
10883                                   complain, in_decl);
10884
10885         tree type2 = TRAIT_EXPR_TYPE2 (t);
10886         if (type2)
10887           type2 = tsubst_copy (type2, args, complain, in_decl);
10888         
10889         return finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2);
10890       }
10891
10892     case STMT_EXPR:
10893       {
10894         tree old_stmt_expr = cur_stmt_expr;
10895         tree stmt_expr = begin_stmt_expr ();
10896
10897         cur_stmt_expr = stmt_expr;
10898         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl,
10899                      integral_constant_expression_p);
10900         stmt_expr = finish_stmt_expr (stmt_expr, false);
10901         cur_stmt_expr = old_stmt_expr;
10902
10903         return stmt_expr;
10904       }
10905
10906     case CONST_DECL:
10907       t = tsubst_copy (t, args, complain, in_decl);
10908       /* As in finish_id_expression, we resolve enumeration constants
10909          to their underlying values.  */
10910       if (TREE_CODE (t) == CONST_DECL)
10911         {
10912           used_types_insert (TREE_TYPE (t));
10913           return DECL_INITIAL (t);
10914         }
10915       return t;
10916
10917     default:
10918       /* Handle Objective-C++ constructs, if appropriate.  */
10919       {
10920         tree subst
10921           = objcp_tsubst_copy_and_build (t, args, complain,
10922                                          in_decl, /*function_p=*/false);
10923         if (subst)
10924           return subst;
10925       }
10926       return tsubst_copy (t, args, complain, in_decl);
10927     }
10928
10929 #undef RECUR
10930 }
10931
10932 /* Verify that the instantiated ARGS are valid. For type arguments,
10933    make sure that the type's linkage is ok. For non-type arguments,
10934    make sure they are constants if they are integral or enumerations.
10935    Emit an error under control of COMPLAIN, and return TRUE on error.  */
10936
10937 static bool
10938 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
10939 {
10940   int ix, len = DECL_NTPARMS (tmpl);
10941   bool result = false;
10942
10943   for (ix = 0; ix != len; ix++)
10944     {
10945       tree t = TREE_VEC_ELT (args, ix);
10946
10947       if (TYPE_P (t))
10948         {
10949           /* [basic.link]: A name with no linkage (notably, the name
10950              of a class or enumeration declared in a local scope)
10951              shall not be used to declare an entity with linkage.
10952              This implies that names with no linkage cannot be used as
10953              template arguments.  */
10954           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
10955
10956           if (nt)
10957             {
10958               /* DR 488 makes use of a type with no linkage cause
10959                  type deduction to fail.  */
10960               if (complain & tf_error)
10961                 {
10962                   if (TYPE_ANONYMOUS_P (nt))
10963                     error ("%qT is/uses anonymous type", t);
10964                   else
10965                     error ("template argument for %qD uses local type %qT",
10966                            tmpl, t);
10967                 }
10968               result = true;
10969             }
10970           /* In order to avoid all sorts of complications, we do not
10971              allow variably-modified types as template arguments.  */
10972           else if (variably_modified_type_p (t, NULL_TREE))
10973             {
10974               if (complain & tf_error)
10975                 error ("%qT is a variably modified type", t);
10976               result = true;
10977             }
10978         }
10979       /* A non-type argument of integral or enumerated type must be a
10980          constant.  */
10981       else if (TREE_TYPE (t)
10982                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
10983                && !TREE_CONSTANT (t))
10984         {
10985           if (complain & tf_error)
10986             error ("integral expression %qE is not constant", t);
10987           result = true;
10988         }
10989     }
10990   if (result && (complain & tf_error))
10991     error ("  trying to instantiate %qD", tmpl);
10992   return result;
10993 }
10994
10995 /* Instantiate the indicated variable or function template TMPL with
10996    the template arguments in TARG_PTR.  */
10997
10998 tree
10999 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
11000 {
11001   tree fndecl;
11002   tree gen_tmpl;
11003   tree spec;
11004   HOST_WIDE_INT saved_processing_template_decl;
11005
11006   if (tmpl == error_mark_node)
11007     return error_mark_node;
11008
11009   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
11010
11011   /* If this function is a clone, handle it specially.  */
11012   if (DECL_CLONED_FUNCTION_P (tmpl))
11013     {
11014       tree spec;
11015       tree clone;
11016
11017       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
11018                                    complain);
11019       if (spec == error_mark_node)
11020         return error_mark_node;
11021
11022       /* Look for the clone.  */
11023       FOR_EACH_CLONE (clone, spec)
11024         if (DECL_NAME (clone) == DECL_NAME (tmpl))
11025           return clone;
11026       /* We should always have found the clone by now.  */
11027       gcc_unreachable ();
11028       return NULL_TREE;
11029     }
11030
11031   /* Check to see if we already have this specialization.  */
11032   spec = retrieve_specialization (tmpl, targ_ptr,
11033                                   /*class_specializations_p=*/false);
11034   if (spec != NULL_TREE)
11035     return spec;
11036
11037   gen_tmpl = most_general_template (tmpl);
11038   if (tmpl != gen_tmpl)
11039     {
11040       /* The TMPL is a partial instantiation.  To get a full set of
11041          arguments we must add the arguments used to perform the
11042          partial instantiation.  */
11043       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
11044                                               targ_ptr);
11045
11046       /* Check to see if we already have this specialization.  */
11047       spec = retrieve_specialization (gen_tmpl, targ_ptr,
11048                                       /*class_specializations_p=*/false);
11049       if (spec != NULL_TREE)
11050         return spec;
11051     }
11052
11053   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
11054                                complain))
11055     return error_mark_node;
11056
11057   /* We are building a FUNCTION_DECL, during which the access of its
11058      parameters and return types have to be checked.  However this
11059      FUNCTION_DECL which is the desired context for access checking
11060      is not built yet.  We solve this chicken-and-egg problem by
11061      deferring all checks until we have the FUNCTION_DECL.  */
11062   push_deferring_access_checks (dk_deferred);
11063
11064   /* Although PROCESSING_TEMPLATE_DECL may be true at this point
11065      (because, for example, we have encountered a non-dependent
11066      function call in the body of a template function and must now
11067      determine which of several overloaded functions will be called),
11068      within the instantiation itself we are not processing a
11069      template.  */  
11070   saved_processing_template_decl = processing_template_decl;
11071   processing_template_decl = 0;
11072   /* Substitute template parameters to obtain the specialization.  */
11073   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
11074                    targ_ptr, complain, gen_tmpl);
11075   processing_template_decl = saved_processing_template_decl;
11076   if (fndecl == error_mark_node)
11077     return error_mark_node;
11078
11079   /* Now we know the specialization, compute access previously
11080      deferred.  */
11081   push_access_scope (fndecl);
11082   perform_deferred_access_checks ();
11083   pop_access_scope (fndecl);
11084   pop_deferring_access_checks ();
11085
11086   /* The DECL_TI_TEMPLATE should always be the immediate parent
11087      template, not the most general template.  */
11088   DECL_TI_TEMPLATE (fndecl) = tmpl;
11089
11090   /* If we've just instantiated the main entry point for a function,
11091      instantiate all the alternate entry points as well.  We do this
11092      by cloning the instantiation of the main entry point, not by
11093      instantiating the template clones.  */
11094   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
11095     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
11096
11097   return fndecl;
11098 }
11099
11100 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
11101    arguments that are being used when calling it.  TARGS is a vector
11102    into which the deduced template arguments are placed.
11103
11104    Return zero for success, 2 for an incomplete match that doesn't resolve
11105    all the types, and 1 for complete failure.  An error message will be
11106    printed only for an incomplete match.
11107
11108    If FN is a conversion operator, or we are trying to produce a specific
11109    specialization, RETURN_TYPE is the return type desired.
11110
11111    The EXPLICIT_TARGS are explicit template arguments provided via a
11112    template-id.
11113
11114    The parameter STRICT is one of:
11115
11116    DEDUCE_CALL:
11117      We are deducing arguments for a function call, as in
11118      [temp.deduct.call].
11119
11120    DEDUCE_CONV:
11121      We are deducing arguments for a conversion function, as in
11122      [temp.deduct.conv].
11123
11124    DEDUCE_EXACT:
11125      We are deducing arguments when doing an explicit instantiation
11126      as in [temp.explicit], when determining an explicit specialization
11127      as in [temp.expl.spec], or when taking the address of a function
11128      template, as in [temp.deduct.funcaddr].  */
11129
11130 int
11131 fn_type_unification (tree fn,
11132                      tree explicit_targs,
11133                      tree targs,
11134                      tree args,
11135                      tree return_type,
11136                      unification_kind_t strict,
11137                      int flags)
11138 {
11139   tree parms;
11140   tree fntype;
11141   int result;
11142   bool incomplete_argument_packs_p = false;
11143
11144   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
11145
11146   fntype = TREE_TYPE (fn);
11147   if (explicit_targs)
11148     {
11149       /* [temp.deduct]
11150
11151          The specified template arguments must match the template
11152          parameters in kind (i.e., type, nontype, template), and there
11153          must not be more arguments than there are parameters;
11154          otherwise type deduction fails.
11155
11156          Nontype arguments must match the types of the corresponding
11157          nontype template parameters, or must be convertible to the
11158          types of the corresponding nontype parameters as specified in
11159          _temp.arg.nontype_, otherwise type deduction fails.
11160
11161          All references in the function type of the function template
11162          to the corresponding template parameters are replaced by the
11163          specified template argument values.  If a substitution in a
11164          template parameter or in the function type of the function
11165          template results in an invalid type, type deduction fails.  */
11166       tree tparms = DECL_INNERMOST_TEMPLATE_PARMS (fn);
11167       int i, len = TREE_VEC_LENGTH (tparms);
11168       tree converted_args;
11169       bool incomplete = false;
11170
11171       if (explicit_targs == error_mark_node)
11172         return 1;
11173
11174       converted_args
11175         = (coerce_template_parms (tparms, explicit_targs, NULL_TREE, tf_none,
11176                                   /*require_all_args=*/false,
11177                                   /*use_default_args=*/false));
11178       if (converted_args == error_mark_node)
11179         return 1;
11180
11181       /* Substitute the explicit args into the function type.  This is
11182          necessary so that, for instance, explicitly declared function
11183          arguments can match null pointed constants.  If we were given
11184          an incomplete set of explicit args, we must not do semantic
11185          processing during substitution as we could create partial
11186          instantiations.  */
11187       for (i = 0; i < len; i++)
11188         {
11189           tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11190           bool parameter_pack = false;
11191
11192           /* Dig out the actual parm.  */
11193           if (TREE_CODE (parm) == TYPE_DECL
11194               || TREE_CODE (parm) == TEMPLATE_DECL)
11195             {
11196               parm = TREE_TYPE (parm);
11197               parameter_pack = TEMPLATE_TYPE_PARAMETER_PACK (parm);
11198             }
11199           else if (TREE_CODE (parm) == PARM_DECL)
11200             {
11201               parm = DECL_INITIAL (parm);
11202               parameter_pack = TEMPLATE_PARM_PARAMETER_PACK (parm);
11203             }
11204
11205           if (parameter_pack)
11206             {
11207               int level, idx;
11208               tree targ;
11209               template_parm_level_and_index (parm, &level, &idx);
11210
11211               /* Mark the argument pack as "incomplete". We could
11212                  still deduce more arguments during unification.  */
11213               targ = TMPL_ARG (converted_args, level, idx);
11214               if (targ)
11215                 {
11216                   ARGUMENT_PACK_INCOMPLETE_P(targ) = 1;
11217                   ARGUMENT_PACK_EXPLICIT_ARGS (targ) 
11218                     = ARGUMENT_PACK_ARGS (targ);
11219                 }
11220
11221               /* We have some incomplete argument packs.  */
11222               incomplete_argument_packs_p = true;
11223             }
11224         }
11225
11226       if (incomplete_argument_packs_p)
11227         /* Any substitution is guaranteed to be incomplete if there
11228            are incomplete argument packs, because we can still deduce
11229            more arguments.  */
11230         incomplete = 1;
11231       else
11232         incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
11233
11234       processing_template_decl += incomplete;
11235       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
11236       processing_template_decl -= incomplete;
11237
11238       if (fntype == error_mark_node)
11239         return 1;
11240
11241       /* Place the explicitly specified arguments in TARGS.  */
11242       for (i = NUM_TMPL_ARGS (converted_args); i--;)
11243         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
11244     }
11245
11246   /* Never do unification on the 'this' parameter.  */
11247   parms = skip_artificial_parms_for (fn, TYPE_ARG_TYPES (fntype));
11248
11249   if (return_type)
11250     {
11251       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
11252       args = tree_cons (NULL_TREE, return_type, args);
11253     }
11254
11255   /* We allow incomplete unification without an error message here
11256      because the standard doesn't seem to explicitly prohibit it.  Our
11257      callers must be ready to deal with unification failures in any
11258      event.  */
11259   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn),
11260                                   targs, parms, args, /*subr=*/0,
11261                                   strict, flags);
11262
11263   if (result == 0 && incomplete_argument_packs_p)
11264     {
11265       int i, len = NUM_TMPL_ARGS (targs);
11266
11267       /* Clear the "incomplete" flags on all argument packs.  */
11268       for (i = 0; i < len; i++)
11269         {
11270           tree arg = TREE_VEC_ELT (targs, i);
11271           if (ARGUMENT_PACK_P (arg))
11272             {
11273               ARGUMENT_PACK_INCOMPLETE_P (arg) = 0;
11274               ARGUMENT_PACK_EXPLICIT_ARGS (arg) = NULL_TREE;
11275             }
11276         }
11277     }
11278
11279   if (result == 0)
11280     /* All is well so far.  Now, check:
11281
11282        [temp.deduct]
11283
11284        When all template arguments have been deduced, all uses of
11285        template parameters in nondeduced contexts are replaced with
11286        the corresponding deduced argument values.  If the
11287        substitution results in an invalid type, as described above,
11288        type deduction fails.  */
11289     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
11290         == error_mark_node)
11291       return 1;
11292
11293   return result;
11294 }
11295
11296 /* Adjust types before performing type deduction, as described in
11297    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
11298    sections are symmetric.  PARM is the type of a function parameter
11299    or the return type of the conversion function.  ARG is the type of
11300    the argument passed to the call, or the type of the value
11301    initialized with the result of the conversion function.
11302    ARG_EXPR is the original argument expression, which may be null.  */
11303
11304 static int
11305 maybe_adjust_types_for_deduction (unification_kind_t strict,
11306                                   tree* parm,
11307                                   tree* arg,
11308                                   tree arg_expr)
11309 {
11310   int result = 0;
11311
11312   switch (strict)
11313     {
11314     case DEDUCE_CALL:
11315       break;
11316
11317     case DEDUCE_CONV:
11318       {
11319         /* Swap PARM and ARG throughout the remainder of this
11320            function; the handling is precisely symmetric since PARM
11321            will initialize ARG rather than vice versa.  */
11322         tree* temp = parm;
11323         parm = arg;
11324         arg = temp;
11325         break;
11326       }
11327
11328     case DEDUCE_EXACT:
11329       /* There is nothing to do in this case.  */
11330       return 0;
11331
11332     default:
11333       gcc_unreachable ();
11334     }
11335
11336   if (TREE_CODE (*parm) != REFERENCE_TYPE)
11337     {
11338       /* [temp.deduct.call]
11339
11340          If P is not a reference type:
11341
11342          --If A is an array type, the pointer type produced by the
11343          array-to-pointer standard conversion (_conv.array_) is
11344          used in place of A for type deduction; otherwise,
11345
11346          --If A is a function type, the pointer type produced by
11347          the function-to-pointer standard conversion
11348          (_conv.func_) is used in place of A for type deduction;
11349          otherwise,
11350
11351          --If A is a cv-qualified type, the top level
11352          cv-qualifiers of A's type are ignored for type
11353          deduction.  */
11354       if (TREE_CODE (*arg) == ARRAY_TYPE)
11355         *arg = build_pointer_type (TREE_TYPE (*arg));
11356       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
11357         *arg = build_pointer_type (*arg);
11358       else
11359         *arg = TYPE_MAIN_VARIANT (*arg);
11360     }
11361
11362   /* From C++0x [14.8.2.1/3 temp.deduct.call] (after DR606), "If P is
11363      of the form T&&, where T is a template parameter, and the argument
11364      is an lvalue, T is deduced as A& */
11365   if (TREE_CODE (*parm) == REFERENCE_TYPE
11366       && TYPE_REF_IS_RVALUE (*parm)
11367       && TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
11368       && cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
11369       && arg_expr && real_lvalue_p (arg_expr))
11370     *arg = build_reference_type (*arg);
11371
11372   /* [temp.deduct.call]
11373
11374      If P is a cv-qualified type, the top level cv-qualifiers
11375      of P's type are ignored for type deduction.  If P is a
11376      reference type, the type referred to by P is used for
11377      type deduction.  */
11378   *parm = TYPE_MAIN_VARIANT (*parm);
11379   if (TREE_CODE (*parm) == REFERENCE_TYPE)
11380     {
11381       *parm = TREE_TYPE (*parm);
11382       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
11383     }
11384
11385   /* DR 322. For conversion deduction, remove a reference type on parm
11386      too (which has been swapped into ARG).  */
11387   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
11388     *arg = TREE_TYPE (*arg);
11389
11390   return result;
11391 }
11392
11393 /* Most parms like fn_type_unification.
11394
11395    If SUBR is 1, we're being called recursively (to unify the
11396    arguments of a function or method parameter of a function
11397    template). */
11398
11399 static int
11400 type_unification_real (tree tparms,
11401                        tree targs,
11402                        tree xparms,
11403                        tree xargs,
11404                        int subr,
11405                        unification_kind_t strict,
11406                        int flags)
11407 {
11408   tree parm, arg, arg_expr;
11409   int i;
11410   int ntparms = TREE_VEC_LENGTH (tparms);
11411   int sub_strict;
11412   int saw_undeduced = 0;
11413   tree parms, args;
11414
11415   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
11416   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
11417   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
11418   gcc_assert (ntparms > 0);
11419
11420   switch (strict)
11421     {
11422     case DEDUCE_CALL:
11423       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
11424                     | UNIFY_ALLOW_DERIVED);
11425       break;
11426
11427     case DEDUCE_CONV:
11428       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
11429       break;
11430
11431     case DEDUCE_EXACT:
11432       sub_strict = UNIFY_ALLOW_NONE;
11433       break;
11434
11435     default:
11436       gcc_unreachable ();
11437     }
11438
11439  again:
11440   parms = xparms;
11441   args = xargs;
11442
11443   while (parms && parms != void_list_node
11444          && args && args != void_list_node)
11445     {
11446       if (TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11447         break;
11448
11449       parm = TREE_VALUE (parms);
11450       parms = TREE_CHAIN (parms);
11451       arg = TREE_VALUE (args);
11452       args = TREE_CHAIN (args);
11453       arg_expr = NULL;
11454
11455       if (arg == error_mark_node)
11456         return 1;
11457       if (arg == unknown_type_node)
11458         /* We can't deduce anything from this, but we might get all the
11459            template args from other function args.  */
11460         continue;
11461
11462       /* Conversions will be performed on a function argument that
11463          corresponds with a function parameter that contains only
11464          non-deducible template parameters and explicitly specified
11465          template parameters.  */
11466       if (!uses_template_parms (parm))
11467         {
11468           tree type;
11469
11470           if (!TYPE_P (arg))
11471             type = TREE_TYPE (arg);
11472           else
11473             type = arg;
11474
11475           if (same_type_p (parm, type))
11476             continue;
11477           if (strict != DEDUCE_EXACT
11478               && can_convert_arg (parm, type, TYPE_P (arg) ? NULL_TREE : arg,
11479                                   flags))
11480             continue;
11481
11482           return 1;
11483         }
11484
11485       if (!TYPE_P (arg))
11486         {
11487           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
11488           if (type_unknown_p (arg))
11489             {
11490               /* [temp.deduct.type] 
11491
11492                  A template-argument can be deduced from a pointer to
11493                  function or pointer to member function argument if
11494                  the set of overloaded functions does not contain
11495                  function templates and at most one of a set of
11496                  overloaded functions provides a unique match.  */
11497               if (resolve_overloaded_unification
11498                   (tparms, targs, parm, arg, strict, sub_strict))
11499                 continue;
11500
11501               return 1;
11502             }
11503           arg_expr = arg;
11504           arg = unlowered_expr_type (arg);
11505           if (arg == error_mark_node)
11506             return 1;
11507         }
11508
11509       {
11510         int arg_strict = sub_strict;
11511
11512         if (!subr)
11513           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg,
11514                                                           arg_expr);
11515
11516         if (unify (tparms, targs, parm, arg, arg_strict))
11517           return 1;
11518       }
11519     }
11520
11521
11522   if (parms 
11523       && parms != void_list_node
11524       && TREE_CODE (TREE_VALUE (parms)) == TYPE_PACK_EXPANSION)
11525     {
11526       /* Unify the remaining arguments with the pack expansion type.  */
11527       tree argvec;
11528       tree parmvec = make_tree_vec (1);
11529       int len = 0;
11530       tree t;
11531
11532       /* Count the number of arguments that remain.  */
11533       for (t = args; t && t != void_list_node; t = TREE_CHAIN (t))
11534         len++;
11535         
11536       /* Allocate a TREE_VEC and copy in all of the arguments */ 
11537       argvec = make_tree_vec (len);
11538       for (i = 0; args && args != void_list_node; args = TREE_CHAIN (args))
11539         {
11540           TREE_VEC_ELT (argvec, i) = TREE_VALUE (args);
11541           ++i;
11542         }
11543
11544       /* Copy the parameter into parmvec.  */
11545       TREE_VEC_ELT (parmvec, 0) = TREE_VALUE (parms);
11546       if (unify_pack_expansion (tparms, targs, parmvec, argvec, strict,
11547                                 /*call_args_p=*/true, /*subr=*/subr))
11548         return 1;
11549
11550       /* Advance to the end of the list of parameters.  */
11551       parms = TREE_CHAIN (parms);
11552     }
11553
11554   /* Fail if we've reached the end of the parm list, and more args
11555      are present, and the parm list isn't variadic.  */
11556   if (args && args != void_list_node && parms == void_list_node)
11557     return 1;
11558   /* Fail if parms are left and they don't have default values.  */
11559   if (parms && parms != void_list_node
11560       && TREE_PURPOSE (parms) == NULL_TREE)
11561     return 1;
11562
11563   if (!subr)
11564     for (i = 0; i < ntparms; i++)
11565       if (!TREE_VEC_ELT (targs, i))
11566         {
11567           tree tparm;
11568
11569           if (TREE_VEC_ELT (tparms, i) == error_mark_node)
11570             continue;
11571
11572           tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
11573
11574           /* If this is an undeduced nontype parameter that depends on
11575              a type parameter, try another pass; its type may have been
11576              deduced from a later argument than the one from which
11577              this parameter can be deduced.  */
11578           if (TREE_CODE (tparm) == PARM_DECL
11579               && uses_template_parms (TREE_TYPE (tparm))
11580               && !saw_undeduced++)
11581             goto again;
11582
11583           /* Core issue #226 (C++0x) [temp.deduct]:
11584
11585                If a template argument has not been deduced, its
11586                default template argument, if any, is used. 
11587
11588              When we are in C++98 mode, TREE_PURPOSE will either
11589              be NULL_TREE or ERROR_MARK_NODE, so we do not need
11590              to explicitly check cxx_dialect here.  */
11591           if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
11592             {
11593               tree arg = tsubst (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), 
11594                                  targs, tf_none, NULL_TREE);
11595               if (arg == error_mark_node)
11596                 return 1;
11597               else
11598                 {
11599                   TREE_VEC_ELT (targs, i) = arg;
11600                   continue;
11601                 }
11602             }
11603
11604           /* If the type parameter is a parameter pack, then it will
11605              be deduced to an empty parameter pack.  */
11606           if (template_parameter_pack_p (tparm))
11607             {
11608               tree arg;
11609
11610               if (TREE_CODE (tparm) == TEMPLATE_PARM_INDEX)
11611                 {
11612                   arg = make_node (NONTYPE_ARGUMENT_PACK);
11613                   TREE_TYPE (arg)  = TREE_TYPE (TEMPLATE_PARM_DECL (tparm));
11614                   TREE_CONSTANT (arg) = 1;
11615                 }
11616               else
11617                 arg = make_node (TYPE_ARGUMENT_PACK);
11618
11619               SET_ARGUMENT_PACK_ARGS (arg, make_tree_vec (0));
11620
11621               TREE_VEC_ELT (targs, i) = arg;
11622               continue;
11623             }
11624
11625           return 2;
11626         }
11627
11628   return 0;
11629 }
11630
11631 /* Subroutine of type_unification_real.  Args are like the variables
11632    at the call site.  ARG is an overloaded function (or template-id);
11633    we try deducing template args from each of the overloads, and if
11634    only one succeeds, we go with that.  Modifies TARGS and returns
11635    true on success.  */
11636
11637 static bool
11638 resolve_overloaded_unification (tree tparms,
11639                                 tree targs,
11640                                 tree parm,
11641                                 tree arg,
11642                                 unification_kind_t strict,
11643                                 int sub_strict)
11644 {
11645   tree tempargs = copy_node (targs);
11646   int good = 0;
11647   bool addr_p;
11648
11649   if (TREE_CODE (arg) == ADDR_EXPR)
11650     {
11651       arg = TREE_OPERAND (arg, 0);
11652       addr_p = true;
11653     }
11654   else
11655     addr_p = false;
11656
11657   if (TREE_CODE (arg) == COMPONENT_REF)
11658     /* Handle `&x' where `x' is some static or non-static member
11659        function name.  */
11660     arg = TREE_OPERAND (arg, 1);
11661
11662   if (TREE_CODE (arg) == OFFSET_REF)
11663     arg = TREE_OPERAND (arg, 1);
11664
11665   /* Strip baselink information.  */
11666   if (BASELINK_P (arg))
11667     arg = BASELINK_FUNCTIONS (arg);
11668
11669   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
11670     {
11671       /* If we got some explicit template args, we need to plug them into
11672          the affected templates before we try to unify, in case the
11673          explicit args will completely resolve the templates in question.  */
11674
11675       tree expl_subargs = TREE_OPERAND (arg, 1);
11676       arg = TREE_OPERAND (arg, 0);
11677
11678       for (; arg; arg = OVL_NEXT (arg))
11679         {
11680           tree fn = OVL_CURRENT (arg);
11681           tree subargs, elem;
11682
11683           if (TREE_CODE (fn) != TEMPLATE_DECL)
11684             continue;
11685
11686           subargs = get_bindings (fn, DECL_TEMPLATE_RESULT (fn),
11687                                   expl_subargs, /*check_ret=*/false);
11688           if (subargs)
11689             {
11690               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
11691               good += try_one_overload (tparms, targs, tempargs, parm,
11692                                         elem, strict, sub_strict, addr_p);
11693             }
11694         }
11695     }
11696   else if (TREE_CODE (arg) != OVERLOAD
11697            && TREE_CODE (arg) != FUNCTION_DECL)
11698     /* If ARG is, for example, "(0, &f)" then its type will be unknown
11699        -- but the deduction does not succeed because the expression is
11700        not just the function on its own.  */
11701     return false;
11702   else
11703     for (; arg; arg = OVL_NEXT (arg))
11704       good += try_one_overload (tparms, targs, tempargs, parm,
11705                                 TREE_TYPE (OVL_CURRENT (arg)),
11706                                 strict, sub_strict, addr_p);
11707
11708   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11709      to function or pointer to member function argument if the set of
11710      overloaded functions does not contain function templates and at most
11711      one of a set of overloaded functions provides a unique match.
11712
11713      So if we found multiple possibilities, we return success but don't
11714      deduce anything.  */
11715
11716   if (good == 1)
11717     {
11718       int i = TREE_VEC_LENGTH (targs);
11719       for (; i--; )
11720         if (TREE_VEC_ELT (tempargs, i))
11721           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
11722     }
11723   if (good)
11724     return true;
11725
11726   return false;
11727 }
11728
11729 /* Subroutine of resolve_overloaded_unification; does deduction for a single
11730    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
11731    different overloads deduce different arguments for a given parm.
11732    ADDR_P is true if the expression for which deduction is being
11733    performed was of the form "& fn" rather than simply "fn".
11734
11735    Returns 1 on success.  */
11736
11737 static int
11738 try_one_overload (tree tparms,
11739                   tree orig_targs,
11740                   tree targs,
11741                   tree parm,
11742                   tree arg,
11743                   unification_kind_t strict,
11744                   int sub_strict,
11745                   bool addr_p)
11746 {
11747   int nargs;
11748   tree tempargs;
11749   int i;
11750
11751   /* [temp.deduct.type] A template-argument can be deduced from a pointer
11752      to function or pointer to member function argument if the set of
11753      overloaded functions does not contain function templates and at most
11754      one of a set of overloaded functions provides a unique match.
11755
11756      So if this is a template, just return success.  */
11757
11758   if (uses_template_parms (arg))
11759     return 1;
11760
11761   if (TREE_CODE (arg) == METHOD_TYPE)
11762     arg = build_ptrmemfunc_type (build_pointer_type (arg));
11763   else if (addr_p)
11764     arg = build_pointer_type (arg);
11765
11766   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
11767
11768   /* We don't copy orig_targs for this because if we have already deduced
11769      some template args from previous args, unify would complain when we
11770      try to deduce a template parameter for the same argument, even though
11771      there isn't really a conflict.  */
11772   nargs = TREE_VEC_LENGTH (targs);
11773   tempargs = make_tree_vec (nargs);
11774
11775   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
11776     return 0;
11777
11778   /* First make sure we didn't deduce anything that conflicts with
11779      explicitly specified args.  */
11780   for (i = nargs; i--; )
11781     {
11782       tree elt = TREE_VEC_ELT (tempargs, i);
11783       tree oldelt = TREE_VEC_ELT (orig_targs, i);
11784
11785       if (!elt)
11786         /*NOP*/;
11787       else if (uses_template_parms (elt))
11788         /* Since we're unifying against ourselves, we will fill in
11789            template args used in the function parm list with our own
11790            template parms.  Discard them.  */
11791         TREE_VEC_ELT (tempargs, i) = NULL_TREE;
11792       else if (oldelt && !template_args_equal (oldelt, elt))
11793         return 0;
11794     }
11795
11796   for (i = nargs; i--; )
11797     {
11798       tree elt = TREE_VEC_ELT (tempargs, i);
11799
11800       if (elt)
11801         TREE_VEC_ELT (targs, i) = elt;
11802     }
11803
11804   return 1;
11805 }
11806
11807 /* PARM is a template class (perhaps with unbound template
11808    parameters).  ARG is a fully instantiated type.  If ARG can be
11809    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
11810    TARGS are as for unify.  */
11811
11812 static tree
11813 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
11814 {
11815   tree copy_of_targs;
11816
11817   if (!CLASSTYPE_TEMPLATE_INFO (arg)
11818       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg))
11819           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
11820     return NULL_TREE;
11821
11822   /* We need to make a new template argument vector for the call to
11823      unify.  If we used TARGS, we'd clutter it up with the result of
11824      the attempted unification, even if this class didn't work out.
11825      We also don't want to commit ourselves to all the unifications
11826      we've already done, since unification is supposed to be done on
11827      an argument-by-argument basis.  In other words, consider the
11828      following pathological case:
11829
11830        template <int I, int J, int K>
11831        struct S {};
11832
11833        template <int I, int J>
11834        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
11835
11836        template <int I, int J, int K>
11837        void f(S<I, J, K>, S<I, I, I>);
11838
11839        void g() {
11840          S<0, 0, 0> s0;
11841          S<0, 1, 2> s2;
11842
11843          f(s0, s2);
11844        }
11845
11846      Now, by the time we consider the unification involving `s2', we
11847      already know that we must have `f<0, 0, 0>'.  But, even though
11848      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
11849      because there are two ways to unify base classes of S<0, 1, 2>
11850      with S<I, I, I>.  If we kept the already deduced knowledge, we
11851      would reject the possibility I=1.  */
11852   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
11853
11854   /* If unification failed, we're done.  */
11855   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
11856              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
11857     return NULL_TREE;
11858
11859   return arg;
11860 }
11861
11862 /* Given a template type PARM and a class type ARG, find the unique
11863    base type in ARG that is an instance of PARM.  We do not examine
11864    ARG itself; only its base-classes.  If there is not exactly one
11865    appropriate base class, return NULL_TREE.  PARM may be the type of
11866    a partial specialization, as well as a plain template type.  Used
11867    by unify.  */
11868
11869 static tree
11870 get_template_base (tree tparms, tree targs, tree parm, tree arg)
11871 {
11872   tree rval = NULL_TREE;
11873   tree binfo;
11874
11875   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
11876
11877   binfo = TYPE_BINFO (complete_type (arg));
11878   if (!binfo)
11879     /* The type could not be completed.  */
11880     return NULL_TREE;
11881
11882   /* Walk in inheritance graph order.  The search order is not
11883      important, and this avoids multiple walks of virtual bases.  */
11884   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
11885     {
11886       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
11887
11888       if (r)
11889         {
11890           /* If there is more than one satisfactory baseclass, then:
11891
11892                [temp.deduct.call]
11893
11894               If they yield more than one possible deduced A, the type
11895               deduction fails.
11896
11897              applies.  */
11898           if (rval && !same_type_p (r, rval))
11899             return NULL_TREE;
11900
11901           rval = r;
11902         }
11903     }
11904
11905   return rval;
11906 }
11907
11908 /* Returns the level of DECL, which declares a template parameter.  */
11909
11910 static int
11911 template_decl_level (tree decl)
11912 {
11913   switch (TREE_CODE (decl))
11914     {
11915     case TYPE_DECL:
11916     case TEMPLATE_DECL:
11917       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
11918
11919     case PARM_DECL:
11920       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
11921
11922     default:
11923       gcc_unreachable ();
11924     }
11925   return 0;
11926 }
11927
11928 /* Decide whether ARG can be unified with PARM, considering only the
11929    cv-qualifiers of each type, given STRICT as documented for unify.
11930    Returns nonzero iff the unification is OK on that basis.  */
11931
11932 static int
11933 check_cv_quals_for_unify (int strict, tree arg, tree parm)
11934 {
11935   int arg_quals = cp_type_quals (arg);
11936   int parm_quals = cp_type_quals (parm);
11937
11938   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11939       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
11940     {
11941       /*  Although a CVR qualifier is ignored when being applied to a
11942           substituted template parameter ([8.3.2]/1 for example), that
11943           does not apply during deduction [14.8.2.4]/1, (even though
11944           that is not explicitly mentioned, [14.8.2.4]/9 indicates
11945           this).  Except when we're allowing additional CV qualifiers
11946           at the outer level [14.8.2.1]/3,1st bullet.  */
11947       if ((TREE_CODE (arg) == REFERENCE_TYPE
11948            || TREE_CODE (arg) == FUNCTION_TYPE
11949            || TREE_CODE (arg) == METHOD_TYPE)
11950           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
11951         return 0;
11952
11953       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
11954           && (parm_quals & TYPE_QUAL_RESTRICT))
11955         return 0;
11956     }
11957
11958   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
11959       && (arg_quals & parm_quals) != parm_quals)
11960     return 0;
11961
11962   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
11963       && (parm_quals & arg_quals) != arg_quals)
11964     return 0;
11965
11966   return 1;
11967 }
11968
11969 /* Determines the LEVEL and INDEX for the template parameter PARM.  */
11970 void 
11971 template_parm_level_and_index (tree parm, int* level, int* index)
11972 {
11973   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
11974       || TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
11975       || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
11976     {
11977       *index = TEMPLATE_TYPE_IDX (parm);
11978       *level = TEMPLATE_TYPE_LEVEL (parm);
11979     }
11980   else
11981     {
11982       *index = TEMPLATE_PARM_IDX (parm);
11983       *level = TEMPLATE_PARM_LEVEL (parm);
11984     }
11985 }
11986
11987 /* Unifies the remaining arguments in PACKED_ARGS with the pack
11988    expansion at the end of PACKED_PARMS. Returns 0 if the type
11989    deduction succeeds, 1 otherwise. STRICT is the same as in
11990    unify. CALL_ARGS_P is true iff PACKED_ARGS is actually a function
11991    call argument list. We'll need to adjust the arguments to make them
11992    types. SUBR tells us if this is from a recursive call to
11993    type_unification_real.  */
11994 int
11995 unify_pack_expansion (tree tparms, tree targs, tree packed_parms, 
11996                       tree packed_args, int strict, bool call_args_p,
11997                       bool subr)
11998 {
11999   tree parm 
12000     = TREE_VEC_ELT (packed_parms, TREE_VEC_LENGTH (packed_parms) - 1);
12001   tree pattern = PACK_EXPANSION_PATTERN (parm);
12002   tree pack, packs = NULL_TREE;
12003   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
12004   int len = TREE_VEC_LENGTH (packed_args);
12005
12006   /* Determine the parameter packs we will be deducing from the
12007      pattern, and record their current deductions.  */
12008   for (pack = PACK_EXPANSION_PARAMETER_PACKS (parm); 
12009        pack; pack = TREE_CHAIN (pack))
12010     {
12011       tree parm_pack = TREE_VALUE (pack);
12012       int idx, level;
12013
12014       /* Determine the index and level of this parameter pack.  */
12015       template_parm_level_and_index (parm_pack, &level, &idx);
12016
12017       /* Keep track of the parameter packs and their corresponding
12018          argument packs.  */
12019       packs = tree_cons (parm_pack, TMPL_ARG (targs, level, idx), packs);
12020       TREE_TYPE (packs) = make_tree_vec (len - start);
12021     }
12022   
12023   /* Loop through all of the arguments that have not yet been
12024      unified and unify each with the pattern.  */
12025   for (i = start; i < len; i++)
12026     {
12027       tree parm = pattern;
12028
12029       /* For each parameter pack, clear out the deduced value so that
12030          we can deduce it again.  */
12031       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12032         {
12033           int idx, level;
12034           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12035
12036           TMPL_ARG (targs, level, idx) = NULL_TREE;
12037         }
12038
12039       /* Unify the pattern with the current argument.  */
12040       {
12041         tree arg = TREE_VEC_ELT (packed_args, i);
12042         int arg_strict = strict;
12043         bool skip_arg_p = false;
12044
12045         if (call_args_p)
12046           {
12047             int sub_strict;
12048
12049             /* This mirrors what we do in type_unification_real.  */
12050             switch (strict)
12051               {
12052               case DEDUCE_CALL:
12053                 sub_strict = (UNIFY_ALLOW_OUTER_LEVEL 
12054                               | UNIFY_ALLOW_MORE_CV_QUAL
12055                               | UNIFY_ALLOW_DERIVED);
12056                 break;
12057                 
12058               case DEDUCE_CONV:
12059                 sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
12060                 break;
12061                 
12062               case DEDUCE_EXACT:
12063                 sub_strict = UNIFY_ALLOW_NONE;
12064                 break;
12065                 
12066               default:
12067                 gcc_unreachable ();
12068               }
12069
12070             if (!TYPE_P (arg))
12071               {
12072                 gcc_assert (TREE_TYPE (arg) != NULL_TREE);
12073                 if (type_unknown_p (arg))
12074                   {
12075                     /* [temp.deduct.type] A template-argument can be
12076                        deduced from a pointer to function or pointer
12077                        to member function argument if the set of
12078                        overloaded functions does not contain function
12079                        templates and at most one of a set of
12080                        overloaded functions provides a unique
12081                        match.  */
12082
12083                     if (resolve_overloaded_unification
12084                         (tparms, targs, parm, arg, strict, sub_strict)
12085                         != 0)
12086                       return 1;
12087                     skip_arg_p = true;
12088                   }
12089
12090                 if (!skip_arg_p)
12091                   {
12092                     arg = TREE_TYPE (arg);
12093                     if (arg == error_mark_node)
12094                       return 1;
12095                   }
12096               }
12097       
12098             arg_strict = sub_strict;
12099
12100             if (!subr)
12101               arg_strict |= 
12102                 maybe_adjust_types_for_deduction (strict, &parm, &arg, NULL);
12103           }
12104
12105         if (!skip_arg_p)
12106           {
12107             if (unify (tparms, targs, parm, arg, arg_strict))
12108               return 1;
12109           }
12110       }
12111
12112       /* For each parameter pack, collect the deduced value.  */
12113       for (pack = packs; pack; pack = TREE_CHAIN (pack))
12114         {
12115           int idx, level;
12116           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12117
12118           TREE_VEC_ELT (TREE_TYPE (pack), i - start) = 
12119             TMPL_ARG (targs, level, idx);
12120         }
12121     }
12122
12123   /* Verify that the results of unification with the parameter packs
12124      produce results consistent with what we've seen before, and make
12125      the deduced argument packs available.  */
12126   for (pack = packs; pack; pack = TREE_CHAIN (pack))
12127     {
12128       tree old_pack = TREE_VALUE (pack);
12129       tree new_args = TREE_TYPE (pack);
12130
12131       if (old_pack && ARGUMENT_PACK_INCOMPLETE_P (old_pack))
12132         {
12133           /* Prepend the explicit arguments onto NEW_ARGS.  */
12134           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12135           tree old_args = new_args;
12136           int i, explicit_len = TREE_VEC_LENGTH (explicit_args);
12137           int len = explicit_len + TREE_VEC_LENGTH (old_args);
12138
12139           /* Copy the explicit arguments.  */
12140           new_args = make_tree_vec (len);
12141           for (i = 0; i < explicit_len; i++)
12142             TREE_VEC_ELT (new_args, i) = TREE_VEC_ELT (explicit_args, i);
12143
12144           /* Copy the deduced arguments.  */
12145           for (; i < len; i++)
12146             TREE_VEC_ELT (new_args, i) =
12147               TREE_VEC_ELT (old_args, i - explicit_len);
12148         }
12149
12150       if (!old_pack)
12151         {
12152           tree result;
12153           int idx, level;
12154           
12155           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12156
12157           /* Build the deduced *_ARGUMENT_PACK.  */
12158           if (TREE_CODE (TREE_PURPOSE (pack)) == TEMPLATE_PARM_INDEX)
12159             {
12160               result = make_node (NONTYPE_ARGUMENT_PACK);
12161               TREE_TYPE (result) = 
12162                 TREE_TYPE (TEMPLATE_PARM_DECL (TREE_PURPOSE (pack)));
12163               TREE_CONSTANT (result) = 1;
12164             }
12165           else
12166             result = make_node (TYPE_ARGUMENT_PACK);
12167
12168           SET_ARGUMENT_PACK_ARGS (result, new_args);
12169
12170           /* Note the deduced argument packs for this parameter
12171              pack.  */
12172           TMPL_ARG (targs, level, idx) = result;
12173         }
12174       else if (ARGUMENT_PACK_INCOMPLETE_P (old_pack)
12175                && (ARGUMENT_PACK_ARGS (old_pack) 
12176                    == ARGUMENT_PACK_EXPLICIT_ARGS (old_pack)))
12177         {
12178           /* We only had the explicitly-provided arguments before, but
12179              now we have a complete set of arguments.  */
12180           int idx, level;
12181           tree explicit_args = ARGUMENT_PACK_EXPLICIT_ARGS (old_pack);
12182           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12183
12184           /* Keep the original deduced argument pack.  */
12185           TMPL_ARG (targs, level, idx) = old_pack;
12186
12187           SET_ARGUMENT_PACK_ARGS (old_pack, new_args);
12188           ARGUMENT_PACK_INCOMPLETE_P (old_pack) = 1;
12189           ARGUMENT_PACK_EXPLICIT_ARGS (old_pack) = explicit_args;
12190         }
12191       else if (!comp_template_args (ARGUMENT_PACK_ARGS (old_pack),
12192                                     new_args))
12193         /* Inconsistent unification of this parameter pack.  */
12194         return 1;
12195       else
12196         {
12197           int idx, level;
12198           
12199           template_parm_level_and_index (TREE_PURPOSE (pack), &level, &idx);
12200
12201           /* Keep the original deduced argument pack.  */
12202           TMPL_ARG (targs, level, idx) = old_pack;
12203         }
12204     }
12205
12206   return 0;
12207 }
12208
12209 /* Deduce the value of template parameters.  TPARMS is the (innermost)
12210    set of template parameters to a template.  TARGS is the bindings
12211    for those template parameters, as determined thus far; TARGS may
12212    include template arguments for outer levels of template parameters
12213    as well.  PARM is a parameter to a template function, or a
12214    subcomponent of that parameter; ARG is the corresponding argument.
12215    This function attempts to match PARM with ARG in a manner
12216    consistent with the existing assignments in TARGS.  If more values
12217    are deduced, then TARGS is updated.
12218
12219    Returns 0 if the type deduction succeeds, 1 otherwise.  The
12220    parameter STRICT is a bitwise or of the following flags:
12221
12222      UNIFY_ALLOW_NONE:
12223        Require an exact match between PARM and ARG.
12224      UNIFY_ALLOW_MORE_CV_QUAL:
12225        Allow the deduced ARG to be more cv-qualified (by qualification
12226        conversion) than ARG.
12227      UNIFY_ALLOW_LESS_CV_QUAL:
12228        Allow the deduced ARG to be less cv-qualified than ARG.
12229      UNIFY_ALLOW_DERIVED:
12230        Allow the deduced ARG to be a template base class of ARG,
12231        or a pointer to a template base class of the type pointed to by
12232        ARG.
12233      UNIFY_ALLOW_INTEGER:
12234        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
12235        case for more information.
12236      UNIFY_ALLOW_OUTER_LEVEL:
12237        This is the outermost level of a deduction. Used to determine validity
12238        of qualification conversions. A valid qualification conversion must
12239        have const qualified pointers leading up to the inner type which
12240        requires additional CV quals, except at the outer level, where const
12241        is not required [conv.qual]. It would be normal to set this flag in
12242        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
12243      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
12244        This is the outermost level of a deduction, and PARM can be more CV
12245        qualified at this point.
12246      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
12247        This is the outermost level of a deduction, and PARM can be less CV
12248        qualified at this point.  */
12249
12250 static int
12251 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
12252 {
12253   int idx;
12254   tree targ;
12255   tree tparm;
12256   int strict_in = strict;
12257
12258   /* I don't think this will do the right thing with respect to types.
12259      But the only case I've seen it in so far has been array bounds, where
12260      signedness is the only information lost, and I think that will be
12261      okay.  */
12262   while (TREE_CODE (parm) == NOP_EXPR)
12263     parm = TREE_OPERAND (parm, 0);
12264
12265   if (arg == error_mark_node)
12266     return 1;
12267   if (arg == unknown_type_node)
12268     /* We can't deduce anything from this, but we might get all the
12269        template args from other function args.  */
12270     return 0;
12271
12272   /* If PARM uses template parameters, then we can't bail out here,
12273      even if ARG == PARM, since we won't record unifications for the
12274      template parameters.  We might need them if we're trying to
12275      figure out which of two things is more specialized.  */
12276   if (arg == parm && !uses_template_parms (parm))
12277     return 0;
12278
12279   /* Immediately reject some pairs that won't unify because of
12280      cv-qualification mismatches.  */
12281   if (TREE_CODE (arg) == TREE_CODE (parm)
12282       && TYPE_P (arg)
12283       /* It is the elements of the array which hold the cv quals of an array
12284          type, and the elements might be template type parms. We'll check
12285          when we recurse.  */
12286       && TREE_CODE (arg) != ARRAY_TYPE
12287       /* We check the cv-qualifiers when unifying with template type
12288          parameters below.  We want to allow ARG `const T' to unify with
12289          PARM `T' for example, when computing which of two templates
12290          is more specialized, for example.  */
12291       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
12292       && !check_cv_quals_for_unify (strict_in, arg, parm))
12293     return 1;
12294
12295   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
12296       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
12297     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
12298   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
12299   strict &= ~UNIFY_ALLOW_DERIVED;
12300   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
12301   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
12302
12303   switch (TREE_CODE (parm))
12304     {
12305     case TYPENAME_TYPE:
12306     case SCOPE_REF:
12307     case UNBOUND_CLASS_TEMPLATE:
12308       /* In a type which contains a nested-name-specifier, template
12309          argument values cannot be deduced for template parameters used
12310          within the nested-name-specifier.  */
12311       return 0;
12312
12313     case TEMPLATE_TYPE_PARM:
12314     case TEMPLATE_TEMPLATE_PARM:
12315     case BOUND_TEMPLATE_TEMPLATE_PARM:
12316       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12317       if (tparm == error_mark_node)
12318         return 1;
12319
12320       if (TEMPLATE_TYPE_LEVEL (parm)
12321           != template_decl_level (tparm))
12322         /* The PARM is not one we're trying to unify.  Just check
12323            to see if it matches ARG.  */
12324         return (TREE_CODE (arg) == TREE_CODE (parm)
12325                 && same_type_p (parm, arg)) ? 0 : 1;
12326       idx = TEMPLATE_TYPE_IDX (parm);
12327       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12328       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
12329
12330       /* Check for mixed types and values.  */
12331       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
12332            && TREE_CODE (tparm) != TYPE_DECL)
12333           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12334               && TREE_CODE (tparm) != TEMPLATE_DECL))
12335         return 1;
12336
12337       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12338         {
12339           /* ARG must be constructed from a template class or a template
12340              template parameter.  */
12341           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
12342               && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
12343             return 1;
12344
12345           {
12346             tree parmvec = TYPE_TI_ARGS (parm);
12347             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
12348             tree argtmplvec
12349               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
12350             int i;
12351
12352             /* The resolution to DR150 makes clear that default
12353                arguments for an N-argument may not be used to bind T
12354                to a template template parameter with fewer than N
12355                parameters.  It is not safe to permit the binding of
12356                default arguments as an extension, as that may change
12357                the meaning of a conforming program.  Consider:
12358
12359                   struct Dense { static const unsigned int dim = 1; };
12360
12361                   template <template <typename> class View,
12362                             typename Block>
12363                   void operator+(float, View<Block> const&);
12364
12365                   template <typename Block,
12366                             unsigned int Dim = Block::dim>
12367                   struct Lvalue_proxy { operator float() const; };
12368
12369                   void
12370                   test_1d (void) {
12371                     Lvalue_proxy<Dense> p;
12372                     float b;
12373                     b + p;
12374                   }
12375
12376               Here, if Lvalue_proxy is permitted to bind to View, then
12377               the global operator+ will be used; if they are not, the
12378               Lvalue_proxy will be converted to float.  */
12379             if (coerce_template_parms (argtmplvec, parmvec,
12380                                        TYPE_TI_TEMPLATE (parm),
12381                                        tf_none,
12382                                        /*require_all_args=*/true,
12383                                        /*use_default_args=*/false)
12384                 == error_mark_node)
12385               return 1;
12386
12387             /* Deduce arguments T, i from TT<T> or TT<i>.
12388                We check each element of PARMVEC and ARGVEC individually
12389                rather than the whole TREE_VEC since they can have
12390                different number of elements.  */
12391
12392             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
12393               {
12394                 if (unify (tparms, targs,
12395                            TREE_VEC_ELT (parmvec, i),
12396                            TREE_VEC_ELT (argvec, i),
12397                            UNIFY_ALLOW_NONE))
12398                   return 1;
12399               }
12400           }
12401           arg = TYPE_TI_TEMPLATE (arg);
12402
12403           /* Fall through to deduce template name.  */
12404         }
12405
12406       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
12407           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
12408         {
12409           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
12410
12411           /* Simple cases: Value already set, does match or doesn't.  */
12412           if (targ != NULL_TREE && template_args_equal (targ, arg))
12413             return 0;
12414           else if (targ)
12415             return 1;
12416         }
12417       else
12418         {
12419           /* If PARM is `const T' and ARG is only `int', we don't have
12420              a match unless we are allowing additional qualification.
12421              If ARG is `const int' and PARM is just `T' that's OK;
12422              that binds `const int' to `T'.  */
12423           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL,
12424                                          arg, parm))
12425             return 1;
12426
12427           /* Consider the case where ARG is `const volatile int' and
12428              PARM is `const T'.  Then, T should be `volatile int'.  */
12429           arg = cp_build_qualified_type_real
12430             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
12431           if (arg == error_mark_node)
12432             return 1;
12433
12434           /* Simple cases: Value already set, does match or doesn't.  */
12435           if (targ != NULL_TREE && same_type_p (targ, arg))
12436             return 0;
12437           else if (targ)
12438             return 1;
12439
12440           /* Make sure that ARG is not a variable-sized array.  (Note
12441              that were talking about variable-sized arrays (like
12442              `int[n]'), rather than arrays of unknown size (like
12443              `int[]').)  We'll get very confused by such a type since
12444              the bound of the array will not be computable in an
12445              instantiation.  Besides, such types are not allowed in
12446              ISO C++, so we can do as we please here.  */
12447           if (variably_modified_type_p (arg, NULL_TREE))
12448             return 1;
12449         }
12450
12451       /* If ARG is a parameter pack or an expansion, we cannot unify
12452          against it unless PARM is also a parameter pack.  */
12453       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12454           && !template_parameter_pack_p (parm))
12455         return 1;
12456
12457       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12458       return 0;
12459
12460     case TEMPLATE_PARM_INDEX:
12461       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
12462       if (tparm == error_mark_node)
12463         return 1;
12464
12465       if (TEMPLATE_PARM_LEVEL (parm)
12466           != template_decl_level (tparm))
12467         /* The PARM is not one we're trying to unify.  Just check
12468            to see if it matches ARG.  */
12469         return !(TREE_CODE (arg) == TREE_CODE (parm)
12470                  && cp_tree_equal (parm, arg));
12471
12472       idx = TEMPLATE_PARM_IDX (parm);
12473       targ = TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx);
12474
12475       if (targ)
12476         return !cp_tree_equal (targ, arg);
12477
12478       /* [temp.deduct.type] If, in the declaration of a function template
12479          with a non-type template-parameter, the non-type
12480          template-parameter is used in an expression in the function
12481          parameter-list and, if the corresponding template-argument is
12482          deduced, the template-argument type shall match the type of the
12483          template-parameter exactly, except that a template-argument
12484          deduced from an array bound may be of any integral type.
12485          The non-type parameter might use already deduced type parameters.  */
12486       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
12487       if (!TREE_TYPE (arg))
12488         /* Template-parameter dependent expression.  Just accept it for now.
12489            It will later be processed in convert_template_argument.  */
12490         ;
12491       else if (same_type_p (TREE_TYPE (arg), tparm))
12492         /* OK */;
12493       else if ((strict & UNIFY_ALLOW_INTEGER)
12494                && (TREE_CODE (tparm) == INTEGER_TYPE
12495                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
12496         /* Convert the ARG to the type of PARM; the deduced non-type
12497            template argument must exactly match the types of the
12498            corresponding parameter.  */
12499         arg = fold (build_nop (TREE_TYPE (parm), arg));
12500       else if (uses_template_parms (tparm))
12501         /* We haven't deduced the type of this parameter yet.  Try again
12502            later.  */
12503         return 0;
12504       else
12505         return 1;
12506
12507       /* If ARG is a parameter pack or an expansion, we cannot unify
12508          against it unless PARM is also a parameter pack.  */
12509       if ((template_parameter_pack_p (arg) || PACK_EXPANSION_P (arg))
12510           && !TEMPLATE_PARM_PARAMETER_PACK (parm))
12511         return 1;
12512
12513       TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
12514       return 0;
12515
12516     case PTRMEM_CST:
12517      {
12518         /* A pointer-to-member constant can be unified only with
12519          another constant.  */
12520       if (TREE_CODE (arg) != PTRMEM_CST)
12521         return 1;
12522
12523       /* Just unify the class member. It would be useless (and possibly
12524          wrong, depending on the strict flags) to unify also
12525          PTRMEM_CST_CLASS, because we want to be sure that both parm and
12526          arg refer to the same variable, even if through different
12527          classes. For instance:
12528
12529          struct A { int x; };
12530          struct B : A { };
12531
12532          Unification of &A::x and &B::x must succeed.  */
12533       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
12534                     PTRMEM_CST_MEMBER (arg), strict);
12535      }
12536
12537     case POINTER_TYPE:
12538       {
12539         if (TREE_CODE (arg) != POINTER_TYPE)
12540           return 1;
12541
12542         /* [temp.deduct.call]
12543
12544            A can be another pointer or pointer to member type that can
12545            be converted to the deduced A via a qualification
12546            conversion (_conv.qual_).
12547
12548            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
12549            This will allow for additional cv-qualification of the
12550            pointed-to types if appropriate.  */
12551
12552         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
12553           /* The derived-to-base conversion only persists through one
12554              level of pointers.  */
12555           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
12556
12557         return unify (tparms, targs, TREE_TYPE (parm),
12558                       TREE_TYPE (arg), strict);
12559       }
12560
12561     case REFERENCE_TYPE:
12562       if (TREE_CODE (arg) != REFERENCE_TYPE)
12563         return 1;
12564       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12565                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12566
12567     case ARRAY_TYPE:
12568       if (TREE_CODE (arg) != ARRAY_TYPE)
12569         return 1;
12570       if ((TYPE_DOMAIN (parm) == NULL_TREE)
12571           != (TYPE_DOMAIN (arg) == NULL_TREE))
12572         return 1;
12573       if (TYPE_DOMAIN (parm) != NULL_TREE)
12574         {
12575           tree parm_max;
12576           tree arg_max;
12577           bool parm_cst;
12578           bool arg_cst;
12579
12580           /* Our representation of array types uses "N - 1" as the
12581              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
12582              not an integer constant.  We cannot unify arbitrarily
12583              complex expressions, so we eliminate the MINUS_EXPRs
12584              here.  */
12585           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
12586           parm_cst = TREE_CODE (parm_max) == INTEGER_CST;
12587           if (!parm_cst)
12588             {
12589               gcc_assert (TREE_CODE (parm_max) == MINUS_EXPR);
12590               parm_max = TREE_OPERAND (parm_max, 0);
12591             }
12592           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
12593           arg_cst = TREE_CODE (arg_max) == INTEGER_CST;
12594           if (!arg_cst)
12595             {
12596               /* The ARG_MAX may not be a simple MINUS_EXPR, if we are
12597                  trying to unify the type of a variable with the type
12598                  of a template parameter.  For example:
12599
12600                    template <unsigned int N>
12601                    void f (char (&) [N]);
12602                    int g(); 
12603                    void h(int i) {
12604                      char a[g(i)];
12605                      f(a); 
12606                    }
12607
12608                 Here, the type of the ARG will be "int [g(i)]", and
12609                 may be a SAVE_EXPR, etc.  */
12610               if (TREE_CODE (arg_max) != MINUS_EXPR)
12611                 return 1;
12612               arg_max = TREE_OPERAND (arg_max, 0);
12613             }
12614
12615           /* If only one of the bounds used a MINUS_EXPR, compensate
12616              by adding one to the other bound.  */
12617           if (parm_cst && !arg_cst)
12618             parm_max = fold_build2 (PLUS_EXPR,
12619                                     integer_type_node,
12620                                     parm_max,
12621                                     integer_one_node);
12622           else if (arg_cst && !parm_cst)
12623             arg_max = fold_build2 (PLUS_EXPR,
12624                                    integer_type_node,
12625                                    arg_max,
12626                                    integer_one_node);
12627
12628           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
12629             return 1;
12630         }
12631       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12632                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
12633
12634     case REAL_TYPE:
12635     case COMPLEX_TYPE:
12636     case VECTOR_TYPE:
12637     case INTEGER_TYPE:
12638     case BOOLEAN_TYPE:
12639     case ENUMERAL_TYPE:
12640     case VOID_TYPE:
12641       if (TREE_CODE (arg) != TREE_CODE (parm))
12642         return 1;
12643
12644       /* We have already checked cv-qualification at the top of the
12645          function.  */
12646       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
12647         return 1;
12648
12649       /* As far as unification is concerned, this wins.  Later checks
12650          will invalidate it if necessary.  */
12651       return 0;
12652
12653       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
12654       /* Type INTEGER_CST can come from ordinary constant template args.  */
12655     case INTEGER_CST:
12656       while (TREE_CODE (arg) == NOP_EXPR)
12657         arg = TREE_OPERAND (arg, 0);
12658
12659       if (TREE_CODE (arg) != INTEGER_CST)
12660         return 1;
12661       return !tree_int_cst_equal (parm, arg);
12662
12663     case TREE_VEC:
12664       {
12665         int i;
12666         if (TREE_CODE (arg) != TREE_VEC)
12667           return 1;
12668         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
12669           return 1;
12670         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
12671           if (unify (tparms, targs,
12672                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
12673                      UNIFY_ALLOW_NONE))
12674             return 1;
12675         return 0;
12676       }
12677
12678     case RECORD_TYPE:
12679     case UNION_TYPE:
12680       if (TREE_CODE (arg) != TREE_CODE (parm))
12681         return 1;
12682
12683       if (TYPE_PTRMEMFUNC_P (parm))
12684         {
12685           if (!TYPE_PTRMEMFUNC_P (arg))
12686             return 1;
12687
12688           return unify (tparms, targs,
12689                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
12690                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
12691                         strict);
12692         }
12693
12694       if (CLASSTYPE_TEMPLATE_INFO (parm))
12695         {
12696           tree t = NULL_TREE;
12697
12698           if (strict_in & UNIFY_ALLOW_DERIVED)
12699             {
12700               /* First, we try to unify the PARM and ARG directly.  */
12701               t = try_class_unification (tparms, targs,
12702                                          parm, arg);
12703
12704               if (!t)
12705                 {
12706                   /* Fallback to the special case allowed in
12707                      [temp.deduct.call]:
12708
12709                        If P is a class, and P has the form
12710                        template-id, then A can be a derived class of
12711                        the deduced A.  Likewise, if P is a pointer to
12712                        a class of the form template-id, A can be a
12713                        pointer to a derived class pointed to by the
12714                        deduced A.  */
12715                   t = get_template_base (tparms, targs, parm, arg);
12716
12717                   if (!t)
12718                     return 1;
12719                 }
12720             }
12721           else if (CLASSTYPE_TEMPLATE_INFO (arg)
12722                    && (CLASSTYPE_TI_TEMPLATE (parm)
12723                        == CLASSTYPE_TI_TEMPLATE (arg)))
12724             /* Perhaps PARM is something like S<U> and ARG is S<int>.
12725                Then, we should unify `int' and `U'.  */
12726             t = arg;
12727           else
12728             /* There's no chance of unification succeeding.  */
12729             return 1;
12730
12731           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
12732                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
12733         }
12734       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
12735         return 1;
12736       return 0;
12737
12738     case METHOD_TYPE:
12739     case FUNCTION_TYPE:
12740       if (TREE_CODE (arg) != TREE_CODE (parm))
12741         return 1;
12742
12743       /* CV qualifications for methods can never be deduced, they must
12744          match exactly.  We need to check them explicitly here,
12745          because type_unification_real treats them as any other
12746          cvqualified parameter.  */
12747       if (TREE_CODE (parm) == METHOD_TYPE
12748           && (!check_cv_quals_for_unify
12749               (UNIFY_ALLOW_NONE,
12750                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (arg))),
12751                TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (parm))))))
12752         return 1;
12753
12754       if (unify (tparms, targs, TREE_TYPE (parm),
12755                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
12756         return 1;
12757       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
12758                                     TYPE_ARG_TYPES (arg), 1, DEDUCE_EXACT,
12759                                     LOOKUP_NORMAL);
12760
12761     case OFFSET_TYPE:
12762       /* Unify a pointer to member with a pointer to member function, which
12763          deduces the type of the member as a function type. */
12764       if (TYPE_PTRMEMFUNC_P (arg))
12765         {
12766           tree method_type;
12767           tree fntype;
12768           cp_cv_quals cv_quals;
12769
12770           /* Check top-level cv qualifiers */
12771           if (!check_cv_quals_for_unify (UNIFY_ALLOW_NONE, arg, parm))
12772             return 1;
12773
12774           if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12775                      TYPE_PTRMEMFUNC_OBJECT_TYPE (arg), UNIFY_ALLOW_NONE))
12776             return 1;
12777
12778           /* Determine the type of the function we are unifying against. */
12779           method_type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (arg));
12780           fntype =
12781             build_function_type (TREE_TYPE (method_type),
12782                                  TREE_CHAIN (TYPE_ARG_TYPES (method_type)));
12783
12784           /* Extract the cv-qualifiers of the member function from the
12785              implicit object parameter and place them on the function
12786              type to be restored later. */
12787           cv_quals =
12788             cp_type_quals(TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (method_type))));
12789           fntype = build_qualified_type (fntype, cv_quals);
12790           return unify (tparms, targs, TREE_TYPE (parm), fntype, strict);
12791         }
12792
12793       if (TREE_CODE (arg) != OFFSET_TYPE)
12794         return 1;
12795       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
12796                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
12797         return 1;
12798       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
12799                     strict);
12800
12801     case CONST_DECL:
12802       if (DECL_TEMPLATE_PARM_P (parm))
12803         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
12804       if (arg != integral_constant_value (parm))
12805         return 1;
12806       return 0;
12807
12808     case FIELD_DECL:
12809     case TEMPLATE_DECL:
12810       /* Matched cases are handled by the ARG == PARM test above.  */
12811       return 1;
12812
12813     case TYPE_ARGUMENT_PACK:
12814     case NONTYPE_ARGUMENT_PACK:
12815       {
12816         tree packed_parms = ARGUMENT_PACK_ARGS (parm);
12817         tree packed_args = ARGUMENT_PACK_ARGS (arg);
12818         int i, len = TREE_VEC_LENGTH (packed_parms);
12819         int argslen = TREE_VEC_LENGTH (packed_args);
12820         int parm_variadic_p = 0;
12821
12822         /* Check if the parameters end in a pack, making them variadic.  */
12823         if (len > 0 
12824             && PACK_EXPANSION_P (TREE_VEC_ELT (packed_parms, len - 1)))
12825           parm_variadic_p = 1;
12826
12827         /* If we don't have enough arguments to satisfy the parameters
12828            (not counting the pack expression at the end), or we have
12829            too many arguments for a parameter list that doesn't end in
12830            a pack expression, we can't unify.  */
12831         if (argslen < (len - parm_variadic_p)
12832             || (argslen > len && !parm_variadic_p))
12833           return 1;
12834
12835         /* Unify all of the parameters that precede the (optional)
12836            pack expression.  */
12837         for (i = 0; i < len - parm_variadic_p; ++i)
12838           {
12839             if (unify (tparms, targs, TREE_VEC_ELT (packed_parms, i),
12840                        TREE_VEC_ELT (packed_args, i), strict))
12841               return 1;
12842           }
12843
12844         if (parm_variadic_p)
12845           return unify_pack_expansion (tparms, targs, 
12846                                        packed_parms, packed_args,
12847                                        strict, /*call_args_p=*/false,
12848                                        /*subr=*/false);
12849         return 0;
12850       }
12851
12852       break;
12853
12854     case TYPEOF_TYPE:
12855     case DECLTYPE_TYPE:
12856       /* Cannot deduce anything from TYPEOF_TYPE or DECLTYPE_TYPE
12857          nodes.  */
12858       return 0;
12859
12860     default:
12861       gcc_assert (EXPR_P (parm));
12862
12863       /* We must be looking at an expression.  This can happen with
12864          something like:
12865
12866            template <int I>
12867            void foo(S<I>, S<I + 2>);
12868
12869          This is a "nondeduced context":
12870
12871            [deduct.type]
12872
12873            The nondeduced contexts are:
12874
12875            --A type that is a template-id in which one or more of
12876              the template-arguments is an expression that references
12877              a template-parameter.
12878
12879          In these cases, we assume deduction succeeded, but don't
12880          actually infer any unifications.  */
12881
12882       if (!uses_template_parms (parm)
12883           && !template_args_equal (parm, arg))
12884         return 1;
12885       else
12886         return 0;
12887     }
12888 }
12889 \f
12890 /* Note that DECL can be defined in this translation unit, if
12891    required.  */
12892
12893 static void
12894 mark_definable (tree decl)
12895 {
12896   tree clone;
12897   DECL_NOT_REALLY_EXTERN (decl) = 1;
12898   FOR_EACH_CLONE (clone, decl)
12899     DECL_NOT_REALLY_EXTERN (clone) = 1;
12900 }
12901
12902 /* Called if RESULT is explicitly instantiated, or is a member of an
12903    explicitly instantiated class.  */
12904
12905 void
12906 mark_decl_instantiated (tree result, int extern_p)
12907 {
12908   SET_DECL_EXPLICIT_INSTANTIATION (result);
12909
12910   /* If this entity has already been written out, it's too late to
12911      make any modifications.  */
12912   if (TREE_ASM_WRITTEN (result))
12913     return;
12914
12915   if (TREE_CODE (result) != FUNCTION_DECL)
12916     /* The TREE_PUBLIC flag for function declarations will have been
12917        set correctly by tsubst.  */
12918     TREE_PUBLIC (result) = 1;
12919
12920   /* This might have been set by an earlier implicit instantiation.  */
12921   DECL_COMDAT (result) = 0;
12922
12923   if (extern_p)
12924     DECL_NOT_REALLY_EXTERN (result) = 0;
12925   else
12926     {
12927       mark_definable (result);
12928       /* Always make artificials weak.  */
12929       if (DECL_ARTIFICIAL (result) && flag_weak)
12930         comdat_linkage (result);
12931       /* For WIN32 we also want to put explicit instantiations in
12932          linkonce sections.  */
12933       else if (TREE_PUBLIC (result))
12934         maybe_make_one_only (result);
12935     }
12936
12937   /* If EXTERN_P, then this function will not be emitted -- unless
12938      followed by an explicit instantiation, at which point its linkage
12939      will be adjusted.  If !EXTERN_P, then this function will be
12940      emitted here.  In neither circumstance do we want
12941      import_export_decl to adjust the linkage.  */
12942   DECL_INTERFACE_KNOWN (result) = 1;
12943 }
12944
12945 /* Given two function templates PAT1 and PAT2, return:
12946
12947    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
12948    -1 if PAT2 is more specialized than PAT1.
12949    0 if neither is more specialized.
12950
12951    LEN indicates the number of parameters we should consider
12952    (defaulted parameters should not be considered).
12953
12954    The 1998 std underspecified function template partial ordering, and
12955    DR214 addresses the issue.  We take pairs of arguments, one from
12956    each of the templates, and deduce them against each other.  One of
12957    the templates will be more specialized if all the *other*
12958    template's arguments deduce against its arguments and at least one
12959    of its arguments *does* *not* deduce against the other template's
12960    corresponding argument.  Deduction is done as for class templates.
12961    The arguments used in deduction have reference and top level cv
12962    qualifiers removed.  Iff both arguments were originally reference
12963    types *and* deduction succeeds in both directions, the template
12964    with the more cv-qualified argument wins for that pairing (if
12965    neither is more cv-qualified, they both are equal).  Unlike regular
12966    deduction, after all the arguments have been deduced in this way,
12967    we do *not* verify the deduced template argument values can be
12968    substituted into non-deduced contexts, nor do we have to verify
12969    that all template arguments have been deduced.  */
12970
12971 int
12972 more_specialized_fn (tree pat1, tree pat2, int len)
12973 {
12974   tree decl1 = DECL_TEMPLATE_RESULT (pat1);
12975   tree decl2 = DECL_TEMPLATE_RESULT (pat2);
12976   tree targs1 = make_tree_vec (DECL_NTPARMS (pat1));
12977   tree targs2 = make_tree_vec (DECL_NTPARMS (pat2));
12978   tree tparms1 = DECL_INNERMOST_TEMPLATE_PARMS (pat1);
12979   tree tparms2 = DECL_INNERMOST_TEMPLATE_PARMS (pat2);
12980   tree args1 = TYPE_ARG_TYPES (TREE_TYPE (decl1));
12981   tree args2 = TYPE_ARG_TYPES (TREE_TYPE (decl2));
12982   int better1 = 0;
12983   int better2 = 0;
12984
12985   /* Remove the this parameter from non-static member functions.  If
12986      one is a non-static member function and the other is not a static
12987      member function, remove the first parameter from that function
12988      also.  This situation occurs for operator functions where we
12989      locate both a member function (with this pointer) and non-member
12990      operator (with explicit first operand).  */
12991   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl1))
12992     {
12993       len--; /* LEN is the number of significant arguments for DECL1 */
12994       args1 = TREE_CHAIN (args1);
12995       if (!DECL_STATIC_FUNCTION_P (decl2))
12996         args2 = TREE_CHAIN (args2);
12997     }
12998   else if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl2))
12999     {
13000       args2 = TREE_CHAIN (args2);
13001       if (!DECL_STATIC_FUNCTION_P (decl1))
13002         {
13003           len--;
13004           args1 = TREE_CHAIN (args1);
13005         }
13006     }
13007
13008   /* If only one is a conversion operator, they are unordered.  */
13009   if (DECL_CONV_FN_P (decl1) != DECL_CONV_FN_P (decl2))
13010     return 0;
13011
13012   /* Consider the return type for a conversion function */
13013   if (DECL_CONV_FN_P (decl1))
13014     {
13015       args1 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl1)), args1);
13016       args2 = tree_cons (NULL_TREE, TREE_TYPE (TREE_TYPE (decl2)), args2);
13017       len++;
13018     }
13019
13020   processing_template_decl++;
13021
13022   while (len--)
13023     {
13024       tree arg1 = TREE_VALUE (args1);
13025       tree arg2 = TREE_VALUE (args2);
13026       int deduce1, deduce2;
13027       int quals1 = -1;
13028       int quals2 = -1;
13029
13030       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13031           && TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13032         {
13033           /* When both arguments are pack expansions, we need only
13034              unify the patterns themselves.  */
13035           arg1 = PACK_EXPANSION_PATTERN (arg1);
13036           arg2 = PACK_EXPANSION_PATTERN (arg2);
13037
13038           /* This is the last comparison we need to do.  */
13039           len = 0;
13040         }
13041
13042       if (TREE_CODE (arg1) == REFERENCE_TYPE)
13043         {
13044           arg1 = TREE_TYPE (arg1);
13045           quals1 = cp_type_quals (arg1);
13046         }
13047
13048       if (TREE_CODE (arg2) == REFERENCE_TYPE)
13049         {
13050           arg2 = TREE_TYPE (arg2);
13051           quals2 = cp_type_quals (arg2);
13052         }
13053
13054       if ((quals1 < 0) != (quals2 < 0))
13055         {
13056           /* Only of the args is a reference, see if we should apply
13057              array/function pointer decay to it.  This is not part of
13058              DR214, but is, IMHO, consistent with the deduction rules
13059              for the function call itself, and with our earlier
13060              implementation of the underspecified partial ordering
13061              rules.  (nathan).  */
13062           if (quals1 >= 0)
13063             {
13064               switch (TREE_CODE (arg1))
13065                 {
13066                 case ARRAY_TYPE:
13067                   arg1 = TREE_TYPE (arg1);
13068                   /* FALLTHROUGH. */
13069                 case FUNCTION_TYPE:
13070                   arg1 = build_pointer_type (arg1);
13071                   break;
13072
13073                 default:
13074                   break;
13075                 }
13076             }
13077           else
13078             {
13079               switch (TREE_CODE (arg2))
13080                 {
13081                 case ARRAY_TYPE:
13082                   arg2 = TREE_TYPE (arg2);
13083                   /* FALLTHROUGH. */
13084                 case FUNCTION_TYPE:
13085                   arg2 = build_pointer_type (arg2);
13086                   break;
13087
13088                 default:
13089                   break;
13090                 }
13091             }
13092         }
13093
13094       arg1 = TYPE_MAIN_VARIANT (arg1);
13095       arg2 = TYPE_MAIN_VARIANT (arg2);
13096
13097       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION)
13098         {
13099           int i, len2 = list_length (args2);
13100           tree parmvec = make_tree_vec (1);
13101           tree argvec = make_tree_vec (len2);
13102           tree ta = args2;
13103
13104           /* Setup the parameter vector, which contains only ARG1.  */
13105           TREE_VEC_ELT (parmvec, 0) = arg1;
13106
13107           /* Setup the argument vector, which contains the remaining
13108              arguments.  */
13109           for (i = 0; i < len2; i++, ta = TREE_CHAIN (ta))
13110             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13111
13112           deduce1 = !unify_pack_expansion (tparms1, targs1, parmvec, 
13113                                            argvec, UNIFY_ALLOW_NONE, 
13114                                            /*call_args_p=*/false, 
13115                                            /*subr=*/0);
13116
13117           /* We cannot deduce in the other direction, because ARG1 is
13118              a pack expansion but ARG2 is not.  */
13119           deduce2 = 0;
13120         }
13121       else if (TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13122         {
13123           int i, len1 = list_length (args1);
13124           tree parmvec = make_tree_vec (1);
13125           tree argvec = make_tree_vec (len1);
13126           tree ta = args1;
13127
13128           /* Setup the parameter vector, which contains only ARG1.  */
13129           TREE_VEC_ELT (parmvec, 0) = arg2;
13130
13131           /* Setup the argument vector, which contains the remaining
13132              arguments.  */
13133           for (i = 0; i < len1; i++, ta = TREE_CHAIN (ta))
13134             TREE_VEC_ELT (argvec, i) = TREE_VALUE (ta);
13135
13136           deduce2 = !unify_pack_expansion (tparms2, targs2, parmvec, 
13137                                            argvec, UNIFY_ALLOW_NONE, 
13138                                            /*call_args_p=*/false, 
13139                                            /*subr=*/0);
13140
13141           /* We cannot deduce in the other direction, because ARG2 is
13142              a pack expansion but ARG1 is not.*/
13143           deduce1 = 0;
13144         }
13145
13146       else
13147         {
13148           /* The normal case, where neither argument is a pack
13149              expansion.  */
13150           deduce1 = !unify (tparms1, targs1, arg1, arg2, UNIFY_ALLOW_NONE);
13151           deduce2 = !unify (tparms2, targs2, arg2, arg1, UNIFY_ALLOW_NONE);
13152         }
13153
13154       if (!deduce1)
13155         better2 = -1;
13156       if (!deduce2)
13157         better1 = -1;
13158       if (better1 < 0 && better2 < 0)
13159         /* We've failed to deduce something in either direction.
13160            These must be unordered.  */
13161         break;
13162
13163       if (deduce1 && deduce2 && quals1 >= 0 && quals2 >= 0)
13164         {
13165           /* Deduces in both directions, see if quals can
13166              disambiguate.  Pretend the worse one failed to deduce. */
13167           if ((quals1 & quals2) == quals2)
13168             deduce1 = 0;
13169           if ((quals1 & quals2) == quals1)
13170             deduce2 = 0;
13171         }
13172       if (deduce1 && !deduce2 && !better2)
13173         better2 = 1;
13174       if (deduce2 && !deduce1 && !better1)
13175         better1 = 1;
13176
13177       if (TREE_CODE (arg1) == TYPE_PACK_EXPANSION
13178           || TREE_CODE (arg2) == TYPE_PACK_EXPANSION)
13179         /* We have already processed all of the arguments in our
13180            handing of the pack expansion type.  */
13181         len = 0;
13182
13183       args1 = TREE_CHAIN (args1);
13184       args2 = TREE_CHAIN (args2);
13185     }
13186
13187   processing_template_decl--;
13188
13189   /* All things being equal, if the next argument is a pack expansion
13190      for one function but not for the other, prefer the
13191      non-variadic function.  */
13192   if ((better1 > 0) - (better2 > 0) == 0
13193       && args1 && TREE_VALUE (args1)
13194       && args2 && TREE_VALUE (args2))
13195     {
13196       if (TREE_CODE (TREE_VALUE (args1)) == TYPE_PACK_EXPANSION)
13197         return TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION ? 0 : -1;
13198       else if (TREE_CODE (TREE_VALUE (args2)) == TYPE_PACK_EXPANSION)
13199         return 1;
13200     }
13201
13202   return (better1 > 0) - (better2 > 0);
13203 }
13204
13205 /* Determine which of two partial specializations is more specialized.
13206
13207    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
13208    to the first partial specialization.  The TREE_VALUE is the
13209    innermost set of template parameters for the partial
13210    specialization.  PAT2 is similar, but for the second template.
13211
13212    Return 1 if the first partial specialization is more specialized;
13213    -1 if the second is more specialized; 0 if neither is more
13214    specialized.
13215
13216    See [temp.class.order] for information about determining which of
13217    two templates is more specialized.  */
13218
13219 static int
13220 more_specialized_class (tree pat1, tree pat2)
13221 {
13222   tree targs;
13223   tree tmpl1, tmpl2;
13224   int winner = 0;
13225   bool any_deductions = false;
13226
13227   tmpl1 = TREE_TYPE (pat1);
13228   tmpl2 = TREE_TYPE (pat2);
13229
13230   /* Just like what happens for functions, if we are ordering between
13231      different class template specializations, we may encounter dependent
13232      types in the arguments, and we need our dependency check functions
13233      to behave correctly.  */
13234   ++processing_template_decl;
13235   targs = get_class_bindings (TREE_VALUE (pat1),
13236                               CLASSTYPE_TI_ARGS (tmpl1),
13237                               CLASSTYPE_TI_ARGS (tmpl2));
13238   if (targs)
13239     {
13240       --winner;
13241       any_deductions = true;
13242     }
13243
13244   targs = get_class_bindings (TREE_VALUE (pat2),
13245                               CLASSTYPE_TI_ARGS (tmpl2),
13246                               CLASSTYPE_TI_ARGS (tmpl1));
13247   if (targs)
13248     {
13249       ++winner;
13250       any_deductions = true;
13251     }
13252   --processing_template_decl;
13253
13254   /* In the case of a tie where at least one of the class templates
13255      has a parameter pack at the end, the template with the most
13256      non-packed parameters wins.  */
13257   if (winner == 0
13258       && any_deductions
13259       && (template_args_variadic_p (TREE_PURPOSE (pat1))
13260           || template_args_variadic_p (TREE_PURPOSE (pat2))))
13261     {
13262       tree args1 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat1));
13263       tree args2 = INNERMOST_TEMPLATE_ARGS (TREE_PURPOSE (pat2));
13264       int len1 = TREE_VEC_LENGTH (args1);
13265       int len2 = TREE_VEC_LENGTH (args2);
13266
13267       /* We don't count the pack expansion at the end.  */
13268       if (template_args_variadic_p (TREE_PURPOSE (pat1)))
13269         --len1;
13270       if (template_args_variadic_p (TREE_PURPOSE (pat2)))
13271         --len2;
13272
13273       if (len1 > len2)
13274         return 1;
13275       else if (len1 < len2)
13276         return -1;
13277     }
13278
13279   return winner;
13280 }
13281
13282 /* Return the template arguments that will produce the function signature
13283    DECL from the function template FN, with the explicit template
13284    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is true, the return type must
13285    also match.  Return NULL_TREE if no satisfactory arguments could be
13286    found.  */
13287
13288 static tree
13289 get_bindings (tree fn, tree decl, tree explicit_args, bool check_rettype)
13290 {
13291   int ntparms = DECL_NTPARMS (fn);
13292   tree targs = make_tree_vec (ntparms);
13293   tree decl_type;
13294   tree decl_arg_types;
13295
13296   /* Substitute the explicit template arguments into the type of DECL.
13297      The call to fn_type_unification will handle substitution into the
13298      FN.  */
13299   decl_type = TREE_TYPE (decl);
13300   if (explicit_args && uses_template_parms (decl_type))
13301     {
13302       tree tmpl;
13303       tree converted_args;
13304
13305       if (DECL_TEMPLATE_INFO (decl))
13306         tmpl = DECL_TI_TEMPLATE (decl);
13307       else
13308         /* We can get here for some invalid specializations.  */
13309         return NULL_TREE;
13310
13311       converted_args
13312         = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
13313                                  explicit_args, NULL_TREE,
13314                                  tf_none,
13315                                  /*require_all_args=*/false,
13316                                  /*use_default_args=*/false);
13317       if (converted_args == error_mark_node)
13318         return NULL_TREE;
13319
13320       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE);
13321       if (decl_type == error_mark_node)
13322         return NULL_TREE;
13323     }
13324
13325   /* Never do unification on the 'this' parameter.  */
13326   decl_arg_types = skip_artificial_parms_for (decl, 
13327                                               TYPE_ARG_TYPES (decl_type));
13328
13329   if (fn_type_unification (fn, explicit_args, targs,
13330                            decl_arg_types,
13331                            (check_rettype || DECL_CONV_FN_P (fn)
13332                             ? TREE_TYPE (decl_type) : NULL_TREE),
13333                            DEDUCE_EXACT, LOOKUP_NORMAL))
13334     return NULL_TREE;
13335
13336   return targs;
13337 }
13338
13339 /* Return the innermost template arguments that, when applied to a
13340    template specialization whose innermost template parameters are
13341    TPARMS, and whose specialization arguments are PARMS, yield the
13342    ARGS.
13343
13344    For example, suppose we have:
13345
13346      template <class T, class U> struct S {};
13347      template <class T> struct S<T*, int> {};
13348
13349    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
13350    {T}, the SPEC_ARGS will be {T*, int} and the ARGS will be {double*,
13351    int}.  The resulting vector will be {double}, indicating that `T'
13352    is bound to `double'.  */
13353
13354 static tree
13355 get_class_bindings (tree tparms, tree spec_args, tree args)
13356 {
13357   int i, ntparms = TREE_VEC_LENGTH (tparms);
13358   tree deduced_args;
13359   tree innermost_deduced_args;
13360
13361   innermost_deduced_args = make_tree_vec (ntparms);
13362   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
13363     {
13364       deduced_args = copy_node (args);
13365       SET_TMPL_ARGS_LEVEL (deduced_args,
13366                            TMPL_ARGS_DEPTH (deduced_args),
13367                            innermost_deduced_args);
13368     }
13369   else
13370     deduced_args = innermost_deduced_args;
13371
13372   if (unify (tparms, deduced_args,
13373              INNERMOST_TEMPLATE_ARGS (spec_args),
13374              INNERMOST_TEMPLATE_ARGS (args),
13375              UNIFY_ALLOW_NONE))
13376     return NULL_TREE;
13377
13378   for (i =  0; i < ntparms; ++i)
13379     if (! TREE_VEC_ELT (innermost_deduced_args, i))
13380       return NULL_TREE;
13381
13382   /* Verify that nondeduced template arguments agree with the type
13383      obtained from argument deduction.
13384
13385      For example:
13386
13387        struct A { typedef int X; };
13388        template <class T, class U> struct C {};
13389        template <class T> struct C<T, typename T::X> {};
13390
13391      Then with the instantiation `C<A, int>', we can deduce that
13392      `T' is `A' but unify () does not check whether `typename T::X'
13393      is `int'.  */
13394   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
13395   if (spec_args == error_mark_node
13396       /* We only need to check the innermost arguments; the other
13397          arguments will always agree.  */
13398       || !comp_template_args (INNERMOST_TEMPLATE_ARGS (spec_args),
13399                               INNERMOST_TEMPLATE_ARGS (args)))
13400     return NULL_TREE;
13401
13402   return deduced_args;
13403 }
13404
13405 /* TEMPLATES is a TREE_LIST.  Each TREE_VALUE is a TEMPLATE_DECL.
13406    Return the TREE_LIST node with the most specialized template, if
13407    any.  If there is no most specialized template, the error_mark_node
13408    is returned.
13409
13410    Note that this function does not look at, or modify, the
13411    TREE_PURPOSE or TREE_TYPE of any of the nodes.  Since the node
13412    returned is one of the elements of INSTANTIATIONS, callers may
13413    store information in the TREE_PURPOSE or TREE_TYPE of the nodes,
13414    and retrieve it from the value returned.  */
13415
13416 tree
13417 most_specialized_instantiation (tree templates)
13418 {
13419   tree fn, champ;
13420
13421   ++processing_template_decl;
13422
13423   champ = templates;
13424   for (fn = TREE_CHAIN (templates); fn; fn = TREE_CHAIN (fn))
13425     {
13426       int fate = 0;
13427
13428       if (get_bindings (TREE_VALUE (champ),
13429                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13430                         NULL_TREE, /*check_ret=*/false))
13431         fate--;
13432
13433       if (get_bindings (TREE_VALUE (fn),
13434                         DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13435                         NULL_TREE, /*check_ret=*/false))
13436         fate++;
13437
13438       if (fate == -1)
13439         champ = fn;
13440       else if (!fate)
13441         {
13442           /* Equally specialized, move to next function.  If there
13443              is no next function, nothing's most specialized.  */
13444           fn = TREE_CHAIN (fn);
13445           champ = fn;
13446           if (!fn)
13447             break;
13448         }
13449     }
13450
13451   if (champ)
13452     /* Now verify that champ is better than everything earlier in the
13453        instantiation list.  */
13454     for (fn = templates; fn != champ; fn = TREE_CHAIN (fn))
13455       if (get_bindings (TREE_VALUE (champ),
13456                         DECL_TEMPLATE_RESULT (TREE_VALUE (fn)),
13457                         NULL_TREE, /*check_ret=*/false)
13458           || !get_bindings (TREE_VALUE (fn),
13459                             DECL_TEMPLATE_RESULT (TREE_VALUE (champ)),
13460                             NULL_TREE, /*check_ret=*/false))
13461         {
13462           champ = NULL_TREE;
13463           break;
13464         }
13465
13466   processing_template_decl--;
13467
13468   if (!champ)
13469     return error_mark_node;
13470
13471   return champ;
13472 }
13473
13474 /* If DECL is a specialization of some template, return the most
13475    general such template.  Otherwise, returns NULL_TREE.
13476
13477    For example, given:
13478
13479      template <class T> struct S { template <class U> void f(U); };
13480
13481    if TMPL is `template <class U> void S<int>::f(U)' this will return
13482    the full template.  This function will not trace past partial
13483    specializations, however.  For example, given in addition:
13484
13485      template <class T> struct S<T*> { template <class U> void f(U); };
13486
13487    if TMPL is `template <class U> void S<int*>::f(U)' this will return
13488    `template <class T> template <class U> S<T*>::f(U)'.  */
13489
13490 tree
13491 most_general_template (tree decl)
13492 {
13493   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
13494      an immediate specialization.  */
13495   if (TREE_CODE (decl) == FUNCTION_DECL)
13496     {
13497       if (DECL_TEMPLATE_INFO (decl)) {
13498         decl = DECL_TI_TEMPLATE (decl);
13499
13500         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
13501            template friend.  */
13502         if (TREE_CODE (decl) != TEMPLATE_DECL)
13503           return NULL_TREE;
13504       } else
13505         return NULL_TREE;
13506     }
13507
13508   /* Look for more and more general templates.  */
13509   while (DECL_TEMPLATE_INFO (decl))
13510     {
13511       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
13512          (See cp-tree.h for details.)  */
13513       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
13514         break;
13515
13516       if (CLASS_TYPE_P (TREE_TYPE (decl))
13517           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
13518         break;
13519
13520       /* Stop if we run into an explicitly specialized class template.  */
13521       if (!DECL_NAMESPACE_SCOPE_P (decl)
13522           && DECL_CONTEXT (decl)
13523           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
13524         break;
13525
13526       decl = DECL_TI_TEMPLATE (decl);
13527     }
13528
13529   return decl;
13530 }
13531
13532 /* Return the most specialized of the class template partial
13533    specializations of TMPL which can produce TYPE, a specialization of
13534    TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
13535    a _TYPE node corresponding to the partial specialization, while the
13536    TREE_PURPOSE is the set of template arguments that must be
13537    substituted into the TREE_TYPE in order to generate TYPE.
13538
13539    If the choice of partial specialization is ambiguous, a diagnostic
13540    is issued, and the error_mark_node is returned.  If there are no
13541    partial specializations of TMPL matching TYPE, then NULL_TREE is
13542    returned.  */
13543
13544 static tree
13545 most_specialized_class (tree type, tree tmpl)
13546 {
13547   tree list = NULL_TREE;
13548   tree t;
13549   tree champ;
13550   int fate;
13551   bool ambiguous_p;
13552   tree args;
13553
13554   tmpl = most_general_template (tmpl);
13555   args = CLASSTYPE_TI_ARGS (type);
13556   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
13557     {
13558       tree partial_spec_args;
13559       tree spec_args;
13560
13561       partial_spec_args = CLASSTYPE_TI_ARGS (TREE_TYPE (t));
13562       spec_args = get_class_bindings (TREE_VALUE (t),
13563                                       partial_spec_args,
13564                                       args);
13565       if (spec_args)
13566         {
13567           list = tree_cons (spec_args, TREE_VALUE (t), list);
13568           TREE_TYPE (list) = TREE_TYPE (t);
13569         }
13570     }
13571
13572   if (! list)
13573     return NULL_TREE;
13574
13575   ambiguous_p = false;
13576   t = list;
13577   champ = t;
13578   t = TREE_CHAIN (t);
13579   for (; t; t = TREE_CHAIN (t))
13580     {
13581       fate = more_specialized_class (champ, t);
13582       if (fate == 1)
13583         ;
13584       else
13585         {
13586           if (fate == 0)
13587             {
13588               t = TREE_CHAIN (t);
13589               if (! t)
13590                 {
13591                   ambiguous_p = true;
13592                   break;
13593                 }
13594             }
13595           champ = t;
13596         }
13597     }
13598
13599   if (!ambiguous_p)
13600     for (t = list; t && t != champ; t = TREE_CHAIN (t))
13601       {
13602         fate = more_specialized_class (champ, t);
13603         if (fate != 1)
13604           {
13605             ambiguous_p = true;
13606             break;
13607           }
13608       }
13609
13610   if (ambiguous_p)
13611     {
13612       const char *str = "candidates are:";
13613       error ("ambiguous class template instantiation for %q#T", type);
13614       for (t = list; t; t = TREE_CHAIN (t))
13615         {
13616           error ("%s %+#T", str, TREE_TYPE (t));
13617           str = "               ";
13618         }
13619       return error_mark_node;
13620     }
13621
13622   return champ;
13623 }
13624
13625 /* Explicitly instantiate DECL.  */
13626
13627 void
13628 do_decl_instantiation (tree decl, tree storage)
13629 {
13630   tree result = NULL_TREE;
13631   int extern_p = 0;
13632
13633   if (!decl || decl == error_mark_node)
13634     /* An error occurred, for which grokdeclarator has already issued
13635        an appropriate message.  */
13636     return;
13637   else if (! DECL_LANG_SPECIFIC (decl))
13638     {
13639       error ("explicit instantiation of non-template %q#D", decl);
13640       return;
13641     }
13642   else if (TREE_CODE (decl) == VAR_DECL)
13643     {
13644       /* There is an asymmetry here in the way VAR_DECLs and
13645          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
13646          the latter, the DECL we get back will be marked as a
13647          template instantiation, and the appropriate
13648          DECL_TEMPLATE_INFO will be set up.  This does not happen for
13649          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
13650          should handle VAR_DECLs as it currently handles
13651          FUNCTION_DECLs.  */
13652       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
13653       if (!result || TREE_CODE (result) != VAR_DECL)
13654         {
13655           error ("no matching template for %qD found", decl);
13656           return;
13657         }
13658       if (!same_type_p (TREE_TYPE (result), TREE_TYPE (decl)))
13659         {
13660           error ("type %qT for explicit instantiation %qD does not match "
13661                  "declared type %qT", TREE_TYPE (result), decl,
13662                  TREE_TYPE (decl));
13663           return;
13664         }
13665     }
13666   else if (TREE_CODE (decl) != FUNCTION_DECL)
13667     {
13668       error ("explicit instantiation of %q#D", decl);
13669       return;
13670     }
13671   else
13672     result = decl;
13673
13674   /* Check for various error cases.  Note that if the explicit
13675      instantiation is valid the RESULT will currently be marked as an
13676      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
13677      until we get here.  */
13678
13679   if (DECL_TEMPLATE_SPECIALIZATION (result))
13680     {
13681       /* DR 259 [temp.spec].
13682
13683          Both an explicit instantiation and a declaration of an explicit
13684          specialization shall not appear in a program unless the explicit
13685          instantiation follows a declaration of the explicit specialization.
13686
13687          For a given set of template parameters, if an explicit
13688          instantiation of a template appears after a declaration of an
13689          explicit specialization for that template, the explicit
13690          instantiation has no effect.  */
13691       return;
13692     }
13693   else if (DECL_EXPLICIT_INSTANTIATION (result))
13694     {
13695       /* [temp.spec]
13696
13697          No program shall explicitly instantiate any template more
13698          than once.
13699
13700          We check DECL_NOT_REALLY_EXTERN so as not to complain when
13701          the first instantiation was `extern' and the second is not,
13702          and EXTERN_P for the opposite case.  */
13703       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
13704         pedwarn ("duplicate explicit instantiation of %q#D", result);
13705       /* If an "extern" explicit instantiation follows an ordinary
13706          explicit instantiation, the template is instantiated.  */
13707       if (extern_p)
13708         return;
13709     }
13710   else if (!DECL_IMPLICIT_INSTANTIATION (result))
13711     {
13712       error ("no matching template for %qD found", result);
13713       return;
13714     }
13715   else if (!DECL_TEMPLATE_INFO (result))
13716     {
13717       pedwarn ("explicit instantiation of non-template %q#D", result);
13718       return;
13719     }
13720
13721   if (storage == NULL_TREE)
13722     ;
13723   else if (storage == ridpointers[(int) RID_EXTERN])
13724     {
13725       if (pedantic && !in_system_header)
13726         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
13727                  "instantiations");
13728       extern_p = 1;
13729     }
13730   else
13731     error ("storage class %qD applied to template instantiation", storage);
13732
13733   check_explicit_instantiation_namespace (result);
13734   mark_decl_instantiated (result, extern_p);
13735   if (! extern_p)
13736     instantiate_decl (result, /*defer_ok=*/1,
13737                       /*expl_inst_class_mem_p=*/false);
13738 }
13739
13740 static void
13741 mark_class_instantiated (tree t, int extern_p)
13742 {
13743   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
13744   SET_CLASSTYPE_INTERFACE_KNOWN (t);
13745   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
13746   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
13747   if (! extern_p)
13748     {
13749       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
13750       rest_of_type_compilation (t, 1);
13751     }
13752 }
13753
13754 /* Called from do_type_instantiation through binding_table_foreach to
13755    do recursive instantiation for the type bound in ENTRY.  */
13756 static void
13757 bt_instantiate_type_proc (binding_entry entry, void *data)
13758 {
13759   tree storage = *(tree *) data;
13760
13761   if (IS_AGGR_TYPE (entry->type)
13762       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
13763     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
13764 }
13765
13766 /* Called from do_type_instantiation to instantiate a member
13767    (a member function or a static member variable) of an
13768    explicitly instantiated class template.  */
13769 static void
13770 instantiate_class_member (tree decl, int extern_p)
13771 {
13772   mark_decl_instantiated (decl, extern_p);
13773   if (! extern_p)
13774     instantiate_decl (decl, /*defer_ok=*/1,
13775                       /*expl_inst_class_mem_p=*/true);
13776 }
13777
13778 /* Perform an explicit instantiation of template class T.  STORAGE, if
13779    non-null, is the RID for extern, inline or static.  COMPLAIN is
13780    nonzero if this is called from the parser, zero if called recursively,
13781    since the standard is unclear (as detailed below).  */
13782
13783 void
13784 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
13785 {
13786   int extern_p = 0;
13787   int nomem_p = 0;
13788   int static_p = 0;
13789   int previous_instantiation_extern_p = 0;
13790
13791   if (TREE_CODE (t) == TYPE_DECL)
13792     t = TREE_TYPE (t);
13793
13794   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
13795     {
13796       error ("explicit instantiation of non-template type %qT", t);
13797       return;
13798     }
13799
13800   complete_type (t);
13801
13802   if (!COMPLETE_TYPE_P (t))
13803     {
13804       if (complain & tf_error)
13805         error ("explicit instantiation of %q#T before definition of template",
13806                t);
13807       return;
13808     }
13809
13810   if (storage != NULL_TREE)
13811     {
13812       if (pedantic && !in_system_header)
13813         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations",
13814                 storage);
13815
13816       if (storage == ridpointers[(int) RID_INLINE])
13817         nomem_p = 1;
13818       else if (storage == ridpointers[(int) RID_EXTERN])
13819         extern_p = 1;
13820       else if (storage == ridpointers[(int) RID_STATIC])
13821         static_p = 1;
13822       else
13823         {
13824           error ("storage class %qD applied to template instantiation",
13825                  storage);
13826           extern_p = 0;
13827         }
13828     }
13829
13830   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
13831     {
13832       /* DR 259 [temp.spec].
13833
13834          Both an explicit instantiation and a declaration of an explicit
13835          specialization shall not appear in a program unless the explicit
13836          instantiation follows a declaration of the explicit specialization.
13837
13838          For a given set of template parameters, if an explicit
13839          instantiation of a template appears after a declaration of an
13840          explicit specialization for that template, the explicit
13841          instantiation has no effect.  */
13842       return;
13843     }
13844   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
13845     {
13846       /* [temp.spec]
13847
13848          No program shall explicitly instantiate any template more
13849          than once.
13850
13851          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
13852          instantiation was `extern'.  If EXTERN_P then the second is.
13853          These cases are OK.  */
13854       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
13855
13856       if (!previous_instantiation_extern_p && !extern_p
13857           && (complain & tf_error))
13858         pedwarn ("duplicate explicit instantiation of %q#T", t);
13859
13860       /* If we've already instantiated the template, just return now.  */
13861       if (!CLASSTYPE_INTERFACE_ONLY (t))
13862         return;
13863     }
13864
13865   check_explicit_instantiation_namespace (TYPE_NAME (t));
13866   mark_class_instantiated (t, extern_p);
13867
13868   if (nomem_p)
13869     return;
13870
13871   {
13872     tree tmp;
13873
13874     /* In contrast to implicit instantiation, where only the
13875        declarations, and not the definitions, of members are
13876        instantiated, we have here:
13877
13878          [temp.explicit]
13879
13880          The explicit instantiation of a class template specialization
13881          implies the instantiation of all of its members not
13882          previously explicitly specialized in the translation unit
13883          containing the explicit instantiation.
13884
13885        Of course, we can't instantiate member template classes, since
13886        we don't have any arguments for them.  Note that the standard
13887        is unclear on whether the instantiation of the members are
13888        *explicit* instantiations or not.  However, the most natural
13889        interpretation is that it should be an explicit instantiation.  */
13890
13891     if (! static_p)
13892       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
13893         if (TREE_CODE (tmp) == FUNCTION_DECL
13894             && DECL_TEMPLATE_INSTANTIATION (tmp))
13895           instantiate_class_member (tmp, extern_p);
13896
13897     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
13898       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
13899         instantiate_class_member (tmp, extern_p);
13900
13901     if (CLASSTYPE_NESTED_UTDS (t))
13902       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
13903                              bt_instantiate_type_proc, &storage);
13904   }
13905 }
13906
13907 /* Given a function DECL, which is a specialization of TMPL, modify
13908    DECL to be a re-instantiation of TMPL with the same template
13909    arguments.  TMPL should be the template into which tsubst'ing
13910    should occur for DECL, not the most general template.
13911
13912    One reason for doing this is a scenario like this:
13913
13914      template <class T>
13915      void f(const T&, int i);
13916
13917      void g() { f(3, 7); }
13918
13919      template <class T>
13920      void f(const T& t, const int i) { }
13921
13922    Note that when the template is first instantiated, with
13923    instantiate_template, the resulting DECL will have no name for the
13924    first parameter, and the wrong type for the second.  So, when we go
13925    to instantiate the DECL, we regenerate it.  */
13926
13927 static void
13928 regenerate_decl_from_template (tree decl, tree tmpl)
13929 {
13930   /* The arguments used to instantiate DECL, from the most general
13931      template.  */
13932   tree args;
13933   tree code_pattern;
13934
13935   args = DECL_TI_ARGS (decl);
13936   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
13937
13938   /* Make sure that we can see identifiers, and compute access
13939      correctly.  */
13940   push_access_scope (decl);
13941
13942   if (TREE_CODE (decl) == FUNCTION_DECL)
13943     {
13944       tree decl_parm;
13945       tree pattern_parm;
13946       tree specs;
13947       int args_depth;
13948       int parms_depth;
13949
13950       args_depth = TMPL_ARGS_DEPTH (args);
13951       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
13952       if (args_depth > parms_depth)
13953         args = get_innermost_template_args (args, parms_depth);
13954
13955       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
13956                                               args, tf_error, NULL_TREE);
13957       if (specs)
13958         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
13959                                                     specs);
13960
13961       /* Merge parameter declarations.  */
13962       decl_parm = skip_artificial_parms_for (decl,
13963                                              DECL_ARGUMENTS (decl));
13964       pattern_parm
13965         = skip_artificial_parms_for (code_pattern,
13966                                      DECL_ARGUMENTS (code_pattern));
13967       while (decl_parm && !FUNCTION_PARAMETER_PACK_P (pattern_parm))
13968         {
13969           tree parm_type;
13970           tree attributes;
13971           
13972           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
13973             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
13974           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
13975                               NULL_TREE);
13976           parm_type = type_decays_to (parm_type);
13977           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
13978             TREE_TYPE (decl_parm) = parm_type;
13979           attributes = DECL_ATTRIBUTES (pattern_parm);
13980           if (DECL_ATTRIBUTES (decl_parm) != attributes)
13981             {
13982               DECL_ATTRIBUTES (decl_parm) = attributes;
13983               cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
13984             }
13985           decl_parm = TREE_CHAIN (decl_parm);
13986           pattern_parm = TREE_CHAIN (pattern_parm);
13987         }
13988       /* Merge any parameters that match with the function parameter
13989          pack.  */
13990       if (pattern_parm && FUNCTION_PARAMETER_PACK_P (pattern_parm))
13991         {
13992           int i, len;
13993           tree expanded_types;
13994           /* Expand the TYPE_PACK_EXPANSION that provides the types for
13995              the parameters in this function parameter pack.  */
13996           expanded_types = tsubst_pack_expansion (TREE_TYPE (pattern_parm), 
13997                                                  args, tf_error, NULL_TREE);
13998           len = TREE_VEC_LENGTH (expanded_types);
13999           for (i = 0; i < len; i++)
14000             {
14001               tree parm_type;
14002               tree attributes;
14003           
14004               if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
14005                 /* Rename the parameter to include the index.  */
14006                 DECL_NAME (decl_parm) = 
14007                   make_ith_pack_parameter_name (DECL_NAME (pattern_parm), i);
14008               parm_type = TREE_VEC_ELT (expanded_types, i);
14009               parm_type = type_decays_to (parm_type);
14010               if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
14011                 TREE_TYPE (decl_parm) = parm_type;
14012               attributes = DECL_ATTRIBUTES (pattern_parm);
14013               if (DECL_ATTRIBUTES (decl_parm) != attributes)
14014                 {
14015                   DECL_ATTRIBUTES (decl_parm) = attributes;
14016                   cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0);
14017                 }
14018               decl_parm = TREE_CHAIN (decl_parm);
14019             }
14020         }
14021       /* Merge additional specifiers from the CODE_PATTERN.  */
14022       if (DECL_DECLARED_INLINE_P (code_pattern)
14023           && !DECL_DECLARED_INLINE_P (decl))
14024         DECL_DECLARED_INLINE_P (decl) = 1;
14025       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
14026         DECL_INLINE (decl) = 1;
14027     }
14028   else if (TREE_CODE (decl) == VAR_DECL)
14029     DECL_INITIAL (decl) =
14030       tsubst_expr (DECL_INITIAL (code_pattern), args,
14031                    tf_error, DECL_TI_TEMPLATE (decl),
14032                    /*integral_constant_expression_p=*/false);
14033   else
14034     gcc_unreachable ();
14035
14036   pop_access_scope (decl);
14037 }
14038
14039 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
14040    substituted to get DECL.  */
14041
14042 tree
14043 template_for_substitution (tree decl)
14044 {
14045   tree tmpl = DECL_TI_TEMPLATE (decl);
14046
14047   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
14048      for the instantiation.  This is not always the most general
14049      template.  Consider, for example:
14050
14051         template <class T>
14052         struct S { template <class U> void f();
14053                    template <> void f<int>(); };
14054
14055      and an instantiation of S<double>::f<int>.  We want TD to be the
14056      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
14057   while (/* An instantiation cannot have a definition, so we need a
14058             more general template.  */
14059          DECL_TEMPLATE_INSTANTIATION (tmpl)
14060            /* We must also deal with friend templates.  Given:
14061
14062                 template <class T> struct S {
14063                   template <class U> friend void f() {};
14064                 };
14065
14066               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
14067               so far as the language is concerned, but that's still
14068               where we get the pattern for the instantiation from.  On
14069               other hand, if the definition comes outside the class, say:
14070
14071                 template <class T> struct S {
14072                   template <class U> friend void f();
14073                 };
14074                 template <class U> friend void f() {}
14075
14076               we don't need to look any further.  That's what the check for
14077               DECL_INITIAL is for.  */
14078           || (TREE_CODE (decl) == FUNCTION_DECL
14079               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
14080               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
14081     {
14082       /* The present template, TD, should not be a definition.  If it
14083          were a definition, we should be using it!  Note that we
14084          cannot restructure the loop to just keep going until we find
14085          a template with a definition, since that might go too far if
14086          a specialization was declared, but not defined.  */
14087       gcc_assert (TREE_CODE (decl) != VAR_DECL
14088                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
14089
14090       /* Fetch the more general template.  */
14091       tmpl = DECL_TI_TEMPLATE (tmpl);
14092     }
14093
14094   return tmpl;
14095 }
14096
14097 /* Produce the definition of D, a _DECL generated from a template.  If
14098    DEFER_OK is nonzero, then we don't have to actually do the
14099    instantiation now; we just have to do it sometime.  Normally it is
14100    an error if this is an explicit instantiation but D is undefined.
14101    EXPL_INST_CLASS_MEM_P is true iff D is a member of an
14102    explicitly instantiated class template.  */
14103
14104 tree
14105 instantiate_decl (tree d, int defer_ok,
14106                   bool expl_inst_class_mem_p)
14107 {
14108   tree tmpl = DECL_TI_TEMPLATE (d);
14109   tree gen_args;
14110   tree args;
14111   tree td;
14112   tree code_pattern;
14113   tree spec;
14114   tree gen_tmpl;
14115   bool pattern_defined;
14116   int need_push;
14117   location_t saved_loc = input_location;
14118   int saved_in_system_header = in_system_header;
14119   bool external_p;
14120
14121   /* This function should only be used to instantiate templates for
14122      functions and static member variables.  */
14123   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
14124               || TREE_CODE (d) == VAR_DECL);
14125
14126   /* Variables are never deferred; if instantiation is required, they
14127      are instantiated right away.  That allows for better code in the
14128      case that an expression refers to the value of the variable --
14129      if the variable has a constant value the referring expression can
14130      take advantage of that fact.  */
14131   if (TREE_CODE (d) == VAR_DECL)
14132     defer_ok = 0;
14133
14134   /* Don't instantiate cloned functions.  Instead, instantiate the
14135      functions they cloned.  */
14136   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
14137     d = DECL_CLONED_FUNCTION (d);
14138
14139   if (DECL_TEMPLATE_INSTANTIATED (d))
14140     /* D has already been instantiated.  It might seem reasonable to
14141        check whether or not D is an explicit instantiation, and, if so,
14142        stop here.  But when an explicit instantiation is deferred
14143        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
14144        is set, even though we still need to do the instantiation.  */
14145     return d;
14146
14147   /* If we already have a specialization of this declaration, then
14148      there's no reason to instantiate it.  Note that
14149      retrieve_specialization gives us both instantiations and
14150      specializations, so we must explicitly check
14151      DECL_TEMPLATE_SPECIALIZATION.  */
14152   gen_tmpl = most_general_template (tmpl);
14153   gen_args = DECL_TI_ARGS (d);
14154   spec = retrieve_specialization (gen_tmpl, gen_args,
14155                                   /*class_specializations_p=*/false);
14156   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
14157     return spec;
14158
14159   /* This needs to happen before any tsubsting.  */
14160   if (! push_tinst_level (d))
14161     return d;
14162
14163   timevar_push (TV_PARSE);
14164
14165   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
14166      for the instantiation.  */
14167   td = template_for_substitution (d);
14168   code_pattern = DECL_TEMPLATE_RESULT (td);
14169
14170   /* We should never be trying to instantiate a member of a class
14171      template or partial specialization.  */
14172   gcc_assert (d != code_pattern);
14173
14174   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
14175       || DECL_TEMPLATE_SPECIALIZATION (td))
14176     /* In the case of a friend template whose definition is provided
14177        outside the class, we may have too many arguments.  Drop the
14178        ones we don't need.  The same is true for specializations.  */
14179     args = get_innermost_template_args
14180       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
14181   else
14182     args = gen_args;
14183
14184   if (TREE_CODE (d) == FUNCTION_DECL)
14185     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
14186   else
14187     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
14188
14189   /* We may be in the middle of deferred access check.  Disable it now.  */
14190   push_deferring_access_checks (dk_no_deferred);
14191
14192   /* Unless an explicit instantiation directive has already determined
14193      the linkage of D, remember that a definition is available for
14194      this entity.  */
14195   if (pattern_defined
14196       && !DECL_INTERFACE_KNOWN (d)
14197       && !DECL_NOT_REALLY_EXTERN (d))
14198     mark_definable (d);
14199
14200   input_location = DECL_SOURCE_LOCATION (d);
14201   in_system_header = DECL_IN_SYSTEM_HEADER (d);
14202
14203   /* If D is a member of an explicitly instantiated class template,
14204      and no definition is available, treat it like an implicit
14205      instantiation.  */
14206   if (!pattern_defined && expl_inst_class_mem_p
14207       && DECL_EXPLICIT_INSTANTIATION (d))
14208     {
14209       DECL_NOT_REALLY_EXTERN (d) = 0;
14210       DECL_INTERFACE_KNOWN (d) = 0;
14211       SET_DECL_IMPLICIT_INSTANTIATION (d);
14212     }
14213
14214   if (!defer_ok)
14215     {
14216       /* Recheck the substitutions to obtain any warning messages
14217          about ignoring cv qualifiers.  */
14218       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
14219       tree type = TREE_TYPE (gen);
14220
14221       /* Make sure that we can see identifiers, and compute access
14222          correctly.  D is already the target FUNCTION_DECL with the
14223          right context.  */
14224       push_access_scope (d);
14225
14226       if (TREE_CODE (gen) == FUNCTION_DECL)
14227         {
14228           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_warning_or_error, d);
14229           tsubst_exception_specification (type, gen_args, tf_warning_or_error,
14230                                           d);
14231           /* Don't simply tsubst the function type, as that will give
14232              duplicate warnings about poor parameter qualifications.
14233              The function arguments are the same as the decl_arguments
14234              without the top level cv qualifiers.  */
14235           type = TREE_TYPE (type);
14236         }
14237       tsubst (type, gen_args, tf_warning_or_error, d);
14238
14239       pop_access_scope (d);
14240     }
14241
14242   /* Check to see whether we know that this template will be
14243      instantiated in some other file, as with "extern template"
14244      extension.  */
14245   external_p = (DECL_INTERFACE_KNOWN (d) && DECL_REALLY_EXTERN (d));
14246   /* In general, we do not instantiate such templates...  */
14247   if (external_p
14248       /* ... but we instantiate inline functions so that we can inline
14249          them and ... */
14250       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))
14251       /* ... we instantiate static data members whose values are
14252          needed in integral constant expressions.  */
14253       && ! (TREE_CODE (d) == VAR_DECL
14254             && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (d)))
14255     goto out;
14256   /* Defer all other templates, unless we have been explicitly
14257      forbidden from doing so.  */
14258   if (/* If there is no definition, we cannot instantiate the
14259          template.  */
14260       ! pattern_defined
14261       /* If it's OK to postpone instantiation, do so.  */
14262       || defer_ok
14263       /* If this is a static data member that will be defined
14264          elsewhere, we don't want to instantiate the entire data
14265          member, but we do want to instantiate the initializer so that
14266          we can substitute that elsewhere.  */
14267       || (external_p && TREE_CODE (d) == VAR_DECL))
14268     {
14269       /* The definition of the static data member is now required so
14270          we must substitute the initializer.  */
14271       if (TREE_CODE (d) == VAR_DECL
14272           && !DECL_INITIAL (d)
14273           && DECL_INITIAL (code_pattern))
14274         {
14275           tree ns;
14276           tree init;
14277
14278           ns = decl_namespace_context (d);
14279           push_nested_namespace (ns);
14280           push_nested_class (DECL_CONTEXT (d));
14281           init = tsubst_expr (DECL_INITIAL (code_pattern),
14282                               args,
14283                               tf_warning_or_error, NULL_TREE,
14284                               /*integral_constant_expression_p=*/false);
14285           cp_finish_decl (d, init, /*init_const_expr_p=*/false,
14286                           /*asmspec_tree=*/NULL_TREE,
14287                           LOOKUP_ONLYCONVERTING);
14288           pop_nested_class ();
14289           pop_nested_namespace (ns);
14290         }
14291
14292       /* We restore the source position here because it's used by
14293          add_pending_template.  */
14294       input_location = saved_loc;
14295
14296       if (at_eof && !pattern_defined
14297           && DECL_EXPLICIT_INSTANTIATION (d))
14298         /* [temp.explicit]
14299
14300            The definition of a non-exported function template, a
14301            non-exported member function template, or a non-exported
14302            member function or static data member of a class template
14303            shall be present in every translation unit in which it is
14304            explicitly instantiated.  */
14305         pedwarn
14306           ("explicit instantiation of %qD but no definition available", d);
14307
14308       /* ??? Historically, we have instantiated inline functions, even
14309          when marked as "extern template".  */
14310       if (!(external_p && TREE_CODE (d) == VAR_DECL))
14311         add_pending_template (d);
14312       goto out;
14313     }
14314   /* Tell the repository that D is available in this translation unit
14315      -- and see if it is supposed to be instantiated here.  */
14316   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
14317     {
14318       /* In a PCH file, despite the fact that the repository hasn't
14319          requested instantiation in the PCH it is still possible that
14320          an instantiation will be required in a file that includes the
14321          PCH.  */
14322       if (pch_file)
14323         add_pending_template (d);
14324       /* Instantiate inline functions so that the inliner can do its
14325          job, even though we'll not be emitting a copy of this
14326          function.  */
14327       if (!(TREE_CODE (d) == FUNCTION_DECL
14328             && flag_inline_trees
14329             && DECL_DECLARED_INLINE_P (d)))
14330         goto out;
14331     }
14332
14333   need_push = !cfun || !global_bindings_p ();
14334   if (need_push)
14335     push_to_top_level ();
14336
14337   /* Mark D as instantiated so that recursive calls to
14338      instantiate_decl do not try to instantiate it again.  */
14339   DECL_TEMPLATE_INSTANTIATED (d) = 1;
14340
14341   /* Regenerate the declaration in case the template has been modified
14342      by a subsequent redeclaration.  */
14343   regenerate_decl_from_template (d, td);
14344
14345   /* We already set the file and line above.  Reset them now in case
14346      they changed as a result of calling regenerate_decl_from_template.  */
14347   input_location = DECL_SOURCE_LOCATION (d);
14348
14349   if (TREE_CODE (d) == VAR_DECL)
14350     {
14351       tree init;
14352
14353       /* Clear out DECL_RTL; whatever was there before may not be right
14354          since we've reset the type of the declaration.  */
14355       SET_DECL_RTL (d, NULL_RTX);
14356       DECL_IN_AGGR_P (d) = 0;
14357
14358       /* The initializer is placed in DECL_INITIAL by
14359          regenerate_decl_from_template.  Pull it out so that
14360          finish_decl can process it.  */
14361       init = DECL_INITIAL (d);
14362       DECL_INITIAL (d) = NULL_TREE;
14363       DECL_INITIALIZED_P (d) = 0;
14364
14365       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
14366          initializer.  That function will defer actual emission until
14367          we have a chance to determine linkage.  */
14368       DECL_EXTERNAL (d) = 0;
14369
14370       /* Enter the scope of D so that access-checking works correctly.  */
14371       push_nested_class (DECL_CONTEXT (d));
14372       finish_decl (d, init, NULL_TREE);
14373       pop_nested_class ();
14374     }
14375   else if (TREE_CODE (d) == FUNCTION_DECL)
14376     {
14377       htab_t saved_local_specializations;
14378       tree subst_decl;
14379       tree tmpl_parm;
14380       tree spec_parm;
14381
14382       /* Save away the current list, in case we are instantiating one
14383          template from within the body of another.  */
14384       saved_local_specializations = local_specializations;
14385
14386       /* Set up the list of local specializations.  */
14387       local_specializations = htab_create (37,
14388                                            hash_local_specialization,
14389                                            eq_local_specializations,
14390                                            NULL);
14391
14392       /* Set up context.  */
14393       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
14394
14395       /* Create substitution entries for the parameters.  */
14396       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
14397       tmpl_parm = DECL_ARGUMENTS (subst_decl);
14398       spec_parm = DECL_ARGUMENTS (d);
14399       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
14400         {
14401           register_local_specialization (spec_parm, tmpl_parm);
14402           spec_parm = skip_artificial_parms_for (d, spec_parm);
14403           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
14404         }
14405       while (tmpl_parm && !FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14406         {
14407           register_local_specialization (spec_parm, tmpl_parm);
14408           tmpl_parm = TREE_CHAIN (tmpl_parm);
14409           spec_parm = TREE_CHAIN (spec_parm);
14410         }
14411       if (tmpl_parm && FUNCTION_PARAMETER_PACK_P (tmpl_parm))
14412         {
14413           /* Collect all of the extra "packed" parameters into an
14414              argument pack.  */
14415           tree parmvec;
14416           tree parmtypevec;
14417           tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
14418           tree argtypepack = make_node (TYPE_ARGUMENT_PACK);
14419           int i, len = 0;
14420           tree t;
14421           
14422           /* Count how many parameters remain.  */
14423           for (t = spec_parm; t; t = TREE_CHAIN (t))
14424             len++;
14425
14426           /* Fill in PARMVEC and PARMTYPEVEC with all of the parameters.  */
14427           parmvec = make_tree_vec (len);
14428           parmtypevec = make_tree_vec (len);
14429           for(i = 0; i < len; i++, spec_parm = TREE_CHAIN (spec_parm))
14430             {
14431               TREE_VEC_ELT (parmvec, i) = spec_parm;
14432               TREE_VEC_ELT (parmtypevec, i) = TREE_TYPE (spec_parm);
14433             }
14434
14435           /* Build the argument packs.  */
14436           SET_ARGUMENT_PACK_ARGS (argpack, parmvec);
14437           SET_ARGUMENT_PACK_ARGS (argtypepack, parmtypevec);
14438           TREE_TYPE (argpack) = argtypepack;
14439           
14440           /* Register the (value) argument pack as a specialization of
14441              TMPL_PARM, then move on.  */
14442           register_local_specialization (argpack, tmpl_parm);
14443           tmpl_parm = TREE_CHAIN (tmpl_parm);
14444         }
14445       gcc_assert (!spec_parm);
14446
14447       /* Substitute into the body of the function.  */
14448       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
14449                    tf_warning_or_error, tmpl,
14450                    /*integral_constant_expression_p=*/false);
14451
14452       /* Set the current input_location to the end of the function
14453          so that finish_function knows where we are.  */
14454       input_location = DECL_STRUCT_FUNCTION (code_pattern)->function_end_locus;
14455
14456       /* We don't need the local specializations any more.  */
14457       htab_delete (local_specializations);
14458       local_specializations = saved_local_specializations;
14459
14460       /* Finish the function.  */
14461       d = finish_function (0);
14462       expand_or_defer_fn (d);
14463     }
14464
14465   /* We're not deferring instantiation any more.  */
14466   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
14467
14468   if (need_push)
14469     pop_from_top_level ();
14470
14471 out:
14472   input_location = saved_loc;
14473   in_system_header = saved_in_system_header;
14474   pop_deferring_access_checks ();
14475   pop_tinst_level ();
14476
14477   timevar_pop (TV_PARSE);
14478
14479   return d;
14480 }
14481
14482 /* Run through the list of templates that we wish we could
14483    instantiate, and instantiate any we can.  RETRIES is the
14484    number of times we retry pending template instantiation.  */
14485
14486 void
14487 instantiate_pending_templates (int retries)
14488 {
14489   tree *t;
14490   tree last = NULL_TREE;
14491   int reconsider;
14492   location_t saved_loc = input_location;
14493   int saved_in_system_header = in_system_header;
14494
14495   /* Instantiating templates may trigger vtable generation.  This in turn
14496      may require further template instantiations.  We place a limit here
14497      to avoid infinite loop.  */
14498   if (pending_templates && retries >= max_tinst_depth)
14499     {
14500       tree decl = TREE_VALUE (pending_templates);
14501
14502       error ("template instantiation depth exceeds maximum of %d"
14503              " instantiating %q+D, possibly from virtual table generation"
14504              " (use -ftemplate-depth-NN to increase the maximum)",
14505              max_tinst_depth, decl);
14506       if (TREE_CODE (decl) == FUNCTION_DECL)
14507         /* Pretend that we defined it.  */
14508         DECL_INITIAL (decl) = error_mark_node;
14509       return;
14510     }
14511
14512   do
14513     {
14514       reconsider = 0;
14515
14516       t = &pending_templates;
14517       while (*t)
14518         {
14519           tree instantiation = TREE_VALUE (*t);
14520
14521           reopen_tinst_level (TREE_PURPOSE (*t));
14522
14523           if (TYPE_P (instantiation))
14524             {
14525               tree fn;
14526
14527               if (!COMPLETE_TYPE_P (instantiation))
14528                 {
14529                   instantiate_class_template (instantiation);
14530                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
14531                     for (fn = TYPE_METHODS (instantiation);
14532                          fn;
14533                          fn = TREE_CHAIN (fn))
14534                       if (! DECL_ARTIFICIAL (fn))
14535                         instantiate_decl (fn,
14536                                           /*defer_ok=*/0,
14537                                           /*expl_inst_class_mem_p=*/false);
14538                   if (COMPLETE_TYPE_P (instantiation))
14539                     reconsider = 1;
14540                 }
14541
14542               if (COMPLETE_TYPE_P (instantiation))
14543                 /* If INSTANTIATION has been instantiated, then we don't
14544                    need to consider it again in the future.  */
14545                 *t = TREE_CHAIN (*t);
14546               else
14547                 {
14548                   last = *t;
14549                   t = &TREE_CHAIN (*t);
14550                 }
14551             }
14552           else
14553             {
14554               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
14555                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
14556                 {
14557                   instantiation
14558                     = instantiate_decl (instantiation,
14559                                         /*defer_ok=*/0,
14560                                         /*expl_inst_class_mem_p=*/false);
14561                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
14562                     reconsider = 1;
14563                 }
14564
14565               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
14566                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
14567                 /* If INSTANTIATION has been instantiated, then we don't
14568                    need to consider it again in the future.  */
14569                 *t = TREE_CHAIN (*t);
14570               else
14571                 {
14572                   last = *t;
14573                   t = &TREE_CHAIN (*t);
14574                 }
14575             }
14576           tinst_depth = 0;
14577           current_tinst_level = NULL_TREE;
14578         }
14579       last_pending_template = last;
14580     }
14581   while (reconsider);
14582
14583   input_location = saved_loc;
14584   in_system_header = saved_in_system_header;
14585 }
14586
14587 /* Substitute ARGVEC into T, which is a list of initializers for
14588    either base class or a non-static data member.  The TREE_PURPOSEs
14589    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
14590    instantiate_decl.  */
14591
14592 static tree
14593 tsubst_initializer_list (tree t, tree argvec)
14594 {
14595   tree inits = NULL_TREE;
14596
14597   for (; t; t = TREE_CHAIN (t))
14598     {
14599       tree decl;
14600       tree init;
14601       tree expanded_bases = NULL_TREE;
14602       tree expanded_arguments = NULL_TREE;
14603       int i, len = 1;
14604
14605       if (TREE_CODE (TREE_PURPOSE (t)) == TYPE_PACK_EXPANSION)
14606         {
14607           tree expr;
14608           tree arg;
14609
14610           /* Expand the base class expansion type into separate base
14611              classes.  */
14612           expanded_bases = tsubst_pack_expansion (TREE_PURPOSE (t), argvec,
14613                                                  tf_warning_or_error,
14614                                                  NULL_TREE);
14615           if (expanded_bases == error_mark_node)
14616             continue;
14617           
14618           /* We'll be building separate TREE_LISTs of arguments for
14619              each base.  */
14620           len = TREE_VEC_LENGTH (expanded_bases);
14621           expanded_arguments = make_tree_vec (len);
14622           for (i = 0; i < len; i++)
14623             TREE_VEC_ELT (expanded_arguments, i) = NULL_TREE;
14624
14625           /* Build a dummy EXPR_PACK_EXPANSION that will be used to
14626              expand each argument in the TREE_VALUE of t.  */
14627           expr = make_node (EXPR_PACK_EXPANSION);
14628           PACK_EXPANSION_PARAMETER_PACKS (expr) =
14629             PACK_EXPANSION_PARAMETER_PACKS (TREE_PURPOSE (t));
14630
14631           /* Substitute parameter packs into each argument in the
14632              TREE_LIST.  */
14633           in_base_initializer = 1;
14634           for (arg = TREE_VALUE (t); arg; arg = TREE_CHAIN (arg))
14635             {
14636               tree expanded_exprs;
14637
14638               /* Expand the argument.  */
14639               SET_PACK_EXPANSION_PATTERN (expr, TREE_VALUE (arg));
14640               expanded_exprs = tsubst_pack_expansion (expr, argvec,
14641                                                       tf_warning_or_error,
14642                                                       NULL_TREE);
14643
14644               /* Prepend each of the expanded expressions to the
14645                  corresponding TREE_LIST in EXPANDED_ARGUMENTS.  */
14646               for (i = 0; i < len; i++)
14647                 {
14648                   TREE_VEC_ELT (expanded_arguments, i) = 
14649                     tree_cons (NULL_TREE, TREE_VEC_ELT (expanded_exprs, i),
14650                                TREE_VEC_ELT (expanded_arguments, i));
14651                 }
14652             }
14653           in_base_initializer = 0;
14654
14655           /* Reverse all of the TREE_LISTs in EXPANDED_ARGUMENTS,
14656              since we built them backwards.  */
14657           for (i = 0; i < len; i++)
14658             {
14659               TREE_VEC_ELT (expanded_arguments, i) = 
14660                 nreverse (TREE_VEC_ELT (expanded_arguments, i));
14661             }
14662         }
14663
14664       for (i = 0; i < len; ++i)
14665         {
14666           if (expanded_bases)
14667             {
14668               decl = TREE_VEC_ELT (expanded_bases, i);
14669               decl = expand_member_init (decl);
14670               init = TREE_VEC_ELT (expanded_arguments, i);
14671             }
14672           else
14673             {
14674               decl = tsubst_copy (TREE_PURPOSE (t), argvec, 
14675                                   tf_warning_or_error, NULL_TREE);
14676
14677               decl = expand_member_init (decl);
14678               if (decl && !DECL_P (decl))
14679                 in_base_initializer = 1;
14680
14681               init = tsubst_expr (TREE_VALUE (t), argvec, 
14682                                   tf_warning_or_error, NULL_TREE,
14683                                   /*integral_constant_expression_p=*/false);
14684               in_base_initializer = 0;
14685             }
14686
14687           if (decl)
14688             {
14689               init = build_tree_list (decl, init);
14690               TREE_CHAIN (init) = inits;
14691               inits = init;
14692             }
14693         }
14694     }
14695   return inits;
14696 }
14697
14698 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
14699
14700 static void
14701 set_current_access_from_decl (tree decl)
14702 {
14703   if (TREE_PRIVATE (decl))
14704     current_access_specifier = access_private_node;
14705   else if (TREE_PROTECTED (decl))
14706     current_access_specifier = access_protected_node;
14707   else
14708     current_access_specifier = access_public_node;
14709 }
14710
14711 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
14712    is the instantiation (which should have been created with
14713    start_enum) and ARGS are the template arguments to use.  */
14714
14715 static void
14716 tsubst_enum (tree tag, tree newtag, tree args)
14717 {
14718   tree e;
14719
14720   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
14721     {
14722       tree value;
14723       tree decl;
14724
14725       decl = TREE_VALUE (e);
14726       /* Note that in a template enum, the TREE_VALUE is the
14727          CONST_DECL, not the corresponding INTEGER_CST.  */
14728       value = tsubst_expr (DECL_INITIAL (decl),
14729                            args, tf_warning_or_error, NULL_TREE,
14730                            /*integral_constant_expression_p=*/true);
14731
14732       /* Give this enumeration constant the correct access.  */
14733       set_current_access_from_decl (decl);
14734
14735       /* Actually build the enumerator itself.  */
14736       build_enumerator (DECL_NAME (decl), value, newtag);
14737     }
14738
14739   finish_enum (newtag);
14740   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
14741     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
14742 }
14743
14744 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
14745    its type -- but without substituting the innermost set of template
14746    arguments.  So, innermost set of template parameters will appear in
14747    the type.  */
14748
14749 tree
14750 get_mostly_instantiated_function_type (tree decl)
14751 {
14752   tree fn_type;
14753   tree tmpl;
14754   tree targs;
14755   tree tparms;
14756   int parm_depth;
14757
14758   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
14759   targs = DECL_TI_ARGS (decl);
14760   tparms = DECL_TEMPLATE_PARMS (tmpl);
14761   parm_depth = TMPL_PARMS_DEPTH (tparms);
14762
14763   /* There should be as many levels of arguments as there are levels
14764      of parameters.  */
14765   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
14766
14767   fn_type = TREE_TYPE (tmpl);
14768
14769   if (parm_depth == 1)
14770     /* No substitution is necessary.  */
14771     ;
14772   else
14773     {
14774       int i, save_access_control;
14775       tree partial_args;
14776
14777       /* Replace the innermost level of the TARGS with NULL_TREEs to
14778          let tsubst know not to substitute for those parameters.  */
14779       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
14780       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
14781         SET_TMPL_ARGS_LEVEL (partial_args, i,
14782                              TMPL_ARGS_LEVEL (targs, i));
14783       SET_TMPL_ARGS_LEVEL (partial_args,
14784                            TMPL_ARGS_DEPTH (targs),
14785                            make_tree_vec (DECL_NTPARMS (tmpl)));
14786
14787       /* Disable access control as this function is used only during
14788          name-mangling.  */
14789       save_access_control = flag_access_control;
14790       flag_access_control = 0;
14791
14792       ++processing_template_decl;
14793       /* Now, do the (partial) substitution to figure out the
14794          appropriate function type.  */
14795       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
14796       --processing_template_decl;
14797
14798       /* Substitute into the template parameters to obtain the real
14799          innermost set of parameters.  This step is important if the
14800          innermost set of template parameters contains value
14801          parameters whose types depend on outer template parameters.  */
14802       TREE_VEC_LENGTH (partial_args)--;
14803       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
14804
14805       flag_access_control = save_access_control;
14806     }
14807
14808   return fn_type;
14809 }
14810
14811 /* Return truthvalue if we're processing a template different from
14812    the last one involved in diagnostics.  */
14813 int
14814 problematic_instantiation_changed (void)
14815 {
14816   return last_template_error_tick != tinst_level_tick;
14817 }
14818
14819 /* Remember current template involved in diagnostics.  */
14820 void
14821 record_last_problematic_instantiation (void)
14822 {
14823   last_template_error_tick = tinst_level_tick;
14824 }
14825
14826 tree
14827 current_instantiation (void)
14828 {
14829   return current_tinst_level;
14830 }
14831
14832 /* [temp.param] Check that template non-type parm TYPE is of an allowable
14833    type. Return zero for ok, nonzero for disallowed. Issue error and
14834    warning messages under control of COMPLAIN.  */
14835
14836 static int
14837 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
14838 {
14839   if (INTEGRAL_TYPE_P (type))
14840     return 0;
14841   else if (POINTER_TYPE_P (type))
14842     return 0;
14843   else if (TYPE_PTR_TO_MEMBER_P (type))
14844     return 0;
14845   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
14846     return 0;
14847   else if (TREE_CODE (type) == TYPENAME_TYPE)
14848     return 0;
14849
14850   if (complain & tf_error)
14851     error ("%q#T is not a valid type for a template constant parameter", type);
14852   return 1;
14853 }
14854
14855 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
14856    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
14857
14858 static bool
14859 dependent_type_p_r (tree type)
14860 {
14861   tree scope;
14862
14863   /* [temp.dep.type]
14864
14865      A type is dependent if it is:
14866
14867      -- a template parameter. Template template parameters are types
14868         for us (since TYPE_P holds true for them) so we handle
14869         them here.  */
14870   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM
14871       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
14872     return true;
14873   /* -- a qualified-id with a nested-name-specifier which contains a
14874         class-name that names a dependent type or whose unqualified-id
14875         names a dependent type.  */
14876   if (TREE_CODE (type) == TYPENAME_TYPE)
14877     return true;
14878   /* -- a cv-qualified type where the cv-unqualified type is
14879         dependent.  */
14880   type = TYPE_MAIN_VARIANT (type);
14881   /* -- a compound type constructed from any dependent type.  */
14882   if (TYPE_PTR_TO_MEMBER_P (type))
14883     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
14884             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE
14885                                            (type)));
14886   else if (TREE_CODE (type) == POINTER_TYPE
14887            || TREE_CODE (type) == REFERENCE_TYPE)
14888     return dependent_type_p (TREE_TYPE (type));
14889   else if (TREE_CODE (type) == FUNCTION_TYPE
14890            || TREE_CODE (type) == METHOD_TYPE)
14891     {
14892       tree arg_type;
14893
14894       if (dependent_type_p (TREE_TYPE (type)))
14895         return true;
14896       for (arg_type = TYPE_ARG_TYPES (type);
14897            arg_type;
14898            arg_type = TREE_CHAIN (arg_type))
14899         if (dependent_type_p (TREE_VALUE (arg_type)))
14900           return true;
14901       return false;
14902     }
14903   /* -- an array type constructed from any dependent type or whose
14904         size is specified by a constant expression that is
14905         value-dependent.  */
14906   if (TREE_CODE (type) == ARRAY_TYPE)
14907     {
14908       if (TYPE_DOMAIN (type)
14909           && ((value_dependent_expression_p
14910                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
14911               || (type_dependent_expression_p
14912                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
14913         return true;
14914       return dependent_type_p (TREE_TYPE (type));
14915     }
14916
14917   /* -- a template-id in which either the template name is a template
14918      parameter ...  */
14919   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
14920     return true;
14921   /* ... or any of the template arguments is a dependent type or
14922         an expression that is type-dependent or value-dependent.  */
14923   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
14924            && (any_dependent_template_arguments_p
14925                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
14926     return true;
14927
14928   /* All TYPEOF_TYPEs and DECLTYPE_TYPEs are dependent; if the
14929      argument of the `typeof' expression is not type-dependent, then
14930      it should already been have resolved.  */
14931   if (TREE_CODE (type) == TYPEOF_TYPE
14932       || TREE_CODE (type) == DECLTYPE_TYPE)
14933     return true;
14934
14935   /* A template argument pack is dependent if any of its packed
14936      arguments are.  */
14937   if (TREE_CODE (type) == TYPE_ARGUMENT_PACK)
14938     {
14939       tree args = ARGUMENT_PACK_ARGS (type);
14940       int i, len = TREE_VEC_LENGTH (args);
14941       for (i = 0; i < len; ++i)
14942         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
14943           return true;
14944     }
14945
14946   /* All TYPE_PACK_EXPANSIONs are dependent, because parameter packs must
14947      be template parameters.  */
14948   if (TREE_CODE (type) == TYPE_PACK_EXPANSION)
14949     return true;
14950
14951   /* The standard does not specifically mention types that are local
14952      to template functions or local classes, but they should be
14953      considered dependent too.  For example:
14954
14955        template <int I> void f() {
14956          enum E { a = I };
14957          S<sizeof (E)> s;
14958        }
14959
14960      The size of `E' cannot be known until the value of `I' has been
14961      determined.  Therefore, `E' must be considered dependent.  */
14962   scope = TYPE_CONTEXT (type);
14963   if (scope && TYPE_P (scope))
14964     return dependent_type_p (scope);
14965   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
14966     return type_dependent_expression_p (scope);
14967
14968   /* Other types are non-dependent.  */
14969   return false;
14970 }
14971
14972 /* Returns TRUE if TYPE is dependent, in the sense of
14973    [temp.dep.type].  */
14974
14975 bool
14976 dependent_type_p (tree type)
14977 {
14978   /* If there are no template parameters in scope, then there can't be
14979      any dependent types.  */
14980   if (!processing_template_decl)
14981     {
14982       /* If we are not processing a template, then nobody should be
14983          providing us with a dependent type.  */
14984       gcc_assert (type);
14985       gcc_assert (TREE_CODE (type) != TEMPLATE_TYPE_PARM);
14986       return false;
14987     }
14988
14989   /* If the type is NULL, we have not computed a type for the entity
14990      in question; in that case, the type is dependent.  */
14991   if (!type)
14992     return true;
14993
14994   /* Erroneous types can be considered non-dependent.  */
14995   if (type == error_mark_node)
14996     return false;
14997
14998   /* If we have not already computed the appropriate value for TYPE,
14999      do so now.  */
15000   if (!TYPE_DEPENDENT_P_VALID (type))
15001     {
15002       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
15003       TYPE_DEPENDENT_P_VALID (type) = 1;
15004     }
15005
15006   return TYPE_DEPENDENT_P (type);
15007 }
15008
15009 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
15010
15011 static bool
15012 dependent_scope_ref_p (tree expression, bool criterion (tree))
15013 {
15014   tree scope;
15015   tree name;
15016
15017   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
15018
15019   if (!TYPE_P (TREE_OPERAND (expression, 0)))
15020     return true;
15021
15022   scope = TREE_OPERAND (expression, 0);
15023   name = TREE_OPERAND (expression, 1);
15024
15025   /* [temp.dep.expr]
15026
15027      An id-expression is type-dependent if it contains a
15028      nested-name-specifier that contains a class-name that names a
15029      dependent type.  */
15030   /* The suggested resolution to Core Issue 2 implies that if the
15031      qualifying type is the current class, then we must peek
15032      inside it.  */
15033   if (DECL_P (name)
15034       && currently_open_class (scope)
15035       && !criterion (name))
15036     return false;
15037   if (dependent_type_p (scope))
15038     return true;
15039
15040   return false;
15041 }
15042
15043 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
15044    [temp.dep.constexpr].  EXPRESSION is already known to be a constant
15045    expression.  */
15046
15047 bool
15048 value_dependent_expression_p (tree expression)
15049 {
15050   if (!processing_template_decl)
15051     return false;
15052
15053   /* A name declared with a dependent type.  */
15054   if (DECL_P (expression) && type_dependent_expression_p (expression))
15055     return true;
15056
15057   switch (TREE_CODE (expression))
15058     {
15059     case IDENTIFIER_NODE:
15060       /* A name that has not been looked up -- must be dependent.  */
15061       return true;
15062
15063     case TEMPLATE_PARM_INDEX:
15064       /* A non-type template parm.  */
15065       return true;
15066
15067     case CONST_DECL:
15068       /* A non-type template parm.  */
15069       if (DECL_TEMPLATE_PARM_P (expression))
15070         return true;
15071       return false;
15072
15073     case VAR_DECL:
15074        /* A constant with integral or enumeration type and is initialized
15075           with an expression that is value-dependent.  */
15076       if (DECL_INITIAL (expression)
15077           && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
15078           && value_dependent_expression_p (DECL_INITIAL (expression)))
15079         return true;
15080       return false;
15081
15082     case DYNAMIC_CAST_EXPR:
15083     case STATIC_CAST_EXPR:
15084     case CONST_CAST_EXPR:
15085     case REINTERPRET_CAST_EXPR:
15086     case CAST_EXPR:
15087       /* These expressions are value-dependent if the type to which
15088          the cast occurs is dependent or the expression being casted
15089          is value-dependent.  */
15090       {
15091         tree type = TREE_TYPE (expression);
15092
15093         if (dependent_type_p (type))
15094           return true;
15095
15096         /* A functional cast has a list of operands.  */
15097         expression = TREE_OPERAND (expression, 0);
15098         if (!expression)
15099           {
15100             /* If there are no operands, it must be an expression such
15101                as "int()". This should not happen for aggregate types
15102                because it would form non-constant expressions.  */
15103             gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
15104
15105             return false;
15106           }
15107
15108         if (TREE_CODE (expression) == TREE_LIST)
15109           return any_value_dependent_elements_p (expression);
15110
15111         return value_dependent_expression_p (expression);
15112       }
15113
15114     case SIZEOF_EXPR:
15115     case ALIGNOF_EXPR:
15116       /* A `sizeof' expression is value-dependent if the operand is
15117          type-dependent or is a pack expansion.  */
15118       expression = TREE_OPERAND (expression, 0);
15119       if (PACK_EXPANSION_P (expression))
15120         return true;
15121       else if (TYPE_P (expression))
15122         return dependent_type_p (expression);
15123       return type_dependent_expression_p (expression);
15124
15125     case SCOPE_REF:
15126       return dependent_scope_ref_p (expression, value_dependent_expression_p);
15127
15128     case COMPONENT_REF:
15129       return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
15130               || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
15131
15132     case CALL_EXPR:
15133       /* A CALL_EXPR may appear in a constant expression if it is a
15134          call to a builtin function, e.g., __builtin_constant_p.  All
15135          such calls are value-dependent.  */
15136       return true;
15137
15138     case NONTYPE_ARGUMENT_PACK:
15139       /* A NONTYPE_ARGUMENT_PACK is value-dependent if any packed argument
15140          is value-dependent.  */
15141       {
15142         tree values = ARGUMENT_PACK_ARGS (expression);
15143         int i, len = TREE_VEC_LENGTH (values);
15144         
15145         for (i = 0; i < len; ++i)
15146           if (value_dependent_expression_p (TREE_VEC_ELT (values, i)))
15147             return true;
15148         
15149         return false;
15150       }
15151
15152     case TRAIT_EXPR:
15153       {
15154         tree type2 = TRAIT_EXPR_TYPE2 (expression);
15155         return (dependent_type_p (TRAIT_EXPR_TYPE1 (expression))
15156                 || (type2 ? dependent_type_p (type2) : false));
15157       }
15158
15159     case MODOP_EXPR:
15160       return ((value_dependent_expression_p (TREE_OPERAND (expression, 0)))
15161               || (value_dependent_expression_p (TREE_OPERAND (expression, 2))));
15162
15163     default:
15164       /* A constant expression is value-dependent if any subexpression is
15165          value-dependent.  */
15166       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
15167         {
15168         case tcc_reference:
15169         case tcc_unary:
15170           return (value_dependent_expression_p
15171                   (TREE_OPERAND (expression, 0)));
15172
15173         case tcc_comparison:
15174         case tcc_binary:
15175           return ((value_dependent_expression_p
15176                    (TREE_OPERAND (expression, 0)))
15177                   || (value_dependent_expression_p
15178                       (TREE_OPERAND (expression, 1))));
15179
15180         case tcc_expression:
15181         case tcc_vl_exp:
15182           {
15183             int i;
15184             for (i = 0; i < TREE_OPERAND_LENGTH (expression); ++i)
15185               /* In some cases, some of the operands may be missing.
15186                  (For example, in the case of PREDECREMENT_EXPR, the
15187                  amount to increment by may be missing.)  That doesn't
15188                  make the expression dependent.  */
15189               if (TREE_OPERAND (expression, i)
15190                   && (value_dependent_expression_p
15191                       (TREE_OPERAND (expression, i))))
15192                 return true;
15193             return false;
15194           }
15195
15196         default:
15197           break;
15198         }
15199     }
15200
15201   /* The expression is not value-dependent.  */
15202   return false;
15203 }
15204
15205 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
15206    [temp.dep.expr].  */
15207
15208 bool
15209 type_dependent_expression_p (tree expression)
15210 {
15211   if (!processing_template_decl)
15212     return false;
15213
15214   if (expression == error_mark_node)
15215     return false;
15216
15217   /* An unresolved name is always dependent.  */
15218   if (TREE_CODE (expression) == IDENTIFIER_NODE
15219       || TREE_CODE (expression) == USING_DECL)
15220     return true;
15221
15222   /* Some expression forms are never type-dependent.  */
15223   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
15224       || TREE_CODE (expression) == SIZEOF_EXPR
15225       || TREE_CODE (expression) == ALIGNOF_EXPR
15226       || TREE_CODE (expression) == TRAIT_EXPR
15227       || TREE_CODE (expression) == TYPEID_EXPR
15228       || TREE_CODE (expression) == DELETE_EXPR
15229       || TREE_CODE (expression) == VEC_DELETE_EXPR
15230       || TREE_CODE (expression) == THROW_EXPR)
15231     return false;
15232
15233   /* The types of these expressions depends only on the type to which
15234      the cast occurs.  */
15235   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
15236       || TREE_CODE (expression) == STATIC_CAST_EXPR
15237       || TREE_CODE (expression) == CONST_CAST_EXPR
15238       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
15239       || TREE_CODE (expression) == CAST_EXPR)
15240     return dependent_type_p (TREE_TYPE (expression));
15241
15242   /* The types of these expressions depends only on the type created
15243      by the expression.  */
15244   if (TREE_CODE (expression) == NEW_EXPR
15245       || TREE_CODE (expression) == VEC_NEW_EXPR)
15246     {
15247       /* For NEW_EXPR tree nodes created inside a template, either
15248          the object type itself or a TREE_LIST may appear as the
15249          operand 1.  */
15250       tree type = TREE_OPERAND (expression, 1);
15251       if (TREE_CODE (type) == TREE_LIST)
15252         /* This is an array type.  We need to check array dimensions
15253            as well.  */
15254         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
15255                || value_dependent_expression_p
15256                     (TREE_OPERAND (TREE_VALUE (type), 1));
15257       else
15258         return dependent_type_p (type);
15259     }
15260
15261   if (TREE_CODE (expression) == SCOPE_REF
15262       && dependent_scope_ref_p (expression,
15263                                 type_dependent_expression_p))
15264     return true;
15265
15266   if (TREE_CODE (expression) == FUNCTION_DECL
15267       && DECL_LANG_SPECIFIC (expression)
15268       && DECL_TEMPLATE_INFO (expression)
15269       && (any_dependent_template_arguments_p
15270           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
15271     return true;
15272
15273   if (TREE_CODE (expression) == TEMPLATE_DECL
15274       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
15275     return false;
15276
15277   if (TREE_TYPE (expression) == unknown_type_node)
15278     {
15279       if (TREE_CODE (expression) == ADDR_EXPR)
15280         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
15281       if (TREE_CODE (expression) == COMPONENT_REF
15282           || TREE_CODE (expression) == OFFSET_REF)
15283         {
15284           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
15285             return true;
15286           expression = TREE_OPERAND (expression, 1);
15287           if (TREE_CODE (expression) == IDENTIFIER_NODE)
15288             return false;
15289         }
15290       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
15291       if (TREE_CODE (expression) == SCOPE_REF)
15292         return false;
15293
15294       if (TREE_CODE (expression) == BASELINK)
15295         expression = BASELINK_FUNCTIONS (expression);
15296
15297       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
15298         {
15299           if (any_dependent_template_arguments_p
15300               (TREE_OPERAND (expression, 1)))
15301             return true;
15302           expression = TREE_OPERAND (expression, 0);
15303         }
15304       gcc_assert (TREE_CODE (expression) == OVERLOAD
15305                   || TREE_CODE (expression) == FUNCTION_DECL);
15306
15307       while (expression)
15308         {
15309           if (type_dependent_expression_p (OVL_CURRENT (expression)))
15310             return true;
15311           expression = OVL_NEXT (expression);
15312         }
15313       return false;
15314     }
15315
15316   gcc_assert (TREE_CODE (expression) != TYPE_DECL);
15317
15318   return (dependent_type_p (TREE_TYPE (expression)));
15319 }
15320
15321 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
15322    contains a type-dependent expression.  */
15323
15324 bool
15325 any_type_dependent_arguments_p (tree args)
15326 {
15327   while (args)
15328     {
15329       tree arg = TREE_VALUE (args);
15330
15331       if (type_dependent_expression_p (arg))
15332         return true;
15333       args = TREE_CHAIN (args);
15334     }
15335   return false;
15336 }
15337
15338 /* Returns TRUE if LIST (a TREE_LIST whose TREE_VALUEs are
15339    expressions) contains any value-dependent expressions.  */
15340
15341 bool
15342 any_value_dependent_elements_p (tree list)
15343 {
15344   for (; list; list = TREE_CHAIN (list))
15345     if (value_dependent_expression_p (TREE_VALUE (list)))
15346       return true;
15347
15348   return false;
15349 }
15350
15351 /* Returns TRUE if the ARG (a template argument) is dependent.  */
15352
15353 bool
15354 dependent_template_arg_p (tree arg)
15355 {
15356   if (!processing_template_decl)
15357     return false;
15358
15359   if (TREE_CODE (arg) == TEMPLATE_DECL
15360       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15361     return dependent_template_p (arg);
15362   else if (ARGUMENT_PACK_P (arg))
15363     {
15364       tree args = ARGUMENT_PACK_ARGS (arg);
15365       int i, len = TREE_VEC_LENGTH (args);
15366       for (i = 0; i < len; ++i)
15367         {
15368           if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
15369             return true;
15370         }
15371
15372       return false;
15373     }
15374   else if (TYPE_P (arg))
15375     return dependent_type_p (arg);
15376   else
15377     return (type_dependent_expression_p (arg)
15378             || value_dependent_expression_p (arg));
15379 }
15380
15381 /* Returns true if ARGS (a collection of template arguments) contains
15382    any types that require structural equality testing.  */
15383
15384 bool
15385 any_template_arguments_need_structural_equality_p (tree args)
15386 {
15387   int i;
15388   int j;
15389
15390   if (!args)
15391     return false;
15392   if (args == error_mark_node)
15393     return true;
15394
15395   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15396     {
15397       tree level = TMPL_ARGS_LEVEL (args, i + 1);
15398       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15399         {
15400           tree arg = TREE_VEC_ELT (level, j);
15401           tree packed_args = NULL_TREE;
15402           int k, len = 1;
15403
15404           if (ARGUMENT_PACK_P (arg))
15405             {
15406               /* Look inside the argument pack.  */
15407               packed_args = ARGUMENT_PACK_ARGS (arg);
15408               len = TREE_VEC_LENGTH (packed_args);
15409             }
15410
15411           for (k = 0; k < len; ++k)
15412             {
15413               if (packed_args)
15414                 arg = TREE_VEC_ELT (packed_args, k);
15415
15416               if (error_operand_p (arg))
15417                 return true;
15418               else if (TREE_CODE (arg) == TEMPLATE_DECL
15419                        || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
15420                 continue;
15421               else if (TYPE_P (arg) && TYPE_STRUCTURAL_EQUALITY_P (arg))
15422                 return true;
15423               else if (!TYPE_P (arg) && TREE_TYPE (arg)
15424                        && TYPE_STRUCTURAL_EQUALITY_P (TREE_TYPE (arg)))
15425                 return true;
15426             }
15427         }
15428     }
15429
15430   return false;
15431 }
15432
15433 /* Returns true if ARGS (a collection of template arguments) contains
15434    any dependent arguments.  */
15435
15436 bool
15437 any_dependent_template_arguments_p (tree args)
15438 {
15439   int i;
15440   int j;
15441
15442   if (!args)
15443     return false;
15444   if (args == error_mark_node)
15445     return true;
15446
15447   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
15448     {
15449       tree level = TMPL_ARGS_LEVEL (args, i + 1);
15450       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
15451         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
15452           return true;
15453     }
15454
15455   return false;
15456 }
15457
15458 /* Returns TRUE if the template TMPL is dependent.  */
15459
15460 bool
15461 dependent_template_p (tree tmpl)
15462 {
15463   if (TREE_CODE (tmpl) == OVERLOAD)
15464     {
15465       while (tmpl)
15466         {
15467           if (dependent_template_p (OVL_FUNCTION (tmpl)))
15468             return true;
15469           tmpl = OVL_CHAIN (tmpl);
15470         }
15471       return false;
15472     }
15473
15474   /* Template template parameters are dependent.  */
15475   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
15476       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
15477     return true;
15478   /* So are names that have not been looked up.  */
15479   if (TREE_CODE (tmpl) == SCOPE_REF
15480       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
15481     return true;
15482   /* So are member templates of dependent classes.  */
15483   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
15484     return dependent_type_p (DECL_CONTEXT (tmpl));
15485   return false;
15486 }
15487
15488 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
15489
15490 bool
15491 dependent_template_id_p (tree tmpl, tree args)
15492 {
15493   return (dependent_template_p (tmpl)
15494           || any_dependent_template_arguments_p (args));
15495 }
15496
15497 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
15498    TYPENAME_TYPE corresponds.  Returns the original TYPENAME_TYPE if
15499    no such TYPE can be found.  Note that this function peers inside
15500    uninstantiated templates and therefore should be used only in
15501    extremely limited situations.  ONLY_CURRENT_P restricts this
15502    peering to the currently open classes hierarchy (which is required
15503    when comparing types).  */
15504
15505 tree
15506 resolve_typename_type (tree type, bool only_current_p)
15507 {
15508   tree scope;
15509   tree name;
15510   tree decl;
15511   int quals;
15512   tree pushed_scope;
15513   tree result;
15514
15515   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
15516
15517   scope = TYPE_CONTEXT (type);
15518   name = TYPE_IDENTIFIER (type);
15519
15520   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
15521      it first before we can figure out what NAME refers to.  */
15522   if (TREE_CODE (scope) == TYPENAME_TYPE)
15523     scope = resolve_typename_type (scope, only_current_p);
15524   /* If we don't know what SCOPE refers to, then we cannot resolve the
15525      TYPENAME_TYPE.  */
15526   if (TREE_CODE (scope) == TYPENAME_TYPE)
15527     return type;
15528   /* If the SCOPE is a template type parameter, we have no way of
15529      resolving the name.  */
15530   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
15531     return type;
15532   /* If the SCOPE is not the current instantiation, there's no reason
15533      to look inside it.  */
15534   if (only_current_p && !currently_open_class (scope))
15535     return type;
15536   /* If SCOPE is a partial instantiation, it will not have a valid
15537      TYPE_FIELDS list, so use the original template.  */
15538   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
15539   /* Enter the SCOPE so that name lookup will be resolved as if we
15540      were in the class definition.  In particular, SCOPE will no
15541      longer be considered a dependent type.  */
15542   pushed_scope = push_scope (scope);
15543   /* Look up the declaration.  */
15544   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
15545
15546   result = NULL_TREE;
15547   
15548   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
15549      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
15550   if (!decl)
15551     /*nop*/;
15552   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
15553            && TREE_CODE (decl) == TYPE_DECL)
15554     {
15555       result = TREE_TYPE (decl);
15556       if (result == error_mark_node)
15557         result = NULL_TREE;
15558     }
15559   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
15560            && DECL_CLASS_TEMPLATE_P (decl))
15561     {
15562       tree tmpl;
15563       tree args;
15564       /* Obtain the template and the arguments.  */
15565       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
15566       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
15567       /* Instantiate the template.  */
15568       result = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
15569                                       /*entering_scope=*/0,
15570                                       tf_error | tf_user);
15571       if (result == error_mark_node)
15572         result = NULL_TREE;
15573     }
15574   
15575   /* Leave the SCOPE.  */
15576   if (pushed_scope)
15577     pop_scope (pushed_scope);
15578
15579   /* If we failed to resolve it, return the original typename.  */
15580   if (!result)
15581     return type;
15582   
15583   /* If lookup found a typename type, resolve that too.  */
15584   if (TREE_CODE (result) == TYPENAME_TYPE && !TYPENAME_IS_RESOLVING_P (result))
15585     {
15586       /* Ill-formed programs can cause infinite recursion here, so we
15587          must catch that.  */
15588       TYPENAME_IS_RESOLVING_P (type) = 1;
15589       result = resolve_typename_type (result, only_current_p);
15590       TYPENAME_IS_RESOLVING_P (type) = 0;
15591     }
15592   
15593   /* Qualify the resulting type.  */
15594   quals = cp_type_quals (type);
15595   if (quals)
15596     result = cp_build_qualified_type (result, cp_type_quals (result) | quals);
15597
15598   return result;
15599 }
15600
15601 /* EXPR is an expression which is not type-dependent.  Return a proxy
15602    for EXPR that can be used to compute the types of larger
15603    expressions containing EXPR.  */
15604
15605 tree
15606 build_non_dependent_expr (tree expr)
15607 {
15608   tree inner_expr;
15609
15610   /* Preserve null pointer constants so that the type of things like
15611      "p == 0" where "p" is a pointer can be determined.  */
15612   if (null_ptr_cst_p (expr))
15613     return expr;
15614   /* Preserve OVERLOADs; the functions must be available to resolve
15615      types.  */
15616   inner_expr = expr;
15617   if (TREE_CODE (inner_expr) == ADDR_EXPR)
15618     inner_expr = TREE_OPERAND (inner_expr, 0);
15619   if (TREE_CODE (inner_expr) == COMPONENT_REF)
15620     inner_expr = TREE_OPERAND (inner_expr, 1);
15621   if (is_overloaded_fn (inner_expr)
15622       || TREE_CODE (inner_expr) == OFFSET_REF)
15623     return expr;
15624   /* There is no need to return a proxy for a variable.  */
15625   if (TREE_CODE (expr) == VAR_DECL)
15626     return expr;
15627   /* Preserve string constants; conversions from string constants to
15628      "char *" are allowed, even though normally a "const char *"
15629      cannot be used to initialize a "char *".  */
15630   if (TREE_CODE (expr) == STRING_CST)
15631     return expr;
15632   /* Preserve arithmetic constants, as an optimization -- there is no
15633      reason to create a new node.  */
15634   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
15635     return expr;
15636   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
15637      There is at least one place where we want to know that a
15638      particular expression is a throw-expression: when checking a ?:
15639      expression, there are special rules if the second or third
15640      argument is a throw-expression.  */
15641   if (TREE_CODE (expr) == THROW_EXPR)
15642     return expr;
15643
15644   if (TREE_CODE (expr) == COND_EXPR)
15645     return build3 (COND_EXPR,
15646                    TREE_TYPE (expr),
15647                    TREE_OPERAND (expr, 0),
15648                    (TREE_OPERAND (expr, 1)
15649                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
15650                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
15651                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
15652   if (TREE_CODE (expr) == COMPOUND_EXPR
15653       && !COMPOUND_EXPR_OVERLOADED (expr))
15654     return build2 (COMPOUND_EXPR,
15655                    TREE_TYPE (expr),
15656                    TREE_OPERAND (expr, 0),
15657                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
15658
15659   /* If the type is unknown, it can't really be non-dependent */
15660   gcc_assert (TREE_TYPE (expr) != unknown_type_node);
15661
15662   /* Otherwise, build a NON_DEPENDENT_EXPR.
15663
15664      REFERENCE_TYPEs are not stripped for expressions in templates
15665      because doing so would play havoc with mangling.  Consider, for
15666      example:
15667
15668        template <typename T> void f<T& g>() { g(); }
15669
15670      In the body of "f", the expression for "g" will have
15671      REFERENCE_TYPE, even though the standard says that it should
15672      not.  The reason is that we must preserve the syntactic form of
15673      the expression so that mangling (say) "f<g>" inside the body of
15674      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
15675      stripped here.  */
15676   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
15677 }
15678
15679 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
15680    Return a new TREE_LIST with the various arguments replaced with
15681    equivalent non-dependent expressions.  */
15682
15683 tree
15684 build_non_dependent_args (tree args)
15685 {
15686   tree a;
15687   tree new_args;
15688
15689   new_args = NULL_TREE;
15690   for (a = args; a; a = TREE_CHAIN (a))
15691     new_args = tree_cons (NULL_TREE,
15692                           build_non_dependent_expr (TREE_VALUE (a)),
15693                           new_args);
15694   return nreverse (new_args);
15695 }
15696
15697 #include "gt-cp-pt.h"