OSDN Git Service

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