OSDN Git Service

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