OSDN Git Service

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