OSDN Git Service

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