OSDN Git Service

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