OSDN Git Service

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