OSDN Git Service

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