OSDN Git Service

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