OSDN Git Service

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