OSDN Git Service

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