OSDN Git Service

* cp-tre.h (finish_function): Change prototype.
[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    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 GNU CC.
8
9 GNU CC 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 GNU CC 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 GNU CC; 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 "obstack.h"
32
33 #include "tree.h"
34 #include "flags.h"
35 #include "cp-tree.h"
36 #include "decl.h"
37 #include "parse.h"
38 #include "lex.h"
39 #include "output.h"
40 #include "defaults.h"
41 #include "except.h"
42 #include "toplev.h"
43 #include "rtl.h"
44 #include "defaults.h"
45 #include "ggc.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) PARAMS ((tree, void*));
50
51 extern struct obstack permanent_obstack;
52
53 extern int lineno;
54 extern char *input_filename;
55
56 /* The PENDING_TEMPLATES is a TREE_LIST of templates whose
57    instantiations have been deferred, either because their definitions
58    were not yet available, or because we were putting off doing the
59    work.  The TREE_PURPOSE of each entry is a SRCLOC indicating where
60    the instantiate request occurred; the TREE_VALUE is a either a DECL
61    (for a function or static data member), or a TYPE (for a class)
62    indicating what we are hoping to instantiate.  */
63 static tree pending_templates;
64 static tree *template_tail = &pending_templates;
65
66 static tree maybe_templates;
67 static tree *maybe_template_tail = &maybe_templates;
68
69 int processing_template_parmlist;
70 static int template_header_count;
71
72 static tree saved_trees;
73 static varray_type inline_parm_levels;
74 static size_t inline_parm_levels_used;
75
76 #define obstack_chunk_alloc xmalloc
77 #define obstack_chunk_free free
78
79 #define UNIFY_ALLOW_NONE 0
80 #define UNIFY_ALLOW_MORE_CV_QUAL 1
81 #define UNIFY_ALLOW_LESS_CV_QUAL 2
82 #define UNIFY_ALLOW_DERIVED 4
83 #define UNIFY_ALLOW_INTEGER 8
84
85 #define GTB_VIA_VIRTUAL 1 /* The base class we are examining is
86                              virtual, or a base class of a virtual
87                              base.  */
88 #define GTB_IGNORE_TYPE 2 /* We don't need to try to unify the current
89                              type with the desired type.  */
90
91 static int resolve_overloaded_unification PARAMS ((tree, tree, tree, tree,
92                                                  unification_kind_t, int));
93 static int try_one_overload PARAMS ((tree, tree, tree, tree, tree,
94                                    unification_kind_t, int));
95 static int unify PARAMS ((tree, tree, tree, tree, int));
96 static void add_pending_template PARAMS ((tree));
97 static int push_tinst_level PARAMS ((tree));
98 static tree classtype_mangled_name PARAMS ((tree));
99 static char *mangle_class_name_for_template PARAMS ((char *, tree, tree));
100 static tree tsubst_expr_values PARAMS ((tree, tree));
101 static int list_eq PARAMS ((tree, tree));
102 static tree get_class_bindings PARAMS ((tree, tree, tree));
103 static tree coerce_template_parms PARAMS ((tree, tree, tree, int, int));
104 static void tsubst_enum PARAMS ((tree, tree, tree));
105 static tree add_to_template_args PARAMS ((tree, tree));
106 static tree add_outermost_template_args PARAMS ((tree, tree));
107 static void maybe_adjust_types_for_deduction PARAMS ((unification_kind_t, tree*,
108                                                     tree*)); 
109 static int  type_unification_real PARAMS ((tree, tree, tree, tree,
110                                          int, unification_kind_t, int));
111 static void note_template_header PARAMS ((int));
112 static tree maybe_fold_nontype_arg PARAMS ((tree));
113 static tree convert_nontype_argument PARAMS ((tree, tree));
114 static tree convert_template_argument PARAMS ((tree, tree, tree, int,
115                                               int , tree));
116 static tree get_bindings_overload PARAMS ((tree, tree, tree));
117 static int for_each_template_parm PARAMS ((tree, tree_fn_t, void*));
118 static tree build_template_parm_index PARAMS ((int, int, int, tree, tree));
119 static int inline_needs_template_parms PARAMS ((tree));
120 static void push_inline_template_parms_recursive PARAMS ((tree, int));
121 static tree retrieve_specialization PARAMS ((tree, tree));
122 static tree retrieve_local_specialization PARAMS ((tree, tree));
123 static tree register_specialization PARAMS ((tree, tree, tree));
124 static tree register_local_specialization PARAMS ((tree, tree, tree));
125 static int unregister_specialization PARAMS ((tree, tree));
126 static tree reduce_template_parm_level PARAMS ((tree, tree, int));
127 static tree build_template_decl PARAMS ((tree, tree));
128 static int mark_template_parm PARAMS ((tree, void *));
129 static tree tsubst_friend_function PARAMS ((tree, tree));
130 static tree tsubst_friend_class PARAMS ((tree, tree));
131 static tree get_bindings_real PARAMS ((tree, tree, tree, int));
132 static int template_decl_level PARAMS ((tree));
133 static tree maybe_get_template_decl_from_type_decl PARAMS ((tree));
134 static int check_cv_quals_for_unify PARAMS ((int, tree, tree));
135 static tree tsubst_template_arg_vector PARAMS ((tree, tree, int));
136 static tree tsubst_template_parms PARAMS ((tree, tree, int));
137 static void regenerate_decl_from_template PARAMS ((tree, tree));
138 static tree most_specialized PARAMS ((tree, tree, tree));
139 static tree most_specialized_class PARAMS ((tree, tree));
140 static void set_mangled_name_for_template_decl PARAMS ((tree));
141 static int template_class_depth_real PARAMS ((tree, int));
142 static tree tsubst_aggr_type PARAMS ((tree, tree, int, tree, int));
143 static tree tsubst_decl PARAMS ((tree, tree, tree, tree));
144 static tree tsubst_arg_types PARAMS ((tree, tree, int, tree));
145 static tree tsubst_function_type PARAMS ((tree, tree, int, tree));
146 static void check_specialization_scope PARAMS ((void));
147 static tree process_partial_specialization PARAMS ((tree));
148 static void set_current_access_from_decl PARAMS ((tree));
149 static void check_default_tmpl_args PARAMS ((tree, tree, int, int));
150 static tree tsubst_call_declarator_parms PARAMS ((tree, tree, int, tree));
151 static tree get_template_base_recursive PARAMS ((tree, tree,
152                                                tree, tree, tree, int)); 
153 static tree get_template_base PARAMS ((tree, tree, tree, tree));
154 static tree try_class_unification PARAMS ((tree, tree, tree, tree));
155 static int coerce_template_template_parms PARAMS ((tree, tree, int,
156                                                  tree, tree));
157 static tree determine_specialization PARAMS ((tree, tree, tree *, int));
158 static int template_args_equal PARAMS ((tree, tree));
159 static void print_template_context PARAMS ((int));
160 static void tsubst_default_arguments PARAMS ((tree));
161 static tree for_each_template_parm_r PARAMS ((tree *, int *, void *));
162
163 /* Called once to initialize pt.c.  */
164
165 void
166 init_pt ()
167 {
168   ggc_add_tree_root (&pending_templates, 1);
169   ggc_add_tree_root (&maybe_templates, 1);
170   ggc_add_tree_root (&saved_trees, 1);
171 }
172
173 /* Do any processing required when DECL (a member template declaration
174    using TEMPLATE_PARAMETERS as its innermost parameter list) is
175    finished.  Returns the TEMPLATE_DECL corresponding to DECL, unless
176    it is a specialization, in which case the DECL itself is returned.  */
177
178 tree
179 finish_member_template_decl (decl)
180   tree decl;
181 {
182   if (decl == NULL_TREE || decl == void_type_node)
183     return NULL_TREE;
184   else if (decl == error_mark_node)
185     /* By returning NULL_TREE, the parser will just ignore this
186        declaration.  We have already issued the error.  */
187     return NULL_TREE;
188   else if (TREE_CODE (decl) == TREE_LIST)
189     {
190       /* Assume that the class is the only declspec.  */
191       decl = TREE_VALUE (decl);
192       if (IS_AGGR_TYPE (decl) && CLASSTYPE_TEMPLATE_INFO (decl)
193           && ! CLASSTYPE_TEMPLATE_SPECIALIZATION (decl))
194         {
195           tree tmpl = CLASSTYPE_TI_TEMPLATE (decl);
196           check_member_template (tmpl);
197           return tmpl;
198         }
199       return NULL_TREE;
200     }
201   else if (TREE_CODE (decl) == FIELD_DECL)
202     cp_error ("data member `%D' cannot be a member template", decl);
203   else if (DECL_TEMPLATE_INFO (decl))
204     {
205       if (!DECL_TEMPLATE_SPECIALIZATION (decl))
206         {
207           check_member_template (DECL_TI_TEMPLATE (decl));
208           return DECL_TI_TEMPLATE (decl);
209         }
210       else
211         return decl;
212     } 
213   else
214     cp_error ("invalid member template declaration `%D'", decl);
215
216   return error_mark_node;
217 }
218
219 /* Returns the template nesting level of the indicated class TYPE.
220    
221    For example, in:
222      template <class T>
223      struct A
224      {
225        template <class U>
226        struct B {};
227      };
228
229    A<T>::B<U> has depth two, while A<T> has depth one.  
230    Both A<T>::B<int> and A<int>::B<U> have depth one, if
231    COUNT_SPECIALIZATIONS is 0 or if they are instantiations, not
232    specializations.  
233
234    This function is guaranteed to return 0 if passed NULL_TREE so
235    that, for example, `template_class_depth (current_class_type)' is
236    always safe.  */
237
238 static int 
239 template_class_depth_real (type, count_specializations)
240      tree type;
241      int count_specializations;
242 {
243   int depth;
244
245   for (depth = 0; 
246        type && TREE_CODE (type) != NAMESPACE_DECL;
247        type = (TREE_CODE (type) == FUNCTION_DECL) 
248          ? CP_DECL_CONTEXT (type) : TYPE_CONTEXT (type))
249     {
250       if (TREE_CODE (type) != FUNCTION_DECL)
251         {
252           if (CLASSTYPE_TEMPLATE_INFO (type)
253               && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (type))
254               && ((count_specializations
255                    && CLASSTYPE_TEMPLATE_SPECIALIZATION (type))
256                   || uses_template_parms (CLASSTYPE_TI_ARGS (type))))
257             ++depth;
258         }
259       else 
260         {
261           if (DECL_TEMPLATE_INFO (type)
262               && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (type))
263               && ((count_specializations
264                    && DECL_TEMPLATE_SPECIALIZATION (type))
265                   || uses_template_parms (DECL_TI_ARGS (type))))
266             ++depth;
267         }
268     }
269
270   return depth;
271 }
272
273 /* Returns the template nesting level of the indicated class TYPE.
274    Like template_class_depth_real, but instantiations do not count in
275    the depth.  */
276
277 int 
278 template_class_depth (type)
279      tree type;
280 {
281   return template_class_depth_real (type, /*count_specializations=*/0);
282 }
283
284 /* Returns 1 if processing DECL as part of do_pending_inlines
285    needs us to push template parms.  */
286
287 static int
288 inline_needs_template_parms (decl)
289      tree decl;
290 {
291   if (! DECL_TEMPLATE_INFO (decl))
292     return 0;
293
294   return (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (most_general_template (decl)))
295           > (processing_template_decl + DECL_TEMPLATE_SPECIALIZATION (decl)));
296 }
297
298 /* Subroutine of maybe_begin_member_template_processing.
299    Push the template parms in PARMS, starting from LEVELS steps into the
300    chain, and ending at the beginning, since template parms are listed
301    innermost first.  */
302
303 static void
304 push_inline_template_parms_recursive (parmlist, levels)
305      tree parmlist;
306      int levels;
307 {
308   tree parms = TREE_VALUE (parmlist);
309   int i;
310
311   if (levels > 1)
312     push_inline_template_parms_recursive (TREE_CHAIN (parmlist), levels - 1);
313
314   ++processing_template_decl;
315   current_template_parms
316     = tree_cons (build_int_2 (0, processing_template_decl),
317                  parms, current_template_parms);
318   TEMPLATE_PARMS_FOR_INLINE (current_template_parms) = 1;
319
320   pushlevel (0);
321   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i) 
322     {
323       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
324       my_friendly_assert (DECL_P (parm), 0);
325
326       switch (TREE_CODE (parm))
327         {
328         case TYPE_DECL:
329         case TEMPLATE_DECL:
330           pushdecl (parm);
331           break;
332
333         case PARM_DECL:
334           {
335             /* Make a CONST_DECL as is done in process_template_parm.
336                It is ugly that we recreate this here; the original
337                version built in process_template_parm is no longer
338                available.  */
339             tree decl = build_decl (CONST_DECL, DECL_NAME (parm),
340                                     TREE_TYPE (parm));
341             SET_DECL_ARTIFICIAL (decl);
342             DECL_INITIAL (decl) = DECL_INITIAL (parm);
343             SET_DECL_TEMPLATE_PARM_P (decl);
344             pushdecl (decl);
345           }
346           break;
347
348         default:
349           my_friendly_abort (0);
350         }
351     }
352 }
353
354 /* Restore the template parameter context for a member template or
355    a friend template defined in a class definition.  */
356
357 void
358 maybe_begin_member_template_processing (decl)
359      tree decl;
360 {
361   tree parms;
362   int levels = 0;
363
364   if (inline_needs_template_parms (decl))
365     {
366       parms = DECL_TEMPLATE_PARMS (most_general_template (decl));
367       levels = TMPL_PARMS_DEPTH (parms) - processing_template_decl;
368
369       if (DECL_TEMPLATE_SPECIALIZATION (decl))
370         {
371           --levels;
372           parms = TREE_CHAIN (parms);
373         }
374
375       push_inline_template_parms_recursive (parms, levels);
376     }
377
378   /* Remember how many levels of template parameters we pushed so that
379      we can pop them later.  */
380   if (!inline_parm_levels)
381     VARRAY_INT_INIT (inline_parm_levels, 4, "inline_parm_levels");
382   if (inline_parm_levels_used == inline_parm_levels->num_elements)
383     VARRAY_GROW (inline_parm_levels, 2 * inline_parm_levels_used);
384   VARRAY_INT (inline_parm_levels, inline_parm_levels_used) = levels;
385   ++inline_parm_levels_used;
386 }
387
388 /* Undo the effects of begin_member_template_processing. */
389
390 void 
391 maybe_end_member_template_processing ()
392 {
393   int i;
394
395   if (!inline_parm_levels_used)
396     return;
397
398   --inline_parm_levels_used;
399   for (i = 0; 
400        i < VARRAY_INT (inline_parm_levels, inline_parm_levels_used);
401        ++i) 
402     {
403       --processing_template_decl;
404       current_template_parms = TREE_CHAIN (current_template_parms);
405       poplevel (0, 0, 0);
406     }
407 }
408
409 /* Returns non-zero iff T is a member template function.  We must be
410    careful as in
411
412      template <class T> class C { void f(); }
413
414    Here, f is a template function, and a member, but not a member
415    template.  This function does not concern itself with the origin of
416    T, only its present state.  So if we have 
417
418      template <class T> class C { template <class U> void f(U); }
419
420    then neither C<int>::f<char> nor C<T>::f<double> is considered
421    to be a member template.  But, `template <class U> void
422    C<int>::f(U)' is considered a member template.  */
423
424 int
425 is_member_template (t)
426      tree t;
427 {
428   if (!DECL_FUNCTION_TEMPLATE_P (t))
429     /* Anything that isn't a function or a template function is
430        certainly not a member template.  */
431     return 0;
432
433   /* A local class can't have member templates.  */
434   if (decl_function_context (t))
435     return 0;
436
437   return (DECL_FUNCTION_MEMBER_P (DECL_TEMPLATE_RESULT (t))
438           /* If there are more levels of template parameters than
439              there are template classes surrounding the declaration,
440              then we have a member template.  */
441           && (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) > 
442               template_class_depth (DECL_CONTEXT (t))));
443 }
444
445 #if 0 /* UNUSED */
446 /* Returns non-zero iff T is a member template class.  See
447    is_member_template for a description of what precisely constitutes
448    a member template.  */
449
450 int
451 is_member_template_class (t)
452      tree t;
453 {
454   if (!DECL_CLASS_TEMPLATE_P (t))
455     /* Anything that isn't a class template, is certainly not a member
456        template.  */
457     return 0;
458
459   if (!DECL_CLASS_SCOPE_P (t))
460     /* Anything whose context isn't a class type is surely not a
461        member template.  */
462     return 0;
463
464   /* If there are more levels of template parameters than there are
465      template classes surrounding the declaration, then we have a
466      member template.  */
467   return  (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (t)) > 
468            template_class_depth (DECL_CONTEXT (t)));
469 }
470 #endif
471
472 /* Return a new template argument vector which contains all of ARGS,
473    but has as its innermost set of arguments the EXTRA_ARGS.  The
474    resulting vector will be built on a temporary obstack, and so must
475    be explicitly copied to the permanent obstack, if required.  */
476
477 static tree
478 add_to_template_args (args, extra_args)
479      tree args;
480      tree extra_args;
481 {
482   tree new_args;
483   int extra_depth;
484   int i;
485   int j;
486
487   extra_depth = TMPL_ARGS_DEPTH (extra_args);
488   new_args = make_tree_vec (TMPL_ARGS_DEPTH (args) + extra_depth);
489
490   for (i = 1; i <= TMPL_ARGS_DEPTH (args); ++i)
491     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (args, i));
492
493   for (j = 1; j <= extra_depth; ++j, ++i)
494     SET_TMPL_ARGS_LEVEL (new_args, i, TMPL_ARGS_LEVEL (extra_args, j));
495     
496   return new_args;
497 }
498
499 /* Like add_to_template_args, but only the outermost ARGS are added to
500    the EXTRA_ARGS.  In particular, all but TMPL_ARGS_DEPTH
501    (EXTRA_ARGS) levels are added.  This function is used to combine
502    the template arguments from a partial instantiation with the
503    template arguments used to attain the full instantiation from the
504    partial instantiation.  */
505
506 static tree
507 add_outermost_template_args (args, extra_args)
508      tree args;
509      tree extra_args;
510 {
511   tree new_args;
512
513   /* If there are more levels of EXTRA_ARGS than there are ARGS,
514      something very fishy is going on.  */
515   my_friendly_assert (TMPL_ARGS_DEPTH (args) >= TMPL_ARGS_DEPTH (extra_args),
516                       0);
517
518   /* If *all* the new arguments will be the EXTRA_ARGS, just return
519      them.  */
520   if (TMPL_ARGS_DEPTH (args) == TMPL_ARGS_DEPTH (extra_args))
521     return extra_args;
522
523   /* For the moment, we make ARGS look like it contains fewer levels.  */
524   TREE_VEC_LENGTH (args) -= TMPL_ARGS_DEPTH (extra_args);
525   
526   new_args = add_to_template_args (args, extra_args);
527
528   /* Now, we restore ARGS to its full dimensions.  */
529   TREE_VEC_LENGTH (args) += TMPL_ARGS_DEPTH (extra_args);
530
531   return new_args;
532 }
533
534 /* We've got a template header coming up; push to a new level for storing
535    the parms.  */
536
537 void
538 begin_template_parm_list ()
539 {
540   /* We use a non-tag-transparent scope here, which causes pushtag to
541      put tags in this scope, rather than in the enclosing class or
542      namespace scope.  This is the right thing, since we want
543      TEMPLATE_DECLS, and not TYPE_DECLS for template classes.  For a
544      global template class, push_template_decl handles putting the
545      TEMPLATE_DECL into top-level scope.  For a nested template class,
546      e.g.:
547
548        template <class T> struct S1 {
549          template <class T> struct S2 {}; 
550        };
551
552      pushtag contains special code to call pushdecl_with_scope on the
553      TEMPLATE_DECL for S2.  */
554   begin_scope (sk_template_parms);
555   ++processing_template_decl;
556   ++processing_template_parmlist;
557   note_template_header (0);
558 }
559
560 /* This routine is called when a specialization is declared.  If it is
561    illegal to declare a specialization here, an error is reported.  */
562
563 static void
564 check_specialization_scope ()
565 {
566   tree scope = current_scope ();
567
568   /* [temp.expl.spec] 
569      
570      An explicit specialization shall be declared in the namespace of
571      which the template is a member, or, for member templates, in the
572      namespace of which the enclosing class or enclosing class
573      template is a member.  An explicit specialization of a member
574      function, member class or static data member of a class template
575      shall be declared in the namespace of which the class template
576      is a member.  */
577   if (scope && TREE_CODE (scope) != NAMESPACE_DECL)
578     cp_error ("explicit specialization in non-namespace scope `%D'",
579               scope);
580
581   /* [temp.expl.spec] 
582
583      In an explicit specialization declaration for a member of a class
584      template or a member template that appears in namespace scope,
585      the member template and some of its enclosing class templates may
586      remain unspecialized, except that the declaration shall not
587      explicitly specialize a class member template if its enclosing
588      class templates are not explicitly specialized as well.  */
589   if (current_template_parms) 
590     cp_error ("enclosing class templates are not explicitly specialized");
591 }
592
593 /* We've just seen template <>. */
594
595 void
596 begin_specialization ()
597 {
598   begin_scope (sk_template_spec);
599   note_template_header (1);
600   check_specialization_scope ();
601 }
602
603 /* Called at then end of processing a declaration preceeded by
604    template<>.  */
605
606 void 
607 end_specialization ()
608 {
609   finish_scope ();
610   reset_specialization ();
611 }
612
613 /* Any template <>'s that we have seen thus far are not referring to a
614    function specialization. */
615
616 void
617 reset_specialization ()
618 {
619   processing_specialization = 0;
620   template_header_count = 0;
621 }
622
623 /* We've just seen a template header.  If SPECIALIZATION is non-zero,
624    it was of the form template <>.  */
625
626 static void 
627 note_template_header (specialization)
628      int specialization;
629 {
630   processing_specialization = specialization;
631   template_header_count++;
632 }
633
634 /* We're beginning an explicit instantiation.  */
635
636 void
637 begin_explicit_instantiation ()
638 {
639   ++processing_explicit_instantiation;
640 }
641
642
643 void
644 end_explicit_instantiation ()
645 {
646   my_friendly_assert(processing_explicit_instantiation > 0, 0);
647   --processing_explicit_instantiation;
648 }
649
650 /* The TYPE is being declared.  If it is a template type, that means it
651    is a partial specialization.  Do appropriate error-checking.  */
652
653 void 
654 maybe_process_partial_specialization (type)
655      tree type;
656 {
657   if (IS_AGGR_TYPE (type) && CLASSTYPE_USE_TEMPLATE (type))
658     {
659       if (CLASSTYPE_IMPLICIT_INSTANTIATION (type)
660           && !COMPLETE_TYPE_P (type))
661         {
662           if (current_namespace
663               != decl_namespace_context (CLASSTYPE_TI_TEMPLATE (type)))
664             {
665               cp_pedwarn ("specializing `%#T' in different namespace", type);
666               cp_pedwarn_at ("  from definition of `%#D'",
667                              CLASSTYPE_TI_TEMPLATE (type));
668             }
669           SET_CLASSTYPE_TEMPLATE_SPECIALIZATION (type);
670           if (processing_template_decl)
671             push_template_decl (TYPE_MAIN_DECL (type));
672         }
673       else if (CLASSTYPE_TEMPLATE_INSTANTIATION (type))
674         cp_error ("specialization of `%T' after instantiation", type);
675     }
676   else if (processing_specialization)
677     cp_error ("explicit specialization of non-template `%T'", type);
678 }
679
680 /* Retrieve the specialization (in the sense of [temp.spec] - a
681    specialization is either an instantiation or an explicit
682    specialization) of TMPL for the given template ARGS.  If there is
683    no such specialization, return NULL_TREE.  The ARGS are a vector of
684    arguments, or a vector of vectors of arguments, in the case of
685    templates with more than one level of parameters.  */
686    
687 static tree
688 retrieve_specialization (tmpl, args)
689      tree tmpl;
690      tree args;
691 {
692   tree s;
693
694   my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
695
696   /* There should be as many levels of arguments as there are
697      levels of parameters.  */
698   my_friendly_assert (TMPL_ARGS_DEPTH (args) 
699                       == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)),
700                       0);
701                       
702   for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
703        s != NULL_TREE;
704        s = TREE_CHAIN (s))
705     if (comp_template_args (TREE_PURPOSE (s), args))
706       return TREE_VALUE (s);
707
708   return NULL_TREE;
709 }
710
711 /* Like retrieve_speciailization, but for local declarations.  FN is
712    the function in which we are looking for an instantiation.  */
713
714 static tree
715 retrieve_local_specialization (tmpl, fn)
716      tree tmpl;
717      tree fn;
718 {
719   tree s = purpose_member (fn, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
720   return s ? TREE_VALUE (s) : NULL_TREE;
721 }
722
723 /* Returns non-zero iff DECL is a specialization of TMPL.  */
724
725 int
726 is_specialization_of (decl, tmpl)
727      tree decl;
728      tree tmpl;
729 {
730   tree t;
731
732   if (TREE_CODE (decl) == FUNCTION_DECL)
733     {
734       for (t = decl; 
735            t != NULL_TREE;
736            t = DECL_TEMPLATE_INFO (t) ? DECL_TI_TEMPLATE (t) : NULL_TREE)
737         if (t == tmpl)
738           return 1;
739     }
740   else 
741     {
742       my_friendly_assert (TREE_CODE (decl) == TYPE_DECL, 0);
743
744       for (t = TREE_TYPE (decl);
745            t != NULL_TREE;
746            t = CLASSTYPE_USE_TEMPLATE (t)
747              ? TREE_TYPE (CLASSTYPE_TI_TEMPLATE (t)) : NULL_TREE)
748         if (same_type_p (TYPE_MAIN_VARIANT (t), 
749                          TYPE_MAIN_VARIANT (TREE_TYPE (tmpl))))
750           return 1;
751     }  
752
753   return 0;
754 }
755
756 /* Register the specialization SPEC as a specialization of TMPL with
757    the indicated ARGS.  Returns SPEC, or an equivalent prior
758    declaration, if available.  */
759
760 static tree
761 register_specialization (spec, tmpl, args)
762      tree spec;
763      tree tmpl;
764      tree args;
765 {
766   tree s;
767
768   my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 0);
769
770   if (TREE_CODE (spec) == FUNCTION_DECL 
771       && uses_template_parms (DECL_TI_ARGS (spec)))
772     /* This is the FUNCTION_DECL for a partial instantiation.  Don't
773        register it; we want the corresponding TEMPLATE_DECL instead.
774        We use `uses_template_parms (DECL_TI_ARGS (spec))' rather than
775        the more obvious `uses_template_parms (spec)' to avoid problems
776        with default function arguments.  In particular, given
777        something like this:
778
779           template <class T> void f(T t1, T t = T())
780
781        the default argument expression is not substituted for in an
782        instantiation unless and until it is actually needed.  */
783     return spec;
784     
785   /* There should be as many levels of arguments as there are
786      levels of parameters.  */
787   my_friendly_assert (TMPL_ARGS_DEPTH (args) 
788                       == TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)),
789                       0);
790
791   for (s = DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
792        s != NULL_TREE;
793        s = TREE_CHAIN (s))
794     {
795       tree fn = TREE_VALUE (s);
796
797       /* We can sometimes try to re-register a specialization that we've
798          already got.  In particular, regenerate_decl_from_template
799          calls duplicate_decls which will update the specialization
800          list.  But, we'll still get called again here anyhow.  It's
801          more convenient to simply allow this than to try to prevent it.  */
802       if (fn == spec)
803         return spec;
804       else if (comp_template_args (TREE_PURPOSE (s), args))
805         {
806           if (DECL_TEMPLATE_SPECIALIZATION (spec))
807             {
808               if (DECL_TEMPLATE_INSTANTIATION (fn))
809                 {
810                   if (TREE_USED (fn) 
811                       || DECL_EXPLICIT_INSTANTIATION (fn))
812                     {
813                       cp_error ("specialization of %D after instantiation",
814                                 fn);
815                       return spec;
816                     }
817                   else
818                     {
819                       /* This situation should occur only if the first
820                          specialization is an implicit instantiation,
821                          the second is an explicit specialization, and
822                          the implicit instantiation has not yet been
823                          used.  That situation can occur if we have
824                          implicitly instantiated a member function and
825                          then specialized it later.
826
827                          We can also wind up here if a friend
828                          declaration that looked like an instantiation
829                          turns out to be a specialization:
830
831                            template <class T> void foo(T);
832                            class S { friend void foo<>(int) };
833                            template <> void foo(int);  
834
835                          We transform the existing DECL in place so that
836                          any pointers to it become pointers to the
837                          updated declaration.  
838
839                          If there was a definition for the template, but
840                          not for the specialization, we want this to
841                          look as if there is no definition, and vice
842                          versa.  */
843                       DECL_INITIAL (fn) = NULL_TREE;
844                       duplicate_decls (spec, fn);
845
846                       return fn;
847                     }
848                 }
849               else if (DECL_TEMPLATE_SPECIALIZATION (fn))
850                 {
851                   duplicate_decls (spec, fn);
852                   return fn;
853                 }
854             }
855         }
856       }
857
858   DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
859      = tree_cons (args, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
860
861   return spec;
862 }
863
864 /* Unregister the specialization SPEC as a specialization of TMPL.
865    Returns nonzero if the SPEC was listed as a specialization of
866    TMPL.  */
867
868 static int
869 unregister_specialization (spec, tmpl)
870      tree spec;
871      tree tmpl;
872 {
873   tree* s;
874
875   for (s = &DECL_TEMPLATE_SPECIALIZATIONS (tmpl);
876        *s != NULL_TREE;
877        s = &TREE_CHAIN (*s))
878     if (TREE_VALUE (*s) == spec)
879       {
880         *s = TREE_CHAIN (*s);
881         return 1;
882       }
883
884   return 0;
885 }
886
887 /* Like register_specialization, but for local declarations.  FN is
888    the function in which we are registering SPEC, an instantiation of
889    TMPL.  */
890
891 static tree
892 register_local_specialization (spec, tmpl, fn)
893      tree spec;
894      tree tmpl;
895      tree fn;
896 {
897   DECL_TEMPLATE_SPECIALIZATIONS (tmpl)
898      = tree_cons (fn, spec, DECL_TEMPLATE_SPECIALIZATIONS (tmpl));
899
900   return spec;
901 }
902
903 /* Print the list of candidate FNS in an error message.  */
904
905 void
906 print_candidates (fns)
907      tree fns;
908 {
909   tree fn;
910
911   const char *str = "candidates are:";
912
913   for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
914     {
915       tree f;
916
917       for (f = TREE_VALUE (fn); f; f = OVL_NEXT (f))
918         cp_error_at ("%s %+#D", str, OVL_CURRENT (f));
919       str = "               ";
920     }
921 }
922
923 /* Returns the template (one of the functions given by TEMPLATE_ID)
924    which can be specialized to match the indicated DECL with the
925    explicit template args given in TEMPLATE_ID.  The DECL may be
926    NULL_TREE if none is available.  In that case, the functions in
927    TEMPLATE_ID are non-members.
928
929    If NEED_MEMBER_TEMPLATE is non-zero the function is known to be a
930    specialization of a member template.
931
932    The template args (those explicitly specified and those deduced)
933    are output in a newly created vector *TARGS_OUT.
934
935    If it is impossible to determine the result, an error message is
936    issued.  The error_mark_node is returned to indicate failure.  */
937
938 static tree
939 determine_specialization (template_id, decl, targs_out, 
940                           need_member_template)
941      tree template_id;
942      tree decl;
943      tree* targs_out;
944      int need_member_template;
945 {
946   tree fns;
947   tree targs;
948   tree explicit_targs;
949   tree candidates = NULL_TREE;
950   tree templates = NULL_TREE;
951
952   *targs_out = NULL_TREE;
953
954   if (template_id == error_mark_node)
955     return error_mark_node;
956
957   fns = TREE_OPERAND (template_id, 0);
958   explicit_targs = TREE_OPERAND (template_id, 1);
959
960   if (fns == error_mark_node)
961     return error_mark_node;
962
963   /* Check for baselinks. */
964   if (BASELINK_P (fns))
965     fns = TREE_VALUE (fns);
966
967   if (!is_overloaded_fn (fns))
968     {
969       cp_error ("`%D' is not a function template", fns);
970       return error_mark_node;
971     }
972
973   for (; fns; fns = OVL_NEXT (fns))
974     {
975       tree tmpl;
976
977       tree fn = OVL_CURRENT (fns);
978
979       if (TREE_CODE (fn) == TEMPLATE_DECL)
980         /* DECL might be a specialization of FN.  */
981         tmpl = fn;
982       else if (need_member_template)
983         /* FN is an ordinary member function, and we need a
984            specialization of a member template.  */
985         continue;
986       else if (TREE_CODE (fn) != FUNCTION_DECL)
987         /* We can get IDENTIFIER_NODEs here in certain erroneous
988            cases.  */
989         continue;
990       else if (!DECL_FUNCTION_MEMBER_P (fn))
991         /* This is just an ordinary non-member function.  Nothing can
992            be a specialization of that.  */
993         continue;
994       else
995         {
996           tree decl_arg_types;
997
998           /* This is an ordinary member function.  However, since
999              we're here, we can assume it's enclosing class is a
1000              template class.  For example,
1001              
1002                template <typename T> struct S { void f(); };
1003                template <> void S<int>::f() {}
1004
1005              Here, S<int>::f is a non-template, but S<int> is a
1006              template class.  If FN has the same type as DECL, we
1007              might be in business.  */
1008           if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
1009                             TREE_TYPE (TREE_TYPE (fn))))
1010             /* The return types differ.  */
1011             continue;
1012
1013           /* Adjust the type of DECL in case FN is a static member.  */
1014           decl_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
1015           if (DECL_STATIC_FUNCTION_P (fn) 
1016               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1017             decl_arg_types = TREE_CHAIN (decl_arg_types);
1018
1019           if (compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)), 
1020                          decl_arg_types))
1021             /* They match!  */
1022             candidates = tree_cons (NULL_TREE, fn, candidates);
1023
1024           continue;
1025         }
1026
1027       /* See whether this function might be a specialization of this
1028          template.  */
1029       targs = get_bindings (tmpl, decl, explicit_targs);
1030
1031       if (!targs)
1032         /* We cannot deduce template arguments that when used to
1033            specialize TMPL will produce DECL.  */
1034         continue;
1035
1036       /* Save this template, and the arguments deduced.  */
1037       templates = tree_cons (targs, tmpl, templates);
1038     }
1039
1040   if (templates && TREE_CHAIN (templates))
1041     {
1042       /* We have:
1043          
1044            [temp.expl.spec]
1045
1046            It is possible for a specialization with a given function
1047            signature to be instantiated from more than one function
1048            template.  In such cases, explicit specification of the
1049            template arguments must be used to uniquely identify the
1050            function template specialization being specialized.
1051
1052          Note that here, there's no suggestion that we're supposed to
1053          determine which of the candidate templates is most
1054          specialized.  However, we, also have:
1055
1056            [temp.func.order]
1057
1058            Partial ordering of overloaded function template
1059            declarations is used in the following contexts to select
1060            the function template to which a function template
1061            specialization refers: 
1062
1063            -- when an explicit specialization refers to a function
1064               template. 
1065
1066          So, we do use the partial ordering rules, at least for now.
1067          This extension can only serve to make illegal programs legal,
1068          so it's safe.  And, there is strong anecdotal evidence that
1069          the committee intended the partial ordering rules to apply;
1070          the EDG front-end has that behavior, and John Spicer claims
1071          that the committee simply forgot to delete the wording in
1072          [temp.expl.spec].  */
1073      tree tmpl = most_specialized (templates, decl, explicit_targs);
1074      if (tmpl && tmpl != error_mark_node)
1075        {
1076          targs = get_bindings (tmpl, decl, explicit_targs);
1077          templates = tree_cons (targs, tmpl, NULL_TREE);
1078        }
1079     }
1080
1081   if (templates == NULL_TREE && candidates == NULL_TREE)
1082     {
1083       cp_error_at ("template-id `%D' for `%+D' does not match any template declaration",
1084                    template_id, decl);
1085       return error_mark_node;
1086     }
1087   else if ((templates && TREE_CHAIN (templates))
1088            || (candidates && TREE_CHAIN (candidates))
1089            || (templates && candidates))
1090     {
1091       cp_error_at ("ambiguous template specialization `%D' for `%+D'",
1092                    template_id, decl);
1093       chainon (candidates, templates);
1094       print_candidates (candidates);
1095       return error_mark_node;
1096     }
1097
1098   /* We have one, and exactly one, match. */
1099   if (candidates)
1100     {
1101       /* It was a specialization of an ordinary member function in a
1102          template class.  */
1103       *targs_out = copy_node (DECL_TI_ARGS (TREE_VALUE (candidates)));
1104       return DECL_TI_TEMPLATE (TREE_VALUE (candidates));
1105     }
1106
1107   /* It was a specialization of a template.  */
1108   targs = DECL_TI_ARGS (DECL_TEMPLATE_RESULT (TREE_VALUE (templates)));
1109   if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (targs))
1110     {
1111       *targs_out = copy_node (targs);
1112       SET_TMPL_ARGS_LEVEL (*targs_out, 
1113                            TMPL_ARGS_DEPTH (*targs_out),
1114                            TREE_PURPOSE (templates));
1115     }
1116   else
1117     *targs_out = TREE_PURPOSE (templates);
1118   return TREE_VALUE (templates);
1119 }
1120       
1121 /* Check to see if the function just declared, as indicated in
1122    DECLARATOR, and in DECL, is a specialization of a function
1123    template.  We may also discover that the declaration is an explicit
1124    instantiation at this point.
1125
1126    Returns DECL, or an equivalent declaration that should be used
1127    instead if all goes well.  Issues an error message if something is
1128    amiss.  Returns error_mark_node if the error is not easily
1129    recoverable.
1130    
1131    FLAGS is a bitmask consisting of the following flags: 
1132
1133    2: The function has a definition.
1134    4: The function is a friend.
1135
1136    The TEMPLATE_COUNT is the number of references to qualifying
1137    template classes that appeared in the name of the function.  For
1138    example, in
1139
1140      template <class T> struct S { void f(); };
1141      void S<int>::f();
1142      
1143    the TEMPLATE_COUNT would be 1.  However, explicitly specialized
1144    classes are not counted in the TEMPLATE_COUNT, so that in
1145
1146      template <class T> struct S {};
1147      template <> struct S<int> { void f(); }
1148      template <> void S<int>::f();
1149
1150    the TEMPLATE_COUNT would be 0.  (Note that this declaration is
1151    illegal; there should be no template <>.)
1152
1153    If the function is a specialization, it is marked as such via
1154    DECL_TEMPLATE_SPECIALIZATION.  Furthermore, its DECL_TEMPLATE_INFO
1155    is set up correctly, and it is added to the list of specializations 
1156    for that template.  */
1157
1158 tree
1159 check_explicit_specialization (declarator, decl, template_count, flags)
1160      tree declarator;
1161      tree decl;
1162      int template_count;
1163      int flags;
1164 {
1165   int have_def = flags & 2;
1166   int is_friend = flags & 4;
1167   int specialization = 0;
1168   int explicit_instantiation = 0;
1169   int member_specialization = 0;
1170   tree ctype = DECL_CLASS_CONTEXT (decl);
1171   tree dname = DECL_NAME (decl);
1172   tmpl_spec_kind tsk;
1173
1174   tsk = current_tmpl_spec_kind (template_count);
1175
1176   switch (tsk)
1177     {
1178     case tsk_none:
1179       if (processing_specialization) 
1180         {
1181           specialization = 1;
1182           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1183         }
1184       else if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1185         {
1186           if (is_friend)
1187             /* This could be something like:
1188
1189                template <class T> void f(T);
1190                class S { friend void f<>(int); }  */
1191             specialization = 1;
1192           else
1193             {
1194               /* This case handles bogus declarations like template <>
1195                  template <class T> void f<int>(); */
1196
1197               cp_error ("template-id `%D' in declaration of primary template",
1198                         declarator);
1199               return decl;
1200             }
1201         }
1202       break;
1203
1204     case tsk_invalid_member_spec:
1205       /* The error has already been reported in
1206          check_specialization_scope.  */
1207       return error_mark_node;
1208
1209     case tsk_invalid_expl_inst:
1210       cp_error ("template parameter list used in explicit instantiation");
1211
1212       /* Fall through.  */
1213
1214     case tsk_expl_inst:
1215       if (have_def)
1216         cp_error ("definition provided for explicit instantiation");
1217       
1218       explicit_instantiation = 1;
1219       break;
1220
1221     case tsk_excessive_parms:
1222       cp_error ("too many template parameter lists in declaration of `%D'", 
1223                 decl);
1224       return error_mark_node;
1225
1226       /* Fall through.  */
1227     case tsk_expl_spec:
1228       SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1229       if (ctype)
1230         member_specialization = 1;
1231       else
1232         specialization = 1;
1233       break;
1234      
1235     case tsk_insufficient_parms:
1236       if (template_header_count)
1237         {
1238           cp_error("too few template parameter lists in declaration of `%D'", 
1239                    decl);
1240           return decl;
1241         }
1242       else if (ctype != NULL_TREE
1243                && !TYPE_BEING_DEFINED (ctype)
1244                && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype)
1245                && !is_friend)
1246         {
1247           /* For backwards compatibility, we accept:
1248
1249                template <class T> struct S { void f(); };
1250                void S<int>::f() {} // Missing template <>
1251
1252              That used to be legal C++.  */
1253           if (pedantic)
1254             cp_pedwarn
1255               ("explicit specialization not preceded by `template <>'");
1256           specialization = 1;
1257           SET_DECL_TEMPLATE_SPECIALIZATION (decl);
1258         }
1259       break;
1260
1261     case tsk_template:
1262       if (TREE_CODE (declarator) == TEMPLATE_ID_EXPR)
1263         {
1264           /* This case handles bogus declarations like template <>
1265              template <class T> void f<int>(); */
1266
1267           cp_error ("template-id `%D' in declaration of primary template",
1268                     declarator);
1269           return decl;
1270         }
1271
1272       if (ctype && CLASSTYPE_TEMPLATE_INSTANTIATION (ctype))
1273         /* This is a specialization of a member template, without
1274            specialization the containing class.  Something like:
1275
1276              template <class T> struct S {
1277                template <class U> void f (U); 
1278              };
1279              template <> template <class U> void S<int>::f(U) {}
1280              
1281            That's a specialization -- but of the entire template.  */
1282         specialization = 1;
1283       break;
1284
1285     default:
1286       my_friendly_abort (20000309);
1287     }
1288
1289   if (specialization || member_specialization)
1290     {
1291       tree t = TYPE_ARG_TYPES (TREE_TYPE (decl));
1292       for (; t; t = TREE_CHAIN (t))
1293         if (TREE_PURPOSE (t))
1294           {
1295             cp_pedwarn
1296               ("default argument specified in explicit specialization");
1297             break;
1298           }
1299       if (current_lang_name == lang_name_c)
1300         cp_error ("template specialization with C linkage");
1301     }
1302
1303   if (specialization || member_specialization || explicit_instantiation)
1304     {
1305       tree tmpl = NULL_TREE;
1306       tree targs = NULL_TREE;
1307
1308       /* Make sure that the declarator is a TEMPLATE_ID_EXPR.  */
1309       if (TREE_CODE (declarator) != TEMPLATE_ID_EXPR)
1310         {
1311           tree fns;
1312
1313           my_friendly_assert (TREE_CODE (declarator) == IDENTIFIER_NODE, 
1314                               0);
1315           if (!ctype)
1316             fns = IDENTIFIER_NAMESPACE_VALUE (dname);
1317           else
1318             fns = dname;
1319
1320           declarator = 
1321             lookup_template_function (fns, NULL_TREE);
1322         }
1323
1324       if (declarator == error_mark_node)
1325         return error_mark_node;
1326
1327       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
1328         {
1329           if (!explicit_instantiation)
1330             /* A specialization in class scope.  This is illegal,
1331                but the error will already have been flagged by
1332                check_specialization_scope.  */
1333             return error_mark_node;
1334           else
1335             {
1336               /* It's not legal to write an explicit instantiation in
1337                  class scope, e.g.:
1338
1339                    class C { template void f(); }
1340
1341                    This case is caught by the parser.  However, on
1342                    something like:
1343                
1344                    template class C { void f(); };
1345
1346                    (which is illegal) we can get here.  The error will be
1347                    issued later.  */
1348               ;
1349             }
1350
1351           return decl;
1352         }
1353       else if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR)
1354         {
1355           /* A friend declaration.  We can't do much, because we don't
1356            know what this resolves to, yet.  */
1357           my_friendly_assert (is_friend != 0, 0);
1358           my_friendly_assert (!explicit_instantiation, 0);
1359           SET_DECL_IMPLICIT_INSTANTIATION (decl);
1360           return decl;
1361         } 
1362       else if (ctype != NULL_TREE 
1363                && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
1364                    IDENTIFIER_NODE))
1365         {
1366           /* Find the list of functions in ctype that have the same
1367              name as the declared function.  */
1368           tree name = TREE_OPERAND (declarator, 0);
1369           tree fns = NULL_TREE;
1370           int idx;
1371
1372           if (name == constructor_name (ctype) 
1373               || name == constructor_name_full (ctype))
1374             {
1375               int is_constructor = DECL_CONSTRUCTOR_P (decl);
1376               
1377               if (is_constructor ? !TYPE_HAS_CONSTRUCTOR (ctype)
1378                   : !TYPE_HAS_DESTRUCTOR (ctype))
1379                 {
1380                   /* From [temp.expl.spec]:
1381                        
1382                      If such an explicit specialization for the member
1383                      of a class template names an implicitly-declared
1384                      special member function (clause _special_), the
1385                      program is ill-formed.  
1386
1387                      Similar language is found in [temp.explicit].  */
1388                   cp_error ("specialization of implicitly-declared special member function");
1389                   return error_mark_node;
1390                 }
1391
1392               name = is_constructor ? ctor_identifier : dtor_identifier;
1393             }
1394
1395           if (!IDENTIFIER_TYPENAME_P (name))
1396             {
1397               idx = lookup_fnfields_1 (ctype, name);
1398               if (idx >= 0)
1399                 fns = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (ctype), idx);
1400             }
1401           else
1402             {
1403               tree methods;
1404
1405               /* For a type-conversion operator, we cannot do a
1406                  name-based lookup.  We might be looking for `operator
1407                  int' which will be a specialization of `operator T'.
1408                  So, we find *all* the conversion operators, and then
1409                  select from them.  */
1410               fns = NULL_TREE;
1411
1412               methods = CLASSTYPE_METHOD_VEC (ctype);
1413               if (methods)
1414                 for (idx = 2; idx < TREE_VEC_LENGTH (methods); ++idx) 
1415                   {
1416                     tree ovl = TREE_VEC_ELT (methods, idx);
1417
1418                     if (!ovl || !DECL_CONV_FN_P (OVL_CURRENT (ovl)))
1419                       /* There are no more conversion functions.  */
1420                       break;
1421
1422                     /* Glue all these conversion functions together
1423                        with those we already have.  */
1424                     for (; ovl; ovl = OVL_NEXT (ovl))
1425                       fns = ovl_cons (OVL_CURRENT (ovl), fns);
1426                   }
1427             }
1428               
1429           if (fns == NULL_TREE) 
1430             {
1431               cp_error ("no member function `%D' declared in `%T'",
1432                         name, ctype);
1433               return error_mark_node;
1434             }
1435           else
1436             TREE_OPERAND (declarator, 0) = fns;
1437         }
1438       
1439       /* Figure out what exactly is being specialized at this point.
1440          Note that for an explicit instantiation, even one for a
1441          member function, we cannot tell apriori whether the
1442          instantiation is for a member template, or just a member
1443          function of a template class.  Even if a member template is
1444          being instantiated, the member template arguments may be
1445          elided if they can be deduced from the rest of the
1446          declaration.  */
1447       tmpl = determine_specialization (declarator, decl,
1448                                        &targs, 
1449                                        member_specialization);
1450             
1451       if (!tmpl || tmpl == error_mark_node)
1452         /* We couldn't figure out what this declaration was
1453            specializing.  */
1454         return error_mark_node;
1455       else
1456         {
1457           tree gen_tmpl = most_general_template (tmpl);
1458
1459           if (explicit_instantiation)
1460             {
1461               /* We don't set DECL_EXPLICIT_INSTANTIATION here; that
1462                  is done by do_decl_instantiation later.  */ 
1463
1464               int arg_depth = TMPL_ARGS_DEPTH (targs);
1465               int parm_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl));
1466
1467               if (arg_depth > parm_depth)
1468                 {
1469                   /* If TMPL is not the most general template (for
1470                      example, if TMPL is a friend template that is
1471                      injected into namespace scope), then there will
1472                      be too many levels fo TARGS.  Remove some of them
1473                      here.  */
1474                   int i;
1475                   tree new_targs;
1476
1477                   new_targs = make_tree_vec (parm_depth);
1478                   for (i = arg_depth - parm_depth; i < arg_depth; ++i)
1479                     TREE_VEC_ELT (new_targs, i - (arg_depth - parm_depth))
1480                       = TREE_VEC_ELT (targs, i);
1481                   targs = new_targs;
1482                 }
1483                   
1484               return instantiate_template (tmpl, targs);
1485             }
1486
1487           /* If this is both a template specialization, then it's a
1488              specialization of a member template of a template class.
1489              In that case we want to return the TEMPLATE_DECL, not the
1490              specialization of it.  */
1491           if (tsk == tsk_template)
1492             {
1493               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
1494               return tmpl;
1495             }
1496
1497           /* If we though that the DECL was a member function, but it
1498              turns out to be specializing a static member function,
1499              make DECL a static member function as well.  */
1500           if (DECL_STATIC_FUNCTION_P (tmpl)
1501               && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
1502             {
1503               revert_static_member_fn (decl);
1504               last_function_parms = TREE_CHAIN (last_function_parms);
1505             }
1506
1507           /* Set up the DECL_TEMPLATE_INFO for DECL.  */
1508           DECL_TEMPLATE_INFO (decl) = tree_cons (tmpl, targs, NULL_TREE);
1509
1510           /* Mangle the function name appropriately.  Note that we do
1511              not mangle specializations of non-template member
1512              functions of template classes, e.g. with
1513
1514                template <class T> struct S { void f(); }
1515
1516              and given the specialization 
1517
1518                template <> void S<int>::f() {}
1519
1520              we do not mangle S<int>::f() here.  That's because it's
1521              just an ordinary member function and doesn't need special
1522              treatment.  We do this here so that the ordinary,
1523              non-template, name-mangling algorithm will not be used
1524              later.  */
1525           if ((is_member_template (tmpl) || ctype == NULL_TREE)
1526               && name_mangling_version >= 1)
1527             set_mangled_name_for_template_decl (decl);
1528
1529           if (is_friend && !have_def)
1530             /* This is not really a declaration of a specialization.
1531                It's just the name of an instantiation.  But, it's not
1532                a request for an instantiation, either.  */
1533             SET_DECL_IMPLICIT_INSTANTIATION (decl);
1534
1535           /* Register this specialization so that we can find it
1536              again.  */
1537           decl = register_specialization (decl, gen_tmpl, targs);
1538         }
1539     }
1540   
1541   return decl;
1542 }
1543
1544 /* TYPE is being declared.  Verify that the use of template headers
1545    and such is reasonable.  Issue error messages if not.  */
1546
1547 void
1548 maybe_check_template_type (type)
1549      tree type;
1550 {
1551   if (template_header_count)
1552     {
1553       /* We are in the scope of some `template <...>' header.  */
1554
1555       int context_depth 
1556         = template_class_depth_real (TYPE_CONTEXT (type),
1557                                      /*count_specializations=*/1);
1558
1559       if (template_header_count <= context_depth)
1560         /* This is OK; the template headers are for the context.  We
1561            are actually too lenient here; like
1562            check_explicit_specialization we should consider the number
1563            of template types included in the actual declaration.  For
1564            example, 
1565
1566              template <class T> struct S {
1567                template <class U> template <class V>
1568                struct I {};
1569              }; 
1570
1571            is illegal, but:
1572
1573              template <class T> struct S {
1574                template <class U> struct I;
1575              }; 
1576
1577              template <class T> template <class U.
1578              struct S<T>::I {};
1579
1580            is not.  */
1581         ; 
1582       else if (template_header_count > context_depth + 1)
1583         /* There are two many template parameter lists.  */
1584         cp_error ("too many template parameter lists in declaration of `%T'", type); 
1585     }
1586 }
1587
1588 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
1589    parameters.  These are represented in the same format used for
1590    DECL_TEMPLATE_PARMS.  */
1591
1592 int comp_template_parms (parms1, parms2)
1593      tree parms1;
1594      tree parms2;
1595 {
1596   tree p1;
1597   tree p2;
1598
1599   if (parms1 == parms2)
1600     return 1;
1601
1602   for (p1 = parms1, p2 = parms2; 
1603        p1 != NULL_TREE && p2 != NULL_TREE;
1604        p1 = TREE_CHAIN (p1), p2 = TREE_CHAIN (p2))
1605     {
1606       tree t1 = TREE_VALUE (p1);
1607       tree t2 = TREE_VALUE (p2);
1608       int i;
1609
1610       my_friendly_assert (TREE_CODE (t1) == TREE_VEC, 0);
1611       my_friendly_assert (TREE_CODE (t2) == TREE_VEC, 0);
1612
1613       if (TREE_VEC_LENGTH (t1) != TREE_VEC_LENGTH (t2))
1614         return 0;
1615
1616       for (i = 0; i < TREE_VEC_LENGTH (t2); ++i) 
1617         {
1618           tree parm1 = TREE_VALUE (TREE_VEC_ELT (t1, i));
1619           tree parm2 = TREE_VALUE (TREE_VEC_ELT (t2, i));
1620
1621           if (TREE_CODE (parm1) != TREE_CODE (parm2))
1622             return 0;
1623
1624           if (TREE_CODE (parm1) == TEMPLATE_TYPE_PARM)
1625             continue;
1626           else if (!same_type_p (TREE_TYPE (parm1), TREE_TYPE (parm2)))
1627             return 0;
1628         }
1629     }
1630
1631   if ((p1 != NULL_TREE) != (p2 != NULL_TREE))
1632     /* One set of parameters has more parameters lists than the
1633        other.  */
1634     return 0;
1635
1636   return 1;
1637 }
1638
1639 /* Complain if DECL shadows a template parameter.
1640
1641    [temp.local]: A template-parameter shall not be redeclared within its
1642    scope (including nested scopes).  */
1643
1644 void
1645 check_template_shadow (decl)
1646      tree decl;
1647 {
1648   tree olddecl;
1649
1650   /* If we're not in a template, we can't possibly shadow a template
1651      parameter.  */
1652   if (!current_template_parms)
1653     return;
1654
1655   /* Figure out what we're shadowing.  */
1656   if (TREE_CODE (decl) == OVERLOAD)
1657     decl = OVL_CURRENT (decl);
1658   olddecl = IDENTIFIER_VALUE (DECL_NAME (decl));
1659
1660   /* If there's no previous binding for this name, we're not shadowing
1661      anything, let alone a template parameter.  */
1662   if (!olddecl)
1663     return;
1664
1665   /* If we're not shadowing a template parameter, we're done.  Note
1666      that OLDDECL might be an OVERLOAD (or perhaps even an
1667      ERROR_MARK), so we can't just blithely assume it to be a _DECL
1668      node.  */
1669   if (!DECL_P (olddecl) || !DECL_TEMPLATE_PARM_P (olddecl))
1670     return;
1671
1672   /* We check for decl != olddecl to avoid bogus errors for using a
1673      name inside a class.  We check TPFI to avoid duplicate errors for
1674      inline member templates.  */
1675   if (decl == olddecl 
1676       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
1677     return;
1678
1679   cp_error_at ("declaration of `%#D'", decl);
1680   cp_error_at (" shadows template parm `%#D'", olddecl);
1681 }
1682
1683 /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
1684    ORIG_LEVEL, DECL, and TYPE.  */
1685
1686 static tree
1687 build_template_parm_index (index, level, orig_level, decl, type)
1688      int index;
1689      int level;
1690      int orig_level;
1691      tree decl;
1692      tree type;
1693 {
1694   tree t = make_node (TEMPLATE_PARM_INDEX);
1695   TEMPLATE_PARM_IDX (t) = index;
1696   TEMPLATE_PARM_LEVEL (t) = level;
1697   TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
1698   TEMPLATE_PARM_DECL (t) = decl;
1699   TREE_TYPE (t) = type;
1700
1701   return t;
1702 }
1703
1704 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose
1705    TEMPLATE_PARM_LEVEL has been decreased by LEVELS.  If such a
1706    TEMPLATE_PARM_INDEX already exists, it is returned; otherwise, a
1707    new one is created.  */
1708
1709 static tree 
1710 reduce_template_parm_level (index, type, levels)
1711      tree index;
1712      tree type;
1713      int levels;
1714 {
1715   if (TEMPLATE_PARM_DESCENDANTS (index) == NULL_TREE
1716       || (TEMPLATE_PARM_LEVEL (TEMPLATE_PARM_DESCENDANTS (index))
1717           != TEMPLATE_PARM_LEVEL (index) - levels))
1718     {
1719       tree decl 
1720         = build_decl (TREE_CODE (TEMPLATE_PARM_DECL (index)),
1721                       DECL_NAME (TEMPLATE_PARM_DECL (index)),
1722                       type);
1723       tree t
1724         = build_template_parm_index (TEMPLATE_PARM_IDX (index),
1725                                      TEMPLATE_PARM_LEVEL (index) - levels,
1726                                      TEMPLATE_PARM_ORIG_LEVEL (index),
1727                                      decl, type);
1728       TEMPLATE_PARM_DESCENDANTS (index) = t;
1729
1730       /* Template template parameters need this.  */
1731       DECL_TEMPLATE_PARMS (decl)
1732         = DECL_TEMPLATE_PARMS (TEMPLATE_PARM_DECL (index));
1733     }
1734
1735   return TEMPLATE_PARM_DESCENDANTS (index);
1736 }
1737
1738 /* Process information from new template parameter NEXT and append it to the
1739    LIST being built.  */
1740
1741 tree
1742 process_template_parm (list, next)
1743      tree list, next;
1744 {
1745   tree parm;
1746   tree decl = 0;
1747   tree defval;
1748   int is_type, idx;
1749
1750   parm = next;
1751   my_friendly_assert (TREE_CODE (parm) == TREE_LIST, 259);
1752   defval = TREE_PURPOSE (parm);
1753   parm = TREE_VALUE (parm);
1754   is_type = TREE_PURPOSE (parm) == class_type_node;
1755
1756   if (list)
1757     {
1758       tree p = TREE_VALUE (tree_last (list));
1759
1760       if (TREE_CODE (p) == TYPE_DECL)
1761         idx = TEMPLATE_TYPE_IDX (TREE_TYPE (p));
1762       else if (TREE_CODE (p) == TEMPLATE_DECL)
1763         idx = TEMPLATE_TYPE_IDX (TREE_TYPE (DECL_TEMPLATE_RESULT (p)));
1764       else
1765         idx = TEMPLATE_PARM_IDX (DECL_INITIAL (p));
1766       ++idx;
1767     }
1768   else
1769     idx = 0;
1770
1771   if (!is_type)
1772     {
1773       my_friendly_assert (TREE_CODE (TREE_PURPOSE (parm)) == TREE_LIST, 260);
1774       /* is a const-param */
1775       parm = grokdeclarator (TREE_VALUE (parm), TREE_PURPOSE (parm),
1776                              PARM, 0, NULL_TREE);
1777
1778       /* [temp.param]
1779
1780          The top-level cv-qualifiers on the template-parameter are
1781          ignored when determining its type.  */
1782       TREE_TYPE (parm) = TYPE_MAIN_VARIANT (TREE_TYPE (parm));
1783
1784       /* A template parameter is not modifiable.  */
1785       TREE_READONLY (parm) = 1;
1786       if (IS_AGGR_TYPE (TREE_TYPE (parm))
1787           && TREE_CODE (TREE_TYPE (parm)) != TEMPLATE_TYPE_PARM
1788           && TREE_CODE (TREE_TYPE (parm)) != TYPENAME_TYPE)
1789         {
1790           cp_error ("`%#T' is not a valid type for a template constant parameter",
1791                     TREE_TYPE (parm));
1792           if (DECL_NAME (parm) == NULL_TREE)
1793             error ("  a template type parameter must begin with `class' or `typename'");
1794           TREE_TYPE (parm) = void_type_node;
1795         }
1796       else if (pedantic
1797                && (TREE_CODE (TREE_TYPE (parm)) == REAL_TYPE
1798                    || TREE_CODE (TREE_TYPE (parm)) == COMPLEX_TYPE))
1799         cp_pedwarn ("`%T' is not a valid type for a template constant parameter",
1800                     TREE_TYPE (parm));
1801       decl = build_decl (CONST_DECL, DECL_NAME (parm), TREE_TYPE (parm));
1802       DECL_INITIAL (parm) = DECL_INITIAL (decl) 
1803         = build_template_parm_index (idx, processing_template_decl,
1804                                      processing_template_decl,
1805                                      decl, TREE_TYPE (parm));
1806     }
1807   else
1808     {
1809       tree t;
1810       parm = TREE_VALUE (parm);
1811       
1812       if (parm && TREE_CODE (parm) == TEMPLATE_DECL)
1813         {
1814           t = make_aggr_type (TEMPLATE_TEMPLATE_PARM);
1815           /* This is for distinguishing between real templates and template 
1816              template parameters */
1817           TREE_TYPE (parm) = t;
1818           TREE_TYPE (DECL_TEMPLATE_RESULT (parm)) = t;
1819           decl = parm;
1820         }
1821       else
1822         {
1823           t = make_aggr_type (TEMPLATE_TYPE_PARM);
1824           /* parm is either IDENTIFIER_NODE or NULL_TREE */
1825           decl = build_decl (TYPE_DECL, parm, t);
1826         }
1827         
1828       TYPE_NAME (t) = decl;
1829       TYPE_STUB_DECL (t) = decl;
1830       parm = decl;
1831       TEMPLATE_TYPE_PARM_INDEX (t)
1832         = build_template_parm_index (idx, processing_template_decl, 
1833                                      processing_template_decl,
1834                                      decl, TREE_TYPE (parm));
1835     }
1836   SET_DECL_ARTIFICIAL (decl);
1837   SET_DECL_TEMPLATE_PARM_P (decl);
1838   pushdecl (decl);
1839   parm = build_tree_list (defval, parm);
1840   return chainon (list, parm);
1841 }
1842
1843 /* The end of a template parameter list has been reached.  Process the
1844    tree list into a parameter vector, converting each parameter into a more
1845    useful form.  Type parameters are saved as IDENTIFIER_NODEs, and others
1846    as PARM_DECLs.  */
1847
1848 tree
1849 end_template_parm_list (parms)
1850      tree parms;
1851 {
1852   int nparms;
1853   tree parm;
1854   tree saved_parmlist = make_tree_vec (list_length (parms));
1855
1856   current_template_parms
1857     = tree_cons (build_int_2 (0, processing_template_decl),
1858                  saved_parmlist, current_template_parms);
1859
1860   for (parm = parms, nparms = 0; 
1861        parm; 
1862        parm = TREE_CHAIN (parm), nparms++)
1863     TREE_VEC_ELT (saved_parmlist, nparms) = parm;
1864
1865   --processing_template_parmlist;
1866
1867   return saved_parmlist;
1868 }
1869
1870 /* end_template_decl is called after a template declaration is seen.  */
1871
1872 void
1873 end_template_decl ()
1874 {
1875   reset_specialization ();
1876
1877   if (! processing_template_decl)
1878     return;
1879
1880   /* This matches the pushlevel in begin_template_parm_list.  */
1881   finish_scope ();
1882
1883   --processing_template_decl;
1884   current_template_parms = TREE_CHAIN (current_template_parms);
1885 }
1886
1887 /* Given a template argument vector containing the template PARMS.
1888    The innermost PARMS are given first.  */
1889
1890 tree
1891 current_template_args ()
1892 {
1893   tree header;
1894   tree args = NULL_TREE;
1895   int length = TMPL_PARMS_DEPTH (current_template_parms);
1896   int l = length;
1897
1898   /* If there is only one level of template parameters, we do not
1899      create a TREE_VEC of TREE_VECs.  Instead, we return a single
1900      TREE_VEC containing the arguments.  */
1901   if (length > 1)
1902     args = make_tree_vec (length);
1903
1904   for (header = current_template_parms; header; header = TREE_CHAIN (header))
1905     {
1906       tree a = copy_node (TREE_VALUE (header));
1907       int i;
1908
1909       TREE_TYPE (a) = NULL_TREE;
1910       for (i = TREE_VEC_LENGTH (a) - 1; i >= 0; --i)
1911         {
1912           tree t = TREE_VEC_ELT (a, i);
1913
1914           /* T will be a list if we are called from within a
1915              begin/end_template_parm_list pair, but a vector directly
1916              if within a begin/end_member_template_processing pair.  */
1917           if (TREE_CODE (t) == TREE_LIST) 
1918             {
1919               t = TREE_VALUE (t);
1920               
1921               if (TREE_CODE (t) == TYPE_DECL 
1922                   || TREE_CODE (t) == TEMPLATE_DECL)
1923                 t = TREE_TYPE (t);
1924               else
1925                 t = DECL_INITIAL (t);
1926               TREE_VEC_ELT (a, i) = t;
1927             }
1928         }
1929
1930       if (length > 1)
1931         TREE_VEC_ELT (args, --l) = a;
1932       else
1933         args = a;
1934     }
1935
1936   return args;
1937 }
1938
1939 /* Return a TEMPLATE_DECL corresponding to DECL, using the indicated
1940    template PARMS.  Used by push_template_decl below.  */
1941
1942 static tree
1943 build_template_decl (decl, parms)
1944      tree decl;
1945      tree parms;
1946 {
1947   tree tmpl = build_lang_decl (TEMPLATE_DECL, DECL_NAME (decl), NULL_TREE);
1948   DECL_TEMPLATE_PARMS (tmpl) = parms;
1949   DECL_CONTEXT (tmpl) = DECL_CONTEXT (decl);
1950   if (DECL_LANG_SPECIFIC (decl))
1951     {
1952       DECL_VIRTUAL_CONTEXT (tmpl) = DECL_VIRTUAL_CONTEXT (decl);
1953       DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
1954       DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
1955       DECL_NONCONVERTING_P (tmpl) = DECL_NONCONVERTING_P (decl);
1956     }
1957
1958   return tmpl;
1959 }
1960
1961 struct template_parm_data
1962 {
1963   /* The level of the template parameters we are currently
1964      processing.  */
1965   int level;
1966
1967   /* The index of the specialization argument we are currently
1968      processing.  */
1969   int current_arg;
1970
1971   /* An array whose size is the number of template parameters.  The
1972      elements are non-zero if the parameter has been used in any one
1973      of the arguments processed so far.  */
1974   int* parms;
1975
1976   /* An array whose size is the number of template arguments.  The
1977      elements are non-zero if the argument makes use of template
1978      parameters of this level.  */
1979   int* arg_uses_template_parms;
1980 };
1981
1982 /* Subroutine of push_template_decl used to see if each template
1983    parameter in a partial specialization is used in the explicit
1984    argument list.  If T is of the LEVEL given in DATA (which is
1985    treated as a template_parm_data*), then DATA->PARMS is marked
1986    appropriately.  */
1987
1988 static int
1989 mark_template_parm (t, data)
1990      tree t;
1991      void* data;
1992 {
1993   int level;
1994   int idx;
1995   struct template_parm_data* tpd = (struct template_parm_data*) data;
1996
1997   if (TREE_CODE (t) == TEMPLATE_PARM_INDEX)
1998     {
1999       level = TEMPLATE_PARM_LEVEL (t);
2000       idx = TEMPLATE_PARM_IDX (t);
2001     }
2002   else
2003     {
2004       level = TEMPLATE_TYPE_LEVEL (t);
2005       idx = TEMPLATE_TYPE_IDX (t);
2006     }
2007
2008   if (level == tpd->level)
2009     {
2010       tpd->parms[idx] = 1;
2011       tpd->arg_uses_template_parms[tpd->current_arg] = 1;
2012     }
2013
2014   /* Return zero so that for_each_template_parm will continue the
2015      traversal of the tree; we want to mark *every* template parm.  */
2016   return 0;
2017 }
2018
2019 /* Process the partial specialization DECL.  */
2020
2021 static tree
2022 process_partial_specialization (decl)
2023      tree decl;
2024 {
2025   tree type = TREE_TYPE (decl);
2026   tree maintmpl = CLASSTYPE_TI_TEMPLATE (type);
2027   tree specargs = CLASSTYPE_TI_ARGS (type);
2028   tree inner_args = innermost_args (specargs);
2029   tree inner_parms = INNERMOST_TEMPLATE_PARMS (current_template_parms);
2030   tree main_inner_parms = DECL_INNERMOST_TEMPLATE_PARMS (maintmpl);
2031   int nargs = TREE_VEC_LENGTH (inner_args);
2032   int ntparms = TREE_VEC_LENGTH (inner_parms);
2033   int  i;
2034   int did_error_intro = 0;
2035   struct template_parm_data tpd;
2036   struct template_parm_data tpd2;
2037
2038   /* We check that each of the template parameters given in the
2039      partial specialization is used in the argument list to the
2040      specialization.  For example:
2041
2042        template <class T> struct S;
2043        template <class T> struct S<T*>;
2044
2045      The second declaration is OK because `T*' uses the template
2046      parameter T, whereas
2047
2048        template <class T> struct S<int>;
2049
2050      is no good.  Even trickier is:
2051
2052        template <class T>
2053        struct S1
2054        {
2055           template <class U>
2056           struct S2;
2057           template <class U>
2058           struct S2<T>;
2059        };
2060
2061      The S2<T> declaration is actually illegal; it is a
2062      full-specialization.  Of course, 
2063
2064           template <class U>
2065           struct S2<T (*)(U)>;
2066
2067      or some such would have been OK.  */
2068   tpd.level = TMPL_PARMS_DEPTH (current_template_parms);
2069   tpd.parms = alloca (sizeof (int) * ntparms);
2070   bzero ((PTR) tpd.parms, sizeof (int) * ntparms);
2071
2072   tpd.arg_uses_template_parms = alloca (sizeof (int) * nargs);
2073   bzero ((PTR) tpd.arg_uses_template_parms, sizeof (int) * nargs);
2074   for (i = 0; i < nargs; ++i)
2075     {
2076       tpd.current_arg = i;
2077       for_each_template_parm (TREE_VEC_ELT (inner_args, i),
2078                               &mark_template_parm,
2079                               &tpd);
2080     }
2081   for (i = 0; i < ntparms; ++i)
2082     if (tpd.parms[i] == 0)
2083       {
2084         /* One of the template parms was not used in the
2085            specialization.  */
2086         if (!did_error_intro)
2087           {
2088             cp_error ("template parameters not used in partial specialization:");
2089             did_error_intro = 1;
2090           }
2091
2092         cp_error ("        `%D'", 
2093                   TREE_VALUE (TREE_VEC_ELT (inner_parms, i)));
2094       }
2095
2096   /* [temp.class.spec]
2097
2098      The argument list of the specialization shall not be identical to
2099      the implicit argument list of the primary template.  */
2100   if (comp_template_args (inner_args, 
2101                           innermost_args (CLASSTYPE_TI_ARGS (TREE_TYPE
2102                                                              (maintmpl)))))
2103     cp_error ("partial specialization `%T' does not specialize any template arguments", type);
2104
2105   /* [temp.class.spec]
2106
2107      A partially specialized non-type argument expression shall not
2108      involve template parameters of the partial specialization except
2109      when the argument expression is a simple identifier.
2110
2111      The type of a template parameter corresponding to a specialized
2112      non-type argument shall not be dependent on a parameter of the
2113      specialization.  */
2114   my_friendly_assert (nargs == DECL_NTPARMS (maintmpl), 0);
2115   tpd2.parms = 0;
2116   for (i = 0; i < nargs; ++i)
2117     {
2118       tree arg = TREE_VEC_ELT (inner_args, i);
2119       if (/* These first two lines are the `non-type' bit.  */
2120           !TYPE_P (arg)
2121           && TREE_CODE (arg) != TEMPLATE_DECL
2122           /* This next line is the `argument expression is not just a
2123              simple identifier' condition and also the `specialized
2124              non-type argument' bit.  */
2125           && TREE_CODE (arg) != TEMPLATE_PARM_INDEX)
2126         {
2127           if (tpd.arg_uses_template_parms[i])
2128             cp_error ("template argument `%E' involves template parameter(s)", arg);
2129           else 
2130             {
2131               /* Look at the corresponding template parameter,
2132                  marking which template parameters its type depends
2133                  upon.  */
2134               tree type = 
2135                 TREE_TYPE (TREE_VALUE (TREE_VEC_ELT (main_inner_parms, 
2136                                                      i)));
2137
2138               if (!tpd2.parms)
2139                 {
2140                   /* We haven't yet initialized TPD2.  Do so now.  */
2141                   tpd2.arg_uses_template_parms 
2142                     =  (int*) alloca (sizeof (int) * nargs);
2143                   /* The number of parameters here is the number in the
2144                      main template, which, as checked in the assertion
2145                      above, is NARGS.  */
2146                   tpd2.parms = (int*) alloca (sizeof (int) * nargs);
2147                   tpd2.level = 
2148                     TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (maintmpl));
2149                 }
2150
2151               /* Mark the template parameters.  But this time, we're
2152                  looking for the template parameters of the main
2153                  template, not in the specialization.  */
2154               tpd2.current_arg = i;
2155               tpd2.arg_uses_template_parms[i] = 0;
2156               bzero ((PTR) tpd2.parms, sizeof (int) * nargs);
2157               for_each_template_parm (type,
2158                                       &mark_template_parm,
2159                                       &tpd2);
2160                   
2161               if (tpd2.arg_uses_template_parms [i])
2162                 {
2163                   /* The type depended on some template parameters.
2164                      If they are fully specialized in the
2165                      specialization, that's OK.  */
2166                   int j;
2167                   for (j = 0; j < nargs; ++j)
2168                     if (tpd2.parms[j] != 0
2169                         && tpd.arg_uses_template_parms [j])
2170                       {
2171                         cp_error ("type `%T' of template argument `%E' depends on template parameter(s)", 
2172                                   type,
2173                                   arg);
2174                         break;
2175                       }
2176                 }
2177             }
2178         }
2179     }
2180
2181   if (retrieve_specialization (maintmpl, specargs))
2182     /* We've already got this specialization.  */
2183     return decl;
2184
2185   DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)
2186     = tree_cons (inner_args, inner_parms,
2187                  DECL_TEMPLATE_SPECIALIZATIONS (maintmpl));
2188   TREE_TYPE (DECL_TEMPLATE_SPECIALIZATIONS (maintmpl)) = type;
2189   return decl;
2190 }
2191
2192 /* Check that a template declaration's use of default arguments is not
2193    invalid.  Here, PARMS are the template parameters.  IS_PRIMARY is
2194    non-zero if DECL is the thing declared by a primary template.
2195    IS_PARTIAL is non-zero if DECL is a partial specialization.  */
2196
2197 static void
2198 check_default_tmpl_args (decl, parms, is_primary, is_partial)
2199      tree decl;
2200      tree parms;
2201      int is_primary;
2202      int is_partial;
2203 {
2204   const char *msg;
2205   int last_level_to_check;
2206   tree parm_level;
2207
2208   /* [temp.param] 
2209
2210      A default template-argument shall not be specified in a
2211      function template declaration or a function template definition, nor
2212      in the template-parameter-list of the definition of a member of a
2213      class template.  */
2214
2215   if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
2216     /* You can't have a function template declaration in a local
2217        scope, nor you can you define a member of a class template in a
2218        local scope.  */
2219     return;
2220
2221   if (current_class_type
2222       && !TYPE_BEING_DEFINED (current_class_type)
2223       && DECL_LANG_SPECIFIC (decl)
2224       /* If this is either a friend defined in the scope of the class
2225          or a member function.  */
2226       && ((DECL_CONTEXT (decl) 
2227            && same_type_p (DECL_CONTEXT (decl), current_class_type))
2228           || (DECL_FRIEND_CONTEXT (decl)
2229               && same_type_p (DECL_FRIEND_CONTEXT (decl), 
2230                               current_class_type)))
2231       /* And, if it was a member function, it really was defined in
2232          the scope of the class.  */
2233       && (!DECL_FUNCTION_MEMBER_P (decl) || DECL_DEFINED_IN_CLASS_P (decl)))
2234     /* We already checked these parameters when the template was
2235        declared, so there's no need to do it again now.  This function
2236        was defined in class scope, but we're processing it's body now
2237        that the class is complete.  */
2238     return;
2239
2240   /* [temp.param]
2241          
2242      If a template-parameter has a default template-argument, all
2243      subsequent template-parameters shall have a default
2244      template-argument supplied.  */
2245   for (parm_level = parms; parm_level; parm_level = TREE_CHAIN (parm_level))
2246     {
2247       tree inner_parms = TREE_VALUE (parm_level);
2248       int ntparms = TREE_VEC_LENGTH (inner_parms);
2249       int seen_def_arg_p = 0; 
2250       int i;
2251
2252       for (i = 0; i < ntparms; ++i) 
2253         {
2254           tree parm = TREE_VEC_ELT (inner_parms, i);
2255           if (TREE_PURPOSE (parm))
2256             seen_def_arg_p = 1;
2257           else if (seen_def_arg_p)
2258             {
2259               cp_error ("no default argument for `%D'", TREE_VALUE (parm));
2260               /* For better subsequent error-recovery, we indicate that
2261                  there should have been a default argument.  */
2262               TREE_PURPOSE (parm) = error_mark_node;
2263             }
2264         }
2265     }
2266
2267   if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)
2268     /* For an ordinary class template, default template arguments are
2269        allowed at the innermost level, e.g.:
2270          template <class T = int>
2271          struct S {};
2272        but, in a partial specialization, they're not allowed even
2273        there, as we have in [temp.class.spec]:
2274      
2275          The template parameter list of a specialization shall not
2276          contain default template argument values.  
2277
2278        So, for a partial specialization, or for a function template,
2279        we look at all of them.  */
2280     ;
2281   else
2282     /* But, for a primary class template that is not a partial
2283        specialization we look at all template parameters except the
2284        innermost ones.  */
2285     parms = TREE_CHAIN (parms);
2286
2287   /* Figure out what error message to issue.  */
2288   if (TREE_CODE (decl) == FUNCTION_DECL)
2289     msg = "default argument for template parameter in function template `%D'";
2290   else if (is_partial)
2291     msg = "default argument in partial specialization `%D'";
2292   else
2293     msg = "default argument for template parameter for class enclosing `%D'";
2294
2295   if (current_class_type && TYPE_BEING_DEFINED (current_class_type))
2296     /* If we're inside a class definition, there's no need to
2297        examine the parameters to the class itself.  On the one
2298        hand, they will be checked when the class is defined, and,
2299        on the other, default arguments are legal in things like:
2300          template <class T = double>
2301          struct S { template <class U> void f(U); };
2302        Here the default argument for `S' has no bearing on the
2303        declaration of `f'.  */
2304     last_level_to_check = template_class_depth (current_class_type) + 1;
2305   else
2306     /* Check everything.  */
2307     last_level_to_check = 0;
2308
2309   for (parm_level = parms; 
2310        parm_level && TMPL_PARMS_DEPTH (parm_level) >= last_level_to_check; 
2311        parm_level = TREE_CHAIN (parm_level))
2312     {
2313       tree inner_parms = TREE_VALUE (parm_level);
2314       int i;
2315       int ntparms;
2316
2317       ntparms = TREE_VEC_LENGTH (inner_parms);
2318       for (i = 0; i < ntparms; ++i) 
2319         if (TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)))
2320           {
2321             if (msg)
2322               {
2323                 cp_error (msg, decl);
2324                 msg = 0;
2325               }
2326
2327             /* Clear out the default argument so that we are not
2328                confused later.  */
2329             TREE_PURPOSE (TREE_VEC_ELT (inner_parms, i)) = NULL_TREE;
2330           }
2331
2332       /* At this point, if we're still interested in issuing messages,
2333          they must apply to classes surrounding the object declared.  */
2334       if (msg)
2335         msg = "default argument for template parameter for class enclosing `%D'"; 
2336     }
2337 }
2338
2339 /* Creates a TEMPLATE_DECL for the indicated DECL using the template
2340    parameters given by current_template_args, or reuses a
2341    previously existing one, if appropriate.  Returns the DECL, or an
2342    equivalent one, if it is replaced via a call to duplicate_decls.  
2343
2344    If IS_FRIEND is non-zero, DECL is a friend declaration.  */
2345
2346 tree
2347 push_template_decl_real (decl, is_friend)
2348      tree decl;
2349      int is_friend;
2350 {
2351   tree tmpl;
2352   tree args;
2353   tree info;
2354   tree ctx;
2355   int primary;
2356   int is_partial;
2357   int new_template_p = 0;
2358
2359   /* See if this is a partial specialization.  */
2360   is_partial = (DECL_IMPLICIT_TYPEDEF_P (decl)
2361                 && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE
2362                 && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)));
2363
2364   is_friend |= (TREE_CODE (decl) == FUNCTION_DECL && DECL_FRIEND_P (decl));
2365
2366   if (is_friend)
2367     /* For a friend, we want the context of the friend function, not
2368        the type of which it is a friend.  */
2369     ctx = DECL_CONTEXT (decl);
2370   else if (CP_DECL_CONTEXT (decl)
2371            && TREE_CODE (CP_DECL_CONTEXT (decl)) != NAMESPACE_DECL)
2372     /* In the case of a virtual function, we want the class in which
2373        it is defined.  */
2374     ctx = CP_DECL_CONTEXT (decl);
2375   else
2376     /* Otherwise, if we're currently definining some class, the DECL
2377        is assumed to be a member of the class.  */
2378     ctx = current_scope ();
2379
2380   if (ctx && TREE_CODE (ctx) == NAMESPACE_DECL)
2381     ctx = NULL_TREE;
2382
2383   if (!DECL_CONTEXT (decl))
2384     DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
2385
2386   /* See if this is a primary template.  */
2387   primary = template_parm_scope_p ();
2388
2389   if (primary)
2390     {
2391       if (current_lang_name == lang_name_c)
2392         cp_error ("template with C linkage");
2393       else if (TREE_CODE (decl) == TYPE_DECL 
2394                && ANON_AGGRNAME_P (DECL_NAME (decl))) 
2395         cp_error ("template class without a name");
2396       else if ((DECL_IMPLICIT_TYPEDEF_P (decl)
2397                 && CLASS_TYPE_P (TREE_TYPE (decl)))
2398                || (TREE_CODE (decl) == VAR_DECL && ctx && CLASS_TYPE_P (ctx))
2399                || TREE_CODE (decl) == FUNCTION_DECL)
2400         /* OK */;
2401       else
2402         cp_error ("template declaration of `%#D'", decl);
2403     }
2404
2405   /* Check to see that the rules regarding the use of default
2406      arguments are not being violated.  */
2407   check_default_tmpl_args (decl, current_template_parms, 
2408                            primary, is_partial);
2409
2410   if (is_partial)
2411     return process_partial_specialization (decl);
2412
2413   args = current_template_args ();
2414
2415   if (!ctx 
2416       || TREE_CODE (ctx) == FUNCTION_DECL
2417       || TYPE_BEING_DEFINED (ctx)
2418       || (is_friend && !DECL_TEMPLATE_INFO (decl)))
2419     {
2420       if (DECL_LANG_SPECIFIC (decl)
2421           && DECL_TEMPLATE_INFO (decl)
2422           && DECL_TI_TEMPLATE (decl))
2423         tmpl = DECL_TI_TEMPLATE (decl);
2424       /* If DECL is a TYPE_DECL for a class-template, then there won't
2425          be DECL_LANG_SPECIFIC.  The information equivalent to
2426          DECL_TEMPLATE_INFO is found in TYPE_TEMPLATE_INFO instead.  */
2427       else if (DECL_IMPLICIT_TYPEDEF_P (decl) 
2428                && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2429                && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2430         {
2431           /* Since a template declaration already existed for this
2432              class-type, we must be redeclaring it here.  Make sure
2433              that the redeclaration is legal.  */
2434           redeclare_class_template (TREE_TYPE (decl),
2435                                     current_template_parms);
2436           /* We don't need to create a new TEMPLATE_DECL; just use the
2437              one we already had.  */
2438           tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
2439         }
2440       else
2441         {
2442           tmpl = build_template_decl (decl, current_template_parms);
2443           new_template_p = 1;
2444
2445           if (DECL_LANG_SPECIFIC (decl)
2446               && DECL_TEMPLATE_SPECIALIZATION (decl))
2447             {
2448               /* A specialization of a member template of a template
2449                  class. */
2450               SET_DECL_TEMPLATE_SPECIALIZATION (tmpl);
2451               DECL_TEMPLATE_INFO (tmpl) = DECL_TEMPLATE_INFO (decl);
2452               DECL_TEMPLATE_INFO (decl) = NULL_TREE;
2453             }
2454         }
2455     }
2456   else
2457     {
2458       tree a, t, current, parms;
2459       int i;
2460
2461       if (TREE_CODE (decl) == TYPE_DECL)
2462         {
2463           if ((IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl)))
2464                || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
2465               && TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2466               && TYPE_TI_TEMPLATE (TREE_TYPE (decl)))
2467             tmpl = TYPE_TI_TEMPLATE (TREE_TYPE (decl));
2468           else
2469             {
2470               cp_error ("`%D' does not declare a template type", decl);
2471               return decl;
2472             }
2473         }
2474       else if (! DECL_TEMPLATE_INFO (decl))
2475         {
2476           cp_error ("template definition of non-template `%#D'", decl);
2477           return decl;
2478         }
2479       else
2480         tmpl = DECL_TI_TEMPLATE (decl);
2481       
2482       if (is_member_template (tmpl)
2483           && DECL_FUNCTION_TEMPLATE_P (tmpl)
2484           && DECL_TEMPLATE_INFO (decl) && DECL_TI_ARGS (decl) 
2485           && DECL_TEMPLATE_SPECIALIZATION (decl))
2486         {
2487           tree new_tmpl;
2488
2489           /* The declaration is a specialization of a member
2490              template, declared outside the class.  Therefore, the
2491              innermost template arguments will be NULL, so we
2492              replace them with the arguments determined by the
2493              earlier call to check_explicit_specialization.  */
2494           args = DECL_TI_ARGS (decl);
2495
2496           new_tmpl 
2497             = build_template_decl (decl, current_template_parms);
2498           DECL_TEMPLATE_RESULT (new_tmpl) = decl;
2499           TREE_TYPE (new_tmpl) = TREE_TYPE (decl);
2500           DECL_TI_TEMPLATE (decl) = new_tmpl;
2501           SET_DECL_TEMPLATE_SPECIALIZATION (new_tmpl);
2502           DECL_TEMPLATE_INFO (new_tmpl) 
2503             = tree_cons (tmpl, args, NULL_TREE);
2504
2505           register_specialization (new_tmpl, tmpl, args);
2506           return decl;
2507         }
2508
2509       /* Make sure the template headers we got make sense.  */
2510
2511       parms = DECL_TEMPLATE_PARMS (tmpl);
2512       i = TMPL_PARMS_DEPTH (parms);
2513       if (TMPL_ARGS_DEPTH (args) != i)
2514         {
2515           cp_error ("expected %d levels of template parms for `%#D', got %d",
2516                     i, decl, TMPL_ARGS_DEPTH (args));
2517         }
2518       else
2519         for (current = decl; i > 0; --i, parms = TREE_CHAIN (parms))
2520           {
2521             a = TMPL_ARGS_LEVEL (args, i);
2522             t = INNERMOST_TEMPLATE_PARMS (parms);
2523
2524             if (TREE_VEC_LENGTH (t) != TREE_VEC_LENGTH (a))
2525               {
2526                 if (current == decl)
2527                   cp_error ("got %d template parameters for `%#D'",
2528                             TREE_VEC_LENGTH (a), decl);
2529                 else
2530                   cp_error ("got %d template parameters for `%#T'",
2531                             TREE_VEC_LENGTH (a), current);
2532                 cp_error ("  but %d required", TREE_VEC_LENGTH (t));
2533               }
2534
2535             /* Perhaps we should also check that the parms are used in the
2536                appropriate qualifying scopes in the declarator?  */
2537
2538             if (current == decl)
2539               current = ctx;
2540             else
2541               current = TYPE_CONTEXT (current);
2542           }
2543     }
2544
2545   DECL_TEMPLATE_RESULT (tmpl) = decl;
2546   TREE_TYPE (tmpl) = TREE_TYPE (decl);
2547
2548   /* Push template declarations for global functions and types.  Note
2549      that we do not try to push a global template friend declared in a
2550      template class; such a thing may well depend on the template
2551      parameters of the class.  */
2552   if (new_template_p && !ctx 
2553       && !(is_friend && template_class_depth (current_class_type) > 0))
2554     tmpl = pushdecl_namespace_level (tmpl);
2555
2556   if (primary)
2557     DECL_PRIMARY_TEMPLATE (tmpl) = tmpl;
2558
2559   info = tree_cons (tmpl, args, NULL_TREE);
2560
2561   if (DECL_IMPLICIT_TYPEDEF_P (decl))
2562     {
2563       SET_TYPE_TEMPLATE_INFO (TREE_TYPE (tmpl), info);
2564       if ((!ctx || TREE_CODE (ctx) != FUNCTION_DECL)
2565           && TREE_CODE (TREE_TYPE (decl)) != ENUMERAL_TYPE)
2566         DECL_NAME (decl) = classtype_mangled_name (TREE_TYPE (decl));
2567     }
2568   else if (DECL_LANG_SPECIFIC (decl))
2569     DECL_TEMPLATE_INFO (decl) = info;
2570
2571   return DECL_TEMPLATE_RESULT (tmpl);
2572 }
2573
2574 tree
2575 push_template_decl (decl)
2576      tree decl;
2577 {
2578   return push_template_decl_real (decl, 0);
2579 }
2580
2581 /* Called when a class template TYPE is redeclared with the indicated
2582    template PARMS, e.g.:
2583
2584      template <class T> struct S;
2585      template <class T> struct S {};  */
2586
2587 void 
2588 redeclare_class_template (type, parms)
2589      tree type;
2590      tree parms;
2591 {
2592   tree tmpl;
2593   tree tmpl_parms;
2594   int i;
2595
2596   if (!TYPE_TEMPLATE_INFO (type))
2597     {
2598       cp_error ("`%T' is not a template type", type);
2599       return;
2600     }
2601
2602   tmpl = TYPE_TI_TEMPLATE (type);
2603   if (!PRIMARY_TEMPLATE_P (tmpl))
2604     /* The type is nested in some template class.  Nothing to worry
2605        about here; there are no new template parameters for the nested
2606        type.  */
2607     return;
2608
2609   parms = INNERMOST_TEMPLATE_PARMS (parms);
2610   tmpl_parms = DECL_INNERMOST_TEMPLATE_PARMS (tmpl);
2611
2612   if (TREE_VEC_LENGTH (parms) != TREE_VEC_LENGTH (tmpl_parms))
2613     {
2614       cp_error_at ("previous declaration `%D'", tmpl);
2615       cp_error ("used %d template parameter%s instead of %d",
2616                 TREE_VEC_LENGTH (tmpl_parms), 
2617                 TREE_VEC_LENGTH (tmpl_parms) == 1 ? "" : "s",
2618                 TREE_VEC_LENGTH (parms));
2619       return;
2620     }
2621
2622   for (i = 0; i < TREE_VEC_LENGTH (tmpl_parms); ++i)
2623     {
2624       tree tmpl_parm = TREE_VALUE (TREE_VEC_ELT (tmpl_parms, i));
2625       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
2626       tree tmpl_default = TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i));
2627       tree parm_default = TREE_PURPOSE (TREE_VEC_ELT (parms, i));
2628
2629       if (TREE_CODE (tmpl_parm) != TREE_CODE (parm))
2630         {
2631           cp_error_at ("template parameter `%#D'", tmpl_parm);
2632           cp_error ("redeclared here as `%#D'", parm);
2633           return;
2634         }
2635
2636       if (tmpl_default != NULL_TREE && parm_default != NULL_TREE)
2637         {
2638           /* We have in [temp.param]:
2639
2640              A template-parameter may not be given default arguments
2641              by two different declarations in the same scope.  */
2642           cp_error ("redefinition of default argument for `%#D'", parm);
2643           cp_error_at ("  original definition appeared here", tmpl_parm);
2644           return;
2645         }
2646
2647       if (parm_default != NULL_TREE)
2648         /* Update the previous template parameters (which are the ones
2649            that will really count) with the new default value.  */
2650         TREE_PURPOSE (TREE_VEC_ELT (tmpl_parms, i)) = parm_default;
2651       else if (tmpl_default != NULL_TREE)
2652         /* Update the new parameters, too; they'll be used as the
2653            parameters for any members.  */
2654         TREE_PURPOSE (TREE_VEC_ELT (parms, i)) = tmpl_default;
2655     }
2656 }
2657
2658 /* Attempt to convert the non-type template parameter EXPR to the
2659    indicated TYPE.  If the conversion is successful, return the
2660    converted value.  If the conversion is unsuccesful, return
2661    NULL_TREE if we issued an error message, or error_mark_node if we
2662    did not.  We issue error messages for out-and-out bad template
2663    parameters, but not simply because the conversion failed, since we
2664    might be just trying to do argument deduction.  By the time this
2665    function is called, neither TYPE nor EXPR may make use of template
2666    parameters.  */
2667
2668 static tree
2669 convert_nontype_argument (type, expr)
2670      tree type;
2671      tree expr;
2672 {
2673   tree expr_type = TREE_TYPE (expr);
2674
2675   /* A template-argument for a non-type, non-template
2676      template-parameter shall be one of:
2677
2678      --an integral constant-expression of integral or enumeration
2679      type; or
2680      
2681      --the name of a non-type template-parameter; or
2682      
2683      --the name of an object or function with external linkage,
2684      including function templates and function template-ids but
2685      excluding non-static class members, expressed as id-expression;
2686      or
2687      
2688      --the address of an object or function with external linkage,
2689      including function templates and function template-ids but
2690      excluding non-static class members, expressed as & id-expression
2691      where the & is optional if the name refers to a function or
2692      array; or
2693      
2694      --a pointer to member expressed as described in _expr.unary.op_.  */
2695
2696   /* An integral constant-expression can include const variables or
2697      enumerators.  Simplify things by folding them to their values,
2698      unless we're about to bind the declaration to a reference
2699      parameter.  */
2700   if (INTEGRAL_TYPE_P (expr_type) && TREE_READONLY_DECL_P (expr)
2701       && TREE_CODE (type) != REFERENCE_TYPE)
2702     expr = decl_constant_value (expr);
2703
2704   if (is_overloaded_fn (expr))
2705     /* OK for now.  We'll check that it has external linkage later.
2706        Check this first since if expr_type is the unknown_type_node
2707        we would otherwise complain below.  */
2708     ;
2709   else if (TYPE_PTRMEM_P (expr_type)
2710            || TYPE_PTRMEMFUNC_P (expr_type))
2711     {
2712       if (TREE_CODE (expr) != PTRMEM_CST)
2713         goto bad_argument;
2714     }
2715   else if (TYPE_PTR_P (expr_type)
2716            || TYPE_PTRMEM_P (expr_type)
2717            || TREE_CODE (expr_type) == ARRAY_TYPE
2718            || TREE_CODE (type) == REFERENCE_TYPE
2719            /* If expr is the address of an overloaded function, we
2720               will get the unknown_type_node at this point.  */
2721            || expr_type == unknown_type_node)
2722     {
2723       tree referent;
2724       tree e = expr;
2725       STRIP_NOPS (e);
2726
2727       if (TREE_CODE (type) == REFERENCE_TYPE
2728           || TREE_CODE (expr_type) == ARRAY_TYPE)
2729         referent = e;
2730       else
2731         {
2732           if (TREE_CODE (e) != ADDR_EXPR)
2733             {
2734             bad_argument:
2735               cp_error ("`%E' is not a valid template argument", expr);
2736               if (TYPE_PTR_P (expr_type))
2737                 {
2738                   if (TREE_CODE (TREE_TYPE (expr_type)) == FUNCTION_TYPE)
2739                     cp_error ("it must be the address of a function with external linkage");
2740                   else
2741                     cp_error ("it must be the address of an object with external linkage");
2742                 }
2743               else if (TYPE_PTRMEM_P (expr_type)
2744                        || TYPE_PTRMEMFUNC_P (expr_type))
2745                 cp_error ("it must be a pointer-to-member of the form `&X::Y'");
2746
2747               return NULL_TREE;
2748             }
2749
2750           referent = TREE_OPERAND (e, 0);
2751           STRIP_NOPS (referent);
2752         }
2753
2754       if (TREE_CODE (referent) == STRING_CST)
2755         {
2756           cp_error ("string literal %E is not a valid template argument because it is the address of an object with static linkage", 
2757                     referent);
2758           return NULL_TREE;
2759         }
2760
2761       if (is_overloaded_fn (referent))
2762         /* We'll check that it has external linkage later.  */
2763         ;
2764       else if (TREE_CODE (referent) != VAR_DECL)
2765         goto bad_argument;
2766       else if (!TREE_PUBLIC (referent))
2767         {
2768           cp_error ("address of non-extern `%E' cannot be used as template argument", referent); 
2769           return error_mark_node;
2770         }
2771     }
2772   else if (INTEGRAL_TYPE_P (expr_type) 
2773            || TYPE_PTRMEM_P (expr_type) 
2774            || TYPE_PTRMEMFUNC_P (expr_type)
2775            /* The next two are g++ extensions.  */
2776            || TREE_CODE (expr_type) == REAL_TYPE
2777            || TREE_CODE (expr_type) == COMPLEX_TYPE)
2778     {
2779       if (! TREE_CONSTANT (expr))
2780         {
2781         non_constant:
2782           cp_error ("non-constant `%E' cannot be used as template argument",
2783                     expr);
2784           return NULL_TREE;
2785         }
2786     }
2787   else 
2788     {
2789       cp_error ("object `%E' cannot be used as template argument", expr);
2790       return NULL_TREE;
2791     }
2792
2793   switch (TREE_CODE (type))
2794     {
2795     case INTEGER_TYPE:
2796     case BOOLEAN_TYPE:
2797     case ENUMERAL_TYPE:
2798       /* For a non-type template-parameter of integral or enumeration
2799          type, integral promotions (_conv.prom_) and integral
2800          conversions (_conv.integral_) are applied. */
2801       if (!INTEGRAL_TYPE_P (expr_type))
2802         return error_mark_node;
2803       
2804       /* It's safe to call digest_init in this case; we know we're
2805          just converting one integral constant expression to another.  */
2806       expr = digest_init (type, expr, (tree*) 0);
2807
2808       if (TREE_CODE (expr) != INTEGER_CST)
2809         /* Curiously, some TREE_CONSTANT integral expressions do not
2810            simplify to integer constants.  For example, `3 % 0',
2811            remains a TRUNC_MOD_EXPR.  */
2812         goto non_constant;
2813       
2814       return expr;
2815         
2816     case REAL_TYPE:
2817     case COMPLEX_TYPE:
2818       /* These are g++ extensions.  */
2819       if (TREE_CODE (expr_type) != TREE_CODE (type))
2820         return error_mark_node;
2821
2822       expr = digest_init (type, expr, (tree*) 0);
2823       
2824       if (TREE_CODE (expr) != REAL_CST)
2825         goto non_constant;
2826
2827       return expr;
2828
2829     case POINTER_TYPE:
2830       {
2831         tree type_pointed_to = TREE_TYPE (type);
2832  
2833         if (TYPE_PTRMEM_P (type))
2834           {
2835             tree e;
2836
2837             /* For a non-type template-parameter of type pointer to data
2838                member, qualification conversions (_conv.qual_) are
2839                applied.  */
2840             e = perform_qualification_conversions (type, expr);
2841             if (TREE_CODE (e) == NOP_EXPR)
2842               /* The call to perform_qualification_conversions will
2843                  insert a NOP_EXPR over EXPR to do express conversion,
2844                  if necessary.  But, that will confuse us if we use
2845                  this (converted) template parameter to instantiate
2846                  another template; then the thing will not look like a
2847                  valid template argument.  So, just make a new
2848                  constant, of the appropriate type.  */
2849               e = make_ptrmem_cst (type, PTRMEM_CST_MEMBER (expr));
2850             return e;
2851           }
2852         else if (TREE_CODE (type_pointed_to) == FUNCTION_TYPE)
2853           { 
2854             /* For a non-type template-parameter of type pointer to
2855                function, only the function-to-pointer conversion
2856                (_conv.func_) is applied.  If the template-argument
2857                represents a set of overloaded functions (or a pointer to
2858                such), the matching function is selected from the set
2859                (_over.over_).  */
2860             tree fns;
2861             tree fn;
2862
2863             if (TREE_CODE (expr) == ADDR_EXPR)
2864               fns = TREE_OPERAND (expr, 0);
2865             else
2866               fns = expr;
2867
2868             fn = instantiate_type (type_pointed_to, fns, 0);
2869
2870             if (fn == error_mark_node)
2871               return error_mark_node;
2872
2873             if (!TREE_PUBLIC (fn))
2874               {
2875                 if (really_overloaded_fn (fns))
2876                   return error_mark_node;
2877                 else
2878                   goto bad_argument;
2879               }
2880
2881             expr = build_unary_op (ADDR_EXPR, fn, 0);
2882
2883             my_friendly_assert (same_type_p (type, TREE_TYPE (expr)), 
2884                                 0);
2885             return expr;
2886           }
2887         else 
2888           {
2889             /* For a non-type template-parameter of type pointer to
2890                object, qualification conversions (_conv.qual_) and the
2891                array-to-pointer conversion (_conv.array_) are applied.
2892                [Note: In particular, neither the null pointer conversion
2893                (_conv.ptr_) nor the derived-to-base conversion
2894                (_conv.ptr_) are applied.  Although 0 is a valid
2895                template-argument for a non-type template-parameter of
2896                integral type, it is not a valid template-argument for a
2897                non-type template-parameter of pointer type.]  
2898             
2899                The call to decay_conversion performs the
2900                array-to-pointer conversion, if appropriate.  */
2901             expr = decay_conversion (expr);
2902
2903             if (expr == error_mark_node)
2904               return error_mark_node;
2905             else
2906               return perform_qualification_conversions (type, expr);
2907           }
2908       }
2909       break;
2910
2911     case REFERENCE_TYPE:
2912       {
2913         tree type_referred_to = TREE_TYPE (type);
2914
2915         if (TREE_CODE (type_referred_to) == FUNCTION_TYPE)
2916           {
2917             /* For a non-type template-parameter of type reference to
2918                function, no conversions apply.  If the
2919                template-argument represents a set of overloaded
2920                functions, the matching function is selected from the
2921                set (_over.over_).  */
2922             tree fns = expr;
2923             tree fn;
2924
2925             fn = instantiate_type (type_referred_to, fns, 0);
2926
2927             if (fn == error_mark_node)
2928               return error_mark_node;
2929
2930             if (!TREE_PUBLIC (fn))
2931               {
2932                 if (really_overloaded_fn (fns))
2933                   /* Don't issue an error here; we might get a different
2934                      function if the overloading had worked out
2935                      differently.  */
2936                   return error_mark_node;
2937                 else
2938                   goto bad_argument;
2939               }
2940
2941             my_friendly_assert (same_type_p (type_referred_to, 
2942                                              TREE_TYPE (fn)),
2943                                 0);
2944
2945             return fn;
2946           }
2947         else
2948           {
2949             /* For a non-type template-parameter of type reference to
2950                object, no conversions apply.  The type referred to by the
2951                reference may be more cv-qualified than the (otherwise
2952                identical) type of the template-argument.  The
2953                template-parameter is bound directly to the
2954                template-argument, which must be an lvalue.  */
2955             if ((TYPE_MAIN_VARIANT (expr_type)
2956                  != TYPE_MAIN_VARIANT (type_referred_to))
2957                 || !at_least_as_qualified_p (type_referred_to,
2958                                              expr_type)
2959                 || !real_lvalue_p (expr))
2960               return error_mark_node;
2961             else
2962               return expr;
2963           }
2964       }
2965       break;
2966
2967     case RECORD_TYPE:
2968       {
2969         if (!TYPE_PTRMEMFUNC_P (type))
2970           /* This handles templates like
2971                template<class T, T t> void f();
2972              when T is substituted with any class.  The second template
2973              parameter becomes invalid and the template candidate is
2974              rejected.  */
2975           return error_mark_node;
2976
2977         /* For a non-type template-parameter of type pointer to member
2978            function, no conversions apply.  If the template-argument
2979            represents a set of overloaded member functions, the
2980            matching member function is selected from the set
2981            (_over.over_).  */
2982
2983         if (!TYPE_PTRMEMFUNC_P (expr_type) && 
2984             expr_type != unknown_type_node)
2985           return error_mark_node;
2986
2987         if (TREE_CODE (expr) == PTRMEM_CST)
2988           {
2989             /* A ptr-to-member constant.  */
2990             if (!same_type_p (type, expr_type))
2991               return error_mark_node;
2992             else 
2993               return expr;
2994           }
2995
2996         if (TREE_CODE (expr) != ADDR_EXPR)
2997           return error_mark_node;
2998
2999         expr = instantiate_type (type, expr, 0);
3000         
3001         if (expr == error_mark_node)
3002           return error_mark_node;
3003
3004         my_friendly_assert (same_type_p (type, TREE_TYPE (expr)),
3005                             0);
3006         return expr;
3007       }
3008       break;
3009
3010     default:
3011       /* All non-type parameters must have one of these types.  */
3012       my_friendly_abort (0);
3013       break;
3014     }
3015
3016   return error_mark_node;
3017 }
3018
3019 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for 
3020    template template parameters.  Both PARM_PARMS and ARG_PARMS are 
3021    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL 
3022    or PARM_DECL.
3023    
3024    ARG_PARMS may contain more parameters than PARM_PARMS.  If this is 
3025    the case, then extra parameters must have default arguments.
3026
3027    Consider the example:
3028      template <class T, class Allocator = allocator> class vector;
3029      template<template <class U> class TT> class C;
3030
3031    C<vector> is a valid instantiation.  PARM_PARMS for the above code 
3032    contains a TYPE_DECL (for U),  ARG_PARMS contains two TYPE_DECLs (for 
3033    T and Allocator) and OUTER_ARGS contains the argument that is used to 
3034    substitute the TT parameter.  */
3035
3036 static int
3037 coerce_template_template_parms (parm_parms, arg_parms, complain, 
3038                                 in_decl, outer_args)
3039      tree parm_parms, arg_parms;
3040      int complain;
3041      tree in_decl, outer_args;
3042 {
3043   int nparms, nargs, i;
3044   tree parm, arg;
3045
3046   my_friendly_assert (TREE_CODE (parm_parms) == TREE_VEC, 0);
3047   my_friendly_assert (TREE_CODE (arg_parms) == TREE_VEC, 0);
3048
3049   nparms = TREE_VEC_LENGTH (parm_parms);
3050   nargs = TREE_VEC_LENGTH (arg_parms);
3051
3052   /* The rule here is opposite of coerce_template_parms.  */
3053   if (nargs < nparms
3054       || (nargs > nparms
3055           && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3056     return 0;
3057
3058   for (i = 0; i < nparms; ++i)
3059     {
3060       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3061       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3062
3063       if (arg == NULL_TREE || arg == error_mark_node
3064           || parm == NULL_TREE || parm == error_mark_node)
3065         return 0;
3066
3067       if (TREE_CODE (arg) != TREE_CODE (parm))
3068         return 0;
3069
3070       switch (TREE_CODE (parm))
3071         {
3072         case TYPE_DECL:
3073           break;
3074
3075         case TEMPLATE_DECL:
3076           /* We encounter instantiations of templates like
3077                template <template <template <class> class> class TT>
3078                class C;  */
3079           {
3080             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3081             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3082
3083             if (!coerce_template_template_parms (parmparm, argparm, 
3084                                                  complain, in_decl,
3085                                                  outer_args))
3086               return 0;
3087           }
3088           break;
3089
3090         case PARM_DECL:
3091           /* The tsubst call is used to handle cases such as
3092                template <class T, template <T> class TT> class D;  
3093              i.e. the parameter list of TT depends on earlier parameters.  */
3094           if (!same_type_p (tsubst (TREE_TYPE (parm), outer_args, 
3095                                     complain, in_decl),
3096                             TREE_TYPE (arg)))
3097             return 0;
3098           break;
3099           
3100         default:
3101           my_friendly_abort (0);
3102         }
3103     }
3104   return 1;
3105 }
3106
3107 /* Convert the indicated template ARG as necessary to match the
3108    indicated template PARM.  Returns the converted ARG, or
3109    error_mark_node if the conversion was unsuccessful.  Error messages
3110    are issued if COMPLAIN is non-zero.  This conversion is for the Ith
3111    parameter in the parameter list.  ARGS is the full set of template
3112    arguments deduced so far.  */
3113
3114 static tree
3115 convert_template_argument (parm, arg, args, complain, i, in_decl)
3116      tree parm;
3117      tree arg;
3118      tree args;
3119      int complain;
3120      int i;
3121      tree in_decl;
3122 {
3123   tree val;
3124   tree inner_args;
3125   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3126   
3127   inner_args = innermost_args (args);
3128
3129   if (TREE_CODE (arg) == TREE_LIST 
3130       && TREE_TYPE (arg) != NULL_TREE
3131       && TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE)
3132     {  
3133       /* The template argument was the name of some
3134          member function.  That's usually
3135          illegal, but static members are OK.  In any
3136          case, grab the underlying fields/functions
3137          and issue an error later if required.  */
3138       arg = TREE_VALUE (arg);
3139       TREE_TYPE (arg) = unknown_type_node;
3140     }
3141
3142   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3143   requires_type = (TREE_CODE (parm) == TYPE_DECL
3144                    || requires_tmpl_type);
3145
3146   /* Check if it is a class template.  If REQUIRES_TMPL_TYPE is true,
3147      we also accept implicitly created TYPE_DECL as a valid argument.
3148      This is necessary to handle the case where we pass a template name
3149      to a template template parameter in a scope where we've derived from
3150      in instantiation of that template, so the template name refers to that
3151      instantiation.  We really ought to handle this better.  */
3152   is_tmpl_type 
3153     = ((TREE_CODE (arg) == TEMPLATE_DECL
3154         && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3155        || (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3156            && !TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (arg))
3157        || (TREE_CODE (arg) == RECORD_TYPE
3158            && CLASSTYPE_TEMPLATE_INFO (arg)
3159            && TREE_CODE (TYPE_NAME (arg)) == TYPE_DECL
3160            && DECL_ARTIFICIAL (TYPE_NAME (arg))
3161            && requires_tmpl_type
3162            && is_base_of_enclosing_class (arg, current_class_type)));
3163   if (is_tmpl_type && TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
3164     arg = TYPE_STUB_DECL (arg);
3165   else if (is_tmpl_type && TREE_CODE (arg) == RECORD_TYPE)
3166     arg = CLASSTYPE_TI_TEMPLATE (arg);
3167
3168   is_type = TYPE_P (arg) || is_tmpl_type;
3169
3170   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3171       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3172     {
3173       cp_pedwarn ("to refer to a type member of a template parameter, use `typename %E'", arg);
3174       
3175       arg = make_typename_type (TREE_OPERAND (arg, 0),
3176                                 TREE_OPERAND (arg, 1),
3177                                 complain);
3178       is_type = 1;
3179     }
3180   if (is_type != requires_type)
3181     {
3182       if (in_decl)
3183         {
3184           if (complain)
3185             {
3186               cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
3187                         i + 1, in_decl);
3188               if (is_type)
3189                 cp_error ("  expected a constant of type `%T', got `%T'",
3190                           TREE_TYPE (parm),
3191                           (is_tmpl_type ? DECL_NAME (arg) : arg));
3192               else
3193                 cp_error ("  expected a type, got `%E'", arg);
3194             }
3195         }
3196       return error_mark_node;
3197     }
3198   if (is_tmpl_type ^ requires_tmpl_type)
3199     {
3200       if (in_decl && complain)
3201         {
3202           cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
3203                     i + 1, in_decl);
3204           if (is_tmpl_type)
3205             cp_error ("  expected a type, got `%T'", DECL_NAME (arg));
3206           else
3207             cp_error ("  expected a class template, got `%T'", arg);
3208         }
3209       return error_mark_node;
3210     }
3211       
3212   if (is_type)
3213     {
3214       if (requires_tmpl_type)
3215         {
3216           tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3217           tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3218
3219           if (coerce_template_template_parms (parmparm, argparm, complain,
3220                                               in_decl, inner_args))
3221             {
3222               val = arg;
3223                   
3224               /* TEMPLATE_TEMPLATE_PARM node is preferred over 
3225                  TEMPLATE_DECL.  */
3226               if (val != error_mark_node 
3227                   && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3228                 val = TREE_TYPE (val);
3229             }
3230           else
3231             {
3232               if (in_decl && complain)
3233                 {
3234                   cp_error ("type/value mismatch at argument %d in template parameter list for `%D'",
3235                             i + 1, in_decl);
3236                   cp_error ("  expected a template of type `%D', got `%D'", parm, arg);
3237                 }
3238                   
3239               val = error_mark_node;
3240             }
3241         }
3242       else
3243         {
3244           val = groktypename (arg);
3245           if (! processing_template_decl)
3246             {
3247               /* [basic.link]: A name with no linkage (notably, the
3248                  name of a class or enumeration declared in a local
3249                  scope) shall not be used to declare an entity with
3250                  linkage.  This implies that names with no linkage
3251                  cannot be used as template arguments.  */
3252               tree t = no_linkage_check (val);
3253               if (t)
3254                 {
3255                   if (ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))
3256                     cp_pedwarn
3257                       ("template-argument `%T' uses anonymous type", val);
3258                   else
3259                     cp_error
3260                       ("template-argument `%T' uses local type `%T'",
3261                        val, t);
3262                   return error_mark_node;
3263                 }
3264             }
3265         }
3266     }
3267   else
3268     {
3269       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3270
3271       if (processing_template_decl)
3272         arg = maybe_fold_nontype_arg (arg);
3273
3274       if (!uses_template_parms (arg) && !uses_template_parms (t))
3275         /* We used to call digest_init here.  However, digest_init
3276            will report errors, which we don't want when complain
3277            is zero.  More importantly, digest_init will try too
3278            hard to convert things: for example, `0' should not be
3279            converted to pointer type at this point according to
3280            the standard.  Accepting this is not merely an
3281            extension, since deciding whether or not these
3282            conversions can occur is part of determining which
3283            function template to call, or whether a given epxlicit
3284            argument specification is legal.  */
3285         val = convert_nontype_argument (t, arg);
3286       else
3287         val = arg;
3288
3289       if (val == NULL_TREE)
3290         val = error_mark_node;
3291       else if (val == error_mark_node && complain)
3292         cp_error ("could not convert template argument `%E' to `%T'", 
3293                   arg, t);
3294     }
3295
3296   return val;
3297 }
3298
3299 /* Convert all template arguments to their appropriate types, and
3300    return a vector containing the innermost resulting template
3301    arguments.  If any error occurs, return error_mark_node, and, if
3302    COMPLAIN is non-zero, issue an error message.  Some error messages
3303    are issued even if COMPLAIN is zero; for instance, if a template
3304    argument is composed from a local class.
3305
3306    If REQUIRE_ALL_ARGUMENTS is non-zero, all arguments must be
3307    provided in ARGLIST, or else trailing parameters must have default
3308    values.  If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3309    deduction for any unspecified trailing arguments.  
3310
3311    The resulting TREE_VEC is allocated on a temporary obstack, and
3312    must be explicitly copied if it will be permanent.  */
3313    
3314 static tree
3315 coerce_template_parms (parms, args, in_decl,
3316                        complain,
3317                        require_all_arguments)
3318      tree parms, args;
3319      tree in_decl;
3320      int complain;
3321      int require_all_arguments;
3322 {
3323   int nparms, nargs, i, lost = 0;
3324   tree inner_args;
3325   tree new_args;
3326   tree new_inner_args;
3327
3328   inner_args = innermost_args (args);
3329   nargs = NUM_TMPL_ARGS (inner_args);
3330   nparms = TREE_VEC_LENGTH (parms);
3331
3332   if (nargs > nparms
3333       || (nargs < nparms
3334           && require_all_arguments
3335           && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
3336     {
3337       if (complain) 
3338         {
3339           cp_error ("wrong number of template arguments (%d, should be %d)",
3340                     nargs, nparms);
3341           
3342           if (in_decl)
3343             cp_error_at ("provided for `%D'", in_decl);
3344         }
3345
3346       return error_mark_node;
3347     }
3348
3349   new_inner_args = make_tree_vec (nparms);
3350   new_args = add_outermost_template_args (args, new_inner_args);
3351   for (i = 0; i < nparms; i++)
3352     {
3353       tree arg;
3354       tree parm;
3355
3356       /* Get the Ith template parameter.  */
3357       parm = TREE_VEC_ELT (parms, i);
3358
3359       /* Calculate the Ith argument.  */
3360       if (inner_args && TREE_CODE (inner_args) == TREE_LIST)
3361         {
3362           arg = TREE_VALUE (inner_args);
3363           inner_args = TREE_CHAIN (inner_args);
3364         }
3365       else if (i < nargs)
3366         arg = TREE_VEC_ELT (inner_args, i);
3367       /* If no template argument was supplied, look for a default
3368          value.  */
3369       else if (TREE_PURPOSE (parm) == NULL_TREE)
3370         {
3371           /* There was no default value.  */
3372           my_friendly_assert (!require_all_arguments, 0);
3373           break;
3374         }
3375       else if (TREE_CODE (TREE_VALUE (parm)) == TYPE_DECL)
3376         arg = tsubst (TREE_PURPOSE (parm), new_args, complain, in_decl);
3377       else
3378         arg = tsubst_expr (TREE_PURPOSE (parm), new_args, complain,
3379                            in_decl);
3380
3381       /* Now, convert the Ith argument, as necessary.  */
3382       if (arg == NULL_TREE)
3383         /* We're out of arguments.  */
3384         {
3385           my_friendly_assert (!require_all_arguments, 0);
3386           break;
3387         }
3388       else if (arg == error_mark_node)
3389         {
3390           cp_error ("template argument %d is invalid", i + 1);
3391           arg = error_mark_node;
3392         }
3393       else 
3394         arg = convert_template_argument (TREE_VALUE (parm), 
3395                                          arg, new_args, complain, i,
3396                                          in_decl); 
3397       
3398       if (arg == error_mark_node)
3399         lost++;
3400       TREE_VEC_ELT (new_inner_args, i) = arg;
3401     }
3402
3403   if (lost)
3404     return error_mark_node;
3405
3406   return new_inner_args;
3407 }
3408
3409 /* Returns 1 if template args OT and NT are equivalent.  */
3410
3411 static int
3412 template_args_equal (ot, nt)
3413      tree ot, nt;
3414 {
3415   if (nt == ot)
3416     return 1;
3417   if (TREE_CODE (nt) != TREE_CODE (ot))
3418     return 0;
3419   if (TREE_CODE (nt) == TREE_VEC)
3420     /* For member templates */
3421     return comp_template_args (ot, nt);
3422   else if (TYPE_P (ot))
3423     return same_type_p (ot, nt);
3424   else
3425     return (cp_tree_equal (ot, nt) > 0);
3426 }
3427
3428 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
3429    of template arguments.  Returns 0 otherwise.  */
3430
3431 int
3432 comp_template_args (oldargs, newargs)
3433      tree oldargs, newargs;
3434 {
3435   int i;
3436
3437   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
3438     return 0;
3439
3440   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
3441     {
3442       tree nt = TREE_VEC_ELT (newargs, i);
3443       tree ot = TREE_VEC_ELT (oldargs, i);
3444
3445       if (! template_args_equal (ot, nt))
3446         return 0;
3447     }
3448   return 1;
3449 }
3450
3451 /* Given class template name and parameter list, produce a user-friendly name
3452    for the instantiation.  */
3453
3454 static char *
3455 mangle_class_name_for_template (name, parms, arglist)
3456      char *name;
3457      tree parms, arglist;
3458 {
3459   static struct obstack scratch_obstack;
3460   static char *scratch_firstobj;
3461   int i, nparms;
3462
3463   if (!scratch_firstobj)
3464     gcc_obstack_init (&scratch_obstack);
3465   else
3466     obstack_free (&scratch_obstack, scratch_firstobj);
3467   scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
3468
3469 #define ccat(c) obstack_1grow (&scratch_obstack, (c));
3470 #define cat(s)  obstack_grow (&scratch_obstack, (s), strlen (s))
3471
3472   cat (name);
3473   ccat ('<');
3474   nparms = TREE_VEC_LENGTH (parms);
3475   arglist = innermost_args (arglist);
3476   my_friendly_assert (nparms == TREE_VEC_LENGTH (arglist), 268);
3477   for (i = 0; i < nparms; i++)
3478     {
3479       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3480       tree arg = TREE_VEC_ELT (arglist, i);
3481
3482       if (i)
3483         ccat (',');
3484
3485       if (TREE_CODE (parm) == TYPE_DECL)
3486         {
3487           cat (type_as_string (arg, TS_CHASE_TYPEDEFS));
3488           continue;
3489         }
3490       else if (TREE_CODE (parm) == TEMPLATE_DECL)
3491         {
3492           if (TREE_CODE (arg) == TEMPLATE_DECL)
3493             {
3494               /* Already substituted with real template.  Just output 
3495                  the template name here */
3496               tree context = DECL_CONTEXT (arg);
3497               if (context)
3498                 {
3499                   /* The template may be defined in a namespace, or
3500                      may be a member template.  */
3501                   my_friendly_assert (TREE_CODE (context) == NAMESPACE_DECL
3502                                       || CLASS_TYPE_P (context), 
3503                                       980422);
3504                   cat(decl_as_string (DECL_CONTEXT (arg), 0));
3505                   cat("::");
3506                 }
3507               cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
3508             }
3509           else
3510             /* Output the parameter declaration */
3511             cat (type_as_string (arg, TS_CHASE_TYPEDEFS));
3512           continue;
3513         }
3514       else
3515         my_friendly_assert (TREE_CODE (parm) == PARM_DECL, 269);
3516
3517       if (TREE_CODE (arg) == TREE_LIST)
3518         {
3519           /* New list cell was built because old chain link was in
3520              use.  */
3521           my_friendly_assert (TREE_PURPOSE (arg) == NULL_TREE, 270);
3522           arg = TREE_VALUE (arg);
3523         }
3524       /* No need to check arglist against parmlist here; we did that
3525          in coerce_template_parms, called from lookup_template_class.  */
3526       cat (expr_as_string (arg, 0));
3527     }
3528   {
3529     char *bufp = obstack_next_free (&scratch_obstack);
3530     int offset = 0;
3531     while (bufp[offset - 1] == ' ')
3532       offset--;
3533     obstack_blank_fast (&scratch_obstack, offset);
3534
3535     /* B<C<char> >, not B<C<char>> */
3536     if (bufp[offset - 1] == '>')
3537       ccat (' ');
3538   }
3539   ccat ('>');
3540   ccat ('\0');
3541   return (char *) obstack_base (&scratch_obstack);
3542 }
3543
3544 static tree
3545 classtype_mangled_name (t)
3546      tree t;
3547 {
3548   if (CLASSTYPE_TEMPLATE_INFO (t)
3549       /* Specializations have already had their names set up in
3550          lookup_template_class.  */
3551       && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
3552     {
3553       tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
3554
3555       /* For non-primary templates, the template parameters are
3556          implicit from their surrounding context.  */
3557       if (PRIMARY_TEMPLATE_P (tmpl))
3558         {
3559           tree name = DECL_NAME (tmpl);
3560           char *mangled_name = mangle_class_name_for_template
3561             (IDENTIFIER_POINTER (name), 
3562              DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
3563              CLASSTYPE_TI_ARGS (t));
3564           tree id = get_identifier (mangled_name);
3565           IDENTIFIER_TEMPLATE (id) = name;
3566           return id;
3567         }
3568     }
3569
3570   return TYPE_IDENTIFIER (t);
3571 }
3572
3573 static void
3574 add_pending_template (d)
3575      tree d;
3576 {
3577   tree ti = (TYPE_P (d)) ? CLASSTYPE_TEMPLATE_INFO (d) : DECL_TEMPLATE_INFO (d);
3578
3579   if (TI_PENDING_TEMPLATE_FLAG (ti))
3580     return;
3581
3582   *template_tail = tree_cons (build_srcloc_here (), d, NULL_TREE);
3583   template_tail = &TREE_CHAIN (*template_tail);
3584   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
3585 }
3586
3587
3588 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS (which
3589    may be either a _DECL or an overloaded function or an
3590    IDENTIFIER_NODE), and ARGLIST.  */
3591
3592 tree
3593 lookup_template_function (fns, arglist)
3594      tree fns, arglist;
3595 {
3596   tree type;
3597
3598   if (fns == NULL_TREE)
3599     {
3600       cp_error ("non-template used as template");
3601       return error_mark_node;
3602     }
3603
3604   type = TREE_TYPE (fns);
3605   if (TREE_CODE (fns) == OVERLOAD || !type)
3606     type = unknown_type_node;
3607
3608   if (processing_template_decl)
3609     return build_min (TEMPLATE_ID_EXPR, type, fns, arglist);  
3610   else
3611     return build (TEMPLATE_ID_EXPR, type, fns, arglist);
3612 }
3613
3614 /* Within the scope of a template class S<T>, the name S gets bound
3615    (in build_self_reference) to a TYPE_DECL for the class, not a
3616    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
3617    or one of its enclosing classes, and that type is a template,
3618    return the associated TEMPLATE_DECL.  Otherwise, the original
3619    DECL is returned.  */
3620
3621 static tree
3622 maybe_get_template_decl_from_type_decl (decl)
3623      tree decl;
3624 {
3625   return (decl != NULL_TREE
3626           && TREE_CODE (decl) == TYPE_DECL 
3627           && DECL_ARTIFICIAL (decl)
3628           && CLASS_TYPE_P (TREE_TYPE (decl))
3629           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl))) 
3630     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
3631 }
3632
3633 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
3634    parameters, find the desired type.
3635
3636    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
3637    (Actually ARGLIST may be either a TREE_LIST or a TREE_VEC.  It will
3638    be a TREE_LIST if called directly from the parser, and a TREE_VEC
3639    otherwise.)  Since ARGLIST is build on the temp_decl_obstack, we must
3640    copy it here to keep it from being reclaimed when the decl storage
3641    is reclaimed.
3642
3643    IN_DECL, if non-NULL, is the template declaration we are trying to
3644    instantiate.  
3645
3646    If ENTERING_SCOPE is non-zero, we are about to enter the scope of
3647    the class we are looking up.
3648
3649    If the template class is really a local class in a template
3650    function, then the FUNCTION_CONTEXT is the function in which it is
3651    being instantiated.  */
3652
3653 tree
3654 lookup_template_class (d1, arglist, in_decl, context, entering_scope)
3655      tree d1, arglist;
3656      tree in_decl;
3657      tree context;
3658      int entering_scope;
3659 {
3660   tree template = NULL_TREE, parmlist;
3661   tree t;
3662
3663   if (TREE_CODE (d1) == IDENTIFIER_NODE)
3664     {
3665       if (IDENTIFIER_VALUE (d1) 
3666           && DECL_TEMPLATE_TEMPLATE_PARM_P (IDENTIFIER_VALUE (d1)))
3667         template = IDENTIFIER_VALUE (d1);
3668       else
3669         {
3670           if (context)
3671             push_decl_namespace (context);
3672           template = lookup_name (d1, /*prefer_type=*/0);
3673           template = maybe_get_template_decl_from_type_decl (template);
3674           if (context)
3675             pop_decl_namespace ();
3676         }
3677       if (template)
3678         context = DECL_CONTEXT (template);
3679     }
3680   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
3681     {
3682       tree type = TREE_TYPE (d1);
3683
3684       /* If we are declaring a constructor, say A<T>::A<T>, we will get
3685          an implicit typename for the second A.  Deal with it.  */
3686       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
3687         type = TREE_TYPE (type);
3688         
3689       if (CLASSTYPE_TEMPLATE_INFO (type))
3690         {
3691           template = CLASSTYPE_TI_TEMPLATE (type);
3692           d1 = DECL_NAME (template);
3693         }
3694     }
3695   else if (TREE_CODE (d1) == ENUMERAL_TYPE 
3696            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
3697     {
3698       template = TYPE_TI_TEMPLATE (d1);
3699       d1 = DECL_NAME (template);
3700     }
3701   else if (TREE_CODE (d1) == TEMPLATE_DECL
3702            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
3703     {
3704       template = d1;
3705       d1 = DECL_NAME (template);
3706       context = DECL_CONTEXT (template);
3707     }
3708   else
3709     my_friendly_abort (272);
3710
3711   /* With something like `template <class T> class X class X { ... };'
3712      we could end up with D1 having nothing but an IDENTIFIER_VALUE.
3713      We don't want to do that, but we have to deal with the situation,
3714      so let's give them some syntax errors to chew on instead of a
3715      crash.  */
3716   if (! template)
3717     {
3718       cp_error ("`%T' is not a template", d1);
3719       return error_mark_node;
3720     }
3721
3722   if (context == NULL_TREE)
3723     context = global_namespace;
3724
3725   if (TREE_CODE (template) != TEMPLATE_DECL)
3726     {
3727       cp_error ("non-template type `%T' used as a template", d1);
3728       if (in_decl)
3729         cp_error_at ("for template declaration `%D'", in_decl);
3730       return error_mark_node;
3731     }
3732
3733   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
3734     {
3735       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
3736          template arguments */
3737
3738       tree parm = copy_template_template_parm (TREE_TYPE (template));
3739       tree template2 = TYPE_STUB_DECL (parm);
3740       tree arglist2;
3741
3742       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
3743
3744       arglist2 = coerce_template_parms (parmlist, arglist, template, 1, 1);
3745       if (arglist2 == error_mark_node)
3746         return error_mark_node;
3747
3748       TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm)
3749         = tree_cons (template2, arglist2, NULL_TREE);
3750       TYPE_SIZE (parm) = 0;
3751       return parm;
3752     }
3753   else 
3754     {
3755       tree template_type = TREE_TYPE (template);
3756       tree gen_tmpl;
3757       tree type_decl;
3758       tree found = NULL_TREE;
3759       int arg_depth;
3760       int parm_depth;
3761       int is_partial_instantiation;
3762
3763       gen_tmpl = most_general_template (template);
3764       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
3765       parm_depth = TMPL_PARMS_DEPTH (parmlist);
3766       arg_depth = TMPL_ARGS_DEPTH (arglist);
3767
3768       if (arg_depth == 1 && parm_depth > 1)
3769         {
3770           /* We've been given an incomplete set of template arguments.
3771              For example, given:
3772
3773                template <class T> struct S1 {
3774                  template <class U> struct S2 {};
3775                  template <class U> struct S2<U*> {};
3776                 };
3777              
3778              we will be called with an ARGLIST of `U*', but the
3779              TEMPLATE will be `template <class T> template
3780              <class U> struct S1<T>::S2'.  We must fill in the missing
3781              arguments.  */
3782           arglist 
3783             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
3784                                            arglist);
3785           arg_depth = TMPL_ARGS_DEPTH (arglist);
3786         }
3787
3788       /* Now we should enough arguments.  */
3789       my_friendly_assert (parm_depth == arg_depth, 0);
3790       
3791       /* From here on, we're only interested in the most general
3792          template.  */
3793       template = gen_tmpl;
3794
3795       /* Calculate the BOUND_ARGS.  These will be the args that are
3796          actually tsubst'd into the definition to create the
3797          instantiation.  */
3798       if (parm_depth > 1)
3799         {
3800           /* We have multiple levels of arguments to coerce, at once.  */
3801           int i;
3802           int saved_depth = TMPL_ARGS_DEPTH (arglist);
3803
3804           tree bound_args = make_tree_vec (parm_depth);
3805           
3806           for (i = saved_depth,
3807                  t = DECL_TEMPLATE_PARMS (template); 
3808                i > 0 && t != NULL_TREE;
3809                --i, t = TREE_CHAIN (t))
3810             {
3811               tree a = coerce_template_parms (TREE_VALUE (t),
3812                                               arglist, template, 1, 1);
3813               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
3814
3815               /* We temporarily reduce the length of the ARGLIST so
3816                  that coerce_template_parms will see only the arguments
3817                  corresponding to the template parameters it is
3818                  examining.  */
3819               TREE_VEC_LENGTH (arglist)--;
3820             }
3821
3822           /* Restore the ARGLIST to its full size.  */
3823           TREE_VEC_LENGTH (arglist) = saved_depth;
3824
3825           arglist = bound_args;
3826         }
3827       else
3828         arglist
3829           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
3830                                    innermost_args (arglist),
3831                                    template, 1, 1);
3832
3833       if (arglist == error_mark_node)
3834         /* We were unable to bind the arguments.  */
3835         return error_mark_node;
3836
3837       /* In the scope of a template class, explicit references to the
3838          template class refer to the type of the template, not any
3839          instantiation of it.  For example, in:
3840          
3841            template <class T> class C { void f(C<T>); }
3842
3843          the `C<T>' is just the same as `C'.  Outside of the
3844          class, however, such a reference is an instantiation.  */
3845       if (comp_template_args (TYPE_TI_ARGS (template_type),
3846                               arglist))
3847         {
3848           found = template_type;
3849           
3850           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
3851             {
3852               tree ctx;
3853               
3854               /* Note that we use DECL_CONTEXT, rather than
3855                  CP_DECL_CONTEXT, so that the termination test is
3856                  always just `ctx'.  We're not interested in namepace
3857                  scopes.  */
3858               for (ctx = current_class_type; 
3859                    ctx; 
3860                    ctx = (TYPE_P (ctx)) ? TYPE_CONTEXT (ctx) : DECL_CONTEXT (ctx))
3861                 if (same_type_p (ctx, template_type))
3862                   break;
3863               
3864               if (!ctx)
3865                 /* We're not in the scope of the class, so the
3866                    TEMPLATE_TYPE is not the type we want after
3867                    all.  */
3868                 found = NULL_TREE;
3869             }
3870         }
3871       
3872       if (!found)
3873         {
3874           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
3875                found; found = TREE_CHAIN (found))
3876             if (comp_template_args (TREE_PURPOSE (found), arglist))
3877               break;
3878
3879           if (found)
3880             found = TREE_VALUE (found);
3881         }
3882
3883       if (found)
3884         return found;
3885
3886       /* This type is a "partial instantiation" if any of the template
3887          arguments still inolve template parameters.  Note that we set
3888          IS_PARTIAL_INSTANTIATION for partial specializations as
3889          well.  */
3890       is_partial_instantiation = uses_template_parms (arglist);
3891
3892       if (!is_partial_instantiation 
3893           && !PRIMARY_TEMPLATE_P (template)
3894           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
3895         {
3896           found = xref_tag_from_type (TREE_TYPE (template),
3897                                       DECL_NAME (template),
3898                                       /*globalize=*/1);
3899           return found;
3900         }
3901       
3902       /* Create the type.  */
3903       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
3904         {
3905           if (!is_partial_instantiation)
3906             t = start_enum (TYPE_IDENTIFIER (template_type));
3907           else
3908             /* We don't want to call start_enum for this type, since
3909                the values for the enumeration constants may involve
3910                template parameters.  And, no one should be interested
3911                in the enumeration constants for such a type.  */
3912             t = make_node (ENUMERAL_TYPE);
3913         }
3914       else
3915         {
3916           t = make_aggr_type (TREE_CODE (template_type));
3917           CLASSTYPE_DECLARED_CLASS (t) 
3918             = CLASSTYPE_DECLARED_CLASS (template_type);
3919           CLASSTYPE_GOT_SEMICOLON (t) = 1;
3920           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
3921           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
3922
3923           /* A local class.  Make sure the decl gets registered properly.  */
3924           if (context == current_function_decl)
3925             pushtag (DECL_NAME (template), t, 0);
3926         }
3927
3928       /* If we called start_enum or pushtag above, this information
3929          will already be set up.  */
3930       if (!TYPE_NAME (t))
3931         {
3932           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3933           
3934           type_decl = create_implicit_typedef (DECL_NAME (template), t);
3935           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
3936           TYPE_STUB_DECL (t) = type_decl;
3937           DECL_SOURCE_FILE (type_decl) 
3938             = DECL_SOURCE_FILE (TYPE_STUB_DECL (template_type));
3939           DECL_SOURCE_LINE (type_decl) 
3940             = DECL_SOURCE_LINE (TYPE_STUB_DECL (template_type));
3941         }
3942       else
3943         type_decl = TYPE_NAME (t);
3944
3945       /* Set up the template information.  We have to figure out which
3946          template is the immediate parent if this is a full
3947          instantiation.  */
3948       if (parm_depth == 1 || is_partial_instantiation
3949           || !PRIMARY_TEMPLATE_P (template))
3950         /* This case is easy; there are no member templates involved.  */
3951         found = template;
3952       else
3953         {
3954           /* This is a full instantiation of a member template.  There
3955              should be some partial instantiation of which this is an
3956              instance.  */
3957
3958           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
3959                found; found = TREE_CHAIN (found))
3960             {
3961               int success;
3962               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
3963
3964               /* We only want partial instantiations, here, not
3965                  specializations or full instantiations.  */
3966               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
3967                   || !uses_template_parms (TREE_VALUE (found)))
3968                 continue;
3969
3970               /* Temporarily reduce by one the number of levels in the
3971                  ARGLIST and in FOUND so as to avoid comparing the
3972                  last set of arguments.  */
3973               TREE_VEC_LENGTH (arglist)--;
3974               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
3975
3976               /* See if the arguments match.  If they do, then TMPL is
3977                  the partial instantiation we want.  */
3978               success = comp_template_args (TREE_PURPOSE (found), arglist);
3979
3980               /* Restore the argument vectors to their full size.  */
3981               TREE_VEC_LENGTH (arglist)++;
3982               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
3983
3984               if (success)
3985                 {
3986                   found = tmpl;
3987                   break;
3988                 }
3989             }
3990
3991           if (!found)
3992             my_friendly_abort (0);
3993         }
3994
3995       SET_TYPE_TEMPLATE_INFO (t,
3996                               tree_cons (found, arglist, NULL_TREE));  
3997       DECL_TEMPLATE_INSTANTIATIONS (template) 
3998         = tree_cons (arglist, t, 
3999                      DECL_TEMPLATE_INSTANTIATIONS (template));
4000
4001       if (TREE_CODE (t) == ENUMERAL_TYPE 
4002           && !is_partial_instantiation)
4003         /* Now that the type has been registered on the instantiations
4004            list, we set up the enumerators.  Because the enumeration
4005            constants may involve the enumeration type itself, we make
4006            sure to register the type first, and then create the
4007            constants.  That way, doing tsubst_expr for the enumeration
4008            constants won't result in recursive calls here; we'll find
4009            the instantiation and exit above.  */
4010         tsubst_enum (template_type, t, arglist);
4011
4012       /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4013          is set up.  */
4014       if (TREE_CODE (t) != ENUMERAL_TYPE)
4015         DECL_NAME (type_decl) = classtype_mangled_name (t);
4016       DECL_ASSEMBLER_NAME (type_decl) = DECL_NAME (type_decl);
4017       if (!is_partial_instantiation)
4018         {
4019           DECL_ASSEMBLER_NAME (type_decl)
4020             = get_identifier (build_overload_name (t, 1, 1));
4021
4022           /* For backwards compatibility; code that uses
4023              -fexternal-templates expects looking up a template to
4024              instantiate it.  I think DDD still relies on this.
4025              (jason 8/20/1998) */
4026           if (TREE_CODE (t) != ENUMERAL_TYPE
4027               && flag_external_templates
4028               && CLASSTYPE_INTERFACE_KNOWN (TREE_TYPE (template))
4029               && ! CLASSTYPE_INTERFACE_ONLY (TREE_TYPE (template)))
4030             add_pending_template (t);
4031         }
4032       else
4033         /* If the type makes use of template parameters, the
4034            code that generates debugging information will crash.  */
4035         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4036
4037       return t;
4038     }
4039 }
4040 \f
4041 struct pair_fn_data 
4042 {
4043   tree_fn_t fn;
4044   void *data;
4045 };
4046
4047 /* Called from for_each_template_parm via walk_tree.  */
4048
4049 static tree
4050 for_each_template_parm_r (tp, walk_subtrees, d)
4051      tree *tp;
4052      int *walk_subtrees;
4053      void *d;
4054 {
4055   tree t = *tp;
4056   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4057   tree_fn_t fn = pfd->fn;
4058   void *data = pfd->data;
4059   
4060   if (TYPE_P (t)
4061       && for_each_template_parm (TYPE_CONTEXT (t), fn, data))
4062     return error_mark_node;
4063
4064   switch (TREE_CODE (t))
4065     {
4066     case RECORD_TYPE:
4067       if (TYPE_PTRMEMFUNC_FLAG (t))
4068         break;
4069       /* Fall through.  */
4070
4071     case UNION_TYPE:
4072     case ENUMERAL_TYPE:
4073       if (!TYPE_TEMPLATE_INFO (t))
4074         *walk_subtrees = 0;
4075       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4076                                        fn, data))
4077         return error_mark_node;
4078       break;
4079
4080     case METHOD_TYPE:
4081       /* Since we're not going to walk subtrees, we have to do this
4082          explicitly here.  */
4083       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data))
4084         return error_mark_node;
4085
4086     case FUNCTION_TYPE:
4087       /* Check the return type.  */
4088       if (for_each_template_parm (TREE_TYPE (t), fn, data))
4089         return error_mark_node;
4090
4091       /* Check the parameter types.  Since default arguments are not
4092          instantiated until they are needed, the TYPE_ARG_TYPES may
4093          contain expressions that involve template parameters.  But,
4094          no-one should be looking at them yet.  And, once they're
4095          instantiated, they don't contain template parameters, so
4096          there's no point in looking at them then, either.  */
4097       {
4098         tree parm;
4099
4100         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4101           if (for_each_template_parm (TREE_VALUE (parm), fn, data))
4102             return error_mark_node;
4103
4104         /* Since we've already handled the TYPE_ARG_TYPES, we don't
4105            want walk_tree walking into them itself.  */
4106         *walk_subtrees = 0;
4107       }
4108       break;
4109
4110     case FUNCTION_DECL:
4111     case VAR_DECL:
4112       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4113           && for_each_template_parm (DECL_TI_ARGS (t), fn, data))
4114         return error_mark_node;
4115       /* Fall through.  */
4116
4117     case CONST_DECL:
4118     case PARM_DECL:
4119       if (DECL_CONTEXT (t) 
4120           && for_each_template_parm (DECL_CONTEXT (t), fn, data))
4121         return error_mark_node;
4122       break;
4123
4124     case TEMPLATE_TEMPLATE_PARM:
4125       /* Record template parameters such as `T' inside `TT<T>'.  */
4126       if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t)
4127           && for_each_template_parm (TYPE_TI_ARGS (t), fn, data))
4128         return error_mark_node;
4129       /* Fall through.  */
4130
4131     case TEMPLATE_TYPE_PARM:
4132     case TEMPLATE_PARM_INDEX:
4133       if (fn && (*fn)(t, data))
4134         return error_mark_node;
4135       else if (!fn)
4136         return error_mark_node;
4137       break;
4138
4139     case TEMPLATE_DECL:
4140       /* A template template parameter is encountered */
4141       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4142           && for_each_template_parm (TREE_TYPE (t), fn, data))
4143         return error_mark_node;
4144
4145       /* Already substituted template template parameter */
4146       *walk_subtrees = 0;
4147       break;
4148
4149     case TYPENAME_TYPE:
4150       if (!fn || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn, data))
4151         return error_mark_node;
4152       break;
4153
4154     case CONSTRUCTOR:
4155       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4156           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4157                                      (TREE_TYPE (t)), fn, data))
4158         return error_mark_node;
4159       break;
4160       
4161     case INDIRECT_REF:
4162     case COMPONENT_REF:
4163       /* If there's no type, then this thing must be some expression
4164          involving template parameters.  */
4165       if (!fn && !TREE_TYPE (t))
4166         return error_mark_node;
4167       break;
4168
4169     case MODOP_EXPR:
4170     case CAST_EXPR:
4171     case REINTERPRET_CAST_EXPR:
4172     case CONST_CAST_EXPR:
4173     case STATIC_CAST_EXPR:
4174     case DYNAMIC_CAST_EXPR:
4175     case ARROW_EXPR:
4176     case DOTSTAR_EXPR:
4177     case TYPEID_EXPR:
4178     case LOOKUP_EXPR:
4179     case PSEUDO_DTOR_EXPR:
4180       if (!fn)
4181         return error_mark_node;
4182       break;
4183
4184     default:
4185       break;
4186     }
4187
4188   /* We didn't find any template parameters we liked.  */
4189   return NULL_TREE;
4190 }
4191
4192 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM, or
4193    TEMPLATE_PARM_INDEX in T, call FN with the parameter and the DATA.
4194    If FN returns non-zero, the iteration is terminated, and
4195    for_each_template_parm returns 1.  Otherwise, the iteration
4196    continues.  If FN never returns a non-zero value, the value
4197    returned by for_each_template_parm is 0.  If FN is NULL, it is
4198    considered to be the function which always returns 1.  */
4199
4200 static int
4201 for_each_template_parm (t, fn, data)
4202      tree t;
4203      tree_fn_t fn;
4204      void* data;
4205 {
4206   struct pair_fn_data pfd;
4207
4208   /* Set up.  */
4209   pfd.fn = fn;
4210   pfd.data = data;
4211
4212   /* Walk the tree.  */
4213   return walk_tree (&t, for_each_template_parm_r, &pfd) != NULL_TREE;
4214 }
4215
4216 int
4217 uses_template_parms (t)
4218      tree t;
4219 {
4220   return for_each_template_parm (t, 0, 0);
4221 }
4222
4223 static struct tinst_level *current_tinst_level;
4224 static struct tinst_level *free_tinst_level;
4225 static int tinst_depth;
4226 extern int max_tinst_depth;
4227 #ifdef GATHER_STATISTICS
4228 int depth_reached;
4229 #endif
4230 static int tinst_level_tick;
4231 static int last_template_error_tick;
4232
4233 /* Print out all the template instantiations that we are currently
4234    working on.  If ERR, we are being called from cp_thing, so do
4235    the right thing for an error message.  */
4236
4237 static void
4238 print_template_context (err)
4239      int err;
4240 {
4241   struct tinst_level *p = current_tinst_level;
4242   int line = lineno;
4243   char *file = input_filename;
4244
4245   if (err && p)
4246     {
4247       if (current_function_decl != p->decl
4248           && current_function_decl != NULL_TREE)
4249         /* We can get here during the processing of some synthesized
4250            method.  Then, p->decl will be the function that's causing
4251            the synthesis.  */
4252         ;
4253       else
4254         {
4255           if (current_function_decl == p->decl)
4256             /* Avoid redundancy with the the "In function" line.  */;
4257           else 
4258             fprintf (stderr, "%s: In instantiation of `%s':\n",
4259                      file, decl_as_string (p->decl, TS_DECL_TYPE | TS_FUNC_NORETURN));
4260           
4261           line = p->line;
4262           file = p->file;
4263           p = p->next;
4264         }
4265     }
4266
4267   for (; p; p = p->next)
4268     {
4269       fprintf (stderr, "%s:%d:   instantiated from `%s'\n", file, line,
4270                decl_as_string (p->decl, TS_DECL_TYPE | TS_FUNC_NORETURN));
4271       line = p->line;
4272       file = p->file;
4273     }
4274   fprintf (stderr, "%s:%d:   instantiated from here\n", file, line);
4275 }
4276
4277 /* Called from cp_thing to print the template context for an error.  */
4278
4279 void
4280 maybe_print_template_context ()
4281 {
4282   if (last_template_error_tick == tinst_level_tick
4283       || current_tinst_level == 0)
4284     return;
4285
4286   last_template_error_tick = tinst_level_tick;
4287   print_template_context (1);
4288 }
4289
4290 static int
4291 push_tinst_level (d)
4292      tree d;
4293 {
4294   struct tinst_level *new;
4295
4296   if (tinst_depth >= max_tinst_depth)
4297     {
4298       /* If the instantiation in question still has unbound template parms,
4299          we don't really care if we can't instantiate it, so just return.
4300          This happens with base instantiation for implicit `typename'.  */
4301       if (uses_template_parms (d))
4302         return 0;
4303
4304       last_template_error_tick = tinst_level_tick;
4305       cp_error ("template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'",
4306              max_tinst_depth, d);
4307
4308       print_template_context (0);
4309
4310       return 0;
4311     }
4312
4313   if (free_tinst_level)
4314     {
4315       new = free_tinst_level;
4316       free_tinst_level = new->next;
4317     }
4318   else
4319     new = (struct tinst_level *) xmalloc (sizeof (struct tinst_level));
4320
4321   new->decl = d;
4322   new->line = lineno;
4323   new->file = input_filename;
4324   new->next = current_tinst_level;
4325   current_tinst_level = new;
4326
4327   ++tinst_depth;
4328 #ifdef GATHER_STATISTICS
4329   if (tinst_depth > depth_reached)
4330     depth_reached = tinst_depth;
4331 #endif
4332
4333   ++tinst_level_tick;
4334   return 1;
4335 }
4336
4337 void
4338 pop_tinst_level ()
4339 {
4340   struct tinst_level *old = current_tinst_level;
4341
4342   /* Restore the filename and line number stashed away when we started
4343      this instantiation.  */
4344   lineno = old->line;
4345   input_filename = old->file;
4346   extract_interface_info ();
4347   
4348   current_tinst_level = old->next;
4349   old->next = free_tinst_level;
4350   free_tinst_level = old;
4351   --tinst_depth;
4352   ++tinst_level_tick;
4353 }
4354
4355 struct tinst_level *
4356 tinst_for_decl ()
4357 {
4358   struct tinst_level *p = current_tinst_level;
4359
4360   if (p)
4361     for (; p->next ; p = p->next )
4362       ;
4363   return p;
4364 }
4365
4366 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
4367    vector of template arguments, as for tsubst.
4368
4369    Returns an appropriate tsbust'd friend declaration.  */
4370
4371 static tree
4372 tsubst_friend_function (decl, args)
4373      tree decl;
4374      tree args;
4375 {
4376   tree new_friend;
4377   int line = lineno;
4378   char *file = input_filename;
4379
4380   lineno = DECL_SOURCE_LINE (decl);
4381   input_filename = DECL_SOURCE_FILE (decl);
4382
4383   if (TREE_CODE (decl) == FUNCTION_DECL 
4384       && DECL_TEMPLATE_INSTANTIATION (decl)
4385       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
4386     /* This was a friend declared with an explicit template
4387        argument list, e.g.:
4388        
4389        friend void f<>(T);
4390        
4391        to indicate that f was a template instantiation, not a new
4392        function declaration.  Now, we have to figure out what
4393        instantiation of what template.  */
4394     {
4395       tree template_id;
4396       tree new_args;
4397       tree tmpl;
4398
4399       template_id
4400         = lookup_template_function (tsubst_expr (DECL_TI_TEMPLATE (decl),
4401                                                  args, /*complain=*/1, 
4402                                                  NULL_TREE),
4403                                     tsubst (DECL_TI_ARGS (decl),
4404                                             args, /*complain=*/1, 
4405                                             NULL_TREE));
4406       new_friend = tsubst (decl, args, /*complain=*/1, NULL_TREE);
4407       tmpl = determine_specialization (template_id, new_friend,
4408                                        &new_args, 
4409                                        /*need_member_template=*/0);
4410       new_friend = instantiate_template (tmpl, new_args);
4411       goto done;
4412     }
4413
4414   new_friend = tsubst (decl, args, /*complain=*/1, NULL_TREE);
4415         
4416   /* The NEW_FRIEND will look like an instantiation, to the
4417      compiler, but is not an instantiation from the point of view of
4418      the language.  For example, we might have had:
4419      
4420      template <class T> struct S {
4421        template <class U> friend void f(T, U);
4422      };
4423      
4424      Then, in S<int>, template <class U> void f(int, U) is not an
4425      instantiation of anything.  */
4426   DECL_USE_TEMPLATE (new_friend) = 0;
4427   if (TREE_CODE (decl) == TEMPLATE_DECL)
4428     DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
4429
4430   /* The mangled name for the NEW_FRIEND is incorrect.  The call to
4431      tsubst will have resulted in a call to
4432      set_mangled_name_for_template_decl.  But, the function is not a
4433      template instantiation and should not be mangled like one.
4434      Therefore, we remangle the function name.  We don't have to do
4435      this if the NEW_FRIEND is a template since
4436      set_mangled_name_for_template_decl doesn't do anything if the
4437      function declaration still uses template arguments.  */
4438   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
4439     {
4440       set_mangled_name_for_decl (new_friend);
4441       DECL_RTL (new_friend) = 0;
4442       make_decl_rtl (new_friend, NULL_PTR, 1);
4443     }
4444       
4445   if (DECL_NAMESPACE_SCOPE_P (new_friend))
4446     {
4447       tree old_decl;
4448       tree new_friend_template_info;
4449       tree new_friend_result_template_info;
4450       tree ns;
4451       int  new_friend_is_defn;
4452
4453       /* We must save some information from NEW_FRIEND before calling
4454          duplicate decls since that function will free NEW_FRIEND if
4455          possible.  */
4456       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
4457       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
4458         {
4459           /* This declaration is a `primary' template.  */
4460           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
4461           
4462           new_friend_is_defn 
4463             = DECL_INITIAL (DECL_TEMPLATE_RESULT (new_friend)) != NULL_TREE;
4464           new_friend_result_template_info
4465             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
4466         }
4467       else
4468         {
4469           new_friend_is_defn = DECL_INITIAL (new_friend) != NULL_TREE;
4470           new_friend_result_template_info = NULL_TREE;
4471         }
4472
4473       /* Inside pushdecl_namespace_level, we will push into the
4474          current namespace. However, the friend function should go
4475          into the namespace of the template. */
4476       ns = decl_namespace_context (new_friend);
4477       push_nested_namespace (ns);
4478       old_decl = pushdecl_namespace_level (new_friend);
4479       pop_nested_namespace (ns);
4480
4481       if (old_decl != new_friend)
4482         {
4483           /* This new friend declaration matched an existing
4484              declaration.  For example, given:
4485
4486                template <class T> void f(T);
4487                template <class U> class C { 
4488                  template <class T> friend void f(T) {} 
4489                };
4490
4491              the friend declaration actually provides the definition
4492              of `f', once C has been instantiated for some type.  So,
4493              old_decl will be the out-of-class template declaration,
4494              while new_friend is the in-class definition.
4495
4496              But, if `f' was called before this point, the
4497              instantiation of `f' will have DECL_TI_ARGS corresponding
4498              to `T' but not to `U', references to which might appear
4499              in the definition of `f'.  Previously, the most general
4500              template for an instantiation of `f' was the out-of-class
4501              version; now it is the in-class version.  Therefore, we
4502              run through all specialization of `f', adding to their
4503              DECL_TI_ARGS appropriately.  In particular, they need a
4504              new set of outer arguments, corresponding to the
4505              arguments for this class instantiation.  
4506
4507              The same situation can arise with something like this:
4508
4509                friend void f(int);
4510                template <class T> class C { 
4511                  friend void f(T) {}
4512                };
4513
4514              when `C<int>' is instantiated.  Now, `f(int)' is defined
4515              in the class.  */
4516
4517           if (!new_friend_is_defn)
4518             /* On the other hand, if the in-class declaration does
4519                *not* provide a definition, then we don't want to alter
4520                existing definitions.  We can just leave everything
4521                alone.  */
4522             ;
4523           else
4524             {
4525               /* Overwrite whatever template info was there before, if
4526                  any, with the new template information pertaining to
4527                  the declaration.  */
4528               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
4529
4530               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
4531                 /* duplicate_decls will take care of this case.  */
4532                 ;
4533               else 
4534                 {
4535                   tree t;
4536                   tree new_friend_args;
4537
4538                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl)) 
4539                     = new_friend_result_template_info;
4540                     
4541                   new_friend_args = TI_ARGS (new_friend_template_info);
4542                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl); 
4543                        t != NULL_TREE;
4544                        t = TREE_CHAIN (t))
4545                     {
4546                       tree spec = TREE_VALUE (t);
4547                   
4548                       DECL_TI_ARGS (spec) 
4549                         = add_outermost_template_args (new_friend_args,
4550                                                        DECL_TI_ARGS (spec));
4551                     }
4552
4553                   /* Now, since specializations are always supposed to
4554                      hang off of the most general template, we must move
4555                      them.  */
4556                   t = most_general_template (old_decl);
4557                   if (t != old_decl)
4558                     {
4559                       DECL_TEMPLATE_SPECIALIZATIONS (t)
4560                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
4561                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
4562                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
4563                     }
4564                 }
4565             }
4566
4567           /* The information from NEW_FRIEND has been merged into OLD_DECL
4568              by duplicate_decls.  */
4569           new_friend = old_decl;
4570         }
4571     }
4572   else if (COMPLETE_TYPE_P (DECL_CONTEXT (new_friend)))
4573     {
4574       /* Check to see that the declaration is really present, and,
4575          possibly obtain an improved declaration.  */
4576       tree fn = check_classfn (DECL_CONTEXT (new_friend),
4577                                new_friend);
4578       
4579       if (fn)
4580         new_friend = fn;
4581     }
4582
4583  done:
4584   lineno = line;
4585   input_filename = file;
4586   return new_friend;
4587 }
4588
4589 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
4590    template arguments, as for tsubst.
4591
4592    Returns an appropriate tsbust'd friend type.  */
4593
4594 static tree
4595 tsubst_friend_class (friend_tmpl, args)
4596      tree friend_tmpl;
4597      tree args;
4598 {
4599   tree friend_type;
4600   tree tmpl;
4601
4602   /* First, we look for a class template.  */
4603   tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0); 
4604   
4605   /* But, if we don't find one, it might be because we're in a
4606      situation like this:
4607
4608        template <class T>
4609        struct S {
4610          template <class U>
4611          friend struct S;
4612        };
4613
4614      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
4615      for `S<int>', not the TEMPLATE_DECL.  */
4616   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
4617     {
4618       tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
4619       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
4620     }
4621
4622   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
4623     {
4624       /* The friend template has already been declared.  Just
4625          check to see that the declarations match, and install any new
4626          default parameters.  We must tsubst the default parameters,
4627          of course.  We only need the innermost template parameters
4628          because that is all that redeclare_class_template will look
4629          at.  */
4630       tree parms 
4631         = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
4632                                  args, /*complain=*/1);
4633       redeclare_class_template (TREE_TYPE (tmpl), parms);
4634       friend_type = TREE_TYPE (tmpl);
4635     }
4636   else
4637     {
4638       /* The friend template has not already been declared.  In this
4639          case, the instantiation of the template class will cause the
4640          injection of this template into the global scope.  */
4641       tmpl = tsubst (friend_tmpl, args, /*complain=*/1, NULL_TREE);
4642
4643       /* The new TMPL is not an instantiation of anything, so we
4644          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
4645          the new type because that is supposed to be the corresponding
4646          template decl, i.e., TMPL.  */
4647       DECL_USE_TEMPLATE (tmpl) = 0;
4648       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
4649       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
4650
4651       /* Inject this template into the global scope.  */
4652       friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
4653     }
4654
4655   return friend_type;
4656 }
4657
4658 tree
4659 instantiate_class_template (type)
4660      tree type;
4661 {
4662   tree template, args, pattern, t;
4663   tree typedecl;
4664
4665   if (type == error_mark_node)
4666     return error_mark_node;
4667
4668   if (TYPE_BEING_DEFINED (type) || COMPLETE_TYPE_P (type))
4669     return type;
4670
4671   /* Figure out which template is being instantiated.  */
4672   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
4673   my_friendly_assert (TREE_CODE (template) == TEMPLATE_DECL, 279);
4674
4675   /* Figure out which arguments are being used to do the
4676      instantiation.  */
4677   args = CLASSTYPE_TI_ARGS (type);
4678   PARTIAL_INSTANTIATION_P (type) = uses_template_parms (args);
4679
4680   if (pedantic && PARTIAL_INSTANTIATION_P (type))
4681     /* If this is a partial instantiation, then we can't instantiate
4682        the type; there's no telling whether or not one of the
4683        template parameters might eventually be instantiated to some
4684        value that results in a specialization being used.  For
4685        example, consider:
4686
4687          template <class T>
4688          struct S {};
4689
4690          template <class U> 
4691          void f(S<U>);
4692              
4693          template <> 
4694          struct S<int> {};
4695
4696        Now, the `S<U>' in `f<int>' is the specialization, not an
4697        instantiation of the original template.  */
4698     return type;
4699
4700   /* Determine what specialization of the original template to
4701      instantiate.  */
4702   if (PARTIAL_INSTANTIATION_P (type))
4703     /* There's no telling which specialization is appropriate at this
4704        point.  Since all peeking at the innards of this partial
4705        instantiation are extensions (like the "implicit typename"
4706        extension, which allows users to omit the keyword `typename' on
4707        names that are declared as types in template base classes), we
4708        are free to do what we please.
4709
4710        Trying to figure out which partial instantiation to use can
4711        cause a crash.  (Some of the template arguments don't even have
4712        types.)  So, we just use the most general version.  */
4713     t = NULL_TREE;
4714   else
4715     {
4716       t = most_specialized_class (template, args);
4717
4718       if (t == error_mark_node)
4719         {
4720           const char *str = "candidates are:";
4721           cp_error ("ambiguous class template instantiation for `%#T'", type);
4722           for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t; 
4723                t = TREE_CHAIN (t))
4724             {
4725               if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
4726                                       args))
4727                 {
4728                   cp_error_at ("%s %+#T", str, TREE_TYPE (t));
4729                   str = "               ";
4730                 }
4731             }
4732           TYPE_BEING_DEFINED (type) = 1;
4733           return error_mark_node;
4734         }
4735     }
4736
4737   if (t)
4738     pattern = TREE_TYPE (t);
4739   else
4740     pattern = TREE_TYPE (template);
4741
4742   /* If the template we're instantiating is incomplete, then clearly
4743      there's nothing we can do.  */
4744   if (!COMPLETE_TYPE_P (pattern))
4745     return type;
4746
4747   /* If this is a partial instantiation, don't tsubst anything.  We will
4748      only use this type for implicit typename, so the actual contents don't
4749      matter.  All that matters is whether a particular name is a type.  */
4750   if (PARTIAL_INSTANTIATION_P (type))
4751     {
4752       /* The fields set here must be kept in sync with those cleared
4753          in begin_class_definition.  */
4754       TYPE_BINFO_BASETYPES (type) = TYPE_BINFO_BASETYPES (pattern);
4755       TYPE_FIELDS (type) = TYPE_FIELDS (pattern);
4756       TYPE_METHODS (type) = TYPE_METHODS (pattern);
4757       CLASSTYPE_TAGS (type) = CLASSTYPE_TAGS (pattern);
4758       /* Pretend that the type is complete, so that we will look
4759          inside it during name lookup and such.  */
4760       TYPE_SIZE (type) = bitsize_zero_node;
4761       return type;
4762     }
4763
4764   /* If we've recursively instantiated too many templates, stop.  */
4765   if (! push_tinst_level (type))
4766     return type;
4767
4768   /* Now we're really doing the instantiation.  Mark the type as in
4769      the process of being defined.  */
4770   TYPE_BEING_DEFINED (type) = 1;
4771
4772   maybe_push_to_top_level (uses_template_parms (type));
4773
4774   if (t)
4775     {
4776       /* This TYPE is actually a instantiation of of a partial
4777          specialization.  We replace the innermost set of ARGS with
4778          the arguments appropriate for substitution.  For example,
4779          given:
4780
4781            template <class T> struct S {};
4782            template <class T> struct S<T*> {};
4783          
4784          and supposing that we are instantiating S<int*>, ARGS will
4785          present be {int*} but we need {int}.  */
4786       tree inner_args 
4787         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
4788                               args);
4789
4790       /* If there were multiple levels in ARGS, replacing the
4791          innermost level would alter CLASSTYPE_TI_ARGS, which we don't
4792          want, so we make a copy first.  */
4793       if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
4794         {
4795           args = copy_node (args);
4796           SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
4797         }
4798       else
4799         args = inner_args;
4800     }
4801
4802   if (flag_external_templates)
4803     {
4804       if (flag_alt_external_templates)
4805         {
4806           CLASSTYPE_INTERFACE_ONLY (type) = interface_only;
4807           SET_CLASSTYPE_INTERFACE_UNKNOWN_X (type, interface_unknown);
4808           CLASSTYPE_VTABLE_NEEDS_WRITING (type)
4809             = (! CLASSTYPE_INTERFACE_ONLY (type)
4810                && CLASSTYPE_INTERFACE_KNOWN (type));
4811         }
4812       else
4813         {
4814           CLASSTYPE_INTERFACE_ONLY (type) = CLASSTYPE_INTERFACE_ONLY (pattern);
4815           SET_CLASSTYPE_INTERFACE_UNKNOWN_X
4816             (type, CLASSTYPE_INTERFACE_UNKNOWN (pattern));
4817           CLASSTYPE_VTABLE_NEEDS_WRITING (type)
4818             = (! CLASSTYPE_INTERFACE_ONLY (type)
4819                && CLASSTYPE_INTERFACE_KNOWN (type));
4820         }
4821     }
4822   else
4823     {
4824       SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
4825       CLASSTYPE_VTABLE_NEEDS_WRITING (type) = 1;
4826     }
4827
4828   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
4829   TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
4830   TYPE_OVERLOADS_CALL_EXPR (type) = TYPE_OVERLOADS_CALL_EXPR (pattern);
4831   TYPE_OVERLOADS_ARRAY_REF (type) = TYPE_OVERLOADS_ARRAY_REF (pattern);
4832   TYPE_OVERLOADS_ARROW (type) = TYPE_OVERLOADS_ARROW (pattern);
4833   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
4834   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
4835   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
4836   TYPE_VEC_DELETE_TAKES_SIZE (type) = TYPE_VEC_DELETE_TAKES_SIZE (pattern);
4837   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
4838   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
4839   TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
4840   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
4841   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
4842   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
4843   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
4844   TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
4845     = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (pattern);
4846   TYPE_USES_MULTIPLE_INHERITANCE (type)
4847     = TYPE_USES_MULTIPLE_INHERITANCE (pattern);
4848   TYPE_USES_VIRTUAL_BASECLASSES (type)
4849     = TYPE_USES_VIRTUAL_BASECLASSES (pattern);
4850   TYPE_PACKED (type) = TYPE_PACKED (pattern);
4851   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
4852   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
4853   if (ANON_AGGR_TYPE_P (pattern))
4854     SET_ANON_AGGR_TYPE_P (type);
4855
4856   if (TYPE_BINFO_BASETYPES (pattern))
4857     {
4858       tree base_list = NULL_TREE;
4859       tree pbases = TYPE_BINFO_BASETYPES (pattern);
4860       int i;
4861
4862       /* Substitute into each of the bases to determine the actual
4863          basetypes.  */
4864       for (i = 0; i < TREE_VEC_LENGTH (pbases); ++i)
4865         {
4866           tree base;
4867           tree access;
4868           tree pbase;
4869
4870           pbase = TREE_VEC_ELT (pbases, i);
4871
4872           /* Substitue to figure out the base class.  */
4873           base = tsubst (BINFO_TYPE (pbase), args, 
4874                          /*complain=*/1, NULL_TREE);
4875           if (base == error_mark_node)
4876             continue;
4877
4878           /* Calculate the correct access node.  */
4879           if (TREE_VIA_VIRTUAL (pbase)) 
4880             {
4881               if (TREE_VIA_PUBLIC (pbase))
4882                 access = access_public_virtual_node;
4883               else if (TREE_VIA_PROTECTED (pbase))
4884                 access = access_protected_virtual_node;
4885               else 
4886                 access = access_private_virtual_node;
4887             }
4888           else
4889             {
4890               if (TREE_VIA_PUBLIC (pbase))
4891                 access = access_public_node;
4892               else if (TREE_VIA_PROTECTED (pbase))
4893                 access = access_protected_node;
4894               else 
4895                 access = access_private_node;
4896             }
4897
4898           base_list = tree_cons (access, base, base_list);
4899         }
4900
4901       /* The list is now in reverse order; correct that.  */
4902       base_list = nreverse (base_list);
4903
4904       /* Now call xref_basetypes to set up all the base-class
4905          information.  */
4906       xref_basetypes (TREE_CODE (pattern) == RECORD_TYPE
4907                       ? (CLASSTYPE_DECLARED_CLASS (pattern)
4908                          ? class_type_node : record_type_node)
4909                       : union_type_node,
4910                       DECL_NAME (TYPE_NAME (pattern)),
4911                       type,
4912                       base_list);
4913     }
4914
4915   /* Now that our base classes are set up, enter the scope of the
4916      class, so that name lookups into base classes, etc. will work
4917      corectly.  This is precisely analagous to what we do in
4918      begin_class_definition when defining an ordinary non-template
4919      class.  */
4920   pushclass (type, 1);
4921
4922   for (t = CLASSTYPE_TAGS (pattern); t; t = TREE_CHAIN (t))
4923     {
4924       tree tag = TREE_VALUE (t);
4925       tree name = TYPE_IDENTIFIER (tag);
4926       tree newtag;
4927
4928       newtag = tsubst (tag, args, /*complain=*/1, NULL_TREE);
4929       if (TREE_CODE (newtag) != ENUMERAL_TYPE)
4930         {
4931           if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
4932             /* Unfortunately, lookup_template_class sets
4933                CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
4934                instantiation (i.e., for the type of a member template
4935                class nested within a template class.)  This behavior is
4936                required for maybe_process_partial_specialization to work
4937                correctly, but is not accurate in this case; the TAG is not
4938                an instantiation of anything.  (The corresponding
4939                TEMPLATE_DECL is an instantiation, but the TYPE is not.) */
4940             CLASSTYPE_USE_TEMPLATE (newtag) = 0;
4941
4942           /* Now, we call pushtag to put this NEWTAG into the scope of
4943              TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
4944              pushtag calling push_template_decl.  We don't have to do
4945              this for enums because it will already have been done in
4946              tsubst_enum.  */
4947           if (name)
4948             SET_IDENTIFIER_TYPE_VALUE (name, newtag);
4949           pushtag (name, newtag, /*globalize=*/0);
4950         }
4951     }
4952
4953   /* Don't replace enum constants here.  */
4954   for (t = TYPE_FIELDS (pattern); t; t = TREE_CHAIN (t))
4955     if (TREE_CODE (t) != CONST_DECL)
4956       {
4957         tree r;
4958
4959         /* The the file and line for this declaration, to assist in
4960            error message reporting.  Since we called push_tinst_level
4961            above, we don't need to restore these.  */
4962         lineno = DECL_SOURCE_LINE (t);
4963         input_filename = DECL_SOURCE_FILE (t);
4964
4965         r = tsubst (t, args, /*complain=*/1, NULL_TREE);
4966         if (TREE_CODE (r) == VAR_DECL)
4967           {
4968             tree init;
4969
4970             if (DECL_DEFINED_IN_CLASS_P (r))
4971               init = tsubst_expr (DECL_INITIAL (t), args,
4972                                   /*complain=*/1, NULL_TREE);
4973             else
4974               init = NULL_TREE;
4975
4976             finish_static_data_member_decl (r, init,
4977                                             /*asmspec_tree=*/NULL_TREE, 
4978                                             /*flags=*/0);
4979
4980             if (DECL_DEFINED_IN_CLASS_P (r))
4981               check_static_variable_definition (r, TREE_TYPE (r));
4982           }
4983         
4984         /* R will have a TREE_CHAIN if and only if it has already been
4985            processed by finish_member_declaration.  This can happen
4986            if, for example, it is a TYPE_DECL for a class-scoped
4987            ENUMERAL_TYPE; such a thing will already have been added to
4988            the field list by tsubst_enum above.  */
4989         if (!TREE_CHAIN (r))
4990           {
4991             set_current_access_from_decl (r);
4992             finish_member_declaration (r);
4993           }
4994       }
4995
4996   /* Set up the list (TYPE_METHODS) and vector (CLASSTYPE_METHOD_VEC)
4997      for this instantiation.  */
4998   for (t = TYPE_METHODS (pattern); t; t = TREE_CHAIN (t))
4999     {
5000       tree r = tsubst (t, args, /*complain=*/1, NULL_TREE);
5001       set_current_access_from_decl (r);
5002       finish_member_declaration (r);
5003     }
5004
5005   /* Construct the DECL_FRIENDLIST for the new class type.  */
5006   typedecl = TYPE_MAIN_DECL (type);
5007   for (t = DECL_FRIENDLIST (TYPE_MAIN_DECL (pattern));
5008        t != NULL_TREE;
5009        t = TREE_CHAIN (t))
5010     {
5011       tree friends;
5012
5013       for (friends = TREE_VALUE (t);
5014            friends != NULL_TREE;
5015            friends = TREE_CHAIN (friends))
5016         if (TREE_PURPOSE (friends) == error_mark_node)
5017           add_friend (type, 
5018                       tsubst_friend_function (TREE_VALUE (friends),
5019                                               args));
5020         else
5021           my_friendly_abort (20000216);
5022     }
5023
5024   for (t = CLASSTYPE_FRIEND_CLASSES (pattern);
5025        t != NULL_TREE;
5026        t = TREE_CHAIN (t))
5027     {
5028       tree friend_type = TREE_VALUE (t);
5029       tree new_friend_type;
5030
5031       if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5032         new_friend_type = tsubst_friend_class (friend_type, args);
5033       else if (uses_template_parms (friend_type))
5034         new_friend_type = tsubst (friend_type, args, /*complain=*/1,
5035                                   NULL_TREE);
5036       else 
5037         {
5038           tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5039
5040           /* The call to xref_tag_from_type does injection for friend
5041              classes.  */
5042           push_nested_namespace (ns);
5043           new_friend_type = 
5044             xref_tag_from_type (friend_type, NULL_TREE, 1);
5045           pop_nested_namespace (ns);
5046         }
5047
5048       if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5049         /* Trick make_friend_class into realizing that the friend
5050            we're adding is a template, not an ordinary class.  It's
5051            important that we use make_friend_class since it will
5052            perform some error-checking and output cross-reference
5053            information.  */
5054         ++processing_template_decl;
5055
5056       make_friend_class (type, new_friend_type);
5057
5058       if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5059         --processing_template_decl;
5060     }
5061
5062   for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
5063     if (TREE_CODE (t) == FIELD_DECL)
5064       {
5065         TREE_TYPE (t) = complete_type (TREE_TYPE (t));
5066         require_complete_type (t);
5067       }
5068
5069   /* Set the file and line number information to whatever is given for
5070      the class itself.  This puts error messages involving generated
5071      implicit functions at a predictable point, and the same point
5072      that would be used for non-template classes.  */
5073   lineno = DECL_SOURCE_LINE (typedecl);
5074   input_filename = DECL_SOURCE_FILE (typedecl);
5075
5076   unreverse_member_declarations (type);
5077   finish_struct_1 (type);
5078   CLASSTYPE_GOT_SEMICOLON (type) = 1;
5079
5080   /* Clear this now so repo_template_used is happy.  */
5081   TYPE_BEING_DEFINED (type) = 0;
5082   repo_template_used (type);
5083
5084   /* Now that the class is complete, instantiate default arguments for
5085      any member functions.  We don't do this earlier because the
5086      default arguments may reference members of the class.  */
5087   if (!PRIMARY_TEMPLATE_P (template))
5088     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5089       if (TREE_CODE (t) == FUNCTION_DECL 
5090           /* Implicitly generated member functions will not have tmplate
5091              information; they are not instantiations, but instead are
5092              created "fresh" for each instantiation.  */
5093           && DECL_TEMPLATE_INFO (t))
5094         tsubst_default_arguments (t);
5095
5096   popclass ();
5097   pop_from_top_level ();
5098   pop_tinst_level ();
5099
5100   return type;
5101 }
5102
5103 static int
5104 list_eq (t1, t2)
5105      tree t1, t2;
5106 {
5107   if (t1 == NULL_TREE)
5108     return t2 == NULL_TREE;
5109   if (t2 == NULL_TREE)
5110     return 0;
5111   /* Don't care if one declares its arg const and the other doesn't -- the
5112      main variant of the arg type is all that matters.  */
5113   if (TYPE_MAIN_VARIANT (TREE_VALUE (t1))
5114       != TYPE_MAIN_VARIANT (TREE_VALUE (t2)))
5115     return 0;
5116   return list_eq (TREE_CHAIN (t1), TREE_CHAIN (t2));
5117 }
5118
5119 /* If arg is a non-type template parameter that does not depend on template
5120    arguments, fold it like we weren't in the body of a template.  */
5121
5122 static tree
5123 maybe_fold_nontype_arg (arg)
5124      tree arg;
5125 {
5126   /* If we're not in a template, ARG is already as simple as it's going to
5127      get, and trying to reprocess the trees will break.  */
5128   if (! processing_template_decl)
5129     return arg;
5130
5131   if (!TYPE_P (arg) && !uses_template_parms (arg))
5132     {
5133       /* Sometimes, one of the args was an expression involving a
5134          template constant parameter, like N - 1.  Now that we've
5135          tsubst'd, we might have something like 2 - 1.  This will
5136          confuse lookup_template_class, so we do constant folding
5137          here.  We have to unset processing_template_decl, to
5138          fool build_expr_from_tree() into building an actual
5139          tree.  */
5140
5141       int saved_processing_template_decl = processing_template_decl; 
5142       processing_template_decl = 0;
5143       arg = fold (build_expr_from_tree (arg));
5144       processing_template_decl = saved_processing_template_decl; 
5145     }
5146   return arg;
5147 }
5148
5149 /* Return the TREE_VEC with the arguments for the innermost template header,
5150    where ARGS is either that or the VEC of VECs for all the
5151    arguments.  */
5152
5153 tree
5154 innermost_args (args)
5155      tree args;
5156 {
5157   return TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args));
5158 }
5159
5160 /* Substitute ARGS into the vector of template arguments T.  */
5161
5162 static tree
5163 tsubst_template_arg_vector (t, args, complain)
5164      tree t;
5165      tree args;
5166      int complain;
5167 {
5168   int len = TREE_VEC_LENGTH (t), need_new = 0, i;
5169   tree *elts = (tree *) alloca (len * sizeof (tree));
5170   
5171   bzero ((char *) elts, len * sizeof (tree));
5172   
5173   for (i = 0; i < len; i++)
5174     {
5175       if (TREE_VEC_ELT (t, i) != NULL_TREE
5176           && TREE_CODE (TREE_VEC_ELT (t, i)) == TREE_VEC)
5177         elts[i] = tsubst_template_arg_vector (TREE_VEC_ELT (t, i),
5178                                               args, complain);
5179       else
5180         elts[i] = maybe_fold_nontype_arg
5181           (tsubst_expr (TREE_VEC_ELT (t, i), args, complain,
5182                         NULL_TREE));
5183       
5184       if (elts[i] != TREE_VEC_ELT (t, i))
5185         need_new = 1;
5186     }
5187   
5188   if (!need_new)
5189     return t;
5190   
5191   t = make_tree_vec (len);
5192   for (i = 0; i < len; i++)
5193     TREE_VEC_ELT (t, i) = elts[i];
5194   
5195   return t;
5196 }
5197
5198 /* Return the result of substituting ARGS into the template parameters
5199    given by PARMS.  If there are m levels of ARGS and m + n levels of
5200    PARMS, then the result will contain n levels of PARMS.  For
5201    example, if PARMS is `template <class T> template <class U>
5202    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5203    result will be `template <int*, double, class V>'.  */
5204
5205 static tree
5206 tsubst_template_parms (parms, args, complain)
5207      tree parms;
5208      tree args;
5209      int complain;
5210 {
5211   tree r = NULL_TREE;
5212   tree* new_parms;
5213
5214   for (new_parms = &r;
5215        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5216        new_parms = &(TREE_CHAIN (*new_parms)),
5217          parms = TREE_CHAIN (parms))
5218     {
5219       tree new_vec = 
5220         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5221       int i;
5222       
5223       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5224         {
5225           tree default_value =
5226             TREE_PURPOSE (TREE_VEC_ELT (TREE_VALUE (parms), i));
5227           tree parm_decl = 
5228             TREE_VALUE (TREE_VEC_ELT (TREE_VALUE (parms), i));
5229           
5230           TREE_VEC_ELT (new_vec, i)
5231             = build_tree_list (tsubst (default_value, args, complain,
5232                                        NULL_TREE), 
5233                                tsubst (parm_decl, args, complain,
5234                                        NULL_TREE));
5235         }
5236       
5237       *new_parms = 
5238         tree_cons (build_int_2 (0, (TMPL_PARMS_DEPTH (parms) 
5239                                     - TMPL_ARGS_DEPTH (args))),
5240                    new_vec, NULL_TREE);
5241     }
5242
5243   return r;
5244 }
5245
5246 /* Substitute the ARGS into the indicated aggregate (or enumeration)
5247    type T.  If T is not an aggregate or enumeration type, it is
5248    handled as if by tsubst.  IN_DECL is as for tsubst.  If
5249    ENTERING_SCOPE is non-zero, T is the context for a template which
5250    we are presently tsubst'ing.  Return the subsituted value.  */
5251
5252 static tree
5253 tsubst_aggr_type (t, args, complain, in_decl, entering_scope)
5254      tree t;
5255      tree args;
5256      int complain;
5257      tree in_decl;
5258      int entering_scope;
5259 {
5260   if (t == NULL_TREE)
5261     return NULL_TREE;
5262
5263   switch (TREE_CODE (t))
5264     {
5265     case RECORD_TYPE:
5266       if (TYPE_PTRMEMFUNC_P (t))
5267         {
5268           tree r = build_ptrmemfunc_type
5269             (tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl));
5270           return cp_build_qualified_type_real (r, TYPE_QUALS (t),
5271                                                complain);
5272         }
5273
5274       /* else fall through */
5275     case ENUMERAL_TYPE:
5276     case UNION_TYPE:
5277       if (TYPE_TEMPLATE_INFO (t))
5278         {
5279           tree argvec;
5280           tree context;
5281           tree r;
5282
5283           /* First, determine the context for the type we are looking
5284              up.  */
5285           if (TYPE_CONTEXT (t) != NULL_TREE)
5286             context = tsubst_aggr_type (TYPE_CONTEXT (t), args,
5287                                         complain,
5288                                         in_decl, /*entering_scope=*/1);
5289           else
5290             context = NULL_TREE;
5291
5292           /* Then, figure out what arguments are appropriate for the
5293              type we are trying to find.  For example, given:
5294
5295                template <class T> struct S;
5296                template <class T, class U> void f(T, U) { S<U> su; }
5297
5298              and supposing that we are instantiating f<int, double>,
5299              then our ARGS will be {int, double}, but, when looking up
5300              S we only want {double}.  */
5301           argvec = tsubst_template_arg_vector (TYPE_TI_ARGS (t), args,
5302                                                complain);
5303
5304           r = lookup_template_class (t, argvec, in_decl, context,
5305                                      entering_scope);
5306
5307           return cp_build_qualified_type_real (r, TYPE_QUALS (t),
5308                                                complain);
5309         }
5310       else 
5311         /* This is not a template type, so there's nothing to do.  */
5312         return t;
5313
5314     default:
5315       return tsubst (t, args, complain, in_decl);
5316     }
5317 }
5318
5319 /* Substitute into the default argument ARG (a default argument for
5320    FN), which has the indicated TYPE.  */
5321
5322 tree
5323 tsubst_default_argument (fn, type, arg)
5324      tree fn;
5325      tree type;
5326      tree arg;
5327 {
5328   /* This default argument came from a template.  Instantiate the
5329      default argument here, not in tsubst.  In the case of
5330      something like: 
5331      
5332        template <class T>
5333        struct S {
5334          static T t();
5335          void f(T = t());
5336        };
5337      
5338      we must be careful to do name lookup in the scope of S<T>,
5339      rather than in the current class.  */
5340   if (DECL_CLASS_SCOPE_P (fn))
5341     pushclass (DECL_CONTEXT (fn), 2);
5342
5343   arg = tsubst_expr (arg, DECL_TI_ARGS (fn), /*complain=*/1, NULL_TREE);
5344   
5345   if (DECL_CLASS_SCOPE_P (fn))
5346     popclass ();
5347
5348   /* Make sure the default argument is reasonable.  */
5349   arg = check_default_argument (type, arg);
5350
5351   return arg;
5352 }
5353
5354 /* Substitute into all the default arguments for FN.  */
5355
5356 static void
5357 tsubst_default_arguments (fn)
5358      tree fn;
5359 {
5360   tree arg;
5361   tree tmpl_args;
5362
5363   tmpl_args = DECL_TI_ARGS (fn);
5364
5365   /* If this function is not yet instantiated, we certainly don't need
5366      its default arguments.  */
5367   if (uses_template_parms (tmpl_args))
5368     return;
5369
5370   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn)); 
5371        arg; 
5372        arg = TREE_CHAIN (arg))
5373     if (TREE_PURPOSE (arg))
5374       TREE_PURPOSE (arg) = tsubst_default_argument (fn, 
5375                                                     TREE_VALUE (arg),
5376                                                     TREE_PURPOSE (arg));
5377 }
5378
5379 /* Substitute the ARGS into the T, which is a _DECL.  TYPE is the
5380    (already computed) substitution of ARGS into TREE_TYPE (T), if
5381    appropriate.  Return the result of the substitution.  IN_DECL is as
5382    for tsubst.  */
5383
5384 static tree
5385 tsubst_decl (t, args, type, in_decl)
5386      tree t;
5387      tree args;
5388      tree type;
5389      tree in_decl;
5390 {
5391   int saved_lineno;
5392   char* saved_filename;
5393   tree r = NULL_TREE;
5394
5395   /* Set the filename and linenumber to improve error-reporting.  */
5396   saved_lineno = lineno;
5397   saved_filename = input_filename;
5398   lineno = DECL_SOURCE_LINE (t);
5399   input_filename = DECL_SOURCE_FILE (t);
5400
5401   switch (TREE_CODE (t))
5402     {
5403     case TEMPLATE_DECL:
5404       {
5405         /* We can get here when processing a member template function
5406            of a template class.  */
5407         tree decl = DECL_TEMPLATE_RESULT (t);
5408         tree spec;
5409         int is_template_template_parm = DECL_TEMPLATE_TEMPLATE_PARM_P (t);
5410
5411         if (!is_template_template_parm)
5412           {
5413             /* We might already have an instance of this template.
5414                The ARGS are for the surrounding class type, so the
5415                full args contain the tsubst'd args for the context,
5416                plus the innermost args from the template decl.  */
5417             tree tmpl_args = DECL_CLASS_TEMPLATE_P (t) 
5418               ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
5419               : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
5420             tree full_args;
5421             
5422             full_args = tsubst_template_arg_vector (tmpl_args, args,
5423                                                     /*complain=*/1);
5424
5425             /* tsubst_template_arg_vector doesn't copy the vector if
5426                nothing changed.  But, *something* should have
5427                changed.  */
5428             my_friendly_assert (full_args != tmpl_args, 0);
5429
5430             spec = retrieve_specialization (t, full_args);
5431             if (spec != NULL_TREE)
5432               {
5433                 r = spec;
5434                 break;
5435               }
5436           }
5437
5438         /* Make a new template decl.  It will be similar to the
5439            original, but will record the current template arguments. 
5440            We also create a new function declaration, which is just
5441            like the old one, but points to this new template, rather
5442            than the old one.  */
5443         r = copy_decl (t);
5444         my_friendly_assert (DECL_LANG_SPECIFIC (r) != 0, 0);
5445         TREE_CHAIN (r) = NULL_TREE;
5446
5447         if (is_template_template_parm)
5448           {
5449             tree new_decl = tsubst (decl, args, /*complain=*/1, in_decl);
5450             DECL_TEMPLATE_RESULT (r) = new_decl;
5451             TREE_TYPE (r) = TREE_TYPE (new_decl);
5452             break;
5453           }
5454
5455         DECL_CONTEXT (r) 
5456           = tsubst_aggr_type (DECL_CONTEXT (t), args, 
5457                               /*complain=*/1, in_decl, 
5458                               /*entering_scope=*/1); 
5459         DECL_VIRTUAL_CONTEXT (r) 
5460           = tsubst_aggr_type (DECL_VIRTUAL_CONTEXT (t), args, 
5461                               /*complain=*/1, in_decl, 
5462                               /*entering_scope=*/1);
5463         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
5464
5465         if (TREE_CODE (decl) == TYPE_DECL)
5466           {
5467             tree new_type = tsubst (TREE_TYPE (t), args,
5468                                     /*complain=*/1, in_decl);
5469             TREE_TYPE (r) = new_type;
5470             CLASSTYPE_TI_TEMPLATE (new_type) = r;
5471             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
5472             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
5473           }
5474         else
5475           {
5476             tree new_decl = tsubst (decl, args, /*complain=*/1, in_decl);
5477
5478             DECL_TEMPLATE_RESULT (r) = new_decl;
5479             DECL_TI_TEMPLATE (new_decl) = r;
5480             TREE_TYPE (r) = TREE_TYPE (new_decl);
5481             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
5482           }
5483
5484         SET_DECL_IMPLICIT_INSTANTIATION (r);
5485         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
5486         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
5487
5488         /* The template parameters for this new template are all the
5489            template parameters for the old template, except the
5490            outermost level of parameters. */
5491         DECL_TEMPLATE_PARMS (r) 
5492           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
5493                                    /*complain=*/1);
5494
5495         if (PRIMARY_TEMPLATE_P (t))
5496           DECL_PRIMARY_TEMPLATE (r) = r;
5497
5498         /* We don't partially instantiate partial specializations.  */
5499         if (TREE_CODE (decl) == TYPE_DECL)
5500           break;
5501
5502         for (spec = DECL_TEMPLATE_SPECIALIZATIONS (t);
5503              spec != NULL_TREE;
5504              spec = TREE_CHAIN (spec))
5505           {
5506             /* It helps to consider example here.  Consider:
5507
5508                template <class T>
5509                struct S {
5510                  template <class U>
5511                  void f(U u);
5512
5513                  template <>
5514                  void f(T* t) {}
5515                };
5516                
5517                Now, for example, we are instantiating S<int>::f(U u).  
5518                We want to make a template:
5519
5520                template <class U>
5521                void S<int>::f(U);
5522
5523                It will have a specialization, for the case U = int*, of
5524                the form:
5525
5526                template <>
5527                void S<int>::f<int*>(int*);
5528
5529                This specialization will be an instantiation of
5530                the specialization given in the declaration of S, with
5531                argument list int*.  */
5532
5533             tree fn = TREE_VALUE (spec);
5534             tree spec_args;
5535             tree new_fn;
5536
5537             if (!DECL_TEMPLATE_SPECIALIZATION (fn))
5538               /* Instantiations are on the same list, but they're of
5539                  no concern to us.  */
5540               continue;
5541
5542             if (TREE_CODE (fn) != TEMPLATE_DECL)
5543               /* A full specialization.  There's no need to record
5544                  that here.  */
5545               continue;
5546
5547             spec_args = tsubst (DECL_TI_ARGS (fn), args,
5548                                 /*complain=*/1, in_decl); 
5549             new_fn
5550               = tsubst (DECL_TEMPLATE_RESULT (most_general_template (fn)), 
5551                         spec_args, /*complain=*/1, in_decl); 
5552             DECL_TI_TEMPLATE (new_fn) = fn;
5553             register_specialization (new_fn, r, 
5554                                      innermost_args (spec_args));
5555           }
5556
5557         /* Record this partial instantiation.  */
5558         register_specialization (r, t, 
5559                                  DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
5560
5561       }
5562       break;
5563
5564     case FUNCTION_DECL:
5565       {
5566         tree ctx;
5567         tree argvec = NULL_TREE;
5568         tree *friends;
5569         tree gen_tmpl;
5570         int member;
5571         int args_depth;
5572         int parms_depth;
5573
5574         /* Nobody should be tsubst'ing into non-template functions.  */
5575         my_friendly_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5576
5577         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
5578           {
5579             tree spec;
5580
5581             /* Calculate the most general template of which R is a
5582                specialization, and the complete set of arguments used to
5583                specialize R.  */
5584             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
5585             argvec 
5586               = tsubst_template_arg_vector (DECL_TI_ARGS 
5587                                             (DECL_TEMPLATE_RESULT (gen_tmpl)),
5588                                             args, /*complain=*/1); 
5589
5590             /* Check to see if we already have this specialization.  */
5591             spec = retrieve_specialization (gen_tmpl, argvec);
5592
5593             if (spec)
5594               {
5595                 r = spec;
5596                 break;
5597               }
5598
5599             /* Here, we deal with the peculiar case:
5600
5601                  template <class T> struct S { 
5602                    template <class U> friend void f();
5603                  };
5604                  template <class U> void f() {}
5605                  template S<int>;
5606                  template void f<double>();
5607
5608                Here, the ARGS for the instantiation of will be {int,
5609                double}.  But, we only need as many ARGS as there are
5610                levels of template parameters in CODE_PATTERN.  We are
5611                careful not to get fooled into reducing the ARGS in
5612                situations like:
5613
5614                  template <class T> struct S { template <class U> void f(U); }
5615                  template <class T> template <> void S<T>::f(int) {}
5616
5617                which we can spot because the pattern will be a
5618                specialization in this case.  */
5619             args_depth = TMPL_ARGS_DEPTH (args);
5620             parms_depth = 
5621               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t))); 
5622             if (args_depth > parms_depth
5623                 && !DECL_TEMPLATE_SPECIALIZATION (t))
5624               {
5625                 my_friendly_assert (DECL_FRIEND_P (t), 0);
5626
5627                 if (parms_depth > 1)
5628                   {
5629                     int i;
5630
5631                     args = make_tree_vec (parms_depth);
5632                     for (i = 0; i < parms_depth; ++i)
5633                       TREE_VEC_ELT (args, i) = 
5634                         TREE_VEC_ELT (args, i + (args_depth - parms_depth));
5635                   }
5636                 else
5637                   args = TREE_VEC_ELT (args, args_depth - parms_depth);
5638               }
5639           }
5640         else
5641           {
5642             /* This special case arises when we have something like this:
5643
5644                  template <class T> struct S { 
5645                    friend void f<int>(int, double); 
5646                  };
5647
5648                Here, the DECL_TI_TEMPLATE for the friend declaration
5649                will be a LOOKUP_EXPR or an IDENTIFIER_NODE.  We are
5650                being called from tsubst_friend_function, and we want
5651                only to create a new decl (R) with appropriate types so
5652                that we can call determine_specialization.  */
5653             my_friendly_assert ((TREE_CODE (DECL_TI_TEMPLATE (t)) 
5654                                  == LOOKUP_EXPR)
5655                                 || (TREE_CODE (DECL_TI_TEMPLATE (t))
5656                                     == IDENTIFIER_NODE), 0);
5657             gen_tmpl = NULL_TREE;
5658           }
5659
5660         if (DECL_CLASS_SCOPE_P (t))
5661           {
5662             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
5663               member = 2;
5664             else
5665               member = 1;
5666             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, 
5667                                     /*complain=*/1, t, 
5668                                     /*entering_scope=*/1);
5669           }
5670         else
5671           {
5672             member = 0;
5673             ctx = DECL_CONTEXT (t);
5674           }
5675         type = tsubst (type, args, /*complain=*/1, in_decl);
5676         if (type == error_mark_node)
5677           return error_mark_node;
5678
5679         /* We do NOT check for matching decls pushed separately at this
5680            point, as they may not represent instantiations of this
5681            template, and in any case are considered separate under the
5682            discrete model.  Instead, see add_maybe_template.  */
5683         r = copy_decl (t);
5684         DECL_USE_TEMPLATE (r) = 0;
5685         TREE_TYPE (r) = type;
5686
5687         DECL_CONTEXT (r) = ctx;
5688         DECL_VIRTUAL_CONTEXT (r)
5689           = tsubst_aggr_type (DECL_VIRTUAL_CONTEXT (t), args, 
5690                               /*complain=*/1, t,
5691                               /*entering_scope=*/1);
5692
5693         if (member && IDENTIFIER_TYPENAME_P (DECL_NAME (r)))
5694           /* Type-conversion operator.  Reconstruct the name, in
5695              case it's the name of one of the template's parameters.  */
5696           DECL_NAME (r) = build_typename_overload (TREE_TYPE (type));
5697
5698         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
5699                                      /*complain=*/1, t);
5700         DECL_TEMPLATE_RESULT (r) = NULL_TREE;
5701
5702         TREE_STATIC (r) = 0;
5703         TREE_PUBLIC (r) = TREE_PUBLIC (t);
5704         DECL_EXTERNAL (r) = 1;
5705         DECL_INTERFACE_KNOWN (r) = 0;
5706         DECL_DEFER_OUTPUT (r) = 0;
5707         TREE_CHAIN (r) = NULL_TREE;
5708         DECL_PENDING_INLINE_INFO (r) = 0;
5709         DECL_PENDING_INLINE_P (r) = 0;
5710         TREE_USED (r) = 0;
5711
5712         /* Set up the DECL_TEMPLATE_INFO for R and compute its mangled
5713            name.  There's no need to do this in the special friend
5714            case mentioned above where GEN_TMPL is NULL.  */
5715         if (gen_tmpl)
5716           {
5717             DECL_TEMPLATE_INFO (r) 
5718               = tree_cons (gen_tmpl, argvec, NULL_TREE);
5719             SET_DECL_IMPLICIT_INSTANTIATION (r);
5720             register_specialization (r, gen_tmpl, argvec);
5721
5722             /* Set the mangled name for R.  */
5723             if (DECL_DESTRUCTOR_P (t))
5724               DECL_ASSEMBLER_NAME (r) = build_destructor_name (ctx);
5725             else 
5726               {
5727                 /* Instantiations of template functions must be mangled
5728                    specially, in order to conform to 14.5.5.1
5729                    [temp.over.link].  */
5730                 tree tmpl = DECL_TI_TEMPLATE (t);
5731                 
5732                 /* TMPL will be NULL if this is a specialization of a
5733                    member function of a template class.  */
5734                 if (name_mangling_version < 1
5735                     || tmpl == NULL_TREE
5736                     || (member && !is_member_template (tmpl)
5737                         && !DECL_TEMPLATE_INFO (tmpl)))
5738                   set_mangled_name_for_decl (r);
5739                 else
5740                   set_mangled_name_for_template_decl (r);
5741               }
5742             
5743             DECL_RTL (r) = 0;
5744             make_decl_rtl (r, NULL_PTR, 1);
5745             
5746             /* Like grokfndecl.  If we don't do this, pushdecl will
5747                mess up our TREE_CHAIN because it doesn't find a
5748                previous decl.  Sigh.  */
5749             if (member
5750                 && ! uses_template_parms (r)
5751                 && (IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r)) 
5752                     == NULL_TREE))
5753               SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r), r);
5754
5755             /* We're not supposed to instantiate default arguments
5756                until they are called, for a template.  But, for a
5757                declaration like:
5758
5759                  template <class T> void f () 
5760                  { extern void g(int i = T()); }
5761                  
5762                we should do the substitution when the template is
5763                instantiated.  We handle the member function case in
5764                instantiate_class_template since the default arguments
5765                might refer to other members of the class.  */
5766             if (!member
5767                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
5768                 && !uses_template_parms (argvec))
5769               tsubst_default_arguments (r);
5770           }
5771
5772         /* Copy the list of befriending classes.  */
5773         for (friends = &DECL_BEFRIENDING_CLASSES (r);
5774              *friends;
5775              friends = &TREE_CHAIN (*friends)) 
5776           {
5777             *friends = copy_node (*friends);
5778             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
5779                                             args, /*complain=*/1, 
5780                                             in_decl);
5781           }
5782
5783         if (DECL_CONSTRUCTOR_P (r))
5784           {
5785             maybe_retrofit_in_chrg (r);
5786             grok_ctor_properties (ctx, r);
5787           }
5788         else if (DECL_OVERLOADED_OPERATOR_P (r))
5789           grok_op_properties (r, DECL_VIRTUAL_P (r), DECL_FRIEND_P (r));
5790       }
5791       break;
5792
5793     case PARM_DECL:
5794       {
5795         r = copy_node (t);
5796         TREE_TYPE (r) = type;
5797         c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5798
5799         if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
5800           DECL_INITIAL (r) = TREE_TYPE (r);
5801         else
5802           DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
5803                                      /*complain=*/1, in_decl);
5804
5805         DECL_CONTEXT (r) = NULL_TREE;
5806         if (PROMOTE_PROTOTYPES
5807             && (TREE_CODE (type) == INTEGER_TYPE
5808                 || TREE_CODE (type) == ENUMERAL_TYPE)
5809             && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))
5810           DECL_ARG_TYPE (r) = integer_type_node;
5811         if (TREE_CHAIN (t))
5812           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
5813                                    /*complain=*/1, TREE_CHAIN (t));
5814       }
5815       break;
5816
5817     case FIELD_DECL:
5818       {
5819         r = copy_decl (t);
5820         TREE_TYPE (r) = type;
5821         c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5822
5823         /* We don't have to set DECL_CONTEXT here; it is set by
5824            finish_member_declaration.  */
5825         DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
5826                                         /*complain=*/1, in_decl);
5827         TREE_CHAIN (r) = NULL_TREE;
5828         if (TREE_CODE (type) == VOID_TYPE) 
5829           cp_error_at ("instantiation of `%D' as type void", r);
5830       }
5831       break;
5832
5833     case USING_DECL:
5834       {
5835         r = copy_node (t);
5836         DECL_INITIAL (r)
5837           = tsubst_copy (DECL_INITIAL (t), args, /*complain=*/1, in_decl);
5838         TREE_CHAIN (r) = NULL_TREE;
5839       }
5840       break;
5841
5842     case TYPE_DECL:
5843       if (DECL_IMPLICIT_TYPEDEF_P (t))
5844         {
5845           /* For an implicit typedef, we just want the implicit
5846              typedef for the tsubst'd type.  We've already got the
5847              tsubst'd type, as TYPE, so we just need it's associated
5848              declaration.  */
5849           r = TYPE_NAME (type);
5850           break;
5851         }
5852       else if (!DECL_LANG_SPECIFIC (t))
5853         {
5854           /* For a template type parameter, we don't have to do
5855              anything special.  */
5856           r = TYPE_NAME (type);
5857           break;
5858         }
5859
5860       /* Fall through.  */
5861
5862     case VAR_DECL:
5863       {
5864         tree argvec;
5865         tree gen_tmpl;
5866         tree spec;
5867         tree tmpl;
5868         tree ctx;
5869
5870         /* Nobody should be tsubst'ing into non-template variables.  */
5871         my_friendly_assert (DECL_LANG_SPECIFIC (t) 
5872                             && DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5873
5874         if (TYPE_P (CP_DECL_CONTEXT (t)))
5875           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, 
5876                                   /*complain=*/1,
5877                                   in_decl, /*entering_scope=*/1);
5878         else
5879           /* Subsequent calls to pushdecl will fill this in.  */
5880           ctx = NULL_TREE;
5881
5882         /* Check to see if we already have this specialization.  */
5883         tmpl = DECL_TI_TEMPLATE (t);
5884         gen_tmpl = most_general_template (tmpl);
5885         argvec = tsubst (DECL_TI_ARGS (t), args, /*complain=*/1, in_decl);
5886         if (ctx)
5887           spec = retrieve_specialization (gen_tmpl, argvec);
5888         else
5889           spec = retrieve_local_specialization (gen_tmpl,
5890                                                 current_function_decl);
5891
5892         if (spec)
5893           {
5894             r = spec;
5895             break;
5896           }
5897
5898         r = copy_decl (t);
5899         TREE_TYPE (r) = type;
5900         c_apply_type_quals_to_decl (CP_TYPE_QUALS (type), r);
5901         DECL_CONTEXT (r) = ctx;
5902
5903         /* Don't try to expand the initializer until someone tries to use
5904            this variable; otherwise we run into circular dependencies.  */
5905         DECL_INITIAL (r) = NULL_TREE;
5906         DECL_RTL (r) = 0;
5907         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
5908
5909         /* For __PRETTY_FUNCTION__ we have to adjust the initializer.  */
5910         if (DECL_PRETTY_FUNCTION_P (r))
5911           {
5912             DECL_INITIAL (r) = tsubst (DECL_INITIAL (t),
5913                                        args,
5914                                        /*complain=*/1,
5915                                        NULL_TREE);
5916             TREE_TYPE (r) = TREE_TYPE (DECL_INITIAL (r));
5917           }
5918
5919         /* Even if the original location is out of scope, the newly
5920            substituted one is not.  */
5921         if (TREE_CODE (r) == VAR_DECL)
5922           DECL_DEAD_FOR_LOCAL (r) = 0;
5923
5924         /* A static data member declaration is always marked external
5925            when it is declared in-class, even if an initializer is
5926            present.  We mimic the non-template processing here.  */
5927         if (ctx)
5928           DECL_EXTERNAL (r) = 1;
5929
5930         DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
5931         SET_DECL_IMPLICIT_INSTANTIATION (r);
5932         if (ctx)
5933           register_specialization (r, gen_tmpl, argvec);
5934         else
5935           register_local_specialization (r, gen_tmpl,
5936                                          current_function_decl);
5937
5938         TREE_CHAIN (r) = NULL_TREE;
5939         if (TREE_CODE (r) == VAR_DECL && TREE_CODE (type) == VOID_TYPE)
5940           cp_error_at ("instantiation of `%D' as type void", r);
5941       }
5942       break;
5943
5944     default:
5945       my_friendly_abort (0);
5946     } 
5947
5948   /* Restore the file and line information.  */
5949   lineno = saved_lineno;
5950   input_filename = saved_filename;
5951
5952   return r;
5953 }
5954
5955 /* Substitue into the ARG_TYPES of a function type.  */
5956
5957 static tree
5958 tsubst_arg_types (arg_types, args, complain, in_decl)
5959      tree arg_types;
5960      tree args;
5961      int complain;
5962      tree in_decl;
5963 {
5964   tree remaining_arg_types;
5965   tree type;
5966
5967   if (!arg_types || arg_types == void_list_node)
5968     return arg_types;
5969   
5970   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
5971                                           args, complain, in_decl);
5972   if (remaining_arg_types == error_mark_node)
5973     return error_mark_node;
5974
5975   type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
5976   if (type == error_mark_node)
5977     return error_mark_node;
5978
5979   /* Do array-to-pointer, function-to-pointer conversion, and ignore
5980      top-level qualifiers as required.  */
5981   type = TYPE_MAIN_VARIANT (type_decays_to (type));
5982
5983   /* Note that we do not substitute into default arguments here.  The
5984      standard mandates that they be instantiated only when needed,
5985      which is done in build_over_call.  */
5986   return hash_tree_cons (TREE_PURPOSE (arg_types), type,
5987                          remaining_arg_types);
5988                          
5989 }
5990
5991 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
5992    *not* handle the exception-specification for FNTYPE, because the
5993    initial substitution of explicitly provided template parameters
5994    during argument deduction forbids substitution into the
5995    exception-specification:
5996
5997      [temp.deduct]
5998
5999      All references in the function type of the function template to  the
6000      corresponding template parameters are replaced by the specified tem-
6001      plate argument values.  If a substitution in a template parameter or
6002      in  the function type of the function template results in an invalid
6003      type, type deduction fails.  [Note: The equivalent  substitution  in
6004      exception specifications is done only when the function is instanti-
6005      ated, at which point a program is  ill-formed  if  the  substitution
6006      results in an invalid type.]  */
6007
6008 static tree
6009 tsubst_function_type (t, args, complain, in_decl)
6010      tree t;
6011      tree args;
6012      int complain;
6013      tree in_decl;
6014 {
6015   tree return_type;
6016   tree arg_types;
6017   tree fntype;
6018
6019   /* The TYPE_CONTEXT is not used for function/method types.  */
6020   my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
6021
6022   /* Substitue the return type.  */
6023   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6024   if (return_type == error_mark_node)
6025     return error_mark_node;
6026
6027   /* Substitue the argument types.  */
6028   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6029                                 complain, in_decl); 
6030   if (arg_types == error_mark_node)
6031     return error_mark_node;
6032   
6033   /* Construct a new type node and return it.  */
6034   if (TREE_CODE (t) == FUNCTION_TYPE)
6035     fntype = build_function_type (return_type, arg_types);
6036   else
6037     {
6038       tree r = TREE_TYPE (TREE_VALUE (arg_types));
6039       if (! IS_AGGR_TYPE (r))
6040         {
6041           /* [temp.deduct]
6042              
6043              Type deduction may fail for any of the following
6044              reasons:
6045              
6046              -- Attempting to create "pointer to member of T" when T
6047              is not a class type.  */
6048           if (complain)
6049             cp_error ("creating pointer to member function of non-class type `%T'",
6050                       r);
6051           return error_mark_node;
6052         }
6053       
6054       fntype = build_cplus_method_type (r, return_type, TREE_CHAIN
6055                                         (arg_types));
6056     }
6057   fntype = build_qualified_type (fntype, TYPE_QUALS (t));
6058   fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6059   
6060   return fntype;  
6061 }
6062
6063 /* Substitute into the PARMS of a call-declarator.  */
6064
6065 static tree
6066 tsubst_call_declarator_parms (parms, args, complain, in_decl)
6067      tree parms;
6068      tree args;
6069      int complain;
6070      tree in_decl;
6071 {
6072   tree new_parms;
6073   tree type;
6074   tree defarg;
6075
6076   if (!parms || parms == void_list_node)
6077     return parms;
6078   
6079   new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6080                                             args, complain, in_decl);
6081
6082   /* Figure out the type of this parameter.  */
6083   type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6084   
6085   /* Figure out the default argument as well.  Note that we use
6086      tsubst_expr since the default argument is really an expression.  */
6087   defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6088
6089   /* Chain this parameter on to the front of those we have already
6090      processed.  We don't use hash_tree_cons because that function
6091      doesn't check TREE_PARMLIST.  */
6092   new_parms = tree_cons (defarg, type, new_parms);
6093
6094   /* And note that these are parameters.  */
6095   TREE_PARMLIST (new_parms) = 1;
6096   
6097   return new_parms;
6098 }
6099
6100 /* Take the tree structure T and replace template parameters used
6101    therein with the argument vector ARGS.  IN_DECL is an associated
6102    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
6103    An appropriate error message is issued only if COMPLAIN is
6104    non-zero.  Note that we must be relatively non-tolerant of
6105    extensions here, in order to preserve conformance; if we allow
6106    substitutions that should not be allowed, we may allow argument
6107    deductions that should not succeed, and therefore report ambiguous
6108    overload situations where there are none.  In theory, we could
6109    allow the substitution, but indicate that it should have failed,
6110    and allow our caller to make sure that the right thing happens, but
6111    we don't try to do this yet.
6112
6113    This function is used for dealing with types, decls and the like;
6114    for expressions, use tsubst_expr or tsubst_copy.  */
6115
6116 tree
6117 tsubst (t, args, complain, in_decl)
6118      tree t, args;
6119      int complain;
6120      tree in_decl;
6121 {
6122   tree type, r;
6123
6124   if (t == NULL_TREE || t == error_mark_node
6125       || t == integer_type_node
6126       || t == void_type_node
6127       || t == char_type_node
6128       || TREE_CODE (t) == NAMESPACE_DECL)
6129     return t;
6130
6131   if (TREE_CODE (t) == IDENTIFIER_NODE)
6132     type = IDENTIFIER_TYPE_VALUE (t);
6133   else
6134     type = TREE_TYPE (t);
6135   if (type == unknown_type_node)
6136     my_friendly_abort (42);
6137
6138   if (type && TREE_CODE (t) != FUNCTION_DECL
6139       && TREE_CODE (t) != TYPENAME_TYPE
6140       && TREE_CODE (t) != TEMPLATE_DECL
6141       && TREE_CODE (t) != IDENTIFIER_NODE
6142       && TREE_CODE (t) != FUNCTION_TYPE
6143       && TREE_CODE (t) != METHOD_TYPE)
6144     type = tsubst (type, args, complain, in_decl);
6145   if (type == error_mark_node)
6146     return error_mark_node;
6147
6148   if (DECL_P (t))
6149     return tsubst_decl (t, args, type, in_decl);
6150
6151   switch (TREE_CODE (t))
6152     {
6153     case RECORD_TYPE:
6154     case UNION_TYPE:
6155     case ENUMERAL_TYPE:
6156       return tsubst_aggr_type (t, args, complain, in_decl,
6157                                /*entering_scope=*/0);
6158
6159     case ERROR_MARK:
6160     case IDENTIFIER_NODE:
6161     case OP_IDENTIFIER:
6162     case VOID_TYPE:
6163     case REAL_TYPE:
6164     case COMPLEX_TYPE:
6165     case BOOLEAN_TYPE:
6166     case INTEGER_CST:
6167     case REAL_CST:
6168     case STRING_CST:
6169       return t;
6170
6171     case INTEGER_TYPE:
6172       if (t == integer_type_node)
6173         return t;
6174
6175       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6176           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6177         return t;
6178
6179       {
6180         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
6181
6182         max = tsubst_expr (omax, args, complain, in_decl);
6183         if (max == error_mark_node)
6184           return error_mark_node;
6185
6186         /* See if we can reduce this expression to something simpler.  */
6187         max = maybe_fold_nontype_arg (max);
6188         if (!processing_template_decl && TREE_READONLY_DECL_P (max))
6189           max = decl_constant_value (max);
6190
6191         if (processing_template_decl 
6192             /* When providing explicit arguments to a template
6193                function, but leaving some arguments for subsequent
6194                deduction, MAX may be template-dependent even if we're
6195                not PROCESSING_TEMPLATE_DECL.  We still need to check for
6196                template parms, though; MAX won't be an INTEGER_CST for
6197                dynamic arrays, either.  */
6198             || (TREE_CODE (max) != INTEGER_CST
6199                 && uses_template_parms (max)))
6200           {
6201             tree itype = make_node (INTEGER_TYPE);
6202             TYPE_MIN_VALUE (itype) = size_zero_node;
6203             TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max,
6204                                                 integer_one_node);
6205             return itype;
6206           }
6207
6208         if (integer_zerop (omax))
6209           {
6210             /* Still allow an explicit array of size zero.  */
6211             if (pedantic)
6212               pedwarn ("creating array with size zero");
6213           }
6214         else if (integer_zerop (max) 
6215                  || (TREE_CODE (max) == INTEGER_CST 
6216                      && INT_CST_LT (max, integer_zero_node)))
6217           {
6218             /* [temp.deduct]
6219
6220                Type deduction may fail for any of the following
6221                reasons:  
6222
6223                  Attempting to create an array with a size that is
6224                  zero or negative.  */
6225             if (complain)
6226               cp_error ("creating array with size zero (`%E')", max);
6227
6228             return error_mark_node;
6229           }
6230
6231         return compute_array_index_type (NULL_TREE, max);
6232       }
6233
6234     case TEMPLATE_TYPE_PARM:
6235     case TEMPLATE_TEMPLATE_PARM:
6236     case TEMPLATE_PARM_INDEX:
6237       {
6238         int idx;
6239         int level;
6240         int levels;
6241
6242         r = NULL_TREE;
6243
6244         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6245             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
6246           {
6247             idx = TEMPLATE_TYPE_IDX (t);
6248             level = TEMPLATE_TYPE_LEVEL (t);
6249           }
6250         else
6251           {
6252             idx = TEMPLATE_PARM_IDX (t);
6253             level = TEMPLATE_PARM_LEVEL (t);
6254           }
6255
6256         if (TREE_VEC_LENGTH (args) > 0)
6257           {
6258             tree arg = NULL_TREE;
6259
6260             levels = TMPL_ARGS_DEPTH (args);
6261             if (level <= levels)
6262               arg = TMPL_ARG (args, level, idx);
6263
6264             if (arg == error_mark_node)
6265               return error_mark_node;
6266             else if (arg != NULL_TREE)
6267               {
6268                 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6269                   {
6270                     my_friendly_assert (TYPE_P (arg), 0);
6271                     return cp_build_qualified_type_real
6272                       (arg, CP_TYPE_QUALS (arg) | CP_TYPE_QUALS (t),
6273                        complain);
6274                   }
6275                 else if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
6276                   {
6277                     if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t))
6278                       {
6279                         /* We are processing a type constructed from
6280                            a template template parameter */
6281                         tree argvec = tsubst (TYPE_TI_ARGS (t),
6282                                               args, complain, in_decl);
6283                         if (argvec == error_mark_node)
6284                           return error_mark_node;
6285                         
6286                         /* We can get a TEMPLATE_TEMPLATE_PARM here when 
6287                            we are resolving nested-types in the signature of 
6288                            a member function templates.
6289                            Otherwise ARG is a TEMPLATE_DECL and is the real 
6290                            template to be instantiated.  */
6291                         if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6292                           arg = TYPE_NAME (arg);
6293
6294                         r = lookup_template_class (DECL_NAME (arg), 
6295                                                    argvec, in_decl, 
6296                                                    DECL_CONTEXT (arg),
6297                                                    /*entering_scope=*/0);
6298                         return cp_build_qualified_type_real (r, 
6299                                                              TYPE_QUALS (t),
6300                                                              complain);
6301                       }
6302                     else
6303                       /* We are processing a template argument list.  */ 
6304                       return arg;
6305                   }
6306                 else
6307                   return arg;
6308               }
6309           }
6310         else
6311           my_friendly_abort (981018);
6312
6313         if (level == 1)
6314           /* This can happen during the attempted tsubst'ing in
6315              unify.  This means that we don't yet have any information
6316              about the template parameter in question.  */
6317           return t;
6318
6319         /* If we get here, we must have been looking at a parm for a
6320            more deeply nested template.  Make a new version of this
6321            template parameter, but with a lower level.  */
6322         switch (TREE_CODE (t))
6323           {
6324           case TEMPLATE_TYPE_PARM:
6325           case TEMPLATE_TEMPLATE_PARM:
6326             r = copy_node (t);
6327             TEMPLATE_TYPE_PARM_INDEX (r)
6328               = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6329                                             r, levels);
6330             TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6331             TYPE_MAIN_VARIANT (r) = r;
6332             TYPE_POINTER_TO (r) = NULL_TREE;
6333             TYPE_REFERENCE_TO (r) = NULL_TREE;
6334
6335             if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
6336                 && TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t))
6337               {
6338                 tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6339                                       complain, in_decl); 
6340                 if (argvec == error_mark_node)
6341                   return error_mark_node;
6342
6343                 TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
6344                   = tree_cons (TYPE_NAME (t), argvec, NULL_TREE);
6345               }
6346             break;
6347
6348           case TEMPLATE_PARM_INDEX:
6349             r = reduce_template_parm_level (t, type, levels);
6350             break;
6351            
6352           default:
6353             my_friendly_abort (0);
6354           }
6355
6356         return r;
6357       }
6358
6359     case TREE_LIST:
6360       {
6361         tree purpose, value, chain, result;
6362
6363         if (t == void_list_node)
6364           return t;
6365
6366         purpose = TREE_PURPOSE (t);
6367         if (purpose)
6368           {
6369             purpose = tsubst (purpose, args, complain, in_decl);
6370             if (purpose == error_mark_node)
6371               return error_mark_node;
6372           }
6373         value = TREE_VALUE (t);
6374         if (value)
6375           {
6376             value = tsubst (value, args, complain, in_decl);
6377             if (value == error_mark_node)
6378               return error_mark_node;
6379           }
6380         chain = TREE_CHAIN (t);
6381         if (chain && chain != void_type_node)
6382           {
6383             chain = tsubst (chain, args, complain, in_decl);
6384             if (chain == error_mark_node)
6385               return error_mark_node;
6386           }
6387         if (purpose == TREE_PURPOSE (t)
6388             && value == TREE_VALUE (t)
6389             && chain == TREE_CHAIN (t))
6390           return t;
6391         result = hash_tree_cons (purpose, value, chain);
6392         TREE_PARMLIST (result) = TREE_PARMLIST (t);
6393         return result;
6394       }
6395     case TREE_VEC:
6396       if (type != NULL_TREE)
6397         {
6398           /* A binfo node.  We always need to make a copy, of the node
6399              itself and of its BINFO_BASETYPES.  */
6400
6401           t = copy_node (t);
6402
6403           /* Make sure type isn't a typedef copy.  */
6404           type = BINFO_TYPE (TYPE_BINFO (type));
6405
6406           TREE_TYPE (t) = complete_type (type);
6407           if (IS_AGGR_TYPE (type))
6408             {
6409               BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (type);
6410               BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (type);
6411               if (TYPE_BINFO_BASETYPES (type) != NULL_TREE)
6412                 BINFO_BASETYPES (t) = copy_node (TYPE_BINFO_BASETYPES (type));
6413             }
6414           return t;
6415         }
6416
6417       /* Otherwise, a vector of template arguments.  */
6418       return tsubst_template_arg_vector (t, args, complain);
6419
6420     case POINTER_TYPE:
6421     case REFERENCE_TYPE:
6422       {
6423         enum tree_code code;
6424
6425         if (type == TREE_TYPE (t))
6426           return t;
6427
6428         code = TREE_CODE (t);
6429
6430
6431         /* [temp.deduct]
6432            
6433            Type deduction may fail for any of the following
6434            reasons:  
6435
6436            -- Attempting to create a pointer to reference type.
6437            -- Attempting to create a reference to a reference type or
6438               a reference to void.  */
6439         if (TREE_CODE (type) == REFERENCE_TYPE
6440             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
6441           {
6442             static int   last_line = 0;
6443             static char* last_file = 0;
6444
6445             /* We keep track of the last time we issued this error
6446                message to avoid spewing a ton of messages during a
6447                single bad template instantiation.  */
6448             if (complain && (last_line != lineno ||
6449                              last_file != input_filename))
6450               {
6451                 if (TREE_CODE (type) == VOID_TYPE)
6452                   cp_error ("forming reference to void");
6453                 else
6454                   cp_error ("forming %s to reference type `%T'",
6455                             (code == POINTER_TYPE) ? "pointer" : "reference",
6456                             type);
6457                 last_line = lineno;
6458                 last_file = input_filename;
6459               }
6460
6461             return error_mark_node;
6462           }
6463         else if (code == POINTER_TYPE)
6464           r = build_pointer_type (type);
6465         else
6466           r = build_reference_type (type);
6467         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6468
6469         /* Will this ever be needed for TYPE_..._TO values?  */
6470         layout_type (r);
6471         return r;
6472       }
6473     case OFFSET_TYPE:
6474       {
6475         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
6476         if (r == error_mark_node || !IS_AGGR_TYPE (r))
6477           {
6478             /* [temp.deduct]
6479
6480                Type deduction may fail for any of the following
6481                reasons:
6482                
6483                -- Attempting to create "pointer to member of T" when T
6484                   is not a class type.  */
6485             if (complain)
6486               cp_error ("creating pointer to member of non-class type `%T'", 
6487                         r);
6488             return error_mark_node;
6489           }
6490         return build_offset_type (r, type);
6491       }
6492     case FUNCTION_TYPE:
6493     case METHOD_TYPE:
6494       {
6495         tree fntype;
6496         tree raises;
6497
6498         fntype = tsubst_function_type (t, args, complain, in_decl);
6499         if (fntype == error_mark_node)
6500           return error_mark_node;
6501
6502         /* Substitue the exception specification. */
6503         raises = TYPE_RAISES_EXCEPTIONS (t);
6504         if (raises)
6505           {
6506             tree   list = NULL_TREE;
6507             
6508             if (! TREE_VALUE (raises))
6509               list = raises;
6510             else
6511               for (; raises != NULL_TREE; raises = TREE_CHAIN (raises))
6512                 {
6513                   tree spec = TREE_VALUE (raises);
6514                   
6515                   spec = tsubst (spec, args, complain, in_decl);
6516                   if (spec == error_mark_node)
6517                     return spec;
6518                   list = add_exception_specifier (list, spec, complain);
6519                 }
6520             fntype = build_exception_variant (fntype, list);
6521           }
6522         return fntype;
6523       }
6524     case ARRAY_TYPE:
6525       {
6526         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
6527         if (domain == error_mark_node)
6528           return error_mark_node;
6529
6530         /* As an optimization, we avoid regenerating the array type if
6531            it will obviously be the same as T.  */
6532         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
6533           return t;
6534
6535         /* These checks should match the ones in grokdeclarator.  
6536
6537            [temp.deduct] 
6538         
6539            The deduction may fail for any of the following reasons: 
6540
6541            -- Attempting to create an array with an element type that
6542               is void, a function type, or a reference type.  */
6543         if (TREE_CODE (type) == VOID_TYPE 
6544             || TREE_CODE (type) == FUNCTION_TYPE
6545             || TREE_CODE (type) == REFERENCE_TYPE)
6546           {
6547             if (complain)
6548               cp_error ("creating array of `%T'", type);
6549             return error_mark_node;
6550           }
6551
6552         r = build_cplus_array_type (type, domain);
6553         return r;
6554       }
6555
6556     case PLUS_EXPR:
6557     case MINUS_EXPR:
6558       {
6559         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6560                           in_decl);
6561         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain,
6562                           in_decl);
6563
6564         if (e1 == error_mark_node || e2 == error_mark_node)
6565           return error_mark_node;
6566
6567         return fold (build (TREE_CODE (t), TREE_TYPE (t), e1, e2));
6568       }
6569
6570     case NEGATE_EXPR:
6571     case NOP_EXPR:
6572       {
6573         tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6574                           in_decl);
6575         if (e == error_mark_node)
6576           return error_mark_node;
6577
6578         return fold (build (TREE_CODE (t), TREE_TYPE (t), e));
6579       }
6580
6581     case TYPENAME_TYPE:
6582       {
6583         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6584                                      in_decl, /*entering_scope=*/1);
6585         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
6586                               complain, in_decl); 
6587
6588         if (ctx == error_mark_node || f == error_mark_node)
6589           return error_mark_node;
6590
6591         if (!IS_AGGR_TYPE (ctx))
6592           {
6593             if (complain)
6594               cp_error ("`%T' is not a class, struct, or union type",
6595                         ctx);
6596             return error_mark_node;
6597           }
6598         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
6599           {
6600             /* Normally, make_typename_type does not require that the CTX
6601                have complete type in order to allow things like:
6602              
6603                  template <class T> struct S { typename S<T>::X Y; };
6604
6605                But, such constructs have already been resolved by this
6606                point, so here CTX really should have complete type, unless
6607                it's a partial instantiation.  */
6608             ctx = complete_type (ctx);
6609             if (!COMPLETE_TYPE_P (ctx))
6610               {
6611                 if (complain)
6612                   incomplete_type_error (NULL_TREE, ctx);
6613                 return error_mark_node;
6614               }
6615           }
6616
6617         f = make_typename_type (ctx, f, complain);
6618         if (f == error_mark_node)
6619           return f;
6620         return cp_build_qualified_type_real (f, 
6621                                              CP_TYPE_QUALS (f) 
6622                                              | CP_TYPE_QUALS (t),
6623                                              complain);
6624       }
6625
6626     case INDIRECT_REF:
6627       {
6628         tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6629                          in_decl);
6630         if (e == error_mark_node)
6631           return error_mark_node;
6632         return make_pointer_declarator (type, e);
6633       }
6634
6635     case ADDR_EXPR:
6636       {
6637         tree e = tsubst (TREE_OPERAND (t, 0), args, complain,
6638                          in_decl);
6639         if (e == error_mark_node)
6640           return error_mark_node;
6641         return make_reference_declarator (type, e);
6642       }
6643
6644     case ARRAY_REF:
6645       {
6646         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6647                           in_decl);
6648         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain,
6649                                in_decl);
6650         if (e1 == error_mark_node || e2 == error_mark_node)
6651           return error_mark_node;
6652
6653         return build_parse_node (ARRAY_REF, e1, e2, tsubst_expr);
6654       }
6655
6656     case CALL_EXPR:
6657       {
6658         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6659                           in_decl);
6660         tree e2 = (tsubst_call_declarator_parms
6661                    (CALL_DECLARATOR_PARMS (t), args, complain, in_decl));
6662         tree e3 = tsubst (CALL_DECLARATOR_EXCEPTION_SPEC (t), args,
6663                           complain, in_decl);
6664
6665         if (e1 == error_mark_node || e2 == error_mark_node 
6666             || e3 == error_mark_node)
6667           return error_mark_node;
6668
6669         return make_call_declarator (e1, e2, CALL_DECLARATOR_QUALS (t), e3);
6670       }
6671
6672     case SCOPE_REF:
6673       {
6674         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain,
6675                                   in_decl);
6676         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
6677         if (e1 == error_mark_node || e2 == error_mark_node)
6678           return error_mark_node;
6679
6680         return build_parse_node (TREE_CODE (t), e1, e2);
6681       }
6682
6683     case TYPEOF_TYPE:
6684       {
6685         tree e1 = tsubst_expr (TYPE_FIELDS (t), args, complain,
6686                                in_decl);
6687         if (e1 == error_mark_node)
6688           return error_mark_node;
6689
6690         return TREE_TYPE (e1); 
6691       }
6692
6693     case FUNCTION_NAME:
6694       {
6695         const char *name;
6696         int len;
6697         tree type;
6698         tree str;
6699
6700         /* This code should match declare_hidden_char_array in
6701            c-common.c.  */
6702         name = (*decl_printable_name) (current_function_decl, 2);
6703         len = strlen (name) + 1;
6704         type =  build_array_type (char_type_node,
6705                                   build_index_type (build_int_2 (len, 0)));
6706         str = build_string (len, name);
6707         TREE_TYPE (str) = type;
6708         return str;
6709       }
6710
6711     default:
6712       sorry ("use of `%s' in template",
6713              tree_code_name [(int) TREE_CODE (t)]);
6714       return error_mark_node;
6715     }
6716 }
6717
6718 /* Like tsubst, but deals with expressions.  This function just replaces
6719    template parms; to finish processing the resultant expression, use
6720    tsubst_expr.  */
6721
6722 tree
6723 tsubst_copy (t, args, complain, in_decl)
6724      tree t, args;
6725      int complain;
6726      tree in_decl;
6727 {
6728   enum tree_code code;
6729   tree r;
6730
6731   if (t == NULL_TREE || t == error_mark_node)
6732     return t;
6733
6734   code = TREE_CODE (t);
6735
6736   switch (code)
6737     {
6738     case PARM_DECL:
6739       return do_identifier (DECL_NAME (t), 0, NULL_TREE);
6740
6741     case CONST_DECL:
6742       {
6743         tree enum_type;
6744         tree v;
6745
6746         if (!DECL_CONTEXT (t))
6747           /* This is a global enumeration constant.  */
6748           return t;
6749
6750         /* Unfortunately, we cannot just call lookup_name here.
6751            Consider:
6752            
6753              template <int I> int f() {
6754              enum E { a = I };
6755              struct S { void g() { E e = a; } };
6756              };
6757            
6758            When we instantiate f<7>::S::g(), say, lookup_name is not
6759            clever enough to find f<7>::a.  */
6760         enum_type 
6761           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl, 
6762                               /*entering_scope=*/0);
6763
6764         for (v = TYPE_VALUES (enum_type); 
6765              v != NULL_TREE; 
6766              v = TREE_CHAIN (v))
6767           if (TREE_PURPOSE (v) == DECL_NAME (t))
6768             return TREE_VALUE (v);
6769
6770           /* We didn't find the name.  That should never happen; if
6771              name-lookup found it during preliminary parsing, we
6772              should find it again here during instantiation.  */
6773         my_friendly_abort (0);
6774       }
6775       return t;
6776
6777     case FIELD_DECL:
6778       if (DECL_CONTEXT (t))
6779         {
6780           tree ctx;
6781
6782           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
6783                                   /*entering_scope=*/1);
6784           if (ctx != DECL_CONTEXT (t))
6785             return lookup_field (ctx, DECL_NAME (t), 0, 0);
6786         }
6787       return t;
6788
6789     case VAR_DECL:
6790     case FUNCTION_DECL:
6791       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
6792         t = tsubst (t, args, complain, in_decl);
6793       mark_used (t);
6794       return t;
6795
6796     case TEMPLATE_DECL:
6797       if (is_member_template (t))
6798         return tsubst (t, args, complain, in_decl);
6799       else
6800         return t;
6801
6802     case LOOKUP_EXPR:
6803       {
6804         /* We must tsbust into a LOOKUP_EXPR in case the names to
6805            which it refers is a conversion operator; in that case the
6806            name will change.  We avoid making unnecessary copies,
6807            however.  */
6808         
6809         tree id = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
6810
6811         if (id != TREE_OPERAND (t, 0))
6812           {
6813             r = build_nt (LOOKUP_EXPR, id);
6814             LOOKUP_EXPR_GLOBAL (r) = LOOKUP_EXPR_GLOBAL (t);
6815             t = r;
6816           }
6817
6818         return t;
6819       }
6820
6821     case CAST_EXPR:
6822     case REINTERPRET_CAST_EXPR:
6823     case CONST_CAST_EXPR:
6824     case STATIC_CAST_EXPR:
6825     case DYNAMIC_CAST_EXPR:
6826     case NOP_EXPR:
6827       return build1
6828         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
6829          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
6830
6831     case INDIRECT_REF:
6832     case PREDECREMENT_EXPR:
6833     case PREINCREMENT_EXPR:
6834     case POSTDECREMENT_EXPR:
6835     case POSTINCREMENT_EXPR:
6836     case NEGATE_EXPR:
6837     case TRUTH_NOT_EXPR:
6838     case BIT_NOT_EXPR:
6839     case ADDR_EXPR:
6840     case CONVERT_EXPR:      /* Unary + */
6841     case SIZEOF_EXPR:
6842     case ALIGNOF_EXPR:
6843     case ARROW_EXPR:
6844     case THROW_EXPR:
6845     case TYPEID_EXPR:
6846     case REALPART_EXPR:
6847     case IMAGPART_EXPR:
6848       return build1
6849         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
6850          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
6851
6852     case PLUS_EXPR:
6853     case MINUS_EXPR:
6854     case MULT_EXPR:
6855     case TRUNC_DIV_EXPR:
6856     case CEIL_DIV_EXPR:
6857     case FLOOR_DIV_EXPR:
6858     case ROUND_DIV_EXPR:
6859     case EXACT_DIV_EXPR:
6860     case BIT_AND_EXPR:
6861     case BIT_ANDTC_EXPR:
6862     case BIT_IOR_EXPR:
6863     case BIT_XOR_EXPR:
6864     case TRUNC_MOD_EXPR:
6865     case FLOOR_MOD_EXPR:
6866     case TRUTH_ANDIF_EXPR:
6867     case TRUTH_ORIF_EXPR:
6868     case TRUTH_AND_EXPR:
6869     case TRUTH_OR_EXPR:
6870     case RSHIFT_EXPR:
6871     case LSHIFT_EXPR:
6872     case RROTATE_EXPR:
6873     case LROTATE_EXPR:
6874     case EQ_EXPR:
6875     case NE_EXPR:
6876     case MAX_EXPR:
6877     case MIN_EXPR:
6878     case LE_EXPR:
6879     case GE_EXPR:
6880     case LT_EXPR:
6881     case GT_EXPR:
6882     case COMPONENT_REF:
6883     case ARRAY_REF:
6884     case COMPOUND_EXPR:
6885     case SCOPE_REF:
6886     case DOTSTAR_EXPR:
6887     case MEMBER_REF:
6888       return build_nt
6889         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6890          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
6891
6892     case CALL_EXPR:
6893       {
6894         tree fn = TREE_OPERAND (t, 0);
6895         if (is_overloaded_fn (fn))
6896           fn = tsubst_copy (get_first_fn (fn), args, complain, in_decl);
6897         else
6898           /* Sometimes FN is a LOOKUP_EXPR.  */
6899           fn = tsubst_copy (fn, args, complain, in_decl);
6900         return build_nt
6901           (code, fn, tsubst_copy (TREE_OPERAND (t, 1), args, complain,
6902                                   in_decl),
6903            NULL_TREE);
6904       }
6905
6906     case METHOD_CALL_EXPR:
6907       {
6908         tree name = TREE_OPERAND (t, 0);
6909         if (TREE_CODE (name) == BIT_NOT_EXPR)
6910           {
6911             name = tsubst_copy (TREE_OPERAND (name, 0), args,
6912                                 complain, in_decl);
6913             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
6914           }
6915         else if (TREE_CODE (name) == SCOPE_REF
6916                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
6917           {
6918             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
6919                                      complain, in_decl);
6920             name = TREE_OPERAND (name, 1);
6921             name = tsubst_copy (TREE_OPERAND (name, 0), args,
6922                                 complain, in_decl);
6923             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
6924             name = build_nt (SCOPE_REF, base, name);
6925           }
6926         else
6927           name = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
6928         return build_nt
6929           (code, name, tsubst_copy (TREE_OPERAND (t, 1), args,
6930                                     complain, in_decl),
6931            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl),
6932            NULL_TREE);
6933       }
6934
6935     case STMT_EXPR:
6936       /* This processing should really occur in tsubst_expr, However,
6937          tsubst_expr does not recurse into expressions, since it
6938          assumes that there aren't any statements inside them.
6939          Instead, it simply calls build_expr_from_tree.  So, we need
6940          to expand the STMT_EXPR here.  */
6941       if (!processing_template_decl)
6942         {
6943           tree stmt_expr = begin_stmt_expr ();
6944           tsubst_expr (STMT_EXPR_STMT (t), args,
6945                        complain, in_decl);
6946           return finish_stmt_expr (stmt_expr);
6947         }
6948       
6949       return t;
6950
6951     case COND_EXPR:
6952     case MODOP_EXPR:
6953     case PSEUDO_DTOR_EXPR:
6954       {
6955         r = build_nt
6956           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6957            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
6958            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
6959         return r;
6960       }
6961
6962     case NEW_EXPR:
6963       {
6964         r = build_nt
6965         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6966          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
6967          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
6968         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
6969         return r;
6970       }
6971
6972     case DELETE_EXPR:
6973       {
6974         r = build_nt
6975         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
6976          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
6977         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
6978         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
6979         return r;
6980       }
6981
6982     case TEMPLATE_ID_EXPR:
6983       {
6984         /* Substituted template arguments */
6985         tree targs = tsubst_copy (TREE_OPERAND (t, 1), args, complain,
6986                                   in_decl);
6987
6988         if (targs && TREE_CODE (targs) == TREE_LIST)
6989           {
6990             tree chain;
6991             for (chain = targs; chain; chain = TREE_CHAIN (chain))
6992               TREE_VALUE (chain) = maybe_fold_nontype_arg (TREE_VALUE (chain));
6993           }
6994         else if (targs)
6995           {
6996             int i;
6997             for (i = 0; i < TREE_VEC_LENGTH (targs); ++i)
6998               TREE_VEC_ELT (targs, i) 
6999                 = maybe_fold_nontype_arg (TREE_VEC_ELT (targs, i));
7000           }
7001
7002         return lookup_template_function
7003           (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl), targs);
7004       }
7005
7006     case TREE_LIST:
7007       {
7008         tree purpose, value, chain;
7009
7010         if (t == void_list_node)
7011           return t;
7012
7013         purpose = TREE_PURPOSE (t);
7014         if (purpose)
7015           purpose = tsubst_copy (purpose, args, complain, in_decl);
7016         value = TREE_VALUE (t);
7017         if (value)
7018           value = tsubst_copy (value, args, complain, in_decl);
7019         chain = TREE_CHAIN (t);
7020         if (chain && chain != void_type_node)
7021           chain = tsubst_copy (chain, args, complain, in_decl);
7022         if (purpose == TREE_PURPOSE (t)
7023             && value == TREE_VALUE (t)
7024             && chain == TREE_CHAIN (t))
7025           return t;
7026         return tree_cons (purpose, value, chain);
7027       }
7028
7029     case RECORD_TYPE:
7030     case UNION_TYPE:
7031     case ENUMERAL_TYPE:
7032     case INTEGER_TYPE:
7033     case TEMPLATE_TYPE_PARM:
7034     case TEMPLATE_TEMPLATE_PARM:
7035     case TEMPLATE_PARM_INDEX:
7036     case POINTER_TYPE:
7037     case REFERENCE_TYPE:
7038     case OFFSET_TYPE:
7039     case FUNCTION_TYPE:
7040     case METHOD_TYPE:
7041     case ARRAY_TYPE:
7042     case TYPENAME_TYPE:
7043     case TYPE_DECL:
7044       return tsubst (t, args, complain, in_decl);
7045
7046     case IDENTIFIER_NODE:
7047       if (IDENTIFIER_TYPENAME_P (t)
7048           /* Make sure it's not just a variable named `__opr', for instance,
7049              which can occur in some existing code.  */
7050           && TREE_TYPE (t))
7051         return build_typename_overload
7052           (tsubst (TREE_TYPE (t), args, complain, in_decl));
7053       else
7054         return t;
7055
7056     case CONSTRUCTOR:
7057       {
7058         r = build
7059           (CONSTRUCTOR, tsubst (TREE_TYPE (t), args, complain, in_decl), 
7060            NULL_TREE, tsubst_copy (CONSTRUCTOR_ELTS (t), args,
7061                                    complain, in_decl));
7062         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7063         return r;
7064       }
7065
7066     case VA_ARG_EXPR:
7067       return build_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7068                                         in_decl),
7069                            tsubst (TREE_TYPE (t), args, complain, in_decl));
7070
7071     case FUNCTION_NAME:
7072       return tsubst (t, args, complain, in_decl);
7073
7074     default:
7075       return t;
7076     }
7077 }
7078
7079 /* Like tsubst_copy, but also does semantic processing.  */
7080
7081 tree
7082 tsubst_expr (t, args, complain, in_decl)
7083      tree t, args;
7084      int complain;
7085      tree in_decl;
7086 {
7087   tree stmt;
7088
7089   if (t == NULL_TREE || t == error_mark_node)
7090     return t;
7091
7092   if (processing_template_decl)
7093     return tsubst_copy (t, args, complain, in_decl);
7094
7095   switch (TREE_CODE (t))
7096     {
7097     case RETURN_INIT:
7098       prep_stmt (t);
7099       finish_named_return_value
7100         (TREE_OPERAND (t, 0),
7101          tsubst_expr (TREE_OPERAND (t, 1), args, /*complain=*/1, in_decl));
7102       tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7103       break;
7104
7105     case CTOR_INITIALIZER:
7106       prep_stmt (t);
7107       current_member_init_list
7108         = tsubst_expr_values (TREE_OPERAND (t, 0), args);
7109       current_base_init_list
7110         = tsubst_expr_values (TREE_OPERAND (t, 1), args);
7111       setup_vtbl_ptr ();
7112       tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7113       break;
7114
7115     case RETURN_STMT:
7116       prep_stmt (t);
7117       finish_return_stmt (tsubst_expr (RETURN_EXPR (t),
7118                                        args, complain, in_decl));
7119       break;
7120
7121     case EXPR_STMT:
7122       prep_stmt (t);
7123       finish_expr_stmt (tsubst_expr (EXPR_STMT_EXPR (t),
7124                                      args, complain, in_decl));
7125       break;
7126
7127     case DECL_STMT:
7128       {
7129         tree decl;
7130         tree init;
7131
7132         prep_stmt (t);
7133         decl = DECL_STMT_DECL (t);
7134         if (TREE_CODE (decl) == LABEL_DECL)
7135           finish_label_decl (DECL_NAME (decl));
7136         else
7137           {
7138             init = DECL_INITIAL (decl);
7139             decl = tsubst (decl, args, complain, in_decl);
7140             init = tsubst_expr (init, args, complain, in_decl);
7141             if (init)
7142               DECL_INITIAL (decl) = error_mark_node;
7143             /* By marking the declaration as instantiated, we avoid
7144                trying to instantiate it.  Since instantiate_decl can't
7145                handle local variables, and since we've already done
7146                all that needs to be done, that's the right thing to
7147                do.  */
7148             if (TREE_CODE (decl) == VAR_DECL)
7149               DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7150             maybe_push_decl (decl);
7151             cp_finish_decl (decl, init, NULL_TREE, 0);
7152           }
7153         return decl;
7154       }
7155
7156     case FOR_STMT:
7157       {
7158         tree tmp;
7159         prep_stmt (t);
7160
7161         stmt = begin_for_stmt ();
7162         for (tmp = FOR_INIT_STMT (t); tmp; tmp = TREE_CHAIN (tmp))
7163           tsubst_expr (tmp, args, complain, in_decl);
7164         finish_for_init_stmt (stmt);
7165         finish_for_cond (tsubst_expr (FOR_COND (t), args,
7166                                       complain, in_decl),
7167                          stmt);
7168         tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
7169         finish_for_expr (tmp, stmt);
7170         tsubst_expr (FOR_BODY (t), args, complain, in_decl);
7171         finish_for_stmt (tmp, stmt);
7172       }
7173       break;
7174
7175     case WHILE_STMT:
7176       {
7177         prep_stmt (t);
7178         stmt = begin_while_stmt ();
7179         finish_while_stmt_cond (tsubst_expr (WHILE_COND (t),
7180                                              args, complain, in_decl),
7181                                 stmt);
7182         tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
7183         finish_while_stmt (stmt);
7184       }
7185       break;
7186
7187     case DO_STMT:
7188       {
7189         prep_stmt (t);
7190         stmt = begin_do_stmt ();
7191         tsubst_expr (DO_BODY (t), args, complain, in_decl);
7192         finish_do_body (stmt);
7193         finish_do_stmt (tsubst_expr (DO_COND (t), args,
7194                                      complain, in_decl),
7195                         stmt);
7196       }
7197       break;
7198
7199     case IF_STMT:
7200       {
7201         tree tmp;
7202
7203         prep_stmt (t);
7204         stmt = begin_if_stmt ();
7205         finish_if_stmt_cond (tsubst_expr (IF_COND (t),
7206                                           args, complain, in_decl),
7207                              stmt);
7208
7209         if (tmp = THEN_CLAUSE (t), tmp)
7210           {
7211             tsubst_expr (tmp, args, complain, in_decl);
7212             finish_then_clause (stmt);
7213           }
7214
7215         if (tmp = ELSE_CLAUSE (t), tmp)
7216           {
7217             begin_else_clause ();
7218             tsubst_expr (tmp, args, complain, in_decl);
7219             finish_else_clause (stmt);
7220           }
7221
7222         finish_if_stmt ();
7223       }
7224       break;
7225
7226     case COMPOUND_STMT:
7227       {
7228         tree substmt;
7229
7230         prep_stmt (t);
7231         stmt = begin_compound_stmt (COMPOUND_STMT_NO_SCOPE (t));
7232         for (substmt = COMPOUND_BODY (t); 
7233              substmt != NULL_TREE;
7234              substmt = TREE_CHAIN (substmt))
7235           tsubst_expr (substmt, args, complain, in_decl);
7236         return finish_compound_stmt (COMPOUND_STMT_NO_SCOPE (t), stmt);
7237       }
7238       break;
7239
7240     case BREAK_STMT:
7241       prep_stmt (t);
7242       finish_break_stmt ();
7243       break;
7244
7245     case CONTINUE_STMT:
7246       prep_stmt (t);
7247       finish_continue_stmt ();
7248       break;
7249
7250     case SWITCH_STMT:
7251       {
7252         tree val;
7253
7254         prep_stmt (t);
7255         stmt = begin_switch_stmt ();
7256         val = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
7257         finish_switch_cond (val, stmt);
7258         tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
7259         finish_switch_stmt (val, stmt);
7260       }
7261       break;
7262
7263     case CASE_LABEL:
7264       prep_stmt (t);
7265       finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
7266                          tsubst_expr (CASE_HIGH (t), args, complain, in_decl));
7267       break;
7268
7269     case LABEL_STMT:
7270       lineno = STMT_LINENO (t);
7271       finish_label_stmt (DECL_NAME (LABEL_STMT_LABEL (t)));
7272       break;
7273
7274     case GOTO_STMT:
7275       prep_stmt (t);
7276       t = GOTO_DESTINATION (t);
7277       if (TREE_CODE (t) != LABEL_DECL)
7278         /* Computed goto's must be tsubst'd into.  On the other hand,
7279            non-computed gotos must not be; the identifier in question
7280            will have no binding.  */
7281         t = tsubst_expr (t, args, complain, in_decl);
7282       else
7283         t = DECL_NAME (t);
7284       finish_goto_stmt (t);
7285       break;
7286
7287     case ASM_STMT:
7288       prep_stmt (t);
7289       finish_asm_stmt (ASM_CV_QUAL (t),
7290                        tsubst_expr (ASM_STRING (t), args, complain, in_decl),
7291                        tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
7292                        tsubst_expr (ASM_INPUTS (t), args, complain, in_decl), 
7293                        tsubst_expr (ASM_CLOBBERS (t), args, complain,
7294                                     in_decl));
7295       break;
7296
7297     case TRY_BLOCK:
7298       prep_stmt (t);
7299       if (CLEANUP_P (t))
7300         {
7301           stmt = begin_try_block ();
7302           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7303           finish_cleanup_try_block (stmt);
7304           finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
7305                                        complain, in_decl),
7306                           stmt);
7307         }
7308       else
7309         {
7310           tree handler;
7311
7312           if (FN_TRY_BLOCK_P (t))
7313             stmt = begin_function_try_block ();
7314           else
7315             stmt = begin_try_block ();
7316
7317           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7318
7319           if (FN_TRY_BLOCK_P (t))
7320             finish_function_try_block (stmt);
7321           else
7322             finish_try_block (stmt);
7323
7324           handler = TRY_HANDLERS (t);
7325           for (; handler; handler = TREE_CHAIN (handler))
7326             tsubst_expr (handler, args, complain, in_decl);
7327           if (FN_TRY_BLOCK_P (t))
7328             finish_function_handler_sequence (stmt);
7329           else
7330             finish_handler_sequence (stmt);
7331         }
7332       break;
7333       
7334     case HANDLER:
7335       {
7336         tree decl;
7337         tree blocks;
7338
7339         prep_stmt (t);
7340         stmt = begin_handler ();
7341         if (HANDLER_PARMS (t))
7342           {
7343             decl = DECL_STMT_DECL (HANDLER_PARMS (t));
7344             decl = tsubst (decl, args, complain, in_decl);
7345             /* Prevent instantiate_decl from trying to instantiate
7346                this variable.  We've already done all that needs to be
7347                done.  */
7348             DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7349           }
7350         else
7351           decl = NULL_TREE;
7352         blocks = finish_handler_parms (decl, stmt);
7353         tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
7354         finish_handler (blocks, stmt);
7355       }
7356       break;
7357
7358     case TAG_DEFN:
7359       prep_stmt (t);
7360       t = TREE_TYPE (t);
7361       tsubst (t, args, complain, NULL_TREE);
7362       break;
7363
7364     default:
7365       return build_expr_from_tree (tsubst_copy (t, args, complain, in_decl));
7366     }
7367   return NULL_TREE;
7368 }
7369
7370 /* Instantiate the indicated variable or function template TMPL with
7371    the template arguments in TARG_PTR.  */
7372
7373 tree
7374 instantiate_template (tmpl, targ_ptr)
7375      tree tmpl, targ_ptr;
7376 {
7377   tree fndecl;
7378   tree gen_tmpl;
7379   tree spec;
7380   int i, len;
7381   tree inner_args;
7382
7383   if (tmpl == error_mark_node)
7384     return error_mark_node;
7385
7386   my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
7387
7388   /* Check to see if we already have this specialization.  */
7389   spec = retrieve_specialization (tmpl, targ_ptr);
7390   if (spec != NULL_TREE)
7391     return spec;
7392
7393   if (DECL_TEMPLATE_INFO (tmpl) && !DECL_TEMPLATE_SPECIALIZATION (tmpl))
7394     {
7395       /* The TMPL is a partial instantiation.  To get a full set of
7396          arguments we must add the arguments used to perform the
7397          partial instantiation.  */
7398       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
7399                                               targ_ptr);
7400       gen_tmpl = most_general_template (tmpl);
7401
7402       /* Check to see if we already have this specialization.  */
7403       spec = retrieve_specialization (gen_tmpl, targ_ptr);
7404       if (spec != NULL_TREE)
7405         return spec;
7406     }
7407   else
7408     gen_tmpl = tmpl;
7409
7410   len = DECL_NTPARMS (gen_tmpl);
7411   inner_args = innermost_args (targ_ptr);
7412   i = len;
7413   while (i--)
7414     {
7415       tree t = TREE_VEC_ELT (inner_args, i);
7416       if (TYPE_P (t))
7417         {
7418           tree nt = target_type (t);
7419           if (IS_AGGR_TYPE (nt) && decl_function_context (TYPE_MAIN_DECL (nt)))
7420             {
7421               cp_error ("type `%T' composed from a local class is not a valid template-argument", t);
7422               cp_error ("  trying to instantiate `%D'", gen_tmpl);
7423               fndecl = error_mark_node;
7424               goto out;
7425             }
7426         }
7427     }
7428
7429   /* substitute template parameters */
7430   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
7431                    targ_ptr, /*complain=*/1, gen_tmpl);
7432   /* The DECL_TI_TEMPLATE should always be the immediate parent
7433      template, not the most general template.  */
7434   DECL_TI_TEMPLATE (fndecl) = tmpl;
7435
7436   if (flag_external_templates)
7437     add_pending_template (fndecl);
7438
7439  out:
7440   return fndecl;
7441 }
7442
7443 /* Push the name of the class template into the scope of the instantiation.  */
7444
7445 void
7446 overload_template_name (type)
7447      tree type;
7448 {
7449   tree id = DECL_NAME (CLASSTYPE_TI_TEMPLATE (type));
7450   tree decl;
7451
7452   if (IDENTIFIER_CLASS_VALUE (id)
7453       && TREE_TYPE (IDENTIFIER_CLASS_VALUE (id)) == type)
7454     return;
7455
7456   decl = build_decl (TYPE_DECL, id, type);
7457   SET_DECL_ARTIFICIAL (decl);
7458   pushdecl_class_level (decl);
7459 }
7460
7461 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
7462    arguments that are being used when calling it.  TARGS is a vector
7463    into which the deduced template arguments are placed.  
7464
7465    Return zero for success, 2 for an incomplete match that doesn't resolve
7466    all the types, and 1 for complete failure.  An error message will be
7467    printed only for an incomplete match.
7468
7469    If FN is a conversion operator, RETURN_TYPE is the type desired as
7470    the result of the conversion operator.
7471
7472    TPARMS is a vector of template parameters.
7473
7474    The EXPLICIT_TARGS are explicit template arguments provided via a
7475    template-id.
7476
7477    The parameter STRICT is one of:
7478
7479    DEDUCE_CALL: 
7480      We are deducing arguments for a function call, as in
7481      [temp.deduct.call].
7482
7483    DEDUCE_CONV:
7484      We are deducing arguments for a conversion function, as in 
7485      [temp.deduct.conv].
7486
7487    DEDUCE_EXACT:
7488      We are deducing arguments when calculating the partial
7489      ordering between specializations of function or class
7490      templates, as in [temp.func.order] and [temp.class.order],
7491      when doing an explicit instantiation as in [temp.explicit],
7492      when determining an explicit specialization as in
7493      [temp.expl.spec], or when taking the address of a function
7494      template, as in [temp.deduct.funcaddr]. 
7495
7496    The other arguments are as for type_unification.  */
7497
7498 int
7499 fn_type_unification (fn, explicit_targs, targs, args, return_type,
7500                      strict)
7501      tree fn, explicit_targs, targs, args, return_type;
7502      unification_kind_t strict;
7503 {
7504   tree parms;
7505   tree fntype;
7506   int result;
7507
7508   my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
7509   
7510   fntype = TREE_TYPE (fn);
7511   if (explicit_targs)
7512     {
7513       /* [temp.deduct]
7514           
7515          The specified template arguments must match the template
7516          parameters in kind (i.e., type, nontype, template), and there
7517          must not be more arguments than there are parameters;
7518          otherwise type deduction fails.
7519
7520          Nontype arguments must match the types of the corresponding
7521          nontype template parameters, or must be convertible to the
7522          types of the corresponding nontype parameters as specified in
7523          _temp.arg.nontype_, otherwise type deduction fails.
7524
7525          All references in the function type of the function template
7526          to the corresponding template parameters are replaced by the
7527          specified template argument values.  If a substitution in a
7528          template parameter or in the function type of the function
7529          template results in an invalid type, type deduction fails.  */
7530       int i;
7531       tree converted_args;
7532
7533       converted_args
7534         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
7535                                   explicit_targs, NULL_TREE, /*complain=*/0, 
7536                                   /*require_all_arguments=*/0));
7537       if (converted_args == error_mark_node)
7538         return 1;
7539
7540       fntype = tsubst (fntype, converted_args, /*complain=*/0, NULL_TREE);
7541       if (fntype == error_mark_node)
7542         return 1;
7543
7544       /* Place the explicitly specified arguments in TARGS.  */
7545       for (i = 0; i < TREE_VEC_LENGTH (targs); i++)
7546         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
7547     }
7548      
7549   parms = TYPE_ARG_TYPES (fntype);
7550
7551   if (DECL_CONV_FN_P (fn))
7552     {
7553       /* This is a template conversion operator.  Remove `this', since
7554          we could be comparing conversions from different classes.  */
7555       parms = TREE_CHAIN (parms);
7556       args = TREE_CHAIN (args);
7557       my_friendly_assert (return_type != NULL_TREE, 20000227);
7558     }
7559   
7560   if (return_type)
7561     {
7562       /* We've been given a return type to match, prepend it.  */
7563       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
7564       args = tree_cons (NULL_TREE, return_type, args);
7565     }
7566
7567   /* We allow incomplete unification without an error message here
7568      because the standard doesn't seem to explicitly prohibit it.  Our
7569      callers must be ready to deal with unification failures in any
7570      event.  */
7571   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
7572                                   targs, parms, args, /*subr=*/0,
7573                                   strict, /*allow_incomplete*/1);
7574
7575   if (result == 0) 
7576     /* All is well so far.  Now, check:
7577        
7578        [temp.deduct] 
7579        
7580        When all template arguments have been deduced, all uses of
7581        template parameters in nondeduced contexts are replaced with
7582        the corresponding deduced argument values.  If the
7583        substitution results in an invalid type, as described above,
7584        type deduction fails.  */
7585     if (tsubst (TREE_TYPE (fn), targs, /*complain=*/0, NULL_TREE)
7586         == error_mark_node)
7587       return 1;
7588
7589   return result;
7590 }
7591
7592 /* Adjust types before performing type deduction, as described in
7593    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
7594    sections are symmetric.  PARM is the type of a function parameter
7595    or the return type of the conversion function.  ARG is the type of
7596    the argument passed to the call, or the type of the value
7597    intialized with the result of the conversion function.  */
7598
7599 static void
7600 maybe_adjust_types_for_deduction (strict, parm, arg)
7601      unification_kind_t strict;
7602      tree* parm;
7603      tree* arg;
7604 {
7605   switch (strict)
7606     {
7607     case DEDUCE_CALL:
7608       break;
7609
7610     case DEDUCE_CONV:
7611       {
7612         /* Swap PARM and ARG throughout the remainder of this
7613            function; the handling is precisely symmetric since PARM
7614            will initialize ARG rather than vice versa.  */
7615         tree* temp = parm;
7616         parm = arg;
7617         arg = temp;
7618         break;
7619       }
7620
7621     case DEDUCE_EXACT:
7622       /* There is nothing to do in this case.  */
7623       return;
7624
7625     default:
7626       my_friendly_abort (0);
7627     }
7628
7629   if (TREE_CODE (*parm) != REFERENCE_TYPE)
7630     {
7631       /* [temp.deduct.call]
7632          
7633          If P is not a reference type:
7634          
7635          --If A is an array type, the pointer type produced by the
7636          array-to-pointer standard conversion (_conv.array_) is
7637          used in place of A for type deduction; otherwise,
7638          
7639          --If A is a function type, the pointer type produced by
7640          the function-to-pointer standard conversion
7641          (_conv.func_) is used in place of A for type deduction;
7642          otherwise,
7643          
7644          --If A is a cv-qualified type, the top level
7645          cv-qualifiers of A's type are ignored for type
7646          deduction.  */
7647       if (TREE_CODE (*arg) == ARRAY_TYPE)
7648         *arg = build_pointer_type (TREE_TYPE (*arg));
7649       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
7650         *arg = build_pointer_type (*arg);
7651       else
7652         *arg = TYPE_MAIN_VARIANT (*arg);
7653     }
7654   
7655   /* [temp.deduct.call]
7656      
7657      If P is a cv-qualified type, the top level cv-qualifiers
7658      of P's type are ignored for type deduction.  If P is a
7659      reference type, the type referred to by P is used for
7660      type deduction.  */
7661   *parm = TYPE_MAIN_VARIANT (*parm);
7662   if (TREE_CODE (*parm) == REFERENCE_TYPE)
7663     *parm = TREE_TYPE (*parm);
7664 }
7665
7666 /* Like type_unfication.
7667
7668    If SUBR is 1, we're being called recursively (to unify the
7669    arguments of a function or method parameter of a function
7670    template).  */
7671
7672 static int
7673 type_unification_real (tparms, targs, parms, args, subr,
7674                        strict, allow_incomplete)
7675      tree tparms, targs, parms, args;
7676      int subr;
7677      unification_kind_t strict;
7678      int allow_incomplete;
7679 {
7680   tree parm, arg;
7681   int i;
7682   int ntparms = TREE_VEC_LENGTH (tparms);
7683   int sub_strict;
7684
7685   my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
7686   my_friendly_assert (parms == NULL_TREE 
7687                       || TREE_CODE (parms) == TREE_LIST, 290);
7688   /* ARGS could be NULL (via a call from parse.y to
7689      build_x_function_call).  */
7690   if (args)
7691     my_friendly_assert (TREE_CODE (args) == TREE_LIST, 291);
7692   my_friendly_assert (ntparms > 0, 292);
7693
7694   switch (strict)
7695     {
7696     case DEDUCE_CALL:
7697       sub_strict = UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_DERIVED;
7698       break;
7699       
7700     case DEDUCE_CONV:
7701       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
7702       break;
7703
7704     case DEDUCE_EXACT:
7705       sub_strict = UNIFY_ALLOW_NONE;
7706       break;
7707       
7708     default:
7709       my_friendly_abort (0);
7710     }
7711
7712   while (parms
7713          && parms != void_list_node
7714          && args
7715          && args != void_list_node)
7716     {
7717       parm = TREE_VALUE (parms);
7718       parms = TREE_CHAIN (parms);
7719       arg = TREE_VALUE (args);
7720       args = TREE_CHAIN (args);
7721
7722       if (arg == error_mark_node)
7723         return 1;
7724       if (arg == unknown_type_node)
7725         /* We can't deduce anything from this, but we might get all the
7726            template args from other function args.  */
7727         continue;
7728
7729       /* Conversions will be performed on a function argument that
7730          corresponds with a function parameter that contains only
7731          non-deducible template parameters and explicitly specified
7732          template parameters.  */
7733       if (! uses_template_parms (parm))
7734         {
7735           tree type;
7736
7737           if (!TYPE_P (arg))
7738             type = TREE_TYPE (arg);
7739           else
7740             {
7741               type = arg;
7742               arg = NULL_TREE;
7743             }
7744
7745           if (strict == DEDUCE_EXACT)
7746             {
7747               if (same_type_p (parm, type))
7748                 continue;
7749             }
7750           else
7751             /* It might work; we shouldn't check now, because we might
7752                get into infinite recursion.  Overload resolution will
7753                handle it.  */
7754             continue;
7755
7756           return 1;
7757         }
7758         
7759       if (!TYPE_P (arg))
7760         {
7761           my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
7762           if (type_unknown_p (arg))
7763             {
7764               /* [temp.deduct.type] A template-argument can be deduced from
7765                  a pointer to function or pointer to member function
7766                  argument if the set of overloaded functions does not
7767                  contain function templates and at most one of a set of
7768                  overloaded functions provides a unique match.  */
7769
7770               if (resolve_overloaded_unification
7771                   (tparms, targs, parm, arg, strict, sub_strict)
7772                   != 0)
7773                 return 1;
7774               continue;
7775             }
7776           arg = TREE_TYPE (arg);
7777         }
7778
7779       if (!subr)
7780         maybe_adjust_types_for_deduction (strict, &parm, &arg);
7781
7782       switch (unify (tparms, targs, parm, arg, sub_strict))
7783         {
7784         case 0:
7785           break;
7786         case 1:
7787           return 1;
7788         }
7789     }
7790   /* Fail if we've reached the end of the parm list, and more args
7791      are present, and the parm list isn't variadic.  */
7792   if (args && args != void_list_node && parms == void_list_node)
7793     return 1;
7794   /* Fail if parms are left and they don't have default values.  */
7795   if (parms
7796       && parms != void_list_node
7797       && TREE_PURPOSE (parms) == NULL_TREE)
7798     return 1;
7799   if (!subr)
7800     for (i = 0; i < ntparms; i++)
7801       if (TREE_VEC_ELT (targs, i) == NULL_TREE)
7802         {
7803           if (!allow_incomplete)
7804             error ("incomplete type unification");
7805           return 2;
7806         }
7807   return 0;
7808 }
7809
7810 /* Subroutine of type_unification_real.  Args are like the variables at the
7811    call site.  ARG is an overloaded function (or template-id); we try
7812    deducing template args from each of the overloads, and if only one
7813    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
7814
7815 static int
7816 resolve_overloaded_unification (tparms, targs, parm, arg, strict,
7817                                 sub_strict)
7818      tree tparms, targs, parm, arg;
7819      unification_kind_t strict;
7820      int sub_strict;
7821 {
7822   tree tempargs = copy_node (targs);
7823   int good = 0;
7824
7825   if (TREE_CODE (arg) == ADDR_EXPR)
7826     arg = TREE_OPERAND (arg, 0);
7827
7828   if (TREE_CODE (arg) == COMPONENT_REF)
7829     /* Handle `&x' where `x' is some static or non-static member
7830        function name.  */
7831     arg = TREE_OPERAND (arg, 1);
7832
7833   if (TREE_CODE (arg) == OFFSET_REF)
7834     arg = TREE_OPERAND (arg, 1);
7835
7836   /* Strip baselink information.  */
7837   while (TREE_CODE (arg) == TREE_LIST)
7838     arg = TREE_VALUE (arg);
7839
7840   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
7841     {
7842       /* If we got some explicit template args, we need to plug them into
7843          the affected templates before we try to unify, in case the
7844          explicit args will completely resolve the templates in question.  */
7845
7846       tree expl_subargs = TREE_OPERAND (arg, 1);
7847       arg = TREE_OPERAND (arg, 0);
7848
7849       for (; arg; arg = OVL_NEXT (arg))
7850         {
7851           tree fn = OVL_CURRENT (arg);
7852           tree subargs, elem;
7853
7854           if (TREE_CODE (fn) != TEMPLATE_DECL)
7855             continue;
7856
7857           subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
7858                                            expl_subargs);
7859           if (subargs)
7860             {
7861               elem = tsubst (TREE_TYPE (fn), subargs, /*complain=*/0,
7862                              NULL_TREE);
7863               if (TREE_CODE (elem) == METHOD_TYPE)
7864                 elem = build_ptrmemfunc_type (build_pointer_type (elem));
7865               good += try_one_overload (tparms, targs, tempargs, parm, elem,
7866                                         strict, sub_strict);
7867             }
7868         }
7869     }
7870   else if (TREE_CODE (arg) == OVERLOAD)
7871     {
7872       for (; arg; arg = OVL_NEXT (arg))
7873         {
7874           tree type = TREE_TYPE (OVL_CURRENT (arg));
7875           if (TREE_CODE (type) == METHOD_TYPE)
7876             type = build_ptrmemfunc_type (build_pointer_type (type));
7877           good += try_one_overload (tparms, targs, tempargs, parm,
7878                                     type,
7879                                     strict, sub_strict);
7880         }
7881     }
7882   else
7883     my_friendly_abort (981006);
7884
7885   /* [temp.deduct.type] A template-argument can be deduced from a pointer
7886      to function or pointer to member function argument if the set of
7887      overloaded functions does not contain function templates and at most
7888      one of a set of overloaded functions provides a unique match.
7889
7890      So if we found multiple possibilities, we return success but don't
7891      deduce anything.  */
7892
7893   if (good == 1)
7894     {
7895       int i = TREE_VEC_LENGTH (targs);
7896       for (; i--; )
7897         if (TREE_VEC_ELT (tempargs, i))
7898           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
7899     }
7900   if (good)
7901     return 0;
7902
7903   return 1;
7904 }
7905
7906 /* Subroutine of resolve_overloaded_unification; does deduction for a single
7907    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
7908    different overloads deduce different arguments for a given parm.
7909    Returns 1 on success.  */
7910
7911 static int
7912 try_one_overload (tparms, orig_targs, targs, parm, arg, strict,
7913                   sub_strict)
7914      tree tparms, orig_targs, targs, parm, arg;
7915      unification_kind_t strict;
7916      int sub_strict;
7917 {
7918   int nargs;
7919   tree tempargs;
7920   int i;
7921
7922   /* [temp.deduct.type] A template-argument can be deduced from a pointer
7923      to function or pointer to member function argument if the set of
7924      overloaded functions does not contain function templates and at most
7925      one of a set of overloaded functions provides a unique match.
7926
7927      So if this is a template, just return success.  */
7928
7929   if (uses_template_parms (arg))
7930     return 1;
7931
7932   maybe_adjust_types_for_deduction (strict, &parm, &arg);
7933
7934   /* We don't copy orig_targs for this because if we have already deduced
7935      some template args from previous args, unify would complain when we
7936      try to deduce a template parameter for the same argument, even though
7937      there isn't really a conflict.  */
7938   nargs = TREE_VEC_LENGTH (targs);
7939   tempargs = make_tree_vec (nargs);
7940
7941   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
7942     return 0;
7943
7944   /* First make sure we didn't deduce anything that conflicts with
7945      explicitly specified args.  */
7946   for (i = nargs; i--; )
7947     {
7948       tree elt = TREE_VEC_ELT (tempargs, i);
7949       tree oldelt = TREE_VEC_ELT (orig_targs, i);
7950
7951       if (elt == NULL_TREE)
7952         continue;
7953       else if (uses_template_parms (elt))
7954         {
7955           /* Since we're unifying against ourselves, we will fill in template
7956              args used in the function parm list with our own template parms.
7957              Discard them.  */
7958           TREE_VEC_ELT (tempargs, i) = NULL_TREE;
7959           continue;
7960         }
7961       else if (oldelt && ! template_args_equal (oldelt, elt))
7962         return 0;
7963     }
7964
7965   for (i = nargs; i--; )
7966     {
7967       tree elt = TREE_VEC_ELT (tempargs, i);
7968
7969       if (elt)
7970         TREE_VEC_ELT (targs, i) = elt;
7971     }
7972
7973   return 1;
7974 }
7975
7976 /* PARM is a template class (perhaps with unbound template
7977    parameters).  ARG is a fully instantiated type.  If ARG can be
7978    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
7979    TARGS are as for unify.  */
7980
7981 static tree
7982 try_class_unification (tparms, targs, parm, arg)
7983      tree tparms;
7984      tree targs;
7985      tree parm;
7986      tree arg;
7987 {
7988   int i;
7989   tree copy_of_targs;
7990
7991   if (!CLASSTYPE_TEMPLATE_INFO (arg)
7992       || CLASSTYPE_TI_TEMPLATE (arg) != CLASSTYPE_TI_TEMPLATE (parm))
7993     return NULL_TREE;
7994
7995   /* We need to make a new template argument vector for the call to
7996      unify.  If we used TARGS, we'd clutter it up with the result of
7997      the attempted unification, even if this class didn't work out.
7998      We also don't want to commit ourselves to all the unifications
7999      we've already done, since unification is supposed to be done on
8000      an argument-by-argument basis.  In other words, consider the
8001      following pathological case:
8002
8003        template <int I, int J, int K>
8004        struct S {};
8005        
8006        template <int I, int J>
8007        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
8008        
8009        template <int I, int J, int K>
8010        void f(S<I, J, K>, S<I, I, I>);
8011        
8012        void g() {
8013          S<0, 0, 0> s0;
8014          S<0, 1, 2> s2;
8015        
8016          f(s0, s2);
8017        }
8018
8019      Now, by the time we consider the unification involving `s2', we
8020      already know that we must have `f<0, 0, 0>'.  But, even though
8021      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is not legal
8022      because there are two ways to unify base classes of S<0, 1, 2>
8023      with S<I, I, I>.  If we kept the already deduced knowledge, we
8024      would reject the possibility I=1.  */
8025   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
8026   i = unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
8027              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE);
8028   
8029   /* If unification failed, we're done.  */
8030   if (i != 0)
8031     return NULL_TREE;
8032   else
8033     return arg;
8034 }
8035
8036 /* Subroutine of get_template_base.  RVAL, if non-NULL, is a base we
8037    have alreay discovered to be satisfactory.  ARG_BINFO is the binfo
8038    for the base class of ARG that we are currently examining.  */
8039
8040 static tree
8041 get_template_base_recursive (tparms, targs, parm,
8042                              arg_binfo, rval, flags)
8043      tree tparms;
8044      tree targs;
8045      tree arg_binfo;
8046      tree rval;
8047      tree parm;
8048      int flags;
8049 {
8050   tree binfos;
8051   int i, n_baselinks;
8052   tree arg = BINFO_TYPE (arg_binfo);
8053
8054   if (!(flags & GTB_IGNORE_TYPE))
8055     {
8056       tree r = try_class_unification (tparms, targs,
8057                                       parm, arg);
8058
8059       /* If there is more than one satisfactory baseclass, then:
8060
8061            [temp.deduct.call]
8062
8063            If they yield more than one possible deduced A, the type
8064            deduction fails.
8065
8066            applies.  */
8067       if (r && rval && !same_type_p (r, rval))
8068         return error_mark_node;
8069       else if (r)
8070         rval = r;
8071     }
8072
8073   binfos = BINFO_BASETYPES (arg_binfo);
8074   n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
8075
8076   /* Process base types.  */
8077   for (i = 0; i < n_baselinks; i++)
8078     {
8079       tree base_binfo = TREE_VEC_ELT (binfos, i);
8080       int this_virtual;
8081
8082       /* Skip this base, if we've already seen it.  */
8083       if (BINFO_MARKED (base_binfo))
8084         continue;
8085
8086       this_virtual = 
8087         (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
8088       
8089       /* When searching for a non-virtual, we cannot mark virtually
8090          found binfos.  */
8091       if (! this_virtual)
8092         SET_BINFO_MARKED (base_binfo);
8093       
8094       rval = get_template_base_recursive (tparms, targs,
8095                                           parm,
8096                                           base_binfo, 
8097                                           rval,
8098                                           GTB_VIA_VIRTUAL * this_virtual);
8099       
8100       /* If we discovered more than one matching base class, we can
8101          stop now.  */
8102       if (rval == error_mark_node)
8103         return error_mark_node;
8104     }
8105
8106   return rval;
8107 }
8108
8109 /* Given a template type PARM and a class type ARG, find the unique
8110    base type in ARG that is an instance of PARM.  We do not examine
8111    ARG itself; only its base-classes.  If there is no appropriate base
8112    class, return NULL_TREE.  If there is more than one, return
8113    error_mark_node.  PARM may be the type of a partial specialization,
8114    as well as a plain template type.  Used by unify.  */
8115
8116 static tree
8117 get_template_base (tparms, targs, parm, arg)
8118      tree tparms;
8119      tree targs;
8120      tree parm;
8121      tree arg;
8122 {
8123   tree rval;
8124   tree arg_binfo;
8125
8126   my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
8127   
8128   arg_binfo = TYPE_BINFO (complete_type (arg));
8129   rval = get_template_base_recursive (tparms, targs,
8130                                       parm, arg_binfo, 
8131                                       NULL_TREE,
8132                                       GTB_IGNORE_TYPE);
8133
8134   /* Since get_template_base_recursive marks the bases classes, we
8135      must unmark them here.  */
8136   dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
8137
8138   return rval;
8139 }
8140
8141 /* Returns the level of DECL, which declares a template parameter.  */
8142
8143 static int
8144 template_decl_level (decl)
8145      tree decl;
8146 {
8147   switch (TREE_CODE (decl))
8148     {
8149     case TYPE_DECL:
8150     case TEMPLATE_DECL:
8151       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
8152
8153     case PARM_DECL:
8154       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
8155
8156     default:
8157       my_friendly_abort (0);
8158       return 0;
8159     }
8160 }
8161
8162 /* Decide whether ARG can be unified with PARM, considering only the
8163    cv-qualifiers of each type, given STRICT as documented for unify.
8164    Returns non-zero iff the unification is OK on that basis.*/
8165
8166 static int
8167 check_cv_quals_for_unify (strict, arg, parm)
8168      int strict;
8169      tree arg;
8170      tree parm;
8171 {
8172   if (!(strict & UNIFY_ALLOW_MORE_CV_QUAL)
8173       && !at_least_as_qualified_p (arg, parm))
8174     return 0;
8175
8176   if (!(strict & UNIFY_ALLOW_LESS_CV_QUAL)
8177       && !at_least_as_qualified_p (parm, arg))
8178     return 0;
8179
8180   return 1;
8181 }
8182
8183 /* Takes parameters as for type_unification.  Returns 0 if the
8184    type deduction suceeds, 1 otherwise.  The parameter STRICT is a
8185    bitwise or of the following flags:
8186
8187      UNIFY_ALLOW_NONE:
8188        Require an exact match between PARM and ARG.
8189      UNIFY_ALLOW_MORE_CV_QUAL:
8190        Allow the deduced ARG to be more cv-qualified than ARG.
8191      UNIFY_ALLOW_LESS_CV_QUAL:
8192        Allow the deduced ARG to be less cv-qualified than ARG.
8193      UNIFY_ALLOW_DERIVED:
8194        Allow the deduced ARG to be a template base class of ARG,
8195        or a pointer to a template base class of the type pointed to by
8196        ARG.
8197      UNIFY_ALLOW_INTEGER:
8198        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
8199        case for more information.  */
8200
8201 static int
8202 unify (tparms, targs, parm, arg, strict)
8203      tree tparms, targs, parm, arg;
8204      int strict;
8205 {
8206   int idx;
8207   tree targ;
8208   tree tparm;
8209
8210   /* I don't think this will do the right thing with respect to types.
8211      But the only case I've seen it in so far has been array bounds, where
8212      signedness is the only information lost, and I think that will be
8213      okay.  */
8214   while (TREE_CODE (parm) == NOP_EXPR)
8215     parm = TREE_OPERAND (parm, 0);
8216
8217   if (arg == error_mark_node)
8218     return 1;
8219   if (arg == unknown_type_node)
8220     /* We can't deduce anything from this, but we might get all the
8221        template args from other function args.  */
8222     return 0;
8223
8224   /* If PARM uses template parameters, then we can't bail out here,
8225      even if ARG == PARM, since we won't record unifications for the
8226      template parameters.  We might need them if we're trying to
8227      figure out which of two things is more specialized.  */
8228   if (arg == parm && !uses_template_parms (parm))
8229     return 0;
8230
8231   /* Immediately reject some pairs that won't unify because of
8232      cv-qualification mismatches.  */
8233   if (TREE_CODE (arg) == TREE_CODE (parm)
8234       && TYPE_P (arg)
8235       /* We check the cv-qualifiers when unifying with template type
8236          parameters below.  We want to allow ARG `const T' to unify with
8237          PARM `T' for example, when computing which of two templates
8238          is more specialized, for example.  */
8239       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
8240       && !check_cv_quals_for_unify (strict, arg, parm))
8241     return 1;
8242
8243   switch (TREE_CODE (parm))
8244     {
8245     case TYPENAME_TYPE:
8246       /* In a type which contains a nested-name-specifier, template
8247          argument values cannot be deduced for template parameters used
8248          within the nested-name-specifier.  */
8249       return 0;
8250
8251     case TEMPLATE_TYPE_PARM:
8252     case TEMPLATE_TEMPLATE_PARM:
8253       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
8254
8255       if (TEMPLATE_TYPE_LEVEL (parm)
8256           != template_decl_level (tparm))
8257         /* The PARM is not one we're trying to unify.  Just check
8258            to see if it matches ARG.  */
8259         return (TREE_CODE (arg) == TREE_CODE (parm)
8260                 && same_type_p (parm, arg)) ? 0 : 1;
8261       idx = TEMPLATE_TYPE_IDX (parm);
8262       targ = TREE_VEC_ELT (targs, idx);
8263       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
8264
8265       /* Check for mixed types and values.  */
8266       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
8267            && TREE_CODE (tparm) != TYPE_DECL)
8268           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM 
8269               && TREE_CODE (tparm) != TEMPLATE_DECL))
8270         return 1;
8271
8272       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM)
8273         {
8274           if (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm))
8275             {
8276               /* We arrive here when PARM does not involve template 
8277                  specialization.  */
8278
8279               /* ARG must be constructed from a template class.  */
8280               if (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg))
8281                 return 1;
8282
8283               {
8284                 tree parmtmpl = TYPE_TI_TEMPLATE (parm);
8285                 tree parmvec = TYPE_TI_ARGS (parm);
8286                 tree argvec = CLASSTYPE_TI_ARGS (arg);
8287                 tree argtmplvec
8288                   = DECL_INNERMOST_TEMPLATE_PARMS (CLASSTYPE_TI_TEMPLATE (arg));
8289                 int i;
8290
8291                 /* The parameter and argument roles have to be switched here 
8292                    in order to handle default arguments properly.  For example, 
8293                    template<template <class> class TT> void f(TT<int>) 
8294                    should be able to accept vector<int> which comes from 
8295                    template <class T, class Allocator = allocator> 
8296                    class vector.  */
8297
8298                 if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
8299                     == error_mark_node)
8300                   return 1;
8301           
8302                 /* Deduce arguments T, i from TT<T> or TT<i>.  
8303                    We check each element of PARMVEC and ARGVEC individually
8304                    rather than the whole TREE_VEC since they can have
8305                    different number of elements.  */
8306
8307                 for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
8308                   {
8309                     tree t = TREE_VEC_ELT (parmvec, i);
8310
8311                     if (unify (tparms, targs, t, 
8312                                TREE_VEC_ELT (argvec, i), 
8313                                UNIFY_ALLOW_NONE))
8314                       return 1;
8315                   }
8316               }
8317               arg = CLASSTYPE_TI_TEMPLATE (arg);
8318             }
8319         }
8320       else
8321         {
8322           /* If PARM is `const T' and ARG is only `int', we don't have
8323              a match unless we are allowing additional qualification.
8324              If ARG is `const int' and PARM is just `T' that's OK;
8325              that binds `const int' to `T'.  */
8326           if (!check_cv_quals_for_unify (strict | UNIFY_ALLOW_LESS_CV_QUAL, 
8327                                          arg, parm))
8328             return 1;
8329
8330           /* Consider the case where ARG is `const volatile int' and
8331              PARM is `const T'.  Then, T should be `volatile int'.  */
8332           arg = 
8333             cp_build_qualified_type_real (arg,
8334                                           CP_TYPE_QUALS (arg) 
8335                                           & ~CP_TYPE_QUALS (parm),
8336                                           /*complain=*/0);
8337           if (arg == error_mark_node)
8338             return 1;
8339         }
8340
8341       /* Simple cases: Value already set, does match or doesn't.  */
8342       if (targ != NULL_TREE && same_type_p (targ, arg))
8343         return 0;
8344       else if (targ)
8345         return 1;
8346
8347       /* Make sure that ARG is not a variable-sized array.  (Note that
8348          were talking about variable-sized arrays (like `int[n]'),
8349          rather than arrays of unknown size (like `int[]').)  We'll
8350          get very confused by such a type since the bound of the array
8351          will not be computable in an instantiation.  Besides, such
8352          types are not allowed in ISO C++, so we can do as we please
8353          here.  */
8354       if (TREE_CODE (arg) == ARRAY_TYPE 
8355           && !uses_template_parms (arg)
8356           && (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (arg)))
8357               != INTEGER_CST))
8358         return 1;
8359
8360       TREE_VEC_ELT (targs, idx) = arg;
8361       return 0;
8362
8363     case TEMPLATE_PARM_INDEX:
8364       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
8365
8366       if (TEMPLATE_PARM_LEVEL (parm) 
8367           != template_decl_level (tparm))
8368         /* The PARM is not one we're trying to unify.  Just check
8369            to see if it matches ARG.  */
8370         return (TREE_CODE (arg) == TREE_CODE (parm)
8371                 && cp_tree_equal (parm, arg) > 0) ? 0 : 1;
8372
8373       idx = TEMPLATE_PARM_IDX (parm);
8374       targ = TREE_VEC_ELT (targs, idx);
8375
8376       if (targ)
8377         {
8378           int i = (cp_tree_equal (targ, arg) > 0);
8379           if (i == 1)
8380             return 0;
8381           else if (i == 0)
8382             return 1;
8383           else
8384             my_friendly_abort (42);
8385         }
8386
8387       /* [temp.deduct.type] If, in the declaration of a function template
8388          with a non-type template-parameter, the non-type
8389          template-parameter is used in an expression in the function
8390          parameter-list and, if the corresponding template-argument is
8391          deduced, the template-argument type shall match the type of the
8392          template-parameter exactly, except that a template-argument
8393          deduced from an array bound may be of any integral type.  */
8394       if (same_type_p (TREE_TYPE (arg), TREE_TYPE (parm)))
8395         /* OK */;
8396       else if ((strict & UNIFY_ALLOW_INTEGER)
8397                && (TREE_CODE (TREE_TYPE (parm)) == INTEGER_TYPE
8398                    || TREE_CODE (TREE_TYPE (parm)) == BOOLEAN_TYPE))
8399         /* OK */;
8400       else
8401         return 1;
8402
8403       TREE_VEC_ELT (targs, idx) = arg;
8404       return 0;
8405
8406     case POINTER_TYPE:
8407       {
8408         int sub_strict;
8409
8410         if (TREE_CODE (arg) != POINTER_TYPE)
8411           return 1;
8412         
8413         /* [temp.deduct.call]
8414
8415            A can be another pointer or pointer to member type that can
8416            be converted to the deduced A via a qualification
8417            conversion (_conv.qual_).
8418
8419            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
8420            This will allow for additional cv-qualification of the
8421            pointed-to types if appropriate.  In general, this is a bit
8422            too generous; we are only supposed to allow qualification
8423            conversions and this method will allow an ARG of char** and
8424            a deduced ARG of const char**.  However, overload
8425            resolution will subsequently invalidate the candidate, so
8426            this is probably OK.  */
8427         sub_strict = strict;
8428         
8429         if (TREE_CODE (TREE_TYPE (arg)) != RECORD_TYPE)
8430           /* The derived-to-base conversion only persists through one
8431              level of pointers.  */
8432           sub_strict &= ~UNIFY_ALLOW_DERIVED;
8433
8434         return unify (tparms, targs, TREE_TYPE (parm), 
8435                       TREE_TYPE (arg), sub_strict);
8436       }
8437
8438     case REFERENCE_TYPE:
8439       if (TREE_CODE (arg) != REFERENCE_TYPE)
8440         return 1;
8441       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
8442                     UNIFY_ALLOW_NONE);
8443
8444     case ARRAY_TYPE:
8445       if (TREE_CODE (arg) != ARRAY_TYPE)
8446         return 1;
8447       if ((TYPE_DOMAIN (parm) == NULL_TREE)
8448           != (TYPE_DOMAIN (arg) == NULL_TREE))
8449         return 1;
8450       if (TYPE_DOMAIN (parm) != NULL_TREE
8451           && unify (tparms, targs, TYPE_DOMAIN (parm),
8452                     TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
8453         return 1;
8454       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
8455                     UNIFY_ALLOW_NONE);
8456
8457     case REAL_TYPE:
8458     case COMPLEX_TYPE:
8459     case INTEGER_TYPE:
8460     case BOOLEAN_TYPE:
8461     case VOID_TYPE:
8462       if (TREE_CODE (arg) != TREE_CODE (parm))
8463         return 1;
8464
8465       if (TREE_CODE (parm) == INTEGER_TYPE
8466           && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
8467         {
8468           if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
8469               && unify (tparms, targs, TYPE_MIN_VALUE (parm),
8470                         TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
8471             return 1;
8472           if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
8473               && unify (tparms, targs, TYPE_MAX_VALUE (parm),
8474                         TYPE_MAX_VALUE (arg), UNIFY_ALLOW_INTEGER))
8475             return 1;
8476         }
8477       /* We use the TYPE_MAIN_VARIANT since we have already
8478          checked cv-qualification at the top of the
8479          function.  */
8480       else if (!same_type_p (TYPE_MAIN_VARIANT (arg),
8481                              TYPE_MAIN_VARIANT (parm)))
8482         return 1;
8483
8484       /* As far as unification is concerned, this wins.  Later checks
8485          will invalidate it if necessary.  */
8486       return 0;
8487
8488       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
8489       /* Type INTEGER_CST can come from ordinary constant template args.  */
8490     case INTEGER_CST:
8491       while (TREE_CODE (arg) == NOP_EXPR)
8492         arg = TREE_OPERAND (arg, 0);
8493
8494       if (TREE_CODE (arg) != INTEGER_CST)
8495         return 1;
8496       return !tree_int_cst_equal (parm, arg);
8497
8498     case TREE_VEC:
8499       {
8500         int i;
8501         if (TREE_CODE (arg) != TREE_VEC)
8502           return 1;
8503         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
8504           return 1;
8505         for (i = TREE_VEC_LENGTH (parm) - 1; i >= 0; i--)
8506           if (unify (tparms, targs,
8507                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
8508                      UNIFY_ALLOW_NONE))
8509             return 1;
8510         return 0;
8511       }
8512
8513     case RECORD_TYPE:
8514     case UNION_TYPE:
8515       if (TREE_CODE (arg) != TREE_CODE (parm))
8516         return 1;
8517   
8518       if (TYPE_PTRMEMFUNC_P (parm))
8519         {
8520           if (!TYPE_PTRMEMFUNC_P (arg))
8521             return 1;
8522
8523           return unify (tparms, targs, 
8524                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
8525                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
8526                         strict);
8527         }
8528
8529       if (CLASSTYPE_TEMPLATE_INFO (parm))
8530         {
8531           tree t = NULL_TREE;
8532
8533           if (strict & UNIFY_ALLOW_DERIVED)
8534             {
8535               /* First, we try to unify the PARM and ARG directly.  */
8536               t = try_class_unification (tparms, targs,
8537                                          parm, arg);
8538
8539               if (!t)
8540                 {
8541                   /* Fallback to the special case allowed in
8542                      [temp.deduct.call]:
8543                      
8544                        If P is a class, and P has the form
8545                        template-id, then A can be a derived class of
8546                        the deduced A.  Likewise, if P is a pointer to
8547                        a class of the form template-id, A can be a
8548                        pointer to a derived class pointed to by the
8549                        deduced A.  */
8550                   t = get_template_base (tparms, targs,
8551                                          parm, arg);
8552
8553                   if (! t || t == error_mark_node)
8554                     return 1;
8555                 }
8556             }
8557           else if (CLASSTYPE_TEMPLATE_INFO (arg) 
8558                    && (CLASSTYPE_TI_TEMPLATE (parm) 
8559                        == CLASSTYPE_TI_TEMPLATE (arg)))
8560             /* Perhaps PARM is something like S<U> and ARG is S<int>.
8561                Then, we should unify `int' and `U'.  */
8562             t = arg;
8563           else
8564             /* There's no chance of unication succeeding.  */
8565             return 1;
8566
8567           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
8568                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
8569         }
8570       else if (!same_type_p (TYPE_MAIN_VARIANT (parm),
8571                              TYPE_MAIN_VARIANT (arg)))
8572         return 1;
8573       return 0;
8574
8575     case METHOD_TYPE:
8576     case FUNCTION_TYPE:
8577       if (TREE_CODE (arg) != TREE_CODE (parm))
8578         return 1;
8579
8580       if (unify (tparms, targs, TREE_TYPE (parm),
8581                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
8582         return 1;
8583       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
8584                                     TYPE_ARG_TYPES (arg), 1, 
8585                                     DEDUCE_EXACT, 0);
8586
8587     case OFFSET_TYPE:
8588       if (TREE_CODE (arg) != OFFSET_TYPE)
8589         return 1;
8590       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
8591                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
8592         return 1;
8593       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
8594                     strict);
8595
8596     case CONST_DECL:
8597       if (arg != decl_constant_value (parm)) 
8598         return 1;
8599       return 0;
8600
8601     case TEMPLATE_DECL:
8602       /* Matched cases are handled by the ARG == PARM test above.  */
8603       return 1;
8604
8605     case MINUS_EXPR:
8606       if (TREE_CODE (TREE_OPERAND (parm, 1)) == INTEGER_CST)
8607         {
8608           /* We handle this case specially, since it comes up with
8609              arrays.  In particular, something like:
8610
8611              template <int N> void f(int (&x)[N]);
8612
8613              Here, we are trying to unify the range type, which
8614              looks like [0 ... (N - 1)].  */
8615           tree t, t1, t2;
8616           t1 = TREE_OPERAND (parm, 0);
8617           t2 = TREE_OPERAND (parm, 1);
8618
8619           t = fold (build (PLUS_EXPR, integer_type_node, arg, t2));
8620
8621           return unify (tparms, targs, t1, t, strict);
8622         }
8623       /* else fall through */
8624
8625     default:
8626       if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
8627         /* We're looking at an expression.  This can happen with
8628            something like: 
8629            
8630              template <int I>
8631              void foo(S<I>, S<I + 2>);
8632
8633            This is a "nondeduced context":
8634
8635              [deduct.type]
8636            
8637              The nondeduced contexts are:
8638
8639              --A type that is a template-id in which one or more of
8640                the template-arguments is an expression that references
8641                a template-parameter.  
8642
8643            In these cases, we assume deduction succeeded, but don't
8644            actually infer any unifications.  */
8645         return 0;
8646       else
8647         sorry ("use of `%s' in template type unification",
8648                tree_code_name [(int) TREE_CODE (parm)]);
8649
8650       return 1;
8651     }
8652 }
8653 \f
8654 /* Called if RESULT is explicitly instantiated, or is a member of an
8655    explicitly instantiated class, or if using -frepo and the
8656    instantiation of RESULT has been assigned to this file.  */
8657
8658 void
8659 mark_decl_instantiated (result, extern_p)
8660      tree result;
8661      int extern_p;
8662 {
8663   if (TREE_CODE (result) != FUNCTION_DECL)
8664     /* The TREE_PUBLIC flag for function declarations will have been
8665        set correctly by tsubst.  */
8666     TREE_PUBLIC (result) = 1;
8667
8668   if (! extern_p)
8669     {
8670       DECL_INTERFACE_KNOWN (result) = 1;
8671       DECL_NOT_REALLY_EXTERN (result) = 1;
8672
8673       /* Always make artificials weak.  */
8674       if (DECL_ARTIFICIAL (result) && flag_weak)
8675         comdat_linkage (result);
8676       /* For WIN32 we also want to put explicit instantiations in
8677          linkonce sections.  */
8678       else if (TREE_PUBLIC (result))
8679         maybe_make_one_only (result);
8680     }
8681   else if (TREE_CODE (result) == FUNCTION_DECL)
8682     defer_fn (result);
8683 }
8684
8685 /* Given two function templates PAT1 and PAT2, and explicit template
8686    arguments EXPLICIT_ARGS return:
8687
8688    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
8689    -1 if PAT2 is more specialized than PAT1.
8690    0 if neither is more specialized.  */
8691    
8692 int
8693 more_specialized (pat1, pat2, explicit_args)
8694      tree pat1, pat2, explicit_args;
8695 {
8696   tree targs;
8697   int winner = 0;
8698
8699   targs
8700     = get_bindings_overload (pat1, DECL_TEMPLATE_RESULT (pat2), explicit_args);
8701   if (targs)
8702     --winner;
8703
8704   targs
8705     = get_bindings_overload (pat2, DECL_TEMPLATE_RESULT (pat1), explicit_args);
8706   if (targs)
8707     ++winner;
8708
8709   return winner;
8710 }
8711
8712 /* Given two class template specialization list nodes PAT1 and PAT2, return:
8713
8714    1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
8715    -1 if PAT2 is more specialized than PAT1.
8716    0 if neither is more specialized.  */
8717    
8718 int
8719 more_specialized_class (pat1, pat2)
8720      tree pat1, pat2;
8721 {
8722   tree targs;
8723   int winner = 0;
8724
8725   targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
8726                               TREE_PURPOSE (pat2));
8727   if (targs)
8728     --winner;
8729
8730   targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
8731                               TREE_PURPOSE (pat1));
8732   if (targs)
8733     ++winner;
8734
8735   return winner;
8736 }
8737
8738 /* Return the template arguments that will produce the function signature
8739    DECL from the function template FN, with the explicit template
8740    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is 1, the return type must
8741    also match.  Return NULL_TREE if no satisfactory arguments could be
8742    found.  */
8743
8744 static tree
8745 get_bindings_real (fn, decl, explicit_args, check_rettype)
8746      tree fn, decl, explicit_args;
8747      int check_rettype;
8748 {
8749   int ntparms = DECL_NTPARMS (fn);
8750   tree targs = make_tree_vec (ntparms);
8751   tree decl_type;
8752   tree decl_arg_types;
8753   int i;
8754
8755   /* Substitute the explicit template arguments into the type of DECL.
8756      The call to fn_type_unification will handle substitution into the
8757      FN.  */
8758   decl_type = TREE_TYPE (decl);
8759   if (explicit_args && uses_template_parms (decl_type))
8760     {
8761       tree tmpl;
8762       tree converted_args;
8763
8764       if (DECL_TEMPLATE_INFO (decl))
8765         tmpl = DECL_TI_TEMPLATE (decl);
8766       else
8767         /* We can get here for some illegal specializations.  */
8768         return NULL_TREE;
8769
8770       converted_args
8771         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
8772                                   explicit_args, NULL_TREE,
8773                                   /*complain=*/0, 
8774                                   /*require_all_arguments=*/0));
8775       if (converted_args == error_mark_node)
8776         return NULL_TREE;
8777       
8778       decl_type = tsubst (decl_type, converted_args, /*complain=*/0, 
8779                           NULL_TREE); 
8780       if (decl_type == error_mark_node)
8781         return NULL_TREE;
8782     }
8783
8784   /* If FN is a static member function, adjust the type of DECL
8785      appropriately.  */
8786   decl_arg_types = TYPE_ARG_TYPES (decl_type);
8787   if (DECL_STATIC_FUNCTION_P (fn) 
8788       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
8789     decl_arg_types = TREE_CHAIN (decl_arg_types);
8790
8791   i = fn_type_unification (fn, explicit_args, targs, 
8792                            decl_arg_types,
8793                            (check_rettype || DECL_CONV_FN_P (fn)
8794                             ? TREE_TYPE (decl_type) : NULL_TREE),
8795                            DEDUCE_EXACT);
8796
8797   if (i != 0)
8798     return NULL_TREE;
8799
8800   return targs;
8801 }
8802
8803 /* For most uses, we want to check the return type.  */
8804
8805 tree 
8806 get_bindings (fn, decl, explicit_args)
8807      tree fn, decl, explicit_args;
8808 {
8809   return get_bindings_real (fn, decl, explicit_args, 1);
8810 }
8811
8812 /* But for more_specialized, we only care about the parameter types.  */
8813
8814 static tree
8815 get_bindings_overload (fn, decl, explicit_args)
8816      tree fn, decl, explicit_args;
8817 {
8818   return get_bindings_real (fn, decl, explicit_args, 0);
8819 }
8820
8821 /* Return the innermost template arguments that, when applied to a
8822    template specialization whose innermost template parameters are
8823    TPARMS, and whose specialization arguments are ARGS, yield the
8824    ARGS.  
8825
8826    For example, suppose we have:
8827
8828      template <class T, class U> struct S {};
8829      template <class T> struct S<T*, int> {};
8830
8831    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
8832    {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
8833    int}.  The resulting vector will be {double}, indicating that `T'
8834    is bound to `double'.  */
8835
8836 static tree
8837 get_class_bindings (tparms, parms, args)
8838      tree tparms, parms, args;
8839 {
8840   int i, ntparms = TREE_VEC_LENGTH (tparms);
8841   tree vec = make_tree_vec (ntparms);
8842
8843   args = innermost_args (args);
8844
8845   if (unify (tparms, vec, parms, args, UNIFY_ALLOW_NONE))
8846     return NULL_TREE;
8847
8848   for (i =  0; i < ntparms; ++i)
8849     if (! TREE_VEC_ELT (vec, i))
8850       return NULL_TREE;
8851
8852   return vec;
8853 }
8854
8855 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
8856    Pick the most specialized template, and return the corresponding
8857    instantiation, or if there is no corresponding instantiation, the
8858    template itself.  EXPLICIT_ARGS is any template arguments explicity
8859    mentioned in a template-id.  If there is no most specialized
8860    tempalte, error_mark_node is returned.  If there are no templates
8861    at all, NULL_TREE is returned.  */
8862
8863 tree
8864 most_specialized_instantiation (instantiations, explicit_args)
8865      tree instantiations;
8866      tree explicit_args;
8867 {
8868   tree fn, champ;
8869   int fate;
8870
8871   if (!instantiations)
8872     return NULL_TREE;
8873
8874   champ = instantiations;
8875   for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
8876     {
8877       fate = more_specialized (TREE_VALUE (champ), 
8878                                TREE_VALUE (fn), explicit_args);
8879       if (fate == 1)
8880         ;
8881       else
8882         {
8883           if (fate == 0)
8884             {
8885               fn = TREE_CHAIN (fn);
8886               if (! fn)
8887                 return error_mark_node;
8888             }
8889           champ = fn;
8890         }
8891     }
8892
8893   for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
8894     {
8895       fate = more_specialized (TREE_VALUE (champ), 
8896                                TREE_VALUE (fn), explicit_args);
8897       if (fate != 1)
8898         return error_mark_node;
8899     }
8900
8901   return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
8902 }
8903
8904 /* Return the most specialized of the list of templates in FNS that can
8905    produce an instantiation matching DECL, given the explicit template
8906    arguments EXPLICIT_ARGS.  */
8907
8908 static tree
8909 most_specialized (fns, decl, explicit_args)
8910      tree fns, decl, explicit_args;
8911 {
8912   tree candidates = NULL_TREE;
8913   tree fn, args;
8914
8915   for (fn = fns; fn; fn = TREE_CHAIN (fn))
8916     {
8917       tree candidate = TREE_VALUE (fn);
8918
8919       args = get_bindings (candidate, decl, explicit_args);
8920       if (args)
8921         candidates = tree_cons (NULL_TREE, candidate, candidates);
8922     }
8923
8924   return most_specialized_instantiation (candidates, explicit_args);
8925 }
8926
8927 /* If DECL is a specialization of some template, return the most
8928    general such template.  For example, given:
8929
8930      template <class T> struct S { template <class U> void f(U); };
8931
8932    if TMPL is `template <class U> void S<int>::f(U)' this will return
8933    the full template.  This function will not trace past partial
8934    specializations, however.  For example, given in addition:
8935
8936      template <class T> struct S<T*> { template <class U> void f(U); };
8937
8938    if TMPL is `template <class U> void S<int*>::f(U)' this will return
8939    `template <class T> template <class U> S<T*>::f(U)'.  */
8940
8941 tree
8942 most_general_template (decl)
8943      tree decl;
8944 {
8945   while (DECL_TEMPLATE_INFO (decl)
8946          && !(TREE_CODE (decl) == TEMPLATE_DECL
8947               && DECL_TEMPLATE_SPECIALIZATION (decl))
8948          /* The DECL_TI_TEMPLATE can be a LOOKUP_EXPR or
8949             IDENTIFIER_NODE in some cases.  (See cp-tree.h for
8950             details.)  */
8951          && TREE_CODE (DECL_TI_TEMPLATE (decl)) == TEMPLATE_DECL)
8952     decl = DECL_TI_TEMPLATE (decl);
8953
8954   return decl;
8955 }
8956
8957 /* Return the most specialized of the class template specializations
8958    of TMPL which can produce an instantiation matching ARGS, or
8959    error_mark_node if the choice is ambiguous.  */
8960
8961 static tree
8962 most_specialized_class (tmpl, args)
8963      tree tmpl;
8964      tree args;
8965 {
8966   tree list = NULL_TREE;
8967   tree t;
8968   tree champ;
8969   int fate;
8970
8971   tmpl = most_general_template (tmpl);
8972   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
8973     {
8974       tree spec_args 
8975         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
8976       if (spec_args)
8977         {
8978           list = decl_tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
8979           TREE_TYPE (list) = TREE_TYPE (t);
8980         }
8981     }
8982
8983   if (! list)
8984     return NULL_TREE;
8985
8986   t = list;
8987   champ = t;
8988   t = TREE_CHAIN (t);
8989   for (; t; t = TREE_CHAIN (t))
8990     {
8991       fate = more_specialized_class (champ, t);
8992       if (fate == 1)
8993         ;
8994       else
8995         {
8996           if (fate == 0)
8997             {
8998               t = TREE_CHAIN (t);
8999               if (! t)
9000                 return error_mark_node;
9001             }
9002           champ = t;
9003         }
9004     }
9005
9006   for (t = list; t && t != champ; t = TREE_CHAIN (t))
9007     {
9008       fate = more_specialized_class (champ, t);
9009       if (fate != 1)
9010         return error_mark_node;
9011     }
9012
9013   return champ;
9014 }
9015
9016 /* called from the parser.  */
9017
9018 void
9019 do_decl_instantiation (declspecs, declarator, storage)
9020      tree declspecs, declarator, storage;
9021 {
9022   tree decl = grokdeclarator (declarator, declspecs, NORMAL, 0, NULL_TREE);
9023   tree result = NULL_TREE;
9024   int extern_p = 0;
9025
9026   if (!decl)
9027     /* An error ocurred, for which grokdeclarator has already issued
9028        an appropriate message.  */
9029     return;
9030   else if (! DECL_LANG_SPECIFIC (decl))
9031     {
9032       cp_error ("explicit instantiation of non-template `%#D'", decl);
9033       return;
9034     }
9035   else if (TREE_CODE (decl) == VAR_DECL)
9036     {
9037       /* There is an asymmetry here in the way VAR_DECLs and
9038          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
9039          the latter, the DECL we get back will be marked as a
9040          template instantiation, and the appropriate
9041          DECL_TEMPLATE_INFO will be set up.  This does not happen for
9042          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
9043          should handle VAR_DECLs as it currently handles
9044          FUNCTION_DECLs.  */
9045       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, 0);
9046       if (result && TREE_CODE (result) != VAR_DECL)
9047         {
9048           cp_error ("no matching template for `%D' found", result);
9049           return;
9050         }
9051     }
9052   else if (TREE_CODE (decl) != FUNCTION_DECL)
9053     {
9054       cp_error ("explicit instantiation of `%#D'", decl);
9055       return;
9056     }
9057   else
9058     result = decl;
9059
9060   /* Check for various error cases.  Note that if the explicit
9061      instantiation is legal the RESULT will currently be marked as an
9062      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
9063      until we get here.  */
9064
9065   if (DECL_TEMPLATE_SPECIALIZATION (result))
9066     {
9067       /* [temp.spec]
9068
9069          No program shall both explicitly instantiate and explicitly
9070          specialize a template.  */
9071       cp_pedwarn ("explicit instantiation of `%#D' after", result);
9072       cp_pedwarn_at ("explicit specialization here", result);
9073       return;
9074     }
9075   else if (DECL_EXPLICIT_INSTANTIATION (result))
9076     {
9077       /* [temp.spec]
9078
9079          No program shall explicitly instantiate any template more
9080          than once.  
9081
9082          We check DECL_INTERFACE_KNOWN so as not to complain when the first
9083          instantiation was `extern' and the second is not, and EXTERN_P for
9084          the opposite case.  If -frepo, chances are we already got marked
9085          as an explicit instantion because of the repo file.  */
9086       if (DECL_INTERFACE_KNOWN (result) && !extern_p && !flag_use_repository)
9087         cp_pedwarn ("duplicate explicit instantiation of `%#D'", result);
9088
9089       /* If we've already instantiated the template, just return now.  */
9090       if (DECL_INTERFACE_KNOWN (result))
9091         return;
9092     }
9093   else if (!DECL_IMPLICIT_INSTANTIATION (result))
9094     {
9095       cp_error ("no matching template for `%D' found", result);
9096       return;
9097     }
9098   else if (!DECL_TEMPLATE_INFO (result))
9099     {
9100       cp_pedwarn ("explicit instantiation of non-template `%#D'", result);
9101       return;
9102     }
9103
9104   if (flag_external_templates)
9105     return;
9106
9107   if (storage == NULL_TREE)
9108     ;
9109   else if (storage == ridpointers[(int) RID_EXTERN])
9110     {
9111       if (pedantic)
9112         cp_pedwarn ("ISO C++ forbids the use of `extern' on explicit instantiations");
9113       extern_p = 1;
9114     }
9115   else
9116     cp_error ("storage class `%D' applied to template instantiation",
9117               storage);
9118
9119   SET_DECL_EXPLICIT_INSTANTIATION (result);
9120   mark_decl_instantiated (result, extern_p);
9121   repo_template_instantiated (result, extern_p);
9122   if (! extern_p)
9123     instantiate_decl (result, /*defer_ok=*/1);
9124 }
9125
9126 void
9127 mark_class_instantiated (t, extern_p)
9128      tree t;
9129      int extern_p;
9130 {
9131   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
9132   SET_CLASSTYPE_INTERFACE_KNOWN (t);
9133   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
9134   CLASSTYPE_VTABLE_NEEDS_WRITING (t) = ! extern_p;
9135   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
9136   if (! extern_p)
9137     {
9138       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
9139       rest_of_type_compilation (t, 1);
9140     }
9141 }     
9142
9143 void
9144 do_type_instantiation (t, storage)
9145      tree t, storage;
9146 {
9147   int extern_p = 0;
9148   int nomem_p = 0;
9149   int static_p = 0;
9150
9151   if (TREE_CODE (t) == TYPE_DECL)
9152     t = TREE_TYPE (t);
9153
9154   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
9155     {
9156       cp_error ("explicit instantiation of non-template type `%T'", t);
9157       return;
9158     }
9159
9160   complete_type (t);
9161
9162   /* With -fexternal-templates, explicit instantiations are treated the same
9163      as implicit ones.  */
9164   if (flag_external_templates)
9165     return;
9166
9167   if (!COMPLETE_TYPE_P (t))
9168     {
9169       cp_error ("explicit instantiation of `%#T' before definition of template",
9170                 t);
9171       return;
9172     }
9173
9174   if (storage != NULL_TREE)
9175     {
9176       if (pedantic)
9177         cp_pedwarn("ISO C++ forbids the use of `%s' on explicit instantiations", 
9178                    IDENTIFIER_POINTER (storage));
9179
9180       if (storage == ridpointers[(int) RID_INLINE])
9181         nomem_p = 1;
9182       else if (storage == ridpointers[(int) RID_EXTERN])
9183         extern_p = 1;
9184       else if (storage == ridpointers[(int) RID_STATIC])
9185         static_p = 1;
9186       else
9187         {
9188           cp_error ("storage class `%D' applied to template instantiation",
9189                     storage);
9190           extern_p = 0;
9191         }
9192     }
9193
9194   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
9195     {
9196       /* [temp.spec]
9197
9198          No program shall both explicitly instantiate and explicitly
9199          specialize a template.  */
9200       cp_error ("explicit instantiation of `%#T' after", t);
9201       cp_error_at ("explicit specialization here", t);
9202       return;
9203     }
9204   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
9205     {
9206       /* [temp.spec]
9207
9208          No program shall explicitly instantiate any template more
9209          than once.  
9210
9211          If CLASSTYPE_INTERFACE_ONLY, then the first explicit instantiation
9212          was `extern'.  If EXTERN_P then the second is.  If -frepo, chances
9213          are we already got marked as an explicit instantion because of the
9214          repo file.  All these cases are OK.  */
9215       if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p && !flag_use_repository)
9216         cp_pedwarn ("duplicate explicit instantiation of `%#T'", t);
9217       
9218       /* If we've already instantiated the template, just return now.  */
9219       if (!CLASSTYPE_INTERFACE_ONLY (t))
9220         return;
9221     }
9222
9223   mark_class_instantiated (t, extern_p);
9224   repo_template_instantiated (t, extern_p);
9225
9226   if (nomem_p)
9227     return;
9228
9229   {
9230     tree tmp;
9231
9232     /* In contrast to implicit instantiation, where only the
9233        declarations, and not the definitions, of members are
9234        instantiated, we have here:
9235
9236          [temp.explicit]
9237
9238          The explicit instantiation of a class template specialization
9239          implies the instantiation of all of its members not
9240          previously explicitly specialized in the translation unit
9241          containing the explicit instantiation.  
9242
9243        Of course, we can't instantiate member template classes, since
9244        we don't have any arguments for them.  Note that the standard
9245        is unclear on whether the instatiation of the members are
9246        *explicit* instantiations or not.  We choose to be generous,
9247        and not set DECL_EXPLICIT_INSTANTIATION.  Therefore, we allow
9248        the explicit instantiation of a class where some of the members
9249        have no definition in the current translation unit.  */
9250
9251     if (! static_p)
9252       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
9253         if (TREE_CODE (tmp) == FUNCTION_DECL
9254             && DECL_TEMPLATE_INSTANTIATION (tmp))
9255           {
9256             mark_decl_instantiated (tmp, extern_p);
9257             repo_template_instantiated (tmp, extern_p);
9258             if (! extern_p)
9259               instantiate_decl (tmp, /*defer_ok=*/1);
9260           }
9261
9262     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
9263       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
9264         {
9265           mark_decl_instantiated (tmp, extern_p);
9266           repo_template_instantiated (tmp, extern_p);
9267           if (! extern_p)
9268             instantiate_decl (tmp, /*defer_ok=*/1);
9269         }
9270
9271     for (tmp = CLASSTYPE_TAGS (t); tmp; tmp = TREE_CHAIN (tmp))
9272       if (IS_AGGR_TYPE (TREE_VALUE (tmp))
9273           && !uses_template_parms (CLASSTYPE_TI_ARGS (TREE_VALUE (tmp))))
9274         do_type_instantiation (TYPE_MAIN_DECL (TREE_VALUE (tmp)), storage);
9275   }
9276 }
9277
9278 /* Given a function DECL, which is a specialization of TMPL, modify
9279    DECL to be a re-instantiation of TMPL with the same template
9280    arguments.  TMPL should be the template into which tsubst'ing
9281    should occur for DECL, not the most general template.
9282
9283    One reason for doing this is a scenario like this:
9284
9285      template <class T>
9286      void f(const T&, int i);
9287
9288      void g() { f(3, 7); }
9289
9290      template <class T>
9291      void f(const T& t, const int i) { }
9292
9293    Note that when the template is first instantiated, with
9294    instantiate_template, the resulting DECL will have no name for the
9295    first parameter, and the wrong type for the second.  So, when we go
9296    to instantiate the DECL, we regenerate it.  */
9297
9298 static void
9299 regenerate_decl_from_template (decl, tmpl)
9300      tree decl;
9301      tree tmpl;
9302 {
9303   tree args;
9304   tree code_pattern;
9305   tree new_decl;
9306   tree gen_tmpl;
9307   int unregistered;
9308
9309   args = DECL_TI_ARGS (decl);
9310   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
9311
9312   /* Unregister the specialization so that when we tsubst we will not
9313      just return DECL.  We don't have to unregister DECL from TMPL
9314      because if would only be registered there if it were a partial
9315      instantiation of a specialization, which it isn't: it's a full
9316      instantiation.  */
9317   gen_tmpl = most_general_template (tmpl);
9318   unregistered = unregister_specialization (decl, gen_tmpl);
9319
9320   /* If the DECL was not unregistered then something peculiar is
9321      happening: we created a specialization but did not call
9322      register_specialization for it.  */
9323   my_friendly_assert (unregistered, 0);
9324
9325   if (TREE_CODE (decl) == VAR_DECL)
9326     /* Make sure that we can see identifiers, and compute access
9327        correctly, for the class members used in the declaration of
9328        this static variable.  */
9329     pushclass (DECL_CONTEXT (decl), 2);
9330
9331   /* Do the substitution to get the new declaration.  */
9332   new_decl = tsubst (code_pattern, args, /*complain=*/1, NULL_TREE);
9333
9334   if (TREE_CODE (decl) == VAR_DECL)
9335     {
9336       /* Set up DECL_INITIAL, since tsubst doesn't.  */
9337       DECL_INITIAL (new_decl) = 
9338         tsubst_expr (DECL_INITIAL (code_pattern), args, 
9339                      /*complain=*/1, DECL_TI_TEMPLATE (decl));
9340       /* Pop the class context we pushed above.  */
9341       popclass ();
9342     }
9343   else if (TREE_CODE (decl) == FUNCTION_DECL)
9344     {
9345       /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
9346          new decl.  */ 
9347       DECL_INITIAL (new_decl) = error_mark_node;
9348       /* And don't complain about a duplicate definition.  */
9349       DECL_INITIAL (decl) = NULL_TREE;
9350     }
9351
9352   /* The immediate parent of the new template is still whatever it was
9353      before, even though tsubst sets DECL_TI_TEMPLATE up as the most
9354      general template.  We also reset the DECL_ASSEMBLER_NAME since
9355      tsubst always calculates the name as if the function in question
9356      were really a template instance, and sometimes, with friend
9357      functions, this is not so.  See tsubst_friend_function for
9358      details.  */
9359   DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
9360   DECL_ASSEMBLER_NAME (new_decl) = DECL_ASSEMBLER_NAME (decl);
9361   DECL_RTL (new_decl) = DECL_RTL (decl);
9362
9363   /* Call duplicate decls to merge the old and new declarations.  */
9364   duplicate_decls (new_decl, decl);
9365
9366   /* Now, re-register the specialization.  */
9367   register_specialization (decl, gen_tmpl, args);
9368 }
9369
9370 /* Produce the definition of D, a _DECL generated from a template.  If
9371    DEFER_OK is non-zero, then we don't have to actually do the
9372    instantiation now; we just have to do it sometime.  */
9373
9374 tree
9375 instantiate_decl (d, defer_ok)
9376      tree d;
9377      int defer_ok;
9378 {
9379   tree tmpl = DECL_TI_TEMPLATE (d);
9380   tree args = DECL_TI_ARGS (d);
9381   tree td;
9382   tree code_pattern;
9383   tree spec;
9384   tree gen_tmpl;
9385   int pattern_defined;
9386   int line = lineno;
9387   char *file = input_filename;
9388
9389   /* This function should only be used to instantiate templates for
9390      functions and static member variables.  */
9391   my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
9392                       || TREE_CODE (d) == VAR_DECL, 0);
9393
9394   if (DECL_TEMPLATE_INSTANTIATED (d))
9395     /* D has already been instantiated.  It might seem reasonable to
9396        check whether or not D is an explict instantiation, and, if so,
9397        stop here.  But when an explicit instantiation is deferred
9398        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
9399        is set, even though we still need to do the instantiation.  */
9400     return d;
9401
9402   /* If we already have a specialization of this declaration, then
9403      there's no reason to instantiate it.  Note that
9404      retrieve_specialization gives us both instantiations and
9405      specializations, so we must explicitly check
9406      DECL_TEMPLATE_SPECIALIZATION.  */
9407   gen_tmpl = most_general_template (tmpl);
9408   spec = retrieve_specialization (gen_tmpl, args);
9409   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
9410     return spec;
9411
9412   /* This needs to happen before any tsubsting.  */
9413   if (! push_tinst_level (d))
9414     return d;
9415
9416   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
9417      for the instantiation.  This is not always the most general
9418      template.  Consider, for example:
9419
9420         template <class T>
9421         struct S { template <class U> void f();
9422                    template <> void f<int>(); };
9423
9424      and an instantiation of S<double>::f<int>.  We want TD to be the
9425      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
9426   td = tmpl;
9427   for (td = tmpl;
9428        /* An instantiation cannot have a definition, so we need a
9429           more general template.  */
9430        DECL_TEMPLATE_INSTANTIATION (td)
9431          /* We must also deal with friend templates.  Given:
9432
9433               template <class T> struct S { 
9434                 template <class U> friend void f() {};
9435               };
9436          
9437             S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
9438             so far as the language is concerned, but that's still
9439             where we get the pattern for the instantiation from.  On
9440             ther hand, if the definition comes outside the class, say:
9441
9442               template <class T> struct S { 
9443                 template <class U> friend void f();
9444               };
9445               template <class U> friend void f() {}
9446
9447             we don't need to look any further.  That's what the check for
9448             DECL_INITIAL is for.  */
9449         || (TREE_CODE (d) == FUNCTION_DECL
9450             && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (td)
9451             && !DECL_INITIAL (DECL_TEMPLATE_RESULT (td)));
9452        )
9453     {
9454       /* The present template, TD, should not be a definition.  If it
9455          were a definition, we should be using it!  Note that we
9456          cannot restructure the loop to just keep going until we find
9457          a template with a definition, since that might go too far if
9458          a specialization was declared, but not defined.  */
9459       my_friendly_assert (!(TREE_CODE (d) == VAR_DECL
9460                             && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (td))), 
9461                           0); 
9462       
9463       /* Fetch the more general template.  */
9464       td = DECL_TI_TEMPLATE (td);
9465     }
9466
9467   code_pattern = DECL_TEMPLATE_RESULT (td);
9468
9469   if (TREE_CODE (d) == FUNCTION_DECL)
9470     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
9471   else
9472     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
9473
9474   push_to_top_level ();
9475   lineno = DECL_SOURCE_LINE (d);
9476   input_filename = DECL_SOURCE_FILE (d);
9477
9478   if (pattern_defined)
9479     {
9480       repo_template_used (d);
9481
9482       if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
9483         {
9484           if (flag_alt_external_templates)
9485             {
9486               if (interface_unknown)
9487                 warn_if_unknown_interface (d);
9488             }
9489           else if (DECL_INTERFACE_KNOWN (code_pattern))
9490             {
9491               DECL_INTERFACE_KNOWN (d) = 1;
9492               DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
9493             }
9494           else
9495             warn_if_unknown_interface (code_pattern);
9496         }
9497
9498       if (at_eof)
9499         import_export_decl (d);
9500     }
9501
9502   /* Reject all external templates except inline functions.  */
9503   if (DECL_INTERFACE_KNOWN (d)
9504       && ! DECL_NOT_REALLY_EXTERN (d)
9505       && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d)))
9506     goto out;
9507
9508   /* We need to set up DECL_INITIAL regardless of pattern_defined if
9509      the variable is a static const initialized in the class body.  */
9510   if (TREE_CODE (d) == VAR_DECL 
9511       && TREE_READONLY (d)
9512       && DECL_INITIAL (d) == NULL_TREE
9513       && DECL_INITIAL (code_pattern) != NULL_TREE)
9514     ;
9515   /* Defer all other templates, unless we have been explicitly
9516      forbidden from doing so.  We restore the source position here
9517      because it's used by add_pending_template.  */
9518   else if (! pattern_defined || defer_ok)
9519     {
9520       lineno = line;
9521       input_filename = file;
9522
9523       if (at_eof && !pattern_defined 
9524           && DECL_EXPLICIT_INSTANTIATION (d))
9525         /* [temp.explicit]
9526
9527            The definition of a non-exported function template, a
9528            non-exported member function template, or a non-exported
9529            member function or static data member of a class template
9530            shall be present in every translation unit in which it is
9531            explicitly instantiated.  */
9532         cp_error ("explicit instantiation of `%D' but no definition available",
9533                   d);
9534
9535       add_pending_template (d);
9536       goto out;
9537     }
9538
9539   /* We're now committed to instantiating this template.  Mark it as
9540      instantiated so that recursive calls to instantiate_decl do not
9541      try to instantiate it again.  */
9542   DECL_TEMPLATE_INSTANTIATED (d) = 1;
9543
9544   /* Regenerate the declaration in case the template has been modified
9545      by a subsequent redeclaration.  */
9546   regenerate_decl_from_template (d, td);
9547
9548   /* We already set the file and line above.  Reset them now in case
9549      they changed as a result of calling regenerate_decl_from_template.  */
9550   lineno = DECL_SOURCE_LINE (d);
9551   input_filename = DECL_SOURCE_FILE (d);
9552
9553   if (TREE_CODE (d) == VAR_DECL)
9554     {
9555       DECL_IN_AGGR_P (d) = 0;
9556       if (DECL_INTERFACE_KNOWN (d))
9557         DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
9558       else
9559         {
9560           DECL_EXTERNAL (d) = 1;
9561           DECL_NOT_REALLY_EXTERN (d) = 1;
9562         }
9563       cp_finish_decl (d, DECL_INITIAL (d), NULL_TREE, 0);
9564     }
9565   else if (TREE_CODE (d) == FUNCTION_DECL)
9566     {
9567       /* Set up context.  */
9568       start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED);
9569       store_parm_decls ();
9570
9571       /* We already set up __FUNCTION__, etc., so we don't want to do
9572          it again now.  */
9573       current_function_name_declared = 1;
9574
9575       /* Substitute into the body of the function.  */
9576       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
9577                    /*complain=*/1, tmpl);
9578
9579       /* Finish the function.  */
9580       expand_body (finish_function (0));
9581     }
9582
9583   /* We're not deferring instantiation any more.  */
9584   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
9585
9586 out:
9587   lineno = line;
9588   input_filename = file;
9589
9590   pop_from_top_level ();
9591   pop_tinst_level ();
9592
9593   return d;
9594 }
9595
9596 /* Run through the list of templates that we wish we could
9597    instantiate, and instantiate any we can.  */
9598
9599 int
9600 instantiate_pending_templates ()
9601 {
9602   tree *t;
9603   int instantiated_something = 0;
9604   int reconsider;
9605   
9606   do 
9607     {
9608       reconsider = 0;
9609
9610       t = &pending_templates;
9611       while (*t)
9612         {
9613           tree srcloc = TREE_PURPOSE (*t);
9614           tree instantiation = TREE_VALUE (*t);
9615
9616           input_filename = SRCLOC_FILE (srcloc);
9617           lineno = SRCLOC_LINE (srcloc);
9618
9619           if (TYPE_P (instantiation))
9620             {
9621               tree fn;
9622
9623               if (!COMPLETE_TYPE_P (instantiation))
9624                 {
9625                   instantiate_class_template (instantiation);
9626                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
9627                     for (fn = TYPE_METHODS (instantiation); 
9628                          fn;
9629                          fn = TREE_CHAIN (fn))
9630                       if (! DECL_ARTIFICIAL (fn))
9631                         instantiate_decl (fn, /*defer_ok=*/0);
9632                   if (COMPLETE_TYPE_P (instantiation))
9633                     {
9634                       instantiated_something = 1;
9635                       reconsider = 1;
9636                     }
9637                 }
9638
9639               if (COMPLETE_TYPE_P (instantiation))
9640                 /* If INSTANTIATION has been instantiated, then we don't
9641                    need to consider it again in the future.  */
9642                 *t = TREE_CHAIN (*t);
9643               else 
9644                 t = &TREE_CHAIN (*t);
9645             }
9646           else
9647             {
9648               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
9649                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
9650                 {
9651                   instantiation = instantiate_decl (instantiation,
9652                                                     /*defer_ok=*/0);
9653                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
9654                     {
9655                       instantiated_something = 1;
9656                       reconsider = 1;
9657                     }
9658                 }
9659
9660               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
9661                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
9662                 /* If INSTANTIATION has been instantiated, then we don't
9663                    need to consider it again in the future.  */
9664                 *t = TREE_CHAIN (*t);
9665               else 
9666                 t = &TREE_CHAIN (*t);
9667             }
9668         }
9669       template_tail = t;
9670
9671       /* Go through the things that are template instantiations if we are
9672          using guiding declarations.  */
9673       t = &maybe_templates;
9674       while (*t)
9675         {
9676           tree template;
9677           tree fn;
9678           tree args;
9679
9680           fn = TREE_VALUE (*t);
9681
9682           if (DECL_INITIAL (fn))
9683             /* If the FN is already defined, then it was either already
9684                instantiated or, even though guiding declarations were
9685                allowed, a non-template definition was provided.  */
9686             ;
9687           else
9688             {
9689               template = TREE_PURPOSE (*t);
9690               args = get_bindings (template, fn, NULL_TREE);
9691               fn = instantiate_template (template, args);
9692               instantiate_decl (fn, /*defer_ok=*/0);
9693               reconsider = 1;
9694             }
9695         
9696           /* Remove this entry from the chain.  */
9697           *t = TREE_CHAIN (*t);
9698         }
9699       maybe_template_tail = t;
9700     } 
9701   while (reconsider);
9702
9703   return instantiated_something;
9704 }
9705
9706 /* Substitute ARGVEC into T, which is a TREE_LIST.  In particular, it
9707    is an initializer list: the TREE_PURPOSEs are DECLs, and the
9708    TREE_VALUEs are initializer values.  Used by instantiate_decl.  */
9709
9710 static tree
9711 tsubst_expr_values (t, argvec)
9712      tree t, argvec;
9713 {
9714   tree first = NULL_TREE;
9715   tree *p = &first;
9716
9717   for (; t; t = TREE_CHAIN (t))
9718     {
9719       tree pur = tsubst_copy (TREE_PURPOSE (t), argvec,
9720                               /*complain=*/1, NULL_TREE);
9721       tree val = tsubst_expr (TREE_VALUE (t), argvec, /*complain=*/1, 
9722                               NULL_TREE);
9723       *p = build_tree_list (pur, val);
9724       p = &TREE_CHAIN (*p);
9725     }
9726   return first;
9727 }
9728
9729 /* D is an undefined function declaration in the presence of templates with
9730    the same name, listed in FNS.  If one of them can produce D as an
9731    instantiation, remember this so we can instantiate it at EOF if D has
9732    not been defined by that time.  */
9733
9734 void
9735 add_maybe_template (d, fns)
9736      tree d, fns;
9737 {
9738   tree t;
9739
9740   if (DECL_MAYBE_TEMPLATE (d))
9741     return;
9742
9743   t = most_specialized (fns, d, NULL_TREE);
9744   if (! t)
9745     return;
9746   if (t == error_mark_node)
9747     {
9748       cp_error ("ambiguous template instantiation for `%D'", d);
9749       return;
9750     }
9751
9752   *maybe_template_tail = tree_cons (t, d, NULL_TREE);
9753   maybe_template_tail = &TREE_CHAIN (*maybe_template_tail);
9754   DECL_MAYBE_TEMPLATE (d) = 1;
9755 }
9756
9757 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
9758
9759 static void
9760 set_current_access_from_decl (decl)
9761      tree decl;
9762 {
9763   if (TREE_PRIVATE (decl))
9764     current_access_specifier = access_private_node;
9765   else if (TREE_PROTECTED (decl))
9766     current_access_specifier = access_protected_node;
9767   else
9768     current_access_specifier = access_public_node;
9769 }
9770
9771 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
9772    is the instantiation (which should have been created with
9773    start_enum) and ARGS are the template arguments to use.  */
9774
9775 static void
9776 tsubst_enum (tag, newtag, args)
9777      tree tag;
9778      tree newtag;
9779      tree args;
9780 {
9781   tree e;
9782
9783   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
9784     {
9785       tree value;
9786       
9787       /* Note that in a template enum, the TREE_VALUE is the
9788          CONST_DECL, not the corresponding INTEGER_CST.  */
9789       value = tsubst_expr (DECL_INITIAL (TREE_VALUE (e)), 
9790                            args, /*complain=*/1,
9791                            NULL_TREE);
9792
9793       /* Give this enumeration constant the correct access.  */
9794       set_current_access_from_decl (TREE_VALUE (e));
9795
9796       /* Actually build the enumerator itself.  */
9797       build_enumerator (TREE_PURPOSE (e), value, newtag); 
9798     }
9799
9800   finish_enum (newtag);
9801 }
9802
9803 /* Set the DECL_ASSEMBLER_NAME for DECL, which is a FUNCTION_DECL that
9804    is either an instantiation or specialization of a template
9805    function.  */
9806
9807 static void
9808 set_mangled_name_for_template_decl (decl)
9809      tree decl;
9810 {
9811   tree saved_namespace;
9812   tree context = NULL_TREE;
9813   tree fn_type;
9814   tree ret_type;
9815   tree parm_types;
9816   tree tparms;
9817   tree targs;
9818   tree tmpl;
9819   int parm_depth;
9820
9821   my_friendly_assert (TREE_CODE (decl) == FUNCTION_DECL, 0);
9822   my_friendly_assert (DECL_TEMPLATE_INFO (decl) != NULL_TREE, 0);
9823
9824   /* The names of template functions must be mangled so as to indicate
9825      what template is being specialized with what template arguments.
9826      For example, each of the following three functions must get
9827      different mangled names:
9828
9829        void f(int);                  
9830        template <> void f<7>(int);
9831        template <> void f<8>(int);  */
9832
9833   targs = DECL_TI_ARGS (decl);
9834   if (uses_template_parms (targs))
9835     /* This DECL is for a partial instantiation.  There's no need to
9836        mangle the name of such an entity.  */
9837     return;
9838
9839   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
9840   tparms = DECL_TEMPLATE_PARMS (tmpl);
9841   parm_depth = TMPL_PARMS_DEPTH (tparms);
9842
9843   /* There should be as many levels of arguments as there are levels
9844      of parameters.  */
9845   my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
9846
9847   /* We now compute the PARMS and RET_TYPE to give to
9848      build_decl_overload_real.  The PARMS and RET_TYPE are the
9849      parameter and return types of the template, after all but the
9850      innermost template arguments have been substituted, not the
9851      parameter and return types of the function DECL.  For example,
9852      given:
9853
9854        template <class T> T f(T);
9855
9856      both PARMS and RET_TYPE should be `T' even if DECL is `int f(int)'.  
9857      A more subtle example is:
9858
9859        template <class T> struct S { template <class U> void f(T, U); }
9860
9861      Here, if DECL is `void S<int>::f(int, double)', PARMS should be
9862      {int, U}.  Thus, the args that we want to subsitute into the
9863      return and parameter type for the function are those in TARGS,
9864      with the innermost level omitted.  */
9865   fn_type = TREE_TYPE (tmpl);
9866   if (DECL_STATIC_FUNCTION_P (decl))
9867     context = DECL_CONTEXT (decl);
9868
9869   if (parm_depth == 1)
9870     /* No substitution is necessary.  */
9871     ;
9872   else
9873     {
9874       int i;
9875       tree partial_args;
9876
9877       /* Replace the innermost level of the TARGS with NULL_TREEs to
9878          let tsubst know not to subsitute for those parameters.  */
9879       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
9880       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
9881         SET_TMPL_ARGS_LEVEL (partial_args, i,
9882                              TMPL_ARGS_LEVEL (targs, i));
9883       SET_TMPL_ARGS_LEVEL (partial_args,
9884                            TMPL_ARGS_DEPTH (targs),
9885                            make_tree_vec (DECL_NTPARMS (tmpl)));
9886
9887       /* Now, do the (partial) substitution to figure out the
9888          appropriate function type.  */
9889       fn_type = tsubst (fn_type, partial_args, /*complain=*/1, NULL_TREE);
9890       if (DECL_STATIC_FUNCTION_P (decl))
9891         context = tsubst (context, partial_args, /*complain=*/1, NULL_TREE);
9892
9893       /* Substitute into the template parameters to obtain the real
9894          innermost set of parameters.  This step is important if the
9895          innermost set of template parameters contains value
9896          parameters whose types depend on outer template parameters.  */
9897       TREE_VEC_LENGTH (partial_args)--;
9898       tparms = tsubst_template_parms (tparms, partial_args, /*complain=*/1);
9899     }
9900
9901   /* Now, get the innermost parameters and arguments, and figure out
9902      the parameter and return types.  */
9903   tparms = INNERMOST_TEMPLATE_PARMS (tparms);
9904   targs = innermost_args (targs);
9905   ret_type = TREE_TYPE (fn_type);
9906   parm_types = TYPE_ARG_TYPES (fn_type);
9907
9908   /* For a static member function, we generate a fake `this' pointer,
9909      for the purposes of mangling.  This indicates of which class the
9910      function is a member.  Because of:
9911
9912        [class.static] 
9913
9914        There shall not be a static and a nonstatic member function
9915        with the same name and the same parameter types
9916
9917      we don't have to worry that this will result in a clash with a
9918      non-static member function.  */
9919   if (DECL_STATIC_FUNCTION_P (decl))
9920     parm_types = hash_tree_chain (build_pointer_type (context), parm_types);
9921
9922   /* There should be the same number of template parameters as
9923      template arguments.  */
9924   my_friendly_assert (TREE_VEC_LENGTH (tparms) == TREE_VEC_LENGTH (targs),
9925                       0);
9926
9927   /* If the template is in a namespace, we need to put that into the
9928      mangled name. Unfortunately, build_decl_overload_real does not
9929      get the decl to mangle, so it relies on the current
9930      namespace. Therefore, we set that here temporarily. */
9931   my_friendly_assert (DECL_P (decl), 980702);
9932   saved_namespace = current_namespace;
9933   current_namespace = CP_DECL_CONTEXT (decl);  
9934
9935   /* Actually set the DCL_ASSEMBLER_NAME.  */
9936   DECL_ASSEMBLER_NAME (decl)
9937     = build_decl_overload_real (DECL_NAME (decl), parm_types, ret_type,
9938                                 tparms, targs, 
9939                                 DECL_FUNCTION_MEMBER_P (decl) 
9940                                 + DECL_CONSTRUCTOR_P (decl));
9941
9942   /* Restore the previously active namespace.  */
9943   current_namespace = saved_namespace;
9944 }