OSDN Git Service

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