OSDN Git Service

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