OSDN Git Service

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