OSDN Git Service

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