OSDN Git Service

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