OSDN Git Service

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