OSDN Git Service

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