OSDN Git Service

* builtins.c, c-common.c, c-decl.c, c-format.c, c-format.h,
[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  Free Software Foundation, Inc.
4    Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
5    Rewritten by Jason Merrill (jason@cygnus.com).
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING.  If not, write to
21 the Free Software Foundation, 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA.  */
23
24 /* Known bugs or deficiencies include:
25
26      all methods must be provided in header files; can't use a source
27      file that contains only the method templates and "just win".  */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "tm.h"
33 #include "obstack.h"
34 #include "tree.h"
35 #include "pointer-set.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "tree-inline.h"
39 #include "decl.h"
40 #include "output.h"
41 #include "except.h"
42 #include "toplev.h"
43 #include "rtl.h"
44 #include "timevar.h"
45 #include "tree-iterator.h"
46
47 /* The type of functions taking a tree, and some additional data, and
48    returning an int.  */
49 typedef int (*tree_fn_t) (tree, void*);
50
51 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
52    instantiations have been deferred, either because their definitions
53    were not yet available, or because we were putting off doing the work.
54    The TREE_PURPOSE of each entry is either a DECL (for a function or
55    static data member), or a TYPE (for a class) indicating what we are
56    hoping to instantiate.  The TREE_VALUE is not used.  */
57 static GTY(()) tree pending_templates;
58 static GTY(()) tree last_pending_template;
59
60 int processing_template_parmlist;
61 static int template_header_count;
62
63 static GTY(()) tree saved_trees;
64 static GTY(()) varray_type inline_parm_levels;
65 static size_t inline_parm_levels_used;
66
67 static GTY(()) tree current_tinst_level;
68
69 static GTY(()) tree saved_access_scope;
70
71 /* Live only within one (recursive) call to tsubst_expr.  We use
72    this to pass the statement expression node from the STMT_EXPR
73    to the EXPR_STMT that is its result.  */
74 static tree cur_stmt_expr;
75
76 /* A map from local variable declarations in the body of the template
77    presently being instantiated to the corresponding instantiated
78    local variables.  */
79 static htab_t local_specializations;
80
81 #define UNIFY_ALLOW_NONE 0
82 #define UNIFY_ALLOW_MORE_CV_QUAL 1
83 #define UNIFY_ALLOW_LESS_CV_QUAL 2
84 #define UNIFY_ALLOW_DERIVED 4
85 #define UNIFY_ALLOW_INTEGER 8
86 #define UNIFY_ALLOW_OUTER_LEVEL 16
87 #define UNIFY_ALLOW_OUTER_MORE_CV_QUAL 32
88 #define UNIFY_ALLOW_OUTER_LESS_CV_QUAL 64
89 #define UNIFY_ALLOW_MAX_CORRECTION 128
90
91 static void push_access_scope (tree);
92 static void pop_access_scope (tree);
93 static int resolve_overloaded_unification (tree, tree, tree, tree,
94                                            unification_kind_t, int);
95 static int try_one_overload (tree, tree, tree, tree, tree,
96                              unification_kind_t, int, bool);
97 static int unify (tree, tree, tree, tree, int);
98 static void add_pending_template (tree);
99 static void reopen_tinst_level (tree);
100 static tree classtype_mangled_name (tree);
101 static char* mangle_class_name_for_template (const char *, tree, tree);
102 static tree tsubst_initializer_list (tree, tree);
103 static tree get_class_bindings (tree, tree, tree);
104 static tree coerce_template_parms (tree, tree, tree, tsubst_flags_t, int);
105 static void tsubst_enum (tree, tree, tree);
106 static tree add_to_template_args (tree, tree);
107 static tree add_outermost_template_args (tree, tree);
108 static bool check_instantiated_args (tree, tree, tsubst_flags_t);
109 static int maybe_adjust_types_for_deduction (unification_kind_t, tree*, tree*); 
110 static int  type_unification_real (tree, tree, tree, tree,
111                                    int, unification_kind_t, int, int);
112 static void note_template_header (int);
113 static tree convert_nontype_argument_function (tree, tree);
114 static tree convert_nontype_argument (tree, tree);
115 static tree convert_template_argument (tree, tree, tree,
116                                        tsubst_flags_t, int, tree);
117 static tree get_bindings_overload (tree, tree, tree);
118 static int for_each_template_parm (tree, tree_fn_t, void*,
119                                    struct pointer_set_t*);
120 static tree build_template_parm_index (int, int, int, tree, tree);
121 static int inline_needs_template_parms (tree);
122 static void push_inline_template_parms_recursive (tree, int);
123 static tree retrieve_local_specialization (tree);
124 static void register_local_specialization (tree, tree);
125 static tree reduce_template_parm_level (tree, tree, int);
126 static int mark_template_parm (tree, void *);
127 static int template_parm_this_level_p (tree, void *);
128 static tree tsubst_friend_function (tree, tree);
129 static tree tsubst_friend_class (tree, tree);
130 static int can_complete_type_without_circularity (tree);
131 static tree get_bindings (tree, tree, tree);
132 static tree get_bindings_real (tree, tree, tree, int, int, int);
133 static int template_decl_level (tree);
134 static int check_cv_quals_for_unify (int, tree, tree);
135 static tree tsubst_template_arg (tree, tree, tsubst_flags_t, tree);
136 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
137 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
138 static void regenerate_decl_from_template (tree, tree);
139 static tree most_specialized (tree, tree, tree);
140 static tree most_specialized_class (tree, tree);
141 static int template_class_depth_real (tree, int);
142 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
143 static tree tsubst_decl (tree, tree, tree, tsubst_flags_t);
144 static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
145 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
146 static void check_specialization_scope (void);
147 static tree process_partial_specialization (tree);
148 static void set_current_access_from_decl (tree);
149 static void check_default_tmpl_args (tree, tree, int, int);
150 static tree tsubst_call_declarator_parms (tree, tree, tsubst_flags_t, tree);
151 static tree get_template_base (tree, tree, tree, tree);
152 static int verify_class_unification (tree, tree, tree);
153 static tree try_class_unification (tree, tree, tree, tree);
154 static int coerce_template_template_parms (tree, tree, tsubst_flags_t,
155                                            tree, tree);
156 static tree determine_specialization (tree, tree, tree *, int, int);
157 static int template_args_equal (tree, tree);
158 static void tsubst_default_arguments (tree);
159 static tree for_each_template_parm_r (tree *, int *, void *);
160 static tree copy_default_args_to_explicit_spec_1 (tree, tree);
161 static void copy_default_args_to_explicit_spec (tree);
162 static int invalid_nontype_parm_type_p (tree, tsubst_flags_t);
163 static int eq_local_specializations (const void *, const void *);
164 static bool dependent_type_p_r (tree);
165 static tree tsubst (tree, tree, tsubst_flags_t, tree);
166 static tree tsubst_expr (tree, tree, tsubst_flags_t, tree);
167 static tree tsubst_copy (tree, tree, tsubst_flags_t, tree);
168
169 /* Make the current scope suitable for access checking when we are
170    processing T.  T can be FUNCTION_DECL for instantiated function
171    template, or VAR_DECL for static member variable (need by
172    instantiate_decl).  */
173
174 static void
175 push_access_scope (tree t)
176 {
177   gcc_assert (TREE_CODE (t) == FUNCTION_DECL
178               || TREE_CODE (t) == VAR_DECL);
179
180   if (DECL_CLASS_SCOPE_P (t))
181     push_nested_class (DECL_CONTEXT (t));
182   else
183     push_to_top_level ();
184     
185   if (TREE_CODE (t) == FUNCTION_DECL)
186     {
187       saved_access_scope = tree_cons
188         (NULL_TREE, current_function_decl, saved_access_scope);
189       current_function_decl = t;
190     }
191 }
192
193 /* Restore the scope set up by push_access_scope.  T is the node we
194    are processing.  */
195
196 static void
197 pop_access_scope (tree t)
198 {
199   if (TREE_CODE (t) == FUNCTION_DECL)
200     {
201       current_function_decl = TREE_VALUE (saved_access_scope);
202       saved_access_scope = TREE_CHAIN (saved_access_scope);
203     }
204
205   if (DECL_CLASS_SCOPE_P (t))
206     pop_nested_class ();
207   else
208     pop_from_top_level ();
209 }
210
211 /* Do any processing required when DECL (a member template
212    declaration) is finished.  Returns the TEMPLATE_DECL corresponding
213    to DECL, unless it is a specialization, in which case the DECL
214    itself is returned.  */
215
216 tree
217 finish_member_template_decl (tree decl)
218 {
219   if (decl == error_mark_node)
220     return error_mark_node;
221
222   gcc_assert (DECL_P (decl));
223
224   if (TREE_CODE (decl) == TYPE_DECL)
225     {
226       tree type;
227
228       type = TREE_TYPE (decl);
229       if (IS_AGGR_TYPE (type) 
230           && CLASSTYPE_TEMPLATE_INFO (type)
231           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
232         {
233           tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
234           check_member_template (tmpl);
235           return tmpl;
236         }
237       return NULL_TREE;
238     }
239   else if (TREE_CODE (decl) == FIELD_DECL)
240     error ("data member %qD cannot be a member template", decl);
241   else if (DECL_TEMPLATE_INFO (decl))
242     {
243       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
244         {
245           check_member_template (DECL_TI_TEMPLATE (decl));
246           return DECL_TI_TEMPLATE (decl);
247         }
248       else
249         return decl;
250     } 
251   else
252     error ("invalid member template declaration %qD", decl);
253
254   return error_mark_node;
255 }
256
257 /* Returns the template nesting level of the indicated class TYPE.
258    
259    For example, in:
260      template <class T>
261      struct A
262      {
263        template <class U>
264        struct B {};
265      };
266
267    A<T>::B<U> has depth two, while A<T> has depth one.  
268    Both A<T>::B<int> and A<int>::B<U> have depth one, if
269    COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
270    specializations.  
271
272    This function is guaranteed to return 0 if passed NULL_TREE so
273    that, for example, `template_class_depth (current_class_type)' is
274    always safe.  */
275
276 static int 
277 template_class_depth_real (tree type, int count_specializations)
278 {
279   int depth;
280
281   for (depth = 0; 
282        type && TREE_CODE (type) != NAMESPACE_DECL;
283        type = (TREE_CODE (type) == FUNCTION_DECL) 
284          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
285     {
286       if (TREE_CODE (type) != FUNCTION_DECL)
287         {
288           if (CLASSTYPE_TEMPLATE_INFO (type)
289               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
290               && ((count_specializations
291                    && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
292                   || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
293             ++depth;
294         }
295       else 
296         {
297           if (DECL_TEMPLATE_INFO (type)
298               && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
299               && ((count_specializations
300                    && DECL_TEMPLATE_SPECIALIZATION (type))
301                   || uses_template_parms (DECL_TI_ARGS (type))))
302             ++depth;
303         }
304     }
305
306   return depth;
307 }
308
309 /* Returns the template nesting level of the indicated class TYPE.
310    Like template_class_depth_real, but instantiations do not count in
311    the depth.  */
312
313 int 
314 template_class_depth (tree type)
315 {
316   return template_class_depth_real (type, /*count_specializations=*/0);
317 }
318
319 /* Returns 1 if processing DECL as part of do_pending_inlines
320    needs us to push template parms.  */
321
322 static int
323 inline_needs_template_parms (tree decl)
324 {
325   if (! DECL_TEMPLATE_INFO (decl))
326     return 0;
327
328   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
329           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
330 }
331
332 /* Subroutine of maybe_begin_member_template_processing.
333    Push the template parms in PARMS, starting from LEVELS steps into the
334    chain, and ending at the beginning, since template parms are listed
335    innermost first.  */
336
337 static void
338 push_inline_template_parms_recursive (tree parmlist, int levels)
339 {
340   tree parms = TREE_VALUE (parmlist);
341   int i;
342
343   if (levels > 1)
344     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
345
346   ++processing_template_decl;
347   current_template_parms
348     = tree_cons (size_int (processing_template_decl),
349                  parms, current_template_parms);
350   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
351
352   begin_scope (TREE_VEC_LENGTH (parms) ? sk_template_parms : sk_template_spec,
353                NULL);
354   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i) 
355     {
356       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
357       gcc_assert (DECL_P (parm));
358
359       switch (TREE_CODE (parm))
360         {
361         case TYPE_DECL:
362         case TEMPLATE_DECL:
363           pushdecl (parm);
364           break;
365
366         case PARM_DECL:
367           {
368             /* Make a CONST_DECL as is done in process_template_parm.
369                It is ugly that we recreate this here; the original
370                version built in process_template_parm is no longer
371                available.  */
372             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
373                                     TREE_TYPE (parm));
374             DECL_ARTIFICIAL (decl) = 1;
375             TREE_CONSTANT (decl) = 1;
376             TREE_INVARIANT (decl) = 1;
377             TREE_READONLY (decl) = 1;
378             DECL_INITIAL (decl) = DECL_INITIAL (parm);
379             SET_DECL_TEMPLATE_PARM_P (decl);
380             pushdecl (decl);
381           }
382           break;
383
384         default:
385           gcc_unreachable ();
386         }
387     }
388 }
389
390 /* Restore the template parameter context for a member template or
391    a friend template defined in a class definition.  */
392
393 void
394 maybe_begin_member_template_processing (tree decl)
395 {
396   tree parms;
397   int levels = 0;
398
399   if (inline_needs_template_parms (decl))
400     {
401       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
402       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
403
404       if (DECL_TEMPLATE_SPECIALIZATION (decl))
405         {
406           --levels;
407           parms = TREE_CHAIN (parms);
408         }
409
410       push_inline_template_parms_recursive (parms, levels);
411     }
412
413   /* Remember how many levels of template parameters we pushed so that
414      we can pop them later.  */
415   if (!inline_parm_levels)
416     VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
417   if (inline_parm_levels_used == inline_parm_levels->num_elements)
418     VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
419   VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
420   ++inline_parm_levels_used;
421 }
422
423 /* Undo the effects of begin_member_template_processing.  */
424
425 void 
426 maybe_end_member_template_processing (void)
427 {
428   int i;
429
430   if (!inline_parm_levels_used)
431     return;
432
433   --inline_parm_levels_used;
434   for (i = 0; 
435        i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
436        ++i) 
437     {
438       --processing_template_decl;
439       current_template_parms = TREE_CHAIN (current_template_parms);
440       poplevel (0, 0, 0);
441     }
442 }
443
444 /* Return a new template argument vector which contains all of ARGS,
445    but has as its innermost set of arguments the EXTRA_ARGS.  */
446
447 static tree
448 add_to_template_args (tree args, tree extra_args)
449 {
450   tree new_args;
451   int extra_depth;
452   int i;
453   int j;
454
455   extra_depth = TMPL_ARGS_DEPTH (extra_args);
456   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
457
458   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
459     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
460
461   for (j = 1; j <= extra_depth; ++j, ++i)
462     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
463     
464   return new_args;
465 }
466
467 /* Like add_to_template_args, but only the outermost ARGS are added to
468    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
469    (EXTRA_ARGS) levels are added.  This function is used to combine
470    the template arguments from a partial instantiation with the
471    template arguments used to attain the full instantiation from the
472    partial instantiation.  */
473
474 static tree
475 add_outermost_template_args (tree args, tree extra_args)
476 {
477   tree new_args;
478
479   /* If there are more levels of EXTRA_ARGS than there are ARGS,
480      something very fishy is going on.  */
481   gcc_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args));
482
483   /* If *all* the new arguments will be the EXTRA_ARGS, just return
484      them.  */
485   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
486     return extra_args;
487
488   /* For the moment, we make ARGS look like it contains fewer levels.  */
489   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
490   
491   new_args = add_to_template_args (args, extra_args);
492
493   /* Now, we restore ARGS to its full dimensions.  */
494   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
495
496   return new_args;
497 }
498
499 /* Return the N levels of innermost template arguments from the ARGS.  */
500
501 tree
502 get_innermost_template_args (tree args, int n)
503 {
504   tree new_args;
505   int extra_levels;
506   int i;
507
508   gcc_assert (n >= 0);
509
510   /* If N is 1, just return the innermost set of template arguments.  */
511   if (n == 1)
512     return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
513   
514   /* If we're not removing anything, just return the arguments we were
515      given.  */
516   extra_levels = TMPL_ARGS_DEPTH (args) - n;
517   gcc_assert (extra_levels >= 0);
518   if (extra_levels == 0)
519     return args;
520
521   /* Make a new set of arguments, not containing the outer arguments.  */
522   new_args = make_tree_vec (n);
523   for (i = 1; i <= n; ++i)
524     SET_TMPL_ARGS_LEVEL (new_args, i, 
525                          TMPL_ARGS_LEVEL (args, i + extra_levels));
526
527   return new_args;
528 }
529
530 /* We've got a template header coming up; push to a new level for storing
531    the parms.  */
532
533 void
534 begin_template_parm_list (void)
535 {
536   /* We use a non-tag-transparent scope here, which causes pushtag to
537      put tags in this scope, rather than in the enclosing class or
538      namespace scope.  This is the right thing, since we want
539      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
540      global template class, push_template_decl handles putting the
541      TEMPLATE_DECL into top-level scope.  For a nested template class,
542      e.g.:
543
544        template <class T> struct S1 {
545          template <class T> struct S2 {}; 
546        };
547
548      pushtag contains special code to call pushdecl_with_scope on the
549      TEMPLATE_DECL for S2.  */
550   begin_scope (sk_template_parms, NULL);
551   ++processing_template_decl;
552   ++processing_template_parmlist;
553   note_template_header (0);
554 }
555
556 /* This routine is called when a specialization is declared.  If it is
557    invalid to declare a specialization here, an error is reported.  */
558
559 static void
560 check_specialization_scope (void)
561 {
562   tree scope = current_scope ();
563
564   /* [temp.expl.spec] 
565      
566      An explicit specialization shall be declared in the namespace of
567      which the template is a member, or, for member templates, in the
568      namespace of which the enclosing class or enclosing class
569      template is a member.  An explicit specialization of a member
570      function, member class or static data member of a class template
571      shall be declared in the namespace of which the class template
572      is a member.  */
573   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
574     error ("explicit specialization in non-namespace scope %qD", scope);
575
576   /* [temp.expl.spec] 
577
578      In an explicit specialization declaration for a member of a class
579      template or a member template that appears in namespace scope,
580      the member template and some of its enclosing class templates may
581      remain unspecialized, except that the declaration shall not
582      explicitly specialize a class member template if its enclosing
583      class templates are not explicitly specialized as well.  */
584   if (current_template_parms) 
585     error ("enclosing class templates are not explicitly specialized");
586 }
587
588 /* We've just seen template <>.  */
589
590 void
591 begin_specialization (void)
592 {
593   begin_scope (sk_template_spec, NULL);
594   note_template_header (1);
595   check_specialization_scope ();
596 }
597
598 /* Called at then end of processing a declaration preceded by
599    template<>.  */
600
601 void 
602 end_specialization (void)
603 {
604   finish_scope ();
605   reset_specialization ();
606 }
607
608 /* Any template <>'s that we have seen thus far are not referring to a
609    function specialization.  */
610
611 void
612 reset_specialization (void)
613 {
614   processing_specialization = 0;
615   template_header_count = 0;
616 }
617
618 /* We've just seen a template header.  If SPECIALIZATION is nonzero,
619    it was of the form template <>.  */
620
621 static void 
622 note_template_header (int specialization)
623 {
624   processing_specialization = specialization;
625   template_header_count++;
626 }
627
628 /* We're beginning an explicit instantiation.  */
629
630 void
631 begin_explicit_instantiation (void)
632 {
633   gcc_assert (!processing_explicit_instantiation);
634   processing_explicit_instantiation = true;
635 }
636
637
638 void
639 end_explicit_instantiation (void)
640 {
641   gcc_assert (processing_explicit_instantiation);
642   processing_explicit_instantiation = false;
643 }
644
645 /* A explicit specialization or partial specialization TMPL is being
646    declared.  Check that the namespace in which the specialization is
647    occurring is permissible.  Returns false iff it is invalid to
648    specialize TMPL in the current namespace.  */
649    
650 static bool
651 check_specialization_namespace (tree tmpl)
652 {
653   tree tpl_ns = decl_namespace_context (tmpl);
654
655   /* [tmpl.expl.spec]
656      
657      An explicit specialization shall be declared in the namespace of
658      which the template is a member, or, for member templates, in the
659      namespace of which the enclosing class or enclosing class
660      template is a member.  An explicit specialization of a member
661      function, member class or static data member of a class template
662      shall be declared in the namespace of which the class template is
663      a member.  */
664   if (is_associated_namespace (current_namespace, tpl_ns))
665     /* Same or super-using namespace.  */
666     return true;
667   else
668     {
669       pedwarn ("specialization of %qD in different namespace", tmpl);
670       cp_pedwarn_at ("  from definition of %q#D", tmpl);
671       return false;
672     }
673 }
674
675 /* The TYPE is being declared.  If it is a template type, that means it
676    is a partial specialization.  Do appropriate error-checking.  */
677
678 void 
679 maybe_process_partial_specialization (tree type)
680 {
681   /* TYPE maybe an ERROR_MARK_NODE.  */
682   tree context = TYPE_P (type) ? TYPE_CONTEXT (type) : NULL_TREE;
683
684   if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type))
685     {
686       /* This is for ordinary explicit specialization and partial
687          specialization of a template class such as:
688
689            template <> class C<int>;
690
691          or:
692
693            template <class T> class C<T*>;
694
695          Make sure that `C<int>' and `C<T*>' are implicit instantiations.  */
696
697       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
698           && !COMPLETE_TYPE_P (type))
699         {
700           check_specialization_namespace (CLASSTYPE_TI_TEMPLATE (type));
701           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
702           if (processing_template_decl)
703             push_template_decl (TYPE_MAIN_DECL (type));
704         }
705       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
706         error ("specialization of %qT after instantiation", type);
707     }
708   else if (CLASS_TYPE_P (type)
709            && !CLASSTYPE_USE_TEMPLATE (type)
710            && CLASSTYPE_TEMPLATE_INFO (type)
711            && context && CLASS_TYPE_P (context)
712            && CLASSTYPE_TEMPLATE_INFO (context))
713     {
714       /* This is for an explicit specialization of member class
715          template according to [temp.expl.spec/18]:
716
717            template <> template <class U> class C<int>::D;
718
719          The context `C<int>' must be an implicit instantiation.
720          Otherwise this is just a member class template declared
721          earlier like:
722
723            template <> class C<int> { template <class U> class D; };
724            template <> template <class U> class C<int>::D;
725
726          In the first case, `C<int>::D' is a specialization of `C<T>::D'
727          while in the second case, `C<int>::D' is a primary template
728          and `C<T>::D' may not exist.  */
729
730       if (CLASSTYPE_IMPLICIT_INSTANTIATION (context)
731           && !COMPLETE_TYPE_P (type))
732         {
733           tree t;
734
735           if (current_namespace
736               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
737             {
738               pedwarn ("specializing %q#T in different namespace", type);
739               cp_pedwarn_at ("  from definition of %q#D",
740                              CLASSTYPE_TI_TEMPLATE (type));
741             }
742
743           /* Check for invalid specialization after instantiation:
744
745                template <> template <> class C<int>::D<int>;
746                template <> template <class U> class C<int>::D;  */
747
748           for (t = DECL_TEMPLATE_INSTANTIATIONS
749                  (most_general_template (CLASSTYPE_TI_TEMPLATE (type)));
750                t; t = TREE_CHAIN (t))
751             if (TREE_VALUE (t) != type
752                 && TYPE_CONTEXT (TREE_VALUE (t)) == context)
753               error ("specialization %qT after instantiation %qT",
754                      type, TREE_VALUE (t));
755
756           /* Mark TYPE as a specialization.  And as a result, we only
757              have one level of template argument for the innermost
758              class template.  */
759           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
760           CLASSTYPE_TI_ARGS (type)
761             = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type));
762         }
763     }
764   else if (processing_specialization)
765     error ("explicit specialization of non-template %qT", type);
766 }
767
768 /* Returns nonzero if we can optimize the retrieval of specializations
769    for TMPL, a TEMPLATE_DECL.  In particular, for such a template, we
770    do not use DECL_TEMPLATE_SPECIALIZATIONS at all.  */
771
772 static inline bool 
773 optimize_specialization_lookup_p (tree tmpl)
774 {
775   return (DECL_FUNCTION_TEMPLATE_P (tmpl)
776           && DECL_CLASS_SCOPE_P (tmpl)
777           /* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
778              parameter.  */
779           && CLASS_TYPE_P (DECL_CONTEXT (tmpl))
780           /* The optimized lookup depends on the fact that the
781              template arguments for the member function template apply
782              purely to the containing class, which is not true if the
783              containing class is an explicit or partial
784              specialization.  */
785           && !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
786           && !DECL_MEMBER_TEMPLATE_P (tmpl)
787           && !DECL_CONV_FN_P (tmpl)
788           /* It is possible to have a template that is not a member
789              template and is not a member of a template class:
790              
791              template <typename T> 
792              struct S { friend A::f(); };
793              
794              Here, the friend function is a template, but the context does
795              not have template information.  The optimized lookup relies
796              on having ARGS be the template arguments for both the class
797              and the function template.  */
798           && !DECL_FRIEND_P (DECL_TEMPLATE_RESULT (tmpl)));
799 }
800
801 /* Retrieve the specialization (in the sense of [temp.spec] - a
802    specialization is either an instantiation or an explicit
803    specialization) of TMPL for the given template ARGS.  If there is
804    no such specialization, return NULL_TREE.  The ARGS are a vector of
805    arguments, or a vector of vectors of arguments, in the case of
806    templates with more than one level of parameters.  
807
808    If TMPL is a type template and CLASS_SPECIALIZATIONS_P is true,
809    then we search for a partial specialization matching ARGS.  This
810    parameter is ignored if TMPL is not a class template.  */
811    
812 static tree
813 retrieve_specialization (tree tmpl, tree args, 
814                          bool class_specializations_p)
815 {
816   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
817
818   /* There should be as many levels of arguments as there are
819      levels of parameters.  */
820   gcc_assert (TMPL_ARGS_DEPTH (args) 
821               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
822                 
823   if (optimize_specialization_lookup_p (tmpl))
824     {
825       tree class_template;
826       tree class_specialization;
827       VEC(tree) *methods;
828       tree fns;
829       int idx;
830
831       /* The template arguments actually apply to the containing
832          class.  Find the class specialization with those
833          arguments.  */
834       class_template = CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (tmpl));
835       class_specialization 
836         = retrieve_specialization (class_template, args,
837                                    /*class_specializations_p=*/false);
838       if (!class_specialization)
839         return NULL_TREE;
840       /* Now, find the appropriate entry in the CLASSTYPE_METHOD_VEC
841          for the specialization.  */
842       idx = class_method_index_for_fn (class_specialization, tmpl);
843       if (idx == -1)
844         return NULL_TREE;
845       /* Iterate through the methods with the indicated name, looking
846          for the one that has an instance of TMPL.  */
847       methods = CLASSTYPE_METHOD_VEC (class_specialization);
848       for (fns = VEC_index (tree, methods, idx); fns; fns = OVL_NEXT (fns))
849         {
850           tree fn = OVL_CURRENT (fns);
851           if (DECL_TEMPLATE_INFO (fn) && DECL_TI_TEMPLATE (fn) == tmpl)
852             return fn;
853         }
854       return NULL_TREE;
855     }
856   else
857     {
858       tree *sp;
859       tree *head;
860
861       /* Class templates store their instantiations on the
862          DECL_TEMPLATE_INSTANTIATIONS list; other templates use the
863          DECL_TEMPLATE_SPECIALIZATIONS list.  */
864       if (!class_specializations_p
865           && TREE_CODE (DECL_TEMPLATE_RESULT (tmpl)) == TYPE_DECL)
866         sp = &DECL_TEMPLATE_INSTANTIATIONS (tmpl);
867       else
868         sp = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
869       head = sp;
870       /* Iterate through the list until we find a matching template.  */
871       while (*sp != NULL_TREE)
872         {
873           tree spec = *sp;
874               
875           if (comp_template_args (TREE_PURPOSE (spec), args))
876             {
877               /* Use the move-to-front heuristic to speed up future
878                  searches.  */ 
879               if (spec != *head)
880                 {
881                   *sp = TREE_CHAIN (*sp);
882                   TREE_CHAIN (spec) = *head;
883                   *head = spec;
884                 }
885               return TREE_VALUE (spec);
886             }
887           sp = &TREE_CHAIN (spec);
888         }
889     }
890
891   return NULL_TREE;
892 }
893
894 /* Like retrieve_specialization, but for local declarations.  */
895
896 static tree
897 retrieve_local_specialization (tree tmpl)
898 {
899   tree spec = htab_find_with_hash (local_specializations, tmpl,
900                                    htab_hash_pointer (tmpl));
901   return spec ? TREE_PURPOSE (spec) : NULL_TREE;
902 }
903
904 /* Returns nonzero iff DECL is a specialization of TMPL.  */
905
906 int
907 is_specialization_of (tree decl, tree tmpl)
908 {
909   tree t;
910
911   if (TREE_CODE (decl) == FUNCTION_DECL)
912     {
913       for (t = decl; 
914            t != NULL_TREE;
915            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
916         if (t == tmpl)
917           return 1;
918     }
919   else 
920     {
921       gcc_assert (TREE_CODE (decl) == TYPE_DECL);
922
923       for (t = TREE_TYPE (decl);
924            t != NULL_TREE;
925            t = CLASSTYPE_USE_TEMPLATE (t)
926              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
927         if (same_type_ignoring_top_level_qualifiers_p (t, TREE_TYPE (tmpl)))
928           return 1;
929     }  
930
931   return 0;
932 }
933
934 /* Returns nonzero iff DECL is a specialization of friend declaration
935    FRIEND according to [temp.friend].  */
936
937 bool
938 is_specialization_of_friend (tree decl, tree friend)
939 {
940   bool need_template = true;
941   int template_depth;
942
943   gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
944               || TREE_CODE (decl) == TYPE_DECL);
945
946   /* For [temp.friend/6] when FRIEND is an ordinary member function
947      of a template class, we want to check if DECL is a specialization
948      if this.  */
949   if (TREE_CODE (friend) == FUNCTION_DECL
950       && DECL_TEMPLATE_INFO (friend)
951       && !DECL_USE_TEMPLATE (friend))
952     {
953       /* We want a TEMPLATE_DECL for `is_specialization_of'.  */
954       friend = DECL_TI_TEMPLATE (friend);
955       need_template = false;
956     }
957   else if (TREE_CODE (friend) == TEMPLATE_DECL
958            && !PRIMARY_TEMPLATE_P (friend))
959     need_template = false;
960
961   /* There is nothing to do if this is not a template friend.  */
962   if (TREE_CODE (friend) != TEMPLATE_DECL)
963     return false;
964
965   if (is_specialization_of (decl, friend))
966     return true;
967
968   /* [temp.friend/6]
969      A member of a class template may be declared to be a friend of a
970      non-template class.  In this case, the corresponding member of
971      every specialization of the class template is a friend of the
972      class granting friendship.
973      
974      For example, given a template friend declaration
975
976        template <class T> friend void A<T>::f();
977
978      the member function below is considered a friend
979
980        template <> struct A<int> {
981          void f();
982        };
983
984      For this type of template friend, TEMPLATE_DEPTH below will be
985      nonzero.  To determine if DECL is a friend of FRIEND, we first
986      check if the enclosing class is a specialization of another.  */
987
988   template_depth = template_class_depth (DECL_CONTEXT (friend));
989   if (template_depth
990       && DECL_CLASS_SCOPE_P (decl)
991       && is_specialization_of (TYPE_NAME (DECL_CONTEXT (decl)), 
992                                CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (friend))))
993     {
994       /* Next, we check the members themselves.  In order to handle
995          a few tricky cases, such as when FRIEND's are
996
997            template <class T> friend void A<T>::g(T t);
998            template <class T> template <T t> friend void A<T>::h();
999
1000          and DECL's are
1001
1002            void A<int>::g(int);
1003            template <int> void A<int>::h();
1004
1005          we need to figure out ARGS, the template arguments from
1006          the context of DECL.  This is required for template substitution
1007          of `T' in the function parameter of `g' and template parameter
1008          of `h' in the above examples.  Here ARGS corresponds to `int'.  */
1009
1010       tree context = DECL_CONTEXT (decl);
1011       tree args = NULL_TREE;
1012       int current_depth = 0;
1013
1014       while (current_depth < template_depth)
1015         {
1016           if (CLASSTYPE_TEMPLATE_INFO (context))
1017             {
1018               if (current_depth == 0)
1019                 args = TYPE_TI_ARGS (context);
1020               else
1021                 args = add_to_template_args (TYPE_TI_ARGS (context), args);
1022               current_depth++;
1023             }
1024           context = TYPE_CONTEXT (context);
1025         }
1026
1027       if (TREE_CODE (decl) == FUNCTION_DECL)
1028         {
1029           bool is_template;
1030           tree friend_type;
1031           tree decl_type;
1032           tree friend_args_type;
1033           tree decl_args_type;
1034
1035           /* Make sure that both DECL and FRIEND are templates or
1036              non-templates.  */
1037           is_template = DECL_TEMPLATE_INFO (decl)
1038                         && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl));
1039           if (need_template ^ is_template)
1040             return false;
1041           else if (is_template)
1042             {
1043               /* If both are templates, check template parameter list.  */
1044               tree friend_parms
1045                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1046                                          args, tf_none);
1047               if (!comp_template_parms
1048                      (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (decl)),
1049                       friend_parms))
1050                 return false;
1051
1052               decl_type = TREE_TYPE (DECL_TI_TEMPLATE (decl));
1053             }
1054           else
1055             decl_type = TREE_TYPE (decl);
1056
1057           friend_type = tsubst_function_type (TREE_TYPE (friend), args,
1058                                               tf_none, NULL_TREE);
1059           if (friend_type == error_mark_node)
1060             return false;
1061
1062           /* Check if return types match.  */
1063           if (!same_type_p (TREE_TYPE (decl_type), TREE_TYPE (friend_type)))
1064             return false;
1065
1066           /* Check if function parameter types match, ignoring the
1067              `this' parameter.  */
1068           friend_args_type = TYPE_ARG_TYPES (friend_type);
1069           decl_args_type = TYPE_ARG_TYPES (decl_type);
1070           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (friend))
1071             friend_args_type = TREE_CHAIN (friend_args_type);
1072           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1073             decl_args_type = TREE_CHAIN (decl_args_type);
1074
1075           return compparms (decl_args_type, friend_args_type);
1076         }
1077       else
1078         {
1079           /* DECL is a TYPE_DECL */
1080           bool is_template;
1081           tree decl_type = TREE_TYPE (decl);
1082
1083           /* Make sure that both DECL and FRIEND are templates or
1084              non-templates.  */
1085           is_template
1086             = CLASSTYPE_TEMPLATE_INFO (decl_type)
1087               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (decl_type));
1088
1089           if (need_template ^ is_template)
1090             return false;
1091           else if (is_template)
1092             {
1093               tree friend_parms;
1094               /* If both are templates, check the name of the two
1095                  TEMPLATE_DECL's first because is_friend didn't.  */
1096               if (DECL_NAME (CLASSTYPE_TI_TEMPLATE (decl_type))
1097                   != DECL_NAME (friend))
1098                 return false;
1099
1100               /* Now check template parameter list.  */
1101               friend_parms
1102                 = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend),
1103                                          args, tf_none);
1104               return comp_template_parms
1105                 (DECL_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (decl_type)),
1106                  friend_parms);
1107             }
1108           else
1109             return (DECL_NAME (decl)
1110                     == DECL_NAME (friend));
1111         }
1112     }
1113   return false;
1114 }
1115
1116 /* Register the specialization SPEC as a specialization of TMPL with
1117    the indicated ARGS.  Returns SPEC, or an equivalent prior
1118    declaration, if available.  */
1119
1120 static tree
1121 register_specialization (tree spec, tree tmpl, tree args)
1122 {
1123   tree fn;
1124
1125   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
1126
1127   if (TREE_CODE (spec) == FUNCTION_DECL 
1128       && uses_template_parms (DECL_TI_ARGS (spec)))
1129     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
1130        register it; we want the corresponding TEMPLATE_DECL instead.
1131        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
1132        the more obvious `uses_template_parms (spec)' to avoid problems
1133        with default function arguments.  In particular, given
1134        something like this:
1135
1136           template <class T> void f(T t1, T t = T())
1137
1138        the default argument expression is not substituted for in an
1139        instantiation unless and until it is actually needed.  */
1140     return spec;
1141
1142   /* There should be as many levels of arguments as there are
1143      levels of parameters.  */
1144   gcc_assert (TMPL_ARGS_DEPTH (args) 
1145               == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)));
1146
1147   fn = retrieve_specialization (tmpl, args, 
1148                                 /*class_specializations_p=*/false);
1149   /* We can sometimes try to re-register a specialization that we've
1150      already got.  In particular, regenerate_decl_from_template calls
1151      duplicate_decls which will update the specialization list.  But,
1152      we'll still get called again here anyhow.  It's more convenient
1153      to simply allow this than to try to prevent it.  */
1154   if (fn == spec)
1155     return spec;
1156   else if (fn && DECL_TEMPLATE_SPECIALIZATION (spec))
1157     {
1158       if (DECL_TEMPLATE_INSTANTIATION (fn))
1159         {
1160           if (TREE_USED (fn) 
1161               || DECL_EXPLICIT_INSTANTIATION (fn))
1162             {
1163               error ("specialization of %qD after instantiation",
1164                      fn);
1165               return spec;
1166             }
1167           else
1168             {
1169               /* This situation should occur only if the first
1170                  specialization is an implicit instantiation, the
1171                  second is an explicit specialization, and the
1172                  implicit instantiation has not yet been used.  That
1173                  situation can occur if we have implicitly
1174                  instantiated a member function and then specialized
1175                  it later.
1176                  
1177                  We can also wind up here if a friend declaration that
1178                  looked like an instantiation turns out to be a
1179                  specialization:
1180                  
1181                    template <class T> void foo(T);
1182                    class S { friend void foo<>(int) };
1183                    template <> void foo(int);  
1184                  
1185                  We transform the existing DECL in place so that any
1186                  pointers to it become pointers to the updated
1187                  declaration.
1188
1189                  If there was a definition for the template, but not
1190                  for the specialization, we want this to look as if
1191                  there were no definition, and vice versa.  */
1192               DECL_INITIAL (fn) = NULL_TREE;
1193               duplicate_decls (spec, fn);
1194               
1195               return fn;
1196             }
1197         }
1198       else if (DECL_TEMPLATE_SPECIALIZATION (fn))
1199         {
1200           if (!duplicate_decls (spec, fn) && DECL_INITIAL (spec))
1201             /* Dup decl failed, but this is a new definition. Set the
1202                line number so any errors match this new
1203                definition.  */
1204             DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (spec);
1205           
1206           return fn;
1207         }
1208     }
1209
1210   /* A specialization must be declared in the same namespace as the
1211      template it is specializing.  */
1212   if (DECL_TEMPLATE_SPECIALIZATION (spec)
1213       && !check_specialization_namespace (tmpl))
1214     DECL_CONTEXT (spec) = decl_namespace_context (tmpl);
1215
1216   if (!optimize_specialization_lookup_p (tmpl))
1217     DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
1218       = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
1219
1220   return spec;
1221 }
1222
1223 /* Unregister the specialization SPEC as a specialization of TMPL.
1224    Replace it with NEW_SPEC, if NEW_SPEC is non-NULL.  Returns true
1225    if the SPEC was listed as a specialization of TMPL.  */
1226
1227 bool
1228 reregister_specialization (tree spec, tree tmpl, tree new_spec)
1229 {
1230   tree* s;
1231
1232   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
1233        *s != NULL_TREE;
1234        s = &TREE_CHAIN (*s))
1235     if (TREE_VALUE (*s) == spec)
1236       {
1237         if (!new_spec)
1238           *s = TREE_CHAIN (*s);
1239         else
1240           TREE_VALUE (*s) = new_spec;
1241         return 1;
1242       }
1243
1244   return 0;
1245 }
1246
1247 /* Compare an entry in the local specializations hash table P1 (which
1248    is really a pointer to a TREE_LIST) with P2 (which is really a
1249    DECL).  */
1250
1251 static int
1252 eq_local_specializations (const void *p1, const void *p2)
1253 {
1254   return TREE_VALUE ((tree) p1) == (tree) p2;
1255 }
1256
1257 /* Hash P1, an entry in the local specializations table.  */
1258
1259 static hashval_t
1260 hash_local_specialization (const void* p1)
1261 {
1262   return htab_hash_pointer (TREE_VALUE ((tree) p1));
1263 }
1264
1265 /* Like register_specialization, but for local declarations.  We are
1266    registering SPEC, an instantiation of TMPL.  */
1267
1268 static void
1269 register_local_specialization (tree spec, tree tmpl)
1270 {
1271   void **slot;
1272
1273   slot = htab_find_slot_with_hash (local_specializations, tmpl, 
1274                                    htab_hash_pointer (tmpl), INSERT);
1275   *slot = build_tree_list (spec, tmpl);
1276 }
1277
1278 /* Print the list of candidate FNS in an error message.  */
1279
1280 void
1281 print_candidates (tree fns)
1282 {
1283   tree fn;
1284
1285   const char *str = "candidates are:";
1286
1287   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
1288     {
1289       tree f;
1290
1291       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
1292         cp_error_at ("%s %+#D", str, OVL_CURRENT (f));
1293       str = "               ";
1294     }
1295 }
1296
1297 /* Returns the template (one of the functions given by TEMPLATE_ID)
1298    which can be specialized to match the indicated DECL with the
1299    explicit template args given in TEMPLATE_ID.  The DECL may be
1300    NULL_TREE if none is available.  In that case, the functions in
1301    TEMPLATE_ID are non-members.
1302
1303    If NEED_MEMBER_TEMPLATE is nonzero the function is known to be a
1304    specialization of a member template.
1305
1306    The TEMPLATE_COUNT is the number of references to qualifying
1307    template classes that appeared in the name of the function. See
1308    check_explicit_specialization for a more accurate description.
1309
1310    The template args (those explicitly specified and those deduced)
1311    are output in a newly created vector *TARGS_OUT.
1312
1313    If it is impossible to determine the result, an error message is
1314    issued.  The error_mark_node is returned to indicate failure.  */
1315
1316 static tree
1317 determine_specialization (tree template_id, 
1318                           tree decl, 
1319                           tree* targs_out, 
1320                           int need_member_template,
1321                           int template_count)
1322 {
1323   tree fns;
1324   tree targs;
1325   tree explicit_targs;
1326   tree candidates = NULL_TREE;
1327   tree templates = NULL_TREE;
1328   int header_count;
1329   struct cp_binding_level *b;
1330
1331   *targs_out = NULL_TREE;
1332
1333   if (template_id == error_mark_node)
1334     return error_mark_node;
1335
1336   fns = TREE_OPERAND (template_id, 0);
1337   explicit_targs = TREE_OPERAND (template_id, 1);
1338
1339   if (fns == error_mark_node)
1340     return error_mark_node;
1341
1342   /* Check for baselinks.  */
1343   if (BASELINK_P (fns))
1344     fns = BASELINK_FUNCTIONS (fns);
1345
1346   if (!is_overloaded_fn (fns))
1347     {
1348       error ("%qD is not a function template", fns);
1349       return error_mark_node;
1350     }
1351
1352   /* Count the number of template headers specified for this
1353      specialization.  */
1354   header_count = 0;
1355   for (b = current_binding_level;
1356        b->kind == sk_template_parms || b->kind == sk_template_spec;
1357        b = b->level_chain)
1358     ++header_count;
1359
1360   for (; fns; fns = OVL_NEXT (fns))
1361     {
1362       tree fn = OVL_CURRENT (fns);
1363
1364       if (TREE_CODE (fn) == TEMPLATE_DECL)
1365         {
1366           tree decl_arg_types;
1367           tree fn_arg_types;
1368
1369           /* DECL might be a specialization of FN.  */
1370
1371           /* Adjust the type of DECL in case FN is a static member.  */
1372           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1373           if (DECL_STATIC_FUNCTION_P (fn) 
1374               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1375             decl_arg_types = TREE_CHAIN (decl_arg_types);
1376
1377           /* Check that the number of function parameters matches.
1378              For example,
1379                template <class T> void f(int i = 0);
1380                template <> void f<int>();
1381              The specialization f<int> is invalid but is not caught
1382              by get_bindings below.  */
1383
1384           fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
1385           if (list_length (fn_arg_types) != list_length (decl_arg_types))
1386             continue;
1387
1388           /* For a non-static member function, we need to make sure that
1389              the const qualification is the same. This can be done by
1390              checking the 'this' in the argument list.  */
1391           if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
1392               && !same_type_p (TREE_VALUE (fn_arg_types), 
1393                                TREE_VALUE (decl_arg_types)))
1394             continue;
1395
1396           /* In case of explicit specialization, we need to check if
1397              the number of template headers appearing in the specialization
1398              is correct. This is usually done in check_explicit_specialization,
1399              but the check done there cannot be exhaustive when specializing
1400              member functions. Consider the following code:
1401
1402              template <> void A<int>::f(int);
1403              template <> template <> void A<int>::f(int);
1404
1405              Assuming that A<int> is not itself an explicit specialization
1406              already, the first line specializes "f" which is a non-template
1407              member function, whilst the second line specializes "f" which
1408              is a template member function. So both lines are syntactically
1409              correct, and check_explicit_specialization does not reject
1410              them.
1411              
1412              Here, we can do better, as we are matching the specialization
1413              against the declarations. We count the number of template
1414              headers, and we check if they match TEMPLATE_COUNT + 1
1415              (TEMPLATE_COUNT is the number of qualifying template classes,
1416              plus there must be another header for the member template
1417              itself).
1418              
1419              Notice that if header_count is zero, this is not a
1420              specialization but rather a template instantiation, so there
1421              is no check we can perform here.  */
1422           if (header_count && header_count != template_count + 1)
1423             continue;
1424
1425           /* See whether this function might be a specialization of this
1426              template.  */
1427           targs = get_bindings (fn, decl, explicit_targs);
1428
1429           if (!targs)
1430             /* We cannot deduce template arguments that when used to
1431                specialize TMPL will produce DECL.  */
1432             continue;
1433
1434           /* Save this template, and the arguments deduced.  */
1435           templates = tree_cons (targs, fn, templates);
1436         }
1437       else if (need_member_template)
1438         /* FN is an ordinary member function, and we need a
1439            specialization of a member template.  */
1440         ;
1441       else if (TREE_CODE (fn) != FUNCTION_DECL)
1442         /* We can get IDENTIFIER_NODEs here in certain erroneous
1443            cases.  */
1444         ;
1445       else if (!DECL_FUNCTION_MEMBER_P (fn))
1446         /* This is just an ordinary non-member function.  Nothing can
1447            be a specialization of that.  */
1448         ;
1449       else if (DECL_ARTIFICIAL (fn))
1450         /* Cannot specialize functions that are created implicitly.  */
1451         ;
1452       else
1453         {
1454           tree decl_arg_types;
1455
1456           /* This is an ordinary member function.  However, since
1457              we're here, we can assume it's enclosing class is a
1458              template class.  For example,
1459              
1460                template <typename T> struct S { void f(); };
1461                template <> void S<int>::f() {}
1462
1463              Here, S<int>::f is a non-template, but S<int> is a
1464              template class.  If FN has the same type as DECL, we
1465              might be in business.  */
1466
1467           if (!DECL_TEMPLATE_INFO (fn))
1468             /* Its enclosing class is an explicit specialization
1469                of a template class.  This is not a candidate.  */
1470             continue;
1471
1472           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1473                             TREE_TYPE (TREE_TYPE (fn))))
1474             /* The return types differ.  */
1475             continue;
1476
1477           /* Adjust the type of DECL in case FN is a static member.  */
1478           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1479           if (DECL_STATIC_FUNCTION_P (fn) 
1480               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1481             decl_arg_types = TREE_CHAIN (decl_arg_types);
1482
1483           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)), 
1484                          decl_arg_types))
1485             /* They match!  */
1486             candidates = tree_cons (NULL_TREE, fn, candidates);
1487         }
1488     }
1489
1490   if (templates && TREE_CHAIN (templates))
1491     {
1492       /* We have:
1493          
1494            [temp.expl.spec]
1495
1496            It is possible for a specialization with a given function
1497            signature to be instantiated from more than one function
1498            template.  In such cases, explicit specification of the
1499            template arguments must be used to uniquely identify the
1500            function template specialization being specialized.
1501
1502          Note that here, there's no suggestion that we're supposed to
1503          determine which of the candidate templates is most
1504          specialized.  However, we, also have:
1505
1506            [temp.func.order]
1507
1508            Partial ordering of overloaded function template
1509            declarations is used in the following contexts to select
1510            the function template to which a function template
1511            specialization refers: 
1512
1513            -- when an explicit specialization refers to a function
1514               template. 
1515
1516          So, we do use the partial ordering rules, at least for now.
1517          This extension can only serve to make invalid programs valid,
1518          so it's safe.  And, there is strong anecdotal evidence that
1519          the committee intended the partial ordering rules to apply;
1520          the EDG front-end has that behavior, and John Spicer claims
1521          that the committee simply forgot to delete the wording in
1522          [temp.expl.spec].  */
1523      tree tmpl = most_specialized (templates, decl, explicit_targs);
1524      if (tmpl && tmpl != error_mark_node)
1525        {
1526          targs = get_bindings (tmpl, decl, explicit_targs);
1527          templates = tree_cons (targs, tmpl, NULL_TREE);
1528        }
1529     }
1530
1531   if (templates == NULL_TREE && candidates == NULL_TREE)
1532     {
1533       cp_error_at ("template-id %qD for %q+D does not match any template "
1534                    "declaration",
1535                    template_id, decl);
1536       return error_mark_node;
1537     }
1538   else if ((templates && TREE_CHAIN (templates))
1539            || (candidates && TREE_CHAIN (candidates))
1540            || (templates && candidates))
1541     {
1542       cp_error_at ("ambiguous template specialization %qD for %q+D",
1543                    template_id, decl);
1544       chainon (candidates, templates);
1545       print_candidates (candidates);
1546       return error_mark_node;
1547     }
1548
1549   /* We have one, and exactly one, match.  */
1550   if (candidates)
1551     {
1552       /* It was a specialization of an ordinary member function in a
1553          template class.  */
1554       *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1555       return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1556     }
1557
1558   /* It was a specialization of a template.  */
1559   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1560   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1561     {
1562       *targs_out = copy_node (targs);
1563       SET_TMPL_ARGS_LEVEL (*targs_out, 
1564                            TMPL_ARGS_DEPTH (*targs_out),
1565                            TREE_PURPOSE (templates));
1566     }
1567   else
1568     *targs_out = TREE_PURPOSE (templates);
1569   return TREE_VALUE (templates);
1570 }
1571
1572 /* Returns a chain of parameter types, exactly like the SPEC_TYPES,
1573    but with the default argument values filled in from those in the
1574    TMPL_TYPES.  */
1575       
1576 static tree
1577 copy_default_args_to_explicit_spec_1 (tree spec_types,
1578                                       tree tmpl_types)
1579 {
1580   tree new_spec_types;
1581
1582   if (!spec_types)
1583     return NULL_TREE;
1584
1585   if (spec_types == void_list_node)
1586     return void_list_node;
1587
1588   /* Substitute into the rest of the list.  */
1589   new_spec_types =
1590     copy_default_args_to_explicit_spec_1 (TREE_CHAIN (spec_types),
1591                                           TREE_CHAIN (tmpl_types));
1592   
1593   /* Add the default argument for this parameter.  */
1594   return hash_tree_cons (TREE_PURPOSE (tmpl_types),
1595                          TREE_VALUE (spec_types),
1596                          new_spec_types);
1597 }
1598
1599 /* DECL is an explicit specialization.  Replicate default arguments
1600    from the template it specializes.  (That way, code like:
1601
1602      template <class T> void f(T = 3);
1603      template <> void f(double);
1604      void g () { f (); } 
1605
1606    works, as required.)  An alternative approach would be to look up
1607    the correct default arguments at the call-site, but this approach
1608    is consistent with how implicit instantiations are handled.  */
1609
1610 static void
1611 copy_default_args_to_explicit_spec (tree decl)
1612 {
1613   tree tmpl;
1614   tree spec_types;
1615   tree tmpl_types;
1616   tree new_spec_types;
1617   tree old_type;
1618   tree new_type;
1619   tree t;
1620   tree object_type = NULL_TREE;
1621   tree in_charge = NULL_TREE;
1622   tree vtt = NULL_TREE;
1623
1624   /* See if there's anything we need to do.  */
1625   tmpl = DECL_TI_TEMPLATE (decl);
1626   tmpl_types = TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (tmpl)));
1627   for (t = tmpl_types; t; t = TREE_CHAIN (t))
1628     if (TREE_PURPOSE (t))
1629       break;
1630   if (!t)
1631     return;
1632
1633   old_type = TREE_TYPE (decl);
1634   spec_types = TYPE_ARG_TYPES (old_type);
1635   
1636   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1637     {
1638       /* Remove the this pointer, but remember the object's type for
1639          CV quals.  */
1640       object_type = TREE_TYPE (TREE_VALUE (spec_types));
1641       spec_types = TREE_CHAIN (spec_types);
1642       tmpl_types = TREE_CHAIN (tmpl_types);
1643       
1644       if (DECL_HAS_IN_CHARGE_PARM_P (decl))
1645         {
1646           /* DECL may contain more parameters than TMPL due to the extra
1647              in-charge parameter in constructors and destructors.  */
1648           in_charge = spec_types;
1649           spec_types = TREE_CHAIN (spec_types);
1650         }
1651       if (DECL_HAS_VTT_PARM_P (decl))
1652         {
1653           vtt = spec_types;
1654           spec_types = TREE_CHAIN (spec_types);
1655         }
1656     }
1657
1658   /* Compute the merged default arguments.  */
1659   new_spec_types = 
1660     copy_default_args_to_explicit_spec_1 (spec_types, tmpl_types);
1661
1662   /* Compute the new FUNCTION_TYPE.  */
1663   if (object_type)
1664     {
1665       if (vtt)
1666         new_spec_types = hash_tree_cons (TREE_PURPOSE (vtt),
1667                                          TREE_VALUE (vtt),
1668                                          new_spec_types);
1669
1670       if (in_charge)
1671         /* Put the in-charge parameter back.  */
1672         new_spec_types = hash_tree_cons (TREE_PURPOSE (in_charge),
1673                                          TREE_VALUE (in_charge),
1674                                          new_spec_types);
1675
1676       new_type = build_method_type_directly (object_type,
1677                                              TREE_TYPE (old_type),
1678                                              new_spec_types);
1679     }
1680   else
1681     new_type = build_function_type (TREE_TYPE (old_type),
1682                                     new_spec_types);
1683   new_type = cp_build_type_attribute_variant (new_type,
1684                                               TYPE_ATTRIBUTES (old_type));
1685   new_type = build_exception_variant (new_type,
1686                                       TYPE_RAISES_EXCEPTIONS (old_type));
1687   TREE_TYPE (decl) = new_type;
1688 }
1689
1690 /* Check to see if the function just declared, as indicated in
1691    DECLARATOR, and in DECL, is a specialization of a function
1692    template.  We may also discover that the declaration is an explicit
1693    instantiation at this point.
1694
1695    Returns DECL, or an equivalent declaration that should be used
1696    instead if all goes well.  Issues an error message if something is
1697    amiss.  Returns error_mark_node if the error is not easily
1698    recoverable.
1699    
1700    FLAGS is a bitmask consisting of the following flags: 
1701
1702    2: The function has a definition.
1703    4: The function is a friend.
1704
1705    The TEMPLATE_COUNT is the number of references to qualifying
1706    template classes that appeared in the name of the function.  For
1707    example, in
1708
1709      template <class T> struct S { void f(); };
1710      void S<int>::f();
1711      
1712    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1713    classes are not counted in the TEMPLATE_COUNT, so that in
1714
1715      template <class T> struct S {};
1716      template <> struct S<int> { void f(); }
1717      template <> void S<int>::f();
1718
1719    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1720    invalid; there should be no template <>.)
1721
1722    If the function is a specialization, it is marked as such via
1723    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1724    is set up correctly, and it is added to the list of specializations 
1725    for that template.  */
1726
1727 tree
1728 check_explicit_specialization (tree declarator, 
1729                                tree decl, 
1730                                int template_count, 
1731                                int flags)
1732 {
1733   int have_def = flags & 2;
1734   int is_friend = flags & 4;
1735   int specialization = 0;
1736   int explicit_instantiation = 0;
1737   int member_specialization = 0;
1738   tree ctype = DECL_CLASS_CONTEXT (decl);
1739   tree dname = DECL_NAME (decl);
1740   tmpl_spec_kind tsk;
1741
1742   tsk = current_tmpl_spec_kind (template_count);
1743
1744   switch (tsk)
1745     {
1746     case tsk_none:
1747       if (processing_specialization) 
1748         {
1749           specialization = 1;
1750           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1751         }
1752       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1753         {
1754           if (is_friend)
1755             /* This could be something like:
1756
1757                template <class T> void f(T);
1758                class S { friend void f<>(int); }  */
1759             specialization = 1;
1760           else
1761             {
1762               /* This case handles bogus declarations like template <>
1763                  template <class T> void f<int>(); */
1764
1765               error ("template-id %qD in declaration of primary template",
1766                      declarator);
1767               return decl;
1768             }
1769         }
1770       break;
1771
1772     case tsk_invalid_member_spec:
1773       /* The error has already been reported in
1774          check_specialization_scope.  */
1775       return error_mark_node;
1776
1777     case tsk_invalid_expl_inst:
1778       error ("template parameter list used in explicit instantiation");
1779
1780       /* Fall through.  */
1781
1782     case tsk_expl_inst:
1783       if (have_def)
1784         error ("definition provided for explicit instantiation");
1785       
1786       explicit_instantiation = 1;
1787       break;
1788
1789     case tsk_excessive_parms:
1790     case tsk_insufficient_parms:
1791       if (tsk == tsk_excessive_parms)
1792         error ("too many template parameter lists in declaration of %qD",
1793                decl);
1794       else if (template_header_count)
1795         error("too few template parameter lists in declaration of %qD", decl);
1796       else
1797         error("explicit specialization of %qD must be introduced by "
1798               "%<template <>%>", decl);
1799
1800       /* Fall through.  */
1801     case tsk_expl_spec:
1802       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1803       if (ctype)
1804         member_specialization = 1;
1805       else
1806         specialization = 1;
1807       break;
1808
1809     case tsk_template:
1810       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1811         {
1812           /* This case handles bogus declarations like template <>
1813              template <class T> void f<int>(); */
1814
1815           if (uses_template_parms (declarator))
1816             error ("function template partial specialization %qD "
1817                    "is not allowed", declarator);
1818           else
1819             error ("template-id %qD in declaration of primary template",
1820                    declarator);
1821           return decl;
1822         }
1823
1824       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1825         /* This is a specialization of a member template, without
1826            specialization the containing class.  Something like:
1827
1828              template <class T> struct S {
1829                template <class U> void f (U); 
1830              };
1831              template <> template <class U> void S<int>::f(U) {}
1832              
1833            That's a specialization -- but of the entire template.  */
1834         specialization = 1;
1835       break;
1836
1837     default:
1838       gcc_unreachable ();
1839     }
1840
1841   if (specialization || member_specialization)
1842     {
1843       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1844       for (; t; t = TREE_CHAIN (t))
1845         if (TREE_PURPOSE (t))
1846           {
1847             pedwarn
1848               ("default argument specified in explicit specialization");
1849             break;
1850           }
1851       if (current_lang_name == lang_name_c)
1852         error ("template specialization with C linkage");
1853     }
1854
1855   if (specialization || member_specialization || explicit_instantiation)
1856     {
1857       tree tmpl = NULL_TREE;
1858       tree targs = NULL_TREE;
1859
1860       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
1861       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1862         {
1863           tree fns;
1864
1865           gcc_assert (TREE_CODE (declarator) == IDENTIFIER_NODE);
1866           if (ctype)
1867             fns = dname;
1868           else
1869             {
1870               /* If there is no class context, the explicit instantiation
1871                  must be at namespace scope.  */
1872               gcc_assert (DECL_NAMESPACE_SCOPE_P (decl));
1873
1874               /* Find the namespace binding, using the declaration
1875                  context.  */
1876               fns = namespace_binding (dname, CP_DECL_CONTEXT (decl));
1877             }
1878
1879           declarator = lookup_template_function (fns, NULL_TREE);
1880         }
1881
1882       if (declarator == error_mark_node)
1883         return error_mark_node;
1884
1885       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1886         {
1887           if (!explicit_instantiation)
1888             /* A specialization in class scope.  This is invalid,
1889                but the error will already have been flagged by
1890                check_specialization_scope.  */
1891             return error_mark_node;
1892           else
1893             {
1894               /* It's not valid to write an explicit instantiation in
1895                  class scope, e.g.:
1896
1897                    class C { template void f(); }
1898
1899                    This case is caught by the parser.  However, on
1900                    something like:
1901                
1902                    template class C { void f(); };
1903
1904                    (which is invalid) we can get here.  The error will be
1905                    issued later.  */
1906               ;
1907             }
1908
1909           return decl;
1910         }
1911       else if (ctype != NULL_TREE 
1912                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1913                    IDENTIFIER_NODE))
1914         {
1915           /* Find the list of functions in ctype that have the same
1916              name as the declared function.  */
1917           tree name = TREE_OPERAND (declarator, 0);
1918           tree fns = NULL_TREE;
1919           int idx;
1920
1921           if (constructor_name_p (name, ctype))
1922             {
1923               int is_constructor = DECL_CONSTRUCTOR_P (decl);
1924               
1925               if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1926                   : !TYPE_HAS_DESTRUCTOR (ctype))
1927                 {
1928                   /* From [temp.expl.spec]:
1929                        
1930                      If such an explicit specialization for the member
1931                      of a class template names an implicitly-declared
1932                      special member function (clause _special_), the
1933                      program is ill-formed.  
1934
1935                      Similar language is found in [temp.explicit].  */
1936                   error ("specialization of implicitly-declared special member function");
1937                   return error_mark_node;
1938                 }
1939
1940               name = is_constructor ? ctor_identifier : dtor_identifier;
1941             }
1942
1943           if (!DECL_CONV_FN_P (decl))
1944             {
1945               idx = lookup_fnfields_1 (ctype, name);
1946               if (idx >= 0)
1947                 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (ctype), idx);
1948             }
1949           else
1950             {
1951               VEC(tree) *methods;
1952               tree ovl;
1953
1954               /* For a type-conversion operator, we cannot do a
1955                  name-based lookup.  We might be looking for `operator
1956                  int' which will be a specialization of `operator T'.
1957                  So, we find *all* the conversion operators, and then
1958                  select from them.  */
1959               fns = NULL_TREE;
1960
1961               methods = CLASSTYPE_METHOD_VEC (ctype);
1962               if (methods)
1963                 for (idx = CLASSTYPE_FIRST_CONVERSION_SLOT;
1964                      VEC_iterate (tree, methods, idx, ovl);
1965                      ++idx)
1966                   {
1967                     if (!DECL_CONV_FN_P (OVL_CURRENT (ovl)))
1968                       /* There are no more conversion functions.  */
1969                       break;
1970
1971                     /* Glue all these conversion functions together
1972                        with those we already have.  */
1973                     for (; ovl; ovl = OVL_NEXT (ovl))
1974                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
1975                   }
1976             }
1977               
1978           if (fns == NULL_TREE) 
1979             {
1980               error ("no member function %qD declared in %qT", name, ctype);
1981               return error_mark_node;
1982             }
1983           else
1984             TREE_OPERAND (declarator, 0) = fns;
1985         }
1986       
1987       /* Figure out what exactly is being specialized at this point.
1988          Note that for an explicit instantiation, even one for a
1989          member function, we cannot tell apriori whether the
1990          instantiation is for a member template, or just a member
1991          function of a template class.  Even if a member template is
1992          being instantiated, the member template arguments may be
1993          elided if they can be deduced from the rest of the
1994          declaration.  */
1995       tmpl = determine_specialization (declarator, decl,
1996                                        &targs, 
1997                                        member_specialization,
1998                                        template_count);
1999             
2000       if (!tmpl || tmpl == error_mark_node)
2001         /* We couldn't figure out what this declaration was
2002            specializing.  */
2003         return error_mark_node;
2004       else
2005         {
2006           tree gen_tmpl = most_general_template (tmpl);
2007
2008           if (explicit_instantiation)
2009             {
2010               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
2011                  is done by do_decl_instantiation later.  */ 
2012
2013               int arg_depth = TMPL_ARGS_DEPTH (targs);
2014               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
2015
2016               if (arg_depth > parm_depth)
2017                 {
2018                   /* If TMPL is not the most general template (for
2019                      example, if TMPL is a friend template that is
2020                      injected into namespace scope), then there will
2021                      be too many levels of TARGS.  Remove some of them
2022                      here.  */
2023                   int i;
2024                   tree new_targs;
2025
2026                   new_targs = make_tree_vec (parm_depth);
2027                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
2028                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
2029                       = TREE_VEC_ELT (targs, i);
2030                   targs = new_targs;
2031                 }
2032                   
2033               return instantiate_template (tmpl, targs, tf_error);
2034             }
2035
2036           /* If we thought that the DECL was a member function, but it
2037              turns out to be specializing a static member function,
2038              make DECL a static member function as well.  */
2039           if (DECL_STATIC_FUNCTION_P (tmpl)
2040               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
2041             revert_static_member_fn (decl);
2042
2043           /* If this is a specialization of a member template of a
2044              template class.  In we want to return the TEMPLATE_DECL,
2045              not the specialization of it.  */
2046           if (tsk == tsk_template)
2047             {
2048               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2049               DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl)) = NULL_TREE;
2050               if (have_def)
2051                 {
2052                   DECL_SOURCE_LOCATION (tmpl) = DECL_SOURCE_LOCATION (decl);
2053                   DECL_SOURCE_LOCATION (DECL_TEMPLATE_RESULT (tmpl))
2054                     = DECL_SOURCE_LOCATION (decl);
2055                 }
2056               return tmpl;
2057             }
2058
2059           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
2060           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
2061
2062           /* Inherit default function arguments from the template
2063              DECL is specializing.  */
2064           copy_default_args_to_explicit_spec (decl);
2065
2066           /* This specialization has the same protection as the
2067              template it specializes.  */
2068           TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
2069           TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
2070
2071           if (is_friend && !have_def)
2072             /* This is not really a declaration of a specialization.
2073                It's just the name of an instantiation.  But, it's not
2074                a request for an instantiation, either.  */
2075             SET_DECL_IMPLICIT_INSTANTIATION (decl);
2076           else if (DECL_CONSTRUCTOR_P (decl) || DECL_DESTRUCTOR_P (decl))
2077             /* This is indeed a specialization.  In case of constructors
2078                and destructors, we need in-charge and not-in-charge
2079                versions in V3 ABI.  */
2080             clone_function_decl (decl, /*update_method_vec_p=*/0);
2081
2082           /* Register this specialization so that we can find it
2083              again.  */
2084           decl = register_specialization (decl, gen_tmpl, targs);
2085         }
2086     }
2087   
2088   return decl;
2089 }
2090
2091 /* TYPE is being declared.  Verify that the use of template headers
2092    and such is reasonable.  Issue error messages if not.  */
2093
2094 void
2095 maybe_check_template_type (tree type)
2096 {
2097   if (template_header_count)
2098     {
2099       /* We are in the scope of some `template <...>' header.  */
2100
2101       int context_depth 
2102         = template_class_depth_real (TYPE_CONTEXT (type),
2103                                      /*count_specializations=*/1);
2104
2105       if (template_header_count <= context_depth)
2106         /* This is OK; the template headers are for the context.  We
2107            are actually too lenient here; like
2108            check_explicit_specialization we should consider the number
2109            of template types included in the actual declaration.  For
2110            example, 
2111
2112              template <class T> struct S {
2113                template <class U> template <class V>
2114                struct I {};
2115              }; 
2116
2117            is invalid, but:
2118
2119              template <class T> struct S {
2120                template <class U> struct I;
2121              }; 
2122
2123              template <class T> template <class U.
2124              struct S<T>::I {};
2125
2126            is not.  */
2127         ; 
2128       else if (template_header_count > context_depth + 1)
2129         /* There are two many template parameter lists.  */
2130         error ("too many template parameter lists in declaration of %qT", type); 
2131     }
2132 }
2133
2134 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
2135    parameters.  These are represented in the same format used for
2136    DECL_TEMPLATE_PARMS.  */
2137
2138 int
2139 comp_template_parms (tree parms1, tree parms2)
2140 {
2141   tree p1;
2142   tree p2;
2143
2144   if (parms1 == parms2)
2145     return 1;
2146
2147   for (p1 = parms1, p2 = parms2; 
2148        p1 != NULL_TREE && p2 != NULL_TREE;
2149        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
2150     {
2151       tree t1 = TREE_VALUE (p1);
2152       tree t2 = TREE_VALUE (p2);
2153       int i;
2154
2155       gcc_assert (TREE_CODE (t1) == TREE_VEC);
2156       gcc_assert (TREE_CODE (t2) == TREE_VEC);
2157
2158       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
2159         return 0;
2160
2161       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i) 
2162         {
2163           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
2164           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
2165
2166           if (TREE_CODE (parm1) != TREE_CODE (parm2))
2167             return 0;
2168
2169           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
2170             continue;
2171           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
2172             return 0;
2173         }
2174     }
2175
2176   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
2177     /* One set of parameters has more parameters lists than the
2178        other.  */
2179     return 0;
2180
2181   return 1;
2182 }
2183
2184 /* Complain if DECL shadows a template parameter.
2185
2186    [temp.local]: A template-parameter shall not be redeclared within its
2187    scope (including nested scopes).  */
2188
2189 void
2190 check_template_shadow (tree decl)
2191 {
2192   tree olddecl;
2193
2194   /* If we're not in a template, we can't possibly shadow a template
2195      parameter.  */
2196   if (!current_template_parms)
2197     return;
2198
2199   /* Figure out what we're shadowing.  */
2200   if (TREE_CODE (decl) == OVERLOAD)
2201     decl = OVL_CURRENT (decl);
2202   olddecl = innermost_non_namespace_value (DECL_NAME (decl));
2203
2204   /* If there's no previous binding for this name, we're not shadowing
2205      anything, let alone a template parameter.  */
2206   if (!olddecl)
2207     return;
2208
2209   /* If we're not shadowing a template parameter, we're done.  Note
2210      that OLDDECL might be an OVERLOAD (or perhaps even an
2211      ERROR_MARK), so we can't just blithely assume it to be a _DECL
2212      node.  */
2213   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
2214     return;
2215
2216   /* We check for decl != olddecl to avoid bogus errors for using a
2217      name inside a class.  We check TPFI to avoid duplicate errors for
2218      inline member templates.  */
2219   if (decl == olddecl 
2220       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
2221     return;
2222
2223   cp_error_at ("declaration of %q#D", decl);
2224   cp_error_at (" shadows template parm %q#D", olddecl);
2225 }
2226
2227 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
2228    ORIG_LEVEL, DECL, and TYPE.  */
2229
2230 static tree
2231 build_template_parm_index (int index, 
2232                            int level, 
2233                            int orig_level, 
2234                            tree decl, 
2235                            tree type)
2236 {
2237   tree t = make_node (TEMPLATE_PARM_INDEX);
2238   TEMPLATE_PARM_IDX (t) = index;
2239   TEMPLATE_PARM_LEVEL (t) = level;
2240   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
2241   TEMPLATE_PARM_DECL (t) = decl;
2242   TREE_TYPE (t) = type;
2243   TREE_CONSTANT (t) = TREE_CONSTANT (decl);
2244   TREE_INVARIANT (t) = TREE_INVARIANT (decl);
2245   TREE_READONLY (t) = TREE_READONLY (decl);
2246
2247   return t;
2248 }
2249
2250 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
2251    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
2252    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
2253    new one is created.  */
2254
2255 static tree 
2256 reduce_template_parm_level (tree index, tree type, int levels)
2257 {
2258   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
2259       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
2260           != TEMPLATE_PARM_LEVEL (index) - levels))
2261     {
2262       tree orig_decl = TEMPLATE_PARM_DECL (index);
2263       tree decl, t;
2264       
2265       decl = build_decl (TREE_CODE (orig_decl), DECL_NAME (orig_decl), type);
2266       TREE_CONSTANT (decl) = TREE_CONSTANT (orig_decl);
2267       TREE_INVARIANT (decl) = TREE_INVARIANT (orig_decl);
2268       TREE_READONLY (decl) = TREE_READONLY (orig_decl);
2269       DECL_ARTIFICIAL (decl) = 1;
2270       SET_DECL_TEMPLATE_PARM_P (decl);
2271       
2272       t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
2273                                      TEMPLATE_PARM_LEVEL (index) - levels,
2274                                      TEMPLATE_PARM_ORIG_LEVEL (index),
2275                                      decl, type);
2276       TEMPLATE_PARM_DESCENDANTS (index) = t;
2277
2278       /* Template template parameters need this.  */
2279       DECL_TEMPLATE_PARMS (decl)
2280         = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
2281     }
2282
2283   return TEMPLATE_PARM_DESCENDANTS (index);
2284 }
2285
2286 /* Process information from new template parameter NEXT and append it to the
2287    LIST being built.  This new parameter is a non-type parameter iff
2288    IS_NON_TYPE is true.  */
2289
2290 tree
2291 process_template_parm (tree list, tree next, bool is_non_type)
2292 {
2293   tree parm;
2294   tree decl = 0;
2295   tree defval;
2296   int idx;
2297
2298   parm = next;
2299   gcc_assert (TREE_CODE (parm) == TREE_LIST);
2300   defval = TREE_PURPOSE (parm);
2301
2302   if (list)
2303     {
2304       tree p = TREE_VALUE (tree_last (list));
2305
2306       if (TREE_CODE (p) == TYPE_DECL || TREE_CODE (p) == TEMPLATE_DECL)
2307         idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
2308       else
2309         idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
2310       ++idx;
2311     }
2312   else
2313     idx = 0;
2314
2315   if (is_non_type)
2316     {
2317       parm = TREE_VALUE (parm);
2318
2319       SET_DECL_TEMPLATE_PARM_P (parm);
2320
2321       /* [temp.param]
2322
2323          The top-level cv-qualifiers on the template-parameter are
2324          ignored when determining its type.  */
2325       TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
2326
2327       /* A template parameter is not modifiable.  */
2328       TREE_CONSTANT (parm) = 1;
2329       TREE_INVARIANT (parm) = 1;
2330       TREE_READONLY (parm) = 1;
2331       if (invalid_nontype_parm_type_p (TREE_TYPE (parm), 1))
2332         TREE_TYPE (parm) = void_type_node;
2333       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
2334       TREE_CONSTANT (decl) = 1;
2335       TREE_INVARIANT (decl) = 1;
2336       TREE_READONLY (decl) = 1;
2337       DECL_INITIAL (parm) = DECL_INITIAL (decl) 
2338         = build_template_parm_index (idx, processing_template_decl,
2339                                      processing_template_decl,
2340                                      decl, TREE_TYPE (parm));
2341     }
2342   else
2343     {
2344       tree t;
2345       parm = TREE_VALUE (TREE_VALUE (parm));
2346       
2347       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
2348         {
2349           t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
2350           /* This is for distinguishing between real templates and template 
2351              template parameters */
2352           TREE_TYPE (parm) = t;
2353           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
2354           decl = parm;
2355         }
2356       else
2357         {
2358           t = make_aggr_type (TEMPLATE_TYPE_PARM);
2359           /* parm is either IDENTIFIER_NODE or NULL_TREE.  */
2360           decl = build_decl (TYPE_DECL, parm, t);
2361         }
2362         
2363       TYPE_NAME (t) = decl;
2364       TYPE_STUB_DECL (t) = decl;
2365       parm = decl;
2366       TEMPLATE_TYPE_PARM_INDEX (t)
2367         = build_template_parm_index (idx, processing_template_decl, 
2368                                      processing_template_decl,
2369                                      decl, TREE_TYPE (parm));
2370     }
2371   DECL_ARTIFICIAL (decl) = 1;
2372   SET_DECL_TEMPLATE_PARM_P (decl);
2373   pushdecl (decl);
2374   parm = build_tree_list (defval, parm);
2375   return chainon (list, parm);
2376 }
2377
2378 /* The end of a template parameter list has been reached.  Process the
2379    tree list into a parameter vector, converting each parameter into a more
2380    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
2381    as PARM_DECLs.  */
2382
2383 tree
2384 end_template_parm_list (tree parms)
2385 {
2386   int nparms;
2387   tree parm, next;
2388   tree saved_parmlist = make_tree_vec (list_length (parms));
2389
2390   current_template_parms
2391     = tree_cons (size_int (processing_template_decl),
2392                  saved_parmlist, current_template_parms);
2393
2394   for (parm = parms, nparms = 0; parm; parm = next, nparms++)
2395     {
2396       next = TREE_CHAIN (parm);
2397       TREE_VEC_ELT (saved_parmlist, nparms) = parm;
2398       TREE_CHAIN (parm) = NULL_TREE;
2399     }
2400
2401   --processing_template_parmlist;
2402
2403   return saved_parmlist;
2404 }
2405
2406 /* end_template_decl is called after a template declaration is seen.  */
2407
2408 void
2409 end_template_decl (void)
2410 {
2411   reset_specialization ();
2412
2413   if (! processing_template_decl)
2414     return;
2415
2416   /* This matches the pushlevel in begin_template_parm_list.  */
2417   finish_scope ();
2418
2419   --processing_template_decl;
2420   current_template_parms = TREE_CHAIN (current_template_parms);
2421 }
2422
2423 /* Given a template argument vector containing the template PARMS.
2424    The innermost PARMS are given first.  */
2425
2426 tree
2427 current_template_args (void)
2428 {
2429   tree header;
2430   tree args = NULL_TREE;
2431   int length = TMPL_PARMS_DEPTH (current_template_parms);
2432   int l = length;
2433
2434   /* If there is only one level of template parameters, we do not
2435      create a TREE_VEC of TREE_VECs.  Instead, we return a single
2436      TREE_VEC containing the arguments.  */
2437   if (length > 1)
2438     args = make_tree_vec (length);
2439
2440   for (header = current_template_parms; header; header = TREE_CHAIN (header))
2441     {
2442       tree a = copy_node (TREE_VALUE (header));
2443       int i;
2444
2445       TREE_TYPE (a) = NULL_TREE;
2446       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
2447         {
2448           tree t = TREE_VEC_ELT (a, i);
2449
2450           /* T will be a list if we are called from within a
2451              begin/end_template_parm_list pair, but a vector directly
2452              if within a begin/end_member_template_processing pair.  */
2453           if (TREE_CODE (t) == TREE_LIST) 
2454             {
2455               t = TREE_VALUE (t);
2456               
2457               if (TREE_CODE (t) == TYPE_DECL 
2458                   || TREE_CODE (t) == TEMPLATE_DECL)
2459                 t = TREE_TYPE (t);
2460               else
2461                 t = DECL_INITIAL (t);
2462               TREE_VEC_ELT (a, i) = t;
2463             }
2464         }
2465
2466       if (length > 1)
2467         TREE_VEC_ELT (args, --l) = a;
2468       else
2469         args = a;
2470     }
2471
2472   return args;
2473 }
2474
2475 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
2476    template PARMS.  If MEMBER_TEMPLATE_P is true, the new template is
2477    a member template.  Used by push_template_decl below.  */
2478
2479 static tree
2480 build_template_decl (tree decl, tree parms, bool member_template_p)
2481 {
2482   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
2483   DECL_TEMPLATE_PARMS (tmpl) = parms;
2484   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
2485   DECL_MEMBER_TEMPLATE_P (tmpl) = member_template_p;
2486   if (DECL_LANG_SPECIFIC (decl))
2487     {
2488       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
2489       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
2490       DECL_DESTRUCTOR_P (tmpl) = DECL_DESTRUCTOR_P (decl);
2491       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
2492       DECL_ASSIGNMENT_OPERATOR_P (tmpl) = DECL_ASSIGNMENT_OPERATOR_P (decl);
2493       if (DECL_OVERLOADED_OPERATOR_P (decl))
2494         SET_OVERLOADED_OPERATOR_CODE (tmpl, 
2495                                       DECL_OVERLOADED_OPERATOR_P (decl));
2496     }
2497
2498   return tmpl;
2499 }
2500
2501 struct template_parm_data
2502 {
2503   /* The level of the template parameters we are currently
2504      processing.  */
2505   int level;
2506
2507   /* The index of the specialization argument we are currently
2508      processing.  */
2509   int current_arg;
2510
2511   /* An array whose size is the number of template parameters.  The
2512      elements are nonzero if the parameter has been used in any one
2513      of the arguments processed so far.  */
2514   int* parms;
2515
2516   /* An array whose size is the number of template arguments.  The
2517      elements are nonzero if the argument makes use of template
2518      parameters of this level.  */
2519   int* arg_uses_template_parms;
2520 };
2521
2522 /* Subroutine of push_template_decl used to see if each template
2523    parameter in a partial specialization is used in the explicit
2524    argument list.  If T is of the LEVEL given in DATA (which is
2525    treated as a template_parm_data*), then DATA->PARMS is marked
2526    appropriately.  */
2527
2528 static int
2529 mark_template_parm (tree t, void* data)
2530 {
2531   int level;
2532   int idx;
2533   struct template_parm_data* tpd = (struct template_parm_data*) data;
2534
2535   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2536     {
2537       level = TEMPLATE_PARM_LEVEL (t);
2538       idx = TEMPLATE_PARM_IDX (t);
2539     }
2540   else
2541     {
2542       level = TEMPLATE_TYPE_LEVEL (t);
2543       idx = TEMPLATE_TYPE_IDX (t);
2544     }
2545
2546   if (level == tpd->level)
2547     {
2548       tpd->parms[idx] = 1;
2549       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2550     }
2551
2552   /* Return zero so that for_each_template_parm will continue the
2553      traversal of the tree; we want to mark *every* template parm.  */
2554   return 0;
2555 }
2556
2557 /* Process the partial specialization DECL.  */
2558
2559 static tree
2560 process_partial_specialization (tree decl)
2561 {
2562   tree type = TREE_TYPE (decl);
2563   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2564   tree specargs = CLASSTYPE_TI_ARGS (type);
2565   tree inner_args = INNERMOST_TEMPLATE_ARGS (specargs);
2566   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2567   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2568   int nargs = TREE_VEC_LENGTH (inner_args);
2569   int ntparms = TREE_VEC_LENGTH (inner_parms);
2570   int  i;
2571   int did_error_intro = 0;
2572   struct template_parm_data tpd;
2573   struct template_parm_data tpd2;
2574
2575   /* We check that each of the template parameters given in the
2576      partial specialization is used in the argument list to the
2577      specialization.  For example:
2578
2579        template <class T> struct S;
2580        template <class T> struct S<T*>;
2581
2582      The second declaration is OK because `T*' uses the template
2583      parameter T, whereas
2584
2585        template <class T> struct S<int>;
2586
2587      is no good.  Even trickier is:
2588
2589        template <class T>
2590        struct S1
2591        {
2592           template <class U>
2593           struct S2;
2594           template <class U>
2595           struct S2<T>;
2596        };
2597
2598      The S2<T> declaration is actually invalid; it is a
2599      full-specialization.  Of course, 
2600
2601           template <class U>
2602           struct S2<T (*)(U)>;
2603
2604      or some such would have been OK.  */
2605   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2606   tpd.parms = alloca (sizeof (int) * ntparms);
2607   memset (tpd.parms, 0, sizeof (int) * ntparms);
2608
2609   tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
2610   memset (tpd.arg_uses_template_parms, 0, sizeof (int) * nargs);
2611   for (i = 0; i < nargs; ++i)
2612     {
2613       tpd.current_arg = i;
2614       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2615                               &mark_template_parm,
2616                               &tpd,
2617                               NULL);
2618     }
2619   for (i = 0; i < ntparms; ++i)
2620     if (tpd.parms[i] == 0)
2621       {
2622         /* One of the template parms was not used in the
2623            specialization.  */
2624         if (!did_error_intro)
2625           {
2626             error ("template parameters not used in partial specialization:");
2627             did_error_intro = 1;
2628           }
2629
2630         error ("        %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2631       }
2632
2633   /* [temp.class.spec]
2634
2635      The argument list of the specialization shall not be identical to
2636      the implicit argument list of the primary template.  */
2637   if (comp_template_args 
2638       (inner_args, 
2639        INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE
2640                                                    (maintmpl)))))
2641     error ("partial specialization %qT does not specialize any template arguments", type);
2642
2643   /* [temp.class.spec]
2644
2645      A partially specialized non-type argument expression shall not
2646      involve template parameters of the partial specialization except
2647      when the argument expression is a simple identifier.
2648
2649      The type of a template parameter corresponding to a specialized
2650      non-type argument shall not be dependent on a parameter of the
2651      specialization.  */
2652   gcc_assert (nargs == DECL_NTPARMS (maintmpl));
2653   tpd2.parms = 0;
2654   for (i = 0; i < nargs; ++i)
2655     {
2656       tree arg = TREE_VEC_ELT (inner_args, i);
2657       if (/* These first two lines are the `non-type' bit.  */
2658           !TYPE_P (arg)
2659           && TREE_CODE (arg) != TEMPLATE_DECL
2660           /* This next line is the `argument expression is not just a
2661              simple identifier' condition and also the `specialized
2662              non-type argument' bit.  */
2663           && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2664         {
2665           if (tpd.arg_uses_template_parms[i])
2666             error ("template argument %qE involves template parameter(s)", arg);
2667           else 
2668             {
2669               /* Look at the corresponding template parameter,
2670                  marking which template parameters its type depends
2671                  upon.  */
2672               tree type = 
2673                 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms, 
2674                                                      i)));
2675
2676               if (!tpd2.parms)
2677                 {
2678                   /* We haven't yet initialized TPD2.  Do so now.  */
2679                   tpd2.arg_uses_template_parms 
2680                     = alloca (sizeof (int) * nargs);
2681                   /* The number of parameters here is the number in the
2682                      main template, which, as checked in the assertion
2683                      above, is NARGS.  */
2684                   tpd2.parms = alloca (sizeof (int) * nargs);
2685                   tpd2.level = 
2686                     TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2687                 }
2688
2689               /* Mark the template parameters.  But this time, we're
2690                  looking for the template parameters of the main
2691                  template, not in the specialization.  */
2692               tpd2.current_arg = i;
2693               tpd2.arg_uses_template_parms[i] = 0;
2694               memset (tpd2.parms, 0, sizeof (int) * nargs);
2695               for_each_template_parm (type,
2696                                       &mark_template_parm,
2697                                       &tpd2,
2698                                       NULL);
2699                   
2700               if (tpd2.arg_uses_template_parms [i])
2701                 {
2702                   /* The type depended on some template parameters.
2703                      If they are fully specialized in the
2704                      specialization, that's OK.  */
2705                   int j;
2706                   for (j = 0; j < nargs; ++j)
2707                     if (tpd2.parms[j] != 0
2708                         && tpd.arg_uses_template_parms [j])
2709                       {
2710                         error ("type %qT of template argument %qE depends "
2711                                "on template parameter(s)", 
2712                                type,
2713                                arg);
2714                         break;
2715                       }
2716                 }
2717             }
2718         }
2719     }
2720
2721   if (retrieve_specialization (maintmpl, specargs, 
2722                                /*class_specializations_p=*/true))
2723     /* We've already got this specialization.  */
2724     return decl;
2725
2726   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
2727     = tree_cons (inner_args, inner_parms,
2728                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
2729   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2730   return decl;
2731 }
2732
2733 /* Check that a template declaration's use of default arguments is not
2734    invalid.  Here, PARMS are the template parameters.  IS_PRIMARY is
2735    nonzero if DECL is the thing declared by a primary template.
2736    IS_PARTIAL is nonzero if DECL is a partial specialization.  */
2737
2738 static void
2739 check_default_tmpl_args (tree decl, tree parms, int is_primary, int is_partial)
2740 {
2741   const char *msg;
2742   int last_level_to_check;
2743   tree parm_level;
2744
2745   /* [temp.param] 
2746
2747      A default template-argument shall not be specified in a
2748      function template declaration or a function template definition, nor
2749      in the template-parameter-list of the definition of a member of a
2750      class template.  */
2751
2752   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
2753     /* You can't have a function template declaration in a local
2754        scope, nor you can you define a member of a class template in a
2755        local scope.  */
2756     return;
2757
2758   if (current_class_type
2759       && !TYPE_BEING_DEFINED (current_class_type)
2760       && DECL_LANG_SPECIFIC (decl)
2761       /* If this is either a friend defined in the scope of the class
2762          or a member function.  */
2763       && (DECL_FUNCTION_MEMBER_P (decl)
2764           ? same_type_p (DECL_CONTEXT (decl), current_class_type)
2765           : DECL_FRIEND_CONTEXT (decl)
2766           ? same_type_p (DECL_FRIEND_CONTEXT (decl), current_class_type)
2767           : false)
2768       /* And, if it was a member function, it really was defined in
2769          the scope of the class.  */
2770       && (!DECL_FUNCTION_MEMBER_P (decl)
2771           || DECL_INITIALIZED_IN_CLASS_P (decl)))
2772     /* We already checked these parameters when the template was
2773        declared, so there's no need to do it again now.  This function
2774        was defined in class scope, but we're processing it's body now
2775        that the class is complete.  */
2776     return;
2777
2778   /* [temp.param]
2779          
2780      If a template-parameter has a default template-argument, all
2781      subsequent template-parameters shall have a default
2782      template-argument supplied.  */
2783   for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2784     {
2785       tree inner_parms = TREE_VALUE (parm_level);
2786       int ntparms = TREE_VEC_LENGTH (inner_parms);
2787       int seen_def_arg_p = 0; 
2788       int i;
2789
2790       for (i = 0; i < ntparms; ++i) 
2791         {
2792           tree parm = TREE_VEC_ELT (inner_parms, i);
2793           if (TREE_PURPOSE (parm))
2794             seen_def_arg_p = 1;
2795           else if (seen_def_arg_p)
2796             {
2797               error ("no default argument for %qD", TREE_VALUE (parm));
2798               /* For better subsequent error-recovery, we indicate that
2799                  there should have been a default argument.  */
2800               TREE_PURPOSE (parm) = error_mark_node;
2801             }
2802         }
2803     }
2804
2805   if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2806     /* For an ordinary class template, default template arguments are
2807        allowed at the innermost level, e.g.:
2808          template <class T = int>
2809          struct S {};
2810        but, in a partial specialization, they're not allowed even
2811        there, as we have in [temp.class.spec]:
2812      
2813          The template parameter list of a specialization shall not
2814          contain default template argument values.  
2815
2816        So, for a partial specialization, or for a function template,
2817        we look at all of them.  */
2818     ;
2819   else
2820     /* But, for a primary class template that is not a partial
2821        specialization we look at all template parameters except the
2822        innermost ones.  */
2823     parms = TREE_CHAIN (parms);
2824
2825   /* Figure out what error message to issue.  */
2826   if (TREE_CODE (decl) == FUNCTION_DECL)
2827     msg = "default template arguments may not be used in function templates";
2828   else if (is_partial)
2829     msg = "default template arguments may not be used in partial specializations";
2830   else
2831     msg = "default argument for template parameter for class enclosing %qD";
2832
2833   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2834     /* If we're inside a class definition, there's no need to
2835        examine the parameters to the class itself.  On the one
2836        hand, they will be checked when the class is defined, and,
2837        on the other, default arguments are valid in things like:
2838          template <class T = double>
2839          struct S { template <class U> void f(U); };
2840        Here the default argument for `S' has no bearing on the
2841        declaration of `f'.  */
2842     last_level_to_check = template_class_depth (current_class_type) + 1;
2843   else
2844     /* Check everything.  */
2845     last_level_to_check = 0;
2846
2847   for (parm_level = parms; 
2848        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check; 
2849        parm_level = TREE_CHAIN (parm_level))
2850     {
2851       tree inner_parms = TREE_VALUE (parm_level);
2852       int i;
2853       int ntparms;
2854
2855       ntparms = TREE_VEC_LENGTH (inner_parms);
2856       for (i = 0; i < ntparms; ++i) 
2857         if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2858           {
2859             if (msg)
2860               {
2861                 error (msg, decl);
2862                 msg = 0;
2863               }
2864
2865             /* Clear out the default argument so that we are not
2866                confused later.  */
2867             TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2868           }
2869
2870       /* At this point, if we're still interested in issuing messages,
2871          they must apply to classes surrounding the object declared.  */
2872       if (msg)
2873         msg = "default argument for template parameter for class enclosing %qD"; 
2874     }
2875 }
2876
2877 /* Worker for push_template_decl_real, called via
2878    for_each_template_parm.  DATA is really an int, indicating the
2879    level of the parameters we are interested in.  If T is a template
2880    parameter of that level, return nonzero.  */
2881
2882 static int
2883 template_parm_this_level_p (tree t, void* data)
2884 {
2885   int this_level = *(int *)data;
2886   int level;
2887
2888   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
2889     level = TEMPLATE_PARM_LEVEL (t);
2890   else
2891     level = TEMPLATE_TYPE_LEVEL (t);
2892   return level == this_level;
2893 }
2894
2895 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
2896    parameters given by current_template_args, or reuses a
2897    previously existing one, if appropriate.  Returns the DECL, or an
2898    equivalent one, if it is replaced via a call to duplicate_decls.  
2899
2900    If IS_FRIEND is nonzero, DECL is a friend declaration.  */
2901
2902 tree
2903 push_template_decl_real (tree decl, int is_friend)
2904 {
2905   tree tmpl;
2906   tree args;
2907   tree info;
2908   tree ctx;
2909   int primary;
2910   int is_partial;
2911   int new_template_p = 0;
2912   /* True if the template is a member template, in the sense of
2913      [temp.mem].  */
2914   bool member_template_p = false;
2915
2916   if (decl == error_mark_node)
2917     return decl;
2918
2919   /* See if this is a partial specialization.  */
2920   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
2921                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2922                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
2923
2924   is_friend |= (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl));
2925
2926   if (is_friend)
2927     /* For a friend, we want the context of the friend function, not
2928        the type of which it is a friend.  */
2929     ctx = DECL_CONTEXT (decl);
2930   else if (CP_DECL_CONTEXT (decl)
2931            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
2932     /* In the case of a virtual function, we want the class in which
2933        it is defined.  */
2934     ctx = CP_DECL_CONTEXT (decl);
2935   else
2936     /* Otherwise, if we're currently defining some class, the DECL
2937        is assumed to be a member of the class.  */
2938     ctx = current_scope ();
2939
2940   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2941     ctx = NULL_TREE;
2942
2943   if (!DECL_CONTEXT (decl))
2944     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2945
2946   /* See if this is a primary template.  */
2947   primary = template_parm_scope_p ();
2948
2949   if (primary)
2950     {
2951       if (DECL_CLASS_SCOPE_P (decl))
2952         member_template_p = true;
2953       if (current_lang_name == lang_name_c)
2954         error ("template with C linkage");
2955       else if (TREE_CODE (decl) == TYPE_DECL 
2956                && ANON_AGGRNAME_P (DECL_NAME (decl))) 
2957         error ("template class without a name");
2958       else if (TREE_CODE (decl) == FUNCTION_DECL)
2959         {
2960           if (DECL_DESTRUCTOR_P (decl))
2961             {
2962               /* [temp.mem]
2963                  
2964                  A destructor shall not be a member template.  */
2965               error ("destructor %qD declared as member template", decl);
2966               return error_mark_node;
2967             }
2968           if (NEW_DELETE_OPNAME_P (DECL_NAME (decl))
2969               && (!TYPE_ARG_TYPES (TREE_TYPE (decl))
2970                   || TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
2971                   || !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
2972                   || (TREE_CHAIN (TYPE_ARG_TYPES ((TREE_TYPE (decl))))
2973                       == void_list_node)))
2974             {
2975               /* [basic.stc.dynamic.allocation] 
2976
2977                  An allocation function can be a function
2978                  template. ... Template allocation functions shall
2979                  have two or more parameters.  */
2980               error ("invalid template declaration of %qD", decl);
2981               return decl;
2982             }
2983         }
2984       else if ((DECL_IMPLICIT_TYPEDEF_P (decl)
2985                 && CLASS_TYPE_P (TREE_TYPE (decl)))
2986                || (TREE_CODE (decl) == VAR_DECL && ctx && CLASS_TYPE_P (ctx)))
2987         /* OK */;
2988       else
2989         {
2990           error ("template declaration of %q#D", decl);
2991           return error_mark_node;
2992         }
2993     }
2994
2995   /* Check to see that the rules regarding the use of default
2996      arguments are not being violated.  */
2997   check_default_tmpl_args (decl, current_template_parms, 
2998                            primary, is_partial);
2999
3000   if (is_partial)
3001     return process_partial_specialization (decl);
3002
3003   args = current_template_args ();
3004
3005   if (!ctx 
3006       || TREE_CODE (ctx) == FUNCTION_DECL
3007       || (CLASS_TYPE_P (ctx) && TYPE_BEING_DEFINED (ctx))
3008       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
3009     {
3010       if (DECL_LANG_SPECIFIC (decl)
3011           && DECL_TEMPLATE_INFO (decl)
3012           && DECL_TI_TEMPLATE (decl))
3013         tmpl = DECL_TI_TEMPLATE (decl);
3014       /* If DECL is a TYPE_DECL for a class-template, then there won't
3015          be DECL_LANG_SPECIFIC.  The information equivalent to
3016          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
3017       else if (DECL_IMPLICIT_TYPEDEF_P (decl) 
3018                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3019                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3020         {
3021           /* Since a template declaration already existed for this
3022              class-type, we must be redeclaring it here.  Make sure
3023              that the redeclaration is valid.  */
3024           redeclare_class_template (TREE_TYPE (decl),
3025                                     current_template_parms);
3026           /* We don't need to create a new TEMPLATE_DECL; just use the
3027              one we already had.  */
3028           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3029         }
3030       else
3031         {
3032           tmpl = build_template_decl (decl, current_template_parms,
3033                                       member_template_p);
3034           new_template_p = 1;
3035
3036           if (DECL_LANG_SPECIFIC (decl)
3037               && DECL_TEMPLATE_SPECIALIZATION (decl))
3038             {
3039               /* A specialization of a member template of a template
3040                  class.  */
3041               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
3042               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
3043               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
3044             }
3045         }
3046     }
3047   else
3048     {
3049       tree a, t, current, parms;
3050       int i;
3051
3052       if (TREE_CODE (decl) == TYPE_DECL)
3053         {
3054           if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
3055                || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
3056               && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
3057               && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
3058             tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
3059           else
3060             {
3061               error ("%qD does not declare a template type", decl);
3062               return decl;
3063             }
3064         }
3065       else if (!DECL_LANG_SPECIFIC (decl) || !DECL_TEMPLATE_INFO (decl))
3066         {
3067           error ("template definition of non-template %q#D", decl);
3068           return decl;
3069         }
3070       else
3071         tmpl = DECL_TI_TEMPLATE (decl);
3072       
3073       if (DECL_FUNCTION_TEMPLATE_P (tmpl)
3074           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl) 
3075           && DECL_TEMPLATE_SPECIALIZATION (decl)
3076           && DECL_MEMBER_TEMPLATE_P (tmpl))
3077         {
3078           tree new_tmpl;
3079
3080           /* The declaration is a specialization of a member
3081              template, declared outside the class.  Therefore, the
3082              innermost template arguments will be NULL, so we
3083              replace them with the arguments determined by the
3084              earlier call to check_explicit_specialization.  */
3085           args = DECL_TI_ARGS (decl);
3086
3087           new_tmpl 
3088             = build_template_decl (decl, current_template_parms,
3089                                    member_template_p);
3090           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
3091           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
3092           DECL_TI_TEMPLATE (decl) = new_tmpl;
3093           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
3094           DECL_TEMPLATE_INFO (new_tmpl) 
3095             = tree_cons (tmpl, args, NULL_TREE);
3096
3097           register_specialization (new_tmpl, 
3098                                    most_general_template (tmpl), 
3099                                    args);
3100           return decl;
3101         }
3102
3103       /* Make sure the template headers we got make sense.  */
3104
3105       parms = DECL_TEMPLATE_PARMS (tmpl);
3106       i = TMPL_PARMS_DEPTH (parms);
3107       if (TMPL_ARGS_DEPTH (args) != i)
3108         {
3109           error ("expected %d levels of template parms for %q#D, got %d",
3110                  i, decl, TMPL_ARGS_DEPTH (args));
3111         }
3112       else
3113         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
3114           {
3115             a = TMPL_ARGS_LEVEL (args, i);
3116             t = INNERMOST_TEMPLATE_PARMS (parms);
3117
3118             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
3119               {
3120                 if (current == decl)
3121                   error ("got %d template parameters for %q#D",
3122                          TREE_VEC_LENGTH (a), decl);
3123                 else
3124                   error ("got %d template parameters for %q#T",
3125                          TREE_VEC_LENGTH (a), current);
3126                 error ("  but %d required", TREE_VEC_LENGTH (t));
3127               }
3128
3129             /* Perhaps we should also check that the parms are used in the
3130                appropriate qualifying scopes in the declarator?  */
3131
3132             if (current == decl)
3133               current = ctx;
3134             else
3135               current = TYPE_CONTEXT (current);
3136           }
3137     }
3138
3139   DECL_TEMPLATE_RESULT (tmpl) = decl;
3140   TREE_TYPE (tmpl) = TREE_TYPE (decl);
3141
3142   /* Push template declarations for global functions and types.  Note
3143      that we do not try to push a global template friend declared in a
3144      template class; such a thing may well depend on the template
3145      parameters of the class.  */
3146   if (new_template_p && !ctx 
3147       && !(is_friend && template_class_depth (current_class_type) > 0))
3148     tmpl = pushdecl_namespace_level (tmpl);
3149
3150   if (primary)
3151     {
3152       DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
3153       if (DECL_CONV_FN_P (tmpl))
3154         {
3155           int depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
3156
3157           /* It is a conversion operator. See if the type converted to
3158              depends on innermost template operands.  */
3159           
3160           if (uses_template_parms_level (TREE_TYPE (TREE_TYPE (tmpl)),
3161                                          depth))
3162             DECL_TEMPLATE_CONV_FN_P (tmpl) = 1;
3163         }
3164     }
3165
3166   /* The DECL_TI_ARGS of DECL contains full set of arguments referring
3167      back to its most general template.  If TMPL is a specialization,
3168      ARGS may only have the innermost set of arguments.  Add the missing
3169      argument levels if necessary.  */
3170   if (DECL_TEMPLATE_INFO (tmpl))
3171     args = add_outermost_template_args (DECL_TI_ARGS (tmpl), args);
3172
3173   info = tree_cons (tmpl, args, NULL_TREE);
3174
3175   if (DECL_IMPLICIT_TYPEDEF_P (decl))
3176     {
3177       SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
3178       if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
3179           && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
3180           /* Don't change the name if we've already set it up.  */
3181           && !IDENTIFIER_TEMPLATE (DECL_NAME (decl)))
3182         DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
3183     }
3184   else if (DECL_LANG_SPECIFIC (decl))
3185     DECL_TEMPLATE_INFO (decl) = info;
3186
3187   return DECL_TEMPLATE_RESULT (tmpl);
3188 }
3189
3190 tree
3191 push_template_decl (tree decl)
3192 {
3193   return push_template_decl_real (decl, 0);
3194 }
3195
3196 /* Called when a class template TYPE is redeclared with the indicated
3197    template PARMS, e.g.:
3198
3199      template <class T> struct S;
3200      template <class T> struct S {};  */
3201
3202 void 
3203 redeclare_class_template (tree type, tree parms)
3204 {
3205   tree tmpl;
3206   tree tmpl_parms;
3207   int i;
3208
3209   if (!TYPE_TEMPLATE_INFO (type))
3210     {
3211       error ("%qT is not a template type", type);
3212       return;
3213     }
3214
3215   tmpl = TYPE_TI_TEMPLATE (type);
3216   if (!PRIMARY_TEMPLATE_P (tmpl))
3217     /* The type is nested in some template class.  Nothing to worry
3218        about here; there are no new template parameters for the nested
3219        type.  */
3220     return;
3221
3222   parms = INNERMOST_TEMPLATE_PARMS (parms);
3223   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
3224
3225   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
3226     {
3227       cp_error_at ("previous declaration %qD", tmpl);
3228       error ("used %d template parameter%s instead of %d",
3229                 TREE_VEC_LENGTH (tmpl_parms), 
3230                 TREE_VEC_LENGTH (tmpl_parms) == 1 ? "" : "s",
3231                 TREE_VEC_LENGTH (parms));
3232       return;
3233     }
3234
3235   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
3236     {
3237       tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
3238       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3239       tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
3240       tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
3241
3242       /* TMPL_PARM and PARM can be either TYPE_DECL, PARM_DECL, or
3243          TEMPLATE_DECL.  */
3244       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm)
3245           || (TREE_CODE (tmpl_parm) != TYPE_DECL
3246               && !same_type_p (TREE_TYPE (tmpl_parm), TREE_TYPE (parm))))
3247         {
3248           cp_error_at ("template parameter %q#D", tmpl_parm);
3249           error ("redeclared here as %q#D", parm);
3250           return;
3251         }
3252
3253       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
3254         {
3255           /* We have in [temp.param]:
3256
3257              A template-parameter may not be given default arguments
3258              by two different declarations in the same scope.  */
3259           error ("redefinition of default argument for %q#D", parm);
3260           error ("%J  original definition appeared here", tmpl_parm);
3261           return;
3262         }
3263
3264       if (parm_default != NULL_TREE)
3265         /* Update the previous template parameters (which are the ones
3266            that will really count) with the new default value.  */
3267         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
3268       else if (tmpl_default != NULL_TREE)
3269         /* Update the new parameters, too; they'll be used as the
3270            parameters for any members.  */
3271         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
3272     }
3273 }
3274
3275 /* Simplify EXPR if it is a non-dependent expression.  Returns the
3276    (possibly simplified) expression.  */
3277
3278 tree
3279 fold_non_dependent_expr (tree expr)
3280 {
3281   /* If we're in a template, but EXPR isn't value dependent, simplify
3282      it.  We're supposed to treat:
3283      
3284        template <typename T> void f(T[1 + 1]);
3285        template <typename T> void f(T[2]);
3286                    
3287      as two declarations of the same function, for example.  */
3288   if (processing_template_decl
3289       && !type_dependent_expression_p (expr)
3290       && !value_dependent_expression_p (expr))
3291     {
3292       HOST_WIDE_INT saved_processing_template_decl;
3293
3294       saved_processing_template_decl = processing_template_decl;
3295       processing_template_decl = 0;
3296       expr = tsubst_copy_and_build (expr,
3297                                     /*args=*/NULL_TREE,
3298                                     tf_error,
3299                                     /*in_decl=*/NULL_TREE,
3300                                     /*function_p=*/false);
3301       processing_template_decl = saved_processing_template_decl;
3302     }
3303   return expr;
3304 }
3305
3306 /* EXPR is an expression which is used in a constant-expression context.
3307    For instance, it could be a VAR_DECL with a constant initializer.
3308    Extract the innest constant expression.
3309    
3310    This is basically a more powerful version of decl_constant_value, which
3311    can be used also in templates where initializers can maintain a
3312    syntactic rather than semantic form (even if they are non-dependent, for
3313    access-checking purposes).  */
3314
3315 tree
3316 fold_decl_constant_value (tree expr)
3317 {
3318   while (true)
3319     {
3320       tree const_expr = decl_constant_value (expr);
3321       /* In a template, the initializer for a VAR_DECL may not be
3322          marked as TREE_CONSTANT, in which case decl_constant_value
3323          will not return the initializer.  Handle that special case
3324          here.  */
3325       if (expr == const_expr
3326           && TREE_CODE (expr) == VAR_DECL
3327           && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (expr)
3328           && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (expr))
3329           /* DECL_INITIAL can be NULL if we are processing a
3330              variable initialized to an expression involving itself.
3331              We know it is initialized to a constant -- but not what
3332              constant, yet.  */
3333           && DECL_INITIAL (expr))
3334         const_expr = DECL_INITIAL (expr);
3335       if (expr == const_expr)
3336         break;
3337       expr = fold_non_dependent_expr (const_expr);
3338     }
3339
3340     return expr;
3341 }
3342
3343 /* Subroutine of convert_nontype_argument. Converts EXPR to TYPE, which
3344    must be a function or a pointer-to-function type, as specified
3345    in [temp.arg.nontype]: disambiguate EXPR if it is an overload set,
3346    and check that the resulting function has external linkage.  */
3347
3348 static tree
3349 convert_nontype_argument_function (tree type, tree expr)
3350 {
3351   tree fns = expr;
3352   tree fn, fn_no_ptr;
3353
3354   fn = instantiate_type (type, fns, tf_none);
3355   if (fn == error_mark_node)
3356     return error_mark_node;
3357
3358   fn_no_ptr = fn;
3359   if (TREE_CODE (fn_no_ptr) == ADDR_EXPR)
3360     fn_no_ptr = TREE_OPERAND (fn_no_ptr, 0);
3361
3362   /* [temp.arg.nontype]/1
3363
3364      A template-argument for a non-type, non-template template-parameter
3365      shall be one of:
3366      [...]
3367      -- the address of an object or function with external linkage.  */
3368   if (!DECL_EXTERNAL_LINKAGE_P (fn_no_ptr))
3369     {
3370       error ("%qE is not a valid template argument for type %qT "
3371              "because function %qD has not external linkage",
3372              expr, type, fn_no_ptr);
3373       return NULL_TREE;
3374     }
3375
3376   return fn;
3377 }
3378
3379 /* Attempt to convert the non-type template parameter EXPR to the
3380    indicated TYPE.  If the conversion is successful, return the
3381    converted value.  If the conversion is unsuccessful, return
3382    NULL_TREE if we issued an error message, or error_mark_node if we
3383    did not.  We issue error messages for out-and-out bad template
3384    parameters, but not simply because the conversion failed, since we
3385    might be just trying to do argument deduction.  Both TYPE and EXPR
3386    must be non-dependent.
3387
3388    The conversion follows the special rules described in
3389    [temp.arg.nontype], and it is much more strict than an implicit
3390    conversion.
3391
3392    This function is called twice for each template argument (see
3393    lookup_template_class for a more accurate description of this
3394    problem). This means that we need to handle expressions which
3395    are not valid in a C++ source, but can be created from the
3396    first call (for instance, casts to perform conversions). These
3397    hacks can go away after we fix the double coercion problem.  */
3398
3399 static tree
3400 convert_nontype_argument (tree type, tree expr)
3401 {
3402   tree expr_type;
3403
3404   /* Detect immediately string literals as invalid non-type argument.
3405      This special-case is not needed for correctness (we would easily
3406      catch this later), but only to provide better diagnostic for this
3407      common user mistake. As suggested by DR 100, we do not mention
3408      linkage issues in the diagnostic as this is not the point.  */
3409   if (TREE_CODE (expr) == STRING_CST)
3410     {
3411       error ("%qE is not a valid template argument for type %qT "
3412              "because string literals can never be used in this context",
3413              expr, type);
3414       return NULL_TREE;
3415     }
3416
3417   /* If we are in a template, EXPR may be non-dependent, but still
3418      have a syntactic, rather than semantic, form.  For example, EXPR
3419      might be a SCOPE_REF, rather than the VAR_DECL to which the
3420      SCOPE_REF refers.  Preserving the qualifying scope is necessary
3421      so that access checking can be performed when the template is
3422      instantiated -- but here we need the resolved form so that we can
3423      convert the argument.  */
3424   expr = fold_non_dependent_expr (expr);
3425   expr_type = TREE_TYPE (expr);
3426
3427   /* HACK: Due to double coercion, we can get a
3428      NOP_EXPR<REFERENCE_TYPE>(ADDR_EXPR<POINTER_TYPE> (arg)) here,
3429      which is the tree that we built on the first call (see
3430      below when coercing to reference to object or to reference to
3431      function). We just strip everything and get to the arg.
3432      See g++.old-deja/g++.oliva/template4.C and g++.dg/template/nontype9.C
3433      for examples.  */
3434   if (TREE_CODE (expr) == NOP_EXPR)
3435     {
3436       if (TYPE_REF_OBJ_P (type) || TYPE_REFFN_P (type))
3437         {
3438           /* ??? Maybe we could use convert_from_reference here, but we
3439              would need to relax its constraints because the NOP_EXPR
3440              could actually change the type to something more cv-qualified,
3441              and this is not folded by convert_from_reference.  */
3442           tree addr = TREE_OPERAND (expr, 0);
3443           gcc_assert (TREE_CODE (expr_type) == REFERENCE_TYPE);
3444           gcc_assert (TREE_CODE (addr) == ADDR_EXPR);
3445           gcc_assert (TREE_CODE (TREE_TYPE (addr)) == POINTER_TYPE);
3446           gcc_assert (same_type_ignoring_top_level_qualifiers_p
3447                       (TREE_TYPE (expr_type),
3448                        TREE_TYPE (TREE_TYPE (addr))));
3449
3450           expr = TREE_OPERAND (addr, 0);
3451           expr_type = TREE_TYPE (expr);
3452         }
3453
3454       /* We could also generate a NOP_EXPR(ADDR_EXPR()) when the
3455          parameter is a pointer to object, through decay and
3456          qualification conversion. Let's strip everything.  */
3457       else if (TYPE_PTROBV_P (type))
3458         {
3459           STRIP_NOPS (expr);
3460           gcc_assert (TREE_CODE (expr) == ADDR_EXPR);
3461           gcc_assert (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE);
3462           /* Skip the ADDR_EXPR only if it is part of the decay for
3463              an array. Otherwise, it is part of the original argument
3464              in the source code.  */
3465           if (TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == ARRAY_TYPE)
3466             expr = TREE_OPERAND (expr, 0);
3467           expr_type = TREE_TYPE (expr);
3468         }
3469     }
3470
3471   /* [temp.arg.nontype]/5, bullet 1
3472
3473      For a non-type template-parameter of integral or enumeration type,
3474      integral promotions (_conv.prom_) and integral conversions
3475      (_conv.integral_) are applied.  */
3476   if (INTEGRAL_TYPE_P (type))
3477     {
3478       if (!INTEGRAL_TYPE_P (expr_type))
3479         return error_mark_node;
3480
3481       expr = fold_decl_constant_value (expr);
3482       /* Notice that there are constant expressions like '4 % 0' which
3483          do not fold into integer constants.  */
3484       if (TREE_CODE (expr) != INTEGER_CST)
3485         {
3486           error ("%qE is not a valid template argument for type %qT "
3487                  "because it is a non-constant expression", expr, type);
3488           return NULL_TREE;
3489         }
3490
3491       /* At this point, an implicit conversion does what we want,
3492          because we already know that the expression is of integral
3493          type.  */
3494       expr = ocp_convert (type, expr, CONV_IMPLICIT, LOOKUP_PROTECT);
3495       if (expr == error_mark_node)
3496         return error_mark_node;
3497
3498       /* Conversion was allowed: fold it to a bare integer constant.  */
3499       expr = fold (expr);
3500     }
3501   /* [temp.arg.nontype]/5, bullet 2
3502
3503      For a non-type template-parameter of type pointer to object,
3504      qualification conversions (_conv.qual_) and the array-to-pointer
3505      conversion (_conv.array_) are applied.  */
3506   else if (TYPE_PTROBV_P (type))
3507     {
3508       /* [temp.arg.nontype]/1  (TC1 version, DR 49):
3509
3510          A template-argument for a non-type, non-template template-parameter
3511          shall be one of: [...]
3512
3513          -- the name of a non-type template-parameter;
3514          -- the address of an object or function with external linkage, [...]
3515             expressed as "& id-expression" where the & is optional if the name
3516             refers to a function or array, or if the corresponding
3517             template-parameter is a reference.
3518             
3519         Here, we do not care about functions, as they are invalid anyway
3520         for a parameter of type pointer-to-object.  */
3521       bool constant_address_p =
3522         (TREE_CODE (expr) == ADDR_EXPR
3523          || TREE_CODE (expr_type) == ARRAY_TYPE
3524          || (DECL_P (expr) && DECL_TEMPLATE_PARM_P (expr)));
3525
3526       expr = decay_conversion (expr);
3527       if (expr == error_mark_node)
3528         return error_mark_node;
3529
3530       expr = perform_qualification_conversions (type, expr);
3531       if (expr == error_mark_node)
3532         return error_mark_node;
3533
3534       if (!constant_address_p)
3535         {
3536             error ("%qE is not a valid template argument for type %qT "
3537                   "because it is not a constant pointer", expr, type);
3538             return NULL_TREE;
3539         }
3540     }
3541   /* [temp.arg.nontype]/5, bullet 3
3542
3543      For a non-type template-parameter of type reference to object, no
3544      conversions apply. The type referred to by the reference may be more
3545      cv-qualified than the (otherwise identical) type of the
3546      template-argument. The template-parameter is bound directly to the
3547      template-argument, which must be an lvalue.  */
3548   else if (TYPE_REF_OBJ_P (type))
3549     {
3550       if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (type),
3551                                                       expr_type))
3552         return error_mark_node;
3553
3554       if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
3555         {
3556           error ("%qE is not a valid template argument for type %qT "
3557                  "because of conflicts in cv-qualification", expr, type);
3558           return NULL_TREE;
3559         }
3560         
3561       if (!real_lvalue_p (expr))
3562         {
3563           error ("%qE is not a valid template argument for type %qT "
3564                  "because it is not a lvalue", expr, type);
3565           return NULL_TREE;
3566         }
3567
3568       /* [temp.arg.nontype]/1
3569
3570          A template-argument for a non-type, non-template template-parameter
3571          shall be one of: [...]
3572
3573          -- the address of an object or function with external linkage.  */
3574       if (!DECL_EXTERNAL_LINKAGE_P (expr))
3575         {
3576           error ("%qE is not a valid template argument for type %qT "
3577                  "because object %qD has not external linkage",
3578                  expr, type, expr);
3579           return NULL_TREE;
3580         }
3581
3582       expr = build_nop (type, build_address (expr));
3583     }
3584   /* [temp.arg.nontype]/5, bullet 4
3585
3586      For a non-type template-parameter of type pointer to function, only
3587      the function-to-pointer conversion (_conv.func_) is applied. If the
3588      template-argument represents a set of overloaded functions (or a
3589      pointer to such), the matching function is selected from the set
3590      (_over.over_).  */
3591   else if (TYPE_PTRFN_P (type))
3592     {
3593       /* If the argument is a template-id, we might not have enough
3594          context information to decay the pointer.
3595          ??? Why static5.C requires decay and subst1.C works fine
3596          even without it?  */
3597       if (!type_unknown_p (expr_type))
3598         {
3599           expr = decay_conversion (expr);
3600           if (expr == error_mark_node)
3601             return error_mark_node;
3602         }
3603
3604       expr = convert_nontype_argument_function (type, expr);
3605       if (!expr || expr == error_mark_node)
3606         return expr;
3607     }
3608   /* [temp.arg.nontype]/5, bullet 5
3609
3610      For a non-type template-parameter of type reference to function, no
3611      conversions apply. If the template-argument represents a set of
3612      overloaded functions, the matching function is selected from the set
3613      (_over.over_).  */
3614   else if (TYPE_REFFN_P (type))
3615     {
3616       if (TREE_CODE (expr) == ADDR_EXPR)
3617         {
3618           error ("%qE is not a valid template argument for type %qT "
3619                  "because it is a pointer", expr, type);
3620           inform ("try using %qE instead", TREE_OPERAND (expr, 0));
3621           return NULL_TREE;
3622         }
3623
3624       expr = convert_nontype_argument_function (TREE_TYPE (type), expr);
3625       if (!expr || expr == error_mark_node)
3626         return expr;
3627
3628       expr = build_nop(type, build_address (expr));
3629     }
3630   /* [temp.arg.nontype]/5, bullet 6
3631
3632      For a non-type template-parameter of type pointer to member function,
3633      no conversions apply. If the template-argument represents a set of
3634      overloaded member functions, the matching member function is selected
3635      from the set (_over.over_).  */
3636   else if (TYPE_PTRMEMFUNC_P (type))
3637     {
3638       expr = instantiate_type (type, expr, tf_none);
3639       if (expr == error_mark_node)
3640         return error_mark_node;
3641
3642       /* There is no way to disable standard conversions in
3643          resolve_address_of_overloaded_function (called by
3644          instantiate_type). It is possible that the call succeeded by
3645          converting &B::I to &D::I (where B is a base of D), so we need
3646          to reject this conversion here.
3647
3648          Actually, even if there was a way to disable standard conversions,
3649          it would still be better to reject them here so that we can
3650          provide a superior diagnostic.  */
3651       if (!same_type_p (TREE_TYPE (expr), type))
3652         {
3653           /* Make sure we are just one standard conversion off.  */
3654           gcc_assert (can_convert (type, TREE_TYPE (expr)));
3655           error ("%qE is not a valid template argument for type %qT "
3656                  "because it is of type %qT", expr, type,
3657                  TREE_TYPE (expr));
3658           inform ("standard conversions are not allowed in this context");
3659           return NULL_TREE;
3660         }
3661     }
3662   /* [temp.arg.nontype]/5, bullet 7
3663
3664      For a non-type template-parameter of type pointer to data member,
3665      qualification conversions (_conv.qual_) are applied.  */
3666   else if (TYPE_PTRMEM_P (type))
3667     {
3668       expr = perform_qualification_conversions (type, expr);
3669       if (expr == error_mark_node)
3670         return expr;
3671     }
3672   /* A template non-type parameter must be one of the above.  */
3673   else
3674     gcc_unreachable ();
3675
3676   /* Sanity check: did we actually convert the argument to the
3677      right type?  */
3678   gcc_assert (same_type_p (type, TREE_TYPE (expr)));
3679   return expr;
3680 }
3681
3682
3683 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for 
3684    template template parameters.  Both PARM_PARMS and ARG_PARMS are 
3685    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL 
3686    or PARM_DECL.
3687    
3688    ARG_PARMS may contain more parameters than PARM_PARMS.  If this is 
3689    the case, then extra parameters must have default arguments.
3690
3691    Consider the example:
3692      template <class T, class Allocator = allocator> class vector;
3693      template<template <class U> class TT> class C;
3694
3695    C<vector> is a valid instantiation.  PARM_PARMS for the above code 
3696    contains a TYPE_DECL (for U),  ARG_PARMS contains two TYPE_DECLs (for 
3697    T and Allocator) and OUTER_ARGS contains the argument that is used to 
3698    substitute the TT parameter.  */
3699
3700 static int
3701 coerce_template_template_parms (tree parm_parms, 
3702                                 tree arg_parms, 
3703                                 tsubst_flags_t complain, 
3704                                 tree in_decl,
3705                                 tree outer_args)
3706 {
3707   int nparms, nargs, i;
3708   tree parm, arg;
3709
3710   gcc_assert (TREE_CODE (parm_parms) == TREE_VEC);
3711   gcc_assert (TREE_CODE (arg_parms) == TREE_VEC);
3712
3713   nparms = TREE_VEC_LENGTH (parm_parms);
3714   nargs = TREE_VEC_LENGTH (arg_parms);
3715
3716   /* The rule here is opposite of coerce_template_parms.  */
3717   if (nargs < nparms
3718       || (nargs > nparms
3719           && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3720     return 0;
3721
3722   for (i = 0; i < nparms; ++i)
3723     {
3724       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3725       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3726
3727       if (arg == NULL_TREE || arg == error_mark_node
3728           || parm == NULL_TREE || parm == error_mark_node)
3729         return 0;
3730
3731       if (TREE_CODE (arg) != TREE_CODE (parm))
3732         return 0;
3733
3734       switch (TREE_CODE (parm))
3735         {
3736         case TYPE_DECL:
3737           break;
3738
3739         case TEMPLATE_DECL:
3740           /* We encounter instantiations of templates like
3741                template <template <template <class> class> class TT>
3742                class C;  */
3743           {
3744             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3745             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3746
3747             if (!coerce_template_template_parms
3748                 (parmparm, argparm, complain, in_decl, outer_args))
3749               return 0;
3750           }
3751           break;
3752
3753         case PARM_DECL:
3754           /* The tsubst call is used to handle cases such as
3755
3756                template <int> class C {};
3757                template <class T, template <T> class TT> class D {};
3758                D<int, C> d;
3759
3760              i.e. the parameter list of TT depends on earlier parameters.  */
3761           if (!dependent_type_p (TREE_TYPE (arg))
3762               && !same_type_p
3763                     (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3764                              TREE_TYPE (arg)))
3765             return 0;
3766           break;
3767           
3768         default:
3769           gcc_unreachable ();
3770         }
3771     }
3772   return 1;
3773 }
3774
3775 /* Convert the indicated template ARG as necessary to match the
3776    indicated template PARM.  Returns the converted ARG, or
3777    error_mark_node if the conversion was unsuccessful.  Error and
3778    warning messages are issued under control of COMPLAIN.  This
3779    conversion is for the Ith parameter in the parameter list.  ARGS is
3780    the full set of template arguments deduced so far.  */
3781
3782 static tree
3783 convert_template_argument (tree parm, 
3784                            tree arg, 
3785                            tree args, 
3786                            tsubst_flags_t complain, 
3787                            int i, 
3788                            tree in_decl)
3789 {
3790   tree val;
3791   tree inner_args;
3792   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3793   
3794   inner_args = INNERMOST_TEMPLATE_ARGS (args);
3795
3796   if (TREE_CODE (arg) == TREE_LIST 
3797       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
3798     {  
3799       /* The template argument was the name of some
3800          member function.  That's usually
3801          invalid, but static members are OK.  In any
3802          case, grab the underlying fields/functions
3803          and issue an error later if required.  */
3804       arg = TREE_VALUE (arg);
3805       TREE_TYPE (arg) = unknown_type_node;
3806     }
3807
3808   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3809   requires_type = (TREE_CODE (parm) == TYPE_DECL
3810                    || requires_tmpl_type);
3811
3812   is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3813                    && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3814                   || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3815                   || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
3816   
3817   if (is_tmpl_type
3818       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3819           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
3820     arg = TYPE_STUB_DECL (arg);
3821
3822   is_type = TYPE_P (arg) || is_tmpl_type;
3823
3824   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3825       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3826     {
3827       pedwarn ("to refer to a type member of a template parameter, "
3828                "use %<typename %E%>", arg);
3829       
3830       arg = make_typename_type (TREE_OPERAND (arg, 0),
3831                                 TREE_OPERAND (arg, 1),
3832                                 complain & tf_error);
3833       is_type = 1;
3834     }
3835   if (is_type != requires_type)
3836     {
3837       if (in_decl)
3838         {
3839           if (complain & tf_error)
3840             {
3841               error ("type/value mismatch at argument %d in template "
3842                      "parameter list for %qD",
3843                      i + 1, in_decl);
3844               if (is_type)
3845                 error ("  expected a constant of type %qT, got %qT",
3846                        TREE_TYPE (parm),
3847                        (is_tmpl_type ? DECL_NAME (arg) : arg));
3848               else if (requires_tmpl_type)
3849                 error ("  expected a class template, got %qE", arg);
3850               else
3851                 error ("  expected a type, got %qE", arg);
3852             }
3853         }
3854       return error_mark_node;
3855     }
3856   if (is_tmpl_type ^ requires_tmpl_type)
3857     {
3858       if (in_decl && (complain & tf_error))
3859         {
3860           error ("type/value mismatch at argument %d in template "
3861                  "parameter list for %qD",
3862                  i + 1, in_decl);
3863           if (is_tmpl_type)
3864             error ("  expected a type, got %qT", DECL_NAME (arg));
3865           else
3866             error ("  expected a class template, got %qT", arg);
3867         }
3868       return error_mark_node;
3869     }
3870       
3871   if (is_type)
3872     {
3873       if (requires_tmpl_type)
3874         {
3875           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3876             /* The number of argument required is not known yet.
3877                Just accept it for now.  */
3878             val = TREE_TYPE (arg);
3879           else
3880             {
3881               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3882               tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3883
3884               if (coerce_template_template_parms (parmparm, argparm,
3885                                                   complain, in_decl,
3886                                                   inner_args))
3887                 {
3888                   val = arg;
3889                   
3890                   /* TEMPLATE_TEMPLATE_PARM node is preferred over 
3891                      TEMPLATE_DECL.  */
3892                   if (val != error_mark_node 
3893                       && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3894                     val = TREE_TYPE (val);
3895                 }
3896               else
3897                 {
3898                   if (in_decl && (complain & tf_error))
3899                     {
3900                       error ("type/value mismatch at argument %d in "
3901                              "template parameter list for %qD",
3902                              i + 1, in_decl);
3903                       error ("  expected a template of type %qD, got %qD",
3904                              parm, arg);
3905                     }
3906                   
3907                   val = error_mark_node;
3908                 }
3909             }
3910         }
3911       else
3912         val = arg;
3913     }
3914   else
3915     {
3916       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3917
3918       if (invalid_nontype_parm_type_p (t, complain))
3919         return error_mark_node;
3920       
3921       if (!uses_template_parms (arg) && !uses_template_parms (t))
3922         /* We used to call digest_init here.  However, digest_init
3923            will report errors, which we don't want when complain
3924            is zero.  More importantly, digest_init will try too
3925            hard to convert things: for example, `0' should not be
3926            converted to pointer type at this point according to
3927            the standard.  Accepting this is not merely an
3928            extension, since deciding whether or not these
3929            conversions can occur is part of determining which
3930            function template to call, or whether a given explicit
3931            argument specification is valid.  */
3932         val = convert_nontype_argument (t, arg);
3933       else
3934         val = arg;
3935
3936       if (val == NULL_TREE)
3937         val = error_mark_node;
3938       else if (val == error_mark_node && (complain & tf_error))
3939         error ("could not convert template argument %qE to %qT",  arg, t);
3940     }
3941
3942   return val;
3943 }
3944
3945 /* Convert all template arguments to their appropriate types, and
3946    return a vector containing the innermost resulting template
3947    arguments.  If any error occurs, return error_mark_node. Error and
3948    warning messages are issued under control of COMPLAIN.
3949
3950    If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
3951    provided in ARGLIST, or else trailing parameters must have default
3952    values.  If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3953    deduction for any unspecified trailing arguments.  */
3954    
3955 static tree
3956 coerce_template_parms (tree parms, 
3957                        tree args, 
3958                        tree in_decl,
3959                        tsubst_flags_t complain,
3960                        int require_all_arguments)
3961 {
3962   int nparms, nargs, i, lost = 0;
3963   tree inner_args;
3964   tree new_args;
3965   tree new_inner_args;
3966
3967   inner_args = INNERMOST_TEMPLATE_ARGS (args);
3968   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
3969   nparms = TREE_VEC_LENGTH (parms);
3970
3971   if (nargs > nparms
3972       || (nargs < nparms
3973           && require_all_arguments
3974           && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
3975     {
3976       if (complain & tf_error) 
3977         {
3978           error ("wrong number of template arguments (%d, should be %d)",
3979                  nargs, nparms);
3980           
3981           if (in_decl)
3982             cp_error_at ("provided for %qD", in_decl);
3983         }
3984
3985       return error_mark_node;
3986     }
3987
3988   new_inner_args = make_tree_vec (nparms);
3989   new_args = add_outermost_template_args (args, new_inner_args);
3990   for (i = 0; i < nparms; i++)
3991     {
3992       tree arg;
3993       tree parm;
3994
3995       /* Get the Ith template parameter.  */
3996       parm = TREE_VEC_ELT (parms, i);
3997
3998       /* Calculate the Ith argument.  */
3999       if (i < nargs)
4000         arg = TREE_VEC_ELT (inner_args, i);
4001       else if (require_all_arguments)
4002         /* There must be a default arg in this case.  */
4003         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
4004                                    complain, in_decl);
4005       else
4006         break;
4007       
4008       gcc_assert (arg);
4009       if (arg == error_mark_node)
4010         error ("template argument %d is invalid", i + 1);
4011       else 
4012         arg = convert_template_argument (TREE_VALUE (parm), 
4013                                          arg, new_args, complain, i,
4014                                          in_decl); 
4015       
4016       if (arg == error_mark_node)
4017         lost++;
4018       TREE_VEC_ELT (new_inner_args, i) = arg;
4019     }
4020
4021   if (lost)
4022     return error_mark_node;
4023
4024   return new_inner_args;
4025 }
4026
4027 /* Returns 1 if template args OT and NT are equivalent.  */
4028
4029 static int
4030 template_args_equal (tree ot, tree nt)
4031 {
4032   if (nt == ot)
4033     return 1;
4034
4035   if (TREE_CODE (nt) == TREE_VEC)
4036     /* For member templates */
4037     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
4038   else if (TYPE_P (nt))
4039     return TYPE_P (ot) && same_type_p (ot, nt);
4040   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
4041     return 0;
4042   else
4043     return cp_tree_equal (ot, nt);
4044 }
4045
4046 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
4047    of template arguments.  Returns 0 otherwise.  */
4048
4049 int
4050 comp_template_args (tree oldargs, tree newargs)
4051 {
4052   int i;
4053
4054   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
4055     return 0;
4056
4057   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
4058     {
4059       tree nt = TREE_VEC_ELT (newargs, i);
4060       tree ot = TREE_VEC_ELT (oldargs, i);
4061
4062       if (! template_args_equal (ot, nt))
4063         return 0;
4064     }
4065   return 1;
4066 }
4067
4068 /* Given class template name and parameter list, produce a user-friendly name
4069    for the instantiation.  */
4070
4071 static char *
4072 mangle_class_name_for_template (const char* name, tree parms, tree arglist)
4073 {
4074   static struct obstack scratch_obstack;
4075   static char *scratch_firstobj;
4076   int i, nparms;
4077
4078   if (!scratch_firstobj)
4079     gcc_obstack_init (&scratch_obstack);
4080   else
4081     obstack_free (&scratch_obstack, scratch_firstobj);
4082   scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
4083
4084 #define ccat(C) obstack_1grow (&scratch_obstack, (C));
4085 #define cat(S)  obstack_grow (&scratch_obstack, (S), strlen (S))
4086
4087   cat (name);
4088   ccat ('<');
4089   nparms = TREE_VEC_LENGTH (parms);
4090   arglist = INNERMOST_TEMPLATE_ARGS (arglist);
4091   gcc_assert (nparms == TREE_VEC_LENGTH (arglist));
4092   for (i = 0; i < nparms; i++)
4093     {
4094       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
4095       tree arg = TREE_VEC_ELT (arglist, i);
4096
4097       if (i)
4098         ccat (',');
4099
4100       if (TREE_CODE (parm) == TYPE_DECL)
4101         {
4102           cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4103           continue;
4104         }
4105       else if (TREE_CODE (parm) == TEMPLATE_DECL)
4106         {
4107           if (TREE_CODE (arg) == TEMPLATE_DECL)
4108             {
4109               /* Already substituted with real template.  Just output 
4110                  the template name here */
4111               tree context = DECL_CONTEXT (arg);
4112               if (context)
4113                 {
4114                   /* The template may be defined in a namespace, or
4115                      may be a member template.  */
4116                   gcc_assert (TREE_CODE (context) == NAMESPACE_DECL
4117                               || CLASS_TYPE_P (context));
4118                   cat (decl_as_string (DECL_CONTEXT (arg),
4119                                       TFF_PLAIN_IDENTIFIER));
4120                   cat ("::");
4121                 }
4122               cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
4123             }
4124           else
4125             /* Output the parameter declaration.  */
4126             cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
4127           continue;
4128         }
4129       else
4130         gcc_assert (TREE_CODE (parm) == PARM_DECL);
4131
4132       /* No need to check arglist against parmlist here; we did that
4133          in coerce_template_parms, called from lookup_template_class.  */
4134       cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
4135     }
4136   {
4137     char *bufp = obstack_next_free (&scratch_obstack);
4138     int offset = 0;
4139     while (bufp[offset - 1] == ' ')
4140       offset--;
4141     obstack_blank_fast (&scratch_obstack, offset);
4142
4143     /* B<C<char> >, not B<C<char>> */
4144     if (bufp[offset - 1] == '>')
4145       ccat (' ');
4146   }
4147   ccat ('>');
4148   ccat ('\0');
4149   return (char *) obstack_base (&scratch_obstack);
4150 }
4151
4152 static tree
4153 classtype_mangled_name (tree t)
4154 {
4155   if (CLASSTYPE_TEMPLATE_INFO (t)
4156       /* Specializations have already had their names set up in
4157          lookup_template_class.  */
4158       && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
4159     {
4160       tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
4161
4162       /* For non-primary templates, the template parameters are
4163          implicit from their surrounding context.  */
4164       if (PRIMARY_TEMPLATE_P (tmpl))
4165         {
4166           tree name = DECL_NAME (tmpl);
4167           char *mangled_name = mangle_class_name_for_template
4168             (IDENTIFIER_POINTER (name), 
4169              DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
4170              CLASSTYPE_TI_ARGS (t));
4171           tree id = get_identifier (mangled_name);
4172           IDENTIFIER_TEMPLATE (id) = name;
4173           return id;
4174         }
4175     }
4176
4177   return TYPE_IDENTIFIER (t);
4178 }
4179
4180 static void
4181 add_pending_template (tree d)
4182 {
4183   tree ti = (TYPE_P (d)
4184              ? CLASSTYPE_TEMPLATE_INFO (d)
4185              : DECL_TEMPLATE_INFO (d));
4186   tree pt;
4187   int level;
4188
4189   if (TI_PENDING_TEMPLATE_FLAG (ti))
4190     return;
4191
4192   /* We are called both from instantiate_decl, where we've already had a
4193      tinst_level pushed, and instantiate_template, where we haven't.
4194      Compensate.  */
4195   level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
4196
4197   if (level)
4198     push_tinst_level (d);
4199
4200   pt = tree_cons (current_tinst_level, d, NULL_TREE);
4201   if (last_pending_template)
4202     TREE_CHAIN (last_pending_template) = pt;
4203   else
4204     pending_templates = pt;
4205
4206   last_pending_template = pt;
4207
4208   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
4209
4210   if (level)
4211     pop_tinst_level ();
4212 }
4213
4214
4215 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
4216    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
4217    documentation for TEMPLATE_ID_EXPR.  */
4218
4219 tree
4220 lookup_template_function (tree fns, tree arglist)
4221 {
4222   tree type;
4223
4224   if (fns == error_mark_node || arglist == error_mark_node)
4225     return error_mark_node;
4226
4227   gcc_assert (!arglist || TREE_CODE (arglist) == TREE_VEC);
4228   if (fns == NULL_TREE 
4229       || TREE_CODE (fns) == FUNCTION_DECL)
4230     {
4231       error ("non-template used as template");
4232       return error_mark_node;
4233     }
4234
4235   gcc_assert (TREE_CODE (fns) == TEMPLATE_DECL
4236               || TREE_CODE (fns) == OVERLOAD
4237               || BASELINK_P (fns)
4238               || TREE_CODE (fns) == IDENTIFIER_NODE);
4239
4240   if (BASELINK_P (fns))
4241     {
4242       BASELINK_FUNCTIONS (fns) = build2 (TEMPLATE_ID_EXPR,
4243                                          unknown_type_node,
4244                                          BASELINK_FUNCTIONS (fns),
4245                                          arglist);
4246       return fns;
4247     }
4248
4249   type = TREE_TYPE (fns);
4250   if (TREE_CODE (fns) == OVERLOAD || !type)
4251     type = unknown_type_node;
4252   
4253   return build2 (TEMPLATE_ID_EXPR, type, fns, arglist);
4254 }
4255
4256 /* Within the scope of a template class S<T>, the name S gets bound
4257    (in build_self_reference) to a TYPE_DECL for the class, not a
4258    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
4259    or one of its enclosing classes, and that type is a template,
4260    return the associated TEMPLATE_DECL.  Otherwise, the original
4261    DECL is returned.  */
4262
4263 tree
4264 maybe_get_template_decl_from_type_decl (tree decl)
4265 {
4266   return (decl != NULL_TREE
4267           && TREE_CODE (decl) == TYPE_DECL 
4268           && DECL_ARTIFICIAL (decl)
4269           && CLASS_TYPE_P (TREE_TYPE (decl))
4270           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl))) 
4271     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
4272 }
4273
4274 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4275    parameters, find the desired type.
4276
4277    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
4278
4279    IN_DECL, if non-NULL, is the template declaration we are trying to
4280    instantiate.  
4281
4282    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
4283    the class we are looking up.
4284    
4285    Issue error and warning messages under control of COMPLAIN.
4286
4287    If the template class is really a local class in a template
4288    function, then the FUNCTION_CONTEXT is the function in which it is
4289    being instantiated.  
4290
4291    ??? Note that this function is currently called *twice* for each
4292    template-id: the first time from the parser, while creating the
4293    incomplete type (finish_template_type), and the second type during the
4294    real instantiation (instantiate_template_class). This is surely something
4295    that we want to avoid. It also causes some problems with argument
4296    coercion (see convert_nontype_argument for more information on this).  */
4297
4298 tree
4299 lookup_template_class (tree d1, 
4300                        tree arglist, 
4301                        tree in_decl, 
4302                        tree context, 
4303                        int entering_scope, 
4304                        tsubst_flags_t complain)
4305 {
4306   tree template = NULL_TREE, parmlist;
4307   tree t;
4308   
4309   timevar_push (TV_NAME_LOOKUP);
4310   
4311   if (TREE_CODE (d1) == IDENTIFIER_NODE)
4312     {
4313       tree value = innermost_non_namespace_value (d1);
4314       if (value && DECL_TEMPLATE_TEMPLATE_PARM_P (value))
4315         template = value;
4316       else
4317         {
4318           if (context)
4319             push_decl_namespace (context);
4320           template = lookup_name (d1, /*prefer_type=*/0);
4321           template = maybe_get_template_decl_from_type_decl (template);
4322           if (context)
4323             pop_decl_namespace ();
4324         }
4325       if (template)
4326         context = DECL_CONTEXT (template);
4327     }
4328   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
4329     {
4330       tree type = TREE_TYPE (d1);
4331
4332       /* If we are declaring a constructor, say A<T>::A<T>, we will get
4333          an implicit typename for the second A.  Deal with it.  */
4334       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4335         type = TREE_TYPE (type);
4336         
4337       if (CLASSTYPE_TEMPLATE_INFO (type))
4338         {
4339           template = CLASSTYPE_TI_TEMPLATE (type);
4340           d1 = DECL_NAME (template);
4341         }
4342     }
4343   else if (TREE_CODE (d1) == ENUMERAL_TYPE 
4344            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
4345     {
4346       template = TYPE_TI_TEMPLATE (d1);
4347       d1 = DECL_NAME (template);
4348     }
4349   else if (TREE_CODE (d1) == TEMPLATE_DECL
4350            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
4351     {
4352       template = d1;
4353       d1 = DECL_NAME (template);
4354       context = DECL_CONTEXT (template);
4355     }
4356
4357   /* Issue an error message if we didn't find a template.  */
4358   if (! template)
4359     {
4360       if (complain & tf_error)
4361         error ("%qT is not a template", d1);
4362       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4363     }
4364
4365   if (TREE_CODE (template) != TEMPLATE_DECL
4366          /* Make sure it's a user visible template, if it was named by
4367             the user.  */
4368       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4369           && !PRIMARY_TEMPLATE_P (template)))
4370     {
4371       if (complain & tf_error)
4372         {
4373           error ("non-template type %qT used as a template", d1);
4374           if (in_decl)
4375             cp_error_at ("for template declaration %qD", in_decl);
4376         }
4377       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4378     }
4379
4380   complain &= ~tf_user;
4381   
4382   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4383     {
4384       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4385          template arguments */
4386
4387       tree parm;
4388       tree arglist2;
4389
4390       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4391
4392       /* Consider an example where a template template parameter declared as
4393
4394            template <class T, class U = std::allocator<T> > class TT
4395
4396          The template parameter level of T and U are one level larger than 
4397          of TT.  To proper process the default argument of U, say when an 
4398          instantiation `TT<int>' is seen, we need to build the full
4399          arguments containing {int} as the innermost level.  Outer levels,
4400          available when not appearing as default template argument, can be
4401          obtained from `current_template_args ()'.
4402
4403          Suppose that TT is later substituted with std::vector.  The above
4404          instantiation is `TT<int, std::allocator<T> >' with TT at
4405          level 1, and T at level 2, while the template arguments at level 1
4406          becomes {std::vector} and the inner level 2 is {int}.  */
4407
4408       if (current_template_parms)
4409         arglist = add_to_template_args (current_template_args (), arglist);
4410
4411       arglist2 = coerce_template_parms (parmlist, arglist, template,
4412                                         complain, /*require_all_args=*/1);
4413       if (arglist2 == error_mark_node
4414           || (!uses_template_parms (arglist2)
4415               && check_instantiated_args (template, arglist2, complain)))
4416         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4417
4418       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
4419       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
4420     }
4421   else 
4422     {
4423       tree template_type = TREE_TYPE (template);
4424       tree gen_tmpl;
4425       tree type_decl;
4426       tree found = NULL_TREE;
4427       int arg_depth;
4428       int parm_depth;
4429       int is_partial_instantiation;
4430
4431       gen_tmpl = most_general_template (template);
4432       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
4433       parm_depth = TMPL_PARMS_DEPTH (parmlist);
4434       arg_depth = TMPL_ARGS_DEPTH (arglist);
4435
4436       if (arg_depth == 1 && parm_depth > 1)
4437         {
4438           /* We've been given an incomplete set of template arguments.
4439              For example, given:
4440
4441                template <class T> struct S1 {
4442                  template <class U> struct S2 {};
4443                  template <class U> struct S2<U*> {};
4444                 };
4445              
4446              we will be called with an ARGLIST of `U*', but the
4447              TEMPLATE will be `template <class T> template
4448              <class U> struct S1<T>::S2'.  We must fill in the missing
4449              arguments.  */
4450           arglist 
4451             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4452                                            arglist);
4453           arg_depth = TMPL_ARGS_DEPTH (arglist);
4454         }
4455
4456       /* Now we should have enough arguments.  */
4457       gcc_assert (parm_depth == arg_depth);
4458       
4459       /* From here on, we're only interested in the most general
4460          template.  */
4461       template = gen_tmpl;
4462
4463       /* Calculate the BOUND_ARGS.  These will be the args that are
4464          actually tsubst'd into the definition to create the
4465          instantiation.  */
4466       if (parm_depth > 1)
4467         {
4468           /* We have multiple levels of arguments to coerce, at once.  */
4469           int i;
4470           int saved_depth = TMPL_ARGS_DEPTH (arglist);
4471
4472           tree bound_args = make_tree_vec (parm_depth);
4473           
4474           for (i = saved_depth,
4475                  t = DECL_TEMPLATE_PARMS (template); 
4476                i > 0 && t != NULL_TREE;
4477                --i, t = TREE_CHAIN (t))
4478             {
4479               tree a = coerce_template_parms (TREE_VALUE (t),
4480                                               arglist, template,
4481                                               complain, /*require_all_args=*/1);
4482
4483               /* Don't process further if one of the levels fails.  */
4484               if (a == error_mark_node)
4485                 {
4486                   /* Restore the ARGLIST to its full size.  */
4487                   TREE_VEC_LENGTH (arglist) = saved_depth;
4488                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4489                 }
4490               
4491               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4492
4493               /* We temporarily reduce the length of the ARGLIST so
4494                  that coerce_template_parms will see only the arguments
4495                  corresponding to the template parameters it is
4496                  examining.  */
4497               TREE_VEC_LENGTH (arglist)--;
4498             }
4499
4500           /* Restore the ARGLIST to its full size.  */
4501           TREE_VEC_LENGTH (arglist) = saved_depth;
4502
4503           arglist = bound_args;
4504         }
4505       else
4506         arglist
4507           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4508                                    INNERMOST_TEMPLATE_ARGS (arglist),
4509                                    template,
4510                                    complain, /*require_all_args=*/1);
4511
4512       if (arglist == error_mark_node)
4513         /* We were unable to bind the arguments.  */
4514         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4515
4516       /* In the scope of a template class, explicit references to the
4517          template class refer to the type of the template, not any
4518          instantiation of it.  For example, in:
4519          
4520            template <class T> class C { void f(C<T>); }
4521
4522          the `C<T>' is just the same as `C'.  Outside of the
4523          class, however, such a reference is an instantiation.  */
4524       if (comp_template_args (TYPE_TI_ARGS (template_type),
4525                               arglist))
4526         {
4527           found = template_type;
4528           
4529           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4530             {
4531               tree ctx;
4532               
4533               for (ctx = current_class_type; 
4534                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
4535                    ctx = (TYPE_P (ctx)
4536                           ? TYPE_CONTEXT (ctx)
4537                           : DECL_CONTEXT (ctx)))
4538                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
4539                   goto found_ctx;
4540               
4541               /* We're not in the scope of the class, so the
4542                  TEMPLATE_TYPE is not the type we want after all.  */
4543               found = NULL_TREE;
4544             found_ctx:;
4545             }
4546         }
4547       if (found)
4548         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4549
4550       /* If we already have this specialization, return it.  */
4551       found = retrieve_specialization (template, arglist,
4552                                        /*class_specializations_p=*/false);
4553       if (found)
4554         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4555
4556       /* This type is a "partial instantiation" if any of the template
4557          arguments still involve template parameters.  Note that we set
4558          IS_PARTIAL_INSTANTIATION for partial specializations as
4559          well.  */
4560       is_partial_instantiation = uses_template_parms (arglist);
4561
4562       /* If the deduced arguments are invalid, then the binding
4563          failed.  */
4564       if (!is_partial_instantiation
4565           && check_instantiated_args (template,
4566                                       INNERMOST_TEMPLATE_ARGS (arglist),
4567                                       complain))
4568         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4569         
4570       if (!is_partial_instantiation 
4571           && !PRIMARY_TEMPLATE_P (template)
4572           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4573         {
4574           found = xref_tag_from_type (TREE_TYPE (template),
4575                                       DECL_NAME (template),
4576                                       /*globalize=*/1);
4577           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4578         }
4579       
4580       context = tsubst (DECL_CONTEXT (template), arglist,
4581                         complain, in_decl);
4582       if (!context)
4583         context = global_namespace;
4584
4585       /* Create the type.  */
4586       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4587         {
4588           if (!is_partial_instantiation)
4589             {
4590               set_current_access_from_decl (TYPE_NAME (template_type));
4591               t = start_enum (TYPE_IDENTIFIER (template_type));
4592             }
4593           else
4594             /* We don't want to call start_enum for this type, since
4595                the values for the enumeration constants may involve
4596                template parameters.  And, no one should be interested
4597                in the enumeration constants for such a type.  */
4598             t = make_node (ENUMERAL_TYPE);
4599         }
4600       else
4601         {
4602           t = make_aggr_type (TREE_CODE (template_type));
4603           CLASSTYPE_DECLARED_CLASS (t) 
4604             = CLASSTYPE_DECLARED_CLASS (template_type);
4605           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4606           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4607
4608           /* A local class.  Make sure the decl gets registered properly.  */
4609           if (context == current_function_decl)
4610             pushtag (DECL_NAME (template), t, 0);
4611         }
4612
4613       /* If we called start_enum or pushtag above, this information
4614          will already be set up.  */
4615       if (!TYPE_NAME (t))
4616         {
4617           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4618           
4619           type_decl = create_implicit_typedef (DECL_NAME (template), t);
4620           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4621           TYPE_STUB_DECL (t) = type_decl;
4622           DECL_SOURCE_LOCATION (type_decl) 
4623             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
4624         }
4625       else
4626         type_decl = TYPE_NAME (t);
4627
4628       TREE_PRIVATE (type_decl)
4629         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4630       TREE_PROTECTED (type_decl)
4631         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4632
4633       /* Set up the template information.  We have to figure out which
4634          template is the immediate parent if this is a full
4635          instantiation.  */
4636       if (parm_depth == 1 || is_partial_instantiation
4637           || !PRIMARY_TEMPLATE_P (template))
4638         /* This case is easy; there are no member templates involved.  */
4639         found = template;
4640       else
4641         {
4642           /* This is a full instantiation of a member template.  Look
4643              for a partial instantiation of which this is an instance.  */
4644
4645           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4646                found; found = TREE_CHAIN (found))
4647             {
4648               int success;
4649               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4650
4651               /* We only want partial instantiations, here, not
4652                  specializations or full instantiations.  */
4653               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4654                   || !uses_template_parms (TREE_VALUE (found)))
4655                 continue;
4656
4657               /* Temporarily reduce by one the number of levels in the
4658                  ARGLIST and in FOUND so as to avoid comparing the
4659                  last set of arguments.  */
4660               TREE_VEC_LENGTH (arglist)--;
4661               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4662
4663               /* See if the arguments match.  If they do, then TMPL is
4664                  the partial instantiation we want.  */
4665               success = comp_template_args (TREE_PURPOSE (found), arglist);
4666
4667               /* Restore the argument vectors to their full size.  */
4668               TREE_VEC_LENGTH (arglist)++;
4669               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4670
4671               if (success)
4672                 {
4673                   found = tmpl;
4674                   break;
4675                 }
4676             }
4677
4678           if (!found)
4679             {
4680               /* There was no partial instantiation. This happens
4681                  where C<T> is a member template of A<T> and it's used
4682                  in something like
4683                 
4684                   template <typename T> struct B { A<T>::C<int> m; };
4685                   B<float>;
4686                 
4687                  Create the partial instantiation.
4688                */
4689               TREE_VEC_LENGTH (arglist)--;
4690               found = tsubst (template, arglist, complain, NULL_TREE);
4691               TREE_VEC_LENGTH (arglist)++;
4692             }
4693         }
4694
4695       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));  
4696       DECL_TEMPLATE_INSTANTIATIONS (template) 
4697         = tree_cons (arglist, t, 
4698                      DECL_TEMPLATE_INSTANTIATIONS (template));
4699
4700       if (TREE_CODE (t) == ENUMERAL_TYPE 
4701           && !is_partial_instantiation)
4702         /* Now that the type has been registered on the instantiations
4703            list, we set up the enumerators.  Because the enumeration
4704            constants may involve the enumeration type itself, we make
4705            sure to register the type first, and then create the
4706            constants.  That way, doing tsubst_expr for the enumeration
4707            constants won't result in recursive calls here; we'll find
4708            the instantiation and exit above.  */
4709         tsubst_enum (template_type, t, arglist);
4710
4711       /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4712          is set up.  */
4713       if (TREE_CODE (t) != ENUMERAL_TYPE)
4714         DECL_NAME (type_decl) = classtype_mangled_name (t);
4715       if (is_partial_instantiation)
4716         /* If the type makes use of template parameters, the
4717            code that generates debugging information will crash.  */
4718         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4719
4720       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4721     }
4722   timevar_pop (TV_NAME_LOOKUP);
4723 }
4724 \f
4725 struct pair_fn_data 
4726 {
4727   tree_fn_t fn;
4728   void *data;
4729   struct pointer_set_t *visited;
4730 };
4731
4732 /* Called from for_each_template_parm via walk_tree.  */
4733
4734 static tree
4735 for_each_template_parm_r (tree *tp, int *walk_subtrees, void *d)
4736 {
4737   tree t = *tp;
4738   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4739   tree_fn_t fn = pfd->fn;
4740   void *data = pfd->data;
4741
4742   if (TYPE_P (t)
4743       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
4744     return error_mark_node;
4745
4746   switch (TREE_CODE (t))
4747     {
4748     case RECORD_TYPE:
4749       if (TYPE_PTRMEMFUNC_P (t))
4750         break;
4751       /* Fall through.  */
4752
4753     case UNION_TYPE:
4754     case ENUMERAL_TYPE:
4755       if (!TYPE_TEMPLATE_INFO (t))
4756         *walk_subtrees = 0;
4757       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4758                                        fn, data, pfd->visited))
4759         return error_mark_node;
4760       break;
4761
4762     case METHOD_TYPE:
4763       /* Since we're not going to walk subtrees, we have to do this
4764          explicitly here.  */
4765       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4766                                   pfd->visited))
4767         return error_mark_node;
4768       /* Fall through.  */
4769
4770     case FUNCTION_TYPE:
4771       /* Check the return type.  */
4772       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4773         return error_mark_node;
4774
4775       /* Check the parameter types.  Since default arguments are not
4776          instantiated until they are needed, the TYPE_ARG_TYPES may
4777          contain expressions that involve template parameters.  But,
4778          no-one should be looking at them yet.  And, once they're
4779          instantiated, they don't contain template parameters, so
4780          there's no point in looking at them then, either.  */
4781       {
4782         tree parm;
4783
4784         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4785           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4786                                       pfd->visited))
4787             return error_mark_node;
4788
4789         /* Since we've already handled the TYPE_ARG_TYPES, we don't
4790            want walk_tree walking into them itself.  */
4791         *walk_subtrees = 0;
4792       }
4793       break;
4794
4795     case TYPEOF_TYPE:
4796       if (for_each_template_parm (TYPE_FIELDS (t), fn, data, 
4797                                   pfd->visited))
4798         return error_mark_node;
4799       break;
4800
4801     case FUNCTION_DECL:
4802     case VAR_DECL:
4803       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4804           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4805                                      pfd->visited))
4806         return error_mark_node;
4807       /* Fall through.  */
4808
4809     case PARM_DECL:
4810     case CONST_DECL:
4811       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4812           && for_each_template_parm (DECL_INITIAL (t), fn, data,
4813                                      pfd->visited))
4814         return error_mark_node;
4815       if (DECL_CONTEXT (t) 
4816           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4817                                      pfd->visited))
4818         return error_mark_node;
4819       break;
4820
4821     case BOUND_TEMPLATE_TEMPLATE_PARM:
4822       /* Record template parameters such as `T' inside `TT<T>'.  */
4823       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
4824         return error_mark_node;
4825       /* Fall through.  */
4826
4827     case TEMPLATE_TEMPLATE_PARM:
4828     case TEMPLATE_TYPE_PARM:
4829     case TEMPLATE_PARM_INDEX:
4830       if (fn && (*fn)(t, data))
4831         return error_mark_node;
4832       else if (!fn)
4833         return error_mark_node;
4834       break;
4835
4836     case TEMPLATE_DECL:
4837       /* A template template parameter is encountered.  */
4838       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4839           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4840         return error_mark_node;
4841
4842       /* Already substituted template template parameter */
4843       *walk_subtrees = 0;
4844       break;
4845
4846     case TYPENAME_TYPE:
4847       if (!fn 
4848           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4849                                      data, pfd->visited))
4850         return error_mark_node;
4851       break;
4852
4853     case CONSTRUCTOR:
4854       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4855           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4856                                      (TREE_TYPE (t)), fn, data,
4857                                      pfd->visited))
4858         return error_mark_node;
4859       break;
4860       
4861     case INDIRECT_REF:
4862     case COMPONENT_REF:
4863       /* If there's no type, then this thing must be some expression
4864          involving template parameters.  */
4865       if (!fn && !TREE_TYPE (t))
4866         return error_mark_node;
4867       break;
4868
4869     case MODOP_EXPR:
4870     case CAST_EXPR:
4871     case REINTERPRET_CAST_EXPR:
4872     case CONST_CAST_EXPR:
4873     case STATIC_CAST_EXPR:
4874     case DYNAMIC_CAST_EXPR:
4875     case ARROW_EXPR:
4876     case DOTSTAR_EXPR:
4877     case TYPEID_EXPR:
4878     case PSEUDO_DTOR_EXPR:
4879       if (!fn)
4880         return error_mark_node;
4881       break;
4882
4883     case BASELINK:
4884       /* If we do not handle this case specially, we end up walking
4885          the BINFO hierarchy, which is circular, and therefore
4886          confuses walk_tree.  */
4887       *walk_subtrees = 0;
4888       if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4889                                   pfd->visited))
4890         return error_mark_node;
4891       break;
4892
4893     default:
4894       break;
4895     }
4896
4897   /* We didn't find any template parameters we liked.  */
4898   return NULL_TREE;
4899 }
4900
4901 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM, 
4902    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T, 
4903    call FN with the parameter and the DATA.
4904    If FN returns nonzero, the iteration is terminated, and
4905    for_each_template_parm returns 1.  Otherwise, the iteration
4906    continues.  If FN never returns a nonzero value, the value
4907    returned by for_each_template_parm is 0.  If FN is NULL, it is
4908    considered to be the function which always returns 1.  */
4909
4910 static int
4911 for_each_template_parm (tree t, tree_fn_t fn, void* data,
4912                         struct pointer_set_t *visited)
4913 {
4914   struct pair_fn_data pfd;
4915   int result;
4916
4917   /* Set up.  */
4918   pfd.fn = fn;
4919   pfd.data = data;
4920
4921   /* Walk the tree.  (Conceptually, we would like to walk without
4922      duplicates, but for_each_template_parm_r recursively calls
4923      for_each_template_parm, so we would need to reorganize a fair
4924      bit to use walk_tree_without_duplicates, so we keep our own
4925      visited list.)  */
4926   if (visited)
4927     pfd.visited = visited;
4928   else
4929     pfd.visited = pointer_set_create ();
4930   result = walk_tree (&t, 
4931                       for_each_template_parm_r, 
4932                       &pfd,
4933                       pfd.visited) != NULL_TREE;
4934
4935   /* Clean up.  */
4936   if (!visited)
4937     {
4938       pointer_set_destroy (pfd.visited);
4939       pfd.visited = 0;
4940     }
4941
4942   return result;
4943 }
4944
4945 /* Returns true if T depends on any template parameter.  */
4946
4947 int
4948 uses_template_parms (tree t)
4949 {
4950   bool dependent_p;
4951   int saved_processing_template_decl;
4952
4953   saved_processing_template_decl = processing_template_decl;
4954   if (!saved_processing_template_decl)
4955     processing_template_decl = 1;
4956   if (TYPE_P (t))
4957     dependent_p = dependent_type_p (t);
4958   else if (TREE_CODE (t) == TREE_VEC)
4959     dependent_p = any_dependent_template_arguments_p (t);
4960   else if (TREE_CODE (t) == TREE_LIST)
4961     dependent_p = (uses_template_parms (TREE_VALUE (t))
4962                    || uses_template_parms (TREE_CHAIN (t)));
4963   else if (DECL_P (t) 
4964            || EXPR_P (t) 
4965            || TREE_CODE (t) == TEMPLATE_PARM_INDEX
4966            || TREE_CODE (t) == OVERLOAD
4967            || TREE_CODE (t) == BASELINK
4968            || CONSTANT_CLASS_P (t))
4969     dependent_p = (type_dependent_expression_p (t)
4970                    || value_dependent_expression_p (t));
4971   else
4972     {
4973       gcc_assert (t == error_mark_node);
4974       dependent_p = false;
4975     }
4976   
4977   processing_template_decl = saved_processing_template_decl;
4978
4979   return dependent_p;
4980 }
4981
4982 /* Returns true if T depends on any template parameter with level LEVEL.  */
4983
4984 int
4985 uses_template_parms_level (tree t, int level)
4986 {
4987   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
4988 }
4989
4990 static int tinst_depth;
4991 extern int max_tinst_depth;
4992 #ifdef GATHER_STATISTICS
4993 int depth_reached;
4994 #endif
4995 static int tinst_level_tick;
4996 static int last_template_error_tick;
4997
4998 /* We're starting to instantiate D; record the template instantiation context
4999    for diagnostics and to restore it later.  */
5000
5001 int
5002 push_tinst_level (tree d)
5003 {
5004   tree new;
5005
5006   if (tinst_depth >= max_tinst_depth)
5007     {
5008       /* If the instantiation in question still has unbound template parms,
5009          we don't really care if we can't instantiate it, so just return.
5010          This happens with base instantiation for implicit `typename'.  */
5011       if (uses_template_parms (d))
5012         return 0;
5013
5014       last_template_error_tick = tinst_level_tick;
5015       error ("template instantiation depth exceeds maximum of %d (use "
5016              "-ftemplate-depth-NN to increase the maximum) instantiating %qD",
5017              max_tinst_depth, d);
5018
5019       print_instantiation_context ();
5020
5021       return 0;
5022     }
5023
5024   new = make_tinst_level (d, input_location);
5025   TREE_CHAIN (new) = current_tinst_level;
5026   current_tinst_level = new;
5027
5028   ++tinst_depth;
5029 #ifdef GATHER_STATISTICS
5030   if (tinst_depth > depth_reached)
5031     depth_reached = tinst_depth;
5032 #endif
5033
5034   ++tinst_level_tick;
5035   return 1;
5036 }
5037
5038 /* We're done instantiating this template; return to the instantiation
5039    context.  */
5040
5041 void
5042 pop_tinst_level (void)
5043 {
5044   tree old = current_tinst_level;
5045
5046   /* Restore the filename and line number stashed away when we started
5047      this instantiation.  */
5048   input_location = TINST_LOCATION (old);
5049   current_tinst_level = TREE_CHAIN (old);
5050   --tinst_depth;
5051   ++tinst_level_tick;
5052 }
5053
5054 /* We're instantiating a deferred template; restore the template
5055    instantiation context in which the instantiation was requested, which
5056    is one step out from LEVEL.  */
5057
5058 static void
5059 reopen_tinst_level (tree level)
5060 {
5061   tree t;
5062
5063   tinst_depth = 0;
5064   for (t = level; t; t = TREE_CHAIN (t))
5065     ++tinst_depth;
5066
5067   current_tinst_level = level;
5068   pop_tinst_level ();
5069 }
5070
5071 /* Return the outermost template instantiation context, for use with
5072    -falt-external-templates.  */
5073
5074 tree
5075 tinst_for_decl (void)
5076 {
5077   tree p = current_tinst_level;
5078
5079   if (p)
5080     for (; TREE_CHAIN (p) ; p = TREE_CHAIN (p))
5081       ;
5082   return p;
5083 }
5084
5085 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
5086    vector of template arguments, as for tsubst.
5087
5088    Returns an appropriate tsubst'd friend declaration.  */
5089
5090 static tree
5091 tsubst_friend_function (tree decl, tree args)
5092 {
5093   tree new_friend;
5094   location_t saved_loc = input_location;
5095
5096   input_location = DECL_SOURCE_LOCATION (decl);
5097
5098   if (TREE_CODE (decl) == FUNCTION_DECL 
5099       && DECL_TEMPLATE_INSTANTIATION (decl)
5100       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
5101     /* This was a friend declared with an explicit template
5102        argument list, e.g.:
5103        
5104        friend void f<>(T);
5105        
5106        to indicate that f was a template instantiation, not a new
5107        function declaration.  Now, we have to figure out what
5108        instantiation of what template.  */
5109     {
5110       tree template_id, arglist, fns;
5111       tree new_args;
5112       tree tmpl;
5113       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
5114       
5115       /* Friend functions are looked up in the containing namespace scope.
5116          We must enter that scope, to avoid finding member functions of the
5117          current cless with same name.  */
5118       push_nested_namespace (ns);
5119       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
5120                          tf_error | tf_warning, NULL_TREE);
5121       pop_nested_namespace (ns);
5122       arglist = tsubst (DECL_TI_ARGS (decl), args,
5123                         tf_error | tf_warning, NULL_TREE);
5124       template_id = lookup_template_function (fns, arglist);
5125       
5126       new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5127       tmpl = determine_specialization (template_id, new_friend,
5128                                        &new_args, 
5129                                        /*need_member_template=*/0,
5130                                        TREE_VEC_LENGTH (args));
5131       new_friend = instantiate_template (tmpl, new_args, tf_error);
5132       goto done;
5133     }
5134
5135   new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
5136         
5137   /* The NEW_FRIEND will look like an instantiation, to the
5138      compiler, but is not an instantiation from the point of view of
5139      the language.  For example, we might have had:
5140      
5141      template <class T> struct S {
5142        template <class U> friend void f(T, U);
5143      };
5144      
5145      Then, in S<int>, template <class U> void f(int, U) is not an
5146      instantiation of anything.  */
5147   if (new_friend == error_mark_node)
5148     return error_mark_node;
5149   
5150   DECL_USE_TEMPLATE (new_friend) = 0;
5151   if (TREE_CODE (decl) == TEMPLATE_DECL)
5152     {
5153       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
5154       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
5155         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
5156     }
5157
5158   /* The mangled name for the NEW_FRIEND is incorrect.  The function
5159      is not a template instantiation and should not be mangled like
5160      one.  Therefore, we forget the mangling here; we'll recompute it
5161      later if we need it.  */
5162   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
5163     {
5164       SET_DECL_RTL (new_friend, NULL_RTX);
5165       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
5166     }
5167       
5168   if (DECL_NAMESPACE_SCOPE_P (new_friend))
5169     {
5170       tree old_decl;
5171       tree new_friend_template_info;
5172       tree new_friend_result_template_info;
5173       tree ns;
5174       int  new_friend_is_defn;
5175
5176       /* We must save some information from NEW_FRIEND before calling
5177          duplicate decls since that function will free NEW_FRIEND if
5178          possible.  */
5179       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
5180       new_friend_is_defn =
5181             (DECL_INITIAL (DECL_TEMPLATE_RESULT 
5182                            (template_for_substitution (new_friend)))
5183              != NULL_TREE);
5184       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
5185         {
5186           /* This declaration is a `primary' template.  */
5187           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
5188           
5189           new_friend_result_template_info
5190             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
5191         }
5192       else
5193         new_friend_result_template_info = NULL_TREE;
5194
5195       /* Inside pushdecl_namespace_level, we will push into the
5196          current namespace. However, the friend function should go
5197          into the namespace of the template.  */
5198       ns = decl_namespace_context (new_friend);
5199       push_nested_namespace (ns);
5200       old_decl = pushdecl_namespace_level (new_friend);
5201       pop_nested_namespace (ns);
5202
5203       if (old_decl != new_friend)
5204         {
5205           /* This new friend declaration matched an existing
5206              declaration.  For example, given:
5207
5208                template <class T> void f(T);
5209                template <class U> class C { 
5210                  template <class T> friend void f(T) {} 
5211                };
5212
5213              the friend declaration actually provides the definition
5214              of `f', once C has been instantiated for some type.  So,
5215              old_decl will be the out-of-class template declaration,
5216              while new_friend is the in-class definition.
5217
5218              But, if `f' was called before this point, the
5219              instantiation of `f' will have DECL_TI_ARGS corresponding
5220              to `T' but not to `U', references to which might appear
5221              in the definition of `f'.  Previously, the most general
5222              template for an instantiation of `f' was the out-of-class
5223              version; now it is the in-class version.  Therefore, we
5224              run through all specialization of `f', adding to their
5225              DECL_TI_ARGS appropriately.  In particular, they need a
5226              new set of outer arguments, corresponding to the
5227              arguments for this class instantiation.  
5228
5229              The same situation can arise with something like this:
5230
5231                friend void f(int);
5232                template <class T> class C { 
5233                  friend void f(T) {}
5234                };
5235
5236              when `C<int>' is instantiated.  Now, `f(int)' is defined
5237              in the class.  */
5238
5239           if (!new_friend_is_defn)
5240             /* On the other hand, if the in-class declaration does
5241                *not* provide a definition, then we don't want to alter
5242                existing definitions.  We can just leave everything
5243                alone.  */
5244             ;
5245           else
5246             {
5247               /* Overwrite whatever template info was there before, if
5248                  any, with the new template information pertaining to
5249                  the declaration.  */
5250               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
5251
5252               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
5253                 reregister_specialization (new_friend,
5254                                            most_general_template (old_decl),
5255                                            old_decl);
5256               else 
5257                 {
5258                   tree t;
5259                   tree new_friend_args;
5260
5261                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl)) 
5262                     = new_friend_result_template_info;
5263                     
5264                   new_friend_args = TI_ARGS (new_friend_template_info);
5265                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl); 
5266                        t != NULL_TREE;
5267                        t = TREE_CHAIN (t))
5268                     {
5269                       tree spec = TREE_VALUE (t);
5270                   
5271                       DECL_TI_ARGS (spec) 
5272                         = add_outermost_template_args (new_friend_args,
5273                                                        DECL_TI_ARGS (spec));
5274                     }
5275
5276                   /* Now, since specializations are always supposed to
5277                      hang off of the most general template, we must move
5278                      them.  */
5279                   t = most_general_template (old_decl);
5280                   if (t != old_decl)
5281                     {
5282                       DECL_TEMPLATE_SPECIALIZATIONS (t)
5283                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
5284                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
5285                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
5286                     }
5287                 }
5288             }
5289
5290           /* The information from NEW_FRIEND has been merged into OLD_DECL
5291              by duplicate_decls.  */
5292           new_friend = old_decl;
5293         }
5294     }
5295   else if (COMPLETE_TYPE_P (DECL_CONTEXT (new_friend)))
5296     {
5297       /* Check to see that the declaration is really present, and,
5298          possibly obtain an improved declaration.  */
5299       tree fn = check_classfn (DECL_CONTEXT (new_friend), 
5300                                new_friend, NULL_TREE);
5301       
5302       if (fn)
5303         new_friend = fn;
5304     }
5305
5306  done:
5307   input_location = saved_loc;
5308   return new_friend;
5309 }
5310
5311 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
5312    template arguments, as for tsubst.
5313
5314    Returns an appropriate tsubst'd friend type or error_mark_node on
5315    failure.  */
5316
5317 static tree
5318 tsubst_friend_class (tree friend_tmpl, tree args)
5319 {
5320   tree friend_type;
5321   tree tmpl;
5322   tree context;
5323
5324   context = DECL_CONTEXT (friend_tmpl);
5325
5326   if (context)
5327     {
5328       if (TREE_CODE (context) == NAMESPACE_DECL)
5329         push_nested_namespace (context);
5330       else
5331         push_nested_class (tsubst (context, args, tf_none, NULL_TREE)); 
5332     }
5333
5334   /* First, we look for a class template.  */
5335   tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0); 
5336
5337   /* But, if we don't find one, it might be because we're in a
5338      situation like this:
5339
5340        template <class T>
5341        struct S {
5342          template <class U>
5343          friend struct S;
5344        };
5345
5346      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5347      for `S<int>', not the TEMPLATE_DECL.  */
5348   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5349     {
5350       tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
5351       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
5352     }
5353
5354   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
5355     {
5356       /* The friend template has already been declared.  Just
5357          check to see that the declarations match, and install any new
5358          default parameters.  We must tsubst the default parameters,
5359          of course.  We only need the innermost template parameters
5360          because that is all that redeclare_class_template will look
5361          at.  */
5362       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5363           > TMPL_ARGS_DEPTH (args))
5364         {
5365           tree parms;
5366           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5367                                          args, tf_error | tf_warning);
5368           redeclare_class_template (TREE_TYPE (tmpl), parms);
5369         }
5370
5371       friend_type = TREE_TYPE (tmpl);
5372     }
5373   else
5374     {
5375       /* The friend template has not already been declared.  In this
5376          case, the instantiation of the template class will cause the
5377          injection of this template into the global scope.  */
5378       tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
5379
5380       /* The new TMPL is not an instantiation of anything, so we
5381          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
5382          the new type because that is supposed to be the corresponding
5383          template decl, i.e., TMPL.  */
5384       DECL_USE_TEMPLATE (tmpl) = 0;
5385       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5386       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5387       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
5388         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
5389
5390       /* Inject this template into the global scope.  */
5391       friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
5392     }
5393
5394   if (context) 
5395     {
5396       if (TREE_CODE (context) == NAMESPACE_DECL)
5397         pop_nested_namespace (context);
5398       else
5399         pop_nested_class ();
5400     }
5401
5402   return friend_type;
5403 }
5404
5405 /* Returns zero if TYPE cannot be completed later due to circularity.
5406    Otherwise returns one.  */
5407
5408 static int
5409 can_complete_type_without_circularity (tree type)
5410 {
5411   if (type == NULL_TREE || type == error_mark_node)
5412     return 0;
5413   else if (COMPLETE_TYPE_P (type))
5414     return 1;
5415   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5416     return can_complete_type_without_circularity (TREE_TYPE (type));
5417   else if (CLASS_TYPE_P (type)
5418            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
5419     return 0;
5420   else
5421     return 1;
5422 }
5423
5424 tree
5425 instantiate_class_template (tree type)
5426 {
5427   tree template, args, pattern, t, member;
5428   tree typedecl;
5429   tree pbinfo;
5430   tree base_list;
5431   
5432   if (type == error_mark_node)
5433     return error_mark_node;
5434
5435   if (TYPE_BEING_DEFINED (type) 
5436       || COMPLETE_TYPE_P (type)
5437       || dependent_type_p (type))
5438     return type;
5439
5440   /* Figure out which template is being instantiated.  */
5441   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5442   gcc_assert (TREE_CODE (template) == TEMPLATE_DECL);
5443
5444   /* Figure out which arguments are being used to do the
5445      instantiation.  */
5446   args = CLASSTYPE_TI_ARGS (type);
5447
5448   /* Determine what specialization of the original template to
5449      instantiate.  */
5450   t = most_specialized_class (template, args);
5451   if (t == error_mark_node)
5452     {
5453       const char *str = "candidates are:";
5454       error ("ambiguous class template instantiation for %q#T", type);
5455       for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t; 
5456            t = TREE_CHAIN (t))
5457         {
5458           if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args))
5459             {
5460               cp_error_at ("%s %+#T", str, TREE_TYPE (t));
5461               str = "               ";
5462             }
5463         }
5464       TYPE_BEING_DEFINED (type) = 1;
5465       return error_mark_node;
5466     }
5467
5468   if (t)
5469     pattern = TREE_TYPE (t);
5470   else
5471     pattern = TREE_TYPE (template);
5472
5473   /* If the template we're instantiating is incomplete, then clearly
5474      there's nothing we can do.  */
5475   if (!COMPLETE_TYPE_P (pattern))
5476     return type;
5477
5478   /* If we've recursively instantiated too many templates, stop.  */
5479   if (! push_tinst_level (type))
5480     return type;
5481
5482   /* Now we're really doing the instantiation.  Mark the type as in
5483      the process of being defined.  */
5484   TYPE_BEING_DEFINED (type) = 1;
5485
5486   /* We may be in the middle of deferred access check.  Disable
5487      it now.  */
5488   push_deferring_access_checks (dk_no_deferred);
5489
5490   push_to_top_level ();
5491
5492   if (t)
5493     {
5494       /* This TYPE is actually an instantiation of a partial
5495          specialization.  We replace the innermost set of ARGS with
5496          the arguments appropriate for substitution.  For example,
5497          given:
5498
5499            template <class T> struct S {};
5500            template <class T> struct S<T*> {};
5501          
5502          and supposing that we are instantiating S<int*>, ARGS will
5503          present be {int*} but we need {int}.  */
5504       tree inner_args 
5505         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5506                               args);
5507
5508       /* If there were multiple levels in ARGS, replacing the
5509          innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5510          want, so we make a copy first.  */
5511       if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5512         {
5513           args = copy_node (args);
5514           SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5515         }
5516       else
5517         args = inner_args;
5518     }
5519
5520   SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5521
5522   /* Set the input location to the template definition. This is needed
5523      if tsubsting causes an error.  */
5524   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (pattern));
5525
5526   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5527   TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
5528   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5529   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5530   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5531   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5532   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5533   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5534   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5535   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5536   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5537   TYPE_PACKED (type) = TYPE_PACKED (pattern);
5538   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5539   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5540   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5541   if (ANON_AGGR_TYPE_P (pattern))
5542     SET_ANON_AGGR_TYPE_P (type);
5543
5544   pbinfo = TYPE_BINFO (pattern);
5545
5546   /* We should never instantiate a nested class before its enclosing
5547      class; we need to look up the nested class by name before we can
5548      instantiate it, and that lookup should instantiate the enclosing
5549      class.  */
5550   gcc_assert (!DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
5551               || COMPLETE_TYPE_P (TYPE_CONTEXT (type))
5552               || TYPE_BEING_DEFINED (TYPE_CONTEXT (type)));
5553
5554   base_list = NULL_TREE;
5555   if (BINFO_N_BASE_BINFOS (pbinfo))
5556     {
5557       tree pbase_binfo;
5558       tree context = TYPE_CONTEXT (type);
5559       bool pop_p;
5560       int i;
5561
5562       /* We must enter the scope containing the type, as that is where
5563          the accessibility of types named in dependent bases are
5564          looked up from.  */
5565       pop_p = push_scope (context ? context : global_namespace);
5566   
5567       /* Substitute into each of the bases to determine the actual
5568          basetypes.  */
5569       for (i = 0; BINFO_BASE_ITERATE (pbinfo, i, pbase_binfo); i++)
5570         {
5571           tree base;
5572           tree access = BINFO_BASE_ACCESS (pbinfo, i);
5573
5574           /* Substitute to figure out the base class.  */
5575           base = tsubst (BINFO_TYPE (pbase_binfo), args, tf_error, NULL_TREE);
5576           if (base == error_mark_node)
5577             continue;
5578           
5579           base_list = tree_cons (access, base, base_list);
5580           if (BINFO_VIRTUAL_P (pbase_binfo))
5581             TREE_TYPE (base_list) = integer_type_node;
5582         }
5583
5584       /* The list is now in reverse order; correct that.  */
5585       base_list = nreverse (base_list);
5586
5587       if (pop_p)
5588         pop_scope (context ? context : global_namespace);
5589     }
5590   /* Now call xref_basetypes to set up all the base-class
5591      information.  */
5592   xref_basetypes (type, base_list);
5593
5594
5595   /* Now that our base classes are set up, enter the scope of the
5596      class, so that name lookups into base classes, etc. will work
5597      correctly.  This is precisely analogous to what we do in
5598      begin_class_definition when defining an ordinary non-template
5599      class.  */
5600   pushclass (type);
5601
5602   /* Now members are processed in the order of declaration.  */
5603   for (member = CLASSTYPE_DECL_LIST (pattern);
5604        member; member = TREE_CHAIN (member))
5605     {
5606       tree t = TREE_VALUE (member);
5607
5608       if (TREE_PURPOSE (member))
5609         {
5610           if (TYPE_P (t))
5611             {
5612               /* Build new CLASSTYPE_NESTED_UTDS.  */
5613
5614               tree tag = t;
5615               tree name = TYPE_IDENTIFIER (tag);
5616               tree newtag;
5617               bool class_template_p;
5618
5619               class_template_p = (TREE_CODE (tag) != ENUMERAL_TYPE
5620                                   && TYPE_LANG_SPECIFIC (tag)
5621                                   && CLASSTYPE_IS_TEMPLATE (tag));
5622               /* If the member is a class template, then -- even after
5623                  substitution -- there may be dependent types in the
5624                  template argument list for the class.  We increment
5625                  PROCESSING_TEMPLATE_DECL so that dependent_type_p, as
5626                  that function will assume that no types are dependent
5627                  when outside of a template.  */
5628               if (class_template_p)
5629                 ++processing_template_decl;
5630               newtag = tsubst (tag, args, tf_error, NULL_TREE);
5631               if (class_template_p)
5632                 --processing_template_decl;
5633               if (newtag == error_mark_node)
5634                 continue;
5635
5636               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5637                 {
5638                   if (class_template_p)
5639                     /* Unfortunately, lookup_template_class sets
5640                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5641                        instantiation (i.e., for the type of a member
5642                        template class nested within a template class.)
5643                        This behavior is required for
5644                        maybe_process_partial_specialization to work
5645                        correctly, but is not accurate in this case;
5646                        the TAG is not an instantiation of anything.
5647                        (The corresponding TEMPLATE_DECL is an
5648                        instantiation, but the TYPE is not.) */
5649                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5650
5651                   /* Now, we call pushtag to put this NEWTAG into the scope of
5652                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
5653                      pushtag calling push_template_decl.  We don't have to do
5654                      this for enums because it will already have been done in
5655                      tsubst_enum.  */
5656                   if (name)
5657                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5658                   pushtag (name, newtag, /*globalize=*/0);
5659                 }
5660             }
5661           else if (TREE_CODE (t) == FUNCTION_DECL 
5662                    || DECL_FUNCTION_TEMPLATE_P (t))
5663             {
5664               /* Build new TYPE_METHODS.  */
5665               tree r;
5666               
5667               if (TREE_CODE (t) == TEMPLATE_DECL)
5668                 ++processing_template_decl;
5669               r = tsubst (t, args, tf_error, NULL_TREE);
5670               if (TREE_CODE (t) == TEMPLATE_DECL)
5671                 --processing_template_decl;
5672               set_current_access_from_decl (r);
5673               grok_special_member_properties (r);
5674               finish_member_declaration (r);
5675             }
5676           else
5677             {
5678               /* Build new TYPE_FIELDS.  */
5679
5680               if (TREE_CODE (t) != CONST_DECL)
5681                 {
5682                   tree r;
5683
5684                   /* The the file and line for this declaration, to
5685                      assist in error message reporting.  Since we
5686                      called push_tinst_level above, we don't need to
5687                      restore these.  */
5688                   input_location = DECL_SOURCE_LOCATION (t);
5689
5690                   if (TREE_CODE (t) == TEMPLATE_DECL)
5691                     ++processing_template_decl;
5692                   r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
5693                   if (TREE_CODE (t) == TEMPLATE_DECL)
5694                     --processing_template_decl;
5695                   if (TREE_CODE (r) == VAR_DECL)
5696                     {
5697                       tree init;
5698
5699                       if (DECL_INITIALIZED_IN_CLASS_P (r))
5700                         init = tsubst_expr (DECL_INITIAL (t), args,
5701                                             tf_error | tf_warning, NULL_TREE);
5702                       else
5703                         init = NULL_TREE;
5704
5705                       finish_static_data_member_decl
5706                         (r, init, /*asmspec_tree=*/NULL_TREE, /*flags=*/0);
5707
5708                       if (DECL_INITIALIZED_IN_CLASS_P (r))
5709                         check_static_variable_definition (r, TREE_TYPE (r));
5710                     }
5711                   else if (TREE_CODE (r) == FIELD_DECL)
5712                     {
5713                       /* Determine whether R has a valid type and can be
5714                          completed later.  If R is invalid, then it is
5715                          replaced by error_mark_node so that it will not be
5716                          added to TYPE_FIELDS.  */
5717                       tree rtype = TREE_TYPE (r);
5718                       if (can_complete_type_without_circularity (rtype))
5719                         complete_type (rtype);
5720
5721                       if (!COMPLETE_TYPE_P (rtype))
5722                         {
5723                           cxx_incomplete_type_error (r, rtype);
5724                           r = error_mark_node;
5725                         }
5726                     }
5727
5728                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5729                      such a thing will already have been added to the field
5730                      list by tsubst_enum in finish_member_declaration in the
5731                      CLASSTYPE_NESTED_UTDS case above.  */
5732                   if (!(TREE_CODE (r) == TYPE_DECL
5733                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
5734                         && DECL_ARTIFICIAL (r)))
5735                     {
5736                       set_current_access_from_decl (r);
5737                       finish_member_declaration (r);
5738                     }
5739                 }
5740             }
5741         }
5742       else
5743         {
5744           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5745             {
5746               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
5747
5748               tree friend_type = t;
5749               bool adjust_processing_template_decl = false;
5750
5751               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5752                 {
5753                   friend_type = tsubst_friend_class (friend_type, args);
5754                   adjust_processing_template_decl = true;
5755                 }
5756               else if (TREE_CODE (friend_type) == UNBOUND_CLASS_TEMPLATE)
5757                 {
5758                   friend_type = tsubst (friend_type, args,
5759                                         tf_error | tf_warning, NULL_TREE);
5760                   if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5761                     friend_type = TREE_TYPE (friend_type);
5762                   adjust_processing_template_decl = true;
5763                 }
5764               else if (TREE_CODE (friend_type) == TYPENAME_TYPE)
5765                 {
5766                   friend_type = tsubst (friend_type, args,
5767                                         tf_error | tf_warning, NULL_TREE);
5768                   /* Bump processing_template_decl for correct
5769                      dependent_type_p calculation.  */
5770                   ++processing_template_decl;
5771                   if (dependent_type_p (friend_type))
5772                     adjust_processing_template_decl = true;
5773                   --processing_template_decl;
5774                 }
5775               else if (uses_template_parms (friend_type))
5776                 friend_type = tsubst (friend_type, args,
5777                                       tf_error | tf_warning, NULL_TREE);
5778               else if (CLASSTYPE_USE_TEMPLATE (friend_type))
5779                 friend_type = friend_type;
5780               else 
5781                 {
5782                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5783
5784                   /* The call to xref_tag_from_type does injection for friend
5785                      classes.  */
5786                   push_nested_namespace (ns);
5787                   friend_type = 
5788                     xref_tag_from_type (friend_type, NULL_TREE, 1);
5789                   pop_nested_namespace (ns);
5790                 }
5791
5792               if (adjust_processing_template_decl)
5793                 /* Trick make_friend_class into realizing that the friend
5794                    we're adding is a template, not an ordinary class.  It's
5795                    important that we use make_friend_class since it will
5796                    perform some error-checking and output cross-reference
5797                    information.  */
5798                 ++processing_template_decl;
5799
5800               if (friend_type != error_mark_node)
5801                 make_friend_class (type, friend_type, /*complain=*/false);
5802
5803               if (adjust_processing_template_decl)
5804                 --processing_template_decl;
5805             }
5806           else
5807             {
5808               /* Build new DECL_FRIENDLIST.  */
5809               tree r;
5810
5811               if (TREE_CODE (t) == TEMPLATE_DECL)
5812                 {
5813                   ++processing_template_decl;
5814                   push_deferring_access_checks (dk_no_check);
5815                 }
5816               
5817               r = tsubst_friend_function (t, args);
5818               add_friend (type, r, /*complain=*/false);
5819               if (TREE_CODE (t) == TEMPLATE_DECL)
5820                 {
5821                   pop_deferring_access_checks ();
5822                   --processing_template_decl;
5823                 }
5824             }
5825         }
5826     }
5827
5828   /* Set the file and line number information to whatever is given for
5829      the class itself.  This puts error messages involving generated
5830      implicit functions at a predictable point, and the same point
5831      that would be used for non-template classes.  */
5832   typedecl = TYPE_MAIN_DECL (type);
5833   input_location = DECL_SOURCE_LOCATION (typedecl);
5834
5835   unreverse_member_declarations (type);
5836   finish_struct_1 (type);
5837   TYPE_BEING_DEFINED (type) = 0;
5838
5839   /* Now that the class is complete, instantiate default arguments for
5840      any member functions.  We don't do this earlier because the
5841      default arguments may reference members of the class.  */
5842   if (!PRIMARY_TEMPLATE_P (template))
5843     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5844       if (TREE_CODE (t) == FUNCTION_DECL 
5845           /* Implicitly generated member functions will not have template
5846              information; they are not instantiations, but instead are
5847              created "fresh" for each instantiation.  */
5848           && DECL_TEMPLATE_INFO (t))
5849         tsubst_default_arguments (t);
5850
5851   popclass ();
5852   pop_from_top_level ();
5853   pop_deferring_access_checks ();
5854   pop_tinst_level ();
5855
5856   /* The vtable for a template class can be emitted in any translation
5857      unit in which the class is instantiated.  When there is no key
5858      method, however, finish_struct_1 will already have added TYPE to
5859      the keyed_classes list.  */
5860   if (TYPE_CONTAINS_VPTR_P (type) && CLASSTYPE_KEY_METHOD (type))
5861     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5862
5863   return type;
5864 }
5865
5866 static tree
5867 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5868 {
5869   tree r;
5870   
5871   if (!t)
5872     r = t;
5873   else if (TYPE_P (t))
5874     r = tsubst (t, args, complain, in_decl);
5875   else
5876     {
5877       r = tsubst_expr (t, args, complain, in_decl);
5878
5879       if (!uses_template_parms (r))
5880         {
5881           /* Sometimes, one of the args was an expression involving a
5882              template constant parameter, like N - 1.  Now that we've
5883              tsubst'd, we might have something like 2 - 1.  This will
5884              confuse lookup_template_class, so we do constant folding
5885              here.  We have to unset processing_template_decl, to fool
5886              tsubst_copy_and_build() into building an actual tree.  */
5887
5888          /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5889             as simple as it's going to get, and trying to reprocess
5890             the trees will break.  Once tsubst_expr et al DTRT for
5891             non-dependent exprs, this code can go away, as the type
5892             will always be set.  */
5893           if (!TREE_TYPE (r))
5894             {
5895               int saved_processing_template_decl = processing_template_decl; 
5896               processing_template_decl = 0;
5897               r = tsubst_copy_and_build (r, /*args=*/NULL_TREE,
5898                                          tf_error, /*in_decl=*/NULL_TREE,
5899                                          /*function_p=*/false);
5900               processing_template_decl = saved_processing_template_decl; 
5901             }
5902           r = fold (r);
5903         }
5904     }
5905   return r;
5906 }
5907
5908 /* Substitute ARGS into the vector or list of template arguments T.  */
5909
5910 static tree
5911 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5912 {
5913   int len = TREE_VEC_LENGTH (t);
5914   int need_new = 0, i;
5915   tree *elts = alloca (len * sizeof (tree));
5916   
5917   for (i = 0; i < len; i++)
5918     {
5919       tree orig_arg = TREE_VEC_ELT (t, i);
5920       tree new_arg;
5921
5922       if (TREE_CODE (orig_arg) == TREE_VEC)
5923         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
5924       else
5925         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
5926       
5927       if (new_arg == error_mark_node)
5928         return error_mark_node;
5929
5930       elts[i] = new_arg;
5931       if (new_arg != orig_arg)
5932         need_new = 1;
5933     }
5934   
5935   if (!need_new)
5936     return t;
5937
5938   t = make_tree_vec (len);
5939   for (i = 0; i < len; i++)
5940     TREE_VEC_ELT (t, i) = elts[i];
5941   
5942   return t;
5943 }
5944
5945 /* Return the result of substituting ARGS into the template parameters
5946    given by PARMS.  If there are m levels of ARGS and m + n levels of
5947    PARMS, then the result will contain n levels of PARMS.  For
5948    example, if PARMS is `template <class T> template <class U>
5949    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5950    result will be `template <int*, double, class V>'.  */
5951
5952 static tree
5953 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
5954 {
5955   tree r = NULL_TREE;
5956   tree* new_parms;
5957
5958   for (new_parms = &r;
5959        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5960        new_parms = &(TREE_CHAIN (*new_parms)),
5961          parms = TREE_CHAIN (parms))
5962     {
5963       tree new_vec = 
5964         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5965       int i;
5966       
5967       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5968         {
5969           tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
5970           tree default_value = TREE_PURPOSE (tuple);
5971           tree parm_decl = TREE_VALUE (tuple);
5972
5973           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
5974           default_value = tsubst_template_arg (default_value, args,
5975                                                complain, NULL_TREE);
5976           
5977           tuple = build_tree_list (default_value, parm_decl);
5978           TREE_VEC_ELT (new_vec, i) = tuple;
5979         }
5980       
5981       *new_parms = 
5982         tree_cons (size_int (TMPL_PARMS_DEPTH (parms) 
5983                              - TMPL_ARGS_DEPTH (args)),
5984                    new_vec, NULL_TREE);
5985     }
5986
5987   return r;
5988 }
5989
5990 /* Substitute the ARGS into the indicated aggregate (or enumeration)
5991    type T.  If T is not an aggregate or enumeration type, it is
5992    handled as if by tsubst.  IN_DECL is as for tsubst.  If
5993    ENTERING_SCOPE is nonzero, T is the context for a template which
5994    we are presently tsubst'ing.  Return the substituted value.  */
5995
5996 static tree
5997 tsubst_aggr_type (tree t, 
5998                   tree args, 
5999                   tsubst_flags_t complain, 
6000                   tree in_decl, 
6001                   int entering_scope)
6002 {
6003   if (t == NULL_TREE)
6004     return NULL_TREE;
6005
6006   switch (TREE_CODE (t))
6007     {
6008     case RECORD_TYPE:
6009       if (TYPE_PTRMEMFUNC_P (t))
6010         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
6011
6012       /* Else fall through.  */
6013     case ENUMERAL_TYPE:
6014     case UNION_TYPE:
6015       if (TYPE_TEMPLATE_INFO (t))
6016         {
6017           tree argvec;
6018           tree context;
6019           tree r;
6020
6021           /* First, determine the context for the type we are looking
6022              up.  */
6023           context = TYPE_CONTEXT (t);
6024           if (context)
6025             context = tsubst_aggr_type (context, args, complain,
6026                                         in_decl, /*entering_scope=*/1);
6027
6028           /* Then, figure out what arguments are appropriate for the
6029              type we are trying to find.  For example, given:
6030
6031                template <class T> struct S;
6032                template <class T, class U> void f(T, U) { S<U> su; }
6033
6034              and supposing that we are instantiating f<int, double>,
6035              then our ARGS will be {int, double}, but, when looking up
6036              S we only want {double}.  */
6037           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
6038                                          complain, in_decl);
6039           if (argvec == error_mark_node)
6040             return error_mark_node;
6041
6042           r = lookup_template_class (t, argvec, in_decl, context,
6043                                      entering_scope, complain);
6044
6045           return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6046         }
6047       else 
6048         /* This is not a template type, so there's nothing to do.  */
6049         return t;
6050
6051     default:
6052       return tsubst (t, args, complain, in_decl);
6053     }
6054 }
6055
6056 /* Substitute into the default argument ARG (a default argument for
6057    FN), which has the indicated TYPE.  */
6058
6059 tree
6060 tsubst_default_argument (tree fn, tree type, tree arg)
6061 {
6062   tree saved_class_ptr = NULL_TREE;
6063   tree saved_class_ref = NULL_TREE;
6064
6065   /* This default argument came from a template.  Instantiate the
6066      default argument here, not in tsubst.  In the case of
6067      something like: 
6068      
6069        template <class T>
6070        struct S {
6071          static T t();
6072          void f(T = t());
6073        };
6074      
6075      we must be careful to do name lookup in the scope of S<T>,
6076      rather than in the current class.  */
6077   push_access_scope (fn);
6078   /* The default argument expression should not be considered to be
6079      within the scope of FN.  Since push_access_scope sets
6080      current_function_decl, we must explicitly clear it here.  */
6081   current_function_decl = NULL_TREE;
6082   /* The "this" pointer is not valid in a default argument.  */
6083   if (cfun)
6084     {
6085       saved_class_ptr = current_class_ptr;
6086       cp_function_chain->x_current_class_ptr = NULL_TREE;
6087       saved_class_ref = current_class_ref;
6088       cp_function_chain->x_current_class_ref = NULL_TREE;
6089     }
6090
6091   push_deferring_access_checks(dk_no_deferred);
6092   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
6093                      tf_error | tf_warning, NULL_TREE);
6094   pop_deferring_access_checks();
6095
6096   /* Restore the "this" pointer.  */
6097   if (cfun)
6098     {
6099       cp_function_chain->x_current_class_ptr = saved_class_ptr;
6100       cp_function_chain->x_current_class_ref = saved_class_ref;
6101     }
6102
6103   pop_access_scope (fn);
6104
6105   /* Make sure the default argument is reasonable.  */
6106   arg = check_default_argument (type, arg);
6107
6108   return arg;
6109 }
6110
6111 /* Substitute into all the default arguments for FN.  */
6112
6113 static void
6114 tsubst_default_arguments (tree fn)
6115 {
6116   tree arg;
6117   tree tmpl_args;
6118
6119   tmpl_args = DECL_TI_ARGS (fn);
6120
6121   /* If this function is not yet instantiated, we certainly don't need
6122      its default arguments.  */
6123   if (uses_template_parms (tmpl_args))
6124     return;
6125
6126   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn)); 
6127        arg; 
6128        arg = TREE_CHAIN (arg))
6129     if (TREE_PURPOSE (arg))
6130       TREE_PURPOSE (arg) = tsubst_default_argument (fn, 
6131                                                     TREE_VALUE (arg),
6132                                                     TREE_PURPOSE (arg));
6133 }
6134
6135 /* Substitute the ARGS into the T, which is a _DECL.  TYPE is the
6136    (already computed) substitution of ARGS into TREE_TYPE (T), if
6137    appropriate.  Return the result of the substitution.  Issue error
6138    and warning messages under control of COMPLAIN.  */
6139
6140 static tree
6141 tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain)
6142 {
6143   location_t saved_loc;
6144   tree r = NULL_TREE;
6145   tree in_decl = t;
6146
6147   /* Set the filename and linenumber to improve error-reporting.  */
6148   saved_loc = input_location;
6149   input_location = DECL_SOURCE_LOCATION (t);
6150
6151   switch (TREE_CODE (t))
6152     {
6153     case TEMPLATE_DECL:
6154       {
6155         /* We can get here when processing a member template function
6156            of a template class.  */
6157         tree decl = DECL_TEMPLATE_RESULT (t);
6158         tree spec;
6159         int is_template_template_parm = DECL_TEMPLATE_TEMPLATE_PARM_P (t);
6160
6161         if (!is_template_template_parm)
6162           {
6163             /* We might already have an instance of this template.
6164                The ARGS are for the surrounding class type, so the
6165                full args contain the tsubst'd args for the context,
6166                plus the innermost args from the template decl.  */
6167             tree tmpl_args = DECL_CLASS_TEMPLATE_P (t) 
6168               ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
6169               : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
6170             tree full_args;
6171             
6172             full_args = tsubst_template_args (tmpl_args, args,
6173                                               complain, in_decl);
6174
6175             /* tsubst_template_args doesn't copy the vector if
6176                nothing changed.  But, *something* should have
6177                changed.  */
6178             gcc_assert (full_args != tmpl_args);
6179
6180             spec = retrieve_specialization (t, full_args,
6181                                             /*class_specializations_p=*/true);
6182             if (spec != NULL_TREE)
6183               {
6184                 r = spec;
6185                 break;
6186               }
6187           }
6188
6189         /* Make a new template decl.  It will be similar to the
6190            original, but will record the current template arguments. 
6191            We also create a new function declaration, which is just
6192            like the old one, but points to this new template, rather
6193            than the old one.  */
6194         r = copy_decl (t);
6195         gcc_assert (DECL_LANG_SPECIFIC (r) != 0);
6196         TREE_CHAIN (r) = NULL_TREE;
6197
6198         if (is_template_template_parm)
6199           {
6200             tree new_decl = tsubst (decl, args, complain, in_decl);
6201             DECL_TEMPLATE_RESULT (r) = new_decl;
6202             TREE_TYPE (r) = TREE_TYPE (new_decl);
6203             break;
6204           }
6205
6206         DECL_CONTEXT (r) 
6207           = tsubst_aggr_type (DECL_CONTEXT (t), args, 
6208                               complain, in_decl, 
6209                               /*entering_scope=*/1); 
6210         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
6211
6212         if (TREE_CODE (decl) == TYPE_DECL)
6213           {
6214             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6215             if (new_type == error_mark_node)
6216               return error_mark_node;
6217
6218             TREE_TYPE (r) = new_type;
6219             CLASSTYPE_TI_TEMPLATE (new_type) = r;
6220             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
6221             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
6222           }
6223         else
6224           {
6225             tree new_decl = tsubst (decl, args, complain, in_decl);
6226             if (new_decl == error_mark_node)
6227               return error_mark_node;
6228
6229             DECL_TEMPLATE_RESULT (r) = new_decl;
6230             DECL_TI_TEMPLATE (new_decl) = r;
6231             TREE_TYPE (r) = TREE_TYPE (new_decl);
6232             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
6233           }
6234
6235         SET_DECL_IMPLICIT_INSTANTIATION (r);
6236         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
6237         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
6238
6239         /* The template parameters for this new template are all the
6240            template parameters for the old template, except the
6241            outermost level of parameters.  */
6242         DECL_TEMPLATE_PARMS (r) 
6243           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
6244                                    complain);
6245
6246         if (PRIMARY_TEMPLATE_P (t))
6247           DECL_PRIMARY_TEMPLATE (r) = r;
6248
6249         if (TREE_CODE (decl) != TYPE_DECL)
6250           /* Record this non-type partial instantiation.  */
6251           register_specialization (r, t, 
6252                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
6253       }
6254       break;
6255
6256     case FUNCTION_DECL:
6257       {
6258         tree ctx;
6259         tree argvec = NULL_TREE;
6260         tree *friends;
6261         tree gen_tmpl;
6262         int member;
6263         int args_depth;
6264         int parms_depth;
6265
6266         /* Nobody should be tsubst'ing into non-template functions.  */
6267         gcc_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE);
6268
6269         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
6270           {
6271             tree spec;
6272             bool dependent_p;
6273
6274             /* If T is not dependent, just return it.  We have to
6275                increment PROCESSING_TEMPLATE_DECL because
6276                value_dependent_expression_p assumes that nothing is
6277                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
6278             ++processing_template_decl;
6279             dependent_p = value_dependent_expression_p (t);
6280             --processing_template_decl;
6281             if (!dependent_p)
6282               return t;
6283
6284             /* Calculate the most general template of which R is a
6285                specialization, and the complete set of arguments used to
6286                specialize R.  */
6287             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
6288             argvec = tsubst_template_args (DECL_TI_ARGS 
6289                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
6290                                            args, complain, in_decl); 
6291
6292             /* Check to see if we already have this specialization.  */
6293             spec = retrieve_specialization (gen_tmpl, argvec,
6294                                             /*class_specializations_p=*/false);
6295
6296             if (spec)
6297               {
6298                 r = spec;
6299                 break;
6300               }
6301
6302             /* We can see more levels of arguments than parameters if
6303                there was a specialization of a member template, like
6304                this:
6305
6306                  template <class T> struct S { template <class U> void f(); }
6307                  template <> template <class U> void S<int>::f(U); 
6308
6309                Here, we'll be substituting into the specialization,
6310                because that's where we can find the code we actually
6311                want to generate, but we'll have enough arguments for
6312                the most general template.              
6313
6314                We also deal with the peculiar case:
6315
6316                  template <class T> struct S { 
6317                    template <class U> friend void f();
6318                  };
6319                  template <class U> void f() {}
6320                  template S<int>;
6321                  template void f<double>();
6322
6323                Here, the ARGS for the instantiation of will be {int,
6324                double}.  But, we only need as many ARGS as there are
6325                levels of template parameters in CODE_PATTERN.  We are
6326                careful not to get fooled into reducing the ARGS in
6327                situations like:
6328
6329                  template <class T> struct S { template <class U> void f(U); }
6330                  template <class T> template <> void S<T>::f(int) {}
6331
6332                which we can spot because the pattern will be a
6333                specialization in this case.  */
6334             args_depth = TMPL_ARGS_DEPTH (args);
6335             parms_depth = 
6336               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t))); 
6337             if (args_depth > parms_depth
6338                 && !DECL_TEMPLATE_SPECIALIZATION (t))
6339               args = get_innermost_template_args (args, parms_depth);
6340           }
6341         else
6342           {
6343             /* This special case arises when we have something like this:
6344
6345                  template <class T> struct S { 
6346                    friend void f<int>(int, double); 
6347                  };
6348
6349                Here, the DECL_TI_TEMPLATE for the friend declaration
6350                will be an IDENTIFIER_NODE.  We are being called from
6351                tsubst_friend_function, and we want only to create a
6352                new decl (R) with appropriate types so that we can call
6353                determine_specialization.  */
6354             gen_tmpl = NULL_TREE;
6355           }
6356
6357         if (DECL_CLASS_SCOPE_P (t))
6358           {
6359             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
6360               member = 2;
6361             else
6362               member = 1;
6363             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, 
6364                                     complain, t, /*entering_scope=*/1);
6365           }
6366         else
6367           {
6368             member = 0;
6369             ctx = DECL_CONTEXT (t);
6370           }
6371         type = tsubst (type, args, complain, in_decl);
6372         if (type == error_mark_node)
6373           return error_mark_node;
6374
6375         /* We do NOT check for matching decls pushed separately at this
6376            point, as they may not represent instantiations of this
6377            template, and in any case are considered separate under the
6378            discrete model.  */
6379         r = copy_decl (t);
6380         DECL_USE_TEMPLATE (r) = 0;
6381         TREE_TYPE (r) = type;
6382         /* Clear out the mangled name and RTL for the instantiation.  */
6383         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6384         SET_DECL_RTL (r, NULL_RTX);
6385         DECL_INITIAL (r) = NULL_TREE;
6386         DECL_CONTEXT (r) = ctx;
6387
6388         if (member && DECL_CONV_FN_P (r)) 
6389           /* Type-conversion operator.  Reconstruct the name, in
6390              case it's the name of one of the template's parameters.  */
6391           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
6392
6393         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
6394                                      complain, t);
6395         DECL_RESULT (r) = NULL_TREE;
6396
6397         TREE_STATIC (r) = 0;
6398         TREE_PUBLIC (r) = TREE_PUBLIC (t);
6399         DECL_EXTERNAL (r) = 1;
6400         /* If this is an instantiation of a function with internal
6401            linkage, we already know what object file linkage will be
6402            assigned to the instantiation.  */
6403         DECL_INTERFACE_KNOWN (r) = !TREE_PUBLIC (r);
6404         DECL_DEFER_OUTPUT (r) = 0;
6405         TREE_CHAIN (r) = NULL_TREE;
6406         DECL_PENDING_INLINE_INFO (r) = 0;
6407         DECL_PENDING_INLINE_P (r) = 0;
6408         DECL_SAVED_TREE (r) = NULL_TREE;
6409         TREE_USED (r) = 0;
6410         if (DECL_CLONED_FUNCTION (r))
6411           {
6412             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
6413                                                args, complain, t);
6414             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6415             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6416           }
6417
6418         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
6419            this in the special friend case mentioned above where
6420            GEN_TMPL is NULL.  */
6421         if (gen_tmpl)
6422           {
6423             DECL_TEMPLATE_INFO (r) 
6424               = tree_cons (gen_tmpl, argvec, NULL_TREE);
6425             SET_DECL_IMPLICIT_INSTANTIATION (r);
6426             register_specialization (r, gen_tmpl, argvec);
6427
6428             /* We're not supposed to instantiate default arguments
6429                until they are called, for a template.  But, for a
6430                declaration like:
6431
6432                  template <class T> void f () 
6433                  { extern void g(int i = T()); }
6434                  
6435                we should do the substitution when the template is
6436                instantiated.  We handle the member function case in
6437                instantiate_class_template since the default arguments
6438                might refer to other members of the class.  */
6439             if (!member
6440                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6441                 && !uses_template_parms (argvec))
6442               tsubst_default_arguments (r);
6443           }
6444
6445         /* Copy the list of befriending classes.  */
6446         for (friends = &DECL_BEFRIENDING_CLASSES (r);
6447              *friends;
6448              friends = &TREE_CHAIN (*friends)) 
6449           {
6450             *friends = copy_node (*friends);
6451             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
6452                                             args, complain,
6453                                             in_decl);
6454           }
6455
6456         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
6457           {
6458             maybe_retrofit_in_chrg (r);
6459             if (DECL_CONSTRUCTOR_P (r))
6460               grok_ctor_properties (ctx, r);
6461             /* If this is an instantiation of a member template, clone it.
6462                If it isn't, that'll be handled by
6463                clone_constructors_and_destructors.  */
6464             if (PRIMARY_TEMPLATE_P (gen_tmpl))
6465               clone_function_decl (r, /*update_method_vec_p=*/0);
6466           }
6467         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
6468           grok_op_properties (r, DECL_FRIEND_P (r),
6469                               (complain & tf_error) != 0);
6470
6471         if (DECL_FRIEND_P (t) && DECL_FRIEND_CONTEXT (t))
6472           SET_DECL_FRIEND_CONTEXT (r,
6473                                    tsubst (DECL_FRIEND_CONTEXT (t),
6474                                             args, complain, in_decl));
6475       }
6476       break;
6477
6478     case PARM_DECL:
6479       {
6480         r = copy_node (t);
6481         if (DECL_TEMPLATE_PARM_P (t))
6482           SET_DECL_TEMPLATE_PARM_P (r);
6483
6484         TREE_TYPE (r) = type;
6485         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6486
6487         if (DECL_INITIAL (r))
6488           {
6489             if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6490               DECL_INITIAL (r) = TREE_TYPE (r);
6491             else
6492               DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6493                                          complain, in_decl);
6494           }
6495
6496         DECL_CONTEXT (r) = NULL_TREE;
6497
6498         if (!DECL_TEMPLATE_PARM_P (r))
6499           DECL_ARG_TYPE (r) = type_passed_as (type);
6500         if (TREE_CHAIN (t))
6501           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
6502                                    complain, TREE_CHAIN (t));
6503       }
6504       break;
6505
6506     case FIELD_DECL:
6507       {
6508         r = copy_decl (t);
6509         TREE_TYPE (r) = type;
6510         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6511
6512         /* We don't have to set DECL_CONTEXT here; it is set by
6513            finish_member_declaration.  */
6514         DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
6515                                         complain, in_decl);
6516         TREE_CHAIN (r) = NULL_TREE;
6517         if (VOID_TYPE_P (type)) 
6518           cp_error_at ("instantiation of %qD as type %qT", r, type);
6519       }
6520       break;
6521
6522     case USING_DECL:
6523       {
6524         r = copy_node (t);
6525         /* It is not a dependent using decl any more.  */
6526         TREE_TYPE (r) = void_type_node;
6527         DECL_INITIAL (r)
6528           = tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
6529         DECL_NAME (r)
6530           = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
6531         TREE_CHAIN (r) = NULL_TREE;
6532       }
6533       break;
6534
6535     case TYPE_DECL:
6536       if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6537           || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6538         {
6539           /* If this is the canonical decl, we don't have to mess with
6540              instantiations, and often we can't (for typename, template
6541              type parms and such).  Note that TYPE_NAME is not correct for
6542              the above test if we've copied the type for a typedef.  */
6543           r = TYPE_NAME (type);
6544           break;
6545         }
6546
6547       /* Fall through.  */
6548
6549     case VAR_DECL:
6550       {
6551         tree argvec = NULL_TREE;
6552         tree gen_tmpl = NULL_TREE;
6553         tree spec;
6554         tree tmpl = NULL_TREE;
6555         tree ctx;
6556         int local_p;
6557
6558         /* Assume this is a non-local variable.  */
6559         local_p = 0;
6560
6561         if (TYPE_P (CP_DECL_CONTEXT (t)))
6562           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, 
6563                                   complain,
6564                                   in_decl, /*entering_scope=*/1);
6565         else if (DECL_NAMESPACE_SCOPE_P (t))
6566           ctx = DECL_CONTEXT (t);
6567         else
6568           {
6569             /* Subsequent calls to pushdecl will fill this in.  */
6570             ctx = NULL_TREE;
6571             local_p = 1;
6572           }
6573
6574         /* Check to see if we already have this specialization.  */
6575         if (!local_p)
6576           {
6577             tmpl = DECL_TI_TEMPLATE (t);
6578             gen_tmpl = most_general_template (tmpl);
6579             argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6580             spec = retrieve_specialization (gen_tmpl, argvec,
6581                                             /*class_specializations_p=*/false);
6582           }
6583         else
6584           spec = retrieve_local_specialization (t);
6585
6586         if (spec)
6587           {
6588             r = spec;
6589             break;
6590           }
6591
6592         r = copy_decl (t);
6593         if (TREE_CODE (r) == VAR_DECL)
6594           {
6595             type = complete_type (type);
6596             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6597               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6598             type = check_var_type (DECL_NAME (r), type);
6599           }
6600         else if (DECL_SELF_REFERENCE_P (t))
6601           SET_DECL_SELF_REFERENCE_P (r);
6602         TREE_TYPE (r) = type;
6603         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6604         DECL_CONTEXT (r) = ctx;
6605         /* Clear out the mangled name and RTL for the instantiation.  */
6606         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6607         SET_DECL_RTL (r, NULL_RTX);
6608
6609         /* Don't try to expand the initializer until someone tries to use
6610            this variable; otherwise we run into circular dependencies.  */
6611         DECL_INITIAL (r) = NULL_TREE;
6612         SET_DECL_RTL (r, NULL_RTX);
6613         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6614
6615         /* Even if the original location is out of scope, the newly
6616            substituted one is not.  */
6617         if (TREE_CODE (r) == VAR_DECL)
6618           {
6619             DECL_DEAD_FOR_LOCAL (r) = 0;
6620             DECL_INITIALIZED_P (r) = 0;
6621           }
6622
6623         if (!local_p)
6624           {
6625             /* A static data member declaration is always marked
6626                external when it is declared in-class, even if an
6627                initializer is present.  We mimic the non-template
6628                processing here.  */
6629             DECL_EXTERNAL (r) = 1;
6630
6631             register_specialization (r, gen_tmpl, argvec);
6632             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6633             SET_DECL_IMPLICIT_INSTANTIATION (r);
6634           }
6635         else
6636           register_local_specialization (r, t);
6637
6638         TREE_CHAIN (r) = NULL_TREE;
6639         layout_decl (r, 0);
6640       }
6641       break;
6642
6643     default:
6644       gcc_unreachable ();
6645     } 
6646
6647   /* Restore the file and line information.  */
6648   input_location = saved_loc;
6649
6650   return r;
6651 }
6652
6653 /* Substitute into the ARG_TYPES of a function type.  */
6654
6655 static tree
6656 tsubst_arg_types (tree arg_types, 
6657                   tree args, 
6658                   tsubst_flags_t complain, 
6659                   tree in_decl)
6660 {
6661   tree remaining_arg_types;
6662   tree type;
6663
6664   if (!arg_types || arg_types == void_list_node)
6665     return arg_types;
6666   
6667   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6668                                           args, complain, in_decl);
6669   if (remaining_arg_types == error_mark_node)
6670     return error_mark_node;
6671
6672   type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6673   if (type == error_mark_node)
6674     return error_mark_node;
6675   if (VOID_TYPE_P (type))
6676     {
6677       if (complain & tf_error)
6678         {
6679           error ("invalid parameter type %qT", type);
6680           if (in_decl)
6681             cp_error_at ("in declaration %qD", in_decl);
6682         }
6683       return error_mark_node;
6684     }
6685
6686   /* Do array-to-pointer, function-to-pointer conversion, and ignore
6687      top-level qualifiers as required.  */
6688   type = TYPE_MAIN_VARIANT (type_decays_to (type));
6689
6690   /* Note that we do not substitute into default arguments here.  The
6691      standard mandates that they be instantiated only when needed,
6692      which is done in build_over_call.  */
6693   return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6694                          remaining_arg_types);
6695                          
6696 }
6697
6698 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
6699    *not* handle the exception-specification for FNTYPE, because the
6700    initial substitution of explicitly provided template parameters
6701    during argument deduction forbids substitution into the
6702    exception-specification:
6703
6704      [temp.deduct]
6705
6706      All references in the function type of the function template to  the
6707      corresponding template parameters are replaced by the specified tem-
6708      plate argument values.  If a substitution in a template parameter or
6709      in  the function type of the function template results in an invalid
6710      type, type deduction fails.  [Note: The equivalent  substitution  in
6711      exception specifications is done only when the function is instanti-
6712      ated, at which point a program is  ill-formed  if  the  substitution
6713      results in an invalid type.]  */
6714
6715 static tree
6716 tsubst_function_type (tree t, 
6717                       tree args, 
6718                       tsubst_flags_t complain, 
6719                       tree in_decl)
6720 {
6721   tree return_type;
6722   tree arg_types;
6723   tree fntype;
6724
6725   /* The TYPE_CONTEXT is not used for function/method types.  */
6726   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
6727
6728   /* Substitute the return type.  */
6729   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6730   if (return_type == error_mark_node)
6731     return error_mark_node;
6732
6733   /* Substitute the argument types.  */
6734   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6735                                 complain, in_decl); 
6736   if (arg_types == error_mark_node)
6737     return error_mark_node;
6738   
6739   /* Construct a new type node and return it.  */
6740   if (TREE_CODE (t) == FUNCTION_TYPE)
6741     fntype = build_function_type (return_type, arg_types);
6742   else
6743     {
6744       tree r = TREE_TYPE (TREE_VALUE (arg_types));
6745       if (! IS_AGGR_TYPE (r))
6746         {
6747           /* [temp.deduct]
6748              
6749              Type deduction may fail for any of the following
6750              reasons:
6751              
6752              -- Attempting to create "pointer to member of T" when T
6753              is not a class type.  */
6754           if (complain & tf_error)
6755             error ("creating pointer to member function of non-class type %qT",
6756                       r);
6757           return error_mark_node;
6758         }
6759       
6760       fntype = build_method_type_directly (r, return_type, 
6761                                            TREE_CHAIN (arg_types));
6762     }
6763   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6764   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6765   
6766   return fntype;  
6767 }
6768
6769 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
6770    ARGS into that specification, and return the substituted
6771    specification.  If there is no specification, return NULL_TREE.  */
6772
6773 static tree
6774 tsubst_exception_specification (tree fntype, 
6775                                 tree args, 
6776                                 tsubst_flags_t complain,
6777                                 tree in_decl)
6778 {
6779   tree specs;
6780   tree new_specs;
6781
6782   specs = TYPE_RAISES_EXCEPTIONS (fntype);
6783   new_specs = NULL_TREE;
6784   if (specs)
6785     {
6786       if (! TREE_VALUE (specs))
6787         new_specs = specs;
6788       else
6789         while (specs)
6790           {
6791             tree spec;
6792             spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
6793             if (spec == error_mark_node)
6794               return spec;
6795             new_specs = add_exception_specifier (new_specs, spec, complain);
6796             specs = TREE_CHAIN (specs);
6797           }
6798     }
6799   return new_specs;
6800 }
6801
6802 /* Substitute into the PARMS of a call-declarator.  */
6803
6804 static tree
6805 tsubst_call_declarator_parms (tree parms, 
6806                               tree args, 
6807                               tsubst_flags_t complain, 
6808                               tree in_decl)
6809 {
6810   tree new_parms;
6811   tree type;
6812   tree defarg;
6813
6814   if (!parms || parms == void_list_node)
6815     return parms;
6816   
6817   new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6818                                             args, complain, in_decl);
6819
6820   /* Figure out the type of this parameter.  */
6821   type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6822   
6823   /* Figure out the default argument as well.  Note that we use
6824      tsubst_expr since the default argument is really an expression.  */
6825   defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6826
6827   /* Chain this parameter on to the front of those we have already
6828      processed.  We don't use hash_tree_cons because that function
6829      doesn't check TREE_PARMLIST.  */
6830   new_parms = tree_cons (defarg, type, new_parms);
6831
6832   return new_parms;
6833 }
6834
6835 /* Take the tree structure T and replace template parameters used
6836    therein with the argument vector ARGS.  IN_DECL is an associated
6837    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
6838    Issue error and warning messages under control of COMPLAIN.  Note
6839    that we must be relatively non-tolerant of extensions here, in
6840    order to preserve conformance; if we allow substitutions that
6841    should not be allowed, we may allow argument deductions that should
6842    not succeed, and therefore report ambiguous overload situations
6843    where there are none.  In theory, we could allow the substitution,
6844    but indicate that it should have failed, and allow our caller to
6845    make sure that the right thing happens, but we don't try to do this
6846    yet.
6847
6848    This function is used for dealing with types, decls and the like;
6849    for expressions, use tsubst_expr or tsubst_copy.  */
6850
6851 static tree
6852 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6853 {
6854   tree type, r;
6855
6856   if (t == NULL_TREE || t == error_mark_node
6857       || t == integer_type_node
6858       || t == void_type_node
6859       || t == char_type_node
6860       || t == unknown_type_node
6861       || TREE_CODE (t) == NAMESPACE_DECL)
6862     return t;
6863
6864   if (TREE_CODE (t) == IDENTIFIER_NODE)
6865     type = IDENTIFIER_TYPE_VALUE (t);
6866   else
6867     type = TREE_TYPE (t);
6868
6869   gcc_assert (type != unknown_type_node);
6870
6871   if (type && TREE_CODE (t) != FUNCTION_DECL
6872       && TREE_CODE (t) != TYPENAME_TYPE
6873       && TREE_CODE (t) != TEMPLATE_DECL
6874       && TREE_CODE (t) != IDENTIFIER_NODE
6875       && TREE_CODE (t) != FUNCTION_TYPE
6876       && TREE_CODE (t) != METHOD_TYPE)
6877     type = tsubst (type, args, complain, in_decl);
6878   if (type == error_mark_node)
6879     return error_mark_node;
6880
6881   if (DECL_P (t))
6882     return tsubst_decl (t, args, type, complain);
6883
6884   switch (TREE_CODE (t))
6885     {
6886     case RECORD_TYPE:
6887     case UNION_TYPE:
6888     case ENUMERAL_TYPE:
6889       return tsubst_aggr_type (t, args, complain, in_decl,
6890                                /*entering_scope=*/0);
6891
6892     case ERROR_MARK:
6893     case IDENTIFIER_NODE:
6894     case VOID_TYPE:
6895     case REAL_TYPE:
6896     case COMPLEX_TYPE:
6897     case VECTOR_TYPE:
6898     case BOOLEAN_TYPE:
6899     case INTEGER_CST:
6900     case REAL_CST:
6901     case STRING_CST:
6902       return t;
6903
6904     case INTEGER_TYPE:
6905       if (t == integer_type_node)
6906         return t;
6907
6908       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6909           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6910         return t;
6911
6912       {
6913         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
6914
6915         /* The array dimension behaves like a non-type template arg,
6916            in that we want to fold it as much as possible.  */
6917         max = tsubst_template_arg (omax, args, complain, in_decl);
6918         if (!processing_template_decl)
6919           max = decl_constant_value (max);
6920
6921         if (integer_zerop (omax))
6922           {
6923             /* Still allow an explicit array of size zero.  */
6924             if (pedantic)
6925               pedwarn ("creating array with size zero");
6926           }
6927         else if (integer_zerop (max) 
6928                  || (TREE_CODE (max) == INTEGER_CST 
6929                      && INT_CST_LT (max, integer_zero_node)))
6930           {
6931             /* [temp.deduct]
6932
6933                Type deduction may fail for any of the following
6934                reasons:  
6935
6936                  Attempting to create an array with a size that is
6937                  zero or negative.  */
6938             if (complain & tf_error)
6939               error ("creating array with size zero (%qE)", max);
6940
6941             return error_mark_node;
6942           }
6943
6944         return compute_array_index_type (NULL_TREE, max);
6945       }
6946
6947     case TEMPLATE_TYPE_PARM:
6948     case TEMPLATE_TEMPLATE_PARM:
6949     case BOUND_TEMPLATE_TEMPLATE_PARM:
6950     case TEMPLATE_PARM_INDEX:
6951       {
6952         int idx;
6953         int level;
6954         int levels;
6955         tree arg = NULL_TREE;
6956
6957         r = NULL_TREE;
6958
6959         gcc_assert (TREE_VEC_LENGTH (args) > 0);
6960         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6961             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
6962             || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6963           {
6964             idx = TEMPLATE_TYPE_IDX (t);
6965             level = TEMPLATE_TYPE_LEVEL (t);
6966           }
6967         else
6968           {
6969             idx = TEMPLATE_PARM_IDX (t);
6970             level = TEMPLATE_PARM_LEVEL (t);
6971           }
6972
6973         levels = TMPL_ARGS_DEPTH (args);
6974         if (level <= levels)
6975           arg = TMPL_ARG (args, level, idx);
6976
6977         if (arg == error_mark_node)
6978           return error_mark_node;
6979         else if (arg != NULL_TREE)
6980           {
6981             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6982               {
6983                 gcc_assert (TYPE_P (arg));
6984                 return cp_build_qualified_type_real
6985                   (arg, cp_type_quals (arg) | cp_type_quals (t),
6986                    complain | tf_ignore_bad_quals);
6987               }
6988             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6989               {
6990                 /* We are processing a type constructed from a
6991                    template template parameter.  */
6992                 tree argvec = tsubst (TYPE_TI_ARGS (t),
6993                                       args, complain, in_decl);
6994                 if (argvec == error_mark_node)
6995                   return error_mark_node;
6996                         
6997                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
6998                    are resolving nested-types in the signature of a
6999                    member function templates.  Otherwise ARG is a
7000                    TEMPLATE_DECL and is the real template to be
7001                    instantiated.  */
7002                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
7003                   arg = TYPE_NAME (arg);
7004                 
7005                 r = lookup_template_class (arg, 
7006                                            argvec, in_decl, 
7007                                            DECL_CONTEXT (arg),
7008                                             /*entering_scope=*/0,
7009                                            complain);
7010                 return cp_build_qualified_type_real
7011                   (r, TYPE_QUALS (t), complain);
7012               }
7013             else
7014               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
7015               return arg;
7016           }
7017
7018         if (level == 1)
7019           /* This can happen during the attempted tsubst'ing in
7020              unify.  This means that we don't yet have any information
7021              about the template parameter in question.  */
7022           return t;
7023
7024         /* If we get here, we must have been looking at a parm for a
7025            more deeply nested template.  Make a new version of this
7026            template parameter, but with a lower level.  */
7027         switch (TREE_CODE (t))
7028           {
7029           case TEMPLATE_TYPE_PARM:
7030           case TEMPLATE_TEMPLATE_PARM:
7031           case BOUND_TEMPLATE_TEMPLATE_PARM:
7032             if (cp_type_quals (t))
7033               {
7034                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
7035                 r = cp_build_qualified_type_real
7036                   (r, cp_type_quals (t),
7037                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
7038                                ? tf_ignore_bad_quals : 0));
7039               }
7040             else
7041               {
7042                 r = copy_type (t);
7043                 TEMPLATE_TYPE_PARM_INDEX (r)
7044                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
7045                                                 r, levels);
7046                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
7047                 TYPE_MAIN_VARIANT (r) = r;
7048                 TYPE_POINTER_TO (r) = NULL_TREE;
7049                 TYPE_REFERENCE_TO (r) = NULL_TREE;
7050
7051                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
7052                   {
7053                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
7054                                           complain, in_decl); 
7055                     if (argvec == error_mark_node)
7056                       return error_mark_node;
7057
7058                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
7059                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
7060                   }
7061               }
7062             break;
7063
7064           case TEMPLATE_PARM_INDEX:
7065             r = reduce_template_parm_level (t, type, levels);
7066             break;
7067            
7068           default:
7069             gcc_unreachable ();
7070           }
7071
7072         return r;
7073       }
7074
7075     case TREE_LIST:
7076       {
7077         tree purpose, value, chain;
7078
7079         if (t == void_list_node)
7080           return t;
7081
7082         purpose = TREE_PURPOSE (t);
7083         if (purpose)
7084           {
7085             purpose = tsubst (purpose, args, complain, in_decl);
7086             if (purpose == error_mark_node)
7087               return error_mark_node;
7088           }
7089         value = TREE_VALUE (t);
7090         if (value)
7091           {
7092             value = tsubst (value, args, complain, in_decl);
7093             if (value == error_mark_node)
7094               return error_mark_node;
7095           }
7096         chain = TREE_CHAIN (t);
7097         if (chain && chain != void_type_node)
7098           {
7099             chain = tsubst (chain, args, complain, in_decl);
7100             if (chain == error_mark_node)
7101               return error_mark_node;
7102           }
7103         if (purpose == TREE_PURPOSE (t)
7104             && value == TREE_VALUE (t)
7105             && chain == TREE_CHAIN (t))
7106           return t;
7107         return hash_tree_cons (purpose, value, chain);
7108       }
7109       
7110     case TREE_BINFO:
7111       /* We should never be tsubsting a binfo.  */
7112       gcc_unreachable ();
7113
7114     case TREE_VEC:
7115       /* A vector of template arguments.  */
7116       gcc_assert (!type);
7117       return tsubst_template_args (t, args, complain, in_decl);
7118
7119     case POINTER_TYPE:
7120     case REFERENCE_TYPE:
7121       {
7122         enum tree_code code;
7123
7124         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
7125           return t;
7126
7127         code = TREE_CODE (t);
7128
7129
7130         /* [temp.deduct]
7131            
7132            Type deduction may fail for any of the following
7133            reasons:  
7134
7135            -- Attempting to create a pointer to reference type.
7136            -- Attempting to create a reference to a reference type or
7137               a reference to void.  */
7138         if (TREE_CODE (type) == REFERENCE_TYPE
7139             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
7140           {
7141             static location_t last_loc;
7142
7143             /* We keep track of the last time we issued this error
7144                message to avoid spewing a ton of messages during a
7145                single bad template instantiation.  */
7146             if (complain & tf_error
7147 #ifdef USE_MAPPED_LOCATION
7148                 && last_loc != input_location
7149 #else
7150                 && (last_loc.line != input_line
7151                     || last_loc.file != input_filename)
7152 #endif
7153                   )
7154               {
7155                 if (TREE_CODE (type) == VOID_TYPE)
7156                   error ("forming reference to void");
7157                 else
7158                   error ("forming %s to reference type %qT",
7159                          (code == POINTER_TYPE) ? "pointer" : "reference",
7160                          type);
7161                 last_loc = input_location;
7162               }
7163
7164             return error_mark_node;
7165           }
7166         else if (code == POINTER_TYPE)
7167           {
7168             r = build_pointer_type (type);
7169             if (TREE_CODE (type) == METHOD_TYPE)
7170               r = build_ptrmemfunc_type (r);
7171           }
7172         else
7173           r = build_reference_type (type);
7174         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7175
7176         if (r != error_mark_node)
7177           /* Will this ever be needed for TYPE_..._TO values?  */
7178           layout_type (r);
7179         
7180         return r;
7181       }
7182     case OFFSET_TYPE:
7183       {
7184         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
7185         if (r == error_mark_node || !IS_AGGR_TYPE (r))
7186           {
7187             /* [temp.deduct]
7188
7189                Type deduction may fail for any of the following
7190                reasons:
7191                
7192                -- Attempting to create "pointer to member of T" when T
7193                   is not a class type.  */
7194             if (complain & tf_error)
7195               error ("creating pointer to member of non-class type %qT", r);
7196             return error_mark_node;
7197           }
7198         if (TREE_CODE (type) == REFERENCE_TYPE)
7199           {
7200             if (complain & tf_error)
7201               error ("creating pointer to member reference type %qT", type);
7202             
7203             return error_mark_node;
7204           }
7205         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
7206         if (TREE_CODE (type) == FUNCTION_TYPE)
7207           {
7208             /* This is really a method type. The cv qualifiers of the
7209                this pointer should _not_ be determined by the cv
7210                qualifiers of the class type.  They should be held
7211                somewhere in the FUNCTION_TYPE, but we don't do that at
7212                the moment.  Consider
7213                   typedef void (Func) () const;
7214
7215                   template <typename T1> void Foo (Func T1::*);
7216
7217                 */
7218             tree method_type;
7219
7220             method_type = build_method_type_directly (TYPE_MAIN_VARIANT (r),
7221                                                       TREE_TYPE (type),
7222                                                       TYPE_ARG_TYPES (type));
7223             return build_ptrmemfunc_type (build_pointer_type (method_type));
7224           }
7225         else
7226           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
7227                                                TYPE_QUALS (t),
7228                                                complain);
7229       }
7230     case FUNCTION_TYPE:
7231     case METHOD_TYPE:
7232       {
7233         tree fntype;
7234         tree specs;
7235         fntype = tsubst_function_type (t, args, complain, in_decl);
7236         if (fntype == error_mark_node)
7237           return error_mark_node;
7238
7239         /* Substitute the exception specification.  */
7240         specs = tsubst_exception_specification (t, args, complain, 
7241                                                 in_decl);
7242         if (specs)
7243           fntype = build_exception_variant (fntype, specs);
7244         return fntype;
7245       }
7246     case ARRAY_TYPE:
7247       {
7248         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
7249         if (domain == error_mark_node)
7250           return error_mark_node;
7251
7252         /* As an optimization, we avoid regenerating the array type if
7253            it will obviously be the same as T.  */
7254         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
7255           return t;
7256
7257         /* These checks should match the ones in grokdeclarator.  
7258
7259            [temp.deduct] 
7260         
7261            The deduction may fail for any of the following reasons: 
7262
7263            -- Attempting to create an array with an element type that
7264               is void, a function type, or a reference type, or [DR337] 
7265               an abstract class type.  */
7266         if (TREE_CODE (type) == VOID_TYPE 
7267             || TREE_CODE (type) == FUNCTION_TYPE
7268             || TREE_CODE (type) == REFERENCE_TYPE)
7269           {
7270             if (complain & tf_error)
7271               error ("creating array of %qT", type);
7272             return error_mark_node;
7273           }
7274         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
7275           {
7276             if (complain & tf_error)
7277               error ("creating array of %qT, which is an abstract class type", 
7278                      type);
7279             return error_mark_node;         
7280           }
7281
7282         r = build_cplus_array_type (type, domain);
7283         return r;
7284       }
7285
7286     case PLUS_EXPR:
7287     case MINUS_EXPR:
7288       {
7289         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7290         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7291
7292         if (e1 == error_mark_node || e2 == error_mark_node)
7293           return error_mark_node;
7294
7295         return fold (build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2));
7296       }
7297
7298     case NEGATE_EXPR:
7299     case NOP_EXPR:
7300       {
7301         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7302         if (e == error_mark_node)
7303           return error_mark_node;
7304
7305         return fold (build1 (TREE_CODE (t), TREE_TYPE (t), e));
7306       }
7307
7308     case TYPENAME_TYPE:
7309       {
7310         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7311                                      in_decl, /*entering_scope=*/1);
7312         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
7313                               complain, in_decl); 
7314
7315         if (ctx == error_mark_node || f == error_mark_node)
7316           return error_mark_node;
7317
7318         if (!IS_AGGR_TYPE (ctx))
7319           {
7320             if (complain & tf_error)
7321               error ("%qT is not a class, struct, or union type", ctx);
7322             return error_mark_node;
7323           }
7324         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7325           {
7326             /* Normally, make_typename_type does not require that the CTX
7327                have complete type in order to allow things like:
7328              
7329                  template <class T> struct S { typename S<T>::X Y; };
7330
7331                But, such constructs have already been resolved by this
7332                point, so here CTX really should have complete type, unless
7333                it's a partial instantiation.  */
7334             ctx = complete_type (ctx);
7335             if (!COMPLETE_TYPE_P (ctx))
7336               {
7337                 if (complain & tf_error)
7338                   cxx_incomplete_type_error (NULL_TREE, ctx);
7339                 return error_mark_node;
7340               }
7341           }
7342
7343         f = make_typename_type (ctx, f,
7344                                 (complain & tf_error) | tf_keep_type_decl);
7345         if (f == error_mark_node)
7346           return f;
7347         if (TREE_CODE (f) == TYPE_DECL)
7348           {
7349             complain |= tf_ignore_bad_quals;
7350             f = TREE_TYPE (f);
7351           }
7352         
7353         return cp_build_qualified_type_real
7354           (f, cp_type_quals (f) | cp_type_quals (t), complain);
7355       }
7356                
7357     case UNBOUND_CLASS_TEMPLATE:
7358       {
7359         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7360                                      in_decl, /*entering_scope=*/1);
7361         tree name = TYPE_IDENTIFIER (t);
7362         tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
7363
7364         if (ctx == error_mark_node || name == error_mark_node)
7365           return error_mark_node;
7366
7367         if (parm_list)
7368           parm_list = tsubst_template_parms (parm_list, args, complain);
7369         return make_unbound_class_template (ctx, name, parm_list, complain);
7370       }
7371
7372     case INDIRECT_REF:
7373     case ADDR_EXPR:
7374     case CALL_EXPR:
7375       gcc_unreachable ();
7376
7377     case ARRAY_REF:
7378       {
7379         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7380         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7381         if (e1 == error_mark_node || e2 == error_mark_node)
7382           return error_mark_node;
7383
7384         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
7385       }
7386
7387     case SCOPE_REF:
7388       {
7389         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7390         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7391         if (e1 == error_mark_node || e2 == error_mark_node)
7392           return error_mark_node;
7393
7394         return build_nt (TREE_CODE (t), e1, e2);
7395       }
7396
7397     case TYPEOF_TYPE:
7398       {
7399         tree type;
7400
7401         type = finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
7402                                            complain, in_decl));
7403         return cp_build_qualified_type_real (type,
7404                                              cp_type_quals (t)
7405                                              | cp_type_quals (type),
7406                                              complain);
7407       }
7408
7409     default:
7410       sorry ("use of %qs in template",
7411              tree_code_name [(int) TREE_CODE (t)]);
7412       return error_mark_node;
7413     }
7414 }
7415
7416 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
7417    type of the expression on the left-hand side of the "." or "->"
7418    operator.  */
7419
7420 static tree
7421 tsubst_baselink (tree baselink, tree object_type,
7422                  tree args, tsubst_flags_t complain, tree in_decl)
7423 {
7424     tree name;
7425     tree qualifying_scope;
7426     tree fns;
7427     tree template_args = 0;
7428     bool template_id_p = false;
7429
7430     /* A baselink indicates a function from a base class.  The
7431        BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7432        non-dependent types; otherwise, the lookup could not have
7433        succeeded.  However, they may indicate bases of the template
7434        class, rather than the instantiated class.  
7435
7436        In addition, lookups that were not ambiguous before may be
7437        ambiguous now.  Therefore, we perform the lookup again.  */
7438     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7439     fns = BASELINK_FUNCTIONS (baselink);
7440     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7441       {
7442         template_id_p = true;
7443         template_args = TREE_OPERAND (fns, 1);
7444         fns = TREE_OPERAND (fns, 0);
7445         if (template_args)
7446           template_args = tsubst_template_args (template_args, args,
7447                                                 complain, in_decl);
7448       }
7449     name = DECL_NAME (get_first_fn (fns));
7450     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7451     
7452     /* If lookup found a single function, mark it as used at this
7453        point.  (If it lookup found multiple functions the one selected
7454        later by overload resolution will be marked as used at that
7455        point.)  */
7456     if (BASELINK_P (baselink))
7457       fns = BASELINK_FUNCTIONS (baselink);
7458     if (!template_id_p && !really_overloaded_fn (fns))
7459       mark_used (OVL_CURRENT (fns));
7460
7461     /* Add back the template arguments, if present.  */
7462     if (BASELINK_P (baselink) && template_id_p)
7463       BASELINK_FUNCTIONS (baselink) 
7464         = build_nt (TEMPLATE_ID_EXPR,
7465                     BASELINK_FUNCTIONS (baselink),
7466                     template_args);
7467
7468     if (!object_type)
7469       object_type = current_class_type;
7470     return adjust_result_of_qualified_name_lookup (baselink, 
7471                                                    qualifying_scope,
7472                                                    object_type);
7473 }
7474
7475 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
7476    true if the qualified-id will be a postfix-expression in-and-of
7477    itself; false if more of the postfix-expression follows the
7478    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
7479    of "&".  */
7480
7481 static tree
7482 tsubst_qualified_id (tree qualified_id, tree args, 
7483                      tsubst_flags_t complain, tree in_decl,
7484                      bool done, bool address_p)
7485 {
7486   tree expr;
7487   tree scope;
7488   tree name;
7489   bool is_template;
7490   tree template_args;
7491
7492   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
7493
7494   /* Figure out what name to look up.  */
7495   name = TREE_OPERAND (qualified_id, 1);
7496   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7497     {
7498       is_template = true;
7499       template_args = TREE_OPERAND (name, 1);
7500       if (template_args)
7501         template_args = tsubst_template_args (template_args, args,
7502                                               complain, in_decl);
7503       name = TREE_OPERAND (name, 0);
7504     }
7505   else
7506     {
7507       is_template = false;
7508       template_args = NULL_TREE;
7509     }
7510
7511   /* Substitute into the qualifying scope.  When there are no ARGS, we
7512      are just trying to simplify a non-dependent expression.  In that
7513      case the qualifying scope may be dependent, and, in any case,
7514      substituting will not help.  */
7515   scope = TREE_OPERAND (qualified_id, 0);
7516   if (args)
7517     {
7518       scope = tsubst (scope, args, complain, in_decl);
7519       expr = tsubst_copy (name, args, complain, in_decl);
7520     }
7521   else
7522     expr = name;
7523
7524   if (dependent_type_p (scope))
7525     return build_nt (SCOPE_REF, scope, expr);
7526   
7527   if (!BASELINK_P (name) && !DECL_P (expr))
7528     {
7529       expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7530       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7531                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7532         {
7533           if (complain & tf_error)
7534             {
7535               error ("dependent-name %qE is parsed as a non-type, but "
7536                      "instantiation yields a type", qualified_id);
7537               inform ("say %<typename %E%> if a type is meant", qualified_id);
7538             }
7539           return error_mark_node;
7540         }
7541     }
7542   
7543   if (DECL_P (expr))
7544     {
7545       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7546                                            scope);
7547       /* Remember that there was a reference to this entity.  */
7548       mark_used (expr);
7549     }
7550
7551   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
7552     {
7553       if (complain & tf_error)
7554         qualified_name_lookup_error (scope, 
7555                                      TREE_OPERAND (qualified_id, 1),
7556                                      expr);
7557       return error_mark_node;
7558     }
7559
7560   if (is_template)
7561     expr = lookup_template_function (expr, template_args);
7562
7563   if (expr == error_mark_node && complain & tf_error)
7564     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
7565                                  expr);
7566   else if (TYPE_P (scope))
7567     {
7568       expr = (adjust_result_of_qualified_name_lookup 
7569               (expr, scope, current_class_type));
7570       expr = finish_qualified_id_expr (scope, expr, done, address_p);
7571     }
7572
7573   return expr;
7574 }
7575
7576 /* Like tsubst, but deals with expressions.  This function just replaces
7577    template parms; to finish processing the resultant expression, use
7578    tsubst_expr.  */
7579
7580 static tree
7581 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7582 {
7583   enum tree_code code;
7584   tree r;
7585
7586   if (t == NULL_TREE || t == error_mark_node)
7587     return t;
7588
7589   code = TREE_CODE (t);
7590
7591   switch (code)
7592     {
7593     case PARM_DECL:
7594       r = retrieve_local_specialization (t);
7595       gcc_assert (r != NULL);
7596       mark_used (r);
7597       return r;
7598
7599     case CONST_DECL:
7600       {
7601         tree enum_type;
7602         tree v;
7603
7604         if (DECL_TEMPLATE_PARM_P (t))
7605           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7606         /* There is no need to substitute into namespace-scope
7607            enumerators.  */
7608         if (DECL_NAMESPACE_SCOPE_P (t))
7609           return t;
7610         /* If ARGS is NULL, then T is known to be non-dependent.  */
7611         if (args == NULL_TREE)
7612           return decl_constant_value (t);
7613
7614         /* Unfortunately, we cannot just call lookup_name here.
7615            Consider:
7616            
7617              template <int I> int f() {
7618              enum E { a = I };
7619              struct S { void g() { E e = a; } };
7620              };
7621            
7622            When we instantiate f<7>::S::g(), say, lookup_name is not
7623            clever enough to find f<7>::a.  */
7624         enum_type 
7625           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl, 
7626                               /*entering_scope=*/0);
7627
7628         for (v = TYPE_VALUES (enum_type); 
7629              v != NULL_TREE; 
7630              v = TREE_CHAIN (v))
7631           if (TREE_PURPOSE (v) == DECL_NAME (t))
7632             return TREE_VALUE (v);
7633
7634           /* We didn't find the name.  That should never happen; if
7635              name-lookup found it during preliminary parsing, we
7636              should find it again here during instantiation.  */
7637         gcc_unreachable ();
7638       }
7639       return t;
7640
7641     case FIELD_DECL:
7642       if (DECL_CONTEXT (t))
7643         {
7644           tree ctx;
7645
7646           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7647                                   /*entering_scope=*/1);
7648           if (ctx != DECL_CONTEXT (t))
7649             return lookup_field (ctx, DECL_NAME (t), 0, false);
7650         }
7651       
7652       return t;
7653
7654     case VAR_DECL:
7655     case FUNCTION_DECL:
7656       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7657           || local_variable_p (t))
7658         t = tsubst (t, args, complain, in_decl);
7659       mark_used (t);
7660       return t;
7661
7662     case BASELINK:
7663       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7664
7665     case TEMPLATE_DECL:
7666       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7667         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)), 
7668                        args, complain, in_decl);
7669       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
7670         return tsubst (t, args, complain, in_decl);
7671       else if (DECL_CLASS_SCOPE_P (t)
7672                && uses_template_parms (DECL_CONTEXT (t)))
7673         {
7674           /* Template template argument like the following example need
7675              special treatment:
7676
7677                template <template <class> class TT> struct C {};
7678                template <class T> struct D {
7679                  template <class U> struct E {};
7680                  C<E> c;                                // #1
7681                };
7682                D<int> d;                                // #2
7683
7684              We are processing the template argument `E' in #1 for
7685              the template instantiation #2.  Originally, `E' is a
7686              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
7687              have to substitute this with one having context `D<int>'.  */
7688
7689           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7690           return lookup_field (context, DECL_NAME(t), 0, false);
7691         }
7692       else
7693         /* Ordinary template template argument.  */
7694         return t;
7695
7696     case CAST_EXPR:
7697     case REINTERPRET_CAST_EXPR:
7698     case CONST_CAST_EXPR:
7699     case STATIC_CAST_EXPR:
7700     case DYNAMIC_CAST_EXPR:
7701     case NOP_EXPR:
7702       return build1
7703         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7704          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7705
7706     case INDIRECT_REF:
7707     case NEGATE_EXPR:
7708     case TRUTH_NOT_EXPR:
7709     case BIT_NOT_EXPR:
7710     case ADDR_EXPR:
7711     case CONVERT_EXPR:      /* Unary + */
7712     case SIZEOF_EXPR:
7713     case ALIGNOF_EXPR:
7714     case ARROW_EXPR:
7715     case THROW_EXPR:
7716     case TYPEID_EXPR:
7717     case REALPART_EXPR:
7718     case IMAGPART_EXPR:
7719       return build1
7720         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7721          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7722
7723     case COMPONENT_REF:
7724       {
7725         tree object;
7726         tree name;
7727
7728         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7729         name = TREE_OPERAND (t, 1);
7730         if (TREE_CODE (name) == BIT_NOT_EXPR) 
7731           {
7732             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7733                                 complain, in_decl);
7734             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7735           }
7736         else if (TREE_CODE (name) == SCOPE_REF
7737                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7738           {
7739             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7740                                      complain, in_decl);
7741             name = TREE_OPERAND (name, 1);
7742             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7743                                 complain, in_decl);
7744             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7745             name = build_nt (SCOPE_REF, base, name);
7746           }
7747         else if (TREE_CODE (name) == BASELINK)
7748           name = tsubst_baselink (name, 
7749                                   non_reference (TREE_TYPE (object)), 
7750                                   args, complain, 
7751                                   in_decl);
7752         else
7753           name = tsubst_copy (name, args, complain, in_decl);
7754         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
7755       }
7756
7757     case PLUS_EXPR:
7758     case MINUS_EXPR:
7759     case MULT_EXPR:
7760     case TRUNC_DIV_EXPR:
7761     case CEIL_DIV_EXPR:
7762     case FLOOR_DIV_EXPR:
7763     case ROUND_DIV_EXPR:
7764     case EXACT_DIV_EXPR:
7765     case BIT_AND_EXPR:
7766     case BIT_IOR_EXPR:
7767     case BIT_XOR_EXPR:
7768     case TRUNC_MOD_EXPR:
7769     case FLOOR_MOD_EXPR:
7770     case TRUTH_ANDIF_EXPR:
7771     case TRUTH_ORIF_EXPR:
7772     case TRUTH_AND_EXPR:
7773     case TRUTH_OR_EXPR:
7774     case RSHIFT_EXPR:
7775     case LSHIFT_EXPR:
7776     case RROTATE_EXPR:
7777     case LROTATE_EXPR:
7778     case EQ_EXPR:
7779     case NE_EXPR:
7780     case MAX_EXPR:
7781     case MIN_EXPR:
7782     case LE_EXPR:
7783     case GE_EXPR:
7784     case LT_EXPR:
7785     case GT_EXPR:
7786     case ARRAY_REF:
7787     case COMPOUND_EXPR:
7788     case SCOPE_REF:
7789     case DOTSTAR_EXPR:
7790     case MEMBER_REF:
7791     case PREDECREMENT_EXPR:
7792     case PREINCREMENT_EXPR:
7793     case POSTDECREMENT_EXPR:
7794     case POSTINCREMENT_EXPR:
7795       return build_nt
7796         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7797          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7798
7799     case CALL_EXPR:
7800       return build_nt (code, 
7801                        tsubst_copy (TREE_OPERAND (t, 0), args,
7802                                     complain, in_decl),
7803                        tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7804                                     in_decl),
7805                        NULL_TREE);
7806
7807     case COND_EXPR:
7808     case MODOP_EXPR:
7809     case PSEUDO_DTOR_EXPR:
7810       {
7811         r = build_nt
7812           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7813            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7814            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7815         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
7816         return r;
7817       }
7818
7819     case NEW_EXPR:
7820       {
7821         r = build_nt
7822         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7823          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7824          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7825         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7826         return r;
7827       }
7828
7829     case DELETE_EXPR:
7830       {
7831         r = build_nt
7832         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7833          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7834         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7835         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7836         return r;
7837       }
7838
7839     case TEMPLATE_ID_EXPR:
7840       {
7841         /* Substituted template arguments */
7842         tree fn = TREE_OPERAND (t, 0);
7843         tree targs = TREE_OPERAND (t, 1);
7844
7845         fn = tsubst_copy (fn, args, complain, in_decl);
7846         if (targs)
7847           targs = tsubst_template_args (targs, args, complain, in_decl);
7848         
7849         return lookup_template_function (fn, targs);
7850       }
7851
7852     case TREE_LIST:
7853       {
7854         tree purpose, value, chain;
7855
7856         if (t == void_list_node)
7857           return t;
7858
7859         purpose = TREE_PURPOSE (t);
7860         if (purpose)
7861           purpose = tsubst_copy (purpose, args, complain, in_decl);
7862         value = TREE_VALUE (t);
7863         if (value)
7864           value = tsubst_copy (value, args, complain, in_decl);
7865         chain = TREE_CHAIN (t);
7866         if (chain && chain != void_type_node)
7867           chain = tsubst_copy (chain, args, complain, in_decl);
7868         if (purpose == TREE_PURPOSE (t)
7869             && value == TREE_VALUE (t)
7870             && chain == TREE_CHAIN (t))
7871           return t;
7872         return tree_cons (purpose, value, chain);
7873       }
7874
7875     case RECORD_TYPE:
7876     case UNION_TYPE:
7877     case ENUMERAL_TYPE:
7878     case INTEGER_TYPE:
7879     case TEMPLATE_TYPE_PARM:
7880     case TEMPLATE_TEMPLATE_PARM:
7881     case BOUND_TEMPLATE_TEMPLATE_PARM:
7882     case TEMPLATE_PARM_INDEX:
7883     case POINTER_TYPE:
7884     case REFERENCE_TYPE:
7885     case OFFSET_TYPE:
7886     case FUNCTION_TYPE:
7887     case METHOD_TYPE:
7888     case ARRAY_TYPE:
7889     case TYPENAME_TYPE:
7890     case UNBOUND_CLASS_TEMPLATE:
7891     case TYPEOF_TYPE:
7892     case TYPE_DECL:
7893       return tsubst (t, args, complain, in_decl);
7894
7895     case IDENTIFIER_NODE:
7896       if (IDENTIFIER_TYPENAME_P (t))
7897         {
7898           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7899           return mangle_conv_op_name_for_type (new_type);
7900         }
7901       else
7902         return t;
7903
7904     case CONSTRUCTOR:
7905       {
7906         r = build_constructor
7907           (tsubst (TREE_TYPE (t), args, complain, in_decl), 
7908            tsubst_copy (CONSTRUCTOR_ELTS (t), args, complain, in_decl));
7909         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7910         return r;
7911       }
7912
7913     case VA_ARG_EXPR:
7914       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7915                                           in_decl),
7916                              tsubst (TREE_TYPE (t), args, complain, in_decl));
7917
7918     case CLEANUP_POINT_EXPR:
7919       /* We shouldn't have built any of these during initial template
7920          generation.  Instead, they should be built during instantiation
7921          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
7922       gcc_unreachable ();
7923
7924     default:
7925       return t;
7926     }
7927 }
7928
7929 /* Like tsubst_copy for expressions, etc. but also does semantic
7930    processing.  */
7931
7932 static tree
7933 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7934 {
7935   tree stmt, tmp;
7936
7937   if (t == NULL_TREE || t == error_mark_node)
7938     return t;
7939
7940   if (EXPR_HAS_LOCATION (t))
7941     input_location = EXPR_LOCATION (t);
7942   if (STATEMENT_CODE_P (TREE_CODE (t)))
7943     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
7944
7945   switch (TREE_CODE (t))
7946     {
7947     case STATEMENT_LIST:
7948       {
7949         tree_stmt_iterator i;
7950         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
7951           tsubst_expr (tsi_stmt (i), args, complain, in_decl);
7952         break;
7953       }
7954
7955     case CTOR_INITIALIZER:
7956       finish_mem_initializers (tsubst_initializer_list 
7957                                (TREE_OPERAND (t, 0), args));
7958       break;
7959
7960     case RETURN_EXPR:
7961       finish_return_stmt (tsubst_expr (TREE_OPERAND (t, 0),
7962                                        args, complain, in_decl));
7963       break;
7964
7965     case EXPR_STMT:
7966       tmp = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
7967       if (EXPR_STMT_STMT_EXPR_RESULT (t))
7968         finish_stmt_expr_expr (tmp, cur_stmt_expr);
7969       else
7970         finish_expr_stmt (tmp);
7971       break;
7972
7973     case USING_STMT:
7974       do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
7975                                        args, complain, in_decl));
7976       break;
7977       
7978     case DECL_EXPR:
7979       {
7980         tree decl;
7981         tree init;
7982
7983         decl = DECL_EXPR_DECL (t);
7984         if (TREE_CODE (decl) == LABEL_DECL)
7985           finish_label_decl (DECL_NAME (decl));
7986         else if (TREE_CODE (decl) == USING_DECL)
7987           {
7988             tree scope = DECL_INITIAL (decl);
7989             tree name = DECL_NAME (decl);
7990             tree decl;
7991             
7992             scope = tsubst_expr (scope, args, complain, in_decl);
7993             decl = lookup_qualified_name (scope, name,
7994                                           /*is_type_p=*/false,
7995                                           /*complain=*/false);
7996             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
7997               qualified_name_lookup_error (scope, name, decl);
7998             else
7999               do_local_using_decl (decl, scope, name);
8000           }
8001         else
8002           {
8003             init = DECL_INITIAL (decl);
8004             decl = tsubst (decl, args, complain, in_decl);
8005             if (decl != error_mark_node)
8006               {
8007                 if (init)
8008                   DECL_INITIAL (decl) = error_mark_node;
8009                 /* By marking the declaration as instantiated, we avoid
8010                    trying to instantiate it.  Since instantiate_decl can't
8011                    handle local variables, and since we've already done
8012                    all that needs to be done, that's the right thing to
8013                    do.  */
8014                 if (TREE_CODE (decl) == VAR_DECL)
8015                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8016                 if (TREE_CODE (decl) == VAR_DECL
8017                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
8018                   /* Anonymous aggregates are a special case.  */
8019                   finish_anon_union (decl);
8020                 else 
8021                   {
8022                     maybe_push_decl (decl);
8023                     if (TREE_CODE (decl) == VAR_DECL
8024                         && DECL_PRETTY_FUNCTION_P (decl))
8025                       {
8026                         /* For __PRETTY_FUNCTION__ we have to adjust the
8027                            initializer.  */
8028                         const char *const name
8029                           = cxx_printable_name (current_function_decl, 2);
8030                         init = cp_fname_init (name, &TREE_TYPE (decl));
8031                       }
8032                     else
8033                       init = tsubst_expr (init, args, complain, in_decl);
8034                     cp_finish_decl (decl, init, NULL_TREE, 0);
8035                   }
8036               }
8037           }
8038
8039         /* A DECL_EXPR can also be used as an expression, in the condition
8040            clause of an if/for/while construct.  */
8041         return decl;
8042       }
8043
8044     case FOR_STMT:
8045       stmt = begin_for_stmt ();
8046       tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
8047       finish_for_init_stmt (stmt);
8048       tmp = tsubst_expr (FOR_COND (t), args, complain, in_decl);
8049       finish_for_cond (tmp, stmt);
8050       tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
8051       finish_for_expr (tmp, stmt);
8052       tsubst_expr (FOR_BODY (t), args, complain, in_decl);
8053       finish_for_stmt (stmt);
8054       break;
8055
8056     case WHILE_STMT:
8057       stmt = begin_while_stmt ();
8058       tmp = tsubst_expr (WHILE_COND (t), args, complain, in_decl);
8059       finish_while_stmt_cond (tmp, stmt);
8060       tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
8061       finish_while_stmt (stmt);
8062       break;
8063
8064     case DO_STMT:
8065       stmt = begin_do_stmt ();
8066       tsubst_expr (DO_BODY (t), args, complain, in_decl);
8067       finish_do_body (stmt);
8068       tmp = tsubst_expr (DO_COND (t), args, complain, in_decl);
8069       finish_do_stmt (tmp, stmt);
8070       break;
8071
8072     case IF_STMT:
8073       stmt = begin_if_stmt ();
8074       tmp = tsubst_expr (IF_COND (t), args, complain, in_decl);
8075       finish_if_stmt_cond (tmp, stmt);
8076       tsubst_expr (THEN_CLAUSE (t), args, complain, in_decl);
8077       finish_then_clause (stmt);
8078
8079       if (ELSE_CLAUSE (t))
8080         {
8081           begin_else_clause (stmt);
8082           tsubst_expr (ELSE_CLAUSE (t), args, complain, in_decl);
8083           finish_else_clause (stmt);
8084         }
8085
8086       finish_if_stmt (stmt);
8087       break;
8088
8089     case BIND_EXPR:
8090       if (BIND_EXPR_BODY_BLOCK (t))
8091         stmt = begin_function_body ();
8092       else
8093         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
8094                                     ? BCS_TRY_BLOCK : 0);
8095
8096       tsubst_expr (BIND_EXPR_BODY (t), args, complain, in_decl);
8097
8098       if (BIND_EXPR_BODY_BLOCK (t))
8099         finish_function_body (stmt);
8100       else
8101         finish_compound_stmt (stmt);
8102       break;
8103
8104     case BREAK_STMT:
8105       finish_break_stmt ();
8106       break;
8107
8108     case CONTINUE_STMT:
8109       finish_continue_stmt ();
8110       break;
8111
8112     case SWITCH_STMT:
8113       stmt = begin_switch_stmt ();
8114       tmp = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
8115       finish_switch_cond (tmp, stmt);
8116       tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
8117       finish_switch_stmt (stmt);
8118       break;
8119
8120     case CASE_LABEL_EXPR:
8121       finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
8122                          tsubst_expr (CASE_HIGH (t), args, complain,
8123                                       in_decl));
8124       break;
8125
8126     case LABEL_EXPR:
8127       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
8128       break;
8129
8130     case GOTO_EXPR:
8131       tmp = GOTO_DESTINATION (t);
8132       if (TREE_CODE (tmp) != LABEL_DECL)
8133         /* Computed goto's must be tsubst'd into.  On the other hand,
8134            non-computed gotos must not be; the identifier in question
8135            will have no binding.  */
8136         tmp = tsubst_expr (tmp, args, complain, in_decl);
8137       else
8138         tmp = DECL_NAME (tmp);
8139       finish_goto_stmt (tmp);
8140       break;
8141
8142     case ASM_EXPR:
8143       tmp = finish_asm_stmt
8144         (ASM_VOLATILE_P (t),
8145          tsubst_expr (ASM_STRING (t), args, complain, in_decl),
8146          tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
8147          tsubst_expr (ASM_INPUTS (t), args, complain, in_decl), 
8148          tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
8149       {
8150         tree asm_expr = tmp;
8151         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
8152           asm_expr = TREE_OPERAND (asm_expr, 0);
8153         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
8154       }
8155       break;
8156
8157     case TRY_BLOCK:
8158       if (CLEANUP_P (t))
8159         {
8160           stmt = begin_try_block ();
8161           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8162           finish_cleanup_try_block (stmt);
8163           finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
8164                                        complain, in_decl),
8165                           stmt);
8166         }
8167       else
8168         {
8169           if (FN_TRY_BLOCK_P (t))
8170             stmt = begin_function_try_block ();
8171           else
8172             stmt = begin_try_block ();
8173
8174           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8175
8176           if (FN_TRY_BLOCK_P (t))
8177             finish_function_try_block (stmt);
8178           else
8179             finish_try_block (stmt);
8180
8181           tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
8182           if (FN_TRY_BLOCK_P (t))
8183             finish_function_handler_sequence (stmt);
8184           else
8185             finish_handler_sequence (stmt);
8186         }
8187       break;
8188       
8189     case HANDLER:
8190       {
8191         tree decl;
8192
8193         stmt = begin_handler ();
8194         if (HANDLER_PARMS (t))
8195           {
8196             decl = HANDLER_PARMS (t);
8197             decl = tsubst (decl, args, complain, in_decl);
8198             /* Prevent instantiate_decl from trying to instantiate
8199                this variable.  We've already done all that needs to be
8200                done.  */
8201             DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8202           }
8203         else
8204           decl = NULL_TREE;
8205         finish_handler_parms (decl, stmt);
8206         tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
8207         finish_handler (stmt);
8208       }
8209       break;
8210
8211     case TAG_DEFN:
8212       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
8213       break;
8214
8215     default:
8216       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
8217       
8218       return tsubst_copy_and_build (t, args, complain, in_decl,
8219                                     /*function_p=*/false);
8220     }
8221
8222   return NULL_TREE;
8223 }
8224
8225 /* T is a postfix-expression that is not being used in a function
8226    call.  Return the substituted version of T.  */
8227
8228 static tree
8229 tsubst_non_call_postfix_expression (tree t, tree args, 
8230                                     tsubst_flags_t complain,
8231                                     tree in_decl)
8232 {
8233   if (TREE_CODE (t) == SCOPE_REF)
8234     t = tsubst_qualified_id (t, args, complain, in_decl,
8235                              /*done=*/false, /*address_p=*/false);
8236   else
8237     t = tsubst_copy_and_build (t, args, complain, in_decl,
8238                                /*function_p=*/false);
8239
8240   return t;
8241 }
8242
8243 /* Like tsubst but deals with expressions and performs semantic
8244    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
8245
8246 tree
8247 tsubst_copy_and_build (tree t, 
8248                        tree args, 
8249                        tsubst_flags_t complain, 
8250                        tree in_decl,
8251                        bool function_p)
8252 {
8253 #define RECUR(NODE) \
8254   tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8255
8256   tree op1;
8257
8258   if (t == NULL_TREE || t == error_mark_node)
8259     return t;
8260
8261   switch (TREE_CODE (t))
8262     {
8263     case USING_DECL:
8264       t = DECL_NAME (t);
8265       /* Fall through.  */
8266     case IDENTIFIER_NODE:
8267       {
8268         tree decl;
8269         cp_id_kind idk;
8270         tree qualifying_class;
8271         bool non_integral_constant_expression_p;
8272         const char *error_msg;
8273
8274         if (IDENTIFIER_TYPENAME_P (t))
8275           {
8276             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8277             t = mangle_conv_op_name_for_type (new_type);
8278           }
8279
8280         /* Look up the name.  */
8281         decl = lookup_name (t, 0);
8282
8283         /* By convention, expressions use ERROR_MARK_NODE to indicate
8284            failure, not NULL_TREE.  */
8285         if (decl == NULL_TREE)
8286           decl = error_mark_node;
8287
8288         decl = finish_id_expression (t, decl, NULL_TREE,
8289                                      &idk,
8290                                      &qualifying_class,
8291                                      /*integral_constant_expression_p=*/false,
8292                                      /*allow_non_integral_constant_expression_p=*/false,
8293                                      &non_integral_constant_expression_p,
8294                                      &error_msg);
8295         if (error_msg)
8296           error (error_msg);
8297         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8298           decl = unqualified_name_lookup_error (decl);
8299         return decl;
8300       }
8301
8302     case TEMPLATE_ID_EXPR:
8303       {
8304         tree object;
8305         tree template = RECUR (TREE_OPERAND (t, 0));
8306         tree targs = TREE_OPERAND (t, 1);
8307
8308         if (targs)
8309           targs = tsubst_template_args (targs, args, complain, in_decl);
8310         
8311         if (TREE_CODE (template) == COMPONENT_REF)
8312           {
8313             object = TREE_OPERAND (template, 0);
8314             template = TREE_OPERAND (template, 1);
8315           }
8316         else
8317           object = NULL_TREE;
8318         template = lookup_template_function (template, targs);
8319         
8320         if (object)
8321           return build3 (COMPONENT_REF, TREE_TYPE (template), 
8322                          object, template, NULL_TREE);
8323         else
8324           return template;
8325       }
8326
8327     case INDIRECT_REF:
8328       return build_x_indirect_ref (RECUR (TREE_OPERAND (t, 0)), "unary *");
8329
8330     case NOP_EXPR:
8331       return build_nop
8332         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8333          RECUR (TREE_OPERAND (t, 0)));
8334
8335     case CAST_EXPR:
8336       return build_functional_cast
8337         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8338          RECUR (TREE_OPERAND (t, 0)));
8339
8340     case REINTERPRET_CAST_EXPR:
8341       return build_reinterpret_cast
8342         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8343          RECUR (TREE_OPERAND (t, 0)));
8344
8345     case CONST_CAST_EXPR:
8346       return build_const_cast
8347         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8348          RECUR (TREE_OPERAND (t, 0)));
8349
8350     case DYNAMIC_CAST_EXPR:
8351       return build_dynamic_cast
8352         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8353          RECUR (TREE_OPERAND (t, 0)));
8354
8355     case STATIC_CAST_EXPR:
8356       return build_static_cast
8357         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8358          RECUR (TREE_OPERAND (t, 0)));
8359
8360     case POSTDECREMENT_EXPR:
8361     case POSTINCREMENT_EXPR:
8362       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8363                                                 args, complain, in_decl);
8364       return build_x_unary_op (TREE_CODE (t), op1);
8365
8366     case PREDECREMENT_EXPR:
8367     case PREINCREMENT_EXPR:
8368     case NEGATE_EXPR:
8369     case BIT_NOT_EXPR:
8370     case ABS_EXPR:
8371     case TRUTH_NOT_EXPR:
8372     case CONVERT_EXPR:  /* Unary + */
8373     case REALPART_EXPR:
8374     case IMAGPART_EXPR:
8375       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8376
8377     case ADDR_EXPR:
8378       op1 = TREE_OPERAND (t, 0);
8379       if (TREE_CODE (op1) == SCOPE_REF)
8380         op1 = tsubst_qualified_id (op1, args, complain, in_decl, 
8381                                    /*done=*/true, /*address_p=*/true);
8382       else
8383         op1 = tsubst_non_call_postfix_expression (op1, args, complain, 
8384                                                   in_decl);
8385       if (TREE_CODE (op1) == LABEL_DECL)
8386         return finish_label_address_expr (DECL_NAME (op1));
8387       return build_x_unary_op (ADDR_EXPR, op1);
8388
8389     case PLUS_EXPR:
8390     case MINUS_EXPR:
8391     case MULT_EXPR:
8392     case TRUNC_DIV_EXPR:
8393     case CEIL_DIV_EXPR:
8394     case FLOOR_DIV_EXPR:
8395     case ROUND_DIV_EXPR:
8396     case EXACT_DIV_EXPR:
8397     case BIT_AND_EXPR:
8398     case BIT_IOR_EXPR:
8399     case BIT_XOR_EXPR:
8400     case TRUNC_MOD_EXPR:
8401     case FLOOR_MOD_EXPR:
8402     case TRUTH_ANDIF_EXPR:
8403     case TRUTH_ORIF_EXPR:
8404     case TRUTH_AND_EXPR:
8405     case TRUTH_OR_EXPR:
8406     case RSHIFT_EXPR:
8407     case LSHIFT_EXPR:
8408     case RROTATE_EXPR:
8409     case LROTATE_EXPR:
8410     case EQ_EXPR:
8411     case NE_EXPR:
8412     case MAX_EXPR:
8413     case MIN_EXPR:
8414     case LE_EXPR:
8415     case GE_EXPR:
8416     case LT_EXPR:
8417     case GT_EXPR:
8418     case MEMBER_REF:
8419     case DOTSTAR_EXPR:
8420       return build_x_binary_op
8421         (TREE_CODE (t), 
8422          RECUR (TREE_OPERAND (t, 0)),
8423          RECUR (TREE_OPERAND (t, 1)),
8424          /*overloaded_p=*/NULL);
8425
8426     case SCOPE_REF:
8427       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8428                                   /*address_p=*/false);
8429
8430     case ARRAY_REF:
8431       if (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl)
8432           == NULL_TREE)
8433         /* new-type-id */
8434         return build_nt (ARRAY_REF, NULL_TREE, RECUR (TREE_OPERAND (t, 1)),
8435                          NULL_TREE, NULL_TREE);
8436
8437       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8438                                                 args, complain, in_decl);
8439       /* Remember that there was a reference to this entity.  */
8440       if (DECL_P (op1))
8441         mark_used (op1);
8442       return grok_array_decl (op1, RECUR (TREE_OPERAND (t, 1)));
8443
8444     case SIZEOF_EXPR:
8445     case ALIGNOF_EXPR:
8446       op1 = TREE_OPERAND (t, 0);
8447       if (!args)
8448         {
8449           /* When there are no ARGS, we are trying to evaluate a
8450              non-dependent expression from the parser.  Trying to do
8451              the substitutions may not work.  */
8452           if (!TYPE_P (op1))
8453             op1 = TREE_TYPE (op1);
8454         }
8455       else
8456         {
8457           ++skip_evaluation;
8458           op1 = RECUR (op1);
8459           --skip_evaluation;
8460         }
8461       if (TYPE_P (op1))
8462         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
8463       else
8464         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
8465
8466     case MODOP_EXPR:
8467       {
8468         tree r = build_x_modify_expr
8469           (RECUR (TREE_OPERAND (t, 0)),
8470            TREE_CODE (TREE_OPERAND (t, 1)),
8471            RECUR (TREE_OPERAND (t, 2)));
8472         /* TREE_NO_WARNING must be set if either the expression was
8473            parenthesized or it uses an operator such as >>= rather
8474            than plain assignment.  In the former case, it was already
8475            set and must be copied.  In the latter case,
8476            build_x_modify_expr sets it and it must not be reset
8477            here.  */
8478         if (TREE_NO_WARNING (t))
8479           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
8480         return r;
8481       }
8482
8483     case ARROW_EXPR:
8484       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8485                                                 args, complain, in_decl);
8486       /* Remember that there was a reference to this entity.  */
8487       if (DECL_P (op1))
8488         mark_used (op1);
8489       return build_x_arrow (op1);
8490
8491     case NEW_EXPR:
8492       return build_new
8493         (RECUR (TREE_OPERAND (t, 0)),
8494          RECUR (TREE_OPERAND (t, 1)),
8495          RECUR (TREE_OPERAND (t, 2)),
8496          RECUR (TREE_OPERAND (t, 3)),
8497          NEW_EXPR_USE_GLOBAL (t));
8498
8499     case DELETE_EXPR:
8500      return delete_sanity
8501        (RECUR (TREE_OPERAND (t, 0)),
8502         RECUR (TREE_OPERAND (t, 1)),
8503         DELETE_EXPR_USE_VEC (t),
8504         DELETE_EXPR_USE_GLOBAL (t));
8505
8506     case COMPOUND_EXPR:
8507       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8508                                     RECUR (TREE_OPERAND (t, 1)));
8509
8510     case CALL_EXPR:
8511       {
8512         tree function;
8513         tree call_args;
8514         bool qualified_p;
8515         bool koenig_p;
8516
8517         function = TREE_OPERAND (t, 0);
8518         /* When we parsed the expression,  we determined whether or
8519            not Koenig lookup should be performed.  */
8520         koenig_p = KOENIG_LOOKUP_P (t);
8521         if (TREE_CODE (function) == SCOPE_REF)
8522           {
8523             qualified_p = true;
8524             function = tsubst_qualified_id (function, args, complain, in_decl,
8525                                             /*done=*/false, 
8526                                             /*address_p=*/false);
8527           }
8528         else
8529           {
8530             qualified_p = (TREE_CODE (function) == COMPONENT_REF
8531                            && (TREE_CODE (TREE_OPERAND (function, 1))
8532                                == SCOPE_REF));
8533             function = tsubst_copy_and_build (function, args, complain, 
8534                                               in_decl,
8535                                               !qualified_p);
8536             if (BASELINK_P (function))
8537               qualified_p = true;
8538           }
8539
8540         call_args = RECUR (TREE_OPERAND (t, 1));
8541
8542         /* We do not perform argument-dependent lookup if normal
8543            lookup finds a non-function, in accordance with the
8544            expected resolution of DR 218.  */
8545         if (koenig_p
8546             && (is_overloaded_fn (function)
8547                 || TREE_CODE (function) == IDENTIFIER_NODE))
8548           function = perform_koenig_lookup (function, call_args);
8549
8550         if (TREE_CODE (function) == IDENTIFIER_NODE)
8551           {
8552             unqualified_name_lookup_error (function);
8553             return error_mark_node;
8554           }
8555
8556         /* Remember that there was a reference to this entity.  */
8557         if (DECL_P (function))
8558           mark_used (function);
8559
8560         function = convert_from_reference (function);
8561
8562         if (TREE_CODE (function) == OFFSET_REF)
8563           return build_offset_ref_call_from_tree (function, call_args);
8564         if (TREE_CODE (function) == COMPONENT_REF)
8565           {
8566             if (!BASELINK_P (TREE_OPERAND (function, 1)))
8567               return finish_call_expr (function, call_args,
8568                                        /*disallow_virtual=*/false,
8569                                        /*koenig_p=*/false);
8570             else
8571               return (build_new_method_call 
8572                       (TREE_OPERAND (function, 0),
8573                        TREE_OPERAND (function, 1),
8574                        call_args, NULL_TREE, 
8575                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8576           }
8577         return finish_call_expr (function, call_args, 
8578                                  /*disallow_virtual=*/qualified_p,
8579                                  koenig_p);
8580       }
8581
8582     case COND_EXPR:
8583       return build_x_conditional_expr
8584         (RECUR (TREE_OPERAND (t, 0)),
8585          RECUR (TREE_OPERAND (t, 1)),
8586          RECUR (TREE_OPERAND (t, 2)));
8587
8588     case PSEUDO_DTOR_EXPR:
8589       return finish_pseudo_destructor_expr 
8590         (RECUR (TREE_OPERAND (t, 0)),
8591          RECUR (TREE_OPERAND (t, 1)),
8592          RECUR (TREE_OPERAND (t, 2)));
8593
8594     case TREE_LIST:
8595       {
8596         tree purpose, value, chain;
8597
8598         if (t == void_list_node)
8599           return t;
8600
8601         purpose = TREE_PURPOSE (t);
8602         if (purpose)
8603           purpose = RECUR (purpose);
8604         value = TREE_VALUE (t);
8605         if (value)
8606           value = RECUR (value);
8607         chain = TREE_CHAIN (t);
8608         if (chain && chain != void_type_node)
8609           chain = RECUR (chain);
8610         if (purpose == TREE_PURPOSE (t)
8611             && value == TREE_VALUE (t)
8612             && chain == TREE_CHAIN (t))
8613           return t;
8614         return tree_cons (purpose, value, chain);
8615       }
8616
8617     case COMPONENT_REF:
8618       {
8619         tree object;
8620         tree member;
8621
8622         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8623                                                      args, complain, in_decl);
8624         /* Remember that there was a reference to this entity.  */
8625         if (DECL_P (object))
8626           mark_used (object);
8627
8628         member = TREE_OPERAND (t, 1);
8629         if (BASELINK_P (member))
8630           member = tsubst_baselink (member, 
8631                                     non_reference (TREE_TYPE (object)),
8632                                     args, complain, in_decl);
8633         else
8634           member = tsubst_copy (member, args, complain, in_decl);
8635
8636         if (!CLASS_TYPE_P (TREE_TYPE (object)))
8637           {
8638             if (TREE_CODE (member) == BIT_NOT_EXPR)
8639               return finish_pseudo_destructor_expr (object, 
8640                                                     NULL_TREE,
8641                                                     TREE_TYPE (object));
8642             else if (TREE_CODE (member) == SCOPE_REF
8643                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8644               return finish_pseudo_destructor_expr (object, 
8645                                                     object,
8646                                                     TREE_TYPE (object));
8647           }
8648         else if (TREE_CODE (member) == SCOPE_REF
8649                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8650           {
8651             tree tmpl;
8652             tree args;
8653         
8654             /* Lookup the template functions now that we know what the
8655                scope is.  */
8656             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8657             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8658             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl, 
8659                                             /*is_type_p=*/false,
8660                                             /*complain=*/false);
8661             if (BASELINK_P (member))
8662               BASELINK_FUNCTIONS (member) 
8663                 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8664                             args);
8665             else
8666               {
8667                 qualified_name_lookup_error (TREE_TYPE (object), tmpl,
8668                                              member);
8669                 return error_mark_node;
8670               }
8671           }
8672         else if (TREE_CODE (member) == SCOPE_REF
8673                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
8674                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
8675           {
8676             if (complain & tf_error)
8677               {
8678                 if (TYPE_P (TREE_OPERAND (member, 0)))
8679                   error ("%qT is not a class or namespace", 
8680                          TREE_OPERAND (member, 0));
8681                 else
8682                   error ("%qD is not a class or namespace", 
8683                          TREE_OPERAND (member, 0));
8684               }
8685             return error_mark_node;
8686           }
8687         else if (TREE_CODE (member) == FIELD_DECL)
8688           return finish_non_static_data_member (member, object, NULL_TREE);
8689
8690         return finish_class_member_access_expr (object, member);
8691       }
8692
8693     case THROW_EXPR:
8694       return build_throw
8695         (RECUR (TREE_OPERAND (t, 0)));
8696
8697     case CONSTRUCTOR:
8698       {
8699         tree r;
8700         tree elts;
8701         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8702         bool purpose_p;
8703
8704         /* digest_init will do the wrong thing if we let it.  */
8705         if (type && TYPE_PTRMEMFUNC_P (type))
8706           return t;
8707
8708         r = NULL_TREE;
8709         /* We do not want to process the purpose of aggregate
8710            initializers as they are identifier nodes which will be
8711            looked up by digest_init.  */
8712         purpose_p = !(type && IS_AGGR_TYPE (type));
8713         for (elts = CONSTRUCTOR_ELTS (t);
8714              elts;
8715              elts = TREE_CHAIN (elts))
8716           {
8717             tree purpose = TREE_PURPOSE (elts);
8718             tree value = TREE_VALUE (elts);
8719             
8720             if (purpose && purpose_p)
8721               purpose = RECUR (purpose);
8722             value = RECUR (value);
8723             r = tree_cons (purpose, value, r);
8724           }
8725         
8726         r = build_constructor (NULL_TREE, nreverse (r));
8727         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8728
8729         if (type)
8730           return digest_init (type, r, 0);
8731         return r;
8732       }
8733
8734     case TYPEID_EXPR:
8735       {
8736         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8737         if (TYPE_P (operand_0))
8738           return get_typeid (operand_0);
8739         return build_typeid (operand_0);
8740       }
8741
8742     case PARM_DECL:
8743       return convert_from_reference (tsubst_copy (t, args, complain, in_decl));
8744
8745     case VAR_DECL:
8746       if (args)
8747         t = tsubst_copy (t, args, complain, in_decl);
8748       return convert_from_reference (t);
8749
8750     case VA_ARG_EXPR:
8751       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8752                              tsubst_copy (TREE_TYPE (t), args, complain, 
8753                                           in_decl));
8754
8755     case OFFSETOF_EXPR:
8756       return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
8757
8758     case STMT_EXPR:
8759       {
8760         tree old_stmt_expr = cur_stmt_expr;
8761         tree stmt_expr = begin_stmt_expr ();
8762
8763         cur_stmt_expr = stmt_expr;
8764         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
8765         stmt_expr = finish_stmt_expr (stmt_expr, false);
8766         cur_stmt_expr = old_stmt_expr;
8767
8768         return stmt_expr;
8769       }
8770
8771     case CONST_DECL:
8772       t = tsubst_copy (t, args, complain, in_decl);
8773       /* As in finish_id_expression, we resolve enumeration constants
8774          to their underlying values.  */
8775       if (TREE_CODE (t) == CONST_DECL)
8776         return DECL_INITIAL (t);
8777       return t;
8778
8779     default:
8780       return tsubst_copy (t, args, complain, in_decl);
8781     }
8782
8783 #undef RECUR
8784 }
8785
8786 /* Verify that the instantiated ARGS are valid. For type arguments,
8787    make sure that the type's linkage is ok. For non-type arguments,
8788    make sure they are constants if they are integral or enumerations.
8789    Emit an error under control of COMPLAIN, and return TRUE on error.  */
8790
8791 static bool
8792 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8793 {
8794   int ix, len = DECL_NTPARMS (tmpl);
8795   bool result = false;
8796
8797   for (ix = 0; ix != len; ix++)
8798     {
8799       tree t = TREE_VEC_ELT (args, ix);
8800       
8801       if (TYPE_P (t))
8802         {
8803           /* [basic.link]: A name with no linkage (notably, the name
8804              of a class or enumeration declared in a local scope)
8805              shall not be used to declare an entity with linkage.
8806              This implies that names with no linkage cannot be used as
8807              template arguments.  */
8808           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
8809
8810           if (nt)
8811             {
8812               if (!(complain & tf_error))
8813                 /*OK*/;
8814               else if (TYPE_ANONYMOUS_P (nt))
8815                 error ("%qT uses anonymous type", t);
8816               else
8817                 error ("%qT uses local type %qT", t, nt);
8818               result = true;
8819             }
8820           /* In order to avoid all sorts of complications, we do not
8821              allow variably-modified types as template arguments.  */
8822           else if (variably_modified_type_p (t, NULL_TREE))
8823             {
8824               if (complain & tf_error)
8825                 error ("%qT is a variably modified type", t);
8826               result = true;
8827             }
8828         }
8829       /* A non-type argument of integral or enumerated type must be a
8830          constant.  */
8831       else if (TREE_TYPE (t)
8832                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8833                && !TREE_CONSTANT (t))
8834         {
8835           if (complain & tf_error)
8836             error ("integral expression %qE is not constant", t);
8837           result = true;
8838         }
8839     }
8840   if (result && complain & tf_error)
8841     error ("  trying to instantiate %qD", tmpl);
8842   return result;
8843 }
8844
8845 /* Instantiate the indicated variable or function template TMPL with
8846    the template arguments in TARG_PTR.  */
8847
8848 tree
8849 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8850 {
8851   tree fndecl;
8852   tree gen_tmpl;
8853   tree spec;
8854
8855   if (tmpl == error_mark_node)
8856     return error_mark_node;
8857
8858   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
8859
8860   /* If this function is a clone, handle it specially.  */
8861   if (DECL_CLONED_FUNCTION_P (tmpl))
8862     {
8863       tree spec;
8864       tree clone;
8865       
8866       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8867                                    complain);
8868       if (spec == error_mark_node)
8869         return error_mark_node;
8870
8871       /* Look for the clone.  */
8872       FOR_EACH_CLONE (clone, spec)
8873         if (DECL_NAME (clone) == DECL_NAME (tmpl))
8874           return clone;
8875       /* We should always have found the clone by now.  */
8876       gcc_unreachable ();
8877       return NULL_TREE;
8878     }
8879   
8880   /* Check to see if we already have this specialization.  */
8881   spec = retrieve_specialization (tmpl, targ_ptr, 
8882                                   /*class_specializations_p=*/false);
8883   if (spec != NULL_TREE)
8884     return spec;
8885
8886   gen_tmpl = most_general_template (tmpl);
8887   if (tmpl != gen_tmpl)
8888     {
8889       /* The TMPL is a partial instantiation.  To get a full set of
8890          arguments we must add the arguments used to perform the
8891          partial instantiation.  */
8892       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
8893                                               targ_ptr);
8894
8895       /* Check to see if we already have this specialization.  */
8896       spec = retrieve_specialization (gen_tmpl, targ_ptr,
8897                                       /*class_specializations_p=*/false);
8898       if (spec != NULL_TREE)
8899         return spec;
8900     }
8901
8902   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
8903                                complain))
8904     return error_mark_node;
8905   
8906   /* We are building a FUNCTION_DECL, during which the access of its
8907      parameters and return types have to be checked.  However this
8908      FUNCTION_DECL which is the desired context for access checking
8909      is not built yet.  We solve this chicken-and-egg problem by
8910      deferring all checks until we have the FUNCTION_DECL.  */
8911   push_deferring_access_checks (dk_deferred);
8912
8913   /* Substitute template parameters.  */
8914   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
8915                    targ_ptr, complain, gen_tmpl);
8916
8917   /* Now we know the specialization, compute access previously
8918      deferred.  */
8919   push_access_scope (fndecl);
8920   perform_deferred_access_checks ();
8921   pop_access_scope (fndecl);
8922   pop_deferring_access_checks ();
8923
8924   /* The DECL_TI_TEMPLATE should always be the immediate parent
8925      template, not the most general template.  */
8926   DECL_TI_TEMPLATE (fndecl) = tmpl;
8927
8928   /* If we've just instantiated the main entry point for a function,
8929      instantiate all the alternate entry points as well.  We do this
8930      by cloning the instantiation of the main entry point, not by
8931      instantiating the template clones.  */
8932   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
8933     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
8934
8935   return fndecl;
8936 }
8937
8938 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
8939    arguments that are being used when calling it.  TARGS is a vector
8940    into which the deduced template arguments are placed.  
8941
8942    Return zero for success, 2 for an incomplete match that doesn't resolve
8943    all the types, and 1 for complete failure.  An error message will be
8944    printed only for an incomplete match.
8945
8946    If FN is a conversion operator, or we are trying to produce a specific
8947    specialization, RETURN_TYPE is the return type desired.
8948
8949    The EXPLICIT_TARGS are explicit template arguments provided via a
8950    template-id.
8951
8952    The parameter STRICT is one of:
8953
8954    DEDUCE_CALL: 
8955      We are deducing arguments for a function call, as in
8956      [temp.deduct.call].
8957
8958    DEDUCE_CONV:
8959      We are deducing arguments for a conversion function, as in 
8960      [temp.deduct.conv].
8961
8962    DEDUCE_EXACT:
8963      We are deducing arguments when doing an explicit instantiation
8964      as in [temp.explicit], when determining an explicit specialization
8965      as in [temp.expl.spec], or when taking the address of a function
8966      template, as in [temp.deduct.funcaddr]. 
8967
8968    DEDUCE_ORDER:
8969      We are deducing arguments when calculating the partial
8970      ordering between specializations of function or class
8971      templates, as in [temp.func.order] and [temp.class.order].
8972
8973    LEN is the number of parms to consider before returning success, or -1
8974    for all.  This is used in partial ordering to avoid comparing parms for
8975    which no actual argument was passed, since they are not considered in
8976    overload resolution (and are explicitly excluded from consideration in
8977    partial ordering in [temp.func.order]/6).  */
8978
8979 int
8980 fn_type_unification (tree fn, 
8981                      tree explicit_targs, 
8982                      tree targs, 
8983                      tree args, 
8984                      tree return_type,
8985                      unification_kind_t strict, 
8986                      int len)
8987 {
8988   tree parms;
8989   tree fntype;
8990   int result;
8991
8992   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
8993
8994   fntype = TREE_TYPE (fn);
8995   if (explicit_targs)
8996     {
8997       /* [temp.deduct]
8998           
8999          The specified template arguments must match the template
9000          parameters in kind (i.e., type, nontype, template), and there
9001          must not be more arguments than there are parameters;
9002          otherwise type deduction fails.
9003
9004          Nontype arguments must match the types of the corresponding
9005          nontype template parameters, or must be convertible to the
9006          types of the corresponding nontype parameters as specified in
9007          _temp.arg.nontype_, otherwise type deduction fails.
9008
9009          All references in the function type of the function template
9010          to the corresponding template parameters are replaced by the
9011          specified template argument values.  If a substitution in a
9012          template parameter or in the function type of the function
9013          template results in an invalid type, type deduction fails.  */
9014       int i;
9015       tree converted_args;
9016       bool incomplete;
9017
9018       converted_args
9019         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
9020                                   explicit_targs, NULL_TREE, tf_none, 
9021                                   /*require_all_arguments=*/0));
9022       if (converted_args == error_mark_node)
9023         return 1;
9024
9025       /* Substitute the explicit args into the function type.  This is
9026          necessary so that, for instance, explicitly declared function
9027          arguments can match null pointed constants.  If we were given
9028          an incomplete set of explicit args, we must not do semantic
9029          processing during substitution as we could create partial
9030          instantiations.  */
9031       incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
9032       processing_template_decl += incomplete;
9033       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
9034       processing_template_decl -= incomplete;
9035       
9036       if (fntype == error_mark_node)
9037         return 1;
9038
9039       /* Place the explicitly specified arguments in TARGS.  */
9040       for (i = NUM_TMPL_ARGS (converted_args); i--;)
9041         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
9042     }
9043      
9044   parms = TYPE_ARG_TYPES (fntype);
9045   /* Never do unification on the 'this' parameter.  */
9046   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
9047     parms = TREE_CHAIN (parms);
9048   
9049   if (return_type)
9050     {
9051       /* We've been given a return type to match, prepend it.  */
9052       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
9053       args = tree_cons (NULL_TREE, return_type, args);
9054       if (len >= 0)
9055         ++len;
9056     }
9057
9058   /* We allow incomplete unification without an error message here
9059      because the standard doesn't seem to explicitly prohibit it.  Our
9060      callers must be ready to deal with unification failures in any
9061      event.  */
9062   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
9063                                   targs, parms, args, /*subr=*/0,
9064                                   strict, /*allow_incomplete*/1, len);
9065
9066   if (result == 0) 
9067     /* All is well so far.  Now, check:
9068        
9069        [temp.deduct] 
9070        
9071        When all template arguments have been deduced, all uses of
9072        template parameters in nondeduced contexts are replaced with
9073        the corresponding deduced argument values.  If the
9074        substitution results in an invalid type, as described above,
9075        type deduction fails.  */
9076     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
9077         == error_mark_node)
9078       return 1;
9079
9080   return result;
9081 }
9082
9083 /* Adjust types before performing type deduction, as described in
9084    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
9085    sections are symmetric.  PARM is the type of a function parameter
9086    or the return type of the conversion function.  ARG is the type of
9087    the argument passed to the call, or the type of the value
9088    initialized with the result of the conversion function.  */
9089
9090 static int
9091 maybe_adjust_types_for_deduction (unification_kind_t strict, 
9092                                   tree* parm, 
9093                                   tree* arg)
9094 {
9095   int result = 0;
9096   
9097   switch (strict)
9098     {
9099     case DEDUCE_CALL:
9100       break;
9101
9102     case DEDUCE_CONV:
9103       {
9104         /* Swap PARM and ARG throughout the remainder of this
9105            function; the handling is precisely symmetric since PARM
9106            will initialize ARG rather than vice versa.  */
9107         tree* temp = parm;
9108         parm = arg;
9109         arg = temp;
9110         break;
9111       }
9112
9113     case DEDUCE_EXACT:
9114       /* There is nothing to do in this case.  */
9115       return 0;
9116
9117     case DEDUCE_ORDER:
9118       /* DR 214. [temp.func.order] is underspecified, and leads to no
9119          ordering between things like `T *' and `T const &' for `U *'.
9120          The former has T=U and the latter T=U*. The former looks more
9121          specialized and John Spicer considers it well-formed (the EDG
9122          compiler accepts it).
9123
9124          John also confirms that deduction should proceed as in a function
9125          call. Which implies the usual ARG and PARM conversions as DEDUCE_CALL.
9126          However, in ordering, ARG can have REFERENCE_TYPE, but no argument
9127          to an actual call can have such a type.
9128          
9129          If both ARG and PARM are REFERENCE_TYPE, we change neither.
9130          If only ARG is a REFERENCE_TYPE, we look through that and then
9131          proceed as with DEDUCE_CALL (which could further convert it).  */
9132       if (TREE_CODE (*arg) == REFERENCE_TYPE)
9133         {
9134           if (TREE_CODE (*parm) == REFERENCE_TYPE)
9135             return 0;
9136           *arg = TREE_TYPE (*arg);
9137         }
9138       break;
9139     default:
9140       gcc_unreachable ();
9141     }
9142
9143   if (TREE_CODE (*parm) != REFERENCE_TYPE)
9144     {
9145       /* [temp.deduct.call]
9146          
9147          If P is not a reference type:
9148          
9149          --If A is an array type, the pointer type produced by the
9150          array-to-pointer standard conversion (_conv.array_) is
9151          used in place of A for type deduction; otherwise,
9152          
9153          --If A is a function type, the pointer type produced by
9154          the function-to-pointer standard conversion
9155          (_conv.func_) is used in place of A for type deduction;
9156          otherwise,
9157          
9158          --If A is a cv-qualified type, the top level
9159          cv-qualifiers of A's type are ignored for type
9160          deduction.  */
9161       if (TREE_CODE (*arg) == ARRAY_TYPE)
9162         *arg = build_pointer_type (TREE_TYPE (*arg));
9163       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9164         *arg = build_pointer_type (*arg);
9165       else
9166         *arg = TYPE_MAIN_VARIANT (*arg);
9167     }
9168   
9169   /* [temp.deduct.call]
9170      
9171      If P is a cv-qualified type, the top level cv-qualifiers
9172      of P's type are ignored for type deduction.  If P is a
9173      reference type, the type referred to by P is used for
9174      type deduction.  */
9175   *parm = TYPE_MAIN_VARIANT (*parm);
9176   if (TREE_CODE (*parm) == REFERENCE_TYPE)
9177     {
9178       *parm = TREE_TYPE (*parm);
9179       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9180     }
9181
9182   /* DR 322. For conversion deduction, remove a reference type on parm
9183      too (which has been swapped into ARG).  */
9184   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9185     *arg = TREE_TYPE (*arg);
9186   
9187   return result;
9188 }
9189
9190 /* Most parms like fn_type_unification.
9191
9192    If SUBR is 1, we're being called recursively (to unify the
9193    arguments of a function or method parameter of a function
9194    template).  */
9195
9196 static int
9197 type_unification_real (tree tparms, 
9198                        tree targs, 
9199                        tree xparms, 
9200                        tree xargs, 
9201                        int subr,
9202                        unification_kind_t strict, 
9203                        int allow_incomplete, 
9204                        int xlen)
9205 {
9206   tree parm, arg;
9207   int i;
9208   int ntparms = TREE_VEC_LENGTH (tparms);
9209   int sub_strict;
9210   int saw_undeduced = 0;
9211   tree parms, args;
9212   int len;
9213
9214   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9215   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9216   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9217   gcc_assert (ntparms > 0);
9218
9219   switch (strict)
9220     {
9221     case DEDUCE_CALL:
9222       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9223                     | UNIFY_ALLOW_DERIVED);
9224       break;
9225       
9226     case DEDUCE_CONV:
9227       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9228       break;
9229
9230     case DEDUCE_EXACT:
9231       sub_strict = UNIFY_ALLOW_NONE;
9232       break;
9233     
9234     case DEDUCE_ORDER:
9235       sub_strict = UNIFY_ALLOW_NONE;
9236       break;
9237       
9238     default:
9239       gcc_unreachable ();
9240     }
9241
9242   if (xlen == 0)
9243     return 0;
9244
9245  again:
9246   parms = xparms;
9247   args = xargs;
9248   len = xlen;
9249
9250   while (parms
9251          && parms != void_list_node
9252          && args
9253          && args != void_list_node)
9254     {
9255       parm = TREE_VALUE (parms);
9256       parms = TREE_CHAIN (parms);
9257       arg = TREE_VALUE (args);
9258       args = TREE_CHAIN (args);
9259
9260       if (arg == error_mark_node)
9261         return 1;
9262       if (arg == unknown_type_node)
9263         /* We can't deduce anything from this, but we might get all the
9264            template args from other function args.  */
9265         continue;
9266
9267       /* Conversions will be performed on a function argument that
9268          corresponds with a function parameter that contains only
9269          non-deducible template parameters and explicitly specified
9270          template parameters.  */
9271       if (!uses_template_parms (parm))
9272         {
9273           tree type;
9274
9275           if (!TYPE_P (arg))
9276             type = TREE_TYPE (arg);
9277           else
9278             type = arg;
9279
9280           if (strict == DEDUCE_EXACT || strict == DEDUCE_ORDER)
9281             {
9282               if (same_type_p (parm, type))
9283                 continue;
9284             }
9285           else
9286             /* It might work; we shouldn't check now, because we might
9287                get into infinite recursion.  Overload resolution will
9288                handle it.  */
9289             continue;
9290
9291           return 1;
9292         }
9293         
9294       if (!TYPE_P (arg))
9295         {
9296           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9297           if (type_unknown_p (arg))
9298             {
9299               /* [temp.deduct.type] A template-argument can be deduced from
9300                  a pointer to function or pointer to member function
9301                  argument if the set of overloaded functions does not
9302                  contain function templates and at most one of a set of
9303                  overloaded functions provides a unique match.  */
9304
9305               if (resolve_overloaded_unification
9306                   (tparms, targs, parm, arg, strict, sub_strict)
9307                   != 0)
9308                 return 1;
9309               continue;
9310             }
9311           arg = TREE_TYPE (arg);
9312           if (arg == error_mark_node)
9313             return 1;
9314         }
9315       
9316       {
9317         int arg_strict = sub_strict;
9318         
9319         if (!subr)
9320           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9321
9322         if (unify (tparms, targs, parm, arg, arg_strict))
9323           return 1;
9324       }
9325
9326       /* Are we done with the interesting parms?  */
9327       if (--len == 0)
9328         goto done;
9329     }
9330   /* Fail if we've reached the end of the parm list, and more args
9331      are present, and the parm list isn't variadic.  */
9332   if (args && args != void_list_node && parms == void_list_node)
9333     return 1;
9334   /* Fail if parms are left and they don't have default values.  */
9335   if (parms
9336       && parms != void_list_node
9337       && TREE_PURPOSE (parms) == NULL_TREE)
9338     return 1;
9339
9340  done:
9341   if (!subr)
9342     for (i = 0; i < ntparms; i++)
9343       if (TREE_VEC_ELT (targs, i) == NULL_TREE)
9344         {
9345           tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9346
9347           /* If this is an undeduced nontype parameter that depends on
9348              a type parameter, try another pass; its type may have been
9349              deduced from a later argument than the one from which
9350              this parameter can be deduced.  */
9351           if (TREE_CODE (tparm) == PARM_DECL
9352               && uses_template_parms (TREE_TYPE (tparm))
9353               && !saw_undeduced++)
9354             goto again;
9355
9356           if (!allow_incomplete)
9357             error ("incomplete type unification");
9358           return 2;
9359         }
9360   return 0;
9361 }
9362
9363 /* Subroutine of type_unification_real.  Args are like the variables at the
9364    call site.  ARG is an overloaded function (or template-id); we try
9365    deducing template args from each of the overloads, and if only one
9366    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
9367
9368 static int
9369 resolve_overloaded_unification (tree tparms, 
9370                                 tree targs,
9371                                 tree parm,
9372                                 tree arg, 
9373                                 unification_kind_t strict,
9374                                 int sub_strict)
9375 {
9376   tree tempargs = copy_node (targs);
9377   int good = 0;
9378   bool addr_p;
9379
9380   if (TREE_CODE (arg) == ADDR_EXPR)
9381     {
9382       arg = TREE_OPERAND (arg, 0);
9383       addr_p = true;
9384     }
9385   else
9386     addr_p = false;
9387
9388   if (TREE_CODE (arg) == COMPONENT_REF)
9389     /* Handle `&x' where `x' is some static or non-static member
9390        function name.  */
9391     arg = TREE_OPERAND (arg, 1);
9392
9393   if (TREE_CODE (arg) == OFFSET_REF)
9394     arg = TREE_OPERAND (arg, 1);
9395
9396   /* Strip baselink information.  */
9397   if (BASELINK_P (arg))
9398     arg = BASELINK_FUNCTIONS (arg);
9399
9400   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9401     {
9402       /* If we got some explicit template args, we need to plug them into
9403          the affected templates before we try to unify, in case the
9404          explicit args will completely resolve the templates in question.  */
9405
9406       tree expl_subargs = TREE_OPERAND (arg, 1);
9407       arg = TREE_OPERAND (arg, 0);
9408
9409       for (; arg; arg = OVL_NEXT (arg))
9410         {
9411           tree fn = OVL_CURRENT (arg);
9412           tree subargs, elem;
9413
9414           if (TREE_CODE (fn) != TEMPLATE_DECL)
9415             continue;
9416
9417           subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
9418                                            expl_subargs);
9419           if (subargs)
9420             {
9421               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9422               good += try_one_overload (tparms, targs, tempargs, parm, 
9423                                         elem, strict, sub_strict, addr_p);
9424             }
9425         }
9426     }
9427   else
9428     {
9429       gcc_assert (TREE_CODE (arg) == OVERLOAD
9430                   || TREE_CODE (arg) == FUNCTION_DECL);
9431   
9432       for (; arg; arg = OVL_NEXT (arg))
9433         good += try_one_overload (tparms, targs, tempargs, parm,
9434                                   TREE_TYPE (OVL_CURRENT (arg)),
9435                                   strict, sub_strict, addr_p);
9436     }
9437
9438   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9439      to function or pointer to member function argument if the set of
9440      overloaded functions does not contain function templates and at most
9441      one of a set of overloaded functions provides a unique match.
9442
9443      So if we found multiple possibilities, we return success but don't
9444      deduce anything.  */
9445
9446   if (good == 1)
9447     {
9448       int i = TREE_VEC_LENGTH (targs);
9449       for (; i--; )
9450         if (TREE_VEC_ELT (tempargs, i))
9451           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9452     }
9453   if (good)
9454     return 0;
9455
9456   return 1;
9457 }
9458
9459 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9460    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
9461    different overloads deduce different arguments for a given parm.
9462    ADDR_P is true if the expression for which deduction is being
9463    performed was of the form "& fn" rather than simply "fn".
9464
9465    Returns 1 on success.  */
9466
9467 static int
9468 try_one_overload (tree tparms,
9469                   tree orig_targs,
9470                   tree targs, 
9471                   tree parm, 
9472                   tree arg, 
9473                   unification_kind_t strict,
9474                   int sub_strict,
9475                   bool addr_p)
9476 {
9477   int nargs;
9478   tree tempargs;
9479   int i;
9480
9481   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9482      to function or pointer to member function argument if the set of
9483      overloaded functions does not contain function templates and at most
9484      one of a set of overloaded functions provides a unique match.
9485
9486      So if this is a template, just return success.  */
9487
9488   if (uses_template_parms (arg))
9489     return 1;
9490
9491   if (TREE_CODE (arg) == METHOD_TYPE)
9492     arg = build_ptrmemfunc_type (build_pointer_type (arg));
9493   else if (addr_p)
9494     arg = build_pointer_type (arg);
9495
9496   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9497
9498   /* We don't copy orig_targs for this because if we have already deduced
9499      some template args from previous args, unify would complain when we
9500      try to deduce a template parameter for the same argument, even though
9501      there isn't really a conflict.  */
9502   nargs = TREE_VEC_LENGTH (targs);
9503   tempargs = make_tree_vec (nargs);
9504
9505   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9506     return 0;
9507
9508   /* First make sure we didn't deduce anything that conflicts with
9509      explicitly specified args.  */
9510   for (i = nargs; i--; )
9511     {
9512       tree elt = TREE_VEC_ELT (tempargs, i);
9513       tree oldelt = TREE_VEC_ELT (orig_targs, i);
9514
9515       if (elt == NULL_TREE)
9516         continue;
9517       else if (uses_template_parms (elt))
9518         {
9519           /* Since we're unifying against ourselves, we will fill in template
9520              args used in the function parm list with our own template parms.
9521              Discard them.  */
9522           TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9523           continue;
9524         }
9525       else if (oldelt && ! template_args_equal (oldelt, elt))
9526         return 0;
9527     }
9528
9529   for (i = nargs; i--; )
9530     {
9531       tree elt = TREE_VEC_ELT (tempargs, i);
9532
9533       if (elt)
9534         TREE_VEC_ELT (targs, i) = elt;
9535     }
9536
9537   return 1;
9538 }
9539
9540 /* Verify that nondeduce template argument agrees with the type
9541    obtained from argument deduction.  Return nonzero if the
9542    verification fails.
9543
9544    For example:
9545
9546      struct A { typedef int X; };
9547      template <class T, class U> struct C {};
9548      template <class T> struct C<T, typename T::X> {};
9549
9550    Then with the instantiation `C<A, int>', we can deduce that
9551    `T' is `A' but unify () does not check whether `typename T::X'
9552    is `int'.  This function ensure that they agree.
9553
9554    TARGS, PARMS are the same as the arguments of unify.
9555    ARGS contains template arguments from all levels.  */
9556
9557 static int
9558 verify_class_unification (tree targs, tree parms, tree args)
9559 {
9560   parms = tsubst (parms, add_outermost_template_args (args, targs),
9561                   tf_none, NULL_TREE);
9562   if (parms == error_mark_node)
9563     return 1;
9564
9565   return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9566 }
9567
9568 /* PARM is a template class (perhaps with unbound template
9569    parameters).  ARG is a fully instantiated type.  If ARG can be
9570    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
9571    TARGS are as for unify.  */
9572
9573 static tree
9574 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9575 {
9576   tree copy_of_targs;
9577
9578   if (!CLASSTYPE_TEMPLATE_INFO (arg)
9579       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg)) 
9580           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9581     return NULL_TREE;
9582
9583   /* We need to make a new template argument vector for the call to
9584      unify.  If we used TARGS, we'd clutter it up with the result of
9585      the attempted unification, even if this class didn't work out.
9586      We also don't want to commit ourselves to all the unifications
9587      we've already done, since unification is supposed to be done on
9588      an argument-by-argument basis.  In other words, consider the
9589      following pathological case:
9590
9591        template <int I, int J, int K>
9592        struct S {};
9593        
9594        template <int I, int J>
9595        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9596        
9597        template <int I, int J, int K>
9598        void f(S<I, J, K>, S<I, I, I>);
9599        
9600        void g() {
9601          S<0, 0, 0> s0;
9602          S<0, 1, 2> s2;
9603        
9604          f(s0, s2);
9605        }
9606
9607      Now, by the time we consider the unification involving `s2', we
9608      already know that we must have `f<0, 0, 0>'.  But, even though
9609      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9610      because there are two ways to unify base classes of S<0, 1, 2>
9611      with S<I, I, I>.  If we kept the already deduced knowledge, we
9612      would reject the possibility I=1.  */
9613   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9614   
9615   /* If unification failed, we're done.  */
9616   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9617              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9618     return NULL_TREE;
9619
9620   return arg;
9621 }
9622
9623 /* Given a template type PARM and a class type ARG, find the unique
9624    base type in ARG that is an instance of PARM.  We do not examine
9625    ARG itself; only its base-classes.  If there is not exactly one
9626    appropriate base class, return NULL_TREE.  PARM may be the type of
9627    a partial specialization, as well as a plain template type.  Used
9628    by unify.  */
9629
9630 static tree
9631 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9632 {
9633   tree rval = NULL_TREE;
9634   tree binfo;
9635
9636   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
9637   
9638   binfo = TYPE_BINFO (complete_type (arg));
9639   if (!binfo)
9640     /* The type could not be completed.  */
9641     return NULL_TREE;
9642
9643   /* Walk in inheritance graph order.  The search order is not
9644      important, and this avoids multiple walks of virtual bases.  */
9645   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
9646     {
9647       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
9648
9649       if (r)
9650         {
9651           /* If there is more than one satisfactory baseclass, then:
9652
9653                [temp.deduct.call]
9654
9655               If they yield more than one possible deduced A, the type
9656               deduction fails.
9657
9658              applies.  */
9659           if (rval && !same_type_p (r, rval))
9660             return NULL_TREE;
9661           
9662           rval = r;
9663         }
9664     }
9665
9666   return rval;
9667 }
9668
9669 /* Returns the level of DECL, which declares a template parameter.  */
9670
9671 static int
9672 template_decl_level (tree decl)
9673 {
9674   switch (TREE_CODE (decl))
9675     {
9676     case TYPE_DECL:
9677     case TEMPLATE_DECL:
9678       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9679
9680     case PARM_DECL:
9681       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9682
9683     default:
9684       gcc_unreachable ();
9685     }
9686   return 0;
9687 }
9688
9689 /* Decide whether ARG can be unified with PARM, considering only the
9690    cv-qualifiers of each type, given STRICT as documented for unify.
9691    Returns nonzero iff the unification is OK on that basis.  */
9692
9693 static int
9694 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9695 {
9696   int arg_quals = cp_type_quals (arg);
9697   int parm_quals = cp_type_quals (parm);
9698
9699   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9700       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9701     {
9702       /*  Although a CVR qualifier is ignored when being applied to a
9703           substituted template parameter ([8.3.2]/1 for example), that
9704           does not apply during deduction [14.8.2.4]/1, (even though
9705           that is not explicitly mentioned, [14.8.2.4]/9 indicates
9706           this).  Except when we're allowing additional CV qualifiers
9707           at the outer level [14.8.2.1]/3,1st bullet.  */
9708       if ((TREE_CODE (arg) == REFERENCE_TYPE
9709            || TREE_CODE (arg) == FUNCTION_TYPE
9710            || TREE_CODE (arg) == METHOD_TYPE)
9711           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9712         return 0;
9713
9714       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9715           && (parm_quals & TYPE_QUAL_RESTRICT))
9716         return 0;
9717     }
9718
9719   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9720       && (arg_quals & parm_quals) != parm_quals)
9721     return 0;
9722
9723   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9724       && (parm_quals & arg_quals) != arg_quals)
9725     return 0;
9726
9727   return 1;
9728 }
9729
9730 /* Takes parameters as for type_unification.  Returns 0 if the
9731    type deduction succeeds, 1 otherwise.  The parameter STRICT is a
9732    bitwise or of the following flags:
9733
9734      UNIFY_ALLOW_NONE:
9735        Require an exact match between PARM and ARG.
9736      UNIFY_ALLOW_MORE_CV_QUAL:
9737        Allow the deduced ARG to be more cv-qualified (by qualification
9738        conversion) than ARG.
9739      UNIFY_ALLOW_LESS_CV_QUAL:
9740        Allow the deduced ARG to be less cv-qualified than ARG.
9741      UNIFY_ALLOW_DERIVED:
9742        Allow the deduced ARG to be a template base class of ARG,
9743        or a pointer to a template base class of the type pointed to by
9744        ARG.
9745      UNIFY_ALLOW_INTEGER:
9746        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
9747        case for more information. 
9748      UNIFY_ALLOW_OUTER_LEVEL:
9749        This is the outermost level of a deduction. Used to determine validity
9750        of qualification conversions. A valid qualification conversion must
9751        have const qualified pointers leading up to the inner type which
9752        requires additional CV quals, except at the outer level, where const
9753        is not required [conv.qual]. It would be normal to set this flag in
9754        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9755      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9756        This is the outermost level of a deduction, and PARM can be more CV
9757        qualified at this point.
9758      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9759        This is the outermost level of a deduction, and PARM can be less CV
9760        qualified at this point.  */
9761
9762 static int
9763 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9764 {
9765   int idx;
9766   tree targ;
9767   tree tparm;
9768   int strict_in = strict;
9769
9770   /* I don't think this will do the right thing with respect to types.
9771      But the only case I've seen it in so far has been array bounds, where
9772      signedness is the only information lost, and I think that will be
9773      okay.  */
9774   while (TREE_CODE (parm) == NOP_EXPR)
9775     parm = TREE_OPERAND (parm, 0);
9776
9777   if (arg == error_mark_node)
9778     return 1;
9779   if (arg == unknown_type_node)
9780     /* We can't deduce anything from this, but we might get all the
9781        template args from other function args.  */
9782     return 0;
9783
9784   /* If PARM uses template parameters, then we can't bail out here,
9785      even if ARG == PARM, since we won't record unifications for the
9786      template parameters.  We might need them if we're trying to
9787      figure out which of two things is more specialized.  */
9788   if (arg == parm && !uses_template_parms (parm))
9789     return 0;
9790
9791   /* Immediately reject some pairs that won't unify because of
9792      cv-qualification mismatches.  */
9793   if (TREE_CODE (arg) == TREE_CODE (parm)
9794       && TYPE_P (arg)
9795       /* It is the elements of the array which hold the cv quals of an array
9796          type, and the elements might be template type parms. We'll check
9797          when we recurse.  */
9798       && TREE_CODE (arg) != ARRAY_TYPE
9799       /* We check the cv-qualifiers when unifying with template type
9800          parameters below.  We want to allow ARG `const T' to unify with
9801          PARM `T' for example, when computing which of two templates
9802          is more specialized, for example.  */
9803       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9804       && !check_cv_quals_for_unify (strict_in, arg, parm))
9805     return 1;
9806
9807   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9808       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9809     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9810   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9811   strict &= ~UNIFY_ALLOW_DERIVED;
9812   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9813   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9814   
9815   switch (TREE_CODE (parm))
9816     {
9817     case TYPENAME_TYPE:
9818     case SCOPE_REF:
9819     case UNBOUND_CLASS_TEMPLATE:
9820       /* In a type which contains a nested-name-specifier, template
9821          argument values cannot be deduced for template parameters used
9822          within the nested-name-specifier.  */
9823       return 0;
9824
9825     case TEMPLATE_TYPE_PARM:
9826     case TEMPLATE_TEMPLATE_PARM:
9827     case BOUND_TEMPLATE_TEMPLATE_PARM:
9828       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9829
9830       if (TEMPLATE_TYPE_LEVEL (parm)
9831           != template_decl_level (tparm))
9832         /* The PARM is not one we're trying to unify.  Just check
9833            to see if it matches ARG.  */
9834         return (TREE_CODE (arg) == TREE_CODE (parm)
9835                 && same_type_p (parm, arg)) ? 0 : 1;
9836       idx = TEMPLATE_TYPE_IDX (parm);
9837       targ = TREE_VEC_ELT (targs, idx);
9838       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9839
9840       /* Check for mixed types and values.  */
9841       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9842            && TREE_CODE (tparm) != TYPE_DECL)
9843           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM 
9844               && TREE_CODE (tparm) != TEMPLATE_DECL))
9845         return 1;
9846
9847       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9848         {
9849           /* ARG must be constructed from a template class or a template
9850              template parameter.  */
9851           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9852               && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9853             return 1;
9854
9855           {
9856             tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9857             tree parmvec = TYPE_TI_ARGS (parm);
9858             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
9859             tree argtmplvec
9860               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9861             int i;
9862
9863             /* The parameter and argument roles have to be switched here 
9864                in order to handle default arguments properly.  For example, 
9865                template<template <class> class TT> void f(TT<int>) 
9866                should be able to accept vector<int> which comes from 
9867                template <class T, class Allocator = allocator> 
9868                class vector.  */
9869
9870             if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9871                 == error_mark_node)
9872               return 1;
9873           
9874             /* Deduce arguments T, i from TT<T> or TT<i>.  
9875                We check each element of PARMVEC and ARGVEC individually
9876                rather than the whole TREE_VEC since they can have
9877                different number of elements.  */
9878
9879             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9880               {
9881                 if (unify (tparms, targs, 
9882                            TREE_VEC_ELT (parmvec, i), 
9883                            TREE_VEC_ELT (argvec, i), 
9884                            UNIFY_ALLOW_NONE))
9885                   return 1;
9886               }
9887           }
9888           arg = TYPE_TI_TEMPLATE (arg);
9889
9890           /* Fall through to deduce template name.  */
9891         }
9892
9893       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9894           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9895         {
9896           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
9897
9898           /* Simple cases: Value already set, does match or doesn't.  */
9899           if (targ != NULL_TREE && template_args_equal (targ, arg))
9900             return 0;
9901           else if (targ)
9902             return 1;
9903         }
9904       else
9905         {
9906           /* If PARM is `const T' and ARG is only `int', we don't have
9907              a match unless we are allowing additional qualification.
9908              If ARG is `const int' and PARM is just `T' that's OK;
9909              that binds `const int' to `T'.  */
9910           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL, 
9911                                          arg, parm))
9912             return 1;
9913
9914           /* Consider the case where ARG is `const volatile int' and
9915              PARM is `const T'.  Then, T should be `volatile int'.  */
9916           arg = cp_build_qualified_type_real
9917             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
9918           if (arg == error_mark_node)
9919             return 1;
9920
9921           /* Simple cases: Value already set, does match or doesn't.  */
9922           if (targ != NULL_TREE && same_type_p (targ, arg))
9923             return 0;
9924           else if (targ)
9925             return 1;
9926
9927           /* Make sure that ARG is not a variable-sized array.  (Note
9928              that were talking about variable-sized arrays (like
9929              `int[n]'), rather than arrays of unknown size (like
9930              `int[]').)  We'll get very confused by such a type since
9931              the bound of the array will not be computable in an
9932              instantiation.  Besides, such types are not allowed in
9933              ISO C++, so we can do as we please here.  */
9934           if (variably_modified_type_p (arg, NULL_TREE))
9935             return 1;
9936         }
9937
9938       TREE_VEC_ELT (targs, idx) = arg;
9939       return 0;
9940
9941     case TEMPLATE_PARM_INDEX:
9942       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9943
9944       if (TEMPLATE_PARM_LEVEL (parm) 
9945           != template_decl_level (tparm))
9946         /* The PARM is not one we're trying to unify.  Just check
9947            to see if it matches ARG.  */
9948         return !(TREE_CODE (arg) == TREE_CODE (parm)
9949                  && cp_tree_equal (parm, arg));
9950
9951       idx = TEMPLATE_PARM_IDX (parm);
9952       targ = TREE_VEC_ELT (targs, idx);
9953
9954       if (targ)
9955         return !cp_tree_equal (targ, arg);
9956
9957       /* [temp.deduct.type] If, in the declaration of a function template
9958          with a non-type template-parameter, the non-type
9959          template-parameter is used in an expression in the function
9960          parameter-list and, if the corresponding template-argument is
9961          deduced, the template-argument type shall match the type of the
9962          template-parameter exactly, except that a template-argument
9963          deduced from an array bound may be of any integral type. 
9964          The non-type parameter might use already deduced type parameters.  */
9965       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
9966       if (!TREE_TYPE (arg))
9967         /* Template-parameter dependent expression.  Just accept it for now.
9968            It will later be processed in convert_template_argument.  */
9969         ;
9970       else if (same_type_p (TREE_TYPE (arg), tparm))
9971         /* OK */;
9972       else if ((strict & UNIFY_ALLOW_INTEGER)
9973                && (TREE_CODE (tparm) == INTEGER_TYPE
9974                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
9975         /* Convert the ARG to the type of PARM; the deduced non-type
9976            template argument must exactly match the types of the
9977            corresponding parameter.  */
9978         arg = fold (build_nop (TREE_TYPE (parm), arg));
9979       else if (uses_template_parms (tparm))
9980         /* We haven't deduced the type of this parameter yet.  Try again
9981            later.  */
9982         return 0;
9983       else
9984         return 1;
9985
9986       TREE_VEC_ELT (targs, idx) = arg;
9987       return 0;
9988
9989     case PTRMEM_CST:
9990      {
9991         /* A pointer-to-member constant can be unified only with
9992          another constant.  */
9993       if (TREE_CODE (arg) != PTRMEM_CST)
9994         return 1;
9995
9996       /* Just unify the class member. It would be useless (and possibly
9997          wrong, depending on the strict flags) to unify also
9998          PTRMEM_CST_CLASS, because we want to be sure that both parm and
9999          arg refer to the same variable, even if through different
10000          classes. For instance:
10001
10002          struct A { int x; };
10003          struct B : A { };
10004
10005          Unification of &A::x and &B::x must succeed.  */
10006       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
10007                     PTRMEM_CST_MEMBER (arg), strict);
10008      }
10009
10010     case POINTER_TYPE:
10011       {
10012         if (TREE_CODE (arg) != POINTER_TYPE)
10013           return 1;
10014         
10015         /* [temp.deduct.call]
10016
10017            A can be another pointer or pointer to member type that can
10018            be converted to the deduced A via a qualification
10019            conversion (_conv.qual_).
10020
10021            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
10022            This will allow for additional cv-qualification of the
10023            pointed-to types if appropriate.  */
10024         
10025         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
10026           /* The derived-to-base conversion only persists through one
10027              level of pointers.  */
10028           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
10029
10030         return unify (tparms, targs, TREE_TYPE (parm), 
10031                       TREE_TYPE (arg), strict);
10032       }
10033
10034     case REFERENCE_TYPE:
10035       if (TREE_CODE (arg) != REFERENCE_TYPE)
10036         return 1;
10037       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10038                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
10039
10040     case ARRAY_TYPE:
10041       if (TREE_CODE (arg) != ARRAY_TYPE)
10042         return 1;
10043       if ((TYPE_DOMAIN (parm) == NULL_TREE)
10044           != (TYPE_DOMAIN (arg) == NULL_TREE))
10045         return 1;
10046       if (TYPE_DOMAIN (parm) != NULL_TREE)
10047         {
10048           tree parm_max;
10049           tree arg_max;
10050
10051           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
10052           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
10053
10054           /* Our representation of array types uses "N - 1" as the
10055              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
10056              not an integer constant.  */
10057           if (TREE_CODE (parm_max) == MINUS_EXPR)
10058             {
10059               arg_max = fold (build2 (PLUS_EXPR, 
10060                                       integer_type_node,
10061                                       arg_max,
10062                                       TREE_OPERAND (parm_max, 1)));
10063               parm_max = TREE_OPERAND (parm_max, 0);
10064             }
10065
10066           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
10067             return 1;
10068         }
10069       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10070                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
10071
10072     case REAL_TYPE:
10073     case COMPLEX_TYPE:
10074     case VECTOR_TYPE:
10075     case INTEGER_TYPE:
10076     case BOOLEAN_TYPE:
10077     case ENUMERAL_TYPE:
10078     case VOID_TYPE:
10079       if (TREE_CODE (arg) != TREE_CODE (parm))
10080         return 1;
10081       
10082       /* We have already checked cv-qualification at the top of the
10083          function.  */
10084       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
10085         return 1;
10086
10087       /* As far as unification is concerned, this wins.  Later checks
10088          will invalidate it if necessary.  */
10089       return 0;
10090
10091       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
10092       /* Type INTEGER_CST can come from ordinary constant template args.  */
10093     case INTEGER_CST:
10094       while (TREE_CODE (arg) == NOP_EXPR)
10095         arg = TREE_OPERAND (arg, 0);
10096
10097       if (TREE_CODE (arg) != INTEGER_CST)
10098         return 1;
10099       return !tree_int_cst_equal (parm, arg);
10100
10101     case TREE_VEC:
10102       {
10103         int i;
10104         if (TREE_CODE (arg) != TREE_VEC)
10105           return 1;
10106         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10107           return 1;
10108         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10109           if (unify (tparms, targs,
10110                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10111                      UNIFY_ALLOW_NONE))
10112             return 1;
10113         return 0;
10114       }
10115
10116     case RECORD_TYPE:
10117     case UNION_TYPE:
10118       if (TREE_CODE (arg) != TREE_CODE (parm))
10119         return 1;
10120   
10121       if (TYPE_PTRMEMFUNC_P (parm))
10122         {
10123           if (!TYPE_PTRMEMFUNC_P (arg))
10124             return 1;
10125
10126           return unify (tparms, targs, 
10127                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
10128                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
10129                         strict);
10130         }
10131
10132       if (CLASSTYPE_TEMPLATE_INFO (parm))
10133         {
10134           tree t = NULL_TREE;
10135
10136           if (strict_in & UNIFY_ALLOW_DERIVED)
10137             {
10138               /* First, we try to unify the PARM and ARG directly.  */
10139               t = try_class_unification (tparms, targs,
10140                                          parm, arg);
10141
10142               if (!t)
10143                 {
10144                   /* Fallback to the special case allowed in
10145                      [temp.deduct.call]:
10146                      
10147                        If P is a class, and P has the form
10148                        template-id, then A can be a derived class of
10149                        the deduced A.  Likewise, if P is a pointer to
10150                        a class of the form template-id, A can be a
10151                        pointer to a derived class pointed to by the
10152                        deduced A.  */
10153                   t = get_template_base (tparms, targs, parm, arg);
10154
10155                   if (!t)
10156                     return 1;
10157                 }
10158             }
10159           else if (CLASSTYPE_TEMPLATE_INFO (arg) 
10160                    && (CLASSTYPE_TI_TEMPLATE (parm) 
10161                        == CLASSTYPE_TI_TEMPLATE (arg)))
10162             /* Perhaps PARM is something like S<U> and ARG is S<int>.
10163                Then, we should unify `int' and `U'.  */
10164             t = arg;
10165           else
10166             /* There's no chance of unification succeeding.  */
10167             return 1;
10168
10169           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10170                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10171         }
10172       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10173         return 1;
10174       return 0;
10175
10176     case METHOD_TYPE:
10177     case FUNCTION_TYPE:
10178       if (TREE_CODE (arg) != TREE_CODE (parm))
10179         return 1;
10180
10181       if (unify (tparms, targs, TREE_TYPE (parm),
10182                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10183         return 1;
10184       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10185                                     TYPE_ARG_TYPES (arg), 1, 
10186                                     DEDUCE_EXACT, 0, -1);
10187
10188     case OFFSET_TYPE:
10189       if (TREE_CODE (arg) != OFFSET_TYPE)
10190         return 1;
10191       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10192                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10193         return 1;
10194       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10195                     strict);
10196
10197     case CONST_DECL:
10198       if (DECL_TEMPLATE_PARM_P (parm))
10199         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10200       if (arg != decl_constant_value (parm)) 
10201         return 1;
10202       return 0;
10203
10204     case FIELD_DECL:
10205     case TEMPLATE_DECL:
10206       /* Matched cases are handled by the ARG == PARM test above.  */
10207       return 1;
10208
10209     default:
10210       gcc_assert (EXPR_P (parm));
10211       
10212       /* We must be looking at an expression.  This can happen with
10213          something like: 
10214            
10215            template <int I>
10216            void foo(S<I>, S<I + 2>);
10217
10218          This is a "nondeduced context":
10219
10220            [deduct.type]
10221            
10222            The nondeduced contexts are:
10223
10224            --A type that is a template-id in which one or more of
10225              the template-arguments is an expression that references
10226              a template-parameter.  
10227
10228          In these cases, we assume deduction succeeded, but don't
10229          actually infer any unifications.  */
10230
10231       if (!uses_template_parms (parm)
10232           && !template_args_equal (parm, arg))
10233         return 1;
10234       else
10235         return 0;
10236     }
10237 }
10238 \f
10239 /* Note that DECL can be defined in this translation unit, if
10240    required.  */
10241
10242 static void
10243 mark_definable (tree decl)
10244 {
10245   tree clone;
10246   DECL_NOT_REALLY_EXTERN (decl) = 1;
10247   FOR_EACH_CLONE (clone, decl)
10248     DECL_NOT_REALLY_EXTERN (clone) = 1;
10249 }
10250
10251 /* Called if RESULT is explicitly instantiated, or is a member of an
10252    explicitly instantiated class.  */
10253
10254 void
10255 mark_decl_instantiated (tree result, int extern_p)
10256 {
10257   SET_DECL_EXPLICIT_INSTANTIATION (result);
10258
10259   /* If this entity has already been written out, it's too late to
10260      make any modifications.  */
10261   if (TREE_ASM_WRITTEN (result))
10262     return;
10263
10264   if (TREE_CODE (result) != FUNCTION_DECL)
10265     /* The TREE_PUBLIC flag for function declarations will have been
10266        set correctly by tsubst.  */
10267     TREE_PUBLIC (result) = 1;
10268
10269   /* This might have been set by an earlier implicit instantiation.  */
10270   DECL_COMDAT (result) = 0;
10271
10272   if (extern_p)
10273     DECL_NOT_REALLY_EXTERN (result) = 0;
10274   else
10275     {
10276       mark_definable (result);
10277       /* Always make artificials weak.  */
10278       if (DECL_ARTIFICIAL (result) && flag_weak)
10279         comdat_linkage (result);
10280       /* For WIN32 we also want to put explicit instantiations in
10281          linkonce sections.  */
10282       else if (TREE_PUBLIC (result))
10283         maybe_make_one_only (result);
10284     }
10285   
10286   /* If EXTERN_P, then this function will not be emitted -- unless
10287      followed by an explicit instantiation, at which point its linkage
10288      will be adjusted.  If !EXTERN_P, then this function will be
10289      emitted here.  In neither circumstance do we want
10290      import_export_decl to adjust the linkage.  */
10291   DECL_INTERFACE_KNOWN (result) = 1; 
10292 }
10293
10294 /* Given two function templates PAT1 and PAT2, return:
10295
10296    DEDUCE should be DEDUCE_EXACT or DEDUCE_ORDER.
10297    
10298    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10299    -1 if PAT2 is more specialized than PAT1.
10300    0 if neither is more specialized.
10301
10302    LEN is passed through to fn_type_unification.  */
10303    
10304 int
10305 more_specialized (tree pat1, tree pat2, int deduce, int len)
10306 {
10307   tree targs;
10308   int winner = 0;
10309
10310   /* If template argument deduction succeeds, we substitute the
10311      resulting arguments into non-deduced contexts.  While doing that,
10312      we must be aware that we may encounter dependent types.  */
10313   ++processing_template_decl;
10314   targs = get_bindings_real (pat1, DECL_TEMPLATE_RESULT (pat2),
10315                              NULL_TREE, 0, deduce, len);
10316   if (targs)
10317     --winner;
10318
10319   targs = get_bindings_real (pat2, DECL_TEMPLATE_RESULT (pat1),
10320                              NULL_TREE, 0, deduce, len);
10321   if (targs)
10322     ++winner;
10323   --processing_template_decl;
10324
10325   return winner;
10326 }
10327
10328 /* Given two class template specialization list nodes PAT1 and PAT2, return:
10329
10330    1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10331    -1 if PAT2 is more specialized than PAT1.
10332    0 if neither is more specialized.
10333
10334    FULL_ARGS is the full set of template arguments that triggers this
10335    partial ordering.  */
10336    
10337 int
10338 more_specialized_class (tree pat1, tree pat2, tree full_args)
10339 {
10340   tree targs;
10341   int winner = 0;
10342
10343   /* Just like what happens for functions, if we are ordering between 
10344      different class template specializations, we may encounter dependent
10345      types in the arguments, and we need our dependency check functions
10346      to behave correctly.  */
10347   ++processing_template_decl;
10348   targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
10349                               add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
10350   if (targs)
10351     --winner;
10352
10353   targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
10354                               add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
10355   if (targs)
10356     ++winner;
10357   --processing_template_decl;
10358
10359   return winner;
10360 }
10361
10362 /* Return the template arguments that will produce the function signature
10363    DECL from the function template FN, with the explicit template
10364    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is 1, the return type must
10365    also match.  Return NULL_TREE if no satisfactory arguments could be
10366    found.  DEDUCE and LEN are passed through to fn_type_unification.  */
10367    
10368 static tree
10369 get_bindings_real (tree fn, 
10370                    tree decl, 
10371                    tree explicit_args, 
10372                    int check_rettype, 
10373                    int deduce, 
10374                    int len)
10375 {
10376   int ntparms = DECL_NTPARMS (fn);
10377   tree targs = make_tree_vec (ntparms);
10378   tree decl_type;
10379   tree decl_arg_types;
10380   int i;
10381
10382   /* Substitute the explicit template arguments into the type of DECL.
10383      The call to fn_type_unification will handle substitution into the
10384      FN.  */
10385   decl_type = TREE_TYPE (decl);
10386   if (explicit_args && uses_template_parms (decl_type))
10387     {
10388       tree tmpl;
10389       tree converted_args;
10390
10391       if (DECL_TEMPLATE_INFO (decl))
10392         tmpl = DECL_TI_TEMPLATE (decl);
10393       else
10394         /* We can get here for some invalid specializations.  */
10395         return NULL_TREE;
10396
10397       converted_args
10398         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10399                                   explicit_args, NULL_TREE,
10400                                   tf_none, /*require_all_arguments=*/0));
10401       if (converted_args == error_mark_node)
10402         return NULL_TREE;
10403       
10404       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE); 
10405       if (decl_type == error_mark_node)
10406         return NULL_TREE;
10407     }
10408
10409   decl_arg_types = TYPE_ARG_TYPES (decl_type);
10410   /* Never do unification on the 'this' parameter.  */
10411   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10412     decl_arg_types = TREE_CHAIN (decl_arg_types);
10413
10414   i = fn_type_unification (fn, explicit_args, targs, 
10415                            decl_arg_types,
10416                            (check_rettype || DECL_CONV_FN_P (fn)
10417                             ? TREE_TYPE (decl_type) : NULL_TREE),
10418                            deduce, len);
10419
10420   if (i != 0)
10421     return NULL_TREE;
10422
10423   return targs;
10424 }
10425
10426 /* For most uses, we want to check the return type.  */
10427
10428 static tree 
10429 get_bindings (tree fn, tree decl, tree explicit_args)
10430 {
10431   return get_bindings_real (fn, decl, explicit_args, 1, DEDUCE_EXACT, -1);
10432 }
10433
10434 /* But for resolve_overloaded_unification, we only care about the parameter
10435    types.  */
10436
10437 static tree
10438 get_bindings_overload (tree fn, tree decl, tree explicit_args)
10439 {
10440   return get_bindings_real (fn, decl, explicit_args, 0, DEDUCE_EXACT, -1);
10441 }
10442
10443 /* Return the innermost template arguments that, when applied to a
10444    template specialization whose innermost template parameters are
10445    TPARMS, and whose specialization arguments are PARMS, yield the
10446    ARGS.  
10447
10448    For example, suppose we have:
10449
10450      template <class T, class U> struct S {};
10451      template <class T> struct S<T*, int> {};
10452
10453    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
10454    {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10455    int}.  The resulting vector will be {double}, indicating that `T'
10456    is bound to `double'.  */
10457
10458 static tree
10459 get_class_bindings (tree tparms, tree parms, tree args)
10460 {
10461   int i, ntparms = TREE_VEC_LENGTH (tparms);
10462   tree vec = make_tree_vec (ntparms);
10463
10464   if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10465              UNIFY_ALLOW_NONE))
10466     return NULL_TREE;
10467
10468   for (i =  0; i < ntparms; ++i)
10469     if (! TREE_VEC_ELT (vec, i))
10470       return NULL_TREE;
10471
10472   if (verify_class_unification (vec, parms, args))
10473     return NULL_TREE;
10474
10475   return vec;
10476 }
10477
10478 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10479    Pick the most specialized template, and return the corresponding
10480    instantiation, or if there is no corresponding instantiation, the
10481    template itself.  If there is no most specialized template,
10482    error_mark_node is returned.  If there are no templates at all,
10483    NULL_TREE is returned.  */
10484
10485 tree
10486 most_specialized_instantiation (tree instantiations)
10487 {
10488   tree fn, champ;
10489   int fate;
10490
10491   if (!instantiations)
10492     return NULL_TREE;
10493
10494   champ = instantiations;
10495   for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10496     {
10497       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10498                                DEDUCE_EXACT, -1);
10499       if (fate == 1)
10500         ;
10501       else
10502         {
10503           if (fate == 0)
10504             {
10505               fn = TREE_CHAIN (fn);
10506               if (! fn)
10507                 return error_mark_node;
10508             }
10509           champ = fn;
10510         }
10511     }
10512
10513   for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
10514     {
10515       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10516                                DEDUCE_EXACT, -1);
10517       if (fate != 1)
10518         return error_mark_node;
10519     }
10520
10521   return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10522 }
10523
10524 /* Return the most specialized of the list of templates in FNS that can
10525    produce an instantiation matching DECL, given the explicit template
10526    arguments EXPLICIT_ARGS.  */
10527
10528 static tree
10529 most_specialized (tree fns, tree decl, tree explicit_args)
10530 {
10531   tree candidates = NULL_TREE;
10532   tree fn, args;
10533
10534   for (fn = fns; fn; fn = TREE_CHAIN (fn))
10535     {
10536       tree candidate = TREE_VALUE (fn);
10537
10538       args = get_bindings (candidate, decl, explicit_args);
10539       if (args)
10540         candidates = tree_cons (NULL_TREE, candidate, candidates);
10541     }
10542
10543   return most_specialized_instantiation (candidates);
10544 }
10545
10546 /* If DECL is a specialization of some template, return the most
10547    general such template.  Otherwise, returns NULL_TREE.
10548
10549    For example, given:
10550
10551      template <class T> struct S { template <class U> void f(U); };
10552
10553    if TMPL is `template <class U> void S<int>::f(U)' this will return
10554    the full template.  This function will not trace past partial
10555    specializations, however.  For example, given in addition:
10556
10557      template <class T> struct S<T*> { template <class U> void f(U); };
10558
10559    if TMPL is `template <class U> void S<int*>::f(U)' this will return
10560    `template <class T> template <class U> S<T*>::f(U)'.  */
10561
10562 tree
10563 most_general_template (tree decl)
10564 {
10565   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10566      an immediate specialization.  */
10567   if (TREE_CODE (decl) == FUNCTION_DECL)
10568     {
10569       if (DECL_TEMPLATE_INFO (decl)) {
10570         decl = DECL_TI_TEMPLATE (decl);
10571
10572         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10573            template friend.  */
10574         if (TREE_CODE (decl) != TEMPLATE_DECL)
10575           return NULL_TREE;
10576       } else
10577         return NULL_TREE;
10578     }
10579
10580   /* Look for more and more general templates.  */
10581   while (DECL_TEMPLATE_INFO (decl))
10582     {
10583       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10584          (See cp-tree.h for details.)  */
10585       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10586         break;
10587
10588       if (CLASS_TYPE_P (TREE_TYPE (decl))
10589           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10590         break;
10591
10592       /* Stop if we run into an explicitly specialized class template.  */
10593       if (!DECL_NAMESPACE_SCOPE_P (decl)
10594           && DECL_CONTEXT (decl)
10595           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10596         break;
10597
10598       decl = DECL_TI_TEMPLATE (decl);
10599     }
10600
10601   return decl;
10602 }
10603
10604 /* Return the most specialized of the class template specializations
10605    of TMPL which can produce an instantiation matching ARGS, or
10606    error_mark_node if the choice is ambiguous.  */
10607
10608 static tree
10609 most_specialized_class (tree tmpl, tree args)
10610 {
10611   tree list = NULL_TREE;
10612   tree t;
10613   tree champ;
10614   int fate;
10615
10616   tmpl = most_general_template (tmpl);
10617   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10618     {
10619       tree spec_args 
10620         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10621       if (spec_args)
10622         {
10623           list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10624           TREE_TYPE (list) = TREE_TYPE (t);
10625         }
10626     }
10627
10628   if (! list)
10629     return NULL_TREE;
10630
10631   t = list;
10632   champ = t;
10633   t = TREE_CHAIN (t);
10634   for (; t; t = TREE_CHAIN (t))
10635     {
10636       fate = more_specialized_class (champ, t, args);
10637       if (fate == 1)
10638         ;
10639       else
10640         {
10641           if (fate == 0)
10642             {
10643               t = TREE_CHAIN (t);
10644               if (! t)
10645                 return error_mark_node;
10646             }
10647           champ = t;
10648         }
10649     }
10650
10651   for (t = list; t && t != champ; t = TREE_CHAIN (t))
10652     {
10653       fate = more_specialized_class (champ, t, args);
10654       if (fate != 1)
10655         return error_mark_node;
10656     }
10657
10658   return champ;
10659 }
10660
10661 /* Explicitly instantiate DECL.  */
10662
10663 void
10664 do_decl_instantiation (tree decl, tree storage)
10665 {
10666   tree result = NULL_TREE;
10667   int extern_p = 0;
10668
10669   if (!decl)
10670     /* An error occurred, for which grokdeclarator has already issued
10671        an appropriate message.  */
10672     return;
10673   else if (! DECL_LANG_SPECIFIC (decl))
10674     {
10675       error ("explicit instantiation of non-template %q#D", decl);
10676       return;
10677     }
10678   else if (TREE_CODE (decl) == VAR_DECL)
10679     {
10680       /* There is an asymmetry here in the way VAR_DECLs and
10681          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
10682          the latter, the DECL we get back will be marked as a
10683          template instantiation, and the appropriate
10684          DECL_TEMPLATE_INFO will be set up.  This does not happen for
10685          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
10686          should handle VAR_DECLs as it currently handles
10687          FUNCTION_DECLs.  */
10688       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10689       if (!result || TREE_CODE (result) != VAR_DECL)
10690         {
10691           error ("no matching template for %qD found", decl);
10692           return;
10693         }
10694     }
10695   else if (TREE_CODE (decl) != FUNCTION_DECL)
10696     {
10697       error ("explicit instantiation of %q#D", decl);
10698       return;
10699     }
10700   else
10701     result = decl;
10702
10703   /* Check for various error cases.  Note that if the explicit
10704      instantiation is valid the RESULT will currently be marked as an
10705      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10706      until we get here.  */
10707
10708   if (DECL_TEMPLATE_SPECIALIZATION (result))
10709     {
10710       /* DR 259 [temp.spec].
10711
10712          Both an explicit instantiation and a declaration of an explicit
10713          specialization shall not appear in a program unless the explicit
10714          instantiation follows a declaration of the explicit specialization.
10715
10716          For a given set of template parameters, if an explicit
10717          instantiation of a template appears after a declaration of an
10718          explicit specialization for that template, the explicit
10719          instantiation has no effect.  */
10720       return;
10721     }
10722   else if (DECL_EXPLICIT_INSTANTIATION (result))
10723     {
10724       /* [temp.spec]
10725
10726          No program shall explicitly instantiate any template more
10727          than once.  
10728
10729          We check DECL_NOT_REALLY_EXTERN so as not to complain when
10730          the first instantiation was `extern' and the second is not,
10731          and EXTERN_P for the opposite case.  */
10732       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
10733         pedwarn ("duplicate explicit instantiation of %q#D", result);
10734       /* If an "extern" explicit instantiation follows an ordinary
10735          explicit instantiation, the template is instantiated.  */
10736       if (extern_p)
10737         return;
10738     }
10739   else if (!DECL_IMPLICIT_INSTANTIATION (result))
10740     {
10741       error ("no matching template for %qD found", result);
10742       return;
10743     }
10744   else if (!DECL_TEMPLATE_INFO (result))
10745     {
10746       pedwarn ("explicit instantiation of non-template %q#D", result);
10747       return;
10748     }
10749
10750   if (storage == NULL_TREE)
10751     ;
10752   else if (storage == ridpointers[(int) RID_EXTERN])
10753     {
10754       if (pedantic && !in_system_header)
10755         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
10756                  "instantiations");
10757       extern_p = 1;
10758     }
10759   else
10760     error ("storage class %qD applied to template instantiation", storage);
10761
10762   mark_decl_instantiated (result, extern_p);
10763   if (! extern_p)
10764     instantiate_decl (result, /*defer_ok=*/1, /*undefined_ok=*/0);
10765 }
10766
10767 void
10768 mark_class_instantiated (tree t, int extern_p)
10769 {
10770   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
10771   SET_CLASSTYPE_INTERFACE_KNOWN (t);
10772   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
10773   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
10774   if (! extern_p)
10775     {
10776       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
10777       rest_of_type_compilation (t, 1);
10778     }
10779 }     
10780
10781 /* Called from do_type_instantiation through binding_table_foreach to
10782    do recursive instantiation for the type bound in ENTRY.  */
10783 static void
10784 bt_instantiate_type_proc (binding_entry entry, void *data)
10785 {
10786   tree storage = *(tree *) data;
10787
10788   if (IS_AGGR_TYPE (entry->type)
10789       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
10790     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
10791 }
10792
10793 /* Called from do_type_instantiation to instantiate a member
10794    (a member function or a static member variable) of an
10795    explicitly instantiated class template.  */
10796 static void
10797 instantiate_class_member (tree decl, int extern_p)
10798 {
10799   mark_decl_instantiated (decl, extern_p);
10800   if (! extern_p)
10801     instantiate_decl (decl, /*defer_ok=*/1, /* undefined_ok=*/1);
10802 }
10803
10804 /* Perform an explicit instantiation of template class T.  STORAGE, if
10805    non-null, is the RID for extern, inline or static.  COMPLAIN is
10806    nonzero if this is called from the parser, zero if called recursively,
10807    since the standard is unclear (as detailed below).  */
10808  
10809 void
10810 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
10811 {
10812   int extern_p = 0;
10813   int nomem_p = 0;
10814   int static_p = 0;
10815   int previous_instantiation_extern_p = 0;
10816
10817   if (TREE_CODE (t) == TYPE_DECL)
10818     t = TREE_TYPE (t);
10819
10820   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
10821     {
10822       error ("explicit instantiation of non-template type %qT", t);
10823       return;
10824     }
10825
10826   complete_type (t);
10827
10828   if (!COMPLETE_TYPE_P (t))
10829     {
10830       if (complain & tf_error)
10831         error ("explicit instantiation of %q#T before definition of template",
10832                t);
10833       return;
10834     }
10835
10836   if (storage != NULL_TREE)
10837     {
10838       if (pedantic && !in_system_header)
10839         pedwarn("ISO C++ forbids the use of %qE on explicit instantiations", 
10840                 storage);
10841
10842       if (storage == ridpointers[(int) RID_INLINE])
10843         nomem_p = 1;
10844       else if (storage == ridpointers[(int) RID_EXTERN])
10845         extern_p = 1;
10846       else if (storage == ridpointers[(int) RID_STATIC])
10847         static_p = 1;
10848       else
10849         {
10850           error ("storage class %qD applied to template instantiation",
10851                  storage);
10852           extern_p = 0;
10853         }
10854     }
10855
10856   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10857     {
10858       /* DR 259 [temp.spec].
10859
10860          Both an explicit instantiation and a declaration of an explicit
10861          specialization shall not appear in a program unless the explicit
10862          instantiation follows a declaration of the explicit specialization.
10863
10864          For a given set of template parameters, if an explicit
10865          instantiation of a template appears after a declaration of an
10866          explicit specialization for that template, the explicit
10867          instantiation has no effect.  */
10868       return;
10869     }
10870   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
10871     {
10872       /* [temp.spec]
10873
10874          No program shall explicitly instantiate any template more
10875          than once.  
10876
10877          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
10878          instantiation was `extern'.  If EXTERN_P then the second is.
10879          These cases are OK.  */
10880       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
10881
10882       if (!previous_instantiation_extern_p && !extern_p
10883           && (complain & tf_error))
10884         pedwarn ("duplicate explicit instantiation of %q#T", t);
10885       
10886       /* If we've already instantiated the template, just return now.  */
10887       if (!CLASSTYPE_INTERFACE_ONLY (t))
10888         return;
10889     }
10890
10891   mark_class_instantiated (t, extern_p);
10892
10893   if (nomem_p)
10894     return;
10895
10896   {
10897     tree tmp;
10898
10899     /* In contrast to implicit instantiation, where only the
10900        declarations, and not the definitions, of members are
10901        instantiated, we have here:
10902
10903          [temp.explicit]
10904
10905          The explicit instantiation of a class template specialization
10906          implies the instantiation of all of its members not
10907          previously explicitly specialized in the translation unit
10908          containing the explicit instantiation.  
10909
10910        Of course, we can't instantiate member template classes, since
10911        we don't have any arguments for them.  Note that the standard
10912        is unclear on whether the instantiation of the members are
10913        *explicit* instantiations or not.  However, the most natural
10914        interpretation is that it should be an explicit instantiation.  */
10915
10916     if (! static_p)
10917       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
10918         if (TREE_CODE (tmp) == FUNCTION_DECL
10919             && DECL_TEMPLATE_INSTANTIATION (tmp))
10920           instantiate_class_member (tmp, extern_p);
10921
10922     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
10923       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
10924         instantiate_class_member (tmp, extern_p);
10925
10926     if (CLASSTYPE_NESTED_UTDS (t))
10927       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
10928                              bt_instantiate_type_proc, &storage);
10929   }
10930 }
10931
10932 /* Given a function DECL, which is a specialization of TMPL, modify
10933    DECL to be a re-instantiation of TMPL with the same template
10934    arguments.  TMPL should be the template into which tsubst'ing
10935    should occur for DECL, not the most general template.
10936
10937    One reason for doing this is a scenario like this:
10938
10939      template <class T>
10940      void f(const T&, int i);
10941
10942      void g() { f(3, 7); }
10943
10944      template <class T>
10945      void f(const T& t, const int i) { }
10946
10947    Note that when the template is first instantiated, with
10948    instantiate_template, the resulting DECL will have no name for the
10949    first parameter, and the wrong type for the second.  So, when we go
10950    to instantiate the DECL, we regenerate it.  */
10951
10952 static void
10953 regenerate_decl_from_template (tree decl, tree tmpl)
10954 {
10955   /* The arguments used to instantiate DECL, from the most general
10956      template.  */
10957   tree args;
10958   tree code_pattern;
10959
10960   args = DECL_TI_ARGS (decl);
10961   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
10962
10963   /* Make sure that we can see identifiers, and compute access
10964      correctly.  */
10965   push_access_scope (decl);
10966
10967   if (TREE_CODE (decl) == FUNCTION_DECL)
10968     {
10969       tree decl_parm;
10970       tree pattern_parm;
10971       tree specs;
10972       int args_depth;
10973       int parms_depth;
10974       
10975       args_depth = TMPL_ARGS_DEPTH (args);
10976       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)); 
10977       if (args_depth > parms_depth)
10978         args = get_innermost_template_args (args, parms_depth);
10979
10980       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
10981                                               args, tf_error, NULL_TREE);
10982       if (specs)
10983         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
10984                                                     specs);
10985
10986       /* Merge parameter declarations.  */
10987       decl_parm = skip_artificial_parms_for (decl, 
10988                                              DECL_ARGUMENTS (decl));
10989       pattern_parm 
10990         = skip_artificial_parms_for (code_pattern,
10991                                      DECL_ARGUMENTS (code_pattern));
10992       while (decl_parm)
10993         {
10994           tree parm_type;
10995
10996           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
10997             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
10998           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
10999                               NULL_TREE);
11000           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
11001             TREE_TYPE (decl_parm) = parm_type;
11002           decl_parm = TREE_CHAIN (decl_parm);
11003           pattern_parm = TREE_CHAIN (pattern_parm);
11004         }
11005
11006       /* Merge additional specifiers from the CODE_PATTERN.  */
11007       if (DECL_DECLARED_INLINE_P (code_pattern)
11008           && !DECL_DECLARED_INLINE_P (decl))
11009         DECL_DECLARED_INLINE_P (decl) = 1;
11010       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
11011         DECL_INLINE (decl) = 1;
11012     }
11013   else if (TREE_CODE (decl) == VAR_DECL)
11014     {
11015       if (!DECL_INITIALIZED_IN_CLASS_P (decl)
11016           && DECL_INITIAL (code_pattern))
11017         DECL_INITIAL (decl) = 
11018           tsubst_expr (DECL_INITIAL (code_pattern), args, 
11019                        tf_error, DECL_TI_TEMPLATE (decl));
11020     }
11021   else
11022     gcc_unreachable ();
11023
11024   pop_access_scope (decl);
11025 }
11026
11027 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
11028    substituted to get DECL.  */
11029
11030 tree
11031 template_for_substitution (tree decl)
11032 {
11033   tree tmpl = DECL_TI_TEMPLATE (decl);
11034
11035   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
11036      for the instantiation.  This is not always the most general
11037      template.  Consider, for example:
11038
11039         template <class T>
11040         struct S { template <class U> void f();
11041                    template <> void f<int>(); };
11042
11043      and an instantiation of S<double>::f<int>.  We want TD to be the
11044      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
11045   while (/* An instantiation cannot have a definition, so we need a
11046             more general template.  */
11047          DECL_TEMPLATE_INSTANTIATION (tmpl)
11048            /* We must also deal with friend templates.  Given:
11049
11050                 template <class T> struct S { 
11051                   template <class U> friend void f() {};
11052                 };
11053
11054               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
11055               so far as the language is concerned, but that's still
11056               where we get the pattern for the instantiation from.  On
11057               other hand, if the definition comes outside the class, say:
11058
11059                 template <class T> struct S { 
11060                   template <class U> friend void f();
11061                 };
11062                 template <class U> friend void f() {}
11063
11064               we don't need to look any further.  That's what the check for
11065               DECL_INITIAL is for.  */
11066           || (TREE_CODE (decl) == FUNCTION_DECL
11067               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
11068               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
11069     {
11070       /* The present template, TD, should not be a definition.  If it
11071          were a definition, we should be using it!  Note that we
11072          cannot restructure the loop to just keep going until we find
11073          a template with a definition, since that might go too far if
11074          a specialization was declared, but not defined.  */
11075       gcc_assert (TREE_CODE (decl) != VAR_DECL
11076                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
11077       
11078       /* Fetch the more general template.  */
11079       tmpl = DECL_TI_TEMPLATE (tmpl);
11080     }
11081
11082   return tmpl;
11083 }
11084
11085 /* Produce the definition of D, a _DECL generated from a template.  If
11086    DEFER_OK is nonzero, then we don't have to actually do the
11087    instantiation now; we just have to do it sometime.  Normally it is
11088    an error if this is an explicit instantiation but D is undefined.
11089    If UNDEFINED_OK is nonzero, then instead we treat it as an implicit
11090    instantiation.  UNDEFINED_OK is nonzero only if we are being used
11091    to instantiate the members of an explicitly instantiated class
11092    template.  */
11093
11094
11095 tree
11096 instantiate_decl (tree d, int defer_ok, int undefined_ok)
11097 {
11098   tree tmpl = DECL_TI_TEMPLATE (d);
11099   tree gen_args;
11100   tree args;
11101   tree td;
11102   tree code_pattern;
11103   tree spec;
11104   tree gen_tmpl;
11105   int pattern_defined;
11106   int need_push;
11107   location_t saved_loc = input_location;
11108   
11109   /* This function should only be used to instantiate templates for
11110      functions and static member variables.  */
11111   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11112               || TREE_CODE (d) == VAR_DECL);
11113
11114   /* Variables are never deferred; if instantiation is required, they
11115      are instantiated right away.  That allows for better code in the
11116      case that an expression refers to the value of the variable --
11117      if the variable has a constant value the referring expression can
11118      take advantage of that fact.  */
11119   if (TREE_CODE (d) == VAR_DECL)
11120     defer_ok = 0;
11121
11122   /* Don't instantiate cloned functions.  Instead, instantiate the
11123      functions they cloned.  */
11124   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11125     d = DECL_CLONED_FUNCTION (d);
11126
11127   if (DECL_TEMPLATE_INSTANTIATED (d))
11128     /* D has already been instantiated.  It might seem reasonable to
11129        check whether or not D is an explicit instantiation, and, if so,
11130        stop here.  But when an explicit instantiation is deferred
11131        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11132        is set, even though we still need to do the instantiation.  */
11133     return d;
11134
11135   /* If we already have a specialization of this declaration, then
11136      there's no reason to instantiate it.  Note that
11137      retrieve_specialization gives us both instantiations and
11138      specializations, so we must explicitly check
11139      DECL_TEMPLATE_SPECIALIZATION.  */
11140   gen_tmpl = most_general_template (tmpl);
11141   gen_args = DECL_TI_ARGS (d);
11142   spec = retrieve_specialization (gen_tmpl, gen_args,
11143                                   /*class_specializations_p=*/false);
11144   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11145     return spec;
11146
11147   /* This needs to happen before any tsubsting.  */
11148   if (! push_tinst_level (d))
11149     return d;
11150
11151   timevar_push (TV_PARSE);
11152
11153   /* We may be in the middle of deferred access check.  Disable it now.  */
11154   push_deferring_access_checks (dk_no_deferred);
11155
11156   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11157      for the instantiation.  */
11158   td = template_for_substitution (d);
11159   code_pattern = DECL_TEMPLATE_RESULT (td);
11160
11161   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11162       || DECL_TEMPLATE_SPECIALIZATION (td))
11163     /* In the case of a friend template whose definition is provided
11164        outside the class, we may have too many arguments.  Drop the
11165        ones we don't need.  The same is true for specializations.  */
11166     args = get_innermost_template_args
11167       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
11168   else
11169     args = gen_args;
11170
11171   if (TREE_CODE (d) == FUNCTION_DECL)
11172     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11173   else
11174     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11175   /* Unless an explicit instantiation directive has already determined
11176      the linkage of D, remember that a definition is available for
11177      this entity.  */
11178   if (pattern_defined 
11179       && !DECL_INTERFACE_KNOWN (d)
11180       && !DECL_NOT_REALLY_EXTERN (d))
11181     mark_definable (d);
11182
11183   input_location = DECL_SOURCE_LOCATION (d);
11184
11185   if (! pattern_defined && DECL_EXPLICIT_INSTANTIATION (d) && undefined_ok)
11186     {
11187       DECL_NOT_REALLY_EXTERN (d) = 0;
11188       SET_DECL_IMPLICIT_INSTANTIATION (d);
11189     }
11190
11191   if (!defer_ok)
11192     {
11193       /* Recheck the substitutions to obtain any warning messages
11194          about ignoring cv qualifiers.  */
11195       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11196       tree type = TREE_TYPE (gen);
11197
11198       /* Make sure that we can see identifiers, and compute access
11199          correctly.  D is already the target FUNCTION_DECL with the
11200          right context.  */
11201       push_access_scope (d);
11202
11203       if (TREE_CODE (gen) == FUNCTION_DECL)
11204         {
11205           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11206           tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11207                   tf_error | tf_warning, d);
11208           /* Don't simply tsubst the function type, as that will give
11209              duplicate warnings about poor parameter qualifications.
11210              The function arguments are the same as the decl_arguments
11211              without the top level cv qualifiers.  */
11212           type = TREE_TYPE (type);
11213         }
11214       tsubst (type, gen_args, tf_error | tf_warning, d);
11215
11216       pop_access_scope (d);
11217     }
11218   
11219   /* We should have set up DECL_INITIAL in instantiate_class_template
11220      for in-class definitions of static data members.  */
11221   gcc_assert (!(TREE_CODE (d) == VAR_DECL 
11222                 && DECL_INITIALIZED_IN_CLASS_P (d)
11223                 && DECL_INITIAL (d) == NULL_TREE));
11224
11225   /* Do not instantiate templates that we know will be defined
11226      elsewhere.  */
11227   if (DECL_INTERFACE_KNOWN (d)
11228       && DECL_REALLY_EXTERN (d)
11229       && ! (TREE_CODE (d) == FUNCTION_DECL 
11230             && DECL_INLINE (d)))
11231     goto out;
11232   /* Defer all other templates, unless we have been explicitly
11233      forbidden from doing so.  We restore the source position here
11234      because it's used by add_pending_template.  */
11235   else if (! pattern_defined || defer_ok)
11236     {
11237       input_location = saved_loc;
11238
11239       if (at_eof && !pattern_defined 
11240           && DECL_EXPLICIT_INSTANTIATION (d))
11241         /* [temp.explicit]
11242
11243            The definition of a non-exported function template, a
11244            non-exported member function template, or a non-exported
11245            member function or static data member of a class template
11246            shall be present in every translation unit in which it is
11247            explicitly instantiated.  */
11248         pedwarn
11249           ("explicit instantiation of %qD but no definition available", d);
11250
11251       add_pending_template (d);
11252       goto out;
11253     }
11254   /* Tell the repository that D is available in this translation unit
11255      -- and see if it is supposed to be instantiated here.  */
11256   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11257     {
11258       /* In a PCH file, despite the fact that the repository hasn't
11259          requested instantiation in the PCH it is still possible that
11260          an instantiation will be required in a file that includes the
11261          PCH.  */
11262       if (pch_file)
11263         add_pending_template (d);
11264       /* Instantiate inline functions so that the inliner can do its
11265          job, even though we'll not be emitting a copy of this
11266          function.  */
11267       if (!(TREE_CODE (d) == FUNCTION_DECL
11268             && flag_inline_trees 
11269             && DECL_DECLARED_INLINE_P (d)))
11270         goto out;
11271     }
11272
11273   need_push = !cfun || !global_bindings_p ();
11274   if (need_push)
11275     push_to_top_level ();
11276
11277   /* Mark D as instantiated so that recursive calls to
11278      instantiate_decl do not try to instantiate it again.  */
11279   DECL_TEMPLATE_INSTANTIATED (d) = 1;
11280
11281   /* Regenerate the declaration in case the template has been modified
11282      by a subsequent redeclaration.  */
11283   regenerate_decl_from_template (d, td);
11284
11285   /* We already set the file and line above.  Reset them now in case
11286      they changed as a result of calling regenerate_decl_from_template.  */
11287   input_location = DECL_SOURCE_LOCATION (d);
11288
11289   if (TREE_CODE (d) == VAR_DECL)
11290     {
11291       /* Clear out DECL_RTL; whatever was there before may not be right
11292          since we've reset the type of the declaration.  */
11293       SET_DECL_RTL (d, NULL_RTX);
11294       DECL_IN_AGGR_P (d) = 0;
11295
11296       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11297          initializer.  That function will defer actual emission until
11298          we have a chance to determine linkage.  */
11299       DECL_EXTERNAL (d) = 0;
11300
11301       /* Enter the scope of D so that access-checking works correctly.  */
11302       push_nested_class (DECL_CONTEXT (d));
11303       cp_finish_decl (d, 
11304                       (!DECL_INITIALIZED_IN_CLASS_P (d) 
11305                        ? DECL_INITIAL (d) : NULL_TREE),
11306                       NULL_TREE, 0);
11307       pop_nested_class ();
11308     }
11309   else if (TREE_CODE (d) == FUNCTION_DECL)
11310     {
11311       htab_t saved_local_specializations;
11312       tree subst_decl;
11313       tree tmpl_parm;
11314       tree spec_parm;
11315
11316       /* Save away the current list, in case we are instantiating one
11317          template from within the body of another.  */
11318       saved_local_specializations = local_specializations;
11319
11320       /* Set up the list of local specializations.  */
11321       local_specializations = htab_create (37, 
11322                                            hash_local_specialization,
11323                                            eq_local_specializations,
11324                                            NULL);
11325
11326       /* Set up context.  */
11327       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
11328
11329       /* Create substitution entries for the parameters.  */
11330       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11331       tmpl_parm = DECL_ARGUMENTS (subst_decl);
11332       spec_parm = DECL_ARGUMENTS (d);
11333       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11334         {
11335           register_local_specialization (spec_parm, tmpl_parm);
11336           spec_parm = skip_artificial_parms_for (d, spec_parm);
11337           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11338         }
11339       while (tmpl_parm)
11340         {
11341           register_local_specialization (spec_parm, tmpl_parm);
11342           tmpl_parm = TREE_CHAIN (tmpl_parm);
11343           spec_parm = TREE_CHAIN (spec_parm);
11344         }
11345       gcc_assert (!spec_parm);
11346
11347       /* Substitute into the body of the function.  */
11348       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11349                    tf_error | tf_warning, tmpl);
11350
11351       /* We don't need the local specializations any more.  */
11352       htab_delete (local_specializations);
11353       local_specializations = saved_local_specializations;
11354
11355       /* Finish the function.  */
11356       d = finish_function (0);
11357       expand_or_defer_fn (d);
11358     }
11359
11360   /* We're not deferring instantiation any more.  */
11361   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11362
11363   if (need_push)
11364     pop_from_top_level ();
11365
11366 out:
11367   input_location = saved_loc;
11368   pop_deferring_access_checks ();
11369   pop_tinst_level ();
11370
11371   timevar_pop (TV_PARSE);
11372
11373   return d;
11374 }
11375
11376 /* Run through the list of templates that we wish we could
11377    instantiate, and instantiate any we can.  RETRIES is the
11378    number of times we retry pending template instantiation.  */
11379
11380 void
11381 instantiate_pending_templates (int retries)
11382 {
11383   tree *t;
11384   tree last = NULL_TREE;
11385   int reconsider;
11386   location_t saved_loc = input_location;
11387
11388   /* Instantiating templates may trigger vtable generation.  This in turn
11389      may require further template instantiations.  We place a limit here
11390      to avoid infinite loop.  */
11391   if (pending_templates && retries >= max_tinst_depth)
11392     {
11393       cp_error_at ("template instantiation depth exceeds maximum of %d"
11394                    " (use -ftemplate-depth-NN to increase the maximum)"
11395                    " instantiating %q+D, possibly from virtual table"
11396                    " generation",
11397                    max_tinst_depth, TREE_VALUE (pending_templates));
11398       return;
11399     }
11400
11401   do 
11402     {
11403       reconsider = 0;
11404
11405       t = &pending_templates;
11406       while (*t)
11407         {
11408           tree instantiation = TREE_VALUE (*t);
11409
11410           reopen_tinst_level (TREE_PURPOSE (*t));
11411
11412           if (TYPE_P (instantiation))
11413             {
11414               tree fn;
11415
11416               if (!COMPLETE_TYPE_P (instantiation))
11417                 {
11418                   instantiate_class_template (instantiation);
11419                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11420                     for (fn = TYPE_METHODS (instantiation); 
11421                          fn;
11422                          fn = TREE_CHAIN (fn))
11423                       if (! DECL_ARTIFICIAL (fn))
11424                         instantiate_decl (fn, /*defer_ok=*/0,
11425                                           /*undefined_ok=*/0);
11426                   if (COMPLETE_TYPE_P (instantiation))
11427                     reconsider = 1;
11428                 }
11429
11430               if (COMPLETE_TYPE_P (instantiation))
11431                 /* If INSTANTIATION has been instantiated, then we don't
11432                    need to consider it again in the future.  */
11433                 *t = TREE_CHAIN (*t);
11434               else
11435                 {
11436                   last = *t;
11437                   t = &TREE_CHAIN (*t);
11438                 }
11439             }
11440           else
11441             {
11442               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11443                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11444                 {
11445                   instantiation = instantiate_decl (instantiation,
11446                                                     /*defer_ok=*/0,
11447                                                     /*undefined_ok=*/0);
11448                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11449                     reconsider = 1;
11450                 }
11451
11452               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11453                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
11454                 /* If INSTANTIATION has been instantiated, then we don't
11455                    need to consider it again in the future.  */
11456                 *t = TREE_CHAIN (*t);
11457               else
11458                 {
11459                   last = *t;
11460                   t = &TREE_CHAIN (*t);
11461                 }
11462             }
11463           tinst_depth = 0;
11464           current_tinst_level = NULL_TREE;
11465         }
11466       last_pending_template = last;
11467     } 
11468   while (reconsider);
11469
11470   input_location = saved_loc;
11471 }
11472
11473 /* Substitute ARGVEC into T, which is a list of initializers for
11474    either base class or a non-static data member.  The TREE_PURPOSEs
11475    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
11476    instantiate_decl.  */
11477
11478 static tree
11479 tsubst_initializer_list (tree t, tree argvec)
11480 {
11481   tree inits = NULL_TREE;
11482
11483   for (; t; t = TREE_CHAIN (t))
11484     {
11485       tree decl;
11486       tree init;
11487       tree val;
11488
11489       decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11490                           NULL_TREE);
11491       decl = expand_member_init (decl);
11492       if (decl && !DECL_P (decl))
11493         in_base_initializer = 1;
11494       
11495       init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11496                           NULL_TREE);
11497       if (!init)
11498         ;
11499       else if (TREE_CODE (init) == TREE_LIST)
11500         for (val = init; val; val = TREE_CHAIN (val))
11501           TREE_VALUE (val) = convert_from_reference (TREE_VALUE (val));
11502       else if (init != void_type_node)
11503         init = convert_from_reference (init);
11504
11505       in_base_initializer = 0;
11506
11507       if (decl)
11508         {
11509           init = build_tree_list (decl, init);
11510           TREE_CHAIN (init) = inits;
11511           inits = init;
11512         }
11513     }
11514   return inits;
11515 }
11516
11517 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
11518
11519 static void
11520 set_current_access_from_decl (tree decl)
11521 {
11522   if (TREE_PRIVATE (decl))
11523     current_access_specifier = access_private_node;
11524   else if (TREE_PROTECTED (decl))
11525     current_access_specifier = access_protected_node;
11526   else
11527     current_access_specifier = access_public_node;
11528 }
11529
11530 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
11531    is the instantiation (which should have been created with
11532    start_enum) and ARGS are the template arguments to use.  */
11533
11534 static void
11535 tsubst_enum (tree tag, tree newtag, tree args)
11536 {
11537   tree e;
11538
11539   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11540     {
11541       tree value;
11542       tree decl;
11543
11544       decl = TREE_VALUE (e);
11545       /* Note that in a template enum, the TREE_VALUE is the
11546          CONST_DECL, not the corresponding INTEGER_CST.  */
11547       value = tsubst_expr (DECL_INITIAL (decl), 
11548                            args, tf_error | tf_warning,
11549                            NULL_TREE);
11550
11551       /* Give this enumeration constant the correct access.  */
11552       set_current_access_from_decl (decl);
11553
11554       /* Actually build the enumerator itself.  */
11555       build_enumerator (DECL_NAME (decl), value, newtag); 
11556     }
11557
11558   finish_enum (newtag);
11559   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11560     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11561 }
11562
11563 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
11564    its type -- but without substituting the innermost set of template
11565    arguments.  So, innermost set of template parameters will appear in
11566    the type.  */
11567
11568 tree 
11569 get_mostly_instantiated_function_type (tree decl)
11570 {
11571   tree fn_type;
11572   tree tmpl;
11573   tree targs;
11574   tree tparms;
11575   int parm_depth;
11576
11577   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11578   targs = DECL_TI_ARGS (decl);
11579   tparms = DECL_TEMPLATE_PARMS (tmpl);
11580   parm_depth = TMPL_PARMS_DEPTH (tparms);
11581
11582   /* There should be as many levels of arguments as there are levels
11583      of parameters.  */
11584   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
11585
11586   fn_type = TREE_TYPE (tmpl);
11587
11588   if (parm_depth == 1)
11589     /* No substitution is necessary.  */
11590     ;
11591   else
11592     {
11593       int i;
11594       tree partial_args;
11595
11596       /* Replace the innermost level of the TARGS with NULL_TREEs to
11597          let tsubst know not to substitute for those parameters.  */
11598       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11599       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11600         SET_TMPL_ARGS_LEVEL (partial_args, i,
11601                              TMPL_ARGS_LEVEL (targs, i));
11602       SET_TMPL_ARGS_LEVEL (partial_args,
11603                            TMPL_ARGS_DEPTH (targs),
11604                            make_tree_vec (DECL_NTPARMS (tmpl)));
11605
11606       /* Make sure that we can see identifiers, and compute access
11607          correctly.  We can just use the context of DECL for the
11608          partial substitution here.  It depends only on outer template
11609          parameters, regardless of whether the innermost level is
11610          specialized or not.  */
11611       push_access_scope (decl);
11612
11613       ++processing_template_decl;
11614       /* Now, do the (partial) substitution to figure out the
11615          appropriate function type.  */
11616       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11617       --processing_template_decl;
11618
11619       /* Substitute into the template parameters to obtain the real
11620          innermost set of parameters.  This step is important if the
11621          innermost set of template parameters contains value
11622          parameters whose types depend on outer template parameters.  */
11623       TREE_VEC_LENGTH (partial_args)--;
11624       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11625
11626       pop_access_scope (decl);
11627     }
11628
11629   return fn_type;
11630 }
11631
11632 /* Return truthvalue if we're processing a template different from
11633    the last one involved in diagnostics.  */
11634 int
11635 problematic_instantiation_changed (void)
11636 {
11637   return last_template_error_tick != tinst_level_tick;
11638 }
11639
11640 /* Remember current template involved in diagnostics.  */
11641 void
11642 record_last_problematic_instantiation (void)
11643 {
11644   last_template_error_tick = tinst_level_tick;
11645 }
11646
11647 tree
11648 current_instantiation (void)
11649 {
11650   return current_tinst_level;
11651 }
11652
11653 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11654    type. Return zero for ok, nonzero for disallowed. Issue error and
11655    warning messages under control of COMPLAIN.  */
11656
11657 static int
11658 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11659 {
11660   if (INTEGRAL_TYPE_P (type))
11661     return 0;
11662   else if (POINTER_TYPE_P (type))
11663     return 0;
11664   else if (TYPE_PTR_TO_MEMBER_P (type))
11665     return 0;
11666   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11667     return 0;
11668   else if (TREE_CODE (type) == TYPENAME_TYPE)
11669     return 0;
11670            
11671   if (complain & tf_error)
11672     error ("%q#T is not a valid type for a template constant parameter", type);
11673   return 1;
11674 }
11675
11676 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11677    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11678
11679 static bool
11680 dependent_type_p_r (tree type)
11681 {
11682   tree scope;
11683
11684   /* [temp.dep.type]
11685
11686      A type is dependent if it is:
11687
11688      -- a template parameter. Template template parameters are types
11689         for us (since TYPE_P holds true for them) so we handle
11690         them here.  */
11691   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM 
11692       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
11693     return true;
11694   /* -- a qualified-id with a nested-name-specifier which contains a
11695         class-name that names a dependent type or whose unqualified-id
11696         names a dependent type.  */
11697   if (TREE_CODE (type) == TYPENAME_TYPE)
11698     return true;
11699   /* -- a cv-qualified type where the cv-unqualified type is
11700         dependent.  */
11701   type = TYPE_MAIN_VARIANT (type);
11702   /* -- a compound type constructed from any dependent type.  */
11703   if (TYPE_PTR_TO_MEMBER_P (type))
11704     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11705             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE 
11706                                            (type)));
11707   else if (TREE_CODE (type) == POINTER_TYPE
11708            || TREE_CODE (type) == REFERENCE_TYPE)
11709     return dependent_type_p (TREE_TYPE (type));
11710   else if (TREE_CODE (type) == FUNCTION_TYPE
11711            || TREE_CODE (type) == METHOD_TYPE)
11712     {
11713       tree arg_type;
11714
11715       if (dependent_type_p (TREE_TYPE (type)))
11716         return true;
11717       for (arg_type = TYPE_ARG_TYPES (type); 
11718            arg_type; 
11719            arg_type = TREE_CHAIN (arg_type))
11720         if (dependent_type_p (TREE_VALUE (arg_type)))
11721           return true;
11722       return false;
11723     }
11724   /* -- an array type constructed from any dependent type or whose
11725         size is specified by a constant expression that is
11726         value-dependent.  */
11727   if (TREE_CODE (type) == ARRAY_TYPE)
11728     {
11729       if (TYPE_DOMAIN (type)
11730           && ((value_dependent_expression_p 
11731                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11732               || (type_dependent_expression_p
11733                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11734         return true;
11735       return dependent_type_p (TREE_TYPE (type));
11736     }
11737   
11738   /* -- a template-id in which either the template name is a template
11739      parameter ...  */
11740   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11741     return true;
11742   /* ... or any of the template arguments is a dependent type or
11743         an expression that is type-dependent or value-dependent.  */
11744   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
11745            && (any_dependent_template_arguments_p 
11746                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
11747     return true;
11748   
11749   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11750      expression is not type-dependent, then it should already been
11751      have resolved.  */
11752   if (TREE_CODE (type) == TYPEOF_TYPE)
11753     return true;
11754   
11755   /* The standard does not specifically mention types that are local
11756      to template functions or local classes, but they should be
11757      considered dependent too.  For example:
11758
11759        template <int I> void f() { 
11760          enum E { a = I }; 
11761          S<sizeof (E)> s;
11762        }
11763
11764      The size of `E' cannot be known until the value of `I' has been
11765      determined.  Therefore, `E' must be considered dependent.  */
11766   scope = TYPE_CONTEXT (type);
11767   if (scope && TYPE_P (scope))
11768     return dependent_type_p (scope);
11769   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
11770     return type_dependent_expression_p (scope);
11771
11772   /* Other types are non-dependent.  */
11773   return false;
11774 }
11775
11776 /* Returns TRUE if TYPE is dependent, in the sense of
11777    [temp.dep.type].  */
11778
11779 bool
11780 dependent_type_p (tree type)
11781 {
11782   /* If there are no template parameters in scope, then there can't be
11783      any dependent types.  */
11784   if (!processing_template_decl)
11785     return false;
11786
11787   /* If the type is NULL, we have not computed a type for the entity
11788      in question; in that case, the type is dependent.  */
11789   if (!type)
11790     return true;
11791
11792   /* Erroneous types can be considered non-dependent.  */
11793   if (type == error_mark_node)
11794     return false;
11795
11796   /* If we have not already computed the appropriate value for TYPE,
11797      do so now.  */
11798   if (!TYPE_DEPENDENT_P_VALID (type))
11799     {
11800       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
11801       TYPE_DEPENDENT_P_VALID (type) = 1;
11802     }
11803
11804   return TYPE_DEPENDENT_P (type);
11805 }
11806
11807 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
11808
11809 static bool
11810 dependent_scope_ref_p (tree expression, bool criterion (tree))
11811 {
11812   tree scope;
11813   tree name;
11814
11815   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
11816
11817   if (!TYPE_P (TREE_OPERAND (expression, 0)))
11818     return true;
11819
11820   scope = TREE_OPERAND (expression, 0);
11821   name = TREE_OPERAND (expression, 1);
11822
11823   /* [temp.dep.expr]
11824
11825      An id-expression is type-dependent if it contains a
11826      nested-name-specifier that contains a class-name that names a
11827      dependent type.  */
11828   /* The suggested resolution to Core Issue 2 implies that if the
11829      qualifying type is the current class, then we must peek
11830      inside it.  */
11831   if (DECL_P (name) 
11832       && currently_open_class (scope)
11833       && !criterion (name))
11834     return false;
11835   if (dependent_type_p (scope))
11836     return true;
11837
11838   return false;
11839 }
11840
11841 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
11842    [temp.dep.constexpr] */
11843
11844 bool
11845 value_dependent_expression_p (tree expression)
11846 {
11847   if (!processing_template_decl)
11848     return false;
11849
11850   /* A name declared with a dependent type.  */
11851   if (TREE_CODE (expression) == IDENTIFIER_NODE
11852       || (DECL_P (expression) 
11853           && type_dependent_expression_p (expression)))
11854     return true;
11855   /* A non-type template parameter.  */
11856   if ((TREE_CODE (expression) == CONST_DECL
11857        && DECL_TEMPLATE_PARM_P (expression))
11858       || TREE_CODE (expression) == TEMPLATE_PARM_INDEX)
11859     return true;
11860   /* A constant with integral or enumeration type and is initialized 
11861      with an expression that is value-dependent.  */
11862   if (TREE_CODE (expression) == VAR_DECL
11863       && DECL_INITIAL (expression)
11864       && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
11865       && value_dependent_expression_p (DECL_INITIAL (expression)))
11866     return true;
11867   /* These expressions are value-dependent if the type to which the
11868      cast occurs is dependent or the expression being casted is
11869      value-dependent.  */
11870   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11871       || TREE_CODE (expression) == STATIC_CAST_EXPR
11872       || TREE_CODE (expression) == CONST_CAST_EXPR
11873       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11874       || TREE_CODE (expression) == CAST_EXPR)
11875     {
11876       tree type = TREE_TYPE (expression);
11877       if (dependent_type_p (type))
11878         return true;
11879       /* A functional cast has a list of operands.  */
11880       expression = TREE_OPERAND (expression, 0);
11881       if (!expression)
11882         {
11883           /* If there are no operands, it must be an expression such
11884              as "int()". This should not happen for aggregate types
11885              because it would form non-constant expressions.  */
11886           gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
11887
11888           return false;
11889         }
11890       if (TREE_CODE (expression) == TREE_LIST)
11891         {
11892           do
11893             {
11894               if (value_dependent_expression_p (TREE_VALUE (expression)))
11895                 return true;
11896               expression = TREE_CHAIN (expression);
11897             }
11898           while (expression);
11899           return false;
11900         }
11901       else
11902         return value_dependent_expression_p (expression);
11903     }
11904   /* A `sizeof' expression is value-dependent if the operand is
11905      type-dependent.  */
11906   if (TREE_CODE (expression) == SIZEOF_EXPR
11907       || TREE_CODE (expression) == ALIGNOF_EXPR)
11908     {
11909       expression = TREE_OPERAND (expression, 0);
11910       if (TYPE_P (expression))
11911         return dependent_type_p (expression);
11912       return type_dependent_expression_p (expression);
11913     }
11914   if (TREE_CODE (expression) == SCOPE_REF)
11915     return dependent_scope_ref_p (expression, value_dependent_expression_p);
11916   if (TREE_CODE (expression) == COMPONENT_REF)
11917     return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
11918             || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
11919   /* A constant expression is value-dependent if any subexpression is
11920      value-dependent.  */
11921   if (EXPR_P (expression))
11922     {
11923       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
11924         {
11925         case tcc_unary:
11926           return (value_dependent_expression_p 
11927                   (TREE_OPERAND (expression, 0)));
11928         case tcc_comparison:
11929         case tcc_binary:
11930           return ((value_dependent_expression_p 
11931                    (TREE_OPERAND (expression, 0)))
11932                   || (value_dependent_expression_p 
11933                       (TREE_OPERAND (expression, 1))));
11934         case tcc_expression:
11935           {
11936             int i;
11937             for (i = 0; i < first_rtl_op (TREE_CODE (expression)); ++i)
11938               /* In some cases, some of the operands may be missing.
11939                  (For example, in the case of PREDECREMENT_EXPR, the
11940                  amount to increment by may be missing.)  That doesn't
11941                  make the expression dependent.  */
11942               if (TREE_OPERAND (expression, i)
11943                   && (value_dependent_expression_p
11944                       (TREE_OPERAND (expression, i))))
11945                 return true;
11946             return false;
11947           }
11948         case tcc_reference:
11949         case tcc_statement:
11950           /* These cannot be value dependent.  */
11951           return false;
11952
11953         default:
11954           gcc_unreachable ();
11955         }
11956     }
11957
11958   /* The expression is not value-dependent.  */
11959   return false;
11960 }
11961
11962 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
11963    [temp.dep.expr].  */
11964
11965 bool
11966 type_dependent_expression_p (tree expression)
11967 {
11968   if (!processing_template_decl)
11969     return false;
11970
11971   if (expression == error_mark_node)
11972     return false;
11973
11974   /* An unresolved name is always dependent.  */
11975   if (TREE_CODE (expression) == IDENTIFIER_NODE)
11976     return true;
11977   
11978   /* Some expression forms are never type-dependent.  */
11979   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
11980       || TREE_CODE (expression) == SIZEOF_EXPR
11981       || TREE_CODE (expression) == ALIGNOF_EXPR
11982       || TREE_CODE (expression) == TYPEID_EXPR
11983       || TREE_CODE (expression) == DELETE_EXPR
11984       || TREE_CODE (expression) == VEC_DELETE_EXPR
11985       || TREE_CODE (expression) == THROW_EXPR)
11986     return false;
11987
11988   /* The types of these expressions depends only on the type to which
11989      the cast occurs.  */
11990   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11991       || TREE_CODE (expression) == STATIC_CAST_EXPR
11992       || TREE_CODE (expression) == CONST_CAST_EXPR
11993       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11994       || TREE_CODE (expression) == CAST_EXPR)
11995     return dependent_type_p (TREE_TYPE (expression));
11996
11997   /* The types of these expressions depends only on the type created
11998      by the expression.  */
11999   if (TREE_CODE (expression) == NEW_EXPR
12000       || TREE_CODE (expression) == VEC_NEW_EXPR)
12001     {
12002       /* For NEW_EXPR tree nodes created inside a template, either
12003          the object type itself or a TREE_LIST may appear as the
12004          operand 1.  */
12005       tree type = TREE_OPERAND (expression, 1);
12006       if (TREE_CODE (type) == TREE_LIST)
12007         /* This is an array type.  We need to check array dimensions
12008            as well.  */
12009         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
12010                || value_dependent_expression_p
12011                     (TREE_OPERAND (TREE_VALUE (type), 1));
12012       else
12013         return dependent_type_p (type);
12014     }
12015
12016   if (TREE_CODE (expression) == SCOPE_REF
12017       && dependent_scope_ref_p (expression,
12018                                 type_dependent_expression_p))
12019     return true;
12020
12021   if (TREE_CODE (expression) == FUNCTION_DECL
12022       && DECL_LANG_SPECIFIC (expression)
12023       && DECL_TEMPLATE_INFO (expression)
12024       && (any_dependent_template_arguments_p
12025           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
12026     return true;
12027
12028   if (TREE_CODE (expression) == TEMPLATE_DECL
12029       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
12030     return false;
12031
12032   if (TREE_TYPE (expression) == unknown_type_node)
12033     {
12034       if (TREE_CODE (expression) == ADDR_EXPR)
12035         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
12036       if (TREE_CODE (expression) == COMPONENT_REF
12037           || TREE_CODE (expression) == OFFSET_REF)
12038         {
12039           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
12040             return true;
12041           expression = TREE_OPERAND (expression, 1);
12042           if (TREE_CODE (expression) == IDENTIFIER_NODE)
12043             return false;
12044         }
12045       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
12046       if (TREE_CODE (expression) == SCOPE_REF)
12047         return false;
12048       
12049       if (TREE_CODE (expression) == BASELINK)
12050         expression = BASELINK_FUNCTIONS (expression);
12051       
12052       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
12053         {
12054           if (any_dependent_template_arguments_p
12055               (TREE_OPERAND (expression, 1)))
12056             return true;
12057           expression = TREE_OPERAND (expression, 0);
12058         }
12059       gcc_assert (TREE_CODE (expression) == OVERLOAD);
12060       
12061       while (expression)
12062         {
12063           if (type_dependent_expression_p (OVL_CURRENT (expression)))
12064             return true;
12065           expression = OVL_NEXT (expression);
12066         }
12067       return false;
12068     }
12069   
12070   return (dependent_type_p (TREE_TYPE (expression)));
12071 }
12072
12073 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
12074    contains a type-dependent expression.  */
12075
12076 bool
12077 any_type_dependent_arguments_p (tree args)
12078 {
12079   while (args)
12080     {
12081       tree arg = TREE_VALUE (args);
12082
12083       if (type_dependent_expression_p (arg))
12084         return true;
12085       args = TREE_CHAIN (args);
12086     }
12087   return false;
12088 }
12089
12090 /* Returns TRUE if the ARG (a template argument) is dependent.  */
12091
12092 static bool
12093 dependent_template_arg_p (tree arg)
12094 {
12095   if (!processing_template_decl)
12096     return false;
12097
12098   if (TREE_CODE (arg) == TEMPLATE_DECL
12099       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12100     return dependent_template_p (arg);
12101   else if (TYPE_P (arg))
12102     return dependent_type_p (arg);
12103   else
12104     return (type_dependent_expression_p (arg)
12105             || value_dependent_expression_p (arg));
12106 }
12107
12108 /* Returns true if ARGS (a collection of template arguments) contains
12109    any dependent arguments.  */
12110
12111 bool
12112 any_dependent_template_arguments_p (tree args)
12113 {
12114   int i;
12115   int j;
12116
12117   if (!args)
12118     return false;
12119
12120   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12121     {
12122       tree level = TMPL_ARGS_LEVEL (args, i + 1);
12123       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12124         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12125           return true;
12126     }
12127
12128   return false;
12129 }
12130
12131 /* Returns TRUE if the template TMPL is dependent.  */
12132
12133 bool
12134 dependent_template_p (tree tmpl)
12135 {
12136   if (TREE_CODE (tmpl) == OVERLOAD)
12137     {
12138       while (tmpl)
12139         {
12140           if (dependent_template_p (OVL_FUNCTION (tmpl)))
12141             return true;
12142           tmpl = OVL_CHAIN (tmpl);
12143         }
12144       return false;
12145     }
12146
12147   /* Template template parameters are dependent.  */
12148   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12149       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12150     return true;
12151   /* So are names that have not been looked up.  */
12152   if (TREE_CODE (tmpl) == SCOPE_REF
12153       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
12154     return true;
12155   /* So are member templates of dependent classes.  */
12156   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12157     return dependent_type_p (DECL_CONTEXT (tmpl));
12158   return false;
12159 }
12160
12161 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
12162
12163 bool
12164 dependent_template_id_p (tree tmpl, tree args)
12165 {
12166   return (dependent_template_p (tmpl)
12167           || any_dependent_template_arguments_p (args));
12168 }
12169
12170 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
12171    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
12172    can be found.  Note that this function peers inside uninstantiated
12173    templates and therefore should be used only in extremely limited
12174    situations.  */
12175
12176 tree
12177 resolve_typename_type (tree type, bool only_current_p)
12178 {
12179   tree scope;
12180   tree name;
12181   tree decl;
12182   int quals;
12183   bool pop_p;
12184
12185   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
12186
12187   scope = TYPE_CONTEXT (type);
12188   name = TYPE_IDENTIFIER (type);
12189
12190   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12191      it first before we can figure out what NAME refers to.  */
12192   if (TREE_CODE (scope) == TYPENAME_TYPE)
12193     scope = resolve_typename_type (scope, only_current_p);
12194   /* If we don't know what SCOPE refers to, then we cannot resolve the
12195      TYPENAME_TYPE.  */
12196   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12197     return error_mark_node;
12198   /* If the SCOPE is a template type parameter, we have no way of
12199      resolving the name.  */
12200   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12201     return type;
12202   /* If the SCOPE is not the current instantiation, there's no reason
12203      to look inside it.  */
12204   if (only_current_p && !currently_open_class (scope))
12205     return error_mark_node;
12206   /* If SCOPE is a partial instantiation, it will not have a valid
12207      TYPE_FIELDS list, so use the original template.  */
12208   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
12209   /* Enter the SCOPE so that name lookup will be resolved as if we
12210      were in the class definition.  In particular, SCOPE will no
12211      longer be considered a dependent type.  */
12212   pop_p = push_scope (scope);
12213   /* Look up the declaration.  */
12214   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
12215   /* Obtain the set of qualifiers applied to the TYPE.  */
12216   quals = cp_type_quals (type);
12217   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12218      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
12219   if (!decl)
12220     type = error_mark_node;
12221   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12222            && TREE_CODE (decl) == TYPE_DECL)
12223     type = TREE_TYPE (decl);
12224   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12225            && DECL_CLASS_TEMPLATE_P (decl))
12226     {
12227       tree tmpl;
12228       tree args;
12229       /* Obtain the template and the arguments.  */
12230       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12231       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12232       /* Instantiate the template.  */
12233       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12234                                     /*entering_scope=*/0, tf_error | tf_user);
12235     }
12236   else
12237     type = error_mark_node;
12238   /* Qualify the resulting type.  */
12239   if (type != error_mark_node && quals)
12240     type = cp_build_qualified_type (type, quals);
12241   /* Leave the SCOPE.  */
12242   if (pop_p)
12243     pop_scope (scope);
12244
12245   return type;
12246 }
12247
12248 /* EXPR is an expression which is not type-dependent.  Return a proxy
12249    for EXPR that can be used to compute the types of larger
12250    expressions containing EXPR.  */
12251
12252 tree
12253 build_non_dependent_expr (tree expr)
12254 {
12255   tree inner_expr;
12256
12257   /* Preserve null pointer constants so that the type of things like 
12258      "p == 0" where "p" is a pointer can be determined.  */
12259   if (null_ptr_cst_p (expr))
12260     return expr;
12261   /* Preserve OVERLOADs; the functions must be available to resolve
12262      types.  */
12263   inner_expr = (TREE_CODE (expr) == ADDR_EXPR ? 
12264                 TREE_OPERAND (expr, 0) : expr);
12265   if (TREE_CODE (inner_expr) == OVERLOAD 
12266       || TREE_CODE (inner_expr) == FUNCTION_DECL
12267       || TREE_CODE (inner_expr) == TEMPLATE_DECL
12268       || TREE_CODE (inner_expr) == TEMPLATE_ID_EXPR)
12269     return expr;
12270   /* Preserve string constants; conversions from string constants to
12271      "char *" are allowed, even though normally a "const char *"
12272      cannot be used to initialize a "char *".  */
12273   if (TREE_CODE (expr) == STRING_CST)
12274     return expr;
12275   /* Preserve arithmetic constants, as an optimization -- there is no
12276      reason to create a new node.  */
12277   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12278     return expr;
12279   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12280      There is at least one place where we want to know that a
12281      particular expression is a throw-expression: when checking a ?:
12282      expression, there are special rules if the second or third
12283      argument is a throw-expression.  */
12284   if (TREE_CODE (expr) == THROW_EXPR)
12285     return expr;
12286
12287   if (TREE_CODE (expr) == COND_EXPR)
12288     return build3 (COND_EXPR,
12289                    TREE_TYPE (expr),
12290                    TREE_OPERAND (expr, 0),
12291                    (TREE_OPERAND (expr, 1) 
12292                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12293                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12294                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12295   if (TREE_CODE (expr) == COMPOUND_EXPR
12296       && !COMPOUND_EXPR_OVERLOADED (expr))
12297     return build2 (COMPOUND_EXPR,
12298                    TREE_TYPE (expr),
12299                    TREE_OPERAND (expr, 0),
12300                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12301       
12302   /* Otherwise, build a NON_DEPENDENT_EXPR.  
12303
12304      REFERENCE_TYPEs are not stripped for expressions in templates
12305      because doing so would play havoc with mangling.  Consider, for
12306      example:
12307
12308        template <typename T> void f<T& g>() { g(); } 
12309
12310      In the body of "f", the expression for "g" will have
12311      REFERENCE_TYPE, even though the standard says that it should
12312      not.  The reason is that we must preserve the syntactic form of
12313      the expression so that mangling (say) "f<g>" inside the body of
12314      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
12315      stripped here.  */
12316   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12317 }
12318
12319 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12320    Return a new TREE_LIST with the various arguments replaced with
12321    equivalent non-dependent expressions.  */
12322
12323 tree
12324 build_non_dependent_args (tree args)
12325 {
12326   tree a;
12327   tree new_args;
12328
12329   new_args = NULL_TREE;
12330   for (a = args; a; a = TREE_CHAIN (a))
12331     new_args = tree_cons (NULL_TREE, 
12332                           build_non_dependent_expr (TREE_VALUE (a)),
12333                           new_args);
12334   return nreverse (new_args);
12335 }
12336
12337 #include "gt-cp-pt.h"