OSDN Git Service

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