OSDN Git Service

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