OSDN Git Service

PR c++/17524
[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 nonzero 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 member 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             type = check_var_type (DECL_NAME (r), type);
6512           }
6513         else if (DECL_SELF_REFERENCE_P (t))
6514           SET_DECL_SELF_REFERENCE_P (r);
6515         TREE_TYPE (r) = type;
6516         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6517         DECL_CONTEXT (r) = ctx;
6518         /* Clear out the mangled name and RTL for the instantiation.  */
6519         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6520         SET_DECL_RTL (r, NULL_RTX);
6521
6522         /* Don't try to expand the initializer until someone tries to use
6523            this variable; otherwise we run into circular dependencies.  */
6524         DECL_INITIAL (r) = NULL_TREE;
6525         SET_DECL_RTL (r, NULL_RTX);
6526         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6527
6528         /* Even if the original location is out of scope, the newly
6529            substituted one is not.  */
6530         if (TREE_CODE (r) == VAR_DECL)
6531           {
6532             DECL_DEAD_FOR_LOCAL (r) = 0;
6533             DECL_INITIALIZED_P (r) = 0;
6534           }
6535
6536         if (!local_p)
6537           {
6538             /* A static data member declaration is always marked
6539                external when it is declared in-class, even if an
6540                initializer is present.  We mimic the non-template
6541                processing here.  */
6542             DECL_EXTERNAL (r) = 1;
6543
6544             register_specialization (r, gen_tmpl, argvec);
6545             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6546             SET_DECL_IMPLICIT_INSTANTIATION (r);
6547           }
6548         else
6549           register_local_specialization (r, t);
6550
6551         TREE_CHAIN (r) = NULL_TREE;
6552         layout_decl (r, 0);
6553       }
6554       break;
6555
6556     default:
6557       gcc_unreachable ();
6558     } 
6559
6560   /* Restore the file and line information.  */
6561   input_location = saved_loc;
6562
6563   return r;
6564 }
6565
6566 /* Substitute into the ARG_TYPES of a function type.  */
6567
6568 static tree
6569 tsubst_arg_types (tree arg_types, 
6570                   tree args, 
6571                   tsubst_flags_t complain, 
6572                   tree in_decl)
6573 {
6574   tree remaining_arg_types;
6575   tree type;
6576
6577   if (!arg_types || arg_types == void_list_node)
6578     return arg_types;
6579   
6580   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6581                                           args, complain, in_decl);
6582   if (remaining_arg_types == error_mark_node)
6583     return error_mark_node;
6584
6585   type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6586   if (type == error_mark_node)
6587     return error_mark_node;
6588   if (VOID_TYPE_P (type))
6589     {
6590       if (complain & tf_error)
6591         {
6592           error ("invalid parameter type %qT", type);
6593           if (in_decl)
6594             cp_error_at ("in declaration %qD", in_decl);
6595         }
6596       return error_mark_node;
6597     }
6598
6599   /* Do array-to-pointer, function-to-pointer conversion, and ignore
6600      top-level qualifiers as required.  */
6601   type = TYPE_MAIN_VARIANT (type_decays_to (type));
6602
6603   /* Note that we do not substitute into default arguments here.  The
6604      standard mandates that they be instantiated only when needed,
6605      which is done in build_over_call.  */
6606   return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6607                          remaining_arg_types);
6608                          
6609 }
6610
6611 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
6612    *not* handle the exception-specification for FNTYPE, because the
6613    initial substitution of explicitly provided template parameters
6614    during argument deduction forbids substitution into the
6615    exception-specification:
6616
6617      [temp.deduct]
6618
6619      All references in the function type of the function template to  the
6620      corresponding template parameters are replaced by the specified tem-
6621      plate argument values.  If a substitution in a template parameter or
6622      in  the function type of the function template results in an invalid
6623      type, type deduction fails.  [Note: The equivalent  substitution  in
6624      exception specifications is done only when the function is instanti-
6625      ated, at which point a program is  ill-formed  if  the  substitution
6626      results in an invalid type.]  */
6627
6628 static tree
6629 tsubst_function_type (tree t, 
6630                       tree args, 
6631                       tsubst_flags_t complain, 
6632                       tree in_decl)
6633 {
6634   tree return_type;
6635   tree arg_types;
6636   tree fntype;
6637
6638   /* The TYPE_CONTEXT is not used for function/method types.  */
6639   gcc_assert (TYPE_CONTEXT (t) == NULL_TREE);
6640
6641   /* Substitute the return type.  */
6642   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6643   if (return_type == error_mark_node)
6644     return error_mark_node;
6645
6646   /* Substitute the argument types.  */
6647   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6648                                 complain, in_decl); 
6649   if (arg_types == error_mark_node)
6650     return error_mark_node;
6651   
6652   /* Construct a new type node and return it.  */
6653   if (TREE_CODE (t) == FUNCTION_TYPE)
6654     fntype = build_function_type (return_type, arg_types);
6655   else
6656     {
6657       tree r = TREE_TYPE (TREE_VALUE (arg_types));
6658       if (! IS_AGGR_TYPE (r))
6659         {
6660           /* [temp.deduct]
6661              
6662              Type deduction may fail for any of the following
6663              reasons:
6664              
6665              -- Attempting to create "pointer to member of T" when T
6666              is not a class type.  */
6667           if (complain & tf_error)
6668             error ("creating pointer to member function of non-class type %qT",
6669                       r);
6670           return error_mark_node;
6671         }
6672       
6673       fntype = build_method_type_directly (r, return_type, 
6674                                            TREE_CHAIN (arg_types));
6675     }
6676   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6677   fntype = cp_build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6678   
6679   return fntype;  
6680 }
6681
6682 /* FNTYPE is a FUNCTION_TYPE or METHOD_TYPE.  Substitute the template
6683    ARGS into that specification, and return the substituted
6684    specification.  If there is no specification, return NULL_TREE.  */
6685
6686 static tree
6687 tsubst_exception_specification (tree fntype, 
6688                                 tree args, 
6689                                 tsubst_flags_t complain,
6690                                 tree in_decl)
6691 {
6692   tree specs;
6693   tree new_specs;
6694
6695   specs = TYPE_RAISES_EXCEPTIONS (fntype);
6696   new_specs = NULL_TREE;
6697   if (specs)
6698     {
6699       if (! TREE_VALUE (specs))
6700         new_specs = specs;
6701       else
6702         while (specs)
6703           {
6704             tree spec;
6705             spec = tsubst (TREE_VALUE (specs), args, complain, in_decl);
6706             if (spec == error_mark_node)
6707               return spec;
6708             new_specs = add_exception_specifier (new_specs, spec, complain);
6709             specs = TREE_CHAIN (specs);
6710           }
6711     }
6712   return new_specs;
6713 }
6714
6715 /* Substitute into the PARMS of a call-declarator.  */
6716
6717 static tree
6718 tsubst_call_declarator_parms (tree parms, 
6719                               tree args, 
6720                               tsubst_flags_t complain, 
6721                               tree in_decl)
6722 {
6723   tree new_parms;
6724   tree type;
6725   tree defarg;
6726
6727   if (!parms || parms == void_list_node)
6728     return parms;
6729   
6730   new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6731                                             args, complain, in_decl);
6732
6733   /* Figure out the type of this parameter.  */
6734   type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6735   
6736   /* Figure out the default argument as well.  Note that we use
6737      tsubst_expr since the default argument is really an expression.  */
6738   defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6739
6740   /* Chain this parameter on to the front of those we have already
6741      processed.  We don't use hash_tree_cons because that function
6742      doesn't check TREE_PARMLIST.  */
6743   new_parms = tree_cons (defarg, type, new_parms);
6744
6745   return new_parms;
6746 }
6747
6748 /* Take the tree structure T and replace template parameters used
6749    therein with the argument vector ARGS.  IN_DECL is an associated
6750    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
6751    Issue error and warning messages under control of COMPLAIN.  Note
6752    that we must be relatively non-tolerant of extensions here, in
6753    order to preserve conformance; if we allow substitutions that
6754    should not be allowed, we may allow argument deductions that should
6755    not succeed, and therefore report ambiguous overload situations
6756    where there are none.  In theory, we could allow the substitution,
6757    but indicate that it should have failed, and allow our caller to
6758    make sure that the right thing happens, but we don't try to do this
6759    yet.
6760
6761    This function is used for dealing with types, decls and the like;
6762    for expressions, use tsubst_expr or tsubst_copy.  */
6763
6764 static tree
6765 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6766 {
6767   tree type, r;
6768
6769   if (t == NULL_TREE || t == error_mark_node
6770       || t == integer_type_node
6771       || t == void_type_node
6772       || t == char_type_node
6773       || t == unknown_type_node
6774       || TREE_CODE (t) == NAMESPACE_DECL)
6775     return t;
6776
6777   if (TREE_CODE (t) == IDENTIFIER_NODE)
6778     type = IDENTIFIER_TYPE_VALUE (t);
6779   else
6780     type = TREE_TYPE (t);
6781
6782   gcc_assert (type != unknown_type_node);
6783
6784   if (type && TREE_CODE (t) != FUNCTION_DECL
6785       && TREE_CODE (t) != TYPENAME_TYPE
6786       && TREE_CODE (t) != TEMPLATE_DECL
6787       && TREE_CODE (t) != IDENTIFIER_NODE
6788       && TREE_CODE (t) != FUNCTION_TYPE
6789       && TREE_CODE (t) != METHOD_TYPE)
6790     type = tsubst (type, args, complain, in_decl);
6791   if (type == error_mark_node)
6792     return error_mark_node;
6793
6794   if (DECL_P (t))
6795     return tsubst_decl (t, args, type, complain);
6796
6797   switch (TREE_CODE (t))
6798     {
6799     case RECORD_TYPE:
6800     case UNION_TYPE:
6801     case ENUMERAL_TYPE:
6802       return tsubst_aggr_type (t, args, complain, in_decl,
6803                                /*entering_scope=*/0);
6804
6805     case ERROR_MARK:
6806     case IDENTIFIER_NODE:
6807     case VOID_TYPE:
6808     case REAL_TYPE:
6809     case COMPLEX_TYPE:
6810     case VECTOR_TYPE:
6811     case BOOLEAN_TYPE:
6812     case INTEGER_CST:
6813     case REAL_CST:
6814     case STRING_CST:
6815       return t;
6816
6817     case INTEGER_TYPE:
6818       if (t == integer_type_node)
6819         return t;
6820
6821       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6822           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6823         return t;
6824
6825       {
6826         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
6827
6828         /* The array dimension behaves like a non-type template arg,
6829            in that we want to fold it as much as possible.  */
6830         max = tsubst_template_arg (omax, args, complain, in_decl);
6831         if (!processing_template_decl)
6832           max = decl_constant_value (max);
6833
6834         if (integer_zerop (omax))
6835           {
6836             /* Still allow an explicit array of size zero.  */
6837             if (pedantic)
6838               pedwarn ("creating array with size zero");
6839           }
6840         else if (integer_zerop (max) 
6841                  || (TREE_CODE (max) == INTEGER_CST 
6842                      && INT_CST_LT (max, integer_zero_node)))
6843           {
6844             /* [temp.deduct]
6845
6846                Type deduction may fail for any of the following
6847                reasons:  
6848
6849                  Attempting to create an array with a size that is
6850                  zero or negative.  */
6851             if (complain & tf_error)
6852               error ("creating array with size zero (%qE)", max);
6853
6854             return error_mark_node;
6855           }
6856
6857         return compute_array_index_type (NULL_TREE, max);
6858       }
6859
6860     case TEMPLATE_TYPE_PARM:
6861     case TEMPLATE_TEMPLATE_PARM:
6862     case BOUND_TEMPLATE_TEMPLATE_PARM:
6863     case TEMPLATE_PARM_INDEX:
6864       {
6865         int idx;
6866         int level;
6867         int levels;
6868         tree arg = NULL_TREE;
6869
6870         r = NULL_TREE;
6871
6872         gcc_assert (TREE_VEC_LENGTH (args) > 0);
6873         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6874             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
6875             || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6876           {
6877             idx = TEMPLATE_TYPE_IDX (t);
6878             level = TEMPLATE_TYPE_LEVEL (t);
6879           }
6880         else
6881           {
6882             idx = TEMPLATE_PARM_IDX (t);
6883             level = TEMPLATE_PARM_LEVEL (t);
6884           }
6885
6886         levels = TMPL_ARGS_DEPTH (args);
6887         if (level <= levels)
6888           arg = TMPL_ARG (args, level, idx);
6889
6890         if (arg == error_mark_node)
6891           return error_mark_node;
6892         else if (arg != NULL_TREE)
6893           {
6894             if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6895               {
6896                 gcc_assert (TYPE_P (arg));
6897                 return cp_build_qualified_type_real
6898                   (arg, cp_type_quals (arg) | cp_type_quals (t),
6899                    complain | tf_ignore_bad_quals);
6900               }
6901             else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6902               {
6903                 /* We are processing a type constructed from a
6904                    template template parameter.  */
6905                 tree argvec = tsubst (TYPE_TI_ARGS (t),
6906                                       args, complain, in_decl);
6907                 if (argvec == error_mark_node)
6908                   return error_mark_node;
6909                         
6910                 /* We can get a TEMPLATE_TEMPLATE_PARM here when we
6911                    are resolving nested-types in the signature of a
6912                    member function templates.  Otherwise ARG is a
6913                    TEMPLATE_DECL and is the real template to be
6914                    instantiated.  */
6915                 if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6916                   arg = TYPE_NAME (arg);
6917                 
6918                 r = lookup_template_class (arg, 
6919                                            argvec, in_decl, 
6920                                            DECL_CONTEXT (arg),
6921                                             /*entering_scope=*/0,
6922                                            complain);
6923                 return cp_build_qualified_type_real
6924                   (r, TYPE_QUALS (t), complain);
6925               }
6926             else
6927               /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
6928               return arg;
6929           }
6930
6931         if (level == 1)
6932           /* This can happen during the attempted tsubst'ing in
6933              unify.  This means that we don't yet have any information
6934              about the template parameter in question.  */
6935           return t;
6936
6937         /* If we get here, we must have been looking at a parm for a
6938            more deeply nested template.  Make a new version of this
6939            template parameter, but with a lower level.  */
6940         switch (TREE_CODE (t))
6941           {
6942           case TEMPLATE_TYPE_PARM:
6943           case TEMPLATE_TEMPLATE_PARM:
6944           case BOUND_TEMPLATE_TEMPLATE_PARM:
6945             if (cp_type_quals (t))
6946               {
6947                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
6948                 r = cp_build_qualified_type_real
6949                   (r, cp_type_quals (t),
6950                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6951                                ? tf_ignore_bad_quals : 0));
6952               }
6953             else
6954               {
6955                 r = copy_type (t);
6956                 TEMPLATE_TYPE_PARM_INDEX (r)
6957                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6958                                                 r, levels);
6959                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6960                 TYPE_MAIN_VARIANT (r) = r;
6961                 TYPE_POINTER_TO (r) = NULL_TREE;
6962                 TYPE_REFERENCE_TO (r) = NULL_TREE;
6963
6964                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6965                   {
6966                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6967                                           complain, in_decl); 
6968                     if (argvec == error_mark_node)
6969                       return error_mark_node;
6970
6971                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
6972                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
6973                   }
6974               }
6975             break;
6976
6977           case TEMPLATE_PARM_INDEX:
6978             r = reduce_template_parm_level (t, type, levels);
6979             break;
6980            
6981           default:
6982             gcc_unreachable ();
6983           }
6984
6985         return r;
6986       }
6987
6988     case TREE_LIST:
6989       {
6990         tree purpose, value, chain;
6991
6992         if (t == void_list_node)
6993           return t;
6994
6995         purpose = TREE_PURPOSE (t);
6996         if (purpose)
6997           {
6998             purpose = tsubst (purpose, args, complain, in_decl);
6999             if (purpose == error_mark_node)
7000               return error_mark_node;
7001           }
7002         value = TREE_VALUE (t);
7003         if (value)
7004           {
7005             value = tsubst (value, args, complain, in_decl);
7006             if (value == error_mark_node)
7007               return error_mark_node;
7008           }
7009         chain = TREE_CHAIN (t);
7010         if (chain && chain != void_type_node)
7011           {
7012             chain = tsubst (chain, args, complain, in_decl);
7013             if (chain == error_mark_node)
7014               return error_mark_node;
7015           }
7016         if (purpose == TREE_PURPOSE (t)
7017             && value == TREE_VALUE (t)
7018             && chain == TREE_CHAIN (t))
7019           return t;
7020         return hash_tree_cons (purpose, value, chain);
7021       }
7022       
7023     case TREE_BINFO:
7024       /* We should never be tsubsting a binfo.  */
7025       gcc_unreachable ();
7026
7027     case TREE_VEC:
7028       /* A vector of template arguments.  */
7029       gcc_assert (!type);
7030       return tsubst_template_args (t, args, complain, in_decl);
7031
7032     case POINTER_TYPE:
7033     case REFERENCE_TYPE:
7034       {
7035         enum tree_code code;
7036
7037         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
7038           return t;
7039
7040         code = TREE_CODE (t);
7041
7042
7043         /* [temp.deduct]
7044            
7045            Type deduction may fail for any of the following
7046            reasons:  
7047
7048            -- Attempting to create a pointer to reference type.
7049            -- Attempting to create a reference to a reference type or
7050               a reference to void.  */
7051         if (TREE_CODE (type) == REFERENCE_TYPE
7052             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
7053           {
7054             static location_t last_loc;
7055
7056             /* We keep track of the last time we issued this error
7057                message to avoid spewing a ton of messages during a
7058                single bad template instantiation.  */
7059             if (complain & tf_error
7060 #ifdef USE_MAPPED_LOCATION
7061                 && last_loc != input_location
7062 #else
7063                 && (last_loc.line != input_line
7064                     || last_loc.file != input_filename)
7065 #endif
7066                   )
7067               {
7068                 if (TREE_CODE (type) == VOID_TYPE)
7069                   error ("forming reference to void");
7070                 else
7071                   error ("forming %s to reference type %qT",
7072                          (code == POINTER_TYPE) ? "pointer" : "reference",
7073                          type);
7074                 last_loc = input_location;
7075               }
7076
7077             return error_mark_node;
7078           }
7079         else if (code == POINTER_TYPE)
7080           {
7081             r = build_pointer_type (type);
7082             if (TREE_CODE (type) == METHOD_TYPE)
7083               r = build_ptrmemfunc_type (r);
7084           }
7085         else
7086           r = build_reference_type (type);
7087         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
7088
7089         if (r != error_mark_node)
7090           /* Will this ever be needed for TYPE_..._TO values?  */
7091           layout_type (r);
7092         
7093         return r;
7094       }
7095     case OFFSET_TYPE:
7096       {
7097         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
7098         if (r == error_mark_node || !IS_AGGR_TYPE (r))
7099           {
7100             /* [temp.deduct]
7101
7102                Type deduction may fail for any of the following
7103                reasons:
7104                
7105                -- Attempting to create "pointer to member of T" when T
7106                   is not a class type.  */
7107             if (complain & tf_error)
7108               error ("creating pointer to member of non-class type %qT", r);
7109             return error_mark_node;
7110           }
7111         if (TREE_CODE (type) == REFERENCE_TYPE)
7112           {
7113             if (complain & tf_error)
7114               error ("creating pointer to member reference type %qT", type);
7115             
7116             return error_mark_node;
7117           }
7118         gcc_assert (TREE_CODE (type) != METHOD_TYPE);
7119         if (TREE_CODE (type) == FUNCTION_TYPE)
7120           {
7121             /* This is really a method type. The cv qualifiers of the
7122                this pointer should _not_ be determined by the cv
7123                qualifiers of the class type.  They should be held
7124                somewhere in the FUNCTION_TYPE, but we don't do that at
7125                the moment.  Consider
7126                   typedef void (Func) () const;
7127
7128                   template <typename T1> void Foo (Func T1::*);
7129
7130                 */
7131             tree method_type;
7132
7133             method_type = build_method_type_directly (TYPE_MAIN_VARIANT (r),
7134                                                       TREE_TYPE (type),
7135                                                       TYPE_ARG_TYPES (type));
7136             return build_ptrmemfunc_type (build_pointer_type (method_type));
7137           }
7138         else
7139           return cp_build_qualified_type_real (build_ptrmem_type (r, type),
7140                                                TYPE_QUALS (t),
7141                                                complain);
7142       }
7143     case FUNCTION_TYPE:
7144     case METHOD_TYPE:
7145       {
7146         tree fntype;
7147         tree specs;
7148         fntype = tsubst_function_type (t, args, complain, in_decl);
7149         if (fntype == error_mark_node)
7150           return error_mark_node;
7151
7152         /* Substitute the exception specification.  */
7153         specs = tsubst_exception_specification (t, args, complain, 
7154                                                 in_decl);
7155         if (specs)
7156           fntype = build_exception_variant (fntype, specs);
7157         return fntype;
7158       }
7159     case ARRAY_TYPE:
7160       {
7161         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
7162         if (domain == error_mark_node)
7163           return error_mark_node;
7164
7165         /* As an optimization, we avoid regenerating the array type if
7166            it will obviously be the same as T.  */
7167         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
7168           return t;
7169
7170         /* These checks should match the ones in grokdeclarator.  
7171
7172            [temp.deduct] 
7173         
7174            The deduction may fail for any of the following reasons: 
7175
7176            -- Attempting to create an array with an element type that
7177               is void, a function type, or a reference type, or [DR337] 
7178               an abstract class type.  */
7179         if (TREE_CODE (type) == VOID_TYPE 
7180             || TREE_CODE (type) == FUNCTION_TYPE
7181             || TREE_CODE (type) == REFERENCE_TYPE)
7182           {
7183             if (complain & tf_error)
7184               error ("creating array of %qT", type);
7185             return error_mark_node;
7186           }
7187         if (CLASS_TYPE_P (type) && CLASSTYPE_PURE_VIRTUALS (type))
7188           {
7189             if (complain & tf_error)
7190               error ("creating array of %qT, which is an abstract class type", 
7191                      type);
7192             return error_mark_node;         
7193           }
7194
7195         r = build_cplus_array_type (type, domain);
7196         return r;
7197       }
7198
7199     case PLUS_EXPR:
7200     case MINUS_EXPR:
7201       {
7202         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7203         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7204
7205         if (e1 == error_mark_node || e2 == error_mark_node)
7206           return error_mark_node;
7207
7208         return fold (build2 (TREE_CODE (t), TREE_TYPE (t), e1, e2));
7209       }
7210
7211     case NEGATE_EXPR:
7212     case NOP_EXPR:
7213       {
7214         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7215         if (e == error_mark_node)
7216           return error_mark_node;
7217
7218         return fold (build1 (TREE_CODE (t), TREE_TYPE (t), e));
7219       }
7220
7221     case TYPENAME_TYPE:
7222       {
7223         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7224                                      in_decl, /*entering_scope=*/1);
7225         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
7226                               complain, in_decl); 
7227
7228         if (ctx == error_mark_node || f == error_mark_node)
7229           return error_mark_node;
7230
7231         if (!IS_AGGR_TYPE (ctx))
7232           {
7233             if (complain & tf_error)
7234               error ("%qT is not a class, struct, or union type", ctx);
7235             return error_mark_node;
7236           }
7237         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
7238           {
7239             /* Normally, make_typename_type does not require that the CTX
7240                have complete type in order to allow things like:
7241              
7242                  template <class T> struct S { typename S<T>::X Y; };
7243
7244                But, such constructs have already been resolved by this
7245                point, so here CTX really should have complete type, unless
7246                it's a partial instantiation.  */
7247             ctx = complete_type (ctx);
7248             if (!COMPLETE_TYPE_P (ctx))
7249               {
7250                 if (complain & tf_error)
7251                   cxx_incomplete_type_error (NULL_TREE, ctx);
7252                 return error_mark_node;
7253               }
7254           }
7255
7256         f = make_typename_type (ctx, f,
7257                                 (complain & tf_error) | tf_keep_type_decl);
7258         if (f == error_mark_node)
7259           return f;
7260         if (TREE_CODE (f) == TYPE_DECL)
7261           {
7262             complain |= tf_ignore_bad_quals;
7263             f = TREE_TYPE (f);
7264           }
7265         
7266         return cp_build_qualified_type_real
7267           (f, cp_type_quals (f) | cp_type_quals (t), complain);
7268       }
7269                
7270     case UNBOUND_CLASS_TEMPLATE:
7271       {
7272         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
7273                                      in_decl, /*entering_scope=*/1);
7274         tree name = TYPE_IDENTIFIER (t);
7275
7276         if (ctx == error_mark_node || name == error_mark_node)
7277           return error_mark_node;
7278
7279         return make_unbound_class_template (ctx, name, complain);
7280       }
7281
7282     case INDIRECT_REF:
7283     case ADDR_EXPR:
7284     case CALL_EXPR:
7285       gcc_unreachable ();
7286
7287     case ARRAY_REF:
7288       {
7289         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7290         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7291         if (e1 == error_mark_node || e2 == error_mark_node)
7292           return error_mark_node;
7293
7294         return build_nt (ARRAY_REF, e1, e2, NULL_TREE, NULL_TREE);
7295       }
7296
7297     case SCOPE_REF:
7298       {
7299         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7300         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7301         if (e1 == error_mark_node || e2 == error_mark_node)
7302           return error_mark_node;
7303
7304         return build_nt (TREE_CODE (t), e1, e2);
7305       }
7306
7307     case TYPEOF_TYPE:
7308       {
7309         tree type;
7310
7311         type = finish_typeof (tsubst_expr (TYPEOF_TYPE_EXPR (t), args,
7312                                            complain, in_decl));
7313         return cp_build_qualified_type_real (type,
7314                                              cp_type_quals (t)
7315                                              | cp_type_quals (type),
7316                                              complain);
7317       }
7318
7319     default:
7320       sorry ("use of `%s' in template",
7321              tree_code_name [(int) TREE_CODE (t)]);
7322       return error_mark_node;
7323     }
7324 }
7325
7326 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
7327    type of the expression on the left-hand side of the "." or "->"
7328    operator.  */
7329
7330 static tree
7331 tsubst_baselink (tree baselink, tree object_type,
7332                  tree args, tsubst_flags_t complain, tree in_decl)
7333 {
7334     tree name;
7335     tree qualifying_scope;
7336     tree fns;
7337     tree template_args = 0;
7338     bool template_id_p = false;
7339
7340     /* A baselink indicates a function from a base class.  The
7341        BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7342        non-dependent types; otherwise, the lookup could not have
7343        succeeded.  However, they may indicate bases of the template
7344        class, rather than the instantiated class.  
7345
7346        In addition, lookups that were not ambiguous before may be
7347        ambiguous now.  Therefore, we perform the lookup again.  */
7348     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7349     fns = BASELINK_FUNCTIONS (baselink);
7350     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7351       {
7352         template_id_p = true;
7353         template_args = TREE_OPERAND (fns, 1);
7354         fns = TREE_OPERAND (fns, 0);
7355         if (template_args)
7356           template_args = tsubst_template_args (template_args, args,
7357                                                 complain, in_decl);
7358       }
7359     name = DECL_NAME (get_first_fn (fns));
7360     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7361     
7362     /* If lookup found a single function, mark it as used at this
7363        point.  (If it lookup found multiple functions the one selected
7364        later by overload resolution will be marked as used at that
7365        point.)  */
7366     if (BASELINK_P (baselink))
7367       fns = BASELINK_FUNCTIONS (baselink);
7368     if (!template_id_p && !really_overloaded_fn (fns))
7369       mark_used (OVL_CURRENT (fns));
7370
7371     /* Add back the template arguments, if present.  */
7372     if (BASELINK_P (baselink) && template_id_p)
7373       BASELINK_FUNCTIONS (baselink) 
7374         = build_nt (TEMPLATE_ID_EXPR,
7375                     BASELINK_FUNCTIONS (baselink),
7376                     template_args);
7377
7378     if (!object_type)
7379       object_type = current_class_type;
7380     return adjust_result_of_qualified_name_lookup (baselink, 
7381                                                    qualifying_scope,
7382                                                    object_type);
7383 }
7384
7385 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
7386    true if the qualified-id will be a postfix-expression in-and-of
7387    itself; false if more of the postfix-expression follows the
7388    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
7389    of "&".  */
7390
7391 static tree
7392 tsubst_qualified_id (tree qualified_id, tree args, 
7393                      tsubst_flags_t complain, tree in_decl,
7394                      bool done, bool address_p)
7395 {
7396   tree expr;
7397   tree scope;
7398   tree name;
7399   bool is_template;
7400   tree template_args;
7401
7402   gcc_assert (TREE_CODE (qualified_id) == SCOPE_REF);
7403
7404   /* Figure out what name to look up.  */
7405   name = TREE_OPERAND (qualified_id, 1);
7406   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7407     {
7408       is_template = true;
7409       template_args = TREE_OPERAND (name, 1);
7410       if (template_args)
7411         template_args = tsubst_template_args (template_args, args,
7412                                               complain, in_decl);
7413       name = TREE_OPERAND (name, 0);
7414     }
7415   else
7416     {
7417       is_template = false;
7418       template_args = NULL_TREE;
7419     }
7420
7421   /* Substitute into the qualifying scope.  When there are no ARGS, we
7422      are just trying to simplify a non-dependent expression.  In that
7423      case the qualifying scope may be dependent, and, in any case,
7424      substituting will not help.  */
7425   scope = TREE_OPERAND (qualified_id, 0);
7426   if (args)
7427     {
7428       scope = tsubst (scope, args, complain, in_decl);
7429       expr = tsubst_copy (name, args, complain, in_decl);
7430     }
7431   else
7432     expr = name;
7433
7434   if (dependent_type_p (scope))
7435     return build_nt (SCOPE_REF, scope, expr);
7436   
7437   if (!BASELINK_P (name) && !DECL_P (expr))
7438     {
7439       expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0, false);
7440       if (TREE_CODE (TREE_CODE (expr) == TEMPLATE_DECL
7441                      ? DECL_TEMPLATE_RESULT (expr) : expr) == TYPE_DECL)
7442         {
7443           if (complain & tf_error)
7444             {
7445               error ("dependent-name %qE is parsed as a non-type, but "
7446                      "instantiation yields a type", qualified_id);
7447               inform ("say %<typename %E%> if a type is meant", qualified_id);
7448             }
7449           return error_mark_node;
7450         }
7451     }
7452   
7453   if (DECL_P (expr))
7454     {
7455       check_accessibility_of_qualified_id (expr, /*object_type=*/NULL_TREE,
7456                                            scope);
7457       /* Remember that there was a reference to this entity.  */
7458       mark_used (expr);
7459     }
7460
7461   if (expr == error_mark_node || TREE_CODE (expr) == TREE_LIST)
7462     {
7463       if (complain & tf_error)
7464         qualified_name_lookup_error (scope, 
7465                                      TREE_OPERAND (qualified_id, 1),
7466                                      expr);
7467       return error_mark_node;
7468     }
7469
7470   if (is_template)
7471     expr = lookup_template_function (expr, template_args);
7472
7473   if (expr == error_mark_node && complain & tf_error)
7474     qualified_name_lookup_error (scope, TREE_OPERAND (qualified_id, 1),
7475                                  expr);
7476   else if (TYPE_P (scope))
7477     {
7478       expr = (adjust_result_of_qualified_name_lookup 
7479               (expr, scope, current_class_type));
7480       expr = finish_qualified_id_expr (scope, expr, done, address_p);
7481     }
7482
7483   return expr;
7484 }
7485
7486 /* Like tsubst, but deals with expressions.  This function just replaces
7487    template parms; to finish processing the resultant expression, use
7488    tsubst_expr.  */
7489
7490 static tree
7491 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7492 {
7493   enum tree_code code;
7494   tree r;
7495
7496   if (t == NULL_TREE || t == error_mark_node)
7497     return t;
7498
7499   code = TREE_CODE (t);
7500
7501   switch (code)
7502     {
7503     case PARM_DECL:
7504       r = retrieve_local_specialization (t);
7505       gcc_assert (r != NULL);
7506       mark_used (r);
7507       return r;
7508
7509     case CONST_DECL:
7510       {
7511         tree enum_type;
7512         tree v;
7513
7514         if (DECL_TEMPLATE_PARM_P (t))
7515           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7516         /* There is no need to substitute into namespace-scope
7517            enumerators.  */
7518         if (DECL_NAMESPACE_SCOPE_P (t))
7519           return t;
7520         /* If ARGS is NULL, then T is known to be non-dependent.  */
7521         if (args == NULL_TREE)
7522           return decl_constant_value (t);
7523
7524         /* Unfortunately, we cannot just call lookup_name here.
7525            Consider:
7526            
7527              template <int I> int f() {
7528              enum E { a = I };
7529              struct S { void g() { E e = a; } };
7530              };
7531            
7532            When we instantiate f<7>::S::g(), say, lookup_name is not
7533            clever enough to find f<7>::a.  */
7534         enum_type 
7535           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl, 
7536                               /*entering_scope=*/0);
7537
7538         for (v = TYPE_VALUES (enum_type); 
7539              v != NULL_TREE; 
7540              v = TREE_CHAIN (v))
7541           if (TREE_PURPOSE (v) == DECL_NAME (t))
7542             return TREE_VALUE (v);
7543
7544           /* We didn't find the name.  That should never happen; if
7545              name-lookup found it during preliminary parsing, we
7546              should find it again here during instantiation.  */
7547         gcc_unreachable ();
7548       }
7549       return t;
7550
7551     case FIELD_DECL:
7552       if (DECL_CONTEXT (t))
7553         {
7554           tree ctx;
7555
7556           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7557                                   /*entering_scope=*/1);
7558           if (ctx != DECL_CONTEXT (t))
7559             return lookup_field (ctx, DECL_NAME (t), 0, false);
7560         }
7561       
7562       return t;
7563
7564     case VAR_DECL:
7565     case FUNCTION_DECL:
7566       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7567           || local_variable_p (t))
7568         t = tsubst (t, args, complain, in_decl);
7569       mark_used (t);
7570       return t;
7571
7572     case BASELINK:
7573       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7574
7575     case TEMPLATE_DECL:
7576       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7577         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)), 
7578                        args, complain, in_decl);
7579       else if (DECL_FUNCTION_TEMPLATE_P (t) && DECL_MEMBER_TEMPLATE_P (t))
7580         return tsubst (t, args, complain, in_decl);
7581       else if (DECL_CLASS_SCOPE_P (t)
7582                && uses_template_parms (DECL_CONTEXT (t)))
7583         {
7584           /* Template template argument like the following example need
7585              special treatment:
7586
7587                template <template <class> class TT> struct C {};
7588                template <class T> struct D {
7589                  template <class U> struct E {};
7590                  C<E> c;                                // #1
7591                };
7592                D<int> d;                                // #2
7593
7594              We are processing the template argument `E' in #1 for
7595              the template instantiation #2.  Originally, `E' is a
7596              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
7597              have to substitute this with one having context `D<int>'.  */
7598
7599           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7600           return lookup_field (context, DECL_NAME(t), 0, false);
7601         }
7602       else
7603         /* Ordinary template template argument.  */
7604         return t;
7605
7606     case CAST_EXPR:
7607     case REINTERPRET_CAST_EXPR:
7608     case CONST_CAST_EXPR:
7609     case STATIC_CAST_EXPR:
7610     case DYNAMIC_CAST_EXPR:
7611     case NOP_EXPR:
7612       return build1
7613         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7614          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7615
7616     case INDIRECT_REF:
7617     case NEGATE_EXPR:
7618     case TRUTH_NOT_EXPR:
7619     case BIT_NOT_EXPR:
7620     case ADDR_EXPR:
7621     case CONVERT_EXPR:      /* Unary + */
7622     case SIZEOF_EXPR:
7623     case ALIGNOF_EXPR:
7624     case ARROW_EXPR:
7625     case THROW_EXPR:
7626     case TYPEID_EXPR:
7627     case REALPART_EXPR:
7628     case IMAGPART_EXPR:
7629       return build1
7630         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7631          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7632
7633     case COMPONENT_REF:
7634       {
7635         tree object;
7636         tree name;
7637
7638         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7639         name = TREE_OPERAND (t, 1);
7640         if (TREE_CODE (name) == BIT_NOT_EXPR) 
7641           {
7642             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7643                                 complain, in_decl);
7644             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7645           }
7646         else if (TREE_CODE (name) == SCOPE_REF
7647                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7648           {
7649             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7650                                      complain, in_decl);
7651             name = TREE_OPERAND (name, 1);
7652             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7653                                 complain, in_decl);
7654             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7655             name = build_nt (SCOPE_REF, base, name);
7656           }
7657         else if (TREE_CODE (name) == BASELINK)
7658           name = tsubst_baselink (name, 
7659                                   non_reference (TREE_TYPE (object)), 
7660                                   args, complain, 
7661                                   in_decl);
7662         else
7663           name = tsubst_copy (name, args, complain, in_decl);
7664         return build_nt (COMPONENT_REF, object, name, NULL_TREE);
7665       }
7666
7667     case PLUS_EXPR:
7668     case MINUS_EXPR:
7669     case MULT_EXPR:
7670     case TRUNC_DIV_EXPR:
7671     case CEIL_DIV_EXPR:
7672     case FLOOR_DIV_EXPR:
7673     case ROUND_DIV_EXPR:
7674     case EXACT_DIV_EXPR:
7675     case BIT_AND_EXPR:
7676     case BIT_IOR_EXPR:
7677     case BIT_XOR_EXPR:
7678     case TRUNC_MOD_EXPR:
7679     case FLOOR_MOD_EXPR:
7680     case TRUTH_ANDIF_EXPR:
7681     case TRUTH_ORIF_EXPR:
7682     case TRUTH_AND_EXPR:
7683     case TRUTH_OR_EXPR:
7684     case RSHIFT_EXPR:
7685     case LSHIFT_EXPR:
7686     case RROTATE_EXPR:
7687     case LROTATE_EXPR:
7688     case EQ_EXPR:
7689     case NE_EXPR:
7690     case MAX_EXPR:
7691     case MIN_EXPR:
7692     case LE_EXPR:
7693     case GE_EXPR:
7694     case LT_EXPR:
7695     case GT_EXPR:
7696     case ARRAY_REF:
7697     case COMPOUND_EXPR:
7698     case SCOPE_REF:
7699     case DOTSTAR_EXPR:
7700     case MEMBER_REF:
7701     case PREDECREMENT_EXPR:
7702     case PREINCREMENT_EXPR:
7703     case POSTDECREMENT_EXPR:
7704     case POSTINCREMENT_EXPR:
7705       return build_nt
7706         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7707          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7708
7709     case CALL_EXPR:
7710       return build_nt (code, 
7711                        tsubst_copy (TREE_OPERAND (t, 0), args,
7712                                     complain, in_decl),
7713                        tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7714                                     in_decl),
7715                        NULL_TREE);
7716
7717     case COND_EXPR:
7718     case MODOP_EXPR:
7719     case PSEUDO_DTOR_EXPR:
7720       {
7721         r = build_nt
7722           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7723            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7724            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7725         TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
7726         return r;
7727       }
7728
7729     case NEW_EXPR:
7730       {
7731         r = build_nt
7732         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7733          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7734          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7735         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7736         return r;
7737       }
7738
7739     case DELETE_EXPR:
7740       {
7741         r = build_nt
7742         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7743          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7744         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7745         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7746         return r;
7747       }
7748
7749     case TEMPLATE_ID_EXPR:
7750       {
7751         /* Substituted template arguments */
7752         tree fn = TREE_OPERAND (t, 0);
7753         tree targs = TREE_OPERAND (t, 1);
7754
7755         fn = tsubst_copy (fn, args, complain, in_decl);
7756         if (targs)
7757           targs = tsubst_template_args (targs, args, complain, in_decl);
7758         
7759         return lookup_template_function (fn, targs);
7760       }
7761
7762     case TREE_LIST:
7763       {
7764         tree purpose, value, chain;
7765
7766         if (t == void_list_node)
7767           return t;
7768
7769         purpose = TREE_PURPOSE (t);
7770         if (purpose)
7771           purpose = tsubst_copy (purpose, args, complain, in_decl);
7772         value = TREE_VALUE (t);
7773         if (value)
7774           value = tsubst_copy (value, args, complain, in_decl);
7775         chain = TREE_CHAIN (t);
7776         if (chain && chain != void_type_node)
7777           chain = tsubst_copy (chain, args, complain, in_decl);
7778         if (purpose == TREE_PURPOSE (t)
7779             && value == TREE_VALUE (t)
7780             && chain == TREE_CHAIN (t))
7781           return t;
7782         return tree_cons (purpose, value, chain);
7783       }
7784
7785     case RECORD_TYPE:
7786     case UNION_TYPE:
7787     case ENUMERAL_TYPE:
7788     case INTEGER_TYPE:
7789     case TEMPLATE_TYPE_PARM:
7790     case TEMPLATE_TEMPLATE_PARM:
7791     case BOUND_TEMPLATE_TEMPLATE_PARM:
7792     case TEMPLATE_PARM_INDEX:
7793     case POINTER_TYPE:
7794     case REFERENCE_TYPE:
7795     case OFFSET_TYPE:
7796     case FUNCTION_TYPE:
7797     case METHOD_TYPE:
7798     case ARRAY_TYPE:
7799     case TYPENAME_TYPE:
7800     case UNBOUND_CLASS_TEMPLATE:
7801     case TYPEOF_TYPE:
7802     case TYPE_DECL:
7803       return tsubst (t, args, complain, in_decl);
7804
7805     case IDENTIFIER_NODE:
7806       if (IDENTIFIER_TYPENAME_P (t))
7807         {
7808           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7809           return mangle_conv_op_name_for_type (new_type);
7810         }
7811       else
7812         return t;
7813
7814     case CONSTRUCTOR:
7815       {
7816         r = build_constructor
7817           (tsubst (TREE_TYPE (t), args, complain, in_decl), 
7818            tsubst_copy (CONSTRUCTOR_ELTS (t), args, complain, in_decl));
7819         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7820         return r;
7821       }
7822
7823     case VA_ARG_EXPR:
7824       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7825                                           in_decl),
7826                              tsubst (TREE_TYPE (t), args, complain, in_decl));
7827
7828     case CLEANUP_POINT_EXPR:
7829       /* We shouldn't have built any of these during initial template
7830          generation.  Instead, they should be built during instantiation
7831          in response to the saved STMT_IS_FULL_EXPR_P setting.  */
7832       gcc_unreachable ();
7833
7834     default:
7835       return t;
7836     }
7837 }
7838
7839 /* Like tsubst_copy for expressions, etc. but also does semantic
7840    processing.  */
7841
7842 static tree
7843 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7844 {
7845   tree stmt, tmp;
7846
7847   if (t == NULL_TREE || t == error_mark_node)
7848     return t;
7849
7850   if (EXPR_HAS_LOCATION (t))
7851     input_location = EXPR_LOCATION (t);
7852   if (STATEMENT_CODE_P (TREE_CODE (t)))
7853     current_stmt_tree ()->stmts_are_full_exprs_p = STMT_IS_FULL_EXPR_P (t);
7854
7855   switch (TREE_CODE (t))
7856     {
7857     case STATEMENT_LIST:
7858       {
7859         tree_stmt_iterator i;
7860         for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
7861           tsubst_expr (tsi_stmt (i), args, complain, in_decl);
7862         break;
7863       }
7864
7865     case CTOR_INITIALIZER:
7866       finish_mem_initializers (tsubst_initializer_list 
7867                                (TREE_OPERAND (t, 0), args));
7868       break;
7869
7870     case RETURN_EXPR:
7871       finish_return_stmt (tsubst_expr (TREE_OPERAND (t, 0),
7872                                        args, complain, in_decl));
7873       break;
7874
7875     case EXPR_STMT:
7876       tmp = tsubst_expr (EXPR_STMT_EXPR (t), args, complain, in_decl);
7877       if (EXPR_STMT_STMT_EXPR_RESULT (t))
7878         finish_stmt_expr_expr (tmp, cur_stmt_expr);
7879       else
7880         finish_expr_stmt (tmp);
7881       break;
7882
7883     case USING_STMT:
7884       do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
7885                                        args, complain, in_decl));
7886       break;
7887       
7888     case DECL_EXPR:
7889       {
7890         tree decl;
7891         tree init;
7892
7893         decl = DECL_EXPR_DECL (t);
7894         if (TREE_CODE (decl) == LABEL_DECL)
7895           finish_label_decl (DECL_NAME (decl));
7896         else if (TREE_CODE (decl) == USING_DECL)
7897           {
7898             tree scope = DECL_INITIAL (decl);
7899             tree name = DECL_NAME (decl);
7900             tree decl;
7901             
7902             scope = tsubst_expr (scope, args, complain, in_decl);
7903             decl = lookup_qualified_name (scope, name,
7904                                           /*is_type_p=*/false,
7905                                           /*complain=*/false);
7906             if (decl == error_mark_node || TREE_CODE (decl) == TREE_LIST)
7907               qualified_name_lookup_error (scope, name, decl);
7908             else
7909               do_local_using_decl (decl, scope, name);
7910           }
7911         else
7912           {
7913             init = DECL_INITIAL (decl);
7914             decl = tsubst (decl, args, complain, in_decl);
7915             if (decl != error_mark_node)
7916               {
7917                 if (init)
7918                   DECL_INITIAL (decl) = error_mark_node;
7919                 /* By marking the declaration as instantiated, we avoid
7920                    trying to instantiate it.  Since instantiate_decl can't
7921                    handle local variables, and since we've already done
7922                    all that needs to be done, that's the right thing to
7923                    do.  */
7924                 if (TREE_CODE (decl) == VAR_DECL)
7925                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7926                 if (TREE_CODE (decl) == VAR_DECL
7927                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
7928                   /* Anonymous aggregates are a special case.  */
7929                   finish_anon_union (decl);
7930                 else 
7931                   {
7932                     maybe_push_decl (decl);
7933                     if (TREE_CODE (decl) == VAR_DECL
7934                         && DECL_PRETTY_FUNCTION_P (decl))
7935                       {
7936                         /* For __PRETTY_FUNCTION__ we have to adjust the
7937                            initializer.  */
7938                         const char *const name
7939                           = cxx_printable_name (current_function_decl, 2);
7940                         init = cp_fname_init (name, &TREE_TYPE (decl));
7941                       }
7942                     else
7943                       init = tsubst_expr (init, args, complain, in_decl);
7944                     cp_finish_decl (decl, init, NULL_TREE, 0);
7945                   }
7946               }
7947           }
7948
7949         /* A DECL_EXPR can also be used as an expression, in the condition
7950            clause of an if/for/while construct.  */
7951         return decl;
7952       }
7953
7954     case FOR_STMT:
7955       stmt = begin_for_stmt ();
7956       tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
7957       finish_for_init_stmt (stmt);
7958       tmp = tsubst_expr (FOR_COND (t), args, complain, in_decl);
7959       finish_for_cond (tmp, stmt);
7960       tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
7961       finish_for_expr (tmp, stmt);
7962       tsubst_expr (FOR_BODY (t), args, complain, in_decl);
7963       finish_for_stmt (stmt);
7964       break;
7965
7966     case WHILE_STMT:
7967       stmt = begin_while_stmt ();
7968       tmp = tsubst_expr (WHILE_COND (t), args, complain, in_decl);
7969       finish_while_stmt_cond (tmp, stmt);
7970       tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
7971       finish_while_stmt (stmt);
7972       break;
7973
7974     case DO_STMT:
7975       stmt = begin_do_stmt ();
7976       tsubst_expr (DO_BODY (t), args, complain, in_decl);
7977       finish_do_body (stmt);
7978       tmp = tsubst_expr (DO_COND (t), args, complain, in_decl);
7979       finish_do_stmt (tmp, stmt);
7980       break;
7981
7982     case IF_STMT:
7983       stmt = begin_if_stmt ();
7984       tmp = tsubst_expr (IF_COND (t), args, complain, in_decl);
7985       finish_if_stmt_cond (tmp, stmt);
7986       tsubst_expr (THEN_CLAUSE (t), args, complain, in_decl);
7987       finish_then_clause (stmt);
7988
7989       if (ELSE_CLAUSE (t))
7990         {
7991           begin_else_clause (stmt);
7992           tsubst_expr (ELSE_CLAUSE (t), args, complain, in_decl);
7993           finish_else_clause (stmt);
7994         }
7995
7996       finish_if_stmt (stmt);
7997       break;
7998
7999     case BIND_EXPR:
8000       if (BIND_EXPR_BODY_BLOCK (t))
8001         stmt = begin_function_body ();
8002       else
8003         stmt = begin_compound_stmt (BIND_EXPR_TRY_BLOCK (t)
8004                                     ? BCS_TRY_BLOCK : 0);
8005
8006       tsubst_expr (BIND_EXPR_BODY (t), args, complain, in_decl);
8007
8008       if (BIND_EXPR_BODY_BLOCK (t))
8009         finish_function_body (stmt);
8010       else
8011         finish_compound_stmt (stmt);
8012       break;
8013
8014     case BREAK_STMT:
8015       finish_break_stmt ();
8016       break;
8017
8018     case CONTINUE_STMT:
8019       finish_continue_stmt ();
8020       break;
8021
8022     case SWITCH_STMT:
8023       stmt = begin_switch_stmt ();
8024       tmp = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
8025       finish_switch_cond (tmp, stmt);
8026       tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
8027       finish_switch_stmt (stmt);
8028       break;
8029
8030     case CASE_LABEL_EXPR:
8031       finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
8032                          tsubst_expr (CASE_HIGH (t), args, complain,
8033                                       in_decl));
8034       break;
8035
8036     case LABEL_EXPR:
8037       finish_label_stmt (DECL_NAME (LABEL_EXPR_LABEL (t)));
8038       break;
8039
8040     case GOTO_EXPR:
8041       tmp = GOTO_DESTINATION (t);
8042       if (TREE_CODE (tmp) != LABEL_DECL)
8043         /* Computed goto's must be tsubst'd into.  On the other hand,
8044            non-computed gotos must not be; the identifier in question
8045            will have no binding.  */
8046         tmp = tsubst_expr (tmp, args, complain, in_decl);
8047       else
8048         tmp = DECL_NAME (tmp);
8049       finish_goto_stmt (tmp);
8050       break;
8051
8052     case ASM_EXPR:
8053       tmp = finish_asm_stmt
8054         (ASM_VOLATILE_P (t),
8055          tsubst_expr (ASM_STRING (t), args, complain, in_decl),
8056          tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
8057          tsubst_expr (ASM_INPUTS (t), args, complain, in_decl), 
8058          tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
8059       {
8060         tree asm_expr = tmp;
8061         if (TREE_CODE (asm_expr) == CLEANUP_POINT_EXPR)
8062           asm_expr = TREE_OPERAND (asm_expr, 0);
8063         ASM_INPUT_P (asm_expr) = ASM_INPUT_P (t);
8064       }
8065       break;
8066
8067     case TRY_BLOCK:
8068       if (CLEANUP_P (t))
8069         {
8070           stmt = begin_try_block ();
8071           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8072           finish_cleanup_try_block (stmt);
8073           finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
8074                                        complain, in_decl),
8075                           stmt);
8076         }
8077       else
8078         {
8079           if (FN_TRY_BLOCK_P (t))
8080             stmt = begin_function_try_block ();
8081           else
8082             stmt = begin_try_block ();
8083
8084           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
8085
8086           if (FN_TRY_BLOCK_P (t))
8087             finish_function_try_block (stmt);
8088           else
8089             finish_try_block (stmt);
8090
8091           tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
8092           if (FN_TRY_BLOCK_P (t))
8093             finish_function_handler_sequence (stmt);
8094           else
8095             finish_handler_sequence (stmt);
8096         }
8097       break;
8098       
8099     case HANDLER:
8100       {
8101         tree decl;
8102
8103         stmt = begin_handler ();
8104         if (HANDLER_PARMS (t))
8105           {
8106             decl = HANDLER_PARMS (t);
8107             decl = tsubst (decl, args, complain, in_decl);
8108             /* Prevent instantiate_decl from trying to instantiate
8109                this variable.  We've already done all that needs to be
8110                done.  */
8111             DECL_TEMPLATE_INSTANTIATED (decl) = 1;
8112           }
8113         else
8114           decl = NULL_TREE;
8115         finish_handler_parms (decl, stmt);
8116         tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
8117         finish_handler (stmt);
8118       }
8119       break;
8120
8121     case TAG_DEFN:
8122       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
8123       break;
8124
8125     default:
8126       gcc_assert (!STATEMENT_CODE_P (TREE_CODE (t)));
8127       
8128       return tsubst_copy_and_build (t, args, complain, in_decl,
8129                                     /*function_p=*/false);
8130     }
8131
8132   return NULL_TREE;
8133 }
8134
8135 /* T is a postfix-expression that is not being used in a function
8136    call.  Return the substituted version of T.  */
8137
8138 static tree
8139 tsubst_non_call_postfix_expression (tree t, tree args, 
8140                                     tsubst_flags_t complain,
8141                                     tree in_decl)
8142 {
8143   if (TREE_CODE (t) == SCOPE_REF)
8144     t = tsubst_qualified_id (t, args, complain, in_decl,
8145                              /*done=*/false, /*address_p=*/false);
8146   else
8147     t = tsubst_copy_and_build (t, args, complain, in_decl,
8148                                /*function_p=*/false);
8149
8150   return t;
8151 }
8152
8153 /* Like tsubst but deals with expressions and performs semantic
8154    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
8155
8156 tree
8157 tsubst_copy_and_build (tree t, 
8158                        tree args, 
8159                        tsubst_flags_t complain, 
8160                        tree in_decl,
8161                        bool function_p)
8162 {
8163 #define RECUR(NODE) \
8164   tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
8165
8166   tree op1;
8167
8168   if (t == NULL_TREE || t == error_mark_node)
8169     return t;
8170
8171   switch (TREE_CODE (t))
8172     {
8173     case USING_DECL:
8174       t = DECL_NAME (t);
8175       /* Fall through.  */
8176     case IDENTIFIER_NODE:
8177       {
8178         tree decl;
8179         cp_id_kind idk;
8180         tree qualifying_class;
8181         bool non_integral_constant_expression_p;
8182         const char *error_msg;
8183
8184         if (IDENTIFIER_TYPENAME_P (t))
8185           {
8186             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8187             t = mangle_conv_op_name_for_type (new_type);
8188           }
8189
8190         /* Look up the name.  */
8191         decl = lookup_name (t, 0);
8192
8193         /* By convention, expressions use ERROR_MARK_NODE to indicate
8194            failure, not NULL_TREE.  */
8195         if (decl == NULL_TREE)
8196           decl = error_mark_node;
8197
8198         decl = finish_id_expression (t, decl, NULL_TREE,
8199                                      &idk,
8200                                      &qualifying_class,
8201                                      /*integral_constant_expression_p=*/false,
8202                                      /*allow_non_integral_constant_expression_p=*/false,
8203                                      &non_integral_constant_expression_p,
8204                                      &error_msg);
8205         if (error_msg)
8206           error (error_msg);
8207         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
8208           decl = unqualified_name_lookup_error (decl);
8209         return decl;
8210       }
8211
8212     case TEMPLATE_ID_EXPR:
8213       {
8214         tree object;
8215         tree template = RECUR (TREE_OPERAND (t, 0));
8216         tree targs = TREE_OPERAND (t, 1);
8217
8218         if (targs)
8219           targs = tsubst_template_args (targs, args, complain, in_decl);
8220         
8221         if (TREE_CODE (template) == COMPONENT_REF)
8222           {
8223             object = TREE_OPERAND (template, 0);
8224             template = TREE_OPERAND (template, 1);
8225           }
8226         else
8227           object = NULL_TREE;
8228         template = lookup_template_function (template, targs);
8229         
8230         if (object)
8231           return build3 (COMPONENT_REF, TREE_TYPE (template), 
8232                          object, template, NULL_TREE);
8233         else
8234           return template;
8235       }
8236
8237     case INDIRECT_REF:
8238       return build_x_indirect_ref (RECUR (TREE_OPERAND (t, 0)), "unary *");
8239
8240     case NOP_EXPR:
8241       return build_nop
8242         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8243          RECUR (TREE_OPERAND (t, 0)));
8244
8245     case CAST_EXPR:
8246       return build_functional_cast
8247         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8248          RECUR (TREE_OPERAND (t, 0)));
8249
8250     case REINTERPRET_CAST_EXPR:
8251       return build_reinterpret_cast
8252         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8253          RECUR (TREE_OPERAND (t, 0)));
8254
8255     case CONST_CAST_EXPR:
8256       return build_const_cast
8257         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8258          RECUR (TREE_OPERAND (t, 0)));
8259
8260     case DYNAMIC_CAST_EXPR:
8261       return build_dynamic_cast
8262         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8263          RECUR (TREE_OPERAND (t, 0)));
8264
8265     case STATIC_CAST_EXPR:
8266       return build_static_cast
8267         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8268          RECUR (TREE_OPERAND (t, 0)));
8269
8270     case POSTDECREMENT_EXPR:
8271     case POSTINCREMENT_EXPR:
8272       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8273                                                 args, complain, in_decl);
8274       return build_x_unary_op (TREE_CODE (t), op1);
8275
8276     case PREDECREMENT_EXPR:
8277     case PREINCREMENT_EXPR:
8278     case NEGATE_EXPR:
8279     case BIT_NOT_EXPR:
8280     case ABS_EXPR:
8281     case TRUTH_NOT_EXPR:
8282     case CONVERT_EXPR:  /* Unary + */
8283     case REALPART_EXPR:
8284     case IMAGPART_EXPR:
8285       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8286
8287     case ADDR_EXPR:
8288       op1 = TREE_OPERAND (t, 0);
8289       if (TREE_CODE (op1) == SCOPE_REF)
8290         op1 = tsubst_qualified_id (op1, args, complain, in_decl, 
8291                                    /*done=*/true, /*address_p=*/true);
8292       else
8293         op1 = tsubst_non_call_postfix_expression (op1, args, complain, 
8294                                                   in_decl);
8295       if (TREE_CODE (op1) == LABEL_DECL)
8296         return finish_label_address_expr (DECL_NAME (op1));
8297       return build_x_unary_op (ADDR_EXPR, op1);
8298
8299     case PLUS_EXPR:
8300     case MINUS_EXPR:
8301     case MULT_EXPR:
8302     case TRUNC_DIV_EXPR:
8303     case CEIL_DIV_EXPR:
8304     case FLOOR_DIV_EXPR:
8305     case ROUND_DIV_EXPR:
8306     case EXACT_DIV_EXPR:
8307     case BIT_AND_EXPR:
8308     case BIT_IOR_EXPR:
8309     case BIT_XOR_EXPR:
8310     case TRUNC_MOD_EXPR:
8311     case FLOOR_MOD_EXPR:
8312     case TRUTH_ANDIF_EXPR:
8313     case TRUTH_ORIF_EXPR:
8314     case TRUTH_AND_EXPR:
8315     case TRUTH_OR_EXPR:
8316     case RSHIFT_EXPR:
8317     case LSHIFT_EXPR:
8318     case RROTATE_EXPR:
8319     case LROTATE_EXPR:
8320     case EQ_EXPR:
8321     case NE_EXPR:
8322     case MAX_EXPR:
8323     case MIN_EXPR:
8324     case LE_EXPR:
8325     case GE_EXPR:
8326     case LT_EXPR:
8327     case GT_EXPR:
8328     case MEMBER_REF:
8329     case DOTSTAR_EXPR:
8330       return build_x_binary_op
8331         (TREE_CODE (t), 
8332          RECUR (TREE_OPERAND (t, 0)),
8333          RECUR (TREE_OPERAND (t, 1)),
8334          /*overloaded_p=*/NULL);
8335
8336     case SCOPE_REF:
8337       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8338                                   /*address_p=*/false);
8339
8340     case ARRAY_REF:
8341       if (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl)
8342           == NULL_TREE)
8343         /* new-type-id */
8344         return build_nt (ARRAY_REF, NULL_TREE, RECUR (TREE_OPERAND (t, 1)),
8345                          NULL_TREE, NULL_TREE);
8346
8347       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8348                                                 args, complain, in_decl);
8349       /* Remember that there was a reference to this entity.  */
8350       if (DECL_P (op1))
8351         mark_used (op1);
8352       return grok_array_decl (op1, RECUR (TREE_OPERAND (t, 1)));
8353
8354     case SIZEOF_EXPR:
8355     case ALIGNOF_EXPR:
8356       op1 = TREE_OPERAND (t, 0);
8357       if (!args)
8358         {
8359           /* When there are no ARGS, we are trying to evaluate a
8360              non-dependent expression from the parser.  Trying to do
8361              the substitutions may not work.  */
8362           if (!TYPE_P (op1))
8363             op1 = TREE_TYPE (op1);
8364         }
8365       else
8366         {
8367           ++skip_evaluation;
8368           op1 = RECUR (op1);
8369           --skip_evaluation;
8370         }
8371       if (TYPE_P (op1))
8372         return cxx_sizeof_or_alignof_type (op1, TREE_CODE (t), true);
8373       else
8374         return cxx_sizeof_or_alignof_expr (op1, TREE_CODE (t));
8375
8376     case MODOP_EXPR:
8377       {
8378         tree r = build_x_modify_expr
8379           (RECUR (TREE_OPERAND (t, 0)),
8380            TREE_CODE (TREE_OPERAND (t, 1)),
8381            RECUR (TREE_OPERAND (t, 2)));
8382         /* TREE_NO_WARNING must be set if either the expression was
8383            parenthesized or it uses an operator such as >>= rather
8384            than plain assignment.  In the former case, it was already
8385            set and must be copied.  In the latter case,
8386            build_x_modify_expr sets it and it must not be reset
8387            here.  */
8388         if (TREE_NO_WARNING (t))
8389           TREE_NO_WARNING (r) = TREE_NO_WARNING (t);
8390         return r;
8391       }
8392
8393     case ARROW_EXPR:
8394       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8395                                                 args, complain, in_decl);
8396       /* Remember that there was a reference to this entity.  */
8397       if (DECL_P (op1))
8398         mark_used (op1);
8399       return build_x_arrow (op1);
8400
8401     case NEW_EXPR:
8402       return build_new
8403         (RECUR (TREE_OPERAND (t, 0)),
8404          RECUR (TREE_OPERAND (t, 1)),
8405          RECUR (TREE_OPERAND (t, 2)),
8406          RECUR (TREE_OPERAND (t, 3)),
8407          NEW_EXPR_USE_GLOBAL (t));
8408
8409     case DELETE_EXPR:
8410      return delete_sanity
8411        (RECUR (TREE_OPERAND (t, 0)),
8412         RECUR (TREE_OPERAND (t, 1)),
8413         DELETE_EXPR_USE_VEC (t),
8414         DELETE_EXPR_USE_GLOBAL (t));
8415
8416     case COMPOUND_EXPR:
8417       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8418                                     RECUR (TREE_OPERAND (t, 1)));
8419
8420     case CALL_EXPR:
8421       {
8422         tree function;
8423         tree call_args;
8424         bool qualified_p;
8425         bool koenig_p;
8426
8427         function = TREE_OPERAND (t, 0);
8428         /* When we parsed the expression,  we determined whether or
8429            not Koenig lookup should be performed.  */
8430         koenig_p = KOENIG_LOOKUP_P (t);
8431         if (TREE_CODE (function) == SCOPE_REF)
8432           {
8433             qualified_p = true;
8434             function = tsubst_qualified_id (function, args, complain, in_decl,
8435                                             /*done=*/false, 
8436                                             /*address_p=*/false);
8437           }
8438         else
8439           {
8440             qualified_p = (TREE_CODE (function) == COMPONENT_REF
8441                            && (TREE_CODE (TREE_OPERAND (function, 1))
8442                                == SCOPE_REF));
8443             function = tsubst_copy_and_build (function, args, complain, 
8444                                               in_decl,
8445                                               !qualified_p);
8446             if (BASELINK_P (function))
8447               qualified_p = true;
8448           }
8449
8450         call_args = RECUR (TREE_OPERAND (t, 1));
8451
8452         /* We do not perform argument-dependent lookup if normal
8453            lookup finds a non-function, in accordance with the
8454            expected resolution of DR 218.  */
8455         if (koenig_p
8456             && (is_overloaded_fn (function)
8457                 || TREE_CODE (function) == IDENTIFIER_NODE))
8458           function = perform_koenig_lookup (function, call_args);
8459
8460         if (TREE_CODE (function) == IDENTIFIER_NODE)
8461           {
8462             unqualified_name_lookup_error (function);
8463             return error_mark_node;
8464           }
8465
8466         /* Remember that there was a reference to this entity.  */
8467         if (DECL_P (function))
8468           mark_used (function);
8469
8470         function = convert_from_reference (function);
8471
8472         if (TREE_CODE (function) == OFFSET_REF)
8473           return build_offset_ref_call_from_tree (function, call_args);
8474         if (TREE_CODE (function) == COMPONENT_REF)
8475           {
8476             if (!BASELINK_P (TREE_OPERAND (function, 1)))
8477               return finish_call_expr (function, call_args,
8478                                        /*disallow_virtual=*/false,
8479                                        /*koenig_p=*/false);
8480             else
8481               return (build_new_method_call 
8482                       (TREE_OPERAND (function, 0),
8483                        TREE_OPERAND (function, 1),
8484                        call_args, NULL_TREE, 
8485                        qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8486           }
8487         return finish_call_expr (function, call_args, 
8488                                  /*disallow_virtual=*/qualified_p,
8489                                  koenig_p);
8490       }
8491
8492     case COND_EXPR:
8493       return build_x_conditional_expr
8494         (RECUR (TREE_OPERAND (t, 0)),
8495          RECUR (TREE_OPERAND (t, 1)),
8496          RECUR (TREE_OPERAND (t, 2)));
8497
8498     case PSEUDO_DTOR_EXPR:
8499       return finish_pseudo_destructor_expr 
8500         (RECUR (TREE_OPERAND (t, 0)),
8501          RECUR (TREE_OPERAND (t, 1)),
8502          RECUR (TREE_OPERAND (t, 2)));
8503
8504     case TREE_LIST:
8505       {
8506         tree purpose, value, chain;
8507
8508         if (t == void_list_node)
8509           return t;
8510
8511         purpose = TREE_PURPOSE (t);
8512         if (purpose)
8513           purpose = RECUR (purpose);
8514         value = TREE_VALUE (t);
8515         if (value)
8516           value = RECUR (value);
8517         chain = TREE_CHAIN (t);
8518         if (chain && chain != void_type_node)
8519           chain = RECUR (chain);
8520         if (purpose == TREE_PURPOSE (t)
8521             && value == TREE_VALUE (t)
8522             && chain == TREE_CHAIN (t))
8523           return t;
8524         return tree_cons (purpose, value, chain);
8525       }
8526
8527     case COMPONENT_REF:
8528       {
8529         tree object;
8530         tree member;
8531
8532         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8533                                                      args, complain, in_decl);
8534         /* Remember that there was a reference to this entity.  */
8535         if (DECL_P (object))
8536           mark_used (object);
8537
8538         member = TREE_OPERAND (t, 1);
8539         if (BASELINK_P (member))
8540           member = tsubst_baselink (member, 
8541                                     non_reference (TREE_TYPE (object)),
8542                                     args, complain, in_decl);
8543         else
8544           member = tsubst_copy (member, args, complain, in_decl);
8545
8546         if (!CLASS_TYPE_P (TREE_TYPE (object)))
8547           {
8548             if (TREE_CODE (member) == BIT_NOT_EXPR)
8549               return finish_pseudo_destructor_expr (object, 
8550                                                     NULL_TREE,
8551                                                     TREE_TYPE (object));
8552             else if (TREE_CODE (member) == SCOPE_REF
8553                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8554               return finish_pseudo_destructor_expr (object, 
8555                                                     object,
8556                                                     TREE_TYPE (object));
8557           }
8558         else if (TREE_CODE (member) == SCOPE_REF
8559                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8560           {
8561             tree tmpl;
8562             tree args;
8563         
8564             /* Lookup the template functions now that we know what the
8565                scope is.  */
8566             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8567             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8568             member = lookup_qualified_name (TREE_OPERAND (member, 0), tmpl, 
8569                                             /*is_type_p=*/false,
8570                                             /*complain=*/false);
8571             if (BASELINK_P (member))
8572               BASELINK_FUNCTIONS (member) 
8573                 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8574                             args);
8575             else
8576               {
8577                 qualified_name_lookup_error (TREE_TYPE (object), tmpl,
8578                                              member);
8579                 return error_mark_node;
8580               }
8581           }
8582         else if (TREE_CODE (member) == SCOPE_REF
8583                  && !CLASS_TYPE_P (TREE_OPERAND (member, 0))
8584                  && TREE_CODE (TREE_OPERAND (member, 0)) != NAMESPACE_DECL)
8585           {
8586             if (complain & tf_error)
8587               {
8588                 if (TYPE_P (TREE_OPERAND (member, 0)))
8589                   error ("%qT is not a class or namespace", 
8590                          TREE_OPERAND (member, 0));
8591                 else
8592                   error ("%qD is not a class or namespace", 
8593                          TREE_OPERAND (member, 0));
8594               }
8595             return error_mark_node;
8596           }
8597         else if (TREE_CODE (member) == FIELD_DECL)
8598           return finish_non_static_data_member (member, object, NULL_TREE);
8599
8600         return finish_class_member_access_expr (object, member);
8601       }
8602
8603     case THROW_EXPR:
8604       return build_throw
8605         (RECUR (TREE_OPERAND (t, 0)));
8606
8607     case CONSTRUCTOR:
8608       {
8609         tree r;
8610         tree elts;
8611         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8612         bool purpose_p;
8613
8614         /* digest_init will do the wrong thing if we let it.  */
8615         if (type && TYPE_PTRMEMFUNC_P (type))
8616           return t;
8617
8618         r = NULL_TREE;
8619         /* We do not want to process the purpose of aggregate
8620            initializers as they are identifier nodes which will be
8621            looked up by digest_init.  */
8622         purpose_p = !(type && IS_AGGR_TYPE (type));
8623         for (elts = CONSTRUCTOR_ELTS (t);
8624              elts;
8625              elts = TREE_CHAIN (elts))
8626           {
8627             tree purpose = TREE_PURPOSE (elts);
8628             tree value = TREE_VALUE (elts);
8629             
8630             if (purpose && purpose_p)
8631               purpose = RECUR (purpose);
8632             value = RECUR (value);
8633             r = tree_cons (purpose, value, r);
8634           }
8635         
8636         r = build_constructor (NULL_TREE, nreverse (r));
8637         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8638
8639         if (type)
8640           return digest_init (type, r, 0);
8641         return r;
8642       }
8643
8644     case TYPEID_EXPR:
8645       {
8646         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8647         if (TYPE_P (operand_0))
8648           return get_typeid (operand_0);
8649         return build_typeid (operand_0);
8650       }
8651
8652     case PARM_DECL:
8653       return convert_from_reference (tsubst_copy (t, args, complain, in_decl));
8654
8655     case VAR_DECL:
8656       if (args)
8657         t = tsubst_copy (t, args, complain, in_decl);
8658       return convert_from_reference (t);
8659
8660     case VA_ARG_EXPR:
8661       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8662                              tsubst_copy (TREE_TYPE (t), args, complain, 
8663                                           in_decl));
8664
8665     case OFFSETOF_EXPR:
8666       return fold_offsetof (RECUR (TREE_OPERAND (t, 0)));
8667
8668     case STMT_EXPR:
8669       {
8670         tree old_stmt_expr = cur_stmt_expr;
8671         tree stmt_expr = begin_stmt_expr ();
8672
8673         cur_stmt_expr = stmt_expr;
8674         tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
8675         stmt_expr = finish_stmt_expr (stmt_expr, false);
8676         cur_stmt_expr = old_stmt_expr;
8677
8678         return stmt_expr;
8679       }
8680
8681     default:
8682       return tsubst_copy (t, args, complain, in_decl);
8683     }
8684
8685 #undef RECUR
8686 }
8687
8688 /* Verify that the instantiated ARGS are valid. For type arguments,
8689    make sure that the type's linkage is ok. For non-type arguments,
8690    make sure they are constants if they are integral or enumerations.
8691    Emit an error under control of COMPLAIN, and return TRUE on error.  */
8692
8693 static bool
8694 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8695 {
8696   int ix, len = DECL_NTPARMS (tmpl);
8697   bool result = false;
8698
8699   for (ix = 0; ix != len; ix++)
8700     {
8701       tree t = TREE_VEC_ELT (args, ix);
8702       
8703       if (TYPE_P (t))
8704         {
8705           /* [basic.link]: A name with no linkage (notably, the name
8706              of a class or enumeration declared in a local scope)
8707              shall not be used to declare an entity with linkage.
8708              This implies that names with no linkage cannot be used as
8709              template arguments.  */
8710           tree nt = no_linkage_check (t, /*relaxed_p=*/false);
8711
8712           if (nt)
8713             {
8714               if (!(complain & tf_error))
8715                 /*OK*/;
8716               else if (TYPE_ANONYMOUS_P (nt))
8717                 error ("%qT uses anonymous type", t);
8718               else
8719                 error ("%qT uses local type %qT", t, nt);
8720               result = true;
8721             }
8722           /* In order to avoid all sorts of complications, we do not
8723              allow variably-modified types as template arguments.  */
8724           else if (variably_modified_type_p (t, NULL_TREE))
8725             {
8726               if (complain & tf_error)
8727                 error ("%qT is a variably modified type", t);
8728               result = true;
8729             }
8730         }
8731       /* A non-type argument of integral or enumerated type must be a
8732          constant.  */
8733       else if (TREE_TYPE (t)
8734                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8735                && !TREE_CONSTANT (t))
8736         {
8737           if (complain & tf_error)
8738             error ("integral expression %qE is not constant", t);
8739           result = true;
8740         }
8741     }
8742   if (result && complain & tf_error)
8743     error ("  trying to instantiate %qD", tmpl);
8744   return result;
8745 }
8746
8747 /* Instantiate the indicated variable or function template TMPL with
8748    the template arguments in TARG_PTR.  */
8749
8750 tree
8751 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8752 {
8753   tree fndecl;
8754   tree gen_tmpl;
8755   tree spec;
8756
8757   if (tmpl == error_mark_node)
8758     return error_mark_node;
8759
8760   gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
8761
8762   /* If this function is a clone, handle it specially.  */
8763   if (DECL_CLONED_FUNCTION_P (tmpl))
8764     {
8765       tree spec;
8766       tree clone;
8767       
8768       spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8769                                    complain);
8770       if (spec == error_mark_node)
8771         return error_mark_node;
8772
8773       /* Look for the clone.  */
8774       FOR_EACH_CLONE (clone, spec)
8775         if (DECL_NAME (clone) == DECL_NAME (tmpl))
8776           return clone;
8777       /* We should always have found the clone by now.  */
8778       gcc_unreachable ();
8779       return NULL_TREE;
8780     }
8781   
8782   /* Check to see if we already have this specialization.  */
8783   spec = retrieve_specialization (tmpl, targ_ptr, 
8784                                   /*class_specializations_p=*/false);
8785   if (spec != NULL_TREE)
8786     return spec;
8787
8788   gen_tmpl = most_general_template (tmpl);
8789   if (tmpl != gen_tmpl)
8790     {
8791       /* The TMPL is a partial instantiation.  To get a full set of
8792          arguments we must add the arguments used to perform the
8793          partial instantiation.  */
8794       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
8795                                               targ_ptr);
8796
8797       /* Check to see if we already have this specialization.  */
8798       spec = retrieve_specialization (gen_tmpl, targ_ptr,
8799                                       /*class_specializations_p=*/false);
8800       if (spec != NULL_TREE)
8801         return spec;
8802     }
8803
8804   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
8805                                complain))
8806     return error_mark_node;
8807   
8808   /* We are building a FUNCTION_DECL, during which the access of its
8809      parameters and return types have to be checked.  However this
8810      FUNCTION_DECL which is the desired context for access checking
8811      is not built yet.  We solve this chicken-and-egg problem by
8812      deferring all checks until we have the FUNCTION_DECL.  */
8813   push_deferring_access_checks (dk_deferred);
8814
8815   /* Substitute template parameters.  */
8816   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
8817                    targ_ptr, complain, gen_tmpl);
8818
8819   /* Now we know the specialization, compute access previously
8820      deferred.  */
8821   push_access_scope (fndecl);
8822   perform_deferred_access_checks ();
8823   pop_access_scope (fndecl);
8824   pop_deferring_access_checks ();
8825
8826   /* The DECL_TI_TEMPLATE should always be the immediate parent
8827      template, not the most general template.  */
8828   DECL_TI_TEMPLATE (fndecl) = tmpl;
8829
8830   /* If we've just instantiated the main entry point for a function,
8831      instantiate all the alternate entry points as well.  We do this
8832      by cloning the instantiation of the main entry point, not by
8833      instantiating the template clones.  */
8834   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
8835     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
8836
8837   return fndecl;
8838 }
8839
8840 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
8841    arguments that are being used when calling it.  TARGS is a vector
8842    into which the deduced template arguments are placed.  
8843
8844    Return zero for success, 2 for an incomplete match that doesn't resolve
8845    all the types, and 1 for complete failure.  An error message will be
8846    printed only for an incomplete match.
8847
8848    If FN is a conversion operator, or we are trying to produce a specific
8849    specialization, RETURN_TYPE is the return type desired.
8850
8851    The EXPLICIT_TARGS are explicit template arguments provided via a
8852    template-id.
8853
8854    The parameter STRICT is one of:
8855
8856    DEDUCE_CALL: 
8857      We are deducing arguments for a function call, as in
8858      [temp.deduct.call].
8859
8860    DEDUCE_CONV:
8861      We are deducing arguments for a conversion function, as in 
8862      [temp.deduct.conv].
8863
8864    DEDUCE_EXACT:
8865      We are deducing arguments when doing an explicit instantiation
8866      as in [temp.explicit], when determining an explicit specialization
8867      as in [temp.expl.spec], or when taking the address of a function
8868      template, as in [temp.deduct.funcaddr]. 
8869
8870    DEDUCE_ORDER:
8871      We are deducing arguments when calculating the partial
8872      ordering between specializations of function or class
8873      templates, as in [temp.func.order] and [temp.class.order].
8874
8875    LEN is the number of parms to consider before returning success, or -1
8876    for all.  This is used in partial ordering to avoid comparing parms for
8877    which no actual argument was passed, since they are not considered in
8878    overload resolution (and are explicitly excluded from consideration in
8879    partial ordering in [temp.func.order]/6).  */
8880
8881 int
8882 fn_type_unification (tree fn, 
8883                      tree explicit_targs, 
8884                      tree targs, 
8885                      tree args, 
8886                      tree return_type,
8887                      unification_kind_t strict, 
8888                      int len)
8889 {
8890   tree parms;
8891   tree fntype;
8892   int result;
8893
8894   gcc_assert (TREE_CODE (fn) == TEMPLATE_DECL);
8895
8896   fntype = TREE_TYPE (fn);
8897   if (explicit_targs)
8898     {
8899       /* [temp.deduct]
8900           
8901          The specified template arguments must match the template
8902          parameters in kind (i.e., type, nontype, template), and there
8903          must not be more arguments than there are parameters;
8904          otherwise type deduction fails.
8905
8906          Nontype arguments must match the types of the corresponding
8907          nontype template parameters, or must be convertible to the
8908          types of the corresponding nontype parameters as specified in
8909          _temp.arg.nontype_, otherwise type deduction fails.
8910
8911          All references in the function type of the function template
8912          to the corresponding template parameters are replaced by the
8913          specified template argument values.  If a substitution in a
8914          template parameter or in the function type of the function
8915          template results in an invalid type, type deduction fails.  */
8916       int i;
8917       tree converted_args;
8918       bool incomplete;
8919
8920       converted_args
8921         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
8922                                   explicit_targs, NULL_TREE, tf_none, 
8923                                   /*require_all_arguments=*/0));
8924       if (converted_args == error_mark_node)
8925         return 1;
8926
8927       /* Substitute the explicit args into the function type.  This is
8928          necessary so that, for instance, explicitly declared function
8929          arguments can match null pointed constants.  If we were given
8930          an incomplete set of explicit args, we must not do semantic
8931          processing during substitution as we could create partial
8932          instantiations.  */
8933       incomplete = NUM_TMPL_ARGS (explicit_targs) != NUM_TMPL_ARGS (targs);
8934       processing_template_decl += incomplete;
8935       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
8936       processing_template_decl -= incomplete;
8937       
8938       if (fntype == error_mark_node)
8939         return 1;
8940
8941       /* Place the explicitly specified arguments in TARGS.  */
8942       for (i = NUM_TMPL_ARGS (converted_args); i--;)
8943         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
8944     }
8945      
8946   parms = TYPE_ARG_TYPES (fntype);
8947   /* Never do unification on the 'this' parameter.  */
8948   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
8949     parms = TREE_CHAIN (parms);
8950   
8951   if (return_type)
8952     {
8953       /* We've been given a return type to match, prepend it.  */
8954       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
8955       args = tree_cons (NULL_TREE, return_type, args);
8956       if (len >= 0)
8957         ++len;
8958     }
8959
8960   /* We allow incomplete unification without an error message here
8961      because the standard doesn't seem to explicitly prohibit it.  Our
8962      callers must be ready to deal with unification failures in any
8963      event.  */
8964   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
8965                                   targs, parms, args, /*subr=*/0,
8966                                   strict, /*allow_incomplete*/1, len);
8967
8968   if (result == 0) 
8969     /* All is well so far.  Now, check:
8970        
8971        [temp.deduct] 
8972        
8973        When all template arguments have been deduced, all uses of
8974        template parameters in nondeduced contexts are replaced with
8975        the corresponding deduced argument values.  If the
8976        substitution results in an invalid type, as described above,
8977        type deduction fails.  */
8978     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
8979         == error_mark_node)
8980       return 1;
8981
8982   return result;
8983 }
8984
8985 /* Adjust types before performing type deduction, as described in
8986    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
8987    sections are symmetric.  PARM is the type of a function parameter
8988    or the return type of the conversion function.  ARG is the type of
8989    the argument passed to the call, or the type of the value
8990    initialized with the result of the conversion function.  */
8991
8992 static int
8993 maybe_adjust_types_for_deduction (unification_kind_t strict, 
8994                                   tree* parm, 
8995                                   tree* arg)
8996 {
8997   int result = 0;
8998   
8999   switch (strict)
9000     {
9001     case DEDUCE_CALL:
9002       break;
9003
9004     case DEDUCE_CONV:
9005       {
9006         /* Swap PARM and ARG throughout the remainder of this
9007            function; the handling is precisely symmetric since PARM
9008            will initialize ARG rather than vice versa.  */
9009         tree* temp = parm;
9010         parm = arg;
9011         arg = temp;
9012         break;
9013       }
9014
9015     case DEDUCE_EXACT:
9016       /* There is nothing to do in this case.  */
9017       return 0;
9018
9019     case DEDUCE_ORDER:
9020       /* DR 214. [temp.func.order] is underspecified, and leads to no
9021          ordering between things like `T *' and `T const &' for `U *'.
9022          The former has T=U and the latter T=U*. The former looks more
9023          specialized and John Spicer considers it well-formed (the EDG
9024          compiler accepts it).
9025
9026          John also confirms that deduction should proceed as in a function
9027          call. Which implies the usual ARG and PARM conversions as DEDUCE_CALL.
9028          However, in ordering, ARG can have REFERENCE_TYPE, but no argument
9029          to an actual call can have such a type.
9030          
9031          If both ARG and PARM are REFERENCE_TYPE, we change neither.
9032          If only ARG is a REFERENCE_TYPE, we look through that and then
9033          proceed as with DEDUCE_CALL (which could further convert it).  */
9034       if (TREE_CODE (*arg) == REFERENCE_TYPE)
9035         {
9036           if (TREE_CODE (*parm) == REFERENCE_TYPE)
9037             return 0;
9038           *arg = TREE_TYPE (*arg);
9039         }
9040       break;
9041     default:
9042       gcc_unreachable ();
9043     }
9044
9045   if (TREE_CODE (*parm) != REFERENCE_TYPE)
9046     {
9047       /* [temp.deduct.call]
9048          
9049          If P is not a reference type:
9050          
9051          --If A is an array type, the pointer type produced by the
9052          array-to-pointer standard conversion (_conv.array_) is
9053          used in place of A for type deduction; otherwise,
9054          
9055          --If A is a function type, the pointer type produced by
9056          the function-to-pointer standard conversion
9057          (_conv.func_) is used in place of A for type deduction;
9058          otherwise,
9059          
9060          --If A is a cv-qualified type, the top level
9061          cv-qualifiers of A's type are ignored for type
9062          deduction.  */
9063       if (TREE_CODE (*arg) == ARRAY_TYPE)
9064         *arg = build_pointer_type (TREE_TYPE (*arg));
9065       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
9066         *arg = build_pointer_type (*arg);
9067       else
9068         *arg = TYPE_MAIN_VARIANT (*arg);
9069     }
9070   
9071   /* [temp.deduct.call]
9072      
9073      If P is a cv-qualified type, the top level cv-qualifiers
9074      of P's type are ignored for type deduction.  If P is a
9075      reference type, the type referred to by P is used for
9076      type deduction.  */
9077   *parm = TYPE_MAIN_VARIANT (*parm);
9078   if (TREE_CODE (*parm) == REFERENCE_TYPE)
9079     {
9080       *parm = TREE_TYPE (*parm);
9081       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9082     }
9083
9084   /* DR 322. For conversion deduction, remove a reference type on parm
9085      too (which has been swapped into ARG).  */
9086   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
9087     *arg = TREE_TYPE (*arg);
9088   
9089   return result;
9090 }
9091
9092 /* Most parms like fn_type_unification.
9093
9094    If SUBR is 1, we're being called recursively (to unify the
9095    arguments of a function or method parameter of a function
9096    template).  */
9097
9098 static int
9099 type_unification_real (tree tparms, 
9100                        tree targs, 
9101                        tree xparms, 
9102                        tree xargs, 
9103                        int subr,
9104                        unification_kind_t strict, 
9105                        int allow_incomplete, 
9106                        int xlen)
9107 {
9108   tree parm, arg;
9109   int i;
9110   int ntparms = TREE_VEC_LENGTH (tparms);
9111   int sub_strict;
9112   int saw_undeduced = 0;
9113   tree parms, args;
9114   int len;
9115
9116   gcc_assert (TREE_CODE (tparms) == TREE_VEC);
9117   gcc_assert (xparms == NULL_TREE || TREE_CODE (xparms) == TREE_LIST);
9118   gcc_assert (!xargs || TREE_CODE (xargs) == TREE_LIST);
9119   gcc_assert (ntparms > 0);
9120
9121   switch (strict)
9122     {
9123     case DEDUCE_CALL:
9124       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
9125                     | UNIFY_ALLOW_DERIVED);
9126       break;
9127       
9128     case DEDUCE_CONV:
9129       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
9130       break;
9131
9132     case DEDUCE_EXACT:
9133       sub_strict = UNIFY_ALLOW_NONE;
9134       break;
9135     
9136     case DEDUCE_ORDER:
9137       sub_strict = UNIFY_ALLOW_NONE;
9138       break;
9139       
9140     default:
9141       gcc_unreachable ();
9142     }
9143
9144   if (xlen == 0)
9145     return 0;
9146
9147  again:
9148   parms = xparms;
9149   args = xargs;
9150   len = xlen;
9151
9152   while (parms
9153          && parms != void_list_node
9154          && args
9155          && args != void_list_node)
9156     {
9157       parm = TREE_VALUE (parms);
9158       parms = TREE_CHAIN (parms);
9159       arg = TREE_VALUE (args);
9160       args = TREE_CHAIN (args);
9161
9162       if (arg == error_mark_node)
9163         return 1;
9164       if (arg == unknown_type_node)
9165         /* We can't deduce anything from this, but we might get all the
9166            template args from other function args.  */
9167         continue;
9168
9169       /* Conversions will be performed on a function argument that
9170          corresponds with a function parameter that contains only
9171          non-deducible template parameters and explicitly specified
9172          template parameters.  */
9173       if (!uses_template_parms (parm))
9174         {
9175           tree type;
9176
9177           if (!TYPE_P (arg))
9178             type = TREE_TYPE (arg);
9179           else
9180             type = arg;
9181
9182           if (strict == DEDUCE_EXACT || strict == DEDUCE_ORDER)
9183             {
9184               if (same_type_p (parm, type))
9185                 continue;
9186             }
9187           else
9188             /* It might work; we shouldn't check now, because we might
9189                get into infinite recursion.  Overload resolution will
9190                handle it.  */
9191             continue;
9192
9193           return 1;
9194         }
9195         
9196       if (!TYPE_P (arg))
9197         {
9198           gcc_assert (TREE_TYPE (arg) != NULL_TREE);
9199           if (type_unknown_p (arg))
9200             {
9201               /* [temp.deduct.type] A template-argument can be deduced from
9202                  a pointer to function or pointer to member function
9203                  argument if the set of overloaded functions does not
9204                  contain function templates and at most one of a set of
9205                  overloaded functions provides a unique match.  */
9206
9207               if (resolve_overloaded_unification
9208                   (tparms, targs, parm, arg, strict, sub_strict)
9209                   != 0)
9210                 return 1;
9211               continue;
9212             }
9213           arg = TREE_TYPE (arg);
9214           if (arg == error_mark_node)
9215             return 1;
9216         }
9217       
9218       {
9219         int arg_strict = sub_strict;
9220         
9221         if (!subr)
9222           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9223
9224         if (unify (tparms, targs, parm, arg, arg_strict))
9225           return 1;
9226       }
9227
9228       /* Are we done with the interesting parms?  */
9229       if (--len == 0)
9230         goto done;
9231     }
9232   /* Fail if we've reached the end of the parm list, and more args
9233      are present, and the parm list isn't variadic.  */
9234   if (args && args != void_list_node && parms == void_list_node)
9235     return 1;
9236   /* Fail if parms are left and they don't have default values.  */
9237   if (parms
9238       && parms != void_list_node
9239       && TREE_PURPOSE (parms) == NULL_TREE)
9240     return 1;
9241
9242  done:
9243   if (!subr)
9244     for (i = 0; i < ntparms; i++)
9245       if (TREE_VEC_ELT (targs, i) == NULL_TREE)
9246         {
9247           tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
9248
9249           /* If this is an undeduced nontype parameter that depends on
9250              a type parameter, try another pass; its type may have been
9251              deduced from a later argument than the one from which
9252              this parameter can be deduced.  */
9253           if (TREE_CODE (tparm) == PARM_DECL
9254               && uses_template_parms (TREE_TYPE (tparm))
9255               && !saw_undeduced++)
9256             goto again;
9257
9258           if (!allow_incomplete)
9259             error ("incomplete type unification");
9260           return 2;
9261         }
9262   return 0;
9263 }
9264
9265 /* Subroutine of type_unification_real.  Args are like the variables at the
9266    call site.  ARG is an overloaded function (or template-id); we try
9267    deducing template args from each of the overloads, and if only one
9268    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
9269
9270 static int
9271 resolve_overloaded_unification (tree tparms, 
9272                                 tree targs,
9273                                 tree parm,
9274                                 tree arg, 
9275                                 unification_kind_t strict,
9276                                 int sub_strict)
9277 {
9278   tree tempargs = copy_node (targs);
9279   int good = 0;
9280   bool addr_p;
9281
9282   if (TREE_CODE (arg) == ADDR_EXPR)
9283     {
9284       arg = TREE_OPERAND (arg, 0);
9285       addr_p = true;
9286     }
9287   else
9288     addr_p = false;
9289
9290   if (TREE_CODE (arg) == COMPONENT_REF)
9291     /* Handle `&x' where `x' is some static or non-static member
9292        function name.  */
9293     arg = TREE_OPERAND (arg, 1);
9294
9295   if (TREE_CODE (arg) == OFFSET_REF)
9296     arg = TREE_OPERAND (arg, 1);
9297
9298   /* Strip baselink information.  */
9299   if (BASELINK_P (arg))
9300     arg = BASELINK_FUNCTIONS (arg);
9301
9302   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
9303     {
9304       /* If we got some explicit template args, we need to plug them into
9305          the affected templates before we try to unify, in case the
9306          explicit args will completely resolve the templates in question.  */
9307
9308       tree expl_subargs = TREE_OPERAND (arg, 1);
9309       arg = TREE_OPERAND (arg, 0);
9310
9311       for (; arg; arg = OVL_NEXT (arg))
9312         {
9313           tree fn = OVL_CURRENT (arg);
9314           tree subargs, elem;
9315
9316           if (TREE_CODE (fn) != TEMPLATE_DECL)
9317             continue;
9318
9319           subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
9320                                            expl_subargs);
9321           if (subargs)
9322             {
9323               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9324               good += try_one_overload (tparms, targs, tempargs, parm, 
9325                                         elem, strict, sub_strict, addr_p);
9326             }
9327         }
9328     }
9329   else
9330     {
9331       gcc_assert (TREE_CODE (arg) == OVERLOAD
9332                   || TREE_CODE (arg) == FUNCTION_DECL);
9333   
9334       for (; arg; arg = OVL_NEXT (arg))
9335         good += try_one_overload (tparms, targs, tempargs, parm,
9336                                   TREE_TYPE (OVL_CURRENT (arg)),
9337                                   strict, sub_strict, addr_p);
9338     }
9339
9340   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9341      to function or pointer to member function argument if the set of
9342      overloaded functions does not contain function templates and at most
9343      one of a set of overloaded functions provides a unique match.
9344
9345      So if we found multiple possibilities, we return success but don't
9346      deduce anything.  */
9347
9348   if (good == 1)
9349     {
9350       int i = TREE_VEC_LENGTH (targs);
9351       for (; i--; )
9352         if (TREE_VEC_ELT (tempargs, i))
9353           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9354     }
9355   if (good)
9356     return 0;
9357
9358   return 1;
9359 }
9360
9361 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9362    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
9363    different overloads deduce different arguments for a given parm.
9364    ADDR_P is true if the expression for which deduction is being
9365    performed was of the form "& fn" rather than simply "fn".
9366
9367    Returns 1 on success.  */
9368
9369 static int
9370 try_one_overload (tree tparms,
9371                   tree orig_targs,
9372                   tree targs, 
9373                   tree parm, 
9374                   tree arg, 
9375                   unification_kind_t strict,
9376                   int sub_strict,
9377                   bool addr_p)
9378 {
9379   int nargs;
9380   tree tempargs;
9381   int i;
9382
9383   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9384      to function or pointer to member function argument if the set of
9385      overloaded functions does not contain function templates and at most
9386      one of a set of overloaded functions provides a unique match.
9387
9388      So if this is a template, just return success.  */
9389
9390   if (uses_template_parms (arg))
9391     return 1;
9392
9393   if (TREE_CODE (arg) == METHOD_TYPE)
9394     arg = build_ptrmemfunc_type (build_pointer_type (arg));
9395   else if (addr_p)
9396     arg = build_pointer_type (arg);
9397
9398   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9399
9400   /* We don't copy orig_targs for this because if we have already deduced
9401      some template args from previous args, unify would complain when we
9402      try to deduce a template parameter for the same argument, even though
9403      there isn't really a conflict.  */
9404   nargs = TREE_VEC_LENGTH (targs);
9405   tempargs = make_tree_vec (nargs);
9406
9407   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9408     return 0;
9409
9410   /* First make sure we didn't deduce anything that conflicts with
9411      explicitly specified args.  */
9412   for (i = nargs; i--; )
9413     {
9414       tree elt = TREE_VEC_ELT (tempargs, i);
9415       tree oldelt = TREE_VEC_ELT (orig_targs, i);
9416
9417       if (elt == NULL_TREE)
9418         continue;
9419       else if (uses_template_parms (elt))
9420         {
9421           /* Since we're unifying against ourselves, we will fill in template
9422              args used in the function parm list with our own template parms.
9423              Discard them.  */
9424           TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9425           continue;
9426         }
9427       else if (oldelt && ! template_args_equal (oldelt, elt))
9428         return 0;
9429     }
9430
9431   for (i = nargs; i--; )
9432     {
9433       tree elt = TREE_VEC_ELT (tempargs, i);
9434
9435       if (elt)
9436         TREE_VEC_ELT (targs, i) = elt;
9437     }
9438
9439   return 1;
9440 }
9441
9442 /* Verify that nondeduce template argument agrees with the type
9443    obtained from argument deduction.  Return nonzero if the
9444    verification fails.
9445
9446    For example:
9447
9448      struct A { typedef int X; };
9449      template <class T, class U> struct C {};
9450      template <class T> struct C<T, typename T::X> {};
9451
9452    Then with the instantiation `C<A, int>', we can deduce that
9453    `T' is `A' but unify () does not check whether `typename T::X'
9454    is `int'.  This function ensure that they agree.
9455
9456    TARGS, PARMS are the same as the arguments of unify.
9457    ARGS contains template arguments from all levels.  */
9458
9459 static int
9460 verify_class_unification (tree targs, tree parms, tree args)
9461 {
9462   parms = tsubst (parms, add_outermost_template_args (args, targs),
9463                   tf_none, NULL_TREE);
9464   if (parms == error_mark_node)
9465     return 1;
9466
9467   return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9468 }
9469
9470 /* PARM is a template class (perhaps with unbound template
9471    parameters).  ARG is a fully instantiated type.  If ARG can be
9472    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
9473    TARGS are as for unify.  */
9474
9475 static tree
9476 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9477 {
9478   tree copy_of_targs;
9479
9480   if (!CLASSTYPE_TEMPLATE_INFO (arg)
9481       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg)) 
9482           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9483     return NULL_TREE;
9484
9485   /* We need to make a new template argument vector for the call to
9486      unify.  If we used TARGS, we'd clutter it up with the result of
9487      the attempted unification, even if this class didn't work out.
9488      We also don't want to commit ourselves to all the unifications
9489      we've already done, since unification is supposed to be done on
9490      an argument-by-argument basis.  In other words, consider the
9491      following pathological case:
9492
9493        template <int I, int J, int K>
9494        struct S {};
9495        
9496        template <int I, int J>
9497        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9498        
9499        template <int I, int J, int K>
9500        void f(S<I, J, K>, S<I, I, I>);
9501        
9502        void g() {
9503          S<0, 0, 0> s0;
9504          S<0, 1, 2> s2;
9505        
9506          f(s0, s2);
9507        }
9508
9509      Now, by the time we consider the unification involving `s2', we
9510      already know that we must have `f<0, 0, 0>'.  But, even though
9511      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9512      because there are two ways to unify base classes of S<0, 1, 2>
9513      with S<I, I, I>.  If we kept the already deduced knowledge, we
9514      would reject the possibility I=1.  */
9515   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9516   
9517   /* If unification failed, we're done.  */
9518   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9519              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9520     return NULL_TREE;
9521
9522   return arg;
9523 }
9524
9525 /* Given a template type PARM and a class type ARG, find the unique
9526    base type in ARG that is an instance of PARM.  We do not examine
9527    ARG itself; only its base-classes.  If there is not exactly one
9528    appropriate base class, return NULL_TREE.  PARM may be the type of
9529    a partial specialization, as well as a plain template type.  Used
9530    by unify.  */
9531
9532 static tree
9533 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9534 {
9535   tree rval = NULL_TREE;
9536   tree binfo;
9537
9538   gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)));
9539   
9540   binfo = TYPE_BINFO (complete_type (arg));
9541   if (!binfo)
9542     /* The type could not be completed.  */
9543     return NULL_TREE;
9544
9545   /* Walk in inheritance graph order.  The search order is not
9546      important, and this avoids multiple walks of virtual bases.  */
9547   for (binfo = TREE_CHAIN (binfo); binfo; binfo = TREE_CHAIN (binfo))
9548     {
9549       tree r = try_class_unification (tparms, targs, parm, BINFO_TYPE (binfo));
9550
9551       if (r)
9552         {
9553           /* If there is more than one satisfactory baseclass, then:
9554
9555                [temp.deduct.call]
9556
9557               If they yield more than one possible deduced A, the type
9558               deduction fails.
9559
9560              applies.  */
9561           if (rval && !same_type_p (r, rval))
9562             return NULL_TREE;
9563           
9564           rval = r;
9565         }
9566     }
9567
9568   return rval;
9569 }
9570
9571 /* Returns the level of DECL, which declares a template parameter.  */
9572
9573 static int
9574 template_decl_level (tree decl)
9575 {
9576   switch (TREE_CODE (decl))
9577     {
9578     case TYPE_DECL:
9579     case TEMPLATE_DECL:
9580       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9581
9582     case PARM_DECL:
9583       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9584
9585     default:
9586       gcc_unreachable ();
9587     }
9588   return 0;
9589 }
9590
9591 /* Decide whether ARG can be unified with PARM, considering only the
9592    cv-qualifiers of each type, given STRICT as documented for unify.
9593    Returns nonzero iff the unification is OK on that basis.  */
9594
9595 static int
9596 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9597 {
9598   int arg_quals = cp_type_quals (arg);
9599   int parm_quals = cp_type_quals (parm);
9600
9601   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9602       && !(strict & UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9603     {
9604       /*  Although a CVR qualifier is ignored when being applied to a
9605           substituted template parameter ([8.3.2]/1 for example), that
9606           does not apply during deduction [14.8.2.4]/1, (even though
9607           that is not explicitly mentioned, [14.8.2.4]/9 indicates
9608           this).  Except when we're allowing additional CV qualifiers
9609           at the outer level [14.8.2.1]/3,1st bullet.  */
9610       if ((TREE_CODE (arg) == REFERENCE_TYPE
9611            || TREE_CODE (arg) == FUNCTION_TYPE
9612            || TREE_CODE (arg) == METHOD_TYPE)
9613           && (parm_quals & (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE)))
9614         return 0;
9615
9616       if ((!POINTER_TYPE_P (arg) && TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9617           && (parm_quals & TYPE_QUAL_RESTRICT))
9618         return 0;
9619     }
9620
9621   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9622       && (arg_quals & parm_quals) != parm_quals)
9623     return 0;
9624
9625   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9626       && (parm_quals & arg_quals) != arg_quals)
9627     return 0;
9628
9629   return 1;
9630 }
9631
9632 /* Takes parameters as for type_unification.  Returns 0 if the
9633    type deduction succeeds, 1 otherwise.  The parameter STRICT is a
9634    bitwise or of the following flags:
9635
9636      UNIFY_ALLOW_NONE:
9637        Require an exact match between PARM and ARG.
9638      UNIFY_ALLOW_MORE_CV_QUAL:
9639        Allow the deduced ARG to be more cv-qualified (by qualification
9640        conversion) than ARG.
9641      UNIFY_ALLOW_LESS_CV_QUAL:
9642        Allow the deduced ARG to be less cv-qualified than ARG.
9643      UNIFY_ALLOW_DERIVED:
9644        Allow the deduced ARG to be a template base class of ARG,
9645        or a pointer to a template base class of the type pointed to by
9646        ARG.
9647      UNIFY_ALLOW_INTEGER:
9648        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
9649        case for more information. 
9650      UNIFY_ALLOW_OUTER_LEVEL:
9651        This is the outermost level of a deduction. Used to determine validity
9652        of qualification conversions. A valid qualification conversion must
9653        have const qualified pointers leading up to the inner type which
9654        requires additional CV quals, except at the outer level, where const
9655        is not required [conv.qual]. It would be normal to set this flag in
9656        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9657      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9658        This is the outermost level of a deduction, and PARM can be more CV
9659        qualified at this point.
9660      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9661        This is the outermost level of a deduction, and PARM can be less CV
9662        qualified at this point.  */
9663
9664 static int
9665 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9666 {
9667   int idx;
9668   tree targ;
9669   tree tparm;
9670   int strict_in = strict;
9671
9672   /* I don't think this will do the right thing with respect to types.
9673      But the only case I've seen it in so far has been array bounds, where
9674      signedness is the only information lost, and I think that will be
9675      okay.  */
9676   while (TREE_CODE (parm) == NOP_EXPR)
9677     parm = TREE_OPERAND (parm, 0);
9678
9679   if (arg == error_mark_node)
9680     return 1;
9681   if (arg == unknown_type_node)
9682     /* We can't deduce anything from this, but we might get all the
9683        template args from other function args.  */
9684     return 0;
9685
9686   /* If PARM uses template parameters, then we can't bail out here,
9687      even if ARG == PARM, since we won't record unifications for the
9688      template parameters.  We might need them if we're trying to
9689      figure out which of two things is more specialized.  */
9690   if (arg == parm && !uses_template_parms (parm))
9691     return 0;
9692
9693   /* Immediately reject some pairs that won't unify because of
9694      cv-qualification mismatches.  */
9695   if (TREE_CODE (arg) == TREE_CODE (parm)
9696       && TYPE_P (arg)
9697       /* It is the elements of the array which hold the cv quals of an array
9698          type, and the elements might be template type parms. We'll check
9699          when we recurse.  */
9700       && TREE_CODE (arg) != ARRAY_TYPE
9701       /* We check the cv-qualifiers when unifying with template type
9702          parameters below.  We want to allow ARG `const T' to unify with
9703          PARM `T' for example, when computing which of two templates
9704          is more specialized, for example.  */
9705       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9706       && !check_cv_quals_for_unify (strict_in, arg, parm))
9707     return 1;
9708
9709   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9710       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9711     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9712   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9713   strict &= ~UNIFY_ALLOW_DERIVED;
9714   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9715   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9716   
9717   switch (TREE_CODE (parm))
9718     {
9719     case TYPENAME_TYPE:
9720     case SCOPE_REF:
9721     case UNBOUND_CLASS_TEMPLATE:
9722       /* In a type which contains a nested-name-specifier, template
9723          argument values cannot be deduced for template parameters used
9724          within the nested-name-specifier.  */
9725       return 0;
9726
9727     case TEMPLATE_TYPE_PARM:
9728     case TEMPLATE_TEMPLATE_PARM:
9729     case BOUND_TEMPLATE_TEMPLATE_PARM:
9730       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9731
9732       if (TEMPLATE_TYPE_LEVEL (parm)
9733           != template_decl_level (tparm))
9734         /* The PARM is not one we're trying to unify.  Just check
9735            to see if it matches ARG.  */
9736         return (TREE_CODE (arg) == TREE_CODE (parm)
9737                 && same_type_p (parm, arg)) ? 0 : 1;
9738       idx = TEMPLATE_TYPE_IDX (parm);
9739       targ = TREE_VEC_ELT (targs, idx);
9740       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9741
9742       /* Check for mixed types and values.  */
9743       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9744            && TREE_CODE (tparm) != TYPE_DECL)
9745           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM 
9746               && TREE_CODE (tparm) != TEMPLATE_DECL))
9747         return 1;
9748
9749       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9750         {
9751           /* ARG must be constructed from a template class or a template
9752              template parameter.  */
9753           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9754               && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9755             return 1;
9756
9757           {
9758             tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9759             tree parmvec = TYPE_TI_ARGS (parm);
9760             tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
9761             tree argtmplvec
9762               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9763             int i;
9764
9765             /* The parameter and argument roles have to be switched here 
9766                in order to handle default arguments properly.  For example, 
9767                template<template <class> class TT> void f(TT<int>) 
9768                should be able to accept vector<int> which comes from 
9769                template <class T, class Allocator = allocator> 
9770                class vector.  */
9771
9772             if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9773                 == error_mark_node)
9774               return 1;
9775           
9776             /* Deduce arguments T, i from TT<T> or TT<i>.  
9777                We check each element of PARMVEC and ARGVEC individually
9778                rather than the whole TREE_VEC since they can have
9779                different number of elements.  */
9780
9781             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9782               {
9783                 if (unify (tparms, targs, 
9784                            TREE_VEC_ELT (parmvec, i), 
9785                            TREE_VEC_ELT (argvec, i), 
9786                            UNIFY_ALLOW_NONE))
9787                   return 1;
9788               }
9789           }
9790           arg = TYPE_TI_TEMPLATE (arg);
9791
9792           /* Fall through to deduce template name.  */
9793         }
9794
9795       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9796           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9797         {
9798           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
9799
9800           /* Simple cases: Value already set, does match or doesn't.  */
9801           if (targ != NULL_TREE && template_args_equal (targ, arg))
9802             return 0;
9803           else if (targ)
9804             return 1;
9805         }
9806       else
9807         {
9808           /* If PARM is `const T' and ARG is only `int', we don't have
9809              a match unless we are allowing additional qualification.
9810              If ARG is `const int' and PARM is just `T' that's OK;
9811              that binds `const int' to `T'.  */
9812           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL, 
9813                                          arg, parm))
9814             return 1;
9815
9816           /* Consider the case where ARG is `const volatile int' and
9817              PARM is `const T'.  Then, T should be `volatile int'.  */
9818           arg = cp_build_qualified_type_real
9819             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
9820           if (arg == error_mark_node)
9821             return 1;
9822
9823           /* Simple cases: Value already set, does match or doesn't.  */
9824           if (targ != NULL_TREE && same_type_p (targ, arg))
9825             return 0;
9826           else if (targ)
9827             return 1;
9828
9829           /* Make sure that ARG is not a variable-sized array.  (Note
9830              that were talking about variable-sized arrays (like
9831              `int[n]'), rather than arrays of unknown size (like
9832              `int[]').)  We'll get very confused by such a type since
9833              the bound of the array will not be computable in an
9834              instantiation.  Besides, such types are not allowed in
9835              ISO C++, so we can do as we please here.  */
9836           if (variably_modified_type_p (arg, NULL_TREE))
9837             return 1;
9838         }
9839
9840       TREE_VEC_ELT (targs, idx) = arg;
9841       return 0;
9842
9843     case TEMPLATE_PARM_INDEX:
9844       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9845
9846       if (TEMPLATE_PARM_LEVEL (parm) 
9847           != template_decl_level (tparm))
9848         /* The PARM is not one we're trying to unify.  Just check
9849            to see if it matches ARG.  */
9850         return !(TREE_CODE (arg) == TREE_CODE (parm)
9851                  && cp_tree_equal (parm, arg));
9852
9853       idx = TEMPLATE_PARM_IDX (parm);
9854       targ = TREE_VEC_ELT (targs, idx);
9855
9856       if (targ)
9857         return !cp_tree_equal (targ, arg);
9858
9859       /* [temp.deduct.type] If, in the declaration of a function template
9860          with a non-type template-parameter, the non-type
9861          template-parameter is used in an expression in the function
9862          parameter-list and, if the corresponding template-argument is
9863          deduced, the template-argument type shall match the type of the
9864          template-parameter exactly, except that a template-argument
9865          deduced from an array bound may be of any integral type. 
9866          The non-type parameter might use already deduced type parameters.  */
9867       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
9868       if (!TREE_TYPE (arg))
9869         /* Template-parameter dependent expression.  Just accept it for now.
9870            It will later be processed in convert_template_argument.  */
9871         ;
9872       else if (same_type_p (TREE_TYPE (arg), tparm))
9873         /* OK */;
9874       else if ((strict & UNIFY_ALLOW_INTEGER)
9875                && (TREE_CODE (tparm) == INTEGER_TYPE
9876                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
9877         /* Convert the ARG to the type of PARM; the deduced non-type
9878            template argument must exactly match the types of the
9879            corresponding parameter.  */
9880         arg = fold (build_nop (TREE_TYPE (parm), arg));
9881       else if (uses_template_parms (tparm))
9882         /* We haven't deduced the type of this parameter yet.  Try again
9883            later.  */
9884         return 0;
9885       else
9886         return 1;
9887
9888       TREE_VEC_ELT (targs, idx) = arg;
9889       return 0;
9890
9891     case PTRMEM_CST:
9892      {
9893         /* A pointer-to-member constant can be unified only with
9894          another constant.  */
9895       if (TREE_CODE (arg) != PTRMEM_CST)
9896         return 1;
9897
9898       /* Just unify the class member. It would be useless (and possibly
9899          wrong, depending on the strict flags) to unify also
9900          PTRMEM_CST_CLASS, because we want to be sure that both parm and
9901          arg refer to the same variable, even if through different
9902          classes. For instance:
9903
9904          struct A { int x; };
9905          struct B : A { };
9906
9907          Unification of &A::x and &B::x must succeed.  */
9908       return unify (tparms, targs, PTRMEM_CST_MEMBER (parm),
9909                     PTRMEM_CST_MEMBER (arg), strict);
9910      }
9911
9912     case POINTER_TYPE:
9913       {
9914         if (TREE_CODE (arg) != POINTER_TYPE)
9915           return 1;
9916         
9917         /* [temp.deduct.call]
9918
9919            A can be another pointer or pointer to member type that can
9920            be converted to the deduced A via a qualification
9921            conversion (_conv.qual_).
9922
9923            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
9924            This will allow for additional cv-qualification of the
9925            pointed-to types if appropriate.  */
9926         
9927         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
9928           /* The derived-to-base conversion only persists through one
9929              level of pointers.  */
9930           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
9931
9932         return unify (tparms, targs, TREE_TYPE (parm), 
9933                       TREE_TYPE (arg), strict);
9934       }
9935
9936     case REFERENCE_TYPE:
9937       if (TREE_CODE (arg) != REFERENCE_TYPE)
9938         return 1;
9939       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9940                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
9941
9942     case ARRAY_TYPE:
9943       if (TREE_CODE (arg) != ARRAY_TYPE)
9944         return 1;
9945       if ((TYPE_DOMAIN (parm) == NULL_TREE)
9946           != (TYPE_DOMAIN (arg) == NULL_TREE))
9947         return 1;
9948       if (TYPE_DOMAIN (parm) != NULL_TREE)
9949         {
9950           tree parm_max;
9951           tree arg_max;
9952
9953           parm_max = TYPE_MAX_VALUE (TYPE_DOMAIN (parm));
9954           arg_max = TYPE_MAX_VALUE (TYPE_DOMAIN (arg));
9955
9956           /* Our representation of array types uses "N - 1" as the
9957              TYPE_MAX_VALUE for an array with "N" elements, if "N" is
9958              not an integer constant.  */
9959           if (TREE_CODE (parm_max) == MINUS_EXPR)
9960             {
9961               arg_max = fold (build2 (PLUS_EXPR, 
9962                                       integer_type_node,
9963                                       arg_max,
9964                                       TREE_OPERAND (parm_max, 1)));
9965               parm_max = TREE_OPERAND (parm_max, 0);
9966             }
9967
9968           if (unify (tparms, targs, parm_max, arg_max, UNIFY_ALLOW_INTEGER))
9969             return 1;
9970         }
9971       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9972                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
9973
9974     case REAL_TYPE:
9975     case COMPLEX_TYPE:
9976     case VECTOR_TYPE:
9977     case INTEGER_TYPE:
9978     case BOOLEAN_TYPE:
9979     case ENUMERAL_TYPE:
9980     case VOID_TYPE:
9981       if (TREE_CODE (arg) != TREE_CODE (parm))
9982         return 1;
9983       
9984       /* We have already checked cv-qualification at the top of the
9985          function.  */
9986       if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
9987         return 1;
9988
9989       /* As far as unification is concerned, this wins.  Later checks
9990          will invalidate it if necessary.  */
9991       return 0;
9992
9993       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
9994       /* Type INTEGER_CST can come from ordinary constant template args.  */
9995     case INTEGER_CST:
9996       while (TREE_CODE (arg) == NOP_EXPR)
9997         arg = TREE_OPERAND (arg, 0);
9998
9999       if (TREE_CODE (arg) != INTEGER_CST)
10000         return 1;
10001       return !tree_int_cst_equal (parm, arg);
10002
10003     case TREE_VEC:
10004       {
10005         int i;
10006         if (TREE_CODE (arg) != TREE_VEC)
10007           return 1;
10008         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
10009           return 1;
10010         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
10011           if (unify (tparms, targs,
10012                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
10013                      UNIFY_ALLOW_NONE))
10014             return 1;
10015         return 0;
10016       }
10017
10018     case RECORD_TYPE:
10019     case UNION_TYPE:
10020       if (TREE_CODE (arg) != TREE_CODE (parm))
10021         return 1;
10022   
10023       if (TYPE_PTRMEMFUNC_P (parm))
10024         {
10025           if (!TYPE_PTRMEMFUNC_P (arg))
10026             return 1;
10027
10028           return unify (tparms, targs, 
10029                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
10030                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
10031                         strict);
10032         }
10033
10034       if (CLASSTYPE_TEMPLATE_INFO (parm))
10035         {
10036           tree t = NULL_TREE;
10037
10038           if (strict_in & UNIFY_ALLOW_DERIVED)
10039             {
10040               /* First, we try to unify the PARM and ARG directly.  */
10041               t = try_class_unification (tparms, targs,
10042                                          parm, arg);
10043
10044               if (!t)
10045                 {
10046                   /* Fallback to the special case allowed in
10047                      [temp.deduct.call]:
10048                      
10049                        If P is a class, and P has the form
10050                        template-id, then A can be a derived class of
10051                        the deduced A.  Likewise, if P is a pointer to
10052                        a class of the form template-id, A can be a
10053                        pointer to a derived class pointed to by the
10054                        deduced A.  */
10055                   t = get_template_base (tparms, targs, parm, arg);
10056
10057                   if (!t)
10058                     return 1;
10059                 }
10060             }
10061           else if (CLASSTYPE_TEMPLATE_INFO (arg) 
10062                    && (CLASSTYPE_TI_TEMPLATE (parm) 
10063                        == CLASSTYPE_TI_TEMPLATE (arg)))
10064             /* Perhaps PARM is something like S<U> and ARG is S<int>.
10065                Then, we should unify `int' and `U'.  */
10066             t = arg;
10067           else
10068             /* There's no chance of unification succeeding.  */
10069             return 1;
10070
10071           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
10072                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
10073         }
10074       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
10075         return 1;
10076       return 0;
10077
10078     case METHOD_TYPE:
10079     case FUNCTION_TYPE:
10080       if (TREE_CODE (arg) != TREE_CODE (parm))
10081         return 1;
10082
10083       if (unify (tparms, targs, TREE_TYPE (parm),
10084                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
10085         return 1;
10086       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
10087                                     TYPE_ARG_TYPES (arg), 1, 
10088                                     DEDUCE_EXACT, 0, -1);
10089
10090     case OFFSET_TYPE:
10091       if (TREE_CODE (arg) != OFFSET_TYPE)
10092         return 1;
10093       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
10094                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
10095         return 1;
10096       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
10097                     strict);
10098
10099     case CONST_DECL:
10100       if (DECL_TEMPLATE_PARM_P (parm))
10101         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
10102       if (arg != decl_constant_value (parm)) 
10103         return 1;
10104       return 0;
10105
10106     case FIELD_DECL:
10107     case TEMPLATE_DECL:
10108       /* Matched cases are handled by the ARG == PARM test above.  */
10109       return 1;
10110
10111     default:
10112       gcc_assert (EXPR_P (parm));
10113       
10114       /* We must be looking at an expression.  This can happen with
10115          something like: 
10116            
10117            template <int I>
10118            void foo(S<I>, S<I + 2>);
10119
10120          This is a "nondeduced context":
10121
10122            [deduct.type]
10123            
10124            The nondeduced contexts are:
10125
10126            --A type that is a template-id in which one or more of
10127              the template-arguments is an expression that references
10128              a template-parameter.  
10129
10130          In these cases, we assume deduction succeeded, but don't
10131          actually infer any unifications.  */
10132
10133       if (!uses_template_parms (parm)
10134           && !template_args_equal (parm, arg))
10135         return 1;
10136       else
10137         return 0;
10138     }
10139 }
10140 \f
10141 /* Note that DECL can be defined in this translation unit, if
10142    required.  */
10143
10144 static void
10145 mark_definable (tree decl)
10146 {
10147   tree clone;
10148   DECL_NOT_REALLY_EXTERN (decl) = 1;
10149   FOR_EACH_CLONE (clone, decl)
10150     DECL_NOT_REALLY_EXTERN (clone) = 1;
10151 }
10152
10153 /* Called if RESULT is explicitly instantiated, or is a member of an
10154    explicitly instantiated class.  */
10155
10156 void
10157 mark_decl_instantiated (tree result, int extern_p)
10158 {
10159   SET_DECL_EXPLICIT_INSTANTIATION (result);
10160
10161   /* If this entity has already been written out, it's too late to
10162      make any modifications.  */
10163   if (TREE_ASM_WRITTEN (result))
10164     return;
10165
10166   if (TREE_CODE (result) != FUNCTION_DECL)
10167     /* The TREE_PUBLIC flag for function declarations will have been
10168        set correctly by tsubst.  */
10169     TREE_PUBLIC (result) = 1;
10170
10171   /* This might have been set by an earlier implicit instantiation.  */
10172   DECL_COMDAT (result) = 0;
10173
10174   if (extern_p)
10175     DECL_NOT_REALLY_EXTERN (result) = 0;
10176   else
10177     {
10178       mark_definable (result);
10179       /* Always make artificials weak.  */
10180       if (DECL_ARTIFICIAL (result) && flag_weak)
10181         comdat_linkage (result);
10182       /* For WIN32 we also want to put explicit instantiations in
10183          linkonce sections.  */
10184       else if (TREE_PUBLIC (result))
10185         maybe_make_one_only (result);
10186     }
10187   
10188   /* If EXTERN_P, then this function will not be emitted -- unless
10189      followed by an explicit instantiation, at which point its linkage
10190      will be adjusted.  If !EXTERN_P, then this function will be
10191      emitted here.  In neither circumstance do we want
10192      import_export_decl to adjust the linkage.  */
10193   DECL_INTERFACE_KNOWN (result) = 1; 
10194 }
10195
10196 /* Given two function templates PAT1 and PAT2, return:
10197
10198    DEDUCE should be DEDUCE_EXACT or DEDUCE_ORDER.
10199    
10200    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
10201    -1 if PAT2 is more specialized than PAT1.
10202    0 if neither is more specialized.
10203
10204    LEN is passed through to fn_type_unification.  */
10205    
10206 int
10207 more_specialized (tree pat1, tree pat2, int deduce, int len)
10208 {
10209   tree targs;
10210   int winner = 0;
10211
10212   /* If template argument deduction succeeds, we substitute the
10213      resulting arguments into non-deduced contexts.  While doing that,
10214      we must be aware that we may encounter dependent types.  */
10215   ++processing_template_decl;
10216   targs = get_bindings_real (pat1, DECL_TEMPLATE_RESULT (pat2),
10217                              NULL_TREE, 0, deduce, len);
10218   if (targs)
10219     --winner;
10220
10221   targs = get_bindings_real (pat2, DECL_TEMPLATE_RESULT (pat1),
10222                              NULL_TREE, 0, deduce, len);
10223   if (targs)
10224     ++winner;
10225   --processing_template_decl;
10226
10227   return winner;
10228 }
10229
10230 /* Given two class template specialization list nodes PAT1 and PAT2, return:
10231
10232    1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
10233    -1 if PAT2 is more specialized than PAT1.
10234    0 if neither is more specialized.
10235
10236    FULL_ARGS is the full set of template arguments that triggers this
10237    partial ordering.  */
10238    
10239 int
10240 more_specialized_class (tree pat1, tree pat2, tree full_args)
10241 {
10242   tree targs;
10243   int winner = 0;
10244
10245   /* Just like what happens for functions, if we are ordering between 
10246      different class template specializations, we may encounter dependent
10247      types in the arguments, and we need our dependency check functions
10248      to behave correctly.  */
10249   ++processing_template_decl;
10250   targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
10251                               add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
10252   if (targs)
10253     --winner;
10254
10255   targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
10256                               add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
10257   if (targs)
10258     ++winner;
10259   --processing_template_decl;
10260
10261   return winner;
10262 }
10263
10264 /* Return the template arguments that will produce the function signature
10265    DECL from the function template FN, with the explicit template
10266    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is 1, the return type must
10267    also match.  Return NULL_TREE if no satisfactory arguments could be
10268    found.  DEDUCE and LEN are passed through to fn_type_unification.  */
10269    
10270 static tree
10271 get_bindings_real (tree fn, 
10272                    tree decl, 
10273                    tree explicit_args, 
10274                    int check_rettype, 
10275                    int deduce, 
10276                    int len)
10277 {
10278   int ntparms = DECL_NTPARMS (fn);
10279   tree targs = make_tree_vec (ntparms);
10280   tree decl_type;
10281   tree decl_arg_types;
10282   int i;
10283
10284   /* Substitute the explicit template arguments into the type of DECL.
10285      The call to fn_type_unification will handle substitution into the
10286      FN.  */
10287   decl_type = TREE_TYPE (decl);
10288   if (explicit_args && uses_template_parms (decl_type))
10289     {
10290       tree tmpl;
10291       tree converted_args;
10292
10293       if (DECL_TEMPLATE_INFO (decl))
10294         tmpl = DECL_TI_TEMPLATE (decl);
10295       else
10296         /* We can get here for some invalid specializations.  */
10297         return NULL_TREE;
10298
10299       converted_args
10300         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10301                                   explicit_args, NULL_TREE,
10302                                   tf_none, /*require_all_arguments=*/0));
10303       if (converted_args == error_mark_node)
10304         return NULL_TREE;
10305       
10306       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE); 
10307       if (decl_type == error_mark_node)
10308         return NULL_TREE;
10309     }
10310
10311   decl_arg_types = TYPE_ARG_TYPES (decl_type);
10312   /* Never do unification on the 'this' parameter.  */
10313   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10314     decl_arg_types = TREE_CHAIN (decl_arg_types);
10315
10316   i = fn_type_unification (fn, explicit_args, targs, 
10317                            decl_arg_types,
10318                            (check_rettype || DECL_CONV_FN_P (fn)
10319                             ? TREE_TYPE (decl_type) : NULL_TREE),
10320                            deduce, len);
10321
10322   if (i != 0)
10323     return NULL_TREE;
10324
10325   return targs;
10326 }
10327
10328 /* For most uses, we want to check the return type.  */
10329
10330 static tree 
10331 get_bindings (tree fn, tree decl, tree explicit_args)
10332 {
10333   return get_bindings_real (fn, decl, explicit_args, 1, DEDUCE_EXACT, -1);
10334 }
10335
10336 /* But for resolve_overloaded_unification, we only care about the parameter
10337    types.  */
10338
10339 static tree
10340 get_bindings_overload (tree fn, tree decl, tree explicit_args)
10341 {
10342   return get_bindings_real (fn, decl, explicit_args, 0, DEDUCE_EXACT, -1);
10343 }
10344
10345 /* Return the innermost template arguments that, when applied to a
10346    template specialization whose innermost template parameters are
10347    TPARMS, and whose specialization arguments are PARMS, yield the
10348    ARGS.  
10349
10350    For example, suppose we have:
10351
10352      template <class T, class U> struct S {};
10353      template <class T> struct S<T*, int> {};
10354
10355    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
10356    {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10357    int}.  The resulting vector will be {double}, indicating that `T'
10358    is bound to `double'.  */
10359
10360 static tree
10361 get_class_bindings (tree tparms, tree parms, tree args)
10362 {
10363   int i, ntparms = TREE_VEC_LENGTH (tparms);
10364   tree vec = make_tree_vec (ntparms);
10365
10366   if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10367              UNIFY_ALLOW_NONE))
10368     return NULL_TREE;
10369
10370   for (i =  0; i < ntparms; ++i)
10371     if (! TREE_VEC_ELT (vec, i))
10372       return NULL_TREE;
10373
10374   if (verify_class_unification (vec, parms, args))
10375     return NULL_TREE;
10376
10377   return vec;
10378 }
10379
10380 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10381    Pick the most specialized template, and return the corresponding
10382    instantiation, or if there is no corresponding instantiation, the
10383    template itself.  If there is no most specialized template,
10384    error_mark_node is returned.  If there are no templates at all,
10385    NULL_TREE is returned.  */
10386
10387 tree
10388 most_specialized_instantiation (tree instantiations)
10389 {
10390   tree fn, champ;
10391   int fate;
10392
10393   if (!instantiations)
10394     return NULL_TREE;
10395
10396   champ = instantiations;
10397   for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10398     {
10399       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10400                                DEDUCE_EXACT, -1);
10401       if (fate == 1)
10402         ;
10403       else
10404         {
10405           if (fate == 0)
10406             {
10407               fn = TREE_CHAIN (fn);
10408               if (! fn)
10409                 return error_mark_node;
10410             }
10411           champ = fn;
10412         }
10413     }
10414
10415   for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
10416     {
10417       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10418                                DEDUCE_EXACT, -1);
10419       if (fate != 1)
10420         return error_mark_node;
10421     }
10422
10423   return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10424 }
10425
10426 /* Return the most specialized of the list of templates in FNS that can
10427    produce an instantiation matching DECL, given the explicit template
10428    arguments EXPLICIT_ARGS.  */
10429
10430 static tree
10431 most_specialized (tree fns, tree decl, tree explicit_args)
10432 {
10433   tree candidates = NULL_TREE;
10434   tree fn, args;
10435
10436   for (fn = fns; fn; fn = TREE_CHAIN (fn))
10437     {
10438       tree candidate = TREE_VALUE (fn);
10439
10440       args = get_bindings (candidate, decl, explicit_args);
10441       if (args)
10442         candidates = tree_cons (NULL_TREE, candidate, candidates);
10443     }
10444
10445   return most_specialized_instantiation (candidates);
10446 }
10447
10448 /* If DECL is a specialization of some template, return the most
10449    general such template.  Otherwise, returns NULL_TREE.
10450
10451    For example, given:
10452
10453      template <class T> struct S { template <class U> void f(U); };
10454
10455    if TMPL is `template <class U> void S<int>::f(U)' this will return
10456    the full template.  This function will not trace past partial
10457    specializations, however.  For example, given in addition:
10458
10459      template <class T> struct S<T*> { template <class U> void f(U); };
10460
10461    if TMPL is `template <class U> void S<int*>::f(U)' this will return
10462    `template <class T> template <class U> S<T*>::f(U)'.  */
10463
10464 tree
10465 most_general_template (tree decl)
10466 {
10467   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10468      an immediate specialization.  */
10469   if (TREE_CODE (decl) == FUNCTION_DECL)
10470     {
10471       if (DECL_TEMPLATE_INFO (decl)) {
10472         decl = DECL_TI_TEMPLATE (decl);
10473
10474         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10475            template friend.  */
10476         if (TREE_CODE (decl) != TEMPLATE_DECL)
10477           return NULL_TREE;
10478       } else
10479         return NULL_TREE;
10480     }
10481
10482   /* Look for more and more general templates.  */
10483   while (DECL_TEMPLATE_INFO (decl))
10484     {
10485       /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases.
10486          (See cp-tree.h for details.)  */
10487       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10488         break;
10489
10490       if (CLASS_TYPE_P (TREE_TYPE (decl))
10491           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10492         break;
10493
10494       /* Stop if we run into an explicitly specialized class template.  */
10495       if (!DECL_NAMESPACE_SCOPE_P (decl)
10496           && DECL_CONTEXT (decl)
10497           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10498         break;
10499
10500       decl = DECL_TI_TEMPLATE (decl);
10501     }
10502
10503   return decl;
10504 }
10505
10506 /* Return the most specialized of the class template specializations
10507    of TMPL which can produce an instantiation matching ARGS, or
10508    error_mark_node if the choice is ambiguous.  */
10509
10510 static tree
10511 most_specialized_class (tree tmpl, tree args)
10512 {
10513   tree list = NULL_TREE;
10514   tree t;
10515   tree champ;
10516   int fate;
10517
10518   tmpl = most_general_template (tmpl);
10519   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10520     {
10521       tree spec_args 
10522         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10523       if (spec_args)
10524         {
10525           list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10526           TREE_TYPE (list) = TREE_TYPE (t);
10527         }
10528     }
10529
10530   if (! list)
10531     return NULL_TREE;
10532
10533   t = list;
10534   champ = t;
10535   t = TREE_CHAIN (t);
10536   for (; t; t = TREE_CHAIN (t))
10537     {
10538       fate = more_specialized_class (champ, t, args);
10539       if (fate == 1)
10540         ;
10541       else
10542         {
10543           if (fate == 0)
10544             {
10545               t = TREE_CHAIN (t);
10546               if (! t)
10547                 return error_mark_node;
10548             }
10549           champ = t;
10550         }
10551     }
10552
10553   for (t = list; t && t != champ; t = TREE_CHAIN (t))
10554     {
10555       fate = more_specialized_class (champ, t, args);
10556       if (fate != 1)
10557         return error_mark_node;
10558     }
10559
10560   return champ;
10561 }
10562
10563 /* Explicitly instantiate DECL.  */
10564
10565 void
10566 do_decl_instantiation (tree decl, tree storage)
10567 {
10568   tree result = NULL_TREE;
10569   int extern_p = 0;
10570
10571   if (!decl)
10572     /* An error occurred, for which grokdeclarator has already issued
10573        an appropriate message.  */
10574     return;
10575   else if (! DECL_LANG_SPECIFIC (decl))
10576     {
10577       error ("explicit instantiation of non-template %q#D", decl);
10578       return;
10579     }
10580   else if (TREE_CODE (decl) == VAR_DECL)
10581     {
10582       /* There is an asymmetry here in the way VAR_DECLs and
10583          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
10584          the latter, the DECL we get back will be marked as a
10585          template instantiation, and the appropriate
10586          DECL_TEMPLATE_INFO will be set up.  This does not happen for
10587          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
10588          should handle VAR_DECLs as it currently handles
10589          FUNCTION_DECLs.  */
10590       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10591       if (!result || TREE_CODE (result) != VAR_DECL)
10592         {
10593           error ("no matching template for %qD found", decl);
10594           return;
10595         }
10596     }
10597   else if (TREE_CODE (decl) != FUNCTION_DECL)
10598     {
10599       error ("explicit instantiation of %q#D", decl);
10600       return;
10601     }
10602   else
10603     result = decl;
10604
10605   /* Check for various error cases.  Note that if the explicit
10606      instantiation is valid the RESULT will currently be marked as an
10607      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10608      until we get here.  */
10609
10610   if (DECL_TEMPLATE_SPECIALIZATION (result))
10611     {
10612       /* DR 259 [temp.spec].
10613
10614          Both an explicit instantiation and a declaration of an explicit
10615          specialization shall not appear in a program unless the explicit
10616          instantiation follows a declaration of the explicit specialization.
10617
10618          For a given set of template parameters, if an explicit
10619          instantiation of a template appears after a declaration of an
10620          explicit specialization for that template, the explicit
10621          instantiation has no effect.  */
10622       return;
10623     }
10624   else if (DECL_EXPLICIT_INSTANTIATION (result))
10625     {
10626       /* [temp.spec]
10627
10628          No program shall explicitly instantiate any template more
10629          than once.  
10630
10631          We check DECL_NOT_REALLY_EXTERN so as not to complain when
10632          the first instantiation was `extern' and the second is not,
10633          and EXTERN_P for the opposite case.  */
10634       if (DECL_NOT_REALLY_EXTERN (result) && !extern_p)
10635         pedwarn ("duplicate explicit instantiation of %q#D", result);
10636       /* If an "extern" explicit instantiation follows an ordinary
10637          explicit instantiation, the template is instantiated.  */
10638       if (extern_p)
10639         return;
10640     }
10641   else if (!DECL_IMPLICIT_INSTANTIATION (result))
10642     {
10643       error ("no matching template for %qD found", result);
10644       return;
10645     }
10646   else if (!DECL_TEMPLATE_INFO (result))
10647     {
10648       pedwarn ("explicit instantiation of non-template %q#D", result);
10649       return;
10650     }
10651
10652   if (storage == NULL_TREE)
10653     ;
10654   else if (storage == ridpointers[(int) RID_EXTERN])
10655     {
10656       if (pedantic && !in_system_header)
10657         pedwarn ("ISO C++ forbids the use of %<extern%> on explicit "
10658                  "instantiations");
10659       extern_p = 1;
10660     }
10661   else
10662     error ("storage class %qD applied to template instantiation", storage);
10663
10664   mark_decl_instantiated (result, extern_p);
10665   if (! extern_p)
10666     instantiate_decl (result, /*defer_ok=*/1, /*undefined_ok=*/0);
10667 }
10668
10669 void
10670 mark_class_instantiated (tree t, int extern_p)
10671 {
10672   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
10673   SET_CLASSTYPE_INTERFACE_KNOWN (t);
10674   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
10675   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
10676   if (! extern_p)
10677     {
10678       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
10679       rest_of_type_compilation (t, 1);
10680     }
10681 }     
10682
10683 /* Called from do_type_instantiation through binding_table_foreach to
10684    do recursive instantiation for the type bound in ENTRY.  */
10685 static void
10686 bt_instantiate_type_proc (binding_entry entry, void *data)
10687 {
10688   tree storage = *(tree *) data;
10689
10690   if (IS_AGGR_TYPE (entry->type)
10691       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
10692     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
10693 }
10694
10695 /* Called from do_type_instantiation to instantiate a member
10696    (a member function or a static member variable) of an
10697    explicitly instantiated class template. */
10698 static void
10699 instantiate_class_member (tree decl, int extern_p)
10700 {
10701   mark_decl_instantiated (decl, extern_p);
10702   if (! extern_p)
10703     instantiate_decl (decl, /*defer_ok=*/1, /* undefined_ok=*/1);
10704 }
10705
10706 /* Perform an explicit instantiation of template class T.  STORAGE, if
10707    non-null, is the RID for extern, inline or static.  COMPLAIN is
10708    nonzero if this is called from the parser, zero if called recursively,
10709    since the standard is unclear (as detailed below).  */
10710  
10711 void
10712 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
10713 {
10714   int extern_p = 0;
10715   int nomem_p = 0;
10716   int static_p = 0;
10717   int previous_instantiation_extern_p = 0;
10718
10719   if (TREE_CODE (t) == TYPE_DECL)
10720     t = TREE_TYPE (t);
10721
10722   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
10723     {
10724       error ("explicit instantiation of non-template type %qT", t);
10725       return;
10726     }
10727
10728   complete_type (t);
10729
10730   if (!COMPLETE_TYPE_P (t))
10731     {
10732       if (complain & tf_error)
10733         error ("explicit instantiation of %q#T before definition of template",
10734                t);
10735       return;
10736     }
10737
10738   if (storage != NULL_TREE)
10739     {
10740       if (pedantic && !in_system_header)
10741         pedwarn("ISO C++ forbids the use of `%E' on explicit instantiations", 
10742                 storage);
10743
10744       if (storage == ridpointers[(int) RID_INLINE])
10745         nomem_p = 1;
10746       else if (storage == ridpointers[(int) RID_EXTERN])
10747         extern_p = 1;
10748       else if (storage == ridpointers[(int) RID_STATIC])
10749         static_p = 1;
10750       else
10751         {
10752           error ("storage class %qD applied to template instantiation",
10753                  storage);
10754           extern_p = 0;
10755         }
10756     }
10757
10758   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10759     {
10760       /* DR 259 [temp.spec].
10761
10762          Both an explicit instantiation and a declaration of an explicit
10763          specialization shall not appear in a program unless the explicit
10764          instantiation follows a declaration of the explicit specialization.
10765
10766          For a given set of template parameters, if an explicit
10767          instantiation of a template appears after a declaration of an
10768          explicit specialization for that template, the explicit
10769          instantiation has no effect.  */
10770       return;
10771     }
10772   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
10773     {
10774       /* [temp.spec]
10775
10776          No program shall explicitly instantiate any template more
10777          than once.  
10778
10779          If PREVIOUS_INSTANTIATION_EXTERN_P, then the first explicit
10780          instantiation was `extern'.  If EXTERN_P then the second is.
10781          These cases are OK.  */
10782       previous_instantiation_extern_p = CLASSTYPE_INTERFACE_ONLY (t);
10783
10784       if (!previous_instantiation_extern_p && !extern_p
10785           && (complain & tf_error))
10786         pedwarn ("duplicate explicit instantiation of %q#T", t);
10787       
10788       /* If we've already instantiated the template, just return now.  */
10789       if (!CLASSTYPE_INTERFACE_ONLY (t))
10790         return;
10791     }
10792
10793   mark_class_instantiated (t, extern_p);
10794
10795   if (nomem_p)
10796     return;
10797
10798   {
10799     tree tmp;
10800
10801     /* In contrast to implicit instantiation, where only the
10802        declarations, and not the definitions, of members are
10803        instantiated, we have here:
10804
10805          [temp.explicit]
10806
10807          The explicit instantiation of a class template specialization
10808          implies the instantiation of all of its members not
10809          previously explicitly specialized in the translation unit
10810          containing the explicit instantiation.  
10811
10812        Of course, we can't instantiate member template classes, since
10813        we don't have any arguments for them.  Note that the standard
10814        is unclear on whether the instantiation of the members are
10815        *explicit* instantiations or not.  However, the most natural
10816        interpretation is that it should be an explicit instantiation. */
10817
10818     if (! static_p)
10819       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
10820         if (TREE_CODE (tmp) == FUNCTION_DECL
10821             && DECL_TEMPLATE_INSTANTIATION (tmp))
10822           instantiate_class_member (tmp, extern_p);
10823
10824     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
10825       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
10826         instantiate_class_member (tmp, extern_p);
10827
10828     if (CLASSTYPE_NESTED_UTDS (t))
10829       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
10830                              bt_instantiate_type_proc, &storage);
10831   }
10832 }
10833
10834 /* Given a function DECL, which is a specialization of TMPL, modify
10835    DECL to be a re-instantiation of TMPL with the same template
10836    arguments.  TMPL should be the template into which tsubst'ing
10837    should occur for DECL, not the most general template.
10838
10839    One reason for doing this is a scenario like this:
10840
10841      template <class T>
10842      void f(const T&, int i);
10843
10844      void g() { f(3, 7); }
10845
10846      template <class T>
10847      void f(const T& t, const int i) { }
10848
10849    Note that when the template is first instantiated, with
10850    instantiate_template, the resulting DECL will have no name for the
10851    first parameter, and the wrong type for the second.  So, when we go
10852    to instantiate the DECL, we regenerate it.  */
10853
10854 static void
10855 regenerate_decl_from_template (tree decl, tree tmpl)
10856 {
10857   /* The arguments used to instantiate DECL, from the most general
10858      template.  */
10859   tree args;
10860   tree code_pattern;
10861
10862   args = DECL_TI_ARGS (decl);
10863   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
10864
10865   /* Make sure that we can see identifiers, and compute access
10866      correctly.  */
10867   push_access_scope (decl);
10868
10869   if (TREE_CODE (decl) == FUNCTION_DECL)
10870     {
10871       tree decl_parm;
10872       tree pattern_parm;
10873       tree specs;
10874       int args_depth;
10875       int parms_depth;
10876       
10877       args_depth = TMPL_ARGS_DEPTH (args);
10878       parms_depth = TMPL_PARMS_DEPTH (DECL_TEMPLATE_PARMS (tmpl)); 
10879       if (args_depth > parms_depth)
10880         args = get_innermost_template_args (args, parms_depth);
10881
10882       specs = tsubst_exception_specification (TREE_TYPE (code_pattern),
10883                                               args, tf_error, NULL_TREE);
10884       if (specs)
10885         TREE_TYPE (decl) = build_exception_variant (TREE_TYPE (decl),
10886                                                     specs);
10887
10888       /* Merge parameter declarations.  */
10889       decl_parm = skip_artificial_parms_for (decl, 
10890                                              DECL_ARGUMENTS (decl));
10891       pattern_parm 
10892         = skip_artificial_parms_for (code_pattern,
10893                                      DECL_ARGUMENTS (code_pattern));
10894       while (decl_parm)
10895         {
10896           tree parm_type;
10897
10898           if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm))
10899             DECL_NAME (decl_parm) = DECL_NAME (pattern_parm);
10900           parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error,
10901                               NULL_TREE);
10902           if (!same_type_p (TREE_TYPE (decl_parm), parm_type))
10903             TREE_TYPE (decl_parm) = parm_type;
10904           decl_parm = TREE_CHAIN (decl_parm);
10905           pattern_parm = TREE_CHAIN (pattern_parm);
10906         }
10907
10908       /* Merge additional specifiers from the CODE_PATTERN.  */
10909       if (DECL_DECLARED_INLINE_P (code_pattern)
10910           && !DECL_DECLARED_INLINE_P (decl))
10911         DECL_DECLARED_INLINE_P (decl) = 1;
10912       if (DECL_INLINE (code_pattern) && !DECL_INLINE (decl))
10913         DECL_INLINE (decl) = 1;
10914     }
10915   else if (TREE_CODE (decl) == VAR_DECL)
10916     {
10917       if (!DECL_INITIALIZED_IN_CLASS_P (decl)
10918           && DECL_INITIAL (code_pattern))
10919         DECL_INITIAL (decl) = 
10920           tsubst_expr (DECL_INITIAL (code_pattern), args, 
10921                        tf_error, DECL_TI_TEMPLATE (decl));
10922     }
10923   else
10924     gcc_unreachable ();
10925
10926   pop_access_scope (decl);
10927 }
10928
10929 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
10930    substituted to get DECL.  */
10931
10932 tree
10933 template_for_substitution (tree decl)
10934 {
10935   tree tmpl = DECL_TI_TEMPLATE (decl);
10936
10937   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
10938      for the instantiation.  This is not always the most general
10939      template.  Consider, for example:
10940
10941         template <class T>
10942         struct S { template <class U> void f();
10943                    template <> void f<int>(); };
10944
10945      and an instantiation of S<double>::f<int>.  We want TD to be the
10946      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
10947   while (/* An instantiation cannot have a definition, so we need a
10948             more general template.  */
10949          DECL_TEMPLATE_INSTANTIATION (tmpl)
10950            /* We must also deal with friend templates.  Given:
10951
10952                 template <class T> struct S { 
10953                   template <class U> friend void f() {};
10954                 };
10955
10956               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
10957               so far as the language is concerned, but that's still
10958               where we get the pattern for the instantiation from.  On
10959               other hand, if the definition comes outside the class, say:
10960
10961                 template <class T> struct S { 
10962                   template <class U> friend void f();
10963                 };
10964                 template <class U> friend void f() {}
10965
10966               we don't need to look any further.  That's what the check for
10967               DECL_INITIAL is for.  */
10968           || (TREE_CODE (decl) == FUNCTION_DECL
10969               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
10970               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
10971     {
10972       /* The present template, TD, should not be a definition.  If it
10973          were a definition, we should be using it!  Note that we
10974          cannot restructure the loop to just keep going until we find
10975          a template with a definition, since that might go too far if
10976          a specialization was declared, but not defined.  */
10977       gcc_assert (TREE_CODE (decl) != VAR_DECL
10978                   || DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl)));
10979       
10980       /* Fetch the more general template.  */
10981       tmpl = DECL_TI_TEMPLATE (tmpl);
10982     }
10983
10984   return tmpl;
10985 }
10986
10987 /* Produce the definition of D, a _DECL generated from a template.  If
10988    DEFER_OK is nonzero, then we don't have to actually do the
10989    instantiation now; we just have to do it sometime.  Normally it is
10990    an error if this is an explicit instantiation but D is undefined.
10991    If UNDEFINED_OK is nonzero, then instead we treat it as an implicit
10992    instantiation.  UNDEFINED_OK is nonzero only if we are being used
10993    to instantiate the members of an explicitly instantiated class
10994    template. */
10995
10996
10997 tree
10998 instantiate_decl (tree d, int defer_ok, int undefined_ok)
10999 {
11000   tree tmpl = DECL_TI_TEMPLATE (d);
11001   tree gen_args;
11002   tree args;
11003   tree td;
11004   tree code_pattern;
11005   tree spec;
11006   tree gen_tmpl;
11007   int pattern_defined;
11008   int need_push;
11009   location_t saved_loc = input_location;
11010   
11011   /* This function should only be used to instantiate templates for
11012      functions and static member variables.  */
11013   gcc_assert (TREE_CODE (d) == FUNCTION_DECL
11014               || TREE_CODE (d) == VAR_DECL);
11015
11016   /* Variables are never deferred; if instantiation is required, they
11017      are instantiated right away.  That allows for better code in the
11018      case that an expression refers to the value of the variable --
11019      if the variable has a constant value the referring expression can
11020      take advantage of that fact.  */
11021   if (TREE_CODE (d) == VAR_DECL)
11022     defer_ok = 0;
11023
11024   /* Don't instantiate cloned functions.  Instead, instantiate the
11025      functions they cloned.  */
11026   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
11027     d = DECL_CLONED_FUNCTION (d);
11028
11029   if (DECL_TEMPLATE_INSTANTIATED (d))
11030     /* D has already been instantiated.  It might seem reasonable to
11031        check whether or not D is an explicit instantiation, and, if so,
11032        stop here.  But when an explicit instantiation is deferred
11033        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
11034        is set, even though we still need to do the instantiation.  */
11035     return d;
11036
11037   /* If we already have a specialization of this declaration, then
11038      there's no reason to instantiate it.  Note that
11039      retrieve_specialization gives us both instantiations and
11040      specializations, so we must explicitly check
11041      DECL_TEMPLATE_SPECIALIZATION.  */
11042   gen_tmpl = most_general_template (tmpl);
11043   gen_args = DECL_TI_ARGS (d);
11044   spec = retrieve_specialization (gen_tmpl, gen_args,
11045                                   /*class_specializations_p=*/false);
11046   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
11047     return spec;
11048
11049   /* This needs to happen before any tsubsting.  */
11050   if (! push_tinst_level (d))
11051     return d;
11052
11053   timevar_push (TV_PARSE);
11054
11055   /* We may be in the middle of deferred access check.  Disable it now.  */
11056   push_deferring_access_checks (dk_no_deferred);
11057
11058   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
11059      for the instantiation.  */
11060   td = template_for_substitution (d);
11061   code_pattern = DECL_TEMPLATE_RESULT (td);
11062
11063   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
11064       || DECL_TEMPLATE_SPECIALIZATION (td))
11065     /* In the case of a friend template whose definition is provided
11066        outside the class, we may have too many arguments.  Drop the
11067        ones we don't need.  The same is true for specializations.  */
11068     args = get_innermost_template_args
11069       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
11070   else
11071     args = gen_args;
11072
11073   if (TREE_CODE (d) == FUNCTION_DECL)
11074     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
11075   else
11076     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
11077   /* Unless an explicit instantiation directive has already determined
11078      the linkage of D, remember that a definition is available for
11079      this entity.  */
11080   if (pattern_defined 
11081       && !DECL_INTERFACE_KNOWN (d)
11082       && !DECL_NOT_REALLY_EXTERN (d))
11083     mark_definable (d);
11084
11085   input_location = DECL_SOURCE_LOCATION (d);
11086
11087   if (! pattern_defined && DECL_EXPLICIT_INSTANTIATION (d) && undefined_ok)
11088     {
11089       DECL_NOT_REALLY_EXTERN (d) = 0;
11090       SET_DECL_IMPLICIT_INSTANTIATION (d);
11091     }
11092
11093   if (!defer_ok)
11094     {
11095       /* Recheck the substitutions to obtain any warning messages
11096          about ignoring cv qualifiers.  */
11097       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
11098       tree type = TREE_TYPE (gen);
11099
11100       /* Make sure that we can see identifiers, and compute access
11101          correctly.  D is already the target FUNCTION_DECL with the
11102          right context.  */
11103       push_access_scope (d);
11104
11105       if (TREE_CODE (gen) == FUNCTION_DECL)
11106         {
11107           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
11108           tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
11109                   tf_error | tf_warning, d);
11110           /* Don't simply tsubst the function type, as that will give
11111              duplicate warnings about poor parameter qualifications.
11112              The function arguments are the same as the decl_arguments
11113              without the top level cv qualifiers.  */
11114           type = TREE_TYPE (type);
11115         }
11116       tsubst (type, gen_args, tf_error | tf_warning, d);
11117
11118       pop_access_scope (d);
11119     }
11120   
11121   /* We should have set up DECL_INITIAL in instantiate_class_template
11122      for in-class definitions of static data members.  */
11123   gcc_assert (!(TREE_CODE (d) == VAR_DECL 
11124                 && DECL_INITIALIZED_IN_CLASS_P (d)
11125                 && DECL_INITIAL (d) == NULL_TREE));
11126
11127   /* Do not instantiate templates that we know will be defined
11128      elsewhere.  */
11129   if (DECL_INTERFACE_KNOWN (d)
11130       && DECL_REALLY_EXTERN (d)
11131       && ! (TREE_CODE (d) == FUNCTION_DECL 
11132             && DECL_INLINE (d)))
11133     goto out;
11134   /* Defer all other templates, unless we have been explicitly
11135      forbidden from doing so.  We restore the source position here
11136      because it's used by add_pending_template.  */
11137   else if (! pattern_defined || defer_ok)
11138     {
11139       input_location = saved_loc;
11140
11141       if (at_eof && !pattern_defined 
11142           && DECL_EXPLICIT_INSTANTIATION (d))
11143         /* [temp.explicit]
11144
11145            The definition of a non-exported function template, a
11146            non-exported member function template, or a non-exported
11147            member function or static data member of a class template
11148            shall be present in every translation unit in which it is
11149            explicitly instantiated.  */
11150         pedwarn
11151           ("explicit instantiation of %qD but no definition available", d);
11152
11153       add_pending_template (d);
11154       goto out;
11155     }
11156   /* Tell the repository that D is available in this translation unit
11157      -- and see if it is supposed to be instantiated here.  */
11158   if (TREE_PUBLIC (d) && !DECL_REALLY_EXTERN (d) && !repo_emit_p (d))
11159     {
11160       /* In a PCH file, despite the fact that the repository hasn't
11161          requested instantiation in the PCH it is still possible that
11162          an instantiation will be required in a file that includes the
11163          PCH.  */
11164       if (pch_file)
11165         add_pending_template (d);
11166       /* Instantiate inline functions so that the inliner can do its
11167          job, even though we'll not be emitting a copy of this
11168          function.  */
11169       if (!(TREE_CODE (d) == FUNCTION_DECL
11170             && flag_inline_trees 
11171             && DECL_DECLARED_INLINE_P (d)))
11172         goto out;
11173     }
11174
11175   need_push = !cfun || !global_bindings_p ();
11176   if (need_push)
11177     push_to_top_level ();
11178
11179   /* Mark D as instantiated so that recursive calls to
11180      instantiate_decl do not try to instantiate it again.  */
11181   DECL_TEMPLATE_INSTANTIATED (d) = 1;
11182
11183   /* Regenerate the declaration in case the template has been modified
11184      by a subsequent redeclaration.  */
11185   regenerate_decl_from_template (d, td);
11186
11187   /* We already set the file and line above.  Reset them now in case
11188      they changed as a result of calling regenerate_decl_from_template.  */
11189   input_location = DECL_SOURCE_LOCATION (d);
11190
11191   if (TREE_CODE (d) == VAR_DECL)
11192     {
11193       /* Clear out DECL_RTL; whatever was there before may not be right
11194          since we've reset the type of the declaration.  */
11195       SET_DECL_RTL (d, NULL_RTX);
11196       DECL_IN_AGGR_P (d) = 0;
11197
11198       /* Clear DECL_EXTERNAL so that cp_finish_decl will process the
11199          initializer.  That function will defer actual emission until
11200          we have a chance to determine linkage.  */
11201       DECL_EXTERNAL (d) = 0;
11202
11203       /* Enter the scope of D so that access-checking works correctly.  */
11204       push_nested_class (DECL_CONTEXT (d));
11205       cp_finish_decl (d, 
11206                       (!DECL_INITIALIZED_IN_CLASS_P (d) 
11207                        ? DECL_INITIAL (d) : NULL_TREE),
11208                       NULL_TREE, 0);
11209       pop_nested_class ();
11210     }
11211   else if (TREE_CODE (d) == FUNCTION_DECL)
11212     {
11213       htab_t saved_local_specializations;
11214       tree subst_decl;
11215       tree tmpl_parm;
11216       tree spec_parm;
11217
11218       /* Save away the current list, in case we are instantiating one
11219          template from within the body of another.  */
11220       saved_local_specializations = local_specializations;
11221
11222       /* Set up the list of local specializations.  */
11223       local_specializations = htab_create (37, 
11224                                            hash_local_specialization,
11225                                            eq_local_specializations,
11226                                            NULL);
11227
11228       /* Set up context.  */
11229       start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED);
11230
11231       /* Create substitution entries for the parameters.  */
11232       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
11233       tmpl_parm = DECL_ARGUMENTS (subst_decl);
11234       spec_parm = DECL_ARGUMENTS (d);
11235       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
11236         {
11237           register_local_specialization (spec_parm, tmpl_parm);
11238           spec_parm = skip_artificial_parms_for (d, spec_parm);
11239           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11240         }
11241       while (tmpl_parm)
11242         {
11243           register_local_specialization (spec_parm, tmpl_parm);
11244           tmpl_parm = TREE_CHAIN (tmpl_parm);
11245           spec_parm = TREE_CHAIN (spec_parm);
11246         }
11247       gcc_assert (!spec_parm);
11248
11249       /* Substitute into the body of the function.  */
11250       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11251                    tf_error | tf_warning, tmpl);
11252
11253       /* We don't need the local specializations any more.  */
11254       htab_delete (local_specializations);
11255       local_specializations = saved_local_specializations;
11256
11257       /* Finish the function.  */
11258       d = finish_function (0);
11259       expand_or_defer_fn (d);
11260     }
11261
11262   /* We're not deferring instantiation any more.  */
11263   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11264
11265   if (need_push)
11266     pop_from_top_level ();
11267
11268 out:
11269   input_location = saved_loc;
11270   pop_deferring_access_checks ();
11271   pop_tinst_level ();
11272
11273   timevar_pop (TV_PARSE);
11274
11275   return d;
11276 }
11277
11278 /* Run through the list of templates that we wish we could
11279    instantiate, and instantiate any we can.  RETRIES is the
11280    number of times we retry pending template instantiation.  */
11281
11282 void
11283 instantiate_pending_templates (int retries)
11284 {
11285   tree *t;
11286   tree last = NULL_TREE;
11287   int reconsider;
11288   location_t saved_loc = input_location;
11289
11290   /* Instantiating templates may trigger vtable generation.  This in turn
11291      may require further template instantiations.  We place a limit here
11292      to avoid infinite loop.  */
11293   if (pending_templates && retries >= max_tinst_depth)
11294     {
11295       cp_error_at ("template instantiation depth exceeds maximum of %d"
11296                    " (use -ftemplate-depth-NN to increase the maximum)"
11297                    " instantiating %q+D, possibly from virtual table"
11298                    " generation",
11299                    max_tinst_depth, TREE_VALUE (pending_templates));
11300       return;
11301     }
11302
11303   do 
11304     {
11305       reconsider = 0;
11306
11307       t = &pending_templates;
11308       while (*t)
11309         {
11310           tree instantiation = TREE_VALUE (*t);
11311
11312           reopen_tinst_level (TREE_PURPOSE (*t));
11313
11314           if (TYPE_P (instantiation))
11315             {
11316               tree fn;
11317
11318               if (!COMPLETE_TYPE_P (instantiation))
11319                 {
11320                   instantiate_class_template (instantiation);
11321                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11322                     for (fn = TYPE_METHODS (instantiation); 
11323                          fn;
11324                          fn = TREE_CHAIN (fn))
11325                       if (! DECL_ARTIFICIAL (fn))
11326                         instantiate_decl (fn, /*defer_ok=*/0,
11327                                           /*undefined_ok=*/0);
11328                   if (COMPLETE_TYPE_P (instantiation))
11329                     reconsider = 1;
11330                 }
11331
11332               if (COMPLETE_TYPE_P (instantiation))
11333                 /* If INSTANTIATION has been instantiated, then we don't
11334                    need to consider it again in the future.  */
11335                 *t = TREE_CHAIN (*t);
11336               else
11337                 {
11338                   last = *t;
11339                   t = &TREE_CHAIN (*t);
11340                 }
11341             }
11342           else
11343             {
11344               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11345                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11346                 {
11347                   instantiation = instantiate_decl (instantiation,
11348                                                     /*defer_ok=*/0,
11349                                                     /*undefined_ok=*/0);
11350                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11351                     reconsider = 1;
11352                 }
11353
11354               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11355                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
11356                 /* If INSTANTIATION has been instantiated, then we don't
11357                    need to consider it again in the future.  */
11358                 *t = TREE_CHAIN (*t);
11359               else
11360                 {
11361                   last = *t;
11362                   t = &TREE_CHAIN (*t);
11363                 }
11364             }
11365           tinst_depth = 0;
11366           current_tinst_level = NULL_TREE;
11367         }
11368       last_pending_template = last;
11369     } 
11370   while (reconsider);
11371
11372   input_location = saved_loc;
11373 }
11374
11375 /* Substitute ARGVEC into T, which is a list of initializers for
11376    either base class or a non-static data member.  The TREE_PURPOSEs
11377    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
11378    instantiate_decl.  */
11379
11380 static tree
11381 tsubst_initializer_list (tree t, tree argvec)
11382 {
11383   tree inits = NULL_TREE;
11384
11385   for (; t; t = TREE_CHAIN (t))
11386     {
11387       tree decl;
11388       tree init;
11389       tree val;
11390
11391       decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11392                           NULL_TREE);
11393       decl = expand_member_init (decl);
11394       if (decl && !DECL_P (decl))
11395         in_base_initializer = 1;
11396       
11397       init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11398                           NULL_TREE);
11399       if (!init)
11400         ;
11401       else if (TREE_CODE (init) == TREE_LIST)
11402         for (val = init; val; val = TREE_CHAIN (val))
11403           TREE_VALUE (val) = convert_from_reference (TREE_VALUE (val));
11404       else if (init != void_type_node)
11405         init = convert_from_reference (init);
11406
11407       in_base_initializer = 0;
11408
11409       if (decl)
11410         {
11411           init = build_tree_list (decl, init);
11412           TREE_CHAIN (init) = inits;
11413           inits = init;
11414         }
11415     }
11416   return inits;
11417 }
11418
11419 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
11420
11421 static void
11422 set_current_access_from_decl (tree decl)
11423 {
11424   if (TREE_PRIVATE (decl))
11425     current_access_specifier = access_private_node;
11426   else if (TREE_PROTECTED (decl))
11427     current_access_specifier = access_protected_node;
11428   else
11429     current_access_specifier = access_public_node;
11430 }
11431
11432 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
11433    is the instantiation (which should have been created with
11434    start_enum) and ARGS are the template arguments to use.  */
11435
11436 static void
11437 tsubst_enum (tree tag, tree newtag, tree args)
11438 {
11439   tree e;
11440
11441   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11442     {
11443       tree value;
11444       tree decl;
11445
11446       decl = TREE_VALUE (e);
11447       /* Note that in a template enum, the TREE_VALUE is the
11448          CONST_DECL, not the corresponding INTEGER_CST.  */
11449       value = tsubst_expr (DECL_INITIAL (decl), 
11450                            args, tf_error | tf_warning,
11451                            NULL_TREE);
11452
11453       /* Give this enumeration constant the correct access.  */
11454       set_current_access_from_decl (decl);
11455
11456       /* Actually build the enumerator itself.  */
11457       build_enumerator (DECL_NAME (decl), value, newtag); 
11458     }
11459
11460   finish_enum (newtag);
11461   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11462     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11463 }
11464
11465 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
11466    its type -- but without substituting the innermost set of template
11467    arguments.  So, innermost set of template parameters will appear in
11468    the type.  */
11469
11470 tree 
11471 get_mostly_instantiated_function_type (tree decl)
11472 {
11473   tree fn_type;
11474   tree tmpl;
11475   tree targs;
11476   tree tparms;
11477   int parm_depth;
11478
11479   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11480   targs = DECL_TI_ARGS (decl);
11481   tparms = DECL_TEMPLATE_PARMS (tmpl);
11482   parm_depth = TMPL_PARMS_DEPTH (tparms);
11483
11484   /* There should be as many levels of arguments as there are levels
11485      of parameters.  */
11486   gcc_assert (parm_depth == TMPL_ARGS_DEPTH (targs));
11487
11488   fn_type = TREE_TYPE (tmpl);
11489
11490   if (parm_depth == 1)
11491     /* No substitution is necessary.  */
11492     ;
11493   else
11494     {
11495       int i;
11496       tree partial_args;
11497
11498       /* Replace the innermost level of the TARGS with NULL_TREEs to
11499          let tsubst know not to substitute for those parameters.  */
11500       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11501       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11502         SET_TMPL_ARGS_LEVEL (partial_args, i,
11503                              TMPL_ARGS_LEVEL (targs, i));
11504       SET_TMPL_ARGS_LEVEL (partial_args,
11505                            TMPL_ARGS_DEPTH (targs),
11506                            make_tree_vec (DECL_NTPARMS (tmpl)));
11507
11508       /* Make sure that we can see identifiers, and compute access
11509          correctly.  We can just use the context of DECL for the
11510          partial substitution here.  It depends only on outer template
11511          parameters, regardless of whether the innermost level is
11512          specialized or not.  */
11513       push_access_scope (decl);
11514
11515       ++processing_template_decl;
11516       /* Now, do the (partial) substitution to figure out the
11517          appropriate function type.  */
11518       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11519       --processing_template_decl;
11520
11521       /* Substitute into the template parameters to obtain the real
11522          innermost set of parameters.  This step is important if the
11523          innermost set of template parameters contains value
11524          parameters whose types depend on outer template parameters.  */
11525       TREE_VEC_LENGTH (partial_args)--;
11526       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11527
11528       pop_access_scope (decl);
11529     }
11530
11531   return fn_type;
11532 }
11533
11534 /* Return truthvalue if we're processing a template different from
11535    the last one involved in diagnostics.  */
11536 int
11537 problematic_instantiation_changed (void)
11538 {
11539   return last_template_error_tick != tinst_level_tick;
11540 }
11541
11542 /* Remember current template involved in diagnostics.  */
11543 void
11544 record_last_problematic_instantiation (void)
11545 {
11546   last_template_error_tick = tinst_level_tick;
11547 }
11548
11549 tree
11550 current_instantiation (void)
11551 {
11552   return current_tinst_level;
11553 }
11554
11555 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11556    type. Return zero for ok, nonzero for disallowed. Issue error and
11557    warning messages under control of COMPLAIN.  */
11558
11559 static int
11560 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11561 {
11562   if (INTEGRAL_TYPE_P (type))
11563     return 0;
11564   else if (POINTER_TYPE_P (type))
11565     return 0;
11566   else if (TYPE_PTR_TO_MEMBER_P (type))
11567     return 0;
11568   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11569     return 0;
11570   else if (TREE_CODE (type) == TYPENAME_TYPE)
11571     return 0;
11572            
11573   if (complain & tf_error)
11574     error ("%q#T is not a valid type for a template constant parameter", type);
11575   return 1;
11576 }
11577
11578 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11579    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11580
11581 static bool
11582 dependent_type_p_r (tree type)
11583 {
11584   tree scope;
11585
11586   /* [temp.dep.type]
11587
11588      A type is dependent if it is:
11589
11590      -- a template parameter. Template template parameters are types
11591         for us (since TYPE_P holds true for them) so we handle
11592         them here.  */
11593   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM 
11594       || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
11595     return true;
11596   /* -- a qualified-id with a nested-name-specifier which contains a
11597         class-name that names a dependent type or whose unqualified-id
11598         names a dependent type.  */
11599   if (TREE_CODE (type) == TYPENAME_TYPE)
11600     return true;
11601   /* -- a cv-qualified type where the cv-unqualified type is
11602         dependent.  */
11603   type = TYPE_MAIN_VARIANT (type);
11604   /* -- a compound type constructed from any dependent type.  */
11605   if (TYPE_PTR_TO_MEMBER_P (type))
11606     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11607             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE 
11608                                            (type)));
11609   else if (TREE_CODE (type) == POINTER_TYPE
11610            || TREE_CODE (type) == REFERENCE_TYPE)
11611     return dependent_type_p (TREE_TYPE (type));
11612   else if (TREE_CODE (type) == FUNCTION_TYPE
11613            || TREE_CODE (type) == METHOD_TYPE)
11614     {
11615       tree arg_type;
11616
11617       if (dependent_type_p (TREE_TYPE (type)))
11618         return true;
11619       for (arg_type = TYPE_ARG_TYPES (type); 
11620            arg_type; 
11621            arg_type = TREE_CHAIN (arg_type))
11622         if (dependent_type_p (TREE_VALUE (arg_type)))
11623           return true;
11624       return false;
11625     }
11626   /* -- an array type constructed from any dependent type or whose
11627         size is specified by a constant expression that is
11628         value-dependent.  */
11629   if (TREE_CODE (type) == ARRAY_TYPE)
11630     {
11631       if (TYPE_DOMAIN (type)
11632           && ((value_dependent_expression_p 
11633                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11634               || (type_dependent_expression_p
11635                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11636         return true;
11637       return dependent_type_p (TREE_TYPE (type));
11638     }
11639   
11640   /* -- a template-id in which either the template name is a template
11641      parameter ...  */
11642   if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11643     return true;
11644   /* ... or any of the template arguments is a dependent type or
11645         an expression that is type-dependent or value-dependent.  */
11646   else if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
11647            && (any_dependent_template_arguments_p 
11648                (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type)))))
11649     return true;
11650   
11651   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11652      expression is not type-dependent, then it should already been
11653      have resolved.  */
11654   if (TREE_CODE (type) == TYPEOF_TYPE)
11655     return true;
11656   
11657   /* The standard does not specifically mention types that are local
11658      to template functions or local classes, but they should be
11659      considered dependent too.  For example:
11660
11661        template <int I> void f() { 
11662          enum E { a = I }; 
11663          S<sizeof (E)> s;
11664        }
11665
11666      The size of `E' cannot be known until the value of `I' has been
11667      determined.  Therefore, `E' must be considered dependent.  */
11668   scope = TYPE_CONTEXT (type);
11669   if (scope && TYPE_P (scope))
11670     return dependent_type_p (scope);
11671   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
11672     return type_dependent_expression_p (scope);
11673
11674   /* Other types are non-dependent.  */
11675   return false;
11676 }
11677
11678 /* Returns TRUE if TYPE is dependent, in the sense of
11679    [temp.dep.type].  */
11680
11681 bool
11682 dependent_type_p (tree type)
11683 {
11684   /* If there are no template parameters in scope, then there can't be
11685      any dependent types.  */
11686   if (!processing_template_decl)
11687     return false;
11688
11689   /* If the type is NULL, we have not computed a type for the entity
11690      in question; in that case, the type is dependent.  */
11691   if (!type)
11692     return true;
11693
11694   /* Erroneous types can be considered non-dependent.  */
11695   if (type == error_mark_node)
11696     return false;
11697
11698   /* If we have not already computed the appropriate value for TYPE,
11699      do so now.  */
11700   if (!TYPE_DEPENDENT_P_VALID (type))
11701     {
11702       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
11703       TYPE_DEPENDENT_P_VALID (type) = 1;
11704     }
11705
11706   return TYPE_DEPENDENT_P (type);
11707 }
11708
11709 /* Returns TRUE if EXPRESSION is dependent, according to CRITERION.  */
11710
11711 static bool
11712 dependent_scope_ref_p (tree expression, bool criterion (tree))
11713 {
11714   tree scope;
11715   tree name;
11716
11717   gcc_assert (TREE_CODE (expression) == SCOPE_REF);
11718
11719   if (!TYPE_P (TREE_OPERAND (expression, 0)))
11720     return true;
11721
11722   scope = TREE_OPERAND (expression, 0);
11723   name = TREE_OPERAND (expression, 1);
11724
11725   /* [temp.dep.expr]
11726
11727      An id-expression is type-dependent if it contains a
11728      nested-name-specifier that contains a class-name that names a
11729      dependent type.  */
11730   /* The suggested resolution to Core Issue 2 implies that if the
11731      qualifying type is the current class, then we must peek
11732      inside it.  */
11733   if (DECL_P (name) 
11734       && currently_open_class (scope)
11735       && !criterion (name))
11736     return false;
11737   if (dependent_type_p (scope))
11738     return true;
11739
11740   return false;
11741 }
11742
11743 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
11744    [temp.dep.constexpr] */
11745
11746 bool
11747 value_dependent_expression_p (tree expression)
11748 {
11749   if (!processing_template_decl)
11750     return false;
11751
11752   /* A name declared with a dependent type.  */
11753   if (TREE_CODE (expression) == IDENTIFIER_NODE
11754       || (DECL_P (expression) 
11755           && type_dependent_expression_p (expression)))
11756     return true;
11757   /* A non-type template parameter.  */
11758   if ((TREE_CODE (expression) == CONST_DECL
11759        && DECL_TEMPLATE_PARM_P (expression))
11760       || TREE_CODE (expression) == TEMPLATE_PARM_INDEX)
11761     return true;
11762   /* A constant with integral or enumeration type and is initialized 
11763      with an expression that is value-dependent.  */
11764   if (TREE_CODE (expression) == VAR_DECL
11765       && DECL_INITIAL (expression)
11766       && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
11767       && value_dependent_expression_p (DECL_INITIAL (expression)))
11768     return true;
11769   /* These expressions are value-dependent if the type to which the
11770      cast occurs is dependent or the expression being casted is
11771      value-dependent.  */
11772   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11773       || TREE_CODE (expression) == STATIC_CAST_EXPR
11774       || TREE_CODE (expression) == CONST_CAST_EXPR
11775       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11776       || TREE_CODE (expression) == CAST_EXPR)
11777     {
11778       tree type = TREE_TYPE (expression);
11779       if (dependent_type_p (type))
11780         return true;
11781       /* A functional cast has a list of operands.  */
11782       expression = TREE_OPERAND (expression, 0);
11783       if (!expression)
11784         {
11785           /* If there are no operands, it must be an expression such
11786              as "int()". This should not happen for aggregate types
11787              because it would form non-constant expressions.  */
11788           gcc_assert (INTEGRAL_OR_ENUMERATION_TYPE_P (type));
11789
11790           return false;
11791         }
11792       if (TREE_CODE (expression) == TREE_LIST)
11793         {
11794           do
11795             {
11796               if (value_dependent_expression_p (TREE_VALUE (expression)))
11797                 return true;
11798               expression = TREE_CHAIN (expression);
11799             }
11800           while (expression);
11801           return false;
11802         }
11803       else
11804         return value_dependent_expression_p (expression);
11805     }
11806   /* A `sizeof' expression is value-dependent if the operand is
11807      type-dependent.  */
11808   if (TREE_CODE (expression) == SIZEOF_EXPR
11809       || TREE_CODE (expression) == ALIGNOF_EXPR)
11810     {
11811       expression = TREE_OPERAND (expression, 0);
11812       if (TYPE_P (expression))
11813         return dependent_type_p (expression);
11814       return type_dependent_expression_p (expression);
11815     }
11816   if (TREE_CODE (expression) == SCOPE_REF)
11817     return dependent_scope_ref_p (expression, value_dependent_expression_p);
11818   if (TREE_CODE (expression) == COMPONENT_REF)
11819     return (value_dependent_expression_p (TREE_OPERAND (expression, 0))
11820             || value_dependent_expression_p (TREE_OPERAND (expression, 1)));
11821   /* A constant expression is value-dependent if any subexpression is
11822      value-dependent.  */
11823   if (EXPR_P (expression))
11824     {
11825       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
11826         {
11827         case tcc_unary:
11828           return (value_dependent_expression_p 
11829                   (TREE_OPERAND (expression, 0)));
11830         case tcc_comparison:
11831         case tcc_binary:
11832           return ((value_dependent_expression_p 
11833                    (TREE_OPERAND (expression, 0)))
11834                   || (value_dependent_expression_p 
11835                       (TREE_OPERAND (expression, 1))));
11836         case tcc_expression:
11837           {
11838             int i;
11839             for (i = 0; i < first_rtl_op (TREE_CODE (expression)); ++i)
11840               /* In some cases, some of the operands may be missing.
11841                  (For example, in the case of PREDECREMENT_EXPR, the
11842                  amount to increment by may be missing.)  That doesn't
11843                  make the expression dependent.  */
11844               if (TREE_OPERAND (expression, i)
11845                   && (value_dependent_expression_p
11846                       (TREE_OPERAND (expression, i))))
11847                 return true;
11848             return false;
11849           }
11850         case tcc_reference:
11851         case tcc_statement:
11852           /* These cannot be value dependent.  */
11853           return false;
11854
11855         default:
11856           gcc_unreachable ();
11857         }
11858     }
11859
11860   /* The expression is not value-dependent.  */
11861   return false;
11862 }
11863
11864 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
11865    [temp.dep.expr].  */
11866
11867 bool
11868 type_dependent_expression_p (tree expression)
11869 {
11870   if (!processing_template_decl)
11871     return false;
11872
11873   if (expression == error_mark_node)
11874     return false;
11875
11876   /* An unresolved name is always dependent.  */
11877   if (TREE_CODE (expression) == IDENTIFIER_NODE)
11878     return true;
11879   
11880   /* Some expression forms are never type-dependent.  */
11881   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
11882       || TREE_CODE (expression) == SIZEOF_EXPR
11883       || TREE_CODE (expression) == ALIGNOF_EXPR
11884       || TREE_CODE (expression) == TYPEID_EXPR
11885       || TREE_CODE (expression) == DELETE_EXPR
11886       || TREE_CODE (expression) == VEC_DELETE_EXPR
11887       || TREE_CODE (expression) == THROW_EXPR)
11888     return false;
11889
11890   /* The types of these expressions depends only on the type to which
11891      the cast occurs.  */
11892   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11893       || TREE_CODE (expression) == STATIC_CAST_EXPR
11894       || TREE_CODE (expression) == CONST_CAST_EXPR
11895       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11896       || TREE_CODE (expression) == CAST_EXPR)
11897     return dependent_type_p (TREE_TYPE (expression));
11898
11899   /* The types of these expressions depends only on the type created
11900      by the expression.  */
11901   if (TREE_CODE (expression) == NEW_EXPR
11902       || TREE_CODE (expression) == VEC_NEW_EXPR)
11903     {
11904       /* For NEW_EXPR tree nodes created inside a template, either
11905          the object type itself or a TREE_LIST may appear as the
11906          operand 1.  */
11907       tree type = TREE_OPERAND (expression, 1);
11908       if (TREE_CODE (type) == TREE_LIST)
11909         /* This is an array type.  We need to check array dimensions
11910            as well.  */
11911         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
11912                || value_dependent_expression_p
11913                     (TREE_OPERAND (TREE_VALUE (type), 1));
11914       else
11915         return dependent_type_p (type);
11916     }
11917
11918   if (TREE_CODE (expression) == SCOPE_REF
11919       && dependent_scope_ref_p (expression,
11920                                 type_dependent_expression_p))
11921     return true;
11922
11923   if (TREE_CODE (expression) == FUNCTION_DECL
11924       && DECL_LANG_SPECIFIC (expression)
11925       && DECL_TEMPLATE_INFO (expression)
11926       && (any_dependent_template_arguments_p
11927           (INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
11928     return true;
11929
11930   if (TREE_CODE (expression) == TEMPLATE_DECL
11931       && !DECL_TEMPLATE_TEMPLATE_PARM_P (expression))
11932     return false;
11933
11934   if (TREE_TYPE (expression) == unknown_type_node)
11935     {
11936       if (TREE_CODE (expression) == ADDR_EXPR)
11937         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
11938       if (TREE_CODE (expression) == COMPONENT_REF
11939           || TREE_CODE (expression) == OFFSET_REF)
11940         {
11941           if (type_dependent_expression_p (TREE_OPERAND (expression, 0)))
11942             return true;
11943           expression = TREE_OPERAND (expression, 1);
11944           if (TREE_CODE (expression) == IDENTIFIER_NODE)
11945             return false;
11946         }
11947       /* SCOPE_REF with non-null TREE_TYPE is always non-dependent.  */
11948       if (TREE_CODE (expression) == SCOPE_REF)
11949         return false;
11950       
11951       if (TREE_CODE (expression) == BASELINK)
11952         expression = BASELINK_FUNCTIONS (expression);
11953       
11954       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
11955         {
11956           if (any_dependent_template_arguments_p
11957               (TREE_OPERAND (expression, 1)))
11958             return true;
11959           expression = TREE_OPERAND (expression, 0);
11960         }
11961       gcc_assert (TREE_CODE (expression) == OVERLOAD);
11962       
11963       while (expression)
11964         {
11965           if (type_dependent_expression_p (OVL_CURRENT (expression)))
11966             return true;
11967           expression = OVL_NEXT (expression);
11968         }
11969       return false;
11970     }
11971   
11972   return (dependent_type_p (TREE_TYPE (expression)));
11973 }
11974
11975 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
11976    contains a type-dependent expression.  */
11977
11978 bool
11979 any_type_dependent_arguments_p (tree args)
11980 {
11981   while (args)
11982     {
11983       tree arg = TREE_VALUE (args);
11984
11985       if (type_dependent_expression_p (arg))
11986         return true;
11987       args = TREE_CHAIN (args);
11988     }
11989   return false;
11990 }
11991
11992 /* Returns TRUE if the ARG (a template argument) is dependent.  */
11993
11994 static bool
11995 dependent_template_arg_p (tree arg)
11996 {
11997   if (!processing_template_decl)
11998     return false;
11999
12000   if (TREE_CODE (arg) == TEMPLATE_DECL
12001       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
12002     return dependent_template_p (arg);
12003   else if (TYPE_P (arg))
12004     return dependent_type_p (arg);
12005   else
12006     return (type_dependent_expression_p (arg)
12007             || value_dependent_expression_p (arg));
12008 }
12009
12010 /* Returns true if ARGS (a collection of template arguments) contains
12011    any dependent arguments.  */
12012
12013 bool
12014 any_dependent_template_arguments_p (tree args)
12015 {
12016   int i;
12017   int j;
12018
12019   if (!args)
12020     return false;
12021
12022   for (i = 0; i < TMPL_ARGS_DEPTH (args); ++i)
12023     {
12024       tree level = TMPL_ARGS_LEVEL (args, i + 1);
12025       for (j = 0; j < TREE_VEC_LENGTH (level); ++j)
12026         if (dependent_template_arg_p (TREE_VEC_ELT (level, j)))
12027           return true;
12028     }
12029
12030   return false;
12031 }
12032
12033 /* Returns TRUE if the template TMPL is dependent.  */
12034
12035 bool
12036 dependent_template_p (tree tmpl)
12037 {
12038   if (TREE_CODE (tmpl) == OVERLOAD)
12039     {
12040       while (tmpl)
12041         {
12042           if (dependent_template_p (OVL_FUNCTION (tmpl)))
12043             return true;
12044           tmpl = OVL_CHAIN (tmpl);
12045         }
12046       return false;
12047     }
12048
12049   /* Template template parameters are dependent.  */
12050   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
12051       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
12052     return true;
12053   /* So are names that have not been looked up.  */
12054   if (TREE_CODE (tmpl) == SCOPE_REF
12055       || TREE_CODE (tmpl) == IDENTIFIER_NODE)
12056     return true;
12057   /* So are member templates of dependent classes.  */
12058   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
12059     return dependent_type_p (DECL_CONTEXT (tmpl));
12060   return false;
12061 }
12062
12063 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
12064
12065 bool
12066 dependent_template_id_p (tree tmpl, tree args)
12067 {
12068   return (dependent_template_p (tmpl)
12069           || any_dependent_template_arguments_p (args));
12070 }
12071
12072 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
12073    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
12074    can be found.  Note that this function peers inside uninstantiated
12075    templates and therefore should be used only in extremely limited
12076    situations.  */
12077
12078 tree
12079 resolve_typename_type (tree type, bool only_current_p)
12080 {
12081   tree scope;
12082   tree name;
12083   tree decl;
12084   int quals;
12085   bool pop_p;
12086
12087   gcc_assert (TREE_CODE (type) == TYPENAME_TYPE);
12088
12089   scope = TYPE_CONTEXT (type);
12090   name = TYPE_IDENTIFIER (type);
12091
12092   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
12093      it first before we can figure out what NAME refers to.  */
12094   if (TREE_CODE (scope) == TYPENAME_TYPE)
12095     scope = resolve_typename_type (scope, only_current_p);
12096   /* If we don't know what SCOPE refers to, then we cannot resolve the
12097      TYPENAME_TYPE.  */
12098   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
12099     return error_mark_node;
12100   /* If the SCOPE is a template type parameter, we have no way of
12101      resolving the name.  */
12102   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
12103     return type;
12104   /* If the SCOPE is not the current instantiation, there's no reason
12105      to look inside it.  */
12106   if (only_current_p && !currently_open_class (scope))
12107     return error_mark_node;
12108   /* If SCOPE is a partial instantiation, it will not have a valid
12109      TYPE_FIELDS list, so use the original template.  */
12110   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
12111   /* Enter the SCOPE so that name lookup will be resolved as if we
12112      were in the class definition.  In particular, SCOPE will no
12113      longer be considered a dependent type.  */
12114   pop_p = push_scope (scope);
12115   /* Look up the declaration.  */
12116   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
12117   /* Obtain the set of qualifiers applied to the TYPE.  */
12118   quals = cp_type_quals (type);
12119   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
12120      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
12121   if (!decl)
12122     type = error_mark_node;
12123   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
12124            && TREE_CODE (decl) == TYPE_DECL)
12125     type = TREE_TYPE (decl);
12126   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
12127            && DECL_CLASS_TEMPLATE_P (decl))
12128     {
12129       tree tmpl;
12130       tree args;
12131       /* Obtain the template and the arguments.  */
12132       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
12133       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
12134       /* Instantiate the template.  */
12135       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
12136                                     /*entering_scope=*/0, tf_error | tf_user);
12137     }
12138   else
12139     type = error_mark_node;
12140   /* Qualify the resulting type.  */
12141   if (type != error_mark_node && quals)
12142     type = cp_build_qualified_type (type, quals);
12143   /* Leave the SCOPE.  */
12144   if (pop_p)
12145     pop_scope (scope);
12146
12147   return type;
12148 }
12149
12150 /* EXPR is an expression which is not type-dependent.  Return a proxy
12151    for EXPR that can be used to compute the types of larger
12152    expressions containing EXPR.  */
12153
12154 tree
12155 build_non_dependent_expr (tree expr)
12156 {
12157   tree inner_expr;
12158
12159   /* Preserve null pointer constants so that the type of things like 
12160      "p == 0" where "p" is a pointer can be determined.  */
12161   if (null_ptr_cst_p (expr))
12162     return expr;
12163   /* Preserve OVERLOADs; the functions must be available to resolve
12164      types.  */
12165   inner_expr = (TREE_CODE (expr) == ADDR_EXPR ? 
12166                 TREE_OPERAND (expr, 0) : expr);
12167   if (TREE_CODE (inner_expr) == OVERLOAD 
12168       || TREE_CODE (inner_expr) == FUNCTION_DECL
12169       || TREE_CODE (inner_expr) == TEMPLATE_DECL
12170       || TREE_CODE (inner_expr) == TEMPLATE_ID_EXPR)
12171     return expr;
12172   /* Preserve string constants; conversions from string constants to
12173      "char *" are allowed, even though normally a "const char *"
12174      cannot be used to initialize a "char *".  */
12175   if (TREE_CODE (expr) == STRING_CST)
12176     return expr;
12177   /* Preserve arithmetic constants, as an optimization -- there is no
12178      reason to create a new node.  */
12179   if (TREE_CODE (expr) == INTEGER_CST || TREE_CODE (expr) == REAL_CST)
12180     return expr;
12181   /* Preserve THROW_EXPRs -- all throw-expressions have type "void".
12182      There is at least one place where we want to know that a
12183      particular expression is a throw-expression: when checking a ?:
12184      expression, there are special rules if the second or third
12185      argument is a throw-expression.  */
12186   if (TREE_CODE (expr) == THROW_EXPR)
12187     return expr;
12188
12189   if (TREE_CODE (expr) == COND_EXPR)
12190     return build3 (COND_EXPR,
12191                    TREE_TYPE (expr),
12192                    TREE_OPERAND (expr, 0),
12193                    (TREE_OPERAND (expr, 1) 
12194                     ? build_non_dependent_expr (TREE_OPERAND (expr, 1))
12195                     : build_non_dependent_expr (TREE_OPERAND (expr, 0))),
12196                    build_non_dependent_expr (TREE_OPERAND (expr, 2)));
12197   if (TREE_CODE (expr) == COMPOUND_EXPR
12198       && !COMPOUND_EXPR_OVERLOADED (expr))
12199     return build2 (COMPOUND_EXPR,
12200                    TREE_TYPE (expr),
12201                    TREE_OPERAND (expr, 0),
12202                    build_non_dependent_expr (TREE_OPERAND (expr, 1)));
12203       
12204   /* Otherwise, build a NON_DEPENDENT_EXPR.  
12205
12206      REFERENCE_TYPEs are not stripped for expressions in templates
12207      because doing so would play havoc with mangling.  Consider, for
12208      example:
12209
12210        template <typename T> void f<T& g>() { g(); } 
12211
12212      In the body of "f", the expression for "g" will have
12213      REFERENCE_TYPE, even though the standard says that it should
12214      not.  The reason is that we must preserve the syntactic form of
12215      the expression so that mangling (say) "f<g>" inside the body of
12216      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
12217      stripped here.  */
12218   return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
12219 }
12220
12221 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
12222    Return a new TREE_LIST with the various arguments replaced with
12223    equivalent non-dependent expressions.  */
12224
12225 tree
12226 build_non_dependent_args (tree args)
12227 {
12228   tree a;
12229   tree new_args;
12230
12231   new_args = NULL_TREE;
12232   for (a = args; a; a = TREE_CHAIN (a))
12233     new_args = tree_cons (NULL_TREE, 
12234                           build_non_dependent_expr (TREE_VALUE (a)),
12235                           new_args);
12236   return nreverse (new_args);
12237 }
12238
12239 #include "gt-cp-pt.h"