OSDN Git Service

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