OSDN Git Service

1f7822ca72b1dcea9ee7aae9202bcefb22da0ea6
[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         else if (DECL_SELF_REFERENCE_P (t))
6204           SET_DECL_SELF_REFERENCE_P (r);
6205         TREE_TYPE (r) = type;
6206         c_apply_type_quals_to_decl (cp_type_quals (type), r);
6207         DECL_CONTEXT (r) = ctx;
6208         /* Clear out the mangled name and RTL for the instantiation.  */
6209         SET_DECL_ASSEMBLER_NAME (r, NULL_TREE);
6210         SET_DECL_RTL (r, NULL_RTX);
6211
6212         /* Don't try to expand the initializer until someone tries to use
6213            this variable; otherwise we run into circular dependencies.  */
6214         DECL_INITIAL (r) = NULL_TREE;
6215         SET_DECL_RTL (r, NULL_RTX);
6216         DECL_SIZE (r) = DECL_SIZE_UNIT (r) = 0;
6217
6218         /* Even if the original location is out of scope, the newly
6219            substituted one is not.  */
6220         if (TREE_CODE (r) == VAR_DECL)
6221           {
6222             DECL_DEAD_FOR_LOCAL (r) = 0;
6223             DECL_INITIALIZED_P (r) = 0;
6224           }
6225
6226         if (!local_p)
6227           {
6228             /* A static data member declaration is always marked
6229                external when it is declared in-class, even if an
6230                initializer is present.  We mimic the non-template
6231                processing here.  */
6232             DECL_EXTERNAL (r) = 1;
6233
6234             register_specialization (r, gen_tmpl, argvec);
6235             DECL_TEMPLATE_INFO (r) = tree_cons (tmpl, argvec, NULL_TREE);
6236             SET_DECL_IMPLICIT_INSTANTIATION (r);
6237           }
6238         else
6239           register_local_specialization (r, t);
6240
6241         TREE_CHAIN (r) = NULL_TREE;
6242         if (TREE_CODE (r) == VAR_DECL && VOID_TYPE_P (type))
6243           cp_error_at ("instantiation of `%D' as type `%T'", r, type);
6244         /* Compute the size, alignment, etc. of R.  */
6245         layout_decl (r, 0);
6246       }
6247       break;
6248
6249     default:
6250       abort ();
6251     } 
6252
6253   /* Restore the file and line information.  */
6254   input_location = saved_loc;
6255
6256   return r;
6257 }
6258
6259 /* Substitute into the ARG_TYPES of a function type.  */
6260
6261 static tree
6262 tsubst_arg_types (tree arg_types, 
6263                   tree args, 
6264                   tsubst_flags_t complain, 
6265                   tree in_decl)
6266 {
6267   tree remaining_arg_types;
6268   tree type;
6269
6270   if (!arg_types || arg_types == void_list_node)
6271     return arg_types;
6272   
6273   remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
6274                                           args, complain, in_decl);
6275   if (remaining_arg_types == error_mark_node)
6276     return error_mark_node;
6277
6278   type = tsubst (TREE_VALUE (arg_types), args, complain, in_decl);
6279   if (type == error_mark_node)
6280     return error_mark_node;
6281   if (VOID_TYPE_P (type))
6282     {
6283       if (complain & tf_error)
6284         {
6285           error ("invalid parameter type `%T'", type);
6286           if (in_decl)
6287             cp_error_at ("in declaration `%D'", in_decl);
6288         }
6289       return error_mark_node;
6290     }
6291
6292   /* Do array-to-pointer, function-to-pointer conversion, and ignore
6293      top-level qualifiers as required.  */
6294   type = TYPE_MAIN_VARIANT (type_decays_to (type));
6295
6296   /* Note that we do not substitute into default arguments here.  The
6297      standard mandates that they be instantiated only when needed,
6298      which is done in build_over_call.  */
6299   return hash_tree_cons (TREE_PURPOSE (arg_types), type,
6300                          remaining_arg_types);
6301                          
6302 }
6303
6304 /* Substitute into a FUNCTION_TYPE or METHOD_TYPE.  This routine does
6305    *not* handle the exception-specification for FNTYPE, because the
6306    initial substitution of explicitly provided template parameters
6307    during argument deduction forbids substitution into the
6308    exception-specification:
6309
6310      [temp.deduct]
6311
6312      All references in the function type of the function template to  the
6313      corresponding template parameters are replaced by the specified tem-
6314      plate argument values.  If a substitution in a template parameter or
6315      in  the function type of the function template results in an invalid
6316      type, type deduction fails.  [Note: The equivalent  substitution  in
6317      exception specifications is done only when the function is instanti-
6318      ated, at which point a program is  ill-formed  if  the  substitution
6319      results in an invalid type.]  */
6320
6321 static tree
6322 tsubst_function_type (tree t, 
6323                       tree args, 
6324                       tsubst_flags_t complain, 
6325                       tree in_decl)
6326 {
6327   tree return_type;
6328   tree arg_types;
6329   tree fntype;
6330
6331   /* The TYPE_CONTEXT is not used for function/method types.  */
6332   my_friendly_assert (TYPE_CONTEXT (t) == NULL_TREE, 0);
6333
6334   /* Substitute the return type.  */
6335   return_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
6336   if (return_type == error_mark_node)
6337     return error_mark_node;
6338
6339   /* Substitute the argument types.  */
6340   arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
6341                                 complain, in_decl); 
6342   if (arg_types == error_mark_node)
6343     return error_mark_node;
6344   
6345   /* Construct a new type node and return it.  */
6346   if (TREE_CODE (t) == FUNCTION_TYPE)
6347     fntype = build_function_type (return_type, arg_types);
6348   else
6349     {
6350       tree r = TREE_TYPE (TREE_VALUE (arg_types));
6351       if (! IS_AGGR_TYPE (r))
6352         {
6353           /* [temp.deduct]
6354              
6355              Type deduction may fail for any of the following
6356              reasons:
6357              
6358              -- Attempting to create "pointer to member of T" when T
6359              is not a class type.  */
6360           if (complain & tf_error)
6361             error ("creating pointer to member function of non-class type `%T'",
6362                       r);
6363           return error_mark_node;
6364         }
6365       
6366       fntype = build_cplus_method_type (r, return_type, TREE_CHAIN
6367                                         (arg_types));
6368     }
6369   fntype = cp_build_qualified_type_real (fntype, TYPE_QUALS (t), complain);
6370   fntype = build_type_attribute_variant (fntype, TYPE_ATTRIBUTES (t));
6371   
6372   return fntype;  
6373 }
6374
6375 /* Substitute into the PARMS of a call-declarator.  */
6376
6377 static tree
6378 tsubst_call_declarator_parms (tree parms, 
6379                               tree args, 
6380                               tsubst_flags_t complain, 
6381                               tree in_decl)
6382 {
6383   tree new_parms;
6384   tree type;
6385   tree defarg;
6386
6387   if (!parms || parms == void_list_node)
6388     return parms;
6389   
6390   new_parms = tsubst_call_declarator_parms (TREE_CHAIN (parms),
6391                                             args, complain, in_decl);
6392
6393   /* Figure out the type of this parameter.  */
6394   type = tsubst (TREE_VALUE (parms), args, complain, in_decl);
6395   
6396   /* Figure out the default argument as well.  Note that we use
6397      tsubst_expr since the default argument is really an expression.  */
6398   defarg = tsubst_expr (TREE_PURPOSE (parms), args, complain, in_decl);
6399
6400   /* Chain this parameter on to the front of those we have already
6401      processed.  We don't use hash_tree_cons because that function
6402      doesn't check TREE_PARMLIST.  */
6403   new_parms = tree_cons (defarg, type, new_parms);
6404
6405   /* And note that these are parameters.  */
6406   TREE_PARMLIST (new_parms) = 1;
6407   
6408   return new_parms;
6409 }
6410
6411 /* Take the tree structure T and replace template parameters used
6412    therein with the argument vector ARGS.  IN_DECL is an associated
6413    decl for diagnostics.  If an error occurs, returns ERROR_MARK_NODE.
6414    Issue error and warning messages under control of COMPLAIN.  Note
6415    that we must be relatively non-tolerant of extensions here, in
6416    order to preserve conformance; if we allow substitutions that
6417    should not be allowed, we may allow argument deductions that should
6418    not succeed, and therefore report ambiguous overload situations
6419    where there are none.  In theory, we could allow the substitution,
6420    but indicate that it should have failed, and allow our caller to
6421    make sure that the right thing happens, but we don't try to do this
6422    yet.
6423
6424    This function is used for dealing with types, decls and the like;
6425    for expressions, use tsubst_expr or tsubst_copy.  */
6426
6427 static tree
6428 tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
6429 {
6430   tree type, r;
6431
6432   if (t == NULL_TREE || t == error_mark_node
6433       || t == integer_type_node
6434       || t == void_type_node
6435       || t == char_type_node
6436       || TREE_CODE (t) == NAMESPACE_DECL)
6437     return t;
6438
6439   if (TREE_CODE (t) == IDENTIFIER_NODE)
6440     type = IDENTIFIER_TYPE_VALUE (t);
6441   else
6442     type = TREE_TYPE (t);
6443   if (type == unknown_type_node)
6444     abort ();
6445
6446   if (type && TREE_CODE (t) != FUNCTION_DECL
6447       && TREE_CODE (t) != TYPENAME_TYPE
6448       && TREE_CODE (t) != TEMPLATE_DECL
6449       && TREE_CODE (t) != IDENTIFIER_NODE
6450       && TREE_CODE (t) != FUNCTION_TYPE
6451       && TREE_CODE (t) != METHOD_TYPE)
6452     type = tsubst (type, args, complain, in_decl);
6453   if (type == error_mark_node)
6454     return error_mark_node;
6455
6456   if (DECL_P (t))
6457     return tsubst_decl (t, args, type, complain);
6458
6459   switch (TREE_CODE (t))
6460     {
6461     case RECORD_TYPE:
6462     case UNION_TYPE:
6463     case ENUMERAL_TYPE:
6464       return tsubst_aggr_type (t, args, complain, in_decl,
6465                                /*entering_scope=*/0);
6466
6467     case ERROR_MARK:
6468     case IDENTIFIER_NODE:
6469     case VOID_TYPE:
6470     case REAL_TYPE:
6471     case COMPLEX_TYPE:
6472     case VECTOR_TYPE:
6473     case BOOLEAN_TYPE:
6474     case INTEGER_CST:
6475     case REAL_CST:
6476     case STRING_CST:
6477       return t;
6478
6479     case INTEGER_TYPE:
6480       if (t == integer_type_node)
6481         return t;
6482
6483       if (TREE_CODE (TYPE_MIN_VALUE (t)) == INTEGER_CST
6484           && TREE_CODE (TYPE_MAX_VALUE (t)) == INTEGER_CST)
6485         return t;
6486
6487       {
6488         tree max, omax = TREE_OPERAND (TYPE_MAX_VALUE (t), 0);
6489
6490         max = tsubst_expr (omax, args, complain, in_decl);
6491         if (max == error_mark_node)
6492           return error_mark_node;
6493
6494         /* See if we can reduce this expression to something simpler.  */
6495         max = maybe_fold_nontype_arg (max);
6496         if (!processing_template_decl)
6497           max = decl_constant_value (max);
6498
6499         if (processing_template_decl 
6500             /* When providing explicit arguments to a template
6501                function, but leaving some arguments for subsequent
6502                deduction, MAX may be template-dependent even if we're
6503                not PROCESSING_TEMPLATE_DECL.  We still need to check for
6504                template parms, though; MAX won't be an INTEGER_CST for
6505                dynamic arrays, either.  */
6506             || (TREE_CODE (max) != INTEGER_CST
6507                 && uses_template_parms (max)))
6508           {
6509             tree itype = make_node (INTEGER_TYPE);
6510             TYPE_MIN_VALUE (itype) = size_zero_node;
6511             TYPE_MAX_VALUE (itype) = build_min (MINUS_EXPR, sizetype, max,
6512                                                 integer_one_node);
6513             return itype;
6514           }
6515
6516         if (integer_zerop (omax))
6517           {
6518             /* Still allow an explicit array of size zero.  */
6519             if (pedantic)
6520               pedwarn ("creating array with size zero");
6521           }
6522         else if (integer_zerop (max) 
6523                  || (TREE_CODE (max) == INTEGER_CST 
6524                      && INT_CST_LT (max, integer_zero_node)))
6525           {
6526             /* [temp.deduct]
6527
6528                Type deduction may fail for any of the following
6529                reasons:  
6530
6531                  Attempting to create an array with a size that is
6532                  zero or negative.  */
6533             if (complain & tf_error)
6534               error ("creating array with size zero (`%E')", max);
6535
6536             return error_mark_node;
6537           }
6538
6539         return compute_array_index_type (NULL_TREE, max);
6540       }
6541
6542     case TEMPLATE_TYPE_PARM:
6543     case TEMPLATE_TEMPLATE_PARM:
6544     case BOUND_TEMPLATE_TEMPLATE_PARM:
6545     case TEMPLATE_PARM_INDEX:
6546       {
6547         int idx;
6548         int level;
6549         int levels;
6550
6551         r = NULL_TREE;
6552
6553         if (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6554             || TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM
6555             || TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6556           {
6557             idx = TEMPLATE_TYPE_IDX (t);
6558             level = TEMPLATE_TYPE_LEVEL (t);
6559           }
6560         else
6561           {
6562             idx = TEMPLATE_PARM_IDX (t);
6563             level = TEMPLATE_PARM_LEVEL (t);
6564           }
6565
6566         if (TREE_VEC_LENGTH (args) > 0)
6567           {
6568             tree arg = NULL_TREE;
6569
6570             levels = TMPL_ARGS_DEPTH (args);
6571             if (level <= levels)
6572               arg = TMPL_ARG (args, level, idx);
6573
6574             if (arg == error_mark_node)
6575               return error_mark_node;
6576             else if (arg != NULL_TREE)
6577               {
6578                 if (TREE_CODE (t) == TEMPLATE_TYPE_PARM)
6579                   {
6580                     my_friendly_assert (TYPE_P (arg), 0);
6581                     return cp_build_qualified_type_real
6582                       (arg, cp_type_quals (arg) | cp_type_quals (t),
6583                        complain | tf_ignore_bad_quals);
6584                   }
6585                 else if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6586                   {
6587                     /* We are processing a type constructed from
6588                        a template template parameter */
6589                     tree argvec = tsubst (TYPE_TI_ARGS (t),
6590                                           args, complain, in_decl);
6591                     if (argvec == error_mark_node)
6592                       return error_mark_node;
6593                         
6594                     /* We can get a TEMPLATE_TEMPLATE_PARM here when 
6595                        we are resolving nested-types in the signature of 
6596                        a member function templates.
6597                        Otherwise ARG is a TEMPLATE_DECL and is the real 
6598                        template to be instantiated.  */
6599                     if (TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
6600                       arg = TYPE_NAME (arg);
6601
6602                     r = lookup_template_class (arg, 
6603                                                argvec, in_decl, 
6604                                                DECL_CONTEXT (arg),
6605                                                /*entering_scope=*/0,
6606                                                complain);
6607                     return cp_build_qualified_type_real
6608                       (r, TYPE_QUALS (t), complain);
6609                   }
6610                 else
6611                   /* TEMPLATE_TEMPLATE_PARM or TEMPLATE_PARM_INDEX.  */
6612                   return arg;
6613               }
6614           }
6615         else
6616           abort ();
6617
6618         if (level == 1)
6619           /* This can happen during the attempted tsubst'ing in
6620              unify.  This means that we don't yet have any information
6621              about the template parameter in question.  */
6622           return t;
6623
6624         /* If we get here, we must have been looking at a parm for a
6625            more deeply nested template.  Make a new version of this
6626            template parameter, but with a lower level.  */
6627         switch (TREE_CODE (t))
6628           {
6629           case TEMPLATE_TYPE_PARM:
6630           case TEMPLATE_TEMPLATE_PARM:
6631           case BOUND_TEMPLATE_TEMPLATE_PARM:
6632             if (cp_type_quals (t))
6633               {
6634                 r = tsubst (TYPE_MAIN_VARIANT (t), args, complain, in_decl);
6635                 r = cp_build_qualified_type_real
6636                   (r, cp_type_quals (t),
6637                    complain | (TREE_CODE (t) == TEMPLATE_TYPE_PARM
6638                                ? tf_ignore_bad_quals : 0));
6639               }
6640             else
6641               {
6642                 r = copy_type (t);
6643                 TEMPLATE_TYPE_PARM_INDEX (r)
6644                   = reduce_template_parm_level (TEMPLATE_TYPE_PARM_INDEX (t),
6645                                                 r, levels);
6646                 TYPE_STUB_DECL (r) = TYPE_NAME (r) = TEMPLATE_TYPE_DECL (r);
6647                 TYPE_MAIN_VARIANT (r) = r;
6648                 TYPE_POINTER_TO (r) = NULL_TREE;
6649                 TYPE_REFERENCE_TO (r) = NULL_TREE;
6650
6651                 if (TREE_CODE (t) == BOUND_TEMPLATE_TEMPLATE_PARM)
6652                   {
6653                     tree argvec = tsubst (TYPE_TI_ARGS (t), args,
6654                                           complain, in_decl); 
6655                     if (argvec == error_mark_node)
6656                       return error_mark_node;
6657
6658                     TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (r)
6659                       = tree_cons (TYPE_TI_TEMPLATE (t), argvec, NULL_TREE);
6660                   }
6661               }
6662             break;
6663
6664           case TEMPLATE_PARM_INDEX:
6665             r = reduce_template_parm_level (t, type, levels);
6666             break;
6667            
6668           default:
6669             abort ();
6670           }
6671
6672         return r;
6673       }
6674
6675     case TREE_LIST:
6676       {
6677         tree purpose, value, chain, result;
6678
6679         if (t == void_list_node)
6680           return t;
6681
6682         purpose = TREE_PURPOSE (t);
6683         if (purpose)
6684           {
6685             purpose = tsubst (purpose, args, complain, in_decl);
6686             if (purpose == error_mark_node)
6687               return error_mark_node;
6688           }
6689         value = TREE_VALUE (t);
6690         if (value)
6691           {
6692             value = tsubst (value, args, complain, in_decl);
6693             if (value == error_mark_node)
6694               return error_mark_node;
6695           }
6696         chain = TREE_CHAIN (t);
6697         if (chain && chain != void_type_node)
6698           {
6699             chain = tsubst (chain, args, complain, in_decl);
6700             if (chain == error_mark_node)
6701               return error_mark_node;
6702           }
6703         if (purpose == TREE_PURPOSE (t)
6704             && value == TREE_VALUE (t)
6705             && chain == TREE_CHAIN (t))
6706           return t;
6707         if (TREE_PARMLIST (t))
6708           {
6709             result = tree_cons (purpose, value, chain);
6710             TREE_PARMLIST (result) = 1;
6711           }
6712         else
6713           result = hash_tree_cons (purpose, value, chain);
6714         return result;
6715       }
6716     case TREE_VEC:
6717       if (type != NULL_TREE)
6718         {
6719           /* A binfo node.  We always need to make a copy, of the node
6720              itself and of its BINFO_BASETYPES.  */
6721
6722           t = copy_node (t);
6723
6724           /* Make sure type isn't a typedef copy.  */
6725           type = BINFO_TYPE (TYPE_BINFO (type));
6726
6727           TREE_TYPE (t) = complete_type (type);
6728           if (IS_AGGR_TYPE (type))
6729             {
6730               BINFO_VTABLE (t) = TYPE_BINFO_VTABLE (type);
6731               BINFO_VIRTUALS (t) = TYPE_BINFO_VIRTUALS (type);
6732               if (TYPE_BINFO_BASETYPES (type) != NULL_TREE)
6733                 BINFO_BASETYPES (t) = copy_node (TYPE_BINFO_BASETYPES (type));
6734             }
6735           return t;
6736         }
6737
6738       /* Otherwise, a vector of template arguments.  */
6739       return tsubst_template_arg_vector (t, args, complain);
6740
6741     case POINTER_TYPE:
6742     case REFERENCE_TYPE:
6743       {
6744         enum tree_code code;
6745
6746         if (type == TREE_TYPE (t) && TREE_CODE (type) != METHOD_TYPE)
6747           return t;
6748
6749         code = TREE_CODE (t);
6750
6751
6752         /* [temp.deduct]
6753            
6754            Type deduction may fail for any of the following
6755            reasons:  
6756
6757            -- Attempting to create a pointer to reference type.
6758            -- Attempting to create a reference to a reference type or
6759               a reference to void.  */
6760         if (TREE_CODE (type) == REFERENCE_TYPE
6761             || (code == REFERENCE_TYPE && TREE_CODE (type) == VOID_TYPE))
6762           {
6763             static location_t last_loc;
6764
6765             /* We keep track of the last time we issued this error
6766                message to avoid spewing a ton of messages during a
6767                single bad template instantiation.  */
6768             if (complain & tf_error
6769                 && (last_loc.line != input_line
6770                     || last_loc.file != input_filename))
6771               {
6772                 if (TREE_CODE (type) == VOID_TYPE)
6773                   error ("forming reference to void");
6774                 else
6775                   error ("forming %s to reference type `%T'",
6776                             (code == POINTER_TYPE) ? "pointer" : "reference",
6777                             type);
6778                 last_loc = input_location;
6779               }
6780
6781             return error_mark_node;
6782           }
6783         else if (code == POINTER_TYPE)
6784           {
6785             r = build_pointer_type (type);
6786             if (TREE_CODE (type) == METHOD_TYPE)
6787               r = build_ptrmemfunc_type (r);
6788           }
6789         else
6790           r = build_reference_type (type);
6791         r = cp_build_qualified_type_real (r, TYPE_QUALS (t), complain);
6792
6793         if (r != error_mark_node)
6794           /* Will this ever be needed for TYPE_..._TO values?  */
6795           layout_type (r);
6796         
6797         return r;
6798       }
6799     case OFFSET_TYPE:
6800       {
6801         r = tsubst (TYPE_OFFSET_BASETYPE (t), args, complain, in_decl);
6802         if (r == error_mark_node || !IS_AGGR_TYPE (r))
6803           {
6804             /* [temp.deduct]
6805
6806                Type deduction may fail for any of the following
6807                reasons:
6808                
6809                -- Attempting to create "pointer to member of T" when T
6810                   is not a class type.  */
6811             if (complain & tf_error)
6812               error ("creating pointer to member of non-class type `%T'", r);
6813             return error_mark_node;
6814           }
6815         if (TREE_CODE (type) == REFERENCE_TYPE)
6816           {
6817             if (complain & tf_error)
6818               error ("creating pointer to member reference type `%T'", type);
6819             
6820             return error_mark_node;
6821           }
6822         my_friendly_assert (TREE_CODE (type) != METHOD_TYPE, 20011231);
6823         if (TREE_CODE (type) == FUNCTION_TYPE)
6824           /* This is really a method type. The cv qualifiers of the
6825              this pointer should _not_ be determined by the cv
6826              qualifiers of the class type.  They should be held
6827              somewhere in the FUNCTION_TYPE, but we don't do that at
6828              the moment.  Consider
6829                 typedef void (Func) () const;
6830
6831                 template <typename T1> void Foo (Func T1::*);
6832
6833               */
6834           return build_cplus_method_type (TYPE_MAIN_VARIANT (r),
6835                                           TREE_TYPE (type),
6836                                           TYPE_ARG_TYPES (type));
6837         else
6838           return build_offset_type (r, type);
6839       }
6840     case FUNCTION_TYPE:
6841     case METHOD_TYPE:
6842       {
6843         tree fntype;
6844         tree raises;
6845
6846         fntype = tsubst_function_type (t, args, complain, in_decl);
6847         if (fntype == error_mark_node)
6848           return error_mark_node;
6849
6850         /* Substitute the exception specification.  */
6851         raises = TYPE_RAISES_EXCEPTIONS (t);
6852         if (raises)
6853           {
6854             tree   list = NULL_TREE;
6855             
6856             if (! TREE_VALUE (raises))
6857               list = raises;
6858             else
6859               for (; raises != NULL_TREE; raises = TREE_CHAIN (raises))
6860                 {
6861                   tree spec = TREE_VALUE (raises);
6862                   
6863                   spec = tsubst (spec, args, complain, in_decl);
6864                   if (spec == error_mark_node)
6865                     return spec;
6866                   list = add_exception_specifier (list, spec, complain);
6867                 }
6868             fntype = build_exception_variant (fntype, list);
6869           }
6870         return fntype;
6871       }
6872     case ARRAY_TYPE:
6873       {
6874         tree domain = tsubst (TYPE_DOMAIN (t), args, complain, in_decl);
6875         if (domain == error_mark_node)
6876           return error_mark_node;
6877
6878         /* As an optimization, we avoid regenerating the array type if
6879            it will obviously be the same as T.  */
6880         if (type == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
6881           return t;
6882
6883         /* These checks should match the ones in grokdeclarator.  
6884
6885            [temp.deduct] 
6886         
6887            The deduction may fail for any of the following reasons: 
6888
6889            -- Attempting to create an array with an element type that
6890               is void, a function type, or a reference type.  */
6891         if (TREE_CODE (type) == VOID_TYPE 
6892             || TREE_CODE (type) == FUNCTION_TYPE
6893             || TREE_CODE (type) == REFERENCE_TYPE)
6894           {
6895             if (complain & tf_error)
6896               error ("creating array of `%T'", type);
6897             return error_mark_node;
6898           }
6899
6900         r = build_cplus_array_type (type, domain);
6901         return r;
6902       }
6903
6904     case PLUS_EXPR:
6905     case MINUS_EXPR:
6906       {
6907         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6908         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
6909
6910         if (e1 == error_mark_node || e2 == error_mark_node)
6911           return error_mark_node;
6912
6913         return fold (build (TREE_CODE (t), TREE_TYPE (t), e1, e2));
6914       }
6915
6916     case NEGATE_EXPR:
6917     case NOP_EXPR:
6918       {
6919         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6920         if (e == error_mark_node)
6921           return error_mark_node;
6922
6923         return fold (build (TREE_CODE (t), TREE_TYPE (t), e));
6924       }
6925
6926     case TYPENAME_TYPE:
6927       {
6928         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6929                                      in_decl, /*entering_scope=*/1);
6930         tree f = tsubst_copy (TYPENAME_TYPE_FULLNAME (t), args,
6931                               complain, in_decl); 
6932
6933         if (ctx == error_mark_node || f == error_mark_node)
6934           return error_mark_node;
6935
6936         if (!IS_AGGR_TYPE (ctx))
6937           {
6938             if (complain & tf_error)
6939               error ("`%T' is not a class, struct, or union type",
6940                         ctx);
6941             return error_mark_node;
6942           }
6943         else if (!uses_template_parms (ctx) && !TYPE_BEING_DEFINED (ctx))
6944           {
6945             /* Normally, make_typename_type does not require that the CTX
6946                have complete type in order to allow things like:
6947              
6948                  template <class T> struct S { typename S<T>::X Y; };
6949
6950                But, such constructs have already been resolved by this
6951                point, so here CTX really should have complete type, unless
6952                it's a partial instantiation.  */
6953             ctx = complete_type (ctx);
6954             if (!COMPLETE_TYPE_P (ctx))
6955               {
6956                 if (complain & tf_error)
6957                   cxx_incomplete_type_error (NULL_TREE, ctx);
6958                 return error_mark_node;
6959               }
6960           }
6961
6962         f = make_typename_type (ctx, f,
6963                                 (complain & tf_error) | tf_keep_type_decl);
6964         if (f == error_mark_node)
6965           return f;
6966         if (TREE_CODE (f) == TYPE_DECL)
6967           {
6968             complain |= tf_ignore_bad_quals;
6969             f = TREE_TYPE (f);
6970           }
6971         
6972         return cp_build_qualified_type_real
6973           (f, cp_type_quals (f) | cp_type_quals (t), complain);
6974       }
6975                
6976     case UNBOUND_CLASS_TEMPLATE:
6977       {
6978         tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
6979                                      in_decl, /*entering_scope=*/1);
6980         tree name = TYPE_IDENTIFIER (t);
6981
6982         if (ctx == error_mark_node || name == error_mark_node)
6983           return error_mark_node;
6984
6985         return make_unbound_class_template (ctx, name, complain);
6986       }
6987
6988     case INDIRECT_REF:
6989       {
6990         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6991         if (e == error_mark_node)
6992           return error_mark_node;
6993         return make_pointer_declarator (type, e);
6994       }
6995
6996     case ADDR_EXPR:
6997       {
6998         tree e = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
6999         if (e == error_mark_node)
7000           return error_mark_node;
7001         return make_reference_declarator (type, e);
7002       }
7003
7004     case ARRAY_REF:
7005       {
7006         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7007         tree e2 = tsubst_expr (TREE_OPERAND (t, 1), args, complain, in_decl);
7008         if (e1 == error_mark_node || e2 == error_mark_node)
7009           return error_mark_node;
7010
7011         return build_nt (ARRAY_REF, e1, e2, tsubst_expr);
7012       }
7013
7014     case CALL_EXPR:
7015       {
7016         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7017         tree e2 = (tsubst_call_declarator_parms
7018                    (CALL_DECLARATOR_PARMS (t), args, complain, in_decl));
7019         tree e3 = tsubst (CALL_DECLARATOR_EXCEPTION_SPEC (t), args,
7020                           complain, in_decl);
7021
7022         if (e1 == error_mark_node || e2 == error_mark_node 
7023             || e3 == error_mark_node)
7024           return error_mark_node;
7025
7026         return make_call_declarator (e1, e2, CALL_DECLARATOR_QUALS (t), e3);
7027       }
7028
7029     case SCOPE_REF:
7030       {
7031         tree e1 = tsubst (TREE_OPERAND (t, 0), args, complain, in_decl);
7032         tree e2 = tsubst (TREE_OPERAND (t, 1), args, complain, in_decl);
7033         if (e1 == error_mark_node || e2 == error_mark_node)
7034           return error_mark_node;
7035
7036         return build_nt (TREE_CODE (t), e1, e2);
7037       }
7038
7039     case TYPEOF_TYPE:
7040       {
7041         tree e1 = tsubst_expr (TYPE_FIELDS (t), args, complain, in_decl);
7042         if (e1 == error_mark_node)
7043           return error_mark_node;
7044
7045         return cp_build_qualified_type_real (TREE_TYPE (e1),
7046                                              cp_type_quals (t)
7047                                              | cp_type_quals (TREE_TYPE (e1)),
7048                                              complain);
7049       }
7050
7051     default:
7052       sorry ("use of `%s' in template",
7053              tree_code_name [(int) TREE_CODE (t)]);
7054       return error_mark_node;
7055     }
7056 }
7057
7058 /* Like tsubst_expr for a BASELINK.  OBJECT_TYPE, if non-NULL, is the
7059    type of the expression on the left-hand side of the "." or "->"
7060    operator.  */
7061
7062 static tree
7063 tsubst_baselink (tree baselink, tree object_type,
7064                  tree args, tsubst_flags_t complain, tree in_decl)
7065 {
7066     tree name;
7067     tree qualifying_scope;
7068     tree fns;
7069     tree template_args = 0;
7070     bool template_id_p = false;
7071
7072     /* A baselink indicates a function from a base class.  The
7073        BASELINK_ACCESS_BINFO and BASELINK_BINFO are going to have
7074        non-dependent types; otherwise, the lookup could not have
7075        succeeded.  However, they may indicate bases of the template
7076        class, rather than the instantiated class.  
7077
7078        In addition, lookups that were not ambiguous before may be
7079        ambiguous now.  Therefore, we perform the lookup again. */
7080     qualifying_scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (baselink));
7081     fns = BASELINK_FUNCTIONS (baselink);
7082     if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
7083       {
7084         template_id_p = true;
7085         template_args = TREE_OPERAND (fns, 1);
7086         fns = TREE_OPERAND (fns, 0);
7087         template_args = tsubst_copy_and_build (template_args, args,
7088                                                complain, in_decl,
7089                                                /*function_p=*/false);
7090       }
7091     name = DECL_NAME (get_first_fn (fns));
7092     baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
7093     if (BASELINK_P (baselink) && template_id_p)
7094       BASELINK_FUNCTIONS (baselink) 
7095         = build_nt (TEMPLATE_ID_EXPR,
7096                     BASELINK_FUNCTIONS (baselink),
7097                     template_args);
7098     if (!object_type)
7099       object_type = current_class_type;
7100     return adjust_result_of_qualified_name_lookup (baselink, 
7101                                                    qualifying_scope,
7102                                                    object_type);
7103 }
7104
7105 /* Like tsubst_expr for a SCOPE_REF, given by QUALIFIED_ID.  DONE is
7106    true if the qualified-id will be a postfix-expression in-and-of
7107    itself; false if more of the postfix-expression follows the
7108    QUALIFIED_ID.  ADDRESS_P is true if the qualified-id is the operand
7109    of "&".  */
7110
7111 static tree
7112 tsubst_qualified_id (tree qualified_id, tree args, 
7113                      tsubst_flags_t complain, tree in_decl,
7114                      bool done, bool address_p)
7115 {
7116   tree expr;
7117   tree scope;
7118   tree name;
7119   bool is_template;
7120   tree template_args;
7121
7122   my_friendly_assert (TREE_CODE (qualified_id) == SCOPE_REF, 20030706);
7123
7124   /* Figure out what name to look up.  */
7125   name = TREE_OPERAND (qualified_id, 1);
7126   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
7127     {
7128       is_template = true;
7129       template_args = tsubst_copy_and_build (TREE_OPERAND (name, 1), 
7130                                              args, complain, in_decl,
7131                                              /*function_p=*/false);
7132       name = TREE_OPERAND (name, 0);
7133     }
7134   else
7135     {
7136       is_template = false;
7137       template_args = NULL_TREE;
7138     }
7139
7140   /* Substitute into the qualifying scope.  When there are no ARGS, we
7141      are just trying to simplify a non-dependent expression.  In that
7142      case the qualifying scope may be dependent, and, in any case,
7143      substituting will not help.  */
7144   scope = TREE_OPERAND (qualified_id, 0);
7145   if (args)
7146     {
7147       scope = tsubst (scope, args, complain, in_decl);
7148       expr = tsubst_copy (name, args, complain, in_decl);
7149     }
7150   else
7151     expr = name;
7152   if (!BASELINK_P (name) && !DECL_P (expr))
7153     expr = lookup_qualified_name (scope, expr, /*is_type_p=*/0,
7154                                   (complain & tf_error) != 0);
7155   if (DECL_P (expr))
7156     check_accessibility_of_qualified_id (expr, 
7157                                          /*object_type=*/NULL_TREE,
7158                                          scope);
7159   
7160   /* Remember that there was a reference to this entity.  */
7161   if (DECL_P (expr))
7162     {
7163       mark_used (expr);
7164       if (!args && TREE_CODE (expr) == VAR_DECL)
7165         expr = DECL_INITIAL (expr);
7166     }
7167
7168   if (is_template)
7169     lookup_template_function (expr, template_args);
7170
7171   if (TYPE_P (scope))
7172     {
7173       expr = (adjust_result_of_qualified_name_lookup 
7174               (expr, scope, current_class_type));
7175       expr = finish_qualified_id_expr (scope, expr, done, address_p);
7176     }
7177
7178   return expr;
7179 }
7180
7181 /* Like tsubst, but deals with expressions.  This function just replaces
7182    template parms; to finish processing the resultant expression, use
7183    tsubst_expr.  */
7184
7185 static tree
7186 tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7187 {
7188   enum tree_code code;
7189   tree r;
7190
7191   if (t == NULL_TREE || t == error_mark_node)
7192     return t;
7193
7194   code = TREE_CODE (t);
7195
7196   switch (code)
7197     {
7198     case PARM_DECL:
7199       r = retrieve_local_specialization (t);
7200       my_friendly_assert (r != NULL, 20020903);
7201       return r;
7202
7203     case CONST_DECL:
7204       {
7205         tree enum_type;
7206         tree v;
7207
7208         if (DECL_TEMPLATE_PARM_P (t))
7209           return tsubst_copy (DECL_INITIAL (t), args, complain, in_decl);
7210         if (!DECL_CONTEXT (t))
7211           /* This is a global enumeration constant.  */
7212           return t;
7213
7214         /* Unfortunately, we cannot just call lookup_name here.
7215            Consider:
7216            
7217              template <int I> int f() {
7218              enum E { a = I };
7219              struct S { void g() { E e = a; } };
7220              };
7221            
7222            When we instantiate f<7>::S::g(), say, lookup_name is not
7223            clever enough to find f<7>::a.  */
7224         enum_type 
7225           = tsubst_aggr_type (TREE_TYPE (t), args, complain, in_decl, 
7226                               /*entering_scope=*/0);
7227
7228         for (v = TYPE_VALUES (enum_type); 
7229              v != NULL_TREE; 
7230              v = TREE_CHAIN (v))
7231           if (TREE_PURPOSE (v) == DECL_NAME (t))
7232             return TREE_VALUE (v);
7233
7234           /* We didn't find the name.  That should never happen; if
7235              name-lookup found it during preliminary parsing, we
7236              should find it again here during instantiation.  */
7237         abort ();
7238       }
7239       return t;
7240
7241     case FIELD_DECL:
7242       if (DECL_CONTEXT (t))
7243         {
7244           tree ctx;
7245
7246           ctx = tsubst_aggr_type (DECL_CONTEXT (t), args, complain, in_decl,
7247                                   /*entering_scope=*/1);
7248           if (ctx != DECL_CONTEXT (t))
7249             return lookup_field (ctx, DECL_NAME (t), 0, false);
7250         }
7251       return t;
7252
7253     case VAR_DECL:
7254     case FUNCTION_DECL:
7255       if ((DECL_LANG_SPECIFIC (t) && DECL_TEMPLATE_INFO (t))
7256           || local_variable_p (t))
7257         t = tsubst (t, args, complain, in_decl);
7258       mark_used (t);
7259       return t;
7260
7261     case BASELINK:
7262       return tsubst_baselink (t, current_class_type, args, complain, in_decl);
7263
7264     case TEMPLATE_DECL:
7265       if (DECL_TEMPLATE_TEMPLATE_PARM_P (t))
7266         return tsubst (TREE_TYPE (DECL_TEMPLATE_RESULT (t)), 
7267                        args, complain, in_decl);
7268       else if (is_member_template (t))
7269         return tsubst (t, args, complain, in_decl);
7270       else if (DECL_CLASS_SCOPE_P (t)
7271                && uses_template_parms (DECL_CONTEXT (t)))
7272         {
7273           /* Template template argument like the following example need
7274              special treatment:
7275
7276                template <template <class> class TT> struct C {};
7277                template <class T> struct D {
7278                  template <class U> struct E {};
7279                  C<E> c;                                // #1
7280                };
7281                D<int> d;                                // #2
7282
7283              We are processing the template argument `E' in #1 for
7284              the template instantiation #2.  Originally, `E' is a
7285              TEMPLATE_DECL with `D<T>' as its DECL_CONTEXT.  Now we
7286              have to substitute this with one having context `D<int>'.  */
7287
7288           tree context = tsubst (DECL_CONTEXT (t), args, complain, in_decl);
7289           return lookup_field (context, DECL_NAME(t), 0, false);
7290         }
7291       else
7292         /* Ordinary template template argument.  */
7293         return t;
7294
7295     case LOOKUP_EXPR:
7296       {
7297         /* We must tsubst into a LOOKUP_EXPR in case the names to
7298            which it refers is a conversion operator; in that case the
7299            name will change.  We avoid making unnecessary copies,
7300            however.  */
7301         
7302         tree id = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7303
7304         if (id != TREE_OPERAND (t, 0))
7305           {
7306             r = build_nt (LOOKUP_EXPR, id);
7307             LOOKUP_EXPR_GLOBAL (r) = LOOKUP_EXPR_GLOBAL (t);
7308             t = r;
7309           }
7310
7311         return t;
7312       }
7313
7314     case CAST_EXPR:
7315     case REINTERPRET_CAST_EXPR:
7316     case CONST_CAST_EXPR:
7317     case STATIC_CAST_EXPR:
7318     case DYNAMIC_CAST_EXPR:
7319     case NOP_EXPR:
7320       return build1
7321         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7322          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7323
7324     case INDIRECT_REF:
7325     case NEGATE_EXPR:
7326     case TRUTH_NOT_EXPR:
7327     case BIT_NOT_EXPR:
7328     case ADDR_EXPR:
7329     case CONVERT_EXPR:      /* Unary + */
7330     case SIZEOF_EXPR:
7331     case ALIGNOF_EXPR:
7332     case ARROW_EXPR:
7333     case THROW_EXPR:
7334     case TYPEID_EXPR:
7335     case REALPART_EXPR:
7336     case IMAGPART_EXPR:
7337       return build1
7338         (code, tsubst (TREE_TYPE (t), args, complain, in_decl),
7339          tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl));
7340
7341     case COMPONENT_REF:
7342       {
7343         tree object;
7344         tree name;
7345
7346         object = tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl);
7347         name = TREE_OPERAND (t, 1);
7348         if (TREE_CODE (name) == BIT_NOT_EXPR) 
7349           {
7350             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7351                                 complain, in_decl);
7352             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7353           }
7354         else if (TREE_CODE (name) == SCOPE_REF
7355                  && TREE_CODE (TREE_OPERAND (name, 1)) == BIT_NOT_EXPR)
7356           {
7357             tree base = tsubst_copy (TREE_OPERAND (name, 0), args,
7358                                      complain, in_decl);
7359             name = TREE_OPERAND (name, 1);
7360             name = tsubst_copy (TREE_OPERAND (name, 0), args,
7361                                 complain, in_decl);
7362             name = build1 (BIT_NOT_EXPR, NULL_TREE, name);
7363             name = build_nt (SCOPE_REF, base, name);
7364           }
7365         else if (TREE_CODE (name) == BASELINK)
7366           name = tsubst_baselink (name, 
7367                                   non_reference (TREE_TYPE (object)), 
7368                                   args, complain, 
7369                                   in_decl);
7370         else
7371           name = tsubst_copy (name, args, complain, in_decl);
7372         return build_nt (COMPONENT_REF, object, name);
7373       }
7374
7375     case PLUS_EXPR:
7376     case MINUS_EXPR:
7377     case MULT_EXPR:
7378     case TRUNC_DIV_EXPR:
7379     case CEIL_DIV_EXPR:
7380     case FLOOR_DIV_EXPR:
7381     case ROUND_DIV_EXPR:
7382     case EXACT_DIV_EXPR:
7383     case BIT_AND_EXPR:
7384     case BIT_ANDTC_EXPR:
7385     case BIT_IOR_EXPR:
7386     case BIT_XOR_EXPR:
7387     case TRUNC_MOD_EXPR:
7388     case FLOOR_MOD_EXPR:
7389     case TRUTH_ANDIF_EXPR:
7390     case TRUTH_ORIF_EXPR:
7391     case TRUTH_AND_EXPR:
7392     case TRUTH_OR_EXPR:
7393     case RSHIFT_EXPR:
7394     case LSHIFT_EXPR:
7395     case RROTATE_EXPR:
7396     case LROTATE_EXPR:
7397     case EQ_EXPR:
7398     case NE_EXPR:
7399     case MAX_EXPR:
7400     case MIN_EXPR:
7401     case LE_EXPR:
7402     case GE_EXPR:
7403     case LT_EXPR:
7404     case GT_EXPR:
7405     case ARRAY_REF:
7406     case COMPOUND_EXPR:
7407     case SCOPE_REF:
7408     case DOTSTAR_EXPR:
7409     case MEMBER_REF:
7410     case PREDECREMENT_EXPR:
7411     case PREINCREMENT_EXPR:
7412     case POSTDECREMENT_EXPR:
7413     case POSTINCREMENT_EXPR:
7414       return build_nt
7415         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7416          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7417
7418     case CALL_EXPR:
7419       return build_nt (code, 
7420                        tsubst_copy (TREE_OPERAND (t, 0), args,
7421                                     complain, in_decl),
7422                        tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7423                                     in_decl),
7424                        NULL_TREE);
7425
7426     case STMT_EXPR:
7427       /* This processing should really occur in tsubst_expr.  However,
7428          tsubst_expr does not recurse into expressions, since it
7429          assumes that there aren't any statements inside them.  So, we
7430          need to expand the STMT_EXPR here.  */
7431       if (!processing_template_decl)
7432         {
7433           tree stmt_expr = begin_stmt_expr ();
7434           tsubst_expr (STMT_EXPR_STMT (t), args, complain, in_decl);
7435           return finish_stmt_expr (stmt_expr);
7436         }
7437       
7438       return t;
7439
7440     case COND_EXPR:
7441     case MODOP_EXPR:
7442     case PSEUDO_DTOR_EXPR:
7443       {
7444         r = build_nt
7445           (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7446            tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7447            tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7448         return r;
7449       }
7450
7451     case NEW_EXPR:
7452       {
7453         r = build_nt
7454         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7455          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl),
7456          tsubst_copy (TREE_OPERAND (t, 2), args, complain, in_decl));
7457         NEW_EXPR_USE_GLOBAL (r) = NEW_EXPR_USE_GLOBAL (t);
7458         return r;
7459       }
7460
7461     case DELETE_EXPR:
7462       {
7463         r = build_nt
7464         (code, tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl),
7465          tsubst_copy (TREE_OPERAND (t, 1), args, complain, in_decl));
7466         DELETE_EXPR_USE_GLOBAL (r) = DELETE_EXPR_USE_GLOBAL (t);
7467         DELETE_EXPR_USE_VEC (r) = DELETE_EXPR_USE_VEC (t);
7468         return r;
7469       }
7470
7471     case TEMPLATE_ID_EXPR:
7472       {
7473         /* Substituted template arguments */
7474         tree targs = tsubst_copy (TREE_OPERAND (t, 1), args, complain,
7475                                   in_decl);
7476
7477         maybe_fold_nontype_args (targs);
7478         return lookup_template_function
7479           (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl), targs);
7480       }
7481
7482     case TREE_LIST:
7483       {
7484         tree purpose, value, chain;
7485
7486         if (t == void_list_node)
7487           return t;
7488
7489         purpose = TREE_PURPOSE (t);
7490         if (purpose)
7491           purpose = tsubst_copy (purpose, args, complain, in_decl);
7492         value = TREE_VALUE (t);
7493         if (value)
7494           value = tsubst_copy (value, args, complain, in_decl);
7495         chain = TREE_CHAIN (t);
7496         if (chain && chain != void_type_node)
7497           chain = tsubst_copy (chain, args, complain, in_decl);
7498         if (purpose == TREE_PURPOSE (t)
7499             && value == TREE_VALUE (t)
7500             && chain == TREE_CHAIN (t))
7501           return t;
7502         return tree_cons (purpose, value, chain);
7503       }
7504
7505     case RECORD_TYPE:
7506     case UNION_TYPE:
7507     case ENUMERAL_TYPE:
7508     case INTEGER_TYPE:
7509     case TEMPLATE_TYPE_PARM:
7510     case TEMPLATE_TEMPLATE_PARM:
7511     case BOUND_TEMPLATE_TEMPLATE_PARM:
7512     case TEMPLATE_PARM_INDEX:
7513     case POINTER_TYPE:
7514     case REFERENCE_TYPE:
7515     case OFFSET_TYPE:
7516     case FUNCTION_TYPE:
7517     case METHOD_TYPE:
7518     case ARRAY_TYPE:
7519     case TYPENAME_TYPE:
7520     case UNBOUND_CLASS_TEMPLATE:
7521     case TYPEOF_TYPE:
7522     case TYPE_DECL:
7523       return tsubst (t, args, complain, in_decl);
7524
7525     case IDENTIFIER_NODE:
7526       if (IDENTIFIER_TYPENAME_P (t))
7527         {
7528           tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7529           return mangle_conv_op_name_for_type (new_type);
7530         }
7531       else
7532         return t;
7533
7534     case CONSTRUCTOR:
7535       {
7536         r = build_constructor
7537           (tsubst (TREE_TYPE (t), args, complain, in_decl), 
7538            tsubst_copy (CONSTRUCTOR_ELTS (t), args, complain, in_decl));
7539         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
7540         return r;
7541       }
7542
7543     case VA_ARG_EXPR:
7544       return build_x_va_arg (tsubst_copy (TREE_OPERAND (t, 0), args, complain,
7545                                           in_decl),
7546                              tsubst (TREE_TYPE (t), args, complain, in_decl));
7547
7548     default:
7549       return t;
7550     }
7551 }
7552
7553 /* Like tsubst_copy for expressions, etc. but also does semantic
7554    processing.  */
7555
7556 static tree
7557 tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl)
7558 {
7559   tree stmt, tmp;
7560
7561   if (t == NULL_TREE || t == error_mark_node)
7562     return t;
7563
7564   if (processing_template_decl)
7565     return tsubst_copy (t, args, complain, in_decl);
7566
7567   if (!STATEMENT_CODE_P (TREE_CODE (t)))
7568     return tsubst_copy_and_build (t, args, complain, in_decl,
7569                                   /*function_p=*/false);
7570     
7571   switch (TREE_CODE (t))
7572     {
7573     case CTOR_INITIALIZER:
7574       prep_stmt (t);
7575       finish_mem_initializers (tsubst_initializer_list 
7576                                (TREE_OPERAND (t, 0), args));
7577       break;
7578
7579     case RETURN_STMT:
7580       prep_stmt (t);
7581       finish_return_stmt (tsubst_expr (RETURN_STMT_EXPR (t),
7582                                        args, complain, in_decl));
7583       break;
7584
7585     case EXPR_STMT:
7586       prep_stmt (t);
7587       finish_expr_stmt (tsubst_expr (EXPR_STMT_EXPR (t),
7588                                      args, complain, in_decl));
7589       break;
7590
7591     case USING_STMT:
7592       prep_stmt (t);
7593       do_using_directive (tsubst_expr (USING_STMT_NAMESPACE (t),
7594                                        args, complain, in_decl));
7595       break;
7596       
7597     case DECL_STMT:
7598       {
7599         tree decl;
7600         tree init;
7601
7602         prep_stmt (t);
7603         decl = DECL_STMT_DECL (t);
7604         if (TREE_CODE (decl) == LABEL_DECL)
7605           finish_label_decl (DECL_NAME (decl));
7606         else if (TREE_CODE (decl) == USING_DECL)
7607           {
7608             tree scope = DECL_INITIAL (decl);
7609             tree name = DECL_NAME (decl);
7610             
7611             scope = tsubst_expr (scope, args, complain, in_decl);
7612             do_local_using_decl (lookup_qualified_name (scope,
7613                                                         name, 
7614                                                         /*is_type_p=*/0,
7615                                                         /*complain=*/true));
7616           }
7617         else
7618           {
7619             init = DECL_INITIAL (decl);
7620             decl = tsubst (decl, args, complain, in_decl);
7621             if (decl != error_mark_node)
7622               {
7623                 if (init)
7624                   DECL_INITIAL (decl) = error_mark_node;
7625                 /* By marking the declaration as instantiated, we avoid
7626                    trying to instantiate it.  Since instantiate_decl can't
7627                    handle local variables, and since we've already done
7628                    all that needs to be done, that's the right thing to
7629                    do.  */
7630                 if (TREE_CODE (decl) == VAR_DECL)
7631                   DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7632                 if (TREE_CODE (decl) == VAR_DECL
7633                     && ANON_AGGR_TYPE_P (TREE_TYPE (decl)))
7634                   /* Anonymous aggregates are a special case.  */
7635                   finish_anon_union (decl);
7636                 else 
7637                   {
7638                     maybe_push_decl (decl);
7639                     if (DECL_PRETTY_FUNCTION_P (decl))
7640                       {
7641                         /* For __PRETTY_FUNCTION__ we have to adjust the
7642                            initializer.  */
7643                         const char *const name
7644                           = cxx_printable_name (current_function_decl, 2);
7645                         init = cp_fname_init (name);
7646                         TREE_TYPE (decl) = TREE_TYPE (init);
7647                       }
7648                     else
7649                       init = tsubst_expr (init, args, complain, in_decl);
7650                     cp_finish_decl (decl, init, NULL_TREE, 0);
7651                   }
7652               }
7653           }
7654
7655         /* A DECL_STMT can also be used as an expression, in the condition
7656            clause of an if/for/while construct.  If we aren't followed by
7657            another statement, return our decl.  */
7658         if (TREE_CHAIN (t) == NULL_TREE)
7659           return decl;
7660       }
7661       break;
7662
7663     case FOR_STMT:
7664       {
7665         prep_stmt (t);
7666
7667         stmt = begin_for_stmt ();
7668         tsubst_expr (FOR_INIT_STMT (t), args, complain, in_decl);
7669         finish_for_init_stmt (stmt);
7670         finish_for_cond (tsubst_expr (FOR_COND (t),
7671                                       args, complain, in_decl),
7672                          stmt);
7673         tmp = tsubst_expr (FOR_EXPR (t), args, complain, in_decl);
7674         finish_for_expr (tmp, stmt);
7675         tsubst_expr (FOR_BODY (t), args, complain, in_decl);
7676         finish_for_stmt (stmt);
7677       }
7678       break;
7679
7680     case WHILE_STMT:
7681       {
7682         prep_stmt (t);
7683         stmt = begin_while_stmt ();
7684         finish_while_stmt_cond (tsubst_expr (WHILE_COND (t),
7685                                              args, complain, in_decl),
7686                                 stmt);
7687         tsubst_expr (WHILE_BODY (t), args, complain, in_decl);
7688         finish_while_stmt (stmt);
7689       }
7690       break;
7691
7692     case DO_STMT:
7693       {
7694         prep_stmt (t);
7695         stmt = begin_do_stmt ();
7696         tsubst_expr (DO_BODY (t), args, complain, in_decl);
7697         finish_do_body (stmt);
7698         finish_do_stmt (tsubst_expr (DO_COND (t),
7699                                      args, complain, in_decl),
7700                         stmt);
7701       }
7702       break;
7703
7704     case IF_STMT:
7705       {
7706         prep_stmt (t);
7707         stmt = begin_if_stmt ();
7708         finish_if_stmt_cond (tsubst_expr (IF_COND (t),
7709                                           args, complain, in_decl),
7710                              stmt);
7711
7712         if (tmp = THEN_CLAUSE (t), tmp)
7713           {
7714             tsubst_expr (tmp, args, complain, in_decl);
7715             finish_then_clause (stmt);
7716           }
7717
7718         if (tmp = ELSE_CLAUSE (t), tmp)
7719           {
7720             begin_else_clause ();
7721             tsubst_expr (tmp, args, complain, in_decl);
7722             finish_else_clause (stmt);
7723           }
7724
7725         finish_if_stmt ();
7726       }
7727       break;
7728
7729     case COMPOUND_STMT:
7730       {
7731         prep_stmt (t);
7732         if (COMPOUND_STMT_BODY_BLOCK (t))
7733           stmt = begin_function_body ();
7734         else
7735           stmt = begin_compound_stmt (COMPOUND_STMT_NO_SCOPE (t));
7736
7737         tsubst_expr (COMPOUND_BODY (t), args, complain, in_decl);
7738
7739         if (COMPOUND_STMT_BODY_BLOCK (t))
7740           finish_function_body (stmt);
7741         else
7742           finish_compound_stmt (COMPOUND_STMT_NO_SCOPE (t), stmt);
7743       }
7744       break;
7745
7746     case BREAK_STMT:
7747       prep_stmt (t);
7748       finish_break_stmt ();
7749       break;
7750
7751     case CONTINUE_STMT:
7752       prep_stmt (t);
7753       finish_continue_stmt ();
7754       break;
7755
7756     case SWITCH_STMT:
7757       {
7758         tree val;
7759
7760         prep_stmt (t);
7761         stmt = begin_switch_stmt ();
7762         val = tsubst_expr (SWITCH_COND (t), args, complain, in_decl);
7763         finish_switch_cond (val, stmt);
7764         tsubst_expr (SWITCH_BODY (t), args, complain, in_decl);
7765         finish_switch_stmt (stmt);
7766       }
7767       break;
7768
7769     case CASE_LABEL:
7770       prep_stmt (t);
7771       finish_case_label (tsubst_expr (CASE_LOW (t), args, complain, in_decl),
7772                          tsubst_expr (CASE_HIGH (t), args, complain,
7773                                       in_decl));
7774       break;
7775
7776     case LABEL_STMT:
7777       input_line = STMT_LINENO (t);
7778       finish_label_stmt (DECL_NAME (LABEL_STMT_LABEL (t)));
7779       break;
7780
7781     case FILE_STMT:
7782       input_filename = FILE_STMT_FILENAME (t);
7783       add_stmt (build_nt (FILE_STMT, FILE_STMT_FILENAME_NODE (t)));
7784       break;
7785
7786     case GOTO_STMT:
7787       prep_stmt (t);
7788       tmp = GOTO_DESTINATION (t);
7789       if (TREE_CODE (tmp) != LABEL_DECL)
7790         /* Computed goto's must be tsubst'd into.  On the other hand,
7791            non-computed gotos must not be; the identifier in question
7792            will have no binding.  */
7793         tmp = tsubst_expr (tmp, args, complain, in_decl);
7794       else
7795         tmp = DECL_NAME (tmp);
7796       finish_goto_stmt (tmp);
7797       break;
7798
7799     case ASM_STMT:
7800       prep_stmt (t);
7801       tmp = finish_asm_stmt
7802         (ASM_CV_QUAL (t),
7803          tsubst_expr (ASM_STRING (t), args, complain, in_decl),
7804          tsubst_expr (ASM_OUTPUTS (t), args, complain, in_decl),
7805          tsubst_expr (ASM_INPUTS (t), args, complain, in_decl), 
7806          tsubst_expr (ASM_CLOBBERS (t), args, complain, in_decl));
7807       ASM_INPUT_P (tmp) = ASM_INPUT_P (t);
7808       break;
7809
7810     case TRY_BLOCK:
7811       prep_stmt (t);
7812       if (CLEANUP_P (t))
7813         {
7814           stmt = begin_try_block ();
7815           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7816           finish_cleanup_try_block (stmt);
7817           finish_cleanup (tsubst_expr (TRY_HANDLERS (t), args,
7818                                        complain, in_decl),
7819                           stmt);
7820         }
7821       else
7822         {
7823           if (FN_TRY_BLOCK_P (t))
7824             stmt = begin_function_try_block ();
7825           else
7826             stmt = begin_try_block ();
7827
7828           tsubst_expr (TRY_STMTS (t), args, complain, in_decl);
7829
7830           if (FN_TRY_BLOCK_P (t))
7831             finish_function_try_block (stmt);
7832           else
7833             finish_try_block (stmt);
7834
7835           tsubst_expr (TRY_HANDLERS (t), args, complain, in_decl);
7836           if (FN_TRY_BLOCK_P (t))
7837             finish_function_handler_sequence (stmt);
7838           else
7839             finish_handler_sequence (stmt);
7840         }
7841       break;
7842       
7843     case HANDLER:
7844       {
7845         tree decl;
7846
7847         prep_stmt (t);
7848         stmt = begin_handler ();
7849         if (HANDLER_PARMS (t))
7850           {
7851             decl = DECL_STMT_DECL (HANDLER_PARMS (t));
7852             decl = tsubst (decl, args, complain, in_decl);
7853             /* Prevent instantiate_decl from trying to instantiate
7854                this variable.  We've already done all that needs to be
7855                done.  */
7856             DECL_TEMPLATE_INSTANTIATED (decl) = 1;
7857           }
7858         else
7859           decl = NULL_TREE;
7860         finish_handler_parms (decl, stmt);
7861         tsubst_expr (HANDLER_BODY (t), args, complain, in_decl);
7862         finish_handler (stmt);
7863       }
7864       break;
7865
7866     case TAG_DEFN:
7867       prep_stmt (t);
7868       tsubst (TREE_TYPE (t), args, complain, NULL_TREE);
7869       break;
7870
7871     default:
7872       abort ();
7873     }
7874
7875   return tsubst_expr (TREE_CHAIN (t), args, complain, in_decl);
7876 }
7877
7878 /* T is a postfix-expression that is not being used in a function
7879    call.  Return the substituted version of T.  */
7880
7881 static tree
7882 tsubst_non_call_postfix_expression (tree t, tree args, 
7883                                     tsubst_flags_t complain,
7884                                     tree in_decl)
7885 {
7886   if (TREE_CODE (t) == SCOPE_REF)
7887     t = tsubst_qualified_id (t, args, complain, in_decl,
7888                              /*done=*/false, /*address_p=*/false);
7889   else
7890     t = tsubst_copy_and_build (t, args, complain, in_decl,
7891                                /*function_p=*/false);
7892
7893   return t;
7894 }
7895
7896 /* Like tsubst but deals with expressions and performs semantic
7897    analysis.  FUNCTION_P is true if T is the "F" in "F (ARGS)".  */
7898
7899 tree
7900 tsubst_copy_and_build (tree t, 
7901                        tree args, 
7902                        tsubst_flags_t complain, 
7903                        tree in_decl,
7904                        bool function_p)
7905 {
7906 #define RECUR(NODE) \
7907   tsubst_copy_and_build (NODE, args, complain, in_decl, /*function_p=*/false)
7908
7909   tree op1;
7910
7911   if (t == NULL_TREE || t == error_mark_node)
7912     return t;
7913
7914   switch (TREE_CODE (t))
7915     {
7916     case LOOKUP_EXPR:
7917     case IDENTIFIER_NODE:
7918       {
7919         tree decl;
7920         tree scope;
7921         cp_id_kind idk;
7922         tree qualifying_class;
7923         bool non_constant_expression_p;
7924         const char *error_msg;
7925
7926         /* Remember whether this identifier was explicitly qualified
7927            with "::".  */
7928         if (TREE_CODE (t) == LOOKUP_EXPR && LOOKUP_EXPR_GLOBAL (t))
7929           scope = global_namespace;
7930         else
7931           scope = NULL_TREE;
7932         /* Get at the underlying identifier.  */
7933         if (TREE_CODE (t) == LOOKUP_EXPR)
7934           t = TREE_OPERAND (t, 0);
7935
7936         if (IDENTIFIER_TYPENAME_P (t))
7937           {
7938             tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
7939             t = mangle_conv_op_name_for_type (new_type);
7940           }
7941
7942         /* Look up the name.  */
7943         if (scope == global_namespace)
7944           decl = IDENTIFIER_GLOBAL_VALUE (t);
7945         else
7946           decl = lookup_name (t, 0);
7947
7948         /* By convention, expressions use ERROR_MARK_NODE to indicate
7949            failure, not NULL_TREE.  */
7950         if (decl == NULL_TREE)
7951           decl = error_mark_node;
7952
7953         decl = finish_id_expression (t, decl, scope,
7954                                      &idk,
7955                                      &qualifying_class,
7956                                      /*constant_expression_p=*/false,
7957                                      /*allow_non_constant_expression_p=*/false,
7958                                      &non_constant_expression_p,
7959                                      &error_msg);
7960         if (error_msg)
7961           error (error_msg);
7962         if (!function_p && TREE_CODE (decl) == IDENTIFIER_NODE)
7963           decl = unqualified_name_lookup_error (decl);
7964         return decl;
7965       }
7966
7967     case TEMPLATE_ID_EXPR:
7968       {
7969         tree object;
7970         tree template = RECUR (TREE_OPERAND (t, 0));
7971         tree targs = RECUR (TREE_OPERAND (t, 1));
7972         
7973         if (TREE_CODE (template) == COMPONENT_REF)
7974           {
7975             object = TREE_OPERAND (template, 0);
7976             template = TREE_OPERAND (template, 1);
7977           }
7978         else
7979           object = NULL_TREE;
7980         template = lookup_template_function (template, targs);
7981         
7982         if (object)
7983           return build (COMPONENT_REF, TREE_TYPE (template), 
7984                         object, template);
7985         else
7986           return template;
7987       }
7988
7989     case INDIRECT_REF:
7990       return build_x_indirect_ref (RECUR (TREE_OPERAND (t, 0)), "unary *");
7991
7992     case CAST_EXPR:
7993       return build_functional_cast
7994         (tsubst (TREE_TYPE (t), args, complain, in_decl),
7995          RECUR (TREE_OPERAND (t, 0)));
7996
7997     case REINTERPRET_CAST_EXPR:
7998       return build_reinterpret_cast
7999         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8000          RECUR (TREE_OPERAND (t, 0)));
8001
8002     case CONST_CAST_EXPR:
8003       return build_const_cast
8004         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8005          RECUR (TREE_OPERAND (t, 0)));
8006
8007     case DYNAMIC_CAST_EXPR:
8008       return build_dynamic_cast
8009         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8010          RECUR (TREE_OPERAND (t, 0)));
8011
8012     case STATIC_CAST_EXPR:
8013       return build_static_cast
8014         (tsubst (TREE_TYPE (t), args, complain, in_decl),
8015          RECUR (TREE_OPERAND (t, 0)));
8016
8017     case POSTDECREMENT_EXPR:
8018     case POSTINCREMENT_EXPR:
8019       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8020                                                 args, complain, in_decl);
8021       return build_x_unary_op (TREE_CODE (t), op1);
8022
8023     case PREDECREMENT_EXPR:
8024     case PREINCREMENT_EXPR:
8025     case NEGATE_EXPR:
8026     case BIT_NOT_EXPR:
8027     case ABS_EXPR:
8028     case TRUTH_NOT_EXPR:
8029     case CONVERT_EXPR:  /* Unary + */
8030     case REALPART_EXPR:
8031     case IMAGPART_EXPR:
8032       return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)));
8033
8034     case ADDR_EXPR:
8035       op1 = TREE_OPERAND (t, 0);
8036       if (TREE_CODE (op1) == SCOPE_REF)
8037         op1 = tsubst_qualified_id (op1, args, complain, in_decl, 
8038                                    /*done=*/true, /*address_p=*/true);
8039       else
8040         op1 = tsubst_non_call_postfix_expression (op1, args, complain, 
8041                                                   in_decl);
8042       return build_x_unary_op (ADDR_EXPR, op1);
8043
8044     case PLUS_EXPR:
8045     case MINUS_EXPR:
8046     case MULT_EXPR:
8047     case TRUNC_DIV_EXPR:
8048     case CEIL_DIV_EXPR:
8049     case FLOOR_DIV_EXPR:
8050     case ROUND_DIV_EXPR:
8051     case EXACT_DIV_EXPR:
8052     case BIT_AND_EXPR:
8053     case BIT_ANDTC_EXPR:
8054     case BIT_IOR_EXPR:
8055     case BIT_XOR_EXPR:
8056     case TRUNC_MOD_EXPR:
8057     case FLOOR_MOD_EXPR:
8058     case TRUTH_ANDIF_EXPR:
8059     case TRUTH_ORIF_EXPR:
8060     case TRUTH_AND_EXPR:
8061     case TRUTH_OR_EXPR:
8062     case RSHIFT_EXPR:
8063     case LSHIFT_EXPR:
8064     case RROTATE_EXPR:
8065     case LROTATE_EXPR:
8066     case EQ_EXPR:
8067     case NE_EXPR:
8068     case MAX_EXPR:
8069     case MIN_EXPR:
8070     case LE_EXPR:
8071     case GE_EXPR:
8072     case LT_EXPR:
8073     case GT_EXPR:
8074     case MEMBER_REF:
8075     case DOTSTAR_EXPR:
8076       return build_x_binary_op
8077         (TREE_CODE (t), 
8078          RECUR (TREE_OPERAND (t, 0)),
8079          RECUR (TREE_OPERAND (t, 1)));
8080
8081     case SCOPE_REF:
8082       return tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
8083                                   /*address_p=*/false);
8084
8085     case ARRAY_REF:
8086       if (tsubst_copy (TREE_OPERAND (t, 0), args, complain, in_decl)
8087           == NULL_TREE)
8088         /* new-type-id */
8089         return build_nt (ARRAY_REF, NULL_TREE, RECUR (TREE_OPERAND (t, 1)));
8090
8091       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8092                                                 args, complain, in_decl);
8093       /* Remember that there was a reference to this entity.  */
8094       if (DECL_P (op1))
8095         mark_used (op1);
8096       return grok_array_decl (op1, RECUR (TREE_OPERAND (t, 1)));
8097
8098     case SIZEOF_EXPR:
8099     case ALIGNOF_EXPR:
8100       op1 = TREE_OPERAND (t, 0);
8101       if (!args)
8102         {
8103           /* When there are no ARGS, we are trying to evaluate a
8104              non-dependent expression from the parser.  Trying to do
8105              the substitutions may not work.  */
8106           if (!TYPE_P (op1))
8107             op1 = TREE_TYPE (op1);
8108         }
8109       else
8110         {
8111           ++skip_evaluation;
8112           op1 = RECUR (op1);
8113           --skip_evaluation;
8114         }
8115       if (TREE_CODE (t) == SIZEOF_EXPR)
8116         return finish_sizeof (op1);
8117       else
8118         return finish_alignof (op1);
8119
8120     case MODOP_EXPR:
8121       return build_x_modify_expr
8122         (RECUR (TREE_OPERAND (t, 0)),
8123          TREE_CODE (TREE_OPERAND (t, 1)),
8124          RECUR (TREE_OPERAND (t, 2)));
8125
8126     case ARROW_EXPR:
8127       op1 = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8128                                                 args, complain, in_decl);
8129       /* Remember that there was a reference to this entity.  */
8130       if (DECL_P (op1))
8131         mark_used (op1);
8132       return build_x_arrow (op1);
8133
8134     case NEW_EXPR:
8135       return build_new
8136         (RECUR (TREE_OPERAND (t, 0)),
8137          RECUR (TREE_OPERAND (t, 1)),
8138          RECUR (TREE_OPERAND (t, 2)),
8139          NEW_EXPR_USE_GLOBAL (t));
8140
8141     case DELETE_EXPR:
8142      return delete_sanity
8143        (RECUR (TREE_OPERAND (t, 0)),
8144         RECUR (TREE_OPERAND (t, 1)),
8145         DELETE_EXPR_USE_VEC (t),
8146         DELETE_EXPR_USE_GLOBAL (t));
8147
8148     case COMPOUND_EXPR:
8149       return build_x_compound_expr (RECUR (TREE_OPERAND (t, 0)),
8150                                     RECUR (TREE_OPERAND (t, 1)));
8151
8152     case CALL_EXPR:
8153       {
8154         tree function;
8155         tree call_args;
8156         bool qualified_p;
8157
8158         function = TREE_OPERAND (t, 0);
8159         if (TREE_CODE (function) == SCOPE_REF)
8160           {
8161             qualified_p = true;
8162             function = tsubst_qualified_id (function, args, complain, in_decl,
8163                                             /*done=*/false, 
8164                                             /*address_p=*/false);
8165           }
8166         else
8167           {
8168             qualified_p = (TREE_CODE (function) == COMPONENT_REF
8169                            && (TREE_CODE (TREE_OPERAND (function, 1))
8170                                == SCOPE_REF));
8171             function = tsubst_copy_and_build (function, args, complain, 
8172                                               in_decl,
8173                                               !qualified_p);
8174           }
8175
8176         call_args = RECUR (TREE_OPERAND (t, 1));
8177           
8178         if (BASELINK_P (function))
8179           qualified_p = 1;
8180
8181         if (!qualified_p
8182             && TREE_CODE (function) != TEMPLATE_ID_EXPR
8183             && (is_overloaded_fn (function)
8184                 || DECL_P (function)
8185                 || TREE_CODE (function) == IDENTIFIER_NODE))
8186           {
8187             if (call_args)
8188               function = perform_koenig_lookup (function, call_args);
8189             else if (TREE_CODE (function) == IDENTIFIER_NODE)
8190               function = unqualified_name_lookup_error (function);
8191           }
8192
8193         /* Remember that there was a reference to this entity.  */
8194         if (DECL_P (function))
8195           mark_used (function);
8196
8197         function = convert_from_reference (function);
8198
8199         if (TREE_CODE (function) == OFFSET_REF)
8200           return build_offset_ref_call_from_tree (function, call_args);
8201         if (TREE_CODE (function) == COMPONENT_REF)
8202           return (build_new_method_call 
8203                   (TREE_OPERAND (function, 0),
8204                    TREE_OPERAND (function, 1),
8205                    call_args, NULL_TREE, 
8206                    qualified_p ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL));
8207         return finish_call_expr (function, call_args, 
8208                                  /*disallow_virtual=*/qualified_p);
8209       }
8210
8211     case COND_EXPR:
8212       return build_x_conditional_expr
8213         (RECUR (TREE_OPERAND (t, 0)),
8214          RECUR (TREE_OPERAND (t, 1)),
8215          RECUR (TREE_OPERAND (t, 2)));
8216
8217     case PSEUDO_DTOR_EXPR:
8218       return finish_pseudo_destructor_expr 
8219         (RECUR (TREE_OPERAND (t, 0)),
8220          RECUR (TREE_OPERAND (t, 1)),
8221          RECUR (TREE_OPERAND (t, 2)));
8222
8223     case TREE_LIST:
8224       {
8225         tree purpose, value, chain;
8226
8227         if (t == void_list_node)
8228           return t;
8229
8230         purpose = TREE_PURPOSE (t);
8231         if (purpose)
8232           purpose = RECUR (purpose);
8233         value = TREE_VALUE (t);
8234         if (value)
8235           value = RECUR (value);
8236         chain = TREE_CHAIN (t);
8237         if (chain && chain != void_type_node)
8238           chain = RECUR (chain);
8239         if (purpose == TREE_PURPOSE (t)
8240             && value == TREE_VALUE (t)
8241             && chain == TREE_CHAIN (t))
8242           return t;
8243         return tree_cons (purpose, value, chain);
8244       }
8245
8246     case COMPONENT_REF:
8247       {
8248         tree object;
8249         tree member;
8250
8251         object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
8252                                                      args, complain, in_decl);
8253         /* Remember that there was a reference to this entity.  */
8254         if (DECL_P (object))
8255           mark_used (object);
8256
8257         member = TREE_OPERAND (t, 1);
8258         if (BASELINK_P (member))
8259           member = tsubst_baselink (member, 
8260                                     non_reference (TREE_TYPE (object)),
8261                                     args, complain, in_decl);
8262         else
8263           member = tsubst_copy (member, args, complain, in_decl);
8264
8265         if (!CLASS_TYPE_P (TREE_TYPE (object)))
8266           {
8267             if (TREE_CODE (member) == BIT_NOT_EXPR)
8268               return finish_pseudo_destructor_expr (object, 
8269                                                     NULL_TREE,
8270                                                     TREE_TYPE (object));
8271             else if (TREE_CODE (member) == SCOPE_REF
8272                      && (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
8273               return finish_pseudo_destructor_expr (object, 
8274                                                     object,
8275                                                     TREE_TYPE (object));
8276           }
8277         else if (TREE_CODE (member) == SCOPE_REF
8278                  && TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
8279           {
8280             tree tmpl;
8281             tree args;
8282         
8283             /* Lookup the template functions now that we know what the
8284                scope is.  */
8285             tmpl = TREE_OPERAND (TREE_OPERAND (member, 1), 0);
8286             args = TREE_OPERAND (TREE_OPERAND (member, 1), 1);
8287             member = lookup_qualified_name (TREE_OPERAND (member, 0),
8288                                             tmpl, 
8289                                             /*is_type=*/0,
8290                                             /*complain=*/true);
8291             if (BASELINK_P (member))
8292               BASELINK_FUNCTIONS (member) 
8293                 = build_nt (TEMPLATE_ID_EXPR, BASELINK_FUNCTIONS (member),
8294                             args);
8295             else
8296               {
8297                 error ("`%D' is not a member of `%T'",
8298                        tmpl, TREE_TYPE (object));
8299                 return error_mark_node;
8300               }
8301           }
8302
8303         return finish_class_member_access_expr (object, member);
8304       }
8305
8306     case THROW_EXPR:
8307       return build_throw
8308         (RECUR (TREE_OPERAND (t, 0)));
8309
8310     case CONSTRUCTOR:
8311       {
8312         tree r;
8313         tree elts;
8314         tree type = tsubst (TREE_TYPE (t), args, complain, in_decl);
8315         bool purpose_p;
8316
8317         /* digest_init will do the wrong thing if we let it.  */
8318         if (type && TYPE_PTRMEMFUNC_P (type))
8319           return t;
8320
8321         r = NULL_TREE;
8322         /* We do not want to process the purpose of aggregate
8323            initializers as they are identifier nodes which will be
8324            looked up by digest_init.  */
8325         purpose_p = !(type && IS_AGGR_TYPE (type));
8326         for (elts = CONSTRUCTOR_ELTS (t);
8327              elts;
8328              elts = TREE_CHAIN (elts))
8329           {
8330             tree purpose = TREE_PURPOSE (elts);
8331             tree value = TREE_VALUE (elts);
8332             
8333             if (purpose && purpose_p)
8334               purpose = RECUR (purpose);
8335             value = RECUR (value);
8336             r = tree_cons (purpose, value, r);
8337           }
8338         
8339         r = build_constructor (NULL_TREE, nreverse (r));
8340         TREE_HAS_CONSTRUCTOR (r) = TREE_HAS_CONSTRUCTOR (t);
8341
8342         if (type)
8343           return digest_init (type, r, 0);
8344         return r;
8345       }
8346
8347     case TYPEID_EXPR:
8348       {
8349         tree operand_0 = RECUR (TREE_OPERAND (t, 0));
8350         if (TYPE_P (operand_0))
8351           return get_typeid (operand_0);
8352         return build_typeid (operand_0);
8353       }
8354
8355     case PARM_DECL:
8356       return convert_from_reference (tsubst_copy (t, args, complain, in_decl));
8357
8358     case VAR_DECL:
8359       if (args)
8360         t = tsubst_copy (t, args, complain, in_decl);
8361       else
8362         /* If there are no ARGS, then we are evaluating a
8363            non-dependent expression.  If the expression is
8364            non-dependent, the variable must be a constant.  */
8365         t = DECL_INITIAL (t);
8366       return convert_from_reference (t);
8367
8368     case VA_ARG_EXPR:
8369       return build_x_va_arg (RECUR (TREE_OPERAND (t, 0)),
8370                              tsubst_copy (TREE_TYPE (t), args, complain, 
8371                                           in_decl));
8372
8373     default:
8374       return tsubst_copy (t, args, complain, in_decl);
8375     }
8376
8377 #undef RECUR
8378 }
8379
8380 /* Verify that the instantiated ARGS are valid. For type arguments,
8381    make sure that the type's linkage is ok. For non-type arguments,
8382    make sure they are constants if they are integral or enumerations.
8383    Emit an error under control of COMPLAIN, and return TRUE on error.  */
8384
8385 static bool
8386 check_instantiated_args (tree tmpl, tree args, tsubst_flags_t complain)
8387 {
8388   int ix, len = DECL_NTPARMS (tmpl);
8389   bool result = false;
8390
8391   for (ix = 0; ix != len; ix++)
8392     {
8393       tree t = TREE_VEC_ELT (args, ix);
8394       
8395       if (TYPE_P (t))
8396         {
8397           /* [basic.link]: A name with no linkage (notably, the name
8398              of a class or enumeration declared in a local scope)
8399              shall not be used to declare an entity with linkage.
8400              This implies that names with no linkage cannot be used as
8401              template arguments.  */
8402           tree nt = no_linkage_check (t);
8403
8404           if (nt)
8405             {
8406               if (!(complain & tf_error))
8407                 /*OK*/;
8408               else if (TYPE_ANONYMOUS_P (nt))
8409                 error ("`%T' uses anonymous type", t);
8410               else
8411                 error ("`%T' uses local type `%T'", t, nt);
8412               result = true;
8413             }
8414           /* In order to avoid all sorts of complications, we do not
8415              allow variably-modified types as template arguments.  */
8416           else if (variably_modified_type_p (t))
8417             {
8418               if (complain & tf_error)
8419                 error ("`%T' is a variably modified type", t);
8420               result = true;
8421             }
8422         }
8423       /* A non-type argument of integral or enumerated type must be a
8424          constant.  */
8425       else if (TREE_TYPE (t)
8426                && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t))
8427                && !TREE_CONSTANT (t))
8428         {
8429           if (complain & tf_error)
8430             error ("integral expression `%E' is not constant", t);
8431           result = true;
8432         }
8433     }
8434   if (result && complain & tf_error)
8435     error ("  trying to instantiate `%D'", tmpl);
8436   return result;
8437 }
8438
8439 /* Instantiate the indicated variable or function template TMPL with
8440    the template arguments in TARG_PTR.  */
8441
8442 tree
8443 instantiate_template (tree tmpl, tree targ_ptr, tsubst_flags_t complain)
8444 {
8445   tree fndecl;
8446   tree gen_tmpl;
8447   tree spec;
8448
8449   if (tmpl == error_mark_node)
8450     return error_mark_node;
8451
8452   my_friendly_assert (TREE_CODE (tmpl) == TEMPLATE_DECL, 283);
8453
8454   /* If this function is a clone, handle it specially.  */
8455   if (DECL_CLONED_FUNCTION_P (tmpl))
8456     {
8457       tree spec = instantiate_template (DECL_CLONED_FUNCTION (tmpl), targ_ptr,
8458                                         complain);
8459       tree clone;
8460       
8461       /* Look for the clone.  */
8462       for (clone = TREE_CHAIN (spec);
8463            clone && DECL_CLONED_FUNCTION_P (clone);
8464            clone = TREE_CHAIN (clone))
8465         if (DECL_NAME (clone) == DECL_NAME (tmpl))
8466           return clone;
8467       /* We should always have found the clone by now.  */
8468       abort ();
8469       return NULL_TREE;
8470     }
8471   
8472   /* Check to see if we already have this specialization.  */
8473   spec = retrieve_specialization (tmpl, targ_ptr);
8474   if (spec != NULL_TREE)
8475     return spec;
8476
8477   gen_tmpl = most_general_template (tmpl);
8478   if (tmpl != gen_tmpl)
8479     {
8480       /* The TMPL is a partial instantiation.  To get a full set of
8481          arguments we must add the arguments used to perform the
8482          partial instantiation.  */
8483       targ_ptr = add_outermost_template_args (DECL_TI_ARGS (tmpl),
8484                                               targ_ptr);
8485
8486       /* Check to see if we already have this specialization.  */
8487       spec = retrieve_specialization (gen_tmpl, targ_ptr);
8488       if (spec != NULL_TREE)
8489         return spec;
8490     }
8491
8492   if (check_instantiated_args (gen_tmpl, INNERMOST_TEMPLATE_ARGS (targ_ptr),
8493                                complain))
8494     return error_mark_node;
8495   
8496   /* We are building a FUNCTION_DECL, during which the access of its
8497      parameters and return types have to be checked.  However this
8498      FUNCTION_DECL which is the desired context for access checking
8499      is not built yet.  We solve this chicken-and-egg problem by
8500      deferring all checks until we have the FUNCTION_DECL.  */
8501   push_deferring_access_checks (dk_deferred);
8502
8503   /* substitute template parameters */
8504   fndecl = tsubst (DECL_TEMPLATE_RESULT (gen_tmpl),
8505                    targ_ptr, complain, gen_tmpl);
8506
8507   /* Now we know the specialization, compute access previously
8508      deferred.  */
8509   push_access_scope (fndecl);
8510   perform_deferred_access_checks ();
8511   pop_access_scope (fndecl);
8512   pop_deferring_access_checks ();
8513
8514   /* The DECL_TI_TEMPLATE should always be the immediate parent
8515      template, not the most general template.  */
8516   DECL_TI_TEMPLATE (fndecl) = tmpl;
8517
8518   if (flag_external_templates)
8519     add_pending_template (fndecl);
8520
8521   /* If we've just instantiated the main entry point for a function,
8522      instantiate all the alternate entry points as well.  We do this
8523      by cloning the instantiation of the main entry point, not by
8524      instantiating the template clones.  */
8525   if (TREE_CHAIN (gen_tmpl) && DECL_CLONED_FUNCTION_P (TREE_CHAIN (gen_tmpl)))
8526     clone_function_decl (fndecl, /*update_method_vec_p=*/0);
8527
8528   return fndecl;
8529 }
8530
8531 /* The FN is a TEMPLATE_DECL for a function.  The ARGS are the
8532    arguments that are being used when calling it.  TARGS is a vector
8533    into which the deduced template arguments are placed.  
8534
8535    Return zero for success, 2 for an incomplete match that doesn't resolve
8536    all the types, and 1 for complete failure.  An error message will be
8537    printed only for an incomplete match.
8538
8539    If FN is a conversion operator, or we are trying to produce a specific
8540    specialization, RETURN_TYPE is the return type desired.
8541
8542    The EXPLICIT_TARGS are explicit template arguments provided via a
8543    template-id.
8544
8545    The parameter STRICT is one of:
8546
8547    DEDUCE_CALL: 
8548      We are deducing arguments for a function call, as in
8549      [temp.deduct.call].
8550
8551    DEDUCE_CONV:
8552      We are deducing arguments for a conversion function, as in 
8553      [temp.deduct.conv].
8554
8555    DEDUCE_EXACT:
8556      We are deducing arguments when doing an explicit instantiation
8557      as in [temp.explicit], when determining an explicit specialization
8558      as in [temp.expl.spec], or when taking the address of a function
8559      template, as in [temp.deduct.funcaddr]. 
8560
8561    DEDUCE_ORDER:
8562      We are deducing arguments when calculating the partial
8563      ordering between specializations of function or class
8564      templates, as in [temp.func.order] and [temp.class.order].
8565
8566    LEN is the number of parms to consider before returning success, or -1
8567    for all.  This is used in partial ordering to avoid comparing parms for
8568    which no actual argument was passed, since they are not considered in
8569    overload resolution (and are explicitly excluded from consideration in
8570    partial ordering in [temp.func.order]/6).  */
8571
8572 int
8573 fn_type_unification (tree fn, 
8574                      tree explicit_targs, 
8575                      tree targs, 
8576                      tree args, 
8577                      tree return_type,
8578                      unification_kind_t strict, 
8579                      int len)
8580 {
8581   tree parms;
8582   tree fntype;
8583   int result;
8584
8585   my_friendly_assert (TREE_CODE (fn) == TEMPLATE_DECL, 0);
8586
8587   fntype = TREE_TYPE (fn);
8588   if (explicit_targs)
8589     {
8590       /* [temp.deduct]
8591           
8592          The specified template arguments must match the template
8593          parameters in kind (i.e., type, nontype, template), and there
8594          must not be more arguments than there are parameters;
8595          otherwise type deduction fails.
8596
8597          Nontype arguments must match the types of the corresponding
8598          nontype template parameters, or must be convertible to the
8599          types of the corresponding nontype parameters as specified in
8600          _temp.arg.nontype_, otherwise type deduction fails.
8601
8602          All references in the function type of the function template
8603          to the corresponding template parameters are replaced by the
8604          specified template argument values.  If a substitution in a
8605          template parameter or in the function type of the function
8606          template results in an invalid type, type deduction fails.  */
8607       int i;
8608       tree converted_args;
8609
8610       converted_args
8611         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
8612                                   explicit_targs, NULL_TREE, tf_none, 
8613                                   /*require_all_arguments=*/0));
8614       if (converted_args == error_mark_node)
8615         return 1;
8616
8617       fntype = tsubst (fntype, converted_args, tf_none, NULL_TREE);
8618       if (fntype == error_mark_node)
8619         return 1;
8620
8621       /* Place the explicitly specified arguments in TARGS.  */
8622       for (i = 0; i < TREE_VEC_LENGTH (targs); i++)
8623         TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (converted_args, i);
8624     }
8625      
8626   parms = TYPE_ARG_TYPES (fntype);
8627   /* Never do unification on the 'this' parameter.  */
8628   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
8629     parms = TREE_CHAIN (parms);
8630   
8631   if (return_type)
8632     {
8633       /* We've been given a return type to match, prepend it.  */
8634       parms = tree_cons (NULL_TREE, TREE_TYPE (fntype), parms);
8635       args = tree_cons (NULL_TREE, return_type, args);
8636       if (len >= 0)
8637         ++len;
8638     }
8639
8640   /* We allow incomplete unification without an error message here
8641      because the standard doesn't seem to explicitly prohibit it.  Our
8642      callers must be ready to deal with unification failures in any
8643      event.  */
8644   result = type_unification_real (DECL_INNERMOST_TEMPLATE_PARMS (fn), 
8645                                   targs, parms, args, /*subr=*/0,
8646                                   strict, /*allow_incomplete*/1, len);
8647
8648   if (result == 0) 
8649     /* All is well so far.  Now, check:
8650        
8651        [temp.deduct] 
8652        
8653        When all template arguments have been deduced, all uses of
8654        template parameters in nondeduced contexts are replaced with
8655        the corresponding deduced argument values.  If the
8656        substitution results in an invalid type, as described above,
8657        type deduction fails.  */
8658     if (tsubst (TREE_TYPE (fn), targs, tf_none, NULL_TREE)
8659         == error_mark_node)
8660       return 1;
8661
8662   return result;
8663 }
8664
8665 /* Adjust types before performing type deduction, as described in
8666    [temp.deduct.call] and [temp.deduct.conv].  The rules in these two
8667    sections are symmetric.  PARM is the type of a function parameter
8668    or the return type of the conversion function.  ARG is the type of
8669    the argument passed to the call, or the type of the value
8670    initialized with the result of the conversion function.  */
8671
8672 static int
8673 maybe_adjust_types_for_deduction (unification_kind_t strict, 
8674                                   tree* parm, 
8675                                   tree* arg)
8676 {
8677   int result = 0;
8678   
8679   switch (strict)
8680     {
8681     case DEDUCE_CALL:
8682       break;
8683
8684     case DEDUCE_CONV:
8685       {
8686         /* Swap PARM and ARG throughout the remainder of this
8687            function; the handling is precisely symmetric since PARM
8688            will initialize ARG rather than vice versa.  */
8689         tree* temp = parm;
8690         parm = arg;
8691         arg = temp;
8692         break;
8693       }
8694
8695     case DEDUCE_EXACT:
8696       /* There is nothing to do in this case.  */
8697       return 0;
8698
8699     case DEDUCE_ORDER:
8700       /* DR 214. [temp.func.order] is underspecified, and leads to no
8701          ordering between things like `T *' and `T const &' for `U *'.
8702          The former has T=U and the latter T=U*. The former looks more
8703          specialized and John Spicer considers it well-formed (the EDG
8704          compiler accepts it).
8705
8706          John also confirms that deduction should proceed as in a function
8707          call. Which implies the usual ARG and PARM conversions as DEDUCE_CALL.
8708          However, in ordering, ARG can have REFERENCE_TYPE, but no argument
8709          to an actual call can have such a type.
8710          
8711          If both ARG and PARM are REFERENCE_TYPE, we change neither.
8712          If only ARG is a REFERENCE_TYPE, we look through that and then
8713          proceed as with DEDUCE_CALL (which could further convert it).  */
8714       if (TREE_CODE (*arg) == REFERENCE_TYPE)
8715         {
8716           if (TREE_CODE (*parm) == REFERENCE_TYPE)
8717             return 0;
8718           *arg = TREE_TYPE (*arg);
8719         }
8720       break;
8721     default:
8722       abort ();
8723     }
8724
8725   if (TREE_CODE (*parm) != REFERENCE_TYPE)
8726     {
8727       /* [temp.deduct.call]
8728          
8729          If P is not a reference type:
8730          
8731          --If A is an array type, the pointer type produced by the
8732          array-to-pointer standard conversion (_conv.array_) is
8733          used in place of A for type deduction; otherwise,
8734          
8735          --If A is a function type, the pointer type produced by
8736          the function-to-pointer standard conversion
8737          (_conv.func_) is used in place of A for type deduction;
8738          otherwise,
8739          
8740          --If A is a cv-qualified type, the top level
8741          cv-qualifiers of A's type are ignored for type
8742          deduction.  */
8743       if (TREE_CODE (*arg) == ARRAY_TYPE)
8744         *arg = build_pointer_type (TREE_TYPE (*arg));
8745       else if (TREE_CODE (*arg) == FUNCTION_TYPE)
8746         *arg = build_pointer_type (*arg);
8747       else
8748         *arg = TYPE_MAIN_VARIANT (*arg);
8749     }
8750   
8751   /* [temp.deduct.call]
8752      
8753      If P is a cv-qualified type, the top level cv-qualifiers
8754      of P's type are ignored for type deduction.  If P is a
8755      reference type, the type referred to by P is used for
8756      type deduction.  */
8757   *parm = TYPE_MAIN_VARIANT (*parm);
8758   if (TREE_CODE (*parm) == REFERENCE_TYPE)
8759     {
8760       *parm = TREE_TYPE (*parm);
8761       result |= UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
8762     }
8763
8764   /* DR 322. For conversion deduction, remove a reference type on parm
8765      too (which has been swapped into ARG).  */
8766   if (strict == DEDUCE_CONV && TREE_CODE (*arg) == REFERENCE_TYPE)
8767     *arg = TREE_TYPE (*arg);
8768   
8769   return result;
8770 }
8771
8772 /* Most parms like fn_type_unification.
8773
8774    If SUBR is 1, we're being called recursively (to unify the
8775    arguments of a function or method parameter of a function
8776    template).  */
8777
8778 static int
8779 type_unification_real (tree tparms, 
8780                        tree targs, 
8781                        tree xparms, 
8782                        tree xargs, 
8783                        int subr,
8784                        unification_kind_t strict, 
8785                        int allow_incomplete, 
8786                        int xlen)
8787 {
8788   tree parm, arg;
8789   int i;
8790   int ntparms = TREE_VEC_LENGTH (tparms);
8791   int sub_strict;
8792   int saw_undeduced = 0;
8793   tree parms, args;
8794   int len;
8795
8796   my_friendly_assert (TREE_CODE (tparms) == TREE_VEC, 289);
8797   my_friendly_assert (xparms == NULL_TREE 
8798                       || TREE_CODE (xparms) == TREE_LIST, 290);
8799   /* ARGS could be NULL.  */
8800   if (xargs)
8801     my_friendly_assert (TREE_CODE (xargs) == TREE_LIST, 291);
8802   my_friendly_assert (ntparms > 0, 292);
8803
8804   switch (strict)
8805     {
8806     case DEDUCE_CALL:
8807       sub_strict = (UNIFY_ALLOW_OUTER_LEVEL | UNIFY_ALLOW_MORE_CV_QUAL
8808                     | UNIFY_ALLOW_DERIVED);
8809       break;
8810       
8811     case DEDUCE_CONV:
8812       sub_strict = UNIFY_ALLOW_LESS_CV_QUAL;
8813       break;
8814
8815     case DEDUCE_EXACT:
8816       sub_strict = UNIFY_ALLOW_NONE;
8817       break;
8818     
8819     case DEDUCE_ORDER:
8820       sub_strict = UNIFY_ALLOW_NONE;
8821       break;
8822       
8823     default:
8824       abort ();
8825     }
8826
8827   if (xlen == 0)
8828     return 0;
8829
8830  again:
8831   parms = xparms;
8832   args = xargs;
8833   len = xlen;
8834
8835   while (parms
8836          && parms != void_list_node
8837          && args
8838          && args != void_list_node)
8839     {
8840       parm = TREE_VALUE (parms);
8841       parms = TREE_CHAIN (parms);
8842       arg = TREE_VALUE (args);
8843       args = TREE_CHAIN (args);
8844
8845       if (arg == error_mark_node)
8846         return 1;
8847       if (arg == unknown_type_node)
8848         /* We can't deduce anything from this, but we might get all the
8849            template args from other function args.  */
8850         continue;
8851
8852       /* Conversions will be performed on a function argument that
8853          corresponds with a function parameter that contains only
8854          non-deducible template parameters and explicitly specified
8855          template parameters.  */
8856       if (! uses_template_parms (parm))
8857         {
8858           tree type;
8859
8860           if (!TYPE_P (arg))
8861             type = TREE_TYPE (arg);
8862           else
8863             {
8864               type = arg;
8865               arg = NULL_TREE;
8866             }
8867
8868           if (strict == DEDUCE_EXACT || strict == DEDUCE_ORDER)
8869             {
8870               if (same_type_p (parm, type))
8871                 continue;
8872             }
8873           else
8874             /* It might work; we shouldn't check now, because we might
8875                get into infinite recursion.  Overload resolution will
8876                handle it.  */
8877             continue;
8878
8879           return 1;
8880         }
8881         
8882       if (!TYPE_P (arg))
8883         {
8884           my_friendly_assert (TREE_TYPE (arg) != NULL_TREE, 293);
8885           if (type_unknown_p (arg))
8886             {
8887               /* [temp.deduct.type] A template-argument can be deduced from
8888                  a pointer to function or pointer to member function
8889                  argument if the set of overloaded functions does not
8890                  contain function templates and at most one of a set of
8891                  overloaded functions provides a unique match.  */
8892
8893               if (resolve_overloaded_unification
8894                   (tparms, targs, parm, arg, strict, sub_strict)
8895                   != 0)
8896                 return 1;
8897               continue;
8898             }
8899           arg = TREE_TYPE (arg);
8900           if (arg == error_mark_node)
8901             return 1;
8902         }
8903       
8904       {
8905         int arg_strict = sub_strict;
8906         
8907         if (!subr)
8908           arg_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
8909
8910         if (unify (tparms, targs, parm, arg, arg_strict))
8911           return 1;
8912       }
8913
8914       /* Are we done with the interesting parms?  */
8915       if (--len == 0)
8916         goto done;
8917     }
8918   /* Fail if we've reached the end of the parm list, and more args
8919      are present, and the parm list isn't variadic.  */
8920   if (args && args != void_list_node && parms == void_list_node)
8921     return 1;
8922   /* Fail if parms are left and they don't have default values.  */
8923   if (parms
8924       && parms != void_list_node
8925       && TREE_PURPOSE (parms) == NULL_TREE)
8926     return 1;
8927
8928  done:
8929   if (!subr)
8930     for (i = 0; i < ntparms; i++)
8931       if (TREE_VEC_ELT (targs, i) == NULL_TREE)
8932         {
8933           tree tparm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
8934
8935           /* If this is an undeduced nontype parameter that depends on
8936              a type parameter, try another pass; its type may have been
8937              deduced from a later argument than the one from which
8938              this parameter can be deduced.  */
8939           if (TREE_CODE (tparm) == PARM_DECL
8940               && uses_template_parms (TREE_TYPE (tparm))
8941               && !saw_undeduced++)
8942             goto again;
8943
8944           if (!allow_incomplete)
8945             error ("incomplete type unification");
8946           return 2;
8947         }
8948   return 0;
8949 }
8950
8951 /* Subroutine of type_unification_real.  Args are like the variables at the
8952    call site.  ARG is an overloaded function (or template-id); we try
8953    deducing template args from each of the overloads, and if only one
8954    succeeds, we go with that.  Modifies TARGS and returns 0 on success.  */
8955
8956 static int
8957 resolve_overloaded_unification (tree tparms, 
8958                                 tree targs,
8959                                 tree parm,
8960                                 tree arg, 
8961                                 unification_kind_t strict,
8962                                 int sub_strict)
8963 {
8964   tree tempargs = copy_node (targs);
8965   int good = 0;
8966
8967   if (TREE_CODE (arg) == ADDR_EXPR)
8968     arg = TREE_OPERAND (arg, 0);
8969
8970   if (TREE_CODE (arg) == COMPONENT_REF)
8971     /* Handle `&x' where `x' is some static or non-static member
8972        function name.  */
8973     arg = TREE_OPERAND (arg, 1);
8974
8975   if (TREE_CODE (arg) == OFFSET_REF)
8976     arg = TREE_OPERAND (arg, 1);
8977
8978   /* Strip baselink information.  */
8979   if (BASELINK_P (arg))
8980     arg = BASELINK_FUNCTIONS (arg);
8981
8982   if (TREE_CODE (arg) == TEMPLATE_ID_EXPR)
8983     {
8984       /* If we got some explicit template args, we need to plug them into
8985          the affected templates before we try to unify, in case the
8986          explicit args will completely resolve the templates in question.  */
8987
8988       tree expl_subargs = TREE_OPERAND (arg, 1);
8989       arg = TREE_OPERAND (arg, 0);
8990
8991       for (; arg; arg = OVL_NEXT (arg))
8992         {
8993           tree fn = OVL_CURRENT (arg);
8994           tree subargs, elem;
8995
8996           if (TREE_CODE (fn) != TEMPLATE_DECL)
8997             continue;
8998
8999           subargs = get_bindings_overload (fn, DECL_TEMPLATE_RESULT (fn),
9000                                            expl_subargs);
9001           if (subargs)
9002             {
9003               elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
9004               if (TREE_CODE (elem) == METHOD_TYPE)
9005                 elem = build_ptrmemfunc_type (build_pointer_type (elem));
9006               good += try_one_overload (tparms, targs, tempargs, parm, elem,
9007                                         strict, sub_strict);
9008             }
9009         }
9010     }
9011   else if (TREE_CODE (arg) == OVERLOAD
9012            || TREE_CODE (arg) == FUNCTION_DECL)
9013     {
9014       for (; arg; arg = OVL_NEXT (arg))
9015         {
9016           tree type = TREE_TYPE (OVL_CURRENT (arg));
9017           if (TREE_CODE (type) == METHOD_TYPE)
9018             type = build_ptrmemfunc_type (build_pointer_type (type));
9019           good += try_one_overload (tparms, targs, tempargs, parm,
9020                                     type,
9021                                     strict, sub_strict);
9022         }
9023     }
9024   else
9025     abort ();
9026
9027   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9028      to function or pointer to member function argument if the set of
9029      overloaded functions does not contain function templates and at most
9030      one of a set of overloaded functions provides a unique match.
9031
9032      So if we found multiple possibilities, we return success but don't
9033      deduce anything.  */
9034
9035   if (good == 1)
9036     {
9037       int i = TREE_VEC_LENGTH (targs);
9038       for (; i--; )
9039         if (TREE_VEC_ELT (tempargs, i))
9040           TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
9041     }
9042   if (good)
9043     return 0;
9044
9045   return 1;
9046 }
9047
9048 /* Subroutine of resolve_overloaded_unification; does deduction for a single
9049    overload.  Fills TARGS with any deduced arguments, or error_mark_node if
9050    different overloads deduce different arguments for a given parm.
9051    Returns 1 on success.  */
9052
9053 static int
9054 try_one_overload (tree tparms,
9055                   tree orig_targs,
9056                   tree targs, 
9057                   tree parm, 
9058                   tree arg, 
9059                   unification_kind_t strict,
9060                   int sub_strict)
9061 {
9062   int nargs;
9063   tree tempargs;
9064   int i;
9065
9066   /* [temp.deduct.type] A template-argument can be deduced from a pointer
9067      to function or pointer to member function argument if the set of
9068      overloaded functions does not contain function templates and at most
9069      one of a set of overloaded functions provides a unique match.
9070
9071      So if this is a template, just return success.  */
9072
9073   if (uses_template_parms (arg))
9074     return 1;
9075
9076   sub_strict |= maybe_adjust_types_for_deduction (strict, &parm, &arg);
9077
9078   /* We don't copy orig_targs for this because if we have already deduced
9079      some template args from previous args, unify would complain when we
9080      try to deduce a template parameter for the same argument, even though
9081      there isn't really a conflict.  */
9082   nargs = TREE_VEC_LENGTH (targs);
9083   tempargs = make_tree_vec (nargs);
9084
9085   if (unify (tparms, tempargs, parm, arg, sub_strict) != 0)
9086     return 0;
9087
9088   /* First make sure we didn't deduce anything that conflicts with
9089      explicitly specified args.  */
9090   for (i = nargs; i--; )
9091     {
9092       tree elt = TREE_VEC_ELT (tempargs, i);
9093       tree oldelt = TREE_VEC_ELT (orig_targs, i);
9094
9095       if (elt == NULL_TREE)
9096         continue;
9097       else if (uses_template_parms (elt))
9098         {
9099           /* Since we're unifying against ourselves, we will fill in template
9100              args used in the function parm list with our own template parms.
9101              Discard them.  */
9102           TREE_VEC_ELT (tempargs, i) = NULL_TREE;
9103           continue;
9104         }
9105       else if (oldelt && ! template_args_equal (oldelt, elt))
9106         return 0;
9107     }
9108
9109   for (i = nargs; i--; )
9110     {
9111       tree elt = TREE_VEC_ELT (tempargs, i);
9112
9113       if (elt)
9114         TREE_VEC_ELT (targs, i) = elt;
9115     }
9116
9117   return 1;
9118 }
9119
9120 /* Verify that nondeduce template argument agrees with the type
9121    obtained from argument deduction.  Return nonzero if the
9122    verification fails.
9123
9124    For example:
9125
9126      struct A { typedef int X; };
9127      template <class T, class U> struct C {};
9128      template <class T> struct C<T, typename T::X> {};
9129
9130    Then with the instantiation `C<A, int>', we can deduce that
9131    `T' is `A' but unify () does not check whether `typename T::X'
9132    is `int'.  This function ensure that they agree.
9133
9134    TARGS, PARMS are the same as the arguments of unify.
9135    ARGS contains template arguments from all levels.  */
9136
9137 static int
9138 verify_class_unification (tree targs, tree parms, tree args)
9139 {
9140   parms = tsubst (parms, add_outermost_template_args (args, targs),
9141                   tf_none, NULL_TREE);
9142   if (parms == error_mark_node)
9143     return 1;
9144
9145   return !comp_template_args (parms, INNERMOST_TEMPLATE_ARGS (args));
9146 }
9147
9148 /* PARM is a template class (perhaps with unbound template
9149    parameters).  ARG is a fully instantiated type.  If ARG can be
9150    bound to PARM, return ARG, otherwise return NULL_TREE.  TPARMS and
9151    TARGS are as for unify.  */
9152
9153 static tree
9154 try_class_unification (tree tparms, tree targs, tree parm, tree arg)
9155 {
9156   tree copy_of_targs;
9157
9158   if (!CLASSTYPE_TEMPLATE_INFO (arg)
9159       || (most_general_template (CLASSTYPE_TI_TEMPLATE (arg)) 
9160           != most_general_template (CLASSTYPE_TI_TEMPLATE (parm))))
9161     return NULL_TREE;
9162
9163   /* We need to make a new template argument vector for the call to
9164      unify.  If we used TARGS, we'd clutter it up with the result of
9165      the attempted unification, even if this class didn't work out.
9166      We also don't want to commit ourselves to all the unifications
9167      we've already done, since unification is supposed to be done on
9168      an argument-by-argument basis.  In other words, consider the
9169      following pathological case:
9170
9171        template <int I, int J, int K>
9172        struct S {};
9173        
9174        template <int I, int J>
9175        struct S<I, J, 2> : public S<I, I, I>, S<J, J, J> {};
9176        
9177        template <int I, int J, int K>
9178        void f(S<I, J, K>, S<I, I, I>);
9179        
9180        void g() {
9181          S<0, 0, 0> s0;
9182          S<0, 1, 2> s2;
9183        
9184          f(s0, s2);
9185        }
9186
9187      Now, by the time we consider the unification involving `s2', we
9188      already know that we must have `f<0, 0, 0>'.  But, even though
9189      `S<0, 1, 2>' is derived from `S<0, 0, 0>', the code is invalid
9190      because there are two ways to unify base classes of S<0, 1, 2>
9191      with S<I, I, I>.  If we kept the already deduced knowledge, we
9192      would reject the possibility I=1.  */
9193   copy_of_targs = make_tree_vec (TREE_VEC_LENGTH (targs));
9194   
9195   /* If unification failed, we're done.  */
9196   if (unify (tparms, copy_of_targs, CLASSTYPE_TI_ARGS (parm),
9197              CLASSTYPE_TI_ARGS (arg), UNIFY_ALLOW_NONE))
9198     return NULL_TREE;
9199
9200   return arg;
9201 }
9202
9203 /* Subroutine of get_template_base.  RVAL, if non-NULL, is a base we
9204    have already discovered to be satisfactory.  ARG_BINFO is the binfo
9205    for the base class of ARG that we are currently examining.  */
9206
9207 static tree
9208 get_template_base_recursive (tree tparms, 
9209                              tree targs, 
9210                              tree parm,
9211                              tree arg_binfo, 
9212                              tree rval, 
9213                              int flags)
9214 {
9215   tree binfos;
9216   int i, n_baselinks;
9217   tree arg = BINFO_TYPE (arg_binfo);
9218
9219   if (!(flags & GTB_IGNORE_TYPE))
9220     {
9221       tree r = try_class_unification (tparms, targs,
9222                                       parm, arg);
9223
9224       /* If there is more than one satisfactory baseclass, then:
9225
9226            [temp.deduct.call]
9227
9228            If they yield more than one possible deduced A, the type
9229            deduction fails.
9230
9231            applies.  */
9232       if (r && rval && !same_type_p (r, rval))
9233         return error_mark_node;
9234       else if (r)
9235         rval = r;
9236     }
9237
9238   binfos = BINFO_BASETYPES (arg_binfo);
9239   n_baselinks = binfos ? TREE_VEC_LENGTH (binfos) : 0;
9240
9241   /* Process base types.  */
9242   for (i = 0; i < n_baselinks; i++)
9243     {
9244       tree base_binfo = TREE_VEC_ELT (binfos, i);
9245       int this_virtual;
9246
9247       /* Skip this base, if we've already seen it.  */
9248       if (BINFO_MARKED (base_binfo))
9249         continue;
9250
9251       this_virtual = 
9252         (flags & GTB_VIA_VIRTUAL) || TREE_VIA_VIRTUAL (base_binfo);
9253       
9254       /* When searching for a non-virtual, we cannot mark virtually
9255          found binfos.  */
9256       if (! this_virtual)
9257         BINFO_MARKED (base_binfo) = 1;
9258       
9259       rval = get_template_base_recursive (tparms, targs,
9260                                           parm,
9261                                           base_binfo, 
9262                                           rval,
9263                                           GTB_VIA_VIRTUAL * this_virtual);
9264       
9265       /* If we discovered more than one matching base class, we can
9266          stop now.  */
9267       if (rval == error_mark_node)
9268         return error_mark_node;
9269     }
9270
9271   return rval;
9272 }
9273
9274 /* Given a template type PARM and a class type ARG, find the unique
9275    base type in ARG that is an instance of PARM.  We do not examine
9276    ARG itself; only its base-classes.  If there is no appropriate base
9277    class, return NULL_TREE.  If there is more than one, return
9278    error_mark_node.  PARM may be the type of a partial specialization,
9279    as well as a plain template type.  Used by unify.  */
9280
9281 static tree
9282 get_template_base (tree tparms, tree targs, tree parm, tree arg)
9283 {
9284   tree rval;
9285   tree arg_binfo;
9286
9287   my_friendly_assert (IS_AGGR_TYPE_CODE (TREE_CODE (arg)), 92);
9288   
9289   arg_binfo = TYPE_BINFO (complete_type (arg));
9290   rval = get_template_base_recursive (tparms, targs,
9291                                       parm, arg_binfo, 
9292                                       NULL_TREE,
9293                                       GTB_IGNORE_TYPE);
9294
9295   /* Since get_template_base_recursive marks the bases classes, we
9296      must unmark them here.  */
9297   dfs_walk (arg_binfo, dfs_unmark, markedp, 0);
9298
9299   return rval;
9300 }
9301
9302 /* Returns the level of DECL, which declares a template parameter.  */
9303
9304 static int
9305 template_decl_level (tree decl)
9306 {
9307   switch (TREE_CODE (decl))
9308     {
9309     case TYPE_DECL:
9310     case TEMPLATE_DECL:
9311       return TEMPLATE_TYPE_LEVEL (TREE_TYPE (decl));
9312
9313     case PARM_DECL:
9314       return TEMPLATE_PARM_LEVEL (DECL_INITIAL (decl));
9315
9316     default:
9317       abort ();
9318       return 0;
9319     }
9320 }
9321
9322 /* Decide whether ARG can be unified with PARM, considering only the
9323    cv-qualifiers of each type, given STRICT as documented for unify.
9324    Returns nonzero iff the unification is OK on that basis.*/
9325
9326 static int
9327 check_cv_quals_for_unify (int strict, tree arg, tree parm)
9328 {
9329   int arg_quals = cp_type_quals (arg);
9330   int parm_quals = cp_type_quals (parm);
9331
9332   if (TREE_CODE (parm) == TEMPLATE_TYPE_PARM)
9333     {
9334       /* If the cvr quals of parm will not unify with ARG, they'll be
9335          ignored in instantiation, so we have to do the same here.  */
9336       if (TREE_CODE (arg) == REFERENCE_TYPE)
9337         parm_quals &= ~(TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
9338       if (!POINTER_TYPE_P (arg) &&
9339           TREE_CODE (arg) != TEMPLATE_TYPE_PARM)
9340         parm_quals &= ~TYPE_QUAL_RESTRICT;
9341     }
9342   
9343   if (!(strict & (UNIFY_ALLOW_MORE_CV_QUAL | UNIFY_ALLOW_OUTER_MORE_CV_QUAL))
9344       && (arg_quals & parm_quals) != parm_quals)
9345     return 0;
9346
9347   if (!(strict & (UNIFY_ALLOW_LESS_CV_QUAL | UNIFY_ALLOW_OUTER_LESS_CV_QUAL))
9348       && (parm_quals & arg_quals) != arg_quals)
9349     return 0;
9350
9351   return 1;
9352 }
9353
9354 /* Takes parameters as for type_unification.  Returns 0 if the
9355    type deduction succeeds, 1 otherwise.  The parameter STRICT is a
9356    bitwise or of the following flags:
9357
9358      UNIFY_ALLOW_NONE:
9359        Require an exact match between PARM and ARG.
9360      UNIFY_ALLOW_MORE_CV_QUAL:
9361        Allow the deduced ARG to be more cv-qualified (by qualification
9362        conversion) than ARG.
9363      UNIFY_ALLOW_LESS_CV_QUAL:
9364        Allow the deduced ARG to be less cv-qualified than ARG.
9365      UNIFY_ALLOW_DERIVED:
9366        Allow the deduced ARG to be a template base class of ARG,
9367        or a pointer to a template base class of the type pointed to by
9368        ARG.
9369      UNIFY_ALLOW_INTEGER:
9370        Allow any integral type to be deduced.  See the TEMPLATE_PARM_INDEX
9371        case for more information. 
9372      UNIFY_ALLOW_OUTER_LEVEL:
9373        This is the outermost level of a deduction. Used to determine validity
9374        of qualification conversions. A valid qualification conversion must
9375        have const qualified pointers leading up to the inner type which
9376        requires additional CV quals, except at the outer level, where const
9377        is not required [conv.qual]. It would be normal to set this flag in
9378        addition to setting UNIFY_ALLOW_MORE_CV_QUAL.
9379      UNIFY_ALLOW_OUTER_MORE_CV_QUAL:
9380        This is the outermost level of a deduction, and PARM can be more CV
9381        qualified at this point.
9382      UNIFY_ALLOW_OUTER_LESS_CV_QUAL:
9383        This is the outermost level of a deduction, and PARM can be less CV
9384        qualified at this point.
9385      UNIFY_ALLOW_MAX_CORRECTION:
9386        This is an INTEGER_TYPE's maximum value.  Used if the range may
9387        have been derived from a size specification, such as an array size.
9388        If the size was given by a nontype template parameter N, the maximum
9389        value will have the form N-1.  The flag says that we can (and indeed
9390        must) unify N with (ARG + 1), an exception to the normal rules on
9391        folding PARM.  */
9392
9393 static int
9394 unify (tree tparms, tree targs, tree parm, tree arg, int strict)
9395 {
9396   int idx;
9397   tree targ;
9398   tree tparm;
9399   int strict_in = strict;
9400
9401   /* I don't think this will do the right thing with respect to types.
9402      But the only case I've seen it in so far has been array bounds, where
9403      signedness is the only information lost, and I think that will be
9404      okay.  */
9405   while (TREE_CODE (parm) == NOP_EXPR)
9406     parm = TREE_OPERAND (parm, 0);
9407
9408   if (arg == error_mark_node)
9409     return 1;
9410   if (arg == unknown_type_node)
9411     /* We can't deduce anything from this, but we might get all the
9412        template args from other function args.  */
9413     return 0;
9414
9415   /* If PARM uses template parameters, then we can't bail out here,
9416      even if ARG == PARM, since we won't record unifications for the
9417      template parameters.  We might need them if we're trying to
9418      figure out which of two things is more specialized.  */
9419   if (arg == parm && !uses_template_parms (parm))
9420     return 0;
9421
9422   /* Immediately reject some pairs that won't unify because of
9423      cv-qualification mismatches.  */
9424   if (TREE_CODE (arg) == TREE_CODE (parm)
9425       && TYPE_P (arg)
9426       /* It is the elements of the array which hold the cv quals of an array
9427          type, and the elements might be template type parms. We'll check
9428          when we recurse.  */
9429       && TREE_CODE (arg) != ARRAY_TYPE
9430       /* We check the cv-qualifiers when unifying with template type
9431          parameters below.  We want to allow ARG `const T' to unify with
9432          PARM `T' for example, when computing which of two templates
9433          is more specialized, for example.  */
9434       && TREE_CODE (arg) != TEMPLATE_TYPE_PARM
9435       && !check_cv_quals_for_unify (strict_in, arg, parm))
9436     return 1;
9437
9438   if (!(strict & UNIFY_ALLOW_OUTER_LEVEL)
9439       && TYPE_P (parm) && !CP_TYPE_CONST_P (parm))
9440     strict &= ~UNIFY_ALLOW_MORE_CV_QUAL;
9441   strict &= ~UNIFY_ALLOW_OUTER_LEVEL;
9442   strict &= ~UNIFY_ALLOW_DERIVED;
9443   strict &= ~UNIFY_ALLOW_OUTER_MORE_CV_QUAL;
9444   strict &= ~UNIFY_ALLOW_OUTER_LESS_CV_QUAL;
9445   strict &= ~UNIFY_ALLOW_MAX_CORRECTION;
9446   
9447   switch (TREE_CODE (parm))
9448     {
9449     case TYPENAME_TYPE:
9450     case SCOPE_REF:
9451     case UNBOUND_CLASS_TEMPLATE:
9452       /* In a type which contains a nested-name-specifier, template
9453          argument values cannot be deduced for template parameters used
9454          within the nested-name-specifier.  */
9455       return 0;
9456
9457     case TEMPLATE_TYPE_PARM:
9458     case TEMPLATE_TEMPLATE_PARM:
9459     case BOUND_TEMPLATE_TEMPLATE_PARM:
9460       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9461
9462       if (TEMPLATE_TYPE_LEVEL (parm)
9463           != template_decl_level (tparm))
9464         /* The PARM is not one we're trying to unify.  Just check
9465            to see if it matches ARG.  */
9466         return (TREE_CODE (arg) == TREE_CODE (parm)
9467                 && same_type_p (parm, arg)) ? 0 : 1;
9468       idx = TEMPLATE_TYPE_IDX (parm);
9469       targ = TREE_VEC_ELT (targs, idx);
9470       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, idx));
9471
9472       /* Check for mixed types and values.  */
9473       if ((TREE_CODE (parm) == TEMPLATE_TYPE_PARM
9474            && TREE_CODE (tparm) != TYPE_DECL)
9475           || (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM 
9476               && TREE_CODE (tparm) != TEMPLATE_DECL))
9477         return 1;
9478
9479       if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9480         {
9481           /* ARG must be constructed from a template class or a template
9482              template parameter.  */
9483           if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
9484               && (TREE_CODE (arg) != RECORD_TYPE || !CLASSTYPE_TEMPLATE_INFO (arg)))
9485             return 1;
9486
9487           {
9488             tree parmtmpl = TYPE_TI_TEMPLATE (parm);
9489             tree parmvec = TYPE_TI_ARGS (parm);
9490             tree argvec = TYPE_TI_ARGS (arg);
9491             tree argtmplvec
9492               = DECL_INNERMOST_TEMPLATE_PARMS (TYPE_TI_TEMPLATE (arg));
9493             int i;
9494
9495             /* The parameter and argument roles have to be switched here 
9496                in order to handle default arguments properly.  For example, 
9497                template<template <class> class TT> void f(TT<int>) 
9498                should be able to accept vector<int> which comes from 
9499                template <class T, class Allocator = allocator> 
9500                class vector.  */
9501
9502             if (coerce_template_parms (argtmplvec, parmvec, parmtmpl, 0, 1)
9503                 == error_mark_node)
9504               return 1;
9505           
9506             /* Deduce arguments T, i from TT<T> or TT<i>.  
9507                We check each element of PARMVEC and ARGVEC individually
9508                rather than the whole TREE_VEC since they can have
9509                different number of elements.  */
9510
9511             for (i = 0; i < TREE_VEC_LENGTH (parmvec); ++i)
9512               {
9513                 tree t = TREE_VEC_ELT (parmvec, i);
9514
9515                 if (unify (tparms, targs, t, 
9516                            TREE_VEC_ELT (argvec, i), 
9517                            UNIFY_ALLOW_NONE))
9518                   return 1;
9519               }
9520           }
9521           arg = TYPE_TI_TEMPLATE (arg);
9522
9523           /* Fall through to deduce template name.  */
9524         }
9525
9526       if (TREE_CODE (parm) == TEMPLATE_TEMPLATE_PARM
9527           || TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
9528         {
9529           /* Deduce template name TT from TT, TT<>, TT<T> and TT<i>.  */
9530
9531           /* Simple cases: Value already set, does match or doesn't.  */
9532           if (targ != NULL_TREE && template_args_equal (targ, arg))
9533             return 0;
9534           else if (targ)
9535             return 1;
9536         }
9537       else
9538         {
9539           /* If ARG is an offset type, we're trying to unify '*T' with
9540              'U C::*', which is ill-formed. See the comment in the
9541              POINTER_TYPE case about this ugliness.  */
9542           if (TREE_CODE (arg) == OFFSET_TYPE)
9543             return 1;
9544           
9545           /* If PARM is `const T' and ARG is only `int', we don't have
9546              a match unless we are allowing additional qualification.
9547              If ARG is `const int' and PARM is just `T' that's OK;
9548              that binds `const int' to `T'.  */
9549           if (!check_cv_quals_for_unify (strict_in | UNIFY_ALLOW_LESS_CV_QUAL, 
9550                                          arg, parm))
9551             return 1;
9552
9553           /* Consider the case where ARG is `const volatile int' and
9554              PARM is `const T'.  Then, T should be `volatile int'.  */
9555           arg = cp_build_qualified_type_real
9556             (arg, cp_type_quals (arg) & ~cp_type_quals (parm), tf_none);
9557           if (arg == error_mark_node)
9558             return 1;
9559
9560           /* Simple cases: Value already set, does match or doesn't.  */
9561           if (targ != NULL_TREE && same_type_p (targ, arg))
9562             return 0;
9563           else if (targ)
9564             return 1;
9565
9566           /* Make sure that ARG is not a variable-sized array.  (Note
9567              that were talking about variable-sized arrays (like
9568              `int[n]'), rather than arrays of unknown size (like
9569              `int[]').)  We'll get very confused by such a type since
9570              the bound of the array will not be computable in an
9571              instantiation.  Besides, such types are not allowed in
9572              ISO C++, so we can do as we please here.  */
9573           if (variably_modified_type_p (arg))
9574             return 1;
9575         }
9576
9577       TREE_VEC_ELT (targs, idx) = arg;
9578       return 0;
9579
9580     case TEMPLATE_PARM_INDEX:
9581       tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0));
9582
9583       if (TEMPLATE_PARM_LEVEL (parm) 
9584           != template_decl_level (tparm))
9585         /* The PARM is not one we're trying to unify.  Just check
9586            to see if it matches ARG.  */
9587         return !(TREE_CODE (arg) == TREE_CODE (parm)
9588                  && cp_tree_equal (parm, arg));
9589
9590       idx = TEMPLATE_PARM_IDX (parm);
9591       targ = TREE_VEC_ELT (targs, idx);
9592
9593       if (targ)
9594         return !cp_tree_equal (targ, arg);
9595
9596       /* [temp.deduct.type] If, in the declaration of a function template
9597          with a non-type template-parameter, the non-type
9598          template-parameter is used in an expression in the function
9599          parameter-list and, if the corresponding template-argument is
9600          deduced, the template-argument type shall match the type of the
9601          template-parameter exactly, except that a template-argument
9602          deduced from an array bound may be of any integral type. 
9603          The non-type parameter might use already deduced type parameters.  */
9604       tparm = tsubst (TREE_TYPE (parm), targs, 0, NULL_TREE);
9605       if (!TREE_TYPE (arg))
9606         /* Template-parameter dependent expression.  Just accept it for now.
9607            It will later be processed in convert_template_argument.  */
9608         ;
9609       else if (same_type_p (TREE_TYPE (arg), tparm))
9610         /* OK */;
9611       else if ((strict & UNIFY_ALLOW_INTEGER)
9612                && (TREE_CODE (tparm) == INTEGER_TYPE
9613                    || TREE_CODE (tparm) == BOOLEAN_TYPE))
9614         /* OK */;
9615       else if (uses_template_parms (tparm))
9616         /* We haven't deduced the type of this parameter yet.  Try again
9617            later.  */
9618         return 0;
9619       else
9620         return 1;
9621
9622       TREE_VEC_ELT (targs, idx) = arg;
9623       return 0;
9624
9625     case POINTER_TYPE:
9626       {
9627         if (TREE_CODE (arg) != POINTER_TYPE)
9628           return 1;
9629         
9630         /* [temp.deduct.call]
9631
9632            A can be another pointer or pointer to member type that can
9633            be converted to the deduced A via a qualification
9634            conversion (_conv.qual_).
9635
9636            We pass down STRICT here rather than UNIFY_ALLOW_NONE.
9637            This will allow for additional cv-qualification of the
9638            pointed-to types if appropriate.  */
9639         
9640         if (TREE_CODE (TREE_TYPE (arg)) == RECORD_TYPE)
9641           /* The derived-to-base conversion only persists through one
9642              level of pointers.  */
9643           strict |= (strict_in & UNIFY_ALLOW_DERIVED);
9644
9645         if (TREE_CODE (TREE_TYPE (parm)) == OFFSET_TYPE
9646             && TREE_CODE (TREE_TYPE (arg)) == OFFSET_TYPE)
9647           {
9648             /* Avoid getting confused about cv-quals; don't recurse here.
9649                Pointers to members should really be just OFFSET_TYPE, not
9650                this two-level nonsense...  */
9651
9652             parm = TREE_TYPE (parm);
9653             arg = TREE_TYPE (arg);
9654             goto offset;
9655           }
9656
9657         return unify (tparms, targs, TREE_TYPE (parm), 
9658                       TREE_TYPE (arg), strict);
9659       }
9660
9661     case REFERENCE_TYPE:
9662       if (TREE_CODE (arg) != REFERENCE_TYPE)
9663         return 1;
9664       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9665                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
9666
9667     case ARRAY_TYPE:
9668       if (TREE_CODE (arg) != ARRAY_TYPE)
9669         return 1;
9670       if ((TYPE_DOMAIN (parm) == NULL_TREE)
9671           != (TYPE_DOMAIN (arg) == NULL_TREE))
9672         return 1;
9673       if (TYPE_DOMAIN (parm) != NULL_TREE
9674           && unify (tparms, targs, TYPE_DOMAIN (parm),
9675                     TYPE_DOMAIN (arg), UNIFY_ALLOW_NONE) != 0)
9676         return 1;
9677       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9678                     strict & UNIFY_ALLOW_MORE_CV_QUAL);
9679
9680     case REAL_TYPE:
9681     case COMPLEX_TYPE:
9682     case VECTOR_TYPE:
9683     case INTEGER_TYPE:
9684     case BOOLEAN_TYPE:
9685     case VOID_TYPE:
9686       if (TREE_CODE (arg) != TREE_CODE (parm))
9687         return 1;
9688
9689       if (TREE_CODE (parm) == INTEGER_TYPE
9690           && TREE_CODE (TYPE_MAX_VALUE (parm)) != INTEGER_CST)
9691         {
9692           if (TYPE_MIN_VALUE (parm) && TYPE_MIN_VALUE (arg)
9693               && unify (tparms, targs, TYPE_MIN_VALUE (parm),
9694                         TYPE_MIN_VALUE (arg), UNIFY_ALLOW_INTEGER))
9695             return 1;
9696           if (TYPE_MAX_VALUE (parm) && TYPE_MAX_VALUE (arg)
9697               && unify (tparms, targs, TYPE_MAX_VALUE (parm),
9698                         TYPE_MAX_VALUE (arg),
9699                         UNIFY_ALLOW_INTEGER | UNIFY_ALLOW_MAX_CORRECTION))
9700             return 1;
9701         }
9702       /* We have already checked cv-qualification at the top of the
9703          function.  */
9704       else if (!same_type_ignoring_top_level_qualifiers_p (arg, parm))
9705         return 1;
9706
9707       /* As far as unification is concerned, this wins.  Later checks
9708          will invalidate it if necessary.  */
9709       return 0;
9710
9711       /* Types INTEGER_CST and MINUS_EXPR can come from array bounds.  */
9712       /* Type INTEGER_CST can come from ordinary constant template args.  */
9713     case INTEGER_CST:
9714       while (TREE_CODE (arg) == NOP_EXPR)
9715         arg = TREE_OPERAND (arg, 0);
9716
9717       if (TREE_CODE (arg) != INTEGER_CST)
9718         return 1;
9719       return !tree_int_cst_equal (parm, arg);
9720
9721     case TREE_VEC:
9722       {
9723         int i;
9724         if (TREE_CODE (arg) != TREE_VEC)
9725           return 1;
9726         if (TREE_VEC_LENGTH (parm) != TREE_VEC_LENGTH (arg))
9727           return 1;
9728         for (i = 0; i < TREE_VEC_LENGTH (parm); ++i)
9729           if (unify (tparms, targs,
9730                      TREE_VEC_ELT (parm, i), TREE_VEC_ELT (arg, i),
9731                      UNIFY_ALLOW_NONE))
9732             return 1;
9733         return 0;
9734       }
9735
9736     case RECORD_TYPE:
9737     case UNION_TYPE:
9738       if (TREE_CODE (arg) != TREE_CODE (parm))
9739         return 1;
9740   
9741       if (TYPE_PTRMEMFUNC_P (parm))
9742         {
9743           if (!TYPE_PTRMEMFUNC_P (arg))
9744             return 1;
9745
9746           return unify (tparms, targs, 
9747                         TYPE_PTRMEMFUNC_FN_TYPE (parm),
9748                         TYPE_PTRMEMFUNC_FN_TYPE (arg),
9749                         strict);
9750         }
9751
9752       if (CLASSTYPE_TEMPLATE_INFO (parm))
9753         {
9754           tree t = NULL_TREE;
9755
9756           if (strict_in & UNIFY_ALLOW_DERIVED)
9757             {
9758               /* First, we try to unify the PARM and ARG directly.  */
9759               t = try_class_unification (tparms, targs,
9760                                          parm, arg);
9761
9762               if (!t)
9763                 {
9764                   /* Fallback to the special case allowed in
9765                      [temp.deduct.call]:
9766                      
9767                        If P is a class, and P has the form
9768                        template-id, then A can be a derived class of
9769                        the deduced A.  Likewise, if P is a pointer to
9770                        a class of the form template-id, A can be a
9771                        pointer to a derived class pointed to by the
9772                        deduced A.  */
9773                   t = get_template_base (tparms, targs,
9774                                          parm, arg);
9775
9776                   if (! t || t == error_mark_node)
9777                     return 1;
9778                 }
9779             }
9780           else if (CLASSTYPE_TEMPLATE_INFO (arg) 
9781                    && (CLASSTYPE_TI_TEMPLATE (parm) 
9782                        == CLASSTYPE_TI_TEMPLATE (arg)))
9783             /* Perhaps PARM is something like S<U> and ARG is S<int>.
9784                Then, we should unify `int' and `U'.  */
9785             t = arg;
9786           else
9787             /* There's no chance of unification succeeding.  */
9788             return 1;
9789
9790           return unify (tparms, targs, CLASSTYPE_TI_ARGS (parm),
9791                         CLASSTYPE_TI_ARGS (t), UNIFY_ALLOW_NONE);
9792         }
9793       else if (!same_type_ignoring_top_level_qualifiers_p (parm, arg))
9794         return 1;
9795       return 0;
9796
9797     case METHOD_TYPE:
9798     case FUNCTION_TYPE:
9799       if (TREE_CODE (arg) != TREE_CODE (parm))
9800         return 1;
9801
9802       if (unify (tparms, targs, TREE_TYPE (parm),
9803                  TREE_TYPE (arg), UNIFY_ALLOW_NONE))
9804         return 1;
9805       return type_unification_real (tparms, targs, TYPE_ARG_TYPES (parm),
9806                                     TYPE_ARG_TYPES (arg), 1, 
9807                                     DEDUCE_EXACT, 0, -1);
9808
9809     case OFFSET_TYPE:
9810     offset:
9811       if (TREE_CODE (arg) != OFFSET_TYPE)
9812         return 1;
9813       if (unify (tparms, targs, TYPE_OFFSET_BASETYPE (parm),
9814                  TYPE_OFFSET_BASETYPE (arg), UNIFY_ALLOW_NONE))
9815         return 1;
9816       return unify (tparms, targs, TREE_TYPE (parm), TREE_TYPE (arg),
9817                     strict);
9818
9819     case CONST_DECL:
9820       if (DECL_TEMPLATE_PARM_P (parm))
9821         return unify (tparms, targs, DECL_INITIAL (parm), arg, strict);
9822       if (arg != decl_constant_value (parm)) 
9823         return 1;
9824       return 0;
9825
9826     case TEMPLATE_DECL:
9827       /* Matched cases are handled by the ARG == PARM test above.  */
9828       return 1;
9829
9830     case MINUS_EXPR:
9831       if (tree_int_cst_equal (TREE_OPERAND (parm, 1), integer_one_node)
9832           && (strict_in & UNIFY_ALLOW_MAX_CORRECTION))
9833         {
9834           /* We handle this case specially, since it comes up with
9835              arrays.  In particular, something like:
9836
9837              template <int N> void f(int (&x)[N]);
9838
9839              Here, we are trying to unify the range type, which
9840              looks like [0 ... (N - 1)].  */
9841           tree t, t1, t2;
9842           t1 = TREE_OPERAND (parm, 0);
9843           t2 = TREE_OPERAND (parm, 1);
9844
9845           t = fold (build (PLUS_EXPR, integer_type_node, arg, t2));
9846
9847           return unify (tparms, targs, t1, t, strict);
9848         }
9849       /* else fall through */
9850
9851     default:
9852       if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (parm))))
9853         {
9854
9855           /* We're looking at an expression.  This can happen with
9856              something like: 
9857            
9858                template <int I>
9859                void foo(S<I>, S<I + 2>);
9860
9861              This is a "nondeduced context":
9862
9863                [deduct.type]
9864            
9865                The nondeduced contexts are:
9866
9867                --A type that is a template-id in which one or more of
9868                  the template-arguments is an expression that references
9869                  a template-parameter.  
9870
9871              In these cases, we assume deduction succeeded, but don't
9872              actually infer any unifications.  */
9873
9874           if (!uses_template_parms (parm)
9875               && !template_args_equal (parm, arg))
9876             return 1;
9877           else
9878             return 0;
9879         }
9880       else
9881         sorry ("use of `%s' in template type unification",
9882                tree_code_name [(int) TREE_CODE (parm)]);
9883
9884       return 1;
9885     }
9886 }
9887 \f
9888 /* Called if RESULT is explicitly instantiated, or is a member of an
9889    explicitly instantiated class, or if using -frepo and the
9890    instantiation of RESULT has been assigned to this file.  */
9891
9892 void
9893 mark_decl_instantiated (tree result, int extern_p)
9894 {
9895   /* We used to set this unconditionally; we moved that to
9896      do_decl_instantiation so it wouldn't get set on members of
9897      explicit class template instantiations.  But we still need to set
9898      it here for the 'extern template' case in order to suppress
9899      implicit instantiations.  */
9900   if (extern_p)
9901     SET_DECL_EXPLICIT_INSTANTIATION (result);
9902
9903   /* If this entity has already been written out, it's too late to
9904      make any modifications.  */
9905   if (TREE_ASM_WRITTEN (result))
9906     return;
9907
9908   if (TREE_CODE (result) != FUNCTION_DECL)
9909     /* The TREE_PUBLIC flag for function declarations will have been
9910        set correctly by tsubst.  */
9911     TREE_PUBLIC (result) = 1;
9912
9913   /* This might have been set by an earlier implicit instantiation.  */
9914   DECL_COMDAT (result) = 0;
9915
9916   if (! extern_p)
9917     {
9918       DECL_INTERFACE_KNOWN (result) = 1;
9919       DECL_NOT_REALLY_EXTERN (result) = 1;
9920
9921       /* Always make artificials weak.  */
9922       if (DECL_ARTIFICIAL (result) && flag_weak)
9923         comdat_linkage (result);
9924       /* For WIN32 we also want to put explicit instantiations in
9925          linkonce sections.  */
9926       else if (TREE_PUBLIC (result))
9927         maybe_make_one_only (result);
9928     }
9929
9930   if (TREE_CODE (result) == FUNCTION_DECL)
9931     defer_fn (result);
9932 }
9933
9934 /* Given two function templates PAT1 and PAT2, return:
9935
9936    DEDUCE should be DEDUCE_EXACT or DEDUCE_ORDER.
9937    
9938    1 if PAT1 is more specialized than PAT2 as described in [temp.func.order].
9939    -1 if PAT2 is more specialized than PAT1.
9940    0 if neither is more specialized.
9941
9942    LEN is passed through to fn_type_unification.  */
9943    
9944 int
9945 more_specialized (tree pat1, tree pat2, int deduce, int len)
9946 {
9947   tree targs;
9948   int winner = 0;
9949
9950   targs = get_bindings_real (pat1, DECL_TEMPLATE_RESULT (pat2),
9951                              NULL_TREE, 0, deduce, len);
9952   if (targs)
9953     --winner;
9954
9955   targs = get_bindings_real (pat2, DECL_TEMPLATE_RESULT (pat1),
9956                              NULL_TREE, 0, deduce, len);
9957   if (targs)
9958     ++winner;
9959
9960   return winner;
9961 }
9962
9963 /* Given two class template specialization list nodes PAT1 and PAT2, return:
9964
9965    1 if PAT1 is more specialized than PAT2 as described in [temp.class.order].
9966    -1 if PAT2 is more specialized than PAT1.
9967    0 if neither is more specialized.
9968
9969    FULL_ARGS is the full set of template arguments that triggers this
9970    partial ordering.  */
9971    
9972 int
9973 more_specialized_class (tree pat1, tree pat2, tree full_args)
9974 {
9975   tree targs;
9976   int winner = 0;
9977
9978   targs = get_class_bindings (TREE_VALUE (pat1), TREE_PURPOSE (pat1),
9979                               add_outermost_template_args (full_args, TREE_PURPOSE (pat2)));
9980   if (targs)
9981     --winner;
9982
9983   targs = get_class_bindings (TREE_VALUE (pat2), TREE_PURPOSE (pat2),
9984                               add_outermost_template_args (full_args, TREE_PURPOSE (pat1)));
9985   if (targs)
9986     ++winner;
9987
9988   return winner;
9989 }
9990
9991 /* Return the template arguments that will produce the function signature
9992    DECL from the function template FN, with the explicit template
9993    arguments EXPLICIT_ARGS.  If CHECK_RETTYPE is 1, the return type must
9994    also match.  Return NULL_TREE if no satisfactory arguments could be
9995    found.  DEDUCE and LEN are passed through to fn_type_unification.  */
9996    
9997 static tree
9998 get_bindings_real (tree fn, 
9999                    tree decl, 
10000                    tree explicit_args, 
10001                    int check_rettype, 
10002                    int deduce, 
10003                    int len)
10004 {
10005   int ntparms = DECL_NTPARMS (fn);
10006   tree targs = make_tree_vec (ntparms);
10007   tree decl_type;
10008   tree decl_arg_types;
10009   int i;
10010
10011   /* Substitute the explicit template arguments into the type of DECL.
10012      The call to fn_type_unification will handle substitution into the
10013      FN.  */
10014   decl_type = TREE_TYPE (decl);
10015   if (explicit_args && uses_template_parms (decl_type))
10016     {
10017       tree tmpl;
10018       tree converted_args;
10019
10020       if (DECL_TEMPLATE_INFO (decl))
10021         tmpl = DECL_TI_TEMPLATE (decl);
10022       else
10023         /* We can get here for some invalid specializations.  */
10024         return NULL_TREE;
10025
10026       converted_args
10027         = (coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
10028                                   explicit_args, NULL_TREE,
10029                                   tf_none, /*require_all_arguments=*/0));
10030       if (converted_args == error_mark_node)
10031         return NULL_TREE;
10032       
10033       decl_type = tsubst (decl_type, converted_args, tf_none, NULL_TREE); 
10034       if (decl_type == error_mark_node)
10035         return NULL_TREE;
10036     }
10037
10038   decl_arg_types = TYPE_ARG_TYPES (decl_type);
10039   /* Never do unification on the 'this' parameter.  */
10040   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
10041     decl_arg_types = TREE_CHAIN (decl_arg_types);
10042
10043   i = fn_type_unification (fn, explicit_args, targs, 
10044                            decl_arg_types,
10045                            (check_rettype || DECL_CONV_FN_P (fn)
10046                             ? TREE_TYPE (decl_type) : NULL_TREE),
10047                            deduce, len);
10048
10049   if (i != 0)
10050     return NULL_TREE;
10051
10052   return targs;
10053 }
10054
10055 /* For most uses, we want to check the return type.  */
10056
10057 tree 
10058 get_bindings (tree fn, tree decl, tree explicit_args)
10059 {
10060   return get_bindings_real (fn, decl, explicit_args, 1, DEDUCE_EXACT, -1);
10061 }
10062
10063 /* But for resolve_overloaded_unification, we only care about the parameter
10064    types.  */
10065
10066 static tree
10067 get_bindings_overload (tree fn, tree decl, tree explicit_args)
10068 {
10069   return get_bindings_real (fn, decl, explicit_args, 0, DEDUCE_EXACT, -1);
10070 }
10071
10072 /* Return the innermost template arguments that, when applied to a
10073    template specialization whose innermost template parameters are
10074    TPARMS, and whose specialization arguments are PARMS, yield the
10075    ARGS.  
10076
10077    For example, suppose we have:
10078
10079      template <class T, class U> struct S {};
10080      template <class T> struct S<T*, int> {};
10081
10082    Then, suppose we want to get `S<double*, int>'.  The TPARMS will be
10083    {T}, the PARMS will be {T*, int} and the ARGS will be {double*,
10084    int}.  The resulting vector will be {double}, indicating that `T'
10085    is bound to `double'.  */
10086
10087 static tree
10088 get_class_bindings (tree tparms, tree parms, tree args)
10089 {
10090   int i, ntparms = TREE_VEC_LENGTH (tparms);
10091   tree vec = make_tree_vec (ntparms);
10092
10093   if (unify (tparms, vec, parms, INNERMOST_TEMPLATE_ARGS (args),
10094              UNIFY_ALLOW_NONE))
10095     return NULL_TREE;
10096
10097   for (i =  0; i < ntparms; ++i)
10098     if (! TREE_VEC_ELT (vec, i))
10099       return NULL_TREE;
10100
10101   if (verify_class_unification (vec, parms, args))
10102     return NULL_TREE;
10103
10104   return vec;
10105 }
10106
10107 /* In INSTANTIATIONS is a list of <INSTANTIATION, TEMPLATE> pairs.
10108    Pick the most specialized template, and return the corresponding
10109    instantiation, or if there is no corresponding instantiation, the
10110    template itself.  If there is no most specialized template,
10111    error_mark_node is returned.  If there are no templates at all,
10112    NULL_TREE is returned.  */
10113
10114 tree
10115 most_specialized_instantiation (tree instantiations)
10116 {
10117   tree fn, champ;
10118   int fate;
10119
10120   if (!instantiations)
10121     return NULL_TREE;
10122
10123   champ = instantiations;
10124   for (fn = TREE_CHAIN (instantiations); fn; fn = TREE_CHAIN (fn))
10125     {
10126       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10127                                DEDUCE_EXACT, -1);
10128       if (fate == 1)
10129         ;
10130       else
10131         {
10132           if (fate == 0)
10133             {
10134               fn = TREE_CHAIN (fn);
10135               if (! fn)
10136                 return error_mark_node;
10137             }
10138           champ = fn;
10139         }
10140     }
10141
10142   for (fn = instantiations; fn && fn != champ; fn = TREE_CHAIN (fn))
10143     {
10144       fate = more_specialized (TREE_VALUE (champ), TREE_VALUE (fn),
10145                                DEDUCE_EXACT, -1);
10146       if (fate != 1)
10147         return error_mark_node;
10148     }
10149
10150   return TREE_PURPOSE (champ) ? TREE_PURPOSE (champ) : TREE_VALUE (champ);
10151 }
10152
10153 /* Return the most specialized of the list of templates in FNS that can
10154    produce an instantiation matching DECL, given the explicit template
10155    arguments EXPLICIT_ARGS.  */
10156
10157 static tree
10158 most_specialized (tree fns, tree decl, tree explicit_args)
10159 {
10160   tree candidates = NULL_TREE;
10161   tree fn, args;
10162
10163   for (fn = fns; fn; fn = TREE_CHAIN (fn))
10164     {
10165       tree candidate = TREE_VALUE (fn);
10166
10167       args = get_bindings (candidate, decl, explicit_args);
10168       if (args)
10169         candidates = tree_cons (NULL_TREE, candidate, candidates);
10170     }
10171
10172   return most_specialized_instantiation (candidates);
10173 }
10174
10175 /* If DECL is a specialization of some template, return the most
10176    general such template.  Otherwise, returns NULL_TREE.
10177
10178    For example, given:
10179
10180      template <class T> struct S { template <class U> void f(U); };
10181
10182    if TMPL is `template <class U> void S<int>::f(U)' this will return
10183    the full template.  This function will not trace past partial
10184    specializations, however.  For example, given in addition:
10185
10186      template <class T> struct S<T*> { template <class U> void f(U); };
10187
10188    if TMPL is `template <class U> void S<int*>::f(U)' this will return
10189    `template <class T> template <class U> S<T*>::f(U)'.  */
10190
10191 tree
10192 most_general_template (tree decl)
10193 {
10194   /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is
10195      an immediate specialization.  */
10196   if (TREE_CODE (decl) == FUNCTION_DECL)
10197     {
10198       if (DECL_TEMPLATE_INFO (decl)) {
10199         decl = DECL_TI_TEMPLATE (decl);
10200
10201         /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a
10202            template friend.  */
10203         if (TREE_CODE (decl) != TEMPLATE_DECL)
10204           return NULL_TREE;
10205       } else
10206         return NULL_TREE;
10207     }
10208
10209   /* Look for more and more general templates.  */
10210   while (DECL_TEMPLATE_INFO (decl))
10211     {
10212       /* The DECL_TI_TEMPLATE can be a LOOKUP_EXPR or IDENTIFIER_NODE
10213          in some cases.  (See cp-tree.h for details.)  */
10214       if (TREE_CODE (DECL_TI_TEMPLATE (decl)) != TEMPLATE_DECL)
10215         break;
10216
10217       if (CLASS_TYPE_P (TREE_TYPE (decl))
10218           && CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (decl)))
10219         break;
10220
10221       /* Stop if we run into an explicitly specialized class template.  */
10222       if (!DECL_NAMESPACE_SCOPE_P (decl)
10223           && DECL_CONTEXT (decl)
10224           && CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (decl)))
10225         break;
10226
10227       decl = DECL_TI_TEMPLATE (decl);
10228     }
10229
10230   return decl;
10231 }
10232
10233 /* Return the most specialized of the class template specializations
10234    of TMPL which can produce an instantiation matching ARGS, or
10235    error_mark_node if the choice is ambiguous.  */
10236
10237 static tree
10238 most_specialized_class (tree tmpl, tree args)
10239 {
10240   tree list = NULL_TREE;
10241   tree t;
10242   tree champ;
10243   int fate;
10244
10245   tmpl = most_general_template (tmpl);
10246   for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
10247     {
10248       tree spec_args 
10249         = get_class_bindings (TREE_VALUE (t), TREE_PURPOSE (t), args);
10250       if (spec_args)
10251         {
10252           list = tree_cons (TREE_PURPOSE (t), TREE_VALUE (t), list);
10253           TREE_TYPE (list) = TREE_TYPE (t);
10254         }
10255     }
10256
10257   if (! list)
10258     return NULL_TREE;
10259
10260   t = list;
10261   champ = t;
10262   t = TREE_CHAIN (t);
10263   for (; t; t = TREE_CHAIN (t))
10264     {
10265       fate = more_specialized_class (champ, t, args);
10266       if (fate == 1)
10267         ;
10268       else
10269         {
10270           if (fate == 0)
10271             {
10272               t = TREE_CHAIN (t);
10273               if (! t)
10274                 return error_mark_node;
10275             }
10276           champ = t;
10277         }
10278     }
10279
10280   for (t = list; t && t != champ; t = TREE_CHAIN (t))
10281     {
10282       fate = more_specialized_class (champ, t, args);
10283       if (fate != 1)
10284         return error_mark_node;
10285     }
10286
10287   return champ;
10288 }
10289
10290 /* Explicitly instantiate DECL.  */
10291
10292 void
10293 do_decl_instantiation (tree decl, tree storage)
10294 {
10295   tree result = NULL_TREE;
10296   int extern_p = 0;
10297
10298   if (!decl)
10299     /* An error occurred, for which grokdeclarator has already issued
10300        an appropriate message.  */
10301     return;
10302   else if (! DECL_LANG_SPECIFIC (decl))
10303     {
10304       error ("explicit instantiation of non-template `%#D'", decl);
10305       return;
10306     }
10307   else if (TREE_CODE (decl) == VAR_DECL)
10308     {
10309       /* There is an asymmetry here in the way VAR_DECLs and
10310          FUNCTION_DECLs are handled by grokdeclarator.  In the case of
10311          the latter, the DECL we get back will be marked as a
10312          template instantiation, and the appropriate
10313          DECL_TEMPLATE_INFO will be set up.  This does not happen for
10314          VAR_DECLs so we do the lookup here.  Probably, grokdeclarator
10315          should handle VAR_DECLs as it currently handles
10316          FUNCTION_DECLs.  */
10317       result = lookup_field (DECL_CONTEXT (decl), DECL_NAME (decl), 0, false);
10318       if (!result || TREE_CODE (result) != VAR_DECL)
10319         {
10320           error ("no matching template for `%D' found", decl);
10321           return;
10322         }
10323     }
10324   else if (TREE_CODE (decl) != FUNCTION_DECL)
10325     {
10326       error ("explicit instantiation of `%#D'", decl);
10327       return;
10328     }
10329   else
10330     result = decl;
10331
10332   /* Check for various error cases.  Note that if the explicit
10333      instantiation is valid the RESULT will currently be marked as an
10334      *implicit* instantiation; DECL_EXPLICIT_INSTANTIATION is not set
10335      until we get here.  */
10336
10337   if (DECL_TEMPLATE_SPECIALIZATION (result))
10338     {
10339       /* DR 259 [temp.spec].
10340
10341          Both an explicit instantiation and a declaration of an explicit
10342          specialization shall not appear in a program unless the explicit
10343          instantiation follows a declaration of the explicit specialization.
10344
10345          For a given set of template parameters, if an explicit
10346          instantiation of a template appears after a declaration of an
10347          explicit specialization for that template, the explicit
10348          instantiation has no effect.  */
10349       return;
10350     }
10351   else if (DECL_EXPLICIT_INSTANTIATION (result))
10352     {
10353       /* [temp.spec]
10354
10355          No program shall explicitly instantiate any template more
10356          than once.  
10357
10358          We check DECL_INTERFACE_KNOWN so as not to complain when the first
10359          instantiation was `extern' and the second is not, and EXTERN_P for
10360          the opposite case.  If -frepo, chances are we already got marked
10361          as an explicit instantiation because of the repo file.  */
10362       if (DECL_INTERFACE_KNOWN (result) && !extern_p && !flag_use_repository)
10363         pedwarn ("duplicate explicit instantiation of `%#D'", result);
10364
10365       /* If we've already instantiated the template, just return now.  */
10366       if (DECL_INTERFACE_KNOWN (result))
10367         return;
10368     }
10369   else if (!DECL_IMPLICIT_INSTANTIATION (result))
10370     {
10371       error ("no matching template for `%D' found", result);
10372       return;
10373     }
10374   else if (!DECL_TEMPLATE_INFO (result))
10375     {
10376       pedwarn ("explicit instantiation of non-template `%#D'", result);
10377       return;
10378     }
10379
10380   if (flag_external_templates)
10381     return;
10382
10383   if (storage == NULL_TREE)
10384     ;
10385   else if (storage == ridpointers[(int) RID_EXTERN])
10386     {
10387       if (pedantic && !in_system_header)
10388         pedwarn ("ISO C++ forbids the use of `extern' on explicit instantiations");
10389       extern_p = 1;
10390     }
10391   else
10392     error ("storage class `%D' applied to template instantiation",
10393               storage);
10394
10395   SET_DECL_EXPLICIT_INSTANTIATION (result);
10396   mark_decl_instantiated (result, extern_p);
10397   repo_template_instantiated (result, extern_p);
10398   if (! extern_p)
10399     instantiate_decl (result, /*defer_ok=*/1);
10400 }
10401
10402 void
10403 mark_class_instantiated (tree t, int extern_p)
10404 {
10405   SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t);
10406   SET_CLASSTYPE_INTERFACE_KNOWN (t);
10407   CLASSTYPE_INTERFACE_ONLY (t) = extern_p;
10408   TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p;
10409   if (! extern_p)
10410     {
10411       CLASSTYPE_DEBUG_REQUESTED (t) = 1;
10412       rest_of_type_compilation (t, 1);
10413     }
10414 }     
10415
10416 /* Called from do_type_instantiation through binding_table_foreach to
10417    do recursive instantiation for the type bound in ENTRY.  */
10418 static void
10419 bt_instantiate_type_proc (binding_entry entry, void *data)
10420 {
10421   tree storage = *(tree *) data;
10422
10423   if (IS_AGGR_TYPE (entry->type)
10424       && !uses_template_parms (CLASSTYPE_TI_ARGS (entry->type)))
10425     do_type_instantiation (TYPE_MAIN_DECL (entry->type), storage, 0);
10426 }
10427
10428 /* Perform an explicit instantiation of template class T.  STORAGE, if
10429    non-null, is the RID for extern, inline or static.  COMPLAIN is
10430    nonzero if this is called from the parser, zero if called recursively,
10431    since the standard is unclear (as detailed below).  */
10432  
10433 void
10434 do_type_instantiation (tree t, tree storage, tsubst_flags_t complain)
10435 {
10436   int extern_p = 0;
10437   int nomem_p = 0;
10438   int static_p = 0;
10439
10440   if (TREE_CODE (t) == TYPE_DECL)
10441     t = TREE_TYPE (t);
10442
10443   if (! CLASS_TYPE_P (t) || ! CLASSTYPE_TEMPLATE_INFO (t))
10444     {
10445       error ("explicit instantiation of non-template type `%T'", t);
10446       return;
10447     }
10448
10449   complete_type (t);
10450
10451   /* With -fexternal-templates, explicit instantiations are treated the same
10452      as implicit ones.  */
10453   if (flag_external_templates)
10454     return;
10455
10456   if (!COMPLETE_TYPE_P (t))
10457     {
10458       if (complain & tf_error)
10459         error ("explicit instantiation of `%#T' before definition of template",
10460                   t);
10461       return;
10462     }
10463
10464   if (storage != NULL_TREE)
10465     {
10466       if (pedantic && !in_system_header)
10467         pedwarn("ISO C++ forbids the use of `%s' on explicit instantiations", 
10468                    IDENTIFIER_POINTER (storage));
10469
10470       if (storage == ridpointers[(int) RID_INLINE])
10471         nomem_p = 1;
10472       else if (storage == ridpointers[(int) RID_EXTERN])
10473         extern_p = 1;
10474       else if (storage == ridpointers[(int) RID_STATIC])
10475         static_p = 1;
10476       else
10477         {
10478           error ("storage class `%D' applied to template instantiation",
10479                     storage);
10480           extern_p = 0;
10481         }
10482     }
10483
10484   if (CLASSTYPE_TEMPLATE_SPECIALIZATION (t))
10485     {
10486       /* DR 259 [temp.spec].
10487
10488          Both an explicit instantiation and a declaration of an explicit
10489          specialization shall not appear in a program unless the explicit
10490          instantiation follows a declaration of the explicit specialization.
10491
10492          For a given set of template parameters, if an explicit
10493          instantiation of a template appears after a declaration of an
10494          explicit specialization for that template, the explicit
10495          instantiation has no effect.  */
10496       return;
10497     }
10498   else if (CLASSTYPE_EXPLICIT_INSTANTIATION (t))
10499     {
10500       /* [temp.spec]
10501
10502          No program shall explicitly instantiate any template more
10503          than once.  
10504
10505          If CLASSTYPE_INTERFACE_ONLY, then the first explicit instantiation
10506          was `extern'.  If EXTERN_P then the second is.  If -frepo, chances
10507          are we already got marked as an explicit instantiation because of the
10508          repo file.  All these cases are OK.  */
10509       if (!CLASSTYPE_INTERFACE_ONLY (t) && !extern_p && !flag_use_repository
10510           && (complain & tf_error))
10511         pedwarn ("duplicate explicit instantiation of `%#T'", t);
10512       
10513       /* If we've already instantiated the template, just return now.  */
10514       if (!CLASSTYPE_INTERFACE_ONLY (t))
10515         return;
10516     }
10517
10518   mark_class_instantiated (t, extern_p);
10519   repo_template_instantiated (t, extern_p);
10520
10521   if (nomem_p)
10522     return;
10523
10524   {
10525     tree tmp;
10526
10527     /* In contrast to implicit instantiation, where only the
10528        declarations, and not the definitions, of members are
10529        instantiated, we have here:
10530
10531          [temp.explicit]
10532
10533          The explicit instantiation of a class template specialization
10534          implies the instantiation of all of its members not
10535          previously explicitly specialized in the translation unit
10536          containing the explicit instantiation.  
10537
10538        Of course, we can't instantiate member template classes, since
10539        we don't have any arguments for them.  Note that the standard
10540        is unclear on whether the instantiation of the members are
10541        *explicit* instantiations or not.  We choose to be generous,
10542        and not set DECL_EXPLICIT_INSTANTIATION.  Therefore, we allow
10543        the explicit instantiation of a class where some of the members
10544        have no definition in the current translation unit.  */
10545
10546     if (! static_p)
10547       for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp))
10548         if (TREE_CODE (tmp) == FUNCTION_DECL
10549             && DECL_TEMPLATE_INSTANTIATION (tmp))
10550           {
10551             mark_decl_instantiated (tmp, extern_p);
10552             repo_template_instantiated (tmp, extern_p);
10553             if (! extern_p)
10554               instantiate_decl (tmp, /*defer_ok=*/1);
10555           }
10556
10557     for (tmp = TYPE_FIELDS (t); tmp; tmp = TREE_CHAIN (tmp))
10558       if (TREE_CODE (tmp) == VAR_DECL && DECL_TEMPLATE_INSTANTIATION (tmp))
10559         {
10560           mark_decl_instantiated (tmp, extern_p);
10561           repo_template_instantiated (tmp, extern_p);
10562           if (! extern_p)
10563             instantiate_decl (tmp, /*defer_ok=*/1);
10564         }
10565
10566     if (CLASSTYPE_NESTED_UTDS (t))
10567       binding_table_foreach (CLASSTYPE_NESTED_UTDS (t),
10568                              bt_instantiate_type_proc, &storage);
10569   }
10570 }
10571
10572 /* Given a function DECL, which is a specialization of TMPL, modify
10573    DECL to be a re-instantiation of TMPL with the same template
10574    arguments.  TMPL should be the template into which tsubst'ing
10575    should occur for DECL, not the most general template.
10576
10577    One reason for doing this is a scenario like this:
10578
10579      template <class T>
10580      void f(const T&, int i);
10581
10582      void g() { f(3, 7); }
10583
10584      template <class T>
10585      void f(const T& t, const int i) { }
10586
10587    Note that when the template is first instantiated, with
10588    instantiate_template, the resulting DECL will have no name for the
10589    first parameter, and the wrong type for the second.  So, when we go
10590    to instantiate the DECL, we regenerate it.  */
10591
10592 static void
10593 regenerate_decl_from_template (tree decl, tree tmpl)
10594 {
10595   /* The most general version of TMPL.  */
10596   tree gen_tmpl;
10597   /* The arguments used to instantiate DECL, from the most general
10598      template.  */
10599   tree args;
10600   tree code_pattern;
10601   tree new_decl;
10602   bool unregistered;
10603
10604   args = DECL_TI_ARGS (decl);
10605   code_pattern = DECL_TEMPLATE_RESULT (tmpl);
10606
10607   /* Unregister the specialization so that when we tsubst we will not
10608      just return DECL.  We don't have to unregister DECL from TMPL
10609      because if would only be registered there if it were a partial
10610      instantiation of a specialization, which it isn't: it's a full
10611      instantiation.  */
10612   gen_tmpl = most_general_template (tmpl);
10613   unregistered = reregister_specialization (decl, gen_tmpl,
10614                                             /*new_spec=*/NULL_TREE);
10615
10616   /* If the DECL was not unregistered then something peculiar is
10617      happening: we created a specialization but did not call
10618      register_specialization for it.  */
10619   my_friendly_assert (unregistered, 0);
10620
10621   /* Make sure that we can see identifiers, and compute access
10622      correctly.  */
10623   push_access_scope (decl);
10624
10625   /* Do the substitution to get the new declaration.  */
10626   new_decl = tsubst (code_pattern, args, tf_error, NULL_TREE);
10627
10628   if (TREE_CODE (decl) == VAR_DECL)
10629     {
10630       /* Set up DECL_INITIAL, since tsubst doesn't.  */
10631       if (!DECL_INITIALIZED_IN_CLASS_P (decl))
10632         DECL_INITIAL (new_decl) = 
10633           tsubst_expr (DECL_INITIAL (code_pattern), args, 
10634                        tf_error, DECL_TI_TEMPLATE (decl));
10635     }
10636   else if (TREE_CODE (decl) == FUNCTION_DECL)
10637     {
10638       /* Convince duplicate_decls to use the DECL_ARGUMENTS from the
10639          new decl.  */ 
10640       DECL_INITIAL (new_decl) = error_mark_node;
10641       /* And don't complain about a duplicate definition.  */
10642       DECL_INITIAL (decl) = NULL_TREE;
10643     }
10644
10645   pop_access_scope (decl);
10646
10647   /* The immediate parent of the new template is still whatever it was
10648      before, even though tsubst sets DECL_TI_TEMPLATE up as the most
10649      general template.  We also reset the DECL_ASSEMBLER_NAME since
10650      tsubst always calculates the name as if the function in question
10651      were really a template instance, and sometimes, with friend
10652      functions, this is not so.  See tsubst_friend_function for
10653      details.  */
10654   DECL_TI_TEMPLATE (new_decl) = DECL_TI_TEMPLATE (decl);
10655   COPY_DECL_ASSEMBLER_NAME (decl, new_decl);
10656   COPY_DECL_RTL (decl, new_decl);
10657   DECL_USE_TEMPLATE (new_decl) = DECL_USE_TEMPLATE (decl);
10658
10659   /* Call duplicate decls to merge the old and new declarations.  */
10660   duplicate_decls (new_decl, decl);
10661
10662   /* Now, re-register the specialization.  */
10663   register_specialization (decl, gen_tmpl, args);
10664 }
10665
10666 /* Return the TEMPLATE_DECL into which DECL_TI_ARGS(DECL) should be
10667    substituted to get DECL.  */
10668
10669 tree
10670 template_for_substitution (tree decl)
10671 {
10672   tree tmpl = DECL_TI_TEMPLATE (decl);
10673
10674   /* Set TMPL to the template whose DECL_TEMPLATE_RESULT is the pattern
10675      for the instantiation.  This is not always the most general
10676      template.  Consider, for example:
10677
10678         template <class T>
10679         struct S { template <class U> void f();
10680                    template <> void f<int>(); };
10681
10682      and an instantiation of S<double>::f<int>.  We want TD to be the
10683      specialization S<T>::f<int>, not the more general S<T>::f<U>.  */
10684   while (/* An instantiation cannot have a definition, so we need a
10685             more general template.  */
10686          DECL_TEMPLATE_INSTANTIATION (tmpl)
10687            /* We must also deal with friend templates.  Given:
10688
10689                 template <class T> struct S { 
10690                   template <class U> friend void f() {};
10691                 };
10692
10693               S<int>::f<U> say, is not an instantiation of S<T>::f<U>,
10694               so far as the language is concerned, but that's still
10695               where we get the pattern for the instantiation from.  On
10696               other hand, if the definition comes outside the class, say:
10697
10698                 template <class T> struct S { 
10699                   template <class U> friend void f();
10700                 };
10701                 template <class U> friend void f() {}
10702
10703               we don't need to look any further.  That's what the check for
10704               DECL_INITIAL is for.  */
10705           || (TREE_CODE (decl) == FUNCTION_DECL
10706               && DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (tmpl)
10707               && !DECL_INITIAL (DECL_TEMPLATE_RESULT (tmpl))))
10708     {
10709       /* The present template, TD, should not be a definition.  If it
10710          were a definition, we should be using it!  Note that we
10711          cannot restructure the loop to just keep going until we find
10712          a template with a definition, since that might go too far if
10713          a specialization was declared, but not defined.  */
10714       my_friendly_assert (!(TREE_CODE (decl) == VAR_DECL
10715                             && !DECL_IN_AGGR_P (DECL_TEMPLATE_RESULT (tmpl))), 
10716                           0); 
10717       
10718       /* Fetch the more general template.  */
10719       tmpl = DECL_TI_TEMPLATE (tmpl);
10720     }
10721
10722   return tmpl;
10723 }
10724
10725 /* Produce the definition of D, a _DECL generated from a template.  If
10726    DEFER_OK is nonzero, then we don't have to actually do the
10727    instantiation now; we just have to do it sometime.  */
10728
10729 tree
10730 instantiate_decl (tree d, int defer_ok)
10731 {
10732   tree tmpl = DECL_TI_TEMPLATE (d);
10733   tree gen_args;
10734   tree args;
10735   tree td;
10736   tree code_pattern;
10737   tree spec;
10738   tree gen_tmpl;
10739   int pattern_defined;
10740   int need_push;
10741   location_t saved_loc = input_location;
10742   
10743   /* This function should only be used to instantiate templates for
10744      functions and static member variables.  */
10745   my_friendly_assert (TREE_CODE (d) == FUNCTION_DECL
10746                       || TREE_CODE (d) == VAR_DECL, 0);
10747
10748   /* Variables are never deferred; if instantiation is required, they
10749      are instantiated right away.  That allows for better code in the
10750      case that an expression refers to the value of the variable --
10751      if the variable has a constant value the referring expression can
10752      take advantage of that fact.  */
10753   if (TREE_CODE (d) == VAR_DECL)
10754     defer_ok = 0;
10755
10756   /* Don't instantiate cloned functions.  Instead, instantiate the
10757      functions they cloned.  */
10758   if (TREE_CODE (d) == FUNCTION_DECL && DECL_CLONED_FUNCTION_P (d))
10759     d = DECL_CLONED_FUNCTION (d);
10760
10761   if (DECL_TEMPLATE_INSTANTIATED (d))
10762     /* D has already been instantiated.  It might seem reasonable to
10763        check whether or not D is an explicit instantiation, and, if so,
10764        stop here.  But when an explicit instantiation is deferred
10765        until the end of the compilation, DECL_EXPLICIT_INSTANTIATION
10766        is set, even though we still need to do the instantiation.  */
10767     return d;
10768
10769   /* If we already have a specialization of this declaration, then
10770      there's no reason to instantiate it.  Note that
10771      retrieve_specialization gives us both instantiations and
10772      specializations, so we must explicitly check
10773      DECL_TEMPLATE_SPECIALIZATION.  */
10774   gen_tmpl = most_general_template (tmpl);
10775   gen_args = DECL_TI_ARGS (d);
10776   spec = retrieve_specialization (gen_tmpl, gen_args);
10777   if (spec != NULL_TREE && DECL_TEMPLATE_SPECIALIZATION (spec))
10778     return spec;
10779
10780   /* This needs to happen before any tsubsting.  */
10781   if (! push_tinst_level (d))
10782     return d;
10783
10784   timevar_push (TV_PARSE);
10785
10786   /* We may be in the middle of deferred access check.  Disable
10787      it now.  */
10788   push_deferring_access_checks (dk_no_deferred);
10789
10790   /* Set TD to the template whose DECL_TEMPLATE_RESULT is the pattern
10791      for the instantiation.  */
10792   td = template_for_substitution (d);
10793   code_pattern = DECL_TEMPLATE_RESULT (td);
10794
10795   if ((DECL_NAMESPACE_SCOPE_P (d) && !DECL_INITIALIZED_IN_CLASS_P (d))
10796       || DECL_TEMPLATE_SPECIALIZATION (td))
10797     /* In the case of a friend template whose definition is provided
10798        outside the class, we may have too many arguments.  Drop the
10799        ones we don't need.  The same is true for specializations.  */
10800     args = get_innermost_template_args
10801       (gen_args, TMPL_PARMS_DEPTH  (DECL_TEMPLATE_PARMS (td)));
10802   else
10803     args = gen_args;
10804
10805   if (TREE_CODE (d) == FUNCTION_DECL)
10806     pattern_defined = (DECL_SAVED_TREE (code_pattern) != NULL_TREE);
10807   else
10808     pattern_defined = ! DECL_IN_AGGR_P (code_pattern);
10809
10810   input_location = DECL_SOURCE_LOCATION (d);
10811
10812   if (pattern_defined)
10813     {
10814       /* Let the repository code that this template definition is
10815          available.
10816
10817          The repository doesn't need to know about cloned functions
10818          because they never actually show up in the object file.  It
10819          does need to know about the clones; those are the symbols
10820          that the linker will be emitting error messages about.  */
10821       if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (d)
10822           || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (d))
10823         {
10824           tree t;
10825
10826           for (t = TREE_CHAIN (d);
10827                t && DECL_CLONED_FUNCTION_P (t); 
10828                t = TREE_CHAIN (t))
10829             repo_template_used (t);
10830         }
10831       else
10832         repo_template_used (d);
10833
10834       if (flag_external_templates && ! DECL_INTERFACE_KNOWN (d))
10835         {
10836           if (flag_alt_external_templates)
10837             {
10838               if (interface_unknown)
10839                 warn_if_unknown_interface (d);
10840             }
10841           else if (DECL_INTERFACE_KNOWN (code_pattern))
10842             {
10843               DECL_INTERFACE_KNOWN (d) = 1;
10844               DECL_NOT_REALLY_EXTERN (d) = ! DECL_EXTERNAL (code_pattern);
10845             }
10846           else
10847             warn_if_unknown_interface (code_pattern);
10848         }
10849
10850       if (at_eof)
10851         import_export_decl (d);
10852     }
10853
10854   if (!defer_ok)
10855     {
10856       /* Recheck the substitutions to obtain any warning messages
10857          about ignoring cv qualifiers.  */
10858       tree gen = DECL_TEMPLATE_RESULT (gen_tmpl);
10859       tree type = TREE_TYPE (gen);
10860
10861       /* Make sure that we can see identifiers, and compute access
10862          correctly.  D is already the target FUNCTION_DECL with the
10863          right context.  */
10864       push_access_scope (d);
10865
10866       if (TREE_CODE (gen) == FUNCTION_DECL)
10867         {
10868           tsubst (DECL_ARGUMENTS (gen), gen_args, tf_error | tf_warning, d);
10869           tsubst (TYPE_RAISES_EXCEPTIONS (type), gen_args,
10870                   tf_error | tf_warning, d);
10871           /* Don't simply tsubst the function type, as that will give
10872              duplicate warnings about poor parameter qualifications.
10873              The function arguments are the same as the decl_arguments
10874              without the top level cv qualifiers.  */
10875           type = TREE_TYPE (type);
10876         }
10877       tsubst (type, gen_args, tf_error | tf_warning, d);
10878
10879       pop_access_scope (d);
10880     }
10881   
10882   if (TREE_CODE (d) == VAR_DECL && DECL_INITIALIZED_IN_CLASS_P (d)
10883       && DECL_INITIAL (d) == NULL_TREE)
10884     /* We should have set up DECL_INITIAL in instantiate_class_template.  */
10885     abort ();
10886   /* Reject all external templates except inline functions.  */
10887   else if (DECL_INTERFACE_KNOWN (d)
10888            && ! DECL_NOT_REALLY_EXTERN (d)
10889            && ! (TREE_CODE (d) == FUNCTION_DECL 
10890                  && DECL_INLINE (d)))
10891     goto out;
10892   /* Defer all other templates, unless we have been explicitly
10893      forbidden from doing so.  We restore the source position here
10894      because it's used by add_pending_template.  */
10895   else if (! pattern_defined || defer_ok)
10896     {
10897       input_location = saved_loc;
10898
10899       if (at_eof && !pattern_defined 
10900           && DECL_EXPLICIT_INSTANTIATION (d))
10901         /* [temp.explicit]
10902
10903            The definition of a non-exported function template, a
10904            non-exported member function template, or a non-exported
10905            member function or static data member of a class template
10906            shall be present in every translation unit in which it is
10907            explicitly instantiated.  */
10908         pedwarn
10909           ("explicit instantiation of `%D' but no definition available", d);
10910
10911       add_pending_template (d);
10912       goto out;
10913     }
10914
10915   need_push = !global_bindings_p ();
10916   if (need_push)
10917     push_to_top_level ();
10918
10919   /* Regenerate the declaration in case the template has been modified
10920      by a subsequent redeclaration.  */
10921   regenerate_decl_from_template (d, td);
10922   
10923   /* We already set the file and line above.  Reset them now in case
10924      they changed as a result of calling
10925      regenerate_decl_from_template.  */
10926   input_location = DECL_SOURCE_LOCATION (d);
10927
10928   if (TREE_CODE (d) == VAR_DECL)
10929     {
10930       /* Clear out DECL_RTL; whatever was there before may not be right
10931          since we've reset the type of the declaration.  */
10932       SET_DECL_RTL (d, NULL_RTX);
10933
10934       DECL_IN_AGGR_P (d) = 0;
10935       import_export_decl (d);
10936       DECL_EXTERNAL (d) = ! DECL_NOT_REALLY_EXTERN (d);
10937
10938       if (DECL_EXTERNAL (d))
10939         {
10940           /* The fact that this code is executing indicates that:
10941              
10942              (1) D is a template static data member, for which a
10943                  definition is available.
10944
10945              (2) An implicit or explicit instantiation has occurred.
10946
10947              (3) We are not going to emit a definition of the static
10948                  data member at this time.
10949
10950              This situation is peculiar, but it occurs on platforms
10951              without weak symbols when performing an implicit
10952              instantiation.  There, we cannot implicitly instantiate a
10953              defined static data member in more than one translation
10954              unit, so import_export_decl marks the declaration as
10955              external; we must rely on explicit instantiation.  */
10956         }
10957       else
10958         {
10959           /* Mark D as instantiated so that recursive calls to
10960              instantiate_decl do not try to instantiate it again.  */
10961           DECL_TEMPLATE_INSTANTIATED (d) = 1;
10962           cp_finish_decl (d, 
10963                           (!DECL_INITIALIZED_IN_CLASS_P (d) 
10964                            ? DECL_INITIAL (d) : NULL_TREE),
10965                           NULL_TREE, 0);
10966         }
10967     }
10968   else if (TREE_CODE (d) == FUNCTION_DECL)
10969     {
10970       htab_t saved_local_specializations;
10971       tree subst_decl;
10972       tree tmpl_parm;
10973       tree spec_parm;
10974
10975       /* Mark D as instantiated so that recursive calls to
10976          instantiate_decl do not try to instantiate it again.  */
10977       DECL_TEMPLATE_INSTANTIATED (d) = 1;
10978
10979       /* Save away the current list, in case we are instantiating one
10980          template from within the body of another.  */
10981       saved_local_specializations = local_specializations;
10982
10983       /* Set up the list of local specializations.  */
10984       local_specializations = htab_create (37, 
10985                                            hash_local_specialization,
10986                                            eq_local_specializations,
10987                                            NULL);
10988
10989       /* Set up context.  */
10990       import_export_decl (d);
10991       start_function (NULL_TREE, d, NULL_TREE, SF_PRE_PARSED);
10992
10993       /* Create substitution entries for the parameters.  */
10994       subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d));
10995       tmpl_parm = DECL_ARGUMENTS (subst_decl);
10996       spec_parm = DECL_ARGUMENTS (d);
10997       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (d))
10998         {
10999           register_local_specialization (spec_parm, tmpl_parm);
11000           spec_parm = skip_artificial_parms_for (d, spec_parm);
11001           tmpl_parm = skip_artificial_parms_for (subst_decl, tmpl_parm);
11002         }
11003       while (tmpl_parm)
11004         {
11005           register_local_specialization (spec_parm, tmpl_parm);
11006           tmpl_parm = TREE_CHAIN (tmpl_parm);
11007           spec_parm = TREE_CHAIN (spec_parm);
11008         }
11009       my_friendly_assert (!spec_parm, 20020813);
11010
11011       /* Substitute into the body of the function.  */
11012       tsubst_expr (DECL_SAVED_TREE (code_pattern), args,
11013                    tf_error | tf_warning, tmpl);
11014
11015       /* We don't need the local specializations any more.  */
11016       htab_delete (local_specializations);
11017       local_specializations = saved_local_specializations;
11018
11019       /* Finish the function.  */
11020       d = finish_function (0);
11021       expand_or_defer_fn (d);
11022     }
11023
11024   /* We're not deferring instantiation any more.  */
11025   TI_PENDING_TEMPLATE_FLAG (DECL_TEMPLATE_INFO (d)) = 0;
11026
11027   if (need_push)
11028     pop_from_top_level ();
11029
11030 out:
11031   input_location = saved_loc;
11032   pop_deferring_access_checks ();
11033   pop_tinst_level ();
11034
11035   timevar_pop (TV_PARSE);
11036
11037   return d;
11038 }
11039
11040 /* Run through the list of templates that we wish we could
11041    instantiate, and instantiate any we can.  */
11042
11043 int
11044 instantiate_pending_templates (void)
11045 {
11046   tree *t;
11047   tree last = NULL_TREE;
11048   int instantiated_something = 0;
11049   int reconsider;
11050   
11051   do 
11052     {
11053       reconsider = 0;
11054
11055       t = &pending_templates;
11056       while (*t)
11057         {
11058           tree instantiation = TREE_VALUE (*t);
11059
11060           reopen_tinst_level (TREE_PURPOSE (*t));
11061
11062           if (TYPE_P (instantiation))
11063             {
11064               tree fn;
11065
11066               if (!COMPLETE_TYPE_P (instantiation))
11067                 {
11068                   instantiate_class_template (instantiation);
11069                   if (CLASSTYPE_TEMPLATE_INSTANTIATION (instantiation))
11070                     for (fn = TYPE_METHODS (instantiation); 
11071                          fn;
11072                          fn = TREE_CHAIN (fn))
11073                       if (! DECL_ARTIFICIAL (fn))
11074                         instantiate_decl (fn, /*defer_ok=*/0);
11075                   if (COMPLETE_TYPE_P (instantiation))
11076                     {
11077                       instantiated_something = 1;
11078                       reconsider = 1;
11079                     }
11080                 }
11081
11082               if (COMPLETE_TYPE_P (instantiation))
11083                 /* If INSTANTIATION has been instantiated, then we don't
11084                    need to consider it again in the future.  */
11085                 *t = TREE_CHAIN (*t);
11086               else
11087                 {
11088                   last = *t;
11089                   t = &TREE_CHAIN (*t);
11090                 }
11091             }
11092           else
11093             {
11094               if (!DECL_TEMPLATE_SPECIALIZATION (instantiation)
11095                   && !DECL_TEMPLATE_INSTANTIATED (instantiation))
11096                 {
11097                   instantiation = instantiate_decl (instantiation,
11098                                                     /*defer_ok=*/0);
11099                   if (DECL_TEMPLATE_INSTANTIATED (instantiation))
11100                     {
11101                       instantiated_something = 1;
11102                       reconsider = 1;
11103                     }
11104                 }
11105
11106               if (DECL_TEMPLATE_SPECIALIZATION (instantiation)
11107                   || DECL_TEMPLATE_INSTANTIATED (instantiation))
11108                 /* If INSTANTIATION has been instantiated, then we don't
11109                    need to consider it again in the future.  */
11110                 *t = TREE_CHAIN (*t);
11111               else
11112                 {
11113                   last = *t;
11114                   t = &TREE_CHAIN (*t);
11115                 }
11116             }
11117           tinst_depth = 0;
11118           current_tinst_level = NULL_TREE;
11119         }
11120       last_pending_template = last;
11121     } 
11122   while (reconsider);
11123
11124   return instantiated_something;
11125 }
11126
11127 /* Substitute ARGVEC into T, which is a list of initializers for
11128    either base class or a non-static data member.  The TREE_PURPOSEs
11129    are DECLs, and the TREE_VALUEs are the initializer values.  Used by
11130    instantiate_decl.  */
11131
11132 static tree
11133 tsubst_initializer_list (tree t, tree argvec)
11134 {
11135   tree inits = NULL_TREE;
11136
11137   for (; t; t = TREE_CHAIN (t))
11138     {
11139       tree decl;
11140       tree init;
11141       tree val;
11142
11143       decl = tsubst_copy (TREE_PURPOSE (t), argvec, tf_error | tf_warning,
11144                           NULL_TREE);
11145       decl = expand_member_init (decl);
11146       if (decl && !DECL_P (decl))
11147         in_base_initializer = 1;
11148       
11149       init = tsubst_expr (TREE_VALUE (t), argvec, tf_error | tf_warning,
11150                           NULL_TREE);
11151       if (!init)
11152         ;
11153       else if (TREE_CODE (init) == TREE_LIST)
11154         for (val = init; val; val = TREE_CHAIN (val))
11155           TREE_VALUE (val) = convert_from_reference (TREE_VALUE (val));
11156       else if (init != void_type_node)
11157         init = convert_from_reference (init);
11158
11159       in_base_initializer = 0;
11160
11161       if (decl)
11162         {
11163           init = build_tree_list (decl, init);
11164           TREE_CHAIN (init) = inits;
11165           inits = init;
11166         }
11167     }
11168   return inits;
11169 }
11170
11171 /* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
11172
11173 static void
11174 set_current_access_from_decl (tree decl)
11175 {
11176   if (TREE_PRIVATE (decl))
11177     current_access_specifier = access_private_node;
11178   else if (TREE_PROTECTED (decl))
11179     current_access_specifier = access_protected_node;
11180   else
11181     current_access_specifier = access_public_node;
11182 }
11183
11184 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
11185    is the instantiation (which should have been created with
11186    start_enum) and ARGS are the template arguments to use.  */
11187
11188 static void
11189 tsubst_enum (tree tag, tree newtag, tree args)
11190 {
11191   tree e;
11192
11193   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
11194     {
11195       tree value;
11196       
11197       /* Note that in a template enum, the TREE_VALUE is the
11198          CONST_DECL, not the corresponding INTEGER_CST.  */
11199       value = tsubst_expr (DECL_INITIAL (TREE_VALUE (e)), 
11200                            args, tf_error | tf_warning,
11201                            NULL_TREE);
11202
11203       /* Give this enumeration constant the correct access.  */
11204       set_current_access_from_decl (TREE_VALUE (e));
11205
11206       /* Actually build the enumerator itself.  */
11207       build_enumerator (TREE_PURPOSE (e), value, newtag); 
11208     }
11209
11210   finish_enum (newtag);
11211   DECL_SOURCE_LOCATION (TYPE_NAME (newtag))
11212     = DECL_SOURCE_LOCATION (TYPE_NAME (tag));
11213 }
11214
11215 /* DECL is a FUNCTION_DECL that is a template specialization.  Return
11216    its type -- but without substituting the innermost set of template
11217    arguments.  So, innermost set of template parameters will appear in
11218    the type.  */
11219
11220 tree 
11221 get_mostly_instantiated_function_type (tree decl)
11222 {
11223   tree fn_type;
11224   tree tmpl;
11225   tree targs;
11226   tree tparms;
11227   int parm_depth;
11228
11229   tmpl = most_general_template (DECL_TI_TEMPLATE (decl));
11230   targs = DECL_TI_ARGS (decl);
11231   tparms = DECL_TEMPLATE_PARMS (tmpl);
11232   parm_depth = TMPL_PARMS_DEPTH (tparms);
11233
11234   /* There should be as many levels of arguments as there are levels
11235      of parameters.  */
11236   my_friendly_assert (parm_depth == TMPL_ARGS_DEPTH (targs), 0);
11237
11238   fn_type = TREE_TYPE (tmpl);
11239
11240   if (parm_depth == 1)
11241     /* No substitution is necessary.  */
11242     ;
11243   else
11244     {
11245       int i;
11246       tree partial_args;
11247
11248       /* Replace the innermost level of the TARGS with NULL_TREEs to
11249          let tsubst know not to substitute for those parameters.  */
11250       partial_args = make_tree_vec (TREE_VEC_LENGTH (targs));
11251       for (i = 1; i < TMPL_ARGS_DEPTH (targs); ++i)
11252         SET_TMPL_ARGS_LEVEL (partial_args, i,
11253                              TMPL_ARGS_LEVEL (targs, i));
11254       SET_TMPL_ARGS_LEVEL (partial_args,
11255                            TMPL_ARGS_DEPTH (targs),
11256                            make_tree_vec (DECL_NTPARMS (tmpl)));
11257
11258       /* Make sure that we can see identifiers, and compute access
11259          correctly.  We can just use the context of DECL for the
11260          partial substitution here.  It depends only on outer template
11261          parameters, regardless of whether the innermost level is
11262          specialized or not.  */
11263       push_access_scope (decl);
11264
11265       /* Now, do the (partial) substitution to figure out the
11266          appropriate function type.  */
11267       fn_type = tsubst (fn_type, partial_args, tf_error, NULL_TREE);
11268
11269       /* Substitute into the template parameters to obtain the real
11270          innermost set of parameters.  This step is important if the
11271          innermost set of template parameters contains value
11272          parameters whose types depend on outer template parameters.  */
11273       TREE_VEC_LENGTH (partial_args)--;
11274       tparms = tsubst_template_parms (tparms, partial_args, tf_error);
11275
11276       pop_access_scope (decl);
11277     }
11278
11279   return fn_type;
11280 }
11281
11282 /* Return truthvalue if we're processing a template different from
11283    the last one involved in diagnostics.  */
11284 int
11285 problematic_instantiation_changed (void)
11286 {
11287   return last_template_error_tick != tinst_level_tick;
11288 }
11289
11290 /* Remember current template involved in diagnostics.  */
11291 void
11292 record_last_problematic_instantiation (void)
11293 {
11294   last_template_error_tick = tinst_level_tick;
11295 }
11296
11297 tree
11298 current_instantiation (void)
11299 {
11300   return current_tinst_level;
11301 }
11302
11303 /* [temp.param] Check that template non-type parm TYPE is of an allowable
11304    type. Return zero for ok, nonzero for disallowed. Issue error and
11305    warning messages under control of COMPLAIN.  */
11306
11307 static int
11308 invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
11309 {
11310   if (INTEGRAL_TYPE_P (type))
11311     return 0;
11312   else if (POINTER_TYPE_P (type))
11313     return 0;
11314   else if (TYPE_PTRMEM_P (type))
11315     return 0;
11316   else if (TYPE_PTRMEMFUNC_P (type))
11317     return 0;
11318   else if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11319     return 0;
11320   else if (TREE_CODE (type) == TYPENAME_TYPE)
11321     return 0;
11322            
11323   if (complain & tf_error)
11324     error ("`%#T' is not a valid type for a template constant parameter",
11325               type);
11326   return 1;
11327 }
11328
11329 /* Returns TRUE if TYPE is dependent, in the sense of [temp.dep.type].
11330    Assumes that TYPE really is a type, and not the ERROR_MARK_NODE.*/
11331
11332 static bool
11333 dependent_type_p_r (tree type)
11334 {
11335   tree scope;
11336
11337   /* [temp.dep.type]
11338
11339      A type is dependent if it is:
11340
11341      -- a template parameter.  */
11342   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11343     return true;
11344   /* -- a qualified-id with a nested-name-specifier which contains a
11345         class-name that names a dependent type or whose unqualified-id
11346         names a dependent type.  */
11347   if (TREE_CODE (type) == TYPENAME_TYPE)
11348     return true;
11349   /* -- a cv-qualified type where the cv-unqualified type is
11350         dependent.  */
11351   type = TYPE_MAIN_VARIANT (type);
11352   /* -- a compound type constructed from any dependent type.  */
11353   if (TYPE_PTRMEM_P (type) || TYPE_PTRMEMFUNC_P (type))
11354     return (dependent_type_p (TYPE_PTRMEM_CLASS_TYPE (type))
11355             || dependent_type_p (TYPE_PTRMEM_POINTED_TO_TYPE 
11356                                            (type)));
11357   else if (TREE_CODE (type) == POINTER_TYPE
11358            || TREE_CODE (type) == REFERENCE_TYPE)
11359     return dependent_type_p (TREE_TYPE (type));
11360   else if (TREE_CODE (type) == FUNCTION_TYPE
11361            || TREE_CODE (type) == METHOD_TYPE)
11362     {
11363       tree arg_type;
11364
11365       if (dependent_type_p (TREE_TYPE (type)))
11366         return true;
11367       for (arg_type = TYPE_ARG_TYPES (type); 
11368            arg_type; 
11369            arg_type = TREE_CHAIN (arg_type))
11370         if (dependent_type_p (TREE_VALUE (arg_type)))
11371           return true;
11372       return false;
11373     }
11374   /* -- an array type constructed from any dependent type or whose
11375         size is specified by a constant expression that is
11376         value-dependent.  */
11377   if (TREE_CODE (type) == ARRAY_TYPE)
11378     {
11379       if (TYPE_DOMAIN (type)
11380           && ((value_dependent_expression_p 
11381                (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
11382               || (type_dependent_expression_p
11383                   (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))))
11384         return true;
11385       return dependent_type_p (TREE_TYPE (type));
11386     }
11387   /* -- a template-id in which either the template name is a template
11388         parameter or any of the template arguments is a dependent type or
11389         an expression that is type-dependent or value-dependent.  
11390
11391      This language seems somewhat confused; for example, it does not
11392      discuss template template arguments.  Therefore, we use the
11393      definition for dependent template arguments in [temp.dep.temp].  */
11394   if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_INFO (type)
11395       && (dependent_template_id_p
11396           (CLASSTYPE_TI_TEMPLATE (type),
11397            CLASSTYPE_TI_ARGS (type))))
11398     return true;
11399   else if (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
11400     return true;
11401   /* All TYPEOF_TYPEs are dependent; if the argument of the `typeof'
11402      expression is not type-dependent, then it should already been
11403      have resolved.  */
11404   if (TREE_CODE (type) == TYPEOF_TYPE)
11405     return true;
11406   /* The standard does not specifically mention types that are local
11407      to template functions or local classes, but they should be
11408      considered dependent too.  For example:
11409
11410        template <int I> void f() { 
11411          enum E { a = I }; 
11412          S<sizeof (E)> s;
11413        }
11414
11415      The size of `E' cannot be known until the value of `I' has been
11416      determined.  Therefore, `E' must be considered dependent.  */
11417   scope = TYPE_CONTEXT (type);
11418   if (scope && TYPE_P (scope))
11419     return dependent_type_p (scope);
11420   else if (scope && TREE_CODE (scope) == FUNCTION_DECL)
11421     return type_dependent_expression_p (scope);
11422
11423   /* Other types are non-dependent.  */
11424   return false;
11425 }
11426
11427 /* Returns TRUE if TYPE is dependent, in the sense of
11428    [temp.dep.type].  */
11429
11430 bool
11431 dependent_type_p (tree type)
11432 {
11433   /* If there are no template parameters in scope, then there can't be
11434      any dependent types.  */
11435   if (!processing_template_decl)
11436     return false;
11437
11438   /* If the type is NULL, we have not computed a type for the entity
11439      in question; in that case, the type is dependent.  */
11440   if (!type)
11441     return true;
11442
11443   /* Erroneous types can be considered non-dependent.  */
11444   if (type == error_mark_node)
11445     return false;
11446
11447   /* If we have not already computed the appropriate value for TYPE,
11448      do so now.  */
11449   if (!TYPE_DEPENDENT_P_VALID (type))
11450     {
11451       TYPE_DEPENDENT_P (type) = dependent_type_p_r (type);
11452       TYPE_DEPENDENT_P_VALID (type) = 1;
11453     }
11454
11455   return TYPE_DEPENDENT_P (type);
11456 }
11457
11458 /* Returns TRUE if the EXPRESSION is value-dependent, in the sense of
11459    [temp.dep.constexpr] */
11460
11461 bool
11462 value_dependent_expression_p (tree expression)
11463 {
11464   if (!processing_template_decl)
11465     return false;
11466
11467   /* A name declared with a dependent type.  */
11468   if (TREE_CODE (expression) == LOOKUP_EXPR
11469       || (DECL_P (expression) 
11470           && type_dependent_expression_p (expression)))
11471     return true;
11472   /* A non-type template parameter.  */
11473   if ((TREE_CODE (expression) == CONST_DECL
11474        && DECL_TEMPLATE_PARM_P (expression))
11475       || TREE_CODE (expression) == TEMPLATE_PARM_INDEX)
11476     return true;
11477   /* A constant with integral or enumeration type and is initialized 
11478      with an expression that is value-dependent.  */
11479   if (TREE_CODE (expression) == VAR_DECL
11480       && DECL_INITIAL (expression)
11481       && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
11482       && value_dependent_expression_p (DECL_INITIAL (expression)))
11483     return true;
11484   /* These expressions are value-dependent if the type to which the
11485      cast occurs is dependent or the expression being casted is
11486      value-dependent.  */
11487   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11488       || TREE_CODE (expression) == STATIC_CAST_EXPR
11489       || TREE_CODE (expression) == CONST_CAST_EXPR
11490       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11491       || TREE_CODE (expression) == CAST_EXPR)
11492     {
11493       if (dependent_type_p (TREE_TYPE (expression)))
11494         return true;
11495       /* A functional cast has a list of operands.  */
11496       expression = TREE_OPERAND (expression, 0);
11497       if (TREE_CODE (expression) == TREE_LIST)
11498         {
11499           do
11500             {
11501               if (value_dependent_expression_p (TREE_VALUE (expression)))
11502                 return true;
11503               expression = TREE_CHAIN (expression);
11504             }
11505           while (expression);
11506           return false;
11507         }
11508       else
11509         return value_dependent_expression_p (expression);
11510     }
11511   /* A `sizeof' expression is value-dependent if the operand is
11512      type-dependent.  */
11513   if (TREE_CODE (expression) == SIZEOF_EXPR
11514       || TREE_CODE (expression) == ALIGNOF_EXPR)
11515     {
11516       expression = TREE_OPERAND (expression, 0);
11517       if (TYPE_P (expression))
11518         return dependent_type_p (expression);
11519       return type_dependent_expression_p (expression);
11520     }
11521   /* A constant expression is value-dependent if any subexpression is
11522      value-dependent.  */
11523   if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (expression))))
11524     {
11525       switch (TREE_CODE_CLASS (TREE_CODE (expression)))
11526         {
11527         case '1':
11528           return (value_dependent_expression_p 
11529                   (TREE_OPERAND (expression, 0)));
11530         case '<':
11531         case '2':
11532           return ((value_dependent_expression_p 
11533                    (TREE_OPERAND (expression, 0)))
11534                   || (value_dependent_expression_p 
11535                       (TREE_OPERAND (expression, 1))));
11536         case 'e':
11537           {
11538             int i;
11539             for (i = 0; i < first_rtl_op (TREE_CODE (expression)); ++i)
11540               /* In some cases, some of the operands may be missing.
11541                  (For example, in the case of PREDECREMENT_EXPR, the
11542                  amount to increment by may be missing.)  That doesn't
11543                  make the expression dependent.  */
11544               if (TREE_OPERAND (expression, i)
11545                   && (value_dependent_expression_p
11546                       (TREE_OPERAND (expression, i))))
11547                 return true;
11548             return false;
11549           }
11550         }
11551     }
11552
11553   /* The expression is not value-dependent.  */
11554   return false;
11555 }
11556
11557 /* Returns TRUE if the EXPRESSION is type-dependent, in the sense of
11558    [temp.dep.expr].  */
11559
11560 bool
11561 type_dependent_expression_p (tree expression)
11562 {
11563   if (!processing_template_decl)
11564     return false;
11565
11566   if (expression == error_mark_node)
11567     return false;
11568   
11569   /* Some expression forms are never type-dependent.  */
11570   if (TREE_CODE (expression) == PSEUDO_DTOR_EXPR
11571       || TREE_CODE (expression) == SIZEOF_EXPR
11572       || TREE_CODE (expression) == ALIGNOF_EXPR
11573       || TREE_CODE (expression) == TYPEID_EXPR
11574       || TREE_CODE (expression) == DELETE_EXPR
11575       || TREE_CODE (expression) == VEC_DELETE_EXPR
11576       || TREE_CODE (expression) == THROW_EXPR)
11577     return false;
11578
11579   /* The types of these expressions depends only on the type to which
11580      the cast occurs.  */
11581   if (TREE_CODE (expression) == DYNAMIC_CAST_EXPR
11582       || TREE_CODE (expression) == STATIC_CAST_EXPR
11583       || TREE_CODE (expression) == CONST_CAST_EXPR
11584       || TREE_CODE (expression) == REINTERPRET_CAST_EXPR
11585       || TREE_CODE (expression) == CAST_EXPR)
11586     return dependent_type_p (TREE_TYPE (expression));
11587
11588   /* The types of these expressions depends only on the type created
11589      by the expression.  */
11590   if (TREE_CODE (expression) == NEW_EXPR
11591       || TREE_CODE (expression) == VEC_NEW_EXPR)
11592     {
11593       /* For NEW_EXPR tree nodes created inside a template, either
11594          the object type itself or a TREE_LIST may appear as the
11595          operand 1.  */
11596       tree type = TREE_OPERAND (expression, 1);
11597       if (TREE_CODE (type) == TREE_LIST)
11598         /* This is an array type.  We need to check array dimensions
11599            as well.  */
11600         return dependent_type_p (TREE_VALUE (TREE_PURPOSE (type)))
11601                || value_dependent_expression_p
11602                     (TREE_OPERAND (TREE_VALUE (type), 1));
11603       else
11604         return dependent_type_p (type);
11605     }
11606
11607   /* [temp.dep.expr]
11608
11609      An id-expression is type-dependent if it contains a
11610      nested-name-specifier that contains a class-name that names a
11611      dependent type.  */
11612   if (TREE_CODE (expression) == SCOPE_REF
11613       && TYPE_P (TREE_OPERAND (expression, 0)))
11614     {
11615       tree scope;
11616       tree name;
11617
11618       scope = TREE_OPERAND (expression, 0);
11619       name = TREE_OPERAND (expression, 1);
11620
11621       /* The suggested resolution to Core Issue 2 implies that if the
11622          qualifying type is the current class, then we must peek
11623          inside it.  */
11624       if (DECL_P (name) 
11625           && currently_open_class (scope)
11626           && !type_dependent_expression_p (name))
11627         return false;
11628       if (dependent_type_p (scope))
11629         return true;
11630     }
11631
11632   if (TREE_CODE (expression) == FUNCTION_DECL
11633       && DECL_LANG_SPECIFIC (expression)
11634       && DECL_TEMPLATE_INFO (expression)
11635       && (dependent_template_id_p
11636           (DECL_TI_TEMPLATE (expression),
11637            INNERMOST_TEMPLATE_ARGS (DECL_TI_ARGS (expression)))))
11638     return true;
11639
11640   if (TREE_TYPE (expression) == unknown_type_node)
11641     {
11642       if (TREE_CODE (expression) == ADDR_EXPR)
11643         return type_dependent_expression_p (TREE_OPERAND (expression, 0));
11644       if (TREE_CODE (expression) == BASELINK)
11645         expression = BASELINK_FUNCTIONS (expression);
11646       if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
11647         {
11648           if (any_dependent_template_arguments_p (TREE_OPERAND (expression, 
11649                                                                 1)))
11650             return true;
11651           expression = TREE_OPERAND (expression, 0);
11652         }
11653       if (TREE_CODE (expression) == OVERLOAD)
11654         {
11655           while (expression)
11656             {
11657               if (type_dependent_expression_p (OVL_CURRENT (expression)))
11658                 return true;
11659               expression = OVL_NEXT (expression);
11660             }
11661           return false;
11662         }
11663       abort ();
11664     }
11665   
11666   return (dependent_type_p (TREE_TYPE (expression)));
11667 }
11668
11669 /* Returns TRUE if ARGS (a TREE_LIST of arguments to a function call)
11670    contains a type-dependent expression.  */
11671
11672 bool
11673 any_type_dependent_arguments_p (tree args)
11674 {
11675   while (args)
11676     {
11677       tree arg = TREE_VALUE (args);
11678
11679       if (type_dependent_expression_p (arg))
11680         return true;
11681       args = TREE_CHAIN (args);
11682     }
11683   return false;
11684 }
11685
11686 /* Returns TRUE if the ARG (a template argument) is dependent.  */
11687
11688 static bool
11689 dependent_template_arg_p (tree arg)
11690 {
11691   if (!processing_template_decl)
11692     return false;
11693
11694   if (TREE_CODE (arg) == TEMPLATE_DECL
11695       || TREE_CODE (arg) == TEMPLATE_TEMPLATE_PARM)
11696     return dependent_template_p (arg);
11697   else if (TYPE_P (arg))
11698     return dependent_type_p (arg);
11699   else
11700     return (type_dependent_expression_p (arg)
11701             || value_dependent_expression_p (arg));
11702 }
11703
11704 /* Returns true if ARGS (a collection of template arguments) contains
11705    any dependent arguments.  */
11706
11707 bool
11708 any_dependent_template_arguments_p (tree args)
11709 {
11710   if (!args)
11711     return false;
11712
11713   my_friendly_assert (TREE_CODE (args) == TREE_LIST
11714                       || TREE_CODE (args) == TREE_VEC,
11715                       20030707);
11716
11717   if (TREE_CODE (args) == TREE_LIST)
11718     {
11719       while (args)
11720         {
11721           if (dependent_template_arg_p (TREE_VALUE (args)))
11722             return true;
11723           args = TREE_CHAIN (args);
11724         }
11725     }
11726   else
11727     {
11728       int i; 
11729       for (i = 0; i < TREE_VEC_LENGTH (args); ++i)
11730         if (dependent_template_arg_p (TREE_VEC_ELT (args, i)))
11731           return true;
11732     }
11733
11734   return false;
11735 }
11736
11737 /* Returns TRUE if the template TMPL is dependent.  */
11738
11739 bool
11740 dependent_template_p (tree tmpl)
11741 {
11742   /* Template template parameters are dependent.  */
11743   if (DECL_TEMPLATE_TEMPLATE_PARM_P (tmpl)
11744       || TREE_CODE (tmpl) == TEMPLATE_TEMPLATE_PARM)
11745     return true;
11746   /* So are qualified names that have not been looked up.  */
11747   if (TREE_CODE (tmpl) == SCOPE_REF)
11748     return true;
11749   /* So are member templates of dependent classes.  */
11750   if (TYPE_P (CP_DECL_CONTEXT (tmpl)))
11751     return dependent_type_p (DECL_CONTEXT (tmpl));
11752   return false;
11753 }
11754
11755 /* Returns TRUE if the specialization TMPL<ARGS> is dependent.  */
11756
11757 bool
11758 dependent_template_id_p (tree tmpl, tree args)
11759 {
11760   return (dependent_template_p (tmpl)
11761           || any_dependent_template_arguments_p (args));
11762 }
11763
11764 /* TYPE is a TYPENAME_TYPE.  Returns the ordinary TYPE to which the
11765    TYPENAME_TYPE corresponds.  Returns ERROR_MARK_NODE if no such TYPE
11766    can be found.  Note that this function peers inside uninstantiated
11767    templates and therefore should be used only in extremely limited
11768    situations.  */
11769
11770 tree
11771 resolve_typename_type (tree type, bool only_current_p)
11772 {
11773   tree scope;
11774   tree name;
11775   tree decl;
11776   int quals;
11777
11778   my_friendly_assert (TREE_CODE (type) == TYPENAME_TYPE,
11779                       20010702);
11780
11781   scope = TYPE_CONTEXT (type);
11782   name = TYPE_IDENTIFIER (type);
11783
11784   /* If the SCOPE is itself a TYPENAME_TYPE, then we need to resolve
11785      it first before we can figure out what NAME refers to.  */
11786   if (TREE_CODE (scope) == TYPENAME_TYPE)
11787     scope = resolve_typename_type (scope, only_current_p);
11788   /* If we don't know what SCOPE refers to, then we cannot resolve the
11789      TYPENAME_TYPE.  */
11790   if (scope == error_mark_node || TREE_CODE (scope) == TYPENAME_TYPE)
11791     return error_mark_node;
11792   /* If the SCOPE is a template type parameter, we have no way of
11793      resolving the name.  */
11794   if (TREE_CODE (scope) == TEMPLATE_TYPE_PARM)
11795     return type;
11796   /* If the SCOPE is not the current instantiation, there's no reason
11797      to look inside it.  */
11798   if (only_current_p && !currently_open_class (scope))
11799     return error_mark_node;
11800   /* If SCOPE is a partial instantiation, it will not have a valid
11801      TYPE_FIELDS list, so use the original template.  */
11802   scope = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (scope);
11803   /* Enter the SCOPE so that name lookup will be resolved as if we
11804      were in the class definition.  In particular, SCOPE will no
11805      longer be considered a dependent type.  */
11806   push_scope (scope);
11807   /* Look up the declaration.  */
11808   decl = lookup_member (scope, name, /*protect=*/0, /*want_type=*/true);
11809   /* Obtain the set of qualifiers applied to the TYPE.  */
11810   quals = cp_type_quals (type);
11811   /* For a TYPENAME_TYPE like "typename X::template Y<T>", we want to
11812      find a TEMPLATE_DECL.  Otherwise, we want to find a TYPE_DECL.  */
11813   if (!decl)
11814     type = error_mark_node;
11815   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == IDENTIFIER_NODE
11816            && TREE_CODE (decl) == TYPE_DECL)
11817     type = TREE_TYPE (decl);
11818   else if (TREE_CODE (TYPENAME_TYPE_FULLNAME (type)) == TEMPLATE_ID_EXPR
11819            && DECL_CLASS_TEMPLATE_P (decl))
11820     {
11821       tree tmpl;
11822       tree args;
11823       /* Obtain the template and the arguments.  */
11824       tmpl = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 0);
11825       args = TREE_OPERAND (TYPENAME_TYPE_FULLNAME (type), 1);
11826       /* Instantiate the template.  */
11827       type = lookup_template_class (tmpl, args, NULL_TREE, NULL_TREE,
11828                                     /*entering_scope=*/0, 
11829                                     tf_error);
11830     }
11831   else
11832     type = error_mark_node;
11833   /* Qualify the resulting type.  */
11834   if (type != error_mark_node && quals)
11835     type = cp_build_qualified_type (type, quals);
11836   /* Leave the SCOPE.  */
11837   pop_scope (scope);
11838
11839   return type;
11840 }
11841
11842 /* EXPR is an expression which is not type-dependent.  Return a proxy
11843    for EXPR that can be used to compute the types of larger
11844    expressions containing EXPR.  */
11845
11846 tree
11847 build_non_dependent_expr (tree expr)
11848 {
11849   /* Preserve null pointer constants so that the type of things like 
11850      "p == 0" where "p" is a pointer can be determined.  */
11851   if (null_ptr_cst_p (expr))
11852     return expr;
11853   /* Preserve OVERLOADs; the functions must be available to resolve
11854      types.  */
11855   if (TREE_CODE (expr) == OVERLOAD)
11856     return expr;
11857   /* Otherwise, build a NON_DEPENDENT_EXPR.  
11858
11859      REFERENCE_TYPEs are not stripped for expressions in templates
11860      because doing so would play havoc with mangling.  Consider, for
11861      example:
11862
11863        template <typename T> void f<T& g>() { g(); } 
11864
11865      In the body of "f", the expression for "g" will have
11866      REFERENCE_TYPE, even though the standard says that it should
11867      not.  The reason is that we must preserve the syntactic form of
11868      the expression so that mangling (say) "f<g>" inside the body of
11869      "f" works out correctly.  Therefore, the REFERENCE_TYPE is
11870      stripped here.  */
11871   return build (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)));
11872 }
11873
11874 /* ARGS is a TREE_LIST of expressions as arguments to a function call.
11875    Return a new TREE_LIST with the various arguments replaced with
11876    equivalent non-dependent expressions.  */
11877
11878 tree
11879 build_non_dependent_args (tree args)
11880 {
11881   tree a;
11882   tree new_args;
11883
11884   new_args = NULL_TREE;
11885   for (a = args; a; a = TREE_CHAIN (a))
11886     new_args = tree_cons (NULL_TREE, 
11887                           build_non_dependent_expr (TREE_VALUE (a)),
11888                           new_args);
11889   return nreverse (new_args);
11890 }
11891
11892 #include "gt-cp-pt.h"