OSDN Git Service

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