OSDN Git Service

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