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