OSDN Git Service

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