OSDN Git Service

PR c++/13310
[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      nonzero.  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 parameter 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         if (!same_type_p (type, TREE_TYPE (expr)))
3444           return error_mark_node;
3445
3446         return expr;
3447       }
3448       break;
3449
3450     default:
3451       /* All non-type parameters must have one of these types.  */
3452       abort ();
3453       break;
3454     }
3455
3456   return error_mark_node;
3457 }
3458
3459 /* Return 1 if PARM_PARMS and ARG_PARMS matches using rule for 
3460    template template parameters.  Both PARM_PARMS and ARG_PARMS are 
3461    vectors of TREE_LIST nodes containing TYPE_DECL, TEMPLATE_DECL 
3462    or PARM_DECL.
3463    
3464    ARG_PARMS may contain more parameters than PARM_PARMS.  If this is 
3465    the case, then extra parameters must have default arguments.
3466
3467    Consider the example:
3468      template <class T, class Allocator = allocator> class vector;
3469      template<template <class U> class TT> class C;
3470
3471    C<vector> is a valid instantiation.  PARM_PARMS for the above code 
3472    contains a TYPE_DECL (for U),  ARG_PARMS contains two TYPE_DECLs (for 
3473    T and Allocator) and OUTER_ARGS contains the argument that is used to 
3474    substitute the TT parameter.  */
3475
3476 static int
3477 coerce_template_template_parms (tree parm_parms, 
3478                                 tree arg_parms, 
3479                                 tsubst_flags_t complain, 
3480                                 tree in_decl,
3481                                 tree outer_args)
3482 {
3483   int nparms, nargs, i;
3484   tree parm, arg;
3485
3486   my_friendly_assert (TREE_CODE (parm_parms) == TREE_VEC, 0);
3487   my_friendly_assert (TREE_CODE (arg_parms) == TREE_VEC, 0);
3488
3489   nparms = TREE_VEC_LENGTH (parm_parms);
3490   nargs = TREE_VEC_LENGTH (arg_parms);
3491
3492   /* The rule here is opposite of coerce_template_parms.  */
3493   if (nargs < nparms
3494       || (nargs > nparms
3495           && TREE_PURPOSE (TREE_VEC_ELT (arg_parms, nparms)) == NULL_TREE))
3496     return 0;
3497
3498   for (i = 0; i < nparms; ++i)
3499     {
3500       parm = TREE_VALUE (TREE_VEC_ELT (parm_parms, i));
3501       arg = TREE_VALUE (TREE_VEC_ELT (arg_parms, i));
3502
3503       if (arg == NULL_TREE || arg == error_mark_node
3504           || parm == NULL_TREE || parm == error_mark_node)
3505         return 0;
3506
3507       if (TREE_CODE (arg) != TREE_CODE (parm))
3508         return 0;
3509
3510       switch (TREE_CODE (parm))
3511         {
3512         case TYPE_DECL:
3513           break;
3514
3515         case TEMPLATE_DECL:
3516           /* We encounter instantiations of templates like
3517                template <template <template <class> class> class TT>
3518                class C;  */
3519           {
3520             tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3521             tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3522
3523             if (!coerce_template_template_parms
3524                 (parmparm, argparm, complain, in_decl, outer_args))
3525               return 0;
3526           }
3527           break;
3528
3529         case PARM_DECL:
3530           /* The tsubst call is used to handle cases such as
3531                template <class T, template <T> class TT> class D;  
3532              i.e. the parameter list of TT depends on earlier parameters.  */
3533           if (!same_type_p
3534               (tsubst (TREE_TYPE (parm), outer_args, complain, in_decl),
3535                TREE_TYPE (arg)))
3536             return 0;
3537           break;
3538           
3539         default:
3540           abort ();
3541         }
3542     }
3543   return 1;
3544 }
3545
3546 /* Convert the indicated template ARG as necessary to match the
3547    indicated template PARM.  Returns the converted ARG, or
3548    error_mark_node if the conversion was unsuccessful.  Error and
3549    warning messages are issued under control of COMPLAIN.  This
3550    conversion is for the Ith parameter in the parameter list.  ARGS is
3551    the full set of template arguments deduced so far.  */
3552
3553 static tree
3554 convert_template_argument (tree parm, 
3555                            tree arg, 
3556                            tree args, 
3557                            tsubst_flags_t complain, 
3558                            int i, 
3559                            tree in_decl)
3560 {
3561   tree val;
3562   tree inner_args;
3563   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
3564   
3565   inner_args = INNERMOST_TEMPLATE_ARGS (args);
3566
3567   if (TREE_CODE (arg) == TREE_LIST 
3568       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
3569     {  
3570       /* The template argument was the name of some
3571          member function.  That's usually
3572          invalid, but static members are OK.  In any
3573          case, grab the underlying fields/functions
3574          and issue an error later if required.  */
3575       arg = TREE_VALUE (arg);
3576       TREE_TYPE (arg) = unknown_type_node;
3577     }
3578
3579   requires_tmpl_type = TREE_CODE (parm) == TEMPLATE_DECL;
3580   requires_type = (TREE_CODE (parm) == TYPE_DECL
3581                    || requires_tmpl_type);
3582
3583   is_tmpl_type = ((TREE_CODE (arg) == TEMPLATE_DECL
3584                    && TREE_CODE (DECL_TEMPLATE_RESULT (arg)) == TYPE_DECL)
3585                   || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3586                   || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE);
3587   
3588   if (is_tmpl_type
3589       && (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM
3590           || TREE_CODE (arg) == UNBOUND_CLASS_TEMPLATE))
3591     arg = TYPE_STUB_DECL (arg);
3592
3593   is_type = TYPE_P (arg) || is_tmpl_type;
3594
3595   if (requires_type && ! is_type && TREE_CODE (arg) == SCOPE_REF
3596       && TREE_CODE (TREE_OPERAND (arg, 0)) == TEMPLATE_TYPE_PARM)
3597     {
3598       pedwarn ("to refer to a type member of a template parameter, use `typename %E'", arg);
3599       
3600       arg = make_typename_type (TREE_OPERAND (arg, 0),
3601                                 TREE_OPERAND (arg, 1),
3602                                 complain & tf_error);
3603       is_type = 1;
3604     }
3605   if (is_type != requires_type)
3606     {
3607       if (in_decl)
3608         {
3609           if (complain & tf_error)
3610             {
3611               error ("type/value mismatch at argument %d in template parameter list for `%D'",
3612                         i + 1, in_decl);
3613               if (is_type)
3614                 error ("  expected a constant of type `%T', got `%T'",
3615                           TREE_TYPE (parm),
3616                           (is_tmpl_type ? DECL_NAME (arg) : arg));
3617               else if (requires_tmpl_type)
3618                 error ("  expected a class template, got `%E'", arg);
3619               else
3620                 error ("  expected a type, got `%E'", arg);
3621             }
3622         }
3623       return error_mark_node;
3624     }
3625   if (is_tmpl_type ^ requires_tmpl_type)
3626     {
3627       if (in_decl && (complain & tf_error))
3628         {
3629           error ("type/value mismatch at argument %d in template parameter list for `%D'",
3630                     i + 1, in_decl);
3631           if (is_tmpl_type)
3632             error ("  expected a type, got `%T'", DECL_NAME (arg));
3633           else
3634             error ("  expected a class template, got `%T'", arg);
3635         }
3636       return error_mark_node;
3637     }
3638       
3639   if (is_type)
3640     {
3641       if (requires_tmpl_type)
3642         {
3643           if (TREE_CODE (TREE_TYPE (arg)) == UNBOUND_CLASS_TEMPLATE)
3644             /* The number of argument required is not known yet.
3645                Just accept it for now.  */
3646             val = TREE_TYPE (arg);
3647           else
3648             {
3649               tree parmparm = DECL_INNERMOST_TEMPLATE_PARMS (parm);
3650               tree argparm = DECL_INNERMOST_TEMPLATE_PARMS (arg);
3651
3652               if (coerce_template_template_parms (parmparm, argparm,
3653                                                   complain, in_decl,
3654                                                   inner_args))
3655                 {
3656                   val = arg;
3657                   
3658                   /* TEMPLATE_TEMPLATE_PARM node is preferred over 
3659                      TEMPLATE_DECL.  */
3660                   if (val != error_mark_node 
3661                       && DECL_TEMPLATE_TEMPLATE_PARM_P (val))
3662                     val = TREE_TYPE (val);
3663                 }
3664               else
3665                 {
3666                   if (in_decl && (complain & tf_error))
3667                     {
3668                       error ("type/value mismatch at argument %d in template parameter list for `%D'",
3669                                 i + 1, in_decl);
3670                       error ("  expected a template of type `%D', got `%D'", parm, arg);
3671                     }
3672                   
3673                   val = error_mark_node;
3674                 }
3675             }
3676         }
3677       else
3678         val = groktypename (arg);
3679     }
3680   else
3681     {
3682       tree t = tsubst (TREE_TYPE (parm), args, complain, in_decl);
3683
3684       if (invalid_nontype_parm_type_p (t, complain))
3685         return error_mark_node;
3686       
3687       if (!uses_template_parms (arg) && !uses_template_parms (t))
3688         /* We used to call digest_init here.  However, digest_init
3689            will report errors, which we don't want when complain
3690            is zero.  More importantly, digest_init will try too
3691            hard to convert things: for example, `0' should not be
3692            converted to pointer type at this point according to
3693            the standard.  Accepting this is not merely an
3694            extension, since deciding whether or not these
3695            conversions can occur is part of determining which
3696            function template to call, or whether a given explicit
3697            argument specification is valid.  */
3698         val = convert_nontype_argument (t, arg);
3699       else
3700         val = arg;
3701
3702       if (val == NULL_TREE)
3703         val = error_mark_node;
3704       else if (val == error_mark_node && (complain & tf_error))
3705         error ("could not convert template argument `%E' to `%T'", 
3706                   arg, t);
3707     }
3708
3709   return val;
3710 }
3711
3712 /* Convert all template arguments to their appropriate types, and
3713    return a vector containing the innermost resulting template
3714    arguments.  If any error occurs, return error_mark_node. Error and
3715    warning messages are issued under control of COMPLAIN.
3716
3717    If REQUIRE_ALL_ARGUMENTS is nonzero, all arguments must be
3718    provided in ARGLIST, or else trailing parameters must have default
3719    values.  If REQUIRE_ALL_ARGUMENTS is zero, we will attempt argument
3720    deduction for any unspecified trailing arguments.  */
3721    
3722 static tree
3723 coerce_template_parms (tree parms, 
3724                        tree args, 
3725                        tree in_decl,
3726                        tsubst_flags_t complain,
3727                        int require_all_arguments)
3728 {
3729   int nparms, nargs, i, lost = 0;
3730   tree inner_args;
3731   tree new_args;
3732   tree new_inner_args;
3733
3734   inner_args = INNERMOST_TEMPLATE_ARGS (args);
3735   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
3736   nparms = TREE_VEC_LENGTH (parms);
3737
3738   if (nargs > nparms
3739       || (nargs < nparms
3740           && require_all_arguments
3741           && TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)) == NULL_TREE))
3742     {
3743       if (complain & tf_error) 
3744         {
3745           error ("wrong number of template arguments (%d, should be %d)",
3746                     nargs, nparms);
3747           
3748           if (in_decl)
3749             cp_error_at ("provided for `%D'", in_decl);
3750         }
3751
3752       return error_mark_node;
3753     }
3754
3755   new_inner_args = make_tree_vec (nparms);
3756   new_args = add_outermost_template_args (args, new_inner_args);
3757   for (i = 0; i < nparms; i++)
3758     {
3759       tree arg;
3760       tree parm;
3761
3762       /* Get the Ith template parameter.  */
3763       parm = TREE_VEC_ELT (parms, i);
3764
3765       /* Calculate the Ith argument.  */
3766       if (i < nargs)
3767         arg = TREE_VEC_ELT (inner_args, i);
3768       else if (require_all_arguments)
3769         /* There must be a default arg in this case.  */
3770         arg = tsubst_template_arg (TREE_PURPOSE (parm), new_args,
3771                                    complain, in_decl);
3772       else
3773         break;
3774       
3775       my_friendly_assert (arg, 20030727);
3776       if (arg == error_mark_node)
3777         error ("template argument %d is invalid", i + 1);
3778       else 
3779         arg = convert_template_argument (TREE_VALUE (parm), 
3780                                          arg, new_args, complain, i,
3781                                          in_decl); 
3782       
3783       if (arg == error_mark_node)
3784         lost++;
3785       TREE_VEC_ELT (new_inner_args, i) = arg;
3786     }
3787
3788   if (lost)
3789     return error_mark_node;
3790
3791   return new_inner_args;
3792 }
3793
3794 /* Returns 1 if template args OT and NT are equivalent.  */
3795
3796 static int
3797 template_args_equal (tree ot, tree nt)
3798 {
3799   if (nt == ot)
3800     return 1;
3801
3802   if (TREE_CODE (nt) == TREE_VEC)
3803     /* For member templates */
3804     return TREE_CODE (ot) == TREE_VEC && comp_template_args (ot, nt);
3805   else if (TYPE_P (nt))
3806     return TYPE_P (ot) && same_type_p (ot, nt);
3807   else if (TREE_CODE (ot) == TREE_VEC || TYPE_P (ot))
3808     return 0;
3809   else
3810     return cp_tree_equal (ot, nt);
3811 }
3812
3813 /* Returns 1 iff the OLDARGS and NEWARGS are in fact identical sets
3814    of template arguments.  Returns 0 otherwise.  */
3815
3816 int
3817 comp_template_args (tree oldargs, tree newargs)
3818 {
3819   int i;
3820
3821   if (TREE_VEC_LENGTH (oldargs) != TREE_VEC_LENGTH (newargs))
3822     return 0;
3823
3824   for (i = 0; i < TREE_VEC_LENGTH (oldargs); ++i)
3825     {
3826       tree nt = TREE_VEC_ELT (newargs, i);
3827       tree ot = TREE_VEC_ELT (oldargs, i);
3828
3829       if (! template_args_equal (ot, nt))
3830         return 0;
3831     }
3832   return 1;
3833 }
3834
3835 /* Given class template name and parameter list, produce a user-friendly name
3836    for the instantiation.  */
3837
3838 static char *
3839 mangle_class_name_for_template (const char* name, tree parms, tree arglist)
3840 {
3841   static struct obstack scratch_obstack;
3842   static char *scratch_firstobj;
3843   int i, nparms;
3844
3845   if (!scratch_firstobj)
3846     gcc_obstack_init (&scratch_obstack);
3847   else
3848     obstack_free (&scratch_obstack, scratch_firstobj);
3849   scratch_firstobj = obstack_alloc (&scratch_obstack, 1);
3850
3851 #define ccat(C) obstack_1grow (&scratch_obstack, (C));
3852 #define cat(S)  obstack_grow (&scratch_obstack, (S), strlen (S))
3853
3854   cat (name);
3855   ccat ('<');
3856   nparms = TREE_VEC_LENGTH (parms);
3857   arglist = INNERMOST_TEMPLATE_ARGS (arglist);
3858   my_friendly_assert (nparms == TREE_VEC_LENGTH (arglist), 268);
3859   for (i = 0; i < nparms; i++)
3860     {
3861       tree parm = TREE_VALUE (TREE_VEC_ELT (parms, i));
3862       tree arg = TREE_VEC_ELT (arglist, i);
3863
3864       if (i)
3865         ccat (',');
3866
3867       if (TREE_CODE (parm) == TYPE_DECL)
3868         {
3869           cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
3870           continue;
3871         }
3872       else if (TREE_CODE (parm) == TEMPLATE_DECL)
3873         {
3874           if (TREE_CODE (arg) == TEMPLATE_DECL)
3875             {
3876               /* Already substituted with real template.  Just output 
3877                  the template name here */
3878               tree context = DECL_CONTEXT (arg);
3879               if (context)
3880                 {
3881                   /* The template may be defined in a namespace, or
3882                      may be a member template.  */
3883                   my_friendly_assert (TREE_CODE (context) == NAMESPACE_DECL
3884                                       || CLASS_TYPE_P (context), 
3885                                       980422);
3886                   cat(decl_as_string (DECL_CONTEXT (arg), TFF_PLAIN_IDENTIFIER));
3887                   cat("::");
3888                 }
3889               cat (IDENTIFIER_POINTER (DECL_NAME (arg)));
3890             }
3891           else
3892             /* Output the parameter declaration */
3893             cat (type_as_string (arg, TFF_CHASE_TYPEDEF));
3894           continue;
3895         }
3896       else
3897         my_friendly_assert (TREE_CODE (parm) == PARM_DECL, 269);
3898
3899       /* No need to check arglist against parmlist here; we did that
3900          in coerce_template_parms, called from lookup_template_class.  */
3901       cat (expr_as_string (arg, TFF_PLAIN_IDENTIFIER));
3902     }
3903   {
3904     char *bufp = obstack_next_free (&scratch_obstack);
3905     int offset = 0;
3906     while (bufp[offset - 1] == ' ')
3907       offset--;
3908     obstack_blank_fast (&scratch_obstack, offset);
3909
3910     /* B<C<char> >, not B<C<char>> */
3911     if (bufp[offset - 1] == '>')
3912       ccat (' ');
3913   }
3914   ccat ('>');
3915   ccat ('\0');
3916   return (char *) obstack_base (&scratch_obstack);
3917 }
3918
3919 static tree
3920 classtype_mangled_name (tree t)
3921 {
3922   if (CLASSTYPE_TEMPLATE_INFO (t)
3923       /* Specializations have already had their names set up in
3924          lookup_template_class.  */
3925       && !CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
3926     {
3927       tree tmpl = most_general_template (CLASSTYPE_TI_TEMPLATE (t));
3928
3929       /* For non-primary templates, the template parameters are
3930          implicit from their surrounding context.  */
3931       if (PRIMARY_TEMPLATE_P (tmpl))
3932         {
3933           tree name = DECL_NAME (tmpl);
3934           char *mangled_name = mangle_class_name_for_template
3935             (IDENTIFIER_POINTER (name), 
3936              DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
3937              CLASSTYPE_TI_ARGS (t));
3938           tree id = get_identifier (mangled_name);
3939           IDENTIFIER_TEMPLATE (id) = name;
3940           return id;
3941         }
3942     }
3943
3944   return TYPE_IDENTIFIER (t);
3945 }
3946
3947 static void
3948 add_pending_template (tree d)
3949 {
3950   tree ti = (TYPE_P (d)
3951              ? CLASSTYPE_TEMPLATE_INFO (d)
3952              : DECL_TEMPLATE_INFO (d));
3953   tree pt;
3954   int level;
3955
3956   if (TI_PENDING_TEMPLATE_FLAG (ti))
3957     return;
3958
3959   /* We are called both from instantiate_decl, where we've already had a
3960      tinst_level pushed, and instantiate_template, where we haven't.
3961      Compensate.  */
3962   level = !(current_tinst_level && TINST_DECL (current_tinst_level) == d);
3963
3964   if (level)
3965     push_tinst_level (d);
3966
3967   pt = tree_cons (current_tinst_level, d, NULL_TREE);
3968   if (last_pending_template)
3969     TREE_CHAIN (last_pending_template) = pt;
3970   else
3971     pending_templates = pt;
3972
3973   last_pending_template = pt;
3974
3975   TI_PENDING_TEMPLATE_FLAG (ti) = 1;
3976
3977   if (level)
3978     pop_tinst_level ();
3979 }
3980
3981
3982 /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
3983    ARGLIST.  Valid choices for FNS are given in the cp-tree.def
3984    documentation for TEMPLATE_ID_EXPR.  */
3985
3986 tree
3987 lookup_template_function (tree fns, tree arglist)
3988 {
3989   tree type;
3990
3991   if (fns == error_mark_node || arglist == error_mark_node)
3992     return error_mark_node;
3993
3994   my_friendly_assert (!arglist || TREE_CODE (arglist) == TREE_VEC, 20030726);
3995   if (fns == NULL_TREE 
3996       || TREE_CODE (fns) == FUNCTION_DECL)
3997     {
3998       error ("non-template used as template");
3999       return error_mark_node;
4000     }
4001
4002   my_friendly_assert (TREE_CODE (fns) == TEMPLATE_DECL
4003                       || TREE_CODE (fns) == OVERLOAD
4004                       || BASELINK_P (fns)
4005                       || TREE_CODE (fns) == IDENTIFIER_NODE,
4006                       20020730);
4007
4008   if (BASELINK_P (fns))
4009     {
4010       BASELINK_FUNCTIONS (fns) = build (TEMPLATE_ID_EXPR,
4011                                         unknown_type_node,
4012                                         BASELINK_FUNCTIONS (fns),
4013                                         arglist);
4014       return fns;
4015     }
4016
4017   type = TREE_TYPE (fns);
4018   if (TREE_CODE (fns) == OVERLOAD || !type)
4019     type = unknown_type_node;
4020   
4021   return build (TEMPLATE_ID_EXPR, type, fns, arglist);
4022 }
4023
4024 /* Within the scope of a template class S<T>, the name S gets bound
4025    (in build_self_reference) to a TYPE_DECL for the class, not a
4026    TEMPLATE_DECL.  If DECL is a TYPE_DECL for current_class_type,
4027    or one of its enclosing classes, and that type is a template,
4028    return the associated TEMPLATE_DECL.  Otherwise, the original
4029    DECL is returned.  */
4030
4031 tree
4032 maybe_get_template_decl_from_type_decl (tree decl)
4033 {
4034   return (decl != NULL_TREE
4035           && TREE_CODE (decl) == TYPE_DECL 
4036           && DECL_ARTIFICIAL (decl)
4037           && CLASS_TYPE_P (TREE_TYPE (decl))
4038           && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl))) 
4039     ? CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)) : decl;
4040 }
4041
4042 /* Given an IDENTIFIER_NODE (type TEMPLATE_DECL) and a chain of
4043    parameters, find the desired type.
4044
4045    D1 is the PTYPENAME terminal, and ARGLIST is the list of arguments.
4046
4047    IN_DECL, if non-NULL, is the template declaration we are trying to
4048    instantiate.  
4049
4050    If ENTERING_SCOPE is nonzero, we are about to enter the scope of
4051    the class we are looking up.
4052    
4053    Issue error and warning messages under control of COMPLAIN.
4054
4055    If the template class is really a local class in a template
4056    function, then the FUNCTION_CONTEXT is the function in which it is
4057    being instantiated.  */
4058
4059 tree
4060 lookup_template_class (tree d1, 
4061                        tree arglist, 
4062                        tree in_decl, 
4063                        tree context, 
4064                        int entering_scope, 
4065                        tsubst_flags_t complain)
4066 {
4067   tree template = NULL_TREE, parmlist;
4068   tree t;
4069   
4070   timevar_push (TV_NAME_LOOKUP);
4071   
4072   if (TREE_CODE (d1) == IDENTIFIER_NODE)
4073     {
4074       if (IDENTIFIER_VALUE (d1) 
4075           && DECL_TEMPLATE_TEMPLATE_PARM_P (IDENTIFIER_VALUE (d1)))
4076         template = IDENTIFIER_VALUE (d1);
4077       else
4078         {
4079           if (context)
4080             push_decl_namespace (context);
4081           template = lookup_name (d1, /*prefer_type=*/0);
4082           template = maybe_get_template_decl_from_type_decl (template);
4083           if (context)
4084             pop_decl_namespace ();
4085         }
4086       if (template)
4087         context = DECL_CONTEXT (template);
4088     }
4089   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
4090     {
4091       tree type = TREE_TYPE (d1);
4092
4093       /* If we are declaring a constructor, say A<T>::A<T>, we will get
4094          an implicit typename for the second A.  Deal with it.  */
4095       if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
4096         type = TREE_TYPE (type);
4097         
4098       if (CLASSTYPE_TEMPLATE_INFO (type))
4099         {
4100           template = CLASSTYPE_TI_TEMPLATE (type);
4101           d1 = DECL_NAME (template);
4102         }
4103     }
4104   else if (TREE_CODE (d1) == ENUMERAL_TYPE 
4105            || (TYPE_P (d1) && IS_AGGR_TYPE (d1)))
4106     {
4107       template = TYPE_TI_TEMPLATE (d1);
4108       d1 = DECL_NAME (template);
4109     }
4110   else if (TREE_CODE (d1) == TEMPLATE_DECL
4111            && TREE_CODE (DECL_TEMPLATE_RESULT (d1)) == TYPE_DECL)
4112     {
4113       template = d1;
4114       d1 = DECL_NAME (template);
4115       context = DECL_CONTEXT (template);
4116     }
4117
4118   /* With something like `template <class T> class X class X { ... };'
4119      we could end up with D1 having nothing but an IDENTIFIER_VALUE.
4120      We don't want to do that, but we have to deal with the situation,
4121      so let's give them some syntax errors to chew on instead of a
4122      crash. Alternatively D1 might not be a template type at all.  */
4123   if (! template)
4124     {
4125       if (complain & tf_error)
4126         error ("`%T' is not a template", d1);
4127       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4128     }
4129
4130   if (TREE_CODE (template) != TEMPLATE_DECL
4131          /* Make sure it's a user visible template, if it was named by
4132             the user.  */
4133       || ((complain & tf_user) && !DECL_TEMPLATE_PARM_P (template)
4134           && !PRIMARY_TEMPLATE_P (template)))
4135     {
4136       if (complain & tf_error)
4137         {
4138           error ("non-template type `%T' used as a template", d1);
4139           if (in_decl)
4140             cp_error_at ("for template declaration `%D'", in_decl);
4141         }
4142       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4143     }
4144
4145   complain &= ~tf_user;
4146   
4147   if (DECL_TEMPLATE_TEMPLATE_PARM_P (template))
4148     {
4149       /* Create a new TEMPLATE_DECL and TEMPLATE_TEMPLATE_PARM node to store
4150          template arguments */
4151
4152       tree parm;
4153       tree arglist2;
4154
4155       parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
4156
4157       /* Consider an example where a template template parameter declared as
4158
4159            template <class T, class U = std::allocator<T> > class TT
4160
4161          The template parameter level of T and U are one level larger than 
4162          of TT.  To proper process the default argument of U, say when an 
4163          instantiation `TT<int>' is seen, we need to build the full
4164          arguments containing {int} as the innermost level.  Outer levels,
4165          available when not appearing as default template argument, can be
4166          obtained from `current_template_args ()'.
4167
4168          Suppose that TT is later substituted with std::vector.  The above
4169          instantiation is `TT<int, std::allocator<T> >' with TT at
4170          level 1, and T at level 2, while the template arguments at level 1
4171          becomes {std::vector} and the inner level 2 is {int}.  */
4172
4173       if (current_template_parms)
4174         arglist = add_to_template_args (current_template_args (), arglist);
4175
4176       arglist2 = coerce_template_parms (parmlist, arglist, template,
4177                                         complain, /*require_all_args=*/1);
4178       if (arglist2 == error_mark_node
4179           || (!uses_template_parms (arglist2)
4180               && check_instantiated_args (template, arglist2, complain)))
4181         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4182
4183       parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
4184       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, parm);
4185     }
4186   else 
4187     {
4188       tree template_type = TREE_TYPE (template);
4189       tree gen_tmpl;
4190       tree type_decl;
4191       tree found = NULL_TREE;
4192       tree *tp;
4193       int arg_depth;
4194       int parm_depth;
4195       int is_partial_instantiation;
4196
4197       gen_tmpl = most_general_template (template);
4198       parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
4199       parm_depth = TMPL_PARMS_DEPTH (parmlist);
4200       arg_depth = TMPL_ARGS_DEPTH (arglist);
4201
4202       if (arg_depth == 1 && parm_depth > 1)
4203         {
4204           /* We've been given an incomplete set of template arguments.
4205              For example, given:
4206
4207                template <class T> struct S1 {
4208                  template <class U> struct S2 {};
4209                  template <class U> struct S2<U*> {};
4210                 };
4211              
4212              we will be called with an ARGLIST of `U*', but the
4213              TEMPLATE will be `template <class T> template
4214              <class U> struct S1<T>::S2'.  We must fill in the missing
4215              arguments.  */
4216           arglist 
4217             = add_outermost_template_args (TYPE_TI_ARGS (TREE_TYPE (template)),
4218                                            arglist);
4219           arg_depth = TMPL_ARGS_DEPTH (arglist);
4220         }
4221
4222       /* Now we should have enough arguments.  */
4223       my_friendly_assert (parm_depth == arg_depth, 0);
4224       
4225       /* From here on, we're only interested in the most general
4226          template.  */
4227       template = gen_tmpl;
4228
4229       /* Calculate the BOUND_ARGS.  These will be the args that are
4230          actually tsubst'd into the definition to create the
4231          instantiation.  */
4232       if (parm_depth > 1)
4233         {
4234           /* We have multiple levels of arguments to coerce, at once.  */
4235           int i;
4236           int saved_depth = TMPL_ARGS_DEPTH (arglist);
4237
4238           tree bound_args = make_tree_vec (parm_depth);
4239           
4240           for (i = saved_depth,
4241                  t = DECL_TEMPLATE_PARMS (template); 
4242                i > 0 && t != NULL_TREE;
4243                --i, t = TREE_CHAIN (t))
4244             {
4245               tree a = coerce_template_parms (TREE_VALUE (t),
4246                                               arglist, template,
4247                                               complain, /*require_all_args=*/1);
4248
4249               /* Don't process further if one of the levels fails.  */
4250               if (a == error_mark_node)
4251                 {
4252                   /* Restore the ARGLIST to its full size.  */
4253                   TREE_VEC_LENGTH (arglist) = saved_depth;
4254                   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4255                 }
4256               
4257               SET_TMPL_ARGS_LEVEL (bound_args, i, a);
4258
4259               /* We temporarily reduce the length of the ARGLIST so
4260                  that coerce_template_parms will see only the arguments
4261                  corresponding to the template parameters it is
4262                  examining.  */
4263               TREE_VEC_LENGTH (arglist)--;
4264             }
4265
4266           /* Restore the ARGLIST to its full size.  */
4267           TREE_VEC_LENGTH (arglist) = saved_depth;
4268
4269           arglist = bound_args;
4270         }
4271       else
4272         arglist
4273           = coerce_template_parms (INNERMOST_TEMPLATE_PARMS (parmlist),
4274                                    INNERMOST_TEMPLATE_ARGS (arglist),
4275                                    template,
4276                                    complain, /*require_all_args=*/1);
4277
4278       if (arglist == error_mark_node
4279           || (!uses_template_parms (INNERMOST_TEMPLATE_ARGS (arglist))
4280               && check_instantiated_args (template,
4281                                           INNERMOST_TEMPLATE_ARGS (arglist),
4282                                           complain)))
4283         /* We were unable to bind the arguments.  */
4284         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node);
4285
4286       /* In the scope of a template class, explicit references to the
4287          template class refer to the type of the template, not any
4288          instantiation of it.  For example, in:
4289          
4290            template <class T> class C { void f(C<T>); }
4291
4292          the `C<T>' is just the same as `C'.  Outside of the
4293          class, however, such a reference is an instantiation.  */
4294       if (comp_template_args (TYPE_TI_ARGS (template_type),
4295                               arglist))
4296         {
4297           found = template_type;
4298           
4299           if (!entering_scope && PRIMARY_TEMPLATE_P (template))
4300             {
4301               tree ctx;
4302               
4303               for (ctx = current_class_type; 
4304                    ctx && TREE_CODE (ctx) != NAMESPACE_DECL;
4305                    ctx = (TYPE_P (ctx)
4306                           ? TYPE_CONTEXT (ctx)
4307                           : DECL_CONTEXT (ctx)))
4308                 if (TYPE_P (ctx) && same_type_p (ctx, template_type))
4309                   goto found_ctx;
4310               
4311               /* We're not in the scope of the class, so the
4312                  TEMPLATE_TYPE is not the type we want after all.  */
4313               found = NULL_TREE;
4314             found_ctx:;
4315             }
4316         }
4317       if (found)
4318         POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4319
4320       for (tp = &DECL_TEMPLATE_INSTANTIATIONS (template);
4321            *tp;
4322            tp = &TREE_CHAIN (*tp))
4323         if (comp_template_args (TREE_PURPOSE (*tp), arglist))
4324           {
4325             found = *tp;
4326
4327             /* Use the move-to-front heuristic to speed up future
4328                searches.  */
4329             *tp = TREE_CHAIN (*tp);
4330             TREE_CHAIN (found) 
4331               = DECL_TEMPLATE_INSTANTIATIONS (template);
4332             DECL_TEMPLATE_INSTANTIATIONS (template) = found;
4333
4334             POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, TREE_VALUE (found));
4335           }
4336
4337       /* This type is a "partial instantiation" if any of the template
4338          arguments still involve template parameters.  Note that we set
4339          IS_PARTIAL_INSTANTIATION for partial specializations as
4340          well.  */
4341       is_partial_instantiation = uses_template_parms (arglist);
4342
4343       if (!is_partial_instantiation 
4344           && !PRIMARY_TEMPLATE_P (template)
4345           && TREE_CODE (CP_DECL_CONTEXT (template)) == NAMESPACE_DECL)
4346         {
4347           found = xref_tag_from_type (TREE_TYPE (template),
4348                                       DECL_NAME (template),
4349                                       /*globalize=*/1);
4350           POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, found);
4351         }
4352       
4353       context = tsubst (DECL_CONTEXT (template), arglist,
4354                         complain, in_decl);
4355       if (!context)
4356         context = global_namespace;
4357
4358       /* Create the type.  */
4359       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
4360         {
4361           if (!is_partial_instantiation)
4362             {
4363               set_current_access_from_decl (TYPE_NAME (template_type));
4364               t = start_enum (TYPE_IDENTIFIER (template_type));
4365             }
4366           else
4367             /* We don't want to call start_enum for this type, since
4368                the values for the enumeration constants may involve
4369                template parameters.  And, no one should be interested
4370                in the enumeration constants for such a type.  */
4371             t = make_node (ENUMERAL_TYPE);
4372         }
4373       else
4374         {
4375           t = make_aggr_type (TREE_CODE (template_type));
4376           CLASSTYPE_DECLARED_CLASS (t) 
4377             = CLASSTYPE_DECLARED_CLASS (template_type);
4378           SET_CLASSTYPE_IMPLICIT_INSTANTIATION (t);
4379           TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
4380
4381           /* A local class.  Make sure the decl gets registered properly.  */
4382           if (context == current_function_decl)
4383             pushtag (DECL_NAME (template), t, 0);
4384         }
4385
4386       /* If we called start_enum or pushtag above, this information
4387          will already be set up.  */
4388       if (!TYPE_NAME (t))
4389         {
4390           TYPE_CONTEXT (t) = FROB_CONTEXT (context);
4391           
4392           type_decl = create_implicit_typedef (DECL_NAME (template), t);
4393           DECL_CONTEXT (type_decl) = TYPE_CONTEXT (t);
4394           TYPE_STUB_DECL (t) = type_decl;
4395           DECL_SOURCE_LOCATION (type_decl) 
4396             = DECL_SOURCE_LOCATION (TYPE_STUB_DECL (template_type));
4397         }
4398       else
4399         type_decl = TYPE_NAME (t);
4400
4401       TREE_PRIVATE (type_decl)
4402         = TREE_PRIVATE (TYPE_STUB_DECL (template_type));
4403       TREE_PROTECTED (type_decl)
4404         = TREE_PROTECTED (TYPE_STUB_DECL (template_type));
4405
4406       /* Set up the template information.  We have to figure out which
4407          template is the immediate parent if this is a full
4408          instantiation.  */
4409       if (parm_depth == 1 || is_partial_instantiation
4410           || !PRIMARY_TEMPLATE_P (template))
4411         /* This case is easy; there are no member templates involved.  */
4412         found = template;
4413       else
4414         {
4415           /* This is a full instantiation of a member template.  Look
4416              for a partial instantiation of which this is an instance.  */
4417
4418           for (found = DECL_TEMPLATE_INSTANTIATIONS (template);
4419                found; found = TREE_CHAIN (found))
4420             {
4421               int success;
4422               tree tmpl = CLASSTYPE_TI_TEMPLATE (TREE_VALUE (found));
4423
4424               /* We only want partial instantiations, here, not
4425                  specializations or full instantiations.  */
4426               if (CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_VALUE (found))
4427                   || !uses_template_parms (TREE_VALUE (found)))
4428                 continue;
4429
4430               /* Temporarily reduce by one the number of levels in the
4431                  ARGLIST and in FOUND so as to avoid comparing the
4432                  last set of arguments.  */
4433               TREE_VEC_LENGTH (arglist)--;
4434               TREE_VEC_LENGTH (TREE_PURPOSE (found)) --;
4435
4436               /* See if the arguments match.  If they do, then TMPL is
4437                  the partial instantiation we want.  */
4438               success = comp_template_args (TREE_PURPOSE (found), arglist);
4439
4440               /* Restore the argument vectors to their full size.  */
4441               TREE_VEC_LENGTH (arglist)++;
4442               TREE_VEC_LENGTH (TREE_PURPOSE (found))++;
4443
4444               if (success)
4445                 {
4446                   found = tmpl;
4447                   break;
4448                 }
4449             }
4450
4451           if (!found)
4452             {
4453               /* There was no partial instantiation. This happens
4454                  where C<T> is a member template of A<T> and it's used
4455                  in something like
4456                 
4457                   template <typename T> struct B { A<T>::C<int> m; };
4458                   B<float>;
4459                 
4460                  Create the partial instantiation.
4461                */
4462               TREE_VEC_LENGTH (arglist)--;
4463               found = tsubst (template, arglist, complain, NULL_TREE);
4464               TREE_VEC_LENGTH (arglist)++;
4465             }
4466         }
4467
4468       SET_TYPE_TEMPLATE_INFO (t, tree_cons (found, arglist, NULL_TREE));  
4469       DECL_TEMPLATE_INSTANTIATIONS (template) 
4470         = tree_cons (arglist, t, 
4471                      DECL_TEMPLATE_INSTANTIATIONS (template));
4472
4473       if (TREE_CODE (t) == ENUMERAL_TYPE 
4474           && !is_partial_instantiation)
4475         /* Now that the type has been registered on the instantiations
4476            list, we set up the enumerators.  Because the enumeration
4477            constants may involve the enumeration type itself, we make
4478            sure to register the type first, and then create the
4479            constants.  That way, doing tsubst_expr for the enumeration
4480            constants won't result in recursive calls here; we'll find
4481            the instantiation and exit above.  */
4482         tsubst_enum (template_type, t, arglist);
4483
4484       /* Reset the name of the type, now that CLASSTYPE_TEMPLATE_INFO
4485          is set up.  */
4486       if (TREE_CODE (t) != ENUMERAL_TYPE)
4487         DECL_NAME (type_decl) = classtype_mangled_name (t);
4488       if (!is_partial_instantiation)
4489         {
4490           /* For backwards compatibility; code that uses
4491              -fexternal-templates expects looking up a template to
4492              instantiate it.  I think DDD still relies on this.
4493              (jason 8/20/1998) */
4494           if (TREE_CODE (t) != ENUMERAL_TYPE
4495               && flag_external_templates
4496               && CLASSTYPE_INTERFACE_KNOWN (TREE_TYPE (template))
4497               && ! CLASSTYPE_INTERFACE_ONLY (TREE_TYPE (template)))
4498             add_pending_template (t);
4499         }
4500       else
4501         /* If the type makes use of template parameters, the
4502            code that generates debugging information will crash.  */
4503         DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
4504
4505       POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, t);
4506     }
4507   timevar_pop (TV_NAME_LOOKUP);
4508 }
4509 \f
4510 struct pair_fn_data 
4511 {
4512   tree_fn_t fn;
4513   void *data;
4514   htab_t visited;
4515 };
4516
4517 /* Called from for_each_template_parm via walk_tree.  */
4518
4519 static tree
4520 for_each_template_parm_r (tree* tp, int* walk_subtrees, void* d)
4521 {
4522   tree t = *tp;
4523   struct pair_fn_data *pfd = (struct pair_fn_data *) d;
4524   tree_fn_t fn = pfd->fn;
4525   void *data = pfd->data;
4526   void **slot;
4527
4528   /* If we have already visited this tree, there's no need to walk
4529      subtrees.  Otherwise, add it to the visited table.  */
4530   slot = htab_find_slot (pfd->visited, *tp, INSERT);
4531   if (*slot)
4532     {
4533       *walk_subtrees = 0;
4534       return NULL_TREE;
4535     }
4536   *slot = *tp;
4537
4538   if (TYPE_P (t)
4539       && for_each_template_parm (TYPE_CONTEXT (t), fn, data, pfd->visited))
4540     return error_mark_node;
4541
4542   switch (TREE_CODE (t))
4543     {
4544     case RECORD_TYPE:
4545       if (TYPE_PTRMEMFUNC_P (t))
4546         break;
4547       /* Fall through.  */
4548
4549     case UNION_TYPE:
4550     case ENUMERAL_TYPE:
4551       if (!TYPE_TEMPLATE_INFO (t))
4552         *walk_subtrees = 0;
4553       else if (for_each_template_parm (TREE_VALUE (TYPE_TEMPLATE_INFO (t)),
4554                                        fn, data, pfd->visited))
4555         return error_mark_node;
4556       break;
4557
4558     case METHOD_TYPE:
4559       /* Since we're not going to walk subtrees, we have to do this
4560          explicitly here.  */
4561       if (for_each_template_parm (TYPE_METHOD_BASETYPE (t), fn, data,
4562                                   pfd->visited))
4563         return error_mark_node;
4564       /* Fall through.  */
4565
4566     case FUNCTION_TYPE:
4567       /* Check the return type.  */
4568       if (for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4569         return error_mark_node;
4570
4571       /* Check the parameter types.  Since default arguments are not
4572          instantiated until they are needed, the TYPE_ARG_TYPES may
4573          contain expressions that involve template parameters.  But,
4574          no-one should be looking at them yet.  And, once they're
4575          instantiated, they don't contain template parameters, so
4576          there's no point in looking at them then, either.  */
4577       {
4578         tree parm;
4579
4580         for (parm = TYPE_ARG_TYPES (t); parm; parm = TREE_CHAIN (parm))
4581           if (for_each_template_parm (TREE_VALUE (parm), fn, data,
4582                                       pfd->visited))
4583             return error_mark_node;
4584
4585         /* Since we've already handled the TYPE_ARG_TYPES, we don't
4586            want walk_tree walking into them itself.  */
4587         *walk_subtrees = 0;
4588       }
4589       break;
4590
4591     case TYPEOF_TYPE:
4592       if (for_each_template_parm (TYPE_FIELDS (t), fn, data, 
4593                                   pfd->visited))
4594         return error_mark_node;
4595       break;
4596
4597     case FUNCTION_DECL:
4598     case VAR_DECL:
4599       if (DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t)
4600           && for_each_template_parm (DECL_TI_ARGS (t), fn, data,
4601                                      pfd->visited))
4602         return error_mark_node;
4603       /* Fall through.  */
4604
4605     case PARM_DECL:
4606     case CONST_DECL:
4607       if (TREE_CODE (t) == CONST_DECL && DECL_TEMPLATE_PARM_P (t)
4608           && for_each_template_parm (DECL_INITIAL (t), fn, data,
4609                                      pfd->visited))
4610         return error_mark_node;
4611       if (DECL_CONTEXT (t) 
4612           && for_each_template_parm (DECL_CONTEXT (t), fn, data,
4613                                      pfd->visited))
4614         return error_mark_node;
4615       break;
4616
4617     case BOUND_TEMPLATE_TEMPLATE_PARM:
4618       /* Record template parameters such as `T' inside `TT<T>'.  */
4619       if (for_each_template_parm (TYPE_TI_ARGS (t), fn, data, pfd->visited))
4620         return error_mark_node;
4621       /* Fall through.  */
4622
4623     case TEMPLATE_TEMPLATE_PARM:
4624     case TEMPLATE_TYPE_PARM:
4625     case TEMPLATE_PARM_INDEX:
4626       if (fn && (*fn)(t, data))
4627         return error_mark_node;
4628       else if (!fn)
4629         return error_mark_node;
4630       break;
4631
4632     case TEMPLATE_DECL:
4633       /* A template template parameter is encountered */
4634       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t)
4635           && for_each_template_parm (TREE_TYPE (t), fn, data, pfd->visited))
4636         return error_mark_node;
4637
4638       /* Already substituted template template parameter */
4639       *walk_subtrees = 0;
4640       break;
4641
4642     case TYPENAME_TYPE:
4643       if (!fn 
4644           || for_each_template_parm (TYPENAME_TYPE_FULLNAME (t), fn,
4645                                      data, pfd->visited))
4646         return error_mark_node;
4647       break;
4648
4649     case CONSTRUCTOR:
4650       if (TREE_TYPE (t) && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))
4651           && for_each_template_parm (TYPE_PTRMEMFUNC_FN_TYPE
4652                                      (TREE_TYPE (t)), fn, data,
4653                                      pfd->visited))
4654         return error_mark_node;
4655       break;
4656       
4657     case INDIRECT_REF:
4658     case COMPONENT_REF:
4659       /* If there's no type, then this thing must be some expression
4660          involving template parameters.  */
4661       if (!fn && !TREE_TYPE (t))
4662         return error_mark_node;
4663       break;
4664
4665     case MODOP_EXPR:
4666     case CAST_EXPR:
4667     case REINTERPRET_CAST_EXPR:
4668     case CONST_CAST_EXPR:
4669     case STATIC_CAST_EXPR:
4670     case DYNAMIC_CAST_EXPR:
4671     case ARROW_EXPR:
4672     case DOTSTAR_EXPR:
4673     case TYPEID_EXPR:
4674     case PSEUDO_DTOR_EXPR:
4675       if (!fn)
4676         return error_mark_node;
4677       break;
4678
4679     case BASELINK:
4680       /* If we do not handle this case specially, we end up walking
4681          the BINFO hierarchy, which is circular, and therefore
4682          confuses walk_tree.  */
4683       *walk_subtrees = 0;
4684       if (for_each_template_parm (BASELINK_FUNCTIONS (*tp), fn, data,
4685                                   pfd->visited))
4686         return error_mark_node;
4687       break;
4688
4689     default:
4690       break;
4691     }
4692
4693   /* We didn't find any template parameters we liked.  */
4694   return NULL_TREE;
4695 }
4696
4697 /* For each TEMPLATE_TYPE_PARM, TEMPLATE_TEMPLATE_PARM, 
4698    BOUND_TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX in T, 
4699    call FN with the parameter and the DATA.
4700    If FN returns nonzero, the iteration is terminated, and
4701    for_each_template_parm returns 1.  Otherwise, the iteration
4702    continues.  If FN never returns a nonzero value, the value
4703    returned by for_each_template_parm is 0.  If FN is NULL, it is
4704    considered to be the function which always returns 1.  */
4705
4706 static int
4707 for_each_template_parm (tree t, tree_fn_t fn, void* data, htab_t visited)
4708 {
4709   struct pair_fn_data pfd;
4710   int result;
4711
4712   /* Set up.  */
4713   pfd.fn = fn;
4714   pfd.data = data;
4715
4716   /* Walk the tree.  (Conceptually, we would like to walk without
4717      duplicates, but for_each_template_parm_r recursively calls
4718      for_each_template_parm, so we would need to reorganize a fair
4719      bit to use walk_tree_without_duplicates, so we keep our own
4720      visited list.)  */
4721   if (visited)
4722     pfd.visited = visited;
4723   else
4724     pfd.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, 
4725                                NULL);
4726   result = walk_tree (&t, 
4727                       for_each_template_parm_r, 
4728                       &pfd,
4729                       NULL) != NULL_TREE;
4730
4731   /* Clean up.  */
4732   if (!visited)
4733     htab_delete (pfd.visited);
4734
4735   return result;
4736 }
4737
4738 /* Returns true if T depends on any template parameter.  */
4739
4740 int
4741 uses_template_parms (tree t)
4742 {
4743   return for_each_template_parm (t, 0, 0, NULL);
4744 }
4745
4746 /* Returns true if T depends on any template parameter with level LEVEL.  */
4747
4748 int
4749 uses_template_parms_level (tree t, int level)
4750 {
4751   return for_each_template_parm (t, template_parm_this_level_p, &level, NULL);
4752 }
4753
4754 static int tinst_depth;
4755 extern int max_tinst_depth;
4756 #ifdef GATHER_STATISTICS
4757 int depth_reached;
4758 #endif
4759 static int tinst_level_tick;
4760 static int last_template_error_tick;
4761
4762 /* We're starting to instantiate D; record the template instantiation context
4763    for diagnostics and to restore it later.  */
4764
4765 int
4766 push_tinst_level (tree d)
4767 {
4768   tree new;
4769
4770   if (tinst_depth >= max_tinst_depth)
4771     {
4772       /* If the instantiation in question still has unbound template parms,
4773          we don't really care if we can't instantiate it, so just return.
4774          This happens with base instantiation for implicit `typename'.  */
4775       if (uses_template_parms (d))
4776         return 0;
4777
4778       last_template_error_tick = tinst_level_tick;
4779       error ("template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN to increase the maximum) instantiating `%D'",
4780              max_tinst_depth, d);
4781
4782       print_instantiation_context ();
4783
4784       return 0;
4785     }
4786
4787   new = build_expr_wfl (d, input_filename, input_line, 0);
4788   TREE_CHAIN (new) = current_tinst_level;
4789   current_tinst_level = new;
4790
4791   ++tinst_depth;
4792 #ifdef GATHER_STATISTICS
4793   if (tinst_depth > depth_reached)
4794     depth_reached = tinst_depth;
4795 #endif
4796
4797   ++tinst_level_tick;
4798   return 1;
4799 }
4800
4801 /* We're done instantiating this template; return to the instantiation
4802    context.  */
4803
4804 void
4805 pop_tinst_level (void)
4806 {
4807   tree old = current_tinst_level;
4808
4809   /* Restore the filename and line number stashed away when we started
4810      this instantiation.  */
4811   input_line = TINST_LINE (old);
4812   input_filename = TINST_FILE (old);
4813   extract_interface_info ();
4814   
4815   current_tinst_level = TREE_CHAIN (old);
4816   --tinst_depth;
4817   ++tinst_level_tick;
4818 }
4819
4820 /* We're instantiating a deferred template; restore the template
4821    instantiation context in which the instantiation was requested, which
4822    is one step out from LEVEL.  */
4823
4824 static void
4825 reopen_tinst_level (tree level)
4826 {
4827   tree t;
4828
4829   tinst_depth = 0;
4830   for (t = level; t; t = TREE_CHAIN (t))
4831     ++tinst_depth;
4832
4833   current_tinst_level = level;
4834   pop_tinst_level ();
4835 }
4836
4837 /* Return the outermost template instantiation context, for use with
4838    -falt-external-templates.  */
4839
4840 tree
4841 tinst_for_decl (void)
4842 {
4843   tree p = current_tinst_level;
4844
4845   if (p)
4846     for (; TREE_CHAIN (p) ; p = TREE_CHAIN (p))
4847       ;
4848   return p;
4849 }
4850
4851 /* DECL is a friend FUNCTION_DECL or TEMPLATE_DECL.  ARGS is the
4852    vector of template arguments, as for tsubst.
4853
4854    Returns an appropriate tsubst'd friend declaration.  */
4855
4856 static tree
4857 tsubst_friend_function (tree decl, tree args)
4858 {
4859   tree new_friend;
4860   location_t saved_loc = input_location;
4861
4862   input_location = DECL_SOURCE_LOCATION (decl);
4863
4864   if (TREE_CODE (decl) == FUNCTION_DECL 
4865       && DECL_TEMPLATE_INSTANTIATION (decl)
4866       && TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
4867     /* This was a friend declared with an explicit template
4868        argument list, e.g.:
4869        
4870        friend void f<>(T);
4871        
4872        to indicate that f was a template instantiation, not a new
4873        function declaration.  Now, we have to figure out what
4874        instantiation of what template.  */
4875     {
4876       tree template_id, arglist, fns;
4877       tree new_args;
4878       tree tmpl;
4879       tree ns = decl_namespace_context (TYPE_MAIN_DECL (current_class_type));
4880       
4881       /* Friend functions are looked up in the containing namespace scope.
4882          We must enter that scope, to avoid finding member functions of the
4883          current cless with same name.  */
4884       push_nested_namespace (ns);
4885       fns = tsubst_expr (DECL_TI_TEMPLATE (decl), args,
4886                          tf_error | tf_warning, NULL_TREE);
4887       pop_nested_namespace (ns);
4888       arglist = tsubst (DECL_TI_ARGS (decl), args,
4889                         tf_error | tf_warning, NULL_TREE);
4890       template_id = lookup_template_function (fns, arglist);
4891       
4892       new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
4893       tmpl = determine_specialization (template_id, new_friend,
4894                                        &new_args, 
4895                                        /*need_member_template=*/0);
4896       new_friend = instantiate_template (tmpl, new_args, tf_error);
4897       goto done;
4898     }
4899
4900   new_friend = tsubst (decl, args, tf_error | tf_warning, NULL_TREE);
4901         
4902   /* The NEW_FRIEND will look like an instantiation, to the
4903      compiler, but is not an instantiation from the point of view of
4904      the language.  For example, we might have had:
4905      
4906      template <class T> struct S {
4907        template <class U> friend void f(T, U);
4908      };
4909      
4910      Then, in S<int>, template <class U> void f(int, U) is not an
4911      instantiation of anything.  */
4912   DECL_USE_TEMPLATE (new_friend) = 0;
4913   if (TREE_CODE (decl) == TEMPLATE_DECL)
4914     {
4915       DECL_USE_TEMPLATE (DECL_TEMPLATE_RESULT (new_friend)) = 0;
4916       DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (new_friend))
4917         = DECL_SAVED_TREE (DECL_TEMPLATE_RESULT (decl));
4918     }
4919
4920   /* The mangled name for the NEW_FRIEND is incorrect.  The function
4921      is not a template instantiation and should not be mangled like
4922      one.  Therefore, we forget the mangling here; we'll recompute it
4923      later if we need it.  */
4924   if (TREE_CODE (new_friend) != TEMPLATE_DECL)
4925     {
4926       SET_DECL_RTL (new_friend, NULL_RTX);
4927       SET_DECL_ASSEMBLER_NAME (new_friend, NULL_TREE);
4928     }
4929       
4930   if (DECL_NAMESPACE_SCOPE_P (new_friend))
4931     {
4932       tree old_decl;
4933       tree new_friend_template_info;
4934       tree new_friend_result_template_info;
4935       tree ns;
4936       int  new_friend_is_defn;
4937
4938       /* We must save some information from NEW_FRIEND before calling
4939          duplicate decls since that function will free NEW_FRIEND if
4940          possible.  */
4941       new_friend_template_info = DECL_TEMPLATE_INFO (new_friend);
4942       if (TREE_CODE (new_friend) == TEMPLATE_DECL)
4943         {
4944           /* This declaration is a `primary' template.  */
4945           DECL_PRIMARY_TEMPLATE (new_friend) = new_friend;
4946           
4947           new_friend_is_defn 
4948             = DECL_INITIAL (DECL_TEMPLATE_RESULT (new_friend)) != NULL_TREE;
4949           new_friend_result_template_info
4950             = DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (new_friend));
4951         }
4952       else
4953         {
4954           new_friend_is_defn = DECL_INITIAL (new_friend) != NULL_TREE;
4955           new_friend_result_template_info = NULL_TREE;
4956         }
4957
4958       /* Inside pushdecl_namespace_level, we will push into the
4959          current namespace. However, the friend function should go
4960          into the namespace of the template.  */
4961       ns = decl_namespace_context (new_friend);
4962       push_nested_namespace (ns);
4963       old_decl = pushdecl_namespace_level (new_friend);
4964       pop_nested_namespace (ns);
4965
4966       if (old_decl != new_friend)
4967         {
4968           /* This new friend declaration matched an existing
4969              declaration.  For example, given:
4970
4971                template <class T> void f(T);
4972                template <class U> class C { 
4973                  template <class T> friend void f(T) {} 
4974                };
4975
4976              the friend declaration actually provides the definition
4977              of `f', once C has been instantiated for some type.  So,
4978              old_decl will be the out-of-class template declaration,
4979              while new_friend is the in-class definition.
4980
4981              But, if `f' was called before this point, the
4982              instantiation of `f' will have DECL_TI_ARGS corresponding
4983              to `T' but not to `U', references to which might appear
4984              in the definition of `f'.  Previously, the most general
4985              template for an instantiation of `f' was the out-of-class
4986              version; now it is the in-class version.  Therefore, we
4987              run through all specialization of `f', adding to their
4988              DECL_TI_ARGS appropriately.  In particular, they need a
4989              new set of outer arguments, corresponding to the
4990              arguments for this class instantiation.  
4991
4992              The same situation can arise with something like this:
4993
4994                friend void f(int);
4995                template <class T> class C { 
4996                  friend void f(T) {}
4997                };
4998
4999              when `C<int>' is instantiated.  Now, `f(int)' is defined
5000              in the class.  */
5001
5002           if (!new_friend_is_defn)
5003             /* On the other hand, if the in-class declaration does
5004                *not* provide a definition, then we don't want to alter
5005                existing definitions.  We can just leave everything
5006                alone.  */
5007             ;
5008           else
5009             {
5010               /* Overwrite whatever template info was there before, if
5011                  any, with the new template information pertaining to
5012                  the declaration.  */
5013               DECL_TEMPLATE_INFO (old_decl) = new_friend_template_info;
5014
5015               if (TREE_CODE (old_decl) != TEMPLATE_DECL)
5016                 reregister_specialization (new_friend,
5017                                            most_general_template (old_decl),
5018                                            old_decl);
5019               else 
5020                 {
5021                   tree t;
5022                   tree new_friend_args;
5023
5024                   DECL_TEMPLATE_INFO (DECL_TEMPLATE_RESULT (old_decl)) 
5025                     = new_friend_result_template_info;
5026                     
5027                   new_friend_args = TI_ARGS (new_friend_template_info);
5028                   for (t = DECL_TEMPLATE_SPECIALIZATIONS (old_decl); 
5029                        t != NULL_TREE;
5030                        t = TREE_CHAIN (t))
5031                     {
5032                       tree spec = TREE_VALUE (t);
5033                   
5034                       DECL_TI_ARGS (spec) 
5035                         = add_outermost_template_args (new_friend_args,
5036                                                        DECL_TI_ARGS (spec));
5037                     }
5038
5039                   /* Now, since specializations are always supposed to
5040                      hang off of the most general template, we must move
5041                      them.  */
5042                   t = most_general_template (old_decl);
5043                   if (t != old_decl)
5044                     {
5045                       DECL_TEMPLATE_SPECIALIZATIONS (t)
5046                         = chainon (DECL_TEMPLATE_SPECIALIZATIONS (t),
5047                                    DECL_TEMPLATE_SPECIALIZATIONS (old_decl));
5048                       DECL_TEMPLATE_SPECIALIZATIONS (old_decl) = NULL_TREE;
5049                     }
5050                 }
5051             }
5052
5053           /* The information from NEW_FRIEND has been merged into OLD_DECL
5054              by duplicate_decls.  */
5055           new_friend = old_decl;
5056         }
5057     }
5058   else if (COMPLETE_TYPE_P (DECL_CONTEXT (new_friend)))
5059     {
5060       /* Check to see that the declaration is really present, and,
5061          possibly obtain an improved declaration.  */
5062       tree fn = check_classfn (DECL_CONTEXT (new_friend),
5063                                new_friend, false);
5064       
5065       if (fn)
5066         new_friend = fn;
5067     }
5068
5069  done:
5070   input_location = saved_loc;
5071   return new_friend;
5072 }
5073
5074 /* FRIEND_TMPL is a friend TEMPLATE_DECL.  ARGS is the vector of
5075    template arguments, as for tsubst.
5076
5077    Returns an appropriate tsubst'd friend type or error_mark_node on
5078    failure.  */
5079
5080 static tree
5081 tsubst_friend_class (tree friend_tmpl, tree args)
5082 {
5083   tree friend_type;
5084   tree tmpl;
5085   tree context;
5086
5087   context = DECL_CONTEXT (friend_tmpl);
5088
5089   if (context)
5090     {
5091       if (TREE_CODE (context) == NAMESPACE_DECL)
5092         push_nested_namespace (context);
5093       else
5094         push_nested_class (tsubst (context, args, tf_none, NULL_TREE)); 
5095     }
5096
5097   /* First, we look for a class template.  */
5098   tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/0); 
5099
5100   /* But, if we don't find one, it might be because we're in a
5101      situation like this:
5102
5103        template <class T>
5104        struct S {
5105          template <class U>
5106          friend struct S;
5107        };
5108
5109      Here, in the scope of (say) S<int>, `S' is bound to a TYPE_DECL
5110      for `S<int>', not the TEMPLATE_DECL.  */
5111   if (!tmpl || !DECL_CLASS_TEMPLATE_P (tmpl))
5112     {
5113       tmpl = lookup_name (DECL_NAME (friend_tmpl), /*prefer_type=*/1);
5114       tmpl = maybe_get_template_decl_from_type_decl (tmpl);
5115     }
5116
5117   if (tmpl && DECL_CLASS_TEMPLATE_P (tmpl))
5118     {
5119       /* The friend template has already been declared.  Just
5120          check to see that the declarations match, and install any new
5121          default parameters.  We must tsubst the default parameters,
5122          of course.  We only need the innermost template parameters
5123          because that is all that redeclare_class_template will look
5124          at.  */
5125       if (TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (friend_tmpl))
5126           > TMPL_ARGS_DEPTH (args))
5127         {
5128           tree parms;
5129           parms = tsubst_template_parms (DECL_TEMPLATE_PARMS (friend_tmpl),
5130                                          args, tf_error | tf_warning);
5131           redeclare_class_template (TREE_TYPE (tmpl), parms);
5132         }
5133
5134       friend_type = TREE_TYPE (tmpl);
5135     }
5136   else
5137     {
5138       /* The friend template has not already been declared.  In this
5139          case, the instantiation of the template class will cause the
5140          injection of this template into the global scope.  */
5141       tmpl = tsubst (friend_tmpl, args, tf_error | tf_warning, NULL_TREE);
5142
5143       /* The new TMPL is not an instantiation of anything, so we
5144          forget its origins.  We don't reset CLASSTYPE_TI_TEMPLATE for
5145          the new type because that is supposed to be the corresponding
5146          template decl, i.e., TMPL.  */
5147       DECL_USE_TEMPLATE (tmpl) = 0;
5148       DECL_TEMPLATE_INFO (tmpl) = NULL_TREE;
5149       CLASSTYPE_USE_TEMPLATE (TREE_TYPE (tmpl)) = 0;
5150       CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl))
5151         = INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (TREE_TYPE (tmpl)));
5152
5153       /* Inject this template into the global scope.  */
5154       friend_type = TREE_TYPE (pushdecl_top_level (tmpl));
5155     }
5156
5157   if (context) 
5158     {
5159       if (TREE_CODE (context) == NAMESPACE_DECL)
5160         pop_nested_namespace (context);
5161       else
5162         pop_nested_class ();
5163     }
5164
5165   return friend_type;
5166 }
5167
5168 /* Returns zero if TYPE cannot be completed later due to circularity.
5169    Otherwise returns one.  */
5170
5171 static int
5172 can_complete_type_without_circularity (tree type)
5173 {
5174   if (type == NULL_TREE || type == error_mark_node)
5175     return 0;
5176   else if (COMPLETE_TYPE_P (type))
5177     return 1;
5178   else if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type))
5179     return can_complete_type_without_circularity (TREE_TYPE (type));
5180   else if (CLASS_TYPE_P (type)
5181            && TYPE_BEING_DEFINED (TYPE_MAIN_VARIANT (type)))
5182     return 0;
5183   else
5184     return 1;
5185 }
5186
5187 tree
5188 instantiate_class_template (tree type)
5189 {
5190   tree template, args, pattern, t, member;
5191   tree typedecl;
5192   tree pbinfo;
5193   
5194   if (type == error_mark_node)
5195     return error_mark_node;
5196
5197   if (TYPE_BEING_DEFINED (type) 
5198       || COMPLETE_TYPE_P (type)
5199       || dependent_type_p (type))
5200     return type;
5201
5202   /* Figure out which template is being instantiated.  */
5203   template = most_general_template (CLASSTYPE_TI_TEMPLATE (type));
5204   my_friendly_assert (TREE_CODE (template) == TEMPLATE_DECL, 279);
5205
5206   /* Figure out which arguments are being used to do the
5207      instantiation.  */
5208   args = CLASSTYPE_TI_ARGS (type);
5209
5210   /* Determine what specialization of the original template to
5211      instantiate.  */
5212   t = most_specialized_class (template, args);
5213   if (t == error_mark_node)
5214     {
5215       const char *str = "candidates are:";
5216       error ("ambiguous class template instantiation for `%#T'", type);
5217       for (t = DECL_TEMPLATE_SPECIALIZATIONS (template); t; 
5218            t = TREE_CHAIN (t))
5219         {
5220           if (get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args))
5221             {
5222               cp_error_at ("%s %+#T", str, TREE_TYPE (t));
5223               str = "               ";
5224             }
5225         }
5226       TYPE_BEING_DEFINED (type) = 1;
5227       return error_mark_node;
5228     }
5229
5230   if (t)
5231     pattern = TREE_TYPE (t);
5232   else
5233     pattern = TREE_TYPE (template);
5234
5235   /* If the template we're instantiating is incomplete, then clearly
5236      there's nothing we can do.  */
5237   if (!COMPLETE_TYPE_P (pattern))
5238     return type;
5239
5240   /* If we've recursively instantiated too many templates, stop.  */
5241   if (! push_tinst_level (type))
5242     return type;
5243
5244   /* Now we're really doing the instantiation.  Mark the type as in
5245      the process of being defined.  */
5246   TYPE_BEING_DEFINED (type) = 1;
5247
5248   /* We may be in the middle of deferred access check.  Disable
5249      it now.  */
5250   push_deferring_access_checks (dk_no_deferred);
5251
5252   maybe_push_to_top_level (uses_template_parms (type));
5253
5254   if (t)
5255     {
5256       /* This TYPE is actually an instantiation of a partial
5257          specialization.  We replace the innermost set of ARGS with
5258          the arguments appropriate for substitution.  For example,
5259          given:
5260
5261            template <class T> struct S {};
5262            template <class T> struct S<T*> {};
5263          
5264          and supposing that we are instantiating S<int*>, ARGS will
5265          present be {int*} but we need {int}.  */
5266       tree inner_args 
5267         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t),
5268                               args);
5269
5270       /* If there were multiple levels in ARGS, replacing the
5271          innermost level would alter CLASSTYPE_TI_ARGS, which we don't
5272          want, so we make a copy first.  */
5273       if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (args))
5274         {
5275           args = copy_node (args);
5276           SET_TMPL_ARGS_LEVEL (args, TMPL_ARGS_DEPTH (args), inner_args);
5277         }
5278       else
5279         args = inner_args;
5280     }
5281
5282   if (flag_external_templates)
5283     {
5284       if (flag_alt_external_templates)
5285         {
5286           CLASSTYPE_INTERFACE_ONLY (type) = interface_only;
5287           SET_CLASSTYPE_INTERFACE_UNKNOWN_X (type, interface_unknown);
5288         }
5289       else
5290         {
5291           CLASSTYPE_INTERFACE_ONLY (type) = CLASSTYPE_INTERFACE_ONLY (pattern);
5292           SET_CLASSTYPE_INTERFACE_UNKNOWN_X
5293             (type, CLASSTYPE_INTERFACE_UNKNOWN (pattern));
5294         }
5295     }
5296   else
5297     {
5298       SET_CLASSTYPE_INTERFACE_UNKNOWN (type);
5299     }
5300
5301   /* Set the input location to the template definition. This is needed
5302      if tsubsting causes an error.  */
5303   input_location = DECL_SOURCE_LOCATION (TYPE_NAME (pattern));
5304
5305   TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern);
5306   TYPE_HAS_DESTRUCTOR (type) = TYPE_HAS_DESTRUCTOR (pattern);
5307   TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern);
5308   TYPE_HAS_ARRAY_NEW_OPERATOR (type) = TYPE_HAS_ARRAY_NEW_OPERATOR (pattern);
5309   TYPE_GETS_DELETE (type) = TYPE_GETS_DELETE (pattern);
5310   TYPE_HAS_ASSIGN_REF (type) = TYPE_HAS_ASSIGN_REF (pattern);
5311   TYPE_HAS_CONST_ASSIGN_REF (type) = TYPE_HAS_CONST_ASSIGN_REF (pattern);
5312   TYPE_HAS_ABSTRACT_ASSIGN_REF (type) = TYPE_HAS_ABSTRACT_ASSIGN_REF (pattern);
5313   TYPE_HAS_INIT_REF (type) = TYPE_HAS_INIT_REF (pattern);
5314   TYPE_HAS_CONST_INIT_REF (type) = TYPE_HAS_CONST_INIT_REF (pattern);
5315   TYPE_HAS_DEFAULT_CONSTRUCTOR (type) = TYPE_HAS_DEFAULT_CONSTRUCTOR (pattern);
5316   TYPE_HAS_CONVERSION (type) = TYPE_HAS_CONVERSION (pattern);
5317   TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (type)
5318     = TYPE_BASE_CONVS_MAY_REQUIRE_CODE_P (pattern);
5319   TYPE_USES_MULTIPLE_INHERITANCE (type)
5320     = TYPE_USES_MULTIPLE_INHERITANCE (pattern);
5321   TYPE_USES_VIRTUAL_BASECLASSES (type)
5322     = TYPE_USES_VIRTUAL_BASECLASSES (pattern);
5323   TYPE_PACKED (type) = TYPE_PACKED (pattern);
5324   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
5325   TYPE_USER_ALIGN (type) = TYPE_USER_ALIGN (pattern);
5326   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
5327   if (ANON_AGGR_TYPE_P (pattern))
5328     SET_ANON_AGGR_TYPE_P (type);
5329
5330   pbinfo = TYPE_BINFO (pattern);
5331
5332 #ifdef ENABLE_CHECKING
5333   if (DECL_CLASS_SCOPE_P (TYPE_MAIN_DECL (pattern))
5334       && ! COMPLETE_TYPE_P (TYPE_CONTEXT (type))
5335       && ! TYPE_BEING_DEFINED (TYPE_CONTEXT (type)))
5336     /* We should never instantiate a nested class before its enclosing
5337        class; we need to look up the nested class by name before we can
5338        instantiate it, and that lookup should instantiate the enclosing
5339        class.  */
5340     abort ();
5341 #endif
5342
5343   if (BINFO_BASETYPES (pbinfo))
5344     {
5345       tree base_list = NULL_TREE;
5346       tree pbases = BINFO_BASETYPES (pbinfo);
5347       tree paccesses = BINFO_BASEACCESSES (pbinfo);
5348       tree context = TYPE_CONTEXT (type);
5349       int i;
5350
5351       /* We must enter the scope containing the type, as that is where
5352          the accessibility of types named in dependent bases are
5353          looked up from.  */
5354       push_scope (context ? context : global_namespace);
5355   
5356       /* Substitute into each of the bases to determine the actual
5357          basetypes.  */
5358       for (i = 0; i < TREE_VEC_LENGTH (pbases); ++i)
5359         {
5360           tree base;
5361           tree access;
5362           tree pbase;
5363
5364           pbase = TREE_VEC_ELT (pbases, i);
5365           access = TREE_VEC_ELT (paccesses, i);
5366
5367           /* Substitute to figure out the base class.  */
5368           base = tsubst (BINFO_TYPE (pbase), args, tf_error, NULL_TREE);
5369           if (base == error_mark_node)
5370             continue;
5371           
5372           base_list = tree_cons (access, base, base_list);
5373           TREE_VIA_VIRTUAL (base_list) = TREE_VIA_VIRTUAL (pbase);
5374         }
5375
5376       /* The list is now in reverse order; correct that.  */
5377       base_list = nreverse (base_list);
5378
5379       /* Now call xref_basetypes to set up all the base-class
5380          information.  */
5381       xref_basetypes (type, base_list);
5382
5383       pop_scope (context ? context : global_namespace);
5384     }
5385
5386   /* Now that our base classes are set up, enter the scope of the
5387      class, so that name lookups into base classes, etc. will work
5388      correctly.  This is precisely analogous to what we do in
5389      begin_class_definition when defining an ordinary non-template
5390      class.  */
5391   pushclass (type);
5392
5393   /* Now members are processed in the order of declaration.  */
5394   for (member = CLASSTYPE_DECL_LIST (pattern);
5395        member; member = TREE_CHAIN (member))
5396     {
5397       tree t = TREE_VALUE (member);
5398
5399       if (TREE_PURPOSE (member))
5400         {
5401           if (TYPE_P (t))
5402             {
5403               /* Build new CLASSTYPE_NESTED_UTDS.  */
5404
5405               tree tag = t;
5406               tree name = TYPE_IDENTIFIER (tag);
5407               tree newtag;
5408
5409               newtag = tsubst (tag, args, tf_error, NULL_TREE);
5410               my_friendly_assert (newtag != error_mark_node, 20010206);
5411               if (TREE_CODE (newtag) != ENUMERAL_TYPE)
5412                 {
5413                   if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
5414                     /* Unfortunately, lookup_template_class sets
5415                        CLASSTYPE_IMPLICIT_INSTANTIATION for a partial
5416                        instantiation (i.e., for the type of a member
5417                        template class nested within a template class.)
5418                        This behavior is required for
5419                        maybe_process_partial_specialization to work
5420                        correctly, but is not accurate in this case;
5421                        the TAG is not an instantiation of anything.
5422                        (The corresponding TEMPLATE_DECL is an
5423                        instantiation, but the TYPE is not.) */
5424                     CLASSTYPE_USE_TEMPLATE (newtag) = 0;
5425
5426                   /* Now, we call pushtag to put this NEWTAG into the scope of
5427                      TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
5428                      pushtag calling push_template_decl.  We don't have to do
5429                      this for enums because it will already have been done in
5430                      tsubst_enum.  */
5431                   if (name)
5432                     SET_IDENTIFIER_TYPE_VALUE (name, newtag);
5433                   pushtag (name, newtag, /*globalize=*/0);
5434                 }
5435             }
5436           else if (TREE_CODE (t) == FUNCTION_DECL 
5437                    || DECL_FUNCTION_TEMPLATE_P (t))
5438             {
5439               /* Build new TYPE_METHODS.  */
5440               tree r;
5441               
5442               if (TREE_CODE (t) == TEMPLATE_DECL)
5443                 ++processing_template_decl;
5444               r = tsubst (t, args, tf_error, NULL_TREE);
5445               if (TREE_CODE (t) == TEMPLATE_DECL)
5446                 --processing_template_decl;
5447               set_current_access_from_decl (r);
5448               grok_special_member_properties (r);
5449               finish_member_declaration (r);
5450             }
5451           else
5452             {
5453               /* Build new TYPE_FIELDS.  */
5454
5455               if (TREE_CODE (t) != CONST_DECL)
5456                 {
5457                   tree r;
5458
5459                   /* The the file and line for this declaration, to
5460                      assist in error message reporting.  Since we
5461                      called push_tinst_level above, we don't need to
5462                      restore these.  */
5463                   input_location = DECL_SOURCE_LOCATION (t);
5464
5465                   if (TREE_CODE (t) == TEMPLATE_DECL)
5466                     ++processing_template_decl;
5467                   r = tsubst (t, args, tf_error | tf_warning, NULL_TREE);
5468                   if (TREE_CODE (t) == TEMPLATE_DECL)
5469                     --processing_template_decl;
5470                   if (TREE_CODE (r) == VAR_DECL)
5471                     {
5472                       tree init;
5473
5474                       if (DECL_INITIALIZED_IN_CLASS_P (r))
5475                         init = tsubst_expr (DECL_INITIAL (t), args,
5476                                             tf_error | tf_warning, NULL_TREE);
5477                       else
5478                         init = NULL_TREE;
5479
5480                       finish_static_data_member_decl
5481                         (r, init, /*asmspec_tree=*/NULL_TREE, /*flags=*/0);
5482
5483                       if (DECL_INITIALIZED_IN_CLASS_P (r))
5484                         check_static_variable_definition (r, TREE_TYPE (r));
5485                     }
5486                   else if (TREE_CODE (r) == FIELD_DECL)
5487                     {
5488                       /* Determine whether R has a valid type and can be
5489                          completed later.  If R is invalid, then it is
5490                          replaced by error_mark_node so that it will not be
5491                          added to TYPE_FIELDS.  */
5492                       tree rtype = TREE_TYPE (r);
5493                       if (can_complete_type_without_circularity (rtype))
5494                         complete_type (rtype);
5495
5496                       if (!COMPLETE_TYPE_P (rtype))
5497                         {
5498                           cxx_incomplete_type_error (r, rtype);
5499                           r = error_mark_node;
5500                         }
5501                     }
5502
5503                   /* If it is a TYPE_DECL for a class-scoped ENUMERAL_TYPE,
5504                      such a thing will already have been added to the field
5505                      list by tsubst_enum in finish_member_declaration in the
5506                      CLASSTYPE_NESTED_UTDS case above.  */
5507                   if (!(TREE_CODE (r) == TYPE_DECL
5508                         && TREE_CODE (TREE_TYPE (r)) == ENUMERAL_TYPE
5509                         && DECL_ARTIFICIAL (r)))
5510                     {
5511                       set_current_access_from_decl (r);
5512                       finish_member_declaration (r);
5513                     }
5514                 }
5515             }
5516         }
5517       else
5518         {
5519           if (TYPE_P (t) || DECL_CLASS_TEMPLATE_P (t))
5520             {
5521               /* Build new CLASSTYPE_FRIEND_CLASSES.  */
5522
5523               tree friend_type = t;
5524               tree new_friend_type;
5525
5526               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5527                 new_friend_type = tsubst_friend_class (friend_type, args);
5528               else if (uses_template_parms (friend_type))
5529                 new_friend_type = tsubst (friend_type, args,
5530                                           tf_error | tf_warning, NULL_TREE);
5531               else if (CLASSTYPE_USE_TEMPLATE (friend_type))
5532                 new_friend_type = friend_type;
5533               else 
5534                 {
5535                   tree ns = decl_namespace_context (TYPE_MAIN_DECL (friend_type));
5536
5537                   /* The call to xref_tag_from_type does injection for friend
5538                      classes.  */
5539                   push_nested_namespace (ns);
5540                   new_friend_type = 
5541                     xref_tag_from_type (friend_type, NULL_TREE, 1);
5542                   pop_nested_namespace (ns);
5543                 }
5544
5545               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5546                 /* Trick make_friend_class into realizing that the friend
5547                    we're adding is a template, not an ordinary class.  It's
5548                    important that we use make_friend_class since it will
5549                    perform some error-checking and output cross-reference
5550                    information.  */
5551                 ++processing_template_decl;
5552
5553               if (new_friend_type != error_mark_node)
5554                 make_friend_class (type, new_friend_type,
5555                                    /*complain=*/false);
5556
5557               if (TREE_CODE (friend_type) == TEMPLATE_DECL)
5558                 --processing_template_decl;
5559             }
5560           else
5561             {
5562               /* Build new DECL_FRIENDLIST.  */
5563               tree r;
5564
5565               if (TREE_CODE (t) == TEMPLATE_DECL)
5566                 ++processing_template_decl;
5567               r = tsubst_friend_function (t, args);
5568               if (TREE_CODE (t) == TEMPLATE_DECL)
5569                 --processing_template_decl;
5570               add_friend (type, r, /*complain=*/false);
5571             }
5572         }
5573     }
5574
5575   /* Set the file and line number information to whatever is given for
5576      the class itself.  This puts error messages involving generated
5577      implicit functions at a predictable point, and the same point
5578      that would be used for non-template classes.  */
5579   typedecl = TYPE_MAIN_DECL (type);
5580   input_location = DECL_SOURCE_LOCATION (typedecl);
5581   
5582   unreverse_member_declarations (type);
5583   finish_struct_1 (type);
5584
5585   /* Clear this now so repo_template_used is happy.  */
5586   TYPE_BEING_DEFINED (type) = 0;
5587   repo_template_used (type);
5588
5589   /* Now that the class is complete, instantiate default arguments for
5590      any member functions.  We don't do this earlier because the
5591      default arguments may reference members of the class.  */
5592   if (!PRIMARY_TEMPLATE_P (template))
5593     for (t = TYPE_METHODS (type); t; t = TREE_CHAIN (t))
5594       if (TREE_CODE (t) == FUNCTION_DECL 
5595           /* Implicitly generated member functions will not have template
5596              information; they are not instantiations, but instead are
5597              created "fresh" for each instantiation.  */
5598           && DECL_TEMPLATE_INFO (t))
5599         tsubst_default_arguments (t);
5600
5601   popclass ();
5602   pop_from_top_level ();
5603   pop_deferring_access_checks ();
5604   pop_tinst_level ();
5605
5606   if (TYPE_CONTAINS_VPTR_P (type))
5607     keyed_classes = tree_cons (NULL_TREE, type, keyed_classes);
5608
5609   return type;
5610 }
5611
5612 static tree
5613 tsubst_template_arg (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5614 {
5615   tree r;
5616   
5617   if (!t)
5618     r = t;
5619   else if (TYPE_P (t))
5620     r = tsubst (t, args, complain, in_decl);
5621   else
5622     {
5623       r = tsubst_expr (t, args, complain, in_decl);
5624
5625       if (!uses_template_parms (r))
5626         {
5627           /* Sometimes, one of the args was an expression involving a
5628              template constant parameter, like N - 1.  Now that we've
5629              tsubst'd, we might have something like 2 - 1.  This will
5630              confuse lookup_template_class, so we do constant folding
5631              here.  We have to unset processing_template_decl, to fool
5632              tsubst_copy_and_build() into building an actual tree.  */
5633
5634          /* If the TREE_TYPE of ARG is not NULL_TREE, ARG is already
5635             as simple as it's going to get, and trying to reprocess
5636             the trees will break.  Once tsubst_expr et al DTRT for
5637             non-dependent exprs, this code can go away, as the type
5638             will always be set.  */
5639           if (!TREE_TYPE (r))
5640             {
5641               int saved_processing_template_decl = processing_template_decl; 
5642               processing_template_decl = 0;
5643               r = tsubst_copy_and_build (r, /*args=*/NULL_TREE,
5644                                          tf_error, /*in_decl=*/NULL_TREE,
5645                                          /*function_p=*/false);
5646               processing_template_decl = saved_processing_template_decl; 
5647             }
5648           r = fold (r);
5649         }
5650     }
5651   return r;
5652 }
5653
5654 /* Substitute ARGS into the vector or list of template arguments T.  */
5655
5656 static tree
5657 tsubst_template_args (tree t, tree args, tsubst_flags_t complain, tree in_decl)
5658 {
5659   int len = TREE_VEC_LENGTH (t);
5660   int need_new = 0, i;
5661   tree *elts = alloca (len * sizeof (tree));
5662   
5663   for (i = 0; i < len; i++)
5664     {
5665       tree orig_arg = TREE_VEC_ELT (t, i);
5666       tree new_arg;
5667
5668       if (TREE_CODE (orig_arg) == TREE_VEC)
5669         new_arg = tsubst_template_args (orig_arg, args, complain, in_decl);
5670       else
5671         new_arg = tsubst_template_arg (orig_arg, args, complain, in_decl);
5672       
5673       if (new_arg == error_mark_node)
5674         return error_mark_node;
5675
5676       elts[i] = new_arg;
5677       if (new_arg != orig_arg)
5678         need_new = 1;
5679     }
5680   
5681   if (!need_new)
5682     return t;
5683
5684   t = make_tree_vec (len);
5685   for (i = 0; i < len; i++)
5686     TREE_VEC_ELT (t, i) = elts[i];
5687   
5688   return t;
5689 }
5690
5691 /* Return the result of substituting ARGS into the template parameters
5692    given by PARMS.  If there are m levels of ARGS and m + n levels of
5693    PARMS, then the result will contain n levels of PARMS.  For
5694    example, if PARMS is `template <class T> template <class U>
5695    template <T*, U, class V>' and ARGS is {{int}, {double}} then the
5696    result will be `template <int*, double, class V>'.  */
5697
5698 static tree
5699 tsubst_template_parms (tree parms, tree args, tsubst_flags_t complain)
5700 {
5701   tree r = NULL_TREE;
5702   tree* new_parms;
5703
5704   for (new_parms = &r;
5705        TMPL_PARMS_DEPTH (parms) > TMPL_ARGS_DEPTH (args);
5706        new_parms = &(TREE_CHAIN (*new_parms)),
5707          parms = TREE_CHAIN (parms))
5708     {
5709       tree new_vec = 
5710         make_tree_vec (TREE_VEC_LENGTH (TREE_VALUE (parms)));
5711       int i;
5712       
5713       for (i = 0; i < TREE_VEC_LENGTH (new_vec); ++i)
5714         {
5715           tree tuple = TREE_VEC_ELT (TREE_VALUE (parms), i);
5716           tree default_value = TREE_PURPOSE (tuple);
5717           tree parm_decl = TREE_VALUE (tuple);
5718
5719           parm_decl = tsubst (parm_decl, args, complain, NULL_TREE);
5720           default_value = tsubst_template_arg (default_value, args,
5721                                                complain, NULL_TREE);
5722           
5723           tuple = build_tree_list (default_value, parm_decl);
5724           TREE_VEC_ELT (new_vec, i) = tuple;
5725         }
5726       
5727       *new_parms = 
5728         tree_cons (size_int (TMPL_PARMS_DEPTH (parms) 
5729                              - TMPL_ARGS_DEPTH (args)),
5730                    new_vec, NULL_TREE);
5731     }
5732
5733   return r;
5734 }
5735
5736 /* Substitute the ARGS into the indicated aggregate (or enumeration)
5737    type T.  If T is not an aggregate or enumeration type, it is
5738    handled as if by tsubst.  IN_DECL is as for tsubst.  If
5739    ENTERING_SCOPE is nonzero, T is the context for a template which
5740    we are presently tsubst'ing.  Return the substituted value.  */
5741
5742 static tree
5743 tsubst_aggr_type (tree t, 
5744                   tree args, 
5745                   tsubst_flags_t complain, 
5746                   tree in_decl, 
5747                   int entering_scope)
5748 {
5749   if (t == NULL_TREE)
5750     return NULL_TREE;
5751
5752   switch (TREE_CODE (t))
5753     {
5754     case RECORD_TYPE:
5755       if (TYPE_PTRMEMFUNC_P (t))
5756         return tsubst (TYPE_PTRMEMFUNC_FN_TYPE (t), args, complain, in_decl);
5757
5758       /* else fall through */
5759     case ENUMERAL_TYPE:
5760     case UNION_TYPE:
5761       if (TYPE_TEMPLATE_INFO (t))
5762         {
5763           tree argvec;
5764           tree context;
5765           tree r;
5766
5767           /* First, determine the context for the type we are looking
5768              up.  */
5769           context = TYPE_CONTEXT (t);
5770           if (context)
5771             context = tsubst_aggr_type (context, args, complain,
5772                                         in_decl, /*entering_scope=*/1);
5773
5774           /* Then, figure out what arguments are appropriate for the
5775              type we are trying to find.  For example, given:
5776
5777                template <class T> struct S;
5778                template <class T, class U> void f(T, U) { S<U> su; }
5779
5780              and supposing that we are instantiating f<int, double>,
5781              then our ARGS will be {int, double}, but, when looking up
5782              S we only want {double}.  */
5783           argvec = tsubst_template_args (TYPE_TI_ARGS (t), args,
5784                                          complain, in_decl);
5785           if (argvec == error_mark_node)
5786             return error_mark_node;
5787
5788           r = lookup_template_class (t, argvec, in_decl, context,
5789                                      entering_scope, complain);
5790
5791           return cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
5792         }
5793       else 
5794         /* This is not a template type, so there's nothing to do.  */
5795         return t;
5796
5797     default:
5798       return tsubst (t, args, complain, in_decl);
5799     }
5800 }
5801
5802 /* Substitute into the default argument ARG (a default argument for
5803    FN), which has the indicated TYPE.  */
5804
5805 tree
5806 tsubst_default_argument (tree fn, tree type, tree arg)
5807 {
5808   /* This default argument came from a template.  Instantiate the
5809      default argument here, not in tsubst.  In the case of
5810      something like: 
5811      
5812        template <class T>
5813        struct S {
5814          static T t();
5815          void f(T = t());
5816        };
5817      
5818      we must be careful to do name lookup in the scope of S<T>,
5819      rather than in the current class.
5820
5821      ??? current_class_type affects a lot more than name lookup.  This is
5822      very fragile.  Fortunately, it will go away when we do 2-phase name
5823      binding properly.  */
5824
5825   /* FN is already the desired FUNCTION_DECL.  */
5826   push_access_scope (fn);
5827
5828   arg = tsubst_expr (arg, DECL_TI_ARGS (fn),
5829                      tf_error | tf_warning, NULL_TREE);
5830   
5831   pop_access_scope (fn);
5832
5833   /* Make sure the default argument is reasonable.  */
5834   arg = check_default_argument (type, arg);
5835
5836   return arg;
5837 }
5838
5839 /* Substitute into all the default arguments for FN.  */
5840
5841 static void
5842 tsubst_default_arguments (tree fn)
5843 {
5844   tree arg;
5845   tree tmpl_args;
5846
5847   tmpl_args = DECL_TI_ARGS (fn);
5848
5849   /* If this function is not yet instantiated, we certainly don't need
5850      its default arguments.  */
5851   if (uses_template_parms (tmpl_args))
5852     return;
5853
5854   for (arg = TYPE_ARG_TYPES (TREE_TYPE (fn)); 
5855        arg; 
5856        arg = TREE_CHAIN (arg))
5857     if (TREE_PURPOSE (arg))
5858       TREE_PURPOSE (arg) = tsubst_default_argument (fn, 
5859                                                     TREE_VALUE (arg),
5860                                                     TREE_PURPOSE (arg));
5861 }
5862
5863 /* Substitute the ARGS into the T, which is a _DECL.  TYPE is the
5864    (already computed) substitution of ARGS into TREE_TYPE (T), if
5865    appropriate.  Return the result of the substitution.  Issue error
5866    and warning messages under control of COMPLAIN.  */
5867
5868 static tree
5869 tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain)
5870 {
5871   location_t saved_loc;
5872   tree r = NULL_TREE;
5873   tree in_decl = t;
5874
5875   /* Set the filename and linenumber to improve error-reporting.  */
5876   saved_loc = input_location;
5877   input_location = DECL_SOURCE_LOCATION (t);
5878
5879   switch (TREE_CODE (t))
5880     {
5881     case TEMPLATE_DECL:
5882       {
5883         /* We can get here when processing a member template function
5884            of a template class.  */
5885         tree decl = DECL_TEMPLATE_RESULT (t);
5886         tree spec;
5887         int is_template_template_parm = DECL_TEMPLATE_TEMPLATE_PARM_P (t);
5888
5889         if (!is_template_template_parm)
5890           {
5891             /* We might already have an instance of this template.
5892                The ARGS are for the surrounding class type, so the
5893                full args contain the tsubst'd args for the context,
5894                plus the innermost args from the template decl.  */
5895             tree tmpl_args = DECL_CLASS_TEMPLATE_P (t) 
5896               ? CLASSTYPE_TI_ARGS (TREE_TYPE (t))
5897               : DECL_TI_ARGS (DECL_TEMPLATE_RESULT (t));
5898             tree full_args;
5899             
5900             full_args = tsubst_template_args (tmpl_args, args,
5901                                               complain, in_decl);
5902
5903             /* tsubst_template_args doesn't copy the vector if
5904                nothing changed.  But, *something* should have
5905                changed.  */
5906             my_friendly_assert (full_args != tmpl_args, 0);
5907
5908             spec = retrieve_specialization (t, full_args);
5909             if (spec != NULL_TREE)
5910               {
5911                 r = spec;
5912                 break;
5913               }
5914           }
5915
5916         /* Make a new template decl.  It will be similar to the
5917            original, but will record the current template arguments. 
5918            We also create a new function declaration, which is just
5919            like the old one, but points to this new template, rather
5920            than the old one.  */
5921         r = copy_decl (t);
5922         my_friendly_assert (DECL_LANG_SPECIFIC (r) != 0, 0);
5923         TREE_CHAIN (r) = NULL_TREE;
5924
5925         if (is_template_template_parm)
5926           {
5927             tree new_decl = tsubst (decl, args, complain, in_decl);
5928             DECL_TEMPLATE_RESULT (r) = new_decl;
5929             TREE_TYPE (r) = TREE_TYPE (new_decl);
5930             break;
5931           }
5932
5933         DECL_CONTEXT (r) 
5934           = tsubst_aggr_type (DECL_CONTEXT (t), args, 
5935                               complain, in_decl, 
5936                               /*entering_scope=*/1); 
5937         DECL_TEMPLATE_INFO (r) = build_tree_list (t, args);
5938
5939         if (TREE_CODE (decl) == TYPE_DECL)
5940           {
5941             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
5942             TREE_TYPE (r) = new_type;
5943             CLASSTYPE_TI_TEMPLATE (new_type) = r;
5944             DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
5945             DECL_TI_ARGS (r) = CLASSTYPE_TI_ARGS (new_type);
5946           }
5947         else
5948           {
5949             tree new_decl = tsubst (decl, args, complain, in_decl);
5950             if (new_decl == error_mark_node)
5951               return error_mark_node;
5952
5953             DECL_TEMPLATE_RESULT (r) = new_decl;
5954             DECL_TI_TEMPLATE (new_decl) = r;
5955             TREE_TYPE (r) = TREE_TYPE (new_decl);
5956             DECL_TI_ARGS (r) = DECL_TI_ARGS (new_decl);
5957           }
5958
5959         SET_DECL_IMPLICIT_INSTANTIATION (r);
5960         DECL_TEMPLATE_INSTANTIATIONS (r) = NULL_TREE;
5961         DECL_TEMPLATE_SPECIALIZATIONS (r) = NULL_TREE;
5962
5963         /* The template parameters for this new template are all the
5964            template parameters for the old template, except the
5965            outermost level of parameters.  */
5966         DECL_TEMPLATE_PARMS (r) 
5967           = tsubst_template_parms (DECL_TEMPLATE_PARMS (t), args,
5968                                    complain);
5969
5970         if (PRIMARY_TEMPLATE_P (t))
5971           DECL_PRIMARY_TEMPLATE (r) = r;
5972
5973         if (TREE_CODE (decl) != TYPE_DECL)
5974           /* Record this non-type partial instantiation.  */
5975           register_specialization (r, t, 
5976                                    DECL_TI_ARGS (DECL_TEMPLATE_RESULT (r)));
5977       }
5978       break;
5979
5980     case FUNCTION_DECL:
5981       {
5982         tree ctx;
5983         tree argvec = NULL_TREE;
5984         tree *friends;
5985         tree gen_tmpl;
5986         int member;
5987         int args_depth;
5988         int parms_depth;
5989
5990         /* Nobody should be tsubst'ing into non-template functions.  */
5991         my_friendly_assert (DECL_TEMPLATE_INFO (t) != NULL_TREE, 0);
5992
5993         if (TREE_CODE (DECL_TI_TEMPLATE (t)) == TEMPLATE_DECL)
5994           {
5995             tree spec;
5996             bool dependent_p;
5997
5998             /* If T is not dependent, just return it.  We have to
5999                increment PROCESSING_TEMPLATE_DECL because
6000                value_dependent_expression_p assumes that nothing is
6001                dependent when PROCESSING_TEMPLATE_DECL is zero.  */
6002             ++processing_template_decl;
6003             dependent_p = value_dependent_expression_p (t);
6004             --processing_template_decl;
6005             if (!dependent_p)
6006               return t;
6007
6008             /* Calculate the most general template of which R is a
6009                specialization, and the complete set of arguments used to
6010                specialize R.  */
6011             gen_tmpl = most_general_template (DECL_TI_TEMPLATE (t));
6012             argvec = tsubst_template_args (DECL_TI_ARGS 
6013                                            (DECL_TEMPLATE_RESULT (gen_tmpl)),
6014                                            args, complain, in_decl); 
6015
6016             /* Check to see if we already have this specialization.  */
6017             spec = retrieve_specialization (gen_tmpl, argvec);
6018
6019             if (spec)
6020               {
6021                 r = spec;
6022                 break;
6023               }
6024
6025             /* We can see more levels of arguments than parameters if
6026                there was a specialization of a member template, like
6027                this:
6028
6029                  template <class T> struct S { template <class U> void f(); }
6030                  template <> template <class U> void S<int>::f(U); 
6031
6032                Here, we'll be substituting into the specialization,
6033                because that's where we can find the code we actually
6034                want to generate, but we'll have enough arguments for
6035                the most general template.              
6036
6037                We also deal with the peculiar case:
6038
6039                  template <class T> struct S { 
6040                    template <class U> friend void f();
6041                  };
6042                  template <class U> void f() {}
6043                  template S<int>;
6044                  template void f<double>();
6045
6046                Here, the ARGS for the instantiation of will be {int,
6047                double}.  But, we only need as many ARGS as there are
6048                levels of template parameters in CODE_PATTERN.  We are
6049                careful not to get fooled into reducing the ARGS in
6050                situations like:
6051
6052                  template <class T> struct S { template <class U> void f(U); }
6053                  template <class T> template <> void S<T>::f(int) {}
6054
6055                which we can spot because the pattern will be a
6056                specialization in this case.  */
6057             args_depth = TMPL_ARGS_DEPTH (args);
6058             parms_depth = 
6059               TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (DECL_TI_TEMPLATE (t))); 
6060             if (args_depth > parms_depth
6061                 && !DECL_TEMPLATE_SPECIALIZATION (t))
6062               args = get_innermost_template_args (args, parms_depth);
6063           }
6064         else
6065           {
6066             /* This special case arises when we have something like this:
6067
6068                  template <class T> struct S { 
6069                    friend void f<int>(int, double); 
6070                  };
6071
6072                Here, the DECL_TI_TEMPLATE for the friend declaration
6073                will be an IDENTIFIER_NODE.  We are being called from
6074                tsubst_friend_function, and we want only to create a
6075                new decl (R) with appropriate types so that we can call
6076                determine_specialization.  */
6077             gen_tmpl = NULL_TREE;
6078           }
6079
6080         if (DECL_CLASS_SCOPE_P (t))
6081           {
6082             if (DECL_NAME (t) == constructor_name (DECL_CONTEXT (t)))
6083               member = 2;
6084             else
6085               member = 1;
6086             ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, 
6087                                     complain, t, /*entering_scope=*/1);
6088           }
6089         else
6090           {
6091             member = 0;
6092             ctx = DECL_CONTEXT (t);
6093           }
6094         type = tsubst (type, args, complain, in_decl);
6095         if (type == error_mark_node)
6096           return error_mark_node;
6097
6098         /* We do NOT check for matching decls pushed separately at this
6099            point, as they may not represent instantiations of this
6100            template, and in any case are considered separate under the
6101            discrete model.  */
6102         r = copy_decl (t);
6103         DECL_USE_TEMPLATE (r) = 0;
6104         TREE_TYPE (r) = type;
6105         /* Clear out the mangled name and RTL for the instantiation.  */
6106         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6107         SET_DECL_RTL (r, NULL_RTX);
6108
6109         DECL_CONTEXT (r) = ctx;
6110
6111         if (member && DECL_CONV_FN_P (r)) 
6112           /* Type-conversion operator.  Reconstruct the name, in
6113              case it's the name of one of the template's parameters.  */
6114           DECL_NAME (r) = mangle_conv_op_name_for_type (TREE_TYPE (type));
6115
6116         DECL_ARGUMENTS (r) = tsubst (DECL_ARGUMENTS (t), args,
6117                                      complain, t);
6118         DECL_RESULT (r) = NULL_TREE;
6119
6120         TREE_STATIC (r) = 0;
6121         TREE_PUBLIC (r) = TREE_PUBLIC (t);
6122         DECL_EXTERNAL (r) = 1;
6123         DECL_INTERFACE_KNOWN (r) = 0;
6124         DECL_DEFER_OUTPUT (r) = 0;
6125         TREE_CHAIN (r) = NULL_TREE;
6126         DECL_PENDING_INLINE_INFO (r) = 0;
6127         DECL_PENDING_INLINE_P (r) = 0;
6128         DECL_SAVED_TREE (r) = NULL_TREE;
6129         TREE_USED (r) = 0;
6130         if (DECL_CLONED_FUNCTION (r))
6131           {
6132             DECL_CLONED_FUNCTION (r) = tsubst (DECL_CLONED_FUNCTION (t),
6133                                                args, complain, t);
6134             TREE_CHAIN (r) = TREE_CHAIN (DECL_CLONED_FUNCTION (r));
6135             TREE_CHAIN (DECL_CLONED_FUNCTION (r)) = r;
6136           }
6137
6138         /* Set up the DECL_TEMPLATE_INFO for R.  There's no need to do
6139            this in the special friend case mentioned above where
6140            GEN_TMPL is NULL.  */
6141         if (gen_tmpl)
6142           {
6143             DECL_TEMPLATE_INFO (r) 
6144               = tree_cons (gen_tmpl, argvec, NULL_TREE);
6145             SET_DECL_IMPLICIT_INSTANTIATION (r);
6146             register_specialization (r, gen_tmpl, argvec);
6147
6148             /* We're not supposed to instantiate default arguments
6149                until they are called, for a template.  But, for a
6150                declaration like:
6151
6152                  template <class T> void f () 
6153                  { extern void g(int i = T()); }
6154                  
6155                we should do the substitution when the template is
6156                instantiated.  We handle the member function case in
6157                instantiate_class_template since the default arguments
6158                might refer to other members of the class.  */
6159             if (!member
6160                 && !PRIMARY_TEMPLATE_P (gen_tmpl)
6161                 && !uses_template_parms (argvec))
6162               tsubst_default_arguments (r);
6163           }
6164
6165         /* Copy the list of befriending classes.  */
6166         for (friends = &DECL_BEFRIENDING_CLASSES (r);
6167              *friends;
6168              friends = &TREE_CHAIN (*friends)) 
6169           {
6170             *friends = copy_node (*friends);
6171             TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
6172                                             args, complain,
6173                                             in_decl);
6174           }
6175
6176         if (DECL_CONSTRUCTOR_P (r) || DECL_DESTRUCTOR_P (r))
6177           {
6178             maybe_retrofit_in_chrg (r);
6179             if (DECL_CONSTRUCTOR_P (r))
6180               grok_ctor_properties (ctx, r);
6181             /* If this is an instantiation of a member template, clone it.
6182                If it isn't, that'll be handled by
6183                clone_constructors_and_destructors.  */
6184             if (PRIMARY_TEMPLATE_P (gen_tmpl))
6185               clone_function_decl (r, /*update_method_vec_p=*/0);
6186           }
6187         else if (IDENTIFIER_OPNAME_P (DECL_NAME (r)))
6188           grok_op_properties (r, DECL_FRIEND_P (r),
6189                               (complain & tf_error) != 0);
6190       }
6191       break;
6192
6193     case PARM_DECL:
6194       {
6195         r = copy_node (t);
6196         if (DECL_TEMPLATE_PARM_P (t))
6197           SET_DECL_TEMPLATE_PARM_P (r);
6198
6199         TREE_TYPE (r) = type;
6200         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6201
6202         if (DECL_INITIAL (r))
6203           {
6204             if (TREE_CODE (DECL_INITIAL (r)) != TEMPLATE_PARM_INDEX)
6205               DECL_INITIAL (r) = TREE_TYPE (r);
6206             else
6207               DECL_INITIAL (r) = tsubst (DECL_INITIAL (r), args,
6208                                          complain, in_decl);
6209           }
6210
6211         DECL_CONTEXT (r) = NULL_TREE;
6212
6213         if (!DECL_TEMPLATE_PARM_P (r))
6214           DECL_ARG_TYPE (r) = type_passed_as (type);
6215         if (TREE_CHAIN (t))
6216           TREE_CHAIN (r) = tsubst (TREE_CHAIN (t), args,
6217                                    complain, TREE_CHAIN (t));
6218       }
6219       break;
6220
6221     case FIELD_DECL:
6222       {
6223         r = copy_decl (t);
6224         TREE_TYPE (r) = type;
6225         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6226
6227         /* We don't have to set DECL_CONTEXT here; it is set by
6228            finish_member_declaration.  */
6229         DECL_INITIAL (r) = tsubst_expr (DECL_INITIAL (t), args,
6230                                         complain, in_decl);
6231         TREE_CHAIN (r) = NULL_TREE;
6232         if (VOID_TYPE_P (type)) 
6233           cp_error_at ("instantiation of `%D' as type `%T'", r, type);
6234       }
6235       break;
6236
6237     case USING_DECL:
6238       {
6239         r = copy_node (t);
6240         /* It is not a dependent using decl any more.  */
6241         TREE_TYPE (r) = void_type_node;
6242         DECL_INITIAL (r)
6243           = tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
6244         DECL_NAME (r)
6245           = tsubst_copy (DECL_NAME (t), args, complain, in_decl);
6246         TREE_CHAIN (r) = NULL_TREE;
6247       }
6248       break;
6249
6250     case TYPE_DECL:
6251       if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM
6252           || t == TYPE_MAIN_DECL (TREE_TYPE (t)))
6253         {
6254           /* If this is the canonical decl, we don't have to mess with
6255              instantiations, and often we can't (for typename, template
6256              type parms and such).  Note that TYPE_NAME is not correct for
6257              the above test if we've copied the type for a typedef.  */
6258           r = TYPE_NAME (type);
6259           break;
6260         }
6261
6262       /* Fall through.  */
6263
6264     case VAR_DECL:
6265       {
6266         tree argvec = NULL_TREE;
6267         tree gen_tmpl = NULL_TREE;
6268         tree spec;
6269         tree tmpl = NULL_TREE;
6270         tree ctx;
6271         int local_p;
6272
6273         /* Assume this is a non-local variable.  */
6274         local_p = 0;
6275
6276         if (TYPE_P (CP_DECL_CONTEXT (t)))
6277           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, 
6278                                   complain,
6279                                   in_decl, /*entering_scope=*/1);
6280         else if (DECL_NAMESPACE_SCOPE_P (t))
6281           ctx = DECL_CONTEXT (t);
6282         else
6283           {
6284             /* Subsequent calls to pushdecl will fill this in.  */
6285             ctx = NULL_TREE;
6286             local_p = 1;
6287           }
6288
6289         /* Check to see if we already have this specialization.  */
6290         if (!local_p)
6291           {
6292             tmpl = DECL_TI_TEMPLATE (t);
6293             gen_tmpl = most_general_template (tmpl);
6294             argvec = tsubst (DECL_TI_ARGS (t), args, complain, in_decl);
6295             spec = retrieve_specialization (gen_tmpl, argvec);
6296           }
6297         else
6298           spec = retrieve_local_specialization (t);
6299
6300         if (spec)
6301           {
6302             r = spec;
6303             break;
6304           }
6305
6306         r = copy_decl (t);
6307         if (TREE_CODE (r) == VAR_DECL)
6308           {
6309             type = complete_type (type);
6310             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
6311               = DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t);
6312           }
6313         else if (DECL_SELF_REFERENCE_P (t))
6314           SET_DECL_SELF_REFERENCE_P (r);
6315         TREE_TYPE (r) = type;
6316         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6317         DECL_CONTEXT (r) = ctx;
6318         /* Clear out the mangled name and RTL for the instantiation.  */
6319         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6320         SET_DECL_RTL (r, NULL_RTX);
6321
6322         /* Don't try to expand the initializer until someone tries to use
6323            this variable; otherwise we run into circular dependencies.  */
6324         DECL_INITIAL (r) = NULL_TREE;
6325         SET_DECL_RTL (r, NULL_RTX);
6326         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6327
6328         /* Even if the original location is out of scope, the newly
6329            substituted one is not.  */
6330         if (TREE_CODE (r) == VAR_DECL)
6331           {
6332             DECL_DEAD_FOR_LOCAL (r) = 0;
6333             DECL_INITIALIZED_P (r) = 0;
6334           }
6335
6336         if (!local_p)
6337           {
6338             /* A static data member declaration is always marked
6339                external when it is declared in-class, even if an
6340                initializer is present.  We mimic the non-template
6341                processing here.  */
6342             DECL_EXTERNAL (r) = 1;
6343
6344             register_specialization (r, gen_tmpl, argvec);
6345             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6346             SET_DECL_IMPLICIT_INSTANTIATION (r);
6347           }
6348         else
6349           register_local_specialization (r, t);
6350
6351         TREE_CHAIN (r) = NULL_TREE;
6352         if (TREE_CODE (r) == VAR_DECL && VOID_TYPE_P (type))
6353           cp_error_at ("instantiation of `%D' as type `%T'", r, type);
6354         /* Compute the size, alignment, etc. of R.  */
6355         layout_decl (r, 0);
6356       }
6357       break;
6358
6359     default:
6360       abort ();
6361     } 
6362
6363   /* Restore the file and line information.  */
6364   input_location = saved_loc;
6365
6366   return r;
6367 }
6368
6369 /* Substitute into the ARG_TYPES of a function type.  */
6370
6371 static tree
6372 tsubst_arg_types (tree arg_types, 
6373                   tree args, 
6374                   tsubst_flags_t complain, 
6375                   tree in_decl)
6376 {
6377   tree remaining_arg_types;
6378   tree type;
6379
6380   if (!arg_types || arg_types == void_list_node)
6381     return arg_types;
6382   
6383   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6384                                           args, complain, in_decl);
6385   if (remaining_arg_types == error_mark_node)
6386     return error_mark_node;
6387
6388   type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6389   if (type == error_mark_node)
6390     return error_mark_node;
6391   if (VOID_TYPE_P (type))
6392     {
6393       if (complain & tf_error)
6394         {
6395           error ("invalid parameter type `%T'", type);
6396           if (in_decl)
6397             cp_error_at ("in declaration `%D'", in_decl);
6398         }
6399       return error_mark_node;
6400     }
6401
6402   /* Do array-to-pointer, function-to-pointer conversion, and ignore
6403      top-level qualifiers as required.  */
6404   type = TYPE_MAIN_VARIANT (type_decays_to (type));
6405
6406   /* Note that we do not substitute into default arguments here.  The
6407      standard mandates that they be instantiated only when needed,
6408      which is done in build_over_call.  */
6409   return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6410                          remaining_arg_types);
6411                          
6412 }
6413
6414 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
6415    *not* handle the exception-specification for FNTYPE, because the
6416    initial substitution of explicitly provided template parameters
6417    during argument deduction forbids substitution into the
6418    exception-specification:
6419
6420      [temp.deduct]
6421
6422      All references in the function type of the function template to  the
6423      corresponding template parameters are replaced by the specified tem-
6424      plate argument values.  If a substitution in a template parameter or
6425      in  the function type of the function template results in an invalid
6426      type, type deduction fails.  [Note: The equivalent  substitution  in
6427      exception specifications is done only when the function is instanti-
6428      ated, at which point a program is  ill-formed  if  the  substitution
6429      results in an invalid type.]  */
6430
6431 static tree
6432 tsubst_function_type (tree t, 
6433                       tree args, 
6434                       tsubst_flags_t complain, 
6435                       tree in_decl)
6436 {
6437   tree return_type;
6438   tree arg_types;
6439   tree fntype;
6440
6441   /* The TYPE_CONTEXT is not used for function/method types.  */
6442   my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
6443
6444   /* Substitute the return type.  */
6445   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6446   if (return_type == error_mark_node)
6447     return error_mark_node;
6448
6449   /* Substitute the argument types.  */
6450   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6451                                 complain, in_decl); 
6452   if (arg_types == error_mark_node)
6453     return error_mark_node;
6454   
6455   /* Construct a new type node and return it.  */
6456   if (TREE_CODE (t) == FUNCTION_TYPE)
6457     fntype = build_function_type (return_type, arg_types);
6458   else
6459     {
6460       tree r = TREE_TYPE (TREE_VALUE (arg_types));
6461       if (! IS_AGGR_TYPE (r))
6462         {
6463           /* [temp.deduct]
6464              
6465              Type deduction may fail for any of the following
6466              reasons:
6467              
6468              -- Attempting to create "pointer to member of T" when T
6469              is not a class type.  */
6470           if (complain & tf_error)
6471             error ("creating pointer to member function of non-class type `%T'",
6472                       r);
6473           return error_mark_node;
6474         }
6475       
6476       fntype = build_method_type_directly (r, return_type, 
6477                                            TREE_CHAIN (arg_types));
6478     }
6479   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6480   fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6481   
6482   return fntype;  
6483 }
6484
6485 /* Substitute into the PARMS of a call-declarator.  */
6486
6487 static tree
6488 tsubst_call_declarator_parms (tree parms, 
6489                               tree args, 
6490                               tsubst_flags_t complain, 
6491                               tree in_decl)
6492 {
6493   tree new_parms;
6494   tree type;
6495   tree defarg;
6496
6497   if (!parms || parms == void_list_node)
6498     return parms;
6499   
6500   new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6501                                             args, complain, in_decl);
6502
6503   /* Figure out the type of this parameter.  */
6504   type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6505   
6506   /* Figure out the default argument as well.  Note that we use
6507      tsubst_expr since the default argument is really an expression.  */
6508   defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6509
6510   /* Chain this parameter on to the front of those we have already
6511      processed.  We don't use hash_tree_cons because that function
6512      doesn't check TREE_PARMLIST.  */
6513   new_parms = tree_cons (defarg, type, new_parms);
6514
6515   /* And note that these are parameters.  */
6516   TREE_PARMLIST (new_parms) = 1;
6517   
6518   return new_parms;
6519 }
6520
6521 /* Take the tree structure T and replace template parameters used
6522    therein with the argument vector ARGS.  IN_DECL is an associated
6523    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
6524    Issue error and warning messages under control of COMPLAIN.  Note
6525    that we must be relatively non-tolerant of extensions here, in
6526    order to preserve conformance; if we allow substitutions that
6527    should not be allowed, we may allow argument deductions that should
6528    not succeed, and therefore report ambiguous overload situations
6529    where there are none.  In theory, we could allow the substitution,
6530    but indicate that it should have failed, and allow our caller to
6531    make sure that the right thing happens, but we don't try to do this
6532    yet.
6533
6534    This function is used for dealing with types, decls and the like;
6535    for expressions, use tsubst_expr or tsubst_copy.  */
6536
6537 static tree
6538 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6539 {
6540   tree type, r;
6541
6542   if (t == NULL_TREE || t == error_mark_node
6543       || t == integer_type_node
6544       || t == void_type_node
6545       || t == char_type_node
6546       || TREE_CODE (t) == NAMESPACE_DECL)
6547     return t;
6548
6549   if (TREE_CODE (t) == IDENTIFIER_NODE)
6550     type = IDENTIFIER_TYPE_VALUE (t);
6551   else
6552     type = TREE_TYPE (t);
6553
6554   my_friendly_assert (type != unknown_type_node, 20030716);
6555
6556   if (type && TREE_CODE (t) != FUNCTION_DECL
6557       && TREE_CODE (t) != TYPENAME_TYPE
6558       && TREE_CODE (t) != TEMPLATE_DECL
6559       && TREE_CODE (t) != IDENTIFIER_NODE
6560       && TREE_CODE (t) != FUNCTION_TYPE
6561       && TREE_CODE (t) != METHOD_TYPE)
6562     type = tsubst (type, args, complain, in_decl);
6563   if (type == error_mark_node)
6564     return error_mark_node;
6565
6566   if (DECL_P (t))
6567     return tsubst_decl (t, args, type, complain);
6568
6569   switch (TREE_CODE (t))
6570     {
6571     case RECORD_TYPE:
6572     case UNION_TYPE:
6573     case ENUMERAL_TYPE:
6574       return tsubst_aggr_type (t, args, complain, in_decl,
6575                                /*entering_scope=*/0);
6576
6577     case ERROR_MARK:
6578     case IDENTIFIER_NODE:
6579     case VOID_TYPE:
6580     case REAL_TYPE:
6581     case COMPLEX_TYPE:
6582     case VECTOR_TYPE:
6583     case BOOLEAN_TYPE:
6584     case INTEGER_CST:
6585     case REAL_CST:
6586     case STRING_CST:
6587       return t;
6588
6589     case INTEGER_TYPE:
6590       if (t == integer_type_node)
6591         return t;
6592
6593       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6594           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6595         return t;
6596
6597       {
6598         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
6599
6600         /* The array dimension behaves like a non-type template arg,
6601            in that we want to fold it as much as possible.  */
6602         max = tsubst_template_arg (omax, args, complain, in_decl);
6603         if (!processing_template_decl)
6604           max = decl_constant_value (max);
6605
6606         if (processing_template_decl 
6607             /* When providing explicit arguments to a template
6608                function, but leaving some arguments for subsequent
6609                deduction, MAX may be template-dependent even if we're
6610                not PROCESSING_TEMPLATE_DECL.  We still need to check for
6611                template parms, though; MAX won't be an INTEGER_CST for
6612                dynamic arrays, either.  */
6613             || (TREE_CODE (max) != INTEGER_CST
6614                 && uses_template_parms (max)))
6615           {
6616             tree itype = make_node (INTEGER_TYPE);
6617             TYPE_MIN_VALUE (itype) = size_zero_node;
6618             TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max,
6619                                                 integer_one_node);
6620             return itype;
6621           }
6622
6623         if (integer_zerop (omax))
6624           {
6625             /* Still allow an explicit array of size zero.  */
6626             if (pedantic)
6627               pedwarn ("creating array with size zero");
6628           }
6629         else if (integer_zerop (max) 
6630                  || (TREE_CODE (max) == INTEGER_CST 
6631                      && INT_CST_LT (max, integer_zero_node)))
6632           {
6633             /* [temp.deduct]
6634
6635                Type deduction may fail for any of the following
6636                reasons:  
6637
6638                  Attempting to create an array with a size that is
6639                  zero or negative.  */
6640             if (complain & tf_error)
6641               error ("creating array with size zero (`%E')", max);
6642
6643             return error_mark_node;
6644           }
6645
6646         return compute_array_index_type (NULL_TREE, max);
6647       }
6648
6649     case TEMPLATE_TYPE_PARM:
6650     case TEMPLATE_TEMPLATE_PARM:
6651     case BOUND_TEMPLATE_TEMPLATE_PARM:
6652     case TEMPLATE_PARM_INDEX:
6653       {
6654         int idx;
6655         int level;
6656         int levels;
6657
6658         r = NULL_TREE;
6659
6660         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6661             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
6662             || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6663           {
6664             idx = TEMPLATE_TYPE_IDX (t);
6665             level = TEMPLATE_TYPE_LEVEL (t);
6666           }
6667         else
6668           {
6669             idx = TEMPLATE_PARM_IDX (t);
6670             level = TEMPLATE_PARM_LEVEL (t);
6671           }
6672
6673         if (TREE_VEC_LENGTH (args) > 0)
6674           {
6675             tree arg = NULL_TREE;
6676
6677             levels = TMPL_ARGS_DEPTH (args);
6678             if (level <= levels)
6679               arg = TMPL_ARG (args, level, idx);
6680
6681             if (arg == error_mark_node)
6682               return error_mark_node;
6683             else if (arg != NULL_TREE)
6684               {
6685                 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6686                   {
6687                     my_friendly_assert (TYPE_P (arg), 0);
6688                     return cp_build_qualified_type_real
6689                       (arg, cp_type_quals (arg) | cp_type_quals (t),
6690                        complain | tf_ignore_bad_quals);
6691                   }
6692                 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6693                   {
6694                     /* We are processing a type constructed from
6695                        a template template parameter */
6696                     tree argvec = tsubst (TYPE_TI_ARGS (t),
6697                                           args, complain, in_decl);
6698                     if (argvec == error_mark_node)
6699                       return error_mark_node;
6700                         
6701                     /* We can get a TEMPLATE_TEMPLATE_PARM here when 
6702                        we are resolving nested-types in the signature of 
6703                        a member function templates.
6704                        Otherwise ARG is a TEMPLATE_DECL and is the real 
6705                        template to be instantiated.  */
6706                     if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6707                       arg = TYPE_NAME (arg);
6708
6709                     r = lookup_template_class (arg, 
6710                                                argvec, in_decl, 
6711                                                DECL_CONTEXT (arg),
6712                                                /*entering_scope=*/0,
6713                                                complain);
6714                     return cp_build_qualified_type_real
6715                       (r, TYPE_QUALS (t), complain);
6716                   }
6717                 else
6718                   /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
6719                   return arg;
6720               }
6721           }
6722         else
6723           abort ();
6724
6725         if (level == 1)
6726           /* This can happen during the attempted tsubst'ing in
6727              unify.  This means that we don't yet have any information
6728              about the template parameter in question.  */
6729           return t;
6730
6731         /* If we get here, we must have been looking at a parm for a
6732            more deeply nested template.  Make a new version of this
6733            template parameter, but with a lower level.  */
6734         switch (TREE_CODE (t))
6735           {
6736           case TEMPLATE_TYPE_PARM:
6737           case TEMPLATE_TEMPLATE_PARM:
6738           case BOUND_TEMPLATE_TEMPLATE_PARM:
6739             if (cp_type_quals (t))
6740               {
6741                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
6742                 r = cp_build_qualified_type_real
6743                   (r, cp_type_quals (t),
6744                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6745                                ? tf_ignore_bad_quals : 0));
6746               }
6747             else
6748               {
6749                 r = copy_type (t);
6750                 TEMPLATE_TYPE_PARM_INDEX (r)
6751                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6752                                                 r, levels);
6753                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6754                 TYPE_MAIN_VARIANT (r) = r;
6755                 TYPE_POINTER_TO (r) = NULL_TREE;
6756                 TYPE_REFERENCE_TO (r) = NULL_TREE;
6757
6758                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6759                   {
6760                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6761                                           complain, in_decl); 
6762                     if (argvec == error_mark_node)
6763                       return error_mark_node;
6764
6765                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
6766                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
6767                   }
6768               }
6769             break;
6770
6771           case TEMPLATE_PARM_INDEX:
6772             r = reduce_template_parm_level (t, type, levels);
6773             break;
6774            
6775           default:
6776             abort ();
6777           }
6778
6779         return r;
6780       }
6781
6782     case TREE_LIST:
6783       {
6784         tree purpose, value, chain, result;
6785
6786         if (t == void_list_node)
6787           return t;
6788
6789         purpose = TREE_PURPOSE (t);
6790         if (purpose)
6791           {
6792             purpose = tsubst (purpose, args, complain, in_decl);
6793             if (purpose == error_mark_node)
6794               return error_mark_node;
6795           }
6796         value = TREE_VALUE (t);
6797         if (value)
6798           {
6799             value = tsubst (value, args, complain, in_decl);
6800             if (value == error_mark_node)
6801               return error_mark_node;
6802           }
6803         chain = TREE_CHAIN (t);
6804         if (chain && chain != void_type_node)
6805           {
6806             chain = tsubst (chain, args, complain, in_decl);
6807             if (chain == error_mark_node)
6808               return error_mark_node;
6809           }
6810         if (purpose == TREE_PURPOSE (t)
6811             && value == TREE_VALUE (t)
6812             && chain == TREE_CHAIN (t))
6813           return t;
6814         if (TREE_PARMLIST (t))
6815           {
6816             result = tree_cons (purpose, value, chain);
6817             TREE_PARMLIST (result) = 1;
6818           }
6819         else
6820           result = hash_tree_cons (purpose, value, chain);
6821         return result;
6822       }
6823     case TREE_VEC:
6824       if (type != NULL_TREE)
6825         {
6826           /* A binfo node.  We always need to make a copy, of the node
6827              itself and of its BINFO_BASETYPES.  */
6828
6829           t = copy_node (t);
6830
6831           /* Make sure type isn't a typedef copy.  */
6832           type = BINFO_TYPE (TYPE_BINFO (type));
6833
6834           TREE_TYPE (t) = complete_type (type);
6835           if (IS_AGGR_TYPE (type))
6836             {
6837               BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (type);
6838               BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (type);
6839               if (TYPE_BINFO_BASETYPES (type) != NULL_TREE)
6840                 BINFO_BASETYPES (t) = copy_node (TYPE_BINFO_BASETYPES (type));
6841             }
6842           return t;
6843         }
6844
6845       /* Otherwise, a vector of template arguments.  */
6846       return tsubst_template_args (t, args, complain, in_decl);
6847
6848     case POINTER_TYPE:
6849     case REFERENCE_TYPE:
6850       {
6851         enum tree_code code;
6852
6853         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
6854           return t;
6855
6856         code = TREE_CODE (t);
6857
6858
6859         /* [temp.deduct]
6860            
6861            Type deduction may fail for any of the following
6862            reasons:  
6863
6864            -- Attempting to create a pointer to reference type.
6865            -- Attempting to create a reference to a reference type or
6866               a reference to void.  */
6867         if (TREE_CODE (type) == REFERENCE_TYPE
6868             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
6869           {
6870             static location_t last_loc;
6871
6872             /* We keep track of the last time we issued this error
6873                message to avoid spewing a ton of messages during a
6874                single bad template instantiation.  */
6875             if (complain & tf_error
6876                 && (last_loc.line != input_line
6877                     || last_loc.file != input_filename))
6878               {
6879                 if (TREE_CODE (type) == VOID_TYPE)
6880                   error ("forming reference to void");
6881                 else
6882                   error ("forming %s to reference type `%T'",
6883                             (code == POINTER_TYPE) ? "pointer" : "reference",
6884                             type);
6885                 last_loc = input_location;
6886               }
6887
6888             return error_mark_node;
6889           }
6890         else if (code == POINTER_TYPE)
6891           {
6892             r = build_pointer_type (type);
6893             if (TREE_CODE (type) == METHOD_TYPE)
6894               r = build_ptrmemfunc_type (r);
6895           }
6896         else
6897           r = build_reference_type (type);
6898         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6899
6900         if (r != error_mark_node)
6901           /* Will this ever be needed for TYPE_..._TO values?  */
6902           layout_type (r);
6903         
6904         return r;
6905       }
6906     case OFFSET_TYPE:
6907       {
6908         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
6909         if (r == error_mark_node || !IS_AGGR_TYPE (r))
6910           {
6911             /* [temp.deduct]
6912
6913                Type deduction may fail for any of the following
6914                reasons:
6915                
6916                -- Attempting to create "pointer to member of T" when T
6917                   is not a class type.  */
6918             if (complain & tf_error)
6919               error ("creating pointer to member of non-class type `%T'", r);
6920             return error_mark_node;
6921           }
6922         if (TREE_CODE (type) == REFERENCE_TYPE)
6923           {
6924             if (complain & tf_error)
6925               error ("creating pointer to member reference type `%T'", type);
6926             
6927             return error_mark_node;
6928           }
6929         my_friendly_assert (TREE_CODE (type) != METHOD_TYPE, 20011231);
6930         if (TREE_CODE (type) == FUNCTION_TYPE)
6931           {
6932             /* This is really a method type. The cv qualifiers of the
6933                this pointer should _not_ be determined by the cv
6934                qualifiers of the class type.  They should be held
6935                somewhere in the FUNCTION_TYPE, but we don't do that at
6936                the moment.  Consider
6937                   typedef void (Func) () const;
6938
6939                   template <typename T1> void Foo (Func T1::*);
6940
6941                 */
6942             tree method_type;
6943
6944             method_type = build_method_type_directly (TYPE_MAIN_VARIANT (r),
6945                                                       TREE_TYPE (type),
6946                                                       TYPE_ARG_TYPES (type));
6947             return build_ptrmemfunc_type (build_pointer_type (method_type));
6948           }
6949         else
6950           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
6951                                                TYPE_QUALS (t),
6952                                                complain);
6953       }
6954     case FUNCTION_TYPE:
6955     case METHOD_TYPE:
6956       {
6957         tree fntype;
6958         tree raises;
6959
6960         fntype = tsubst_function_type (t, args, complain, in_decl);
6961         if (fntype == error_mark_node)
6962           return error_mark_node;
6963
6964         /* Substitute the exception specification.  */
6965         raises = TYPE_RAISES_EXCEPTIONS (t);
6966         if (raises)
6967           {
6968             tree   list = NULL_TREE;
6969             
6970             if (! TREE_VALUE (raises))
6971               list = raises;
6972             else
6973               for (; raises != NULL_TREE; raises = TREE_CHAIN (raises))
6974                 {
6975                   tree spec = TREE_VALUE (raises);
6976                   
6977                   spec = tsubst (spec, args, complain, in_decl);
6978                   if (spec == error_mark_node)
6979                     return spec;
6980                   list = add_exception_specifier (list, spec, complain);
6981                 }
6982             fntype = build_exception_variant (fntype, list);
6983           }
6984         return fntype;
6985       }
6986     case ARRAY_TYPE:
6987       {
6988         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
6989         if (domain == error_mark_node)
6990           return error_mark_node;
6991
6992         /* As an optimization, we avoid regenerating the array type if
6993            it will obviously be the same as T.  */
6994         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
6995           return t;
6996
6997         /* These checks should match the ones in grokdeclarator.  
6998
6999            [temp.deduct] 
7000         
7001            The deduction may fail for any of the following reasons: 
7002
7003            -- Attempting to create an array with an element type that
7004               is void, a function type, or a reference type.  */
7005         if (TREE_CODE (type) == VOID_TYPE 
7006             || TREE_CODE (type) == FUNCTION_TYPE
7007             || TREE_CODE (type) == REFERENCE_TYPE)
7008           {
7009             if (complain & tf_error)
7010               error ("creating array of `%T'", type);
7011             return error_mark_node;
7012           }
7013
7014         r = build_cplus_array_type (type, domain);
7015         return r;
7016       }
7017
7018     case PLUS_EXPR:
7019     case MINUS_EXPR:
7020       {
7021         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7022         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7023
7024         if (e1 == error_mark_node || e2 == error_mark_node)
7025           return error_mark_node;
7026
7027         return fold (build (TREE_CODE (t), TREE_TYPE (t), e1, e2));
7028       }
7029
7030     case NEGATE_EXPR:
7031     case NOP_EXPR:
7032       {
7033         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7034         if (e == error_mark_node)
7035           return error_mark_node;
7036
7037         return fold (build (TREE_CODE (t), TREE_TYPE (t), e));
7038       }
7039
7040     case TYPENAME_TYPE:
7041       {
7042         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7043                                      in_decl, /*entering_scope=*/1);
7044         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
7045                               complain, in_decl); 
7046
7047         if (ctx == error_mark_node || f == error_mark_node)
7048           return error_mark_node;
7049
7050         if (!IS_AGGR_TYPE (ctx))
7051           {
7052             if (complain & tf_error)
7053               error ("`%T' is not a class, struct, or union type",
7054                         ctx);
7055             return error_mark_node;
7056           }
7057         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7058           {
7059             /* Normally, make_typename_type does not require that the CTX
7060                have complete type in order to allow things like:
7061              
7062                  template <class T> struct S { typename S<T>::X Y; };
7063
7064                But, such constructs have already been resolved by this
7065                point, so here CTX really should have complete type, unless
7066                it's a partial instantiation.  */
7067             ctx = complete_type (ctx);
7068             if (!COMPLETE_TYPE_P (ctx))
7069               {
7070                 if (complain & tf_error)
7071                   cxx_incomplete_type_error (NULL_TREE, ctx);
7072                 return error_mark_node;
7073               }
7074           }
7075
7076         f = make_typename_type (ctx, f,
7077                                 (complain & tf_error) | tf_keep_type_decl);
7078         if (f == error_mark_node)
7079           return f;
7080         if (TREE_CODE (f) == TYPE_DECL)
7081           {
7082             complain |= tf_ignore_bad_quals;
7083             f = TREE_TYPE (f);
7084           }
7085         
7086         return cp_build_qualified_type_real
7087           (f, cp_type_quals (f) | cp_type_quals (t), complain);
7088       }
7089                
7090     case UNBOUND_CLASS_TEMPLATE:
7091       {
7092         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7093                                      in_decl, /*entering_scope=*/1);
7094         tree name = TYPE_IDENTIFIER (t);
7095
7096         if (ctx == error_mark_node || name == error_mark_node)
7097           return error_mark_node;
7098
7099         return make_unbound_class_template (ctx, name, complain);
7100       }
7101
7102     case INDIRECT_REF:
7103       {
7104         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7105         if (e == error_mark_node)
7106           return error_mark_node;
7107         return make_pointer_declarator (type, e);
7108       }
7109
7110     case ADDR_EXPR:
7111       {
7112         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7113         if (e == error_mark_node)
7114           return error_mark_node;
7115         return make_reference_declarator (type, e);
7116       }
7117
7118     case ARRAY_REF:
7119       {
7120         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7121         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7122         if (e1 == error_mark_node || e2 == error_mark_node)
7123           return error_mark_node;
7124
7125         return build_nt (ARRAY_REF, e1, e2);
7126       }
7127
7128     case CALL_EXPR:
7129       {
7130         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7131         tree e2 = (tsubst_call_declarator_parms
7132                    (CALL_DECLARATOR_PARMS (t), args, complain, in_decl));
7133         tree e3 = tsubst (CALL_DECLARATOR_EXCEPTION_SPEC (t), args,
7134                           complain, in_decl);
7135
7136         if (e1 == error_mark_node || e2 == error_mark_node 
7137             || e3 == error_mark_node)
7138           return error_mark_node;
7139
7140         return make_call_declarator (e1, e2, CALL_DECLARATOR_QUALS (t), e3);
7141       }
7142
7143     case SCOPE_REF:
7144       {
7145         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7146         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7147         if (e1 == error_mark_node || e2 == error_mark_node)
7148           return error_mark_node;
7149
7150         return build_nt (TREE_CODE (t), e1, e2);
7151       }
7152
7153     case TYPEOF_TYPE:
7154       {
7155         tree e1 = tsubst_expr (TYPE_FIELDS (t), args, complain, in_decl);
7156         if (e1 == error_mark_node)
7157           return error_mark_node;
7158
7159         return cp_build_qualified_type_real (TREE_TYPE (e1),
7160                                              cp_type_quals (t)
7161                                              | cp_type_quals (TREE_TYPE (e1)),
7162                                              complain);
7163       }
7164
7165     default:
7166       sorry ("use of `%s' in template",
7167              tree_code_name [(int) TREE_CODE (t)]);
7168       return error_mark_node;
7169     }
7170 }
7171
7172 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
7173    type of the expression on the left-hand side of the "." or "->"
7174    operator.  */
7175
7176 static tree
7177 tsubst_baselink (tree baselink, tree object_type,
7178                  tree args, tsubst_flags_t complain, tree in_decl)
7179 {
7180     tree name;
7181     tree qualifying_scope;
7182     tree fns;
7183     tree template_args = 0;
7184     bool template_id_p = false;
7185
7186     /* A baselink indicates a function from a base class.  The
7187        BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7188        non-dependent types; otherwise, the lookup could not have
7189        succeeded.  However, they may indicate bases of the template
7190        class, rather than the instantiated class.  
7191
7192        In addition, lookups that were not ambiguous before may be
7193        ambiguous now.  Therefore, we perform the lookup again.  */
7194     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7195     fns = BASELINK_FUNCTIONS (baselink);
7196     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7197       {
7198         template_id_p = true;
7199         template_args = TREE_OPERAND (fns, 1);
7200         fns = TREE_OPERAND (fns, 0);
7201         if (template_args)
7202           template_args = tsubst_template_args (template_args, args,
7203                                                 complain, in_decl);
7204       }
7205     name = DECL_NAME (get_first_fn (fns));
7206     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7207     if (BASELINK_P (baselink) && template_id_p)
7208       BASELINK_FUNCTIONS (baselink) 
7209         = build_nt (TEMPLATE_ID_EXPR,
7210                     BASELINK_FUNCTIONS (baselink),
7211                     template_args);
7212     if (!object_type)
7213       object_type = current_class_type;
7214     return adjust_result_of_qualified_name_lookup (baselink, 
7215                                                    qualifying_scope,
7216                                                    object_type);
7217 }
7218
7219 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
7220    true if the qualified-id will be a postfix-expression in-and-of
7221    itself; false if more of the postfix-expression follows the
7222    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
7223    of "&".  */
7224
7225 static tree
7226 tsubst_qualified_id (tree qualified_id, tree args, 
7227                      tsubst_flags_t complain, tree in_decl,
7228                      bool done, bool address_p)
7229 {
7230   tree expr;
7231   tree scope;
7232   tree name;
7233   bool is_template;
7234   tree template_args;
7235
7236   my_friendly_assert (TREE_CODE (qualified_id) == SCOPE_REF, 20030706);
7237
7238   /* Figure out what name to look up.  */
7239   name = TREE_OPERAND (qualified_id, 1);
7240   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7241     {
7242       is_template = true;
7243       template_args = TREE_OPERAND (name, 1);
7244       if (template_args)
7245         template_args = tsubst_template_args (template_args, args,
7246                                               complain, in_decl);
7247       name = TREE_OPERAND (name, 0);
7248     }
7249   else
7250     {
7251       is_template = false;
7252       template_args = NULL_TREE;
7253     }
7254
7255   /* Substitute into the qualifying scope.  When there are no ARGS, we
7256      are just trying to simplify a non-dependent expression.  In that
7257      case the qualifying scope may be dependent, and, in any case,
7258      substituting will not help.  */
7259   scope = TREE_OPERAND (qualified_id, 0);
7260   if (args)
7261     {
7262       scope = tsubst (scope, args, complain, in_decl);
7263       expr = tsubst_copy (name, args, complain, in_decl);
7264     }
7265   else
7266     expr = name;
7267
7268   my_friendly_assert (!dependent_type_p (scope), 20030729);
7269   
7270   if (!BASELINK_P (name) && !DECL_P (expr))
7271     {
7272       expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7273       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7274                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7275         {
7276           if (complain & tf_error)
7277             error ("`%E' names a type, but a non-type is expected",
7278                    qualified_id);
7279           return error_mark_node;
7280         }
7281     }
7282   
7283   if (DECL_P (expr))
7284     check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7285                                          scope);
7286   
7287   /* Remember that there was a reference to this entity.  */
7288   if (DECL_P (expr))
7289     {
7290       mark_used (expr);
7291       if (!args && TREE_CODE (expr) == VAR_DECL)
7292         expr = DECL_INITIAL (expr);
7293     }
7294
7295   if (is_template)
7296     expr = lookup_template_function (expr, template_args);
7297
7298   if (expr == error_mark_node && complain & tf_error)
7299     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1));
7300   else if (TYPE_P (scope))
7301     {
7302       expr = (adjust_result_of_qualified_name_lookup 
7303               (expr, scope, current_class_type));
7304       expr = finish_qualified_id_expr (scope, expr, done, address_p);
7305     }
7306
7307   return expr;
7308 }
7309
7310 /* Like tsubst, but deals with expressions.  This function just replaces
7311    template parms; to finish processing the resultant expression, use
7312    tsubst_expr.  */
7313
7314 static tree
7315 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7316 {
7317   enum tree_code code;
7318   tree r;
7319
7320   if (t == NULL_TREE || t == error_mark_node)
7321     return t;
7322
7323   code = TREE_CODE (t);
7324
7325   switch (code)
7326     {
7327     case PARM_DECL:
7328       r = retrieve_local_specialization (t);
7329       my_friendly_assert (r != NULL, 20020903);
7330       return r;
7331
7332     case CONST_DECL:
7333       {
7334         tree enum_type;
7335         tree v;
7336
7337         if (DECL_TEMPLATE_PARM_P (t))
7338           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7339         /* There is no need to substitute into namespace-scope
7340            enumerators.  */
7341         if (DECL_NAMESPACE_SCOPE_P (t))
7342           return t;
7343
7344         /* Unfortunately, we cannot just call lookup_name here.
7345            Consider:
7346            
7347              template <int I> int f() {
7348              enum E { a = I };
7349              struct S { void g() { E e = a; } };
7350              };
7351            
7352            When we instantiate f<7>::S::g(), say, lookup_name is not
7353            clever enough to find f<7>::a.  */
7354         enum_type 
7355           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl, 
7356                               /*entering_scope=*/0);
7357
7358         for (v = TYPE_VALUES (enum_type); 
7359              v != NULL_TREE; 
7360              v = TREE_CHAIN (v))
7361           if (TREE_PURPOSE (v) == DECL_NAME (t))
7362             return TREE_VALUE (v);
7363
7364           /* We didn't find the name.  That should never happen; if
7365              name-lookup found it during preliminary parsing, we
7366              should find it again here during instantiation.  */
7367         abort ();
7368       }
7369       return t;
7370
7371     case FIELD_DECL:
7372       if (DECL_CONTEXT (t))
7373         {
7374           tree ctx;
7375
7376           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7377                                   /*entering_scope=*/1);
7378           if (ctx != DECL_CONTEXT (t))
7379             return lookup_field (ctx, DECL_NAME (t), 0, false);
7380         }
7381       return t;
7382
7383     case VAR_DECL:
7384     case FUNCTION_DECL:
7385       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7386           || local_variable_p (t))
7387         t = tsubst (t, args, complain, in_decl);
7388       mark_used (t);
7389       return t;
7390
7391     case BASELINK:
7392       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7393
7394     case TEMPLATE_DECL:
7395       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7396         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)), 
7397                        args, complain, in_decl);
7398       else if (is_member_template (t))
7399         return tsubst (t, args, complain, in_decl);
7400       else if (DECL_CLASS_SCOPE_P (t)
7401                && uses_template_parms (DECL_CONTEXT (t)))
7402         {
7403           /* Template template argument like the following example need
7404              special treatment:
7405
7406                template <template <class> class TT> struct C {};
7407                template <class T> struct D {
7408                  template <class U> struct E {};
7409                  C<E> c;                                // #1
7410                };
7411                D<int> d;                                // #2
7412
7413              We are processing the template argument `E' in #1 for
7414              the template instantiation #2.  Originally, `E' is a
7415              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
7416              have to substitute this with one having context `D<int>'.  */
7417
7418           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7419           return lookup_field (context, DECL_NAME(t), 0, false);
7420         }
7421       else
7422         /* Ordinary template template argument.  */
7423         return t;
7424
7425     case CAST_EXPR:
7426     case REINTERPRET_CAST_EXPR:
7427     case CONST_CAST_EXPR:
7428     case STATIC_CAST_EXPR:
7429     case DYNAMIC_CAST_EXPR:
7430     case NOP_EXPR:
7431       return build1
7432         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7433          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7434
7435     case INDIRECT_REF:
7436     case NEGATE_EXPR:
7437     case TRUTH_NOT_EXPR:
7438     case BIT_NOT_EXPR:
7439     case ADDR_EXPR:
7440     case CONVERT_EXPR:      /* Unary + */
7441     case SIZEOF_EXPR:
7442     case ALIGNOF_EXPR:
7443     case ARROW_EXPR:
7444     case THROW_EXPR:
7445     case TYPEID_EXPR:
7446     case REALPART_EXPR:
7447     case IMAGPART_EXPR:
7448       return build1
7449         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7450          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7451
7452     case COMPONENT_REF:
7453       {
7454         tree object;
7455         tree name;
7456
7457         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7458         name = TREE_OPERAND (t, 1);
7459         if (TREE_CODE (name) == BIT_NOT_EXPR) 
7460           {
7461             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7462                                 complain, in_decl);
7463             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7464           }
7465         else if (TREE_CODE (name) == SCOPE_REF
7466                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7467           {
7468             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7469                                      complain, in_decl);
7470             name = TREE_OPERAND (name, 1);
7471             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7472                                 complain, in_decl);
7473             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7474             name = build_nt (SCOPE_REF, base, name);
7475           }
7476         else if (TREE_CODE (name) == BASELINK)
7477           name = tsubst_baselink (name, 
7478                                   non_reference (TREE_TYPE (object)), 
7479                                   args, complain, 
7480                                   in_decl);
7481         else
7482           name = tsubst_copy (name, args, complain, in_decl);
7483         return build_nt (COMPONENT_REF, object, name);
7484       }
7485
7486     case PLUS_EXPR:
7487     case MINUS_EXPR:
7488     case MULT_EXPR:
7489     case TRUNC_DIV_EXPR:
7490     case CEIL_DIV_EXPR:
7491     case FLOOR_DIV_EXPR:
7492     case ROUND_DIV_EXPR:
7493     case EXACT_DIV_EXPR:
7494     case BIT_AND_EXPR:
7495     case BIT_IOR_EXPR:
7496     case BIT_XOR_EXPR:
7497     case TRUNC_MOD_EXPR:
7498     case FLOOR_MOD_EXPR:
7499     case TRUTH_ANDIF_EXPR:
7500     case TRUTH_ORIF_EXPR:
7501     case TRUTH_AND_EXPR:
7502     case TRUTH_OR_EXPR:
7503     case RSHIFT_EXPR:
7504     case LSHIFT_EXPR:
7505     case RROTATE_EXPR:
7506     case LROTATE_EXPR:
7507     case EQ_EXPR:
7508     case NE_EXPR:
7509     case MAX_EXPR:
7510     case MIN_EXPR:
7511     case LE_EXPR:
7512     case GE_EXPR:
7513     case LT_EXPR:
7514     case GT_EXPR:
7515     case ARRAY_REF:
7516     case COMPOUND_EXPR:
7517     case SCOPE_REF:
7518     case DOTSTAR_EXPR:
7519     case MEMBER_REF:
7520     case PREDECREMENT_EXPR:
7521     case PREINCREMENT_EXPR:
7522     case POSTDECREMENT_EXPR:
7523     case POSTINCREMENT_EXPR:
7524       return build_nt
7525         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7526          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7527
7528     case CALL_EXPR:
7529       return build_nt (code, 
7530                        tsubst_copy (TREE_OPERAND (t, 0), args,
7531                                     complain, in_decl),
7532                        tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7533                                     in_decl),
7534                        NULL_TREE);
7535
7536     case STMT_EXPR:
7537       /* This processing should really occur in tsubst_expr.  However,
7538          tsubst_expr does not recurse into expressions, since it
7539          assumes that there aren't any statements inside them.  So, we
7540          need to expand the STMT_EXPR here.  */
7541       if (!processing_template_decl)
7542         {
7543           tree stmt_expr = begin_stmt_expr ();
7544           
7545           tsubst_expr (STMT_EXPR_STMT (t), args,
7546                        complain | tf_stmt_expr_cmpd, in_decl);
7547           return finish_stmt_expr (stmt_expr, false);
7548         }
7549       
7550       return t;
7551
7552     case COND_EXPR:
7553     case MODOP_EXPR:
7554     case PSEUDO_DTOR_EXPR:
7555       {
7556         r = build_nt
7557           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7558            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7559            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7560         return r;
7561       }
7562
7563     case NEW_EXPR:
7564       {
7565         r = build_nt
7566         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7567          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7568          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7569         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7570         return r;
7571       }
7572
7573     case DELETE_EXPR:
7574       {
7575         r = build_nt
7576         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7577          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7578         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7579         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7580         return r;
7581       }
7582
7583     case TEMPLATE_ID_EXPR:
7584       {
7585         /* Substituted template arguments */
7586         tree fn = TREE_OPERAND (t, 0);
7587         tree targs = TREE_OPERAND (t, 1);
7588
7589         fn = tsubst_copy (fn, args, complain, in_decl);
7590         if (targs)
7591           targs = tsubst_template_args (targs, args, complain, in_decl);
7592         
7593         return lookup_template_function (fn, targs);
7594       }
7595
7596     case TREE_LIST:
7597       {
7598         tree purpose, value, chain;
7599
7600         if (t == void_list_node)
7601           return t;
7602
7603         purpose = TREE_PURPOSE (t);
7604         if (purpose)
7605           purpose = tsubst_copy (purpose, args, complain, in_decl);
7606         value = TREE_VALUE (t);
7607         if (value)
7608           value = tsubst_copy (value, args, complain, in_decl);
7609         chain = TREE_CHAIN (t);
7610         if (chain && chain != void_type_node)
7611           chain = tsubst_copy (chain, args, complain, in_decl);
7612         if (purpose == TREE_PURPOSE (t)
7613             && value == TREE_VALUE (t)
7614             && chain == TREE_CHAIN (t))
7615           return t;
7616         return tree_cons (purpose, value, chain);
7617       }
7618
7619     case RECORD_TYPE:
7620     case UNION_TYPE:
7621     case ENUMERAL_TYPE:
7622     case INTEGER_TYPE:
7623     case TEMPLATE_TYPE_PARM:
7624     case TEMPLATE_TEMPLATE_PARM:
7625     case BOUND_TEMPLATE_TEMPLATE_PARM:
7626     case TEMPLATE_PARM_INDEX:
7627     case POINTER_TYPE:
7628     case REFERENCE_TYPE:
7629     case OFFSET_TYPE:
7630     case FUNCTION_TYPE:
7631     case METHOD_TYPE:
7632     case ARRAY_TYPE:
7633     case TYPENAME_TYPE:
7634     case UNBOUND_CLASS_TEMPLATE:
7635     case TYPEOF_TYPE:
7636     case TYPE_DECL:
7637       return tsubst (t, args, complain, in_decl);
7638
7639     case IDENTIFIER_NODE:
7640       if (IDENTIFIER_TYPENAME_P (t))
7641         {
7642           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7643           return mangle_conv_op_name_for_type (new_type);
7644         }
7645       else
7646         return t;
7647
7648     case CONSTRUCTOR:
7649       {
7650         r = build_constructor
7651           (tsubst (TREE_TYPE (t), args, complain, in_decl), 
7652            tsubst_copy (CONSTRUCTOR_ELTS (t), args, complain, in_decl));
7653         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7654         return r;
7655       }
7656
7657     case VA_ARG_EXPR:
7658       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7659                                           in_decl),
7660                              tsubst (TREE_TYPE (t), args, complain, in_decl));
7661
7662     default:
7663       return t;
7664     }
7665 }
7666
7667 /* Like tsubst_copy for expressions, etc. but also does semantic
7668    processing.  */
7669
7670 static tree
7671 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7672 {
7673   tree stmt, tmp;
7674   tsubst_flags_t stmt_expr
7675     = complain & (tf_stmt_expr_cmpd | tf_stmt_expr_body);
7676
7677   complain ^= stmt_expr;
7678   if (t == NULL_TREE || t == error_mark_node)
7679     return t;
7680
7681   if (processing_template_decl)
7682     return tsubst_copy (t, args, complain, in_decl);
7683
7684   if (!STATEMENT_CODE_P (TREE_CODE (t)))
7685     return tsubst_copy_and_build (t, args, complain, in_decl,
7686                                   /*function_p=*/false);
7687     
7688   switch (TREE_CODE (t))
7689     {
7690     case CTOR_INITIALIZER:
7691       prep_stmt (t);
7692       finish_mem_initializers (tsubst_initializer_list 
7693                                (TREE_OPERAND (t, 0), args));
7694       break;
7695
7696     case RETURN_STMT:
7697       prep_stmt (t);
7698       finish_return_stmt (tsubst_expr (RETURN_STMT_EXPR (t),
7699                                        args, complain, in_decl));
7700       break;
7701
7702     case EXPR_STMT:
7703       {
7704         tree r;
7705         
7706         prep_stmt (t);
7707
7708         r = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
7709         if (stmt_expr & tf_stmt_expr_body && !TREE_CHAIN (t))
7710           finish_stmt_expr_expr (r);
7711         else
7712           finish_expr_stmt (r);
7713         break;
7714       }
7715
7716     case USING_STMT:
7717       prep_stmt (t);
7718       do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
7719                                        args, complain, in_decl));
7720       break;
7721       
7722     case DECL_STMT:
7723       {
7724         tree decl;
7725         tree init;
7726
7727         prep_stmt (t);
7728         decl = DECL_STMT_DECL (t);
7729         if (TREE_CODE (decl) == LABEL_DECL)
7730           finish_label_decl (DECL_NAME (decl));
7731         else if (TREE_CODE (decl) == USING_DECL)
7732           {
7733             tree scope = DECL_INITIAL (decl);
7734             tree name = DECL_NAME (decl);
7735             tree decl;
7736             
7737             scope = tsubst_expr (scope, args, complain, in_decl);
7738             decl = lookup_qualified_name (scope, name,
7739                                           /*is_type_p=*/false,
7740                                           /*complain=*/false);
7741             if (decl == error_mark_node)
7742               qualified_name_lookup_error (scope, name);
7743             else
7744               do_local_using_decl (decl);
7745           }
7746         else
7747           {
7748             init = DECL_INITIAL (decl);
7749             decl = tsubst (decl, args, complain, in_decl);
7750             if (decl != error_mark_node)
7751               {
7752                 if (init)
7753                   DECL_INITIAL (decl) = error_mark_node;
7754                 /* By marking the declaration as instantiated, we avoid
7755                    trying to instantiate it.  Since instantiate_decl can't
7756                    handle local variables, and since we've already done
7757                    all that needs to be done, that's the right thing to
7758                    do.  */
7759                 if (TREE_CODE (decl) == VAR_DECL)
7760                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7761                 if (TREE_CODE (decl) == VAR_DECL
7762                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
7763                   /* Anonymous aggregates are a special case.  */
7764                   finish_anon_union (decl);
7765                 else 
7766                   {
7767                     maybe_push_decl (decl);
7768                     if (TREE_CODE (decl) == VAR_DECL
7769                         && DECL_PRETTY_FUNCTION_P (decl))
7770                       {
7771                         /* For __PRETTY_FUNCTION__ we have to adjust the
7772                            initializer.  */
7773                         const char *const name
7774                           = cxx_printable_name (current_function_decl, 2);
7775                         init = cp_fname_init (name, &TREE_TYPE (decl));
7776                       }
7777                     else
7778                       init = tsubst_expr (init, args, complain, in_decl);
7779                     cp_finish_decl (decl, init, NULL_TREE, 0);
7780                   }
7781               }
7782           }
7783
7784         /* A DECL_STMT can also be used as an expression, in the condition
7785            clause of an if/for/while construct.  If we aren't followed by
7786            another statement, return our decl.  */
7787         if (TREE_CHAIN (t) == NULL_TREE)
7788           return decl;
7789       }
7790       break;
7791
7792     case FOR_STMT:
7793       {
7794         prep_stmt (t);
7795
7796         stmt = begin_for_stmt ();
7797         tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
7798         finish_for_init_stmt (stmt);
7799         finish_for_cond (tsubst_expr (FOR_COND (t),
7800                                       args, complain, in_decl),
7801                          stmt);
7802         tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
7803         finish_for_expr (tmp, stmt);
7804         tsubst_expr (FOR_BODY (t), args, complain, in_decl);
7805         finish_for_stmt (stmt);
7806       }
7807       break;
7808
7809     case WHILE_STMT:
7810       {
7811         prep_stmt (t);
7812         stmt = begin_while_stmt ();
7813         finish_while_stmt_cond (tsubst_expr (WHILE_COND (t),
7814                                              args, complain, in_decl),
7815                                 stmt);
7816         tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
7817         finish_while_stmt (stmt);
7818       }
7819       break;
7820
7821     case DO_STMT:
7822       {
7823         prep_stmt (t);
7824         stmt = begin_do_stmt ();
7825         tsubst_expr (DO_BODY (t), args, complain, in_decl);
7826         finish_do_body (stmt);
7827         finish_do_stmt (tsubst_expr (DO_COND (t),
7828                                      args, complain, in_decl),
7829                         stmt);
7830       }
7831       break;
7832
7833     case IF_STMT:
7834       {
7835         prep_stmt (t);
7836         stmt = begin_if_stmt ();
7837         finish_if_stmt_cond (tsubst_expr (IF_COND (t),
7838                                           args, complain, in_decl),
7839                              stmt);
7840
7841         if (tmp = THEN_CLAUSE (t), tmp)
7842           {
7843             tsubst_expr (tmp, args, complain, in_decl);
7844             finish_then_clause (stmt);
7845           }
7846
7847         if (tmp = ELSE_CLAUSE (t), tmp)
7848           {
7849             begin_else_clause ();
7850             tsubst_expr (tmp, args, complain, in_decl);
7851             finish_else_clause (stmt);
7852           }
7853
7854         finish_if_stmt ();
7855       }
7856       break;
7857
7858     case COMPOUND_STMT:
7859       {
7860         prep_stmt (t);
7861         if (COMPOUND_STMT_BODY_BLOCK (t))
7862           stmt = begin_function_body ();
7863         else
7864           stmt = begin_compound_stmt (COMPOUND_STMT_NO_SCOPE (t));
7865
7866         tsubst_expr (COMPOUND_BODY (t), args,
7867                      complain | ((stmt_expr & tf_stmt_expr_cmpd) << 1),
7868                      in_decl);
7869
7870         if (COMPOUND_STMT_BODY_BLOCK (t))
7871           finish_function_body (stmt);
7872         else
7873           finish_compound_stmt (stmt);
7874       }
7875       break;
7876
7877     case BREAK_STMT:
7878       prep_stmt (t);
7879       finish_break_stmt ();
7880       break;
7881
7882     case CONTINUE_STMT:
7883       prep_stmt (t);
7884       finish_continue_stmt ();
7885       break;
7886
7887     case SWITCH_STMT:
7888       {
7889         tree val;
7890
7891         prep_stmt (t);
7892         stmt = begin_switch_stmt ();
7893         val = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
7894         finish_switch_cond (val, stmt);
7895         tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
7896         finish_switch_stmt (stmt);
7897       }
7898       break;
7899
7900     case CASE_LABEL:
7901       prep_stmt (t);
7902       finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
7903                          tsubst_expr (CASE_HIGH (t), args, complain,
7904                                       in_decl));
7905       break;
7906
7907     case LABEL_STMT:
7908       input_line = STMT_LINENO (t);
7909       finish_label_stmt (DECL_NAME (LABEL_STMT_LABEL (t)));
7910       break;
7911
7912     case FILE_STMT:
7913       input_filename = FILE_STMT_FILENAME (t);
7914       add_stmt (build_nt (FILE_STMT, FILE_STMT_FILENAME_NODE (t)));
7915       break;
7916
7917     case GOTO_STMT:
7918       prep_stmt (t);
7919       tmp = GOTO_DESTINATION (t);
7920       if (TREE_CODE (tmp) != LABEL_DECL)
7921         /* Computed goto's must be tsubst'd into.  On the other hand,
7922            non-computed gotos must not be; the identifier in question
7923            will have no binding.  */
7924         tmp = tsubst_expr (tmp, args, complain, in_decl);
7925       else
7926         tmp = DECL_NAME (tmp);
7927       finish_goto_stmt (tmp);
7928       break;
7929
7930     case ASM_STMT:
7931       prep_stmt (t);
7932       tmp = finish_asm_stmt
7933         (ASM_CV_QUAL (t),
7934          tsubst_expr (ASM_STRING (t), args, complain, in_decl),
7935          tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
7936          tsubst_expr (ASM_INPUTS (t), args, complain, in_decl), 
7937          tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
7938       ASM_INPUT_P (tmp) = ASM_INPUT_P (t);
7939       break;
7940
7941     case TRY_BLOCK:
7942       prep_stmt (t);
7943       if (CLEANUP_P (t))
7944         {
7945           stmt = begin_try_block ();
7946           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7947           finish_cleanup_try_block (stmt);
7948           finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
7949                                        complain, in_decl),
7950                           stmt);
7951         }
7952       else
7953         {
7954           if (FN_TRY_BLOCK_P (t))
7955             stmt = begin_function_try_block ();
7956           else
7957             stmt = begin_try_block ();
7958
7959           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7960
7961           if (FN_TRY_BLOCK_P (t))
7962             finish_function_try_block (stmt);
7963           else
7964             finish_try_block (stmt);
7965
7966           tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
7967           if (FN_TRY_BLOCK_P (t))
7968             finish_function_handler_sequence (stmt);
7969           else
7970             finish_handler_sequence (stmt);
7971         }
7972       break;
7973       
7974     case HANDLER:
7975       {
7976         tree decl;
7977
7978         prep_stmt (t);
7979         stmt = begin_handler ();
7980         if (HANDLER_PARMS (t))
7981           {
7982             decl = DECL_STMT_DECL (HANDLER_PARMS (t));
7983             decl = tsubst (decl, args, complain, in_decl);
7984             /* Prevent instantiate_decl from trying to instantiate
7985                this variable.  We've already done all that needs to be
7986                done.  */
7987             DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7988           }
7989         else
7990           decl = NULL_TREE;
7991         finish_handler_parms (decl, stmt);
7992         tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
7993         finish_handler (stmt);
7994       }
7995       break;
7996
7997     case TAG_DEFN:
7998       prep_stmt (t);
7999       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
8000       break;
8001
8002     default:
8003       abort ();
8004     }
8005
8006   return tsubst_expr (TREE_CHAIN (t), args, complain | stmt_expr, in_decl);
8007 }
8008
8009 /* T is a postfix-expression that is not being used in a function
8010    call.  Return the substituted version of T.  */
8011
8012 static tree
8013 tsubst_non_call_postfix_expression (tree t, tree args, 
8014                                     tsubst_flags_t complain,
8015                                     tree in_decl)
8016 {
8017   if (TREE_CODE (t) == SCOPE_REF)
8018     t = tsubst_qualified_id (t, args, complain, in_decl,
8019                              /*done=*/false, /*address_p=*/false);
8020   else
8021     t = tsubst_copy_and_build (t, args, complain, in_decl,
8022                                /*function_p=*/false);
8023
8024   return t;
8025 }
8026
8027 /* Like tsubst but deals with expressions and performs semantic
8028    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
8029
8030 tree
8031 tsubst_copy_and_build (tree t, 
8032                        tree args, 
8033                        tsubst_flags_t complain, 
8034                        tree in_decl,
8035                        bool function_p)
8036 {
8037 #define RECUR(NODE) \
8038   tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8039
8040   tree op1;
8041
8042   if (t == NULL_TREE || t == error_mark_node)
8043     return t;
8044
8045   switch (TREE_CODE (t))
8046     {
8047     case USING_DECL:
8048       t = DECL_NAME (t);
8049       /* Fallthrough.  */
8050     case IDENTIFIER_NODE:
8051       {
8052         tree decl;
8053         cp_id_kind idk;
8054         tree qualifying_class;
8055         bool non_constant_expression_p;
8056         const char *error_msg;
8057
8058         if (IDENTIFIER_TYPENAME_P (t))
8059           {
8060             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8061             t = mangle_conv_op_name_for_type (new_type);
8062           }
8063
8064         /* Look up the name.  */
8065         decl = lookup_name (t, 0);
8066
8067         /* By convention, expressions use ERROR_MARK_NODE to indicate
8068            failure, not NULL_TREE.  */
8069         if (decl == NULL_TREE)
8070           decl = error_mark_node;
8071
8072         decl = finish_id_expression (t, decl, NULL_TREE,
8073                                      &idk,
8074                                      &qualifying_class,
8075                                      /*constant_expression_p=*/false,
8076                                      /*allow_non_constant_expression_p=*/false,
8077                                      &non_constant_expression_p,
8078                                      &error_msg);
8079         if (error_msg)
8080           error (error_msg);
8081         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8082           decl = unqualified_name_lookup_error (decl);
8083         return decl;
8084       }
8085
8086     case TEMPLATE_ID_EXPR:
8087       {
8088         tree object;
8089         tree template = RECUR (TREE_OPERAND (t, 0));
8090         tree targs = TREE_OPERAND (t, 1);
8091
8092         if (targs)
8093           targs = tsubst_template_args (targs, args, complain, in_decl);
8094         
8095         if (TREE_CODE (template) == COMPONENT_REF)
8096           {
8097             object = TREE_OPERAND (template, 0);
8098             template = TREE_OPERAND (template, 1);
8099           }
8100         else
8101           object = NULL_TREE;
8102         template = lookup_template_function (template, targs);
8103         
8104         if (object)
8105           return build (COMPONENT_REF, TREE_TYPE (template), 
8106                         object, template);
8107         else
8108           return template;
8109       }
8110
8111     case INDIRECT_REF:
8112       return build_x_indirect_ref (RECUR (TREE_OPERAND (t, 0)), "unary *");
8113
8114     case CAST_EXPR:
8115       return build_functional_cast
8116         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8117          RECUR (TREE_OPERAND (t, 0)));
8118
8119     case REINTERPRET_CAST_EXPR:
8120       return build_reinterpret_cast
8121         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8122          RECUR (TREE_OPERAND (t, 0)));
8123
8124     case CONST_CAST_EXPR:
8125       return build_const_cast
8126         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8127          RECUR (TREE_OPERAND (t, 0)));
8128
8129     case DYNAMIC_CAST_EXPR:
8130       return build_dynamic_cast
8131         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8132          RECUR (TREE_OPERAND (t, 0)));
8133
8134     case STATIC_CAST_EXPR:
8135       return build_static_cast
8136         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8137          RECUR (TREE_OPERAND (t, 0)));
8138
8139     case POSTDECREMENT_EXPR:
8140     case POSTINCREMENT_EXPR:
8141       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8142                                                 args, complain, in_decl);
8143       return build_x_unary_op (TREE_CODE (t), op1);
8144
8145     case PREDECREMENT_EXPR:
8146     case PREINCREMENT_EXPR:
8147     case NEGATE_EXPR:
8148     case BIT_NOT_EXPR:
8149     case ABS_EXPR:
8150     case TRUTH_NOT_EXPR:
8151     case CONVERT_EXPR:  /* Unary + */
8152     case REALPART_EXPR:
8153     case IMAGPART_EXPR:
8154       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8155
8156     case ADDR_EXPR:
8157       op1 = TREE_OPERAND (t, 0);
8158       if (TREE_CODE (op1) == SCOPE_REF)
8159         op1 = tsubst_qualified_id (op1, args, complain, in_decl, 
8160                                    /*done=*/true, /*address_p=*/true);
8161       else
8162         op1 = tsubst_non_call_postfix_expression (op1, args, complain, 
8163                                                   in_decl);
8164       if (TREE_CODE (op1) == LABEL_DECL)
8165         return finish_label_address_expr (DECL_NAME (op1));
8166       return build_x_unary_op (ADDR_EXPR, op1);
8167
8168     case PLUS_EXPR:
8169     case MINUS_EXPR:
8170     case MULT_EXPR:
8171     case TRUNC_DIV_EXPR:
8172     case CEIL_DIV_EXPR:
8173     case FLOOR_DIV_EXPR:
8174     case ROUND_DIV_EXPR:
8175     case EXACT_DIV_EXPR:
8176     case BIT_AND_EXPR:
8177     case BIT_IOR_EXPR:
8178     case BIT_XOR_EXPR:
8179     case TRUNC_MOD_EXPR:
8180     case FLOOR_MOD_EXPR:
8181     case TRUTH_ANDIF_EXPR:
8182     case TRUTH_ORIF_EXPR:
8183     case TRUTH_AND_EXPR:
8184     case TRUTH_OR_EXPR:
8185     case RSHIFT_EXPR:
8186     case LSHIFT_EXPR:
8187     case RROTATE_EXPR:
8188     case LROTATE_EXPR:
8189     case EQ_EXPR:
8190     case NE_EXPR:
8191     case MAX_EXPR:
8192     case MIN_EXPR:
8193     case LE_EXPR:
8194     case GE_EXPR:
8195     case LT_EXPR:
8196     case GT_EXPR:
8197     case MEMBER_REF:
8198     case DOTSTAR_EXPR:
8199       return build_x_binary_op
8200         (TREE_CODE (t), 
8201          RECUR (TREE_OPERAND (t, 0)),
8202          RECUR (TREE_OPERAND (t, 1)));
8203
8204     case SCOPE_REF:
8205       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8206                                   /*address_p=*/false);
8207
8208     case ARRAY_REF:
8209       if (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl)
8210           == NULL_TREE)
8211         /* new-type-id */
8212         return build_nt (ARRAY_REF, NULL_TREE, RECUR (TREE_OPERAND (t, 1)));
8213
8214       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8215                                                 args, complain, in_decl);
8216       /* Remember that there was a reference to this entity.  */
8217       if (DECL_P (op1))
8218         mark_used (op1);
8219       return grok_array_decl (op1, RECUR (TREE_OPERAND (t, 1)));
8220
8221     case SIZEOF_EXPR:
8222     case ALIGNOF_EXPR:
8223       op1 = TREE_OPERAND (t, 0);
8224       if (!args)
8225         {
8226           /* When there are no ARGS, we are trying to evaluate a
8227              non-dependent expression from the parser.  Trying to do
8228              the substitutions may not work.  */
8229           if (!TYPE_P (op1))
8230             op1 = TREE_TYPE (op1);
8231         }
8232       else
8233         {
8234           ++skip_evaluation;
8235           op1 = RECUR (op1);
8236           --skip_evaluation;
8237         }
8238       if (TYPE_P (op1))
8239         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
8240       else
8241         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
8242
8243     case MODOP_EXPR:
8244       return build_x_modify_expr
8245         (RECUR (TREE_OPERAND (t, 0)),
8246          TREE_CODE (TREE_OPERAND (t, 1)),
8247          RECUR (TREE_OPERAND (t, 2)));
8248
8249     case ARROW_EXPR:
8250       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8251                                                 args, complain, in_decl);
8252       /* Remember that there was a reference to this entity.  */
8253       if (DECL_P (op1))
8254         mark_used (op1);
8255       return build_x_arrow (op1);
8256
8257     case NEW_EXPR:
8258       return build_new
8259         (RECUR (TREE_OPERAND (t, 0)),
8260          RECUR (TREE_OPERAND (t, 1)),
8261          RECUR (TREE_OPERAND (t, 2)),
8262          NEW_EXPR_USE_GLOBAL (t));
8263
8264     case DELETE_EXPR:
8265      return delete_sanity
8266        (RECUR (TREE_OPERAND (t, 0)),
8267         RECUR (TREE_OPERAND (t, 1)),
8268         DELETE_EXPR_USE_VEC (t),
8269         DELETE_EXPR_USE_GLOBAL (t));
8270
8271     case COMPOUND_EXPR:
8272       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8273                                     RECUR (TREE_OPERAND (t, 1)));
8274
8275     case CALL_EXPR:
8276       {
8277         tree function;
8278         tree call_args;
8279         bool qualified_p;
8280         bool koenig_p;
8281
8282         function = TREE_OPERAND (t, 0);
8283         /* When we parsed the expression,  we determined whether or
8284            not Koenig lookup should be performed.  */
8285         koenig_p = KOENIG_LOOKUP_P (t);
8286         if (TREE_CODE (function) == SCOPE_REF)
8287           {
8288             qualified_p = true;
8289             function = tsubst_qualified_id (function, args, complain, in_decl,
8290                                             /*done=*/false, 
8291                                             /*address_p=*/false);
8292           }
8293         else
8294           {
8295             qualified_p = (TREE_CODE (function) == COMPONENT_REF
8296                            && (TREE_CODE (TREE_OPERAND (function, 1))
8297                                == SCOPE_REF));
8298             function = tsubst_copy_and_build (function, args, complain, 
8299                                               in_decl,
8300                                               !qualified_p);
8301             if (BASELINK_P (function))
8302               qualified_p = true;
8303           }
8304
8305         call_args = RECUR (TREE_OPERAND (t, 1));
8306           
8307         if (koenig_p
8308             && (is_overloaded_fn (function)
8309                 || DECL_P (function)
8310                 || TREE_CODE (function) == IDENTIFIER_NODE))
8311           function = perform_koenig_lookup (function, call_args);
8312
8313         if (TREE_CODE (function) == IDENTIFIER_NODE)
8314           {
8315             unqualified_name_lookup_error (function);
8316             return error_mark_node;
8317           }
8318
8319         /* Remember that there was a reference to this entity.  */
8320         if (DECL_P (function))
8321           mark_used (function);
8322
8323         function = convert_from_reference (function);
8324
8325         if (TREE_CODE (function) == OFFSET_REF)
8326           return build_offset_ref_call_from_tree (function, call_args);
8327         if (TREE_CODE (function) == COMPONENT_REF)
8328           return (build_new_method_call 
8329                   (TREE_OPERAND (function, 0),
8330                    TREE_OPERAND (function, 1),
8331                    call_args, NULL_TREE, 
8332                    qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8333         return finish_call_expr (function, call_args, 
8334                                  /*disallow_virtual=*/qualified_p,
8335                                  koenig_p);
8336       }
8337
8338     case COND_EXPR:
8339       return build_x_conditional_expr
8340         (RECUR (TREE_OPERAND (t, 0)),
8341          RECUR (TREE_OPERAND (t, 1)),
8342          RECUR (TREE_OPERAND (t, 2)));
8343
8344     case PSEUDO_DTOR_EXPR:
8345       return finish_pseudo_destructor_expr 
8346         (RECUR (TREE_OPERAND (t, 0)),
8347          RECUR (TREE_OPERAND (t, 1)),
8348          RECUR (TREE_OPERAND (t, 2)));
8349
8350     case TREE_LIST:
8351       {
8352         tree purpose, value, chain;
8353
8354         if (t == void_list_node)
8355           return t;
8356
8357         purpose = TREE_PURPOSE (t);
8358         if (purpose)
8359           purpose = RECUR (purpose);
8360         value = TREE_VALUE (t);
8361         if (value)
8362           value = RECUR (value);
8363         chain = TREE_CHAIN (t);
8364         if (chain && chain != void_type_node)
8365           chain = RECUR (chain);
8366         if (purpose == TREE_PURPOSE (t)
8367             && value == TREE_VALUE (t)
8368             && chain == TREE_CHAIN (t))
8369           return t;
8370         return tree_cons (purpose, value, chain);
8371       }
8372
8373     case COMPONENT_REF:
8374       {
8375         tree object;
8376         tree member;
8377
8378         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8379                                                      args, complain, in_decl);
8380         /* Remember that there was a reference to this entity.  */
8381         if (DECL_P (object))
8382           mark_used (object);
8383
8384         member = TREE_OPERAND (t, 1);
8385         if (BASELINK_P (member))
8386           member = tsubst_baselink (member, 
8387                                     non_reference (TREE_TYPE (object)),
8388                                     args, complain, in_decl);
8389         else
8390           member = tsubst_copy (member, args, complain, in_decl);
8391
8392         if (!CLASS_TYPE_P (TREE_TYPE (object)))
8393           {
8394             if (TREE_CODE (member) == BIT_NOT_EXPR)
8395               return finish_pseudo_destructor_expr (object, 
8396                                                     NULL_TREE,
8397                                                     TREE_TYPE (object));
8398             else if (TREE_CODE (member) == SCOPE_REF
8399                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8400               return finish_pseudo_destructor_expr (object, 
8401                                                     object,
8402                                                     TREE_TYPE (object));
8403           }
8404         else if (TREE_CODE (member) == SCOPE_REF
8405                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8406           {
8407             tree tmpl;
8408             tree args;
8409         
8410             /* Lookup the template functions now that we know what the
8411                scope is.  */
8412             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8413             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8414             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl, 
8415                                             /*is_type_p=*/false,
8416                                             /*complain=*/false);
8417             if (BASELINK_P (member))
8418               BASELINK_FUNCTIONS (member) 
8419                 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8420                             args);
8421             else
8422               {
8423                 qualified_name_lookup_error (TREE_TYPE (object), tmpl);
8424                 return error_mark_node;
8425               }
8426           }
8427         else if (TREE_CODE (member) == FIELD_DECL)
8428           return finish_non_static_data_member (member, object, NULL_TREE);
8429
8430         return finish_class_member_access_expr (object, member);
8431       }
8432
8433     case THROW_EXPR:
8434       return build_throw
8435         (RECUR (TREE_OPERAND (t, 0)));
8436
8437     case CONSTRUCTOR:
8438       {
8439         tree r;
8440         tree elts;
8441         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8442         bool purpose_p;
8443
8444         /* digest_init will do the wrong thing if we let it.  */
8445         if (type && TYPE_PTRMEMFUNC_P (type))
8446           return t;
8447
8448         r = NULL_TREE;
8449         /* We do not want to process the purpose of aggregate
8450            initializers as they are identifier nodes which will be
8451            looked up by digest_init.  */
8452         purpose_p = !(type && IS_AGGR_TYPE (type));
8453         for (elts = CONSTRUCTOR_ELTS (t);
8454              elts;
8455              elts = TREE_CHAIN (elts))
8456           {
8457             tree purpose = TREE_PURPOSE (elts);
8458             tree value = TREE_VALUE (elts);
8459             
8460             if (purpose && purpose_p)
8461               purpose = RECUR (purpose);
8462             value = RECUR (value);
8463             r = tree_cons (purpose, value, r);
8464           }
8465         
8466         r = build_constructor (NULL_TREE, nreverse (r));
8467         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8468
8469         if (type)
8470           return digest_init (type, r, 0);
8471         return r;
8472       }
8473
8474     case TYPEID_EXPR:
8475       {
8476         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8477         if (TYPE_P (operand_0))
8478           return get_typeid (operand_0);
8479         return build_typeid (operand_0);
8480       }
8481
8482     case PARM_DECL:
8483       return convert_from_reference (tsubst_copy (t, args, complain, in_decl));
8484
8485     case VAR_DECL:
8486       if (args)
8487         t = tsubst_copy (t, args, complain, in_decl);
8488       else
8489         /* If there are no ARGS, then we are evaluating a
8490            non-dependent expression.  If the expression is
8491            non-dependent, the variable must be a constant.  */
8492         t = DECL_INITIAL (t);
8493       return convert_from_reference (t);
8494
8495     case VA_ARG_EXPR:
8496       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8497                              tsubst_copy (TREE_TYPE (t), args, complain, 
8498                                           in_decl));
8499
8500     default:
8501       return tsubst_copy (t, args, complain, in_decl);
8502     }
8503
8504 #undef RECUR
8505 }
8506
8507 /* Verify that the instantiated ARGS are valid. For type arguments,
8508    make sure that the type's linkage is ok. For non-type arguments,
8509    make sure they are constants if they are integral or enumerations.
8510    Emit an error under control of COMPLAIN, and return TRUE on error.  */
8511
8512 static bool
8513 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8514 {
8515   int ix, len = DECL_NTPARMS (tmpl);
8516   bool result = false;
8517
8518   for (ix = 0; ix != len; ix++)
8519     {
8520       tree t = TREE_VEC_ELT (args, ix);
8521       
8522       if (TYPE_P (t))
8523         {
8524           /* [basic.link]: A name with no linkage (notably, the name
8525              of a class or enumeration declared in a local scope)
8526              shall not be used to declare an entity with linkage.
8527              This implies that names with no linkage cannot be used as
8528              template arguments.  */
8529           tree nt = no_linkage_check (t);
8530
8531           if (nt)
8532             {
8533               if (!(complain & tf_error))
8534                 /*OK*/;
8535               else if (TYPE_ANONYMOUS_P (nt))
8536                 error ("`%T' uses anonymous type", t);
8537               else
8538                 error ("`%T' uses local type `%T'", t, nt);
8539               result = true;
8540             }
8541           /* In order to avoid all sorts of complications, we do not
8542              allow variably-modified types as template arguments.  */
8543           else if (variably_modified_type_p (t))
8544             {
8545               if (complain & tf_error)
8546                 error ("`%T' is a variably modified type", t);
8547               result = true;
8548             }
8549         }
8550       /* A non-type argument of integral or enumerated type must be a
8551          constant.  */
8552       else if (TREE_TYPE (t)
8553                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8554                && !TREE_CONSTANT (t))
8555         {
8556           if (complain & tf_error)
8557             error ("integral expression `%E' is not constant", t);
8558           result = true;
8559         }
8560     }
8561   if (result && complain & tf_error)
8562     error ("  trying to instantiate `%D'", tmpl);
8563   return result;
8564 }
8565
8566 /* Instantiate the indicated variable or function template TMPL with
8567    the template arguments in TARG_PTR.  */
8568
8569 tree
8570 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8571 {
8572   tree fndecl;
8573   tree gen_tmpl;
8574   tree spec;
8575
8576   if (tmpl == error_mark_node)
8577     return error_mark_node;
8578
8579   my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
8580
8581   /* If this function is a clone, handle it specially.  */
8582   if (DECL_CLONED_FUNCTION_P (tmpl))
8583     {
8584       tree spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8585                                         complain);
8586       tree clone;
8587       
8588       /* Look for the clone.  */
8589       for (clone = TREE_CHAIN (spec);
8590            clone && DECL_CLONED_FUNCTION_P (clone);
8591            clone = TREE_CHAIN (clone))
8592         if (DECL_NAME (clone) == DECL_NAME (tmpl))
8593           return clone;
8594       /* We should always have found the clone by now.  */
8595       abort ();
8596       return NULL_TREE;
8597     }
8598   
8599   /* Check to see if we already have this specialization.  */
8600   spec = retrieve_specialization (tmpl, targ_ptr);
8601   if (spec != NULL_TREE)
8602     return spec;
8603
8604   gen_tmpl = most_general_template (tmpl);
8605   if (tmpl != gen_tmpl)
8606     {
8607       /* The TMPL is a partial instantiation.  To get a full set of
8608          arguments we must add the arguments used to perform the
8609          partial instantiation.  */
8610       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
8611                                               targ_ptr);
8612
8613       /* Check to see if we already have this specialization.  */
8614       spec = retrieve_specialization (gen_tmpl, targ_ptr);
8615       if (spec != NULL_TREE)
8616         return spec;
8617     }
8618
8619   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
8620                                complain))
8621     return error_mark_node;
8622   
8623   /* We are building a FUNCTION_DECL, during which the access of its
8624      parameters and return types have to be checked.  However this
8625      FUNCTION_DECL which is the desired context for access checking
8626      is not built yet.  We solve this chicken-and-egg problem by
8627      deferring all checks until we have the FUNCTION_DECL.  */
8628   push_deferring_access_checks (dk_deferred);
8629
8630   /* substitute template parameters */
8631   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
8632                    targ_ptr, complain, gen_tmpl);
8633
8634   /* Now we know the specialization, compute access previously
8635      deferred.  */
8636   push_access_scope (fndecl);
8637   perform_deferred_access_checks ();
8638   pop_access_scope (fndecl);
8639   pop_deferring_access_checks ();
8640
8641   /* The DECL_TI_TEMPLATE should always be the immediate parent
8642      template, not the most general template.  */
8643   DECL_TI_TEMPLATE (fndecl) = tmpl;
8644
8645   if (flag_external_templates)
8646     add_pending_template (fndecl);
8647
8648   /* If we've just instantiated the main entry point for a function,
8649      instantiate all the alternate entry points as well.  We do this
8650      by cloning the instantiation of the main entry point, not by
8651      instantiating the template clones.  */
8652   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
8653     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
8654
8655   return fndecl;
8656 }
8657
8658 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
8659    arguments that are being used when calling it.  TARGS is a vector
8660    into which the deduced template arguments are placed.  
8661
8662    Return zero for success, 2 for an incomplete match that doesn't resolve
8663    all the types, and 1 for complete failure.  An error message will be
8664    printed only for an incomplete match.
8665
8666    If FN is a conversion operator, or we are trying to produce a specific
8667    specialization, RETURN_TYPE is the return type desired.
8668
8669    The EXPLICIT_TARGS are explicit template arguments provided via a
8670    template-id.
8671
8672    The parameter STRICT is one of:
8673
8674    DEDUCE_CALL: 
8675      We are deducing arguments for a function call, as in
8676      [temp.deduct.call].
8677
8678    DEDUCE_CONV:
8679      We are deducing arguments for a conversion function, as in 
8680      [temp.deduct.conv].
8681
8682    DEDUCE_EXACT:
8683      We are deducing arguments when doing an explicit instantiation
8684      as in [temp.explicit], when determining an explicit specialization
8685      as in [temp.expl.spec], or when taking the address of a function
8686      template, as in [temp.deduct.funcaddr]. 
8687
8688    DEDUCE_ORDER:
8689      We are deducing arguments when calculating the partial
8690      ordering between specializations of function or class
8691      templates, as in [temp.func.order] and [temp.class.order].
8692
8693    LEN is the number of parms to consider before returning success, or -1
8694    for all.  This is used in partial ordering to avoid comparing parms for
8695    which no actual argument was passed, since they are not considered in
8696    overload resolution (and are explicitly excluded from consideration in
8697    partial ordering in [temp.func.order]/6).  */
8698
8699 int
8700 fn_type_unification (tree fn, 
8701                      tree explicit_targs, 
8702                      tree targs, 
8703                      tree args, 
8704                      tree return_type,
8705                      unification_kind_t strict, 
8706                      int len)
8707 {
8708   tree parms;
8709   tree fntype;
8710   int result;
8711
8712   my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
8713
8714   fntype = TREE_TYPE (fn);
8715   if (explicit_targs)
8716     {
8717       /* [temp.deduct]
8718           
8719          The specified template arguments must match the template
8720          parameters in kind (i.e., type, nontype, template), and there
8721          must not be more arguments than there are parameters;
8722          otherwise type deduction fails.
8723
8724          Nontype arguments must match the types of the corresponding
8725          nontype template parameters, or must be convertible to the
8726          types of the corresponding nontype parameters as specified in
8727          _temp.arg.nontype_, otherwise type deduction fails.
8728
8729          All references in the function type of the function template
8730          to the corresponding template parameters are replaced by the
8731          specified template argument values.  If a substitution in a
8732          template parameter or in the function type of the function
8733          template results in an invalid type, type deduction fails.  */
8734       int i;
8735       tree converted_args;
8736       bool incomplete;
8737
8738       converted_args
8739         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
8740                                   explicit_targs, NULL_TREE, tf_none, 
8741                                   /*require_all_arguments=*/0));
8742       if (converted_args == error_mark_node)
8743         return 1;
8744
8745       /* Substitute the explicit args into the function type.  This is
8746          necessary so that, for instance, explicitly declared function
8747          arguments can match null pointed constants.  If we were given
8748          an incomplete set of explicit args, we must not do semantic
8749          processing during substitution as we could create partial
8750          instantiations.  */
8751       incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
8752       processing_template_decl += incomplete;
8753       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
8754       processing_template_decl -= incomplete;
8755       
8756       if (fntype == error_mark_node)
8757         return 1;
8758
8759       /* Place the explicitly specified arguments in TARGS.  */
8760       for (i = NUM_TMPL_ARGS (converted_args); i--;)
8761         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
8762     }
8763      
8764   parms = TYPE_ARG_TYPES (fntype);
8765   /* Never do unification on the 'this' parameter.  */
8766   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
8767     parms = TREE_CHAIN (parms);
8768   
8769   if (return_type)
8770     {
8771       /* We've been given a return type to match, prepend it.  */
8772       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
8773       args = tree_cons (NULL_TREE, return_type, args);
8774       if (len >= 0)
8775         ++len;
8776     }
8777
8778   /* We allow incomplete unification without an error message here
8779      because the standard doesn't seem to explicitly prohibit it.  Our
8780      callers must be ready to deal with unification failures in any
8781      event.  */
8782   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
8783                                   targs, parms, args, /*subr=*/0,
8784                                   strict, /*allow_incomplete*/1, len);
8785
8786   if (result == 0) 
8787     /* All is well so far.  Now, check:
8788        
8789        [temp.deduct] 
8790        
8791        When all template arguments have been deduced, all uses of
8792        template parameters in nondeduced contexts are replaced with
8793        the corresponding deduced argument values.  If the
8794        substitution results in an invalid type, as described above,
8795        type deduction fails.  */
8796     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
8797         == error_mark_node)
8798       return 1;
8799
8800   return result;
8801 }
8802
8803 /* Adjust types before performing type deduction, as described in
8804    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
8805    sections are symmetric.  PARM is the type of a function parameter
8806    or the return type of the conversion function.  ARG is the type of
8807    the argument passed to the call, or the type of the value
8808    initialized with the result of the conversion function.  */
8809
8810 static int
8811 maybe_adjust_types_for_deduction (unification_kind_t strict, 
8812                                   tree* parm, 
8813                                   tree* arg)
8814 {
8815   int result = 0;
8816   
8817   switch (strict)
8818     {
8819     case DEDUCE_CALL:
8820       break;
8821
8822     case DEDUCE_CONV:
8823       {
8824         /* Swap PARM and ARG throughout the remainder of this
8825            function; the handling is precisely symmetric since PARM
8826            will initialize ARG rather than vice versa.  */
8827         tree* temp = parm;
8828         parm = arg;
8829         arg = temp;
8830         break;
8831       }
8832
8833     case DEDUCE_EXACT:
8834       /* There is nothing to do in this case.  */
8835       return 0;
8836
8837     case DEDUCE_ORDER:
8838       /* DR 214. [temp.func.order] is underspecified, and leads to no
8839          ordering between things like `T *' and `T const &' for `U *'.
8840          The former has T=U and the latter T=U*. The former looks more
8841          specialized and John Spicer considers it well-formed (the EDG
8842          compiler accepts it).
8843
8844          John also confirms that deduction should proceed as in a function
8845          call. Which implies the usual ARG and PARM conversions as DEDUCE_CALL.
8846          However, in ordering, ARG can have REFERENCE_TYPE, but no argument
8847          to an actual call can have such a type.
8848          
8849          If both ARG and PARM are REFERENCE_TYPE, we change neither.
8850          If only ARG is a REFERENCE_TYPE, we look through that and then
8851          proceed as with DEDUCE_CALL (which could further convert it).  */
8852       if (TREE_CODE (*arg) == REFERENCE_TYPE)
8853         {
8854           if (TREE_CODE (*parm) == REFERENCE_TYPE)
8855             return 0;
8856           *arg = TREE_TYPE (*arg);
8857         }
8858       break;
8859     default:
8860       abort ();
8861     }
8862
8863   if (TREE_CODE (*parm) != REFERENCE_TYPE)
8864     {
8865       /* [temp.deduct.call]
8866          
8867          If P is not a reference type:
8868          
8869          --If A is an array type, the pointer type produced by the
8870          array-to-pointer standard conversion (_conv.array_) is
8871          used in place of A for type deduction; otherwise,
8872          
8873          --If A is a function type, the pointer type produced by
8874          the function-to-pointer standard conversion
8875          (_conv.func_) is used in place of A for type deduction;
8876          otherwise,
8877          
8878          --If A is a cv-qualified type, the top level
8879          cv-qualifiers of A's type are ignored for type
8880          deduction.  */
8881       if (TREE_CODE (*arg) == ARRAY_TYPE)
8882         *arg = build_pointer_type (TREE_TYPE (*arg));
8883       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
8884         *arg = build_pointer_type (*arg);
8885       else
8886         *arg = TYPE_MAIN_VARIANT (*arg);
8887     }
8888   
8889   /* [temp.deduct.call]
8890      
8891      If P is a cv-qualified type, the top level cv-qualifiers
8892      of P's type are ignored for type deduction.  If P is a
8893      reference type, the type referred to by P is used for
8894      type deduction.  */
8895   *parm = TYPE_MAIN_VARIANT (*parm);
8896   if (TREE_CODE (*parm) == REFERENCE_TYPE)
8897     {
8898       *parm = TREE_TYPE (*parm);
8899       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
8900     }
8901
8902   /* DR 322. For conversion deduction, remove a reference type on parm
8903      too (which has been swapped into ARG).  */
8904   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
8905     *arg = TREE_TYPE (*arg);
8906   
8907   return result;
8908 }
8909
8910 /* Most parms like fn_type_unification.
8911
8912    If SUBR is 1, we're being called recursively (to unify the
8913    arguments of a function or method parameter of a function
8914    template).  */
8915
8916 static int
8917 type_unification_real (tree tparms, 
8918                        tree targs, 
8919                        tree xparms, 
8920                        tree xargs, 
8921                        int subr,
8922                        unification_kind_t strict, 
8923                        int allow_incomplete, 
8924                        int xlen)
8925 {
8926   tree parm, arg;
8927   int i;
8928   int ntparms = TREE_VEC_LENGTH (tparms);
8929   int sub_strict;
8930   int saw_undeduced = 0;
8931   tree parms, args;
8932   int len;
8933
8934   my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
8935   my_friendly_assert (xparms == NULL_TREE 
8936                       || TREE_CODE (xparms) == TREE_LIST, 290);
8937   my_friendly_assert (!xargs || TREE_CODE (xargs) == TREE_LIST, 291);
8938   my_friendly_assert (ntparms > 0, 292);
8939
8940   switch (strict)
8941     {
8942     case DEDUCE_CALL:
8943       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
8944                     | UNIFY_ALLOW_DERIVED);
8945       break;
8946       
8947     case DEDUCE_CONV:
8948       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
8949       break;
8950
8951     case DEDUCE_EXACT:
8952       sub_strict = UNIFY_ALLOW_NONE;
8953       break;
8954     
8955     case DEDUCE_ORDER:
8956       sub_strict = UNIFY_ALLOW_NONE;
8957       break;
8958       
8959     default:
8960       abort ();
8961     }
8962
8963   if (xlen == 0)
8964     return 0;
8965
8966  again:
8967   parms = xparms;
8968   args = xargs;
8969   len = xlen;
8970
8971   while (parms
8972          && parms != void_list_node
8973          && args
8974          && args != void_list_node)
8975     {
8976       parm = TREE_VALUE (parms);
8977       parms = TREE_CHAIN (parms);
8978       arg = TREE_VALUE (args);
8979       args = TREE_CHAIN (args);
8980
8981       if (arg == error_mark_node)
8982         return 1;
8983       if (arg == unknown_type_node)
8984         /* We can't deduce anything from this, but we might get all the
8985            template args from other function args.  */
8986         continue;
8987
8988       /* Conversions will be performed on a function argument that
8989          corresponds with a function parameter that contains only
8990          non-deducible template parameters and explicitly specified
8991          template parameters.  */
8992       if (! uses_template_parms (parm))
8993         {
8994           tree type;
8995
8996           if (!TYPE_P (arg))
8997             type = TREE_TYPE (arg);
8998           else
8999             {
9000               type = arg;
9001               arg = NULL_TREE;
9002             }
9003
9004           if (strict == DEDUCE_EXACT || strict == DEDUCE_ORDER)
9005             {
9006               if (same_type_p (parm, type))
9007                 continue;
9008             }
9009           else
9010             /* It might work; we shouldn't check now, because we might
9011                get into infinite recursion.  Overload resolution will
9012                handle it.  */
9013             continue;
9014
9015           return 1;
9016         }
9017         
9018       if (!TYPE_P (arg))
9019         {
9020           my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
9021           if (type_unknown_p (arg))
9022             {
9023               /* [temp.deduct.type] A template-argument can be deduced from
9024                  a pointer to function or pointer to member function
9025                  argument if the set of overloaded functions does not
9026                  contain function templates and at most one of a set of
9027                  overloaded functions provides a unique match.  */
9028
9029               if (resolve_overloaded_unification
9030                   (tparms, targs, parm, arg, strict, sub_strict)
9031                   != 0)
9032                 return 1;
9033               continue;
9034             }
9035           arg = TREE_TYPE (arg);
9036           if (arg == error_mark_node)
9037             return 1;
9038         }
9039       
9040       {
9041         int arg_strict = sub_strict;
9042         
9043         if (!subr)
9044           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9045
9046         if (unify (tparms, targs, parm, arg, arg_strict))
9047           return 1;
9048       }
9049
9050       /* Are we done with the interesting parms?  */
9051       if (--len == 0)
9052         goto done;
9053     }
9054   /* Fail if we've reached the end of the parm list, and more args
9055      are present, and the parm list isn't variadic.  */
9056   if (args && args != void_list_node && parms == void_list_node)
9057     return 1;
9058   /* Fail if parms are left and they don't have default values.  */
9059   if (parms
9060       && parms != void_list_node
9061       && TREE_PURPOSE (parms) == NULL_TREE)
9062     return 1;
9063
9064  done:
9065   if (!subr)
9066     for (i = 0; i < ntparms; i++)
9067       if (TREE_VEC_ELT (targs, i) == NULL_TREE)
9068         {
9069           tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9070
9071           /* If this is an undeduced nontype parameter that depends on
9072              a type parameter, try another pass; its type may have been
9073              deduced from a later argument than the one from which
9074              this parameter can be deduced.  */
9075           if (TREE_CODE (tparm) == PARM_DECL
9076               && uses_template_parms (TREE_TYPE (tparm))
9077               && !saw_undeduced++)
9078             goto again;
9079
9080           if (!allow_incomplete)
9081             error ("incomplete type unification");
9082           return 2;
9083         }
9084   return 0;
9085 }
9086
9087 /* Subroutine of type_unification_real.  Args are like the variables at the
9088    call site.  ARG is an overloaded function (or template-id); we try
9089    deducing template args from each of the overloads, and if only one
9090    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
9091
9092 static int
9093 resolve_overloaded_unification (tree tparms, 
9094                                 tree targs,
9095                                 tree parm,
9096                                 tree arg, 
9097                                 unification_kind_t strict,
9098                                 int sub_strict)
9099 {
9100   tree tempargs = copy_node (targs);
9101   int good = 0;
9102   bool addr_p;
9103
9104   if (TREE_CODE (arg) == ADDR_EXPR)
9105     {
9106       arg = TREE_OPERAND (arg, 0);
9107       addr_p = true;
9108     }
9109   else
9110     addr_p = false;
9111
9112   if (TREE_CODE (arg) == COMPONENT_REF)
9113     /* Handle `&x' where `x' is some static or non-static member
9114        function name.  */
9115     arg = TREE_OPERAND (arg, 1);
9116
9117   if (TREE_CODE (arg) == OFFSET_REF)
9118     arg = TREE_OPERAND (arg, 1);
9119
9120   /* Strip baselink information.  */
9121   if (BASELINK_P (arg))
9122     arg = BASELINK_FUNCTIONS (arg);
9123
9124   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9125     {
9126       /* If we got some explicit template args, we need to plug them into
9127          the affected templates before we try to unify, in case the
9128          explicit args will completely resolve the templates in question.  */
9129
9130       tree expl_subargs = TREE_OPERAND (arg, 1);
9131       arg = TREE_OPERAND (arg, 0);
9132
9133       for (; arg; arg = OVL_NEXT (arg))
9134         {
9135           tree fn = OVL_CURRENT (arg);
9136           tree subargs, elem;
9137
9138           if (TREE_CODE (fn) != TEMPLATE_DECL)
9139             continue;
9140
9141           subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
9142                                            expl_subargs);
9143           if (subargs)
9144             {
9145               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9146               good += try_one_overload (tparms, targs, tempargs, parm, 
9147                                         elem, strict, sub_strict, addr_p);
9148             }
9149         }
9150     }
9151   else if (TREE_CODE (arg) == OVERLOAD
9152            || TREE_CODE (arg) == FUNCTION_DECL)
9153     {
9154       for (; arg; arg = OVL_NEXT (arg))
9155         good += try_one_overload (tparms, targs, tempargs, parm,
9156                                   TREE_TYPE (OVL_CURRENT (arg)),
9157                                   strict, sub_strict, addr_p);
9158     }
9159   else
9160     abort ();
9161
9162   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9163      to function or pointer to member function argument if the set of
9164      overloaded functions does not contain function templates and at most
9165      one of a set of overloaded functions provides a unique match.
9166
9167      So if we found multiple possibilities, we return success but don't
9168      deduce anything.  */
9169
9170   if (good == 1)
9171     {
9172       int i = TREE_VEC_LENGTH (targs);
9173       for (; i--; )
9174         if (TREE_VEC_ELT (tempargs, i))
9175           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9176     }
9177   if (good)
9178     return 0;
9179
9180   return 1;
9181 }
9182
9183 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9184    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
9185    different overloads deduce different arguments for a given parm.
9186    ADDR_P is true if the expression for which deduction is being
9187    performed was of the form "& fn" rather than simply "fn".
9188
9189    Returns 1 on success.  */
9190
9191 static int
9192 try_one_overload (tree tparms,
9193                   tree orig_targs,
9194                   tree targs, 
9195                   tree parm, 
9196                   tree arg, 
9197                   unification_kind_t strict,
9198                   int sub_strict,
9199                   bool addr_p)
9200 {
9201   int nargs;
9202   tree tempargs;
9203   int i;
9204
9205   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9206      to function or pointer to member function argument if the set of
9207      overloaded functions does not contain function templates and at most
9208      one of a set of overloaded functions provides a unique match.
9209
9210      So if this is a template, just return success.  */
9211
9212   if (uses_template_parms (arg))
9213     return 1;
9214
9215   if (TREE_CODE (arg) == METHOD_TYPE)
9216     arg = build_ptrmemfunc_type (build_pointer_type (arg));
9217   else if (addr_p)
9218     arg = build_pointer_type (arg);
9219
9220   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9221
9222   /* We don't copy orig_targs for this because if we have already deduced
9223      some template args from previous args, unify would complain when we
9224      try to deduce a template parameter for the same argument, even though
9225      there isn't really a conflict.  */
9226   nargs = TREE_VEC_LENGTH (targs);
9227   tempargs = make_tree_vec (nargs);
9228
9229   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9230     return 0;
9231
9232   /* First make sure we didn't deduce anything that conflicts with
9233      explicitly specified args.  */
9234   for (i = nargs; i--; )
9235     {
9236       tree elt = TREE_VEC_ELT (tempargs, i);
9237       tree oldelt = TREE_VEC_ELT (orig_targs, i);
9238
9239       if (elt == NULL_TREE)
9240         continue;
9241       else if (uses_template_parms (elt))
9242         {
9243           /* Since we're unifying against ourselves, we will fill in template
9244              args used in the function parm list with our own template parms.
9245              Discard them.  */
9246           TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9247           continue;
9248         }
9249       else if (oldelt && ! template_args_equal (oldelt, elt))
9250         return 0;
9251     }
9252
9253   for (i = nargs; i--; )
9254     {
9255       tree elt = TREE_VEC_ELT (tempargs, i);
9256
9257       if (elt)
9258         TREE_VEC_ELT (targs, i) = elt;
9259     }
9260
9261   return 1;
9262 }
9263
9264 /* Verify that nondeduce template argument agrees with the type
9265    obtained from argument deduction.  Return nonzero if the
9266    verification fails.
9267
9268    For example:
9269
9270      struct A { typedef int X; };
9271      template <class T, class U> struct C {};
9272      template <class T> struct C<T, typename T::X> {};
9273
9274    Then with the instantiation `C<A, int>', we can deduce that
9275    `T' is `A' but unify () does not check whether `typename T::X'
9276    is `int'.  This function ensure that they agree.
9277
9278    TARGS, PARMS are the same as the arguments of unify.
9279    ARGS contains template arguments from all levels.  */
9280
9281 static int
9282 verify_class_unification (tree targs, tree parms, tree args)
9283 {
9284   parms = tsubst (parms, add_outermost_template_args (args, targs),
9285                   tf_none, NULL_TREE);
9286   if (parms == error_mark_node)
9287     return 1;
9288
9289   return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9290 }
9291
9292 /* PARM is a template class (perhaps with unbound template
9293    parameters).  ARG is a fully instantiated type.  If ARG can be
9294    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
9295    TARGS are as for unify.  */
9296
9297 static tree
9298 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9299 {
9300   tree copy_of_targs;
9301
9302   if (!CLASSTYPE_TEMPLATE_INFO (arg)
9303       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg)) 
9304           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9305     return NULL_TREE;
9306
9307   /* We need to make a new template argument vector for the call to
9308      unify.  If we used TARGS, we'd clutter it up with the result of
9309      the attempted unification, even if this class didn't work out.
9310      We also don't want to commit ourselves to all the unifications
9311      we've already done, since unification is supposed to be done on
9312      an argument-by-argument basis.  In other words, consider the
9313      following pathological case:
9314
9315        template <int I, int J, int K>
9316        struct S {};
9317        
9318        template <int I, int J>
9319        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9320        
9321        template <int I, int J, int K>
9322        void f(S<I, J, K>, S<I, I, I>);
9323        
9324        void g() {
9325          S<0, 0, 0> s0;
9326          S<0, 1, 2> s2;
9327        
9328          f(s0, s2);
9329        }
9330
9331      Now, by the time we consider the unification involving `s2', we
9332      already know that we must have `f<0, 0, 0>'.  But, even though
9333      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9334      because there are two ways to unify base classes of S<0, 1, 2>
9335      with S<I, I, I>.  If we kept the already deduced knowledge, we
9336      would reject the possibility I=1.  */
9337   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9338   
9339   /* If unification failed, we're done.  */
9340   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9341              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9342     return NULL_TREE;
9343
9344   return arg;
9345 }
9346
9347 /* Subroutine of get_template_base.  RVAL, if non-NULL, is a base we
9348    have already discovered to be satisfactory.  ARG_BINFO is the binfo
9349    for the base class of ARG that we are currently examining.  */
9350
9351 static tree
9352 get_template_base_recursive (tree tparms, 
9353                              tree targs, 
9354                              tree parm,
9355                              tree arg_binfo, 
9356                              tree rval, 
9357                              int flags)
9358 {
9359   tree binfos;
9360   int i, n_baselinks;
9361   tree arg = BINFO_TYPE (arg_binfo);
9362
9363   if (!(flags & GTB_IGNORE_TYPE))
9364     {
9365       tree r = try_class_unification (tparms, targs,
9366                                       parm, arg);
9367
9368       /* If there is more than one satisfactory baseclass, then:
9369
9370            [temp.deduct.call]
9371
9372            If they yield more than one possible deduced A, the type
9373            deduction fails.
9374
9375            applies.  */
9376       if (r && rval && !same_type_p (r, rval))
9377         return error_mark_node;
9378       else if (r)
9379         rval = r;
9380     }
9381
9382   binfos = BINFO_BASETYPES (arg_binfo);
9383   n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
9384
9385   /* Process base types.  */
9386   for (i = 0; i < n_baselinks; i++)
9387     {
9388       tree base_binfo = TREE_VEC_ELT (binfos, i);
9389       int this_virtual;
9390
9391       /* Skip this base, if we've already seen it.  */
9392       if (BINFO_MARKED (base_binfo))
9393         continue;
9394
9395       this_virtual = 
9396         (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
9397       
9398       /* When searching for a non-virtual, we cannot mark virtually
9399          found binfos.  */
9400       if (! this_virtual)
9401         BINFO_MARKED (base_binfo) = 1;
9402       
9403       rval = get_template_base_recursive (tparms, targs,
9404                                           parm,
9405                                           base_binfo, 
9406                                           rval,
9407                                           GTB_VIA_VIRTUAL * this_virtual);
9408       
9409       /* If we discovered more than one matching base class, we can
9410          stop now.  */
9411       if (rval == error_mark_node)
9412         return error_mark_node;
9413     }
9414
9415   return rval;
9416 }
9417
9418 /* Given a template type PARM and a class type ARG, find the unique
9419    base type in ARG that is an instance of PARM.  We do not examine
9420    ARG itself; only its base-classes.  If there is no appropriate base
9421    class, return NULL_TREE.  If there is more than one, return
9422    error_mark_node.  PARM may be the type of a partial specialization,
9423    as well as a plain template type.  Used by unify.  */
9424
9425 static tree
9426 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9427 {
9428   tree rval;
9429   tree arg_binfo;
9430
9431   my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
9432   
9433   arg_binfo = TYPE_BINFO (complete_type (arg));
9434   rval = get_template_base_recursive (tparms, targs,
9435                                       parm, arg_binfo, 
9436                                       NULL_TREE,
9437                                       GTB_IGNORE_TYPE);
9438
9439   /* Since get_template_base_recursive marks the bases classes, we
9440      must unmark them here.  */
9441   dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
9442
9443   return rval;
9444 }
9445
9446 /* Returns the level of DECL, which declares a template parameter.  */
9447
9448 static int
9449 template_decl_level (tree decl)
9450 {
9451   switch (TREE_CODE (decl))
9452     {
9453     case TYPE_DECL:
9454     case TEMPLATE_DECL:
9455       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9456
9457     case PARM_DECL:
9458       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9459
9460     default:
9461       abort ();
9462       return 0;
9463     }
9464 }
9465
9466 /* Decide whether ARG can be unified with PARM, considering only the
9467    cv-qualifiers of each type, given STRICT as documented for unify.
9468    Returns nonzero iff the unification is OK on that basis.*/
9469
9470 static int
9471 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9472 {
9473   int arg_quals = cp_type_quals (arg);
9474   int parm_quals = cp_type_quals (parm);
9475
9476   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM)
9477     {
9478       /* If the cvr quals of parm will not unify with ARG, they'll be
9479          ignored in instantiation, so we have to do the same here.  */
9480       if (TREE_CODE (arg) == REFERENCE_TYPE)
9481         parm_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
9482       if (!POINTER_TYPE_P (arg) &&
9483           TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9484         parm_quals &= ~TYPE_QUAL_RESTRICT;
9485     }
9486   
9487   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9488       && (arg_quals & parm_quals) != parm_quals)
9489     return 0;
9490
9491   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9492       && (parm_quals & arg_quals) != arg_quals)
9493     return 0;
9494
9495   return 1;
9496 }
9497
9498 /* Takes parameters as for type_unification.  Returns 0 if the
9499    type deduction succeeds, 1 otherwise.  The parameter STRICT is a
9500    bitwise or of the following flags:
9501
9502      UNIFY_ALLOW_NONE:
9503        Require an exact match between PARM and ARG.
9504      UNIFY_ALLOW_MORE_CV_QUAL:
9505        Allow the deduced ARG to be more cv-qualified (by qualification
9506        conversion) than ARG.
9507      UNIFY_ALLOW_LESS_CV_QUAL:
9508        Allow the deduced ARG to be less cv-qualified than ARG.
9509      UNIFY_ALLOW_DERIVED:
9510        Allow the deduced ARG to be a template base class of ARG,
9511        or a pointer to a template base class of the type pointed to by
9512        ARG.
9513      UNIFY_ALLOW_INTEGER:
9514        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
9515        case for more information. 
9516      UNIFY_ALLOW_OUTER_LEVEL:
9517        This is the outermost level of a deduction. Used to determine validity
9518        of qualification conversions. A valid qualification conversion must
9519        have const qualified pointers leading up to the inner type which
9520        requires additional CV quals, except at the outer level, where const
9521        is not required [conv.qual]. It would be normal to set this flag in
9522        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9523      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9524        This is the outermost level of a deduction, and PARM can be more CV
9525        qualified at this point.
9526      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9527        This is the outermost level of a deduction, and PARM can be less CV
9528        qualified at this point.
9529      UNIFY_ALLOW_MAX_CORRECTION:
9530        This is an INTEGER_TYPE's maximum value.  Used if the range may
9531        have been derived from a size specification, such as an array size.
9532        If the size was given by a nontype template parameter N, the maximum
9533        value will have the form N-1.  The flag says that we can (and indeed
9534        must) unify N with (ARG + 1), an exception to the normal rules on
9535        folding PARM.  */
9536
9537 static int
9538 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9539 {
9540   int idx;
9541   tree targ;
9542   tree tparm;
9543   int strict_in = strict;
9544
9545   /* I don't think this will do the right thing with respect to types.
9546      But the only case I've seen it in so far has been array bounds, where
9547      signedness is the only information lost, and I think that will be
9548      okay.  */
9549   while (TREE_CODE (parm) == NOP_EXPR)
9550     parm = TREE_OPERAND (parm, 0);
9551
9552   if (arg == error_mark_node)
9553     return 1;
9554   if (arg == unknown_type_node)
9555     /* We can't deduce anything from this, but we might get all the
9556        template args from other function args.  */
9557     return 0;
9558
9559   /* If PARM uses template parameters, then we can't bail out here,
9560      even if ARG == PARM, since we won't record unifications for the
9561      template parameters.  We might need them if we're trying to
9562      figure out which of two things is more specialized.  */
9563   if (arg == parm && !uses_template_parms (parm))
9564     return 0;
9565
9566   /* Immediately reject some pairs that won't unify because of
9567      cv-qualification mismatches.  */
9568   if (TREE_CODE (arg) == TREE_CODE (parm)
9569       && TYPE_P (arg)
9570       /* It is the elements of the array which hold the cv quals of an array
9571          type, and the elements might be template type parms. We'll check
9572          when we recurse.  */
9573       && TREE_CODE (arg) != ARRAY_TYPE
9574       /* We check the cv-qualifiers when unifying with template type
9575          parameters below.  We want to allow ARG `const T' to unify with
9576          PARM `T' for example, when computing which of two templates
9577          is more specialized, for example.  */
9578       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9579       && !check_cv_quals_for_unify (strict_in, arg, parm))
9580     return 1;
9581
9582   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9583       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9584     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9585   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9586   strict &= ~UNIFY_ALLOW_DERIVED;
9587   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9588   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9589   strict &= ~UNIFY_ALLOW_MAX_CORRECTION;
9590   
9591   switch (TREE_CODE (parm))
9592     {
9593     case TYPENAME_TYPE:
9594     case SCOPE_REF:
9595     case UNBOUND_CLASS_TEMPLATE:
9596       /* In a type which contains a nested-name-specifier, template
9597          argument values cannot be deduced for template parameters used
9598          within the nested-name-specifier.  */
9599       return 0;
9600
9601     case TEMPLATE_TYPE_PARM:
9602     case TEMPLATE_TEMPLATE_PARM:
9603     case BOUND_TEMPLATE_TEMPLATE_PARM:
9604       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9605
9606       if (TEMPLATE_TYPE_LEVEL (parm)
9607           != template_decl_level (tparm))
9608         /* The PARM is not one we're trying to unify.  Just check
9609            to see if it matches ARG.  */
9610         return (TREE_CODE (arg) == TREE_CODE (parm)
9611                 && same_type_p (parm, arg)) ? 0 : 1;
9612       idx = TEMPLATE_TYPE_IDX (parm);
9613       targ = TREE_VEC_ELT (targs, idx);
9614       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9615
9616       /* Check for mixed types and values.  */
9617       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9618            && TREE_CODE (tparm) != TYPE_DECL)
9619           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM 
9620               && TREE_CODE (tparm) != TEMPLATE_DECL))
9621         return 1;
9622
9623       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9624         {
9625           /* ARG must be constructed from a template class or a template
9626              template parameter.  */
9627           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9628               && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9629             return 1;
9630
9631           {
9632             tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9633             tree parmvec = TYPE_TI_ARGS (parm);
9634             tree argvec = TYPE_TI_ARGS (arg);
9635             tree argtmplvec
9636               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9637             int i;
9638
9639             /* The parameter and argument roles have to be switched here 
9640                in order to handle default arguments properly.  For example, 
9641                template<template <class> class TT> void f(TT<int>) 
9642                should be able to accept vector<int> which comes from 
9643                template <class T, class Allocator = allocator> 
9644                class vector.  */
9645
9646             if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9647                 == error_mark_node)
9648               return 1;
9649           
9650             /* Deduce arguments T, i from TT<T> or TT<i>.  
9651                We check each element of PARMVEC and ARGVEC individually
9652                rather than the whole TREE_VEC since they can have
9653                different number of elements.  */
9654
9655             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9656               {
9657                 tree t = TREE_VEC_ELT (parmvec, i);
9658
9659                 if (unify (tparms, targs, t, 
9660                            TREE_VEC_ELT (argvec, i), 
9661                            UNIFY_ALLOW_NONE))
9662                   return 1;
9663               }
9664           }
9665           arg = TYPE_TI_TEMPLATE (arg);
9666
9667           /* Fall through to deduce template name.  */
9668         }
9669
9670       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9671           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9672         {
9673           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
9674
9675           /* Simple cases: Value already set, does match or doesn't.  */
9676           if (targ != NULL_TREE && template_args_equal (targ, arg))
9677             return 0;
9678           else if (targ)
9679             return 1;
9680         }
9681       else
9682         {
9683           /* If PARM is `const T' and ARG is only `int', we don't have
9684              a match unless we are allowing additional qualification.
9685              If ARG is `const int' and PARM is just `T' that's OK;
9686              that binds `const int' to `T'.  */
9687           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL, 
9688                                          arg, parm))
9689             return 1;
9690
9691           /* Consider the case where ARG is `const volatile int' and
9692              PARM is `const T'.  Then, T should be `volatile int'.  */
9693           arg = cp_build_qualified_type_real
9694             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
9695           if (arg == error_mark_node)
9696             return 1;
9697
9698           /* Simple cases: Value already set, does match or doesn't.  */
9699           if (targ != NULL_TREE && same_type_p (targ, arg))
9700             return 0;
9701           else if (targ)
9702             return 1;
9703
9704           /* Make sure that ARG is not a variable-sized array.  (Note
9705              that were talking about variable-sized arrays (like
9706              `int[n]'), rather than arrays of unknown size (like
9707              `int[]').)  We'll get very confused by such a type since
9708              the bound of the array will not be computable in an
9709              instantiation.  Besides, such types are not allowed in
9710              ISO C++, so we can do as we please here.  */
9711           if (variably_modified_type_p (arg))
9712             return 1;
9713         }
9714
9715       TREE_VEC_ELT (targs, idx) = arg;
9716       return 0;
9717
9718     case TEMPLATE_PARM_INDEX:
9719       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9720
9721       if (TEMPLATE_PARM_LEVEL (parm) 
9722           != template_decl_level (tparm))
9723         /* The PARM is not one we're trying to unify.  Just check
9724            to see if it matches ARG.  */
9725         return !(TREE_CODE (arg) == TREE_CODE (parm)
9726                  && cp_tree_equal (parm, arg));
9727
9728       idx = TEMPLATE_PARM_IDX (parm);
9729       targ = TREE_VEC_ELT (targs, idx);
9730
9731       if (targ)
9732         return !cp_tree_equal (targ, arg);
9733
9734       /* [temp.deduct.type] If, in the declaration of a function template
9735          with a non-type template-parameter, the non-type
9736          template-parameter is used in an expression in the function
9737          parameter-list and, if the corresponding template-argument is
9738          deduced, the template-argument type shall match the type of the
9739          template-parameter exactly, except that a template-argument
9740          deduced from an array bound may be of any integral type. 
9741          The non-type parameter might use already deduced type parameters.  */
9742       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
9743       if (!TREE_TYPE (arg))
9744         /* Template-parameter dependent expression.  Just accept it for now.
9745            It will later be processed in convert_template_argument.  */
9746         ;
9747       else if (same_type_p (TREE_TYPE (arg), tparm))
9748         /* OK */;
9749       else if ((strict & UNIFY_ALLOW_INTEGER)
9750                && (TREE_CODE (tparm) == INTEGER_TYPE
9751                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
9752         /* OK */;
9753       else if (uses_template_parms (tparm))
9754         /* We haven't deduced the type of this parameter yet.  Try again
9755            later.  */
9756         return 0;
9757       else
9758         return 1;
9759
9760       TREE_VEC_ELT (targs, idx) = arg;
9761       return 0;
9762
9763     case PTRMEM_CST:
9764      {
9765         /* A pointer-to-member constant can be unified only with
9766          another constant.  */
9767       if (TREE_CODE (arg) != PTRMEM_CST)
9768         return 1;
9769
9770       /* Just unify the class member. It would be useless (and possibly
9771          wrong, depending on the strict flags) to unify also
9772          PTRMEM_CST_CLASS, because we want to be sure that both parm and
9773          arg refer to the same variable, even if through different
9774          classes. For instance:
9775
9776          struct A { int x; };
9777          struct B : A { };
9778
9779          Unification of &A::x and &B::x must succeed.  */
9780       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
9781                     PTRMEM_CST_MEMBER (arg), strict);
9782      }
9783
9784     case POINTER_TYPE:
9785       {
9786         if (TREE_CODE (arg) != POINTER_TYPE)
9787           return 1;
9788         
9789         /* [temp.deduct.call]
9790
9791            A can be another pointer or pointer to member type that can
9792            be converted to the deduced A via a qualification
9793            conversion (_conv.qual_).
9794
9795            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
9796            This will allow for additional cv-qualification of the
9797            pointed-to types if appropriate.  */
9798         
9799         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
9800           /* The derived-to-base conversion only persists through one
9801              level of pointers.  */
9802           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
9803
9804         return unify (tparms, targs, TREE_TYPE (parm), 
9805                       TREE_TYPE (arg), strict);
9806       }
9807
9808     case REFERENCE_TYPE:
9809       if (TREE_CODE (arg) != REFERENCE_TYPE)
9810         return 1;
9811       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9812                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
9813
9814     case ARRAY_TYPE:
9815       if (TREE_CODE (arg) != ARRAY_TYPE)
9816         return 1;
9817       if ((TYPE_DOMAIN (parm) == NULL_TREE)
9818           != (TYPE_DOMAIN (arg) == NULL_TREE))
9819         return 1;
9820       if (TYPE_DOMAIN (parm) != NULL_TREE
9821           && unify (tparms, targs, TYPE_DOMAIN (parm),
9822                     TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
9823         return 1;
9824       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9825                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
9826
9827     case REAL_TYPE:
9828     case COMPLEX_TYPE:
9829     case VECTOR_TYPE:
9830     case INTEGER_TYPE:
9831     case BOOLEAN_TYPE:
9832     case VOID_TYPE:
9833       if (TREE_CODE (arg) != TREE_CODE (parm))
9834         return 1;
9835
9836       if (TREE_CODE (parm) == INTEGER_TYPE
9837           && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
9838         {
9839           if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
9840               && unify (tparms, targs, TYPE_MIN_VALUE (parm),
9841                         TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
9842             return 1;
9843           if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
9844               && unify (tparms, targs, TYPE_MAX_VALUE (parm),
9845                         TYPE_MAX_VALUE (arg),
9846                         UNIFY_ALLOW_INTEGER | UNIFY_ALLOW_MAX_CORRECTION))
9847             return 1;
9848         }
9849       /* We have already checked cv-qualification at the top of the
9850          function.  */
9851       else if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
9852         return 1;
9853
9854       /* As far as unification is concerned, this wins.  Later checks
9855          will invalidate it if necessary.  */
9856       return 0;
9857
9858       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
9859       /* Type INTEGER_CST can come from ordinary constant template args.  */
9860     case INTEGER_CST:
9861       while (TREE_CODE (arg) == NOP_EXPR)
9862         arg = TREE_OPERAND (arg, 0);
9863
9864       if (TREE_CODE (arg) != INTEGER_CST)
9865         return 1;
9866       return !tree_int_cst_equal (parm, arg);
9867
9868     case TREE_VEC:
9869       {
9870         int i;
9871         if (TREE_CODE (arg) != TREE_VEC)
9872           return 1;
9873         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
9874           return 1;
9875         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
9876           if (unify (tparms, targs,
9877                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
9878                      UNIFY_ALLOW_NONE))
9879             return 1;
9880         return 0;
9881       }
9882
9883     case RECORD_TYPE:
9884     case UNION_TYPE:
9885       if (TREE_CODE (arg) != TREE_CODE (parm))
9886         return 1;
9887   
9888       if (TYPE_PTRMEMFUNC_P (parm))
9889         {
9890           if (!TYPE_PTRMEMFUNC_P (arg))
9891             return 1;
9892
9893           return unify (tparms, targs, 
9894                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
9895                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
9896                         strict);
9897         }
9898
9899       if (CLASSTYPE_TEMPLATE_INFO (parm))
9900         {
9901           tree t = NULL_TREE;
9902
9903           if (strict_in & UNIFY_ALLOW_DERIVED)
9904             {
9905               /* First, we try to unify the PARM and ARG directly.  */
9906               t = try_class_unification (tparms, targs,
9907                                          parm, arg);
9908
9909               if (!t)
9910                 {
9911                   /* Fallback to the special case allowed in
9912                      [temp.deduct.call]:
9913                      
9914                        If P is a class, and P has the form
9915                        template-id, then A can be a derived class of
9916                        the deduced A.  Likewise, if P is a pointer to
9917                        a class of the form template-id, A can be a
9918                        pointer to a derived class pointed to by the
9919                        deduced A.  */
9920                   t = get_template_base (tparms, targs,
9921                                          parm, arg);
9922
9923                   if (! t || t == error_mark_node)
9924                     return 1;
9925                 }
9926             }
9927           else if (CLASSTYPE_TEMPLATE_INFO (arg) 
9928                    && (CLASSTYPE_TI_TEMPLATE (parm) 
9929                        == CLASSTYPE_TI_TEMPLATE (arg)))
9930             /* Perhaps PARM is something like S<U> and ARG is S<int>.
9931                Then, we should unify `int' and `U'.  */
9932             t = arg;
9933           else
9934             /* There's no chance of unification succeeding.  */
9935             return 1;
9936
9937           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
9938                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
9939         }
9940       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
9941         return 1;
9942       return 0;
9943
9944     case METHOD_TYPE:
9945     case FUNCTION_TYPE:
9946       if (TREE_CODE (arg) != TREE_CODE (parm))
9947         return 1;
9948
9949       if (unify (tparms, targs, TREE_TYPE (parm),
9950                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
9951         return 1;
9952       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
9953                                     TYPE_ARG_TYPES (arg), 1, 
9954                                     DEDUCE_EXACT, 0, -1);
9955
9956     case OFFSET_TYPE:
9957       if (TREE_CODE (arg) != OFFSET_TYPE)
9958         return 1;
9959       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
9960                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
9961         return 1;
9962       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9963                     strict);
9964
9965     case CONST_DECL:
9966       if (DECL_TEMPLATE_PARM_P (parm))
9967         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
9968       if (arg != decl_constant_value (parm)) 
9969         return 1;
9970       return 0;
9971
9972     case FIELD_DECL:
9973     case TEMPLATE_DECL:
9974       /* Matched cases are handled by the ARG == PARM test above.  */
9975       return 1;
9976
9977     case MINUS_EXPR:
9978       if (tree_int_cst_equal (TREE_OPERAND (parm, 1), integer_one_node)
9979           && (strict_in & UNIFY_ALLOW_MAX_CORRECTION))
9980         {
9981           /* We handle this case specially, since it comes up with
9982              arrays.  In particular, something like:
9983
9984              template <int N> void f(int (&x)[N]);
9985
9986              Here, we are trying to unify the range type, which
9987              looks like [0 ... (N - 1)].  */
9988           tree t, t1, t2;
9989           t1 = TREE_OPERAND (parm, 0);
9990           t2 = TREE_OPERAND (parm, 1);
9991
9992           t = fold (build (PLUS_EXPR, integer_type_node, arg, t2));
9993
9994           return unify (tparms, targs, t1, t, strict);
9995         }
9996       /* else fall through */
9997
9998     default:
9999       if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
10000         {
10001
10002           /* We're looking at an expression.  This can happen with
10003              something like: 
10004            
10005                template <int I>
10006                void foo(S<I>, S<I + 2>);
10007
10008              This is a "nondeduced context":
10009
10010                [deduct.type]
10011            
10012                The nondeduced contexts are:
10013
10014                --A type that is a template-id in which one or more of
10015                  the template-arguments is an expression that references
10016                  a template-parameter.  
10017
10018              In these cases, we assume deduction succeeded, but don't
10019              actually infer any unifications.  */
10020
10021           if (!uses_template_parms (parm)
10022               && !template_args_equal (parm, arg))
10023             return 1;
10024           else
10025             return 0;
10026         }
10027       else
10028         sorry ("use of `%s' in template type unification",
10029                tree_code_name [(int) TREE_CODE (parm)]);
10030
10031       return 1;
10032     }
10033 }
10034 \f
10035 /* Called if RESULT is explicitly instantiated, or is a member of an
10036    explicitly instantiated class, or if using -frepo and the
10037    instantiation of RESULT has been assigned to this file.  */
10038
10039 void
10040 mark_decl_instantiated (tree result, int extern_p)
10041 {
10042   /* We used to set this unconditionally; we moved that to
10043      do_decl_instantiation so it wouldn't get set on members of
10044      explicit class template instantiations.  But we still need to set
10045      it here for the 'extern template' case in order to suppress
10046      implicit instantiations.  */
10047   if (extern_p)
10048     SET_DECL_EXPLICIT_INSTANTIATION (result);
10049
10050   /* If this entity has already been written out, it's too late to
10051      make any modifications.  */
10052   if (TREE_ASM_WRITTEN (result))
10053     return;
10054
10055   if (TREE_CODE (result) != FUNCTION_DECL)
10056     /* The TREE_PUBLIC flag for function declarations will have been
10057        set correctly by tsubst.  */
10058     TREE_PUBLIC (result) = 1;
10059
10060   /* This might have been set by an earlier implicit instantiation.  */
10061   DECL_COMDAT (result) = 0;
10062
10063   if (! extern_p)
10064     {
10065       DECL_INTERFACE_KNOWN (result) = 1;
10066       DECL_NOT_REALLY_EXTERN (result) = 1;
10067
10068       /* Always make artificials weak.  */
10069       if (DECL_ARTIFICIAL (result) && flag_weak)
10070         comdat_linkage (result);
10071       /* For WIN32 we also want to put explicit instantiations in
10072          linkonce sections.  */
10073       else if (TREE_PUBLIC (result))
10074         maybe_make_one_only (result);
10075     }
10076
10077   if (TREE_CODE (result) == FUNCTION_DECL)
10078     defer_fn (result);
10079 }
10080
10081 /* Given two function templates PAT1 and PAT2, return:
10082
10083    DEDUCE should be DEDUCE_EXACT or DEDUCE_ORDER.
10084    
10085    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10086    -1 if PAT2 is more specialized than PAT1.
10087    0 if neither is more specialized.
10088
10089    LEN is passed through to fn_type_unification.  */
10090    
10091 int
10092 more_specialized (tree pat1, tree pat2, int deduce, int len)
10093 {
10094   tree targs;
10095   int winner = 0;
10096
10097   /* If template argument deduction succeeds, we substitute the
10098      resulting arguments into non-deduced contexts.  While doing that,
10099      we must be aware that we may encounter dependent types.  */
10100   ++processing_template_decl;
10101   targs = get_bindings_real (pat1, DECL_TEMPLATE_RESULT (pat2),
10102                              NULL_TREE, 0, deduce, len);
10103   if (targs)
10104     --winner;
10105
10106   targs = get_bindings_real (pat2, DECL_TEMPLATE_RESULT (pat1),
10107                              NULL_TREE, 0, deduce, len);
10108   if (targs)
10109     ++winner;
10110   --processing_template_decl;
10111
10112   return winner;
10113 }
10114
10115 /* Given two class template specialization list nodes PAT1 and PAT2, return:
10116
10117    1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10118    -1 if PAT2 is more specialized than PAT1.
10119    0 if neither is more specialized.
10120
10121    FULL_ARGS is the full set of template arguments that triggers this
10122    partial ordering.  */
10123    
10124 int
10125 more_specialized_class (tree pat1, tree pat2, tree full_args)
10126 {
10127   tree targs;
10128   int winner = 0;
10129
10130   targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
10131                               add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
10132   if (targs)
10133     --winner;
10134
10135   targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
10136                               add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
10137   if (targs)
10138     ++winner;
10139
10140   return winner;
10141 }
10142
10143 /* Return the template arguments that will produce the function signature
10144    DECL from the function template FN, with the explicit template
10145    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is 1, the return type must
10146    also match.  Return NULL_TREE if no satisfactory arguments could be
10147    found.  DEDUCE and LEN are passed through to fn_type_unification.  */
10148    
10149 static tree
10150 get_bindings_real (tree fn, 
10151                    tree decl, 
10152                    tree explicit_args, 
10153                    int check_rettype, 
10154                    int deduce, 
10155                    int len)
10156 {
10157   int ntparms = DECL_NTPARMS (fn);
10158   tree targs = make_tree_vec (ntparms);
10159   tree decl_type;
10160   tree decl_arg_types;
10161   int i;
10162
10163   /* Substitute the explicit template arguments into the type of DECL.
10164      The call to fn_type_unification will handle substitution into the
10165      FN.  */
10166   decl_type = TREE_TYPE (decl);
10167   if (explicit_args && uses_template_parms (decl_type))
10168     {
10169       tree tmpl;
10170       tree converted_args;
10171
10172       if (DECL_TEMPLATE_INFO (decl))
10173         tmpl = DECL_TI_TEMPLATE (decl);
10174       else
10175         /* We can get here for some invalid specializations.  */
10176         return NULL_TREE;
10177
10178       converted_args
10179         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10180                                   explicit_args, NULL_TREE,
10181                                   tf_none, /*require_all_arguments=*/0));
10182       if (converted_args == error_mark_node)
10183         return NULL_TREE;
10184       
10185       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE); 
10186       if (decl_type == error_mark_node)
10187         return NULL_TREE;
10188     }
10189
10190   decl_arg_types = TYPE_ARG_TYPES (decl_type);
10191   /* Never do unification on the 'this' parameter.  */
10192   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10193     decl_arg_types = TREE_CHAIN (decl_arg_types);
10194
10195   i = fn_type_unification (fn, explicit_args, targs, 
10196                            decl_arg_types,
10197                            (check_rettype || DECL_CONV_FN_P (fn)
10198                             ? TREE_TYPE (decl_type) : NULL_TREE),
10199                            deduce, len);
10200
10201   if (i != 0)
10202     return NULL_TREE;
10203
10204   return targs;
10205 }
10206
10207 /* For most uses, we want to check the return type.  */
10208
10209 static tree 
10210 get_bindings (tree fn, tree decl, tree explicit_args)
10211 {
10212   return get_bindings_real (fn, decl, explicit_args, 1, DEDUCE_EXACT, -1);
10213 }
10214
10215 /* But for resolve_overloaded_unification, we only care about the parameter
10216    types.  */
10217
10218 static tree
10219 get_bindings_overload (tree fn, tree decl, tree explicit_args)
10220 {
10221   return get_bindings_real (fn, decl, explicit_args, 0, DEDUCE_EXACT, -1);
10222 }
10223
10224 /* Return the innermost template arguments that, when applied to a
10225    template specialization whose innermost template parameters are
10226    TPARMS, and whose specialization arguments are PARMS, yield the
10227    ARGS.  
10228
10229    For example, suppose we have:
10230
10231      template <class T, class U> struct S {};
10232      template <class T> struct S<T*, int> {};
10233
10234    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
10235    {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10236    int}.  The resulting vector will be {double}, indicating that `T'
10237    is bound to `double'.  */
10238
10239 static tree
10240 get_class_bindings (tree tparms, tree parms, tree args)
10241 {
10242   int i, ntparms = TREE_VEC_LENGTH (tparms);
10243   tree vec = make_tree_vec (ntparms);
10244
10245   if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10246              UNIFY_ALLOW_NONE))
10247     return NULL_TREE;
10248
10249   for (i =  0; i < ntparms; ++i)
10250     if (! TREE_VEC_ELT (vec, i))
10251       return NULL_TREE;
10252
10253   if (verify_class_unification (vec, parms, args))
10254     return NULL_TREE;
10255
10256   return vec;
10257 }
10258
10259 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10260    Pick the most specialized template, and return the corresponding
10261    instantiation, or if there is no corresponding instantiation, the
10262    template itself.  If there is no most specialized template,
10263    error_mark_node is returned.  If there are no templates at all,
10264    NULL_TREE is returned.  */
10265
10266 tree
10267 most_specialized_instantiation (tree instantiations)
10268 {
10269   tree fn, champ;
10270   int fate;
10271
10272   if (!instantiations)
10273     return NULL_TREE;
10274
10275   champ = instantiations;
10276   for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10277     {
10278       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10279                                DEDUCE_EXACT, -1);
10280       if (fate == 1)
10281         ;
10282       else
10283         {
10284           if (fate == 0)
10285             {
10286               fn = TREE_CHAIN (fn);
10287               if (! fn)
10288                 return error_mark_node;
10289             }
10290           champ = fn;
10291         }
10292     }
10293
10294   for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
10295     {
10296       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10297                                DEDUCE_EXACT, -1);
10298       if (fate != 1)
10299         return error_mark_node;
10300     }
10301
10302   return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10303 }
10304
10305 /* Return the most specialized of the list of templates in FNS that can
10306    produce an instantiation matching DECL, given the explicit template
10307    arguments EXPLICIT_ARGS.  */
10308
10309 static tree
10310 most_specialized (tree fns, tree decl, tree explicit_args)
10311 {
10312   tree candidates = NULL_TREE;
10313   tree fn, args;
10314
10315   for (fn = fns; fn; fn = TREE_CHAIN (fn))
10316     {
10317       tree candidate = TREE_VALUE (fn);
10318
10319       args = get_bindings (candidate, decl, explicit_args);
10320       if (args)
10321         candidates = tree_cons (NULL_TREE, candidate, candidates);
10322     }
10323
10324   return most_specialized_instantiation (candidates);
10325 }
10326
10327 /* If DECL is a specialization of some template, return the most
10328    general such template.  Otherwise, returns NULL_TREE.
10329
10330    For example, given:
10331
10332      template <class T> struct S { template <class U> void f(U); };
10333
10334    if TMPL is `template <class U> void S<int>::f(U)' this will return
10335    the full template.  This function will not trace past partial
10336    specializations, however.  For example, given in addition:
10337
10338      template <class T> struct S<T*> { template <class U> void f(U); };
10339
10340    if TMPL is `template <class U> void S<int*>::f(U)' this will return
10341    `template <class T> template <class U> S<T*>::f(U)'.  */
10342
10343 tree
10344 most_general_template (tree decl)
10345 {
10346   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10347      an immediate specialization.  */
10348   if (TREE_CODE (decl) == FUNCTION_DECL)
10349     {
10350       if (DECL_TEMPLATE_INFO (decl)) {
10351         decl = DECL_TI_TEMPLATE (decl);
10352
10353         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10354            template friend.  */
10355         if (TREE_CODE (decl) != TEMPLATE_DECL)
10356           return NULL_TREE;
10357       } else
10358         return NULL_TREE;
10359     }
10360
10361   /* Look for more and more general templates.  */
10362   while (DECL_TEMPLATE_INFO (decl))
10363     {
10364       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10365          (See cp-tree.h for details.)  */
10366       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10367         break;
10368
10369       if (CLASS_TYPE_P (TREE_TYPE (decl))
10370           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10371         break;
10372
10373       /* Stop if we run into an explicitly specialized class template.  */
10374       if (!DECL_NAMESPACE_SCOPE_P (decl)
10375           && DECL_CONTEXT (decl)
10376           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10377         break;
10378
10379       decl = DECL_TI_TEMPLATE (decl);
10380     }
10381
10382   return decl;
10383 }
10384
10385 /* Return the most specialized of the class template specializations
10386    of TMPL which can produce an instantiation matching ARGS, or
10387    error_mark_node if the choice is ambiguous.  */
10388
10389 static tree
10390 most_specialized_class (tree tmpl, tree args)
10391 {
10392   tree list = NULL_TREE;
10393   tree t;
10394   tree champ;
10395   int fate;
10396
10397   tmpl = most_general_template (tmpl);
10398   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10399     {
10400       tree spec_args 
10401         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10402       if (spec_args)
10403         {
10404           list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10405           TREE_TYPE (list) = TREE_TYPE (t);
10406         }
10407     }
10408
10409   if (! list)
10410     return NULL_TREE;
10411
10412   t = list;
10413   champ = t;
10414   t = TREE_CHAIN (t);
10415   for (; t; t = TREE_CHAIN (t))
10416     {
10417       fate = more_specialized_class (champ, t, args);
10418       if (fate == 1)
10419         ;
10420       else
10421         {
10422           if (fate == 0)
10423             {
10424               t = TREE_CHAIN (t);
10425               if (! t)
10426                 return error_mark_node;
10427             }
10428           champ = t;
10429         }
10430     }
10431
10432   for (t = list; t && t != champ; t = TREE_CHAIN (t))
10433     {
10434       fate = more_specialized_class (champ, t, args);
10435       if (fate != 1)
10436         return error_mark_node;
10437     }
10438
10439   return champ;
10440 }
10441
10442 /* Explicitly instantiate DECL.  */
10443
10444 void
10445 do_decl_instantiation (tree decl, tree storage)
10446 {
10447   tree result = NULL_TREE;
10448   int extern_p = 0;
10449
10450   if (!decl)
10451     /* An error occurred, for which grokdeclarator has already issued
10452        an appropriate message.  */
10453     return;
10454   else if (! DECL_LANG_SPECIFIC (decl))
10455     {
10456       error ("explicit instantiation of non-template `%#D'", decl);
10457       return;
10458     }
10459   else if (TREE_CODE (decl) == VAR_DECL)
10460     {
10461       /* There is an asymmetry here in the way VAR_DECLs and
10462          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
10463          the latter, the DECL we get back will be marked as a
10464          template instantiation, and the appropriate
10465          DECL_TEMPLATE_INFO will be set up.  This does not happen for
10466          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
10467          should handle VAR_DECLs as it currently handles
10468          FUNCTION_DECLs.  */
10469       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10470       if (!result || TREE_CODE (result) != VAR_DECL)
10471         {
10472           error ("no matching template for `%D' found", decl);
10473           return;
10474         }
10475     }
10476   else if (TREE_CODE (decl) != FUNCTION_DECL)
10477     {
10478       error ("explicit instantiation of `%#D'", decl);
10479       return;
10480     }
10481   else
10482     result = decl;
10483
10484   /* Check for various error cases.  Note that if the explicit
10485      instantiation is valid the RESULT will currently be marked as an
10486      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10487      until we get here.  */
10488
10489   if (DECL_TEMPLATE_SPECIALIZATION (result))
10490     {
10491       /* DR 259 [temp.spec].
10492
10493          Both an explicit instantiation and a declaration of an explicit
10494          specialization shall not appear in a program unless the explicit
10495          instantiation follows a declaration of the explicit specialization.
10496
10497          For a given set of template parameters, if an explicit
10498          instantiation of a template appears after a declaration of an
10499          explicit specialization for that template, the explicit
10500          instantiation has no effect.  */
10501       return;
10502     }
10503   else if (DECL_EXPLICIT_INSTANTIATION (result))
10504     {
10505       /* [temp.spec]
10506
10507          No program shall explicitly instantiate any template more
10508          than once.  
10509
10510          We check DECL_INTERFACE_KNOWN so as not to complain when the first
10511          instantiation was `extern' and the second is not, and EXTERN_P for
10512          the opposite case.  If -frepo, chances are we already got marked
10513          as an explicit instantiation because of the repo file.  */
10514       if (DECL_INTERFACE_KNOWN (result) && !extern_p && !flag_use_repository)
10515         pedwarn ("duplicate explicit instantiation of `%#D'", result);
10516
10517       /* If we've already instantiated the template, just return now.  */
10518       if (DECL_INTERFACE_KNOWN (result))
10519         return;
10520     }
10521   else if (!DECL_IMPLICIT_INSTANTIATION (result))
10522     {
10523       error ("no matching template for `%D' found", result);
10524       return;
10525     }
10526   else if (!DECL_TEMPLATE_INFO (result))
10527     {
10528       pedwarn ("explicit instantiation of non-template `%#D'", result);
10529       return;
10530     }
10531
10532   if (flag_external_templates)
10533     return;
10534
10535   if (storage == NULL_TREE)
10536     ;
10537   else if (storage == ridpointers[(int) RID_EXTERN])
10538     {
10539       if (pedantic && !in_system_header)
10540         pedwarn ("ISO C++ forbids the use of `extern' on explicit instantiations");
10541       extern_p = 1;
10542     }
10543   else
10544     error ("storage class `%D' applied to template instantiation",
10545               storage);
10546
10547   SET_DECL_EXPLICIT_INSTANTIATION (result);
10548   mark_decl_instantiated (result, extern_p);
10549   repo_template_instantiated (result, extern_p);
10550   if (! extern_p)
10551     instantiate_decl (result, /*defer_ok=*/1);
10552 }
10553
10554 void
10555 mark_class_instantiated (tree t, int extern_p)
10556 {
10557   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
10558   SET_CLASSTYPE_INTERFACE_KNOWN (t);
10559   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
10560   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
10561   if (! extern_p)
10562     {
10563       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
10564       rest_of_type_compilation (t, 1);
10565     }
10566 }     
10567
10568 /* Called from do_type_instantiation through binding_table_foreach to
10569    do recursive instantiation for the type bound in ENTRY.  */
10570 static void
10571 bt_instantiate_type_proc (binding_entry entry, void *data)
10572 {
10573   tree storage = *(tree *) data;
10574
10575   if (IS_AGGR_TYPE (entry->type)
10576       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
10577     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
10578 }
10579
10580 /* Perform an explicit instantiation of template class T.  STORAGE, if
10581    non-null, is the RID for extern, inline or static.  COMPLAIN is
10582    nonzero if this is called from the parser, zero if called recursively,
10583    since the standard is unclear (as detailed below).  */
10584  
10585 void
10586 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
10587 {
10588   int extern_p = 0;
10589   int nomem_p = 0;
10590   int static_p = 0;
10591
10592   if (TREE_CODE (t) == TYPE_DECL)
10593     t = TREE_TYPE (t);
10594
10595   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
10596     {
10597       error ("explicit instantiation of non-template type `%T'", t);
10598       return;
10599     }
10600
10601   complete_type (t);
10602
10603   /* With -fexternal-templates, explicit instantiations are treated the same
10604      as implicit ones.  */
10605   if (flag_external_templates)
10606     return;
10607
10608   if (!COMPLETE_TYPE_P (t))
10609     {
10610       if (complain & tf_error)
10611         error ("explicit instantiation of `%#T' before definition of template",
10612                   t);
10613       return;
10614     }
10615
10616   if (storage != NULL_TREE)
10617     {
10618       if (pedantic && !in_system_header)
10619         pedwarn("ISO C++ forbids the use of `%s' on explicit instantiations", 
10620                    IDENTIFIER_POINTER (storage));
10621
10622       if (storage == ridpointers[(int) RID_INLINE])
10623         nomem_p = 1;
10624       else if (storage == ridpointers[(int) RID_EXTERN])
10625         extern_p = 1;
10626       else if (storage == ridpointers[(int) RID_STATIC])
10627         static_p = 1;
10628       else
10629         {
10630           error ("storage class `%D' applied to template instantiation",
10631                     storage);
10632           extern_p = 0;
10633         }
10634     }
10635
10636   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10637     {
10638       /* DR 259 [temp.spec].
10639
10640          Both an explicit instantiation and a declaration of an explicit
10641          specialization shall not appear in a program unless the explicit
10642          instantiation follows a declaration of the explicit specialization.
10643
10644          For a given set of template parameters, if an explicit
10645          instantiation of a template appears after a declaration of an
10646          explicit specialization for that template, the explicit
10647          instantiation has no effect.  */
10648       return;
10649     }
10650   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
10651     {
10652       /* [temp.spec]
10653
10654          No program shall explicitly instantiate any template more
10655          than once.  
10656
10657          If CLASSTYPE_INTERFACE_ONLY, then the first explicit instantiation
10658          was `extern'.  If EXTERN_P then the second is.  If -frepo, chances
10659          are we already got marked as an explicit instantiation because of the
10660          repo file.  All these cases are OK.  */
10661       if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p && !flag_use_repository
10662           && (complain & tf_error))
10663         pedwarn ("duplicate explicit instantiation of `%#T'", t);
10664       
10665       /* If we've already instantiated the template, just return now.  */
10666       if (!CLASSTYPE_INTERFACE_ONLY (t))
10667         return;
10668     }
10669
10670   mark_class_instantiated (t, extern_p);
10671   repo_template_instantiated (t, extern_p);
10672
10673   if (nomem_p)
10674     return;
10675
10676   {
10677     tree tmp;
10678
10679     /* In contrast to implicit instantiation, where only the
10680        declarations, and not the definitions, of members are
10681        instantiated, we have here:
10682
10683          [temp.explicit]
10684
10685          The explicit instantiation of a class template specialization
10686          implies the instantiation of all of its members not
10687          previously explicitly specialized in the translation unit
10688          containing the explicit instantiation.  
10689
10690        Of course, we can't instantiate member template classes, since
10691        we don't have any arguments for them.  Note that the standard
10692        is unclear on whether the instantiation of the members are
10693        *explicit* instantiations or not.  We choose to be generous,
10694        and not set DECL_EXPLICIT_INSTANTIATION.  Therefore, we allow
10695        the explicit instantiation of a class where some of the members
10696        have no definition in the current translation unit.  */
10697
10698     if (! static_p)
10699       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
10700         if (TREE_CODE (tmp) == FUNCTION_DECL
10701             && DECL_TEMPLATE_INSTANTIATION (tmp))
10702           {
10703             mark_decl_instantiated (tmp, extern_p);
10704             repo_template_instantiated (tmp, extern_p);
10705             if (! extern_p)
10706               instantiate_decl (tmp, /*defer_ok=*/1);
10707           }
10708
10709     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
10710       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
10711         {
10712           mark_decl_instantiated (tmp, extern_p);
10713           repo_template_instantiated (tmp, extern_p);
10714           if (! extern_p)
10715             instantiate_decl (tmp, /*defer_ok=*/1);
10716         }
10717
10718     if (CLASSTYPE_NESTED_UTDS (t))
10719       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
10720                              bt_instantiate_type_proc, &storage);
10721   }
10722 }
10723
10724 /* Given a function DECL, which is a specialization of TMPL, modify
10725    DECL to be a re-instantiation of TMPL with the same template
10726    arguments.  TMPL should be the template into which tsubst'ing
10727    should occur for DECL, not the most general template.
10728
10729    One reason for doing this is a scenario like this:
10730
10731      template <class T>
10732      void f(const T&, int i);
10733
10734      void g() { f(3, 7); }
10735
10736      template <class T>
10737      void f(const T& t, const int i) { }
10738
10739    Note that when the template is first instantiated, with
10740    instantiate_template, the resulting DECL will have no name for the
10741    first parameter, and the wrong type for the second.  So, when we go
10742    to instantiate the DECL, we regenerate it.  */
10743
10744 static void
10745 regenerate_decl_from_template (tree decl, tree tmpl)
10746 {
10747   /* The most general version of TMPL.  */
10748   tree gen_tmpl;
10749   /* The arguments used to instantiate DECL, from the most general
10750      template.  */
10751   tree args;
10752   tree code_pattern;
10753   tree new_decl;
10754   bool unregistered;
10755
10756   args = DECL_TI_ARGS (decl);
10757   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
10758
10759   /* Unregister the specialization so that when we tsubst we will not
10760      just return DECL.  We don't have to unregister DECL from TMPL
10761      because if would only be registered there if it were a partial
10762      instantiation of a specialization, which it isn't: it's a full
10763      instantiation.  */
10764   gen_tmpl = most_general_template (tmpl);
10765   unregistered = reregister_specialization (decl, gen_tmpl,
10766                                             /*new_spec=*/NULL_TREE);
10767
10768   /* If the DECL was not unregistered then something peculiar is
10769      happening: we created a specialization but did not call
10770      register_specialization for it.  */
10771   my_friendly_assert (unregistered, 0);
10772
10773   /* Make sure that we can see identifiers, and compute access
10774      correctly.  */
10775   push_access_scope (decl);
10776
10777   /* Do the substitution to get the new declaration.  */
10778   new_decl = tsubst (code_pattern, args, tf_error, NULL_TREE);
10779
10780   if (TREE_CODE (decl) == VAR_DECL)
10781     {
10782       /* Set up DECL_INITIAL, since tsubst doesn't.  */
10783       if (!DECL_INITIALIZED_IN_CLASS_P (decl))
10784         DECL_INITIAL (new_decl) = 
10785           tsubst_expr (DECL_INITIAL (code_pattern), args, 
10786                        tf_error, DECL_TI_TEMPLATE (decl));
10787     }
10788   else if (TREE_CODE (decl) == FUNCTION_DECL)
10789     {
10790       /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
10791          new decl.  */ 
10792       DECL_INITIAL (new_decl) = error_mark_node;
10793       /* And don't complain about a duplicate definition.  */
10794       DECL_INITIAL (decl) = NULL_TREE;
10795     }
10796
10797   pop_access_scope (decl);
10798
10799   /* The immediate parent of the new template is still whatever it was
10800      before, even though tsubst sets DECL_TI_TEMPLATE up as the most
10801      general template.  We also reset the DECL_ASSEMBLER_NAME since
10802      tsubst always calculates the name as if the function in question
10803      were really a template instance, and sometimes, with friend
10804      functions, this is not so.  See tsubst_friend_function for
10805      details.  */
10806   DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
10807   COPY_DECL_ASSEMBLER_NAME (decl, new_decl);
10808   COPY_DECL_RTL (decl, new_decl);
10809   DECL_USE_TEMPLATE (new_decl) = DECL_USE_TEMPLATE (decl);
10810
10811   /* Call duplicate decls to merge the old and new declarations.  */
10812   duplicate_decls (new_decl, decl);
10813
10814   /* Now, re-register the specialization.  */
10815   register_specialization (decl, gen_tmpl, args);
10816 }
10817
10818 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
10819    substituted to get DECL.  */
10820
10821 tree
10822 template_for_substitution (tree decl)
10823 {
10824   tree tmpl = DECL_TI_TEMPLATE (decl);
10825
10826   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
10827      for the instantiation.  This is not always the most general
10828      template.  Consider, for example:
10829
10830         template <class T>
10831         struct S { template <class U> void f();
10832                    template <> void f<int>(); };
10833
10834      and an instantiation of S<double>::f<int>.  We want TD to be the
10835      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
10836   while (/* An instantiation cannot have a definition, so we need a
10837             more general template.  */
10838          DECL_TEMPLATE_INSTANTIATION (tmpl)
10839            /* We must also deal with friend templates.  Given:
10840
10841                 template <class T> struct S { 
10842                   template <class U> friend void f() {};
10843                 };
10844
10845               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
10846               so far as the language is concerned, but that's still
10847               where we get the pattern for the instantiation from.  On
10848               other hand, if the definition comes outside the class, say:
10849
10850                 template <class T> struct S { 
10851                   template <class U> friend void f();
10852                 };
10853                 template <class U> friend void f() {}
10854
10855               we don't need to look any further.  That's what the check for
10856               DECL_INITIAL is for.  */
10857           || (TREE_CODE (decl) == FUNCTION_DECL
10858               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
10859               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
10860     {
10861       /* The present template, TD, should not be a definition.  If it
10862          were a definition, we should be using it!  Note that we
10863          cannot restructure the loop to just keep going until we find
10864          a template with a definition, since that might go too far if
10865          a specialization was declared, but not defined.  */
10866       my_friendly_assert (!(TREE_CODE (decl) == VAR_DECL
10867                             && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl))), 
10868                           0); 
10869       
10870       /* Fetch the more general template.  */
10871       tmpl = DECL_TI_TEMPLATE (tmpl);
10872     }
10873
10874   return tmpl;
10875 }
10876
10877 /* Produce the definition of D, a _DECL generated from a template.  If
10878    DEFER_OK is nonzero, then we don't have to actually do the
10879    instantiation now; we just have to do it sometime.  */
10880
10881 tree
10882 instantiate_decl (tree d, int defer_ok)
10883 {
10884   tree tmpl = DECL_TI_TEMPLATE (d);
10885   tree gen_args;
10886   tree args;
10887   tree td;
10888   tree code_pattern;
10889   tree spec;
10890   tree gen_tmpl;
10891   int pattern_defined;
10892   int need_push;
10893   location_t saved_loc = input_location;
10894   
10895   /* This function should only be used to instantiate templates for
10896      functions and static member variables.  */
10897   my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
10898                       || TREE_CODE (d) == VAR_DECL, 0);
10899
10900   /* Variables are never deferred; if instantiation is required, they
10901      are instantiated right away.  That allows for better code in the
10902      case that an expression refers to the value of the variable --
10903      if the variable has a constant value the referring expression can
10904      take advantage of that fact.  */
10905   if (TREE_CODE (d) == VAR_DECL)
10906     defer_ok = 0;
10907
10908   /* Don't instantiate cloned functions.  Instead, instantiate the
10909      functions they cloned.  */
10910   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
10911     d = DECL_CLONED_FUNCTION (d);
10912
10913   if (DECL_TEMPLATE_INSTANTIATED (d))
10914     /* D has already been instantiated.  It might seem reasonable to
10915        check whether or not D is an explicit instantiation, and, if so,
10916        stop here.  But when an explicit instantiation is deferred
10917        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
10918        is set, even though we still need to do the instantiation.  */
10919     return d;
10920
10921   /* If we already have a specialization of this declaration, then
10922      there's no reason to instantiate it.  Note that
10923      retrieve_specialization gives us both instantiations and
10924      specializations, so we must explicitly check
10925      DECL_TEMPLATE_SPECIALIZATION.  */
10926   gen_tmpl = most_general_template (tmpl);
10927   gen_args = DECL_TI_ARGS (d);
10928   spec = retrieve_specialization (gen_tmpl, gen_args);
10929   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
10930     return spec;
10931
10932   /* This needs to happen before any tsubsting.  */
10933   if (! push_tinst_level (d))
10934     return d;
10935
10936   timevar_push (TV_PARSE);
10937
10938   /* We may be in the middle of deferred access check.  Disable it now.  */
10939   push_deferring_access_checks (dk_no_deferred);
10940
10941   /* Our caller does not expect collection to happen, which it might if
10942      we decide to compile the function to rtl now.  Arrange for a new
10943      gc context to be created if so.  */
10944   function_depth++;
10945
10946   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
10947      for the instantiation.  */
10948   td = template_for_substitution (d);
10949   code_pattern = DECL_TEMPLATE_RESULT (td);
10950
10951   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
10952       || DECL_TEMPLATE_SPECIALIZATION (td))
10953     /* In the case of a friend template whose definition is provided
10954        outside the class, we may have too many arguments.  Drop the
10955        ones we don't need.  The same is true for specializations.  */
10956     args = get_innermost_template_args
10957       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
10958   else
10959     args = gen_args;
10960
10961   if (TREE_CODE (d) == FUNCTION_DECL)
10962     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
10963   else
10964     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
10965
10966   input_location = DECL_SOURCE_LOCATION (d);
10967
10968   if (pattern_defined)
10969     {
10970       /* Let the repository code that this template definition is
10971          available.
10972
10973          The repository doesn't need to know about cloned functions
10974          because they never actually show up in the object file.  It
10975          does need to know about the clones; those are the symbols
10976          that the linker will be emitting error messages about.  */
10977       if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (d)
10978           || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (d))
10979         {
10980           tree t;
10981
10982           for (t = TREE_CHAIN (d);
10983                t && DECL_CLONED_FUNCTION_P (t); 
10984                t = TREE_CHAIN (t))
10985             repo_template_used (t);
10986         }
10987       else
10988         repo_template_used (d);
10989
10990       if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
10991         {
10992           if (flag_alt_external_templates)
10993             {
10994               if (interface_unknown)
10995                 warn_if_unknown_interface (d);
10996             }
10997           else if (DECL_INTERFACE_KNOWN (code_pattern))
10998             {
10999               DECL_INTERFACE_KNOWN (d) = 1;
11000               DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
11001             }
11002           else
11003             warn_if_unknown_interface (code_pattern);
11004         }
11005
11006       if (at_eof)
11007         import_export_decl (d);
11008     }
11009
11010   if (!defer_ok)
11011     {
11012       /* Recheck the substitutions to obtain any warning messages
11013          about ignoring cv qualifiers.  */
11014       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11015       tree type = TREE_TYPE (gen);
11016
11017       /* Make sure that we can see identifiers, and compute access
11018          correctly.  D is already the target FUNCTION_DECL with the
11019          right context.  */
11020       push_access_scope (d);
11021
11022       if (TREE_CODE (gen) == FUNCTION_DECL)
11023         {
11024           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11025           tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11026                   tf_error | tf_warning, d);
11027           /* Don't simply tsubst the function type, as that will give
11028              duplicate warnings about poor parameter qualifications.
11029              The function arguments are the same as the decl_arguments
11030              without the top level cv qualifiers.  */
11031           type = TREE_TYPE (type);
11032         }
11033       tsubst (type, gen_args, tf_error | tf_warning, d);
11034
11035       pop_access_scope (d);
11036     }
11037   
11038   if (TREE_CODE (d) == VAR_DECL && DECL_INITIALIZED_IN_CLASS_P (d)
11039       && DECL_INITIAL (d) == NULL_TREE)
11040     /* We should have set up DECL_INITIAL in instantiate_class_template.  */
11041     abort ();
11042   /* Reject all external templates except inline functions.  */
11043   else if (DECL_INTERFACE_KNOWN (d)
11044            && ! DECL_NOT_REALLY_EXTERN (d)
11045            && ! (TREE_CODE (d) == FUNCTION_DECL 
11046                  && DECL_INLINE (d)))
11047     goto out;
11048   /* Defer all other templates, unless we have been explicitly
11049      forbidden from doing so.  We restore the source position here
11050      because it's used by add_pending_template.  */
11051   else if (! pattern_defined || defer_ok)
11052     {
11053       input_location = saved_loc;
11054
11055       if (at_eof && !pattern_defined 
11056           && DECL_EXPLICIT_INSTANTIATION (d))
11057         /* [temp.explicit]
11058
11059            The definition of a non-exported function template, a
11060            non-exported member function template, or a non-exported
11061            member function or static data member of a class template
11062            shall be present in every translation unit in which it is
11063            explicitly instantiated.  */
11064         pedwarn
11065           ("explicit instantiation of `%D' but no definition available", d);
11066
11067       add_pending_template (d);
11068       goto out;
11069     }
11070
11071   need_push = !global_bindings_p ();
11072   if (need_push)
11073     push_to_top_level ();
11074
11075   /* Regenerate the declaration in case the template has been modified
11076      by a subsequent redeclaration.  */
11077   regenerate_decl_from_template (d, td);
11078   
11079   /* We already set the file and line above.  Reset them now in case
11080      they changed as a result of calling
11081      regenerate_decl_from_template.  */
11082   input_location = DECL_SOURCE_LOCATION (d);
11083
11084   if (TREE_CODE (d) == VAR_DECL)
11085     {
11086       /* Clear out DECL_RTL; whatever was there before may not be right
11087          since we've reset the type of the declaration.  */
11088       SET_DECL_RTL (d, NULL_RTX);
11089
11090       DECL_IN_AGGR_P (d) = 0;
11091       import_export_decl (d);
11092       DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
11093
11094       if (DECL_EXTERNAL (d))
11095         {
11096           /* The fact that this code is executing indicates that:
11097              
11098              (1) D is a template static data member, for which a
11099                  definition is available.
11100
11101              (2) An implicit or explicit instantiation has occurred.
11102
11103              (3) We are not going to emit a definition of the static
11104                  data member at this time.
11105
11106              This situation is peculiar, but it occurs on platforms
11107              without weak symbols when performing an implicit
11108              instantiation.  There, we cannot implicitly instantiate a
11109              defined static data member in more than one translation
11110              unit, so import_export_decl marks the declaration as
11111              external; we must rely on explicit instantiation.  */
11112         }
11113       else
11114         {
11115           /* Mark D as instantiated so that recursive calls to
11116              instantiate_decl do not try to instantiate it again.  */
11117           DECL_TEMPLATE_INSTANTIATED (d) = 1;
11118           cp_finish_decl (d, 
11119                           (!DECL_INITIALIZED_IN_CLASS_P (d) 
11120                            ? DECL_INITIAL (d) : NULL_TREE),
11121                           NULL_TREE, 0);
11122         }
11123     }
11124   else if (TREE_CODE (d) == FUNCTION_DECL)
11125     {
11126       htab_t saved_local_specializations;
11127       tree subst_decl;
11128       tree tmpl_parm;
11129       tree spec_parm;
11130
11131       /* Mark D as instantiated so that recursive calls to
11132          instantiate_decl do not try to instantiate it again.  */
11133       DECL_TEMPLATE_INSTANTIATED (d) = 1;
11134
11135       /* Save away the current list, in case we are instantiating one
11136          template from within the body of another.  */
11137       saved_local_specializations = local_specializations;
11138
11139       /* Set up the list of local specializations.  */
11140       local_specializations = htab_create (37, 
11141                                            hash_local_specialization,
11142                                            eq_local_specializations,
11143                                            NULL);
11144
11145       /* Set up context.  */
11146       import_export_decl (d);
11147       start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED);
11148
11149       /* Create substitution entries for the parameters.  */
11150       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11151       tmpl_parm = DECL_ARGUMENTS (subst_decl);
11152       spec_parm = DECL_ARGUMENTS (d);
11153       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11154         {
11155           register_local_specialization (spec_parm, tmpl_parm);
11156           spec_parm = skip_artificial_parms_for (d, spec_parm);
11157           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11158         }
11159       while (tmpl_parm)
11160         {
11161           register_local_specialization (spec_parm, tmpl_parm);
11162           tmpl_parm = TREE_CHAIN (tmpl_parm);
11163           spec_parm = TREE_CHAIN (spec_parm);
11164         }
11165       my_friendly_assert (!spec_parm, 20020813);
11166
11167       /* Substitute into the body of the function.  */
11168       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11169                    tf_error | tf_warning, tmpl);
11170
11171       /* We don't need the local specializations any more.  */
11172       htab_delete (local_specializations);
11173       local_specializations = saved_local_specializations;
11174
11175       /* Finish the function.  */
11176       d = finish_function (0);
11177       expand_or_defer_fn (d);
11178     }
11179
11180   /* We're not deferring instantiation any more.  */
11181   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11182
11183   if (need_push)
11184     pop_from_top_level ();
11185
11186 out:
11187   input_location = saved_loc;
11188   pop_deferring_access_checks ();
11189   pop_tinst_level ();
11190   function_depth--;
11191
11192   timevar_pop (TV_PARSE);
11193
11194   return d;
11195 }
11196
11197 /* Run through the list of templates that we wish we could
11198    instantiate, and instantiate any we can.  */
11199
11200 int
11201 instantiate_pending_templates (void)
11202 {
11203   tree *t;
11204   tree last = NULL_TREE;
11205   int instantiated_something = 0;
11206   int reconsider;
11207   location_t saved_loc = input_location;
11208   
11209   do 
11210     {
11211       reconsider = 0;
11212
11213       t = &pending_templates;
11214       while (*t)
11215         {
11216           tree instantiation = TREE_VALUE (*t);
11217
11218           reopen_tinst_level (TREE_PURPOSE (*t));
11219
11220           if (TYPE_P (instantiation))
11221             {
11222               tree fn;
11223
11224               if (!COMPLETE_TYPE_P (instantiation))
11225                 {
11226                   instantiate_class_template (instantiation);
11227                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11228                     for (fn = TYPE_METHODS (instantiation); 
11229                          fn;
11230                          fn = TREE_CHAIN (fn))
11231                       if (! DECL_ARTIFICIAL (fn))
11232                         instantiate_decl (fn, /*defer_ok=*/0);
11233                   if (COMPLETE_TYPE_P (instantiation))
11234                     {
11235                       instantiated_something = 1;
11236                       reconsider = 1;
11237                     }
11238                 }
11239
11240               if (COMPLETE_TYPE_P (instantiation))
11241                 /* If INSTANTIATION has been instantiated, then we don't
11242                    need to consider it again in the future.  */
11243                 *t = TREE_CHAIN (*t);
11244               else
11245                 {
11246                   last = *t;
11247                   t = &TREE_CHAIN (*t);
11248                 }
11249             }
11250           else
11251             {
11252               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11253                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11254                 {
11255                   instantiation = instantiate_decl (instantiation,
11256                                                     /*defer_ok=*/0);
11257                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11258                     {
11259                       instantiated_something = 1;
11260                       reconsider = 1;
11261                     }
11262                 }
11263
11264               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11265                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
11266                 /* If INSTANTIATION has been instantiated, then we don't
11267                    need to consider it again in the future.  */
11268                 *t = TREE_CHAIN (*t);
11269               else
11270                 {
11271                   last = *t;
11272                   t = &TREE_CHAIN (*t);
11273                 }
11274             }
11275           tinst_depth = 0;
11276           current_tinst_level = NULL_TREE;
11277         }
11278       last_pending_template = last;
11279     } 
11280   while (reconsider);
11281
11282   input_location = saved_loc;
11283   return instantiated_something;
11284 }
11285
11286 /* Substitute ARGVEC into T, which is a list of initializers for
11287    either base class or a non-static data member.  The TREE_PURPOSEs
11288    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
11289    instantiate_decl.  */
11290
11291 static tree
11292 tsubst_initializer_list (tree t, tree argvec)
11293 {
11294   tree inits = NULL_TREE;
11295
11296   for (; t; t = TREE_CHAIN (t))
11297     {
11298       tree decl;
11299       tree init;
11300       tree val;
11301
11302       decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11303                           NULL_TREE);
11304       decl = expand_member_init (decl);
11305       if (decl && !DECL_P (decl))
11306         in_base_initializer = 1;
11307       
11308       init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11309                           NULL_TREE);
11310       if (!init)
11311         ;
11312       else if (TREE_CODE (init) == TREE_LIST)
11313         for (val = init; val; val = TREE_CHAIN (val))
11314           TREE_VALUE (val) = convert_from_reference (TREE_VALUE (val));
11315       else if (init != void_type_node)
11316         init = convert_from_reference (init);
11317
11318       in_base_initializer = 0;
11319
11320       if (decl)
11321         {
11322           init = build_tree_list (decl, init);
11323           TREE_CHAIN (init) = inits;
11324           inits = init;
11325         }
11326     }
11327   return inits;
11328 }
11329
11330 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
11331
11332 static void
11333 set_current_access_from_decl (tree decl)
11334 {
11335   if (TREE_PRIVATE (decl))
11336     current_access_specifier = access_private_node;
11337   else if (TREE_PROTECTED (decl))
11338     current_access_specifier = access_protected_node;
11339   else
11340     current_access_specifier = access_public_node;
11341 }
11342
11343 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
11344    is the instantiation (which should have been created with
11345    start_enum) and ARGS are the template arguments to use.  */
11346
11347 static void
11348 tsubst_enum (tree tag, tree newtag, tree args)
11349 {
11350   tree e;
11351
11352   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11353     {
11354       tree value;
11355       tree decl;
11356
11357       decl = TREE_VALUE (e);
11358       /* Note that in a template enum, the TREE_VALUE is the
11359          CONST_DECL, not the corresponding INTEGER_CST.  */
11360       value = tsubst_expr (DECL_INITIAL (decl), 
11361                            args, tf_error | tf_warning,
11362                            NULL_TREE);
11363
11364       /* Give this enumeration constant the correct access.  */
11365       set_current_access_from_decl (decl);
11366
11367       /* Actually build the enumerator itself.  */
11368       build_enumerator (DECL_NAME (decl), value, newtag); 
11369     }
11370
11371   finish_enum (newtag);
11372   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11373     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11374 }
11375
11376 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
11377    its type -- but without substituting the innermost set of template
11378    arguments.  So, innermost set of template parameters will appear in
11379    the type.  */
11380
11381 tree 
11382 get_mostly_instantiated_function_type (tree decl)
11383 {
11384   tree fn_type;
11385   tree tmpl;
11386   tree targs;
11387   tree tparms;
11388   int parm_depth;
11389
11390   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11391   targs = DECL_TI_ARGS (decl);
11392   tparms = DECL_TEMPLATE_PARMS (tmpl);
11393   parm_depth = TMPL_PARMS_DEPTH (tparms);
11394
11395   /* There should be as many levels of arguments as there are levels
11396      of parameters.  */
11397   my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
11398
11399   fn_type = TREE_TYPE (tmpl);
11400
11401   if (parm_depth == 1)
11402     /* No substitution is necessary.  */
11403     ;
11404   else
11405     {
11406       int i;
11407       tree partial_args;
11408
11409       /* Replace the innermost level of the TARGS with NULL_TREEs to
11410          let tsubst know not to substitute for those parameters.  */
11411       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11412       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11413         SET_TMPL_ARGS_LEVEL (partial_args, i,
11414                              TMPL_ARGS_LEVEL (targs, i));
11415       SET_TMPL_ARGS_LEVEL (partial_args,
11416                            TMPL_ARGS_DEPTH (targs),
11417                            make_tree_vec (DECL_NTPARMS (tmpl)));
11418
11419       /* Make sure that we can see identifiers, and compute access
11420          correctly.  We can just use the context of DECL for the
11421          partial substitution here.  It depends only on outer template
11422          parameters, regardless of whether the innermost level is
11423          specialized or not.  */
11424       push_access_scope (decl);
11425
11426       ++processing_template_decl;
11427       /* Now, do the (partial) substitution to figure out the
11428          appropriate function type.  */
11429       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11430       --processing_template_decl;
11431
11432       /* Substitute into the template parameters to obtain the real
11433          innermost set of parameters.  This step is important if the
11434          innermost set of template parameters contains value
11435          parameters whose types depend on outer template parameters.  */
11436       TREE_VEC_LENGTH (partial_args)--;
11437       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11438
11439       pop_access_scope (decl);
11440     }
11441
11442   return fn_type;
11443 }
11444
11445 /* Return truthvalue if we're processing a template different from
11446    the last one involved in diagnostics.  */
11447 int
11448 problematic_instantiation_changed (void)
11449 {
11450   return last_template_error_tick != tinst_level_tick;
11451 }
11452
11453 /* Remember current template involved in diagnostics.  */
11454 void
11455 record_last_problematic_instantiation (void)
11456 {
11457   last_template_error_tick = tinst_level_tick;
11458 }
11459
11460 tree
11461 current_instantiation (void)
11462 {
11463   return current_tinst_level;
11464 }
11465
11466 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11467    type. Return zero for ok, nonzero for disallowed. Issue error and
11468    warning messages under control of COMPLAIN.  */
11469
11470 static int
11471 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11472 {
11473   if (INTEGRAL_TYPE_P (type))
11474     return 0;
11475   else if (POINTER_TYPE_P (type))
11476     return 0;
11477   else if (TYPE_PTR_TO_MEMBER_P (type))
11478     return 0;
11479   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11480     return 0;
11481   else if (TREE_CODE (type) == TYPENAME_TYPE)
11482     return 0;
11483            
11484   if (complain & tf_error)
11485     error ("`%#T' is not a valid type for a template constant parameter",
11486               type);
11487   return 1;
11488 }
11489
11490 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11491    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11492
11493 static bool
11494 dependent_type_p_r (tree type)
11495 {
11496   tree scope;
11497
11498   /* [temp.dep.type]
11499
11500      A type is dependent if it is:
11501
11502      -- a template parameter.  */
11503   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11504     return true;
11505   /* -- a qualified-id with a nested-name-specifier which contains a
11506         class-name that names a dependent type or whose unqualified-id
11507         names a dependent type.  */
11508   if (TREE_CODE (type) == TYPENAME_TYPE)
11509     return true;
11510   /* -- a cv-qualified type where the cv-unqualified type is
11511         dependent.  */
11512   type = TYPE_MAIN_VARIANT (type);
11513   /* -- a compound type constructed from any dependent type.  */
11514   if (TYPE_PTR_TO_MEMBER_P (type))
11515     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11516             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE 
11517                                            (type)));
11518   else if (TREE_CODE (type) == POINTER_TYPE
11519            || TREE_CODE (type) == REFERENCE_TYPE)
11520     return dependent_type_p (TREE_TYPE (type));
11521   else if (TREE_CODE (type) == FUNCTION_TYPE
11522            || TREE_CODE (type) == METHOD_TYPE)
11523     {
11524       tree arg_type;
11525
11526       if (dependent_type_p (TREE_TYPE (type)))
11527         return true;
11528       for (arg_type = TYPE_ARG_TYPES (type); 
11529            arg_type; 
11530            arg_type = TREE_CHAIN (arg_type))
11531         if (dependent_type_p (TREE_VALUE (arg_type)))
11532           return true;
11533       return false;
11534     }
11535   /* -- an array type constructed from any dependent type or whose
11536         size is specified by a constant expression that is
11537         value-dependent.  */
11538   if (TREE_CODE (type) == ARRAY_TYPE)
11539     {
11540       if (TYPE_DOMAIN (type)
11541           && ((value_dependent_expression_p 
11542                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11543               || (type_dependent_expression_p
11544                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11545         return true;
11546       return dependent_type_p (TREE_TYPE (type));
11547     }
11548   
11549   /* -- a template-id in which either the template name is a template
11550      parameter ...  */
11551   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11552     return true;
11553   /* ... or any of the template arguments is a dependent type or
11554         an expression that is type-dependent or value-dependent.  */
11555   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
11556            && (any_dependent_template_arguments_p 
11557                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
11558     return true;
11559   
11560   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11561      expression is not type-dependent, then it should already been
11562      have resolved.  */
11563   if (TREE_CODE (type) == TYPEOF_TYPE)
11564     return true;
11565   
11566   /* The standard does not specifically mention types that are local
11567      to template functions or local classes, but they should be
11568      considered dependent too.  For example:
11569
11570        template <int I> void f() { 
11571          enum E { a = I }; 
11572          S<sizeof (E)> s;
11573        }
11574
11575      The size of `E' cannot be known until the value of `I' has been
11576      determined.  Therefore, `E' must be considered dependent.  */
11577   scope = TYPE_CONTEXT (type);
11578   if (scope && TYPE_P (scope))
11579     return dependent_type_p (scope);
11580   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
11581     return type_dependent_expression_p (scope);
11582
11583   /* Other types are non-dependent.  */
11584   return false;
11585 }
11586
11587 /* Returns TRUE if TYPE is dependent, in the sense of
11588    [temp.dep.type].  */
11589
11590 bool
11591 dependent_type_p (tree type)
11592 {
11593   /* If there are no template parameters in scope, then there can't be
11594      any dependent types.  */
11595   if (!processing_template_decl)
11596     return false;
11597
11598   /* If the type is NULL, we have not computed a type for the entity
11599      in question; in that case, the type is dependent.  */
11600   if (!type)
11601     return true;
11602
11603   /* Erroneous types can be considered non-dependent.  */
11604   if (type == error_mark_node)
11605     return false;
11606
11607   /* If we have not already computed the appropriate value for TYPE,
11608      do so now.  */
11609   if (!TYPE_DEPENDENT_P_VALID (type))
11610     {
11611       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
11612       TYPE_DEPENDENT_P_VALID (type) = 1;
11613     }
11614
11615   return TYPE_DEPENDENT_P (type);
11616 }
11617
11618 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
11619
11620 static bool
11621 dependent_scope_ref_p (tree expression, bool criterion (tree))
11622 {
11623   tree scope;
11624   tree name;
11625
11626   my_friendly_assert (TREE_CODE (expression) == SCOPE_REF, 20030714);
11627
11628   if (!TYPE_P (TREE_OPERAND (expression, 0)))
11629     return true;
11630
11631   scope = TREE_OPERAND (expression, 0);
11632   name = TREE_OPERAND (expression, 1);
11633
11634   /* [temp.dep.expr]
11635
11636      An id-expression is type-dependent if it contains a
11637      nested-name-specifier that contains a class-name that names a
11638      dependent type.  */
11639   /* The suggested resolution to Core Issue 2 implies that if the
11640      qualifying type is the current class, then we must peek
11641      inside it.  */
11642   if (DECL_P (name) 
11643       && currently_open_class (scope)
11644       && !criterion (name))
11645     return false;
11646   if (dependent_type_p (scope))
11647     return true;
11648
11649   return false;
11650 }
11651
11652 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
11653    [temp.dep.constexpr] */
11654
11655 bool
11656 value_dependent_expression_p (tree expression)
11657 {
11658   if (!processing_template_decl)
11659     return false;
11660
11661   /* A name declared with a dependent type.  */
11662   if (TREE_CODE (expression) == IDENTIFIER_NODE
11663       || (DECL_P (expression) 
11664           && type_dependent_expression_p (expression)))
11665     return true;
11666   /* A non-type template parameter.  */
11667   if ((TREE_CODE (expression) == CONST_DECL
11668        && DECL_TEMPLATE_PARM_P (expression))
11669       || TREE_CODE (expression) == TEMPLATE_PARM_INDEX)
11670     return true;
11671   /* A constant with integral or enumeration type and is initialized 
11672      with an expression that is value-dependent.  */
11673   if (TREE_CODE (expression) == VAR_DECL
11674       && DECL_INITIAL (expression)
11675       && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
11676       && value_dependent_expression_p (DECL_INITIAL (expression)))
11677     return true;
11678   /* These expressions are value-dependent if the type to which the
11679      cast occurs is dependent or the expression being casted is
11680      value-dependent.  */
11681   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11682       || TREE_CODE (expression) == STATIC_CAST_EXPR
11683       || TREE_CODE (expression) == CONST_CAST_EXPR
11684       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11685       || TREE_CODE (expression) == CAST_EXPR)
11686     {
11687       if (dependent_type_p (TREE_TYPE (expression)))
11688         return true;
11689       /* A functional cast has a list of operands.  */
11690       expression = TREE_OPERAND (expression, 0);
11691       if (TREE_CODE (expression) == TREE_LIST)
11692         {
11693           do
11694             {
11695               if (value_dependent_expression_p (TREE_VALUE (expression)))
11696                 return true;
11697               expression = TREE_CHAIN (expression);
11698             }
11699           while (expression);
11700           return false;
11701         }
11702       else
11703         return value_dependent_expression_p (expression);
11704     }
11705   /* A `sizeof' expression is value-dependent if the operand is
11706      type-dependent.  */
11707   if (TREE_CODE (expression) == SIZEOF_EXPR
11708       || TREE_CODE (expression) == ALIGNOF_EXPR)
11709     {
11710       expression = TREE_OPERAND (expression, 0);
11711       if (TYPE_P (expression))
11712         return dependent_type_p (expression);
11713       return type_dependent_expression_p (expression);
11714     }
11715   if (TREE_CODE (expression) == SCOPE_REF)
11716     return dependent_scope_ref_p (expression, value_dependent_expression_p);
11717   /* A constant expression is value-dependent if any subexpression is
11718      value-dependent.  */
11719   if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (expression))))
11720     {
11721       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
11722         {
11723         case '1':
11724           return (value_dependent_expression_p 
11725                   (TREE_OPERAND (expression, 0)));
11726         case '<':
11727         case '2':
11728           return ((value_dependent_expression_p 
11729                    (TREE_OPERAND (expression, 0)))
11730                   || (value_dependent_expression_p 
11731                       (TREE_OPERAND (expression, 1))));
11732         case 'e':
11733           {
11734             int i;
11735             for (i = 0; i < first_rtl_op (TREE_CODE (expression)); ++i)
11736               /* In some cases, some of the operands may be missing.
11737                  (For example, in the case of PREDECREMENT_EXPR, the
11738                  amount to increment by may be missing.)  That doesn't
11739                  make the expression dependent.  */
11740               if (TREE_OPERAND (expression, i)
11741                   && (value_dependent_expression_p
11742                       (TREE_OPERAND (expression, i))))
11743                 return true;
11744             return false;
11745           }
11746         }
11747     }
11748
11749   /* The expression is not value-dependent.  */
11750   return false;
11751 }
11752
11753 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
11754    [temp.dep.expr].  */
11755
11756 bool
11757 type_dependent_expression_p (tree expression)
11758 {
11759   if (!processing_template_decl)
11760     return false;
11761
11762   if (expression == error_mark_node)
11763     return false;
11764
11765   /* An unresolved name is always dependent.  */
11766   if (TREE_CODE (expression) == IDENTIFIER_NODE)
11767     return true;
11768   
11769   /* Some expression forms are never type-dependent.  */
11770   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
11771       || TREE_CODE (expression) == SIZEOF_EXPR
11772       || TREE_CODE (expression) == ALIGNOF_EXPR
11773       || TREE_CODE (expression) == TYPEID_EXPR
11774       || TREE_CODE (expression) == DELETE_EXPR
11775       || TREE_CODE (expression) == VEC_DELETE_EXPR
11776       || TREE_CODE (expression) == THROW_EXPR)
11777     return false;
11778
11779   /* The types of these expressions depends only on the type to which
11780      the cast occurs.  */
11781   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11782       || TREE_CODE (expression) == STATIC_CAST_EXPR
11783       || TREE_CODE (expression) == CONST_CAST_EXPR
11784       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11785       || TREE_CODE (expression) == CAST_EXPR)
11786     return dependent_type_p (TREE_TYPE (expression));
11787
11788   /* The types of these expressions depends only on the type created
11789      by the expression.  */
11790   if (TREE_CODE (expression) == NEW_EXPR
11791       || TREE_CODE (expression) == VEC_NEW_EXPR)
11792     {
11793       /* For NEW_EXPR tree nodes created inside a template, either
11794          the object type itself or a TREE_LIST may appear as the
11795          operand 1.  */
11796       tree type = TREE_OPERAND (expression, 1);
11797       if (TREE_CODE (type) == TREE_LIST)
11798         /* This is an array type.  We need to check array dimensions
11799            as well.  */
11800         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
11801                || value_dependent_expression_p
11802                     (TREE_OPERAND (TREE_VALUE (type), 1));
11803       else
11804         return dependent_type_p (type);
11805     }
11806
11807   if (TREE_CODE (expression) == SCOPE_REF
11808       && dependent_scope_ref_p (expression,
11809                                 type_dependent_expression_p))
11810     return true;
11811
11812   if (TREE_CODE (expression) == FUNCTION_DECL
11813       && DECL_LANG_SPECIFIC (expression)
11814       && DECL_TEMPLATE_INFO (expression)
11815       && (any_dependent_template_arguments_p
11816           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
11817     return true;
11818
11819   if (TREE_TYPE (expression) == unknown_type_node)
11820     {
11821       if (TREE_CODE (expression) == ADDR_EXPR)
11822         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
11823       if (TREE_CODE (expression) == COMPONENT_REF)
11824         {
11825           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
11826             return true;
11827           expression = TREE_OPERAND (expression, 1);
11828           if (TREE_CODE (expression) == IDENTIFIER_NODE)
11829             return false;
11830         }
11831       
11832       if (TREE_CODE (expression) == BASELINK)
11833         expression = BASELINK_FUNCTIONS (expression);
11834       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
11835         {
11836           if (any_dependent_template_arguments_p
11837               (TREE_OPERAND (expression, 1)))
11838             return true;
11839           expression = TREE_OPERAND (expression, 0);
11840         }
11841       if (TREE_CODE (expression) == OVERLOAD)
11842         {
11843           while (expression)
11844             {
11845               if (type_dependent_expression_p (OVL_CURRENT (expression)))
11846                 return true;
11847               expression = OVL_NEXT (expression);
11848             }
11849           return false;
11850         }
11851       abort ();
11852     }
11853   
11854   return (dependent_type_p (TREE_TYPE (expression)));
11855 }
11856
11857 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
11858    contains a type-dependent expression.  */
11859
11860 bool
11861 any_type_dependent_arguments_p (tree args)
11862 {
11863   while (args)
11864     {
11865       tree arg = TREE_VALUE (args);
11866
11867       if (type_dependent_expression_p (arg))
11868         return true;
11869       args = TREE_CHAIN (args);
11870     }
11871   return false;
11872 }
11873
11874 /* Returns TRUE if the ARG (a template argument) is dependent.  */
11875
11876 static bool
11877 dependent_template_arg_p (tree arg)
11878 {
11879   if (!processing_template_decl)
11880     return false;
11881
11882   if (TREE_CODE (arg) == TEMPLATE_DECL
11883       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11884     return dependent_template_p (arg);
11885   else if (TYPE_P (arg))
11886     return dependent_type_p (arg);
11887   else
11888     return (type_dependent_expression_p (arg)
11889             || value_dependent_expression_p (arg));
11890 }
11891
11892 /* Returns true if ARGS (a collection of template arguments) contains
11893    any dependent arguments.  */
11894
11895 bool
11896 any_dependent_template_arguments_p (tree args)
11897 {
11898   int i;
11899   
11900   if (!args)
11901     return false;
11902
11903   for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
11904     if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
11905       return true;
11906
11907   return false;
11908 }
11909
11910 /* Returns TRUE if the template TMPL is dependent.  */
11911
11912 bool
11913 dependent_template_p (tree tmpl)
11914 {
11915   if (TREE_CODE (tmpl) == OVERLOAD)
11916     {
11917       while (tmpl)
11918         {
11919           if (dependent_template_p (OVL_FUNCTION (tmpl)))
11920             return true;
11921           tmpl = OVL_CHAIN (tmpl);
11922         }
11923       return false;
11924     }
11925
11926   /* Template template parameters are dependent.  */
11927   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
11928       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
11929     return true;
11930   /* So are qualified names that have not been looked up.  */
11931   if (TREE_CODE (tmpl) == SCOPE_REF)
11932     return true;
11933   /* So are member templates of dependent classes.  */
11934   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
11935     return dependent_type_p (DECL_CONTEXT (tmpl));
11936   return false;
11937 }
11938
11939 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
11940
11941 bool
11942 dependent_template_id_p (tree tmpl, tree args)
11943 {
11944   return (dependent_template_p (tmpl)
11945           || any_dependent_template_arguments_p (args));
11946 }
11947
11948 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
11949    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
11950    can be found.  Note that this function peers inside uninstantiated
11951    templates and therefore should be used only in extremely limited
11952    situations.  */
11953
11954 tree
11955 resolve_typename_type (tree type, bool only_current_p)
11956 {
11957   tree scope;
11958   tree name;
11959   tree decl;
11960   int quals;
11961
11962   my_friendly_assert (TREE_CODE (type) == TYPENAME_TYPE,
11963                       20010702);
11964
11965   scope = TYPE_CONTEXT (type);
11966   name = TYPE_IDENTIFIER (type);
11967
11968   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
11969      it first before we can figure out what NAME refers to.  */
11970   if (TREE_CODE (scope) == TYPENAME_TYPE)
11971     scope = resolve_typename_type (scope, only_current_p);
11972   /* If we don't know what SCOPE refers to, then we cannot resolve the
11973      TYPENAME_TYPE.  */
11974   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
11975     return error_mark_node;
11976   /* If the SCOPE is a template type parameter, we have no way of
11977      resolving the name.  */
11978   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
11979     return type;
11980   /* If the SCOPE is not the current instantiation, there's no reason
11981      to look inside it.  */
11982   if (only_current_p && !currently_open_class (scope))
11983     return error_mark_node;
11984   /* If SCOPE is a partial instantiation, it will not have a valid
11985      TYPE_FIELDS list, so use the original template.  */
11986   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
11987   /* Enter the SCOPE so that name lookup will be resolved as if we
11988      were in the class definition.  In particular, SCOPE will no
11989      longer be considered a dependent type.  */
11990   push_scope (scope);
11991   /* Look up the declaration.  */
11992   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
11993   /* Obtain the set of qualifiers applied to the TYPE.  */
11994   quals = cp_type_quals (type);
11995   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
11996      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
11997   if (!decl)
11998     type = error_mark_node;
11999   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12000            && TREE_CODE (decl) == TYPE_DECL)
12001     type = TREE_TYPE (decl);
12002   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12003            && DECL_CLASS_TEMPLATE_P (decl))
12004     {
12005       tree tmpl;
12006       tree args;
12007       /* Obtain the template and the arguments.  */
12008       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12009       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12010       /* Instantiate the template.  */
12011       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12012                                     /*entering_scope=*/0, tf_error | tf_user);
12013     }
12014   else
12015     type = error_mark_node;
12016   /* Qualify the resulting type.  */
12017   if (type != error_mark_node && quals)
12018     type = cp_build_qualified_type (type, quals);
12019   /* Leave the SCOPE.  */
12020   pop_scope (scope);
12021
12022   return type;
12023 }
12024
12025 /* EXPR is an expression which is not type-dependent.  Return a proxy
12026    for EXPR that can be used to compute the types of larger
12027    expressions containing EXPR.  */
12028
12029 tree
12030 build_non_dependent_expr (tree expr)
12031 {
12032   /* Preserve null pointer constants so that the type of things like 
12033      "p == 0" where "p" is a pointer can be determined.  */
12034   if (null_ptr_cst_p (expr))
12035     return expr;
12036   /* Preserve OVERLOADs; the functions must be available to resolve
12037      types.  */
12038   if (TREE_CODE (expr) == OVERLOAD)
12039     return expr;
12040   /* Preserve string constants; conversions from string constants to
12041      "char *" are allowed, even though normally a "const char *"
12042      cannot be used to initialize a "char *".  */
12043   if (TREE_CODE (expr) == STRING_CST)
12044     return expr;
12045
12046   if (TREE_CODE (expr) == COND_EXPR)
12047     return build (COND_EXPR,
12048                   TREE_TYPE (expr),
12049                   TREE_OPERAND (expr, 0),
12050                   (TREE_OPERAND (expr, 1) 
12051                    ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12052                    : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12053                   build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12054   if (TREE_CODE (expr) == COMPOUND_EXPR
12055       && !COMPOUND_EXPR_OVERLOADED (expr))
12056     return build (COMPOUND_EXPR,
12057                   TREE_TYPE (expr),
12058                   TREE_OPERAND (expr, 0),
12059                   build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12060       
12061   /* Otherwise, build a NON_DEPENDENT_EXPR.  
12062
12063      REFERENCE_TYPEs are not stripped for expressions in templates
12064      because doing so would play havoc with mangling.  Consider, for
12065      example:
12066
12067        template <typename T> void f<T& g>() { g(); } 
12068
12069      In the body of "f", the expression for "g" will have
12070      REFERENCE_TYPE, even though the standard says that it should
12071      not.  The reason is that we must preserve the syntactic form of
12072      the expression so that mangling (say) "f<g>" inside the body of
12073      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
12074      stripped here.  */
12075   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12076 }
12077
12078 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12079    Return a new TREE_LIST with the various arguments replaced with
12080    equivalent non-dependent expressions.  */
12081
12082 tree
12083 build_non_dependent_args (tree args)
12084 {
12085   tree a;
12086   tree new_args;
12087
12088   new_args = NULL_TREE;
12089   for (a = args; a; a = TREE_CHAIN (a))
12090     new_args = tree_cons (NULL_TREE, 
12091                           build_non_dependent_expr (TREE_VALUE (a)),
12092                           new_args);
12093   return nreverse (new_args);
12094 }
12095
12096 #include "gt-cp-pt.h"