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