OSDN Git Service

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