OSDN Git Service

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