OSDN Git Service

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