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