OSDN Git Service

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