OSDN Git Service

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