OSDN Git Service

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