OSDN Git Service

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